140749ee585abc84fbb3c8fdbd8aaac062f153062Douglas Gregor// Test is line- and column-sensitive. Run lines are below. 240749ee585abc84fbb3c8fdbd8aaac062f153062Douglas Gregor 340749ee585abc84fbb3c8fdbd8aaac062f153062Douglas Gregorstruct X { 440749ee585abc84fbb3c8fdbd8aaac062f153062Douglas Gregor X(); 540749ee585abc84fbb3c8fdbd8aaac062f153062Douglas Gregor X(int); 640749ee585abc84fbb3c8fdbd8aaac062f153062Douglas Gregor X(int, int); 740749ee585abc84fbb3c8fdbd8aaac062f153062Douglas Gregor X(const X&); 840749ee585abc84fbb3c8fdbd8aaac062f153062Douglas Gregor}; 940749ee585abc84fbb3c8fdbd8aaac062f153062Douglas Gregor 1040749ee585abc84fbb3c8fdbd8aaac062f153062Douglas GregorX getX(int value) { 1140749ee585abc84fbb3c8fdbd8aaac062f153062Douglas Gregor switch (value) { 1240749ee585abc84fbb3c8fdbd8aaac062f153062Douglas Gregor case 1: return X(value); 1340749ee585abc84fbb3c8fdbd8aaac062f153062Douglas Gregor case 2: return X(value, value); 1440749ee585abc84fbb3c8fdbd8aaac062f153062Douglas Gregor case 3: return (X)value; 1540749ee585abc84fbb3c8fdbd8aaac062f153062Douglas Gregor default: break; 1640749ee585abc84fbb3c8fdbd8aaac062f153062Douglas Gregor } 1740749ee585abc84fbb3c8fdbd8aaac062f153062Douglas Gregor return X(); 1840749ee585abc84fbb3c8fdbd8aaac062f153062Douglas Gregor} 1940749ee585abc84fbb3c8fdbd8aaac062f153062Douglas Gregor 2089629a746019a42797495b091711a1d68467e88aDouglas Gregorstruct Y { 2189629a746019a42797495b091711a1d68467e88aDouglas Gregor int member; 2289629a746019a42797495b091711a1d68467e88aDouglas Gregor 2389629a746019a42797495b091711a1d68467e88aDouglas Gregor X getX(); 2489629a746019a42797495b091711a1d68467e88aDouglas Gregor}; 2589629a746019a42797495b091711a1d68467e88aDouglas Gregor 2689629a746019a42797495b091711a1d68467e88aDouglas GregorX Y::getX() { 2789629a746019a42797495b091711a1d68467e88aDouglas Gregor return member; 2889629a746019a42797495b091711a1d68467e88aDouglas Gregor} 2989629a746019a42797495b091711a1d68467e88aDouglas Gregor 3089629a746019a42797495b091711a1d68467e88aDouglas Gregorstruct YDerived : Y { 3189629a746019a42797495b091711a1d68467e88aDouglas Gregor X getAnotherX() { return member; } 3289629a746019a42797495b091711a1d68467e88aDouglas Gregor}; 3389629a746019a42797495b091711a1d68467e88aDouglas Gregor 34064c44b8a17d4c426b87ad1c58de81d76a13fca3Argyrios Kyrtzidisvoid test() { 35064c44b8a17d4c426b87ad1c58de81d76a13fca3Argyrios Kyrtzidis X foo; 36dcbb2fb8710459fdc8073b76a4ef73fbbcbeac9fArgyrios Kyrtzidis 37dcbb2fb8710459fdc8073b76a4ef73fbbcbeac9fArgyrios Kyrtzidis try { 38dcbb2fb8710459fdc8073b76a4ef73fbbcbeac9fArgyrios Kyrtzidis } catch (X e) { 39dcbb2fb8710459fdc8073b76a4ef73fbbcbeac9fArgyrios Kyrtzidis X x; 40dcbb2fb8710459fdc8073b76a4ef73fbbcbeac9fArgyrios Kyrtzidis } 415641b0d02563840c51c33b93dc663c55306093f3Argyrios Kyrtzidis 425641b0d02563840c51c33b93dc663c55306093f3Argyrios Kyrtzidis struct LocalS { 435641b0d02563840c51c33b93dc663c55306093f3Argyrios Kyrtzidis void meth() { 445641b0d02563840c51c33b93dc663c55306093f3Argyrios Kyrtzidis int x; 455641b0d02563840c51c33b93dc663c55306093f3Argyrios Kyrtzidis ++x; 465641b0d02563840c51c33b93dc663c55306093f3Argyrios Kyrtzidis } 475641b0d02563840c51c33b93dc663c55306093f3Argyrios Kyrtzidis }; 48064c44b8a17d4c426b87ad1c58de81d76a13fca3Argyrios Kyrtzidis} 49064c44b8a17d4c426b87ad1c58de81d76a13fca3Argyrios Kyrtzidis 508fa0a80b4482ad94e82c4a19e23de17fd69140b5Douglas Gregor// RUN: c-index-test -cursor-at=%s:6:4 %s | FileCheck -check-prefix=CHECK-COMPLETION-1 %s 518fa0a80b4482ad94e82c4a19e23de17fd69140b5Douglas Gregor// CHECK-COMPLETION-1: CXXConstructor=X:6:3 528fa0a80b4482ad94e82c4a19e23de17fd69140b5Douglas Gregor// CHECK-COMPLETION-1-NEXT: Completion string: {TypedText X}{LeftParen (}{Placeholder int}{Comma , }{Placeholder int}{RightParen )} 538fa0a80b4482ad94e82c4a19e23de17fd69140b5Douglas Gregor 548fa0a80b4482ad94e82c4a19e23de17fd69140b5Douglas Gregor// RUN: c-index-test -cursor-at=%s:31:16 %s | FileCheck -check-prefix=CHECK-COMPLETION-2 %s 558fa0a80b4482ad94e82c4a19e23de17fd69140b5Douglas Gregor// CHECK-COMPLETION-2: CXXMethod=getAnotherX:31:5 (Definition) 568fa0a80b4482ad94e82c4a19e23de17fd69140b5Douglas Gregor// CHECK-COMPLETION-2-NEXT: Completion string: {ResultType X}{TypedText getAnotherX}{LeftParen (}{RightParen )} 578fa0a80b4482ad94e82c4a19e23de17fd69140b5Douglas Gregor 5840749ee585abc84fbb3c8fdbd8aaac062f153062Douglas Gregor// RUN: c-index-test -cursor-at=%s:12:20 %s | FileCheck -check-prefix=CHECK-VALUE-REF %s 5940749ee585abc84fbb3c8fdbd8aaac062f153062Douglas Gregor// RUN: c-index-test -cursor-at=%s:13:21 %s | FileCheck -check-prefix=CHECK-VALUE-REF %s 6040749ee585abc84fbb3c8fdbd8aaac062f153062Douglas Gregor// RUN: c-index-test -cursor-at=%s:13:28 %s | FileCheck -check-prefix=CHECK-VALUE-REF %s 6140749ee585abc84fbb3c8fdbd8aaac062f153062Douglas Gregor// RUN: c-index-test -cursor-at=%s:14:23 %s | FileCheck -check-prefix=CHECK-VALUE-REF %s 6240749ee585abc84fbb3c8fdbd8aaac062f153062Douglas Gregor// CHECK-VALUE-REF: DeclRefExpr=value:10:12 6340749ee585abc84fbb3c8fdbd8aaac062f153062Douglas Gregor 6493798e25d68e2d146cff9bd0355d4b7b1ca765f1Douglas Gregor// RUN: c-index-test -cursor-at=%s:12:18 %s | FileCheck -check-prefix=CHECK-CONSTRUCTOR1 %s 6593798e25d68e2d146cff9bd0355d4b7b1ca765f1Douglas Gregor// RUN: c-index-test -cursor-at=%s:13:18 %s | FileCheck -check-prefix=CHECK-CONSTRUCTOR2 %s 6693798e25d68e2d146cff9bd0355d4b7b1ca765f1Douglas Gregor// RUN: c-index-test -cursor-at=%s:14:19 %s | FileCheck -check-prefix=CHECK-CONSTRUCTOR1 %s 6793798e25d68e2d146cff9bd0355d4b7b1ca765f1Douglas Gregor// RUN: c-index-test -cursor-at=%s:17:10 %s | FileCheck -check-prefix=CHECK-CONSTRUCTOR3 %s 6840749ee585abc84fbb3c8fdbd8aaac062f153062Douglas Gregor// CHECK-TYPE-REF: TypeRef=struct X:3:8 6993798e25d68e2d146cff9bd0355d4b7b1ca765f1Douglas Gregor// CHECK-CONSTRUCTOR1: CallExpr=X:5:3 7093798e25d68e2d146cff9bd0355d4b7b1ca765f1Douglas Gregor// CHECK-CONSTRUCTOR2: CallExpr=X:6:3 7193798e25d68e2d146cff9bd0355d4b7b1ca765f1Douglas Gregor// CHECK-CONSTRUCTOR3: CallExpr=X:4:3 7289629a746019a42797495b091711a1d68467e88aDouglas Gregor 7389629a746019a42797495b091711a1d68467e88aDouglas Gregor// RUN: c-index-test -cursor-at=%s:23:3 %s | FileCheck -check-prefix=CHECK-RETTYPE %s 7489629a746019a42797495b091711a1d68467e88aDouglas Gregor// RUN: c-index-test -cursor-at=%s:26:1 %s | FileCheck -check-prefix=CHECK-RETTYPE %s 7589629a746019a42797495b091711a1d68467e88aDouglas Gregor// CHECK-RETTYPE: TypeRef=struct X:3:8 7689629a746019a42797495b091711a1d68467e88aDouglas Gregor 7789629a746019a42797495b091711a1d68467e88aDouglas Gregor// RUN: c-index-test -cursor-at=%s:23:7 %s | FileCheck -check-prefix=CHECK-MEMFUNC-DECL %s 7889629a746019a42797495b091711a1d68467e88aDouglas Gregor// CHECK-MEMFUNC-DECL: CXXMethod=getX:23:5 7989629a746019a42797495b091711a1d68467e88aDouglas Gregor// RUN: c-index-test -cursor-at=%s:26:7 %s | FileCheck -check-prefix=CHECK-MEMFUNC-DEF %s 8089629a746019a42797495b091711a1d68467e88aDouglas Gregor// CHECK-MEMFUNC-DEF: CXXMethod=getX:26:6 8189629a746019a42797495b091711a1d68467e88aDouglas Gregor 8289629a746019a42797495b091711a1d68467e88aDouglas Gregor// RUN: c-index-test -cursor-at=%s:26:3 %s | FileCheck -check-prefix=CHECK-TYPEREF-Y %s 8389629a746019a42797495b091711a1d68467e88aDouglas Gregor// CHECK-TYPEREF-Y: TypeRef=struct Y:20:8 8489629a746019a42797495b091711a1d68467e88aDouglas Gregor 8589629a746019a42797495b091711a1d68467e88aDouglas Gregor// RUN: c-index-test -cursor-at=%s:27:10 %s | FileCheck -check-prefix=CHECK-IMPLICIT-MEMREF %s 8689629a746019a42797495b091711a1d68467e88aDouglas Gregor// RUN: c-index-test -cursor-at=%s:31:28 %s | FileCheck -check-prefix=CHECK-IMPLICIT-MEMREF %s 8789629a746019a42797495b091711a1d68467e88aDouglas Gregor// CHECK-IMPLICIT-MEMREF: MemberRefExpr=member:21:7 88064c44b8a17d4c426b87ad1c58de81d76a13fca3Argyrios Kyrtzidis 89064c44b8a17d4c426b87ad1c58de81d76a13fca3Argyrios Kyrtzidis// RUN: c-index-test -cursor-at=%s:35:5 %s | FileCheck -check-prefix=CHECK-DECL %s 90064c44b8a17d4c426b87ad1c58de81d76a13fca3Argyrios Kyrtzidis// CHECK-DECL: VarDecl=foo:35:5 918fa0a80b4482ad94e82c4a19e23de17fd69140b5Douglas Gregor 928fa0a80b4482ad94e82c4a19e23de17fd69140b5Douglas Gregor// RUN: c-index-test -cursor-at=%s:21:3 %s | FileCheck -check-prefix=CHECK-MEMBER %s 938fa0a80b4482ad94e82c4a19e23de17fd69140b5Douglas Gregor// CHECK-MEMBER: FieldDecl=member:21:7 (Definition) 948fa0a80b4482ad94e82c4a19e23de17fd69140b5Douglas Gregor// CHECK-MEMBER-NEXT: Completion string: {ResultType int}{TypedText member} 95dcbb2fb8710459fdc8073b76a4ef73fbbcbeac9fArgyrios Kyrtzidis 96dcbb2fb8710459fdc8073b76a4ef73fbbcbeac9fArgyrios Kyrtzidis// RUN: c-index-test -cursor-at=%s:38:12 -cursor-at=%s:39:5 %s | FileCheck -check-prefix=CHECK-CXXCATCH %s 97dcbb2fb8710459fdc8073b76a4ef73fbbcbeac9fArgyrios Kyrtzidis// CHECK-CXXCATCH: TypeRef=struct X:3:8 98dcbb2fb8710459fdc8073b76a4ef73fbbcbeac9fArgyrios Kyrtzidis// CHECK-CXXCATCH-NEXT: TypeRef=struct X:3:8 99d977e6b0eb4c9b57b0aad6e9e0be39cc67b3a8c7Argyrios Kyrtzidis 100d977e6b0eb4c9b57b0aad6e9e0be39cc67b3a8c7Argyrios Kyrtzidis// RUN: c-index-test -test-load-source-usrs local %s | FileCheck -check-prefix=CHECK-USR %s 101d977e6b0eb4c9b57b0aad6e9e0be39cc67b3a8c7Argyrios Kyrtzidis// CHECK-USR: get-cursor.cpp c:get-cursor.cpp@472@F@test#@e Extent=[38:12 - 38:15] 102d977e6b0eb4c9b57b0aad6e9e0be39cc67b3a8c7Argyrios Kyrtzidis// CHECK-USR: get-cursor.cpp c:get-cursor.cpp@483@F@test#@x Extent=[39:5 - 39:8] 1035641b0d02563840c51c33b93dc663c55306093f3Argyrios Kyrtzidis 1045641b0d02563840c51c33b93dc663c55306093f3Argyrios Kyrtzidis// RUN: c-index-test -cursor-at=%s:45:9 %s | FileCheck -check-prefix=CHECK-LOCALCLASS %s 1055641b0d02563840c51c33b93dc663c55306093f3Argyrios Kyrtzidis// CHECK-LOCALCLASS: 45:9 DeclRefExpr=x:44:11 Extent=[45:9 - 45:10] Spelling=x ([45:9 - 45:10]) 106