diff --git a/test/Concurrency/ShrinkWrap.swift b/test/Concurrency/ShrinkWrap.swift new file mode 100644 index 0000000000000..e5c80143a94cf --- /dev/null +++ b/test/Concurrency/ShrinkWrap.swift @@ -0,0 +1,49 @@ +// RUN: %empty-directory(%t) +// RUN: %target-build-swift -Xfrontend -disable-availability-checking -O %s -o %t/main +// RUN: %target-codesign %t/main +// RUN: %target-run %t/main | %FileCheck %s + +// REQUIRES: executable_test +// REQUIRES: concurrency + +// CHECK: Setting field Field(rawValue: "fxxxxxxx/0") +// CHECK: Setting field Field(rawValue: "fxxxxxxx/1") +// CHECK: Setting field Field(rawValue: "fxxxxxxx/2") +// CHECK: Setting field Field(rawValue: "fxxxxxxx/3") + +internal struct Field: Equatable, Hashable, Sendable { + internal var rawValue: String + + internal static var c0: Field { Field(rawValue: "fxxxxxxx/0") } + internal static var c1: Field { Field(rawValue: "fxxxxxxx/1") } + internal static var c2: Field { Field(rawValue: "fxxxxxxx/2") } + internal static var c3: Field { Field(rawValue: "fxxxxxxx/3") } + + internal static func c(_ c: Int) -> Field { + switch c { + case 0: return self.c0 + case 1: return self.c1 + case 2: return self.c2 + case 3: return self.c3 + default: + preconditionFailure("Only 0..<4 are valid") + } + } +} + +internal actor A { + @inline(never) + internal func set(_ field: Field) async throws { + print("Setting field \(field)") + } +} + +func doit() async throws { + let a = A() + for c in 0..