https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112863
--- Comment #4 from Rainer Orth <ro at gcc dot gnu.org> --- On macOS 11, everything is still fine. On macOS 14, there's progress: * Before your patch: === obj-c++ Summary === # of expected passes 2813 # of unexpected failures 378 # of expected failures 22 # of unsupported tests 71 * With the patch: # of expected passes 3127 # of unexpected failures 72 # of expected failures 22 # of unsupported tests 71 The remaining failures fall into two categories: FAIL: obj-c++.dg/encode-10.mm -fgnu-runtime (test for excess errors) FAIL: obj-c++.dg/encode-9.mm -fgnu-runtime (test for excess errors) FAIL: obj-c++.dg/encode-10.mm -fnext-runtime (test for excess errors) FAIL: obj-c++.dg/encode-9.mm -fnext-runtime (test for excess errors) FAIL: obj-c++.dg/torture/strings/const-cfstring-3.mm -O0 -fnext-runtime -Wno-objc-root-class (test for excess errors) Those are all instances of Excess errors: ld: warning: ignoring duplicate libraries: '-lobjc-gnu' or ld: warning: ignoring duplicate libraries: '-lobjc' The remaining ones are all execution errors with -fnext-runtime. E.g. obj-c++.dg/basic.mm SEGVs like thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x20) frame #0: 0x00007ff819069f58 libobjc.A.dylib`readClass(objc_class*, bool, bool) + 35 libobjc.A.dylib`readClass: -> 0x7ff819069f58 <+35>: movq 0x20(%rdi), %rcx 0x7ff819069f5c <+39>: movq %rcx, %rax 0x7ff819069f5f <+42>: andq %r15, %rax 0x7ff819069f62 <+45>: testq %rcx, %rcx Target 0: (basic.exe) stopped. (lldb) bt * thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x20) * frame #0: 0x00007ff819069f58 libobjc.A.dylib`readClass(objc_class*, bool, bool) + 35 frame #1: 0x00007ff819059ded libobjc.A.dylib`map_images_nolock + 3856 frame #2: 0x00007ff819058e62 libobjc.A.dylib`map_images + 69 frame #3: 0x00007ff8190adc0f dyld`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*), void (*)(mach_header const*, void*, mach_header const*, void const*), void (*)(unsigned int, _dyld_objc_notify_mapped_info const*), void (*)(_dyld_objc_notify_mapped_info const*))::$_8::operator()() const + 682 frame #4: 0x00007ff8190a59cc dyld`dyld4::RuntimeLocks::withLoadersReadLock(void () block_pointer) + 46 frame #5: 0x00007ff8190aac13 dyld`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*), void (*)(mach_header const*, void*, mach_header const*, void const*), void (*)(unsigned int, _dyld_objc_notify_mapped_info const*), void (*)(_dyld_objc_notify_mapped_info const*)) + 223 frame #6: 0x00007ff8190d0960 dyld`dyld4::APIs::_dyld_objc_register_callbacks(_dyld_objc_callbacks const*) + 152 frame #7: 0x00007ff8190588e4 libobjc.A.dylib`_objc_init + 675 frame #8: 0x00007ff819281c00 libdispatch.dylib`_os_object_init + 13 frame #9: 0x00007ff81928edf6 libdispatch.dylib`libdispatch_init + 364 frame #10: 0x00007ff8262ef892 libSystem.B.dylib`libSystem_initializer + 222 frame #11: 0x00007ff8190b7fca dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator()() const + 182 frame #12: 0x00007ff8190f971f dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const*) const + 241 frame #13: 0x00007ff8190ed913 dyld`invocation function for block in dyld3::MachOFile::forEachSection(void (dyld3::MachOFile::SectionInfo const&, bool, bool&) block_pointer) const + 543 frame #14: 0x00007ff81909b07f dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void (load_command const*, bool&) block_pointer) const + 249 frame #15: 0x00007ff8190ecadc dyld`dyld3::MachOFile::forEachSection(void (dyld3::MachOFile::SectionInfo const&, bool, bool&) block_pointer) const + 176 frame #16: 0x00007ff8190f930a dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const*) const + 470 frame #17: 0x00007ff8190b4cfc dyld`dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const + 222 frame #18: 0x00007ff8190be0ae dyld`dyld4::PrebuiltLoader::runInitializers(dyld4::RuntimeState&) const + 30 frame #19: 0x00007ff8190d6878 dyld`dyld4::APIs::runAllInitializersForMain() + 72 frame #20: 0x00007ff8190a0241 dyld`dyld4::prepare(dyld4::APIs&, dyld3::MachOAnalyzer const*) + 3397 frame #21: 0x00007ff81909f31f dyld`start + 1839