xref: /llvm-project/clang/test/ExtractAPI/global_var_template_partial_spec.cpp (revision 7a6747939218efbe3b1d2cc0f896dfa97c0ff40f)
1 // RUN: rm -rf %t
2 // RUN: split-file %s %t
3 // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \
4 // RUN: %t/reference.output.json.in >> %t/reference.output.json
5 // RUN: %clang_cc1 -extract-api --pretty-sgf -triple arm64-apple-macosx \
6 // RUN:   -x c++-header %t/input.h -o %t/output.json -verify
7 
8 // Generator version is not consistent across test runs, normalize it.
9 // RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \
10 // RUN: %t/output.json >> %t/output-normalized.json
11 // RUN: diff %t/reference.output.json %t/output-normalized.json
12 
13 //--- input.h
14 template<typename X, typename Y> int Foo = 0;
15 
16 template<typename Z> int Foo<int, Z> = 0;
17 /// expected-no-diagnostics
18 
19 //--- reference.output.json.in
20 {
21   "metadata": {
22     "formatVersion": {
23       "major": 0,
24       "minor": 5,
25       "patch": 3
26     },
27     "generator": "?"
28   },
29   "module": {
30     "name": "",
31     "platform": {
32       "architecture": "arm64",
33       "operatingSystem": {
34         "minimumVersion": {
35           "major": 11,
36           "minor": 0,
37           "patch": 0
38         },
39         "name": "macosx"
40       },
41       "vendor": "apple"
42     }
43   },
44   "relationships": [],
45   "symbols": [
46     {
47       "accessLevel": "public",
48       "declarationFragments": [
49         {
50           "kind": "keyword",
51           "spelling": "template"
52         },
53         {
54           "kind": "text",
55           "spelling": " <"
56         },
57         {
58           "kind": "keyword",
59           "spelling": "typename"
60         },
61         {
62           "kind": "text",
63           "spelling": " "
64         },
65         {
66           "kind": "genericParameter",
67           "spelling": "X"
68         },
69         {
70           "kind": "text",
71           "spelling": ", "
72         },
73         {
74           "kind": "keyword",
75           "spelling": "typename"
76         },
77         {
78           "kind": "text",
79           "spelling": " "
80         },
81         {
82           "kind": "genericParameter",
83           "spelling": "Y"
84         },
85         {
86           "kind": "text",
87           "spelling": "> "
88         },
89         {
90           "kind": "typeIdentifier",
91           "preciseIdentifier": "c:I",
92           "spelling": "int"
93         },
94         {
95           "kind": "text",
96           "spelling": " "
97         },
98         {
99           "kind": "identifier",
100           "spelling": "Foo"
101         },
102         {
103           "kind": "text",
104           "spelling": ";"
105         }
106       ],
107       "identifier": {
108         "interfaceLanguage": "c++",
109         "precise": "c:@Foo"
110       },
111       "kind": {
112         "displayName": "Global Variable Template",
113         "identifier": "c++.var"
114       },
115       "location": {
116         "position": {
117           "character": 37,
118           "line": 0
119         },
120         "uri": "file://INPUT_DIR/input.h"
121       },
122       "names": {
123         "navigator": [
124           {
125             "kind": "identifier",
126             "spelling": "Foo"
127           }
128         ],
129         "subHeading": [
130           {
131             "kind": "identifier",
132             "spelling": "Foo"
133           }
134         ],
135         "title": "Foo"
136       },
137       "pathComponents": [
138         "Foo"
139       ],
140       "swiftGenerics": {
141         "parameters": [
142           {
143             "depth": 0,
144             "index": 0,
145             "name": "X"
146           },
147           {
148             "depth": 0,
149             "index": 1,
150             "name": "Y"
151           }
152         ]
153       }
154     },
155     {
156       "accessLevel": "public",
157       "declarationFragments": [
158         {
159           "kind": "keyword",
160           "spelling": "template"
161         },
162         {
163           "kind": "text",
164           "spelling": " <"
165         },
166         {
167           "kind": "keyword",
168           "spelling": "typename"
169         },
170         {
171           "kind": "text",
172           "spelling": " "
173         },
174         {
175           "kind": "genericParameter",
176           "spelling": "Z"
177         },
178         {
179           "kind": "text",
180           "spelling": "> "
181         },
182         {
183           "kind": "typeIdentifier",
184           "preciseIdentifier": "c:I",
185           "spelling": "int"
186         },
187         {
188           "kind": "text",
189           "spelling": " "
190         },
191         {
192           "kind": "identifier",
193           "spelling": "Foo"
194         },
195         {
196           "kind": "text",
197           "spelling": "<"
198         },
199         {
200           "kind": "typeIdentifier",
201           "preciseIdentifier": "c:I",
202           "spelling": "int"
203         },
204         {
205           "kind": "text",
206           "spelling": ", "
207         },
208         {
209           "kind": "typeIdentifier",
210           "preciseIdentifier": "c:t0.0",
211           "spelling": "Z"
212         },
213         {
214           "kind": "text",
215           "spelling": ">;"
216         }
217       ],
218       "identifier": {
219         "interfaceLanguage": "c++",
220         "precise": "c:@VP>1#T@Foo>#I#t0.0"
221       },
222       "kind": {
223         "displayName": "Global Variable Template Partial Specialization",
224         "identifier": "c++.var"
225       },
226       "location": {
227         "position": {
228           "character": 25,
229           "line": 2
230         },
231         "uri": "file://INPUT_DIR/input.h"
232       },
233       "names": {
234         "navigator": [
235           {
236             "kind": "identifier",
237             "spelling": "Foo"
238           }
239         ],
240         "subHeading": [
241           {
242             "kind": "identifier",
243             "spelling": "Foo"
244           }
245         ],
246         "title": "Foo"
247       },
248       "pathComponents": [
249         "Foo"
250       ],
251       "swiftGenerics": {
252         "parameters": [
253           {
254             "depth": 0,
255             "index": 0,
256             "name": "Z"
257           }
258         ]
259       }
260     }
261   ]
262 }
263