Skip to content

Commit a4394d9

Browse files
committed
[NFC][ubsan] Rename prefixes in test
Looks like update_cc_test_checks is being confused if it creates vars with the name matching prefix. Issue triggered with llvm#122415
1 parent 73dd730 commit a4394d9

File tree

1 file changed

+136
-136
lines changed

1 file changed

+136
-136
lines changed
Lines changed: 136 additions & 136 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 4
22
// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -emit-llvm -o - %s -fsanitize=signed-integer-overflow,integer-divide-by-zero,null -mllvm -ubsan-guard-checks | FileCheck %s
3-
// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -emit-llvm -o - %s -fsanitize=signed-integer-overflow,integer-divide-by-zero,null -mllvm -ubsan-guard-checks -fsanitize-trap=signed-integer-overflow,integer-divide-by-zero,null | FileCheck %s --check-prefixes=TRAP
4-
// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -emit-llvm -o - %s -fsanitize=signed-integer-overflow,integer-divide-by-zero,null -mllvm -ubsan-guard-checks -fsanitize-recover=signed-integer-overflow,integer-divide-by-zero,null | FileCheck %s --check-prefixes=RECOVER
3+
// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -emit-llvm -o - %s -fsanitize=signed-integer-overflow,integer-divide-by-zero,null -mllvm -ubsan-guard-checks -fsanitize-trap=signed-integer-overflow,integer-divide-by-zero,null | FileCheck %s --check-prefixes=TR
4+
// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -emit-llvm -o - %s -fsanitize=signed-integer-overflow,integer-divide-by-zero,null -mllvm -ubsan-guard-checks -fsanitize-recover=signed-integer-overflow,integer-divide-by-zero,null | FileCheck %s --check-prefixes=REC
55

66

