diff --git a/lld/MachO/InputFiles.cpp b/lld/MachO/InputFiles.cpp --- a/lld/MachO/InputFiles.cpp +++ b/lld/MachO/InputFiles.cpp @@ -79,6 +79,12 @@ std::string lld::toString(const InputFile *f) { if (!f) return ""; + + // Multiple dylibs can be defined in one .tbd file. + if (auto dylibFile = dyn_cast(f)) + if (f->getName().endswith(".tbd")) + return (f->getName() + "(" + dylibFile->dylibName + ")").str(); + if (f->archiveName.empty()) return std::string(f->getName()); return (path::filename(f->archiveName) + "(" + path::filename(f->getName()) + @@ -697,15 +703,16 @@ if (umbrella == nullptr) umbrella = this; + dylibName = saver.save(interface.getInstallName()); + compatibilityVersion = interface.getCompatibilityVersion().rawValue(); + currentVersion = interface.getCurrentVersion().rawValue(); + if (!is_contained(interface.targets(), config->target)) { error(toString(this) + " is incompatible with " + std::string(config->target)); return; } - dylibName = saver.save(interface.getInstallName()); - compatibilityVersion = interface.getCompatibilityVersion().rawValue(); - currentVersion = interface.getCurrentVersion().rawValue(); DylibFile *exportingFile = isImplicitlyLinked(dylibName) ? this : umbrella; auto addSymbol = [&](const Twine &name) -> void { symbols.push_back(symtab->addDylib(saver.save(name), exportingFile, diff --git a/lld/test/MachO/invalid/incompatible-target-tapi.test b/lld/test/MachO/invalid/incompatible-target-tapi.test --- a/lld/test/MachO/invalid/incompatible-target-tapi.test +++ b/lld/test/MachO/invalid/incompatible-target-tapi.test @@ -6,5 +6,5 @@ RUN: -o /dev/null 2>&1 | FileCheck %s --check-prefix=ARCH RUN: not %lld -dylib -arch arm64 -platform_version ios-simulator 14.0 15.0 %t/arm64-test.o \ RUN: %S/Inputs/libincompatible.tbd -o /dev/null 2>&1 | FileCheck %s --check-prefix=PLATFORM -ARCH: error: {{.*}}libincompatible.tbd is incompatible with x86_64 (macOS) -PLATFORM: error: {{.*}}libincompatible.tbd is incompatible with arm64 (iOS Simulator) +ARCH: error: {{.*}}libincompatible.tbd(/usr/lib/libincompatible.dylib) is incompatible with x86_64 (macOS) +PLATFORM: error: {{.*}}libincompatible.tbd(/usr/lib/libincompatible.dylib) is incompatible with arm64 (iOS Simulator)