load-stmts.cpp revision 1f7b590d120758d0c969a8153c38d2446935d4aa
1263b47b6272bfd3ea1c0e61b7ac404e7b2e0f759Douglas Gregortypedef int T;
2263b47b6272bfd3ea1c0e61b7ac404e7b2e0f759Douglas Gregorstruct X { int a, b; };
3263b47b6272bfd3ea1c0e61b7ac404e7b2e0f759Douglas Gregorvoid f(int x) {
4263b47b6272bfd3ea1c0e61b7ac404e7b2e0f759Douglas Gregor  for (T y = x; T z = x; ++x) {
5263b47b6272bfd3ea1c0e61b7ac404e7b2e0f759Douglas Gregor  }
6263b47b6272bfd3ea1c0e61b7ac404e7b2e0f759Douglas Gregor  if (T *z2 = &x) { }
7263b47b6272bfd3ea1c0e61b7ac404e7b2e0f759Douglas Gregor  while (T *z3 = &x) { }
8263b47b6272bfd3ea1c0e61b7ac404e7b2e0f759Douglas Gregor  switch (T z4 = x) {
9263b47b6272bfd3ea1c0e61b7ac404e7b2e0f759Douglas Gregor  case 17: break;
10263b47b6272bfd3ea1c0e61b7ac404e7b2e0f759Douglas Gregor  }
11263b47b6272bfd3ea1c0e61b7ac404e7b2e0f759Douglas Gregor}
12263b47b6272bfd3ea1c0e61b7ac404e7b2e0f759Douglas Gregor
133064ef9e604d19a0cfd0d8e3ed3055bfd83f88fdTed Kremenek// Test handling of C++ base specifiers.
143064ef9e604d19a0cfd0d8e3ed3055bfd83f88fdTed Kremenekclass A {
153064ef9e604d19a0cfd0d8e3ed3055bfd83f88fdTed Kremenek  void doA();
163064ef9e604d19a0cfd0d8e3ed3055bfd83f88fdTed Kremenek};
173064ef9e604d19a0cfd0d8e3ed3055bfd83f88fdTed Kremenek
183064ef9e604d19a0cfd0d8e3ed3055bfd83f88fdTed Kremenekclass B {
193064ef9e604d19a0cfd0d8e3ed3055bfd83f88fdTed Kremenek  void doB();
203064ef9e604d19a0cfd0d8e3ed3055bfd83f88fdTed Kremenek};
213064ef9e604d19a0cfd0d8e3ed3055bfd83f88fdTed Kremenek
223064ef9e604d19a0cfd0d8e3ed3055bfd83f88fdTed Kremenekclass C : public A, private B {
233064ef9e604d19a0cfd0d8e3ed3055bfd83f88fdTed Kremenek  void doC();
243064ef9e604d19a0cfd0d8e3ed3055bfd83f88fdTed Kremenek};
253064ef9e604d19a0cfd0d8e3ed3055bfd83f88fdTed Kremenek
263064ef9e604d19a0cfd0d8e3ed3055bfd83f88fdTed Kremenekclass D : virtual public C, virtual private A {};
273064ef9e604d19a0cfd0d8e3ed3055bfd83f88fdTed Kremenek
28948022908d0c16acc3411fdec15aeb1790ffaa86Douglas Gregornamespace std {
29948022908d0c16acc3411fdec15aeb1790ffaa86Douglas Gregor  class type_info { };
30948022908d0c16acc3411fdec15aeb1790ffaa86Douglas Gregor}
31948022908d0c16acc3411fdec15aeb1790ffaa86Douglas Gregor
32948022908d0c16acc3411fdec15aeb1790ffaa86Douglas Gregorvoid test_exprs(C *c) {
33948022908d0c16acc3411fdec15aeb1790ffaa86Douglas Gregor  int typeid_marker;
34948022908d0c16acc3411fdec15aeb1790ffaa86Douglas Gregor  typeid(C);
35948022908d0c16acc3411fdec15aeb1790ffaa86Douglas Gregor  typeid(c);
366f7198f6380581645f416dd48a0079f83d89e884Douglas Gregor  typedef int Integer;
376f7198f6380581645f416dd48a0079f83d89e884Douglas Gregor  Integer *int_ptr;
386f7198f6380581645f416dd48a0079f83d89e884Douglas Gregor  int_ptr->Integer::~Integer();
39948022908d0c16acc3411fdec15aeb1790ffaa86Douglas Gregor}
40948022908d0c16acc3411fdec15aeb1790ffaa86Douglas Gregor
418ab670ee2b8147da63d1f282d928e754e4e97408Douglas Gregornamespace N {
428ab670ee2b8147da63d1f282d928e754e4e97408Douglas Gregor  int f(int);
438ab670ee2b8147da63d1f282d928e754e4e97408Douglas Gregor  float f(float);
441f7b590d120758d0c969a8153c38d2446935d4aaDouglas Gregor
451f7b590d120758d0c969a8153c38d2446935d4aaDouglas Gregor  template<typename T> T g(T);
461f7b590d120758d0c969a8153c38d2446935d4aaDouglas Gregor  template<typename T> T g(T*);
478ab670ee2b8147da63d1f282d928e754e4e97408Douglas Gregor}
488ab670ee2b8147da63d1f282d928e754e4e97408Douglas Gregor
498ab670ee2b8147da63d1f282d928e754e4e97408Douglas Gregortemplate<typename T>
508ab670ee2b8147da63d1f282d928e754e4e97408Douglas Gregorvoid test_dependent_exprs(T t) {
518ab670ee2b8147da63d1f282d928e754e4e97408Douglas Gregor  N::f(t);
521f7b590d120758d0c969a8153c38d2446935d4aaDouglas Gregor  typedef T type;
531f7b590d120758d0c969a8153c38d2446935d4aaDouglas Gregor  N::g<type>(t);
548ab670ee2b8147da63d1f282d928e754e4e97408Douglas Gregor}
558ab670ee2b8147da63d1f282d928e754e4e97408Douglas Gregor
56263b47b6272bfd3ea1c0e61b7ac404e7b2e0f759Douglas Gregor// RUN: c-index-test -test-load-source all %s | FileCheck %s
579a700d277c38d9afaa7cb3fe93a714bfe9b62eecTed Kremenek// CHECK: load-stmts.cpp:1:13: TypedefDecl=T:1:13 (Definition) Extent=[1:13 - 1:14]
589a700d277c38d9afaa7cb3fe93a714bfe9b62eecTed Kremenek// CHECK: load-stmts.cpp:2:8: StructDecl=X:2:8 (Definition) Extent=[2:1 - 2:23]
599a700d277c38d9afaa7cb3fe93a714bfe9b62eecTed Kremenek// CHECK: load-stmts.cpp:2:16: FieldDecl=a:2:16 (Definition) Extent=[2:16 - 2:17]
609a700d277c38d9afaa7cb3fe93a714bfe9b62eecTed Kremenek// CHECK: load-stmts.cpp:2:19: FieldDecl=b:2:19 (Definition) Extent=[2:19 - 2:20]
619a700d277c38d9afaa7cb3fe93a714bfe9b62eecTed Kremenek// CHECK: load-stmts.cpp:3:6: FunctionDecl=f:3:6 (Definition) Extent=[3:6 - 11:2]
629a700d277c38d9afaa7cb3fe93a714bfe9b62eecTed Kremenek// CHECK: load-stmts.cpp:3:12: ParmDecl=x:3:12 (Definition) Extent=[3:8 - 3:13]
639a700d277c38d9afaa7cb3fe93a714bfe9b62eecTed Kremenek// CHECK: <invalid loc>:0:0: UnexposedStmt= Extent=[3:15 - 11:2]
649a700d277c38d9afaa7cb3fe93a714bfe9b62eecTed Kremenek// CHECK: <invalid loc>:0:0: UnexposedStmt= Extent=[4:3 - 5:4]
659a700d277c38d9afaa7cb3fe93a714bfe9b62eecTed Kremenek// CHECK: <invalid loc>:0:0: UnexposedStmt= Extent=[4:8 - 4:16]
668f0bf81c0f3ab31881cc7db7914e6978bb2a19afDaniel Dunbar// CHECK: load-stmts.cpp:4:10: VarDecl=y:4:10 (Definition) Extent=[4:8 - 4:15]
678f0bf81c0f3ab31881cc7db7914e6978bb2a19afDaniel Dunbar// CHECK: load-stmts.cpp:4:8: TypeRef=T:1:13 Extent=[4:8 - 4:9]
688f0bf81c0f3ab31881cc7db7914e6978bb2a19afDaniel Dunbar// CHECK: load-stmts.cpp:4:14: DeclRefExpr=x:3:12 Extent=[4:14 - 4:15]
698f0bf81c0f3ab31881cc7db7914e6978bb2a19afDaniel Dunbar// CHECK: load-stmts.cpp:4:19: VarDecl=z:4:19 (Definition) Extent=[4:17 - 4:24]
708f0bf81c0f3ab31881cc7db7914e6978bb2a19afDaniel Dunbar// CHECK: load-stmts.cpp:4:17: TypeRef=T:1:13 Extent=[4:17 - 4:18]
718f0bf81c0f3ab31881cc7db7914e6978bb2a19afDaniel Dunbar// CHECK: load-stmts.cpp:4:23: DeclRefExpr=x:3:12 Extent=[4:23 - 4:24]
728f0bf81c0f3ab31881cc7db7914e6978bb2a19afDaniel Dunbar// CHECK: load-stmts.cpp:4:19: UnexposedExpr=z:4:19 Extent=[4:19 - 4:20]
738f0bf81c0f3ab31881cc7db7914e6978bb2a19afDaniel Dunbar// CHECK: load-stmts.cpp:4:19: DeclRefExpr=z:4:19 Extent=[4:19 - 4:20]
748f0bf81c0f3ab31881cc7db7914e6978bb2a19afDaniel Dunbar// CHECK: load-stmts.cpp:4:26: UnexposedExpr= Extent=[4:26 - 4:29]
758f0bf81c0f3ab31881cc7db7914e6978bb2a19afDaniel Dunbar// CHECK: load-stmts.cpp:4:28: DeclRefExpr=x:3:12 Extent=[4:28 - 4:29]
769a700d277c38d9afaa7cb3fe93a714bfe9b62eecTed Kremenek// CHECK: <invalid loc>:0:0: UnexposedStmt= Extent=[4:31 - 5:4]
779a700d277c38d9afaa7cb3fe93a714bfe9b62eecTed Kremenek// CHECK: <invalid loc>:0:0: UnexposedStmt= Extent=[6:3 - 6:22]
788f0bf81c0f3ab31881cc7db7914e6978bb2a19afDaniel Dunbar// CHECK: load-stmts.cpp:6:10: VarDecl=z2:6:10 (Definition) Extent=[6:7 - 6:17]
798f0bf81c0f3ab31881cc7db7914e6978bb2a19afDaniel Dunbar// CHECK: load-stmts.cpp:6:7: TypeRef=T:1:13 Extent=[6:7 - 6:8]
808f0bf81c0f3ab31881cc7db7914e6978bb2a19afDaniel Dunbar// CHECK: load-stmts.cpp:6:15: UnexposedExpr= Extent=[6:15 - 6:17]
818f0bf81c0f3ab31881cc7db7914e6978bb2a19afDaniel Dunbar// CHECK: load-stmts.cpp:6:16: DeclRefExpr=x:3:12 Extent=[6:16 - 6:17]
828f0bf81c0f3ab31881cc7db7914e6978bb2a19afDaniel Dunbar// CHECK: load-stmts.cpp:6:10: UnexposedExpr=z2:6:10 Extent=[6:10 - 6:12]
838f0bf81c0f3ab31881cc7db7914e6978bb2a19afDaniel Dunbar// CHECK: load-stmts.cpp:6:10: DeclRefExpr=z2:6:10 Extent=[6:10 - 6:12]
849a700d277c38d9afaa7cb3fe93a714bfe9b62eecTed Kremenek// CHECK: <invalid loc>:0:0: UnexposedStmt= Extent=[6:19 - 6:22]
859a700d277c38d9afaa7cb3fe93a714bfe9b62eecTed Kremenek// CHECK: <invalid loc>:0:0: UnexposedStmt= Extent=[7:3 - 7:25]
868f0bf81c0f3ab31881cc7db7914e6978bb2a19afDaniel Dunbar// CHECK: load-stmts.cpp:7:13: VarDecl=z3:7:13 (Definition) Extent=[7:10 - 7:20]
878f0bf81c0f3ab31881cc7db7914e6978bb2a19afDaniel Dunbar// CHECK: load-stmts.cpp:7:10: TypeRef=T:1:13 Extent=[7:10 - 7:11]
888f0bf81c0f3ab31881cc7db7914e6978bb2a19afDaniel Dunbar// CHECK: load-stmts.cpp:7:18: UnexposedExpr= Extent=[7:18 - 7:20]
898f0bf81c0f3ab31881cc7db7914e6978bb2a19afDaniel Dunbar// CHECK: load-stmts.cpp:7:19: DeclRefExpr=x:3:12 Extent=[7:19 - 7:20]
908f0bf81c0f3ab31881cc7db7914e6978bb2a19afDaniel Dunbar// CHECK: load-stmts.cpp:7:13: UnexposedExpr=z3:7:13 Extent=[7:13 - 7:15]
918f0bf81c0f3ab31881cc7db7914e6978bb2a19afDaniel Dunbar// CHECK: load-stmts.cpp:7:13: DeclRefExpr=z3:7:13 Extent=[7:13 - 7:15]
929a700d277c38d9afaa7cb3fe93a714bfe9b62eecTed Kremenek// CHECK: <invalid loc>:0:0: UnexposedStmt= Extent=[7:22 - 7:25]
939a700d277c38d9afaa7cb3fe93a714bfe9b62eecTed Kremenek// CHECK: <invalid loc>:0:0: UnexposedStmt= Extent=[8:3 - 10:4]
948f0bf81c0f3ab31881cc7db7914e6978bb2a19afDaniel Dunbar// CHECK: load-stmts.cpp:8:13: VarDecl=z4:8:13 (Definition) Extent=[8:11 - 8:19]
958f0bf81c0f3ab31881cc7db7914e6978bb2a19afDaniel Dunbar// CHECK: load-stmts.cpp:8:11: TypeRef=T:1:13 Extent=[8:11 - 8:12]
968f0bf81c0f3ab31881cc7db7914e6978bb2a19afDaniel Dunbar// CHECK: load-stmts.cpp:8:18: DeclRefExpr=x:3:12 Extent=[8:18 - 8:19]
978f0bf81c0f3ab31881cc7db7914e6978bb2a19afDaniel Dunbar// CHECK: load-stmts.cpp:8:13: DeclRefExpr=z4:8:13 Extent=[8:13 - 8:15]
989a700d277c38d9afaa7cb3fe93a714bfe9b62eecTed Kremenek// CHECK: <invalid loc>:0:0: UnexposedStmt= Extent=[8:21 - 10:4]
999a700d277c38d9afaa7cb3fe93a714bfe9b62eecTed Kremenek// CHECK: <invalid loc>:0:0: UnexposedStmt= Extent=[9:3 - 9:17]
1008f0bf81c0f3ab31881cc7db7914e6978bb2a19afDaniel Dunbar// CHECK: load-stmts.cpp:9:8: UnexposedExpr= Extent=[9:8 - 9:10]
1010f91f6a2eacf29fb69b1b0c3131eb0385aad5777Ted Kremenek// CHECK: <invalid loc>:0:0: UnexposedStmt= Extent=[9:12 - 9:17]
1023064ef9e604d19a0cfd0d8e3ed3055bfd83f88fdTed Kremenek// CHECK: load-stmts.cpp:14:7: ClassDecl=A:14:7 (Definition) Extent=[14:1 - 16:2]
1033064ef9e604d19a0cfd0d8e3ed3055bfd83f88fdTed Kremenek// CHECK: load-stmts.cpp:15:8: CXXMethod=doA:15:8 Extent=[15:8 - 15:13]
1043064ef9e604d19a0cfd0d8e3ed3055bfd83f88fdTed Kremenek// CHECK: load-stmts.cpp:18:7: ClassDecl=B:18:7 (Definition) Extent=[18:1 - 20:2]
1053064ef9e604d19a0cfd0d8e3ed3055bfd83f88fdTed Kremenek// CHECK: load-stmts.cpp:19:8: CXXMethod=doB:19:8 Extent=[19:8 - 19:13]
1063064ef9e604d19a0cfd0d8e3ed3055bfd83f88fdTed Kremenek// CHECK: load-stmts.cpp:22:7: ClassDecl=C:22:7 (Definition) Extent=[22:1 - 24:2]
1073064ef9e604d19a0cfd0d8e3ed3055bfd83f88fdTed Kremenek// CHECK: <invalid loc>:0:0: C++ base class specifier=class A:14:7 [access=public isVirtual=false]
1083064ef9e604d19a0cfd0d8e3ed3055bfd83f88fdTed Kremenek// CHECK: <invalid loc>:0:0: C++ base class specifier=class B:18:7 [access=private isVirtual=false]
1093064ef9e604d19a0cfd0d8e3ed3055bfd83f88fdTed Kremenek// CHECK: load-stmts.cpp:23:8: CXXMethod=doC:23:8 Extent=[23:8 - 23:13]
1103064ef9e604d19a0cfd0d8e3ed3055bfd83f88fdTed Kremenek// CHECK: load-stmts.cpp:26:7: ClassDecl=D:26:7 (Definition) Extent=[26:1 - 26:49]
1113064ef9e604d19a0cfd0d8e3ed3055bfd83f88fdTed Kremenek// CHECK: <invalid loc>:0:0: C++ base class specifier=class C:22:7 [access=public isVirtual=true]
1123064ef9e604d19a0cfd0d8e3ed3055bfd83f88fdTed Kremenek// CHECK: <invalid loc>:0:0: C++ base class specifier=class A:14:7 [access=private isVirtual=true]
113948022908d0c16acc3411fdec15aeb1790ffaa86Douglas Gregor// CHECK: load-stmts.cpp:33:7: VarDecl=typeid_marker:33:7 (Definition)
114948022908d0c16acc3411fdec15aeb1790ffaa86Douglas Gregor// CHECK: load-stmts.cpp:34:10: TypeRef=class C:22:7 Extent=[34:10 - 34:11]
115948022908d0c16acc3411fdec15aeb1790ffaa86Douglas Gregor// CHECK: load-stmts.cpp:35:10: DeclRefExpr=c:32:20 Extent=[35:10 - 35:11]
1166f7198f6380581645f416dd48a0079f83d89e884Douglas Gregor// CHECK: load-stmts.cpp:37:12: VarDecl=int_ptr:37:12 (Definition) Extent=[37:3 - 37:19]
1176f7198f6380581645f416dd48a0079f83d89e884Douglas Gregor// CHECK: load-stmts.cpp:37:3: TypeRef=Integer:36:15 Extent=[37:3 - 37:10]
1186f7198f6380581645f416dd48a0079f83d89e884Douglas Gregor// CHECK: load-stmts.cpp:38:3: DeclRefExpr=int_ptr:37:12 Extent=[38:3 - 38:10]
1196f7198f6380581645f416dd48a0079f83d89e884Douglas Gregor// CHECK: load-stmts.cpp:38:12: TypeRef=Integer:36:15 Extent=[38:12 - 38:19]
1206f7198f6380581645f416dd48a0079f83d89e884Douglas Gregor// CHECK: load-stmts.cpp:38:22: TypeRef=Integer:36:15 Extent=[38:22 - 38:29]
1211f7b590d120758d0c969a8153c38d2446935d4aaDouglas Gregor// CHECK: load-stmts.cpp:50:6: FunctionTemplate=test_dependent_exprs:50:6 (Definition)
1221f7b590d120758d0c969a8153c38d2446935d4aaDouglas Gregor// CHECK: load-stmts.cpp:51:3: CallExpr= Extent=[51:3 - 51:10]
1231f7b590d120758d0c969a8153c38d2446935d4aaDouglas Gregor// CHECK: load-stmts.cpp:51:3: NamespaceRef=N:41:11 Extent=[51:3 - 51:4]
1241f7b590d120758d0c969a8153c38d2446935d4aaDouglas Gregor// CHECK: load-stmts.cpp:51:8: DeclRefExpr=t:50:29 Extent=[51:8 - 51:9]
1251f7b590d120758d0c969a8153c38d2446935d4aaDouglas Gregor// CHECK: load-stmts.cpp:52:13: TypedefDecl=type:52:13 (Definition) Extent=[52:13 - 52:17]
1261f7b590d120758d0c969a8153c38d2446935d4aaDouglas Gregor// CHECK: load-stmts.cpp:53:3: CallExpr= Extent=[53:3 - 53:16]
1271f7b590d120758d0c969a8153c38d2446935d4aaDouglas Gregor// CHECK: load-stmts.cpp:53:3: NamespaceRef=N:41:11 Extent=[53:3 - 53:4]
1281f7b590d120758d0c969a8153c38d2446935d4aaDouglas Gregor// CHECK: load-stmts.cpp:53:8: TypeRef=type:52:13 Extent=[53:8 - 53:12]
1291f7b590d120758d0c969a8153c38d2446935d4aaDouglas Gregor// CHECK: load-stmts.cpp:53:14: DeclRefExpr=t:50:29 Extent=[53:14 - 53:15]
130