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