Skip to content

Commit c6ce442

Browse files
authored
Merge pull request #68358 from zoecarver/embedded-requires-wmo
[embedded] Require whole module optimization in embedded mode.
2 parents 44a4d69 + 8afe689 commit c6ce442

16 files changed

+38
-24
lines changed

include/swift/AST/DiagnosticsFrontend.def

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -556,6 +556,8 @@ ERROR(layout_string_instantiation_without_layout_strings,none,
556556

557557
ERROR(evolution_with_embedded,none,
558558
"Library evolution cannot be enabled with embedded Swift.", ())
559+
ERROR(wmo_with_embedded,none,
560+
"Whole module optimization (wmo) must be enabled with embedded Swift.", ())
559561

560562
#define UNDEFINE_DIAGNOSTIC_MACROS
561563
#include "DefineDiagnosticMacros.h"

lib/Frontend/CompilerInvocation.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1340,6 +1340,15 @@ static bool ParseLangArgs(LangOptions &Opts, ArgList &Args,
13401340
}
13411341
}
13421342

1343+
// Is this the correct way to query for WMO?
1344+
bool isWMO =
1345+
Args.hasArg(OPT_wmo) ||
1346+
Args.hasArg(OPT_whole_module_optimization);
1347+
if (!isWMO && Opts.hasFeature(Feature::Embedded)) {
1348+
Diags.diagnose(SourceLoc(), diag::wmo_with_embedded);
1349+
HadError = true;
1350+
}
1351+
13431352
return HadError || UnsupportedOS || UnsupportedArch;
13441353
}
13451354

test/embedded/anyobject-error-no-stdlib.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %target-swift-emit-ir -parse-stdlib %s -enable-experimental-feature Embedded -verify
1+
// RUN: %target-swift-emit-ir -parse-stdlib %s -enable-experimental-feature Embedded -verify -wmo
22

33
public enum Never {}
44

test/embedded/availability-code-removal.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
// - (2) unavailable function bodies is removed in embedded Swift,
88
// - (3) the test() function is not reported by the existential checker.
99

10-
// RUN: %target-swift-frontend -emit-ir %s -parse-stdlib | %FileCheck %s --check-prefix CHECK-A
11-
// RUN: %target-swift-frontend -emit-ir %s -parse-stdlib -enable-experimental-feature Embedded | %FileCheck %s --check-prefix CHECK-B
10+
// RUN: %target-swift-frontend -emit-ir %s -parse-stdlib -wmo | %FileCheck %s --check-prefix CHECK-A
11+
// RUN: %target-swift-frontend -emit-ir %s -parse-stdlib -enable-experimental-feature Embedded -wmo | %FileCheck %s --check-prefix CHECK-B
1212

1313
public protocol Player {}
1414
struct Concrete: Player {}

test/embedded/availability.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
// Building with regular Swift should succeed
2-
// RUN: %target-swift-emit-ir %s -parse-stdlib
2+
// RUN: %target-swift-emit-ir %s -parse-stdlib -wmo
33

44
// Building with embedded Swift should produce unavailability errors
5-
// RUN: %target-typecheck-verify-swift -parse-stdlib -enable-experimental-feature Embedded
5+
// RUN: %target-typecheck-verify-swift -parse-stdlib -enable-experimental-feature Embedded -wmo
66

77
@_unavailableInEmbedded
88
public func embedded() { }

test/embedded/basic-errors-no-stdlib.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: not %target-swift-frontend -emit-ir %s -parse-stdlib -enable-experimental-feature Embedded 2>&1 | %FileCheck %s
1+
// RUN: not %target-swift-frontend -emit-ir %s -parse-stdlib -enable-experimental-feature Embedded -wmo 2>&1 | %FileCheck %s
22

33
public protocol Player {}
44
struct Concrete: Player {}

test/embedded/basic-irgen-no-stdlib.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %target-swift-emit-ir %s -parse-stdlib -enable-experimental-feature Embedded -target arm64e-apple-none | %FileCheck %s
1+
// RUN: %target-swift-emit-ir %s -parse-stdlib -enable-experimental-feature Embedded -target arm64e-apple-none -wmo | %FileCheck %s
22

