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

            Bug ID: 91075
           Summary: Wrong code generated for static variable with local
                    redeclaration
           Product: gcc
           Version: 9.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: andrey.vihrov at gmail dot com
  Target Milestone: ---

Consider the following C++ sample:

  static int x;
  int main()
  {
      int x = 1;
      {
          extern int x;
          return x;
      }
  }

Compiling the above code with "g++ test.cpp" gives:

  /usr/bin/ld: /tmp/ccZhQ3uF.o: in function `main':
  test.cpp:(.text+0x6): undefined reference to `x'
  collect2: error: ld returned 1 exit status

Removing the first "int x;" declaration from main() fixes the problem.
According to Note 3.3.2.11 of [1], the local "extern int x;" declaration should
refer to the static variable from the global namespace.

The problem is reproducible with GCC 9.1.0 and all GCC versions / targets
available on gcc.godbolt.org, while clang and other compilers produce correct
code.

[1] http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf

Reply via email to