16b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor// The run lines are below, because this test is line- and 26b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor// column-number sensitive. 36b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregorstruct Foo { 46b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor void babble() const volatile; 56b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor void bar(); 66b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor void baz() const; 76b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor void bingo() volatile; 86b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor void theend() const volatile; 96b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor}; 106b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor 116b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregortemplate<typename T> 126b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregorstruct smart_ptr { 136b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor T *operator->(); 146b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor const T* operator->() const; 156b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor}; 166b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor 176b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregorvoid text(Foo f, Foo *fp, const Foo &fc, const Foo *fcp, 186b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor smart_ptr<Foo> sf, const smart_ptr<Foo> &sfc, Foo volatile *fvp) { 196b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor f.bar(); 206b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor fp->bar(); 216b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor fc.baz(); 226b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor fcp->baz(); 236b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor sf->bar(); 246b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor sfc->baz(); 256b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor fvp->babble(); 266b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor} 276b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor 286b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregorvoid Foo::bar() { 296b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor 306b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor} 316b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor 326b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregorvoid Foo::baz() const { 336b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor 346b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor} 356b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor 366b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregorvoid Foo::bingo() volatile { 376b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor 386b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor} 396b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor 406b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor// Check member access expressions. 416b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor// RUN: c-index-test -code-completion-at=%s:19:5 %s | FileCheck -check-prefix=CHECK-NOQUALS %s 426b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor// RUN: c-index-test -code-completion-at=%s:20:7 %s | FileCheck -check-prefix=CHECK-NOQUALS %s 436b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor// RUN: c-index-test -code-completion-at=%s:23:7 %s | FileCheck -check-prefix=CHECK-NOQUALS %s 44503fd9a22ff1fa9467e05f023fe4085671ed3204Douglas Gregor// CHECK-NOQUALS: CXXMethod:{ResultType void}{TypedText babble}{LeftParen (}{RightParen )}{Informative const volatile} (35) 45503fd9a22ff1fa9467e05f023fe4085671ed3204Douglas Gregor// CHECK-NOQUALS: CXXMethod:{ResultType void}{TypedText bar}{LeftParen (}{RightParen )} (34) 46503fd9a22ff1fa9467e05f023fe4085671ed3204Douglas Gregor// CHECK-NOQUALS: CXXMethod:{ResultType void}{TypedText baz}{LeftParen (}{RightParen )}{Informative const} (35) 47503fd9a22ff1fa9467e05f023fe4085671ed3204Douglas Gregor// CHECK-NOQUALS: CXXMethod:{ResultType void}{TypedText bingo}{LeftParen (}{RightParen )}{Informative volatile} (35) 486b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor// RUN: c-index-test -code-completion-at=%s:21:6 %s | FileCheck -check-prefix=CHECK-CONST %s 496b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor// RUN: c-index-test -code-completion-at=%s:22:8 %s | FileCheck -check-prefix=CHECK-CONST %s 506b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor// RUN: c-index-test -code-completion-at=%s:24:8 %s | FileCheck -check-prefix=CHECK-CONST %s 51503fd9a22ff1fa9467e05f023fe4085671ed3204Douglas Gregor// CHECK-CONST: CXXMethod:{ResultType void}{TypedText babble}{LeftParen (}{RightParen )}{Informative const volatile} (35) 526b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor// CHECK-CONST-NOT: bar 53503fd9a22ff1fa9467e05f023fe4085671ed3204Douglas Gregor// CHECK-CONST: CXXMethod:{ResultType void}{TypedText baz}{LeftParen (}{RightParen )}{Informative const} (34) 546b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor// CHECK-CONST-NOT: bingo 556b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor// CHECK-CONST: theend 566b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor// RUN: c-index-test -code-completion-at=%s:25:8 %s | FileCheck -check-prefix=CHECK-VOLATILE %s 57503fd9a22ff1fa9467e05f023fe4085671ed3204Douglas Gregor// CHECK-VOLATILE: CXXMethod:{ResultType void}{TypedText babble}{LeftParen (}{RightParen )}{Informative const volatile} (35) 586b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor// CHECK-VOLATILE-NOT: baz 59503fd9a22ff1fa9467e05f023fe4085671ed3204Douglas Gregor// CHECK-VOLATILE: CXXMethod:{ResultType void}{TypedText bingo}{LeftParen (}{RightParen )}{Informative volatile} (34) 606b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor 616b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor// Check implicit member access expressions. 626b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor// RUN: c-index-test -code-completion-at=%s:29:2 %s | FileCheck -check-prefix=CHECK-IMPLICIT-NOQUALS %s 63503fd9a22ff1fa9467e05f023fe4085671ed3204Douglas Gregor// CHECK-IMPLICIT-NOQUALS: CXXMethod:{ResultType void}{TypedText babble}{LeftParen (}{RightParen )}{Informative const volatile} (35) 64503fd9a22ff1fa9467e05f023fe4085671ed3204Douglas Gregor// CHECK-IMPLICIT-NOQUALS: CXXMethod:{ResultType void}{TypedText bar}{LeftParen (}{RightParen )} (34) 65503fd9a22ff1fa9467e05f023fe4085671ed3204Douglas Gregor// CHECK-IMPLICIT-NOQUALS: CXXMethod:{ResultType void}{TypedText baz}{LeftParen (}{RightParen )}{Informative const} (35) 66503fd9a22ff1fa9467e05f023fe4085671ed3204Douglas Gregor// CHECK-IMPLICIT-NOQUALS: CXXMethod:{ResultType void}{TypedText bingo}{LeftParen (}{RightParen )}{Informative volatile} (35) 676b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor 686b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor// RUN: c-index-test -code-completion-at=%s:33:1 %s | FileCheck -check-prefix=CHECK-IMPLICIT-CONST %s 69503fd9a22ff1fa9467e05f023fe4085671ed3204Douglas Gregor// CHECK-IMPLICIT-CONST: CXXMethod:{ResultType void}{TypedText babble}{LeftParen (}{RightParen )}{Informative const volatile} (35) 706b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor// CHECK-IMPLICIT-CONST-NOT: bar 71503fd9a22ff1fa9467e05f023fe4085671ed3204Douglas Gregor// CHECK-IMPLICIT-CONST: CXXMethod:{ResultType void}{TypedText baz}{LeftParen (}{RightParen )}{Informative const} (34) 726b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor// CHECK-IMPLICIT-CONST-NOT: bingo 736b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor// CHECK-IMPLICIT-CONST: theend 746b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor 756b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor// RUN: c-index-test -code-completion-at=%s:37:1 %s | FileCheck -check-prefix=CHECK-IMPLICIT-VOLATILE %s 76503fd9a22ff1fa9467e05f023fe4085671ed3204Douglas Gregor// CHECK-IMPLICIT-VOLATILE: CXXMethod:{ResultType void}{TypedText babble}{LeftParen (}{RightParen )}{Informative const volatile} (35) 776b5f410f4ef7d4e2300df3cec8ef30810e10dfc7Douglas Gregor// CHECK-IMPLICIT-VOLATILE-NOT: baz 78503fd9a22ff1fa9467e05f023fe4085671ed3204Douglas Gregor// CHECK-IMPLICIT-VOLATILE: CXXMethod:{ResultType void}{TypedText bingo}{LeftParen (}{RightParen )}{Informative volatile} (34) 799862d9eaf9393e2ccaaf28901d794dd1c771f080Douglas Gregor 809862d9eaf9393e2ccaaf28901d794dd1c771f080Douglas Gregor// RUN: c-index-test -code-completion-at=%s:4:17 %s | FileCheck -check-prefix=CHECK-CVQUAL-AFTER %s 81503fd9a22ff1fa9467e05f023fe4085671ed3204Douglas Gregor// CHECK-CVQUAL-AFTER: NotImplemented:{TypedText const} (40) 82503fd9a22ff1fa9467e05f023fe4085671ed3204Douglas Gregor// CHECK-CVQUAL-AFTER: NotImplemented:{TypedText volatile} (40) 839862d9eaf9393e2ccaaf28901d794dd1c771f080Douglas Gregor 849862d9eaf9393e2ccaaf28901d794dd1c771f080Douglas Gregor// RUN: c-index-test -code-completion-at=%s:4:23 %s | FileCheck -check-prefix=CHECK-CVQUAL-AFTER2 %s 85503fd9a22ff1fa9467e05f023fe4085671ed3204Douglas Gregor// CHECK-CVQUAL-AFTER2-NOT: NotImplemented:{TypedText const} (40) 86503fd9a22ff1fa9467e05f023fe4085671ed3204Douglas Gregor// CHECK-CVQUAL-AFTER2: NotImplemented:{TypedText volatile} (40) 87