33
// TODO: investigate why windows is generating more metadata.
44
// XFAIL: OS=windows-msvc

test/embedded/basic-modules-no-stdlib.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
// RUN: %empty-directory(%t)
22
// RUN: %{python} %utils/split_file.py -o %t %s
33

4-
// RUN: %target-swift-frontend -swift-version 5 -emit-module -o %t/MyModule.swiftmodule %t/MyModule.swift -parse-stdlib -enable-experimental-feature Embedded
5-
// RUN: %target-swift-frontend -swift-version 5 -emit-ir -I %t %t/Main.swift -parse-stdlib -enable-experimental-feature Embedded | %FileCheck %s
4+
// RUN: %target-swift-frontend -swift-version 5 -emit-module -o %t/MyModule.swiftmodule %t/MyModule.swift -parse-stdlib -enable-experimental-feature Embedded -wmo
5+
// RUN: %target-swift-frontend -swift-version 5 -emit-ir -I %t %t/Main.swift -parse-stdlib -enable-experimental-feature Embedded -wmo | %FileCheck %s
66

77
// REQUIRES: swift_in_compiler
88

test/embedded/basic-modules-validation-no-stdlib.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,16 @@
22
// RUN: %{python} %utils/split_file.py -o %t %s
33

44
// both modules are embedded - ok
5-
// RUN: %target-swift-frontend -emit-module -o %t/MyModule.swiftmodule %t/MyModule.swift -parse-stdlib -enable-experimental-feature Embedded
6-
// RUN: %target-swift-frontend -emit-ir -I %t %t/Main.swift -parse-stdlib -enable-experimental-feature Embedded
5+
// RUN: %target-swift-frontend -emit-module -o %t/MyModule.swiftmodule %t/MyModule.swift -parse-stdlib -enable-experimental-feature Embedded -wmo
6+
// RUN: %target-swift-frontend -emit-ir -I %t %t/Main.swift -parse-stdlib -enable-experimental-feature Embedded -wmo
77

88
// MyModule is not embedded - error
9-
// RUN: %target-swift-frontend -emit-module -o %t/MyModule.swiftmodule %t/MyModule.swift -parse-stdlib
10-
// RUN: not %target-swift-frontend -emit-ir -I %t %t/Main.swift -parse-stdlib -enable-experimental-feature Embedded 2>&1 | %FileCheck %s --check-prefix CHECK-A
9+
// RUN: %target-swift-frontend -emit-module -o %t/MyModule.swiftmodule %t/MyModule.swift -parse-stdlib -wmo
10+
// RUN: not %target-swift-frontend -emit-ir -I %t %t/Main.swift -parse-stdlib -enable-experimental-feature Embedded -wmo 2>&1 | %FileCheck %s --check-prefix CHECK-A
1111

1212
// main module is not embedded - error
13-
// RUN: %target-swift-frontend -emit-module -o %t/MyModule.swiftmodule %t/MyModule.swift -parse-stdlib -enable-experimental-feature Embedded
14-
// RUN: not %target-swift-frontend -emit-ir -I %t %t/Main.swift -parse-stdlib 2>&1 | %FileCheck %s --check-prefix CHECK-B
13+
// RUN: %target-swift-frontend -emit-module -o %t/MyModule.swiftmodule %t/MyModule.swift -parse-stdlib -enable-experimental-feature Embedded -wmo
14+
// RUN: not %target-swift-frontend -emit-ir -I %t %t/Main.swift -parse-stdlib -wmo 2>&1 | %FileCheck %s --check-prefix CHECK-B
1515

1616
// BEGIN MyModule.swift
1717

