[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#805616: gcc-4.9: GCC++ 4.9 compiler had ICE (internal compiler error)



verified in g++-4.9 built from svn:

$ g++-4.9.x -v -std=gnu++11 -fno-strict-aliasing -O2 -c 805616..ii
Using built-in specs.
COLLECT_GCC=/opt/software/x86_64/gcc-4.9.x/bin/g++-4.9.x
Target: x86_64-unknown-linux-gnu
Configured with: ../gcc-4_9-branch/configure --prefix=/opt/software/x86_64/gcc-4.9.x --program-suffix=-4.9.x --enable-languages=c,c++,fortran --enable-checking
Thread model: posix
gcc version 4.9.4 20151121 (prerelease) (GCC) 
COLLECT_GCC_OPTIONS='-v' '-std=gnu++11' '-fno-strict-aliasing' '-O2' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64'
 /opt/software/x86_64/gcc-4.9.x/libexec/gcc/x86_64-unknown-linux-gnu/4.9.4/cc1plus -fpreprocessed 805616..ii -quiet -dumpbase 805616..ii -mtune=generic -march=x86-64 -auxbase 805616. -O2 -std=gnu++11 -version -fno-strict-aliasing -o /tmp/ccmf892Y.s
GNU C++ (GCC) version 4.9.4 20151121 (prerelease) (x86_64-unknown-linux-gnu)
        compiled by GNU C version 4.9.4 20151121 (prerelease), GMP version 6.0.0, MPFR version 3.1.3, MPC version 1.0.3
GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096
GNU C++ (GCC) version 4.9.4 20151121 (prerelease) (x86_64-unknown-linux-gnu)
        compiled by GNU C version 4.9.4 20151121 (prerelease), GMP version 6.0.0, MPFR version 3.1.3, MPC version 1.0.3
GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096
Compiler executable checksum: c8476ec2ebe2d7bd0e72dc80313e75a7
In file included from /new-hd1/extra/ishikawa/TB-3HG/NEW-COMMSRC/mozilla/gfx/skia/skia/include/effects/SkLayerRasterizer.h:13:0,
                 from /new-hd1/extra/ishikawa/TB-3HG/NEW-COMMSRC/mozilla/gfx/2d/DrawTargetSkia.cpp:24,
                 from /home/ishikawa/objdir-tb3/gfx/2d/Unified_cpp_gfx_2d0.cpp:83:
/new-hd1/extra/ishikawa/TB-3HG/NEW-COMMSRC/mozilla/gfx/skia/skia/include/core/SkRasterizer.h: In member function ‘virtual void mozilla::gfx::DrawTargetTiled::PopClip()’:
/new-hd1/extra/ishikawa/TB-3HG/NEW-COMMSRC/mozilla/gfx/skia/skia/include/core/SkRasterizer.h:21:7: internal compiler error: Segmentation fault
0xb78fff crash_signal
        ../../gcc-4_9-branch/gcc/toplev.c:337
0x9a1669 is_gimple_reg_type
        ../../gcc-4_9-branch/gcc/gimple-expr.h:75
0x9a1669 is_gimple_val(tree_node*)
        ../../gcc-4_9-branch/gcc/gimple-expr.c:814
0xb9e35d verify_types_in_gimple_min_lval
        ../../gcc-4_9-branch/gcc/tree-cfg.c:3007
0xb9e35d verify_types_in_gimple_reference
        ../../gcc-4_9-branch/gcc/tree-cfg.c:3149
0xba12d0 verify_gimple_assign_single
        ../../gcc-4_9-branch/gcc/tree-cfg.c:4004
0xba12d0 verify_gimple_assign
        ../../gcc-4_9-branch/gcc/tree-cfg.c:4183
0xba12d0 verify_gimple_stmt
        ../../gcc-4_9-branch/gcc/tree-cfg.c:4417
0xba7cad verify_gimple_in_cfg(function*)
        ../../gcc-4_9-branch/gcc/tree-cfg.c:4882
0xace5d2 execute_function_todo
        ../../gcc-4_9-branch/gcc/passes.c:1853
0xacef33 execute_todo
        ../../gcc-4_9-branch/gcc/passes.c:1887
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <http://gcc.gnu.org/bugs.html> for instructions.

There are several google hits for
  "segmentation fault is_gimple_reg_type"
  "segmentation fault is_gimple_reg_type is_gimple_val"
but all with different backtraces
  "segmentation fault is_gimple_reg_type is_gimple_val verify_types_in_gimple_min_lval"
gets no results at all, so this seems to be a new PR :-)


