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; 36d289104eSArgyrios Kyrtzidis } 37d289104eSArgyrios Kyrtzidis 38*3f35bb2dSDouglas Gregor // RUN: c-index-test -cursor-at=%s:6:4 %s | FileCheck -check-prefix=CHECK-COMPLETION-1 %s 39*3f35bb2dSDouglas Gregor // CHECK-COMPLETION-1: CXXConstructor=X:6:3 40*3f35bb2dSDouglas Gregor // CHECK-COMPLETION-1-NEXT: Completion string: {TypedText X}{LeftParen (}{Placeholder int}{Comma , }{Placeholder int}{RightParen )} 41*3f35bb2dSDouglas Gregor 42*3f35bb2dSDouglas Gregor // RUN: c-index-test -cursor-at=%s:31:16 %s | FileCheck -check-prefix=CHECK-COMPLETION-2 %s 43*3f35bb2dSDouglas Gregor // CHECK-COMPLETION-2: CXXMethod=getAnotherX:31:5 (Definition) 44*3f35bb2dSDouglas Gregor // CHECK-COMPLETION-2-NEXT: Completion string: {ResultType X}{TypedText getAnotherX}{LeftParen (}{RightParen )} 45*3f35bb2dSDouglas Gregor 4615417cfaSDouglas Gregor // RUN: c-index-test -cursor-at=%s:12:20 %s | FileCheck -check-prefix=CHECK-VALUE-REF %s 4715417cfaSDouglas Gregor // RUN: c-index-test -cursor-at=%s:13:21 %s | FileCheck -check-prefix=CHECK-VALUE-REF %s 4815417cfaSDouglas Gregor // RUN: c-index-test -cursor-at=%s:13:28 %s | FileCheck -check-prefix=CHECK-VALUE-REF %s 4915417cfaSDouglas Gregor // RUN: c-index-test -cursor-at=%s:14:23 %s | FileCheck -check-prefix=CHECK-VALUE-REF %s 5015417cfaSDouglas Gregor // CHECK-VALUE-REF: DeclRefExpr=value:10:12 5115417cfaSDouglas Gregor 5216443fddSDouglas Gregor // RUN: c-index-test -cursor-at=%s:12:18 %s | FileCheck -check-prefix=CHECK-CONSTRUCTOR1 %s 5316443fddSDouglas Gregor // RUN: c-index-test -cursor-at=%s:13:18 %s | FileCheck -check-prefix=CHECK-CONSTRUCTOR2 %s 5416443fddSDouglas Gregor // RUN: c-index-test -cursor-at=%s:14:19 %s | FileCheck -check-prefix=CHECK-CONSTRUCTOR1 %s 5516443fddSDouglas Gregor // RUN: c-index-test -cursor-at=%s:17:10 %s | FileCheck -check-prefix=CHECK-CONSTRUCTOR3 %s 5615417cfaSDouglas Gregor // CHECK-TYPE-REF: TypeRef=struct X:3:8 5716443fddSDouglas Gregor // CHECK-CONSTRUCTOR1: CallExpr=X:5:3 5816443fddSDouglas Gregor // CHECK-CONSTRUCTOR2: CallExpr=X:6:3 5916443fddSDouglas Gregor // CHECK-CONSTRUCTOR3: CallExpr=X:4:3 6030313cbbSDouglas Gregor 6130313cbbSDouglas Gregor // RUN: c-index-test -cursor-at=%s:23:3 %s | FileCheck -check-prefix=CHECK-RETTYPE %s 6230313cbbSDouglas Gregor // RUN: c-index-test -cursor-at=%s:26:1 %s | FileCheck -check-prefix=CHECK-RETTYPE %s 6330313cbbSDouglas Gregor // CHECK-RETTYPE: TypeRef=struct X:3:8 6430313cbbSDouglas Gregor 6530313cbbSDouglas Gregor // RUN: c-index-test -cursor-at=%s:23:7 %s | FileCheck -check-prefix=CHECK-MEMFUNC-DECL %s 6630313cbbSDouglas Gregor // CHECK-MEMFUNC-DECL: CXXMethod=getX:23:5 6730313cbbSDouglas Gregor // RUN: c-index-test -cursor-at=%s:26:7 %s | FileCheck -check-prefix=CHECK-MEMFUNC-DEF %s 6830313cbbSDouglas Gregor // CHECK-MEMFUNC-DEF: CXXMethod=getX:26:6 6930313cbbSDouglas Gregor 7030313cbbSDouglas Gregor // RUN: c-index-test -cursor-at=%s:26:3 %s | FileCheck -check-prefix=CHECK-TYPEREF-Y %s 7130313cbbSDouglas Gregor // CHECK-TYPEREF-Y: TypeRef=struct Y:20:8 7230313cbbSDouglas Gregor 7330313cbbSDouglas Gregor // RUN: c-index-test -cursor-at=%s:27:10 %s | FileCheck -check-prefix=CHECK-IMPLICIT-MEMREF %s 7430313cbbSDouglas Gregor // RUN: c-index-test -cursor-at=%s:31:28 %s | FileCheck -check-prefix=CHECK-IMPLICIT-MEMREF %s 7530313cbbSDouglas Gregor // CHECK-IMPLICIT-MEMREF: MemberRefExpr=member:21:7 76d289104eSArgyrios Kyrtzidis 77d289104eSArgyrios Kyrtzidis // RUN: c-index-test -cursor-at=%s:35:5 %s | FileCheck -check-prefix=CHECK-DECL %s 78d289104eSArgyrios Kyrtzidis // CHECK-DECL: VarDecl=foo:35:5 79*3f35bb2dSDouglas Gregor 80*3f35bb2dSDouglas Gregor // RUN: c-index-test -cursor-at=%s:21:3 %s | FileCheck -check-prefix=CHECK-MEMBER %s 81*3f35bb2dSDouglas Gregor // CHECK-MEMBER: FieldDecl=member:21:7 (Definition) 82*3f35bb2dSDouglas Gregor // CHECK-MEMBER-NEXT: Completion string: {ResultType int}{TypedText member} 83