http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59469

--- Comment #43 from Markus Trippelsdorf <trippels at gcc dot gnu.org> ---
Created attachment 32045
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=32045&action=edit
new testcase

r207489 fixes the original issue. Thanks.

But llvm still doesn't build with -flto:

FAILED: : && /usr/bin/g++   -fPIC -fvisibility-inlines-hidden -Wall -W
-Wno-unused-parameter -Wwrite-strings -Wno-missing-field-initializers -pedantic
-Wno-long-long -Wno-may
be-uninitialized -Wnon-virtual-dtor -fno-rtti -O3 -DNDEBUG -pipe -march=native
-flto=4 
-Wl,-O1,--hash-style=gnu,--as-needed,--gc-sections,--icf=all,--icf-iterations=3
utils/
FileCheck/CMakeFiles/FileCheck.dir/FileCheck.cpp.o  -o bin/FileCheck  -lrt -ldl
-lcurses -lpthread -lz lib/libLLVMSupport.so -lpthread -lrt -ldl -lcurses
-lpthread -lz -Wl,-r
path,/var/tmp/llvm_build/lib && :
lib/libLLVMSupport.so: error: undefined reference to 'void*
llvm::object_creator<llvm::StringMap<llvm::Timer, llvm::MallocAllocator> >()'
lib/libLLVMSupport.so: error: undefined reference to 'void*
llvm::object_creator<std::string>()'
lib/libLLVMSupport.so: error: undefined reference to 'void*
llvm::object_creator<std::vector<llvm::Timer*, std::allocator<llvm::Timer*> >
>()'
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.

In this case lto produces an undefined symbol for e.g.:
 42902 static ManagedStatic<std::vector<Timer*> > ActiveTimers; 
Before r207489 the symbol was weak.

markus@x4 llvm_build % g++ -fPIC -O3 -flto -shared Timer.ii
markus@x4 llvm_build % nm a.out | grep
_ZN4llvm14object_creatorISt6vectorIPNS_5TimerESaIS3_EEEEPvv
                 U _ZN4llvm14object_creatorISt6vectorIPNS_5TimerESaIS3_EEEEPvv

markus@x4 llvm_build % g++ -fPIC -O3 -flto -flto-partition=none -shared
Timer.ii
markus@x4 llvm_build % nm a.out | grep
_ZN4llvm14object_creatorISt6vectorIPNS_5TimerESaIS3_EEEEPvv
0000000000003770 W _ZN4llvm14object_creatorISt6vectorIPNS_5TimerESaIS3_EEEEPvv

markus@x4 llvm_build % g++ -fPIC -O3 -shared Timer.ii
markus@x4 llvm_build % nm a.out | grep
_ZN4llvm14object_creatorISt6vectorIPNS_5TimerESaIS3_EEEEPvv
0000000000008dc0 W _ZN4llvm14object_creatorISt6vectorIPNS_5TimerESaIS3_EEEEPvv
markus@x4 llvm_build %

Reply via email to