[libcxx-commits] [libcxx] [libc++] Add a few _LIBCPP_ASSERT_INTERNALs to make sure internal invariants are kept (PR #114575)
Vitaly Buka via libcxx-commits
libcxx-commits at lists.llvm.org
Wed Nov 27 18:46:36 PST 2024
================
@@ -1990,10 +1998,12 @@ private:
}
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pointer __get_long_pointer() _NOEXCEPT {
+ _LIBCPP_ASSERT_INTERNAL(__rep_.__l.__is_long_, "String has to be long when trying to get the long pointer");
return _LIBCPP_ASAN_VOLATILE_WRAPPER(__rep_.__l.__data_);
}
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 const_pointer __get_long_pointer() const _NOEXCEPT {
+ _LIBCPP_ASSERT_INTERNAL(__rep_.__l.__is_long_, "String has to be long when trying to get the long pointer");
----------------
vitalybuka wrote:
Heads up!
This line (just this like) breaks out tests in strange way. Code takes impossible branch.
I suspect either UB in this code, or pre-existing miscompile in clang.
Note:
`_LIBCPP_ASSERT_INTERNAL(__is_long(), ...`
fixes the issue.
Does this ring a bell?
https://github.com/llvm/llvm-project/pull/114575
More information about the libcxx-commits
mailing list