xref: /llvm-project/clang/test/ExtractAPI/typedef_struct_enum.c (revision 2bcbe40f8a1c6cc9a256711261d8aa8fde50f7b3)
1 // RUN: rm -rf %t
2 // RUN: %clang_cc1 -extract-api --pretty-sgf --emit-sgf-symbol-labels-for-testing \
3 // RUN:   -x c-header %s -triple arm64-apple-macos -o %t/output.symbols.json -verify
4 
5 // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix TEST
6 typedef struct Test {
7 } Test;
8 // TEST-LABEL: "!testLabel": "c:@S@Test"
9 // TEST:      "declarationFragments": [
10 // TEST-NEXT:   {
11 // TEST-NEXT:     "kind": "keyword",
12 // TEST-NEXT:     "spelling": "typedef"
13 // TEST-NEXT:   },
14 // TEST-NEXT:   {
15 // TEST-NEXT:     "kind": "text",
16 // TEST-NEXT:     "spelling": " "
17 // TEST-NEXT:   },
18 // TEST-NEXT:   {
19 // TEST-NEXT:     "kind": "keyword",
20 // TEST-NEXT:     "spelling": "struct"
21 // TEST-NEXT:   },
22 // TEST-NEXT:   {
23 // TEST-NEXT:     "kind": "text",
24 // TEST-NEXT:     "spelling": " "
25 // TEST-NEXT:   },
26 // TEST-NEXT:   {
27 // TEST-NEXT:     "kind": "identifier",
28 // TEST-NEXT:     "spelling": "Test"
29 // TEST-NEXT:   },
30 // TEST-NEXT:   {
31 // TEST-NEXT:     "kind": "text",
32 // TEST-NEXT:     "spelling": " { ... } "
33 // TEST-NEXT:   },
34 // TEST-NEXT:   {
35 // TEST-NEXT:     "kind": "identifier",
36 // TEST-NEXT:     "spelling": "Test"
37 // TEST-NEXT:   },
38 // TEST-NEXT:   {
39 // TEST-NEXT:     "kind": "text",
40 // TEST-NEXT:     "spelling": ";"
41 // TEST-NEXT:   }
42 // TEST-NEXT: ],
43 // TEST: "displayName": "Structure",
44 // TEST: "title": "Test"
45 
46 // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix TEST2
47 typedef enum Test2 {
48   simple
49 } Test2;
50 
51 // TEST2-LABEL: "!testLabel": "c:@E@Test2"
52 // TEST2:      "declarationFragments": [
53 // TEST2-NEXT:   {
54 // TEST2-NEXT:     "kind": "keyword",
55 // TEST2-NEXT:     "spelling": "typedef"
56 // TEST2-NEXT:   },
57 // TEST2-NEXT:   {
58 // TEST2-NEXT:     "kind": "text",
59 // TEST2-NEXT:     "spelling": " "
60 // TEST2-NEXT:   },
61 // TEST2-NEXT:   {
62 // TEST2-NEXT:     "kind": "keyword",
63 // TEST2-NEXT:     "spelling": "enum"
64 // TEST2-NEXT:   },
65 // TEST2-NEXT:   {
66 // TEST2-NEXT:     "kind": "text",
67 // TEST2-NEXT:     "spelling": " "
68 // TEST2-NEXT:   },
69 // TEST2-NEXT:   {
70 // TEST2-NEXT:     "kind": "identifier",
71 // TEST2-NEXT:     "spelling": "Test2"
72 // TEST2-NEXT:   },
73 // TEST2-NEXT:   {
74 // TEST2-NEXT:     "kind": "text",
75 // TEST2-NEXT:     "spelling": " : "
76 // TEST2-NEXT:   },
77 // TEST2-NEXT:   {
78 // TEST2-NEXT:     "kind": "typeIdentifier",
79 // TEST2-NEXT:     "preciseIdentifier": "c:i",
80 // TEST2-NEXT:     "spelling": "unsigned int"
81 // TEST2-NEXT:   },
82 // TEST2-NEXT:   {
83 // TEST2-NEXT:     "kind": "text",
84 // TEST2-NEXT:     "spelling": " { ... } "
85 // TEST2-NEXT:   },
86 // TEST2-NEXT:   {
87 // TEST2-NEXT:     "kind": "identifier",
88 // TEST2-NEXT:     "spelling": "Test2"
89 // TEST2-NEXT:   },
90 // TEST2-NEXT:   {
91 // TEST2-NEXT:     "kind": "text",
92 // TEST2-NEXT:     "spelling": ";"
93 // TEST2-NEXT:   }
94 // TEST2-NEXT: ],
95 // TEST2: "displayName": "Enumeration",
96 // TEST2: "title": "Test2"
97 
98 struct Foo;
99 
100 // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix TYPEDEF
101 typedef struct Foo TypedefedFoo;
102 // TYPEDEF-LABEL: "!testLabel": "c:typedef_struct_enum.c@T@TypedefedFoo"
103 // TYPEDEF:      "declarationFragments": [
104 // TYPEDEF-NEXT:   {
105 // TYPEDEF-NEXT:     "kind": "keyword",
106 // TYPEDEF-NEXT:     "spelling": "typedef"
107 // TYPEDEF-NEXT:   },
108 // TYPEDEF-NEXT:   {
109 // TYPEDEF-NEXT:     "kind": "text",
110 // TYPEDEF-NEXT:     "spelling": " "
111 // TYPEDEF-NEXT:   },
112 // TYPEDEF-NEXT:   {
113 // TYPEDEF-NEXT:     "kind": "keyword",
114 // TYPEDEF-NEXT:     "spelling": "struct"
115 // TYPEDEF-NEXT:   },
116 // TYPEDEF-NEXT:   {
117 // TYPEDEF-NEXT:     "kind": "text",
118 // TYPEDEF-NEXT:     "spelling": " "
119 // TYPEDEF-NEXT:   },
120 // TYPEDEF-NEXT:   {
121 // TYPEDEF-NEXT:     "kind": "typeIdentifier",
122 // TYPEDEF-NEXT:     "preciseIdentifier": "c:@S@Foo",
123 // TYPEDEF-NEXT:     "spelling": "Foo"
124 // TYPEDEF-NEXT:   },
125 // TYPEDEF-NEXT:   {
126 // TYPEDEF-NEXT:     "kind": "text",
127 // TYPEDEF-NEXT:     "spelling": " "
128 // TYPEDEF-NEXT:   },
129 // TYPEDEF-NEXT:   {
130 // TYPEDEF-NEXT:     "kind": "identifier",
131 // TYPEDEF-NEXT:     "spelling": "TypedefedFoo"
132 // TYPEDEF-NEXT:   },
133 // TYPEDEF-NEXT:   {
134 // TYPEDEF-NEXT:     "kind": "text",
135 // TYPEDEF-NEXT:     "spelling": ";"
136 // TYPEDEF-NEXT:   }
137 // TYPEDEF-NEXT: ],
138 // TYPEDEF: "displayName": "Type Alias",
139 // TYPEDEF: "title": "TypedefedFoo"
140 // TYPEDEF: "type": "c:@S@Foo"
141 
142 struct Foo {
143     int bar;
144 };
145 
146 // expected-no-diagnostics
147