[libcxx-commits] [PATCH] D81954: Remove the try/catch codepath if `swap` is `noexcept`.
Louis Dionne via Phabricator via libcxx-commits
libcxx-commits at lists.llvm.org
Tue Jun 16 12:05:45 PDT 2020
ldionne added a comment.
In D81954#2096406 <https://reviews.llvm.org/D81954#2096406>, @mpark wrote:
> @ldionne I didn't know we had a mechanism to check codegen. Could you point me to an example?
For example `clang/test/CodeGenCXX/blocks-cxx11.cpp` (code <https://github.com/llvm/llvm-project/blob/master/clang/test/CodeGenCXX/blocks-cxx11.cpp>). This would mean adding a dependency on `FileCheck`, but that might be OK anyway. WDYT?
================
Comment at: libcxx/include/variant:1046
inline _LIBCPP_INLINE_VISIBILITY
void __swap(__impl& __that) {
if (this->valueless_by_exception() && __that.valueless_by_exception()) {
----------------
mpark wrote:
> mpark wrote:
> > mclow.lists wrote:
> > > ldionne wrote:
> > > > zoecarver wrote:
> > > > > I think it would be good to also mark this `noexcept(__all<(is_nothrow_move_constructible_v<_Types> && is_nothrow_swappable_v<_Types>)...>::value)`.
> > > > Yeah, I was going to suggest the same thing. If it makes sense. If not, why?
> > > You pretty much have to do that, otherwise you get the try/catch/terminate block in the caller
> > I would actually prefer to not mark this `noexcept`, because trying to propagate `noexcept` down doesn't really scale.
> > As in, if we mark this with the `noexcept` condition, we'd also, with the same principle, mark `__generic_construct`,
> > `__visit_alt_at`, and essentially propagate it down to all of the helper functions like `__assign`, etc.
> Hm, I don't think this is true based on https://gcc.godbolt.org/z/68_ZWp
I'm satisfied with this argument.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D81954/new/
https://reviews.llvm.org/D81954
More information about the libcxx-commits
mailing list