Skip to content

Commit 4343ff6

Browse files
committed
[BoundsSafety] Fix failing codegen tests (NFC)
Upstream now folds (gep inbounds null, X) -> null. This updates our O2 tests to reflect the new output. Caused by 5a99355 (llvm#130742).
1 parent 2b8f020 commit 4343ff6

File tree

3 files changed

+16
-42
lines changed

3 files changed

+16
-42
lines changed

clang/test/BoundsSafety/CodeGen/bounds-attributed-in-return-null-system-header-O2.c

Lines changed: 8 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,10 @@ void consume(int* __bidi_indexable);
2525
// LEGACY-SAME: i32 noundef [[COUNT:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] {
2626
// LEGACY-NEXT: [[ENTRY:.*:]]
2727
// LEGACY-NEXT: [[BYVAL_TEMP:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8
28-
// LEGACY-NEXT: [[IDX_EXT:%.*]] = sext i32 [[COUNT]] to i64
29-
// LEGACY-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i32, ptr null, i64 [[IDX_EXT]]
30-
// LEGACY-NEXT: call void @llvm.lifetime.start.p0(i64 24, ptr nonnull [[BYVAL_TEMP]]) #[[ATTR3:[0-9]+]]
31-
// LEGACY-NEXT: store ptr null, ptr [[BYVAL_TEMP]], align 8
32-
// LEGACY-NEXT: [[PTR_SROA_4_0_BYVAL_TEMP_SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[BYVAL_TEMP]], i64 8
33-
// LEGACY-NEXT: store ptr [[ADD_PTR]], ptr [[PTR_SROA_4_0_BYVAL_TEMP_SROA_IDX]], align 8
34-
// LEGACY-NEXT: [[PTR_SROA_5_0_BYVAL_TEMP_SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[BYVAL_TEMP]], i64 16
35-
// LEGACY-NEXT: store ptr null, ptr [[PTR_SROA_5_0_BYVAL_TEMP_SROA_IDX]], align 8, !tbaa [[TBAA2:![0-9]+]]
36-
// LEGACY-NEXT: call void @consume(ptr noundef nonnull [[BYVAL_TEMP]]) #[[ATTR3]]
37-
// LEGACY-NEXT: call void @llvm.lifetime.end.p0(i64 24, ptr nonnull [[BYVAL_TEMP]]) #[[ATTR3]]
28+
// LEGACY-NEXT: call void @llvm.lifetime.start.p0(i64 24, ptr nonnull [[BYVAL_TEMP]]) #[[ATTR4:[0-9]+]]
29+
// LEGACY-NEXT: call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) [[BYVAL_TEMP]], i8 0, i64 24, i1 false)
30+
// LEGACY-NEXT: call void @consume(ptr noundef nonnull [[BYVAL_TEMP]]) #[[ATTR4]]
31+
// LEGACY-NEXT: call void @llvm.lifetime.end.p0(i64 24, ptr nonnull [[BYVAL_TEMP]]) #[[ATTR4]]
3832
// LEGACY-NEXT: ret void
3933
//
4034
void use_inline_header_func_unspecified_ptr(int count) {
@@ -62,16 +56,10 @@ void use_inline_header_func_unspecified_ptr(int count) {
6256
// LEGACY-SAME: i32 noundef [[COUNT:%.*]]) local_unnamed_addr #[[ATTR0]] {
6357
// LEGACY-NEXT: [[ENTRY:.*:]]
6458
// LEGACY-NEXT: [[BYVAL_TEMP:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8
65-
// LEGACY-NEXT: [[IDX_EXT:%.*]] = sext i32 [[COUNT]] to i64
66-
// LEGACY-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i32, ptr null, i64 [[IDX_EXT]]
67-
// LEGACY-NEXT: call void @llvm.lifetime.start.p0(i64 24, ptr nonnull [[BYVAL_TEMP]]) #[[ATTR3]]
68-
// LEGACY-NEXT: store ptr null, ptr [[BYVAL_TEMP]], align 8
69-
// LEGACY-NEXT: [[PTR_SROA_4_0_BYVAL_TEMP_SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[BYVAL_TEMP]], i64 8
70-
// LEGACY-NEXT: store ptr [[ADD_PTR]], ptr [[PTR_SROA_4_0_BYVAL_TEMP_SROA_IDX]], align 8
71-
// LEGACY-NEXT: [[PTR_SROA_5_0_BYVAL_TEMP_SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[BYVAL_TEMP]], i64 16
72-
// LEGACY-NEXT: store ptr null, ptr [[PTR_SROA_5_0_BYVAL_TEMP_SROA_IDX]], align 8, !tbaa [[TBAA2]]
73-
// LEGACY-NEXT: call void @consume(ptr noundef nonnull [[BYVAL_TEMP]]) #[[ATTR3]]
74-
// LEGACY-NEXT: call void @llvm.lifetime.end.p0(i64 24, ptr nonnull [[BYVAL_TEMP]]) #[[ATTR3]]
59+
// LEGACY-NEXT: call void @llvm.lifetime.start.p0(i64 24, ptr nonnull [[BYVAL_TEMP]]) #[[ATTR4]]
60+
// LEGACY-NEXT: call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) [[BYVAL_TEMP]], i8 0, i64 24, i1 false)
61+
// LEGACY-NEXT: call void @consume(ptr noundef nonnull [[BYVAL_TEMP]]) #[[ATTR4]]
62+
// LEGACY-NEXT: call void @llvm.lifetime.end.p0(i64 24, ptr nonnull [[BYVAL_TEMP]]) #[[ATTR4]]
7563
// LEGACY-NEXT: ret void
7664
//
7765
void use_inline_header_func_unsafe_indexable_ptr(int count) {
@@ -82,9 +70,3 @@ void use_inline_header_func_unsafe_indexable_ptr(int count) {
8270
// CHECK: [[META2]] = !{!"bounds-safety-generic"}
8371
// CHECK: [[PROF3]] = !{!"branch_weights", i32 1048575, i32 1}
8472
//.
85-
// LEGACY: [[TBAA2]] = !{[[META3:![0-9]+]], [[META3]], i64 0}
86-
// LEGACY: [[META3]] = !{!"p1 int", [[META4:![0-9]+]], i64 0}
87-
// LEGACY: [[META4]] = !{!"any pointer", [[META5:![0-9]+]], i64 0}
88-
// LEGACY: [[META5]] = !{!"omnipotent char", [[META6:![0-9]+]], i64 0}
89-
// LEGACY: [[META6]] = !{!"Simple C/C++ TBAA"}
90-
//.

clang/test/BoundsSafety/CodeGen/nested-struct-member-count-O2.c

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -42,24 +42,21 @@ char access(struct Outer *bar, int index) {
4242

4343

4444

45-
// CHECK-LABEL: define dso_local ptr @assign(
45+
// CHECK-LABEL: define dso_local noundef nonnull ptr @assign(
4646
// CHECK-SAME: ptr noundef readonly captures(none) [[BAR:%.*]], i32 noundef [[LEN:%.*]]) local_unnamed_addr #[[ATTR0]] {
4747
// CHECK-NEXT: entry:
48-
// CHECK-NEXT: [[AGG_TEMP1_SROA_0_0_COPYLOAD:%.*]] = load ptr, ptr [[BAR]], align 8
48+
// CHECK-NEXT: [[AGG_TEMP1_SROA_0_0_COPYLOAD:%.*]] = load ptr, ptr [[BAR]], align 8, !nonnull {{![0-9]+}}, !noundef {{![0-9]+}}
4949
// CHECK-NEXT: [[AGG_TEMP1_SROA_2_0_BAR_SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[BAR]], i64 8
5050
// CHECK-NEXT: [[AGG_TEMP1_SROA_2_0_COPYLOAD:%.*]] = load ptr, ptr [[AGG_TEMP1_SROA_2_0_BAR_SROA_IDX]], align 8
51-
// CHECK-NEXT: [[AGG_TEMP1_SROA_3_0_BAR_SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[BAR]], i64 16
52-
// CHECK-NEXT: [[AGG_TEMP1_SROA_3_0_COPYLOAD:%.*]] = load ptr, ptr [[AGG_TEMP1_SROA_3_0_BAR_SROA_IDX]], align 8, !tbaa {{![0-9]+}}
53-
// CHECK-NEXT: [[FLEX_BASE_NULL_CHECK_NOT:%.*]] = icmp eq ptr [[AGG_TEMP1_SROA_0_0_COPYLOAD]], null, !annotation {{![0-9]+}}
54-
// CHECK-NEXT: br i1 [[FLEX_BASE_NULL_CHECK_NOT]], label [[BOUNDSCHECK_CONT_THREAD:%.*]], label [[FLEX_BASE_NONNULL:%.*]], !annotation {{![0-9]+}}
55-
// CHECK: flex.base.nonnull:
5651
// CHECK-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[AGG_TEMP1_SROA_0_0_COPYLOAD]], i64 8
5752
// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ugt ptr [[AGG_TEMP1_SROA_0_0_COPYLOAD]], [[TMP0]], !annotation {{![0-9]+}}
5853
// CHECK-NEXT: br i1 [[DOTNOT]], label [[TRAP:%.*]], label [[CONT:%.*]], !prof {{![0-9]+}}, !annotation {{![0-9]+}}
5954
// CHECK: trap:
6055
// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR2]], !annotation {{![0-9]+}}
6156
// CHECK-NEXT: unreachable, !annotation {{![0-9]+}}
6257
// CHECK: cont:
58+
// CHECK-NEXT: [[AGG_TEMP1_SROA_3_0_BAR_SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[BAR]], i64 16
59+
// CHECK-NEXT: [[AGG_TEMP1_SROA_3_0_COPYLOAD:%.*]] = load ptr, ptr [[AGG_TEMP1_SROA_3_0_BAR_SROA_IDX]], align 8, !tbaa {{![0-9]+}}
6360
// CHECK-NEXT: [[TMP1:%.*]] = icmp ule ptr [[TMP0]], [[AGG_TEMP1_SROA_2_0_COPYLOAD]], !annotation {{![0-9]+}}
6461
// CHECK-NEXT: [[TMP2:%.*]] = icmp ule ptr [[AGG_TEMP1_SROA_3_0_COPYLOAD]], [[AGG_TEMP1_SROA_0_0_COPYLOAD]], !annotation {{![0-9]+}}
6562
// CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[TMP1]], i1 [[TMP2]], i1 false, !annotation {{![0-9]+}}
@@ -75,14 +72,9 @@ char access(struct Outer *bar, int index) {
7572
// CHECK-NEXT: [[TMP3:%.*]] = icmp ult ptr [[AGG_TEMP1_SROA_0_0_COPYLOAD]], [[AGG_TEMP1_SROA_2_0_COPYLOAD]], !annotation {{![0-9]+}}
7673
// CHECK-NEXT: [[OR_COND60:%.*]] = select i1 [[OR_COND49]], i1 [[TMP3]], i1 false, !annotation {{![0-9]+}}
7774
// CHECK-NEXT: br i1 [[OR_COND60]], label [[BOUNDSCHECK_CONT:%.*]], label [[TRAP]], !prof {{![0-9]+}}, !annotation {{![0-9]+}}
78-
// CHECK: boundscheck.cont.thread:
79-
// CHECK-NEXT: store i32 [[LEN]], ptr inttoptr (i64 4 to ptr), align 4, !tbaa {{![0-9]+}}
80-
// CHECK-NEXT: br label [[CONT46:%.*]]
8175
// CHECK: boundscheck.cont:
8276
// CHECK-NEXT: [[LEN31:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TEMP1_SROA_0_0_COPYLOAD]], i64 4
8377
// CHECK-NEXT: store i32 [[LEN]], ptr [[LEN31]], align 4, !tbaa {{![0-9]+}}
84-
// CHECK-NEXT: br label [[CONT46]], !annotation {{![0-9]+}}
85-
// CHECK: cont46:
8678
// CHECK-NEXT: ret ptr [[AGG_TEMP1_SROA_0_0_COPYLOAD]]
8779
//
8880
struct Outer * assign(void * __bidi_indexable bar, int len) {

clang/test/BoundsSafety/CodeGen/terminated-by-to-indexable-trivial-O2.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,17 +41,17 @@ const char *__indexable good_chars_unsafe(void) {
4141
}
4242

4343
// CHECK-LABEL: @bad_null(
44-
// CHECK-NEXT: entry:
45-
// CHECK-NEXT: unreachable
44+
// CHECK-NEXT: terminated_by.loop_end:
45+
// CHECK-NEXT: ret { ptr, ptr } zeroinitializer
4646
//
4747
int *__indexable bad_null(void) {
4848
int *__null_terminated p = 0;
4949
return __terminated_by_to_indexable(p);
5050
}
5151

5252
// CHECK-LABEL: @bad_null_unsafe(
53-
// CHECK-NEXT: entry:
54-
// CHECK-NEXT: unreachable
53+
// CHECK-NEXT: terminated_by.loop_end:
54+
// CHECK-NEXT: ret { ptr, ptr } zeroinitializer
5555
//
5656
int *__indexable bad_null_unsafe(void) {
5757
int *__null_terminated p = 0;

0 commit comments

Comments
 (0)