http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59163

            Bug ID: 59163
           Summary: program compiled with g++ -O3 segfaults
           Product: gcc
           Version: 4.8.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: donnyjward at gmail dot com

Created attachment 31232
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=31232&action=edit
Stripped preprocessed C++ source.

The attached test case crashes (segmentation fault) when run. It is a
preprocessed file where I stripped just about everything from <algorithm>
except std::for_each.

gcc -v:

~/src $ gcc -v
Using built-in specs.
COLLECT_GCC=/usr/bin/gcc
COLLECT_LTO_WRAPPER=/app/gcc/4.8.2/libexec/gcc/x86_64-unknown-linux-gnu/4.8.2/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: ./gcc-4.8.2/configure --prefix=/app/gcc/4.8.2
--enable-languages=c,c++ --disable-multilib
Thread model: posix
gcc version 4.8.2 (GCC) 
~/src $ 


The complete command line that triggers the bug:
g++ -O3 -std=c++11 -Wall -Wextra bug2.ii

...then run the output program to see the segmentation fault

I tried building with:
g++ -O3 -std=c++11 -fno-strict-aliasing -fwrapv
-fno-aggressive-loop-optimizations -Wall -Wextra bug2.ii

...and the same crash occurs.

The compiler outputs no messages (no warnings errors etc).

The program runs without crashing if compiled with -O0, -O1, -O2, or -Os.

I compiled with the latest version of clang++ bundled with Mac's XCode, trying
each optimization level and the program runs fine. Same with the latest version
of MSVC (Visual Studio 2013).


The gdb segfault and backtrace:
Program received signal SIGSEGV, Segmentation fault.
0x00000000004007a7 in Quaternion::slerp(Quaternion const&, Quaternion const&)
() at bug2.ii:82
82    {
(gdb) bt
#0  0x00000000004007a7 in Quaternion::slerp(Quaternion const&, Quaternion
const&) () at bug2.ii:82
#1  0x0000000000400475 in main () at bug2.ii:97
(gdb) 


Extra observations:
If I comment out "int parent" in the struct definition so that the struct
becomes

  struct Joint
  {
    //int parent;
    Quaternion orient;
  };

the program no longer segfaults when compiled/run.

Reply via email to