This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/53439] New: g++ generates buggy code with optimisation flags
- From: "christophe.prudhomme at feelpp dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Mon, 21 May 2012 15:48:37 +0000
- Subject: [Bug c++/53439] New: g++ generates buggy code with optimisation flags
- Auto-submitted: auto-generated
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53439
Bug #: 53439
Summary: g++ generates buggy code with optimisation flags
Classification: Unclassified
Product: gcc
Version: 4.7.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: christophe.prudhomme@feelpp.org
Dear Maintainer,
* What led up to the situation?
I ported feel++ (http://www.feelpp.org) to gcc47 and found out that it
generates buggy code(generating
segfault) in optimisation mode.
Here are the steps to reproduce it
- install feel++-apps (Debian package, apt-get install feel++-apps)
- execute feel_doc_myfunctionspace (compiled using CMAKE_BUILD_TYPE=Release)
- it generates a segfault
what happens is that a data structure containing only a double data member seem
to be optimized away and became dangling reference (invalid read using
valgrind).
The code crashes at line 220 of doc/manual/tutorial/myfunctionspace.cpp when
evaluating the expression template data structure g defined on line 215.
- in RelWithDebInfo(-g -O1) and Release (-O3) gcc47 generates segfault
- in gcc47 with CMAKE_BUILD_TYPE=Debug, it works without problems
- with gcc45, gcc46, clang31 on Linux and OSX there are no problems at all
in RelWithDebInfo and Release mode (CMAKE_BUILD_TYPE)
Hence I believe that this is a bug in gcc47 code generation/optimisation.
The failures occurs with g++4.7 on macports and Debian unstable
* compiler: g++-4.7 (Debian 4.7.0-8) and Macport g++-mp-4.7 4.7.0_3
* system: Debian unstable and MacOsX Lion 10.7.3 (macports 2.1)
* cmdline
/usr/bin/c++ -DBOOST_UBLAS_MOVE_SEMANTICS -DFEELPP_HAS_MPI=1
-DFEELPP_HAS_MPI_H=1 -DFEELPP_HAS_DLFCN_H -DFEELPP_HAS_DLOPEN
-DBOOST_PARAMETER_MAX_ARITY=20 -DBOOST_TEST_DYN_LINK
-DBOOST_FILESYSTEM_VERSION=3 -DBOOST_NO_SCOPED_ENUMS -DFEELPP_HAS_PETSC
-DFEELPP_HAS_PETSC_H -DFEELPP_HAS_GMSH=1 -D_FEELPP_HAS_GMSH_
-DGMSH_EXECUTABLE=/usr/bin/gmsh -std=c++0x -pedantic -ftemplate-depth-256
-Wno-inline -std=c++0x -g -O1 -I/home/prudhomm/Devel/FEEL/feelpp.git/contrib
-I/usr/lib/openmpi/include -I/usr/lib/openmpi/include/openmpi
-I/usr/include/libxml2 -I/home/prudhomm/Devel/FEEL/feelpp.git/contrib/eigen
-I/home/prudhomm/Devel/FEEL/feelpp.git/contrib/gmm -I/usr/include/ANN
-I/usr/include/python2.7 -I/usr/lib/petscdir/3.2/include
-I/usr/lib/petscdir/3.2/linux-gnu-c-opt/include
-I/usr/lib/slepcdir/3.2/linux-gnu-c-opt/include -I/usr/lib/slepcdir/3.2/include
-I/usr/include/vtk-5.8 -I/usr/include/gmsh
-I/home/prudhomm/Devel/FEEL/relwithdebingo.gcc47
-I/home/prudhomm/Devel/FEEL/feelpp.git
-I/home/prudhomm/Devel/FEEL/feelpp.git/contrib/gmm/include
-I/home/prudhomm/Devel/FEEL/feelpp.git/doc/manual -Wall -Wno-unused
-Wno-sign-compare -o CMakeFiles/feel_doc_laplacian.dir/laplacian.cpp.o -c
/home/prudhomm/Devel/FEEL/feelpp.git/doc/manual/tutorial/laplacian.cpp
the .i files archive is just too big, you can find it here [1]
1. http://feelpp.googlecode.com/files/feel-gcc-ifiles.tar.gz