我看到一个奇怪的崩溃试图在对齐的struct / class周围使用包装器模板类。使用clang编译时,以下程序崩溃,同时与gcc和visual studio一起正常工作。
struct __attribute__( ( aligned( 16 ) ) ) AlignedStruct
{
AlignedStruct( ) { }
float x,y,z,w;
};
template <typename P1> class Wrapper
{
public:
P1 Inner;
};
int main( )
{
Wrapper<AlignedStruct> * t1 = new Wrapper<AlignedStruct>( );
return 1;
}
崩溃似乎是在调用AlignedStruct构造函数时(如果我删除它,clang编译的代码也会运行)。
有谁能解释这里发生了什么?
谢谢!
编辑:
崩溃发生在cygwin32和cygwin64下的clang 3.4.2 和Ubuntu 14.04(x32)和Ubuntu 14.10(x32)下的clang 3.4.1
但是,在使用FreeBSD 10.1(x32)和OS X Yosemite下的clang 3.4.1进行测试时,不会发生这种情况。我尝试过使用编译标记,但我似乎无法对这些标记产生任何影响,所以我只是在运行clang++ file.cpp