Index: lib/Transforms/IPO/GlobalOpt.cpp =================================================================== --- lib/Transforms/IPO/GlobalOpt.cpp +++ lib/Transforms/IPO/GlobalOpt.cpp @@ -1743,7 +1743,7 @@ return false; if (const Comdat *C = GV.getComdat()) - if (!GV.hasLocalLinkage() && NotDiscardableComdats.count(C)) + if (NotDiscardableComdats.count(C)) return false; bool Dead; Index: test/Transforms/GlobalOpt/preserve-comdats.ll =================================================================== --- test/Transforms/GlobalOpt/preserve-comdats.ll +++ test/Transforms/GlobalOpt/preserve-comdats.ll @@ -24,7 +24,7 @@ store i8 42, i8* @simple_global ret void } -; CHECK-NOT: @init_simple_global() +; CHECK: define internal fastcc void @init_simple_global() unnamed_addr comdat($comdat_global) define i8* @use_simple() { ret i8* @simple_global