diff --git a/lld/MachO/MarkLive.cpp b/lld/MachO/MarkLive.cpp --- a/lld/MachO/MarkLive.cpp +++ b/lld/MachO/MarkLive.cpp @@ -231,8 +231,6 @@ // FIXME: Instead of doing this here, maybe the Driver code doing // the matching should add them to explicitUndefineds? Then the // explicitUndefineds code below would handle this automatically. - assert(!defined->privateExtern && - "should have been rejected by driver"); marker->addSym(defined); continue; } diff --git a/lld/test/MachO/export-options.s b/lld/test/MachO/export-options.s --- a/lld/test/MachO/export-options.s +++ b/lld/test/MachO/export-options.s @@ -133,7 +133,7 @@ # RUN: llvm-nm -g %t/exp-autohide.dylib | FileCheck %s --check-prefix=EXP-AUTOHIDE # RUN: not %lld -dylib -exported_symbol "_foo" %t/autohide-private-extern.o \ -# RUN: -o /dev/null 2>&1 | FileCheck %s --check-prefix=AUTOHIDE-PRIVATE +# RUN: -o /dev/null 2>&1 | FileCheck %s --check-prefix=AUTOHIDE-PRIVATE # RUN: not %lld -dylib -exported_symbol "_foo" %t/autohide.o \ # RUN: %t/glob-private-extern.o -o /dev/null 2>&1 | \ @@ -143,8 +143,22 @@ # RUN: %t/weak-private-extern.o -o /dev/null 2>&1 | \ # RUN: FileCheck %s --check-prefix=AUTOHIDE-PRIVATE +## Test that dead_strip does not crash when we cannot export the autohide symbol +# RUN: %no-fatal-warnings-lld -dylib -exported_symbol "_foo" %t/autohide-private-extern.o \ +# RUN: -dead_strip -o %t/no_crash +# RUN: llvm-nm -m %t/no_crash | FileCheck %s --check-prefix=NO-CRASH + +# RUN: %no-fatal-warnings-lld -dylib -exported_symbol "_foo" %t/autohide.o \ +# RUN: -dead_strip %t/glob-private-extern.o -o %t/no_crash +# RUN: llvm-nm -m %t/no_crash | FileCheck %s --check-prefix=NO-CRASH + +# RUN: %no-fatal-warnings-lld -dylib -exported_symbol "_foo" %t/autohide.o \ +# RUN: -dead_strip %t/weak-private-extern.o -o %t/no_crash +# RUN: llvm-nm -m %t/no_crash | FileCheck %s --check-prefix=NO-CRASH + # EXP-AUTOHIDE: T _foo # AUTOHIDE-PRIVATE: error: cannot export hidden symbol _foo +# NO-CRASH: (__TEXT,__text) non-external (was a private external) _foo #--- default.s