Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
LLVM IR如何将结构传递给函数_Llvm_Llvm Ir - Fatal编程技术网

LLVM IR如何将结构传递给函数

LLVM IR如何将结构传递给函数,llvm,llvm-ir,Llvm,Llvm Ir,我正在制作自己的c语言,我正在尝试将结构传递给函数。结构 表示数组(一个成员是指向数组的指针,另一个成员是长度)。如果我像这样调用函数“test:调用void@test(%structintarray%a)我会得到错误:'%a'是用类型'%structintarray*'定义的,但预期'%structintarray=type{i32*,i32}.但是如果我像这样调用“test:调用void@test(%structintarray*%a)我会得到错误:'@test是用类型'void'定义的(%

我正在制作自己的c语言,我正在尝试将结构传递给函数。结构 表示数组(一个成员是指向数组的指针,另一个成员是长度)。如果我像这样调用函数“test:
调用void@test(%structintarray%a)
我会得到错误:
'%a'是用类型'%structintarray*'定义的,但预期'%structintarray=type{i32*,i32}.
但是如果我像这样调用“test:
调用void@test(%structintarray*%a)
我会得到错误:
'@test是用类型'void'定义的(%structintarray)*'但应为“void(%structintarray*)*”
我不理解第二个错误

我做错了什么? `

产生

%structintarray = type { i32*, i32   } 

define void @test(%structintarray %__p__a) {
entry:  %a = alloca %structintarray, align 4
           store %structintarray %__p__a , %structintarray* %a, align 4

           ret void
}


define i32 @main() {
entry:  %t0 = call noalias i8* @calloc(i32 5 , i32 4)
           %t1 = bitcast i8* %t0 to i32*

           %a = alloca %structintarray, align 4
           %t2 = getelementptr %structintarray, %structintarray* %a, i32 0, i32 0
           store i32* %t1 , i32** %t2, align 4     ; pointer to array
           %t3 = getelementptr %structintarray, %structintarray* %a, i32 0, i32 1
           store i32 5 , i32* %t3, align 4         ; size of array

           call void @test(%structintarray %a)
           ret i32 0
}

alloca
返回一个指针,如果要将其传递给一个按值构造的函数,则需要取消引用(
加载
)它。这非常有效,谢谢。
%structintarray = type { i32*, i32   } 

define void @test(%structintarray %__p__a) {
entry:  %a = alloca %structintarray, align 4
           store %structintarray %__p__a , %structintarray* %a, align 4

           ret void
}


define i32 @main() {
entry:  %t0 = call noalias i8* @calloc(i32 5 , i32 4)
           %t1 = bitcast i8* %t0 to i32*

           %a = alloca %structintarray, align 4
           %t2 = getelementptr %structintarray, %structintarray* %a, i32 0, i32 0
           store i32* %t1 , i32** %t2, align 4     ; pointer to array
           %t3 = getelementptr %structintarray, %structintarray* %a, i32 0, i32 1
           store i32 5 , i32* %t3, align 4         ; size of array

           call void @test(%structintarray %a)
           ret i32 0
}