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