Skip to content

Commit 32e7971

Browse files
committed
[BoundsSafety][NFC] Unbreak codegen tests due to profile metadata on trap branches
``` commit 30f2e92 Author: Florian Mayer <[email protected]> Date: Fri Apr 4 10:58:08 2025 -0700 [clang] [sanitizer] predict trap checks succeed (llvm#134310) Trap checks fail at most once (when the program crashes). ``` added profile metadata to trap branches that says its likely the trap succeeds. This shows up in the IR which broke many of our codegen tests. Many of the tests were automatically updated using `clang/utils/bounds_safety_fixup_codegen_tests.sh` but several had to be updated by hand. rdar://148767987
1 parent 894b33f commit 32e7971

File tree

80 files changed

+2196
-2212
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

80 files changed

+2196
-2212
lines changed

clang/test/BoundsSafety/CodeGen/access-size-check-elt-size.c

Lines changed: 69 additions & 67 deletions
Large diffs are not rendered by default.

clang/test/BoundsSafety/CodeGen/access-size-check-unsized-elt.c

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
// REQUIRES: system-darwin
21
// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5
2+
// REQUIRES: system-darwin
33
// RUN: %clang_cc1 -O0 -fbounds-safety -fbounds-safety-bringup-missing-checks=access_size -triple arm64-apple-iphoneos -emit-llvm %s -o - | FileCheck --check-prefix ACCESS-SIZE %s
44
// RUN: %clang_cc1 -O0 -fbounds-safety -fno-bounds-safety-bringup-missing-checks=access_size -triple arm64-apple-iphoneos -emit-llvm %s -o - | FileCheck --check-prefix ACCESS-SIZE %s
55
#include <ptrcheck.h>
@@ -42,16 +42,16 @@ void receive(fn_t);
4242
// ACCESS-SIZE-NEXT: br i1 [[TMP3]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[CONT9:.*]], !annotation [[META2]]
4343
// ACCESS-SIZE: [[BOUNDSCHECK_NOTNULL]]:
4444
// ACCESS-SIZE-NEXT: [[TMP4:%.*]] = icmp ult ptr [[WIDE_PTR_PTR3]], [[WIDE_PTR_UB5]], !annotation [[META3:![0-9]+]]
45-
// ACCESS-SIZE-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META3]]
45+
// ACCESS-SIZE-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF4:![0-9]+]], !annotation [[META3]]
4646
// ACCESS-SIZE: [[TRAP]]:
4747
// ACCESS-SIZE-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5:[0-9]+]], !annotation [[META3]]
4848
// ACCESS-SIZE-NEXT: unreachable, !annotation [[META3]]
4949
// ACCESS-SIZE: [[CONT]]:
50-
// ACCESS-SIZE-NEXT: [[TMP5:%.*]] = icmp uge ptr [[WIDE_PTR_PTR3]], [[WIDE_PTR_LB7]], !annotation [[META4:![0-9]+]]
51-
// ACCESS-SIZE-NEXT: br i1 [[TMP5]], label %[[CONT9]], label %[[TRAP8:.*]], !annotation [[META4]]
50+
// ACCESS-SIZE-NEXT: [[TMP5:%.*]] = icmp uge ptr [[WIDE_PTR_PTR3]], [[WIDE_PTR_LB7]], !annotation [[META5:![0-9]+]]
51+
// ACCESS-SIZE-NEXT: br i1 [[TMP5]], label %[[CONT9]], label %[[TRAP8:.*]], !prof [[PROF4]], !annotation [[META5]]
5252
// ACCESS-SIZE: [[TRAP8]]:
53-
// ACCESS-SIZE-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META4]]
54-
// ACCESS-SIZE-NEXT: unreachable, !annotation [[META4]]
53+
// ACCESS-SIZE-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META5]]
54+
// ACCESS-SIZE-NEXT: unreachable, !annotation [[META5]]
5555
// ACCESS-SIZE: [[CONT9]]:
5656
// ACCESS-SIZE-NEXT: store ptr [[WIDE_PTR_PTR3]], ptr [[F]], align 8
5757
// ACCESS-SIZE-NEXT: [[TMP6:%.*]] = load ptr, ptr [[F]], align 8
@@ -73,5 +73,6 @@ void borked(void)
7373
//.
7474
// ACCESS-SIZE: [[META2]] = !{!"bounds-safety-check-ptr-neq-null"}
7575
// ACCESS-SIZE: [[META3]] = !{!"bounds-safety-check-ptr-lt-upper-bound"}
76-
// ACCESS-SIZE: [[META4]] = !{!"bounds-safety-check-ptr-ge-lower-bound"}
76+
// ACCESS-SIZE: [[PROF4]] = !{!"branch_weights", i32 1048575, i32 1}
77+
// ACCESS-SIZE: [[META5]] = !{!"bounds-safety-check-ptr-ge-lower-bound"}
7778
//.

clang/test/BoundsSafety/CodeGen/array_subscript_agg.c

