[libcxx-commits] [libcxx] [libc++] Refactor memory allocation in basic_string (PR #128423)

Daniel Thornburgh via libcxx-commits libcxx-commits at lists.llvm.org
Wed Oct 1 14:12:25 PDT 2025


mysterymath wrote:

We've been doing a bisect on an ASAN failure in the Fuchsia project. We haven't quite narrowed it down to this PR yet, but it seems overwhelmingly likely to be the culprit. The code itself appears very innocuous, so it seems likely that there's some issue with the ASAN tagging logic in this refactor. I wish I could be more specific, but does anything jump out about the implementation that might have caused this?

Stack trace:
```
12:52:03.966859 [00615.791] 2255344:2255346> READ of size 24 at 0x20f38d2a4cfb thread T0 (initial-thread)
12:52:03.966861 [00615.792] 2255344:2255346>    #0    0x0000200dab8a5b43 in __asan_memcpy() compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp:63 <libclang_rt.asan.so>+0x60b43
12:52:03.966865 [00615.792] 2255344:2255346>    #1    0x0000200dab8b1acc in UnwindImpl() compiler-rt/lib/asan/asan_thread.h:135 <libclang_rt.asan.so>+0x6cacc
12:52:03.966867 [00615.792] 2255344:2255346>    #2.1  0x0000200dab89aa38 in Unwind() compiler-rt/lib/sanitizer_common/sanitizer_stacktrace.h:130 <libclang_rt.asan.so>+0x55a38
12:52:03.966867 [00615.792] 2255344:2255346>    #2    0x0000200dab89aa38 in Print() compiler-rt/lib/asan/asan_errors.cpp:656 <libclang_rt.asan.so>+0x55a38
12:52:04.010117 [00615.792] 2255344:2255346>    #3    0x0000200dab8ab63b in ~ScopedInErrorReport() compiler-rt/lib/asan/asan_report.cpp:172 <libclang_rt.asan.so>+0x6663b
12:52:04.010124 [00615.792] 2255344:2255346>    #4    0x0000200dab8af016 in ReportGenericError() compiler-rt/lib/asan/asan_report.cpp:536 <libclang_rt.asan.so>+0x6a016
12:52:04.010129 [00615.792] 2255344:2255346>    #5    0x0000200dab8a5b73 in __asan_memcpy() compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp:63 <libclang_rt.asan.so>+0x60b73
12:52:04.010131 [00615.792] 2255344:2255346>    #6    0x0000226acaa8a1f0 in std::__2::basic_string<char, std::__2::char_traits<char>, std::__2::allocator<char>>::basic_string(std::__2::basic_string<char, std::__2::char_traits<char>, std::__2::allocator<char> >*, std::__2::basic_string<char, std::__2::char_traits<char>, std::__2::allocator<char> >&&) ../../prebuilt/third_party/clang/custom/include/c++/v1/string:1032 <<application>>+0x2c31f0
12:52:04.010133 [00615.792] 2255344:2255346>    #7.1  0x0000226acab2fecb in std::__2::operator+<char, std::__2::char_traits<char>, std::__2::allocator<char> >(std::__2::basic_string<char, std::__2::char_traits<char>, std::__2::allocator<char> >&&, std::__2::basic_string<char, std::__2::char_traits<char>, std::__2::allocator<char> >&&) ../../prebuilt/third_party/clang/custom/include/c++/v1/string:3761 <<application>>+0x368ecb
12:52:04.010133 [00615.792] 2255344:2255346>    #7    0x0000226acab2fecb in magma_sysmem::ZirconPlatformSysmem2Connection::ZirconPlatformSysmem2Connection(magma_sysmem::ZirconPlatformSysmem2Connection*, fidl::SyncClient<fuchsia_sysmem2::Allocator>) ../../src/graphics/magma/lib/magma/platform/zircon/zircon_platform_sysmem2_connection.cc:611 <<application>>+0x368ecb
12:52:04.010135 [00615.792] 2255344:2255346>    #8.1  0x0000226acab2c7ed in std::__2::make_unique<magma_sysmem::ZirconPlatformSysmem2Connection, fidl::SyncClient<fuchsia_sysmem2::Allocator>, 0>(fidl::SyncClient<fuchsia_sysmem2::Allocator>&&) ../../prebuilt/third_party/clang/custom/include/c++/v1/__memory/unique_ptr.h:759 <<application>>+0x3657ed
12:52:04.010135 [00615.792] 2255344:2255346>    #8    0x0000226acab2c7ed in magma_sysmem::PlatformSysmemConnection::Import2(uint32_t) ../../src/graphics/magma/lib/magma/platform/zircon/zircon_platform_sysmem2_connection.cc:784 <<application>>+0x3657ed
12:52:04.010138 [00615.792] 2255344:2255346>    #9    0x0000226acab2b576 in magma_sysmem2_connection_import(magma_handle_t, magma_sysmem_connection_t*) ../../src/graphics/lib/magma/src/libmagma/magma_sysmem.cc:13 <<application>>+0x364576
12:52:04.010140 [00615.792] 2255344:2255346>    #10   0x0000226aca9a9d80 in TestConnection::Sysmem(TestConnection*, bool) ../../src/graphics/magma/tests/integration/test_magma.cc:1014 <<application>>+0x1e2d80
12:52:04.010143 [00615.792] 2255344:2255346>    #11   0x0000226aca9ae479 in Magma_SysmemLinearFormatModifier_Test::TestBody(Magma_SysmemLinearFormatModifier_Test*) ../../src/graphics/magma/tests/integration/test_magma.cc:1733 <<application>>+0x1e7479
12:52:04.053313 [00615.792] 2255344:2255346>    #12   0x0000226acabbe27a in testing::Test::Run(testing::Test*) ../../third_party/googletest/src/googletest/src/gtest.cc:2739 <<application>>+0x3f727a
12:52:04.053320 [00615.792] 2255344:2255346>    #13   0x0000226acabc08b0 in testing::TestInfo::Run(testing::TestInfo*) ../../third_party/googletest/src/googletest/src/gtest.cc:2885 <<application>>+0x3f98b0
12:52:04.053323 [00615.792] 2255344:2255346>    #14   0x0000226acabc332f in testing::TestSuite::Run(testing::TestSuite*) ../../third_party/googletest/src/googletest/src/gtest.cc:3063 <<application>>+0x3fc32f
12:52:04.053325 [00615.792] 2255344:2255346>    #15   0x0000226acabea93c in testing::internal::UnitTestImpl::RunAllTests(testing::internal::UnitTestImpl*) ../../third_party/googletest/src/googletest/src/gtest.cc:6054 <<application>>+0x42393c
12:52:04.053329 [00615.792] 2255344:2255346>    #16   0x0000226acabe97c4 in testing::UnitTest::Run(testing::UnitTest*) ../../third_party/googletest/src/googletest/src/gtest.cc:5594 <<application>>+0x4227c4
12:52:04.053331 [00615.792] 2255344:2255346>    #17.1 0x0000226aca97c530 in RUN_ALL_TESTS() ../../third_party/googletest/src/googletest/include/gtest/gtest.h:2334 <<application>>+0x1b5530
12:52:04.053331 [00615.792] 2255344:2255346>    #17   0x0000226aca97c530 in main(int, char**) ../../src/graphics/magma/tests/integration/main.cc:49 <<application>>+0x1b5530
12:52:04.053333 [00615.792] 2255344:2255346>    #18.1 0x00004350eaa5a3b1 in call_main(int, char**, char**, int (*)(int, char**, char**)) ../../zircon/third_party/ulib/musl/src/env/__libc_start_main.c:65 <libc.so>+0x1c53b1
12:52:04.053333 [00615.792] 2255344:2255346>    #18   0x00004350eaa5a3b1 in start_main(const start_params*) ../../zircon/third_party/ulib/musl/src/env/__libc_start_main.c:186 <libc.so>+0x1c53b1
12:52:04.053339 [00615.792] 2255344:2255346>    #19   0x00004350eaa5aef6 in __libc_start_main(zx_handle_t, const void*, zx_handle_t, int (*)(int, char**, char**)) ../../zircon/third_party/ulib/musl/src/env/__libc_start_main.c:274 <libc.so>+0x1c5ef6
12:52:04.053342 [00615.792] 2255344:2255346>    #20   0x0000226aca97c00f in _start ../../sdk/lib/c/startup/crt1.S:153 <<application>>+0x1b500f
12:52:04.096615 [00615.792] 2255344:2255346> 
```

Calling code: https://cs.opensource.google/fuchsia/fuchsia/+/main:src/graphics/magma/lib/magma/platform/zircon/zircon_platform_sysmem2_connection.cc;l=611;drc=e15e75cceb0c00bf6db4c8e0e8f64418202eae2d

https://github.com/llvm/llvm-project/pull/128423


More information about the libcxx-commits mailing list