This is probably good to document, as the behaviour of -fstrict-aliasing differs from gcc in a quite important way (see https://bugs.llvm.org//show_bug.cgi?id=31928) .
Diff Detail
Event Timeline
docs/UsersManual.rst | ||
---|---|---|
1106 | Capitalize Unlike. |
+1 for documenting this, but I have to leave it to the language lawyers for how to fomulate it.
Enables/disables the strict aliasing assumption, which assumes that objects of different types do not share the same location in memory.
I think it needs to say incompatible types at least (and char and unsigned char are also special). And isn't it really about pointers -- the compiler assumes that when dereferncing two pointers of incompatible types, those pointers do not refer to the same memory?
clang does not allow "type-punning" by writing and reading from different union members
I thought clang does allow type-punning through unions, as long as it's in a single function, but that it fails when things get more complicated.
+dannyb who enjoys this stuff ;)
The limitation is really "union accesses must be visibly through a union, and if you try to trick the compiler, you will lose".
That is what we meant to allow, it just is still broken *anyway*
+dannyb who enjoys this stuff ;)
You are so mean :)
LGTM, though it would be nice if we implemented gcc's extension for this at some point... ;)
i have no idea. It looks like it may have been resolved in https://reviews.llvm.org/rL303851? In that case, the NOTE should be removed.
Capitalize Unlike.