115417cfaSDouglas Gregor // Test is line- and column-sensitive. Run lines are below.
215417cfaSDouglas Gregor 
315417cfaSDouglas Gregor struct X {
415417cfaSDouglas Gregor   X();
515417cfaSDouglas Gregor   X(int);
615417cfaSDouglas Gregor   X(int, int);
715417cfaSDouglas Gregor   X(const X&);
815417cfaSDouglas Gregor };
915417cfaSDouglas Gregor 
1015417cfaSDouglas Gregor X getX(int value) {
1115417cfaSDouglas Gregor   switch (value) {
1215417cfaSDouglas Gregor   case 1: return X(value);
1315417cfaSDouglas Gregor   case 2: return X(value, value);
1415417cfaSDouglas Gregor   case 3: return (X)value;
1515417cfaSDouglas Gregor   default: break;
1615417cfaSDouglas Gregor   }
1715417cfaSDouglas Gregor   return X();
1815417cfaSDouglas Gregor }
1915417cfaSDouglas Gregor 
2030313cbbSDouglas Gregor struct Y {
2130313cbbSDouglas Gregor   int member;
2230313cbbSDouglas Gregor 
2330313cbbSDouglas Gregor   X getX();
2430313cbbSDouglas Gregor };
2530313cbbSDouglas Gregor 
2630313cbbSDouglas Gregor X Y::getX() {
2730313cbbSDouglas Gregor   return member;
2830313cbbSDouglas Gregor }
2930313cbbSDouglas Gregor 
3030313cbbSDouglas Gregor struct YDerived : Y {
3130313cbbSDouglas Gregor   X getAnotherX() { return member; }
3230313cbbSDouglas Gregor };
3330313cbbSDouglas Gregor 
34d289104eSArgyrios Kyrtzidis void test() {
35d289104eSArgyrios Kyrtzidis   X foo;
360fd8fae0SArgyrios Kyrtzidis 
370fd8fae0SArgyrios Kyrtzidis   try {
380fd8fae0SArgyrios Kyrtzidis   } catch (X e) {
390fd8fae0SArgyrios Kyrtzidis     X x;
400fd8fae0SArgyrios Kyrtzidis   }
41*fbb2bb5aSArgyrios Kyrtzidis 
42*fbb2bb5aSArgyrios Kyrtzidis   struct LocalS {
43*fbb2bb5aSArgyrios Kyrtzidis     void meth() {
44*fbb2bb5aSArgyrios Kyrtzidis       int x;
45*fbb2bb5aSArgyrios Kyrtzidis       ++x;
46*fbb2bb5aSArgyrios Kyrtzidis     }
47*fbb2bb5aSArgyrios Kyrtzidis   };
48d289104eSArgyrios Kyrtzidis }
49d289104eSArgyrios Kyrtzidis 
503f35bb2dSDouglas Gregor // RUN: c-index-test -cursor-at=%s:6:4 %s | FileCheck -check-prefix=CHECK-COMPLETION-1 %s
513f35bb2dSDouglas Gregor // CHECK-COMPLETION-1: CXXConstructor=X:6:3
523f35bb2dSDouglas Gregor // CHECK-COMPLETION-1-NEXT: Completion string: {TypedText X}{LeftParen (}{Placeholder int}{Comma , }{Placeholder int}{RightParen )}
533f35bb2dSDouglas Gregor 
543f35bb2dSDouglas Gregor // RUN: c-index-test -cursor-at=%s:31:16 %s | FileCheck -check-prefix=CHECK-COMPLETION-2 %s
553f35bb2dSDouglas Gregor // CHECK-COMPLETION-2: CXXMethod=getAnotherX:31:5 (Definition)
563f35bb2dSDouglas Gregor // CHECK-COMPLETION-2-NEXT: Completion string: {ResultType X}{TypedText getAnotherX}{LeftParen (}{RightParen )}
573f35bb2dSDouglas Gregor 
5815417cfaSDouglas Gregor // RUN: c-index-test -cursor-at=%s:12:20 %s | FileCheck -check-prefix=CHECK-VALUE-REF %s
5915417cfaSDouglas Gregor // RUN: c-index-test -cursor-at=%s:13:21 %s | FileCheck -check-prefix=CHECK-VALUE-REF %s
6015417cfaSDouglas Gregor // RUN: c-index-test -cursor-at=%s:13:28 %s | FileCheck -check-prefix=CHECK-VALUE-REF %s
6115417cfaSDouglas Gregor // RUN: c-index-test -cursor-at=%s:14:23 %s | FileCheck -check-prefix=CHECK-VALUE-REF %s
6215417cfaSDouglas Gregor // CHECK-VALUE-REF: DeclRefExpr=value:10:12
6315417cfaSDouglas Gregor 
6416443fddSDouglas Gregor // RUN: c-index-test -cursor-at=%s:12:18 %s | FileCheck -check-prefix=CHECK-CONSTRUCTOR1 %s
6516443fddSDouglas Gregor // RUN: c-index-test -cursor-at=%s:13:18 %s | FileCheck -check-prefix=CHECK-CONSTRUCTOR2 %s
6616443fddSDouglas Gregor // RUN: c-index-test -cursor-at=%s:14:19 %s | FileCheck -check-prefix=CHECK-CONSTRUCTOR1 %s
6716443fddSDouglas Gregor // RUN: c-index-test -cursor-at=%s:17:10 %s | FileCheck -check-prefix=CHECK-CONSTRUCTOR3 %s
6815417cfaSDouglas Gregor // CHECK-TYPE-REF: TypeRef=struct X:3:8
6916443fddSDouglas Gregor // CHECK-CONSTRUCTOR1: CallExpr=X:5:3
7016443fddSDouglas Gregor // CHECK-CONSTRUCTOR2: CallExpr=X:6:3
7116443fddSDouglas Gregor // CHECK-CONSTRUCTOR3: CallExpr=X:4:3
7230313cbbSDouglas Gregor 
7330313cbbSDouglas Gregor // RUN: c-index-test -cursor-at=%s:23:3 %s | FileCheck -check-prefix=CHECK-RETTYPE %s
7430313cbbSDouglas Gregor // RUN: c-index-test -cursor-at=%s:26:1 %s | FileCheck -check-prefix=CHECK-RETTYPE %s
7530313cbbSDouglas Gregor // CHECK-RETTYPE: TypeRef=struct X:3:8
7630313cbbSDouglas Gregor 
7730313cbbSDouglas Gregor // RUN: c-index-test -cursor-at=%s:23:7 %s | FileCheck -check-prefix=CHECK-MEMFUNC-DECL %s
7830313cbbSDouglas Gregor // CHECK-MEMFUNC-DECL: CXXMethod=getX:23:5
7930313cbbSDouglas Gregor // RUN: c-index-test -cursor-at=%s:26:7 %s | FileCheck -check-prefix=CHECK-MEMFUNC-DEF %s
8030313cbbSDouglas Gregor // CHECK-MEMFUNC-DEF: CXXMethod=getX:26:6
8130313cbbSDouglas Gregor 
8230313cbbSDouglas Gregor // RUN: c-index-test -cursor-at=%s:26:3 %s | FileCheck -check-prefix=CHECK-TYPEREF-Y %s
8330313cbbSDouglas Gregor // CHECK-TYPEREF-Y: TypeRef=struct Y:20:8
8430313cbbSDouglas Gregor 
8530313cbbSDouglas Gregor // RUN: c-index-test -cursor-at=%s:27:10 %s | FileCheck -check-prefix=CHECK-IMPLICIT-MEMREF %s
8630313cbbSDouglas Gregor // RUN: c-index-test -cursor-at=%s:31:28 %s | FileCheck -check-prefix=CHECK-IMPLICIT-MEMREF %s
8730313cbbSDouglas Gregor // CHECK-IMPLICIT-MEMREF: MemberRefExpr=member:21:7
88d289104eSArgyrios Kyrtzidis 
89d289104eSArgyrios Kyrtzidis // RUN: c-index-test -cursor-at=%s:35:5 %s | FileCheck -check-prefix=CHECK-DECL %s
90d289104eSArgyrios Kyrtzidis // CHECK-DECL: VarDecl=foo:35:5
913f35bb2dSDouglas Gregor 
923f35bb2dSDouglas Gregor // RUN: c-index-test -cursor-at=%s:21:3 %s | FileCheck -check-prefix=CHECK-MEMBER %s
933f35bb2dSDouglas Gregor // CHECK-MEMBER: FieldDecl=member:21:7 (Definition)
943f35bb2dSDouglas Gregor // CHECK-MEMBER-NEXT: Completion string: {ResultType int}{TypedText member}
950fd8fae0SArgyrios Kyrtzidis 
960fd8fae0SArgyrios Kyrtzidis // RUN: c-index-test -cursor-at=%s:38:12 -cursor-at=%s:39:5 %s | FileCheck -check-prefix=CHECK-CXXCATCH %s
970fd8fae0SArgyrios Kyrtzidis // CHECK-CXXCATCH: TypeRef=struct X:3:8
980fd8fae0SArgyrios Kyrtzidis // CHECK-CXXCATCH-NEXT: TypeRef=struct X:3:8
990042b6f9SArgyrios Kyrtzidis 
1000042b6f9SArgyrios Kyrtzidis // RUN: c-index-test -test-load-source-usrs local %s | FileCheck -check-prefix=CHECK-USR %s
1010042b6f9SArgyrios Kyrtzidis // CHECK-USR: get-cursor.cpp c:get-cursor.cpp@472@F@test#@e Extent=[38:12 - 38:15]
1020042b6f9SArgyrios Kyrtzidis // CHECK-USR: get-cursor.cpp c:get-cursor.cpp@483@F@test#@x Extent=[39:5 - 39:8]
103*fbb2bb5aSArgyrios Kyrtzidis 
104*fbb2bb5aSArgyrios Kyrtzidis // RUN: c-index-test -cursor-at=%s:45:9 %s | FileCheck -check-prefix=CHECK-LOCALCLASS %s
105*fbb2bb5aSArgyrios Kyrtzidis // CHECK-LOCALCLASS: 45:9 DeclRefExpr=x:44:11 Extent=[45:9 - 45:10] Spelling=x ([45:9 - 45:10])
106