Index: lib/ExecutionEngine/JIT/JITEmitter.cpp =================================================================== --- lib/ExecutionEngine/JIT/JITEmitter.cpp +++ lib/ExecutionEngine/JIT/JITEmitter.cpp @@ -691,9 +691,9 @@ if (GlobalAlias *GA = dyn_cast(V)) { // We can only handle simple cases. - if (GlobalValue *GV = getSimpleAliasee(GA->getAliasee())) - return TheJIT->getPointerToGlobal(GV); - return nullptr; + V = getSimpleAliasee(GA->getAliasee()); + if (!V) + return nullptr; } // If we have already compiled the function, return a pointer to its body. Index: test/ExecutionEngine/test-alias.ll =================================================================== --- test/ExecutionEngine/test-alias.ll +++ test/ExecutionEngine/test-alias.ll @@ -0,0 +1,23 @@ +; RUN: %lli %s > /dev/null + +%class.C = type { i32 (...)** } + +@_ZN1CD1Ev = alias void (%class.C*)* @_ZN1CD2Ev + +define x86_thiscallcc void @_ZN1CD2Ev(%class.C* %this) unnamed_addr #0 align 2 { +entry: + %this.addr = alloca %class.C*, align 4 + store %class.C* %this, %class.C** %this.addr, align 4 + %this1 = load %class.C** %this.addr + ret void +} + +define i32 @main() #1 { +entry: + %retval = alloca i32, align 4 + %c = alloca %class.C, align 4 + call x86_thiscallcc void @_ZN1CD1Ev(%class.C* %c) + store i32 0, i32* %retval + %0 = load i32* %retval + ret i32 %0 +}