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