1typedef int FooType; 2int *p; 3int *f(int *p, char *x, FooType z, int arr[5], void (*fn)(int)) { 4 fn(*p); 5 const FooType w = z; 6 return p + z + arr[3]; 7} 8typedef double OtherType; 9typedef int ArrayType[5]; 10int __attribute__((vector_size(16))) x; 11typedef int __attribute__((vector_size(16))) int4_t; 12 13// RUN: c-index-test -test-print-type %s | FileCheck %s 14// CHECK: FunctionDecl=f:3:6 (Definition) [type=int *(int *, char *, FooType, int *, void (*)(int))] [typekind=FunctionProto] [canonicaltype=int *(int *, char *, int, int *, void (*)(int))] [canonicaltypekind=FunctionProto] [resulttype=int *] [resulttypekind=Pointer] [args= [int *] [Pointer] [char *] [Pointer] [FooType] [Typedef] [int [5]] [ConstantArray] [void (*)(int)] [Pointer]] [isPOD=0] 15// CHECK: ParmDecl=p:3:13 (Definition) [type=int *] [typekind=Pointer] [isPOD=1] 16// CHECK: ParmDecl=x:3:22 (Definition) [type=char *] [typekind=Pointer] [isPOD=1] 17// CHECK: ParmDecl=z:3:33 (Definition) [type=FooType] [typekind=Typedef] [canonicaltype=int] [canonicaltypekind=Int] [isPOD=1] 18// CHECK: TypeRef=FooType:1:13 [type=FooType] [typekind=Typedef] [canonicaltype=int] [canonicaltypekind=Int] [isPOD=1] 19// CHECK: ParmDecl=arr:3:40 (Definition) [type=int [5]] [typekind=ConstantArray] [isPOD=1] 20// CHECK: IntegerLiteral= [type=int] [typekind=Int] [isPOD=1] 21// CHECK: ParmDecl=fn:3:55 (Definition) [type=void (*)(int)] [typekind=Pointer] [canonicaltype=void (*)(int)] [canonicaltypekind=Pointer] [isPOD=1] 22// CHECK: ParmDecl=:3:62 (Definition) [type=int] [typekind=Int] [isPOD=1] 23// CHECK: CompoundStmt= [type=] [typekind=Invalid] [isPOD=0] 24// CHECK: CallExpr=fn:3:55 [type=void] [typekind=Void] [args= [int] [Int]] [isPOD=0] 25// CHECK: DeclRefExpr=fn:3:55 [type=void (*)(int)] [typekind=Pointer] [canonicaltype=void (*)(int)] [canonicaltypekind=Pointer] [isPOD=1] 26// CHECK: UnaryOperator= [type=int] [typekind=Int] [isPOD=1] 27// CHECK: DeclRefExpr=p:3:13 [type=int *] [typekind=Pointer] [isPOD=1] 28// CHECK: DeclStmt= [type=] [typekind=Invalid] [isPOD=0] 29// CHECK: VarDecl=w:5:17 (Definition) [type=const FooType] [typekind=Typedef] const [canonicaltype=const int] [canonicaltypekind=Int] [isPOD=1] 30// CHECK: TypeRef=FooType:1:13 [type=FooType] [typekind=Typedef] [canonicaltype=int] [canonicaltypekind=Int] [isPOD=1] 31// CHECK: DeclRefExpr=z:3:33 [type=FooType] [typekind=Typedef] [canonicaltype=int] [canonicaltypekind=Int] [isPOD=1] 32// CHECK: ReturnStmt= [type=] [typekind=Invalid] [isPOD=0] 33// CHECK: BinaryOperator= [type=int *] [typekind=Pointer] [isPOD=1] 34// CHECK: BinaryOperator= [type=int *] [typekind=Pointer] [isPOD=1] 35// CHECK: DeclRefExpr=p:3:13 [type=int *] [typekind=Pointer] [isPOD=1] 36// CHECK: DeclRefExpr=z:3:33 [type=FooType] [typekind=Typedef] [canonicaltype=int] [canonicaltypekind=Int] [isPOD=1] 37// CHECK: ArraySubscriptExpr= [type=int] [typekind=Int] [isPOD=1] 38// CHECK: UnexposedExpr=arr:3:40 [type=int *] [typekind=Unexposed] [canonicaltype=int *] [canonicaltypekind=Pointer] [isPOD=1] 39// CHECK: IntegerLiteral= [type=int] [typekind=Int] [isPOD=1] 40// CHECK: TypedefDecl=OtherType:8:16 (Definition) [type=OtherType] [typekind=Typedef] [canonicaltype=double] [canonicaltypekind=Double] [isPOD=1] 41// CHECK: TypedefDecl=ArrayType:9:13 (Definition) [type=ArrayType] [typekind=Typedef] [canonicaltype=int [5]] [canonicaltypekind=ConstantArray] [isPOD=1] 42// CHECK: IntegerLiteral= [type=int] [typekind=Int] [isPOD=1] 43// CHECK: VarDecl=x:10:38 [type=__attribute__((__vector_size__(4 * sizeof(int)))) int] [typekind=Vector] [isPOD=1] 44// CHECK: TypedefDecl=int4_t:11:46 (Definition) [type=int4_t] [typekind=Typedef] [canonicaltype=__attribute__((__vector_size__(4 * sizeof(int)))) int] [canonicaltypekind=Vector] [isPOD=1] 45