Minimizing the example to something managable ... and understood by different compiler versions as well

4.9.4 (SVN): segfault
4.9.3-5 (Debian): segfault
4.8.5-1 (Debian): pass
4.7.4-3 (Debian): compile error
5.2.1-23 (Debian): segfault, different backtrace


$ g++-4.9.x -v -std=gnu++11 -O2 -c 805616_min.hM.min.ii
Using built-in specs.
COLLECT_GCC=/opt/software/x86_64/gcc-4.9.x/bin/g++-4.9.x
Target: x86_64-unknown-linux-gnu
Configured with: ../gcc-4_9-branch/configure --prefix=/opt/software/x86_64/gcc-4.9.x --program-suffix=-4.9.x --enable-languages=c,c++,fortran --enable-checking
Thread model: posix
gcc version 4.9.4 20151121 (prerelease) (GCC) 
COLLECT_GCC_OPTIONS='-v' '-std=gnu++11' '-O2' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64'
 /opt/software/x86_64/gcc-4.9.x/libexec/gcc/x86_64-unknown-linux-gnu/4.9.4/cc1plus -fpreprocessed 805616_min.hM.min.ii -quiet -dumpbase 805616_min.hM.min.ii -mtune=generic -march=x86-64 -auxbase 805616_min.hM.min -O2 -std=gnu++11 -version -o /tmp/ccdwpTpg.s
GNU C++ (GCC) version 4.9.4 20151121 (prerelease) (x86_64-unknown-linux-gnu)
        compiled by GNU C version 4.9.4 20151121 (prerelease), GMP version 6.0.0, MPFR version 3.1.3, MPC version 1.0.3
GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096
GNU C++ (GCC) version 4.9.4 20151121 (prerelease) (x86_64-unknown-linux-gnu)
        compiled by GNU C version 4.9.4 20151121 (prerelease), GMP version 6.0.0, MPFR version 3.1.3, MPC version 1.0.3
GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096
Compiler executable checksum: c8476ec2ebe2d7bd0e72dc80313e75a7
805616_min.hM.min.ii: In member function ‘virtual void mozilla::gfx::DrawTargetTiled::PopClip()’:
805616_min.hM.min.ii:266:1: internal compiler error: Segmentation fault
 }
 ^
0xb78fff crash_signal
        ../../gcc-4_9-branch/gcc/toplev.c:337
0x9a1669 is_gimple_reg_type
        ../../gcc-4_9-branch/gcc/gimple-expr.h:75
0x9a1669 is_gimple_val(tree_node*)
        ../../gcc-4_9-branch/gcc/gimple-expr.c:814
0xb9e35d verify_types_in_gimple_min_lval
        ../../gcc-4_9-branch/gcc/tree-cfg.c:3007
0xb9e35d verify_types_in_gimple_reference
        ../../gcc-4_9-branch/gcc/tree-cfg.c:3149
0xba12d0 verify_gimple_assign_single
        ../../gcc-4_9-branch/gcc/tree-cfg.c:4004
0xba12d0 verify_gimple_assign
        ../../gcc-4_9-branch/gcc/tree-cfg.c:4183
0xba12d0 verify_gimple_stmt
        ../../gcc-4_9-branch/gcc/tree-cfg.c:4417
