diff options
author | Chuanqi Xu <yedeng.yd@linux.alibaba.com> | 2023-08-29 14:19:11 +0800 |
---|---|---|
committer | Chuanqi Xu <yedeng.yd@linux.alibaba.com> | 2023-08-29 14:35:27 +0800 |
commit | 20e6515d5c5ff155a54e10f64caef1c76d8d5976 (patch) | |
tree | 0a1fade486f37efb5b5c24f3ba686e936e78b01b /clang/lib/Analysis/FlowSensitive/DataflowAnalysisContext.cpp | |
parent | bbf0733030ae16a1ef19c2a031f805a971e941d2 (diff) | |
download | llvm-20e6515d5c5ff155a54e10f64caef1c76d8d5976.zip llvm-20e6515d5c5ff155a54e10f64caef1c76d8d5976.tar.gz llvm-20e6515d5c5ff155a54e10f64caef1c76d8d5976.tar.bz2 |
[Coroutines] Mark 'coroutine_handle<>::address' as always-inline
Close https://github.com/llvm/llvm-project/issues/65054
The direct issue is still the call to coroutine_handle<>::address()
after await_suspend(). Without optimizations, the current logic will put
the temporary result of await_suspend() to the coroutine frame since the
middle end feel the temporary is escaped from
coroutine_handle<>::address. To fix this fundamentally, we should wrap
the whole logic about await-suspend into a standalone function. See
https://github.com/llvm/llvm-project/issues/64945
And as a short-term workaround, we probably can mark
coroutine_handle<>::address() as always-inline so that the temporary
result may not be thought to be escaped then it won't be put on the
coroutine frame. Although it looks dirty, it is probably do-able since
the compiler are allowed to do special tricks to standard library
components.
Diffstat (limited to 'clang/lib/Analysis/FlowSensitive/DataflowAnalysisContext.cpp')
0 files changed, 0 insertions, 0 deletions