Skip to content

Commit ef42e91

Browse files
[BoundsSafety] Fix flexible-array-member-shared-decls-O2.c tests (NFC)
The tests started failing after 20e8de9. This removes redundant checks (in the tests) that ensure that the available count from flex base pointer is at least the assigned count. In the tests, the flex base pointer is of type `__sized_by(sizeof(struct Outer) + sizeof(int) * len)`, while the assigned count is `len`, which makes the check basically `len >= len`. rdar://153685860
1 parent 8cf8fa9 commit ef42e91

File tree

2 files changed

+39
-76
lines changed

2 files changed

+39
-76
lines changed

clang/test/BoundsSafety-legacy-checks/CodeGen/flexible-array-member-shared-decls-O2.c

Lines changed: 24 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5
22

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
54

65
#include <ptrcheck.h>
76

@@ -38,24 +37,16 @@ int * __counted_by(len) baz(int len);
3837
// CHECK-NEXT: br i1 [[FLEX_BASE_NULL_CHECK_NOT]], label %[[CONT69:.*]], label %[[FLEX_BASE_NONNULL:.*]], !annotation [[META6]]
3938
// CHECK: [[FLEX_BASE_NONNULL]]:
4039
// 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]+]]
5242
// 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]]
5546
// CHECK: [[CONT69]]:
5647
// 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]+]]
5950
// CHECK-NEXT: ret ptr [[CALL1]]
6051
//
6152
struct Outer *foo(int len) {
@@ -87,24 +78,16 @@ struct Outer *foo(int len) {
8778
// CHECK-NEXT: br i1 [[FLEX_BASE_NULL_CHECK_NOT]], label %[[CONT69:.*]], label %[[FLEX_BASE_NONNULL:.*]], !annotation [[META6]]
8879
// CHECK: [[FLEX_BASE_NONNULL]]:
8980
// 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]]
10183
// 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]]
10487
// 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]]
10689
// 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]]
10891
// CHECK-NEXT: ret ptr [[CALL1]]
10992
//
11093
struct Outer *foo2(int len) {
@@ -122,15 +105,13 @@ struct Outer *foo2(int len) {
122105
// CHECK: [[META6]] = !{!"bounds-safety-check-ptr-neq-null"}
123106
// CHECK: [[META7]] = !{!"bounds-safety-check-one-past-end-overflow"}
124107
// 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}
136117
//.

clang/test/BoundsSafety/CodeGen/flexible-array-member-shared-decls-O2.c

Lines changed: 15 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5
22

3-
// 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 -fbounds-safety-bringup-missing-checks=all -emit-llvm %s -o - | FileCheck %s
44

55
#include <ptrcheck.h>
66

@@ -40,19 +40,11 @@ int * __counted_by(len) baz(int len);
4040
// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ugt ptr [[CALL1]], [[TMP1]], !annotation [[META7:![0-9]+]]
4141
// CHECK-NEXT: [[DOTNOT110:%.*]] = icmp ugt ptr [[TMP1]], [[ADD_PTR3]], !annotation [[META8:![0-9]+]]
4242
// CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[DOTNOT]], i1 true, i1 [[DOTNOT110]], !annotation [[META8]]
43-
// CHECK-NEXT: br i1 [[OR_COND]], label %[[TRAP]], label %[[CONT60:.*]], !prof [[PROF9:![0-9]+]], !annotation [[META7]]
44-
// CHECK: [[CONT60]]:
45-
// CHECK-NEXT: [[UPPER_INTPTR:%.*]] = ptrtoint ptr [[ADD_PTR3]] to i64, !annotation [[META10:![0-9]+]]
46-
// CHECK-NEXT: [[FAM_INTPTR:%.*]] = ptrtoint ptr [[TMP1]] to i64, !annotation [[META10]]
47-
// CHECK-NEXT: [[FLEX_AVAIL_COUNT:%.*]] = sub nuw i64 [[UPPER_INTPTR]], [[FAM_INTPTR]], !annotation [[META10]]
48-
// CHECK-NEXT: [[FLEX_AVAIL_COUNT_DIV:%.*]] = ashr exact i64 [[FLEX_AVAIL_COUNT]], 2, !annotation [[META10]]
49-
// CHECK-NEXT: [[FLEX_COUNT_INTPTR:%.*]] = zext nneg i32 [[LEN]] to i64, !annotation [[META10]]
50-
// CHECK-NEXT: [[FLEX_COUNT_CHECK_NOT_NOT:%.*]] = icmp ult i64 [[FLEX_AVAIL_COUNT_DIV]], [[FLEX_COUNT_INTPTR]], !annotation [[META10]]
51-
// CHECK-NEXT: br i1 [[FLEX_COUNT_CHECK_NOT_NOT]], label %[[TRAP]], label %[[CONT70]], !prof [[PROF11:![0-9]+]], !annotation [[META10]]
43+
// CHECK-NEXT: br i1 [[OR_COND]], label %[[TRAP]], label %[[CONT70]], !prof [[PROF9:![0-9]+]], !annotation [[META7]]
5244
// CHECK: [[CONT70]]:
5345
// CHECK-NEXT: [[LEN71:%.*]] = getelementptr inbounds nuw i8, ptr [[CALL1]], i64 8
54-
// CHECK-NEXT: store i32 [[LEN]], ptr [[LEN71]], align 8, !tbaa [[TBAA12:![0-9]+]]
55-
// CHECK-NEXT: store ptr [[CALL]], ptr [[CALL1]], align 8, !tbaa [[TBAA19:![0-9]+]]
46+
// CHECK-NEXT: store i32 [[LEN]], ptr [[LEN71]], align 8, !tbaa [[TBAA10:![0-9]+]]
47+
// CHECK-NEXT: store ptr [[CALL]], ptr [[CALL1]], align 8, !tbaa [[TBAA17:![0-9]+]]
5648
// CHECK-NEXT: ret ptr [[CALL1]]
5749
//
5850
struct Outer *foo(int len) {
@@ -87,19 +79,11 @@ struct Outer *foo(int len) {
8779
// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ugt ptr [[CALL1]], [[TMP1]], !annotation [[META7]]
8880
// CHECK-NEXT: [[DOTNOT110:%.*]] = icmp ugt ptr [[TMP1]], [[ADD_PTR3]], !annotation [[META8]]
8981
// CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[DOTNOT]], i1 true, i1 [[DOTNOT110]], !annotation [[META8]]
90-
// CHECK-NEXT: br i1 [[OR_COND]], label %[[TRAP]], label %[[CONT60:.*]], !prof [[PROF9]], !annotation [[META7]]
91-
// CHECK: [[CONT60]]:
92-
// CHECK-NEXT: [[UPPER_INTPTR:%.*]] = ptrtoint ptr [[ADD_PTR3]] to i64, !annotation [[META10]]
93-
// CHECK-NEXT: [[FAM_INTPTR:%.*]] = ptrtoint ptr [[TMP1]] to i64, !annotation [[META10]]
94-
// CHECK-NEXT: [[FLEX_AVAIL_COUNT:%.*]] = sub nuw i64 [[UPPER_INTPTR]], [[FAM_INTPTR]], !annotation [[META10]]
95-
// CHECK-NEXT: [[FLEX_AVAIL_COUNT_DIV:%.*]] = ashr exact i64 [[FLEX_AVAIL_COUNT]], 2, !annotation [[META10]]
96-
// CHECK-NEXT: [[FLEX_COUNT_INTPTR:%.*]] = zext nneg i32 [[LEN]] to i64, !annotation [[META10]]
97-
// CHECK-NEXT: [[FLEX_COUNT_CHECK_NOT_NOT:%.*]] = icmp ult i64 [[FLEX_AVAIL_COUNT_DIV]], [[FLEX_COUNT_INTPTR]], !annotation [[META10]]
98-
// CHECK-NEXT: br i1 [[FLEX_COUNT_CHECK_NOT_NOT]], label %[[TRAP]], label %[[CONT70]], !prof [[PROF11]], !annotation [[META10]]
82+
// CHECK-NEXT: br i1 [[OR_COND]], label %[[TRAP]], label %[[CONT70]], !prof [[PROF9]], !annotation [[META7]]
9983
// CHECK: [[CONT70]]:
100-
// CHECK-NEXT: store ptr [[CALL]], ptr [[CALL1]], align 8, !tbaa [[TBAA19]]
84+
// CHECK-NEXT: store ptr [[CALL]], ptr [[CALL1]], align 8, !tbaa [[TBAA17]]
10185
// CHECK-NEXT: [[LEN79:%.*]] = getelementptr inbounds nuw i8, ptr [[CALL1]], i64 8
102-
// CHECK-NEXT: store i32 [[LEN]], ptr [[LEN79]], align 8, !tbaa [[TBAA12]]
86+
// CHECK-NEXT: store i32 [[LEN]], ptr [[LEN79]], align 8, !tbaa [[TBAA10]]
10387
// CHECK-NEXT: ret ptr [[CALL1]]
10488
//
10589
struct Outer *foo2(int len) {
@@ -118,14 +102,12 @@ struct Outer *foo2(int len) {
118102
// CHECK: [[META7]] = !{!"bounds-safety-check-one-past-end-overflow"}
119103
// CHECK: [[META8]] = !{!"bounds-safety-check-ptr-lt-upper-bound"}
120104
// CHECK: [[PROF9]] = !{!"branch_weights", i32 12286, i32 -12288}
121-
// CHECK: [[META10]] = !{!"bounds-safety-check-flexible-count-gt-bounds"}
122-
// CHECK: [[PROF11]] = !{!"branch_weights", i32 16381, i32 -16384}
123-
// CHECK: [[TBAA12]] = !{[[META13:![0-9]+]], [[META18:![0-9]+]], i64 8}
124-
// CHECK: [[META13]] = !{!"Inner", [[META14:![0-9]+]], i64 0, [[META18]], i64 8}
125-
// CHECK: [[META14]] = !{!"p1 int", [[META15:![0-9]+]], i64 0}
126-
// CHECK: [[META15]] = !{!"any pointer", [[META16:![0-9]+]], i64 0}
127-
// CHECK: [[META16]] = !{!"omnipotent char", [[META17:![0-9]+]], i64 0}
128-
// CHECK: [[META17]] = !{!"Simple C/C++ TBAA"}
129-
// CHECK: [[META18]] = !{!"int", [[META16]], i64 0}
130-
// CHECK: [[TBAA19]] = !{[[META13]], [[META14]], i64 0}
105+
// CHECK: [[TBAA10]] = !{[[META11:![0-9]+]], [[META16:![0-9]+]], i64 8}
106+
// CHECK: [[META11]] = !{!"Inner", [[META12:![0-9]+]], i64 0, [[META16]], i64 8}
107+
// CHECK: [[META12]] = !{!"p1 int", [[META13:![0-9]+]], i64 0}
108+
// CHECK: [[META13]] = !{!"any pointer", [[META14:![0-9]+]], i64 0}
109+
// CHECK: [[META14]] = !{!"omnipotent char", [[META15:![0-9]+]], i64 0}
110+
// CHECK: [[META15]] = !{!"Simple C/C++ TBAA"}
111+
// CHECK: [[META16]] = !{!"int", [[META14]], i64 0}
112+
// CHECK: [[TBAA17]] = !{[[META11]], [[META12]], i64 0}
131113
//.

0 commit comments

Comments
 (0)