2

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;
}

Here's the link.

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?

JohnnyParafango
  • 316
  • 2
  • 11
  • A quick Google for the malloc error message turned up https://stackoverflow.com/questions/64126942/malloc-nano-zone-abandoned-due-to-inability-to-preallocate-reserved-vm-space – Alan Birtles Apr 05 '22 at 06:49
  • 1
    @AlanBirtles thanks, I already saw that, but the question was not about that specific issue, but rather than why I cannot get the address sanitizer working as expected, ad moreover why I'm getting a ton of leaks on an empty program – JohnnyParafango Apr 05 '22 at 06:57
  • 2
    About the duplicate question: actually the linked answers do not solve my issues – JohnnyParafango Apr 05 '22 at 07:01
  • Agreed, the linked answers do not solve the issue. Instead, until this question is reopened, let me write the answer in this comment: 1. Create a file `lsan.supp` with the contents `leak:realizeClassWithoutSwift`, then 2. run your app (with ASAN enabled) with the following environment variable: `LSAN_OPTIONS=suppressions=lsan.supp`. This will suppress the false positives (see "realizeClassWithoutSwift(...)" in OP's question). – miguno Jun 13 '23 at 20:01

0 Answers0