xref: /minix3/external/bsd/llvm/dist/clang/test/CodeGen/nonnull.c (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
1*0a6a1f1dSLionel Sambuc // RUN: %clang_cc1 -triple x86_64-apple-darwin -emit-llvm < %s | FileCheck %s
2*0a6a1f1dSLionel Sambuc 
3*0a6a1f1dSLionel Sambuc // CHECK: define void @foo(i32* nonnull %x)
foo(int * x)4*0a6a1f1dSLionel Sambuc void foo(int * __attribute__((nonnull)) x) {
5*0a6a1f1dSLionel Sambuc   *x = 0;
6*0a6a1f1dSLionel Sambuc }
7*0a6a1f1dSLionel Sambuc 
8*0a6a1f1dSLionel Sambuc // CHECK: define void @bar(i32* nonnull %x)
bar(int * x)9*0a6a1f1dSLionel Sambuc void bar(int * x) __attribute__((nonnull(1)))  {
10*0a6a1f1dSLionel Sambuc   *x = 0;
11*0a6a1f1dSLionel Sambuc }
12*0a6a1f1dSLionel Sambuc 
13*0a6a1f1dSLionel Sambuc // CHECK: define void @bar2(i32* %x, i32* nonnull %y)
bar2(int * x,int * y)14*0a6a1f1dSLionel Sambuc void bar2(int * x, int * y) __attribute__((nonnull(2)))  {
15*0a6a1f1dSLionel Sambuc   *x = 0;
16*0a6a1f1dSLionel Sambuc }
17*0a6a1f1dSLionel Sambuc 
18*0a6a1f1dSLionel Sambuc static int a;
19*0a6a1f1dSLionel Sambuc // CHECK: define nonnull i32* @bar3()
bar3()20*0a6a1f1dSLionel Sambuc int * bar3() __attribute__((returns_nonnull))  {
21*0a6a1f1dSLionel Sambuc   return &a;
22*0a6a1f1dSLionel Sambuc }
23*0a6a1f1dSLionel Sambuc 
24*0a6a1f1dSLionel Sambuc // CHECK: define i32 @bar4(i32 %n, i32* nonnull %p)
bar4(int n,int * p)25*0a6a1f1dSLionel Sambuc int bar4(int n, int *p) __attribute__((nonnull)) {
26*0a6a1f1dSLionel Sambuc   return n + *p;
27*0a6a1f1dSLionel Sambuc }
28*0a6a1f1dSLionel Sambuc 
29*0a6a1f1dSLionel Sambuc // CHECK: define i32 @bar5(i32 %n, i32* nonnull %p)
bar5(int n,int * p)30*0a6a1f1dSLionel Sambuc int bar5(int n, int *p) __attribute__((nonnull(1, 2))) {
31*0a6a1f1dSLionel Sambuc   return n + *p;
32*0a6a1f1dSLionel Sambuc }
33*0a6a1f1dSLionel Sambuc 
34*0a6a1f1dSLionel Sambuc typedef union {
35*0a6a1f1dSLionel Sambuc   unsigned long long n;
36*0a6a1f1dSLionel Sambuc   int *p;
37*0a6a1f1dSLionel Sambuc   double d;
38*0a6a1f1dSLionel Sambuc } TransparentUnion __attribute__((transparent_union));
39*0a6a1f1dSLionel Sambuc 
40*0a6a1f1dSLionel Sambuc // CHECK: define i32 @bar6(i64 %
bar6(TransparentUnion tu)41*0a6a1f1dSLionel Sambuc int bar6(TransparentUnion tu) __attribute__((nonnull(1))) {
42*0a6a1f1dSLionel Sambuc   return *tu.p;
43*0a6a1f1dSLionel Sambuc }
44*0a6a1f1dSLionel Sambuc 
45*0a6a1f1dSLionel Sambuc // CHECK: define void @bar7(i32* nonnull %a, i32* nonnull %b)
bar7(int * a,int * b)46*0a6a1f1dSLionel Sambuc void bar7(int *a, int *b) __attribute__((nonnull(1)))
47*0a6a1f1dSLionel Sambuc __attribute__((nonnull(2))) {}
48*0a6a1f1dSLionel Sambuc 
49*0a6a1f1dSLionel Sambuc // CHECK: define void @bar8(i32* nonnull %a, i32* nonnull %b)
bar8(int * a,int * b)50*0a6a1f1dSLionel Sambuc void bar8(int *a, int *b) __attribute__((nonnull))
51*0a6a1f1dSLionel Sambuc __attribute__((nonnull(1))) {}
52