[libcxx-commits] [libcxx] [ASan][libc++] Turn on ASan annotations for short strings (PR #79536)
Nikolas Klauser via libcxx-commits
libcxx-commits at lists.llvm.org
Wed May 8 01:44:45 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;
----------------
philnik777 wrote:
Maybe there needs to be some ASan handling when relocating objects? We're destroying objects after all, which should probably poison memory.
https://github.com/llvm/llvm-project/pull/79536
More information about the libcxx-commits
mailing list