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