177f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge// RUN: %clang_cc1 -emit-llvm -o - %s | FileCheck %s
277f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge// END.
377f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge
477f68bb90af93b95045fb994e7cd68137adcc132Julien Lerougestatic long long llfoo;
577f68bb90af93b95045fb994e7cd68137adcc132Julien Lerougestatic int intfoo;
677f68bb90af93b95045fb994e7cd68137adcc132Julien Lerougestatic short shortfoo;
777f68bb90af93b95045fb994e7cd68137adcc132Julien Lerougestatic char charfoo;
877f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge
977f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge// CHECK: private unnamed_addr constant [13 x i8] {{.*}}annotation_a{{.*}} section "llvm.metadata"
1077f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge// CHECK-NOT: {{.*}}annotation_a{{.*}}
1177f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge
1277f68bb90af93b95045fb994e7cd68137adcc132Julien Lerougestatic int foo(int a) {
1377f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge    return a + 1;
1477f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge}
1577f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge
1677f68bb90af93b95045fb994e7cd68137adcc132Julien Lerougeint main(int argc, char **argv) {
1777f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge    char barray[16];
1877f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge    char *b = (char *) __builtin_annotation((int)barray, "annotation_a");
1977f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge// CHECK: ptrtoint i8* {{.*}} to i32
2077f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge// CHECK-NEXT: call i32 @llvm.annotation.i32
2177f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge// CHECK: inttoptr {{.*}} to i8*
2277f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge
2377f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge    int call = __builtin_annotation(foo(argc), "annotation_a");
2477f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge// CHECK: call {{.*}} @foo
2577f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge// CHECK: call i32 @llvm.annotation.i32
2677f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge
2777f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge    long long lla = __builtin_annotation(llfoo, "annotation_a");
28e59392176c2369df2bdd11b7786cb38abac00198Julien Lerouge// CHECK: call i64 @llvm.annotation.i64
2977f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge
3077f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge    int inta = __builtin_annotation(intfoo, "annotation_a");
3177f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge// CHECK: load i32* @intfoo
3277f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge// CHECK-NEXT: call i32 @llvm.annotation.i32
3377f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge// CHECK-NEXT: store
3477f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge
3577f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge    short shorta =  __builtin_annotation(shortfoo, "annotation_a");
36e59392176c2369df2bdd11b7786cb38abac00198Julien Lerouge// CHECK: call i16 @llvm.annotation.i16
3777f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge
3877f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge    char chara = __builtin_annotation(charfoo, "annotation_a");
39e59392176c2369df2bdd11b7786cb38abac00198Julien Lerouge// CHECK: call i8 @llvm.annotation.i8
40e59392176c2369df2bdd11b7786cb38abac00198Julien Lerouge
4177f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge    char **arg = (char**) __builtin_annotation((int) argv, "annotation_a");
4277f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge// CHECK: ptrtoint i8** {{.*}} to
4377f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge// CHECK: call i32 @llvm.annotation.i32
4477f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge// CHECK: inttoptr {{.*}} to i8**
4577f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge    return 0;
4677f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge}
47