@@ -1076,3 +1076,70 @@ bb0:
1076
1076
%9 = apply %8(%6) : $@convention(method) (@guaranteed String) -> @owned String
1077
1077
return %9 : $String
1078
1078
} // CHECK: Returns string: "%%%%%%a%% %%%%b%%"
1079
+
1080
+ // Tests for Ownership SIL.
1081
+
1082
+ // CHECK-LABEL: @interpretDestructureInt64
1083
+ sil [ossa] @interpretDestructureInt64 : $@convention(thin) () -> Builtin.Int64 {
1084
+ %1 = integer_literal $Builtin.Int64, 12
1085
+ %2 = struct $Int64 (%1 : $Builtin.Int64)
1086
+ %3 = destructure_struct %2 : $Int64
1087
+ return %3 : $Builtin.Int64
1088
+ } // CHECK: Returns int: 12
1089
+
1090
+ struct IntPair {
1091
+ var first: Builtin.Int64
1092
+ var second: Builtin.Int64
1093
+ }
1094
+
1095
+ // CHECK-LABEL: @interpretIntPairStruct
1096
+ sil [ossa] @interpretIntPairStruct : $@convention(thin) () -> Builtin.Int64 {
1097
+ bb0:
1098
+ %0 = integer_literal $Builtin.Int64, 17
1099
+ %1 = integer_literal $Builtin.Int64, 34
1100
+ %2 = struct $IntPair (%0: $Builtin.Int64, %1: $Builtin.Int64)
1101
+ (%3, %4) = destructure_struct %2 : $IntPair
1102
+ return %4 : $Builtin.Int64
1103
+ } // CHECK: Returns int: 34
1104
+
1105
+ sil [ossa] @constructCustomStructOSSA : $@convention(thin) () -> CustomStruct {
1106
+ bb0:
1107
+ %1 = integer_literal $Builtin.Int64, 11
1108
+ %2 = struct $Int64 (%1 : $Builtin.Int64)
1109
+ %3 = integer_literal $Builtin.Int64, 12
1110
+ %4 = struct $Int64 (%3 : $Builtin.Int64)
1111
+ %6 = integer_literal $Builtin.Int64, 13
1112
+ %7 = struct $Int64 (%6 : $Builtin.Int64)
1113
+ %8 = integer_literal $Builtin.Int1, 0
1114
+ %9 = struct $Bool (%8 : $Builtin.Int1)
1115
+
1116
+ %10 = struct $InnerStruct (%7 : $Int64, %9 : $Bool)
1117
+ %11 = tuple (%2 : $Int64, %4 : $Int64)
1118
+ %12 = struct $CustomStruct (%11 : $(Int64, Int64), %10 : $InnerStruct)
1119
+ return %12 : $CustomStruct
1120
+ }
1121
+
1122
+ // CHECK-LABEL: @interpretCustomStructOSSA
1123
+ sil [ossa] @interpretCustomStructOSSA : $@convention(thin) () -> Builtin.Int64 {
1124
+ bb0:
1125
+ %1 = function_ref @constructCustomStructOSSA : $@convention(thin) () -> CustomStruct
1126
+ %2 = apply %1() : $@convention(thin) () -> CustomStruct
1127
+ (%3, %4) = destructure_struct %2 : $CustomStruct
1128
+ (%5, %6) = destructure_tuple %3 : $(Int64, Int64)
1129
+ (%7, %8) = destructure_struct %4 : $InnerStruct
1130
+ %9 = destructure_struct %5 : $Int64
1131
+ %10 = destructure_struct %6 : $Int64
1132
+ %11 = destructure_struct %7 : $Int64
1133
+ %12 = destructure_struct %8 : $Bool
1134
+ cond_fail %12 : $Builtin.Int1
1135
+
1136
+ %13 = integer_literal $Builtin.Int1, -1
1137
+ %14 = builtin "sadd_with_overflow_Int64"(%9 : $Builtin.Int64, %10 : $Builtin.Int64, %13 : $Builtin.Int1) : $(Builtin.Int64, Builtin.Int1)
1138
+ (%15, %16) = destructure_tuple %14 : $(Builtin.Int64, Builtin.Int1)
1139
+ cond_fail %16 : $Builtin.Int1
1140
+
1141
+ %17 = builtin "sadd_with_overflow_Int64"(%15 : $Builtin.Int64, %11 : $Builtin.Int64, %13 : $Builtin.Int1) : $(Builtin.Int64, Builtin.Int1)
1142
+ (%18, %19) = destructure_tuple %17 : $(Builtin.Int64, Builtin.Int1)
1143
+ cond_fail %19 : $Builtin.Int1
1144
+ return %18 : $Builtin.Int64
1145
+ } // CHECK: Returns int: 36
0 commit comments