Skip to content

Commit bf51db3

Browse files
authored
Merge pull request swiftlang#30392 from gottesmm/pr-03e3d52c4db923b12298a536cc10b52fd26d7f88
[ownership] Add an interior_pointer test that validates we get the error msg we expect for ref_elt_addr, ref_tail_addr.
2 parents ca686a5 + 35f9b39 commit bf51db3

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
// RUN: %target-sil-opt -sil-ownership-verifier-enable-testing -enable-sil-verify-all=0 %s -o /dev/null 2>&1 | %FileCheck %s
2+
// REQUIRES: asserts
3+
4+
sil_stage canonical
5+
6+
class Klass {}
7+
8+
class KlassUser {
9+
var field: Klass
10+
}
11+
12+
// CHECK-LABEL: Function: 'simple_error_ref_element_addr'
13+
// CHECK-NEXT: Found use after free?!
14+
// CHECK-NEXT: Value: %1 = begin_borrow %0 : $KlassUser // users: %3, %2
15+
// CHECK-NEXT: Consuming User: end_borrow %1 : $KlassUser // id: %3
16+
// CHECK-NEXT: Non Consuming User: %5 = load [copy] %2 : $*Klass // user: %6
17+
// CHECK-NEXT: Block: bb0
18+
sil [ossa] @simple_error_ref_element_addr : $@convention(thin) (@owned KlassUser) -> @owned Klass {
19+
bb0(%0 : @owned $KlassUser):
20+
%1 = begin_borrow %0 : $KlassUser
21+
%2 = ref_element_addr %1 : $KlassUser, #KlassUser.field
22+
end_borrow %1 : $KlassUser
23+
destroy_value %0 : $KlassUser
24+
%3 = load [copy] %2 : $*Klass
25+
return %3 : $Klass
26+
}
27+
28+
// CHECK-LABEL: Function: 'simple_error_ref_tail_addr'
29+
// CHECK-NEXT: Found use after free?!
30+
// CHECK-NEXT: Value: %1 = begin_borrow %0 : $KlassUser // users: %3, %2
31+
// CHECK-NEXT: Consuming User: end_borrow %1 : $KlassUser // id: %3
32+
// CHECK-NEXT: Non Consuming User: %5 = load [copy] %2 : $*Klass // user: %6
33+
// CHECK-NEXT: Block: bb0
34+
sil [ossa] @simple_error_ref_tail_addr : $@convention(thin) (@owned KlassUser) -> @owned Klass {
35+
bb0(%0 : @owned $KlassUser):
36+
%1 = begin_borrow %0 : $KlassUser
37+
%2 = ref_tail_addr %1 : $KlassUser, $Klass
38+
end_borrow %1 : $KlassUser
39+
destroy_value %0 : $KlassUser
40+
%3 = load [copy] %2 : $*Klass
41+
return %3 : $Klass
42+
}

0 commit comments

Comments
 (0)