https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120039
Bug ID: 120039
Summary: [15/16 Regression] Structured binding in condition ICE
since r15-1793
Product: gcc
Version: 15.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: jakub at gcc dot gnu.org
Target Milestone: ---
struct S {
int a; long long b; short c;
explicit operator bool () const noexcept { return true; }
};
template <int N>
void
foo ()
{
S s = S { 1, 2, 3 };
if (auto [sx, sy, sz] : s)
;
}
int
main ()
{
foo <0> ();
}
ICEs starting with r15-1793-gf30bdb1f2d79fd787 :
/opt/notnfs/gcc-bisect/obj/gcc/cc1plus.r16-304 -quiet decomp14.C -std=c++26
decomp14.C: In function ‘void foo()’:
decomp14.C:11:25: error: expected initializer before ‘:’ token
[-Wtemplate-body]
11 | if (auto [sx, sy, sz] : s)
| ^
decomp14.C:11:24: error: expected ‘)’ before ‘:’ token [-Wtemplate-body]
11 | if (auto [sx, sy, sz] : s)
| ~ ^~
| )
decomp14.C: In instantiation of ‘void foo() [with int N = 0]’:
decomp14.C:18:11: required from here
18 | foo <0> ();
| ~~~~~~~~^~
decomp14.C:11:3: internal compiler error: Segmentation fault
11 | if (auto [sx, sy, sz] : s)
| ^~
0x3079199 internal_error(char const*, ...)
../../gcc/diagnostic-global-context.cc:517
0x11d0296 crash_signal
../../gcc/toplev.cc:321
0x402ebd tree_check(tree_node*, char const*, int, char const*, tree_code)
../../gcc/tree.h:3691
0x43e5b2 get_identifier_kind(tree_node*)
../../gcc/cp/cp-tree.h:1315
0x6b2829 lookup_name(tree_node*, LOOK_where, LOOK_want)
../../gcc/cp/name-lookup.cc:8058
0x6b2c71 lookup_name(tree_node*)
../../gcc/cp/name-lookup.cc:8143
0x7cc03e tsubst_expr(tree_node*, tree_node*, int, tree_node*)
../../gcc/cp/pt.cc:21987
0x7c0fd1 tsubst_stmt
../../gcc/cp/pt.cc:20024