forked from OSchip/llvm-project
CodeGen: Do not give local-linkage functions externally available linkage, even temporarily.
When an internal-linkage thunk is code gen'd, CodeGenVTables::emitThunk will first be called with ForVTable=true (which incorrectly set the thunk's linkage to available_externally under the Itanium ABI) and later with ForVTable=false (which reset it to internal). Because we will always see a call with ForVTable=false, this incorrect linkage never ended up in the final IR. However, the temporary presence of this linkage caused us to give such functions a comdat as a result of code introduced in r241102. To avoid this, check that the thunk is externally visible before giving it available_externally linkage. llvm-svn: 241136
This commit is contained in:
parent
035f6dc9d1
commit
8fabc1b47d
|
@ -219,7 +219,7 @@ public:
|
|||
bool ReturnAdjustment) override {
|
||||
// Allow inlining of thunks by emitting them with available_externally
|
||||
// linkage together with vtables when needed.
|
||||
if (ForVTable)
|
||||
if (ForVTable && !Thunk->hasLocalLinkage())
|
||||
Thunk->setLinkage(llvm::GlobalValue::AvailableExternallyLinkage);
|
||||
}
|
||||
|
||||
|
|
|
@ -365,6 +365,7 @@ namespace Test15 {
|
|||
|
||||
// This is from Test5:
|
||||
// CHECK-LABEL: define internal void @_ZThn8_N6Test4B12_GLOBAL__N_11C1fEv(
|
||||
// CHECK-NOT: comdat
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZTv0_n24_N5Test51B1fEv
|
||||
|
||||
// This is from Test10:
|
||||
|
|
Loading…
Reference in New Issue