77
// CHECK-LABEL: define dso_local i32 @div(
@@ -31,57 +31,57 @@
3131
// CHECK-NEXT: [[DIV:%.*]] = sdiv i32 [[TMP0]], [[TMP1]]
3232
// CHECK-NEXT: ret i32 [[DIV]]
3333
//
34-
// TRAP-LABEL: define dso_local i32 @div(
35-
// TRAP-SAME: i32 noundef [[X:%.*]], i32 noundef [[Y:%.*]]) #[[ATTR0:[0-9]+]] {
36-
// TRAP-NEXT: entry:
37-
// TRAP-NEXT: [[X_ADDR:%.*]] = alloca i32, align 4
38-
// TRAP-NEXT: [[Y_ADDR:%.*]] = alloca i32, align 4
39-
// TRAP-NEXT: store i32 [[X]], ptr [[X_ADDR]], align 4
40-
// TRAP-NEXT: store i32 [[Y]], ptr [[Y_ADDR]], align 4
41-
// TRAP-NEXT: [[TMP0:%.*]] = load i32, ptr [[X_ADDR]], align 4
42-
// TRAP-NEXT: [[TMP1:%.*]] = load i32, ptr [[Y_ADDR]], align 4
43-
// TRAP-NEXT: [[TMP2:%.*]] = icmp ne i32 [[TMP1]], 0, !nosanitize [[META2:![0-9]+]]
44-
// TRAP-NEXT: [[TMP3:%.*]] = icmp ne i32 [[TMP0]], -2147483648, !nosanitize [[META2]]
45-
// TRAP-NEXT: [[TMP4:%.*]] = icmp ne i32 [[TMP1]], -1, !nosanitize [[META2]]
46-
// TRAP-NEXT: [[OR:%.*]] = or i1 [[TMP3]], [[TMP4]], !nosanitize [[META2]]
47-
// TRAP-NEXT: [[TMP5:%.*]] = and i1 [[TMP2]], [[OR]], !nosanitize [[META2]]
48-
// TRAP-NEXT: [[TMP6:%.*]] = call i1 @llvm.allow.ubsan.check(i8 3), !nosanitize [[META2]]
49-
// TRAP-NEXT: [[TMP7:%.*]] = xor i1 [[TMP6]], true, !nosanitize [[META2]]
50-
// TRAP-NEXT: [[TMP8:%.*]] = or i1 [[TMP5]], [[TMP7]], !nosanitize [[META2]]
51-
// TRAP-NEXT: br i1 [[TMP8]], label [[CONT:%.*]], label [[TRAP:%.*]], !nosanitize [[META2]]
52-
// TRAP: trap:
53-
// TRAP-NEXT: call void @llvm.ubsantrap(i8 3) #[[ATTR4:[0-9]+]], !nosanitize [[META2]]
54-
// TRAP-NEXT: unreachable, !nosanitize [[META2]]
55-
// TRAP: cont:
56-
// TRAP-NEXT: [[DIV:%.*]] = sdiv i32 [[TMP0]], [[TMP1]]
57-
// TRAP-NEXT: ret i32 [[DIV]]
34+
// TR-LABEL: define dso_local i32 @div(
35+
// TR-SAME: i32 noundef [[X:%.*]], i32 noundef [[Y:%.*]]) #[[ATTR0:[0-9]+]] {
36+
// TR-NEXT: entry:
37+
// TR-NEXT: [[X_ADDR:%.*]] = alloca i32, align 4
38+
// TR-NEXT: [[Y_ADDR:%.*]] = alloca i32, align 4
39+
// TR-NEXT: store i32 [[X]], ptr [[X_ADDR]], align 4
40+
// TR-NEXT: store i32 [[Y]], ptr [[Y_ADDR]], align 4
41+
// TR-NEXT: [[TMP0:%.*]] = load i32, ptr [[X_ADDR]], align 4
42+
// TR-NEXT: [[TMP1:%.*]] = load i32, ptr [[Y_ADDR]], align 4
43+
// TR-NEXT: [[TMP2:%.*]] = icmp ne i32 [[TMP1]], 0, !nosanitize [[META2:![0-9]+]]
44+
// TR-NEXT: [[TMP3:%.*]] = icmp ne i32 [[TMP0]], -2147483648, !nosanitize [[META2]]
45+
// TR-NEXT: [[TMP4:%.*]] = icmp ne i32 [[TMP1]], -1, !nosanitize [[META2]]
46+
// TR-NEXT: [[OR:%.*]] = or i1 [[TMP3]], [[TMP4]], !nosanitize [[META2]]
47+
// TR-NEXT: [[TMP5:%.*]] = and i1 [[TMP2]], [[OR]], !nosanitize [[META2]]
48+
// TR-NEXT: [[TMP6:%.*]] = call i1 @llvm.allow.ubsan.check(i8 3), !nosanitize [[META2]]
49+
// TR-NEXT: [[TMP7:%.*]] = xor i1 [[TMP6]], true, !nosanitize [[META2]]
50+
// TR-NEXT: [[TMP8:%.*]] = or i1 [[TMP5]], [[TMP7]], !nosanitize [[META2]]
51+
// TR-NEXT: br i1 [[TMP8]], label [[CONT:%.*]], label [[TRAP:%.*]], !nosanitize [[META2]]
52+
// TR: trap:
53+
// TR-NEXT: call void @llvm.ubsantrap(i8 3) #[[ATTR4:[0-9]+]], !nosanitize [[META2]]
54+
// TR-NEXT: unreachable, !nosanitize [[META2]]
55+
// TR: cont:
56+
// TR-NEXT: [[DIV:%.*]] = sdiv i32 [[TMP0]], [[TMP1]]
57+
// TR-NEXT: ret i32 [[DIV]]
5858
//
59-
// RECOVER-LABEL: define dso_local i32 @div(
60-
// RECOVER-SAME: i32 noundef [[X:%.*]], i32 noundef [[Y:%.*]]) #[[ATTR0:[0-9]+]] {
61-
// RECOVER-NEXT: entry:
62-
// RECOVER-NEXT: [[X_ADDR:%.*]] = alloca i32, align 4
63-
// RECOVER-NEXT: [[Y_ADDR:%.*]] = alloca i32, align 4
64-
// RECOVER-NEXT: store i32 [[X]], ptr [[X_ADDR]], align 4
65-
// RECOVER-NEXT: store i32 [[Y]], ptr [[Y_ADDR]], align 4
66-
// RECOVER-NEXT: [[TMP0:%.*]] = load i32, ptr [[X_ADDR]], align 4
67-
// RECOVER-NEXT: [[TMP1:%.*]] = load i32, ptr [[Y_ADDR]], align 4
68-
// RECOVER-NEXT: [[TMP2:%.*]] = icmp ne i32 [[TMP1]], 0, !nosanitize [[META2:![0-9]+]]
69-
// RECOVER-NEXT: [[TMP3:%.*]] = icmp ne i32 [[TMP0]], -2147483648, !nosanitize [[META2]]
70-
// RECOVER-NEXT: [[TMP4:%.*]] = icmp ne i32 [[TMP1]], -1, !nosanitize [[META2]]
71-
// RECOVER-NEXT: [[OR:%.*]] = or i1 [[TMP3]], [[TMP4]], !nosanitize [[META2]]
72-
// RECOVER-NEXT: [[TMP5:%.*]] = and i1 [[TMP2]], [[OR]], !nosanitize [[META2]]
73-
// RECOVER-NEXT: [[TMP6:%.*]] = call i1 @llvm.allow.ubsan.check(i8 3), !nosanitize [[META2]]
74-
// RECOVER-NEXT: [[TMP7:%.*]] = xor i1 [[TMP6]], true, !nosanitize [[META2]]
75-
// RECOVER-NEXT: [[TMP8:%.*]] = or i1 [[TMP5]], [[TMP7]], !nosanitize [[META2]]
76-
// RECOVER-NEXT: br i1 [[TMP8]], label [[CONT:%.*]], label [[HANDLER_DIVREM_OVERFLOW:%.*]], !prof [[PROF3:![0-9]+]], !nosanitize [[META2]]
77-
// RECOVER: handler.divrem_overflow:
78-
// RECOVER-NEXT: [[TMP9:%.*]] = zext i32 [[TMP0]] to i64, !nosanitize [[META2]]
79-
// RECOVER-NEXT: [[TMP10:%.*]] = zext i32 [[TMP1]] to i64, !nosanitize [[META2]]
80-
// RECOVER-NEXT: call void @__ubsan_handle_divrem_overflow(ptr @[[GLOB1:[0-9]+]], i64 [[TMP9]], i64 [[TMP10]]) #[[ATTR4:[0-9]+]], !nosanitize [[META2]]
81-
// RECOVER-NEXT: br label [[CONT]], !nosanitize [[META2]]
82-
// RECOVER: cont:
83-
// RECOVER-NEXT: [[DIV:%.*]] = sdiv i32 [[TMP0]], [[TMP1]]
84-
// RECOVER-NEXT: ret i32 [[DIV]]
59+
// REC-LABEL: define dso_local i32 @div(
60+
// REC-SAME: i32 noundef [[X:%.*]], i32 noundef [[Y:%.*]]) #[[ATTR0:[0-9]+]] {
61+
// REC-NEXT: entry:
62+
// REC-NEXT: [[X_ADDR:%.*]] = alloca i32, align 4
63+
// REC-NEXT: [[Y_ADDR:%.*]] = alloca i32, align 4
64+
// REC-NEXT: store i32 [[X]], ptr [[X_ADDR]], align 4
65+
// REC-NEXT: store i32 [[Y]], ptr [[Y_ADDR]], align 4
66+
// REC-NEXT: [[TMP0:%.*]] = load i32, ptr [[X_ADDR]], align 4
67+
// REC-NEXT: [[TMP1:%.*]] = load i32, ptr [[Y_ADDR]], align 4
68+
// REC-NEXT: [[TMP2:%.*]] = icmp ne i32 [[TMP1]], 0, !nosanitize [[META2:![0-9]+]]
69+
// REC-NEXT: [[TMP3:%.*]] = icmp ne i32 [[TMP0]], -2147483648, !nosanitize [[META2]]
70+
// REC-NEXT: [[TMP4:%.*]] = icmp ne i32 [[TMP1]], -1, !nosanitize [[META2]]
71+
// REC-NEXT: [[OR:%.*]] = or i1 [[TMP3]], [[TMP4]], !nosanitize [[META2]]
72+
// REC-NEXT: [[TMP5:%.*]] = and i1 [[TMP2]], [[OR]], !nosanitize [[META2]]
73+
// REC-NEXT: [[TMP6:%.*]] = call i1 @llvm.allow.ubsan.check(i8 3), !nosanitize [[META2]]
74+
// REC-NEXT: [[TMP7:%.*]] = xor i1 [[TMP6]], true, !nosanitize [[META2]]
75+
// REC-NEXT: [[TMP8:%.*]] = or i1 [[TMP5]], [[TMP7]], !nosanitize [[META2]]
76+
// REC-NEXT: br i1 [[TMP8]], label [[CONT:%.*]], label [[HANDLER_DIVREM_OVERFLOW:%.*]], !prof [[PROF3:![0-9]+]], !nosanitize [[META2]]
77+
// REC: handler.divrem_overflow:
78+
// REC-NEXT: [[TMP9:%.*]] = zext i32 [[TMP0]] to i64, !nosanitize [[META2]]
79+
// REC-NEXT: [[TMP10:%.*]] = zext i32 [[TMP1]] to i64, !nosanitize [[META2]]
80+
// REC-NEXT: call void @__ubsan_handle_divrem_overflow(ptr @[[GLOB1:[0-9]+]], i64 [[TMP9]], i64 [[TMP10]]) #[[ATTR4:[0-9]+]], !nosanitize [[META2]]
81+
// REC-NEXT: br label [[CONT]], !nosanitize [[META2]]
82+
// REC: cont:
83+
// REC-NEXT: [[DIV:%.*]] = sdiv i32 [[TMP0]], [[TMP1]]
84+
// REC-NEXT: ret i32 [[DIV]]
8585
//
8686
int div(int x, int y) {
8787
return x / y;
@@ -106,42 +106,42 @@ int div(int x, int y) {
106106
// CHECK-NEXT: [[TMP6:%.*]] = load i32, ptr [[TMP0]], align 4
107107
// CHECK-NEXT: ret i32 [[TMP6]]
108108
//
109-
// TRAP-LABEL: define dso_local i32 @null(
110-
// TRAP-SAME: ptr noundef [[X:%.*]]) #[[ATTR0]] {
111-
// TRAP-NEXT: entry:
112-
// TRAP-NEXT: [[X_ADDR:%.*]] = alloca ptr, align 8
113-
// TRAP-NEXT: store ptr [[X]], ptr [[X_ADDR]], align 8
114-
// TRAP-NEXT: [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 8
115-
// TRAP-NEXT: [[TMP1:%.*]] = icmp ne ptr [[TMP0]], null, !nosanitize [[META2]]
116-
// TRAP-NEXT: [[TMP2:%.*]] = call i1 @llvm.allow.ubsan.check(i8 22), !nosanitize [[META2]]
117-
// TRAP-NEXT: [[TMP3:%.*]] = xor i1 [[TMP2]], true, !nosanitize [[META2]]
118-
// TRAP-NEXT: [[TMP4:%.*]] = or i1 [[TMP1]], [[TMP3]], !nosanitize [[META2]]
119-
// TRAP-NEXT: br i1 [[TMP4]], label [[CONT:%.*]], label [[TRAP:%.*]], !nosanitize [[META2]]
120-
// TRAP: trap:
121-
// TRAP-NEXT: call void @llvm.ubsantrap(i8 22) #[[ATTR4]], !nosanitize [[META2]]
122-
// TRAP-NEXT: unreachable, !nosanitize [[META2]]
123-
// TRAP: cont:
124-
// TRAP-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4
125-
// TRAP-NEXT: ret i32 [[TMP5]]
109+
// TR-LABEL: define dso_local i32 @null(
110+
// TR-SAME: ptr noundef [[X:%.*]]) #[[ATTR0]] {
111+
// TR-NEXT: entry:
112+
// TR-NEXT: [[X_ADDR:%.*]] = alloca ptr, align 8
113+
// TR-NEXT: store ptr [[X]], ptr [[X_ADDR]], align 8
114+
// TR-NEXT: [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 8
115+
// TR-NEXT: [[TMP1:%.*]] = icmp ne ptr [[TMP0]], null, !nosanitize [[META2]]
116+
// TR-NEXT: [[TMP2:%.*]] = call i1 @llvm.allow.ubsan.check(i8 22), !nosanitize [[META2]]
117+
// TR-NEXT: [[TMP3:%.*]] = xor i1 [[TMP2]], true, !nosanitize [[META2]]
118+
// TR-NEXT: [[TMP4:%.*]] = or i1 [[TMP1]], [[TMP3]], !nosanitize [[META2]]
119+
// TR-NEXT: br i1 [[TMP4]], label [[CONT:%.*]], label [[TRAP:%.*]], !nosanitize [[META2]]
120+
// TR: trap:
121+
// TR-NEXT: call void @llvm.ubsantrap(i8 22) #[[ATTR4]], !nosanitize [[META2]]
122+
// TR-NEXT: unreachable, !nosanitize [[META2]]
123+
// TR: cont:
124+
// TR-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4
125+
// TR-NEXT: ret i32 [[TMP5]]
126126
//
127-
// RECOVER-LABEL: define dso_local i32 @null(
128-
// RECOVER-SAME: ptr noundef [[X:%.*]]) #[[ATTR0]] {
129-
// RECOVER-NEXT: entry:
130-
// RECOVER-NEXT: [[X_ADDR:%.*]] = alloca ptr, align 8
131-
// RECOVER-NEXT: store ptr [[X]], ptr [[X_ADDR]], align 8
132-
// RECOVER-NEXT: [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 8
133-
// RECOVER-NEXT: [[TMP1:%.*]] = icmp ne ptr [[TMP0]], null, !nosanitize [[META2]]
134-
// RECOVER-NEXT: [[TMP2:%.*]] = call i1 @llvm.allow.ubsan.check(i8 22), !nosanitize [[META2]]
135-
// RECOVER-NEXT: [[TMP3:%.*]] = xor i1 [[TMP2]], true, !nosanitize [[META2]]
136-
// RECOVER-NEXT: [[TMP4:%.*]] = or i1 [[TMP1]], [[TMP3]], !nosanitize [[META2]]
137-
// RECOVER-NEXT: br i1 [[TMP4]], label [[CONT:%.*]], label [[HANDLER_TYPE_MISMATCH:%.*]], !prof [[PROF3]], !nosanitize [[META2]]
138-
// RECOVER: handler.type_mismatch:
139-
// RECOVER-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[TMP0]] to i64, !nosanitize [[META2]]
140-
// RECOVER-NEXT: call void @__ubsan_handle_type_mismatch_v1(ptr @[[GLOB2:[0-9]+]], i64 [[TMP5]]) #[[ATTR4]], !nosanitize [[META2]]
141-
// RECOVER-NEXT: br label [[CONT]], !nosanitize [[META2]]
142-
// RECOVER: cont:
143-
// RECOVER-NEXT: [[TMP6:%.*]] = load i32, ptr [[TMP0]], align 4
144-
// RECOVER-NEXT: ret i32 [[TMP6]]
127+
// REC-LABEL: define dso_local i32 @null(
128+
// REC-SAME: ptr noundef [[X:%.*]]) #[[ATTR0]] {
129+
// REC-NEXT: entry:
130+
// REC-NEXT: [[X_ADDR:%.*]] = alloca ptr, align 8
131+
// REC-NEXT: store ptr [[X]], ptr [[X_ADDR]], align 8
132+
// REC-NEXT: [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 8
133+
// REC-NEXT: [[TMP1:%.*]] = icmp ne ptr [[TMP0]], null, !nosanitize [[META2]]
134+
// REC-NEXT: [[TMP2:%.*]] = call i1 @llvm.allow.ubsan.check(i8 22), !nosanitize [[META2]]
135+
// REC-NEXT: [[TMP3:%.*]] = xor i1 [[TMP2]], true, !nosanitize [[META2]]
136+
// REC-NEXT: [[TMP4:%.*]] = or i1 [[TMP1]], [[TMP3]], !nosanitize [[META2]]
137+
// REC-NEXT: br i1 [[TMP4]], label [[CONT:%.*]], label [[HANDLER_TYPE_MISMATCH:%.*]], !prof [[PROF3]], !nosanitize [[META2]]
138+
// REC: handler.type_mismatch:
139+
// REC-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[TMP0]] to i64, !nosanitize [[META2]]
140+
// REC-NEXT: call void @__ubsan_handle_type_mismatch_v1(ptr @[[GLOB2:[0-9]+]], i64 [[TMP5]]) #[[ATTR4]], !nosanitize [[META2]]
141+
// REC-NEXT: br label [[CONT]], !nosanitize [[META2]]
142+
// REC: cont:
143+
// REC-NEXT: [[TMP6:%.*]] = load i32, ptr [[TMP0]], align 4
144+
// REC-NEXT: ret i32 [[TMP6]]
145145
//
146146
int null(int* x) {
147147
return *x;
@@ -172,53 +172,53 @@ int null(int* x) {
172172
// CHECK: cont:
173173
// CHECK-NEXT: ret i32 [[TMP3]]
174174
//
175-
// TRAP-LABEL: define dso_local i32 @overflow(
176-
// TRAP-SAME: i32 noundef [[X:%.*]], i32 noundef [[Y:%.*]]) #[[ATTR0]] {
177-
// TRAP-NEXT: entry:
178-
// TRAP-NEXT: [[X_ADDR:%.*]] = alloca i32, align 4
179-
// TRAP-NEXT: [[Y_ADDR:%.*]] = alloca i32, align 4
180-
// TRAP-NEXT: store i32 [[X]], ptr [[X_ADDR]], align 4
181-
// TRAP-NEXT: store i32 [[Y]], ptr [[Y_ADDR]], align 4
182-
// TRAP-NEXT: [[TMP0:%.*]] = load i32, ptr [[X_ADDR]], align 4
183-
// TRAP-NEXT: [[TMP1:%.*]] = load i32, ptr [[Y_ADDR]], align 4
184-
// TRAP-NEXT: [[TMP2:%.*]] = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 [[TMP0]], i32 [[TMP1]]), !nosanitize [[META2]]
185-
// TRAP-NEXT: [[TMP3:%.*]] = extractvalue { i32, i1 } [[TMP2]], 0, !nosanitize [[META2]]
186-
// TRAP-NEXT: [[TMP4:%.*]] = extractvalue { i32, i1 } [[TMP2]], 1, !nosanitize [[META2]]
187-
// TRAP-NEXT: [[TMP5:%.*]] = xor i1 [[TMP4]], true, !nosanitize [[META2]]
188-
// TRAP-NEXT: [[TMP6:%.*]] = call i1 @llvm.allow.ubsan.check(i8 0), !nosanitize [[META2]]
189-
// TRAP-NEXT: [[TMP7:%.*]] = xor i1 [[TMP6]], true, !nosanitize [[META2]]
190-
// TRAP-NEXT: [[TMP8:%.*]] = or i1 [[TMP5]], [[TMP7]], !nosanitize [[META2]]
191-
// TRAP-NEXT: br i1 [[TMP8]], label [[CONT:%.*]], label [[TRAP:%.*]], !nosanitize [[META2]]
192-
// TRAP: trap:
193-
// TRAP-NEXT: call void @llvm.ubsantrap(i8 0) #[[ATTR4]], !nosanitize [[META2]]
194-
// TRAP-NEXT: unreachable, !nosanitize [[META2]]
195-
// TRAP: cont:
196-
// TRAP-NEXT: ret i32 [[TMP3]]
175+
// TR-LABEL: define dso_local i32 @overflow(
176+
// TR-SAME: i32 noundef [[X:%.*]], i32 noundef [[Y:%.*]]) #[[ATTR0]] {
177+
// TR-NEXT: entry:
178+
// TR-NEXT: [[X_ADDR:%.*]] = alloca i32, align 4
179+
// TR-NEXT: [[Y_ADDR:%.*]] = alloca i32, align 4
180+
// TR-NEXT: store i32 [[X]], ptr [[X_ADDR]], align 4
181+
// TR-NEXT: store i32 [[Y]], ptr [[Y_ADDR]], align 4
182+
// TR-NEXT: [[TMP0:%.*]] = load i32, ptr [[X_ADDR]], align 4
183+
// TR-NEXT: [[TMP1:%.*]] = load i32, ptr [[Y_ADDR]], align 4
184+
// TR-NEXT: [[TMP2:%.*]] = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 [[TMP0]], i32 [[TMP1]]), !nosanitize [[META2]]
185+
// TR-NEXT: [[TMP3:%.*]] = extractvalue { i32, i1 } [[TMP2]], 0, !nosanitize [[META2]]
186+
// TR-NEXT: [[TMP4:%.*]] = extractvalue { i32, i1 } [[TMP2]], 1, !nosanitize [[META2]]
187+
// TR-NEXT: [[TMP5:%.*]] = xor i1 [[TMP4]], true, !nosanitize [[META2]]
188+
// TR-NEXT: [[TMP6:%.*]] = call i1 @llvm.allow.ubsan.check(i8 0), !nosanitize [[META2]]
189+
// TR-NEXT: [[TMP7:%.*]] = xor i1 [[TMP6]], true, !nosanitize [[META2]]
190+
// TR-NEXT: [[TMP8:%.*]] = or i1 [[TMP5]], [[TMP7]], !nosanitize [[META2]]
191+
// TR-NEXT: br i1 [[TMP8]], label [[CONT:%.*]], label [[TRAP:%.*]], !nosanitize [[META2]]
192+
// TR: trap:
193+
// TR-NEXT: call void @llvm.ubsantrap(i8 0) #[[ATTR4]], !nosanitize [[META2]]
194+
// TR-NEXT: unreachable, !nosanitize [[META2]]
195+
// TR: cont:
196+
// TR-NEXT: ret i32 [[TMP3]]
197197
//
198-
// RECOVER-LABEL: define dso_local i32 @overflow(
199-
// RECOVER-SAME: i32 noundef [[X:%.*]], i32 noundef [[Y:%.*]]) #[[ATTR0]] {
200-
// RECOVER-NEXT: entry:
201-
// RECOVER-NEXT: [[X_ADDR:%.*]] = alloca i32, align 4
202-
// RECOVER-NEXT: [[Y_ADDR:%.*]] = alloca i32, align 4
203-
// RECOVER-NEXT: store i32 [[X]], ptr [[X_ADDR]], align 4
204-
// RECOVER-NEXT: store i32 [[Y]], ptr [[Y_ADDR]], align 4
205-
// RECOVER-NEXT: [[TMP0:%.*]] = load i32, ptr [[X_ADDR]], align 4
206-
// RECOVER-NEXT: [[TMP1:%.*]] = load i32, ptr [[Y_ADDR]], align 4
207-
// RECOVER-NEXT: [[TMP2:%.*]] = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 [[TMP0]], i32 [[TMP1]]), !nosanitize [[META2]]
208-
// RECOVER-NEXT: [[TMP3:%.*]] = extractvalue { i32, i1 } [[TMP2]], 0, !nosanitize [[META2]]
209-
// RECOVER-NEXT: [[TMP4:%.*]] = extractvalue { i32, i1 } [[TMP2]], 1, !nosanitize [[META2]]
210-
// RECOVER-NEXT: [[TMP5:%.*]] = xor i1 [[TMP4]], true, !nosanitize [[META2]]
211-
// RECOVER-NEXT: [[TMP6:%.*]] = call i1 @llvm.allow.ubsan.check(i8 0), !nosanitize [[META2]]
212-
// RECOVER-NEXT: [[TMP7:%.*]] = xor i1 [[TMP6]], true, !nosanitize [[META2]]
213-
// RECOVER-NEXT: [[TMP8:%.*]] = or i1 [[TMP5]], [[TMP7]], !nosanitize [[META2]]
214-
// RECOVER-NEXT: br i1 [[TMP8]], label [[CONT:%.*]], label [[HANDLER_ADD_OVERFLOW:%.*]], !prof [[PROF3]], !nosanitize [[META2]]
215-
// RECOVER: handler.add_overflow:
216-
// RECOVER-NEXT: [[TMP9:%.*]] = zext i32 [[TMP0]] to i64, !nosanitize [[META2]]
217-
// RECOVER-NEXT: [[TMP10:%.*]] = zext i32 [[TMP1]] to i64, !nosanitize [[META2]]
218-
// RECOVER-NEXT: call void @__ubsan_handle_add_overflow(ptr @[[GLOB3:[0-9]+]], i64 [[TMP9]], i64 [[TMP10]]) #[[ATTR4]], !nosanitize [[META2]]
219-
// RECOVER-NEXT: br label [[CONT]], !nosanitize [[META2]]
220-
// RECOVER: cont:
221-
// RECOVER-NEXT: ret i32 [[TMP3]]
198+
// REC-LABEL: define dso_local i32 @overflow(
199+
// REC-SAME: i32 noundef [[X:%.*]], i32 noundef [[Y:%.*]]) #[[ATTR0]] {
200+
// REC-NEXT: entry:
201+
// REC-NEXT: [[X_ADDR:%.*]] = alloca i32, align 4
202+
// REC-NEXT: [[Y_ADDR:%.*]] = alloca i32, align 4
203+
// REC-NEXT: store i32 [[X]], ptr [[X_ADDR]], align 4
204+
// REC-NEXT: store i32 [[Y]], ptr [[Y_ADDR]], align 4
205+
// REC-NEXT: [[TMP0:%.*]] = load i32, ptr [[X_ADDR]], align 4
206+
// REC-NEXT: [[TMP1:%.*]] = load i32, ptr [[Y_ADDR]], align 4
207+
// REC-NEXT: [[TMP2:%.*]] = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 [[TMP0]], i32 [[TMP1]]), !nosanitize [[META2]]
208+
// REC-NEXT: [[TMP3:%.*]] = extractvalue { i32, i1 } [[TMP2]], 0, !nosanitize [[META2]]
209+
// REC-NEXT: [[TMP4:%.*]] = extractvalue { i32, i1 } [[TMP2]], 1, !nosanitize [[META2]]
210+
// REC-NEXT: [[TMP5:%.*]] = xor i1 [[TMP4]], true, !nosanitize [[META2]]
211+
// REC-NEXT: [[TMP6:%.*]] = call i1 @llvm.allow.ubsan.check(i8 0), !nosanitize [[META2]]
212+
// REC-NEXT: [[TMP7:%.*]] = xor i1 [[TMP6]], true, !nosanitize [[META2]]
213+
// REC-NEXT: [[TMP8:%.*]] = or i1 [[TMP5]], [[TMP7]], !nosanitize [[META2]]
214+
// REC-NEXT: br i1 [[TMP8]], label [[CONT:%.*]], label [[HANDLER_ADD_OVERFLOW:%.*]], !prof [[PROF3]], !nosanitize [[META2]]
215+
// REC: handler.add_overflow:
216+
// REC-NEXT: [[TMP9:%.*]] = zext i32 [[TMP0]] to i64, !nosanitize [[META2]]
217+
// REC-NEXT: [[TMP10:%.*]] = zext i32 [[TMP1]] to i64, !nosanitize [[META2]]
218+
// REC-NEXT: call void @__ubsan_handle_add_overflow(ptr @[[GLOB3:[0-9]+]], i64 [[TMP9]], i64 [[TMP10]]) #[[ATTR4]], !nosanitize [[META2]]
219+
// REC-NEXT: br label [[CONT]], !nosanitize [[META2]]
220+
// REC: cont:
221+
// REC-NEXT: ret i32 [[TMP3]]
222222
//
223223
int overflow(int x, int y) {
224224
return x + y;
@@ -227,8 +227,8 @@ int overflow(int x, int y) {
227227
// CHECK: [[META2]] = !{}
228228
// CHECK: [[PROF3]] = !{!"branch_weights", i32 1048575, i32 1}
229229
//.
230-
// TRAP: [[META2]] = !{}
230+
// TR: [[META2]] = !{}
231231
//.
232-
// RECOVER: [[META2]] = !{}
233-
// RECOVER: [[PROF3]] = !{!"branch_weights", i32 1048575, i32 1}
232+
// REC: [[META2]] = !{}
233+
// REC: [[PROF3]] = !{!"branch_weights", i32 1048575, i32 1}
234234
//.

0 commit comments

Comments
 (0)