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