AMD64 ABI中的空类会发生什么?

时间:2013-04-24 10:03:30

标签: c++ c++11 abi

我正在查看AMD64 ABI,它似乎没有指定如何传递空类类型。对于空类成员函数,似乎this像往常一样传递,但对于空类,Clang生成的代码似乎只是忽略了这个类。根据AMD64 ABI,这是正确的吗?

1 个答案:

答案 0 :(得分:2)

虽然目前还不清楚究竟是什么问题,但答案很清楚C ++ ABI是什么:

  

对于C ++ ABI,我们将使用IA-64 C ++ ABI并实例化它   适当。该ABI的当前草案可在以下网址获得:

Link to current location of Itanium ABI spec

这说:

  

空类的传递方式与普通类没有区别。如果   传入寄存器时,不能在所有寄存器上设置NaT位   弥补上课。

     

单字节参数槽的内容未指定,并且   被调用者可能不依赖于任何特定值。在Itanium上,   如果参数槽关联,则不得设置关联的NaT位   有一个登记册。

此处提供了另一个提示:

  

将返回一个空类类型的结果,就像它是a一样   包含单个char的struct,即struct S {char c; } ;.该   返回寄存器的实际内容未指定。在Itanium上,   不得设置关联的NaT位。

因此,应该将空类视为包含单个字符的结构,但是从不使用该单个字符。

当然,clang中可能存在与空类有关的错误。虽然我对此表示怀疑,但这是公平的。