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

            Bug ID: 86670
           Summary: unsized static array var is removed but still
                    accessed.
           Product: gcc
           Version: 9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: iains at gcc dot gnu.org
  Target Milestone: ---

Created attachment 44436
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=44436&action=edit
example code showing the issue

gcc-trunk-build$ ./gcc/xgcc -Bgcc ../static-var-removed-and-accessed.c -c
-save-temps -Wall -O0
<no diagnostic for O0..3 or Wextra>

Here we have

static int a[];

which is later assigned to.

===

we don't emit any storage for a, and it is silently changed to an undefined
external.

gcc-trunk-build$ nm static-var-removed-and-accessed.o
         U a
00000000 T foo

gcc-trunk-build$ objdump -dr static-var-removed-and-accessed.o

<snip>

 29:    8b 55 fc                mov    -0x4(%ebp),%edx
  2c:   89 14 85 00 00 00 00    mov    %edx,0x0(,%eax,4)
                        2f: R_386_32    a
  33:   83 45 f8 01             addl   $0x1,-0x8(%ebp)
  37:   81 7d f8 ff 00 00 00    cmpl   $0xff,-0x8(%ebp)

====

The code is wrong, of course, but we are neither diagnosing, nor producing
sensible output.

I noticed this because it fails at assembly time on m32 Darwin (where the
compiler has concluded that 'a' is TU-local, but not present).

Reply via email to