aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/llvm/builder.rs2
-rw-r--r--src/llvm/value.rs11
2 files changed, 7 insertions, 6 deletions
diff --git a/src/llvm/builder.rs b/src/llvm/builder.rs
index da10231..99f26b7 100644
--- a/src/llvm/builder.rs
+++ b/src/llvm/builder.rs
@@ -195,7 +195,7 @@ impl<'llvm> IRBuilder<'llvm> {
let value_ref = unsafe {
LLVMBuildCall2(
self.builder,
- fn_value.ret_type(),
+ fn_value.fn_type(),
fn_value,
args.as_mut_ptr(),
args.len() as libc::c_uint,
diff --git a/src/llvm/value.rs b/src/llvm/value.rs
index 912c14e..98d2e77 100644
--- a/src/llvm/value.rs
+++ b/src/llvm/value.rs
@@ -4,13 +4,12 @@ use llvm_sys::{
analysis::{LLVMVerifierFailureAction, LLVMVerifyFunction},
core::{
LLVMAddIncoming, LLVMAppendExistingBasicBlock, LLVMCountBasicBlocks, LLVMCountParams,
- LLVMDumpValue, LLVMGetParam, LLVMGetReturnType, LLVMGetValueKind, LLVMGetValueName2,
+ LLVMDumpValue, LLVMGetParam, LLVMGetValueKind, LLVMGetValueName2, LLVMGlobalGetValueType,
LLVMIsAFunction, LLVMIsAPHINode, LLVMSetValueName2, LLVMTypeOf,
},
prelude::LLVMValueRef,
LLVMTypeKind, LLVMValueKind,
};
-
use std::ffi::CStr;
use std::marker::PhantomData;
use std::ops::Deref;
@@ -139,13 +138,15 @@ impl<'llvm> FnValue<'llvm> {
FnValue(value)
}
- /// Get a type reference representing the return value of the given function value.
+ /// Get a type reference representing the function type (return + args) of the given function
+ /// value.
///
/// # Panics
///
/// Panics if LLVM API returns a `null` pointer.
- pub fn ret_type(&self) -> Type<'llvm> {
- let type_ref = unsafe { LLVMGetReturnType(LLVMTypeOf(self.value_ref())) };
+ pub fn fn_type(&self) -> Type<'llvm> {
+ // https://github.com/llvm/llvm-project/issues/72798
+ let type_ref = unsafe { LLVMGlobalGetValueType(self.value_ref()) };
Type::new(type_ref)
}