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 T>
5975a9f6eSFrancisco Lopes da Silva struct S {
6975a9f6eSFrancisco Lopes da Silva   template<class U>
7975a9f6eSFrancisco Lopes da Silva   S(T, U, U) {}
8975a9f6eSFrancisco Lopes da Silva };
9975a9f6eSFrancisco Lopes da Silva 
10975a9f6eSFrancisco Lopes da Silva int main() {
11975a9f6eSFrancisco Lopes da Silva   S<int>(42, 42, 42);
12975a9f6eSFrancisco Lopes da Silva   S<int>(42, 42, 42);
13975a9f6eSFrancisco Lopes da Silva   S<int> s(42, 42, 42);
14975a9f6eSFrancisco Lopes da Silva 
15975a9f6eSFrancisco Lopes da Silva   S<int>(42, 42, 42,);
16975a9f6eSFrancisco Lopes da Silva   S<int> z(42, 42, 42,);
17*ee1d76f3SArgyrios Kyrtzidis 
18*ee1d76f3SArgyrios Kyrtzidis   int(42);
19975a9f6eSFrancisco Lopes da Silva }
20975a9f6eSFrancisco Lopes da Silva 
21975a9f6eSFrancisco Lopes da Silva // RUN: c-index-test -code-completion-at=%s:11:10 %s | FileCheck -check-prefix=CHECK-CC1 %s
22975a9f6eSFrancisco Lopes da Silva // CHECK-CC1: OverloadCandidate:{Text S}{LeftParen (}{CurrentParameter const S<int> &}{RightParen )} (1)
230c010cddSFrancisco Lopes da Silva // CHECK-CC1: OverloadCandidate:{Text S}{LeftParen (}{CurrentParameter int}{Comma , }{Placeholder U}{Comma , }{Placeholder U}{RightParen )} (1)
24975a9f6eSFrancisco Lopes da Silva // CHECK-CC1: Completion contexts:
25975a9f6eSFrancisco Lopes da Silva // CHECK-CC1-NEXT: Any type
26975a9f6eSFrancisco Lopes da Silva // CHECK-CC1-NEXT: Any value
27975a9f6eSFrancisco Lopes da Silva // CHECK-CC1-NEXT: Enum tag
28975a9f6eSFrancisco Lopes da Silva // CHECK-CC1-NEXT: Union tag
29975a9f6eSFrancisco Lopes da Silva // CHECK-CC1-NEXT: Struct tag
30975a9f6eSFrancisco Lopes da Silva // CHECK-CC1-NEXT: Class name
31975a9f6eSFrancisco Lopes da Silva // CHECK-CC1-NEXT: Nested name specifier
32975a9f6eSFrancisco Lopes da Silva // CHECK-CC1-NEXT: Objective-C interface
33975a9f6eSFrancisco Lopes da Silva 
34975a9f6eSFrancisco Lopes da Silva // RUN: c-index-test -code-completion-at=%s:12:10 %s | FileCheck -check-prefix=CHECK-CC2 %s
35975a9f6eSFrancisco Lopes da Silva // CHECK-CC2: OverloadCandidate:{Text S}{LeftParen (}{CurrentParameter const S<int> &}{RightParen )} (1)
360c010cddSFrancisco Lopes da Silva // CHECK-CC2: OverloadCandidate:{Text S}{LeftParen (}{CurrentParameter int}{Comma , }{Placeholder U}{Comma , }{Placeholder U}{RightParen )} (1)
37975a9f6eSFrancisco Lopes da Silva // CHECK-CC2: Completion contexts:
38975a9f6eSFrancisco Lopes da Silva // CHECK-CC2-NEXT: Any type
39975a9f6eSFrancisco Lopes da Silva // CHECK-CC2-NEXT: Any value
40975a9f6eSFrancisco Lopes da Silva // CHECK-CC2-NEXT: Enum tag
41975a9f6eSFrancisco Lopes da Silva // CHECK-CC2-NEXT: Union tag
42975a9f6eSFrancisco Lopes da Silva // CHECK-CC2-NEXT: Struct tag
43975a9f6eSFrancisco Lopes da Silva // CHECK-CC2-NEXT: Class name
44975a9f6eSFrancisco Lopes da Silva // CHECK-CC2-NEXT: Nested name specifier
45975a9f6eSFrancisco Lopes da Silva // CHECK-CC2-NEXT: Objective-C interface
46975a9f6eSFrancisco Lopes da Silva 
47975a9f6eSFrancisco Lopes da Silva // RUN: c-index-test -code-completion-at=%s:12:13 %s | FileCheck -check-prefix=CHECK-CC3 %s
480c010cddSFrancisco Lopes da Silva // CHECK-CC3: OverloadCandidate:{Text S}{LeftParen (}{Placeholder int}{Comma , }{CurrentParameter U}{Comma , }{Placeholder U}{RightParen )} (1)
49975a9f6eSFrancisco Lopes da Silva // CHECK-CC3: Completion contexts:
50975a9f6eSFrancisco Lopes da Silva // CHECK-CC3-NEXT: Any type
51975a9f6eSFrancisco Lopes da Silva // CHECK-CC3-NEXT: Any value
52975a9f6eSFrancisco Lopes da Silva // CHECK-CC3-NEXT: Enum tag
53975a9f6eSFrancisco Lopes da Silva // CHECK-CC3-NEXT: Union tag
54975a9f6eSFrancisco Lopes da Silva // CHECK-CC3-NEXT: Struct tag
55975a9f6eSFrancisco Lopes da Silva // CHECK-CC3-NEXT: Class name
56975a9f6eSFrancisco Lopes da Silva // CHECK-CC3-NEXT: Nested name specifier
57975a9f6eSFrancisco Lopes da Silva // CHECK-CC3-NEXT: Objective-C interface
58975a9f6eSFrancisco Lopes da Silva 
59975a9f6eSFrancisco Lopes da Silva // RUN: c-index-test -code-completion-at=%s:12:17 %s | FileCheck -check-prefix=CHECK-CC4 %s
600c010cddSFrancisco Lopes da Silva // CHECK-CC4: OverloadCandidate:{Text S}{LeftParen (}{Placeholder int}{Comma , }{Placeholder int}{Comma , }{CurrentParameter int}{RightParen )} (1)
61975a9f6eSFrancisco Lopes da Silva // CHECK-CC4: Completion contexts:
62975a9f6eSFrancisco Lopes da Silva // CHECK-CC4-NEXT: Any type
63975a9f6eSFrancisco Lopes da Silva // CHECK-CC4-NEXT: Any value
64975a9f6eSFrancisco Lopes da Silva // CHECK-CC4-NEXT: Enum tag
65975a9f6eSFrancisco Lopes da Silva // CHECK-CC4-NEXT: Union tag
66975a9f6eSFrancisco Lopes da Silva // CHECK-CC4-NEXT: Struct tag
67975a9f6eSFrancisco Lopes da Silva // CHECK-CC4-NEXT: Class name
68975a9f6eSFrancisco Lopes da Silva // CHECK-CC4-NEXT: Nested name specifier
69975a9f6eSFrancisco Lopes da Silva // CHECK-CC4-NEXT: Objective-C interface
70975a9f6eSFrancisco Lopes da Silva 
71975a9f6eSFrancisco Lopes da Silva // RUN: c-index-test -code-completion-at=%s:13:12 %s | FileCheck -check-prefix=CHECK-CC5 %s
72975a9f6eSFrancisco Lopes da Silva // CHECK-CC5: OverloadCandidate:{Text S}{LeftParen (}{CurrentParameter const S<int> &}{RightParen )} (1)
730c010cddSFrancisco Lopes da Silva // CHECK-CC5: OverloadCandidate:{Text S}{LeftParen (}{CurrentParameter int}{Comma , }{Placeholder U}{Comma , }{Placeholder U}{RightParen )} (1)
74975a9f6eSFrancisco Lopes da Silva // CHECK-CC5: Completion contexts:
75975a9f6eSFrancisco Lopes da Silva // CHECK-CC5-NEXT: Any type
76975a9f6eSFrancisco Lopes da Silva // CHECK-CC5-NEXT: Any value
77975a9f6eSFrancisco Lopes da Silva // CHECK-CC5-NEXT: Enum tag
78975a9f6eSFrancisco Lopes da Silva // CHECK-CC5-NEXT: Union tag
79975a9f6eSFrancisco Lopes da Silva // CHECK-CC5-NEXT: Struct tag
80975a9f6eSFrancisco Lopes da Silva // CHECK-CC5-NEXT: Class name
81975a9f6eSFrancisco Lopes da Silva // CHECK-CC5-NEXT: Nested name specifier
82975a9f6eSFrancisco Lopes da Silva // CHECK-CC5-NEXT: Objective-C interface
83975a9f6eSFrancisco Lopes da Silva 
84975a9f6eSFrancisco Lopes da Silva // RUN: c-index-test -code-completion-at=%s:13:15 %s | FileCheck -check-prefix=CHECK-CC6 %s
850c010cddSFrancisco Lopes da Silva // CHECK-CC6: OverloadCandidate:{Text S}{LeftParen (}{Placeholder int}{Comma , }{CurrentParameter U}{Comma , }{Placeholder U}{RightParen )} (1)
86975a9f6eSFrancisco Lopes da Silva // CHECK-CC6: Completion contexts:
87975a9f6eSFrancisco Lopes da Silva // CHECK-CC6-NEXT: Any type
88975a9f6eSFrancisco Lopes da Silva // CHECK-CC6-NEXT: Any value
89975a9f6eSFrancisco Lopes da Silva // CHECK-CC6-NEXT: Enum tag
90975a9f6eSFrancisco Lopes da Silva // CHECK-CC6-NEXT: Union tag
91975a9f6eSFrancisco Lopes da Silva // CHECK-CC6-NEXT: Struct tag
92975a9f6eSFrancisco Lopes da Silva // CHECK-CC6-NEXT: Class name
93975a9f6eSFrancisco Lopes da Silva // CHECK-CC6-NEXT: Nested name specifier
94975a9f6eSFrancisco Lopes da Silva // CHECK-CC6-NEXT: Objective-C interface
95975a9f6eSFrancisco Lopes da Silva 
96975a9f6eSFrancisco Lopes da Silva // RUN: c-index-test -code-completion-at=%s:13:19 %s | FileCheck -check-prefix=CHECK-CC7 %s
970c010cddSFrancisco Lopes da Silva // CHECK-CC7: OverloadCandidate:{Text S}{LeftParen (}{Placeholder int}{Comma , }{Placeholder int}{Comma , }{CurrentParameter int}{RightParen )} (1)
98975a9f6eSFrancisco Lopes da Silva // CHECK-CC7: Completion contexts:
99975a9f6eSFrancisco Lopes da Silva // CHECK-CC7-NEXT: Any type
100975a9f6eSFrancisco Lopes da Silva // CHECK-CC7-NEXT: Any value
101975a9f6eSFrancisco Lopes da Silva // CHECK-CC7-NEXT: Enum tag
102975a9f6eSFrancisco Lopes da Silva // CHECK-CC7-NEXT: Union tag
103975a9f6eSFrancisco Lopes da Silva // CHECK-CC7-NEXT: Struct tag
104975a9f6eSFrancisco Lopes da Silva // CHECK-CC7-NEXT: Class name
105975a9f6eSFrancisco Lopes da Silva // CHECK-CC7-NEXT: Nested name specifier
106975a9f6eSFrancisco Lopes da Silva // CHECK-CC7-NEXT: Objective-C interface
107975a9f6eSFrancisco Lopes da Silva 
108975a9f6eSFrancisco Lopes da Silva // RUN: c-index-test -code-completion-at=%s:15:21 %s | FileCheck -check-prefix=CHECK-CC8 %s
109975a9f6eSFrancisco Lopes da Silva // CHECK-CC8: Completion contexts:
110975a9f6eSFrancisco Lopes da Silva // CHECK-CC8-NEXT: Any type
111975a9f6eSFrancisco Lopes da Silva // CHECK-CC8-NEXT: Any value
112975a9f6eSFrancisco Lopes da Silva // CHECK-CC8-NEXT: Enum tag
113975a9f6eSFrancisco Lopes da Silva // CHECK-CC8-NEXT: Union tag
114975a9f6eSFrancisco Lopes da Silva // CHECK-CC8-NEXT: Struct tag
115975a9f6eSFrancisco Lopes da Silva // CHECK-CC8-NEXT: Class name
116975a9f6eSFrancisco Lopes da Silva // CHECK-CC8-NEXT: Nested name specifier
117975a9f6eSFrancisco Lopes da Silva // CHECK-CC8-NEXT: Objective-C interface
118975a9f6eSFrancisco Lopes da Silva 
119975a9f6eSFrancisco Lopes da Silva // RUN: c-index-test -code-completion-at=%s:16:23 %s | FileCheck -check-prefix=CHECK-CC9 %s
120975a9f6eSFrancisco Lopes da Silva // CHECK-CC9: Completion contexts:
121975a9f6eSFrancisco Lopes da Silva // CHECK-CC9-NEXT: Any type
122975a9f6eSFrancisco Lopes da Silva // CHECK-CC9-NEXT: Any value
123975a9f6eSFrancisco Lopes da Silva // CHECK-CC9-NEXT: Enum tag
124975a9f6eSFrancisco Lopes da Silva // CHECK-CC9-NEXT: Union tag
125975a9f6eSFrancisco Lopes da Silva // CHECK-CC9-NEXT: Struct tag
126975a9f6eSFrancisco Lopes da Silva // CHECK-CC9-NEXT: Class name
127975a9f6eSFrancisco Lopes da Silva // CHECK-CC9-NEXT: Nested name specifier
128975a9f6eSFrancisco Lopes da Silva // CHECK-CC9-NEXT: Objective-C interface
129*ee1d76f3SArgyrios Kyrtzidis 
130*ee1d76f3SArgyrios Kyrtzidis // RUN: c-index-test -code-completion-at=%s:18:7 %s | FileCheck -check-prefix=CHECK-CC10 %s
131*ee1d76f3SArgyrios Kyrtzidis // CHECK-CC10: FunctionDecl:{ResultType int}{TypedText main}{LeftParen (}{RightParen )} (12)
132*ee1d76f3SArgyrios Kyrtzidis // CHECK-CC10: Completion contexts:
133*ee1d76f3SArgyrios Kyrtzidis // CHECK-CC10-NEXT: Any type
134*ee1d76f3SArgyrios Kyrtzidis // CHECK-CC10-NEXT: Any value
135*ee1d76f3SArgyrios Kyrtzidis // CHECK-CC10-NEXT: Enum tag
136*ee1d76f3SArgyrios Kyrtzidis // CHECK-CC10-NEXT: Union tag
137*ee1d76f3SArgyrios Kyrtzidis // CHECK-CC10-NEXT: Struct tag
138*ee1d76f3SArgyrios Kyrtzidis // CHECK-CC10-NEXT: Class name
139*ee1d76f3SArgyrios Kyrtzidis // CHECK-CC10-NEXT: Nested name specifier
140*ee1d76f3SArgyrios Kyrtzidis // CHECK-CC10-NEXT: Objective-C interface
141