Skip to content

Commit 65b2f03

Browse files
authored
Merge pull request #1303 from artemcm/FallBackHatchForInProcessTargetInfo
Attempt to recover from in-process Target Info and Supported Features query failures.
2 parents 0a1bc7e + 79def2a commit 65b2f03

File tree

4 files changed

+29
-8
lines changed

4 files changed

+29
-8
lines changed

Sources/SwiftDriver/Driver/Driver.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2936,6 +2936,7 @@ extension Driver {
29362936
swiftCompilerPrefixArgs: frontendOverride.prefixArgsForTargetInfo,
29372937
toolchain: toolchain, fileSystem: fileSystem,
29382938
workingDirectory: workingDirectory,
2939+
diagnosticsEngine: diagnosticsEngine,
29392940
executor: executor).target.triple
29402941
}
29412942

@@ -3000,6 +3001,7 @@ extension Driver {
30003001
swiftCompilerPrefixArgs: frontendOverride.prefixArgsForTargetInfo,
30013002
toolchain: toolchain, fileSystem: fileSystem,
30023003
workingDirectory: workingDirectory,
3004+
diagnosticsEngine: diagnosticsEngine,
30033005
executor: executor)
30043006

30053007
// Parse the runtime compatibility version. If present, it will override

Sources/SwiftDriver/Jobs/EmitSupportedFeaturesJob.swift

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,13 @@ extension Driver {
6464
fileSystem: FileSystem,
6565
executor: DriverExecutor)
6666
throws -> Set<String> {
67-
if let supportedArgs =
68-
try querySupportedCompilerArgsInProcess(of: toolchain, fileSystem: fileSystem) {
69-
return supportedArgs
67+
do {
68+
if let supportedArgs =
69+
try querySupportedCompilerArgsInProcess(of: toolchain, fileSystem: fileSystem) {
70+
return supportedArgs
71+
}
72+
} catch {
73+
diagnosticsEngine.emit(.warning_inprocess_supported_features_query_failed(error.localizedDescription))
7074
}
7175

7276
// Fallback: Invoke `swift-frontend -emit-supported-features` and decode the output

Sources/SwiftDriver/Jobs/PrintTargetInfoJob.swift

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import protocol TSCBasic.FileSystem
1414
import class Foundation.JSONDecoder
1515
import struct TSCBasic.AbsolutePath
16+
import class TSCBasic.DiagnosticsEngine
1617

1718
/// Swift versions are major.minor.
1819
struct SwiftVersion {
@@ -232,6 +233,7 @@ extension Driver {
232233
toolchain: Toolchain,
233234
fileSystem: FileSystem,
234235
workingDirectory: AbsolutePath?,
236+
diagnosticsEngine: DiagnosticsEngine,
235237
executor: DriverExecutor) throws -> FrontendTargetInfo {
236238
let frontendTargetInfoJob =
237239
try toolchain.printTargetInfoJob(target: target, targetVariant: targetVariant,
@@ -244,11 +246,16 @@ extension Driver {
244246
useResponseFiles: .disabled,
245247
using: executor.resolver)
246248
Self.sanitizeCommandForLibScanInvocation(&command)
247-
if let targetInfo =
248-
try Self.queryTargetInfoInProcess(of: toolchain, fileSystem: fileSystem,
249-
workingDirectory: workingDirectory,
250-
invocationCommand: command) {
251-
return targetInfo
249+
250+
do {
251+
if let targetInfo =
252+
try Self.queryTargetInfoInProcess(of: toolchain, fileSystem: fileSystem,
253+
workingDirectory: workingDirectory,
254+
invocationCommand: command) {
255+
return targetInfo
256+
}
257+
} catch {
258+
diagnosticsEngine.emit(.warning_inprocess_target_info_query_failed(error.localizedDescription))
252259
}
253260

254261
// Fallback: Invoke `swift-frontend -print-target-info` and decode the output

Sources/SwiftDriver/Utilities/Diagnostics.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,14 @@ extension Diagnostic.Message {
5151
.warning("inferring simulator environment for target '\(originalTriple.triple)'; use '-target \(inferredTriple.triple)' instead")
5252
}
5353

54+
static func warning_inprocess_target_info_query_failed(_ error: String) -> Diagnostic.Message {
55+
.warning("In-process target-info query failed (\(error)). Using fallback mechanism.")
56+
}
57+
58+
static func warning_inprocess_supported_features_query_failed(_ error: String) -> Diagnostic.Message {
59+
.warning("In-process supported-compiler-features query failed (\(error)). Using fallback mechanism.")
60+
}
61+
5462
static func error_argument_not_allowed_with(arg: String, other: String) -> Diagnostic.Message {
5563
.error("argument '\(arg)' is not allowed with '\(other)'")
5664
}

0 commit comments

Comments
 (0)