强制Clang实际通过值传递struct(无byval)

时间:2018-07-14 10:39:34

标签: c++ clang llvm

考虑以下代码:

struct A {
    int a;
    double b;
    int c;
};

extern "C" void fn(A a) {
    // do something with a
}

Clang将其编译为以下LLVM代码(仅显示相关部分):

%struct.A = type { i32, double, i32 }

define void @fn(%struct.A* byval align 8) #0 {
  ret void
}

为了连接特殊的二进制接口,我需要@fn的签名像

void @fn(%struct.A)

有什么办法可以做到这一点?

1 个答案:

答案 0 :(得分:0)

clang在这里遵循平台ABI以及如何实现参数的实际降低。因此,总的来说,不,您不能期望示例中的任意事情。