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

            Bug ID: 71251
           Summary: ICE on invalid code, with unusual template name
           Product: gcc
           Version: 7.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: rippey.e at gmail dot com
  Target Milestone: ---

With g++ trunk this code:

template<int,int>
template<typename>
using U=void;

template<typename,typename>
struct S1;

template<typename T>
struct S1<T,U<T>>{
        template<typename>
        struct S2:S2<T>{};
};

produces the following error message:

b1.cpp:11:16: internal compiler error: tree check: accessed elt 2 of tree_vec
with 1 elts in tsubst, at cp/pt.c:12961
  struct S2:S2<T>{};
                ^
0x100f665 tree_vec_elt_check_failed(int, int, char const*, int, char const*)
        /disk/0/erippey/gcc/b/objdir/../gcc/gcc/tree.c:9950
0x722439 tree_vec_elt_check(tree_node const*, int, char const*, int, char
const*)
        /disk/0/erippey/gcc/b/objdir/../gcc/gcc/tree.h:3477
0x6ea386 tsubst(tree_node*, tree_node*, int, tree_node*)
        /disk/0/erippey/gcc/b/objdir/../gcc/gcc/cp/pt.c:12961
0x6e0dc0 tsubst_copy
        /disk/0/erippey/gcc/b/objdir/../gcc/gcc/cp/pt.c:14077
0x6e679b tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)
        /disk/0/erippey/gcc/b/objdir/../gcc/gcc/cp/pt.c:17161
0x6db38a tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        /disk/0/erippey/gcc/b/objdir/../gcc/gcc/cp/pt.c:15800
0x6fc6ea tsubst_template_args
        /disk/0/erippey/gcc/b/objdir/../gcc/gcc/cp/pt.c:11223
0x6fc9d2 tsubst_template_args
        /disk/0/erippey/gcc/b/objdir/../gcc/gcc/cp/pt.c:11183
0x6e9aac tsubst(tree_node*, tree_node*, int, tree_node*)
        /disk/0/erippey/gcc/b/objdir/../gcc/gcc/cp/pt.c:13213
0x6e9db8 tsubst(tree_node*, tree_node*, int, tree_node*)
        /disk/0/erippey/gcc/b/objdir/../gcc/gcc/cp/pt.c:12836
0x6fc6ea tsubst_template_args
        /disk/0/erippey/gcc/b/objdir/../gcc/gcc/cp/pt.c:11223
0x7011e4 tsubst_aggr_type
        /disk/0/erippey/gcc/b/objdir/../gcc/gcc/cp/pt.c:11420
0x6e9bd1 tsubst(tree_node*, tree_node*, int, tree_node*)
        /disk/0/erippey/gcc/b/objdir/../gcc/gcc/cp/pt.c:12889
0x6fe4ec lookup_template_class_1
        /disk/0/erippey/gcc/b/objdir/../gcc/gcc/cp/pt.c:8366
0x6fe4ec lookup_template_class(tree_node*, tree_node*, tree_node*, tree_node*,
int, int)
        /disk/0/erippey/gcc/b/objdir/../gcc/gcc/cp/pt.c:8638
0x811b9d finish_template_type(tree_node*, tree_node*, int)
        /disk/0/erippey/gcc/b/objdir/../gcc/gcc/cp/semantics.c:3137
0x79d143 cp_parser_template_id
        /disk/0/erippey/gcc/b/objdir/../gcc/gcc/cp/parser.c:14913
0x79d3fa cp_parser_class_name
        /disk/0/erippey/gcc/b/objdir/../gcc/gcc/cp/parser.c:21210
0x78e6a1 cp_parser_qualifying_entity
        /disk/0/erippey/gcc/b/objdir/../gcc/gcc/cp/parser.c:6238
0x78e6a1 cp_parser_nested_name_specifier_opt
        /disk/0/erippey/gcc/b/objdir/../gcc/gcc/cp/parser.c:5924
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.

This appears to be a regression.  The above code works on version 4.8.5 (though
it does require "--std=c++11" there).

Reply via email to