[Bug c++/81032] New: [5/6/7/8 Regression] ICE with lambda and broken constexpr

reichelt at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Fri Jun 9 06:51:00 GMT 2017


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

            Bug ID: 81032
           Summary: [5/6/7/8 Regression] ICE with lambda and broken
                    constexpr
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Keywords: error-recovery, ice-on-invalid-code
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: reichelt at gcc dot gnu.org
  Target Milestone: ---

The following invalid code snippet triggers an ICE since GCC 5.2.0
(when compiled with -std=c++1y):

================================================
template<typename T> constexpr void foo(T t)
{
  constexpr int i = t;
  [=](auto){ return i; }(0);
}

void bar()
{
  foo(0);
}
================================================

bug.cc: In instantiation of 'constexpr void foo(T) [with T = int]':
bug.cc:9:8:   required from here
bug.cc:3:17: error: 't' is not a constant expression
   constexpr int i = t;
                 ^
bug.cc: In instantiation of 'foo(T)::<lambda(auto:1)> [with auto:1 = int; T =
int]':
bug.cc:4:25:   required from 'constexpr void foo(T) [with T = int]'
bug.cc:9:8:   required from here
bug.cc:4:24: internal compiler error: in finish_member_declaration, at
cp/semantics.c:3003
   [=](auto){ return i; }(0);
                        ^
0x63fa91 finish_member_declaration(tree_node*)
        ../../gcc/gcc/cp/semantics.c:3000
0x8b99bf add_capture(tree_node*, tree_node*, tree_node*, bool, bool)
        ../../gcc/gcc/cp/lambda.c:591
0x8b9f6e add_default_capture(tree_node*, tree_node*, tree_node*)
        ../../gcc/gcc/cp/lambda.c:653
0x95bd2b tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)
        ../../gcc/gcc/cp/pt.c:17821
0x944bf4 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/gcc/cp/pt.c:16521
0x943a23 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/gcc/cp/pt.c:15781
0x9447d6 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/gcc/cp/pt.c:15998
0x9447d6 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/gcc/cp/pt.c:15998
0x971e2b instantiate_decl(tree_node*, bool, bool)
        ../../gcc/gcc/cp/pt.c:22963
0x89414e maybe_instantiate_decl
        ../../gcc/gcc/cp/decl2.c:4994
0x896248 mark_used(tree_node*, int)
        ../../gcc/gcc/cp/decl2.c:5094
0x7f6bcc build_over_call
        ../../gcc/gcc/cp/call.c:8102
0x804a03 build_op_call_1
        ../../gcc/gcc/cp/call.c:4509
0x804a03 build_op_call(tree_node*, vec<tree_node*, va_gc, vl_embed>**, int)
        ../../gcc/gcc/cp/call.c:4535
0x98d17d finish_call_expr(tree_node*, vec<tree_node*, va_gc, vl_embed>**, bool,
bool, int)
        ../../gcc/gcc/cp/semantics.c:2496
0x95bae3 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)
        ../../gcc/gcc/cp/pt.c:17414
0x944bf4 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/gcc/cp/pt.c:16521
0x943100 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/gcc/cp/pt.c:15785
0x94315f tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/gcc/cp/pt.c:15771
0x9447d6 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/gcc/cp/pt.c:15998
Please submit a full bug report, [etc.]


More information about the Gcc-bugs mailing list