1ae03d8e52d81adbb98b31dd5c179abe45c91fc25Dmitri Gribenkotypedef int FooType;
2ae03d8e52d81adbb98b31dd5c179abe45c91fc25Dmitri Gribenkoint *p;
3ae03d8e52d81adbb98b31dd5c179abe45c91fc25Dmitri Gribenkoint *f(int *p, char *x, FooType z, int arr[5], void (*fn)(int)) {
4ae03d8e52d81adbb98b31dd5c179abe45c91fc25Dmitri Gribenko  fn(*p);
5ae03d8e52d81adbb98b31dd5c179abe45c91fc25Dmitri Gribenko  const FooType w = z;
6ae03d8e52d81adbb98b31dd5c179abe45c91fc25Dmitri Gribenko  return p + z + arr[3];
7ae03d8e52d81adbb98b31dd5c179abe45c91fc25Dmitri Gribenko}
8ae03d8e52d81adbb98b31dd5c179abe45c91fc25Dmitri Gribenkotypedef double OtherType;
9ae03d8e52d81adbb98b31dd5c179abe45c91fc25Dmitri Gribenkotypedef int ArrayType[5];
10ae03d8e52d81adbb98b31dd5c179abe45c91fc25Dmitri Gribenkoint __attribute__((vector_size(16))) x;
11ae03d8e52d81adbb98b31dd5c179abe45c91fc25Dmitri Gribenkotypedef int __attribute__((vector_size(16))) int4_t;
12ae03d8e52d81adbb98b31dd5c179abe45c91fc25Dmitri Gribenko
137a97f7bc619752d09998a9c31c7574b51f04ba1eArgyrios Kyrtzidisint f2(int incompletearray[]);
147a97f7bc619752d09998a9c31c7574b51f04ba1eArgyrios Kyrtzidis
154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarenum Enum{i}; enum Enum elaboratedEnumType();
164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct Struct{}; struct Struct elaboratedStructType();
174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
18ae03d8e52d81adbb98b31dd5c179abe45c91fc25Dmitri Gribenko// RUN: c-index-test -test-print-type %s | FileCheck %s
19c910d4cfa5042f2c9da1eb4e0b6ed59240c0eeeeReid Kleckner// 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]
206bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: ParmDecl=p:3:13 (Definition) [type=int *] [typekind=Pointer] [isPOD=1] [pointeetype=int] [pointeekind=Int]
216bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: ParmDecl=x:3:22 (Definition) [type=char *] [typekind=Pointer] [isPOD=1] [pointeetype=char] [pointeekind=Char_{{[US]}}]
22ae03d8e52d81adbb98b31dd5c179abe45c91fc25Dmitri Gribenko// CHECK: ParmDecl=z:3:33 (Definition) [type=FooType] [typekind=Typedef] [canonicaltype=int] [canonicaltypekind=Int] [isPOD=1]
23ae03d8e52d81adbb98b31dd5c179abe45c91fc25Dmitri Gribenko// CHECK: TypeRef=FooType:1:13 [type=FooType] [typekind=Typedef] [canonicaltype=int] [canonicaltypekind=Int] [isPOD=1]
247717914639ed8a186fe8b781c9c220594e8dcf30Argyrios Kyrtzidis// CHECK: ParmDecl=arr:3:40 (Definition) [type=int [5]] [typekind=ConstantArray] [isPOD=1]
25ae03d8e52d81adbb98b31dd5c179abe45c91fc25Dmitri Gribenko// CHECK: IntegerLiteral= [type=int] [typekind=Int] [isPOD=1]
266bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: ParmDecl=fn:3:55 (Definition) [type=void (*)(int)] [typekind=Pointer] [canonicaltype=void (*)(int)] [canonicaltypekind=Pointer] [isPOD=1] [pointeetype=void (int)] [pointeekind=Unexposed]
27ae03d8e52d81adbb98b31dd5c179abe45c91fc25Dmitri Gribenko// CHECK: ParmDecl=:3:62 (Definition) [type=int] [typekind=Int] [isPOD=1]
28ae03d8e52d81adbb98b31dd5c179abe45c91fc25Dmitri Gribenko// CHECK: CompoundStmt= [type=] [typekind=Invalid] [isPOD=0]
29e9ebd852ec1effa393bcc4aad73d9c657a5279c1Argyrios Kyrtzidis// CHECK: CallExpr=fn:3:55 [type=void] [typekind=Void] [args= [int] [Int]] [isPOD=0]
306bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: DeclRefExpr=fn:3:55 [type=void (*)(int)] [typekind=Pointer] [canonicaltype=void (*)(int)] [canonicaltypekind=Pointer] [isPOD=1] [pointeetype=void (int)] [pointeekind=Unexposed]
31ae03d8e52d81adbb98b31dd5c179abe45c91fc25Dmitri Gribenko// CHECK: UnaryOperator= [type=int] [typekind=Int] [isPOD=1]
326bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: DeclRefExpr=p:3:13 [type=int *] [typekind=Pointer] [isPOD=1] [pointeetype=int] [pointeekind=Int]
33ae03d8e52d81adbb98b31dd5c179abe45c91fc25Dmitri Gribenko// CHECK: DeclStmt= [type=] [typekind=Invalid] [isPOD=0]
34ae03d8e52d81adbb98b31dd5c179abe45c91fc25Dmitri Gribenko// CHECK: VarDecl=w:5:17 (Definition) [type=const FooType] [typekind=Typedef] const [canonicaltype=const int] [canonicaltypekind=Int] [isPOD=1]
35ae03d8e52d81adbb98b31dd5c179abe45c91fc25Dmitri Gribenko// CHECK: TypeRef=FooType:1:13 [type=FooType] [typekind=Typedef] [canonicaltype=int] [canonicaltypekind=Int] [isPOD=1]
36ae03d8e52d81adbb98b31dd5c179abe45c91fc25Dmitri Gribenko// CHECK: DeclRefExpr=z:3:33 [type=FooType] [typekind=Typedef] [canonicaltype=int] [canonicaltypekind=Int] [isPOD=1]
37ae03d8e52d81adbb98b31dd5c179abe45c91fc25Dmitri Gribenko// CHECK: ReturnStmt= [type=] [typekind=Invalid] [isPOD=0]
386bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: BinaryOperator= [type=int *] [typekind=Pointer] [isPOD=1] [pointeetype=int] [pointeekind=Int]
396bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: BinaryOperator= [type=int *] [typekind=Pointer] [isPOD=1] [pointeetype=int] [pointeekind=Int]
406bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: DeclRefExpr=p:3:13 [type=int *] [typekind=Pointer] [isPOD=1] [pointeetype=int] [pointeekind=Int]
41ae03d8e52d81adbb98b31dd5c179abe45c91fc25Dmitri Gribenko// CHECK: DeclRefExpr=z:3:33 [type=FooType] [typekind=Typedef] [canonicaltype=int] [canonicaltypekind=Int] [isPOD=1]
42ae03d8e52d81adbb98b31dd5c179abe45c91fc25Dmitri Gribenko// CHECK: ArraySubscriptExpr= [type=int] [typekind=Int] [isPOD=1]
437a97f7bc619752d09998a9c31c7574b51f04ba1eArgyrios Kyrtzidis// CHECK: UnexposedExpr=arr:3:40 [type=int [5]] [typekind=ConstantArray] [isPOD=1]
44ae03d8e52d81adbb98b31dd5c179abe45c91fc25Dmitri Gribenko// CHECK: IntegerLiteral= [type=int] [typekind=Int] [isPOD=1]
45ae03d8e52d81adbb98b31dd5c179abe45c91fc25Dmitri Gribenko// CHECK: TypedefDecl=OtherType:8:16 (Definition) [type=OtherType] [typekind=Typedef] [canonicaltype=double] [canonicaltypekind=Double] [isPOD=1]
46ae03d8e52d81adbb98b31dd5c179abe45c91fc25Dmitri Gribenko// CHECK: TypedefDecl=ArrayType:9:13 (Definition) [type=ArrayType] [typekind=Typedef] [canonicaltype=int [5]] [canonicaltypekind=ConstantArray] [isPOD=1]
47ae03d8e52d81adbb98b31dd5c179abe45c91fc25Dmitri Gribenko// CHECK: IntegerLiteral= [type=int] [typekind=Int] [isPOD=1]
48ae03d8e52d81adbb98b31dd5c179abe45c91fc25Dmitri Gribenko// CHECK: VarDecl=x:10:38 [type=__attribute__((__vector_size__(4 * sizeof(int)))) int] [typekind=Vector] [isPOD=1]
49ae03d8e52d81adbb98b31dd5c179abe45c91fc25Dmitri Gribenko// CHECK: TypedefDecl=int4_t:11:46 (Definition) [type=int4_t] [typekind=Typedef] [canonicaltype=__attribute__((__vector_size__(4 * sizeof(int)))) int] [canonicaltypekind=Vector] [isPOD=1]
507a97f7bc619752d09998a9c31c7574b51f04ba1eArgyrios Kyrtzidis// CHECK: ParmDecl=incompletearray:13:12 (Definition) [type=int []] [typekind=IncompleteArray] [isPOD=1]
514967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK: FunctionDecl=elaboratedEnumType:15:25 [type=enum Enum ()] [typekind=FunctionNoProto] [canonicaltype=enum Enum ()] [canonicaltypekind=FunctionNoProto] [resulttype=enum Enum] [resulttypekind=Elaborated] [isPOD=0]
524967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK: TypeRef=enum Enum:15:6 [type=enum Enum] [typekind=Enum] [isPOD=1]
534967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK: StructDecl=Struct:16:8 (Definition) [type=struct Struct] [typekind=Record] [isPOD=1]
544967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK: FunctionDecl=elaboratedStructType:16:32 [type=struct Struct ()] [typekind=FunctionNoProto] [canonicaltype=struct Struct ()] [canonicaltypekind=FunctionNoProto] [resulttype=struct Struct] [resulttypekind=Elaborated] [isPOD=0]
554967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK: TypeRef=struct Struct:16:8 [type=struct Struct] [typekind=Record] [isPOD=1]
56