1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 12:41:49 +01:00

LowerTypeTests: Rename local functions to avoid collisions with identically named functions in ThinLTO modules.

Without this we can encounter link errors or incorrect behaviour
at runtime as a result of the wrong function being referenced.

Differential Revision: https://reviews.llvm.org/D67945

llvm-svn: 373678
This commit is contained in:
Peter Collingbourne 2019-10-03 23:42:44 +00:00
parent e2903b0e94
commit 14b352ee16
2 changed files with 26 additions and 0 deletions

View File

@ -1887,6 +1887,17 @@ bool LowerTypeTestsModule::lower() {
CfiFunctionLinkage Linkage = P.second.Linkage;
MDNode *FuncMD = P.second.FuncMD;
Function *F = M.getFunction(FunctionName);
if (F && F->hasLocalLinkage()) {
// Locally defined function that happens to have the same name as a
// function defined in a ThinLTO module. Rename it to move it out of
// the way of the external reference that we're about to create.
// Note that setName will find a unique name for the function, so even
// if there is an existing function with the suffix there won't be a
// name collision.
F->setName(F->getName() + ".1");
F = nullptr;
}
if (!F)
F = Function::Create(
FunctionType::get(Type::getVoidTy(M.getContext()), false),

View File

@ -0,0 +1,15 @@
; RUN: opt -S %s -lowertypetests -lowertypetests-summary-action=export -lowertypetests-read-summary=%S/Inputs/exported-funcs.yaml | FileCheck %s
; CHECK: define internal void @external_addrtaken.1()
; CHECK: declare {{.*}} void @external_addrtaken.cfi()
target triple = "x86_64-unknown-linux"
define internal void @external_addrtaken() !type !1 {
ret void
}
!cfi.functions = !{!0}
!0 = !{!"external_addrtaken", i8 0, !1}
!1 = !{i64 0, !"typeid1"}