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 () ; } } }