Index: llvm/lib/Transforms/IPO/ThinLTOBitcodeWriter.cpp =================================================================== --- llvm/lib/Transforms/IPO/ThinLTOBitcodeWriter.cpp +++ llvm/lib/Transforms/IPO/ThinLTOBitcodeWriter.cpp @@ -41,8 +41,13 @@ auto Name = ExportGV.getName(); GlobalValue *ImportGV = ImportM.getNamedValue(Name); - if ((!ImportGV || ImportGV->use_empty()) && !PromoteExtra.count(&ExportGV)) - continue; + if (!PromoteExtra.count(&ExportGV)) { + if (!ImportGV) + continue; + ImportGV->removeDeadConstantUsers(); + if (ImportGV->use_empty()) + continue; + } std::string NewName = (Name + ModuleId).str(); Index: llvm/test/Transforms/ThinLTOBitcodeWriter/split-internal3.ll =================================================================== --- /dev/null +++ llvm/test/Transforms/ThinLTOBitcodeWriter/split-internal3.ll @@ -0,0 +1,12 @@ +; RUN: opt -thinlto-bc -o %t %s +; RUN: llvm-modextract -b -n 0 -o %t0 %t +; RUN: llvm-modextract -b -n 1 -o %t1 %t +; RUN: llvm-dis -o - %t0 | FileCheck --check-prefix=M0 %s +; RUN: llvm-dis -o - %t1 | FileCheck --check-prefix=M1 %s + +; M0-NOT: @"g2$ +; M1: @g2 = internal +@g1 = global i8* bitcast (i8** @g2 to i8*), !type !0 +@g2 = internal global i8* null, !type !0 + +!0 = !{i32 0, !"typeid"}