News for hackers. Stuff that matters.
Re:Falsehoods programmers believe about undefined behavior by rightbyte on Monday November 28, 2022 @08:01AM (#33773077)
Read the gcc mailing list. There is alot of user hostile "fix your broken program" from language lawyers.

I think aliasing rules messes up memcpy if you are dogmatic?

Re:Falsehoods programmers believe about undefined behavior by maccard on Monday November 28, 2022 @08:21AM (#33773286)
Theres a big difference between "the GCC mailing list is full of language lawyers" and "memcpy doesn't work because UB and the compiler Devs fixed it by adding an exception for it".

> I think aliasing rules messes up memcpy if you are dogmatic?

I'm _not_ dogmatic or a language lawyer and aliasing is a total pain in the ass, but that's a whole different topic to compilers getting fundamentals wrong because of language lawyering.

Re:Falsehoods programmers believe about undefined behavior by ilyt on Monday November 28, 2022 @08:20AM (#33773274)
To be fair it is extremely easy to write broken C/C++ program
Re:Falsehoods programmers believe about undefined behavior by anonymoushn on Monday November 28, 2022 @08:54AM (#33773656)
I think memcpy is fine because it operates on a special type that is allowed to alias anything. Strict aliasing has other fun issues like the impossibility of implementing malloc-like functions or the lack of any requirement for access to non-char members of structs to work at all[0].

[0]: https://stackoverflow.com/questions/49298704/how-reason-abou...

Re:Falsehoods programmers believe about undefined behavior by olliej on Monday November 28, 2022 @11:25AM (#33775589)
memcpy is UB because it reads padding bytes in structs.

memmove fails as it requires pointer comparisons between separate allocations, which is UB.

Re:Falsehoods programmers believe about undefined behavior by anonymoushn on Monday November 28, 2022 @12:16PM (#33776306)
Sounds like we shouldn't use memcpy on structs containing padding!
Re:Falsehoods programmers believe about undefined behavior by maccard on Tuesday November 29, 2022 @10:59AM (#33789176)
No, memcpy is fine because it's a language level function. What you _can't_ do is implement your own memcpy alternative safely.
Re:Falsehoods programmers believe about undefined behavior by nayuki on Monday November 28, 2022 @01:18PM (#33777285)
memcpy() and memmove() are language-level functions. They are allowed to do things that cannot be implemented in user code. The C standard library's implementation of these functions have tight integration with the compiler to ensure that it can implement all the required semantics without triggering undefined behavior.
Re:Falsehoods programmers believe about undefined behavior by leni536 on Monday November 28, 2022 @05:26PM (#33780748)
reading padding bytes is not UB.

Comparing unrelated pointers is unspecified, not undefined. It's also an implementation detail of memmove. It can use a magical total order comparison of pointers that is otherwise unavailable to users of the language.