[Bug c++/101118] coroutines: unexpected ODR warning for coroutine frame type in LTO builds
iains at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Jun 18 10:46:37 GMT 2021
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101118
--- Comment #2 from Iain Sandoe <iains at gcc dot gnu.org> ---
hmm.
__D.9984.3.4 means that this is a frame variable that is a 'promoted' temporary
(promoted because its lifetime had to be extended across a suspend point by
copying it into the frame).
So, I am supposing that this issue is because such a temporary would almost
certainly not have the same DECL_UID (from which the __D.xxxx is created) in
different TUs.
Which seems to imply that we need to find a way to disambiguate the frame
variable names for LTO. This is, I would expect, another case of something
with local visibility becoming globally visible for LTO (but that's
supposition, not analysed).
the coros testsuite runs torture tests thus:
....
PASS: g++.dg/coroutines/torture/alloc-00-gro-on-alloc-fail.C -O2 -flto
-flto-partition=none (test for excess errors)
PASS: g++.dg/coroutines/torture/alloc-00-gro-on-alloc-fail.C -O2 -flto
-flto-partition=none execution test
PASS: g++.dg/coroutines/torture/alloc-00-gro-on-alloc-fail.C -O2 -flto (test
for excess errors)
PASS: g++.dg/coroutines/torture/alloc-00-gro-on-alloc-fail.C -O2 -flto
execution test
so there is some coverage of LTO - but not multiple TUs :(.
More information about the Gcc-bugs
mailing list