https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84293

            Bug ID: 84293
           Summary: system-header macro expansion location gives
                    unexpected warning
           Product: gcc
           Version: 8.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: nathan at gcc dot gnu.org
  Target Milestone: ---

Created attachment 43379
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=43379&action=edit
source file

The attached tescase (2 files) gives the following warning:

nathans@devvm2452:104>./xgcc -B./ -nostdinc -isystem .   -c pun.c
pun.c: In function 'init':
pun.c:7:3: warning: dereferencing type-punned pointer will break
strict-aliasing rules [-Wstrict-aliasing]
   INCREF_BAD (&thing); /* Warning. */
   ^~~~~~~~~~

The actual dereference is happening in a system header file, so this should be
protected.  And indeed that's what happens in the expansion of 'INCREF_OK
(&thing)'  The only difference being the BAD one uses a typedef name and the OK
one uses 'struct name'.

In the typedef case we think the cast location is the macro expansion point. 
in the struct name case we think it's the name token's location.

If one adds -save-temps the warning goes away.  We no longer see the macro
expansions.

Reply via email to