diff options
author | Arsen Arsenović <arsen@aarsen.me> | 2024-07-18 18:16:49 +0200 |
---|---|---|
committer | Thomas Koenig <tkoenig@gcc.gnu.org> | 2024-07-28 19:05:57 +0200 |
commit | 3109e8c991762031b108ae2a022472b989cbb465 (patch) | |
tree | c286edc060fcf5784140a67ff984eef65570463b /libcpp | |
parent | 706ff59b9292cba61c36e9377fdaf5fa98da9d9e (diff) | |
download | gcc-3109e8c991762031b108ae2a022472b989cbb465.zip gcc-3109e8c991762031b108ae2a022472b989cbb465.tar.gz gcc-3109e8c991762031b108ae2a022472b989cbb465.tar.bz2 |
cp/coroutines: do not rewrite parameters in unevaluated contexts
It is possible to use parameters of a parent function of a lambda in
unevaluated contexts without capturing them. By not capturing them, we
work around the usual mechanism we use to prevent rewriting captured
parameters. Prevent this by simply skipping rewrites in unevaluated
contexts. Those won't mind the value not being present anyway.
This prevents an ICE during parameter substitution. In the testcase
from the PR, the rewriting machinery finds a param in the body of the
coroutine, which it did not previously encounter while processing the
coroutine declaration, and that does not have a DECL_VALUE_EXPR, and
fails.
gcc/cp/ChangeLog:
PR c++/111728
* coroutines.cc (rewrite_param_uses): Skip unevaluated
subexpressions.
gcc/testsuite/ChangeLog:
PR c++/111728
* g++.dg/coroutines/pr111728.C: New test.
Diffstat (limited to 'libcpp')
0 files changed, 0 insertions, 0 deletions