Late method resolution.
Change-Id: Ic35348022391c3c11a1d4984b9add7b6ef53aa4c
diff --git a/src/compiler_llvm/upcall_compiler.cc b/src/compiler_llvm/upcall_compiler.cc
index 85bfe24..6d14a19 100644
--- a/src/compiler_llvm/upcall_compiler.cc
+++ b/src/compiler_llvm/upcall_compiler.cc
@@ -151,7 +151,15 @@
irb_.CreatePtrDisp(method_object_addr, code_field_offset_value,
accurate_func_type->getPointerTo()->getPointerTo());
- llvm::Value* code_addr = irb_.CreateLoad(code_field_addr);
+ llvm::Value* code_addr_ = irb_.CreateLoad(code_field_addr);
+ llvm::Value* code_addr;
+ // TODO: Inline check
+ llvm::Value* runtime_func = irb_.GetRuntime(runtime_support::EnsureInitialized);
+ llvm::Value* result = irb_.CreateCall2(runtime_func,
+ method_object_addr,
+ irb_.CreatePointerCast(code_addr_,
+ irb_.getJObjectTy()));
+ code_addr = irb_.CreatePointerCast(result, accurate_func_type->getPointerTo());
llvm::Value* retval = irb_.CreateCall(code_addr, args);