https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67056
Bug ID: 67056 Summary: Wrong code generated Product: gcc Version: 5.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: bal...@yahoo-inc.com Target Milestone: --- Yes, I know a very bad summary. I need some help to narrow it down. When upgrading compile from 4.9.3 to 5.2 1 of our unit tests started failing with segmentation fault. It compiles fine, but generates bad code. There are no warning neither with 4.9.3 nor with 5.2. We are also running the unit tests with latest valgrind. With 5.2 valgrind complains about accessing deleted memory. I am not sure how I best can provide you with what you need in order to investigate this as it fails at runtime and the unit test uses other shared libraries. Any suggestions ? I have made the following observations. 1 - We are building with -O3. The issue is also present at -O2. However if I add -fno-tree-vrp it improves. Then there is no segmentation fault, but valgrind complains about a memory leak. It fails to run a destructor. 2 - I can fix the issue by reordering members in one class from ConfigSnapshot snap; std::atomic<bool> configured; std::atomic<bool> throwException; to std::atomic<bool> configured; std::atomic<bool> throwException; ConfigSnapshot snap; Then valgrind is happy to. No need for tinkering with the compile flags. 3 - I move the implementation of the destructor and the constructor out of the class definition and add __attribute__((noinline)) to them. Then everything works perfectly too. What can I provide that can help you investigate this ? This is the compile command for the unit test. The code that I mention in 2 and 3 are both contained in the file compiled here. g++ -g -O3 -Wuninitialized -Werror -Wall -W -Wchar-subscripts -Wcomment -Wformat -Wparentheses -Wreturn-type -Wswitch -Wtrigraphs -Wunused -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -DGCC_X86_64 -fPIC -D_GLIBCXX_USE_CXX11_ABI=0 -DBOOST_DISABLE_ASSERTS -march=westmere -mtune=intel -Wnon-virtual-dtor -std=c++14 -fvisibility-inlines-hidden -DNOT_BOOST_SPIRIT_THREADSAFE=1 -DNOT_PHOENIX_THREADSAFE=1 -DBOOST_NO_AUTO_PTR=1 -I../.. -I"/home/balder/build/lz4-PREINST/lz4-install/include" -I/home/balder/build/staging_vespalib-HEAD/staging_vespalib-install/include -I"/home/balder/build/ytracelib-PREINST/ytracelib-install/include" -I/home/balder/build/fastlib-HEAD/fastlib-install/include -I/home/balder/build/fnet-HEAD/fnet-install/include -I/home/balder/build/vespalib-HEAD/vespalib-install/include -isystem /home/balder/build/llvm-PREINST/llvm-install/include -isystem /home/balder/build/boost-PREINST/boost-install/include/ -I/home/balder/build/vespalog-HEAD/vespalog-install/include -I/home/balder/build/fastos-HEAD/fastos-install/include -DV_TAG_DATE='"20150729.142010"' -DV_TAG_YINST='"5.81.0.20150729.142010"' -DV_TAG_COMPONENT='"5.81.0"' -DV_TAG_ARCH='"x86_64"' -DV_TAG_SYSTEM='"Linux"' -DV_TAG_SYSTEM_REV='"rhel-6.6"' -DV_TAG_BUILDER='"bal...@honda.trondheim.corp"' -DV_TAG='"CURRENT"' -c configretriever.cpp -o configretriever.o g++ -v [balder@honda configretriever]$ g++ -v Using built-in specs. COLLECT_GCC=g++ COLLECT_LTO_WRAPPER=/home/y/bin64/../libexec/gcc/x86_64-redhat-linux/5.2.0/lto-wrapper Target: x86_64-redhat-linux Configured with: ./configure --prefix=/home/y --enable-languages=c,c++ --host=x86_64-redhat-linux --build=x86_64-redhat-linux --target=x86_64-redhat-linux --disable-bootstrap LDFLAGS='-Wl,-rpath,/home/y/lib64 -L/home/y/lib64' --with-mpc=/home/y --with-gmp=/home/y --with-mpfr=/home/y Thread model: posix gcc version 5.2.0 (GCC)