Skip to content

Commit b8fb1a7

Browse files
committed
Merge branch 'main' into kphillips/merge-main-into-rebranch
2 parents 2cac18a + 0155ae0 commit b8fb1a7

File tree

11 files changed

+145
-74
lines changed

11 files changed

+145
-74
lines changed

Package.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ if ProcessInfo.processInfo.environment["SWIFTCI_USE_LOCAL_DEPS"] == nil {
170170
// The 'swift-argument-parser' version declared here must match that
171171
// used by 'swift-package-manager' and 'sourcekit-lsp'. Please coordinate
172172
// dependency version changes here with those projects.
173-
.package(url: "https://github.com/apple/swift-argument-parser.git", .upToNextMinor(from: "1.4.0")),
173+
.package(url: "https://github.com/apple/swift-argument-parser.git", from: "1.4.0"),
174174
]
175175
} else {
176176
package.dependencies += [

Sources/SwiftDriver/Driver/Driver.swift

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2929,10 +2929,19 @@ extension Diagnostic.Message {
29292929
extension Driver {
29302930
static func validateWarningControlArgs(_ parsedOptions: inout ParsedOptions,
29312931
diagnosticEngine: DiagnosticsEngine) {
2932-
if parsedOptions.hasArgument(.suppressWarnings) &&
2933-
parsedOptions.hasFlag(positive: .warningsAsErrors, negative: .noWarningsAsErrors, default: false) {
2934-
diagnosticEngine.emit(.error(Error.conflictingOptions(.warningsAsErrors, .suppressWarnings)),
2935-
location: nil)
2932+
if parsedOptions.hasArgument(.suppressWarnings) {
2933+
if parsedOptions.hasFlag(positive: .warningsAsErrors, negative: .noWarningsAsErrors, default: false) {
2934+
diagnosticEngine.emit(.error(Error.conflictingOptions(.warningsAsErrors, .suppressWarnings)),
2935+
location: nil)
2936+
}
2937+
if parsedOptions.hasArgument(.Wwarning) {
2938+
diagnosticEngine.emit(.error(Error.conflictingOptions(.Wwarning, .suppressWarnings)),
2939+
location: nil)
2940+
}
2941+
if parsedOptions.hasArgument(.Werror) {
2942+
diagnosticEngine.emit(.error(Error.conflictingOptions(.Werror, .suppressWarnings)),
2943+
location: nil)
2944+
}
29362945
}
29372946
}
29382947

Sources/SwiftDriver/Jobs/FrontendJobHelpers.swift

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -136,9 +136,6 @@ extension Driver {
136136
// Add flags for C++ interop
137137
try commandLine.appendLast(.enableExperimentalCxxInterop, from: &parsedOptions)
138138
try commandLine.appendLast(.cxxInteroperabilityMode, from: &parsedOptions)
139-
if let stdlibVariant = parsedOptions.getLastArgument(.experimentalCxxStdlib)?.asSingle {
140-
appendXccFlag("-stdlib=\(stdlibVariant)")
141-
}
142139

143140
if isEmbeddedEnabled && parsedOptions.hasArgument(.enableLibraryEvolution) {
144141
diagnosticEngine.emit(.error_no_library_evolution_embedded)
@@ -228,7 +225,11 @@ extension Driver {
228225
try commandLine.appendLast(.profileGenerate, from: &parsedOptions)
229226
try commandLine.appendLast(.profileUse, from: &parsedOptions)
230227
try commandLine.appendLast(.profileCoverageMapping, from: &parsedOptions)
231-
try commandLine.appendLast(.warningsAsErrors, .noWarningsAsErrors, from: &parsedOptions)
228+
try commandLine.appendAllExcept(
229+
includeList: [.warningTreating],
230+
excludeList: [],
231+
from: &parsedOptions
232+
)
232233
try commandLine.appendLast(.sanitizeEQ, from: &parsedOptions)
233234
try commandLine.appendLast(.sanitizeRecoverEQ, from: &parsedOptions)
234235
try commandLine.appendLast(.sanitizeAddressUseOdrIndicator, from: &parsedOptions)

Sources/SwiftDriver/Jobs/GenericUnixToolchain+LinkerSupport.swift

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -219,10 +219,10 @@ extension GenericUnixToolchain {
219219

220220
if targetTriple.environment == .android {
221221
if let sysroot = parsedOptions.getLastArgument(.sysroot)?.asSingle {
222-
commandLine.appendFlag("-sysroot")
222+
commandLine.appendFlag("--sysroot")
223223
try commandLine.appendPath(VirtualPath(path: sysroot))
224224
} else if let sysroot = AndroidNDK.getDefaultSysrootPath(in: self.env) {
225-
commandLine.appendFlag("-sysroot")
225+
commandLine.appendFlag("--sysroot")
226226
try commandLine.appendPath(VirtualPath(path: sysroot.pathString))
227227
}
228228
} else if let path = targetInfo.sdkPath?.path {
@@ -285,9 +285,10 @@ extension GenericUnixToolchain {
285285
}
286286

287287
if parsedOptions.hasArgument(.profileGenerate) {
288+
let environment = (targetTriple.environment == .android) ? "-android" : ""
288289
let libProfile = VirtualPath.lookup(targetInfo.runtimeResourcePath.path)
289290
.appending(components: "clang", "lib", targetTriple.osName,
290-
"libclang_rt.profile-\(targetTriple.archName).a")
291+
"libclang_rt.profile-\(targetTriple.archName)\(environment).a")
291292
commandLine.appendPath(libProfile)
292293

293294
// HACK: Hard-coded from llvm::getInstrProfRuntimeHookVarName()

Sources/SwiftDriver/Jobs/WindowsToolchain+LinkerSupport.swift

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -202,10 +202,6 @@ extension WindowsToolchain {
202202
commandLine.appendPath(VirtualPath.lookup(sdkPath))
203203
}
204204

205-
if let stdlib = parsedOptions.getLastArgument(.experimentalCxxStdlib) {
206-
commandLine.appendFlag("-stdlib=\(stdlib.asSingle)")
207-
}
208-
209205
// Pass down an optimization level
210206
if let optArg = mapOptimizationLevelToClangArg(from: &parsedOptions) {
211207
commandLine.appendFlag(optArg)

Sources/SwiftDriver/Toolchains/DarwinToolchain.swift

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,6 @@ public final class DarwinToolchain: Toolchain {
165165
case argumentNotSupported(String)
166166
case invalidDeploymentTargetForIR(platform: DarwinPlatform, version: Triple.Version, archName: String)
167167
case unsupportedTargetVariant(variant: Triple)
168-
case darwinOnlySupportsLibCxx
169168

170169
public var description: String {
171170
switch self {
@@ -177,8 +176,6 @@ public final class DarwinToolchain: Toolchain {
177176
return "unsupported '\(variant.isiOS ? "-target-variant" : "-target")' value '\(variant.triple)'; use 'ios-macabi' instead"
178177
case .argumentNotSupported(let argument):
179178
return "\(argument) is no longer supported for Apple platforms"
180-
case .darwinOnlySupportsLibCxx:
181-
return "The only C++ standard library supported on Apple platforms is libc++"
182179
}
183180
}
184181
}
@@ -211,12 +208,6 @@ public final class DarwinToolchain: Toolchain {
211208
if parsedOptions.hasArgument(.staticExecutable) {
212209
throw ToolchainValidationError.argumentNotSupported("-static-executable")
213210
}
214-
// If a C++ standard library is specified, it has to be libc++.
215-
if let cxxLib = parsedOptions.getLastArgument(.experimentalCxxStdlib) {
216-
if cxxLib.asSingle != "libc++" {
217-
throw ToolchainValidationError.darwinOnlySupportsLibCxx
218-
}
219-
}
220211
}
221212

222213
public func getDefaultDwarfVersion(targetTriple: Triple) -> UInt8 {

Sources/SwiftOptions/Options.swift

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -478,7 +478,6 @@ extension Option {
478478
public static let experimentalAllowedReexportedModules: Option = Option("-experimental-allowed-reexported-modules=", .commaJoined, attributes: [.noDriver], helpText: "Allow reexporting symbols from the provided modules if they are themselves exported from the main module. This is a comma separated list of module names.")
479479
public static let experimentalCForeignReferenceTypes: Option = Option("-experimental-c-foreign-reference-types", .flag, attributes: [.helpHidden, .frontend, .moduleInterface], helpText: "Enable experimental C foreign references types (with reference counting).")
480480
public static let experimentalClangImporterDirectCc1Scan: Option = Option("-experimental-clang-importer-direct-cc1-scan", .flag, attributes: [.helpHidden, .frontend], helpText: "Enables swift driver to construct swift-frontend invocations using -direct-clang-cc1-module-build")
481-
public static let experimentalCxxStdlib: Option = Option("-experimental-cxx-stdlib", .separate, attributes: [.helpHidden], helpText: "C++ standard library to use; forwarded to Clang's -stdlib flag")
482481
public static let emitModuleSeparately: Option = Option("-experimental-emit-module-separately", .flag, attributes: [.helpHidden], helpText: "Emit module files as a distinct job")
483482
public static let driverExperimentalExplicitModuleBuild: Option = Option("-experimental-explicit-module-build", .flag, alias: Option.driverExplicitModuleBuild, attributes: [.helpHidden], helpText: "Prebuild module dependencies to make them explicit")
484483
public static let forceWorkaroundBrokenModules: Option = Option("-experimental-force-workaround-broken-modules", .flag, attributes: [.helpHidden, .frontend, .noDriver], helpText: "Attempt unsafe recovery for imported modules with broken modularization")
@@ -584,6 +583,7 @@ extension Option {
584583
public static let json_: Option = Option("--json", .flag, alias: Option.json, attributes: [.noDriver], helpText: "Print output in JSON format.")
585584
public static let j: Option = Option("-j", .joinedOrSeparate, attributes: [.doesNotAffectIncrementalBuild], metaVar: "<n>", helpText: "Number of commands to execute in parallel")
586585
public static let LEQ: Option = Option("-L=", .joined, alias: Option.L, attributes: [.frontend, .doesNotAffectIncrementalBuild, .argumentIsPath], group: .linkerOption)
586+
public static let languageMode: Option = Option("-language-mode", .separate, alias: Option.swiftVersion, attributes: [.frontend, .moduleInterface], metaVar: "<mode>", helpText: "Interpret input according to a specific Swift language mode")
587587
public static let ldPath: Option = Option("-ld-path=", .joined, attributes: [.helpHidden, .doesNotAffectIncrementalBuild, .argumentIsPath], helpText: "Specifies the path to the linker to be used")
588588
public static let libc: Option = Option("-libc", .separate, attributes: [], helpText: "libc runtime library to use")
589589
public static let libraryLevelEQ: Option = Option("-library-level=", .joined, alias: Option.libraryLevel, attributes: [.helpHidden, .frontend, .moduleInterface], metaVar: "<level>")
@@ -640,7 +640,7 @@ extension Option {
640640
public static let noStrictImplicitModuleContext: Option = Option("-no-strict-implicit-module-context", .flag, attributes: [.helpHidden, .frontend], helpText: "Disable the strict forwarding of compilation context to downstream implicit module dependencies")
641641
public static let noToolchainStdlibRpath: Option = Option("-no-toolchain-stdlib-rpath", .flag, attributes: [.helpHidden, .doesNotAffectIncrementalBuild], helpText: "Do not add an rpath entry for the toolchain's standard library (default)")
642642
public static let noVerifyEmittedModuleInterface: Option = Option("-no-verify-emitted-module-interface", .flag, attributes: [.frontend, .noInteractive, .doesNotAffectIncrementalBuild], helpText: "Don't check that module interfaces emitted during compilation typecheck")
643-
public static let noWarningsAsErrors: Option = Option("-no-warnings-as-errors", .flag, attributes: [.frontend], helpText: "Don't treat warnings as errors")
643+
public static let noWarningsAsErrors: Option = Option("-no-warnings-as-errors", .flag, attributes: [.frontend], helpText: "Treat warnings as warnings", group: .warningTreating)
644644
public static let noWholeModuleOptimization: Option = Option("-no-whole-module-optimization", .flag, attributes: [.frontend, .noInteractive], helpText: "Disable optimizing input files together instead of individually")
645645
public static let driverScanDependenciesNonLib: Option = Option("-nonlib-dependency-scanner", .flag, attributes: [.helpHidden], helpText: "Use calls to `swift-frontend -scan-dependencies` instead of dedicated dependency scanning library")
646646
public static let nostartfiles: Option = Option("-nostartfiles", .flag, attributes: [.helpHidden, .frontend, .noInteractive, .doesNotAffectIncrementalBuild], helpText: "Do not link in the Swift language startup routines")
@@ -872,14 +872,16 @@ extension Option {
872872
public static let warnSwift3ObjcInferenceComplete: Option = Option("-warn-swift3-objc-inference-complete", .flag, attributes: [.helpHidden, .frontend, .doesNotAffectIncrementalBuild], helpText: "Deprecated, has no effect")
873873
public static let warnSwift3ObjcInferenceMinimal: Option = Option("-warn-swift3-objc-inference-minimal", .flag, attributes: [.helpHidden, .frontend, .doesNotAffectIncrementalBuild], helpText: "Deprecated, has no effect")
874874
public static let warnSwift3ObjcInference: Option = Option("-warn-swift3-objc-inference", .flag, alias: Option.warnSwift3ObjcInferenceComplete, attributes: [.helpHidden, .frontend, .doesNotAffectIncrementalBuild])
875-
public static let warningsAsErrors: Option = Option("-warnings-as-errors", .flag, attributes: [.frontend], helpText: "Treat warnings as errors")
875+
public static let warningsAsErrors: Option = Option("-warnings-as-errors", .flag, attributes: [.frontend], helpText: "Treat warnings as errors", group: .warningTreating)
876876
public static let weakLinkAtTarget: Option = Option("-weak-link-at-target", .flag, attributes: [.helpHidden, .frontend, .noDriver], helpText: "Weakly link symbols for declarations that were introduced at the deployment target. Symbols introduced before the deployment target are still strongly linked.")
877+
public static let Werror: Option = Option("-Werror", .separate, attributes: [.helpHidden, .frontend], metaVar: "<diagnostic_group>", helpText: "Treat this warning group as error", group: .warningTreating)
877878
public static let wholeModuleOptimization: Option = Option("-whole-module-optimization", .flag, attributes: [.frontend, .noInteractive], helpText: "Optimize input files together instead of individually")
878879
public static let windowsSdkRoot: Option = Option("-windows-sdk-root", .separate, attributes: [.frontend, .argumentIsPath], metaVar: "<root>", helpText: "Windows SDK Root")
879880
public static let windowsSdkVersion: Option = Option("-windows-sdk-version", .separate, attributes: [.frontend], metaVar: "<version>", helpText: "Windows SDK Version")
880881
public static let wmo: Option = Option("-wmo", .flag, alias: Option.wholeModuleOptimization, attributes: [.helpHidden, .frontend, .noInteractive])
881882
public static let workingDirectoryEQ: Option = Option("-working-directory=", .joined, alias: Option.workingDirectory)
882883
public static let workingDirectory: Option = Option("-working-directory", .separate, metaVar: "<path>", helpText: "Resolve file paths relative to the specified directory")
884+
public static let Wwarning: Option = Option("-Wwarning", .separate, attributes: [.helpHidden, .frontend], metaVar: "<diagnostic_group>", helpText: "Treat this warning group as warning", group: .warningTreating)
883885
public static let Xcc: Option = Option("-Xcc", .separate, attributes: [.frontend], metaVar: "<arg>", helpText: "Pass <arg> to the C/C++/Objective-C compiler")
884886
public static let XclangLinker: Option = Option("-Xclang-linker", .separate, attributes: [.helpHidden], metaVar: "<arg>", helpText: "Pass <arg> to Clang when it is use for linking.")
885887
public static let Xfrontend: Option = Option("-Xfrontend", .separate, attributes: [.helpHidden], metaVar: "<arg>", helpText: "Pass <arg> to the Swift frontend")
@@ -1351,7 +1353,6 @@ extension Option {
13511353
Option.experimentalAllowedReexportedModules,
13521354
Option.experimentalCForeignReferenceTypes,
13531355
Option.experimentalClangImporterDirectCc1Scan,
1354-
Option.experimentalCxxStdlib,
13551356
Option.emitModuleSeparately,
13561357
Option.driverExperimentalExplicitModuleBuild,
13571358
Option.forceWorkaroundBrokenModules,
@@ -1457,6 +1458,7 @@ extension Option {
14571458
Option.json_,
14581459
Option.j,
14591460
Option.LEQ,
1461+
Option.languageMode,
14601462
Option.ldPath,
14611463
Option.libc,
14621464
Option.libraryLevelEQ,
@@ -1747,12 +1749,14 @@ extension Option {
17471749
Option.warnSwift3ObjcInference,
17481750
Option.warningsAsErrors,
17491751
Option.weakLinkAtTarget,
1752+
Option.Werror,
17501753
Option.wholeModuleOptimization,
17511754
Option.windowsSdkRoot,
17521755
Option.windowsSdkVersion,
17531756
Option.wmo,
17541757
Option.workingDirectoryEQ,
17551758
Option.workingDirectory,
1759+
Option.Wwarning,
17561760
Option.Xcc,
17571761
Option.XclangLinker,
17581762
Option.Xfrontend,
@@ -1774,6 +1778,7 @@ extension Option {
17741778
case linkerOption
17751779
case modes
17761780
case pluginSearch
1781+
case warningTreating
17771782
}
17781783
}
17791784

@@ -1798,6 +1803,8 @@ extension Option.Group {
17981803
return "<mode options>"
17991804
case .pluginSearch:
18001805
return "<plugin search options>"
1806+
case .warningTreating:
1807+
return "<options to control warning treating>"
18011808
}
18021809
}
18031810
}
@@ -1823,6 +1830,8 @@ extension Option.Group {
18231830
return "MODES"
18241831
case .pluginSearch:
18251832
return nil
1833+
case .warningTreating:
1834+
return nil
18261835
}
18271836
}
18281837
}

TestInputs/ExplicitModuleBuilds/CHeaders/G.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 110000
1+
#if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 110000
22
#include "X.h"
33
#endif
44

0 commit comments

Comments
 (0)