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