0xba7cad verify_gimple_in_cfg(function*)
        ../../gcc-4_9-branch/gcc/tree-cfg.c:4882
0xace5d2 execute_function_todo
        ../../gcc-4_9-branch/gcc/passes.c:1853
0xacef33 execute_todo
        ../../gcc-4_9-branch/gcc/passes.c:1887
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <http://gcc.gnu.org/bugs.html> for instructions.


$ g++-5 -v -std=gnu++11 -O2 -c 805616_min.hM.min.ii
Using built-in specs.
COLLECT_GCC=g++-5
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 5.2.1-23' --with-bugurl=file:///usr/share/doc/gcc-5/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-5 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-5-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-5-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-5-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --with-arch-32=i586 --with-abi=m64 
 -
-with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 5.2.1 20151028 (Debian 5.2.1-23) 
COLLECT_GCC_OPTIONS='-v' '-std=gnu++11' '-O2' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64'
 /usr/lib/gcc/x86_64-linux-gnu/5/cc1plus -fpreprocessed 805616_min.hM.min.ii -quiet -dumpbase 805616_min.hM.min.ii -mtune=generic -march=x86-64 -auxbase 805616_min.hM.min -O2 -std=gnu++11 -version -o /tmp/ccd5OSD0.s
GNU C++11 (Debian 5.2.1-23) version 5.2.1 20151028 (x86_64-linux-gnu)
        compiled by GNU C version 5.2.1 20151028, GMP version 6.0.0, MPFR version 3.1.3, MPC version 1.0.3
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
GNU C++11 (Debian 5.2.1-23) version 5.2.1 20151028 (x86_64-linux-gnu)
        compiled by GNU C version 5.2.1 20151028, GMP version 6.0.0, MPFR version 3.1.3, MPC version 1.0.3
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: b2a6525278b1491f0a6ecf9a642a19f0
805616_min.hM.min.ii:266:1: internal compiler error: Segmentation fault
 }
 ^
0xaa865f crash_signal
        ../../src/gcc/toplev.c:383
0xc79fc9 int_size_in_bytes(tree_node const*)
        ../../src/gcc/tree.c:2894
0xff71e9 ipa_icf::sem_item::add_expr(tree_node const*, inchash::hash&)
        ../../src/gcc/ipa-icf.c:1283
0xff70ec ipa_icf::sem_item::add_expr(tree_node const*, inchash::hash&)
        ../../src/gcc/ipa-icf.c:1289
0xffccb9 ipa_icf::sem_function::hash_stmt(gimple_statement_base*, inchash::hash&)
        ../../src/gcc/ipa-icf.c:1425
0xffd200 ipa_icf::sem_function::init()
        ../../src/gcc/ipa-icf.c:1210
0xffd664 ipa_icf::sem_function::parse(cgraph_node*, bitmap_obstack*)
        ../../src/gcc/ipa-icf.c:1474
0xffe9da ipa_icf::sem_item_optimizer::parse_funcs_and_vars()
        ../../src/gcc/ipa-icf.c:2455
0xa02e86 execute_ipa_summary_passes(ipa_opt_pass_d*)
        ../../src/gcc/passes.c:2156
0x7bb2dd ipa_passes
        ../../src/gcc/cgraphunit.c:2196
0x7bb2dd symbol_table::compile()
        ../../src/gcc/cgraphunit.c:2312
0x7bc64f symbol_table::compile()
        ../../src/gcc/timevar.h:110
0x7bc64f symbol_table::finalize_compilation_unit()
        ../../src/gcc/cgraphunit.c:2461
0x65b5f2 cp_write_global_declarations()
        ../../src/gcc/cp/decl2.c:4766
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <file:///usr/share/doc/gcc-5/README.Bugs> for instructions.

No google hits for that one either ...
Someone should file a new PR.


