我正在看AMD64 ABI http://www.cs.tufts.edu/comp/40/readings/amd64-abi.pdf并且它似乎没有指定如何传递空类类型。对于空类成员函数,似乎this
照常传递,但对于空类,Clang 生成的代码似乎只是忽略此类。根据 AMD64 ABI,这是否正确?
虽然尚不清楚问题到底是什么,但关于 C++ ABI 是什么,答案非常明确:
对于 C++ ABI,我们将使用 IA-64 C++ ABI 并实例化它
适当地。该 ABI 的当前草案可在以下位置获取:
链接到 Itanium ABI 规范的当前位置 http://mentorembedded.github.io/cxx-abi/abi.html
这说:
空课的通过和普通课没有什么区别。如果
传入寄存器时,不得在所有寄存器上设置 NaT 位
补课。
单字节参数槽的内容未指定,并且
被调用者可能不依赖于任何特定值。在安腾上,
如果参数槽已关联,则不得设置关联的 NaT 位
与寄存器。
另一个提示可以在这里找到:
空类类型的结果将被返回,就好像它是一个
包含单个字符的结构体,即 struct S { char c; };。这
返回寄存器的实际内容未指定。在安腾上,
不得设置关联的 NaT 位。
因此,空类应该被视为包含单个字符的结构,但永远不会使用该单个字符。
当然也有可能是有bugclang
关于空班级。虽然我对此表示怀疑,但公平地说。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)