|
2 | 2 | @g = external global i8
|
3 | 3 |
|
4 | 4 | define internal noundef i32 @ret_noundef() {
|
5 |
| -; CHECK-LABEL: define internal noundef i32 @ret_noundef() { |
| 5 | +; CHECK-LABEL: define internal i32 @ret_noundef() { |
6 | 6 | ; CHECK-NEXT: ret i32 undef
|
7 | 7 | ;
|
8 | 8 | ret i32 0
|
9 | 9 | }
|
10 | 10 |
|
11 | 11 | define internal dereferenceable(1) ptr @ret_dereferenceable() {
|
12 |
| -; CHECK-LABEL: define internal dereferenceable(1) ptr @ret_dereferenceable() { |
| 12 | +; CHECK-LABEL: define internal ptr @ret_dereferenceable() { |
13 | 13 | ; CHECK-NEXT: ret ptr undef
|
14 | 14 | ;
|
15 | 15 | ret ptr @g
|
16 | 16 | }
|
17 | 17 |
|
18 | 18 | define internal dereferenceable_or_null(1) ptr @ret_dereferenceable_or_null() {
|
19 |
| -; CHECK-LABEL: define internal dereferenceable_or_null(1) ptr @ret_dereferenceable_or_null() { |
| 19 | +; CHECK-LABEL: define internal ptr @ret_dereferenceable_or_null() { |
20 | 20 | ; CHECK-NEXT: ret ptr undef
|
21 | 21 | ;
|
22 | 22 | ret ptr @g
|
23 | 23 | }
|
24 | 24 |
|
| 25 | +; Non-null is fine, because it does not cause immediate UB. |
25 | 26 | define internal nonnull ptr @ret_nonnull() {
|
26 | 27 | ; CHECK-LABEL: define internal nonnull ptr @ret_nonnull() {
|
27 | 28 | ; CHECK-NEXT: ret ptr undef
|
28 | 29 | ;
|
29 | 30 | ret ptr @g
|
30 | 31 | }
|
31 | 32 |
|
32 |
| -define internal nonnull noundef ptr @ret_nonnull_noundef() { |
33 |
| -; CHECK-LABEL: define internal noundef nonnull ptr @ret_nonnull_noundef() { |
| 33 | +define internal nonnull ptr @ret_nonnull_noundef() { |
| 34 | +; CHECK-LABEL: define internal nonnull ptr @ret_nonnull_noundef() { |
34 | 35 | ; CHECK-NEXT: ret ptr undef
|
35 | 36 | ;
|
36 | 37 | ret ptr @g
|
37 | 38 | }
|
38 | 39 |
|
39 | 40 | define void @test() {
|
40 | 41 | ; CHECK-LABEL: define void @test() {
|
41 |
| -; CHECK-NEXT: [[TMP1:%.*]] = call noundef i32 @ret_noundef() |
42 |
| -; CHECK-NEXT: [[TMP2:%.*]] = call dereferenceable(1) ptr @ret_dereferenceable() |
43 |
| -; CHECK-NEXT: [[TMP3:%.*]] = call dereferenceable_or_null(1) ptr @ret_dereferenceable_or_null() |
| 42 | +; CHECK-NEXT: [[TMP1:%.*]] = call i32 @ret_noundef() |
| 43 | +; CHECK-NEXT: [[TMP2:%.*]] = call ptr @ret_dereferenceable() |
| 44 | +; CHECK-NEXT: [[TMP3:%.*]] = call ptr @ret_dereferenceable_or_null() |
44 | 45 | ; CHECK-NEXT: [[TMP4:%.*]] = call nonnull ptr @ret_nonnull()
|
45 |
| -; CHECK-NEXT: [[TMP5:%.*]] = call noundef nonnull ptr @ret_nonnull_noundef() |
| 46 | +; CHECK-NEXT: [[TMP5:%.*]] = call nonnull ptr @ret_nonnull_noundef() |
46 | 47 | ; CHECK-NEXT: ret void
|
47 | 48 | ;
|
48 | 49 | call noundef i32 @ret_noundef()
|
|
0 commit comments