xref: /llvm-project/clang/test/ExtractAPI/global_func_template.cpp (revision 7a6747939218efbe3b1d2cc0f896dfa97c0ff40f)
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