http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57138



             Bug #: 57138

           Summary: ICE in instantiate_class_template with variadic

                    templates, using declarations, save-temps and

                    precompiled header

    Classification: Unclassified

           Product: gcc

           Version: 4.8.0

            Status: UNCONFIRMED

          Severity: normal

          Priority: P3

         Component: c++

        AssignedTo: unassig...@gcc.gnu.org

        ReportedBy: jmetca...@acm.org





Created attachment 29990

  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=29990

Failing test case - test.cpp



Getting a segmentation fault in some variadic template code. The bug seems very

sensitive to small changes in input (e.g. removing a std::cout line causes the

compile to succeed, or give a compile error without ICE). Managed to reduce it

to a small test case, but removing further code (even unused code) causes the

issue to go away, as does removing the (empty) precompiled header, or the

-save-temps in the command line below.



Command lines:

g++ -Winvalid-pch -std=gnu++11 -I.. test.hpp -o test.hpp.gch

g++ -Winvalid-pch -std=gnu++11 -I.. -save-temps -c test.cpp



GCC Version:

Using built-in specs.

Target: x86_64-unknown-linux-gnu

Configured with: ../configure --enable-languages=c,c++ --disable-checking

--disable-multilib --disable-multiarch --disable-nls --enable-lto

--enable-libstdcxx-time

Thread model: posix

gcc version 4.8.0 (GCC)



Also tested with 4.7.2, which produces the same error for this test case,

though is also sensitive to input and sometimes succeeds where 4.8 fails, or

vice versa. 







Output from 4.8.0:

 g++ -Winvalid-pch -std=gnu++11 -I.. -save-temps -c test.cpp

test.cpp: In instantiation of 'struct specify_some<C>':

test.cpp:46:20:   required from here

test.cpp:29:55: internal compiler error: Segmentation fault

     using type = Type<specified_args..., more_args...>;

                                                       ^

0x86943f crash_signal

        ../../gcc/toplev.c:332

0x508fd8 tsubst(tree_node*, tree_node*, int, tree_node*)

        ../../gcc/cp/pt.c:11227

0x50c992 tsubst_template_args

        ../../gcc/cp/pt.c:9607

0x5091b8 tsubst(tree_node*, tree_node*, int, tree_node*)

        ../../gcc/cp/pt.c:11465

0x50952d tsubst(tree_node*, tree_node*, int, tree_node*)

        ../../gcc/cp/pt.c:11107

0x50eb00 lookup_template_class_1

        ../../gcc/cp/pt.c:7363

0x50eb00 lookup_template_class(tree_node*, tree_node*, tree_node*, tree_node*,

int, int)

        ../../gcc/cp/pt.c:7562

0x5090af tsubst(tree_node*, tree_node*, int, tree_node*)

        ../../gcc/cp/pt.c:11337

0x50816e tsubst_decl

        ../../gcc/cp/pt.c:10625

0x509694 tsubst(tree_node*, tree_node*, int, tree_node*)

        ../../gcc/cp/pt.c:11081

0x507f73 tsubst_decl

        ../../gcc/cp/pt.c:10037

0x509694 tsubst(tree_node*, tree_node*, int, tree_node*)

        ../../gcc/cp/pt.c:11081

0x516817 instantiate_class_template_1

        ../../gcc/cp/pt.c:8818

0x516817 instantiate_class_template(tree_node*)

        ../../gcc/cp/pt.c:9054

0x56241d complete_type(tree_node*)

        ../../gcc/cp/typeck.c:131

0x5624bd complete_type_or_maybe_complain(tree_node*, tree_node*, int)

        ../../gcc/cp/typeck.c:143

0x4ec949 xref_basetypes(tree_node*, tree_node*)

        ../../gcc/cp/decl.c:12105

0x543ef1 cp_parser_class_head

        ../../gcc/cp/parser.c:18895

0x543ef1 cp_parser_class_specifier_1

        ../../gcc/cp/parser.c:18194

0x543ef1 cp_parser_class_specifier

        ../../gcc/cp/parser.c:18463







And from 4.7:



test.cpp: In instantiation of 'struct specify_some<C>':

test.cpp:46:20:   required from here

test.cpp:44:33: internal compiler error: Segmentation fault







Please excuse the slightly horrific use of variadic templates...

Reply via email to