180b787e8SErick Velez // RUN: rm -rf %t 280b787e8SErick Velez // RUN: split-file %s %t 380b787e8SErick Velez // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ 480b787e8SErick 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 \ 680b787e8SErick Velez // RUN: -x c++-header %t/input.h -o %t/output.json -verify 780b787e8SErick Velez 880b787e8SErick Velez // Generator version is not consistent across test runs, normalize it. 980b787e8SErick Velez // RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \ 1080b787e8SErick Velez // RUN: %t/output.json >> %t/output-normalized.json 1180b787e8SErick Velez // RUN: diff %t/reference.output.json %t/output-normalized.json 1280b787e8SErick Velez 1380b787e8SErick Velez //--- input.h 1480b787e8SErick Velez template<typename T> void Foo(T Bar); 1580b787e8SErick Velez 1680b787e8SErick Velez template<> void Foo<int>(int Bar); 1780b787e8SErick Velez /// expected-no-diagnostics 1880b787e8SErick Velez 1980b787e8SErick Velez //--- reference.output.json.in 2080b787e8SErick Velez { 2180b787e8SErick Velez "metadata": { 2280b787e8SErick Velez "formatVersion": { 2380b787e8SErick Velez "major": 0, 2480b787e8SErick Velez "minor": 5, 2580b787e8SErick Velez "patch": 3 2680b787e8SErick Velez }, 2780b787e8SErick Velez "generator": "?" 2880b787e8SErick Velez }, 2980b787e8SErick Velez "module": { 3080b787e8SErick Velez "name": "", 3180b787e8SErick Velez "platform": { 3280b787e8SErick Velez "architecture": "arm64", 3380b787e8SErick Velez "operatingSystem": { 3480b787e8SErick Velez "minimumVersion": { 3580b787e8SErick Velez "major": 11, 3680b787e8SErick Velez "minor": 0, 3780b787e8SErick Velez "patch": 0 3880b787e8SErick Velez }, 3980b787e8SErick Velez "name": "macosx" 4080b787e8SErick Velez }, 4180b787e8SErick Velez "vendor": "apple" 4280b787e8SErick Velez } 4380b787e8SErick Velez }, 4480b787e8SErick Velez "relationships": [], 4580b787e8SErick Velez "symbols": [ 4680b787e8SErick Velez { 4780b787e8SErick Velez "accessLevel": "public", 4880b787e8SErick Velez "declarationFragments": [ 4980b787e8SErick Velez { 5080b787e8SErick Velez "kind": "keyword", 5180b787e8SErick Velez "spelling": "template" 5280b787e8SErick Velez }, 5380b787e8SErick Velez { 5480b787e8SErick Velez "kind": "text", 5580b787e8SErick Velez "spelling": " <" 5680b787e8SErick Velez }, 5780b787e8SErick Velez { 5880b787e8SErick Velez "kind": "keyword", 5980b787e8SErick Velez "spelling": "typename" 6080b787e8SErick Velez }, 6180b787e8SErick Velez { 6280b787e8SErick Velez "kind": "text", 6380b787e8SErick Velez "spelling": " " 6480b787e8SErick Velez }, 6580b787e8SErick Velez { 6680b787e8SErick Velez "kind": "genericParameter", 6780b787e8SErick Velez "spelling": "T" 6880b787e8SErick Velez }, 6980b787e8SErick Velez { 7080b787e8SErick Velez "kind": "text", 7180b787e8SErick Velez "spelling": "> " 7280b787e8SErick Velez }, 7380b787e8SErick Velez { 7480b787e8SErick Velez "kind": "typeIdentifier", 7580b787e8SErick Velez "preciseIdentifier": "c:v", 7680b787e8SErick Velez "spelling": "void" 7780b787e8SErick Velez }, 7880b787e8SErick Velez { 7980b787e8SErick Velez "kind": "text", 8080b787e8SErick Velez "spelling": " " 8180b787e8SErick Velez }, 8280b787e8SErick Velez { 8380b787e8SErick Velez "kind": "identifier", 8480b787e8SErick Velez "spelling": "Foo" 8580b787e8SErick Velez }, 8680b787e8SErick Velez { 8780b787e8SErick Velez "kind": "text", 8880b787e8SErick Velez "spelling": "(" 8980b787e8SErick Velez }, 9080b787e8SErick Velez { 9180b787e8SErick Velez "kind": "typeIdentifier", 9280b787e8SErick Velez "preciseIdentifier": "c:t0.0", 9380b787e8SErick Velez "spelling": "T" 9480b787e8SErick Velez }, 9580b787e8SErick Velez { 9680b787e8SErick Velez "kind": "text", 9780b787e8SErick Velez "spelling": " " 9880b787e8SErick Velez }, 9980b787e8SErick Velez { 10080b787e8SErick Velez "kind": "internalParam", 10180b787e8SErick Velez "spelling": "Bar" 10280b787e8SErick Velez }, 10380b787e8SErick Velez { 10480b787e8SErick Velez "kind": "text", 10580b787e8SErick Velez "spelling": ");" 10680b787e8SErick Velez } 10780b787e8SErick Velez ], 10880b787e8SErick Velez "functionSignature": { 10980b787e8SErick Velez "parameters": [ 11080b787e8SErick Velez { 11180b787e8SErick Velez "declarationFragments": [ 11280b787e8SErick Velez { 11380b787e8SErick Velez "kind": "typeIdentifier", 11480b787e8SErick Velez "preciseIdentifier": "c:t0.0", 11580b787e8SErick Velez "spelling": "T" 11680b787e8SErick Velez }, 11780b787e8SErick Velez { 11880b787e8SErick Velez "kind": "text", 11980b787e8SErick Velez "spelling": " " 12080b787e8SErick Velez }, 12180b787e8SErick Velez { 12280b787e8SErick Velez "kind": "internalParam", 12380b787e8SErick Velez "spelling": "Bar" 12480b787e8SErick Velez } 12580b787e8SErick Velez ], 12680b787e8SErick Velez "name": "Bar" 12780b787e8SErick Velez } 12880b787e8SErick Velez ], 12980b787e8SErick Velez "returns": [ 13080b787e8SErick Velez { 13180b787e8SErick Velez "kind": "typeIdentifier", 13280b787e8SErick Velez "preciseIdentifier": "c:v", 13380b787e8SErick Velez "spelling": "void" 13480b787e8SErick Velez } 13580b787e8SErick Velez ] 13680b787e8SErick Velez }, 13780b787e8SErick Velez "identifier": { 13880b787e8SErick Velez "interfaceLanguage": "c++", 13980b787e8SErick Velez "precise": "c:@FT@>1#TFoo#t0.0#v#" 14080b787e8SErick Velez }, 14180b787e8SErick Velez "kind": { 14280b787e8SErick Velez "displayName": "Function Template", 14380b787e8SErick Velez "identifier": "c++.func" 14480b787e8SErick Velez }, 14580b787e8SErick Velez "location": { 14680b787e8SErick Velez "position": { 14763537872SQuietMisdreavus "character": 26, 14863537872SQuietMisdreavus "line": 0 14980b787e8SErick Velez }, 15080b787e8SErick Velez "uri": "file://INPUT_DIR/input.h" 15180b787e8SErick Velez }, 15280b787e8SErick Velez "names": { 15380b787e8SErick Velez "navigator": [ 15480b787e8SErick Velez { 15580b787e8SErick Velez "kind": "identifier", 15680b787e8SErick Velez "spelling": "Foo" 15780b787e8SErick Velez } 15880b787e8SErick Velez ], 15980b787e8SErick Velez "subHeading": [ 16080b787e8SErick Velez { 16180b787e8SErick Velez "kind": "identifier", 16280b787e8SErick Velez "spelling": "Foo" 16380b787e8SErick Velez } 16480b787e8SErick Velez ], 16580b787e8SErick Velez "title": "Foo" 16680b787e8SErick Velez }, 16780b787e8SErick Velez "pathComponents": [ 16880b787e8SErick Velez "Foo" 16980b787e8SErick Velez ], 17080b787e8SErick Velez "swiftGenerics": { 17180b787e8SErick Velez "parameters": [ 17280b787e8SErick Velez { 17380b787e8SErick Velez "depth": 0, 17480b787e8SErick Velez "index": 0, 17580b787e8SErick Velez "name": "T" 17680b787e8SErick Velez } 17780b787e8SErick Velez ] 17880b787e8SErick Velez } 17980b787e8SErick Velez }, 18080b787e8SErick Velez { 18180b787e8SErick Velez "accessLevel": "public", 18280b787e8SErick Velez "declarationFragments": [ 18380b787e8SErick Velez { 18480b787e8SErick Velez "kind": "keyword", 18580b787e8SErick Velez "spelling": "template" 18680b787e8SErick Velez }, 18780b787e8SErick Velez { 18880b787e8SErick Velez "kind": "text", 18980b787e8SErick Velez "spelling": " <> " 19080b787e8SErick Velez }, 19180b787e8SErick Velez { 19280b787e8SErick Velez "kind": "typeIdentifier", 19380b787e8SErick Velez "preciseIdentifier": "c:v", 19480b787e8SErick Velez "spelling": "void" 19580b787e8SErick Velez }, 19680b787e8SErick Velez { 19780b787e8SErick Velez "kind": "text", 19880b787e8SErick Velez "spelling": " " 19980b787e8SErick Velez }, 20080b787e8SErick Velez { 20180b787e8SErick Velez "kind": "identifier", 20280b787e8SErick Velez "spelling": "Foo" 20380b787e8SErick Velez }, 20480b787e8SErick Velez { 20580b787e8SErick Velez "kind": "text", 20680b787e8SErick Velez "spelling": "<" 20780b787e8SErick Velez }, 20880b787e8SErick Velez { 20980b787e8SErick Velez "kind": "typeIdentifier", 21080b787e8SErick Velez "preciseIdentifier": "c:I", 21180b787e8SErick Velez "spelling": "int" 21280b787e8SErick Velez }, 21380b787e8SErick Velez { 21480b787e8SErick Velez "kind": "text", 21580b787e8SErick Velez "spelling": ">(" 21680b787e8SErick Velez }, 21780b787e8SErick Velez { 21880b787e8SErick Velez "kind": "typeIdentifier", 21980b787e8SErick Velez "preciseIdentifier": "c:I", 22080b787e8SErick Velez "spelling": "int" 22180b787e8SErick Velez }, 22280b787e8SErick Velez { 22380b787e8SErick Velez "kind": "text", 22480b787e8SErick Velez "spelling": " " 22580b787e8SErick Velez }, 22680b787e8SErick Velez { 22780b787e8SErick Velez "kind": "internalParam", 22880b787e8SErick Velez "spelling": "Bar" 22980b787e8SErick Velez }, 23080b787e8SErick Velez { 23180b787e8SErick Velez "kind": "text", 23280b787e8SErick Velez "spelling": ");" 23380b787e8SErick Velez } 23480b787e8SErick Velez ], 23580b787e8SErick Velez "functionSignature": { 23680b787e8SErick Velez "parameters": [ 23780b787e8SErick Velez { 23880b787e8SErick Velez "declarationFragments": [ 23980b787e8SErick Velez { 24080b787e8SErick Velez "kind": "typeIdentifier", 24180b787e8SErick Velez "preciseIdentifier": "c:I", 24280b787e8SErick Velez "spelling": "int" 24380b787e8SErick Velez }, 24480b787e8SErick Velez { 24580b787e8SErick Velez "kind": "text", 24680b787e8SErick Velez "spelling": " " 24780b787e8SErick Velez }, 24880b787e8SErick Velez { 24980b787e8SErick Velez "kind": "internalParam", 25080b787e8SErick Velez "spelling": "Bar" 25180b787e8SErick Velez } 25280b787e8SErick Velez ], 25380b787e8SErick Velez "name": "Bar" 25480b787e8SErick Velez } 25580b787e8SErick Velez ], 25680b787e8SErick Velez "returns": [ 25780b787e8SErick Velez { 25880b787e8SErick Velez "kind": "typeIdentifier", 25980b787e8SErick Velez "preciseIdentifier": "c:v", 26080b787e8SErick Velez "spelling": "void" 26180b787e8SErick Velez } 26280b787e8SErick Velez ] 26380b787e8SErick Velez }, 26480b787e8SErick Velez "identifier": { 26580b787e8SErick Velez "interfaceLanguage": "c++", 26680b787e8SErick Velez "precise": "c:@F@Foo<#I>#I#" 26780b787e8SErick Velez }, 26880b787e8SErick Velez "kind": { 26980b787e8SErick Velez "displayName": "Function Template Specialization", 27080b787e8SErick Velez "identifier": "c++.func" 27180b787e8SErick Velez }, 27280b787e8SErick Velez "location": { 27380b787e8SErick Velez "position": { 27463537872SQuietMisdreavus "character": 16, 27563537872SQuietMisdreavus "line": 2 27680b787e8SErick Velez }, 27780b787e8SErick Velez "uri": "file://INPUT_DIR/input.h" 27880b787e8SErick Velez }, 27980b787e8SErick Velez "names": { 28080b787e8SErick Velez "navigator": [ 28180b787e8SErick Velez { 28280b787e8SErick Velez "kind": "identifier", 28380b787e8SErick Velez "spelling": "Foo" 28480b787e8SErick Velez } 28580b787e8SErick Velez ], 28680b787e8SErick Velez "subHeading": [ 28780b787e8SErick Velez { 28880b787e8SErick Velez "kind": "identifier", 28980b787e8SErick Velez "spelling": "Foo" 29080b787e8SErick Velez } 29180b787e8SErick Velez ], 29280b787e8SErick Velez "title": "Foo" 29380b787e8SErick Velez }, 29480b787e8SErick Velez "pathComponents": [ 29580b787e8SErick Velez "Foo" 29680b787e8SErick Velez ] 29780b787e8SErick Velez } 29880b787e8SErick Velez ] 29980b787e8SErick Velez } 300