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

Reply via email to