[llvm-dev] GCC 5 and -Wstrict-aliasing in JSON.h

Kim Gräsman via llvm-dev llvm-dev at lists.llvm.org
Sat Aug 18 01:44:26 PDT 2018


On Fri, Aug 17, 2018 at 1:17 PM Richard Biener <rguenther at suse.de> wrote:
>
> Properly warning for strict-aliasing violations isn't possible - you'd
> need to conservatively detect must-aliases and track dynamic types.
> If you'd detect a violation the compiler should better not exploit it.
> You may have noticed we do not "miscompile"
>
> int foo (int *p)
> {
>   *p = 1;
>   *(float *)p = 0.0;
>   return *p;
> }
>
> since quite some time but correctly zero *p and return zero.  We
> do not warn for the above though because the access uses a pointer.
> We only warn when we see a declared type of the storage in the very
> same GENERIC expression(!).
>
> > So what exactly is the type Union?  It has a field called buffer.
>
> GCC 6+ contain fixes for sth that later C++ standards appearantly
> need, namely that copy-assignment of aggregates with embedded
> storage copies the dynamic type of said storage.  Otherwise placement
> new should work just fine.

Thanks Richard (and all) good info!

- Kim


More information about the llvm-dev mailing list