LLVM 指针作为函数参数
LLVM pointer as a function parameter
我正在尝试将全局变量作为参数传递给函数并在函数内部修改此变量
我有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
我做错了什么?
评论正确。受此启发
Builder.CreateLoad(Builder.CreateIntToPtr(Value,Type::getInt32PtrTy(TheContext)), "ptr");
Builder.CreateIntToPtr(Value,Type::getInt32PtrTy(TheContext));
我正在尝试将全局变量作为参数传递给函数并在函数内部修改此变量
我有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
我做错了什么?
评论正确。受此启发
Builder.CreateLoad(Builder.CreateIntToPtr(Value,Type::getInt32PtrTy(TheContext)), "ptr");
Builder.CreateIntToPtr(Value,Type::getInt32PtrTy(TheContext));