xref: /llvm-project/clang/test/ExtractAPI/global_var_template_partial_spec.cpp (revision 7a6747939218efbe3b1d2cc0f896dfa97c0ff40f)
18d8c8981SErick Velez // RUN: rm -rf %t
28d8c8981SErick Velez // RUN: split-file %s %t
38d8c8981SErick Velez // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \
48d8c8981SErick Velez // RUN: %t/reference.output.json.in >> %t/reference.output.json
5*e05c1b46SDaniel Grumberg // RUN: %clang_cc1 -extract-api --pretty-sgf -triple arm64-apple-macosx \
68d8c8981SErick Velez // RUN:   -x c++-header %t/input.h -o %t/output.json -verify
78d8c8981SErick Velez 
88d8c8981SErick Velez // Generator version is not consistent across test runs, normalize it.
98d8c8981SErick Velez // RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \
108d8c8981SErick Velez // RUN: %t/output.json >> %t/output-normalized.json
118d8c8981SErick Velez // RUN: diff %t/reference.output.json %t/output-normalized.json
128d8c8981SErick Velez 
138d8c8981SErick Velez //--- input.h
148d8c8981SErick Velez template<typename X, typename Y> int Foo = 0;
158d8c8981SErick Velez 
168d8c8981SErick Velez template<typename Z> int Foo<int, Z> = 0;
178d8c8981SErick Velez /// expected-no-diagnostics
188d8c8981SErick Velez 
198d8c8981SErick Velez //--- reference.output.json.in
208d8c8981SErick Velez {
218d8c8981SErick Velez   "metadata": {
228d8c8981SErick Velez     "formatVersion": {
238d8c8981SErick Velez       "major": 0,
248d8c8981SErick Velez       "minor": 5,
258d8c8981SErick Velez       "patch": 3
268d8c8981SErick Velez     },
278d8c8981SErick Velez     "generator": "?"
288d8c8981SErick Velez   },
298d8c8981SErick Velez   "module": {
308d8c8981SErick Velez     "name": "",
318d8c8981SErick Velez     "platform": {
328d8c8981SErick Velez       "architecture": "arm64",
338d8c8981SErick Velez       "operatingSystem": {
348d8c8981SErick Velez         "minimumVersion": {
358d8c8981SErick Velez           "major": 11,
368d8c8981SErick Velez           "minor": 0,
378d8c8981SErick Velez           "patch": 0
388d8c8981SErick Velez         },
398d8c8981SErick Velez         "name": "macosx"
408d8c8981SErick Velez       },
418d8c8981SErick Velez       "vendor": "apple"
428d8c8981SErick Velez     }
438d8c8981SErick Velez   },
448d8c8981SErick Velez   "relationships": [],
458d8c8981SErick Velez   "symbols": [
468d8c8981SErick Velez     {
478d8c8981SErick Velez       "accessLevel": "public",
488d8c8981SErick Velez       "declarationFragments": [
498d8c8981SErick Velez         {
508d8c8981SErick Velez           "kind": "keyword",
518d8c8981SErick Velez           "spelling": "template"
528d8c8981SErick Velez         },
538d8c8981SErick Velez         {
548d8c8981SErick Velez           "kind": "text",
558d8c8981SErick Velez           "spelling": " <"
568d8c8981SErick Velez         },
578d8c8981SErick Velez         {
588d8c8981SErick Velez           "kind": "keyword",
598d8c8981SErick Velez           "spelling": "typename"
608d8c8981SErick Velez         },
618d8c8981SErick Velez         {
628d8c8981SErick Velez           "kind": "text",
638d8c8981SErick Velez           "spelling": " "
648d8c8981SErick Velez         },
658d8c8981SErick Velez         {
668d8c8981SErick Velez           "kind": "genericParameter",
678d8c8981SErick Velez           "spelling": "X"
688d8c8981SErick Velez         },
698d8c8981SErick Velez         {
708d8c8981SErick Velez           "kind": "text",
718d8c8981SErick Velez           "spelling": ", "
728d8c8981SErick Velez         },
738d8c8981SErick Velez         {
748d8c8981SErick Velez           "kind": "keyword",
758d8c8981SErick Velez           "spelling": "typename"
768d8c8981SErick Velez         },
778d8c8981SErick Velez         {
788d8c8981SErick Velez           "kind": "text",
798d8c8981SErick Velez           "spelling": " "
808d8c8981SErick Velez         },
818d8c8981SErick Velez         {
828d8c8981SErick Velez           "kind": "genericParameter",
838d8c8981SErick Velez           "spelling": "Y"
848d8c8981SErick Velez         },
858d8c8981SErick Velez         {
868d8c8981SErick Velez           "kind": "text",
878d8c8981SErick Velez           "spelling": "> "
888d8c8981SErick Velez         },
898d8c8981SErick Velez         {
908d8c8981SErick Velez           "kind": "typeIdentifier",
918d8c8981SErick Velez           "preciseIdentifier": "c:I",
928d8c8981SErick Velez           "spelling": "int"
938d8c8981SErick Velez         },
948d8c8981SErick Velez         {
958d8c8981SErick Velez           "kind": "text",
968d8c8981SErick Velez           "spelling": " "
978d8c8981SErick Velez         },
988d8c8981SErick Velez         {
998d8c8981SErick Velez           "kind": "identifier",
1008d8c8981SErick Velez           "spelling": "Foo"
1018d8c8981SErick Velez         },
1028d8c8981SErick Velez         {
1038d8c8981SErick Velez           "kind": "text",
1048d8c8981SErick Velez           "spelling": ";"
1058d8c8981SErick Velez         }
1068d8c8981SErick Velez       ],
1078d8c8981SErick Velez       "identifier": {
1088d8c8981SErick Velez         "interfaceLanguage": "c++",
1098d8c8981SErick Velez         "precise": "c:@Foo"
1108d8c8981SErick Velez       },
1118d8c8981SErick Velez       "kind": {
1128d8c8981SErick Velez         "displayName": "Global Variable Template",
1138d8c8981SErick Velez         "identifier": "c++.var"
1148d8c8981SErick Velez       },
1158d8c8981SErick Velez       "location": {
1168d8c8981SErick Velez         "position": {
11763537872SQuietMisdreavus           "character": 37,
11863537872SQuietMisdreavus           "line": 0
1198d8c8981SErick Velez         },
1208d8c8981SErick Velez         "uri": "file://INPUT_DIR/input.h"
1218d8c8981SErick Velez       },
1228d8c8981SErick Velez       "names": {
1238d8c8981SErick Velez         "navigator": [
1248d8c8981SErick Velez           {
1258d8c8981SErick Velez             "kind": "identifier",
1268d8c8981SErick Velez             "spelling": "Foo"
1278d8c8981SErick Velez           }
1288d8c8981SErick Velez         ],
1298d8c8981SErick Velez         "subHeading": [
1308d8c8981SErick Velez           {
1318d8c8981SErick Velez             "kind": "identifier",
1328d8c8981SErick Velez             "spelling": "Foo"
1338d8c8981SErick Velez           }
1348d8c8981SErick Velez         ],
1358d8c8981SErick Velez         "title": "Foo"
1368d8c8981SErick Velez       },
1378d8c8981SErick Velez       "pathComponents": [
1388d8c8981SErick Velez         "Foo"
1398d8c8981SErick Velez       ],
1408d8c8981SErick Velez       "swiftGenerics": {
1418d8c8981SErick Velez         "parameters": [
1428d8c8981SErick Velez           {
1438d8c8981SErick Velez             "depth": 0,
1448d8c8981SErick Velez             "index": 0,
1458d8c8981SErick Velez             "name": "X"
1468d8c8981SErick Velez           },
1478d8c8981SErick Velez           {
1488d8c8981SErick Velez             "depth": 0,
1498d8c8981SErick Velez             "index": 1,
1508d8c8981SErick Velez             "name": "Y"
1518d8c8981SErick Velez           }
1528d8c8981SErick Velez         ]
1538d8c8981SErick Velez       }
1548d8c8981SErick Velez     },
1558d8c8981SErick Velez     {
1568d8c8981SErick Velez       "accessLevel": "public",
1578d8c8981SErick Velez       "declarationFragments": [
1588d8c8981SErick Velez         {
1598d8c8981SErick Velez           "kind": "keyword",
1608d8c8981SErick Velez           "spelling": "template"
1618d8c8981SErick Velez         },
1628d8c8981SErick Velez         {
1638d8c8981SErick Velez           "kind": "text",
1648d8c8981SErick Velez           "spelling": " <"
1658d8c8981SErick Velez         },
1668d8c8981SErick Velez         {
1678d8c8981SErick Velez           "kind": "keyword",
1688d8c8981SErick Velez           "spelling": "typename"
1698d8c8981SErick Velez         },
1708d8c8981SErick Velez         {
1718d8c8981SErick Velez           "kind": "text",
1728d8c8981SErick Velez           "spelling": " "
1738d8c8981SErick Velez         },
1748d8c8981SErick Velez         {
1758d8c8981SErick Velez           "kind": "genericParameter",
1768d8c8981SErick Velez           "spelling": "Z"
1778d8c8981SErick Velez         },
1788d8c8981SErick Velez         {
1798d8c8981SErick Velez           "kind": "text",
1808d8c8981SErick Velez           "spelling": "> "
1818d8c8981SErick Velez         },
1828d8c8981SErick Velez         {
1838d8c8981SErick Velez           "kind": "typeIdentifier",
1848d8c8981SErick Velez           "preciseIdentifier": "c:I",
1858d8c8981SErick Velez           "spelling": "int"
1868d8c8981SErick Velez         },
1878d8c8981SErick Velez         {
1888d8c8981SErick Velez           "kind": "text",
1898d8c8981SErick Velez           "spelling": " "
1908d8c8981SErick Velez         },
1918d8c8981SErick Velez         {
1928d8c8981SErick Velez           "kind": "identifier",
1938d8c8981SErick Velez           "spelling": "Foo"
1948d8c8981SErick Velez         },
1958d8c8981SErick Velez         {
1968d8c8981SErick Velez           "kind": "text",
1978d8c8981SErick Velez           "spelling": "<"
1988d8c8981SErick Velez         },
1998d8c8981SErick Velez         {
2008d8c8981SErick Velez           "kind": "typeIdentifier",
2018d8c8981SErick Velez           "preciseIdentifier": "c:I",
2028d8c8981SErick Velez           "spelling": "int"
2038d8c8981SErick Velez         },
2048d8c8981SErick Velez         {
2058d8c8981SErick Velez           "kind": "text",
2068d8c8981SErick Velez           "spelling": ", "
2078d8c8981SErick Velez         },
2088d8c8981SErick Velez         {
2098d8c8981SErick Velez           "kind": "typeIdentifier",
2108d8c8981SErick Velez           "preciseIdentifier": "c:t0.0",
2118d8c8981SErick Velez           "spelling": "Z"
2128d8c8981SErick Velez         },
2138d8c8981SErick Velez         {
2148d8c8981SErick Velez           "kind": "text",
2158d8c8981SErick Velez           "spelling": ">;"
2168d8c8981SErick Velez         }
2178d8c8981SErick Velez       ],
2188d8c8981SErick Velez       "identifier": {
2198d8c8981SErick Velez         "interfaceLanguage": "c++",
2208d8c8981SErick Velez         "precise": "c:@VP>1#T@Foo>#I#t0.0"
2218d8c8981SErick Velez       },
2228d8c8981SErick Velez       "kind": {
2238d8c8981SErick Velez         "displayName": "Global Variable Template Partial Specialization",
2248d8c8981SErick Velez         "identifier": "c++.var"
2258d8c8981SErick Velez       },
2268d8c8981SErick Velez       "location": {
2278d8c8981SErick Velez         "position": {
22863537872SQuietMisdreavus           "character": 25,
22963537872SQuietMisdreavus           "line": 2
2308d8c8981SErick Velez         },
2318d8c8981SErick Velez         "uri": "file://INPUT_DIR/input.h"
2328d8c8981SErick Velez       },
2338d8c8981SErick Velez       "names": {
2348d8c8981SErick Velez         "navigator": [
2358d8c8981SErick Velez           {
2368d8c8981SErick Velez             "kind": "identifier",
2378d8c8981SErick Velez             "spelling": "Foo"
2388d8c8981SErick Velez           }
2398d8c8981SErick Velez         ],
2408d8c8981SErick Velez         "subHeading": [
2418d8c8981SErick Velez           {
2428d8c8981SErick Velez             "kind": "identifier",
2438d8c8981SErick Velez             "spelling": "Foo"
2448d8c8981SErick Velez           }
2458d8c8981SErick Velez         ],
2468d8c8981SErick Velez         "title": "Foo"
2478d8c8981SErick Velez       },
2488d8c8981SErick Velez       "pathComponents": [
2498d8c8981SErick Velez         "Foo"
2508d8c8981SErick Velez       ],
2518d8c8981SErick Velez       "swiftGenerics": {
2528d8c8981SErick Velez         "parameters": [
2538d8c8981SErick Velez           {
2548d8c8981SErick Velez             "depth": 0,
2558d8c8981SErick Velez             "index": 0,
2568d8c8981SErick Velez             "name": "Z"
2578d8c8981SErick Velez           }
2588d8c8981SErick Velez         ]
2598d8c8981SErick Velez       }
2608d8c8981SErick Velez     }
2618d8c8981SErick Velez   ]
2628d8c8981SErick Velez }
263