gcc std :: regex with -fpack-struct seg fault

Jef*_*ter 5 c++ gcc c++11

考虑以下简单的c ++程序

#include <iostream>
#include <regex>
int main(int argc, char * argv[])
{
    std::regex foobar( "[A]+");

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

使用-fpack-struct = 1进行编译时会出现故障

g++-5 -std=gnu++14 ./fpack_regex.cpp -fpack-struct=1 -o a.out && a.out
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)

g++-5 -std=gnu++14 ./fpack_regex.cpp -o a.out && a.out
Run Code Online (Sandbox Code Playgroud)

工作得很好.

任何线索为什么pack-struct = 1选项可能导致此失败?

pe3*_*e3k 2

开关 -fpack-struct 可能非常危险,例如。请参阅 gcc 文档警告:

我看到的主要问题是您的代码与标准库不二进制兼容(它通常不使用打包的结构进行编译),因此对其的调用(通过传输结构)可能会失败(正如它们实际上所做的那样)。

建议不要使用此开关打包所有结构,但如果您需要打包结构,请仅打包您需要的结构。我还读到,重新编译 libstd 和/或使用相同 fpack-struct 的库可能会有所帮助,但无论如何这是一个有风险的选择。

一些信息也在这里(关于 fpack-struct 的旧 gcc bug),它已经过时,但可能有用:https ://gcc.gnu.org/bugzilla/show_bug.cgi?id=14173