xref: /llvm-project/clang/test/ExtractAPI/union.c (revision e05c1b46d0d3739cc48ad912dbe6e9affce05927)
169fedaf8SDaniel Grumberg // RUN: rm -rf %t
269fedaf8SDaniel Grumberg // RUN: split-file %s %t
369fedaf8SDaniel Grumberg // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \
469fedaf8SDaniel Grumberg // RUN: %t/reference.output.json.in >> %t/reference.output.json
5*e05c1b46SDaniel Grumberg // RUN: %clang_cc1 -extract-api --pretty-sgf -triple arm64-apple-macosx -x c-header\
669fedaf8SDaniel Grumberg // RUN:   %t/input.h -o %t/output.json -verify
769fedaf8SDaniel Grumberg 
869fedaf8SDaniel Grumberg // Generator version is not consistent across test runs, normalize it.
969fedaf8SDaniel Grumberg // RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \
1069fedaf8SDaniel Grumberg // RUN: %t/output.json >> %t/output-normalized.json
1169fedaf8SDaniel Grumberg // RUN: diff %t/reference.output.json %t/output-normalized.json
1269fedaf8SDaniel Grumberg 
1369fedaf8SDaniel Grumberg //--- input.h
1469fedaf8SDaniel Grumberg /// My Union
1569fedaf8SDaniel Grumberg union Union {
1669fedaf8SDaniel Grumberg     /// the a option
1769fedaf8SDaniel Grumberg     int a;
1869fedaf8SDaniel Grumberg     /// the b option
1969fedaf8SDaniel Grumberg     char b;
2069fedaf8SDaniel Grumberg };
2169fedaf8SDaniel Grumberg // expected-no-diagnostics
2269fedaf8SDaniel Grumberg 
2369fedaf8SDaniel Grumberg //--- reference.output.json.in
2469fedaf8SDaniel Grumberg {
2569fedaf8SDaniel Grumberg   "metadata": {
2669fedaf8SDaniel Grumberg     "formatVersion": {
2769fedaf8SDaniel Grumberg       "major": 0,
2869fedaf8SDaniel Grumberg       "minor": 5,
2969fedaf8SDaniel Grumberg       "patch": 3
3069fedaf8SDaniel Grumberg     },
3169fedaf8SDaniel Grumberg     "generator": "?"
3269fedaf8SDaniel Grumberg   },
3369fedaf8SDaniel Grumberg   "module": {
3469fedaf8SDaniel Grumberg     "name": "",
3569fedaf8SDaniel Grumberg     "platform": {
3669fedaf8SDaniel Grumberg       "architecture": "arm64",
3769fedaf8SDaniel Grumberg       "operatingSystem": {
3869fedaf8SDaniel Grumberg         "minimumVersion": {
3969fedaf8SDaniel Grumberg           "major": 11,
4069fedaf8SDaniel Grumberg           "minor": 0,
4169fedaf8SDaniel Grumberg           "patch": 0
4269fedaf8SDaniel Grumberg         },
4369fedaf8SDaniel Grumberg         "name": "macosx"
4469fedaf8SDaniel Grumberg       },
4569fedaf8SDaniel Grumberg       "vendor": "apple"
4669fedaf8SDaniel Grumberg     }
4769fedaf8SDaniel Grumberg   },
4869fedaf8SDaniel Grumberg   "relationships": [
4969fedaf8SDaniel Grumberg     {
5069fedaf8SDaniel Grumberg       "kind": "memberOf",
5169fedaf8SDaniel Grumberg       "source": "c:@U@Union@FI@a",
5269fedaf8SDaniel Grumberg       "target": "c:@U@Union",
5369fedaf8SDaniel Grumberg       "targetFallback": "Union"
5469fedaf8SDaniel Grumberg     },
5569fedaf8SDaniel Grumberg     {
5669fedaf8SDaniel Grumberg       "kind": "memberOf",
5769fedaf8SDaniel Grumberg       "source": "c:@U@Union@FI@b",
5869fedaf8SDaniel Grumberg       "target": "c:@U@Union",
5969fedaf8SDaniel Grumberg       "targetFallback": "Union"
6069fedaf8SDaniel Grumberg     }
6169fedaf8SDaniel Grumberg   ],
6269fedaf8SDaniel Grumberg   "symbols": [
6369fedaf8SDaniel Grumberg     {
6469fedaf8SDaniel Grumberg       "accessLevel": "public",
6569fedaf8SDaniel Grumberg       "declarationFragments": [
6669fedaf8SDaniel Grumberg         {
6769fedaf8SDaniel Grumberg           "kind": "keyword",
6869fedaf8SDaniel Grumberg           "spelling": "union"
6969fedaf8SDaniel Grumberg         },
7069fedaf8SDaniel Grumberg         {
7169fedaf8SDaniel Grumberg           "kind": "text",
7269fedaf8SDaniel Grumberg           "spelling": " "
7369fedaf8SDaniel Grumberg         },
7469fedaf8SDaniel Grumberg         {
7569fedaf8SDaniel Grumberg           "kind": "identifier",
7669fedaf8SDaniel Grumberg           "spelling": "Union"
7769fedaf8SDaniel Grumberg         },
7869fedaf8SDaniel Grumberg         {
7969fedaf8SDaniel Grumberg           "kind": "text",
8069fedaf8SDaniel Grumberg           "spelling": ";"
8169fedaf8SDaniel Grumberg         }
8269fedaf8SDaniel Grumberg       ],
8369fedaf8SDaniel Grumberg       "docComment": {
8469fedaf8SDaniel Grumberg         "lines": [
8569fedaf8SDaniel Grumberg           {
8669fedaf8SDaniel Grumberg             "range": {
8769fedaf8SDaniel Grumberg               "end": {
8869fedaf8SDaniel Grumberg                 "character": 12,
8969fedaf8SDaniel Grumberg                 "line": 0
9069fedaf8SDaniel Grumberg               },
9169fedaf8SDaniel Grumberg               "start": {
9269fedaf8SDaniel Grumberg                 "character": 4,
9369fedaf8SDaniel Grumberg                 "line": 0
9469fedaf8SDaniel Grumberg               }
9569fedaf8SDaniel Grumberg             },
9669fedaf8SDaniel Grumberg             "text": "My Union"
9769fedaf8SDaniel Grumberg           }
9869fedaf8SDaniel Grumberg         ]
9969fedaf8SDaniel Grumberg       },
10069fedaf8SDaniel Grumberg       "identifier": {
10169fedaf8SDaniel Grumberg         "interfaceLanguage": "c",
10269fedaf8SDaniel Grumberg         "precise": "c:@U@Union"
10369fedaf8SDaniel Grumberg       },
10469fedaf8SDaniel Grumberg       "kind": {
10569fedaf8SDaniel Grumberg         "displayName": "Union",
10669fedaf8SDaniel Grumberg         "identifier": "c.union"
10769fedaf8SDaniel Grumberg       },
10869fedaf8SDaniel Grumberg       "location": {
10969fedaf8SDaniel Grumberg         "position": {
11069fedaf8SDaniel Grumberg           "character": 6,
11169fedaf8SDaniel Grumberg           "line": 1
11269fedaf8SDaniel Grumberg         },
11369fedaf8SDaniel Grumberg         "uri": "file://INPUT_DIR/input.h"
11469fedaf8SDaniel Grumberg       },
11569fedaf8SDaniel Grumberg       "names": {
11669fedaf8SDaniel Grumberg         "navigator": [
11769fedaf8SDaniel Grumberg           {
11869fedaf8SDaniel Grumberg             "kind": "identifier",
11969fedaf8SDaniel Grumberg             "spelling": "Union"
12069fedaf8SDaniel Grumberg           }
12169fedaf8SDaniel Grumberg         ],
12269fedaf8SDaniel Grumberg         "subHeading": [
12369fedaf8SDaniel Grumberg           {
12469fedaf8SDaniel Grumberg             "kind": "identifier",
12569fedaf8SDaniel Grumberg             "spelling": "Union"
12669fedaf8SDaniel Grumberg           }
12769fedaf8SDaniel Grumberg         ],
12869fedaf8SDaniel Grumberg         "title": "Union"
12969fedaf8SDaniel Grumberg       },
13069fedaf8SDaniel Grumberg       "pathComponents": [
13169fedaf8SDaniel Grumberg         "Union"
13269fedaf8SDaniel Grumberg       ]
13369fedaf8SDaniel Grumberg     },
13469fedaf8SDaniel Grumberg     {
13569fedaf8SDaniel Grumberg       "accessLevel": "public",
13669fedaf8SDaniel Grumberg       "declarationFragments": [
13769fedaf8SDaniel Grumberg         {
13869fedaf8SDaniel Grumberg           "kind": "typeIdentifier",
13969fedaf8SDaniel Grumberg           "preciseIdentifier": "c:I",
14069fedaf8SDaniel Grumberg           "spelling": "int"
14169fedaf8SDaniel Grumberg         },
14269fedaf8SDaniel Grumberg         {
14369fedaf8SDaniel Grumberg           "kind": "text",
14469fedaf8SDaniel Grumberg           "spelling": " "
14569fedaf8SDaniel Grumberg         },
14669fedaf8SDaniel Grumberg         {
14769fedaf8SDaniel Grumberg           "kind": "identifier",
14869fedaf8SDaniel Grumberg           "spelling": "a"
14969fedaf8SDaniel Grumberg         },
15069fedaf8SDaniel Grumberg         {
15169fedaf8SDaniel Grumberg           "kind": "text",
15269fedaf8SDaniel Grumberg           "spelling": ";"
15369fedaf8SDaniel Grumberg         }
15469fedaf8SDaniel Grumberg       ],
15569fedaf8SDaniel Grumberg       "docComment": {
15669fedaf8SDaniel Grumberg         "lines": [
15769fedaf8SDaniel Grumberg           {
15869fedaf8SDaniel Grumberg             "range": {
15969fedaf8SDaniel Grumberg               "end": {
16069fedaf8SDaniel Grumberg                 "character": 20,
16169fedaf8SDaniel Grumberg                 "line": 2
16269fedaf8SDaniel Grumberg               },
16369fedaf8SDaniel Grumberg               "start": {
16469fedaf8SDaniel Grumberg                 "character": 8,
16569fedaf8SDaniel Grumberg                 "line": 2
16669fedaf8SDaniel Grumberg               }
16769fedaf8SDaniel Grumberg             },
16869fedaf8SDaniel Grumberg             "text": "the a option"
16969fedaf8SDaniel Grumberg           }
17069fedaf8SDaniel Grumberg         ]
17169fedaf8SDaniel Grumberg       },
17269fedaf8SDaniel Grumberg       "identifier": {
17369fedaf8SDaniel Grumberg         "interfaceLanguage": "c",
17469fedaf8SDaniel Grumberg         "precise": "c:@U@Union@FI@a"
17569fedaf8SDaniel Grumberg       },
17669fedaf8SDaniel Grumberg       "kind": {
17769fedaf8SDaniel Grumberg         "displayName": "Instance Property",
17869fedaf8SDaniel Grumberg         "identifier": "c.property"
17969fedaf8SDaniel Grumberg       },
18069fedaf8SDaniel Grumberg       "location": {
18169fedaf8SDaniel Grumberg         "position": {
18269fedaf8SDaniel Grumberg           "character": 8,
18369fedaf8SDaniel Grumberg           "line": 3
18469fedaf8SDaniel Grumberg         },
18569fedaf8SDaniel Grumberg         "uri": "file://INPUT_DIR/input.h"
18669fedaf8SDaniel Grumberg       },
18769fedaf8SDaniel Grumberg       "names": {
18869fedaf8SDaniel Grumberg         "navigator": [
18969fedaf8SDaniel Grumberg           {
19069fedaf8SDaniel Grumberg             "kind": "identifier",
19169fedaf8SDaniel Grumberg             "spelling": "a"
19269fedaf8SDaniel Grumberg           }
19369fedaf8SDaniel Grumberg         ],
19469fedaf8SDaniel Grumberg         "subHeading": [
19569fedaf8SDaniel Grumberg           {
19669fedaf8SDaniel Grumberg             "kind": "identifier",
19769fedaf8SDaniel Grumberg             "spelling": "a"
19869fedaf8SDaniel Grumberg           }
19969fedaf8SDaniel Grumberg         ],
20069fedaf8SDaniel Grumberg         "title": "a"
20169fedaf8SDaniel Grumberg       },
20269fedaf8SDaniel Grumberg       "pathComponents": [
20369fedaf8SDaniel Grumberg         "Union",
20469fedaf8SDaniel Grumberg         "a"
20569fedaf8SDaniel Grumberg       ]
20669fedaf8SDaniel Grumberg     },
20769fedaf8SDaniel Grumberg     {
20869fedaf8SDaniel Grumberg       "accessLevel": "public",
20969fedaf8SDaniel Grumberg       "declarationFragments": [
21069fedaf8SDaniel Grumberg         {
21169fedaf8SDaniel Grumberg           "kind": "typeIdentifier",
21269fedaf8SDaniel Grumberg           "preciseIdentifier": "c:C",
21369fedaf8SDaniel Grumberg           "spelling": "char"
21469fedaf8SDaniel Grumberg         },
21569fedaf8SDaniel Grumberg         {
21669fedaf8SDaniel Grumberg           "kind": "text",
21769fedaf8SDaniel Grumberg           "spelling": " "
21869fedaf8SDaniel Grumberg         },
21969fedaf8SDaniel Grumberg         {
22069fedaf8SDaniel Grumberg           "kind": "identifier",
22169fedaf8SDaniel Grumberg           "spelling": "b"
22269fedaf8SDaniel Grumberg         },
22369fedaf8SDaniel Grumberg         {
22469fedaf8SDaniel Grumberg           "kind": "text",
22569fedaf8SDaniel Grumberg           "spelling": ";"
22669fedaf8SDaniel Grumberg         }
22769fedaf8SDaniel Grumberg       ],
22869fedaf8SDaniel Grumberg       "docComment": {
22969fedaf8SDaniel Grumberg         "lines": [
23069fedaf8SDaniel Grumberg           {
23169fedaf8SDaniel Grumberg             "range": {
23269fedaf8SDaniel Grumberg               "end": {
23369fedaf8SDaniel Grumberg                 "character": 20,
23469fedaf8SDaniel Grumberg                 "line": 4
23569fedaf8SDaniel Grumberg               },
23669fedaf8SDaniel Grumberg               "start": {
23769fedaf8SDaniel Grumberg                 "character": 8,
23869fedaf8SDaniel Grumberg                 "line": 4
23969fedaf8SDaniel Grumberg               }
24069fedaf8SDaniel Grumberg             },
24169fedaf8SDaniel Grumberg             "text": "the b option"
24269fedaf8SDaniel Grumberg           }
24369fedaf8SDaniel Grumberg         ]
24469fedaf8SDaniel Grumberg       },
24569fedaf8SDaniel Grumberg       "identifier": {
24669fedaf8SDaniel Grumberg         "interfaceLanguage": "c",
24769fedaf8SDaniel Grumberg         "precise": "c:@U@Union@FI@b"
24869fedaf8SDaniel Grumberg       },
24969fedaf8SDaniel Grumberg       "kind": {
25069fedaf8SDaniel Grumberg         "displayName": "Instance Property",
25169fedaf8SDaniel Grumberg         "identifier": "c.property"
25269fedaf8SDaniel Grumberg       },
25369fedaf8SDaniel Grumberg       "location": {
25469fedaf8SDaniel Grumberg         "position": {
25569fedaf8SDaniel Grumberg           "character": 9,
25669fedaf8SDaniel Grumberg           "line": 5
25769fedaf8SDaniel Grumberg         },
25869fedaf8SDaniel Grumberg         "uri": "file://INPUT_DIR/input.h"
25969fedaf8SDaniel Grumberg       },
26069fedaf8SDaniel Grumberg       "names": {
26169fedaf8SDaniel Grumberg         "navigator": [
26269fedaf8SDaniel Grumberg           {
26369fedaf8SDaniel Grumberg             "kind": "identifier",
26469fedaf8SDaniel Grumberg             "spelling": "b"
26569fedaf8SDaniel Grumberg           }
26669fedaf8SDaniel Grumberg         ],
26769fedaf8SDaniel Grumberg         "subHeading": [
26869fedaf8SDaniel Grumberg           {
26969fedaf8SDaniel Grumberg             "kind": "identifier",
27069fedaf8SDaniel Grumberg             "spelling": "b"
27169fedaf8SDaniel Grumberg           }
27269fedaf8SDaniel Grumberg         ],
27369fedaf8SDaniel Grumberg         "title": "b"
27469fedaf8SDaniel Grumberg       },
27569fedaf8SDaniel Grumberg       "pathComponents": [
27669fedaf8SDaniel Grumberg         "Union",
27769fedaf8SDaniel Grumberg         "b"
27869fedaf8SDaniel Grumberg       ]
27969fedaf8SDaniel Grumberg     }
28069fedaf8SDaniel Grumberg   ]
28169fedaf8SDaniel Grumberg }
282