1
1
// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5
2
2
3
-
4
- // RUN: %clang_cc1 -O2 -triple arm64-apple-iphoneos -fbounds-safety -emit-llvm %s -o - | FileCheck %s
3
+ // RUN: %clang_cc1 -O2 -triple arm64-apple-iphoneos -fbounds-safety -fno-bounds-safety-bringup-missing-checks=all -emit-llvm %s -o - | FileCheck %s
5
4
6
5
#include <ptrcheck.h>
7
6
@@ -38,24 +37,16 @@ int * __counted_by(len) baz(int len);
38
37
// CHECK-NEXT: br i1 [[FLEX_BASE_NULL_CHECK_NOT]], label %[[CONT69:.*]], label %[[FLEX_BASE_NONNULL:.*]], !annotation [[META6]]
39
38
// CHECK: [[FLEX_BASE_NONNULL]]:
40
39
// CHECK-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[CALL1]], i64 16
41
- // CHECK-NEXT: [[DOTNOT:%.*]] = icmp ugt ptr [[CALL1]], [[TMP1]], !annotation [[META7:![0-9]+]]
42
- // CHECK-NEXT: [[DOTNOT106:%.*]] = icmp ugt ptr [[TMP1]], [[ADD_PTR3]], !annotation [[META8:![0-9]+]]
43
- // CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[DOTNOT]], i1 true, i1 [[DOTNOT106]], !annotation [[META8]]
44
- // CHECK-NEXT: br i1 [[OR_COND]], label %[[TRAP]], label %[[CONT60:.*]], !prof [[PROF9:![0-9]+]], !annotation [[META7]]
45
- // CHECK: [[CONT60]]:
46
- // CHECK-NEXT: [[UPPER_INTPTR:%.*]] = ptrtoint ptr [[ADD_PTR3]] to i64, !annotation [[META10:![0-9]+]]
47
- // CHECK-NEXT: [[FAM_INTPTR:%.*]] = ptrtoint ptr [[TMP1]] to i64, !annotation [[META10]]
48
- // CHECK-NEXT: [[FLEX_AVAIL_COUNT:%.*]] = sub nuw i64 [[UPPER_INTPTR]], [[FAM_INTPTR]], !annotation [[META10]]
49
- // CHECK-NEXT: [[FLEX_AVAIL_COUNT_DIV:%.*]] = ashr exact i64 [[FLEX_AVAIL_COUNT]], 2, !annotation [[META10]]
50
- // CHECK-NEXT: [[FLEX_COUNT_INTPTR:%.*]] = zext nneg i32 [[LEN]] to i64, !annotation [[META10]]
51
- // CHECK-NEXT: [[FLEX_COUNT_CHECK_NOT:%.*]] = icmp uge i64 [[FLEX_AVAIL_COUNT_DIV]], [[FLEX_COUNT_INTPTR]], !annotation [[META10]]
40
+ // CHECK-NEXT: [[DOTNOT:%.*]] = icmp ule ptr [[CALL1]], [[TMP1]], !annotation [[META7:![0-9]+]]
41
+ // CHECK-NEXT: [[DOTNOT106:%.*]] = icmp ule ptr [[TMP1]], [[ADD_PTR3]], !annotation [[META8:![0-9]+]]
52
42
// CHECK-NEXT: [[TMP2:%.*]] = icmp ult ptr [[CALL1]], [[ADD_PTR3]], !annotation [[META8]]
53
- // CHECK-NEXT: [[OR_COND108:%.*]] = select i1 [[FLEX_COUNT_CHECK_NOT]], i1 [[TMP2]], i1 false, !annotation [[META6]]
54
- // CHECK-NEXT: br i1 [[OR_COND108]], label %[[CONT69]], label %[[TRAP]], !prof [[PROF11:![0-9]+]], !annotation [[META10]]
43
+ // CHECK-NEXT: [[TMP3:%.*]] = and i1 [[DOTNOT106]], [[TMP2]], !annotation [[META6]]
44
+ // CHECK-NEXT: [[OR_COND108:%.*]] = select i1 [[DOTNOT]], i1 [[TMP3]], i1 false, !annotation [[META6]]
45
+ // CHECK-NEXT: br i1 [[OR_COND108]], label %[[CONT69]], label %[[TRAP]], !prof [[PROF9:![0-9]+]], !annotation [[META7]]
55
46
// CHECK: [[CONT69]]:
56
47
// CHECK-NEXT: [[LEN70:%.*]] = getelementptr inbounds nuw i8, ptr [[CALL1]], i64 8
57
- // CHECK-NEXT: store i32 [[LEN]], ptr [[LEN70]], align 8, !tbaa [[TBAA12 :![0-9]+]]
58
- // CHECK-NEXT: store ptr [[CALL]], ptr [[CALL1]], align 8, !tbaa [[TBAA19 :![0-9]+]]
48
+ // CHECK-NEXT: store i32 [[LEN]], ptr [[LEN70]], align 8, !tbaa [[TBAA10 :![0-9]+]]
49
+ // CHECK-NEXT: store ptr [[CALL]], ptr [[CALL1]], align 8, !tbaa [[TBAA17 :![0-9]+]]
59
50
// CHECK-NEXT: ret ptr [[CALL1]]
60
51
//
61
52
struct Outer * foo (int len ) {
@@ -87,24 +78,16 @@ struct Outer *foo(int len) {
87
78
// CHECK-NEXT: br i1 [[FLEX_BASE_NULL_CHECK_NOT]], label %[[CONT69:.*]], label %[[FLEX_BASE_NONNULL:.*]], !annotation [[META6]]
88
79
// CHECK: [[FLEX_BASE_NONNULL]]:
89
80
// CHECK-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[CALL1]], i64 16
90
- // CHECK-NEXT: [[DOTNOT:%.*]] = icmp ugt ptr [[CALL1]], [[TMP1]], !annotation [[META7]]
91
- // CHECK-NEXT: [[DOTNOT106:%.*]] = icmp ugt ptr [[TMP1]], [[ADD_PTR3]], !annotation [[META8]]
92
- // CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[DOTNOT]], i1 true, i1 [[DOTNOT106]], !annotation [[META8]]
93
- // CHECK-NEXT: br i1 [[OR_COND]], label %[[TRAP]], label %[[CONT60:.*]], !prof [[PROF9]], !annotation [[META7]]
94
- // CHECK: [[CONT60]]:
95
- // CHECK-NEXT: [[UPPER_INTPTR:%.*]] = ptrtoint ptr [[ADD_PTR3]] to i64, !annotation [[META10]]
96
- // CHECK-NEXT: [[FAM_INTPTR:%.*]] = ptrtoint ptr [[TMP1]] to i64, !annotation [[META10]]
97
- // CHECK-NEXT: [[FLEX_AVAIL_COUNT:%.*]] = sub nuw i64 [[UPPER_INTPTR]], [[FAM_INTPTR]], !annotation [[META10]]
98
- // CHECK-NEXT: [[FLEX_AVAIL_COUNT_DIV:%.*]] = ashr exact i64 [[FLEX_AVAIL_COUNT]], 2, !annotation [[META10]]
99
- // CHECK-NEXT: [[FLEX_COUNT_INTPTR:%.*]] = zext nneg i32 [[LEN]] to i64, !annotation [[META10]]
100
- // CHECK-NEXT: [[FLEX_COUNT_CHECK_NOT:%.*]] = icmp uge i64 [[FLEX_AVAIL_COUNT_DIV]], [[FLEX_COUNT_INTPTR]], !annotation [[META10]]
81
+ // CHECK-NEXT: [[DOTNOT:%.*]] = icmp ule ptr [[CALL1]], [[TMP1]], !annotation [[META7]]
82
+ // CHECK-NEXT: [[DOTNOT106:%.*]] = icmp ule ptr [[TMP1]], [[ADD_PTR3]], !annotation [[META8]]
101
83
// CHECK-NEXT: [[TMP2:%.*]] = icmp ult ptr [[CALL1]], [[ADD_PTR3]], !annotation [[META8]]
102
- // CHECK-NEXT: [[OR_COND108:%.*]] = select i1 [[FLEX_COUNT_CHECK_NOT]], i1 [[TMP2]], i1 false, !annotation [[META6]]
103
- // CHECK-NEXT: br i1 [[OR_COND108]], label %[[CONT69]], label %[[TRAP]], !prof [[PROF11]], !annotation [[META10]]
84
+ // CHECK-NEXT: [[TMP3:%.*]] = and i1 [[DOTNOT106]], [[TMP2]], !annotation [[META6]]
85
+ // CHECK-NEXT: [[OR_COND108:%.*]] = select i1 [[DOTNOT]], i1 [[TMP3]], i1 false, !annotation [[META6]]
86
+ // CHECK-NEXT: br i1 [[OR_COND108]], label %[[CONT69]], label %[[TRAP]], !prof [[PROF9]], !annotation [[META7]]
104
87
// CHECK: [[CONT69]]:
105
- // CHECK-NEXT: store ptr [[CALL]], ptr [[CALL1]], align 8, !tbaa [[TBAA19 ]]
88
+ // CHECK-NEXT: store ptr [[CALL]], ptr [[CALL1]], align 8, !tbaa [[TBAA17 ]]
106
89
// CHECK-NEXT: [[LEN78:%.*]] = getelementptr inbounds nuw i8, ptr [[CALL1]], i64 8
107
- // CHECK-NEXT: store i32 [[LEN]], ptr [[LEN78]], align 8, !tbaa [[TBAA12 ]]
90
+ // CHECK-NEXT: store i32 [[LEN]], ptr [[LEN78]], align 8, !tbaa [[TBAA10 ]]
108
91
// CHECK-NEXT: ret ptr [[CALL1]]
109
92
//
110
93
struct Outer * foo2 (int len ) {
@@ -122,15 +105,13 @@ struct Outer *foo2(int len) {
122
105
// CHECK: [[META6]] = !{!"bounds-safety-check-ptr-neq-null"}
123
106
// CHECK: [[META7]] = !{!"bounds-safety-check-one-past-end-overflow"}
124
107
// CHECK: [[META8]] = !{!"bounds-safety-check-ptr-lt-upper-bound"}
125
- // CHECK: [[PROF9]] = !{!"branch_weights", i32 12286, i32 -12288}
126
- // CHECK: [[META10]] = !{!"bounds-safety-check-flexible-count-gt-bounds"}
127
- // CHECK: [[PROF11]] = !{!"branch_weights", i32 -8193, i32 8190}
128
- // CHECK: [[TBAA12]] = !{[[META13:![0-9]+]], [[META18:![0-9]+]], i64 8}
129
- // CHECK: [[META13]] = !{!"Inner", [[META14:![0-9]+]], i64 0, [[META18]], i64 8}
130
- // CHECK: [[META14]] = !{!"p1 int", [[META15:![0-9]+]], i64 0}
131
- // CHECK: [[META15]] = !{!"any pointer", [[META16:![0-9]+]], i64 0}
132
- // CHECK: [[META16]] = !{!"omnipotent char", [[META17:![0-9]+]], i64 0}
133
- // CHECK: [[META17]] = !{!"Simple C/C++ TBAA"}
134
- // CHECK: [[META18]] = !{!"int", [[META16]], i64 0}
135
- // CHECK: [[TBAA19]] = !{[[META13]], [[META14]], i64 0}
108
+ // CHECK: [[PROF9]] = !{!"branch_weights", i32 -16385, i32 16380}
109
+ // CHECK: [[TBAA10]] = !{[[META11:![0-9]+]], [[META16:![0-9]+]], i64 8}
110
+ // CHECK: [[META11]] = !{!"Inner", [[META12:![0-9]+]], i64 0, [[META16]], i64 8}
111
+ // CHECK: [[META12]] = !{!"p1 int", [[META13:![0-9]+]], i64 0}
112
+ // CHECK: [[META13]] = !{!"any pointer", [[META14:![0-9]+]], i64 0}
113
+ // CHECK: [[META14]] = !{!"omnipotent char", [[META15:![0-9]+]], i64 0}
114
+ // CHECK: [[META15]] = !{!"Simple C/C++ TBAA"}
115
+ // CHECK: [[META16]] = !{!"int", [[META14]], i64 0}
116
+ // CHECK: [[TBAA17]] = !{[[META11]], [[META12]], i64 0}
136
117
//.
0 commit comments