У меня есть C код, как это:Как я могу понять, когда LLVM изменил подпись функции
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 represatation это выглядит как:
%struct.str3 = type { i32, double}
...
call void @someVoidFunc(i32 0)
call void @someStrFunc(%struct.str3* sret %tmp, i32 0)
...
Так, я не понял, почему llvm изменить подпись, и как я могу понять, какой тип действительно возвращает функцию?
Я предполагаю, что это способ 'llvm' (' clang'?) Реализовать [оптимизацию возвращаемого значения] (http://en.wikipedia.org/wiki/Return_value_optimization) – Collin
Я скомпилирую C-файл (в bitecode) с опцией -O0 (да, через clang) – alex
Я думаю, вам придется копать, хотя код Клана, чтобы понять это наверняка, но может быть, что возвращение типы классов таким образом настолько фундаментальны, что комманды clang компилируют, что даже '-O0' не отключит его – Collin