[LLVMdev] LLVM ERROR: Program used external function 'X.foo' which could not be resolved!
charles quarra
charllsnotieneningunputocorreo at gmail.com
Sun Mar 17 12:29:00 PDT 2013
Hi,
I have this module:
; ModuleID = './executableModule'
@typeInfo0 = constant { i32 } zeroinitializer
@typeInfo1 = constant { i32 } { i32 1 }
@typeInfo2 = constant { i32 } { i32 2 }
@typeInfo3 = constant { i32 } { i32 3 }
@typeInfo4 = constant { i32 } { i32 4 }
@typeInfo5 = constant { i32 } { i32 5 }
@typeInfo6 = constant { i32 } { i32 6 }
declare void @print32Int(i32, i8*)
declare void @print64Int(i64, i8*)
declare void @printStr(i8*)
declare void @throwCppException(i32)
declare void @deleteOurException(i8*)
declare i8* @createOurException(i32)
declare i32 @_Unwind_RaiseException(i8*) noreturn
declare i32 @_Unwind_Resume(i8*) noreturn
declare i32 @ourPersonality(i32, i32, i64, i8*, i8*)
declare i32 @llvm.eh.typeid.for(i8*) nounwind readnone
define i32 @Y.foo2(i32) {
%h = alloca i32
%g = alloca i32
%bar = alloca i32
store i32 %0, i32* %bar
%"argument read" = load i32* %bar
%"Code::Op::Mul" = mul i32 %"argument read", 5
store i32 %"Code::Op::Mul", i32* %g
%read = load i32* %g
%"calling function" = call i32 @X.foo(i32 %read)
store i32 %"calling function", i32* %h
%"argument read1" = load i32* %bar
%read2 = load i32* %h
%addtmp = add i32 %"argument read1", %read2
ret i32 %addtmp
}
define i32 @X.foo(i32) {
%g = alloca i32
%bar = alloca i32
store i32 %0, i32* %bar
%"argument read" = load i32* %bar
%addtmp = add i32 %"argument read", 2
store i32 %addtmp, i32* %g
%"argument read1" = load i32* %bar
%read = load i32* %g
%"Code::Op::Mul" = mul i32 %"argument read1", %read
ret i32 %"Code::Op::Mul"
}
I try to grab a function from it by this code
dumpModulesToBitcodeFile( std::string("./executableModule"), llvmModule);
llvm::Function* result = llvmModule->getFunction("X.foo");
OurFPM = new llvm::FunctionPassManager(llvmModule);
llvm::EngineBuilder eB(llvmModule);
eB.setEngineKind(llvm::EngineKind::JIT);
llvmEngine = eB.create();
but it fails at the next line:
llvmEngine->getPointerToFunction(result);
with this error
LLVM ERROR: Program used external function 'X.foo' which could not be resolved!
I don't have any idea why this is failing, as it should be clear from
the code, i'm running the bitcode dump just before the function grab,
and the 'X.foo' function is clearly present in the module
any ideas? i'm using llvm-3.1
More information about the llvm-dev
mailing list