diff options
author | Bruno Cardoso Lopes <bcardosolopes@users.noreply.github.com> | 2023-09-22 02:52:05 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-21 22:52:05 -0700 |
commit | 34415fd611e2d92da570bc4adf931a6410fb406e (patch) | |
tree | d6fed77224d578665849464ed014e24aa513b14b /llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp | |
parent | c618e131611c8d24a64dc3899f32a9aa52f18182 (diff) | |
download | llvm-34415fd611e2d92da570bc4adf931a6410fb406e.zip llvm-34415fd611e2d92da570bc4adf931a6410fb406e.tar.gz llvm-34415fd611e2d92da570bc4adf931a6410fb406e.tar.bz2 |
[Clang][LLVM][Coroutines] Prevent __coro_gro from outliving __promise (#66706)
When dealing with short-circuiting coroutines (e.g. expected), the
deferred calls that resolve the get_return_object are currently being
emitted after we delete the coroutine frame.
This was caught by ASAN when using optimizations -O1 and above:
optimizations after inlining would place the __coro_gro in the heap, and
subsequent delete of the coroframe followed by the conversion -> BOOM.
This patch forbids the GRO to be placed in the coroutine frame, by
adding a new metadata node that can be attached to `alloca`
instructions.
Fix #49843
Diffstat (limited to 'llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp')
0 files changed, 0 insertions, 0 deletions