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