1975a9f6eSFrancisco Lopes da Silva // Note: the run lines follow their respective tests, since line/column
2975a9f6eSFrancisco Lopes da Silva // matter in this test.
3975a9f6eSFrancisco Lopes da Silva
4975a9f6eSFrancisco Lopes da Silva template<class V>
5975a9f6eSFrancisco Lopes da Silva struct S {
operator ()S6975a9f6eSFrancisco Lopes da Silva void operator()(int) const {}
operator ()S7975a9f6eSFrancisco Lopes da Silva template<class T> void operator()(T) const {}
operator ()S8975a9f6eSFrancisco Lopes da Silva template<class T> void operator()(V, T, T) const {}
operator ()S9975a9f6eSFrancisco Lopes da Silva template<class T> const S<T> *operator()(const S<T> &s) const { return &s; }
10975a9f6eSFrancisco Lopes da Silva };
11975a9f6eSFrancisco Lopes da Silva
foo(S<void * > & s)12a349a8aeSFrancisco Lopes da Silva void foo(S<void *> &s) { s(42); }
13a349a8aeSFrancisco Lopes da Silva
main()14975a9f6eSFrancisco Lopes da Silva int main() {
15975a9f6eSFrancisco Lopes da Silva S<void *> s;
16975a9f6eSFrancisco Lopes da Silva s(42);
17975a9f6eSFrancisco Lopes da Silva s(s);
18975a9f6eSFrancisco Lopes da Silva s(0, s, s);
19975a9f6eSFrancisco Lopes da Silva (*S<void *>()(S<int>()))(42, 42, 42);
20975a9f6eSFrancisco Lopes da Silva
21975a9f6eSFrancisco Lopes da Silva s(42,);
22975a9f6eSFrancisco Lopes da Silva s(s,);
23975a9f6eSFrancisco Lopes da Silva s(0, 42, 42,);
24975a9f6eSFrancisco Lopes da Silva }
25975a9f6eSFrancisco Lopes da Silva
26a349a8aeSFrancisco Lopes da Silva // RUN: c-index-test -code-completion-at=%s:16:5 %s | FileCheck -check-prefix=CHECK-CC1 %s
27975a9f6eSFrancisco Lopes da Silva // CHECK-CC1: OverloadCandidate:{ResultType void}{Text operator()}{LeftParen (}{CurrentParameter int}{RightParen )} (1)
28975a9f6eSFrancisco Lopes da Silva // CHECK-CC1: OverloadCandidate:{ResultType void}{Text operator()}{LeftParen (}{CurrentParameter T}{RightParen )} (1)
29*0c010cddSFrancisco Lopes da Silva // CHECK-CC1: OverloadCandidate:{ResultType void}{Text operator()}{LeftParen (}{CurrentParameter void *}{Comma , }{Placeholder T}{Comma , }{Placeholder T}{RightParen )} (1)
30975a9f6eSFrancisco Lopes da Silva // CHECK-CC1: Completion contexts:
31975a9f6eSFrancisco Lopes da Silva // CHECK-CC1-NEXT: Any type
32975a9f6eSFrancisco Lopes da Silva // CHECK-CC1-NEXT: Any value
33975a9f6eSFrancisco Lopes da Silva // CHECK-CC1-NEXT: Enum tag
34975a9f6eSFrancisco Lopes da Silva // CHECK-CC1-NEXT: Union tag
35975a9f6eSFrancisco Lopes da Silva // CHECK-CC1-NEXT: Struct tag
36975a9f6eSFrancisco Lopes da Silva // CHECK-CC1-NEXT: Class name
37975a9f6eSFrancisco Lopes da Silva // CHECK-CC1-NEXT: Nested name specifier
38975a9f6eSFrancisco Lopes da Silva // CHECK-CC1-NEXT: Objective-C interface
39975a9f6eSFrancisco Lopes da Silva
40a349a8aeSFrancisco Lopes da Silva // RUN: c-index-test -code-completion-at=%s:17:5 %s | FileCheck -check-prefix=CHECK-CC2 %s
41975a9f6eSFrancisco Lopes da Silva // CHECK-CC2: OverloadCandidate:{ResultType void}{Text operator()}{LeftParen (}{CurrentParameter int}{RightParen )} (1)
42975a9f6eSFrancisco Lopes da Silva // CHECK-CC2: OverloadCandidate:{ResultType void}{Text operator()}{LeftParen (}{CurrentParameter T}{RightParen )} (1)
43*0c010cddSFrancisco Lopes da Silva // CHECK-CC2: OverloadCandidate:{ResultType void}{Text operator()}{LeftParen (}{CurrentParameter void *}{Comma , }{Placeholder T}{Comma , }{Placeholder T}{RightParen )} (1)
44975a9f6eSFrancisco Lopes da Silva // CHECK-CC2: Completion contexts:
45975a9f6eSFrancisco Lopes da Silva // CHECK-CC2-NEXT: Any type
46975a9f6eSFrancisco Lopes da Silva // CHECK-CC2-NEXT: Any value
47975a9f6eSFrancisco Lopes da Silva // CHECK-CC2-NEXT: Enum tag
48975a9f6eSFrancisco Lopes da Silva // CHECK-CC2-NEXT: Union tag
49975a9f6eSFrancisco Lopes da Silva // CHECK-CC2-NEXT: Struct tag
50975a9f6eSFrancisco Lopes da Silva // CHECK-CC2-NEXT: Class name
51975a9f6eSFrancisco Lopes da Silva // CHECK-CC2-NEXT: Nested name specifier
52975a9f6eSFrancisco Lopes da Silva // CHECK-CC2-NEXT: Objective-C interface
53975a9f6eSFrancisco Lopes da Silva
54a349a8aeSFrancisco Lopes da Silva // RUN: c-index-test -code-completion-at=%s:18:5 %s | FileCheck -check-prefix=CHECK-CC3 %s
55975a9f6eSFrancisco Lopes da Silva // CHECK-CC3: OverloadCandidate:{ResultType void}{Text operator()}{LeftParen (}{CurrentParameter int}{RightParen )} (1)
56975a9f6eSFrancisco Lopes da Silva // CHECK-CC3: OverloadCandidate:{ResultType void}{Text operator()}{LeftParen (}{CurrentParameter T}{RightParen )} (1)
57*0c010cddSFrancisco Lopes da Silva // CHECK-CC3: OverloadCandidate:{ResultType void}{Text operator()}{LeftParen (}{CurrentParameter void *}{Comma , }{Placeholder T}{Comma , }{Placeholder T}{RightParen )} (1)
58975a9f6eSFrancisco Lopes da Silva // CHECK-CC3: Completion contexts:
59975a9f6eSFrancisco Lopes da Silva // CHECK-CC3-NEXT: Any type
60975a9f6eSFrancisco Lopes da Silva // CHECK-CC3-NEXT: Any value
61975a9f6eSFrancisco Lopes da Silva // CHECK-CC3-NEXT: Enum tag
62975a9f6eSFrancisco Lopes da Silva // CHECK-CC3-NEXT: Union tag
63975a9f6eSFrancisco Lopes da Silva // CHECK-CC3-NEXT: Struct tag
64975a9f6eSFrancisco Lopes da Silva // CHECK-CC3-NEXT: Class name
65975a9f6eSFrancisco Lopes da Silva // CHECK-CC3-NEXT: Nested name specifier
66975a9f6eSFrancisco Lopes da Silva // CHECK-CC3-NEXT: Objective-C interface
67975a9f6eSFrancisco Lopes da Silva
68a349a8aeSFrancisco Lopes da Silva // RUN: c-index-test -code-completion-at=%s:18:7 %s | FileCheck -check-prefix=CHECK-CC4 %s
69*0c010cddSFrancisco Lopes da Silva // CHECK-CC4: OverloadCandidate:{ResultType void}{Text operator()}{LeftParen (}{Placeholder void *}{Comma , }{CurrentParameter T}{Comma , }{Placeholder T}{RightParen )} (1)
70975a9f6eSFrancisco Lopes da Silva // CHECK-CC4: Completion contexts:
71975a9f6eSFrancisco Lopes da Silva // CHECK-CC4-NEXT: Any type
72975a9f6eSFrancisco Lopes da Silva // CHECK-CC4-NEXT: Any value
73975a9f6eSFrancisco Lopes da Silva // CHECK-CC4-NEXT: Enum tag
74975a9f6eSFrancisco Lopes da Silva // CHECK-CC4-NEXT: Union tag
75975a9f6eSFrancisco Lopes da Silva // CHECK-CC4-NEXT: Struct tag
76975a9f6eSFrancisco Lopes da Silva // CHECK-CC4-NEXT: Class name
77975a9f6eSFrancisco Lopes da Silva // CHECK-CC4-NEXT: Nested name specifier
78975a9f6eSFrancisco Lopes da Silva // CHECK-CC4-NEXT: Objective-C interface
79975a9f6eSFrancisco Lopes da Silva
80a349a8aeSFrancisco Lopes da Silva // RUN: c-index-test -code-completion-at=%s:18:10 %s | FileCheck -check-prefix=CHECK-CC5 %s
81*0c010cddSFrancisco Lopes da Silva // CHECK-CC5: OverloadCandidate:{ResultType void}{Text operator()}{LeftParen (}{Placeholder void *}{Comma , }{Placeholder S<void *>}{Comma , }{CurrentParameter S<void *>}{RightParen )} (1)
82975a9f6eSFrancisco Lopes da Silva // CHECK-CC5: Completion contexts:
83975a9f6eSFrancisco Lopes da Silva // CHECK-CC5-NEXT: Any type
84975a9f6eSFrancisco Lopes da Silva // CHECK-CC5-NEXT: Any value
85975a9f6eSFrancisco Lopes da Silva // CHECK-CC5-NEXT: Enum tag
86975a9f6eSFrancisco Lopes da Silva // CHECK-CC5-NEXT: Union tag
87975a9f6eSFrancisco Lopes da Silva // CHECK-CC5-NEXT: Struct tag
88975a9f6eSFrancisco Lopes da Silva // CHECK-CC5-NEXT: Class name
89975a9f6eSFrancisco Lopes da Silva // CHECK-CC5-NEXT: Nested name specifier
90975a9f6eSFrancisco Lopes da Silva // CHECK-CC5-NEXT: Objective-C interface
91975a9f6eSFrancisco Lopes da Silva
92a349a8aeSFrancisco Lopes da Silva // RUN: c-index-test -code-completion-at=%s:19:17 %s | FileCheck -check-prefix=CHECK-CC6 %s
93975a9f6eSFrancisco Lopes da Silva // CHECK-CC6: OverloadCandidate:{ResultType void}{Text operator()}{LeftParen (}{CurrentParameter int}{RightParen )} (1)
94975a9f6eSFrancisco Lopes da Silva // CHECK-CC6: OverloadCandidate:{ResultType void}{Text operator()}{LeftParen (}{CurrentParameter T}{RightParen )} (1)
95*0c010cddSFrancisco Lopes da Silva // CHECK-CC6: OverloadCandidate:{ResultType void}{Text operator()}{LeftParen (}{CurrentParameter void *}{Comma , }{Placeholder T}{Comma , }{Placeholder T}{RightParen )} (1)
96975a9f6eSFrancisco Lopes da Silva // CHECK-CC6: OverloadCandidate:{ResultType const S<T> *}{Text operator()}{LeftParen (}{CurrentParameter const S<T> &s}{RightParen )} (1)
97975a9f6eSFrancisco Lopes da Silva // CHECK-CC6: Completion contexts:
98975a9f6eSFrancisco Lopes da Silva // CHECK-CC6-NEXT: Any type
99975a9f6eSFrancisco Lopes da Silva // CHECK-CC6-NEXT: Any value
100975a9f6eSFrancisco Lopes da Silva // CHECK-CC6-NEXT: Enum tag
101975a9f6eSFrancisco Lopes da Silva // CHECK-CC6-NEXT: Union tag
102975a9f6eSFrancisco Lopes da Silva // CHECK-CC6-NEXT: Struct tag
103975a9f6eSFrancisco Lopes da Silva // CHECK-CC6-NEXT: Class name
104975a9f6eSFrancisco Lopes da Silva // CHECK-CC6-NEXT: Nested name specifier
105975a9f6eSFrancisco Lopes da Silva // CHECK-CC6-NEXT: Objective-C interface
106975a9f6eSFrancisco Lopes da Silva
107a349a8aeSFrancisco Lopes da Silva // RUN: c-index-test -code-completion-at=%s:19:28 %s | FileCheck -check-prefix=CHECK-CC7 %s
108975a9f6eSFrancisco Lopes da Silva // CHECK-CC7: OverloadCandidate:{ResultType void}{Text operator()}{LeftParen (}{CurrentParameter int}{RightParen )} (1)
109975a9f6eSFrancisco Lopes da Silva // CHECK-CC7: OverloadCandidate:{ResultType void}{Text operator()}{LeftParen (}{CurrentParameter T}{RightParen )} (1)
110*0c010cddSFrancisco Lopes da Silva // CHECK-CC7: OverloadCandidate:{ResultType void}{Text operator()}{LeftParen (}{CurrentParameter int}{Comma , }{Placeholder T}{Comma , }{Placeholder T}{RightParen )} (1)
111975a9f6eSFrancisco Lopes da Silva // CHECK-CC7: OverloadCandidate:{ResultType const S<T> *}{Text operator()}{LeftParen (}{CurrentParameter const S<T> &s}{RightParen )} (1)
112975a9f6eSFrancisco Lopes da Silva // CHECK-CC7: Completion contexts:
113975a9f6eSFrancisco Lopes da Silva // CHECK-CC7-NEXT: Any type
114975a9f6eSFrancisco Lopes da Silva // CHECK-CC7-NEXT: Any value
115975a9f6eSFrancisco Lopes da Silva // CHECK-CC7-NEXT: Enum tag
116975a9f6eSFrancisco Lopes da Silva // CHECK-CC7-NEXT: Union tag
117975a9f6eSFrancisco Lopes da Silva // CHECK-CC7-NEXT: Struct tag
118975a9f6eSFrancisco Lopes da Silva // CHECK-CC7-NEXT: Class name
119975a9f6eSFrancisco Lopes da Silva // CHECK-CC7-NEXT: Nested name specifier
120975a9f6eSFrancisco Lopes da Silva // CHECK-CC7-NEXT: Objective-C interface
121975a9f6eSFrancisco Lopes da Silva
122a349a8aeSFrancisco Lopes da Silva // RUN: c-index-test -code-completion-at=%s:19:31 %s | FileCheck -check-prefix=CHECK-CC8 %s
123*0c010cddSFrancisco Lopes da Silva // CHECK-CC8: OverloadCandidate:{ResultType void}{Text operator()}{LeftParen (}{Placeholder int}{Comma , }{CurrentParameter T}{Comma , }{Placeholder T}{RightParen )} (1)
124975a9f6eSFrancisco Lopes da Silva // CHECK-CC8: Completion contexts:
125975a9f6eSFrancisco Lopes da Silva // CHECK-CC8-NEXT: Any type
126975a9f6eSFrancisco Lopes da Silva // CHECK-CC8-NEXT: Any value
127975a9f6eSFrancisco Lopes da Silva // CHECK-CC8-NEXT: Enum tag
128975a9f6eSFrancisco Lopes da Silva // CHECK-CC8-NEXT: Union tag
129975a9f6eSFrancisco Lopes da Silva // CHECK-CC8-NEXT: Struct tag
130975a9f6eSFrancisco Lopes da Silva // CHECK-CC8-NEXT: Class name
131975a9f6eSFrancisco Lopes da Silva // CHECK-CC8-NEXT: Nested name specifier
132975a9f6eSFrancisco Lopes da Silva // CHECK-CC8-NEXT: Objective-C interface
133975a9f6eSFrancisco Lopes da Silva
134a349a8aeSFrancisco Lopes da Silva // RUN: c-index-test -code-completion-at=%s:19:35 %s | FileCheck -check-prefix=CHECK-CC9 %s
135*0c010cddSFrancisco Lopes da Silva // CHECK-CC9: OverloadCandidate:{ResultType void}{Text operator()}{LeftParen (}{Placeholder int}{Comma , }{Placeholder int}{Comma , }{CurrentParameter int}{RightParen )} (1)
136975a9f6eSFrancisco Lopes da Silva // CHECK-CC9: Completion contexts:
137975a9f6eSFrancisco Lopes da Silva // CHECK-CC9-NEXT: Any type
138975a9f6eSFrancisco Lopes da Silva // CHECK-CC9-NEXT: Any value
139975a9f6eSFrancisco Lopes da Silva // CHECK-CC9-NEXT: Enum tag
140975a9f6eSFrancisco Lopes da Silva // CHECK-CC9-NEXT: Union tag
141975a9f6eSFrancisco Lopes da Silva // CHECK-CC9-NEXT: Struct tag
142975a9f6eSFrancisco Lopes da Silva // CHECK-CC9-NEXT: Class name
143975a9f6eSFrancisco Lopes da Silva // CHECK-CC9-NEXT: Nested name specifier
144975a9f6eSFrancisco Lopes da Silva // CHECK-CC9-NEXT: Objective-C interface
145975a9f6eSFrancisco Lopes da Silva
146a349a8aeSFrancisco Lopes da Silva // RUN: c-index-test -code-completion-at=%s:21:8 %s | FileCheck -check-prefix=CHECK-CC10 %s
147975a9f6eSFrancisco Lopes da Silva // CHECK-CC10: Completion contexts:
148975a9f6eSFrancisco Lopes da Silva // CHECK-CC10-NEXT: Any type
149975a9f6eSFrancisco Lopes da Silva // CHECK-CC10-NEXT: Any value
150975a9f6eSFrancisco Lopes da Silva // CHECK-CC10-NEXT: Enum tag
151975a9f6eSFrancisco Lopes da Silva // CHECK-CC10-NEXT: Union tag
152975a9f6eSFrancisco Lopes da Silva // CHECK-CC10-NEXT: Struct tag
153975a9f6eSFrancisco Lopes da Silva // CHECK-CC10-NEXT: Class name
154975a9f6eSFrancisco Lopes da Silva // CHECK-CC10-NEXT: Nested name specifier
155975a9f6eSFrancisco Lopes da Silva // CHECK-CC10-NEXT: Objective-C interface
156975a9f6eSFrancisco Lopes da Silva
157a349a8aeSFrancisco Lopes da Silva // RUN: c-index-test -code-completion-at=%s:22:7 %s | FileCheck -check-prefix=CHECK-CC11 %s
158975a9f6eSFrancisco Lopes da Silva // CHECK-CC11: Completion contexts:
159975a9f6eSFrancisco Lopes da Silva // CHECK-CC11-NEXT: Any type
160975a9f6eSFrancisco Lopes da Silva // CHECK-CC11-NEXT: Any value
161975a9f6eSFrancisco Lopes da Silva // CHECK-CC11-NEXT: Enum tag
162975a9f6eSFrancisco Lopes da Silva // CHECK-CC11-NEXT: Union tag
163975a9f6eSFrancisco Lopes da Silva // CHECK-CC11-NEXT: Struct tag
164975a9f6eSFrancisco Lopes da Silva // CHECK-CC11-NEXT: Class name
165975a9f6eSFrancisco Lopes da Silva // CHECK-CC11-NEXT: Nested name specifier
166975a9f6eSFrancisco Lopes da Silva // CHECK-CC11-NEXT: Objective-C interface
167975a9f6eSFrancisco Lopes da Silva
168a349a8aeSFrancisco Lopes da Silva // RUN: c-index-test -code-completion-at=%s:23:15 %s | FileCheck -check-prefix=CHECK-CC12 %s
169975a9f6eSFrancisco Lopes da Silva // CHECK-CC12: Completion contexts:
170975a9f6eSFrancisco Lopes da Silva // CHECK-CC12-NEXT: Any type
171975a9f6eSFrancisco Lopes da Silva // CHECK-CC12-NEXT: Any value
172975a9f6eSFrancisco Lopes da Silva // CHECK-CC12-NEXT: Enum tag
173975a9f6eSFrancisco Lopes da Silva // CHECK-CC12-NEXT: Union tag
174975a9f6eSFrancisco Lopes da Silva // CHECK-CC12-NEXT: Struct tag
175975a9f6eSFrancisco Lopes da Silva // CHECK-CC12-NEXT: Class name
176975a9f6eSFrancisco Lopes da Silva // CHECK-CC12-NEXT: Nested name specifier
177975a9f6eSFrancisco Lopes da Silva // CHECK-CC12-NEXT: Objective-C interface
178a349a8aeSFrancisco Lopes da Silva
179a349a8aeSFrancisco Lopes da Silva // RUN: c-index-test -code-completion-at=%s:12:28 %s | FileCheck -check-prefix=CHECK-CC13 %s
180a349a8aeSFrancisco Lopes da Silva // CHECK-CC13: OverloadCandidate:{ResultType void}{Text operator()}{LeftParen (}{CurrentParameter int}{RightParen )} (1)
181a349a8aeSFrancisco Lopes da Silva // CHECK-CC13: OverloadCandidate:{ResultType void}{Text operator()}{LeftParen (}{CurrentParameter T}{RightParen )} (1)
182*0c010cddSFrancisco Lopes da Silva // CHECK-CC13: OverloadCandidate:{ResultType void}{Text operator()}{LeftParen (}{CurrentParameter void *}{Comma , }{Placeholder T}{Comma , }{Placeholder T}{RightParen )} (1)
183a349a8aeSFrancisco Lopes da Silva // CHECK-CC13: Completion contexts:
184a349a8aeSFrancisco Lopes da Silva // CHECK-CC13-NEXT: Any type
185a349a8aeSFrancisco Lopes da Silva // CHECK-CC13-NEXT: Any value
186a349a8aeSFrancisco Lopes da Silva // CHECK-CC13-NEXT: Enum tag
187a349a8aeSFrancisco Lopes da Silva // CHECK-CC13-NEXT: Union tag
188a349a8aeSFrancisco Lopes da Silva // CHECK-CC13-NEXT: Struct tag
189a349a8aeSFrancisco Lopes da Silva // CHECK-CC13-NEXT: Class name
190a349a8aeSFrancisco Lopes da Silva // CHECK-CC13-NEXT: Nested name specifier
191a349a8aeSFrancisco Lopes da Silva // CHECK-CC13-NEXT: Objective-C interface
192