我有这样的C代码:
typedef struct {
int a1;
double a2;
} str3;
...
extern void someVoidFunc(int a);
extern str3 someStrFunc(int b);
int main() {
someVoidFunc(0);
someStrFunc(0);
return 0;
}
在 llvm 表示中,这看起来像:
%struct.str3 = type { i32, double}
...
call void @someVoidFunc(i32 0)
call void @someStrFunc(%struct.str3* sret %tmp, i32 0)
...
所以,我不明白,为什么 llvm 更改签名,以及我如何理解哪种类型真正返回函数?