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<typename T> T Fizz(int Buzz); 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": "keyword", 19380b787e8SErick Velez "spelling": "typename" 19480b787e8SErick Velez }, 19580b787e8SErick Velez { 19680b787e8SErick Velez "kind": "text", 19780b787e8SErick Velez "spelling": " " 19880b787e8SErick Velez }, 19980b787e8SErick Velez { 20080b787e8SErick Velez "kind": "genericParameter", 20180b787e8SErick Velez "spelling": "T" 20280b787e8SErick Velez }, 20380b787e8SErick Velez { 20480b787e8SErick Velez "kind": "text", 20580b787e8SErick Velez "spelling": "> " 20680b787e8SErick Velez }, 20780b787e8SErick Velez { 20880b787e8SErick Velez "kind": "typeIdentifier", 20980b787e8SErick Velez "preciseIdentifier": "c:t0.0", 21080b787e8SErick Velez "spelling": "T" 21180b787e8SErick Velez }, 21280b787e8SErick Velez { 21380b787e8SErick Velez "kind": "text", 21480b787e8SErick Velez "spelling": " " 21580b787e8SErick Velez }, 21680b787e8SErick Velez { 21780b787e8SErick Velez "kind": "identifier", 21880b787e8SErick Velez "spelling": "Fizz" 21980b787e8SErick Velez }, 22080b787e8SErick Velez { 22180b787e8SErick Velez "kind": "text", 22280b787e8SErick Velez "spelling": "(" 22380b787e8SErick Velez }, 22480b787e8SErick Velez { 22580b787e8SErick Velez "kind": "typeIdentifier", 22680b787e8SErick Velez "preciseIdentifier": "c:I", 22780b787e8SErick Velez "spelling": "int" 22880b787e8SErick Velez }, 22980b787e8SErick Velez { 23080b787e8SErick Velez "kind": "text", 23180b787e8SErick Velez "spelling": " " 23280b787e8SErick Velez }, 23380b787e8SErick Velez { 23480b787e8SErick Velez "kind": "internalParam", 23580b787e8SErick Velez "spelling": "Buzz" 23680b787e8SErick Velez }, 23780b787e8SErick Velez { 23880b787e8SErick Velez "kind": "text", 23980b787e8SErick Velez "spelling": ");" 24080b787e8SErick Velez } 24180b787e8SErick Velez ], 24280b787e8SErick Velez "functionSignature": { 24380b787e8SErick Velez "parameters": [ 24480b787e8SErick Velez { 24580b787e8SErick Velez "declarationFragments": [ 24680b787e8SErick Velez { 24780b787e8SErick Velez "kind": "typeIdentifier", 24880b787e8SErick Velez "preciseIdentifier": "c:I", 24980b787e8SErick Velez "spelling": "int" 25080b787e8SErick Velez }, 25180b787e8SErick Velez { 25280b787e8SErick Velez "kind": "text", 25380b787e8SErick Velez "spelling": " " 25480b787e8SErick Velez }, 25580b787e8SErick Velez { 25680b787e8SErick Velez "kind": "internalParam", 25780b787e8SErick Velez "spelling": "Buzz" 25880b787e8SErick Velez } 25980b787e8SErick Velez ], 26080b787e8SErick Velez "name": "Buzz" 26180b787e8SErick Velez } 26280b787e8SErick Velez ], 26380b787e8SErick Velez "returns": [ 26480b787e8SErick Velez { 26580b787e8SErick Velez "kind": "typeIdentifier", 26680b787e8SErick Velez "preciseIdentifier": "c:t0.0", 26780b787e8SErick Velez "spelling": "T" 26880b787e8SErick Velez } 26980b787e8SErick Velez ] 27080b787e8SErick Velez }, 27180b787e8SErick Velez "identifier": { 27280b787e8SErick Velez "interfaceLanguage": "c++", 27380b787e8SErick Velez "precise": "c:@FT@>1#TFizz#I#t0.0#" 27480b787e8SErick Velez }, 27580b787e8SErick Velez "kind": { 27680b787e8SErick Velez "displayName": "Function Template", 27780b787e8SErick Velez "identifier": "c++.func" 27880b787e8SErick Velez }, 27980b787e8SErick Velez "location": { 28080b787e8SErick Velez "position": { 28163537872SQuietMisdreavus "character": 23, 28263537872SQuietMisdreavus "line": 2 28380b787e8SErick Velez }, 28480b787e8SErick Velez "uri": "file://INPUT_DIR/input.h" 28580b787e8SErick Velez }, 28680b787e8SErick Velez "names": { 28780b787e8SErick Velez "navigator": [ 28880b787e8SErick Velez { 28980b787e8SErick Velez "kind": "identifier", 29080b787e8SErick Velez "spelling": "Fizz" 29180b787e8SErick Velez } 29280b787e8SErick Velez ], 29380b787e8SErick Velez "subHeading": [ 29480b787e8SErick Velez { 29580b787e8SErick Velez "kind": "identifier", 29680b787e8SErick Velez "spelling": "Fizz" 29780b787e8SErick Velez } 29880b787e8SErick Velez ], 29980b787e8SErick Velez "title": "Fizz" 30080b787e8SErick Velez }, 30180b787e8SErick Velez "pathComponents": [ 30280b787e8SErick Velez "Fizz" 30380b787e8SErick Velez ], 30480b787e8SErick Velez "swiftGenerics": { 30580b787e8SErick Velez "parameters": [ 30680b787e8SErick Velez { 30780b787e8SErick Velez "depth": 0, 30880b787e8SErick Velez "index": 0, 30980b787e8SErick Velez "name": "T" 31080b787e8SErick Velez } 31180b787e8SErick Velez ] 31280b787e8SErick Velez } 31380b787e8SErick Velez } 31480b787e8SErick Velez ] 31580b787e8SErick Velez } 316