https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117435
Bug ID: 117435
Summary: [contracts] capture of a function parm in a lambda in
a contract does not work
Product: gcc
Version: 15.0
Status: UNCONFIRMED
Keywords: c++-contracts, ice-on-valid-code
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: iains at gcc dot gnu.org
Target Milestone: ---
void f2 (int x) [[pre: []{return x;}()]] {}
int main ()
{
f2 (5);
}
ICES with:
during RTL pass: expand
l.C: In lambda function:
l.C:17:34: internal compiler error: in expand_expr_real_1, at expr.cc:11415
17 | void f2 (int x) [[pre: []{return x;}()]] {}
It would seem that x is not captured, and that is probably because at the point
the lambda is parsed, f2() has not started and therefore the lambda is not
counted as nested (tentative analysis).