Andreas
typedef long unsigned int size_t ;
extern void
abort
	() throw ( ) __attribute__ ( ( __noreturn__ ) ) ;
typedef unsigned int uint32_t ;
template < typename _Tp , _Tp __v >
struct integral_constant
{
	static constexpr _Tp value = __v ;
} ;
typedef integral_constant < bool , true > true_type ;
typedef integral_constant < bool , false > false_type ;
template < typename ... >
struct __and_ ;
template < typename _B1 >
struct __and_ < _B1 >
	: public _B1
{
} ;
template < typename _Pp >
struct __not_
	: public integral_constant < bool , ! _Pp :: value >
{
} ;
template < bool , typename _Tp = void >
struct enable_if ;
template < typename _Tp >
struct enable_if < true , _Tp >
{
	typedef _Tp type ;
} ;
template < typename ... _Cond >
using _Require = typename enable_if < __and_ < _Cond ... > :: value > :: type ;
namespace std __attribute__ ( ( ) )
{
	template < typename _Alloc , typename _Tp >
	class __alloctr_rebind_helper
	{
		template < typename _Alloc2 , typename _Tp2 >
		static constexpr true_type _S_chk ( typename _Alloc2 :: template rebind < _Tp2 > :: other * ) ;
	public:
		using __type = decltype ( _S_chk < _Alloc , _Tp > ( nullptr ) ) ;
	} ;
	template < typename _Alloc , typename _Tp , bool = __alloctr_rebind_helper < _Alloc , _Tp > :: __type :: value >
	struct __alloctr_rebind ;
	template < typename _Alloc , typename _Tp >
	struct __alloctr_rebind < _Alloc , _Tp >
	{
		typedef typename _Alloc :: template rebind < _Tp > :: other __type ;
	} ;
	template < typename _Alloc >
	struct allocator_traits
	{
		typedef typename _Alloc :: value_type value_type ;
		template < typename _Tp >
		static typename _Tp :: pointer
		_S_pointer_helper
		(
			_Tp *
		) ;
		typedef decltype ( _S_pointer_helper ( ( _Alloc * ) 0 ) ) __pointer ;
		typedef __pointer pointer ;
		template < typename _Tp >
		static typename _Tp :: size_type
		_S_size_type_helper
		(
			_Tp *
		) ;
		typedef decltype ( _S_size_type_helper ( ( _Alloc * ) 0 ) ) __size_type ;
		typedef __size_type size_type ;
		template < typename _Tp >
		using rebind_alloc = typename __alloctr_rebind < _Alloc , _Tp > :: __type ;
		template < typename _Tp >
		struct __destroy_helper
		{
			template < typename >
			static false_type
			__test
				() ;
			using type = decltype ( __test < _Alloc > () ) ;
		} ;
		template < typename _Tp >
		using __has_destroy = typename __destroy_helper < _Tp > :: type ;
		template < typename _Tp >
		static _Require < __not_ < __has_destroy < _Tp > > >
		_S_destroy ( _Alloc & , _Tp * __p )
		{
			__p -> ~_Tp () ;
		}
		static void
		deallocate ( _Alloc & __a , pointer __p , size_type __n )
		{
			__a . deallocate ( __p , __n ) ;
		}
		template < class _Tp >
		static void
		destroy ( _Alloc & __a , _Tp * __p )
		{
			_S_destroy ( __a , __p ) ;
		}
	} ;
}
namespace __gnu_cxx __attribute__ ( ( ) )
{
	template < typename _Alloc >
	struct __alloc_traits
		: std :: allocator_traits < _Alloc >
	{
		typedef std :: allocator_traits < _Alloc > _Base_type ;
		typedef typename _Base_type :: value_type value_type ;
		typedef value_type & reference ;
		template < typename _Tp >
		struct rebind
		{
			typedef typename _Base_type :: template rebind_alloc < _Tp > other ;
		} ;
	} ;
}
namespace __gnu_cxx __attribute__ ( ( ) )
{
	template < typename _Tp >
	class new_allocator
	{
	public:
		typedef size_t size_type ;
		typedef _Tp * pointer ;
		typedef _Tp value_type ;
		template < typename _Tp1 >
		struct rebind
		{
			typedef new_allocator other ;
		} ;
		void
		deallocate ( pointer __p , size_type )
		{
			operator delete ( __p ) ;
		}
	} ;
}
template < typename _Tp >
using __allocator_base = __gnu_cxx :: new_allocator < _Tp > ;
template < typename _Tp >
class allocator
	: public __allocator_base < _Tp >
{
} ;
namespace std __attribute__ ( ( ) )
{
	template < typename _Tp , typename _Alloc >
	struct _Vector_base
	{
		typedef typename __gnu_cxx :: __alloc_traits < _Alloc > :: template rebind < _Tp > :: other _Tp_alloc_type ;
		typedef typename __gnu_cxx :: __alloc_traits < _Tp_alloc_type > :: pointer pointer ;
		struct _Vector_impl
			: public _Tp_alloc_type
		{
			pointer _M_start ;
			pointer _M_finish ;
			pointer _M_end_of_storage ;
		} ;
		~_Vector_base
			() noexcept
		{
			_M_deallocate ( this -> _M_impl . _M_start , this -> _M_impl . _M_end_of_storage - this -> _M_impl . _M_start ) ;
		}
		_Vector_impl _M_impl ;
		void
		_M_deallocate ( pointer __p , size_t __n )
		{
			typedef __gnu_cxx :: __alloc_traits < _Tp_alloc_type > _Tr ;

			if ( __p )
			{
				_Tr :: deallocate ( _M_impl , __p , __n ) ;
			}
		}
	} ;
	template < typename _Tp , typename _Alloc = allocator < _Tp > >
	class vector
		: protected _Vector_base < _Tp , _Alloc >
	{
		typedef _Vector_base < _Tp , _Alloc > _Base ;
		typedef typename _Base :: _Tp_alloc_type _Tp_alloc_type ;
		typedef __gnu_cxx :: __alloc_traits < _Tp_alloc_type > _Alloc_traits ;
		typedef typename _Alloc_traits :: reference reference ;
		typedef size_t size_type ;
	public:
		size_type
		size
			() const noexcept ;
		reference
		operator []
		(
			size_type __n
		) noexcept ;
		reference
		back
			() noexcept ;
		void
		pop_back () noexcept
		{
			_Alloc_traits :: destroy ( this -> _M_impl , this -> _M_impl . _M_finish ) ;
		}
	} ;
}
template < class T >
class RefPtr
{
	T * mRawPtr ;
public:
	T *
	operator -> () const
	{
		if ( __builtin_expect ( ! ! ! mRawPtr != 0 , 0 ) )
		{
			abort () ;
		}
	}
} ;
class DrawTarget
{
public:
	virtual void
	PopClip
		() = 0 ;
} ;
struct Tile
{
	RefPtr < DrawTarget > mDrawTarget ;
} ;
namespace mozilla
{
	namespace gfx
	{
		struct TileInternal
			: public Tile
		{
		} ;
		class DrawTargetTiled
			: public DrawTarget
		{
			virtual void
			PopClip
				() override ;
			std :: vector < TileInternal > mTiles ;
			std :: vector < std :: vector < uint32_t > > mClippedOutTilesStack ;
		} ;
	}
}
namespace mozilla
{
	namespace gfx
	{
		void
		DrawTargetTiled :: PopClip ()
		{
			for ( size_t i = 0 ; i < mTiles . size () ; )
			{
				mTiles [ i ] . mDrawTarget -> PopClip () ;
			}

			std :: vector < uint32_t > & clippedTiles = mClippedOutTilesStack . back () ;
			mClippedOutTilesStack . pop_back () ;
		}
	}
}

Reply to: