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 via email to