Skip to content

Commit 8292c67

Browse files
committed
[ModuleInterface] Print -enable-experimental-opaque-type-erasure in
swiftinterface files.
1 parent 990c870 commit 8292c67

File tree

4 files changed

+41
-10
lines changed

4 files changed

+41
-10
lines changed

include/swift/Basic/Features.def

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ EXPERIMENTAL_FEATURE(AdditiveArithmeticDerivedConformances, false)
238238
EXPERIMENTAL_FEATURE(SendableCompletionHandlers, false)
239239

240240
/// Enables opaque type erasure without also enabling implict dynamic
241-
EXPERIMENTAL_FEATURE(OpaqueTypeErasure, false)
241+
EXPERIMENTAL_FEATURE(OpaqueTypeErasure, true)
242242

243243
/// Whether to perform round-trip testing of the Swift Swift parser.
244244
EXPERIMENTAL_FEATURE(ParserRoundTrip, false)

include/swift/Option/FrontendOptions.td

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,10 @@ let Flags = [FrontendOption, NoDriverOption, HelpHidden, ModuleInterfaceOption]
306306
Flag<["-"], "disable-objc-interop">,
307307
HelpText<"Disable Objective-C interop code generation and config directives">;
308308

309+
def enable_experimental_opaque_type_erasure :
310+
Flag<["-"], "enable-experimental-opaque-type-erasure">,
311+
HelpText<"Type-erases opaque types that conform to @_typeEraser protocols">;
312+
309313
def enable_objc_attr_requires_foundation_module :
310314
Flag<["-"], "enable-objc-attr-requires-foundation-module">,
311315
HelpText<"Enable requiring uses of @objc to require importing the "
@@ -696,10 +700,6 @@ def enable_implicit_dynamic : Flag<["-"], "enable-implicit-dynamic">,
696700
def bypass_resilience : Flag<["-"], "bypass-resilience-checks">,
697701
Flags<[FrontendOption, NoInteractiveOption, HelpHidden]>,
698702
HelpText<"Ignore all checks for module resilience.">;
699-
700-
def enable_experimental_opaque_type_erasure : Flag<["-"], "enable-experimental-opaque-type-erasure">,
701-
Flags<[FrontendOption, NoInteractiveOption, HelpHidden]>,
702-
HelpText<"Type-erases opaque types that conform to @_typeEraser protocols">;
703703

704704
def enable_llvm_vfe : Flag<["-"], "enable-llvm-vfe">,
705705
Flags<[FrontendOption, NoInteractiveOption, HelpHidden]>,
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import erasure
2+
3+
var erased: some P {
4+
testTypeErased()
5+
}
Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,43 @@
11
// RUN: %target-swift-frontend -typecheck -disable-availability-checking -dump-ast -enable-experimental-opaque-type-erasure %s | %FileCheck %s
22

3-
class AnyP: P {
4-
init<T: P>(erasing: T) {}
3+
public struct AnyP: P {
4+
public init<T: P>(erasing: T) {}
55
}
66

77
@_typeEraser(AnyP)
8-
protocol P {}
8+
public protocol P {}
99

10-
struct ConcreteP: P, Hashable {}
10+
public struct ConcreteP: P, Hashable {
11+
public init() {}
12+
}
1113

1214
// CHECK-LABEL: testTypeErased
13-
func testTypeErased() -> some P {
15+
@inlinable public func testTypeErased() -> some P {
1416
// CHECK: underlying_to_opaque_expr{{.*}}"some P"
1517
// CHECK-NEXT: call_expr implicit type="AnyP"
1618
ConcreteP()
1719
}
20+
21+
// Check with -enable-experimental-opaque-type-erasure
22+
23+
// RUN: %empty-directory(%t)
24+
// RUN: %target-swift-emit-module-interface(%t/test1/erasure.swiftinterface) %s -module-name erasure -enable-experimental-opaque-type-erasure -enable-library-evolution
25+
// RUN: %FileCheck %s --check-prefix CHECK-INTERFACE < %t/test1/erasure.swiftinterface
26+
// CHECK-INTERFACE: swift-module-flags:{{.*}} -enable-experimental-opaque-type-erasure
27+
28+
// RUN: %target-swift-frontend -I %t/test1/ -emit-sil %S/Inputs/import_with_opaque_type_erasure.swift | %FileCheck %s --check-prefix CHECK-UNDERLYING-TYPE
29+
// CHECK-UNDERLYING-TYPE-LABEL: s31import_with_opaque_type_erasure6erasedQrvg
30+
// CHECK-UNDERLYING-TYPE: bb0(%0 : $*AnyP):
31+
// CHECK-UNDERLYING-TYPE: function_ref @$s7erasure14testTypeErasedQryF : $@convention(thin) @substituted <τ_0_0> () -> @out τ_0_0 for <AnyP>
32+
33+
34+
// Check with -enable-experimental-feature OpaqueTypeErasure
35+
36+
// RUN: %target-swift-emit-module-interface(%t/test2/erasure.swiftinterface) %s -module-name erasure -enable-experimental-feature OpaqueTypeErasure -enable-library-evolution
37+
// RUN: %FileCheck %s --check-prefix CHECK-INTERFACE2 < %t/test2/erasure.swiftinterface
38+
// CHECK-INTERFACE2: swift-module-flags:{{.*}} -enable-experimental-feature OpaqueTypeErasure
39+
40+
// RUN: %target-swift-frontend -I %t/test2/ -emit-sil %S/Inputs/import_with_opaque_type_erasure.swift | %FileCheck %s --check-prefix CHECK-UNDERLYING-TYPE2
41+
// CHECK-UNDERLYING-TYPE2-LABEL: s31import_with_opaque_type_erasure6erasedQrvg
42+
// CHECK-UNDERLYING-TYPE2: bb0(%0 : $*AnyP):
43+
// CHECK-UNDERLYING-TYPE2: function_ref @$s7erasure14testTypeErasedQryF : $@convention(thin) @substituted <τ_0_0> () -> @out τ_0_0 for <AnyP>

0 commit comments

Comments
 (0)