[libcxx-commits] [libcxx] Fix typeinfo for undefined sanitizer (PR #121228)
via libcxx-commits
libcxx-commits at lists.llvm.org
Fri Dec 27 12:41:38 PST 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-libcxx
Author: Valery Mironov (MBkkt)
<details>
<summary>Changes</summary>
This happened to me when I compiled my code on x86_64 linux (ubuntu 24.04) with clang-18 and everything except glibc built from source (llvm 19, llvm source)
I found this solution and luckily it works!
https://github.com/emscripten-core/emscripten/pull/13367 https://github.com/emscripten-core/emscripten/issues/13330
I saw that issue is abandoned, so I decided to try to push it in upstream
---
Full diff: https://github.com/llvm/llvm-project/pull/121228.diff
1 Files Affected:
- (modified) libcxx/include/typeinfo (+2-1)
``````````diff
diff --git a/libcxx/include/typeinfo b/libcxx/include/typeinfo
index 799c6ebd5ecbbf..a900ccaf7e24bb 100644
--- a/libcxx/include/typeinfo
+++ b/libcxx/include/typeinfo
@@ -315,7 +315,8 @@ public:
_LIBCPP_HIDE_FROM_ABI size_t hash_code() const _NOEXCEPT { return __impl::__hash(__type_name); }
- _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX23 bool operator==(const type_info& __arg) const _NOEXCEPT {
+ // We need to inline this code because otherwise we will get a stack overflow with undefined sanitizer.
+ _LIBCPP_HIDE_FROM_ABI _LIBCPP_ALWAYS_INLINE _LIBCPP_CONSTEXPR_SINCE_CXX23 bool operator==(const type_info& __arg) const _NOEXCEPT {
// When evaluated in a constant expression, both type infos simply can't come
// from different translation units, so it is sufficient to compare their addresses.
if (__libcpp_is_constant_evaluated()) {
``````````
</details>
https://github.com/llvm/llvm-project/pull/121228
More information about the libcxx-commits
mailing list