I'm trying to experiment with Apple Clang's AddressSanitizer but I'm facing very wired issues. I'm currently using Clang 13.0.1 on both mac and godbolt.
Let me explain.
On godbolt, compiling with the -fsanitize=address
flag, the following snippet produces a memory leak, as expected
int main() {
auto *p = new int; // leak
return 0;
}
and godbolt returns
=================================================================
==1==ERROR: LeakSanitizer: detected memory leaks
Direct leak of 4 byte(s) in 1 object(s) allocated from:
#0 0x4f9078 in operator new(unsigned long) /root/llvm-project/compiler-rt/lib/asan/asan_new_delete.cpp:95
#1 0x4fc878 in main /app/example.cpp:4:15
#2 0x7f9fda7b70b2 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x240b2)
SUMMARY: AddressSanitizer: 4 byte(s) leaked in 1 allocation(s).
This is perfectly identical to gcc behaviour.
Then, deleting the dangling pointer, the AddressSanitizer won't complain anymore
int main() {
auto *p = new int;
delete p; // no leak
return 0;
}
So far, so good. Problems start when compiling on a real Mac with clang++
.
Compiling the first example with -fsanitizer=address
(or any other piece of code), it simply returns the following message:
main(8227,0x118347600) malloc: nano zone abandoned due to inability to preallocate reserved vm space.
and no leaks are detected.
Surfing around the web, I found that Apple's version of clang has also the flag -fsanitize=leak
, but that option, as suggested here, is not available on the clang version provided by Xcode, so I tried to install clang 13 via brew.
Then I tried to compile a completely empty main
function
int main() {}
with the -fsanitize=leak
and it produces a ton of leaks:
main(8321,0x111169600) malloc: nano zone abandoned due to inability to preallocate reserved vm space.
=================================================================
==8321==ERROR: LeakSanitizer: detected memory leaks
Direct leak of 1888 byte(s) in 59 object(s) allocated from:
#0 0x10f830b7d in wrap_calloc+0x5d (libclang_rt.lsan_osx_dynamic.dylib:x86_64+0x8b7d)
#1 0x7ff81452d84f in realizeClassWithoutSwift(objc_class*, objc_class*)+0x88 (libobjc.A.dylib:x86_64h+0x884f)
#2 0x7ff81452bb3f in map_images_nolock+0x161b (libobjc.A.dylib:x86_64h+0x6b3f)
#3 0x7ff81452a4bb in map_images+0x42 (libobjc.A.dylib:x86_64h+0x54bb)
#4 0x1110f82ca in invocation function for block in dyld4::RuntimeState::setObjCNotifiers(void (*)(unsigned int, char const* const*, mach_header const* const*), void (*)(char const*, mach_header const*), void (*)(char const*, mach_header const*))+0x112 (dyld:x86_64+0xf2ca)
#5 0x1110f3798 in dyld4::RuntimeState::withLoadersReadLock(void () block_pointer)+0x28 (dyld:x86_64+0xa798)
#6 0x1110f81b1 in dyld4::RuntimeState::setObjCNotifiers(void (*)(unsigned int, char const* const*, mach_header const* const*), void (*)(char const*, mach_header const*), void (*)(char const*, mach_header const*))+0x51 (dyld:x86_64+0xf1b1)
#7 0x11110ba84 in dyld4::APIs::_dyld_objc_notify_register(void (*)(unsigned int, char const* const*, mach_header const* const*), void (*)(char const*, mach_header const*), void (*)(char const*, mach_header const*))+0x4e (dyld:x86_64+0x22a84)
#8 0x7ff81452a329 in _objc_init+0x51a (libobjc.A.dylib:x86_64h+0x5329)
#9 0x7ff8144e0992 in _os_object_init+0xc (libdispatch.dylib:x86_64+0x2992)
#10 0x7ff8144ee1b7 in libdispatch_init+0x136 (libdispatch.dylib:x86_64+0x101b7)
#11 0x7ff81f476897 in libSystem_initializer+0xed (libSystem.B.dylib:x86_64+0x1897)
#12 0x1110fddda in invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const+0xb5 (dyld:x86_64+0x14dda)
#13 0x111124256 in invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const*) const+0xf1 (dyld:x86_64+0x3b256)
#14 0x11111b859 in invocation function for block in dyld3::MachOFile::forEachSection(void (dyld3::MachOFile::SectionInfo const&, bool, bool&) block_pointer) const+0x22c (dyld:x86_64+0x32859)
#15 0x1110eadb2 in dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void (load_command const*, bool&) block_pointer) const+0x80 (dyld:x86_64+0x1db2)
#16 0x11111b5ea in dyld3::MachOFile::forEachSection(void (dyld3::MachOFile::SectionInfo const&, bool, bool&) block_pointer) const+0xb2 (dyld:x86_64+0x325ea)
#17 0x111123dad in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const*) const+0x1d1 (dyld:x86_64+0x3adad)
#18 0x1110fdd0d in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const+0x8f (dyld:x86_64+0x14d0d)
#19 0x111104229 in dyld4::PrebuiltLoader::runInitializers(dyld4::RuntimeState&) const+0x1d (dyld:x86_64+0x1b229)
#20 0x111111495 in dyld4::APIs::runAllInitializersForMain()+0x25 (dyld:x86_64+0x28495)
#21 0x1110ef37c in dyld4::prepare(dyld4::APIs&, dyld3::MachOAnalyzer const*)+0xd72 (dyld:x86_64+0x637c)
#22 0x1110ee4d3 in start+0x183 (dyld:x86_64+0x54d3)
Direct leak of 1888 byte(s) in 59 object(s) allocated from:
#0 0x10f830b7d in wrap_calloc+0x5d (libclang_rt.lsan_osx_dynamic.dylib:x86_64+0x8b7d)
#1 0x7ff81452d84f in realizeClassWithoutSwift(objc_class*, objc_class*)+0x88 (libobjc.A.dylib:x86_64h+0x884f)
#2 0x7ff81452d91b in realizeClassWithoutSwift(objc_class*, objc_class*)+0x154 (libobjc.A.dylib:x86_64h+0x891b)
#3 0x7ff81452bb3f in map_images_nolock+0x161b (libobjc.A.dylib:x86_64h+0x6b3f)
#4 0x7ff81452a4bb in map_images+0x42 (libobjc.A.dylib:x86_64h+0x54bb)
#5 0x1110f82ca in invocation function for block in dyld4::RuntimeState::setObjCNotifiers(void (*)(unsigned int, char const* const*, mach_header const* const*), void (*)(char const*, mach_header const*), void (*)(char const*, mach_header const*))+0x112 (dyld:x86_64+0xf2ca)
#6 0x1110f3798 in dyld4::RuntimeState::withLoadersReadLock(void () block_pointer)+0x28 (dyld:x86_64+0xa798)
#7 0x1110f81b1 in dyld4::RuntimeState::setObjCNotifiers(void (*)(unsigned int, char const* const*, mach_header const* const*), void (*)(char const*, mach_header const*), void (*)(char const*, mach_header const*))+0x51 (dyld:x86_64+0xf1b1)
#8 0x11110ba84 in dyld4::APIs::_dyld_objc_notify_register(void (*)(unsigned int, char const* const*, mach_header const* const*), void (*)(char const*, mach_header const*), void (*)(char const*, mach_header const*))+0x4e (dyld:x86_64+0x22a84)
#9 0x7ff81452a329 in _objc_init+0x51a (libobjc.A.dylib:x86_64h+0x5329)
#10 0x7ff8144e0992 in _os_object_init+0xc (libdispatch.dylib:x86_64+0x2992)
#11 0x7ff8144ee1b7 in libdispatch_init+0x136 (libdispatch.dylib:x86_64+0x101b7)
#12 0x7ff81f476897 in libSystem_initializer+0xed (libSystem.B.dylib:x86_64+0x1897)
#13 0x1110fddda in invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const+0xb5 (dyld:x86_64+0x14dda)
#14 0x111124256 in invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const*) const+0xf1 (dyld:x86_64+0x3b256)
#15 0x11111b859 in invocation function for block in dyld3::MachOFile::forEachSection(void (dyld3::MachOFile::SectionInfo const&, bool, bool&) block_pointer) const+0x22c (dyld:x86_64+0x32859)
#16 0x1110eadb2 in dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void (load_command const*, bool&) block_pointer) const+0x80 (dyld:x86_64+0x1db2)
#17 0x11111b5ea in dyld3::MachOFile::forEachSection(void (dyld3::MachOFile::SectionInfo const&, bool, bool&) block_pointer) const+0xb2 (dyld:x86_64+0x325ea)
#18 0x111123dad in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const*) const+0x1d1 (dyld:x86_64+0x3adad)
#19 0x1110fdd0d in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const+0x8f (dyld:x86_64+0x14d0d)
#20 0x111104229 in dyld4::PrebuiltLoader::runInitializers(dyld4::RuntimeState&) const+0x1d (dyld:x86_64+0x1b229)
#21 0x111111495 in dyld4::APIs::runAllInitializersForMain()+0x25 (dyld:x86_64+0x28495)
#22 0x1110ef37c in dyld4::prepare(dyld4::APIs&, dyld3::MachOAnalyzer const*)+0xd72 (dyld:x86_64+0x637c)
#23 0x1110ee4d3 in start+0x183 (dyld:x86_64+0x54d3)
Direct leak of 160 byte(s) in 5 object(s) allocated from:
#0 0x10f830b7d in wrap_calloc+0x5d (libclang_rt.lsan_osx_dynamic.dylib:x86_64+0x8b7d)
#1 0x7ff81452d84f in realizeClassWithoutSwift(objc_class*, objc_class*)+0x88 (libobjc.A.dylib:x86_64h+0x884f)
#2 0x7ff81452d91b in realizeClassWithoutSwift(objc_class*, objc_class*)+0x154 (libobjc.A.dylib:x86_64h+0x891b)
#3 0x7ff81452d8f8 in realizeClassWithoutSwift(objc_class*, objc_class*)+0x131 (libobjc.A.dylib:x86_64h+0x88f8)
#4 0x7ff81452bb3f in map_images_nolock+0x161b (libobjc.A.dylib:x86_64h+0x6b3f)
#5 0x7ff81452a4bb in map_images+0x42 (libobjc.A.dylib:x86_64h+0x54bb)
#6 0x1110f82ca in invocation function for block in dyld4::RuntimeState::setObjCNotifiers(void (*)(unsigned int, char const* const*, mach_header const* const*), void (*)(char const*, mach_header const*), void (*)(char const*, mach_header const*))+0x112 (dyld:x86_64+0xf2ca)
#7 0x1110f3798 in dyld4::RuntimeState::withLoadersReadLock(void () block_pointer)+0x28 (dyld:x86_64+0xa798)
#8 0x1110f81b1 in dyld4::RuntimeState::setObjCNotifiers(void (*)(unsigned int, char const* const*, mach_header const* const*), void (*)(char const*, mach_header const*), void (*)(char const*, mach_header const*))+0x51 (dyld:x86_64+0xf1b1)
#9 0x11110ba84 in dyld4::APIs::_dyld_objc_notify_register(void (*)(unsigned int, char const* const*, mach_header const* const*), void (*)(char const*, mach_header const*), void (*)(char const*, mach_header const*))+0x4e (dyld:x86_64+0x22a84)
#10 0x7ff81452a329 in _objc_init+0x51a (libobjc.A.dylib:x86_64h+0x5329)
#11 0x7ff8144e0992 in _os_object_init+0xc (libdispatch.dylib:x86_64+0x2992)
#12 0x7ff8144ee1b7 in libdispatch_init+0x136 (libdispatch.dylib:x86_64+0x101b7)
#13 0x7ff81f476897 in libSystem_initializer+0xed (libSystem.B.dylib:x86_64+0x1897)
#14 0x1110fddda in invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const+0xb5 (dyld:x86_64+0x14dda)
#15 0x111124256 in invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const*) const+0xf1 (dyld:x86_64+0x3b256)
#16 0x11111b859 in invocation function for block in dyld3::MachOFile::forEachSection(void (dyld3::MachOFile::SectionInfo const&, bool, bool&) block_pointer) const+0x22c (dyld:x86_64+0x32859)
#17 0x1110eadb2 in dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void (load_command const*, bool&) block_pointer) const+0x80 (dyld:x86_64+0x1db2)
#18 0x11111b5ea in dyld3::MachOFile::forEachSection(void (dyld3::MachOFile::SectionInfo const&, bool, bool&) block_pointer) const+0xb2 (dyld:x86_64+0x325ea)
#19 0x111123dad in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const*) const+0x1d1 (dyld:x86_64+0x3adad)
#20 0x1110fdd0d in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const+0x8f (dyld:x86_64+0x14d0d)
#21 0x111104229 in dyld4::PrebuiltLoader::runInitializers(dyld4::RuntimeState&) const+0x1d (dyld:x86_64+0x1b229)
#22 0x111111495 in dyld4::APIs::runAllInitializersForMain()+0x25 (dyld:x86_64+0x28495)
#23 0x1110ef37c in dyld4::prepare(dyld4::APIs&, dyld3::MachOAnalyzer const*)+0xd72 (dyld:x86_64+0x637c)
#24 0x1110ee4d3 in start+0x183 (dyld:x86_64+0x54d3)
Direct leak of 160 byte(s) in 5 object(s) allocated from:
#0 0x10f830b7d in wrap_calloc+0x5d (libclang_rt.lsan_osx_dynamic.dylib:x86_64+0x8b7d)
#1 0x7ff81452d84f in realizeClassWithoutSwift(objc_class*, objc_class*)+0x88 (libobjc.A.dylib:x86_64h+0x884f)
#2 0x7ff81452d8f8 in realizeClassWithoutSwift(objc_class*, objc_class*)+0x131 (libobjc.A.dylib:x86_64h+0x88f8)
#3 0x7ff81452bb3f in map_images_nolock+0x161b (libobjc.A.dylib:x86_64h+0x6b3f)
#4 0x7ff81452a4bb in map_images+0x42 (libobjc.A.dylib:x86_64h+0x54bb)
#5 0x1110f82ca in invocation function for block in dyld4::RuntimeState::setObjCNotifiers(void (*)(unsigned int, char const* const*, mach_header const* const*), void (*)(char const*, mach_header const*), void (*)(char const*, mach_header const*))+0x112 (dyld:x86_64+0xf2ca)
#6 0x1110f3798 in dyld4::RuntimeState::withLoadersReadLock(void () block_pointer)+0x28 (dyld:x86_64+0xa798)
#7 0x1110f81b1 in dyld4::RuntimeState::setObjCNotifiers(void (*)(unsigned int, char const* const*, mach_header const* const*), void (*)(char const*, mach_header const*), void (*)(char const*, mach_header const*))+0x51 (dyld:x86_64+0xf1b1)
#8 0x11110ba84 in dyld4::APIs::_dyld_objc_notify_register(void (*)(unsigned int, char const* const*, mach_header const* const*), void (*)(char const*, mach_header const*), void (*)(char const*, mach_header const*))+0x4e (dyld:x86_64+0x22a84)
#9 0x7ff81452a329 in _objc_init+0x51a (libobjc.A.dylib:x86_64h+0x5329)
#10 0x7ff8144e0992 in _os_object_init+0xc (libdispatch.dylib:x86_64+0x2992)
#11 0x7ff8144ee1b7 in libdispatch_init+0x136 (libdispatch.dylib:x86_64+0x101b7)
#12 0x7ff81f476897 in libSystem_initializer+0xed (libSystem.B.dylib:x86_64+0x1897)
#13 0x1110fddda in invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const+0xb5 (dyld:x86_64+0x14dda)
#14 0x111124256 in invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const*) const+0xf1 (dyld:x86_64+0x3b256)
#15 0x11111b859 in invocation function for block in dyld3::MachOFile::forEachSection(void (dyld3::MachOFile::SectionInfo const&, bool, bool&) block_pointer) const+0x22c (dyld:x86_64+0x32859)
#16 0x1110eadb2 in dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void (load_command const*, bool&) block_pointer) const+0x80 (dyld:x86_64+0x1db2)
#17 0x11111b5ea in dyld3::MachOFile::forEachSection(void (dyld3::MachOFile::SectionInfo const&, bool, bool&) block_pointer) const+0xb2 (dyld:x86_64+0x325ea)
#18 0x111123dad in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const*) const+0x1d1 (dyld:x86_64+0x3adad)
#19 0x1110fdd0d in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const+0x8f (dyld:x86_64+0x14d0d)
#20 0x111104229 in dyld4::PrebuiltLoader::runInitializers(dyld4::RuntimeState&) const+0x1d (dyld:x86_64+0x1b229)
#21 0x111111495 in dyld4::APIs::runAllInitializersForMain()+0x25 (dyld:x86_64+0x28495)
#22 0x1110ef37c in dyld4::prepare(dyld4::APIs&, dyld3::MachOAnalyzer const*)+0xd72 (dyld:x86_64+0x637c)
#23 0x1110ee4d3 in start+0x183 (dyld:x86_64+0x54d3)
Direct leak of 32 byte(s) in 1 object(s) allocated from:
#0 0x10f830b7d in wrap_calloc+0x5d (libclang_rt.lsan_osx_dynamic.dylib:x86_64+0x8b7d)
#1 0x7ff81452d84f in realizeClassWithoutSwift(objc_class*, objc_class*)+0x88 (libobjc.A.dylib:x86_64h+0x884f)
#2 0x7ff81452d91b in realizeClassWithoutSwift(objc_class*, objc_class*)+0x154 (libobjc.A.dylib:x86_64h+0x891b)
#3 0x7ff81452d8f8 in realizeClassWithoutSwift(objc_class*, objc_class*)+0x131 (libobjc.A.dylib:x86_64h+0x88f8)
#4 0x7ff81452d8f8 in realizeClassWithoutSwift(objc_class*, objc_class*)+0x131 (libobjc.A.dylib:x86_64h+0x88f8)
#5 0x7ff81452bb3f in map_images_nolock+0x161b (libobjc.A.dylib:x86_64h+0x6b3f)
#6 0x7ff81452a4bb in map_images+0x42 (libobjc.A.dylib:x86_64h+0x54bb)
#7 0x1110f82ca in invocation function for block in dyld4::RuntimeState::setObjCNotifiers(void (*)(unsigned int, char const* const*, mach_header const* const*), void (*)(char const*, mach_header const*), void (*)(char const*, mach_header const*))+0x112 (dyld:x86_64+0xf2ca)
#8 0x1110f3798 in dyld4::RuntimeState::withLoadersReadLock(void () block_pointer)+0x28 (dyld:x86_64+0xa798)
#9 0x1110f81b1 in dyld4::RuntimeState::setObjCNotifiers(void (*)(unsigned int, char const* const*, mach_header const* const*), void (*)(char const*, mach_header const*), void (*)(char const*, mach_header const*))+0x51 (dyld:x86_64+0xf1b1)
#10 0x11110ba84 in dyld4::APIs::_dyld_objc_notify_register(void (*)(unsigned int, char const* const*, mach_header const* const*), void (*)(char const*, mach_header const*), void (*)(char const*, mach_header const*))+0x4e (dyld:x86_64+0x22a84)
#11 0x7ff81452a329 in _objc_init+0x51a (libobjc.A.dylib:x86_64h+0x5329)
#12 0x7ff8144e0992 in _os_object_init+0xc (libdispatch.dylib:x86_64+0x2992)
#13 0x7ff8144ee1b7 in libdispatch_init+0x136 (libdispatch.dylib:x86_64+0x101b7)
#14 0x7ff81f476897 in libSystem_initializer+0xed (libSystem.B.dylib:x86_64+0x1897)
#15 0x1110fddda in invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const+0xb5 (dyld:x86_64+0x14dda)
#16 0x111124256 in invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const*) const+0xf1 (dyld:x86_64+0x3b256)
#17 0x11111b859 in invocation function for block in dyld3::MachOFile::forEachSection(void (dyld3::MachOFile::SectionInfo const&, bool, bool&) block_pointer) const+0x22c (dyld:x86_64+0x32859)
#18 0x1110eadb2 in dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void (load_command const*, bool&) block_pointer) const+0x80 (dyld:x86_64+0x1db2)
#19 0x11111b5ea in dyld3::MachOFile::forEachSection(void (dyld3::MachOFile::SectionInfo const&, bool, bool&) block_pointer) const+0xb2 (dyld:x86_64+0x325ea)
#20 0x111123dad in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const*) const+0x1d1 (dyld:x86_64+0x3adad)
#21 0x1110fdd0d in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const+0x8f (dyld:x86_64+0x14d0d)
#22 0x111104229 in dyld4::PrebuiltLoader::runInitializers(dyld4::RuntimeState&) const+0x1d (dyld:x86_64+0x1b229)
#23 0x111111495 in dyld4::APIs::runAllInitializersForMain()+0x25 (dyld:x86_64+0x28495)
#24 0x1110ef37c in dyld4::prepare(dyld4::APIs&, dyld3::MachOAnalyzer const*)+0xd72 (dyld:x86_64+0x637c)
#25 0x1110ee4d3 in start+0x183 (dyld:x86_64+0x54d3)
Direct leak of 32 byte(s) in 1 object(s) allocated from:
#0 0x10f830b7d in wrap_calloc+0x5d (libclang_rt.lsan_osx_dynamic.dylib:x86_64+0x8b7d)
#1 0x7ff81452d84f in realizeClassWithoutSwift(objc_class*, objc_class*)+0x88 (libobjc.A.dylib:x86_64h+0x884f)
#2 0x7ff81452d8f8 in realizeClassWithoutSwift(objc_class*, objc_class*)+0x131 (libobjc.A.dylib:x86_64h+0x88f8)
#3 0x7ff81452d8f8 in realizeClassWithoutSwift(objc_class*, objc_class*)+0x131 (libobjc.A.dylib:x86_64h+0x88f8)
#4 0x7ff81452bb3f in map_images_nolock+0x161b (libobjc.A.dylib:x86_64h+0x6b3f)
#5 0x7ff81452a4bb in map_images+0x42 (libobjc.A.dylib:x86_64h+0x54bb)
#6 0x1110f82ca in invocation function for block in dyld4::RuntimeState::setObjCNotifiers(void (*)(unsigned int, char const* const*, mach_header const* const*), void (*)(char const*, mach_header const*), void (*)(char const*, mach_header const*))+0x112 (dyld:x86_64+0xf2ca)
#7 0x1110f3798 in dyld4::RuntimeState::withLoadersReadLock(void () block_pointer)+0x28 (dyld:x86_64+0xa798)
#8 0x1110f81b1 in dyld4::RuntimeState::setObjCNotifiers(void (*)(unsigned int, char const* const*, mach_header const* const*), void (*)(char const*, mach_header const*), void (*)(char const*, mach_header const*))+0x51 (dyld:x86_64+0xf1b1)
#9 0x11110ba84 in dyld4::APIs::_dyld_objc_notify_register(void (*)(unsigned int, char const* const*, mach_header const* const*), void (*)(char const*, mach_header const*), void (*)(char const*, mach_header const*))+0x4e (dyld:x86_64+0x22a84)
#10 0x7ff81452a329 in _objc_init+0x51a (libobjc.A.dylib:x86_64h+0x5329)
#11 0x7ff8144e0992 in _os_object_init+0xc (libdispatch.dylib:x86_64+0x2992)
#12 0x7ff8144ee1b7 in libdispatch_init+0x136 (libdispatch.dylib:x86_64+0x101b7)
#13 0x7ff81f476897 in libSystem_initializer+0xed (libSystem.B.dylib:x86_64+0x1897)
#14 0x1110fddda in invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const+0xb5 (dyld:x86_64+0x14dda)
#15 0x111124256 in invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const*) const+0xf1 (dyld:x86_64+0x3b256)
#16 0x11111b859 in invocation function for block in dyld3::MachOFile::forEachSection(void (dyld3::MachOFile::SectionInfo const&, bool, bool&) block_pointer) const+0x22c (dyld:x86_64+0x32859)
#17 0x1110eadb2 in dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void (load_command const*, bool&) block_pointer) const+0x80 (dyld:x86_64+0x1db2)
#18 0x11111b5ea in dyld3::MachOFile::forEachSection(void (dyld3::MachOFile::SectionInfo const&, bool, bool&) block_pointer) const+0xb2 (dyld:x86_64+0x325ea)
#19 0x111123dad in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const*) const+0x1d1 (dyld:x86_64+0x3adad)
#20 0x1110fdd0d in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const+0x8f (dyld:x86_64+0x14d0d)
#21 0x111104229 in dyld4::PrebuiltLoader::runInitializers(dyld4::RuntimeState&) const+0x1d (dyld:x86_64+0x1b229)
#22 0x111111495 in dyld4::APIs::runAllInitializersForMain()+0x25 (dyld:x86_64+0x28495)
#23 0x1110ef37c in dyld4::prepare(dyld4::APIs&, dyld3::MachOAnalyzer const*)+0xd72 (dyld:x86_64+0x637c)
#24 0x1110ee4d3 in start+0x183 (dyld:x86_64+0x54d3)
SUMMARY: LeakSanitizer: 4160 byte(s) leaked in 130 allocation(s).
The godbolt and mac clang versions are exactly the same. Nevertheless, I'm aware that the godbolt version is for gnu/linux and it is not compiling on a real mac. Thus, is it something related to the OS kernel?
How can I get the "regular" behaviour of the AddressSanitizer, aka: how can I simply have a working sanitizer on a mac?