load-stmts.cpp revision 8ab670ee2b8147da63d1f282d928e754e4e97408
1typedef int T; 2struct X { int a, b; }; 3void f(int x) { 4 for (T y = x; T z = x; ++x) { 5 } 6 if (T *z2 = &x) { } 7 while (T *z3 = &x) { } 8 switch (T z4 = x) { 9 case 17: break; 10 } 11} 12 13// Test handling of C++ base specifiers. 14class A { 15 void doA(); 16}; 17 18class B { 19 void doB(); 20}; 21 22class C : public A, private B { 23 void doC(); 24}; 25 26class D : virtual public C, virtual private A {}; 27 28namespace std { 29 class type_info { }; 30} 31 32void test_exprs(C *c) { 33 int typeid_marker; 34 typeid(C); 35 typeid(c); 36 typedef int Integer; 37 Integer *int_ptr; 38 int_ptr->Integer::~Integer(); 39} 40 41namespace N { 42 int f(int); 43 float f(float); 44} 45 46template<typename T> 47void test_dependent_exprs(T t) { 48 N::f(t); 49} 50 51// RUN: c-index-test -test-load-source all %s | FileCheck %s 52// CHECK: load-stmts.cpp:1:13: TypedefDecl=T:1:13 (Definition) Extent=[1:13 - 1:14] 53// CHECK: load-stmts.cpp:2:8: StructDecl=X:2:8 (Definition) Extent=[2:1 - 2:23] 54// CHECK: load-stmts.cpp:2:16: FieldDecl=a:2:16 (Definition) Extent=[2:16 - 2:17] 55// CHECK: load-stmts.cpp:2:19: FieldDecl=b:2:19 (Definition) Extent=[2:19 - 2:20] 56// CHECK: load-stmts.cpp:3:6: FunctionDecl=f:3:6 (Definition) Extent=[3:6 - 11:2] 57// CHECK: load-stmts.cpp:3:12: ParmDecl=x:3:12 (Definition) Extent=[3:8 - 3:13] 58// CHECK: <invalid loc>:0:0: UnexposedStmt= Extent=[3:15 - 11:2] 59// CHECK: <invalid loc>:0:0: UnexposedStmt= Extent=[4:3 - 5:4] 60// CHECK: <invalid loc>:0:0: UnexposedStmt= Extent=[4:8 - 4:16] 61// CHECK: load-stmts.cpp:4:10: VarDecl=y:4:10 (Definition) Extent=[4:8 - 4:15] 62// CHECK: load-stmts.cpp:4:8: TypeRef=T:1:13 Extent=[4:8 - 4:9] 63// CHECK: load-stmts.cpp:4:14: DeclRefExpr=x:3:12 Extent=[4:14 - 4:15] 64// CHECK: load-stmts.cpp:4:19: VarDecl=z:4:19 (Definition) Extent=[4:17 - 4:24] 65// CHECK: load-stmts.cpp:4:17: TypeRef=T:1:13 Extent=[4:17 - 4:18] 66// CHECK: load-stmts.cpp:4:23: DeclRefExpr=x:3:12 Extent=[4:23 - 4:24] 67// CHECK: load-stmts.cpp:4:19: UnexposedExpr=z:4:19 Extent=[4:19 - 4:20] 68// CHECK: load-stmts.cpp:4:19: DeclRefExpr=z:4:19 Extent=[4:19 - 4:20] 69// CHECK: load-stmts.cpp:4:26: UnexposedExpr= Extent=[4:26 - 4:29] 70// CHECK: load-stmts.cpp:4:28: DeclRefExpr=x:3:12 Extent=[4:28 - 4:29] 71// CHECK: <invalid loc>:0:0: UnexposedStmt= Extent=[4:31 - 5:4] 72// CHECK: <invalid loc>:0:0: UnexposedStmt= Extent=[6:3 - 6:22] 73// CHECK: load-stmts.cpp:6:10: VarDecl=z2:6:10 (Definition) Extent=[6:7 - 6:17] 74// CHECK: load-stmts.cpp:6:7: TypeRef=T:1:13 Extent=[6:7 - 6:8] 75// CHECK: load-stmts.cpp:6:15: UnexposedExpr= Extent=[6:15 - 6:17] 76// CHECK: load-stmts.cpp:6:16: DeclRefExpr=x:3:12 Extent=[6:16 - 6:17] 77// CHECK: load-stmts.cpp:6:10: UnexposedExpr=z2:6:10 Extent=[6:10 - 6:12] 78// CHECK: load-stmts.cpp:6:10: DeclRefExpr=z2:6:10 Extent=[6:10 - 6:12] 79// CHECK: <invalid loc>:0:0: UnexposedStmt= Extent=[6:19 - 6:22] 80// CHECK: <invalid loc>:0:0: UnexposedStmt= Extent=[7:3 - 7:25] 81// CHECK: load-stmts.cpp:7:13: VarDecl=z3:7:13 (Definition) Extent=[7:10 - 7:20] 82// CHECK: load-stmts.cpp:7:10: TypeRef=T:1:13 Extent=[7:10 - 7:11] 83// CHECK: load-stmts.cpp:7:18: UnexposedExpr= Extent=[7:18 - 7:20] 84// CHECK: load-stmts.cpp:7:19: DeclRefExpr=x:3:12 Extent=[7:19 - 7:20] 85// CHECK: load-stmts.cpp:7:13: UnexposedExpr=z3:7:13 Extent=[7:13 - 7:15] 86// CHECK: load-stmts.cpp:7:13: DeclRefExpr=z3:7:13 Extent=[7:13 - 7:15] 87// CHECK: <invalid loc>:0:0: UnexposedStmt= Extent=[7:22 - 7:25] 88// CHECK: <invalid loc>:0:0: UnexposedStmt= Extent=[8:3 - 10:4] 89// CHECK: load-stmts.cpp:8:13: VarDecl=z4:8:13 (Definition) Extent=[8:11 - 8:19] 90// CHECK: load-stmts.cpp:8:11: TypeRef=T:1:13 Extent=[8:11 - 8:12] 91// CHECK: load-stmts.cpp:8:18: DeclRefExpr=x:3:12 Extent=[8:18 - 8:19] 92// CHECK: load-stmts.cpp:8:13: DeclRefExpr=z4:8:13 Extent=[8:13 - 8:15] 93// CHECK: <invalid loc>:0:0: UnexposedStmt= Extent=[8:21 - 10:4] 94// CHECK: <invalid loc>:0:0: UnexposedStmt= Extent=[9:3 - 9:17] 95// CHECK: load-stmts.cpp:9:8: UnexposedExpr= Extent=[9:8 - 9:10] 96// CHECK: <invalid loc>:0:0: UnexposedStmt= Extent=[9:12 - 9:17] 97// CHECK: load-stmts.cpp:14:7: ClassDecl=A:14:7 (Definition) Extent=[14:1 - 16:2] 98// CHECK: load-stmts.cpp:15:8: CXXMethod=doA:15:8 Extent=[15:8 - 15:13] 99// CHECK: load-stmts.cpp:18:7: ClassDecl=B:18:7 (Definition) Extent=[18:1 - 20:2] 100// CHECK: load-stmts.cpp:19:8: CXXMethod=doB:19:8 Extent=[19:8 - 19:13] 101// CHECK: load-stmts.cpp:22:7: ClassDecl=C:22:7 (Definition) Extent=[22:1 - 24:2] 102// CHECK: <invalid loc>:0:0: C++ base class specifier=class A:14:7 [access=public isVirtual=false] 103// CHECK: <invalid loc>:0:0: C++ base class specifier=class B:18:7 [access=private isVirtual=false] 104// CHECK: load-stmts.cpp:23:8: CXXMethod=doC:23:8 Extent=[23:8 - 23:13] 105// CHECK: load-stmts.cpp:26:7: ClassDecl=D:26:7 (Definition) Extent=[26:1 - 26:49] 106// CHECK: <invalid loc>:0:0: C++ base class specifier=class C:22:7 [access=public isVirtual=true] 107// CHECK: <invalid loc>:0:0: C++ base class specifier=class A:14:7 [access=private isVirtual=true] 108// CHECK: load-stmts.cpp:33:7: VarDecl=typeid_marker:33:7 (Definition) 109// CHECK: load-stmts.cpp:34:10: TypeRef=class C:22:7 Extent=[34:10 - 34:11] 110// CHECK: load-stmts.cpp:35:10: DeclRefExpr=c:32:20 Extent=[35:10 - 35:11] 111// CHECK: load-stmts.cpp:37:12: VarDecl=int_ptr:37:12 (Definition) Extent=[37:3 - 37:19] 112// CHECK: load-stmts.cpp:37:3: TypeRef=Integer:36:15 Extent=[37:3 - 37:10] 113// CHECK: load-stmts.cpp:38:3: DeclRefExpr=int_ptr:37:12 Extent=[38:3 - 38:10] 114// CHECK: load-stmts.cpp:38:12: TypeRef=Integer:36:15 Extent=[38:12 - 38:19] 115// CHECK: load-stmts.cpp:38:22: TypeRef=Integer:36:15 Extent=[38:22 - 38:29] 116// CHECK: load-stmts.cpp:47:6: FunctionTemplate=test_dependent_exprs:47:6 (Definition) 117// CHECK: load-stmts.cpp:48:3: CallExpr= Extent=[48:3 - 48:10] 118// CHECK: load-stmts.cpp:48:3: NamespaceRef=N:41:11 Extent=[48:3 - 48:4] 119// CHECK: load-stmts.cpp:48:8: DeclRefExpr=t:47:29 Extent=[48:8 - 48:9] 120