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

            Bug ID: 84655
           Summary: internal compiler error: unexpected expression 'a' of
                    kind template_parm_index
           Product: gcc
           Version: 8.0.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: vegard.nossum at gmail dot com
  Target Milestone: ---

Input (you gotta love this one!):

template<int... a>
struct b {
  int &&c;
  int d[] = [] { auto f(a); };
} const __attribute__((noinline(b<>())));

Output:

$ xgcc -x c++ -S -
<stdin>: In lambda function:
<stdin>:4:23: internal compiler error: unexpected expression 'a' of kind
template_parm_index
0xa3d06b cxx_eval_constant_expression
        /home/vegard/git/gcc/gcc/cp/constexpr.c:4767
0xa4e0da cxx_eval_outermost_constant_expr
        /home/vegard/git/gcc/gcc/cp/constexpr.c:4827
0xa5b966 maybe_constant_value(tree_node*, tree_node*)
        /home/vegard/git/gcc/gcc/cp/constexpr.c:5044
0xaba942 cp_fully_fold(tree_node*)
        /home/vegard/git/gcc/gcc/cp/cp-gimplify.c:2040
0x142d41f store_init_value(tree_node*, tree_node*, vec<tree_node*, va_gc,
vl_embed>**, int)
        /home/vegard/git/gcc/gcc/cp/typeck2.c:848
0xb48878 check_initializer
        /home/vegard/git/gcc/gcc/cp/decl.c:6430
0xbdcd8e cp_finish_decl(tree_node*, tree_node*, bool, tree_node*, int)
        /home/vegard/git/gcc/gcc/cp/decl.c:7084
0x10cc38d tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        /home/vegard/git/gcc/gcc/cp/pt.c:16331
0x10c0128 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        /home/vegard/git/gcc/gcc/cp/pt.c:16464
0x10c0128 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        /home/vegard/git/gcc/gcc/cp/pt.c:16464
0x11d483f tsubst_lambda_expr(tree_node*, tree_node*, int, tree_node*)
        /home/vegard/git/gcc/gcc/cp/pt.c:17203
0x10f7dcb tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)
        /home/vegard/git/gcc/gcc/cp/pt.c:18486
0xd27a93 get_nsdmi(tree_node*, bool, int)
        /home/vegard/git/gcc/gcc/cp/init.c:581
0xdc6d74 walk_field_subobs
        /home/vegard/git/gcc/gcc/cp/method.c:1354
0xdd46a3 synthesized_method_walk
        /home/vegard/git/gcc/gcc/cp/method.c:1744
0xde62f2 get_defaulted_eh_spec(tree_node*, int)
        /home/vegard/git/gcc/gcc/cp/method.c:1776
0x11d647a maybe_instantiate_noexcept(tree_node*, int)
        /home/vegard/git/gcc/gcc/cp/pt.c:23088
0xc64811 mark_used(tree_node*, int)
        /home/vegard/git/gcc/gcc/cp/decl2.c:5229
0x921ac0 build_over_call
        /home/vegard/git/gcc/gcc/cp/call.c:7680
0x9346ff build_new_method_call_1
        /home/vegard/git/gcc/gcc/cp/call.c:9285

$ xgcc --version
xgcc (GCC) 8.0.1 20180301 (experimental)

Built from git c435a9e730c6e8f10da09d58b4fc9aaeb401b0d5 (r258097).

7.3.0 seems to be fine with this.

Test case was minimised by C-Reduce.

Reply via email to