Skip to content

Commit 5a6f591

Browse files
authored
Merge pull request #6986 from eeckstein/fix-assertion-testcase
2 parents 567c0d9 + c1ef079 commit 5a6f591

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed

test/IRGen/tail_alloc.sil

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,25 @@ bb0(%0 : $TestClass, %1 : $@thick T.Type):
160160
return %p : $Builtin.RawPointer
161161
}
162162

163+
struct Str<T> {
164+
var t: T
165+
}
166+
167+
// CHECK-LABEL: define{{( protected)?}} i8* @project_tail_generic_struct
168+
// CHECK: [[S1:%[0-9]+]] = add i64 17, %flags.alignmentMask
169+
// CHECK-NEXT: [[S2:%[0-9]+]] = xor i64 %flags.alignmentMask, -1
170+
// CHECK-NEXT: [[S3:%[0-9]+]] = and i64 [[S1]], [[S2]]
171+
// CHECK-NEXT: [[S4:%[0-9]+]] = bitcast %{{.*}}* %0 to i8*
172+
// CHECK-NEXT: [[S5:%[0-9]+]] = getelementptr inbounds i8, i8* [[S4]], i64 [[S3]]
173+
// CHECK-NEXT: %tailaddr = bitcast i8* [[S5]] to %{{.*}}Str
174+
// CHECK: ret
175+
sil @project_tail_generic_struct : $@convention(thin) <T> (TestClass, @thick T.Type) -> Builtin.RawPointer {
176+
bb0(%0 : $TestClass, %1 : $@thick T.Type):
177+
%a = ref_tail_addr %0 : $TestClass, $Str<T>
178+
%p = address_to_pointer %a : $*Str<T> to $Builtin.RawPointer
179+
return %p : $Builtin.RawPointer
180+
}
181+
163182
// CHECK-LABEL: define{{( protected)?}} void @project_tail_index_byte_to_int
164183
// CHECK: [[S1:%[0-9]+]] = bitcast i8* %0 to %Vs4Int8*
165184
// CHECK-NEXT: [[S2:%[0-9]+]] = getelementptr inbounds %Vs4Int8, %Vs4Int8* [[S1]], i64 2
@@ -179,6 +198,22 @@ bb0(%0 : $Builtin.RawPointer, %1 : $Int32):
179198
return %r : $()
180199
}
181200

201+
// CHECK-LABEL: define{{( protected)?}} i8* @project_tail_index_generic_struct
202+
// CHECK: call %swift.type* @{{.*Str.*}}(%swift.type* %T)
203+
// CHECK: load
204+
// CHECK: and
205+
// CHECK: xor
206+
// CHECK: and
207+
// CHECK: ret
208+
sil @project_tail_index_generic_struct : $@convention(thin) <T> (Builtin.RawPointer, @thick T.Type) -> Builtin.RawPointer {
209+
bb0(%0 : $Builtin.RawPointer, %1 : $@thick T.Type):
210+
%a1 = pointer_to_address %0 : $Builtin.RawPointer to [strict] $*Int8
211+
%c = integer_literal $Builtin.Word, 2
212+
%a2 = tail_addr %a1 : $*Int8, %c : $Builtin.Word, $Str<T>
213+
%p = address_to_pointer %a2 : $*Str<T> to $Builtin.RawPointer
214+
return %p : $Builtin.RawPointer
215+
}
216+
182217
// sizeof(EmptyClass) = 16 bytes
183218
class EmptyClass {
184219
}

0 commit comments

Comments
 (0)