https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84678

            Bug ID: 84678
           Summary: ICE on invalid code with nested templates
           Product: gcc
           Version: 8.0.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: benni.buch at gmail dot com
  Target Milestone: ---

This was previously part of the Bug 72752 comment 11.


template< typename >
struct Outer{
    template< typename >
    struct Inner;
};

template<>
template< typename _T_ >
class Outer< _T_ >::Inner< _T_ >{};

template struct Outer< int >::Inner< int >;


Known to fail on GCC 5, 6, 7 and 8.


$ g++ -c main.cpp 
main.cpp:9:21: internal compiler error: in retrieve_specialization, at
cp/pt.c:1191
 class Outer< _T_ >::Inner< _T_ >{};
                     ^~~~~~~~~~~~
0x605f2d retrieve_specialization
        ../../gcc/gcc/cp/pt.c:1188
0x9480dd tsubst_template_decl
        ../../gcc/gcc/cp/pt.c:12761
0x94495f tsubst_decl
        ../../gcc/gcc/cp/pt.c:12917
0x93e96f tsubst(tree_node*, tree_node*, int, tree_node*)
        ../../gcc/gcc/cp/pt.c:13809
0x9331ad most_specialized_partial_spec
        ../../gcc/gcc/cp/pt.c:22468
0x9567bf instantiate_class_template_1
        ../../gcc/gcc/cp/pt.c:10519
0x9567bf instantiate_class_template(tree_node*)
        ../../gcc/gcc/cp/pt.c:11052
0x99e07d complete_type(tree_node*)
        ../../gcc/gcc/cp/typeck.c:136
0x956130 do_type_instantiation(tree_node*, tree_node*, int)
        ../../gcc/gcc/cp/pt.c:22733
0x9095cf cp_parser_explicit_instantiation
        ../../gcc/gcc/cp/parser.c:16549
0x90fff1 cp_parser_declaration
        ../../gcc/gcc/cp/parser.c:12730
0x910341 cp_parser_declaration_seq_opt
        ../../gcc/gcc/cp/parser.c:12654
0x910634 cp_parser_translation_unit
        ../../gcc/gcc/cp/parser.c:4561
0x910634 c_parse_file()
        ../../gcc/gcc/cp/parser.c:38993
0xa0f096 c_common_parse_file()
        ../../gcc/gcc/c-family/c-opts.c:1132
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.

$ g++ --version
g++ (GCC) 8.0.1 20180302 (experimental)
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ g++-7 main.cpp 
main.cpp:9:21: internal compiler error: in retrieve_specialization, at
cp/pt.c:1185
 class Outer< _T_ >::Inner< _T_ >{};
                     ^~~~~~~~~~~~
0x5d2616 retrieve_specialization
        ../../gcc/gcc/cp/pt.c:1182
0x5e75e0 tsubst_decl
        ../../gcc/gcc/cp/pt.c:12190
0x5daa0f tsubst(tree_node*, tree_node*, int, tree_node*)
        ../../gcc/gcc/cp/pt.c:13432
0x5dfcaa most_specialized_partial_spec
        ../../gcc/gcc/cp/pt.c:21952
0x5f2ceb instantiate_class_template_1
        ../../gcc/gcc/cp/pt.c:10330
0x5f2ceb instantiate_class_template(tree_node*)
        ../../gcc/gcc/cp/pt.c:10898
0x656c35 complete_type(tree_node*)
        ../../gcc/gcc/cp/typeck.c:133
0x5f459b do_type_instantiation(tree_node*, tree_node*, int)
        ../../gcc/gcc/cp/pt.c:22229
0x64adbf cp_parser_explicit_instantiation
        ../../gcc/gcc/cp/parser.c:16229
0x62bb71 cp_parser_declaration
        ../../gcc/gcc/cp/parser.c:12464
0x6518cb cp_parser_declaration_seq_opt
        ../../gcc/gcc/cp/parser.c:12388
0x651bb2 cp_parser_translation_unit
        ../../gcc/gcc/cp/parser.c:4368
0x651bb2 c_parse_file()
        ../../gcc/gcc/cp/parser.c:38454
0x7225a3 c_common_parse_file()
        ../../gcc/gcc/c-family/c-opts.c:1107
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.

$ g++-7 --version
g++-7 (GCC) 7.3.1 20180226
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ g++-6 main.cpp 
main.cpp:9:21: internal compiler error: in retrieve_specialization, at
cp/pt.c:1183
 class Outer< _T_ >::Inner< _T_ >{};
                     ^~~~~~~~~~~~
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-6/README.Bugs> for instructions.

$ g++-6 --version
g++-6 (Ubuntu/Linaro 6.3.0-18ubuntu2~16.04) 6.3.0 20170519
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ g++-5 main.cpp 
main.cpp:9:21: internal compiler error: in retrieve_specialization, at
cp/pt.c:1061
 class Outer< _T_ >::Inner< _T_ >{};
                     ^
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-5/README.Bugs> for instructions.

$ g++-5 --version
g++-5 (Ubuntu 5.4.1-2ubuntu1~16.04) 5.4.1 20160904
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Reply via email to