forked from OSchip/llvm-project
8ed97272ab
Summary: Fix NRVO for Gro variable. Previously, we only marked the GRO declaration as an NRVO variable when its QualType and the function return's QualType matched exactly (using operator==). However, this was incorrect for two reasons: 1. We were marking non-class types, such as ints, as being NRVO variables. 2. We failed to handle cases where the canonical types were the same, but the actual `QualType` objects were different. For example, if one was represented by a typedef. (Example: https://godbolt.org/g/3UFgsL) This patch fixes these bugs by marking the Gro variable as supporting NRVO only when `BuildReturnStmt` marks the Gro variable as a coroutine candidate. Reviewers: rsmith, GorNishanov, nicholas Reviewed By: GorNishanov Subscribers: majnemer, cfe-commits Differential Revision: https://reviews.llvm.org/D42343 llvm-svn: 324037 |
||
---|---|---|
.. | ||
Inputs | ||
coro-alloc.cpp | ||
coro-await-domination.cpp | ||
coro-await.cpp | ||
coro-builtins-err.c | ||
coro-builtins.c | ||
coro-cleanup.cpp | ||
coro-dest-slot.cpp | ||
coro-eh-cleanup.cpp | ||
coro-gro-nrvo.cpp | ||
coro-gro.cpp | ||
coro-lambda.cpp | ||
coro-params.cpp | ||
coro-promise-dtor.cpp | ||
coro-ret-void.cpp | ||
coro-return.cpp | ||
coro-unhandled-exception.cpp | ||
microsoft-abi-operator-coawait.cpp |