From 3fcaa347b94a42eb15ddd9be3c1e0dede9661431 Mon Sep 17 00:00:00 2001 From: Artem Chikin Date: Fri, 7 May 2021 09:20:12 -0700 Subject: [PATCH] Validate that `-static-executable` is not supported on Darwin. Resolves rdar://77631444 --- Sources/SwiftDriver/Toolchains/DarwinToolchain.swift | 6 +++++- Tests/SwiftDriverTests/SwiftDriverTests.swift | 8 ++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/Sources/SwiftDriver/Toolchains/DarwinToolchain.swift b/Sources/SwiftDriver/Toolchains/DarwinToolchain.swift index 4606408a9..9b93ed1b8 100644 --- a/Sources/SwiftDriver/Toolchains/DarwinToolchain.swift +++ b/Sources/SwiftDriver/Toolchains/DarwinToolchain.swift @@ -181,7 +181,11 @@ import SwiftOptions } // Validating darwin unsupported -static-stdlib argument. if parsedOptions.hasArgument(.staticStdlib) { - throw ToolchainValidationError.argumentNotSupported("-static-stdlib") + throw ToolchainValidationError.argumentNotSupported("-static-stdlib") + } + // Validating darwin unsupported -static-executable argument. + if parsedOptions.hasArgument(.staticExecutable) { + throw ToolchainValidationError.argumentNotSupported("-static-executable") } // If a C++ standard library is specified, it has to be libc++. if let cxxLib = parsedOptions.getLastArgument(.experimentalCxxStdlib) { diff --git a/Tests/SwiftDriverTests/SwiftDriverTests.swift b/Tests/SwiftDriverTests/SwiftDriverTests.swift index df5d9385e..66add0953 100644 --- a/Tests/SwiftDriverTests/SwiftDriverTests.swift +++ b/Tests/SwiftDriverTests/SwiftDriverTests.swift @@ -2385,6 +2385,14 @@ final class SwiftDriverTests: XCTestCase { return } } + + XCTAssertThrowsError(try Driver(args: ["swiftc", "-c", "-static-executable", "-target", "x86_64-apple-macosx10.14", + "foo.swift"])) { error in + guard case DarwinToolchain.ToolchainValidationError.argumentNotSupported("-static-executable") = error else { + XCTFail() + return + } + } XCTAssertThrowsError(try Driver(args: ["swiftc", "-c", "-target", "x86_64-apple-macosx10.14", "-experimental-cxx-stdlib", "libstdc++", "foo.swift"])) { error in