http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59469
--- Comment #41 from Markus Trippelsdorf <trippels at gcc dot gnu.org> --- That doesn't fix this bug, because the symbol still gets optimized away with -O3: markus@x4 tmp % g++ -flto -fPIC -shared -fno-rtti -O3 BasicBlock.ii Function.ii markus@x4 tmp % nm a.out | c++filt| grep "transferNodesFromList" markus@x4 tmp % g++ -flto -fPIC -shared -fno-rtti -O2 BasicBlock.ii Function.ii markus@x4 tmp % nm a.out | c++filt| grep "transferNodesFromList" 0000000000000ad0 W llvm::SymbolTableListTraits<llvm::BasicBlock, llvm::Function>::transferNodesFromList(llvm::ilist_traits<llvm::BasicBlock>&, llvm::ilist_iterator<llvm::BasicBlock>, llvm::ilist_iterator<llvm::BasicBlock>) 0000000000000ad0 t llvm::SymbolTableListTraits<llvm::BasicBlock, llvm::Function>::transferNodesFromList(llvm::ilist_traits<llvm::BasicBlock>&, llvm::ilist_iterator<llvm::BasicBlock>, llvm::ilist_iterator<llvm::BasicBlock>) [clone .localalias.0]