1*f4a2713aSLionel Sambuc // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -o %t1 %s
2*f4a2713aSLionel Sambuc // RUN: FileCheck --check-prefix=LOCAL %s < %t1
3*f4a2713aSLionel Sambuc // RUN: FileCheck --check-prefix=UNDEF %s < %t1
4*f4a2713aSLionel Sambuc // RUN: FileCheck --check-prefix=PARAM %s < %t1
5*f4a2713aSLionel Sambuc // END.
6*f4a2713aSLionel Sambuc
7*f4a2713aSLionel Sambuc // LOCAL: private unnamed_addr constant [15 x i8] c"localvar_ann_{{.}}\00", section "llvm.metadata"
8*f4a2713aSLionel Sambuc // LOCAL: private unnamed_addr constant [15 x i8] c"localvar_ann_{{.}}\00", section "llvm.metadata"
9*f4a2713aSLionel Sambuc
10*f4a2713aSLionel Sambuc // UNDEF: private unnamed_addr constant [15 x i8] c"undefvar_ann_0\00", section "llvm.metadata"
11*f4a2713aSLionel Sambuc
12*f4a2713aSLionel Sambuc // PARAM: private unnamed_addr constant [12 x i8] c"param_ann_{{.}}\00", section "llvm.metadata"
13*f4a2713aSLionel Sambuc // PARAM: private unnamed_addr constant [12 x i8] c"param_ann_{{.}}\00", section "llvm.metadata"
14*f4a2713aSLionel Sambuc // PARAM: private unnamed_addr constant [12 x i8] c"param_ann_{{.}}\00", section "llvm.metadata"
15*f4a2713aSLionel Sambuc // PARAM: private unnamed_addr constant [12 x i8] c"param_ann_{{.}}\00", section "llvm.metadata"
16*f4a2713aSLionel Sambuc
17*f4a2713aSLionel Sambuc int foo(int v __attribute__((annotate("param_ann_2"))) __attribute__((annotate("param_ann_3"))));
foo(int v)18*f4a2713aSLionel Sambuc int foo(int v __attribute__((annotate("param_ann_0"))) __attribute__((annotate("param_ann_1")))) {
19*f4a2713aSLionel Sambuc return v + 1;
20*f4a2713aSLionel Sambuc // PARAM: define {{.*}}@foo
21*f4a2713aSLionel Sambuc // PARAM: [[V:%.*]] = alloca i32
22*f4a2713aSLionel Sambuc // PARAM: bitcast i32* [[V]] to i8*
23*f4a2713aSLionel Sambuc // PARAM-NEXT: call void @llvm.var.annotation(
24*f4a2713aSLionel Sambuc // PARAM-NEXT: bitcast i32* [[V]] to i8*
25*f4a2713aSLionel Sambuc // PARAM-NEXT: call void @llvm.var.annotation(
26*f4a2713aSLionel Sambuc // PARAM-NEXT: bitcast i32* [[V]] to i8*
27*f4a2713aSLionel Sambuc // PARAM-NEXT: call void @llvm.var.annotation(
28*f4a2713aSLionel Sambuc // PARAM-NEXT: bitcast i32* [[V]] to i8*
29*f4a2713aSLionel Sambuc // PARAM-NEXT: call void @llvm.var.annotation(
30*f4a2713aSLionel Sambuc }
31*f4a2713aSLionel Sambuc
local(void)32*f4a2713aSLionel Sambuc void local(void) {
33*f4a2713aSLionel Sambuc int localvar __attribute__((annotate("localvar_ann_0"))) __attribute__((annotate("localvar_ann_1"))) = 3;
34*f4a2713aSLionel Sambuc // LOCAL-LABEL: define void @local()
35*f4a2713aSLionel Sambuc // LOCAL: [[LOCALVAR:%.*]] = alloca i32,
36*f4a2713aSLionel Sambuc // LOCAL-NEXT: [[T0:%.*]] = bitcast i32* [[LOCALVAR]] to i8*
37*f4a2713aSLionel Sambuc // LOCAL-NEXT: call void @llvm.var.annotation(i8* [[T0]], i8* getelementptr inbounds ([15 x i8]* @{{.*}}), i8* getelementptr inbounds ({{.*}}), i32 33)
38*f4a2713aSLionel Sambuc // LOCAL-NEXT: [[T0:%.*]] = bitcast i32* [[LOCALVAR]] to i8*
39*f4a2713aSLionel Sambuc // LOCAL-NEXT: call void @llvm.var.annotation(i8* [[T0]], i8* getelementptr inbounds ([15 x i8]* @{{.*}}), i8* getelementptr inbounds ({{.*}}), i32 33)
40*f4a2713aSLionel Sambuc }
41*f4a2713aSLionel Sambuc
undef(void)42*f4a2713aSLionel Sambuc void undef(void) {
43*f4a2713aSLionel Sambuc int undefvar __attribute__((annotate("undefvar_ann_0")));
44*f4a2713aSLionel Sambuc // UNDEF-LABEL: define void @undef()
45*f4a2713aSLionel Sambuc // UNDEF: [[UNDEFVAR:%.*]] = alloca i32,
46*f4a2713aSLionel Sambuc // UNDEF-NEXT: [[T0:%.*]] = bitcast i32* [[UNDEFVAR]] to i8*
47*f4a2713aSLionel Sambuc // UNDEF-NEXT: call void @llvm.var.annotation(i8* [[T0]], i8* getelementptr inbounds ([15 x i8]* @{{.*}}), i8* getelementptr inbounds ({{.*}}), i32 43)
48*f4a2713aSLionel Sambuc }
49