[libcxx-commits] [libcxx] [ASan][libc++] Turn on ASan annotations for short strings (PR #79536)
via libcxx-commits
libcxx-commits at lists.llvm.org
Thu May 9 23:13:06 PDT 2024
================
@@ -736,10 +735,44 @@ public:
//
// This string implementation doesn't contain any references into itself. It only contains a bit that says whether
// it is in small or large string mode, so the entire structure is trivially relocatable if its members are.
+#if !defined(_LIBCPP_HAS_NO_ASAN) && defined(_LIBCPP_INSTRUMENTED_WITH_ASAN)
+ // When compiling with AddressSanitizer (ASan), basic_string cannot be trivially
+ // relocatable. Because the object's memory might be poisoned when its content
+ // is kept inside objects memory (short string optimization), instead of in allocated
+ // external memory. In such cases, the destructor is responsible for unpoisoning
+ // the memory to avoid triggering false positives.
+ // Therefore it's crucial to ensure the destructor is called
+ using __trivially_relocatable = false_type;
----------------
AdvenamTacet wrote:
I see that change as two or three PRs.
- https://github.com/llvm/llvm-project/pull/91702
- Add `__memcpy_with_asan`.
- Update `std::basic_string`.
Last thing is trivial. `__memcpy_with_asan` I hope to be fairly easy, but I am not sure what place is the best to add it. Fist one I just drafted, but didn't test it yet. I should finish everything today, unless we have a discussion about changing direction of that work. Let me know what you think.
https://github.com/llvm/llvm-project/pull/79536
More information about the libcxx-commits
mailing list