LLVM指针作为函数参数

LLVM指针作为函数参数,llvm,llvm-ir,Llvm,Llvm Ir,我试图将一个全局变量作为参数传递给函数,并在函数内部修改该变量 int readln(int * x) { return scanf("%d", x); } 我的IR代码如下 @n = common global i32 0 declare i32 @readln(i32) declare i32 @writeln(i32) define i32 @main() { entry: %n = load i32, i32* @n, align 4 %calltmp = ca

我试图将一个全局变量作为参数传递给函数,并在函数内部修改该变量

int readln(int * x) {
    return  scanf("%d", x);
}
我的IR代码如下

@n = common global i32 0

declare i32 @readln(i32)

declare i32 @writeln(i32)

define i32 @main() {
entry:
  %n = load i32, i32* @n, align 4
  %calltmp = call i32 @readln(i32 %n)
  %n1 = load i32, i32* @n, align 4
  %calltmp2 = call i32 @writeln(i32 %n1)
  ret i32 0
}
readln在单独的模块中定义为C函数

int readln(int * x) {
    return  scanf("%d", x);
}
运行时,我得到
分段错误11

我做错了什么?

评论是正确的。受此启发

Builder.CreateLoad(Builder.CreateIntToPtr(Value,Type::getInt32PtrTy(TheContext)), "ptr");
Builder.CreateIntToPtr(Value,Type::getInt32PtrTy(TheContext));

在IR中将整数传递给
readln
,但在C代码中它接受指针。