11// #if directives don't work with SIL keywords, therefore please put ObjC tests
22// in `enum_objc.sil`.
3-
4- // RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil %s -gnone -emit-ir -disable-objc-interop | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize
3+ // RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil %s -gnone -emit-ir -enable-objc-interop | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize --check-prefix=CHECK-objc --check-prefix=CHECK-objc-%target-ptrsize
4+ // RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil %s -gnone -emit-ir -disable-objc-interop | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize --check-prefix=CHECK-native --check-prefix=CHECK-native-%target-ptrsize
55
66// REQUIRES: CPU=i386 || CPU=x86_64
77
@@ -1122,8 +1122,10 @@ enum SinglePayloadClass {
11221122// CHECK-64: entry:
11231123// CHECK-64: switch i64 %0, label {{%.*}} [
11241124// CHECK-64: i64 0, label {{%.*}}
1125- // CHECK-64: i64 1, label {{%.*}}
1126- // CHECK-64: i64 2, label {{%.*}}
1125+ // CHECK-objc-64: i64 2, label {{%.*}}
1126+ // CHECK-objc-64: i64 4, label {{%.*}}
1127+ // CHECK-native-64: i64 1, label {{%.*}}
1128+ // CHECK-native-64: i64 2, label {{%.*}}
11271129// CHECK-64: ]
11281130// CHECK-64: ; <label>
11291131// CHECK-64: inttoptr [[WORD]] %0 to %T4enum1CC*
@@ -1165,11 +1167,14 @@ enum SinglePayloadClassProtocol {
11651167// CHECK-64: define{{( dllexport)?}}{{( protected)?}} swiftcc void @single_payload_class_protocol_switch(i64, i64) {{.*}} {
11661168// CHECK-64: switch i64 %0, label {{%.*}} [
11671169// CHECK-64: i64 0, label {{%.*}}
1168- // CHECK-64: i64 1, label {{%.*}}
1169- // CHECK-64: i64 2, label {{%.*}}
1170+ // CHECK-objc-64: i64 2, label {{%.*}}
1171+ // CHECK-objc-64: i64 4, label {{%.*}}
1172+ // CHECK-native-64: i64 1, label {{%.*}}
1173+ // CHECK-native-64: i64 2, label {{%.*}}
11701174// CHECK-64: ]
11711175
1172- // CHECK-64: inttoptr i64 %0 to %swift.refcounted*
1176+ // CHECK-objc-64: inttoptr i64 %0 to %objc_object*
1177+ // CHECK-native-64: inttoptr i64 %0 to %swift.refcounted*
11731178// CHECK-64: inttoptr i64 %1 to i8**
11741179
11751180// CHECK-32: define{{( dllexport)?}}{{( protected)?}} swiftcc void @single_payload_class_protocol_switch(i32, i32) {{.*}} {
@@ -1179,7 +1184,8 @@ enum SinglePayloadClassProtocol {
11791184// CHECK-32: i32 2, label {{%.*}}
11801185// CHECK-32: ]
11811186
1182- // CHECK-32: inttoptr i32 %0 to %swift.refcounted*
1187+ // CHECK-objc-32: inttoptr i32 %0 to %objc_object*
1188+ // CHECK-native-32: inttoptr i32 %0 to %swift.refcounted*
11831189// CHECK-32: inttoptr i32 %1 to i8**
11841190
11851191sil @single_payload_class_protocol_switch : $(SinglePayloadClassProtocol) -> () {
@@ -2439,7 +2445,8 @@ entry(%0 : $DynamicSingleton<NoPayloads>):
24392445// Check that payloads get properly masked in nested single-payload enums.
24402446// rdar://problem/18841262
24412447// CHECK-64-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc i1 @optional_optional_class_protocol(i64, i64)
2442- // CHECK-64: icmp eq i64 %0, 1
2448+ // CHECK-objc-64: icmp eq i64 %0, 2
2449+ // CHECK-native-64: icmp eq i64 %0, 1
24432450// CHECK-32-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc i1 @optional_optional_class_protocol(i32, i32)
24442451// CHECK-32: icmp eq i32 %0, 1
24452452enum Optionable<T> {
@@ -2460,8 +2467,8 @@ struct ContainsUnownedObjC {
24602467 unowned let x: C
24612468}
24622469// CHECK-LABEL: define {{.*}} @optional_unowned() {{.*}} {
2463- // CHECK-64: ret { [[WORD]], [[WORD]] } { [[WORD]] 0, [[WORD]] 1 }
2464- // CHECK-32 : ret { [[WORD]], [[WORD]] } { [[WORD]] 0, [[WORD]] 1 }
2470+ // CHECK-objc: ret { [[WORD]], [[WORD]], i8 } { [[WORD]] 0, [[WORD]] 0, i8 1 }
2471+ // CHECK-native : ret { [[WORD]], [[WORD]] } { [[WORD]] 0, [[WORD]] 1 }
24652472sil @optional_unowned : $@convention(thin) () -> (Optionable<ContainsUnowned>, Optionable<Optionable<ContainsUnowned>>) {
24662473entry:
24672474 %a = enum $Optionable<ContainsUnowned>, #Optionable.none!enumelt
@@ -2470,8 +2477,8 @@ entry:
24702477 return %t : $(Optionable<ContainsUnowned>, Optionable<Optionable<ContainsUnowned>>)
24712478}
24722479// CHECK-LABEL: define {{.*}} @optional_unowned_objc() {{.*}} {
2473- // CHECK-64 : ret { [[WORD]], [[WORD]] } { [[WORD]] 0, [[WORD]] 1 }
2474- // CHECK-32: ret { [[WORD]], [[WORD]] } { [[WORD]] 0, [[WORD]] 1 }
2480+ // CHECK-objc : ret { [[WORD]], [[WORD]], i8 } { [[WORD]] 0, [[WORD]] 0, i8 1 }
2481+ // CHECK-native: ret { [[WORD]], [[WORD]] } { [[WORD]] 0, [[WORD]] 1 }
24752482sil @optional_unowned_objc : $@convention(thin) () -> (Optionable<ContainsUnownedObjC>, Optionable<Optionable<ContainsUnownedObjC>>) {
24762483entry:
24772484 %a = enum $Optionable<ContainsUnownedObjC>, #Optionable.none!enumelt
0 commit comments