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.]