From 366e24ed51e09a4794ebddd3dcce9388aea57a2a Mon Sep 17 00:00:00 2001 From: Xi Ge Date: Wed, 22 Jan 2020 16:22:29 -0800 Subject: [PATCH] IRGen: don't proceed to IRGen if collecting linker directives failed --- lib/FrontendTool/FrontendTool.cpp | 3 +++ ...-defined-attr-linker-directives-fail.swift | 22 +++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 test/IRGen/original-defined-attr-linker-directives-fail.swift diff --git a/lib/FrontendTool/FrontendTool.cpp b/lib/FrontendTool/FrontendTool.cpp index 4b692d0a83414..02386f37e7102 100644 --- a/lib/FrontendTool/FrontendTool.cpp +++ b/lib/FrontendTool/FrontendTool.cpp @@ -1609,6 +1609,9 @@ static bool performCompileStepsPostSILGen( llvm::StringSet<> LinkerDirectives; collectLinkerDirectives(Invocation, MSF, LinkerDirectives); + // Don't proceed to IRGen if collecting linker directives failed. + if (Context.hadError()) + return true; StringRef OutputFilename = PSPs.OutputFilename; std::vector ParallelOutputFilenames = Invocation.getFrontendOptions().InputsAndOutputs.copyOutputFilenames(); diff --git a/test/IRGen/original-defined-attr-linker-directives-fail.swift b/test/IRGen/original-defined-attr-linker-directives-fail.swift new file mode 100644 index 0000000000000..0eede2d3bb264 --- /dev/null +++ b/test/IRGen/original-defined-attr-linker-directives-fail.swift @@ -0,0 +1,22 @@ +// REQUIRES: OS=macosx +// RUN: %empty-directory(%t) +// RUN: echo '[ { "module": "OriginalModule", "platforms": ["macOS"], "install_name": "/System/OriginalModule.dylib"} ]' > %t/install-name.json +// RUN: %target-swift-frontend -swift-version 4 -enforce-exclusivity=checked %s -emit-ir -module-name CurrentModule -D CURRENT_MODULE -previous-module-installname-map-file %t/install-name.json | %FileCheck %s -check-prefix=CHECK-SYMBOLS + +// RUN: NOT %target-swift-frontend -swift-version 4 -enforce-exclusivity=checked %s -emit-ir -module-name CurrentModule -D CURRENT_MODULE -previous-module-installname-map-file %t/nil.json >& %t/error.txt +// RUN: %FileCheck %s -check-prefix=CHECK-ERROR < %t/error.txt + +@available(OSX 10.8, *) +@_originallyDefinedIn(module: "OriginalModule", macOS 10.10) +public struct Entity { + public func addEntity(_ e: Entity) {} + public func removeEntity(_ e: Entity) {} +} + +// CHECK-SYMBOLS: $ld$previous$/System/OriginalModule.dylib$$1$10.8$10.10$_$s14OriginalModule6EntityVMn$ +// CHECK-SYMBOLS: $ld$previous$/System/OriginalModule.dylib$$1$10.8$10.10$_$s14OriginalModule6EntityV03addC0yyACF$ +// CHECK-SYMBOLS: $ld$previous$/System/OriginalModule.dylib$$1$10.8$10.10$_$s14OriginalModule6EntityVN$ +// CHECK-SYMBOLS: $ld$previous$/System/OriginalModule.dylib$$1$10.8$10.10$_$s14OriginalModule6EntityVMa$ +// CHECK-SYMBOLS: $ld$previous$/System/OriginalModule.dylib$$1$10.8$10.10$_$s14OriginalModule6EntityV06removeC0yyACF$ + +// CHECK-ERROR: cannot open previous install name map