1 // The run lines are below, because this test is line- and
2 // column-number sensitive.
3 struct Foo {
4   void babble() const volatile;
5   void bar();
6   void baz() const;
7   void bingo() volatile;
8   void theend() const volatile;
9 };
10 
11 template<typename T>
12 struct smart_ptr {
13   T *operator->();
14   const T* operator->() const;
15 };
16 
text(Foo f,Foo * fp,const Foo & fc,const Foo * fcp,smart_ptr<Foo> sf,const smart_ptr<Foo> & sfc,Foo volatile * fvp)17 void text(Foo f, Foo *fp, const Foo &fc, const Foo *fcp,
18           smart_ptr<Foo> sf, const smart_ptr<Foo> &sfc, Foo volatile *fvp) {
19   f.bar();
20   fp->bar();
21   fc.baz();
22   fcp->baz();
23   sf->bar();
24   sfc->baz();
25   fvp->babble();
26 }
27 
bar()28 void Foo::bar() {
29 
30 }
31 
baz() const32 void Foo::baz() const {
33 
34 }
35 
bingo()36 void Foo::bingo() volatile {
37 
38 }
39 
40 // Check member access expressions.
41 // RUN: c-index-test -code-completion-at=%s:19:5 %s | FileCheck -check-prefix=CHECK-NOQUALS %s
42 // RUN: c-index-test -code-completion-at=%s:20:7 %s | FileCheck -check-prefix=CHECK-NOQUALS %s
43 // RUN: c-index-test -code-completion-at=%s:23:7 %s | FileCheck -check-prefix=CHECK-NOQUALS %s
44 // CHECK-NOQUALS: CXXMethod:{ResultType void}{TypedText babble}{LeftParen (}{RightParen )}{Informative  const volatile} (35)
45 // CHECK-NOQUALS: CXXMethod:{ResultType void}{TypedText bar}{LeftParen (}{RightParen )} (34)
46 // CHECK-NOQUALS: CXXMethod:{ResultType void}{TypedText baz}{LeftParen (}{RightParen )}{Informative  const} (35)
47 // CHECK-NOQUALS: CXXMethod:{ResultType void}{TypedText bingo}{LeftParen (}{RightParen )}{Informative  volatile} (35)
48 // RUN: c-index-test -code-completion-at=%s:21:6 %s | FileCheck -check-prefix=CHECK-CONST %s
49 // RUN: c-index-test -code-completion-at=%s:22:8 %s | FileCheck -check-prefix=CHECK-CONST %s
50 // RUN: c-index-test -code-completion-at=%s:24:8 %s | FileCheck -check-prefix=CHECK-CONST %s
51 // CHECK-CONST: CXXMethod:{ResultType void}{TypedText babble}{LeftParen (}{RightParen )}{Informative  const volatile} (35)
52 // CHECK-CONST-NOT: bar
53 // CHECK-CONST: CXXMethod:{ResultType void}{TypedText baz}{LeftParen (}{RightParen )}{Informative  const} (34)
54 // CHECK-CONST-NOT: bingo
55 // CHECK-CONST: theend
56 // RUN: c-index-test -code-completion-at=%s:25:8 %s | FileCheck -check-prefix=CHECK-VOLATILE %s
57 // CHECK-VOLATILE: CXXMethod:{ResultType void}{TypedText babble}{LeftParen (}{RightParen )}{Informative  const volatile} (35)
58 // CHECK-VOLATILE-NOT: baz
59 // CHECK-VOLATILE: CXXMethod:{ResultType void}{TypedText bingo}{LeftParen (}{RightParen )}{Informative  volatile} (34)
60 
61 // Check implicit member access expressions.
62 // RUN: c-index-test -code-completion-at=%s:29:2 %s | FileCheck -check-prefix=CHECK-IMPLICIT-NOQUALS %s
63 // CHECK-IMPLICIT-NOQUALS: CXXMethod:{ResultType void}{TypedText babble}{LeftParen (}{RightParen )}{Informative  const volatile} (35)
64 // CHECK-IMPLICIT-NOQUALS: CXXMethod:{ResultType void}{TypedText bar}{LeftParen (}{RightParen )} (34)
65 // CHECK-IMPLICIT-NOQUALS: CXXMethod:{ResultType void}{TypedText baz}{LeftParen (}{RightParen )}{Informative  const} (35)
66 // CHECK-IMPLICIT-NOQUALS: CXXMethod:{ResultType void}{TypedText bingo}{LeftParen (}{RightParen )}{Informative  volatile} (35)
67 
68 // RUN: c-index-test -code-completion-at=%s:33:1 %s | FileCheck -check-prefix=CHECK-IMPLICIT-CONST %s
69 // CHECK-IMPLICIT-CONST: CXXMethod:{ResultType void}{TypedText babble}{LeftParen (}{RightParen )}{Informative  const volatile} (35)
70 // CHECK-IMPLICIT-CONST-NOT: bar
71 // CHECK-IMPLICIT-CONST: CXXMethod:{ResultType void}{TypedText baz}{LeftParen (}{RightParen )}{Informative  const} (34)
72 // CHECK-IMPLICIT-CONST-NOT: bingo
73 // CHECK-IMPLICIT-CONST: theend
74 
75 // RUN: c-index-test -code-completion-at=%s:37:1 %s | FileCheck -check-prefix=CHECK-IMPLICIT-VOLATILE %s
76 // CHECK-IMPLICIT-VOLATILE: CXXMethod:{ResultType void}{TypedText babble}{LeftParen (}{RightParen )}{Informative  const volatile} (35)
77 // CHECK-IMPLICIT-VOLATILE-NOT: baz
78 // CHECK-IMPLICIT-VOLATILE: CXXMethod:{ResultType void}{TypedText bingo}{LeftParen (}{RightParen )}{Informative  volatile} (34)
79 
80 // RUN: c-index-test -code-completion-at=%s:4:17 %s | FileCheck -check-prefix=CHECK-CVQUAL-AFTER %s
81 // CHECK-CVQUAL-AFTER: NotImplemented:{TypedText const} (40)
82 // CHECK-CVQUAL-AFTER: NotImplemented:{TypedText volatile} (40)
83 
84 // RUN: c-index-test -code-completion-at=%s:4:23 %s | FileCheck -check-prefix=CHECK-CVQUAL-AFTER2 %s
85 // CHECK-CVQUAL-AFTER2-NOT: NotImplemented:{TypedText const} (40)
86 // CHECK-CVQUAL-AFTER2: NotImplemented:{TypedText volatile} (40)
87