[libcxx-commits] [PATCH] D116334: [libc++] Remove std::basic_string's base class in ABIv2
Mark de Wever via Phabricator via libcxx-commits
libcxx-commits at lists.llvm.org
Tue Dec 28 10:45:59 PST 2021
Mordante added inline comments.
================
Comment at: libcxx/include/string:1724
void __throw_out_of_range() const {
-#ifndef _LIBCPP_NO_EXCEPTIONS
- __basic_string_common<true>::__throw_out_of_range();
-#else
- _VSTD::abort();
-#endif
+ _VSTD::__throw_out_of_range("basic_string");
}
----------------
Quuxplusone wrote:
> (1) My understanding is that the `_LIBCPP_NO_EXCEPTIONS` branch needs to remain. Someone who compiles with `-D_LIBCPP_NO_EXCEPTIONS` must not see any calls to `__throw_out_of_range` popping up at link time.
>
> (2) I have the (more nebulous) impression that we call a dedicated library function `__basic_string_common<true>::__throw_out_of_range()` instead of `__throw_out_of_range("basic_string")` on purpose, because `std::string` is used so heavily, and we don't want the user to pay for the 13-byte string literal `"basic_string"` in every single one of their TUs. (This rationale does not apply in lesser-used places such as `deque`.) However, off the top of my head I don't know that we have ever benchmarked this or that anyone really cares.
(1) No that branch can be removed. I had the same initial feeling but `include/stdexcept` has the branch.
(2) That may be an issue indeed. I wonder whether the linker is/can be smart enough to remove the duplicates.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D116334/new/
https://reviews.llvm.org/D116334
More information about the libcxx-commits
mailing list