Lines changed: 155 additions & 153 deletions
Large diffs are not rendered by default.

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ void consume(int* __bidi_indexable);
1010
// CHECK-NEXT: [[ENTRY:.*:]]
1111
// CHECK-NEXT: [[BYVAL_TEMP:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8
1212
// CHECK-NEXT: [[CMP_I:%.*]] = icmp eq i32 [[COUNT]], 0, !annotation [[META2:![0-9]+]]
13-
// CHECK-NEXT: br i1 [[CMP_I]], label %[[INLINE_HEADER_FUNC_UNSPECIFIED_PTR_EXIT:.*]], label %[[TRAP_I:.*]], !annotation [[META2]]
13+
// CHECK-NEXT: br i1 [[CMP_I]], label %[[INLINE_HEADER_FUNC_UNSPECIFIED_PTR_EXIT:.*]], label %[[TRAP_I:.*]], !prof [[PROF3:![0-9]+]], !annotation [[META2]]
1414
// CHECK: [[TRAP_I]]:
1515
// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5:[0-9]+]], !annotation [[META2]]
1616
// CHECK-NEXT: unreachable, !annotation [[META2]]
@@ -47,7 +47,7 @@ void use_inline_header_func_unspecified_ptr(int count) {
4747
// CHECK-NEXT: [[ENTRY:.*:]]
4848
// CHECK-NEXT: [[BYVAL_TEMP:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8
4949
// CHECK-NEXT: [[CMP_I:%.*]] = icmp eq i32 [[COUNT]], 0, !annotation [[META2]]
50-
// CHECK-NEXT: br i1 [[CMP_I]], label %[[INLINE_HEADER_FUNC_UNSAFE_INDEXABLE_PTR_EXIT:.*]], label %[[TRAP_I:.*]], !annotation [[META2]]
50+
// CHECK-NEXT: br i1 [[CMP_I]], label %[[INLINE_HEADER_FUNC_UNSAFE_INDEXABLE_PTR_EXIT:.*]], label %[[TRAP_I:.*]], !prof [[PROF3]], !annotation [[META2]]
5151
// CHECK: [[TRAP_I]]:
5252
// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]]
5353
// CHECK-NEXT: unreachable, !annotation [[META2]]
@@ -80,6 +80,7 @@ void use_inline_header_func_unsafe_indexable_ptr(int count) {
8080
}
8181
//.
8282
// CHECK: [[META2]] = !{!"bounds-safety-generic"}
83+
// CHECK: [[PROF3]] = !{!"branch_weights", i32 1048575, i32 1}
8384
//.
8485
// LEGACY: [[TBAA2]] = !{[[META3:![0-9]+]], [[META3]], i64 0}
8586
// LEGACY: [[META3]] = !{!"p1 int", [[META4:![0-9]+]], i64 0}

clang/test/BoundsSafety/CodeGen/bounds-attributed-return-O0.c

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
// REQUIRES: system-darwin
21
// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5
2+
// REQUIRES: system-darwin
33
// RUN: %clang_cc1 -O0 -triple arm64-apple-iphoneos -fbounds-safety -fbounds-safety-bringup-missing-checks=return_size -emit-llvm %s -o - | FileCheck %s
44

55
#include <ptrcheck.h>
@@ -70,7 +70,7 @@
7070
// CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]]
7171
// CHECK: [[LAND_END30]]:
7272
// CHECK-NEXT: [[TMP2:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP1]], %[[LAND_END]] ], !annotation [[META2]]
73-
// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]]
73+
// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3:![0-9]+]], !annotation [[META2]]
7474
// CHECK: [[TRAP]]:
7575
// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3:[0-9]+]], !annotation [[META2]]
7676
// CHECK-NEXT: unreachable, !annotation [[META2]]
@@ -88,6 +88,9 @@ int *__counted_by(count) cb_in_from_bidi(int count, int *__bidi_indexable p) {
8888
return p;
8989
}
9090

91+
//
92+
93+
int *__counted_by(*count) cb_in_from_bidi_redecl(int *count, int *__bidi_indexable p);
9194
// CHECK-LABEL: define dso_local ptr @cb_in_from_bidi_redecl(
9295
// CHECK-SAME: ptr noundef [[COUNT:%.*]], ptr noundef [[P:%.*]]) #[[ATTR0]] {
9396
// CHECK-NEXT: [[ENTRY:.*]]:
@@ -156,7 +159,7 @@ int *__counted_by(count) cb_in_from_bidi(int count, int *__bidi_indexable p) {
156159
// CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]]
157160
// CHECK: [[LAND_END30]]:
158161
// CHECK-NEXT: [[TMP4:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP3]], %[[LAND_END]] ], !annotation [[META2]]
159-
// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]]
162+
// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]]
160163
// CHECK: [[TRAP]]:
161164
// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]]
162165
// CHECK-NEXT: unreachable, !annotation [[META2]]
@@ -170,12 +173,13 @@ int *__counted_by(count) cb_in_from_bidi(int count, int *__bidi_indexable p) {
170173
// CHECK-NEXT: [[WIDE_PTR_LB37:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR36]], align 8
171174
// CHECK-NEXT: ret ptr [[WIDE_PTR_PTR33]]
172175
//
173-
174-
int *__counted_by(*count) cb_in_from_bidi_redecl(int *count, int *__bidi_indexable p);
175176
int *__counted_by(*count) cb_in_from_bidi_redecl(int *count, int *__bidi_indexable p) {
176177
return p;
177178
}
178179

180+
// FIXME: This had to be patched manually. `utils/update_cc_test_checks.py` seems
181+
// to generate CHECK lines here for something that's not a function body and so it
182+
// tries to match the IR for the same function twice.
179183
int *__counted_by(*count) cb_in_from_bidi_typeof(int *count, int *__bidi_indexable p);
180184
__typeof__(cb_in_from_bidi_typeof) cb_in_from_bidi_typeof;
181185
extern __attribute__((weak_import)) __typeof__(cb_in_from_bidi_typeof) cb_in_from_bidi_typeof;
@@ -248,7 +252,7 @@ extern __attribute__((weak_import)) __typeof__(cb_in_from_bidi_typeof) cb_in_fro
248252
// CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]]
249253
// CHECK: [[LAND_END30]]:
250254
// CHECK-NEXT: [[TMP4:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP3]], %[[LAND_END]] ], !annotation [[META2]]
251-
// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]]
255+
// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]]
252256
// CHECK: [[TRAP]]:
253257
// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]]
254258
// CHECK-NEXT: unreachable, !annotation [[META2]]
@@ -326,7 +330,7 @@ int *__counted_by(*count) cb_in_from_bidi_typeof(int *count, int *__bidi_indexab
326330
// CHECK-NEXT: br label %[[LAND_END13]], !annotation [[META2]]
327331
// CHECK: [[LAND_END13]]:
328332
// CHECK-NEXT: [[TMP12:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP11]], %[[LAND_END]] ], !annotation [[META2]]
329-
// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]]
333+
// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]]
330334
// CHECK: [[TRAP]]:
331335
// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]]
332336
// CHECK-NEXT: unreachable, !annotation [[META2]]
@@ -399,7 +403,7 @@ int *__counted_by(count) cb_in_from_single(int count, int *__single p) {
399403
// CHECK-NEXT: br label %[[LAND_END13]], !annotation [[META2]]
400404
// CHECK: [[LAND_END13]]:
401405
// CHECK-NEXT: [[TMP14:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP13]], %[[LAND_END]] ], !annotation [[META2]]
402-
// CHECK-NEXT: br i1 [[TMP14]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]]
406+
// CHECK-NEXT: br i1 [[TMP14]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]]
403407
// CHECK: [[TRAP]]:
404408
// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]]
405409
// CHECK-NEXT: unreachable, !annotation [[META2]]
@@ -476,7 +480,7 @@ int *__counted_by(*count) cb_out_from_single(int *count, int *__single p) {
476480
// CHECK-NEXT: br label %[[LAND_END13]], !annotation [[META2]]
477481
// CHECK: [[LAND_END13]]:
478482
// CHECK-NEXT: [[TMP13:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP12]], %[[LOR_END]] ], !annotation [[META2]]
479-
// CHECK-NEXT: br i1 [[TMP13]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]]
483+
// CHECK-NEXT: br i1 [[TMP13]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]]
480484
// CHECK: [[TRAP]]:
481485
// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]]
482486
// CHECK-NEXT: unreachable, !annotation [[META2]]
@@ -565,7 +569,7 @@ int *__counted_by_or_null(count) cbn_in_from_single(int count, int *__single p)
565569
// CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]]
566570
// CHECK: [[LAND_END37]]:
567571
// CHECK-NEXT: [[TMP5:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP4]], %[[LAND_END]] ], !annotation [[META2]]
568-
// CHECK-NEXT: br i1 [[TMP5]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]]
572+
// CHECK-NEXT: br i1 [[TMP5]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]]
569573
// CHECK: [[TRAP]]:
570574
// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]]
571575
// CHECK-NEXT: unreachable, !annotation [[META2]]
@@ -626,7 +630,7 @@ void *__sized_by(size) sb_in_from_bidi(int size, void *__bidi_indexable p) {
626630
// CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]]
627631
// CHECK: [[LAND_END]]:
628632
// CHECK-NEXT: [[TMP1:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[CMP15]], %[[LAND_RHS]] ], !annotation [[META2]]
629-
// CHECK-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]]
633+
// CHECK-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]]
630634
// CHECK: [[TRAP]]:
631635
// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]]
632636
// CHECK-NEXT: unreachable, !annotation [[META2]]
@@ -646,4 +650,5 @@ void *__ended_by(end) eb_from_bidi(void *end, void *__bidi_indexable p) {
646650

647651
//.
648652
// CHECK: [[META2]] = !{!"bounds-safety-generic"}
653+
// CHECK: [[PROF3]] = !{!"branch_weights", i32 1048575, i32 1}
649654
//.

0 commit comments

Comments
 (0)