Author: tstellar Date: Tue Nov 14 11:47:47 2017 New Revision: 318181 URL: http://llvm.org/viewvc/llvm-project?rev=318181&view=rev Log: Merging r310543:
------------------------------------------------------------------------ r310543 | pcc | 2017-08-09 18:07:44 -0700 (Wed, 09 Aug 2017) | 9 lines Linker: Create a function declaration when moving a non-prevailing alias of function type. We were previously creating a global variable of function type, which is invalid IR. This issue was exposed by r304690, in which we started asserting that global variables were of a valid type. Fixes PR33462. Differential Revision: https://reviews.llvm.org/D36438 ------------------------------------------------------------------------ Added: llvm/branches/release_50/test/LTO/Resolution/X86/function-alias-non-prevailing.ll Modified: llvm/branches/release_50/lib/Linker/IRMover.cpp Modified: llvm/branches/release_50/lib/Linker/IRMover.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/branches/release_50/lib/Linker/IRMover.cpp?rev=318181&r1=318180&r2=318181&view=diff ============================================================================== --- llvm/branches/release_50/lib/Linker/IRMover.cpp (original) +++ llvm/branches/release_50/lib/Linker/IRMover.cpp Tue Nov 14 11:47:47 2017 @@ -640,6 +640,10 @@ GlobalValue *IRLinker::copyGlobalValuePr } else { if (ForDefinition) NewGV = copyGlobalAliasProto(cast<GlobalAlias>(SGV)); + else if (SGV->getValueType()->isFunctionTy()) + NewGV = + Function::Create(cast<FunctionType>(TypeMap.get(SGV->getValueType())), + GlobalValue::ExternalLinkage, SGV->getName(), &DstM); else NewGV = new GlobalVariable( DstM, TypeMap.get(SGV->getValueType()), Added: llvm/branches/release_50/test/LTO/Resolution/X86/function-alias-non-prevailing.ll URL: http://llvm.org/viewvc/llvm-project/llvm/branches/release_50/test/LTO/Resolution/X86/function-alias-non-prevailing.ll?rev=318181&view=auto ============================================================================== --- llvm/branches/release_50/test/LTO/Resolution/X86/function-alias-non-prevailing.ll (added) +++ llvm/branches/release_50/test/LTO/Resolution/X86/function-alias-non-prevailing.ll Tue Nov 14 11:47:47 2017 @@ -0,0 +1,17 @@ +; RUN: llvm-as -o %t %s +; RUN: llvm-lto2 run %t -r %t,foo, -r %t,baz,p -o %t2 -save-temps +; RUN: llvm-dis -o - %t2.0.0.preopt.bc | FileCheck %s + +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64--fuchsia" + +; CHECK: declare void @foo() +@foo = weak alias void(), void()* @bar + +define internal void @bar() { + ret void +} + +define void()* @baz() { + ret void()* @foo +} _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits