首页 > 解决方案 > LLVM 指针作为函数参数

问题描述

我正在尝试将全局变量作为参数传递给函数并在函数内部修改此变量

我的 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);
}

跑步时我得到segmentation fault 11 我做错了什么?

标签: llvmllvm-ir

解决方案


评论是正确的。以此为灵感

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

推荐阅读