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