[LLVMbugs] [Bug 19590] New: clang produces an unneeded static initializer

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Mon Apr 28 15:27:15 PDT 2014


            Bug ID: 19590
           Summary: clang produces an unneeded static initializer
           Product: clang
           Version: unspecified
          Hardware: PC
                OS: All
            Status: NEW
          Severity: normal
          Priority: P
         Component: LLVM Codegen
          Assignee: unassignedclangbugs at nondot.org
          Reporter: nicolasweber at gmx.de
                CC: llvmbugs at cs.uiuc.edu
    Classification: Unclassified

$ cat si.cc
enum LinkerInitialized { LINKER_INITIALIZED };

struct Bar {
  // Note: No definition.
  static const LinkerInitialized LINKER_INITIALIZED;

class Foo {
  // Note: `x` isn't used, definition not needed.
  explicit Foo(LinkerInitialized /*x*/) {}

  int lockword_;


int main() {}

$ third_party/llvm-build/Release+Asserts/bin/clang++ -O2 -o foo -fPIC si.cc
$ readelf -SW foo | grep init_arr  [18] .init_array       INIT_ARRAY     
0000000000600dd0 000dd0 000008 00  WA  0   0  8

gcc doesn't do this:

$ g++ -O2 -o foo -fPIC si.cc
$ readelf -SW foo | grep init_arr

This is true for the .o too:

$ g++ -O2  -c -fPIC si.cc
$ nm si.o | grep GLOBAL

$ third_party/llvm-build/Release+Asserts/bin/clang++ -O2 -c -fPIC si.cc
$ nm si.o | grep GLOBAL0000000000000000 t _GLOBAL__I_si.cc

(the "-fPIC" is so that gcc adds the filename to the _GLOBAL__ symbol. clang
only adds that with the "[(questionable but useful) patch] Let codegen write
the filename for translation unit initializer functions" patch on cfe-commits.)

You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20140428/6d1fcd53/attachment.html>

More information about the llvm-bugs mailing list