Bug 54569 - Compiling code with -O3 results to segfault in MAME/MESS binary
Summary: Compiling code with -O3 results to segfault in MAME/MESS binary
Status: WAITING
Alias: None
Product: gcc
Classification: Unclassified
Component: ipa (show other bugs)
Version: 4.7.1
: P3 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2012-09-13 14:42 UTC by Alberto Garcia
Modified: 2021-07-15 08:11 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2019-06-10 00:00:00


Attachments
Preprocessed source file (107.03 KB, application/x-bzip)
2012-09-13 14:42 UTC, Alberto Garcia
Details
preprocessed TBB source (426.21 KB, application/gzip)
2021-07-15 08:11 UTC, Alexander Grund
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Alberto Garcia 2012-09-13 14:42:07 UTC
Created attachment 28190 [details]
Preprocessed source file

Debian bug: http://bugs.debian.org/686645

MAME / MESS segfault when compiled with -O3 using GCC 4.7.1. The problem doesn't seem to happen with GCC < 4.7

GCC version:

Target: i486-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 4.7.1-8' --with-bugurl=file:///usr/share/doc/gcc-4.7/README.Bugs --enable-languages=c,c++,go,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.7 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.7 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --enable-targets=all --with-arch-32=i586 --with-tune=generic --enable-checking=release --build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu
gcc version 4.7.1 (Debian 4.7.1-8)

Command line that triggers the bug:

gcc -DCRLF=2 -DINLINE="static inline" -DLSB_FIRST -DNDEBUG -DUSE_SYSTEM_JPEGLIB -DSDLMAME_SDL2=0 -DDISTRO=generic -DSDLMAME_ARCH=-march=pentium2 -DSYNC_IMPLEMENTATION=tc -DSDLMAME_UNIX -DUSE_OPENGL=1 -DUSE_DISPATCH_GL=1 -DSDLMAME_X11 -DNATIVE_DRC=drcbe_x86 -pipe -O3 -fno-strict-aliasing -march=pentium2 -Wall -Wcast-align -Wundef -Wformat-security -Wwrite-strings -Wno-sign-compare -Wno-conversion -DINI_PATH="/etc/mess" -D_GNU_SOURCE=1 -D_REENTRANT -m32 -pthread -pthread -Isrc/mess -Iobj/sdl/mess/layout -Isrc/emu -Iobj/sdl/emu -Iobj/sdl/emu/layout -Isrc/lib/util -Isrc/lib -Isrc/osd -Isrc/osd/sdl -Isrc/debug -include src/osd/sdl/sdlprefix.h -I/usr/include -I/usr/include/gtk-2.0 -I/usr/lib/i386-linux-gnu/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/pango-1.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/glib-2.0 -I/usr/lib/i386-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/gconf/2 -I/usr/include/dbus-1.0 -I/usr/lib/i386-linux-gnu/dbus-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/i386-linux-gnu/glib-2.0/include -I/usr/X11/include -I/usr/X11R6/include -I/usr/openwin/include -Isrc/mame -Iobj/sdl/mame/layout -Isrc/mess/osd -Isrc/mess/osd/sdl -Isrc/mess/tools -Isrc/mess/tools/imgtool -Isrc/mess/tools/castool -Isrc/mess/tools/floptool -x c++ -std=gnu++98 -Woverloaded-virtual -c src/emu/ioport.c -o obj/sdl/emu/ioport.o

(no compiler output).

The problem disappears if the file is compiled without -O3 or with -O3 -fno-ipa-cp-clone.

It also disappears if you remove the '__attribute__((optimize("O0")))' line from the source file.

You can see a few more details -including a backtrace- in the Debian bug report (http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=686645#60).
Comment 1 Lars 2012-10-19 11:16:32 UTC
I am also experienced something that seems like the same bug using mingw cross-compiler 4.7.2 and 4.7.0. After removing the -fipa-cp-clone flag all seems to work.
Comment 2 Martin Liška 2019-06-10 06:50:41 UTC
What a hairy issue. Can please reported reproduce that with a recent GCC compiler?
Comment 3 Alexander Grund 2021-07-15 08:11:15 UTC
Created attachment 51154 [details]
preprocessed TBB source

Might have a related issue: https://github.com/oneapi-src/oneTBB/issues/489

The test segfaults when compiled with -O3 but works when compiled with -fno-ipa-cp-clone

UBSAN reports "runtime error: execution reached an unreachable program point", but only for the crashing version and Valgrind reports an invalid read, also only for the crashing version.

Most notably the crash disappears when the direct call to the template function is replaced by getting a pointer to it first and calling the function through that on the next line, which shouldn't make any difference.