Mercurial > hg > CbC > CbC_llvm
comparison clang/test/CodeGen/nonnull.c @ 207:2e18cbf3894f
LLVM12
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 08 Jun 2021 06:07:14 +0900 |
parents | 1d019706d866 |
children | c4bab56944e8 |
comparison
equal
deleted
inserted
replaced
173:0572611fdcc8 | 207:2e18cbf3894f |
---|---|
1 // RUN: %clang_cc1 -triple x86_64-apple-darwin -emit-llvm < %s | FileCheck -check-prefix=NULL-INVALID %s | 1 // RUN: %clang_cc1 -triple x86_64-apple-darwin -emit-llvm < %s | FileCheck -check-prefix=NULL-INVALID %s |
2 // RUN: %clang_cc1 -triple x86_64-apple-darwin -emit-llvm -fno-delete-null-pointer-checks < %s | FileCheck -check-prefix=NULL-VALID %s | 2 // RUN: %clang_cc1 -triple x86_64-apple-darwin -emit-llvm -fno-delete-null-pointer-checks < %s | FileCheck -check-prefix=NULL-VALID %s |
3 | 3 |
4 // NULL-INVALID: define void @foo(i32* nonnull %x) | 4 // NULL-INVALID: define{{.*}} void @foo(i32* nonnull %x) |
5 // NULL-VALID: define void @foo(i32* %x) | 5 // NULL-VALID: define{{.*}} void @foo(i32* %x) |
6 void foo(int * __attribute__((nonnull)) x) { | 6 void foo(int * __attribute__((nonnull)) x) { |
7 *x = 0; | 7 *x = 0; |
8 } | 8 } |
9 | 9 |
10 // NULL-INVALID: define void @bar(i32* nonnull %x) | 10 // NULL-INVALID: define{{.*}} void @bar(i32* nonnull %x) |
11 // NULL-VALID: define void @bar(i32* %x) | 11 // NULL-VALID: define{{.*}} void @bar(i32* %x) |
12 void bar(int * x) __attribute__((nonnull(1))) { | 12 void bar(int * x) __attribute__((nonnull(1))) { |
13 *x = 0; | 13 *x = 0; |
14 } | 14 } |
15 | 15 |
16 // NULL-INVALID: define void @bar2(i32* %x, i32* nonnull %y) | 16 // NULL-INVALID: define{{.*}} void @bar2(i32* %x, i32* nonnull %y) |
17 // NULL-VALID: define void @bar2(i32* %x, i32* %y) | 17 // NULL-VALID: define{{.*}} void @bar2(i32* %x, i32* %y) |
18 void bar2(int * x, int * y) __attribute__((nonnull(2))) { | 18 void bar2(int * x, int * y) __attribute__((nonnull(2))) { |
19 *x = 0; | 19 *x = 0; |
20 } | 20 } |
21 | 21 |
22 static int a; | 22 static int a; |
23 // NULL-INVALID: define nonnull i32* @bar3() | 23 // NULL-INVALID: define{{.*}} nonnull i32* @bar3() |
24 // NULL-VALID: define i32* @bar3() | 24 // NULL-VALID: define{{.*}} i32* @bar3() |
25 int * bar3() __attribute__((returns_nonnull)) { | 25 int * bar3() __attribute__((returns_nonnull)) { |
26 return &a; | 26 return &a; |
27 } | 27 } |
28 | 28 |
29 // NULL-INVALID: define i32 @bar4(i32 %n, i32* nonnull %p) | 29 // NULL-INVALID: define{{.*}} i32 @bar4(i32 %n, i32* nonnull %p) |
30 // NULL-VALID: define i32 @bar4(i32 %n, i32* %p) | 30 // NULL-VALID: define{{.*}} i32 @bar4(i32 %n, i32* %p) |
31 int bar4(int n, int *p) __attribute__((nonnull)) { | 31 int bar4(int n, int *p) __attribute__((nonnull)) { |
32 return n + *p; | 32 return n + *p; |
33 } | 33 } |
34 | 34 |
35 // NULL-INVALID: define i32 @bar5(i32 %n, i32* nonnull %p) | 35 // NULL-INVALID: define{{.*}} i32 @bar5(i32 %n, i32* nonnull %p) |
36 // NULL-VALID: define i32 @bar5(i32 %n, i32* %p) | 36 // NULL-VALID: define{{.*}} i32 @bar5(i32 %n, i32* %p) |
37 int bar5(int n, int *p) __attribute__((nonnull(1, 2))) { | 37 int bar5(int n, int *p) __attribute__((nonnull(1, 2))) { |
38 return n + *p; | 38 return n + *p; |
39 } | 39 } |
40 | 40 |
41 typedef union { | 41 typedef union { |
42 unsigned long long n; | 42 unsigned long long n; |
43 int *p; | 43 int *p; |
44 double d; | 44 double d; |
45 } TransparentUnion __attribute__((transparent_union)); | 45 } TransparentUnion __attribute__((transparent_union)); |
46 | 46 |
47 // NULL-INVALID: define i32 @bar6(i64 % | 47 // NULL-INVALID: define{{.*}} i32 @bar6(i64 % |
48 // NULL-VALID: define i32 @bar6(i64 % | 48 // NULL-VALID: define{{.*}} i32 @bar6(i64 % |
49 int bar6(TransparentUnion tu) __attribute__((nonnull(1))) { | 49 int bar6(TransparentUnion tu) __attribute__((nonnull(1))) { |
50 return *tu.p; | 50 return *tu.p; |
51 } | 51 } |
52 | 52 |
53 // NULL-INVALID: define void @bar7(i32* nonnull %a, i32* nonnull %b) | 53 // NULL-INVALID: define{{.*}} void @bar7(i32* nonnull %a, i32* nonnull %b) |
54 // NULL-VALID: define void @bar7(i32* %a, i32* %b) | 54 // NULL-VALID: define{{.*}} void @bar7(i32* %a, i32* %b) |
55 void bar7(int *a, int *b) __attribute__((nonnull(1))) | 55 void bar7(int *a, int *b) __attribute__((nonnull(1))) |
56 __attribute__((nonnull(2))) {} | 56 __attribute__((nonnull(2))) {} |
57 | 57 |
58 // NULL-INVALID: define void @bar8(i32* nonnull %a, i32* nonnull %b) | 58 // NULL-INVALID: define{{.*}} void @bar8(i32* nonnull %a, i32* nonnull %b) |
59 // NULL-VALID: define void @bar8(i32* %a, i32* %b) | 59 // NULL-VALID: define{{.*}} void @bar8(i32* %a, i32* %b) |
60 void bar8(int *a, int *b) __attribute__((nonnull)) | 60 void bar8(int *a, int *b) __attribute__((nonnull)) |
61 __attribute__((nonnull(1))) {} | 61 __attribute__((nonnull(1))) {} |