[PATCH] D119927: [Clang] [P2025] More exhaustive tests for NRVO
Arthur O'Dwyer via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Sat Feb 19 07:32:10 PST 2022
Quuxplusone added inline comments.
================
Comment at: clang/test/CodeGenCXX/nrvo.cpp:1537
+ }
+ return x; // FIXME: NRVO could happen if B == false, but doesn't
+}
----------------
Quuxplusone wrote:
> Nit: `s/if/when/`
Serendipitously, I just ran into almost this exact scenario in D120180, where C++20's `reverse_iterator` wants to do basically
```
{
_Iter __tmp = current;
--__tmp;
if constexpr (is_pointer_v<_Iter>) {
return __tmp;
} else {
return std::move(__tmp).operator->();
}
}
```
and so we want NRVO on `__tmp` in the former case but URVO in the latter case. Of course in that specific case, we "want NRVO" only when `__tmp` is a pointer and thus NRVO doesn't apply anyway because pointers are returned in registers. But it would be nice to have a test case for as-close-as-possible to that pattern, if you don't mind adding one.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D119927/new/
https://reviews.llvm.org/D119927
More information about the cfe-commits
mailing list