https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87185
Bug ID: 87185
Summary: ICE in prune_lambda_captures()
Product: gcc
Version: 8.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: P at draigBrady dot com
Target Milestone: ---
bug 84726 introduced a regression in GCC 8.0 causing a compiler crash with:
void f() { const int i=0; [&]() noexcept {i;}; }
This crashes in prune_lambda_captures as we assume const_vars.get(var) in
lambda.c returns non NULL.
The reason it's NULL is that var_to_maybe_prune() is not a subset of
mark_const_cap_r(). Specifically is_constant_capture_proxy() returns false
in mark_const_cap_r(), but in var_to_maybe_prune() we return candidates
where is_normal_capture_proxy() is false.
Also "noexcept" is significant here since it stops traversal
down the statement list subtree, thus not populating const_vars.