test/embedded/classes-generic-no-stdlib.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
// RUN: %target-swift-emit-sil %s -parse-stdlib -enable-experimental-feature Embedded -target arm64e-apple-none | %FileCheck %s --check-prefix CHECK-SIL
2-
// RUN: %target-swift-emit-ir %s -parse-stdlib -enable-experimental-feature Embedded -target arm64e-apple-none | %FileCheck %s --check-prefix CHECK-IR
1+
// RUN: %target-swift-emit-sil %s -parse-stdlib -enable-experimental-feature Embedded -target arm64e-apple-none -wmo | %FileCheck %s --check-prefix CHECK-SIL
2+
// RUN: %target-swift-emit-ir %s -parse-stdlib -enable-experimental-feature Embedded -target arm64e-apple-none -wmo | %FileCheck %s --check-prefix CHECK-IR
33

44
// REQUIRES: swift_in_compiler
55

test/embedded/classes-methods-no-stdlib.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %target-swift-emit-ir %s -parse-stdlib -enable-experimental-feature Embedded -target arm64e-apple-none | %FileCheck %s
1+
// RUN: %target-swift-emit-ir %s -parse-stdlib -enable-experimental-feature Embedded -target arm64e-apple-none -wmo | %FileCheck %s
22

33
public class MyClass {
44
func foo() { }

test/embedded/classes-no-stdlib.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %target-swift-emit-ir %s -parse-stdlib -enable-experimental-feature Embedded -target arm64e-apple-none | %FileCheck %s
1+
// RUN: %target-swift-emit-ir %s -parse-stdlib -enable-experimental-feature Embedded -target arm64e-apple-none -wmo | %FileCheck %s
22

33
public class MyClass {}
44

test/embedded/classes-non-final-method-no-stdlib.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %target-swift-emit-ir -verify %s -parse-stdlib -enable-experimental-feature Embedded -target arm64e-apple-none
1+
// RUN: %target-swift-emit-ir -verify %s -parse-stdlib -enable-experimental-feature Embedded -target arm64e-apple-none -wmo
22

33
public class MyClass {
44
func foo<T>(t: T) { } // expected-error {{classes cannot have non-final generic fuctions in embedded Swift}}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: not %target-swift-frontend -emit-ir %s -enable-library-evolution -enable-experimental-feature Embedded 2>&1 | %FileCheck %s
2-
// RUN: not %target-swift-frontend -emit-ir %s -enable-resilience -enable-experimental-feature Embedded 2>&1 | %FileCheck %s
1+
// RUN: not %target-swift-frontend -emit-ir %s -enable-library-evolution -enable-experimental-feature Embedded -wmo 2>&1 | %FileCheck %s
2+
// RUN: not %target-swift-frontend -emit-ir %s -enable-resilience -enable-experimental-feature Embedded -wmo 2>&1 | %FileCheck %s
33

44
// CHECK: error: Library evolution cannot be enabled with embedded Swift.

test/embedded/internalize-no-stdlib.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// This test checks that embedded Swift doesn't mark public functions/symbols as llvm.used / llvm.compiler.used
22

3-
// RUN: %target-swift-emit-ir %s -parse-stdlib -enable-experimental-feature Embedded -target arm64e-apple-none-elf | %FileCheck %s --check-prefix CHECK-ELF
4-
// RUN: %target-swift-emit-ir %s -parse-stdlib -enable-experimental-feature Embedded -target arm64e-apple-none-macho | %FileCheck %s --check-prefix CHECK-MACHO
3+
// RUN: %target-swift-emit-ir %s -parse-stdlib -enable-experimental-feature Embedded -target arm64e-apple-none-elf -wmo | %FileCheck %s --check-prefix CHECK-ELF
4+
// RUN: %target-swift-emit-ir %s -parse-stdlib -enable-experimental-feature Embedded -target arm64e-apple-none-macho -wmo | %FileCheck %s --check-prefix CHECK-MACHO
55

66
// REQUIRES: swift_in_compiler
77

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
// RUN: not %target-swift-frontend -emit-ir %s -enable-experimental-feature Embedded 2>&1 | %FileCheck %s
2+
3+
// CHECK: error: Whole module optimization (wmo) must be enabled with embedded Swift.

0 commit comments

Comments
 (0)