Coverage Report

Created: 2018-09-25 00:18

/Users/buildslave/jenkins/workspace/clang-stage2-coverage-R/clang-build/tools/clang/include/clang/Sema/AttrParsedAttrKinds.inc
Line
Count
Source (jump to first uncovered line)
1
/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
2
|*                                                                            *|
3
|* Attribute name matcher                                                     *|
4
|*                                                                            *|
5
|* Automatically generated file, do not edit!                                 *|
6
|*                                                                            *|
7
\*===----------------------------------------------------------------------===*/
8
9
9.82M
static ParsedAttr::Kind getAttrKind(StringRef Name, ParsedAttr::Syntax Syntax) {
10
9.82M
  if (ParsedAttr::AS_GNU == Syntax) {
11
9.49M
  switch (Name.size()) {
12
9.49M
  
default: break0
;
13
9.49M
  case 3:  // 3 strings to match.
14
211
    switch (Name[0]) {
15
211
    
default: break0
;
16
211
    case 'f':  // 1 string to match.
17
14
      if (memcmp(Name.data()+1, "ar", 2) != 0)
18
0
        break;
19
14
      return ParsedAttr::AT_MipsLongCall;  // "far"
20
14
    case 'h':  // 1 string to match.
21
4
      if (memcmp(Name.data()+1, "ot", 2) != 0)
22
0
        break;
23
4
      return ParsedAttr::AT_Hot;   // "hot"
24
193
    case 'p':  // 1 string to match.
25
193
      if (memcmp(Name.data()+1, "cs", 2) != 0)
26
0
        break;
27
193
      return ParsedAttr::AT_Pcs;  // "pcs"
28
0
    }
29
0
    break;
30
51.4k
  case 4:  // 7 strings to match.
31
51.4k
    switch (Name[0]) {
32
51.4k
    
default: break1
;
33
51.4k
    case 'c':  // 1 string to match.
34
27
      if (memcmp(Name.data()+1, "old", 3) != 0)
35
0
        break;
36
27
      return ParsedAttr::AT_Cold;  // "cold"
37
603
    case 'h':  // 1 string to match.
38
603
      if (memcmp(Name.data()+1, "ost", 3) != 0)
39
0
        break;
40
603
      return ParsedAttr::AT_CUDAHost;  // "host"
41
7.10k
    case 'm':  // 1 string to match.
42
7.10k
      if (memcmp(Name.data()+1, "ode", 3) != 0)
43
0
        break;
44
7.10k
      return ParsedAttr::AT_Mode;  // "mode"
45
7.10k
    case 'n':  // 1 string to match.
46
14
      if (memcmp(Name.data()+1, "ear", 3) != 0)
47
0
        break;
48
14
      return ParsedAttr::AT_MipsShortCall;   // "near"
49
3.49k
    case 'p':  // 1 string to match.
50
3.49k
      if (memcmp(Name.data()+1, "ure", 3) != 0)
51
0
        break;
52
3.49k
      return ParsedAttr::AT_Pure;  // "pure"
53
7.17k
    case 'u':  // 1 string to match.
54
7.17k
      if (memcmp(Name.data()+1, "sed", 3) != 0)
55
0
        break;
56
7.17k
      return ParsedAttr::AT_Used;  // "used"
57
32.9k
    case 'w':  // 1 string to match.
58
32.9k
      if (memcmp(Name.data()+1, "eak", 3) != 0)
59
0
        break;
60
32.9k
      return ParsedAttr::AT_Weak;  // "weak"
61
1
    }
62
1
    break;
63
185k
  case 5:  // 6 strings to match.
64
185k
    switch (Name[0]) {
65
185k
    
default: break0
;
66
185k
    case 'a':  // 1 string to match.
67
188
      if (memcmp(Name.data()+1, "lias", 4) != 0)
68
0
        break;
69
188
      return ParsedAttr::AT_Alias;   // "alias"
70
185k
    case 'c':  // 2 strings to match.
71
185k
      switch (Name[1]) {
72
185k
      
default: break0
;
73
185k
      case 'd':  // 1 string to match.
74
97
        if (memcmp(Name.data()+2, "ecl", 3) != 0)
75
0
          break;
76
97
        return ParsedAttr::AT_CDecl;   // "cdecl"
77
185k
      case 'o':  // 1 string to match.
78
185k
        if (memcmp(Name.data()+2, "nst", 3) != 0)
79
0
          break;
80
185k
        return ParsedAttr::AT_Const;  // "const"
81
0
      }
82
0
      break;
83
26
    case 'i':  // 1 string to match.
84
26
      if (memcmp(Name.data()+1, "func", 4) != 0)
85
0
        break;
86
26
      return ParsedAttr::AT_IFunc;   // "ifunc"
87
30
    case 'n':  // 2 strings to match.
88
30
      switch (Name[1]) {
89
30
      
default: break0
;
90
30
      case 'a':  // 1 string to match.
91
25
        if (memcmp(Name.data()+2, "ked", 3) != 0)
92
0
          break;
93
25
        return ParsedAttr::AT_Naked;   // "naked"
94
25
      case 'o':  // 1 string to match.
95
5
        if (memcmp(Name.data()+2, "svm", 3) != 0)
96
0
          break;
97
5
        return ParsedAttr::AT_OpenCLNoSVM;  // "nosvm"
98
0
      }
99
0
      break;
100
0
    }
101
0
    break;
102
1.27M
  case 6:  // 15 strings to match.
103
1.27M
    switch (Name[0]) {
104
1.27M
    
default: break6
;
105
1.27M
    case 'b':  // 1 string to match.
106
1.49k
      if (memcmp(Name.data()+1, "locks", 5) != 0)
107
0
        break;
108
1.49k
      return ParsedAttr::AT_Blocks;  // "blocks"
109
1.49k
    case 'c':  // 1 string to match.
110
9
      if (memcmp(Name.data()+1, "ommon", 5) != 0)
111
0
        break;
112
9
      return ParsedAttr::AT_Common;  // "common"
113
1.30k
    case 'd':  // 1 string to match.
114
1.30k
      if (memcmp(Name.data()+1, "evice", 5) != 0)
115
0
        break;
116
1.30k
      return ParsedAttr::AT_CUDADevice;  // "device"
117
152k
    case 'f':  // 1 string to match.
118
152k
      if (memcmp(Name.data()+1, "ormat", 5) != 0)
119
1
        break;
120
152k
      return ParsedAttr::AT_Format;  // "format"
121
152k
    case 'g':  // 1 string to match.
122
157
      if (memcmp(Name.data()+1, "lobal", 5) != 0)
123
0
        break;
124
157
      return ParsedAttr::AT_CUDAGlobal;  // "global"
125
157
    case 'k':  // 1 string to match.
126
4
      if (memcmp(Name.data()+1, "ernel", 5) != 0)
127
0
        break;
128
4
      return ParsedAttr::AT_RenderScriptKernel;  // "kernel"
129
1.71k
    case 'm':  // 3 strings to match.
130
1.71k
      switch (Name[1]) {
131
1.71k
      
default: break0
;
132
1.71k
      case 'a':  // 1 string to match.
133
1.66k
        if (memcmp(Name.data()+2, "lloc", 4) != 0)
134
0
          break;
135
1.66k
        return ParsedAttr::AT_Restrict;  // "malloc"
136
1.66k
      case 'i':  // 1 string to match.
137
17
        if (memcmp(Name.data()+2, "ps16", 4) != 0)
138
0
          break;
139
17
        return ParsedAttr::AT_Mips16;  // "mips16"
140
36
      case 's':  // 1 string to match.
141
36
        if (memcmp(Name.data()+2, "_abi", 4) != 0)
142
0
          break;
143
36
        return ParsedAttr::AT_MSABI;  // "ms_abi"
144
0
      }
145
0
      break;
146
6.83k
    case 'p':  // 2 strings to match.
147
6.83k
      if (Name[1] != 'a')
148
0
        break;
149
6.83k
      switch (Name[2]) {
150
6.83k
      
default: break0
;
151
6.83k
      case 'c':  // 1 string to match.
152
6.83k
        if (memcmp(Name.data()+3, "ked", 3) != 0)
153
0
          break;
154
6.83k
        return ParsedAttr::AT_Packed;  // "packed"
155
6.83k
      case 's':  // 1 string to match.
156
1
        if (memcmp(Name.data()+3, "cal", 3) != 0)
157
0
          break;
158
1
        return ParsedAttr::AT_Pascal;  // "pascal"
159
0
      }
160
0
      break;
161
213
    case 's':  // 2 strings to match.
162
213
      switch (Name[1]) {
163
213
      
default: break1
;
164
213
      case 'h':  // 1 string to match.
165
207
        if (memcmp(Name.data()+2, "ared", 4) != 0)
166
0
          break;
167
207
        return ParsedAttr::AT_CUDAShared;  // "shared"
168
207
      case 'i':  // 1 string to match.
169
5
        if (memcmp(Name.data()+2, "gnal", 4) != 0)
170
0
          break;
171
5
        return ParsedAttr::AT_AVRSignal;  // "signal"
172
1
      }
173
1
      break;
174
1.07M
    case 't':  // 1 string to match.
175
1.07M
      if (memcmp(Name.data()+1, "arget", 5) != 0)
176
0
        break;
177
1.07M
      return ParsedAttr::AT_Target;  // "target"
178
1.07M
    case 'u':  // 1 string to match.
179
40.7k
      if (memcmp(Name.data()+1, "nused", 5) != 0)
180
0
        break;
181
40.7k
      return ParsedAttr::AT_Unused;  // "unused"
182
8
    }
183
8
    break;
184
818k
  case 7:  // 18 strings to match.
185
818k
    switch (Name[0]) {
186
818k
    
default: break0
;
187
818k
    case '_':  // 1 string to match.
188
5
      if (memcmp(Name.data()+1, "_const", 6) != 0)
189
0
        break;
190
5
      return ParsedAttr::AT_Const;   // "__const"
191
40.3k
    case 'a':  // 2 strings to match.
192
40.3k
      switch (Name[1]) {
193
40.3k
      
default: break0
;
194
40.3k
      case 'b':  // 1 string to match.
195
262
        if (memcmp(Name.data()+2, "i_tag", 5) != 0)
196
0
          break;
197
262
        return ParsedAttr::AT_AbiTag;  // "abi_tag"
198
40.0k
      case 'l':  // 1 string to match.
199
40.0k
        if (memcmp(Name.data()+2, "igned", 5) != 0)
200
0
          break;
201
40.0k
        return ParsedAttr::AT_Aligned;  // "aligned"
202
0
      }
203
0
      break;
204
12
    case 'b':  // 1 string to match.
205
12
      if (memcmp(Name.data()+1, "ounded", 6) != 0)
206
0
        break;
207
12
      return ParsedAttr::IgnoredAttribute;   // "bounded"
208
114
    case 'c':  // 1 string to match.
209
114
      if (memcmp(Name.data()+1, "leanup", 6) != 0)
210
0
        break;
211
114
      return ParsedAttr::AT_Cleanup;   // "cleanup"
212
114
    case 'f':  // 1 string to match.
213
10
      if (memcmp(Name.data()+1, "latten", 6) != 0)
214
0
        break;
215
10
      return ParsedAttr::AT_Flatten;   // "flatten"
216
25
    case 'm':  // 1 string to match.
217
25
      if (memcmp(Name.data()+1, "insize", 6) != 0)
218
0
        break;
219
25
      return ParsedAttr::AT_MinSize;   // "minsize"
220
765k
    case 'n':  // 4 strings to match.
221
765k
      switch (Name[1]) {
222
765k
      
default: break0
;
223
765k
      case 'o':  // 3 strings to match.
224
765k
        switch (Name[2]) {
225
765k
        
default: break0
;
226
765k
        case 'd':  // 1 string to match.
227
746k
          if (memcmp(Name.data()+3, "ebug", 4) != 0)
228
0
            break;
229
746k
          return ParsedAttr::AT_NoDebug;   // "nodebug"
230
746k
        case 'n':  // 1 string to match.
231
13.2k
          if (memcmp(Name.data()+3, "null", 4) != 0)
232
0
            break;
233
13.2k
          return ParsedAttr::AT_NonNull;   // "nonnull"
234
13.2k
        case 't':  // 1 string to match.
235
5.31k
          if (memcmp(Name.data()+3, "hrow", 4) != 0)
236
0
            break;
237
5.31k
          return ParsedAttr::AT_NoThrow;  // "nothrow"
238
0
        }
239
0
        break;
240
6
      case 'v':  // 1 string to match.
241
6
        if (memcmp(Name.data()+2, "_weak", 5) != 0)
242
0
          break;
243
6
        return ParsedAttr::IgnoredAttribute;  // "nv_weak"
244
0
      }
245
0
      break;
246
707
    case 'o':  // 2 strings to match.
247
707
      switch (Name[1]) {
248
707
      
default: break0
;
249
707
      case 'b':  // 1 string to match.
250
643
        if (memcmp(Name.data()+2, "jc_gc", 5) != 0)
251
0
          break;
252
643
        return ParsedAttr::AT_ObjCGC;  // "objc_gc"
253
643
      case 'p':  // 1 string to match.
254
64
        if (memcmp(Name.data()+2, "tnone", 5) != 0)
255
0
          break;
256
64
        return ParsedAttr::AT_OptimizeNone;  // "optnone"
257
0
      }
258
0
      break;
259
153
    case 'r':  // 2 strings to match.
260
153
      if (memcmp(Name.data()+1, "eg", 2) != 0)
261
0
        break;
262
153
      switch (Name[3]) {
263
153
      
default: break0
;
264
153
      case 'c':  // 1 string to match.
265
11
        if (memcmp(Name.data()+4, "all", 3) != 0)
266
0
          break;
267
11
        return ParsedAttr::AT_RegCall;   // "regcall"
268
142
      case 'p':  // 1 string to match.
269
142
        if (memcmp(Name.data()+4, "arm", 3) != 0)
270
0
          break;
271
142
        return ParsedAttr::AT_Regparm;  // "regparm"
272
0
      }
273
0
      break;
274
11.7k
    case 's':  // 2 strings to match.
275
11.7k
      switch (Name[1]) {
276
11.7k
      
default: break0
;
277
11.7k
      case 'e':  // 1 string to match.
278
11.6k
        if (memcmp(Name.data()+2, "ction", 5) != 0)
279
0
          break;
280
11.6k
        return ParsedAttr::AT_Section;   // "section"
281
11.6k
      case 't':  // 1 string to match.
282
107
        if (memcmp(Name.data()+2, "dcall", 5) != 0)
283
0
          break;
284
107
        return ParsedAttr::AT_StdCall;  // "stdcall"
285
0
      }
286
0
      break;
287
73
    case 'w':  // 1 string to match.
288
73
      if (memcmp(Name.data()+1, "eakref", 6) != 0)
289
0
        break;
290
73
      return ParsedAttr::AT_WeakRef;  // "weakref"
291
0
    }
292
0
    break;
293
40.1k
  case 8:  // 15 strings to match.
294
40.1k
    switch (Name[0]) {
295
40.1k
    
default: break0
;
296
40.1k
    case 'N':  // 1 string to match.
297
17
      if (memcmp(Name.data()+1, "SObject", 7) != 0)
298
0
        break;
299
17
      return ParsedAttr::AT_ObjCNSObject;  // "NSObject"
300
488
    case 'a':  // 1 string to match.
301
488
      if (memcmp(Name.data()+1, "nnotate", 7) != 0)
302
0
        break;
303
488
      return ParsedAttr::AT_Annotate;  // "annotate"
304
488
    case 'c':  // 1 string to match.
305
120
      if (memcmp(Name.data()+1, "onstant", 7) != 0)
306
0
        break;
307
120
      return ParsedAttr::AT_CUDAConstant;  // "constant"
308
120
    case 'f':  // 1 string to match.
309
93
      if (memcmp(Name.data()+1, "astcall", 7) != 0)
310
0
        break;
311
93
      return ParsedAttr::AT_FastCall;  // "fastcall"
312
102
    case 'i':  // 2 strings to match.
313
102
      if (Name[1] != 'b')
314
0
        break;
315
102
      switch (Name[2]) {
316
102
      
default: break0
;
317
102
      case 'a':  // 1 string to match.
318
57
        if (memcmp(Name.data()+3, "ction", 5) != 0)
319
0
          break;
320
57
        return ParsedAttr::AT_IBAction;  // "ibaction"
321
57
      case 'o':  // 1 string to match.
322
45
        if (memcmp(Name.data()+3, "utlet", 5) != 0)
323
0
          break;
324
45
        return ParsedAttr::AT_IBOutlet;  // "iboutlet"
325
0
      }
326
0
      break;
327
64
    case 'l':  // 1 string to match.
328
64
      if (memcmp(Name.data()+1, "ockable", 7) != 0)
329
0
        break;
330
64
      return ParsedAttr::AT_Lockable;  // "lockable"
331
38.5k
    case 'n':  // 5 strings to match.
332
38.5k
      if (Name[1] != 'o')
333
0
        break;
334
38.5k
      switch (Name[2]) {
335
38.5k
      
default: break0
;
336
38.5k
      case 'c':  // 1 string to match.
337
4
        if (memcmp(Name.data()+3, "ommon", 5) != 0)
338
0
          break;
339
4
        return ParsedAttr::AT_NoCommon;  // "nocommon"
340
1.84k
      case 'e':  // 1 string to match.
341
1.84k
        if (memcmp(Name.data()+3, "scape", 5) != 0)
342
0
          break;
343
1.84k
        return ParsedAttr::AT_NoEscape;  // "noescape"
344
12.8k
      case 'i':  // 1 string to match.
345
12.8k
        if (memcmp(Name.data()+3, "nline", 5) != 0)
346
0
          break;
347
12.8k
        return ParsedAttr::AT_NoInline;  // "noinline"
348
12.8k
      case 'm':  // 1 string to match.
349
10
        if (memcmp(Name.data()+3, "ips16", 5) != 0)
350
0
          break;
351
10
        return ParsedAttr::AT_NoMips16;  // "nomips16"
352
23.8k
      case 'r':  // 1 string to match.
353
23.8k
        if (memcmp(Name.data()+3, "eturn", 5) != 0)
354
0
          break;
355
23.8k
        return ParsedAttr::AT_NoReturn;  // "noreturn"
356
0
      }
357
0
      break;
358
668
    case 's':  // 2 strings to match.
359
668
      switch (Name[1]) {
360
668
      
default: break0
;
361
668
      case 'e':  // 1 string to match.
362
655
        if (memcmp(Name.data()+2, "ntinel", 6) != 0)
363
0
          break;
364
655
        return ParsedAttr::AT_Sentinel;  // "sentinel"
365
655
      case 'y':  // 1 string to match.
366
13
        if (memcmp(Name.data()+2, "sv_abi", 6) != 0)
367
0
          break;
368
13
        return ParsedAttr::AT_SysVABI;  // "sysv_abi"
369
0
      }
370
0
      break;
371
20
    case 't':  // 1 string to match.
372
20
      if (memcmp(Name.data()+1, "hiscall", 7) != 0)
373
1
        break;
374
19
      return ParsedAttr::AT_ThisCall;  // "thiscall"
375
1
    }
376
1
    break;
377
35.3k
  case 9:  // 13 strings to match.
378
35.3k
    switch (Name[0]) {
379
35.3k
    
default: break1
;
380
35.3k
    case 'd':  // 2 strings to match.
381
918
      if (memcmp(Name.data()+1, "ll", 2) != 0)
382
0
        break;
383
918
      switch (Name[3]) {
384
918
      
default: break0
;
385
918
      case 'e':  // 1 string to match.
386
335
        if (memcmp(Name.data()+4, "xport", 5) != 0)
387
0
          break;
388
335
        return ParsedAttr::AT_DLLExport;   // "dllexport"
389
583
      case 'i':  // 1 string to match.
390
583
        if (memcmp(Name.data()+4, "mport", 5) != 0)
391
0
          break;
392
583
        return ParsedAttr::AT_DLLImport;  // "dllimport"
393
0
      }
394
0
      break;
395
26.3k
    case 'e':  // 1 string to match.
396
26.3k
      if (memcmp(Name.data()+1, "nable_if", 8) != 0)
397
0
        break;
398
26.3k
      return ParsedAttr::AT_EnableIf;  // "enable_if"
399
26.3k
    case 'f':  // 1 string to match.
400
1.06k
      if (memcmp(Name.data()+1, "lag_enum", 8) != 0)
401
0
        break;
402
1.06k
      return ParsedAttr::AT_FlagEnum;  // "flag_enum"
403
1.06k
    case 'i':  // 1 string to match.
404
447
      if (memcmp(Name.data()+1, "nterrupt", 8) != 0)
405
0
        break;
406
447
      return ParsedAttr::AT_Interrupt;   // "interrupt"
407
447
    case 'l':  // 1 string to match.
408
14
      if (memcmp(Name.data()+1, "ong_call", 8) != 0)
409
0
        break;
410
14
      return ParsedAttr::AT_MipsLongCall;  // "long_call"
411
5.33k
    case 'm':  // 3 strings to match.
412
5.33k
      switch (Name[1]) {
413
5.33k
      
default: break0
;
414
5.33k
      case 'a':  // 1 string to match.
415
5.24k
        if (memcmp(Name.data()+2, "y_alias", 7) != 0)
416
0
          break;
417
5.24k
        return ParsedAttr::AT_MayAlias;  // "may_alias"
418
5.24k
      case 'i':  // 1 string to match.
419
8
        if (memcmp(Name.data()+2, "cromips", 7) != 0)
420
0
          break;
421
8
        return ParsedAttr::AT_MicroMips;   // "micromips"
422
75
      case 's':  // 1 string to match.
423
75
        if (memcmp(Name.data()+2, "_struct", 7) != 0)
424
0
          break;
425
75
        return ParsedAttr::AT_MSStruct;  // "ms_struct"
426
0
      }
427
0
      break;
428
1.18k
    case 's':  // 2 strings to match.
429
1.18k
      switch (Name[1]) {
430
1.18k
      
default: break1
;
431
1.18k
      case 'e':  // 1 string to match.
432
3
        if (memcmp(Name.data()+2, "lectany", 7) != 0)
433
0
          break;
434
3
        return ParsedAttr::AT_SelectAny;   // "selectany"
435
1.18k
      case 'w':  // 1 string to match.
436
1.18k
        if (memcmp(Name.data()+2, "iftcall", 7) != 0)
437
0
          break;
438
1.18k
        return ParsedAttr::AT_SwiftCall;  // "swiftcall"
439
1
      }
440
1
      break;
441
42
    case 't':  // 1 string to match.
442
42
      if (memcmp(Name.data()+1, "ls_model", 8) != 0)
443
0
        break;
444
42
      return ParsedAttr::AT_TLSModel;  // "tls_model"
445
42
    case 'v':  // 1 string to match.
446
11
      if (memcmp(Name.data()+1, "ecreturn", 8) != 0)
447
0
        break;
448
11
      return ParsedAttr::AT_VecReturn;  // "vecreturn"
449
2
    }
450
2
    break;
451
2.27M
  case 10:   // 15 strings to match.
452
2.27M
    switch (Name[0]) {
453
2.27M
    
default: break0
;
454
2.27M
    case 'a':  // 2 strings to match.
455
20.8k
      switch (Name[1]) {
456
20.8k
      
default: break0
;
457
20.8k
      case 'l':  // 1 string to match.
458
20.7k
        if (memcmp(Name.data()+2, "loc_size", 8) != 0)
459
0
          break;
460
20.7k
        return ParsedAttr::AT_AllocSize;   // "alloc_size"
461
20.7k
      case 'r':  // 1 string to match.
462
37
        if (memcmp(Name.data()+2, "tificial", 8) != 0)
463
0
          break;
464
37
        return ParsedAttr::AT_Artificial;  // "artificial"
465
0
      }
466
0
      break;
467
2.88k
    case 'c':  // 3 strings to match.
468
2.88k
      switch (Name[1]) {
469
2.88k
      
default: break0
;
470
2.88k
      case 'a':  // 1 string to match.
471
63
        if (memcmp(Name.data()+2, "pability", 8) != 0)
472
0
          break;
473
63
        return ParsedAttr::AT_Capability;  // "capability"
474
2.82k
      case 'o':  // 2 strings to match.
475
2.82k
        if (Name[2] != 'n')
476
0
          break;
477
2.82k
        switch (Name[3]) {
478
2.82k
        
default: break0
;
479
2.82k
        case 's':  // 1 string to match.
480
26
          if (memcmp(Name.data()+4, "umable", 6) != 0)
481
0
            break;
482
26
          return ParsedAttr::AT_Consumable;  // "consumable"
483
2.79k
        case 'v':  // 1 string to match.
484
2.79k
          if (memcmp(Name.data()+4, "ergent", 6) != 0)
485
0
            break;
486
2.79k
          return ParsedAttr::AT_Convergent;  // "convergent"
487
0
        }
488
0
        break;
489
0
      }
490
0
      break;
491
20.9k
    case 'd':  // 2 strings to match.
492
20.9k
      if (Name[1] != 'e')
493
0
        break;
494
20.9k
      switch (Name[2]) {
495
20.9k
      
default: break0
;
496
20.9k
      case 'p':  // 1 string to match.
497
20.8k
        if (memcmp(Name.data()+3, "recated", 7) != 0)
498
0
          break;
499
20.8k
        return ParsedAttr::AT_Deprecated;  // "deprecated"
500
20.8k
      case 's':  // 1 string to match.
501
38
        if (memcmp(Name.data()+3, "tructor", 7) != 0)
502
0
          break;
503
38
        return ParsedAttr::AT_Destructor;  // "destructor"
504
0
      }
505
0
      break;
506
745
    case 'f':  // 1 string to match.
507
745
      if (memcmp(Name.data()+1, "ormat_arg", 9) != 0)
508
0
        break;
509
745
      return ParsedAttr::AT_FormatArg;   // "format_arg"
510
1.72k
    case 'g':  // 2 strings to match.
511
1.72k
      switch (Name[1]) {
512
1.72k
      
default: break0
;
513
1.72k
      case 'n':  // 1 string to match.
514
110
        if (memcmp(Name.data()+2, "u_inline", 8) != 0)
515
0
          break;
516
110
        return ParsedAttr::AT_GNUInline;   // "gnu_inline"
517
1.61k
      case 'u':  // 1 string to match.
518
1.61k
        if (memcmp(Name.data()+2, "arded_by", 8) != 0)
519
0
          break;
520
1.61k
        return ParsedAttr::AT_GuardedBy;  // "guarded_by"
521
0
      }
522
0
      break;
523
11
    case 'n':  // 2 strings to match.
524
11
      if (Name[1] != 'o')
525
0
        break;
526
11
      switch (Name[2]) {
527
11
      
default: break0
;
528
11
      case '_':  // 1 string to match.
529
0
        if (memcmp(Name.data()+3, "destroy", 7) != 0)
530
0
          break;
531
0
        return ParsedAttr::AT_NoDestroy;   // "no_destroy"
532
11
      case 'c':  // 1 string to match.
533
11
        if (memcmp(Name.data()+3, "f_check", 7) != 0)
534
0
          break;
535
11
        return ParsedAttr::AT_AnyX86NoCfCheck;  // "nocf_check"
536
0
      }
537
0
      break;
538
14
    case 's':  // 1 string to match.
539
14
      if (memcmp(Name.data()+1, "hort_call", 9) != 0)
540
0
        break;
541
14
      return ParsedAttr::AT_MipsShortCall;   // "short_call"
542
2.22M
    case 'v':  // 2 strings to match.
543
2.22M
      switch (Name[1]) {
544
2.22M
      
default: break0
;
545
2.22M
      case 'e':  // 1 string to match.
546
17
        if (memcmp(Name.data()+2, "ctorcall", 8) != 0)
547
0
          break;
548
17
        return ParsedAttr::AT_VectorCall;  // "vectorcall"
549
2.22M
      case 'i':  // 1 string to match.
550
2.22M
        if (memcmp(Name.data()+2, "sibility", 8) != 0)
551
0
          break;
552
2.22M
        return ParsedAttr::AT_Visibility;  // "visibility"
553
0
      }
554
0
      break;
555
0
    }
556
0
    break;
557
51.4k
  case 11:   // 16 strings to match.
558
51.4k
    switch (Name[0]) {
559
51.4k
    
default: break0
;
560
51.4k
    case 'a':  // 2 strings to match.
561
369
      if (Name[1] != 'l')
562
0
        break;
563
369
      switch (Name[2]) {
564
369
      
default: break0
;
565
369
      case 'i':  // 1 string to match.
566
321
        if (memcmp(Name.data()+3, "gn_value", 8) != 0)
567
0
          break;
568
321
        return ParsedAttr::AT_AlignValue;  // "align_value"
569
321
      case 'l':  // 1 string to match.
570
48
        if (memcmp(Name.data()+3, "oc_align", 8) != 0)
571
0
          break;
572
48
        return ParsedAttr::AT_AllocAlign;  // "alloc_align"
573
0
      }
574
0
      break;
575
480
    case 'c':  // 2 strings to match.
576
480
      switch (Name[1]) {
577
480
      
default: break0
;
578
480
      case 'f':  // 1 string to match.
579
429
        if (memcmp(Name.data()+2, "_consumed", 9) != 0)
580
0
          break;
581
429
        return ParsedAttr::AT_CFConsumed;  // "cf_consumed"
582
429
      case 'o':  // 1 string to match.
583
51
        if (memcmp(Name.data()+2, "nstructor", 9) != 0)
584
0
          break;
585
51
        return ParsedAttr::AT_Constructor;  // "constructor"
586
0
      }
587
0
      break;
588
15.5k
    case 'd':  // 1 string to match.
589
15.5k
      if (memcmp(Name.data()+1, "iagnose_if", 10) != 0)
590
0
        break;
591
15.5k
      return ParsedAttr::AT_DiagnoseIf;  // "diagnose_if"
592
15.5k
    case 'g':  // 1 string to match.
593
37
      if (memcmp(Name.data()+1, "uarded_var", 10) != 0)
594
0
        break;
595
37
      return ParsedAttr::AT_GuardedVar;  // "guarded_var"
596
9.55k
    case 'n':  // 4 strings to match.
597
9.55k
      switch (Name[1]) {
598
9.55k
      
default: break0
;
599
9.55k
      case 'o':  // 3 strings to match.
600
9.43k
        switch (Name[2]) {
601
9.43k
        
default: break0
;
602
9.43k
        case '_':  // 1 string to match.
603
9.41k
          if (memcmp(Name.data()+3, "sanitize", 8) != 0)
604
0
            break;
605
9.41k
          return ParsedAttr::AT_NoSanitize;  // "no_sanitize"
606
9.41k
        case 'd':  // 1 string to match.
607
6
          if (memcmp(Name.data()+3, "uplicate", 8) != 0)
608
0
            break;
609
6
          return ParsedAttr::AT_NoDuplicate;   // "noduplicate"
610
6
        case 'm':  // 1 string to match.
611
5
          if (memcmp(Name.data()+3, "icromips", 8) != 0)
612
0
            break;
613
5
          return ParsedAttr::AT_NoMicroMips;  // "nomicromips"
614
0
        }
615
0
        break;
616
127
      case 's':  // 1 string to match.
617
127
        if (memcmp(Name.data()+2, "_consumed", 9) != 0)
618
0
          break;
619
127
        return ParsedAttr::AT_NSConsumed;  // "ns_consumed"
620
0
      }
621
0
      break;
622
3.22k
    case 'o':  // 1 string to match.
623
3.22k
      if (memcmp(Name.data()+1, "bjc_bridge", 10) != 0)
624
0
        break;
625
3.22k
      return ParsedAttr::AT_ObjCBridge;  // "objc_bridge"
626
3.22k
    case 't':  // 1 string to match.
627
33
      if (memcmp(Name.data()+1, "rivial_abi", 10) != 0)
628
0
        break;
629
33
      return ParsedAttr::AT_TrivialABI;  // "trivial_abi"
630
2.61k
    case 'u':  // 1 string to match.
631
2.61k
      if (memcmp(Name.data()+1, "navailable", 10) != 0)
632
0
        break;
633
2.61k
      return ParsedAttr::AT_Unavailable;   // "unavailable"
634
19.5k
    case 'v':  // 1 string to match.
635
19.5k
      if (memcmp(Name.data()+1, "ector_size", 10) != 0)
636
0
        break;
637
19.5k
      return ParsedAttr::AT_VectorSize;  // "vector_size"
638
19.5k
    case 'w':  // 2 strings to match.
639
154
      switch (Name[1]) {
640
154
      
default: break0
;
641
154
      case 'a':  // 1 string to match.
642
7
        if (memcmp(Name.data()+2, "rn_unused", 9) != 0)
643
0
          break;
644
7
        return ParsedAttr::AT_WarnUnused;  // "warn_unused"
645
147
      case 'e':  // 1 string to match.
646
147
        if (memcmp(Name.data()+2, "ak_import", 9) != 0)
647
0
          break;
648
147
        return ParsedAttr::AT_WeakImport;  // "weak_import"
649
0
      }
650
0
      break;
651
0
    }
652
0
    break;
653
1.54M
  case 12:   // 6 strings to match.
654
1.54M
    switch (Name[0]) {
655
1.54M
    
default: break0
;
656
1.54M
    case 'a':  // 1 string to match.
657
1.26M
      if (memcmp(Name.data()+1, "vailability", 11) != 0)
658
0
        break;
659
1.26M
      return ParsedAttr::AT_Availability;  // "availability"
660
1.26M
    case 'c':  // 2 strings to match.
661
226
      if (memcmp(Name.data()+1, "pu_", 3) != 0)
662
0
        break;
663
226
      switch (Name[4]) {
664
226
      
default: break0
;
665
226
      case 'd':  // 1 string to match.
666
59
        if (memcmp(Name.data()+5, "ispatch", 7) != 0)
667
0
          break;
668
59
        return ParsedAttr::AT_CPUDispatch;   // "cpu_dispatch"
669
167
      case 's':  // 1 string to match.
670
167
        if (memcmp(Name.data()+5, "pecific", 7) != 0)
671
0
          break;
672
167
        return ParsedAttr::AT_CPUSpecific;  // "cpu_specific"
673
0
      }
674
0
      break;
675
278k
    case 'o':  // 2 strings to match.
676
278k
      switch (Name[1]) {
677
278k
      
default: break0
;
678
278k
      case 'b':  // 1 string to match.
679
57
        if (memcmp(Name.data()+2, "jc_boxable", 10) != 0)
680
0
          break;
681
57
        return ParsedAttr::AT_ObjCBoxable;   // "objc_boxable"
682
278k
      case 'v':  // 1 string to match.
683
278k
        if (memcmp(Name.data()+2, "erloadable", 10) != 0)
684
0
          break;
685
278k
        return ParsedAttr::AT_Overloadable;  // "overloadable"
686
0
      }
687
0
      break;
688
36
    case 'p':  // 1 string to match.
689
36
      if (memcmp(Name.data()+1, "reserve_all", 11) != 0)
690
0
        break;
691
36
      return ParsedAttr::AT_PreserveAll;  // "preserve_all"
692
0
    }
693
0
    break;
694
1.81M
  case 13:   // 15 strings to match.
695
1.81M
    switch (Name[0]) {
696
1.81M
    
default: break0
;
697
1.81M
    case 'a':  // 2 strings to match.
698
1.81M
      switch (Name[1]) {
699
1.81M
      
default: break0
;
700
1.81M
      case 'd':  // 1 string to match.
701
498
        if (memcmp(Name.data()+2, "dress_space", 11) != 0)
702
0
          break;
703
498
        return ParsedAttr::AT_AddressSpace;  // "address_space"
704
1.81M
      case 'l':  // 1 string to match.
705
1.81M
        if (memcmp(Name.data()+2, "ways_inline", 11) != 0)
706
0
          break;
707
1.81M
        return ParsedAttr::AT_AlwaysInline;  // "always_inline"
708
0
      }
709
0
      break;
710
37
    case 'c':  // 1 string to match.
711
37
      if (memcmp(Name.data()+1, "allable_when", 12) != 0)
712
0
        break;
713
37
      return ParsedAttr::AT_CallableWhen;  // "callable_when"
714
1.22k
    case 'i':  // 1 string to match.
715
1.22k
      if (memcmp(Name.data()+1, "nit_priority", 12) != 0)
716
0
        break;
717
1.22k
      return ParsedAttr::AT_InitPriority;  // "init_priority"
718
1.22k
    case 'l':  // 3 strings to match.
719
344
      switch (Name[1]) {
720
344
      
default: break0
;
721
344
      case 'a':  // 1 string to match.
722
74
        if (memcmp(Name.data()+2, "unch_bounds", 11) != 0)
723
0
          break;
724
74
        return ParsedAttr::AT_CUDALaunchBounds;  // "launch_bounds"
725
74
      case 'i':  // 1 string to match.
726
0
        if (memcmp(Name.data()+2, "fetimebound", 11) != 0)
727
0
          break;
728
0
        return ParsedAttr::AT_LifetimeBound;   // "lifetimebound"
729
270
      case 'o':  // 1 string to match.
730
270
        if (memcmp(Name.data()+2, "ck_returned", 11) != 0)
731
0
          break;
732
270
        return ParsedAttr::AT_LockReturned;  // "lock_returned"
733
0
      }
734
0
      break;
735
507
    case 'p':  // 2 strings to match.
736
507
      switch (Name[1]) {
737
507
      
default: break0
;
738
507
      case 'r':  // 1 string to match.
739
48
        if (memcmp(Name.data()+2, "eserve_most", 11) != 0)
740
0
          break;
741
48
        return ParsedAttr::AT_PreserveMost;  // "preserve_most"
742
459
      case 't':  // 1 string to match.
743
459
        if (memcmp(Name.data()+2, "_guarded_by", 11) != 0)
744
0
          break;
745
459
        return ParsedAttr::AT_PtGuardedBy;  // "pt_guarded_by"
746
0
      }
747
0
      break;
748
14
    case 'r':  // 2 strings to match.
749
14
      if (Name[1] != 'e')
750
0
        break;
751
14
      switch (Name[2]) {
752
14
      
default: break0
;
753
14
      case 'i':  // 1 string to match.
754
1
        if (memcmp(Name.data()+3, "nitializes", 10) != 0)
755
0
          break;
756
1
        return ParsedAttr::AT_Reinitializes;   // "reinitializes"
757
13
      case 't':  // 1 string to match.
758
13
        if (memcmp(Name.data()+3, "urns_twice", 10) != 0)
759
0
          break;
760
13
        return ParsedAttr::AT_ReturnsTwice;  // "returns_twice"
761
0
      }
762
0
      break;
763
94
    case 's':  // 2 strings to match.
764
94
      switch (Name[1]) {
765
94
      
default: break0
;
766
94
      case 'e':  // 1 string to match.
767
38
        if (memcmp(Name.data()+2, "t_typestate", 11) != 0)
768
0
          break;
769
38
        return ParsedAttr::AT_SetTypestate;  // "set_typestate"
770
56
      case 'w':  // 1 string to match.
771
56
        if (memcmp(Name.data()+2, "ift_context", 11) != 0)
772
0
          break;
773
56
        return ParsedAttr::AT_SwiftContext;  // "swift_context"
774
0
      }
775
0
      break;
776
21
    case 'v':  // 1 string to match.
777
21
      if (memcmp(Name.data()+1, "ec_type_hint", 12) != 0)
778
0
        break;
779
21
      return ParsedAttr::AT_VecTypeHint;   // "vec_type_hint"
780
21
    case 'x':  // 1 string to match.
781
18
      if (memcmp(Name.data()+1, "ray_log_args", 12) != 0)
782
0
        break;
783
18
      return ParsedAttr::AT_XRayLogArgs;  // "xray_log_args"
784
0
    }
785
0
    break;
786
7.95k
  case 14:   // 12 strings to match.
787
7.95k
    switch (Name[0]) {
788
7.95k
    
default: break0
;
789
7.95k
    case 'a':  // 3 strings to match.
790
484
      switch (Name[1]) {
791
484
      
default: break0
;
792
484
      case 'c':  // 1 string to match.
793
438
        if (memcmp(Name.data()+2, "quired_after", 12) != 0)
794
0
          break;
795
438
        return ParsedAttr::AT_AcquiredAfter;   // "acquired_after"
796
438
      case 'l':  // 1 string to match.
797
0
        if (memcmp(Name.data()+2, "ways_destroy", 12) != 0)
798
0
          break;
799
0
        return ParsedAttr::AT_AlwaysDestroy;   // "always_destroy"
800
46
      case 's':  // 1 string to match.
801
46
        if (memcmp(Name.data()+2, "sume_aligned", 12) != 0)
802
0
          break;
803
46
        return ParsedAttr::AT_AssumeAligned;  // "assume_aligned"
804
0
      }
805
0
      break;
806
6
    case 'c':  // 1 string to match.
807
6
      if (memcmp(Name.data()+1, "udart_builtin", 13) != 0)
808
0
        break;
809
6
      return ParsedAttr::IgnoredAttribute;   // "cudart_builtin"
810
24
    case 'd':  // 1 string to match.
811
24
      if (memcmp(Name.data()+1, "evice_builtin", 13) != 0)
812
0
        break;
813
24
      return ParsedAttr::IgnoredAttribute;   // "device_builtin"
814
24
    case 'i':  // 1 string to match.
815
6
      if (memcmp(Name.data()+1, "ntel_ocl_bicc", 13) != 0)
816
0
        break;
817
6
      return ParsedAttr::AT_IntelOclBicc;  // "intel_ocl_bicc"
818
431
    case 'l':  // 1 string to match.
819
431
      if (memcmp(Name.data()+1, "ocks_excluded", 13) != 0)
820
0
        break;
821
431
      return ParsedAttr::AT_LocksExcluded;   // "locks_excluded"
822
431
    case 'n':  // 1 string to match.
823
11
      if (memcmp(Name.data()+1, "o_split_stack", 13) != 0)
824
0
        break;
825
11
      return ParsedAttr::AT_NoSplitStack;  // "no_split_stack"
826
6.91k
    case 'o':  // 2 strings to match.
827
6.91k
      if (memcmp(Name.data()+1, "bjc_", 4) != 0)
828
0
        break;
829
6.91k
      switch (Name[5]) {
830
6.91k
      
default: break0
;
831
6.91k
      case 'e':  // 1 string to match.
832
44
        if (memcmp(Name.data()+6, "xception", 8) != 0)
833
0
          break;
834
44
        return ParsedAttr::AT_ObjCException;   // "objc_exception"
835
6.86k
      case 'o':  // 1 string to match.
836
6.86k
        if (memcmp(Name.data()+6, "wnership", 8) != 0)
837
0
          break;
838
6.86k
        return ParsedAttr::AT_ObjCOwnership;  // "objc_ownership"
839
0
      }
840
0
      break;
841
53
    case 'p':  // 1 string to match.
842
53
      if (memcmp(Name.data()+1, "t_guarded_var", 13) != 0)
843
0
        break;
844
53
      return ParsedAttr::AT_PtGuardedVar;  // "pt_guarded_var"
845
53
    case 't':  // 1 string to match.
846
26
      if (memcmp(Name.data()+1, "est_typestate", 13) != 0)
847
0
        break;
848
26
      return ParsedAttr::AT_TestTypestate;  // "test_typestate"
849
0
    }
850
0
    break;
851
343k
  case 15:   // 13 strings to match.
852
343k
    switch (Name[0]) {
853
343k
    
default: break0
;
854
343k
    case 'a':  // 3 strings to match.
855
605
      switch (Name[1]) {
856
605
      
default: break0
;
857
605
      case 'c':  // 1 string to match.
858
317
        if (memcmp(Name.data()+2, "quired_before", 13) != 0)
859
0
          break;
860
317
        return ParsedAttr::AT_AcquiredBefore;  // "acquired_before"
861
317
      case 'm':  // 2 strings to match.
862
288
        if (memcmp(Name.data()+2, "dgpu_num_", 9) != 0)
863
0
          break;
864
288
        switch (Name[11]) {
865
288
        
default: break0
;
866
288
        case 's':  // 1 string to match.
867
144
          if (memcmp(Name.data()+12, "gpr", 3) != 0)
868
0
            break;
869
144
          return ParsedAttr::AT_AMDGPUNumSGPR;   // "amdgpu_num_sgpr"
870
144
        case 'v':  // 1 string to match.
871
144
          if (memcmp(Name.data()+12, "gpr", 3) != 0)
872
0
            break;
873
144
          return ParsedAttr::AT_AMDGPUNumVGPR;  // "amdgpu_num_vgpr"
874
0
        }
875
0
        break;
876
0
      }
877
0
      break;
878
3.46k
    case 'e':  // 1 string to match.
879
3.46k
      if (memcmp(Name.data()+1, "xt_vector_type", 14) != 0)
880
0
        break;
881
3.46k
      return ParsedAttr::AT_ExtVectorType;   // "ext_vector_type"
882
3.46k
    case 'n':  // 1 string to match.
883
225
      if (memcmp(Name.data()+1, "ot_tail_called", 14) != 0)
884
0
        break;
885
225
      return ParsedAttr::AT_NotTailCalled;   // "not_tail_called"
886
300
    case 'o':  // 3 strings to match.
887
300
      switch (Name[1]) {
888
300
      
default: break0
;
889
300
      case 'b':  // 1 string to match.
890
205
        if (memcmp(Name.data()+2, "jc_root_class", 13) != 0)
891
0
          break;
892
205
        return ParsedAttr::AT_ObjCRootClass;   // "objc_root_class"
893
205
      case 'w':  // 2 strings to match.
894
95
        if (memcmp(Name.data()+2, "nership_", 8) != 0)
895
0
          break;
896
95
        switch (Name[10]) {
897
95
        
default: break0
;
898
95
        case 'h':  // 1 string to match.
899
54
          if (memcmp(Name.data()+11, "olds", 4) != 0)
900
0
            break;
901
54
          return ParsedAttr::AT_Ownership;   // "ownership_holds"
902
54
        case 't':  // 1 string to match.
903
41
          if (memcmp(Name.data()+11, "akes", 4) != 0)
904
0
            break;
905
41
          return ParsedAttr::AT_Ownership;  // "ownership_takes"
906
0
        }
907
0
        break;
908
0
      }
909
0
      break;
910
21
    case 'p':  // 1 string to match.
911
21
      if (memcmp(Name.data()+1, "aram_typestate", 14) != 0)
912
0
        break;
913
21
      return ParsedAttr::AT_ParamTypestate;  // "param_typestate"
914
28
    case 'r':  // 1 string to match.
915
28
      if (memcmp(Name.data()+1, "eturns_nonnull", 14) != 0)
916
0
        break;
917
28
      return ParsedAttr::AT_ReturnsNonNull;  // "returns_nonnull"
918
78
    case 's':  // 1 string to match.
919
78
      if (memcmp(Name.data()+1, "coped_lockable", 14) != 0)
920
0
        break;
921
78
      return ParsedAttr::AT_ScopedLockable;  // "scoped_lockable"
922
338k
    case 't':  // 1 string to match.
923
338k
      if (memcmp(Name.data()+1, "ype_visibility", 14) != 0)
924
0
        break;
925
338k
      return ParsedAttr::AT_TypeVisibility;  // "type_visibility"
926
338k
    case 'u':  // 1 string to match.
927
828
      if (memcmp(Name.data()+1, "nlock_function", 14) != 0)
928
0
        break;
929
828
      return ParsedAttr::AT_ReleaseCapability;  // "unlock_function"
930
0
    }
931
0
    break;
932
1.02M
  case 16:   // 6 strings to match.
933
1.02M
    switch (Name[0]) {
934
1.02M
    
default: break0
;
935
1.02M
    case 'i':  // 1 string to match.
936
171
      if (memcmp(Name.data()+1, "nternal_linkage", 15) != 0)
937
0
        break;
938
171
      return ParsedAttr::AT_InternalLinkage;   // "internal_linkage"
939
1.01M
    case 'm':  // 1 string to match.
940
1.01M
      if (memcmp(Name.data()+1, "in_vector_width", 15) != 0)
941
0
        break;
942
1.01M
      return ParsedAttr::AT_MinVectorWidth;  // "min_vector_width"
943
1.01M
    case 'n':  // 2 strings to match.
944
4.85k
      switch (Name[1]) {
945
4.85k
      
default: break0
;
946
4.85k
      case 'e':  // 1 string to match.
947
4.81k
        if (memcmp(Name.data()+2, "on_vector_type", 14) != 0)
948
0
          break;
949
4.81k
        return ParsedAttr::AT_NeonVectorType;  // "neon_vector_type"
950
4.81k
      case 's':  // 1 string to match.
951
37
        if (memcmp(Name.data()+2, "_consumes_self", 14) != 0)
952
0
          break;
953
37
        return ParsedAttr::AT_NSConsumesSelf;  // "ns_consumes_self"
954
0
      }
955
0
      break;
956
228
    case 'p':  // 1 string to match.
957
228
      if (memcmp(Name.data()+1, "ass_object_size", 15) != 0)
958
0
        break;
959
228
      return ParsedAttr::AT_PassObjectSize;  // "pass_object_size"
960
228
    case 'r':  // 1 string to match.
961
38
      if (memcmp(Name.data()+1, "eturn_typestate", 15) != 0)
962
0
        break;
963
38
      return ParsedAttr::AT_ReturnTypestate;  // "return_typestate"
964
0
    }
965
0
    break;
966
263
  case 17:   // 6 strings to match.
967
263
    switch (Name[0]) {
968
263
    
default: break3
;
969
263
    case 'a':  // 2 strings to match.
970
51
      switch (Name[1]) {
971
51
      
default: break0
;
972
51
      case 'n':  // 1 string to match.
973
6
        if (memcmp(Name.data()+2, "alyzer_noreturn", 15) != 0)
974
0
          break;
975
6
        return ParsedAttr::AT_AnalyzerNoReturn;  // "analyzer_noreturn"
976
45
      case 's':  // 1 string to match.
977
45
        if (memcmp(Name.data()+2, "sert_capability", 15) != 0)
978
0
          break;
979
45
        return ParsedAttr::AT_AssertCapability;  // "assert_capability"
980
0
      }
981
0
      break;
982
127
    case 'o':  // 2 strings to match.
983
127
      switch (Name[1]) {
984
127
      
default: break0
;
985
127
      case 'b':  // 1 string to match.
986
79
        if (memcmp(Name.data()+2, "jc_runtime_name", 15) != 0)
987
0
          break;
988
79
        return ParsedAttr::AT_ObjCRuntimeName;   // "objc_runtime_name"
989
79
      case 'w':  // 1 string to match.
990
48
        if (memcmp(Name.data()+2, "nership_returns", 15) != 0)
991
0
          break;
992
48
        return ParsedAttr::AT_Ownership;  // "ownership_returns"
993
0
      }
994
0
      break;
995
11
    case 's':  // 1 string to match.
996
11
      if (memcmp(Name.data()+1, "hared_capability", 16) != 0)
997
0
        break;
998
11
      return ParsedAttr::AT_Capability;  // "shared_capability"
999
71
    case 't':  // 1 string to match.
1000
71
      if (memcmp(Name.data()+1, "ransparent_union", 16) != 0)
1001
0
        break;
1002
71
      return ParsedAttr::AT_TransparentUnion;  // "transparent_union"
1003
3
    }
1004
3
    break;
1005
19.9k
  case 18:   // 14 strings to match.
1006
19.9k
    switch (Name[0]) {
1007
19.9k
    
default: break0
;
1008
19.9k
    case 'a':  // 2 strings to match.
1009
348
      switch (Name[1]) {
1010
348
      
default: break0
;
1011
348
      case 'c':  // 1 string to match.
1012
316
        if (memcmp(Name.data()+2, "quire_capability", 16) != 0)
1013
0
          break;
1014
316
        return ParsedAttr::AT_AcquireCapability;   // "acquire_capability"
1015
316
      case 's':  // 1 string to match.
1016
32
        if (memcmp(Name.data()+2, "sert_shared_lock", 16) != 0)
1017
0
          break;
1018
32
        return ParsedAttr::AT_AssertSharedLock;  // "assert_shared_lock"
1019
0
      }
1020
0
      break;
1021
0
    case 'c':  // 1 string to match.
1022
0
      if (memcmp(Name.data()+1, "arries_dependency", 17) != 0)
1023
0
        break;
1024
0
      return ParsedAttr::AT_CarriesDependency;   // "carries_dependency"
1025
52
    case 'd':  // 1 string to match.
1026
52
      if (memcmp(Name.data()+1, "isable_tail_calls", 17) != 0)
1027
0
        break;
1028
52
      return ParsedAttr::AT_DisableTailCalls;  // "disable_tail_calls"
1029
8.23k
    case 'e':  // 1 string to match.
1030
8.23k
      if (memcmp(Name.data()+1, "num_extensibility", 17) != 0)
1031
0
        break;
1032
8.23k
      return ParsedAttr::AT_EnumExtensibility;   // "enum_extensibility"
1033
8.23k
    case 'i':  // 1 string to match.
1034
74
      if (memcmp(Name.data()+1, "boutletcollection", 17) != 0)
1035
0
        break;
1036
74
      return ParsedAttr::AT_IBOutletCollection;  // "iboutletcollection"
1037
74
    case 'n':  // 3 strings to match.
1038
45
      if (memcmp(Name.data()+1, "o_s", 3) != 0)
1039
0
        break;
1040
45
      switch (Name[4]) {
1041
45
      
default: break0
;
1042
45
      case 'a':  // 2 strings to match.
1043
32
        if (memcmp(Name.data()+5, "nitize_", 7) != 0)
1044
0
          break;
1045
32
        switch (Name[12]) {
1046
32
        
default: break0
;
1047
32
        case 'm':  // 1 string to match.
1048
12
          if (memcmp(Name.data()+13, "emory", 5) != 0)
1049
0
            break;
1050
12
          return ParsedAttr::AT_NoSanitizeSpecific;  // "no_sanitize_memory"
1051
20
        case 't':  // 1 string to match.
1052
20
          if (memcmp(Name.data()+13, "hread", 5) != 0)
1053
0
            break;
1054
20
          return ParsedAttr::AT_NoSanitizeSpecific;  // "no_sanitize_thread"
1055
0
        }
1056
0
        break;
1057
13
      case 't':  // 1 string to match.
1058
13
        if (memcmp(Name.data()+5, "ack_protector", 13) != 0)
1059
0
          break;
1060
13
        return ParsedAttr::AT_NoStackProtector;  // "no_stack_protector"
1061
0
      }
1062
0
      break;
1063
76
    case 'o':  // 2 strings to match.
1064
76
      switch (Name[1]) {
1065
76
      
default: break0
;
1066
76
      case 'b':  // 1 string to match.
1067
37
        if (memcmp(Name.data()+2, "jc_method_family", 16) != 0)
1068
0
          break;
1069
37
        return ParsedAttr::AT_ObjCMethodFamily;  // "objc_method_family"
1070
39
      case 'p':  // 1 string to match.
1071
39
        if (memcmp(Name.data()+2, "encl_unroll_hint", 16) != 0)
1072
0
          break;
1073
39
        return ParsedAttr::AT_OpenCLUnrollHint;  // "opencl_unroll_hint"
1074
0
      }
1075
0
      break;
1076
90
    case 'r':  // 1 string to match.
1077
90
      if (memcmp(Name.data()+1, "elease_capability", 17) != 0)
1078
0
        break;
1079
90
      return ParsedAttr::AT_ReleaseCapability;   // "release_capability"
1080
90
    case 's':  // 1 string to match.
1081
34
      if (memcmp(Name.data()+1, "wift_error_result", 17) != 0)
1082
0
        break;
1083
34
      return ParsedAttr::AT_SwiftErrorResult;  // "swift_error_result"
1084
10.9k
    case 'w':  // 1 string to match.
1085
10.9k
      if (memcmp(Name.data()+1, "arn_unused_result", 17) != 0)
1086
0
        break;
1087
10.9k
      return ParsedAttr::AT_WarnUnusedResult;  // "warn_unused_result"
1088
0
    }
1089
0
    break;
1090
4.99k
  case 19:   // 10 strings to match.
1091
4.99k
    switch (Name[0]) {
1092
4.99k
    
default: break0
;
1093
4.99k
    case 'a':  // 1 string to match.
1094
236
      if (memcmp(Name.data()+1, "mdgpu_waves_per_eu", 18) != 0)
1095
0
        break;
1096
236
      return ParsedAttr::AT_AMDGPUWavesPerEU;  // "amdgpu_waves_per_eu"
1097
516
    case 'c':  // 3 strings to match.
1098
516
      if (memcmp(Name.data()+1, "f_", 2) != 0)
1099
0
        break;
1100
516
      switch (Name[3]) {
1101
516
      
default: break0
;
1102
516
      case 'a':  // 1 string to match.
1103
0
        if (memcmp(Name.data()+4, "udited_transfer", 15) != 0)
1104
0
          break;
1105
0
        return ParsedAttr::AT_CFAuditedTransfer;   // "cf_audited_transfer"
1106
515
      case 'r':  // 1 string to match.
1107
515
        if (memcmp(Name.data()+4, "eturns_retained", 15) != 0)
1108
0
          break;
1109
515
        return ParsedAttr::AT_CFReturnsRetained;   // "cf_returns_retained"
1110
515
      case 'u':  // 1 string to match.
1111
1
        if (memcmp(Name.data()+4, "nknown_transfer", 15) != 0)
1112
0
          break;
1113
1
        return ParsedAttr::AT_CFUnknownTransfer;  // "cf_unknown_transfer"
1114
0
      }
1115
0
      break;
1116
739
    case 'n':  // 2 strings to match.
1117
739
      switch (Name[1]) {
1118
739
      
default: break0
;
1119
739
      case 'o':  // 1 string to match.
1120
48
        if (memcmp(Name.data()+2, "_sanitize_address", 17) != 0)
1121
0
          break;
1122
48
        return ParsedAttr::AT_NoSanitizeSpecific;  // "no_sanitize_address"
1123
691
      case 's':  // 1 string to match.
1124
691
        if (memcmp(Name.data()+2, "_returns_retained", 17) != 0)
1125
0
          break;
1126
691
        return ParsedAttr::AT_NSReturnsRetained;  // "ns_returns_retained"
1127
0
      }
1128
0
      break;
1129
2.84k
    case 'o':  // 3 strings to match.
1130
2.84k
      if (memcmp(Name.data()+1, "bjc_", 4) != 0)
1131
0
        break;
1132
2.84k
      switch (Name[5]) {
1133
2.84k
      
default: break0
;
1134
2.84k
      case 'b':  // 2 strings to match.
1135
2.79k
        if (memcmp(Name.data()+6, "ridge_", 6) != 0)
1136
0
          break;
1137
2.79k
        switch (Name[12]) {
1138
2.79k
        
default: break0
;
1139
2.79k
        case 'm':  // 1 string to match.
1140
2.73k
          if (memcmp(Name.data()+13, "utable", 6) != 0)
1141
0
            break;
1142
2.73k
          return ParsedAttr::AT_ObjCBridgeMutable;   // "objc_bridge_mutable"
1143
2.73k
        case 'r':  // 1 string to match.
1144
56
          if (memcmp(Name.data()+13, "elated", 6) != 0)
1145
0
            break;
1146
56
          return ParsedAttr::AT_ObjCBridgeRelated;  // "objc_bridge_related"
1147
0
        }
1148
0
        break;
1149
53
      case 'r':  // 1 string to match.
1150
53
        if (memcmp(Name.data()+6, "equires_super", 13) != 0)
1151
0
          break;
1152
53
        return ParsedAttr::AT_ObjCRequiresSuper;  // "objc_requires_super"
1153
0
      }
1154
0
      break;
1155
664
    case 'r':  // 1 string to match.
1156
664
      if (memcmp(Name.data()+1, "equires_capability", 18) != 0)
1157
0
        break;
1158
664
      return ParsedAttr::AT_RequiresCapability;  // "requires_capability"
1159
0
    }
1160
0
    break;
1161
1.54k
  case 20:   // 5 strings to match.
1162
1.54k
    switch (Name[0]) {
1163
1.54k
    
default: break0
;
1164
1.54k
    case 'n':  // 1 string to match.
1165
1.20k
      if (memcmp(Name.data()+1, "eon_polyvector_type", 19) != 0)
1166
0
        break;
1167
1.20k
      return ParsedAttr::AT_NeonPolyVectorType;  // "neon_polyvector_type"
1168
1.20k
    case 'o':  // 1 string to match.
1169
4
      if (memcmp(Name.data()+1, "bjc_runtime_visible", 19) != 0)
1170
0
        break;
1171
4
      return ParsedAttr::AT_ObjCRuntimeVisible;  // "objc_runtime_visible"
1172
30
    case 'r':  // 1 string to match.
1173
30
      if (memcmp(Name.data()+1, "eqd_work_group_size", 19) != 0)
1174
0
        break;
1175
30
      return ParsedAttr::AT_ReqdWorkGroupSize;   // "reqd_work_group_size"
1176
288
    case 's':  // 1 string to match.
1177
288
      if (memcmp(Name.data()+1, "hared_lock_function", 19) != 0)
1178
0
        break;
1179
288
      return ParsedAttr::AT_AcquireCapability;   // "shared_lock_function"
1180
288
    case 'w':  // 1 string to match.
1181
16
      if (memcmp(Name.data()+1, "ork_group_size_hint", 19) != 0)
1182
0
        break;
1183
16
      return ParsedAttr::AT_WorkGroupSizeHint;  // "work_group_size_hint"
1184
0
    }
1185
0
    break;
1186
1.52k
  case 21:   // 8 strings to match.
1187
1.52k
    switch (Name[0]) {
1188
1.52k
    
default: break0
;
1189
1.52k
    case 'a':  // 1 string to match.
1190
38
      if (memcmp(Name.data()+1, "ssert_exclusive_lock", 20) != 0)
1191
0
        break;
1192
38
      return ParsedAttr::AT_AssertExclusiveLock;   // "assert_exclusive_lock"
1193
38
    case 'l':  // 1 string to match.
1194
0
      if (memcmp(Name.data()+1, "to_visibility_public", 20) != 0)
1195
0
        break;
1196
0
      return ParsedAttr::AT_LTOVisibilityPublic;   // "lto_visibility_public"
1197
10
    case 'o':  // 1 string to match.
1198
10
      if (memcmp(Name.data()+1, "bjc_precise_lifetime", 20) != 0)
1199
0
        break;
1200
10
      return ParsedAttr::AT_ObjCPreciseLifetime;   // "objc_precise_lifetime"
1201
258
    case 'p':  // 1 string to match.
1202
258
      if (memcmp(Name.data()+1, "ointer_with_type_tag", 20) != 0)
1203
0
        break;
1204
258
      return ParsedAttr::AT_ArgumentWithTypeTag;   // "pointer_with_type_tag"
1205
372
    case 's':  // 2 strings to match.
1206
372
      switch (Name[1]) {
1207
372
      
default: break0
;
1208
372
      case 'h':  // 1 string to match.
1209
304
        if (memcmp(Name.data()+2, "ared_locks_required", 19) != 0)
1210
0
          break;
1211
304
        return ParsedAttr::AT_RequiresCapability;  // "shared_locks_required"
1212
304
      case 'w':  // 1 string to match.
1213
68
        if (memcmp(Name.data()+2, "ift_indirect_result", 19) != 0)
1214
0
          break;
1215
68
        return ParsedAttr::AT_SwiftIndirectResult;  // "swift_indirect_result"
1216
0
      }
1217
0
      break;
1218
344
    case 't':  // 1 string to match.
1219
344
      if (memcmp(Name.data()+1, "ype_tag_for_datatype", 20) != 0)
1220
0
        break;
1221
344
      return ParsedAttr::AT_TypeTagForDatatype;  // "type_tag_for_datatype"
1222
498
    case 'x':  // 1 string to match.
1223
498
      if (memcmp(Name.data()+1, "ray_never_instrument", 20) != 0)
1224
0
        break;
1225
498
      return ParsedAttr::AT_XRayInstrument;  // "xray_never_instrument"
1226
0
    }
1227
0
    break;
1228
355
  case 22:   // 6 strings to match.
1229
355
    switch (Name[0]) {
1230
355
    
default: break0
;
1231
355
    case 'a':  // 1 string to match.
1232
33
      if (memcmp(Name.data()+1, "rgument_with_type_tag", 21) != 0)
1233
0
        break;
1234
33
      return ParsedAttr::AT_ArgumentWithTypeTag;   // "argument_with_type_tag"
1235
122
    case 'e':  // 1 string to match.
1236
122
      if (memcmp(Name.data()+1, "xternal_source_symbol", 21) != 0)
1237
0
        break;
1238
122
      return ParsedAttr::AT_ExternalSourceSymbol;  // "external_source_symbol"
1239
122
    case 'n':  // 1 string to match.
1240
27
      if (memcmp(Name.data()+1, "o_instrument_function", 21) != 0)
1241
0
        break;
1242
27
      return ParsedAttr::AT_NoInstrumentFunction;  // "no_instrument_function"
1243
129
    case 'o':  // 1 string to match.
1244
129
      if (memcmp(Name.data()+1, "bjc_independent_class", 21) != 0)
1245
0
        break;
1246
129
      return ParsedAttr::AT_ObjCIndependentClass;  // "objc_independent_class"
1247
129
    case 't':  // 1 string to match.
1248
40
      if (memcmp(Name.data()+1, "ry_acquire_capability", 21) != 0)
1249
0
        break;
1250
40
      return ParsedAttr::AT_TryAcquireCapability;  // "try_acquire_capability"
1251
40
    case 'x':  // 1 string to match.
1252
4
      if (memcmp(Name.data()+1, "ray_always_instrument", 21) != 0)
1253
0
        break;
1254
4
      return ParsedAttr::AT_XRayInstrument;  // "xray_always_instrument"
1255
0
    }
1256
0
    break;
1257
944
  case 23:   // 6 strings to match.
1258
944
    switch (Name[0]) {
1259
944
    
default: break0
;
1260
944
    case 'c':  // 1 string to match.
1261
73
      if (memcmp(Name.data()+1, "f_returns_not_retained", 22) != 0)
1262
0
        break;
1263
73
      return ParsedAttr::AT_CFReturnsNotRetained;  // "cf_returns_not_retained"
1264
568
    case 'e':  // 1 string to match.
1265
568
      if (memcmp(Name.data()+1, "xclusive_lock_function", 22) != 0)
1266
0
        break;
1267
568
      return ParsedAttr::AT_AcquireCapability;   // "exclusive_lock_function"
1268
568
    case 'f':  // 1 string to match.
1269
10
      if (memcmp(Name.data()+1, "orce_align_arg_pointer", 22) != 0)
1270
0
        break;
1271
10
      return ParsedAttr::AT_X86ForceAlignArgPointer;   // "force_align_arg_pointer"
1272
114
    case 'n':  // 2 strings to match.
1273
114
      if (memcmp(Name.data()+1, "s_returns_", 10) != 0)
1274
0
        break;
1275
114
      switch (Name[11]) {
1276
114
      
default: break0
;
1277
114
      case 'a':  // 1 string to match.
1278
5
        if (memcmp(Name.data()+12, "utoreleased", 11) != 0)
1279
0
          break;
1280
5
        return ParsedAttr::AT_NSReturnsAutoreleased;   // "ns_returns_autoreleased"
1281
109
      case 'n':  // 1 string to match.
1282
109
        if (memcmp(Name.data()+12, "ot_retained", 11) != 0)
1283
0
          break;
1284
109
        return ParsedAttr::AT_NSReturnsNotRetained;  // "ns_returns_not_retained"
1285
0
      }
1286
0
      break;
1287
179
    case 's':  // 1 string to match.
1288
179
      if (memcmp(Name.data()+1, "hared_trylock_function", 22) != 0)
1289
0
        break;
1290
179
      return ParsedAttr::AT_SharedTrylockFunction;  // "shared_trylock_function"
1291
0
    }
1292
0
    break;
1293
1.01k
  case 24:   // 2 strings to match.
1294
1.01k
    switch (Name[0]) {
1295
1.01k
    
default: break0
;
1296
1.01k
    case 'a':  // 1 string to match.
1297
31
      if (memcmp(Name.data()+1, "ssert_shared_capability", 23) != 0)
1298
0
        break;
1299
31
      return ParsedAttr::AT_AssertCapability;  // "assert_shared_capability"
1300
987
    case 'e':  // 1 string to match.
1301
987
      if (memcmp(Name.data()+1, "xclusive_locks_required", 23) != 0)
1302
0
        break;
1303
987
      return ParsedAttr::AT_RequiresCapability;  // "exclusive_locks_required"
1304
0
    }
1305
0
    break;
1306
249
  case 25:   // 5 strings to match.
1307
249
    switch (Name[0]) {
1308
249
    
default: break0
;
1309
249
    case 'a':  // 1 string to match.
1310
95
      if (memcmp(Name.data()+1, "cquire_shared_capability", 24) != 0)
1311
0
        break;
1312
95
      return ParsedAttr::AT_AcquireCapability;   // "acquire_shared_capability"
1313
95
    case 'i':  // 1 string to match.
1314
12
      if (memcmp(Name.data()+1, "ntel_reqd_sub_group_size", 24) != 0)
1315
0
        break;
1316
12
      return ParsedAttr::AT_OpenCLIntelReqdSubGroupSize;   // "intel_reqd_sub_group_size"
1317
94
    case 'n':  // 2 strings to match.
1318
94
      if (memcmp(Name.data()+1, "o_", 2) != 0)
1319
0
        break;
1320
94
      switch (Name[3]) {
1321
94
      
default: break0
;
1322
94
      case 'c':  // 1 string to match.
1323
27
        if (memcmp(Name.data()+4, "aller_saved_registers", 21) != 0)
1324
0
          break;
1325
27
        return ParsedAttr::AT_AnyX86NoCallerSavedRegisters;  // "no_caller_saved_registers"
1326
67
      case 't':  // 1 string to match.
1327
67
        if (memcmp(Name.data()+4, "hread_safety_analysis", 21) != 0)
1328
0
          break;
1329
67
        return ParsedAttr::AT_NoThreadSafetyAnalysis;  // "no_thread_safety_analysis"
1330
0
      }
1331
0
      break;
1332
48
    case 'r':  // 1 string to match.
1333
48
      if (memcmp(Name.data()+1, "elease_shared_capability", 24) != 0)
1334
0
        break;
1335
48
      return ParsedAttr::AT_ReleaseCapability;  // "release_shared_capability"
1336
0
    }
1337
0
    break;
1338
604
  case 26:   // 6 strings to match.
1339
604
    switch (Name[0]) {
1340
604
    
default: break0
;
1341
604
    case 'c':  // 1 string to match.
1342
2
      if (memcmp(Name.data()+1, "onsumable_auto_cast_state", 25) != 0)
1343
0
        break;
1344
2
      return ParsedAttr::AT_ConsumableAutoCast;  // "consumable_auto_cast_state"
1345
195
    case 'e':  // 1 string to match.
1346
195
      if (memcmp(Name.data()+1, "xclusive_trylock_function", 25) != 0)
1347
0
        break;
1348
195
      return ParsedAttr::AT_ExclusiveTrylockFunction;  // "exclusive_trylock_function"
1349
195
    case 'n':  // 1 string to match.
1350
1
      if (memcmp(Name.data()+1, "o_address_safety_analysis", 25) != 0)
1351
0
        break;
1352
1
      return ParsedAttr::AT_NoSanitizeSpecific;  // "no_address_safety_analysis"
1353
279
    case 'o':  // 1 string to match.
1354
279
      if (memcmp(Name.data()+1, "bjc_returns_inner_pointer", 25) != 0)
1355
0
        break;
1356
279
      return ParsedAttr::AT_ObjCReturnsInnerPointer;   // "objc_returns_inner_pointer"
1357
279
    case 'r':  // 2 strings to match.
1358
127
      if (Name[1] != 'e')
1359
0
        break;
1360
127
      switch (Name[2]) {
1361
127
      
default: break0
;
1362
127
      case 'l':  // 1 string to match.
1363
5
        if (memcmp(Name.data()+3, "ease_generic_capability", 23) != 0)
1364
0
          break;
1365
5
        return ParsedAttr::AT_ReleaseCapability;   // "release_generic_capability"
1366
122
      case 'q':  // 1 string to match.
1367
122
        if (memcmp(Name.data()+3, "uires_shared_capability", 23) != 0)
1368
0
          break;
1369
122
        return ParsedAttr::AT_RequiresCapability;  // "requires_shared_capability"
1370
0
      }
1371
0
      break;
1372
0
    }
1373
0
    break;
1374
2.29k
  case 27:   // 5 strings to match.
1375
2.29k
    switch (Name[0]) {
1376
2.29k
    
default: break0
;
1377
2.29k
    case 'a':  // 1 string to match.
1378
190
      if (memcmp(Name.data()+1, "mdgpu_flat_work_group_size", 26) != 0)
1379
0
        break;
1380
190
      return ParsedAttr::AT_AMDGPUFlatWorkGroupSize;   // "amdgpu_flat_work_group_size"
1381
190
    case 'd':  // 2 strings to match.
1382
12
      if (memcmp(Name.data()+1, "evice_builtin_", 14) != 0)
1383
0
        break;
1384
12
      switch (Name[15]) {
1385
12
      
default: break0
;
1386
12
      case 's':  // 1 string to match.
1387
6
        if (memcmp(Name.data()+16, "urface_type", 11) != 0)
1388
0
          break;
1389
6
        return ParsedAttr::IgnoredAttribute;   // "device_builtin_surface_type"
1390
6
      case 't':  // 1 string to match.
1391
6
        if (memcmp(Name.data()+16, "exture_type", 11) != 0)
1392
0
          break;
1393
6
        return ParsedAttr::IgnoredAttribute;  // "device_builtin_texture_type"
1394
0
      }
1395
0
      break;
1396
2.08k
    case 'o':  // 2 strings to match.
1397
2.08k
      if (memcmp(Name.data()+1, "bjc_", 4) != 0)
1398
0
        break;
1399
2.08k
      switch (Name[5]) {
1400
2.08k
      
default: break0
;
1401
2.08k
      case 'd':  // 1 string to match.
1402
2.06k
        if (memcmp(Name.data()+6, "esignated_initializer", 21) != 0)
1403
0
          break;
1404
2.06k
        return ParsedAttr::AT_ObjCDesignatedInitializer;   // "objc_designated_initializer"
1405
2.06k
      case 's':  // 1 string to match.
1406
19
        if (memcmp(Name.data()+6, "ubclassing_restricted", 21) != 0)
1407
0
          break;
1408
19
        return ParsedAttr::AT_ObjCSubclassingRestricted;  // "objc_subclassing_restricted"
1409
0
      }
1410
0
      break;
1411
0
    }
1412
0
    break;
1413
2
  case 28:   // 1 string to match.
1414
2
    if (memcmp(Name.data()+0, "consumable_set_state_on_read", 28) != 0)
1415
0
      break;
1416
2
    return ParsedAttr::AT_ConsumableSetOnRead;   // "consumable_set_state_on_read"
1417
22
  case 29:   // 1 string to match.
1418
22
    if (memcmp(Name.data()+0, "try_acquire_shared_capability", 29) != 0)
1419
0
      break;
1420
22
    return ParsedAttr::AT_TryAcquireCapability;  // "try_acquire_shared_capability"
1421
168
  case 31:   // 1 string to match.
1422
168
    if (memcmp(Name.data()+0, "require_constant_initialization", 31) != 0)
1423
0
      break;
1424
168
    return ParsedAttr::AT_RequireConstantInit;   // "require_constant_initialization"
1425
168
  case 34:   // 1 string to match.
1426
12
    if (memcmp(Name.data()+0, "objc_requires_property_definitions", 34) != 0)
1427
0
      break;
1428
12
    return ParsedAttr::AT_ObjCRequiresPropertyDefs;  // "objc_requires_property_definitions"
1429
69
  case 35:   // 1 string to match.
1430
69
    if (memcmp(Name.data()+0, "objc_arc_weak_reference_unavailable", 35) != 0)
1431
0
      break;
1432
69
    return ParsedAttr::AT_ArcWeakrefUnavailable;   // "objc_arc_weak_reference_unavailable"
1433
69
  case 46:   // 1 string to match.
1434
13
    if (memcmp(Name.data()+0, "objc_protocol_requires_explicit_implementation", 46) != 0)
1435
0
      break;
1436
13
    return ParsedAttr::AT_ObjCExplicitProtocolImpl;  // "objc_protocol_requires_explicit_implementation"
1437
320k
  }
1438
320k
  } else if (ParsedAttr::AS_Declspec == Syntax) {
1439
7.47k
  switch (Name.size()) {
1440
7.47k
  
default: break0
;
1441
7.47k
  case 4:  // 1 string to match.
1442
84
    if (memcmp(Name.data()+0, "uuid", 4) != 0)
1443
0
      break;
1444
84
    return ParsedAttr::AT_Uuid;  // "uuid"
1445
224
  case 5:  // 2 strings to match.
1446
224
    switch (Name[0]) {
1447
224
    
default: break0
;
1448
224
    case 'a':  // 1 string to match.
1449
215
      if (memcmp(Name.data()+1, "lign", 4) != 0)
1450
0
        break;
1451
215
      return ParsedAttr::AT_Aligned;   // "align"
1452
215
    case 'n':  // 1 string to match.
1453
9
      if (memcmp(Name.data()+1, "aked", 4) != 0)
1454
0
        break;
1455
9
      return ParsedAttr::AT_Naked;  // "naked"
1456
0
    }
1457
0
    break;
1458
55
  case 6:  // 1 string to match.
1459
55
    if (memcmp(Name.data()+0, "thread", 6) != 0)
1460
0
      break;
1461
55
    return ParsedAttr::AT_Thread;  // "thread"
1462
55
  case 7:  // 2 strings to match.
1463
8
    if (memcmp(Name.data()+0, "no", 2) != 0)
1464
4
      break;
1465
4
    switch (Name[2]) {
1466
4
    
default: break0
;
1467
4
    case 'a':  // 1 string to match.
1468
2
      if (memcmp(Name.data()+3, "lias", 4) != 0)
1469
0
        break;
1470
2
      return ParsedAttr::AT_NoAlias;   // "noalias"
1471
2
    case 't':  // 1 string to match.
1472
2
      if (memcmp(Name.data()+3, "hrow", 4) != 0)
1473
0
        break;
1474
2
      return ParsedAttr::AT_NoThrow;  // "nothrow"
1475
0
    }
1476
0
    break;
1477
255
  case 8:  // 8 strings to match.
1478
255
    switch (Name[0]) {
1479
255
    
default: break0
;
1480
255
    case '_':  // 1 string to match.
1481
3
      if (memcmp(Name.data()+1, "_host__", 7) != 0)
1482
0
        break;
1483
3
      return ParsedAttr::AT_CUDAHost;  // "__host__"
1484
8
    case 'a':  // 1 string to match.
1485
8
      if (memcmp(Name.data()+1, "llocate", 7) != 0)
1486
0
        break;
1487
8
      return ParsedAttr::AT_Section;   // "allocate"
1488
81
    case 'c':  // 1 string to match.
1489
81
      if (memcmp(Name.data()+1, "ode_seg", 7) != 0)
1490
0
        break;
1491
81
      return ParsedAttr::AT_CodeSeg;   // "code_seg"
1492
81
    case 'n':  // 3 strings to match.
1493
59
      if (Name[1] != 'o')
1494
0
        break;
1495
59
      switch (Name[2]) {
1496
59
      
default: break0
;
1497
59
      case 'i':  // 1 string to match.
1498
31
        if (memcmp(Name.data()+3, "nline", 5) != 0)
1499
0
          break;
1500
31
        return ParsedAttr::AT_NoInline;  // "noinline"
1501
31
      case 'r':  // 1 string to match.
1502
16
        if (memcmp(Name.data()+3, "eturn", 5) != 0)
1503
0
          break;
1504
16
        return ParsedAttr::AT_NoReturn;  // "noreturn"
1505
16
      case 'v':  // 1 string to match.
1506
12
        if (memcmp(Name.data()+3, "table", 5) != 0)
1507
0
          break;
1508
12
        return ParsedAttr::AT_MSNoVTable;  // "novtable"
1509
0
      }
1510
0
      break;
1511
103
    case 'p':  // 1 string to match.
1512
103
      if (memcmp(Name.data()+1, "roperty", 7) != 0)
1513
0
        break;
1514
103
      return ParsedAttr::IgnoredAttribute;   // "property"
1515
103
    case 'r':  // 1 string to match.
1516
1
      if (memcmp(Name.data()+1, "estrict", 7) != 0)
1517
0
        break;
1518
1
      return ParsedAttr::AT_Restrict;  // "restrict"
1519
0
    }
1520
0
    break;
1521
6.76k
  case 9:  // 3 strings to match.
1522
6.76k
    switch (Name[0]) {
1523
6.76k
    
default: break4
;
1524
6.76k
    case 'd':  // 2 strings to match.
1525
6.70k
      if (memcmp(Name.data()+1, "ll", 2) != 0)
1526
0
        break;
1527
6.70k
      switch (Name[3]) {
1528
6.70k
      
default: break0
;
1529
6.70k
      case 'e':  // 1 string to match.
1530
3.13k
        if (memcmp(Name.data()+4, "xport", 5) != 0)
1531
0
          break;
1532
3.13k
        return ParsedAttr::AT_DLLExport;   // "dllexport"
1533
3.57k
      case 'i':  // 1 string to match.
1534
3.57k
        if (memcmp(Name.data()+4, "mport", 5) != 0)
1535
0
          break;
1536
3.57k
        return ParsedAttr::AT_DLLImport;  // "dllimport"
1537
0
      }
1538
0
      break;
1539
54
    case 's':  // 1 string to match.
1540
54
      if (memcmp(Name.data()+1, "electany", 8) != 0)
1541
0
        break;
1542
54
      return ParsedAttr::AT_SelectAny;  // "selectany"
1543
4
    }
1544
4
    break;
1545
34
  case 10:   // 4 strings to match.
1546
34
    switch (Name[0]) {
1547
34
    
default: break0
;
1548
34
    case '_':  // 3 strings to match.
1549
9
      if (Name[1] != '_')
1550
0
        break;
1551
9
      switch (Name[2]) {
1552
9
      
default: break0
;
1553
9
      case 'd':  // 1 string to match.
1554
3
        if (memcmp(Name.data()+3, "evice__", 7) != 0)
1555
0
          break;
1556
3
        return ParsedAttr::AT_CUDADevice;  // "__device__"
1557
3
      case 'g':  // 1 string to match.
1558
3
        if (memcmp(Name.data()+3, "lobal__", 7) != 0)
1559
0
          break;
1560
3
        return ParsedAttr::AT_CUDAGlobal;  // "__global__"
1561
3
      case 's':  // 1 string to match.
1562
3
        if (memcmp(Name.data()+3, "hared__", 7) != 0)
1563
0
          break;
1564
3
        return ParsedAttr::AT_CUDAShared;  // "__shared__"
1565
0
      }
1566
0
      break;
1567
25
    case 'd':  // 1 string to match.
1568
25
      if (memcmp(Name.data()+1, "eprecated", 9) != 0)
1569
0
        break;
1570
25
      return ParsedAttr::AT_Deprecated;  // "deprecated"
1571
0
    }
1572
0
    break;
1573
15
  case 11:   // 1 string to match.
1574
15
    if (memcmp(Name.data()+0, "empty_bases", 11) != 0)
1575
1
      break;
1576
14
    return ParsedAttr::AT_EmptyBases;  // "empty_bases"
1577
14
  case 12:   // 1 string to match.
1578
4
    if (memcmp(Name.data()+0, "__constant__", 12) != 0)
1579
1
      break;
1580
3
    return ParsedAttr::AT_CUDAConstant;  // "__constant__"
1581
8
  case 14:   // 1 string to match.
1582
8
    if (memcmp(Name.data()+0, "layout_version", 14) != 0)
1583
0
      break;
1584
8
    return ParsedAttr::AT_LayoutVersion;   // "layout_version"
1585
8
  case 17:   // 1 string to match.
1586
0
    if (memcmp(Name.data()+0, "__launch_bounds__", 17) != 0)
1587
0
      break;
1588
0
    return ParsedAttr::AT_CUDALaunchBounds;  // "__launch_bounds__"
1589
15
  case 18:   // 2 strings to match.
1590
15
    if (memcmp(Name.data()+0, "__", 2) != 0)
1591
0
      break;
1592
15
    switch (Name[2]) {
1593
15
    
default: break0
;
1594
15
    case 'c':  // 1 string to match.
1595
3
      if (memcmp(Name.data()+3, "udart_builtin__", 15) != 0)
1596
0
        break;
1597
3
      return ParsedAttr::IgnoredAttribute;   // "__cudart_builtin__"
1598
12
    case 'd':  // 1 string to match.
1599
12
      if (memcmp(Name.data()+3, "evice_builtin__", 15) != 0)
1600
0
        break;
1601
12
      return ParsedAttr::IgnoredAttribute;  // "__device_builtin__"
1602
0
    }
1603
0
    break;
1604
6
  case 31:   // 2 strings to match.
1605
6
    if (memcmp(Name.data()+0, "__device_builtin_", 17) != 0)
1606
0
      break;
1607
6
    switch (Name[17]) {
1608
6
    
default: break0
;
1609
6
    case 's':  // 1 string to match.
1610
3
      if (memcmp(Name.data()+18, "urface_type__", 13) != 0)
1611
0
        break;
1612
3
      return ParsedAttr::IgnoredAttribute;   // "__device_builtin_surface_type__"
1613
3
    case 't':  // 1 string to match.
1614
3
      if (memcmp(Name.data()+18, "exture_type__", 13) != 0)
1615
0
        break;
1616
3
      return ParsedAttr::IgnoredAttribute;  // "__device_builtin_texture_type__"
1617
0
    }
1618
0
    break;
1619
313k
  }
1620
313k
  } else if (ParsedAttr::AS_Microsoft == Syntax) {
1621
52
  switch (Name.size()) {
1622
52
  
default: break0
;
1623
52
  case 4:  // 1 string to match.
1624
52
    if (memcmp(Name.data()+0, "uuid", 4) != 0)
1625
0
      break;
1626
52
    return ParsedAttr::AT_Uuid;  // "uuid"
1627
313k
  }
1628
313k
  } else if (ParsedAttr::AS_CXX11 == Syntax) {
1629
18.2k
  switch (Name.size()) {
1630
18.2k
  
default: break60
;
1631
18.2k
  case 8:  // 3 strings to match.
1632
13
    if (memcmp(Name.data()+0, "gnu::", 5) != 0)
1633
13
      break;
1634
0
    switch (Name[5]) {
1635
0
    default: break;
1636
0
    case 'f':  // 1 string to match.
1637
0
      if (memcmp(Name.data()+6, "ar", 2) != 0)
1638
0
        break;
1639
0
      return ParsedAttr::AT_MipsLongCall;  // "gnu::far"
1640
0
    case 'h':  // 1 string to match.
1641
0
      if (memcmp(Name.data()+6, "ot", 2) != 0)
1642
0
        break;
1643
0
      return ParsedAttr::AT_Hot;   // "gnu::hot"
1644
0
    case 'p':  // 1 string to match.
1645
0
      if (memcmp(Name.data()+6, "cs", 2) != 0)
1646
0
        break;
1647
0
      return ParsedAttr::AT_Pcs;  // "gnu::pcs"
1648
0
    }
1649
0
    break;
1650
32
  case 9:  // 6 strings to match.
1651
32
    if (memcmp(Name.data()+0, "gnu::", 5) != 0)
1652
22
      break;
1653
10
    switch (Name[5]) {
1654
10
    
default: break0
;
1655
10
    case 'c':  // 1 string to match.
1656
0
      if (memcmp(Name.data()+6, "old", 3) != 0)
1657
0
        break;
1658
0
      return ParsedAttr::AT_Cold;  // "gnu::cold"
1659
4
    case 'm':  // 1 string to match.
1660
4
      if (memcmp(Name.data()+6, "ode", 3) != 0)
1661
0
        break;
1662
4
      return ParsedAttr::AT_Mode;  // "gnu::mode"
1663
4
    case 'n':  // 1 string to match.
1664
0
      if (memcmp(Name.data()+6, "ear", 3) != 0)
1665
0
        break;
1666
0
      return ParsedAttr::AT_MipsShortCall;   // "gnu::near"
1667
2
    case 'p':  // 1 string to match.
1668
2
      if (memcmp(Name.data()+6, "ure", 3) != 0)
1669
0
        break;
1670
2
      return ParsedAttr::AT_Pure;  // "gnu::pure"
1671
4
    case 'u':  // 1 string to match.
1672
4
      if (memcmp(Name.data()+6, "sed", 3) != 0)
1673
0
        break;
1674
4
      return ParsedAttr::AT_Used;  // "gnu::used"
1675
4
    case 'w':  // 1 string to match.
1676
0
      if (memcmp(Name.data()+6, "eak", 3) != 0)
1677
0
        break;
1678
0
      return ParsedAttr::AT_Weak;  // "gnu::weak"
1679
0
    }
1680
0
    break;
1681
16.7k
  case 10:   // 6 strings to match.
1682
16.7k
    switch (Name[0]) {
1683
16.7k
    
default: break0
;
1684
16.7k
    case ':':  // 1 string to match.
1685
16.6k
      if (memcmp(Name.data()+1, ":noreturn", 9) != 0)
1686
4
        break;
1687
16.6k
      return ParsedAttr::AT_CXX11NoReturn;   // "::noreturn"
1688
16.6k
    case 'g':  // 5 strings to match.
1689
20
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
1690
0
        break;
1691
20
      switch (Name[5]) {
1692
20
      
default: break0
;
1693
20
      case 'a':  // 1 string to match.
1694
9
        if (memcmp(Name.data()+6, "lias", 4) != 0)
1695
0
          break;
1696
9
        return ParsedAttr::AT_Alias;   // "gnu::alias"
1697
9
      case 'c':  // 2 strings to match.
1698
8
        switch (Name[6]) {
1699
8
        
default: break0
;
1700
8
        case 'd':  // 1 string to match.
1701
4
          if (memcmp(Name.data()+7, "ecl", 3) != 0)
1702
0
            break;
1703
4
          return ParsedAttr::AT_CDecl;   // "gnu::cdecl"
1704
4
        case 'o':  // 1 string to match.
1705
4
          if (memcmp(Name.data()+7, "nst", 3) != 0)
1706
0
            break;
1707
4
          return ParsedAttr::AT_Const;  // "gnu::const"
1708
0
        }
1709
0
        break;
1710
0
      case 'i':  // 1 string to match.
1711
0
        if (memcmp(Name.data()+6, "func", 4) != 0)
1712
0
          break;
1713
0
        return ParsedAttr::AT_IFunc;   // "gnu::ifunc"
1714
3
      case 'n':  // 1 string to match.
1715
3
        if (memcmp(Name.data()+6, "aked", 4) != 0)
1716
0
          break;
1717
3
        return ParsedAttr::AT_Naked;  // "gnu::naked"
1718
0
      }
1719
0
      break;
1720
4
    }
1721
4
    break;
1722
83
  case 11:   // 10 strings to match.
1723
83
    switch (Name[0]) {
1724
83
    
default: break2
;
1725
83
    case ':':  // 1 string to match.
1726
57
      if (memcmp(Name.data()+1, ":nodiscard", 10) != 0)
1727
4
        break;
1728
53
      return ParsedAttr::AT_WarnUnusedResult;  // "::nodiscard"
1729
53
    case 'g':  // 9 strings to match.
1730
24
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
1731
0
        break;
1732
24
      switch (Name[5]) {
1733
24
      
default: break0
;
1734
24
      case 'c':  // 1 string to match.
1735
0
        if (memcmp(Name.data()+6, "ommon", 5) != 0)
1736
0
          break;
1737
0
        return ParsedAttr::AT_Common;  // "gnu::common"
1738
4
      case 'f':  // 1 string to match.
1739
4
        if (memcmp(Name.data()+6, "ormat", 5) != 0)
1740
0
          break;
1741
4
        return ParsedAttr::AT_Format;  // "gnu::format"
1742
4
      case 'm':  // 3 strings to match.
1743
0
        switch (Name[6]) {
1744
0
        default: break;
1745
0
        case 'a':  // 1 string to match.
1746
0
          if (memcmp(Name.data()+7, "lloc", 4) != 0)
1747
0
            break;
1748
0
          return ParsedAttr::AT_Restrict;  // "gnu::malloc"
1749
0
        case 'i':  // 1 string to match.
1750
0
          if (memcmp(Name.data()+7, "ps16", 4) != 0)
1751
0
            break;
1752
0
          return ParsedAttr::AT_Mips16;  // "gnu::mips16"
1753
0
        case 's':  // 1 string to match.
1754
0
          if (memcmp(Name.data()+7, "_abi", 4) != 0)
1755
0
            break;
1756
0
          return ParsedAttr::AT_MSABI;  // "gnu::ms_abi"
1757
0
        }
1758
0
        break;
1759
2
      case 'p':  // 1 string to match.
1760
2
        if (memcmp(Name.data()+6, "acked", 5) != 0)
1761
0
          break;
1762
2
        return ParsedAttr::AT_Packed;  // "gnu::packed"
1763
2
      case 's':  // 1 string to match.
1764
0
        if (memcmp(Name.data()+6, "ignal", 5) != 0)
1765
0
          break;
1766
0
        return ParsedAttr::AT_AVRSignal;   // "gnu::signal"
1767
0
      case 't':  // 1 string to match.
1768
0
        if (memcmp(Name.data()+6, "arget", 5) != 0)
1769
0
          break;
1770
0
        return ParsedAttr::AT_Target;  // "gnu::target"
1771
18
      case 'u':  // 1 string to match.
1772
18
        if (memcmp(Name.data()+6, "nused", 5) != 0)
1773
0
          break;
1774
18
        return ParsedAttr::AT_Unused;  // "gnu::unused"
1775
0
      }
1776
0
      break;
1777
6
    }
1778
6
    break;
1779
162
  case 12:   // 14 strings to match.
1780
162
    switch (Name[0]) {
1781
162
    
default: break5
;
1782
162
    case ':':  // 1 string to match.
1783
91
      if (memcmp(Name.data()+1, ":deprecated", 11) != 0)
1784
2
        break;
1785
89
      return ParsedAttr::AT_Deprecated;  // "::deprecated"
1786
89
    case 'g':  // 13 strings to match.
1787
66
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
1788
0
        break;
1789
66
      switch (Name[5]) {
1790
66
      
default: break0
;
1791
66
      case '_':  // 1 string to match.
1792
2
        if (memcmp(Name.data()+6, "_const", 6) != 0)
1793
0
          break;
1794
2
        return ParsedAttr::AT_Const;   // "gnu::__const"
1795
31
      case 'a':  // 2 strings to match.
1796
31
        switch (Name[6]) {
1797
31
        
default: break0
;
1798
31
        case 'b':  // 1 string to match.
1799
4
          if (memcmp(Name.data()+7, "i_tag", 5) != 0)
1800
0
            break;
1801
4
          return ParsedAttr::AT_AbiTag;  // "gnu::abi_tag"
1802
27
        case 'l':  // 1 string to match.
1803
27
          if (memcmp(Name.data()+7, "igned", 5) != 0)
1804
0
            break;
1805
27
          return ParsedAttr::AT_Aligned;  // "gnu::aligned"
1806
0
        }
1807
0
        break;
1808
4
      case 'c':  // 1 string to match.
1809
4
        if (memcmp(Name.data()+6, "leanup", 6) != 0)
1810
0
          break;
1811
4
        return ParsedAttr::AT_Cleanup;   // "gnu::cleanup"
1812
19
      case 'f':  // 1 string to match.
1813
19
        if (memcmp(Name.data()+6, "latten", 6) != 0)
1814
0
          break;
1815
19
        return ParsedAttr::AT_Flatten;   // "gnu::flatten"
1816
19
      case 'n':  // 3 strings to match.
1817
4
        if (Name[6] != 'o')
1818
0
          break;
1819
4
        switch (Name[7]) {
1820
4
        
default: break0
;
1821
4
        case 'd':  // 1 string to match.
1822
2
          if (memcmp(Name.data()+8, "ebug", 4) != 0)
1823
0
            break;
1824
2
          return ParsedAttr::AT_NoDebug;   // "gnu::nodebug"
1825
2
        case 'n':  // 1 string to match.
1826
2
          if (memcmp(Name.data()+8, "null", 4) != 0)
1827
0
            break;
1828
2
          return ParsedAttr::AT_NonNull;   // "gnu::nonnull"
1829
2
        case 't':  // 1 string to match.
1830
0
          if (memcmp(Name.data()+8, "hrow", 4) != 0)
1831
0
            break;
1832
0
          return ParsedAttr::AT_NoThrow;  // "gnu::nothrow"
1833
0
        }
1834
0
        break;
1835
0
      case 'r':  // 2 strings to match.
1836
0
        if (memcmp(Name.data()+6, "eg", 2) != 0)
1837
0
          break;
1838
0
        switch (Name[8]) {
1839
0
        default: break;
1840
0
        case 'c':  // 1 string to match.
1841
0
          if (memcmp(Name.data()+9, "all", 3) != 0)
1842
0
            break;
1843
0
          return ParsedAttr::AT_RegCall;   // "gnu::regcall"
1844
0
        case 'p':  // 1 string to match.
1845
0
          if (memcmp(Name.data()+9, "arm", 3) != 0)
1846
0
            break;
1847
0
          return ParsedAttr::AT_Regparm;  // "gnu::regparm"
1848
0
        }
1849
0
        break;
1850
6
      case 's':  // 2 strings to match.
1851
6
        switch (Name[6]) {
1852
6
        
default: break0
;
1853
6
        case 'e':  // 1 string to match.
1854
0
          if (memcmp(Name.data()+7, "ction", 5) != 0)
1855
0
            break;
1856
0
          return ParsedAttr::AT_Section;   // "gnu::section"
1857
6
        case 't':  // 1 string to match.
1858
6
          if (memcmp(Name.data()+7, "dcall", 5) != 0)
1859
0
            break;
1860
6
          return ParsedAttr::AT_StdCall;  // "gnu::stdcall"
1861
0
        }
1862
0
        break;
1863
0
      case 'w':  // 1 string to match.
1864
0
        if (memcmp(Name.data()+6, "eakref", 6) != 0)
1865
0
          break;
1866
0
        return ParsedAttr::AT_WeakRef;  // "gnu::weakref"
1867
0
      }
1868
0
      break;
1869
7
    }
1870
7
    break;
1871
157
  case 13:   // 12 strings to match.
1872
157
    switch (Name[0]) {
1873
157
    
default: break0
;
1874
157
    case ':':  // 1 string to match.
1875
79
      if (memcmp(Name.data()+1, ":fallthrough", 12) != 0)
1876
4
        break;
1877
75
      return ParsedAttr::AT_FallThrough;   // "::fallthrough"
1878
75
    case 'c':  // 2 strings to match.
1879
0
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
1880
0
        break;
1881
0
      switch (Name[7]) {
1882
0
      default: break;
1883
0
      case 'b':  // 1 string to match.
1884
0
        if (memcmp(Name.data()+8, "locks", 5) != 0)
1885
0
          break;
1886
0
        return ParsedAttr::AT_Blocks;  // "clang::blocks"
1887
0
      case 'p':  // 1 string to match.
1888
0
        if (memcmp(Name.data()+8, "ascal", 5) != 0)
1889
0
          break;
1890
0
        return ParsedAttr::AT_Pascal;  // "clang::pascal"
1891
0
      }
1892
0
      break;
1893
78
    case 'g':  // 9 strings to match.
1894
78
      switch (Name[1]) {
1895
78
      
default: break0
;
1896
78
      case 'n':  // 8 strings to match.
1897
42
        if (memcmp(Name.data()+2, "u::", 3) != 0)
1898
0
          break;
1899
42
        switch (Name[5]) {
1900
42
        
default: break0
;
1901
42
        case 'f':  // 1 string to match.
1902
12
          if (memcmp(Name.data()+6, "astcall", 7) != 0)
1903
0
            break;
1904
12
          return ParsedAttr::AT_FastCall;  // "gnu::fastcall"
1905
30
        case 'n':  // 4 strings to match.
1906
30
          if (Name[6] != 'o')
1907
0
            break;
1908
30
          switch (Name[7]) {
1909
30
          
default: break0
;
1910
30
          case 'c':  // 1 string to match.
1911
0
            if (memcmp(Name.data()+8, "ommon", 5) != 0)
1912
0
              break;
1913
0
            return ParsedAttr::AT_NoCommon;  // "gnu::nocommon"
1914
0
          case 'i':  // 1 string to match.
1915
0
            if (memcmp(Name.data()+8, "nline", 5) != 0)
1916
0
              break;
1917
0
            return ParsedAttr::AT_NoInline;  // "gnu::noinline"
1918
0
          case 'm':  // 1 string to match.
1919
0
            if (memcmp(Name.data()+8, "ips16", 5) != 0)
1920
0
              break;
1921
0
            return ParsedAttr::AT_NoMips16;  // "gnu::nomips16"
1922
30
          case 'r':  // 1 string to match.
1923
30
            if (memcmp(Name.data()+8, "eturn", 5) != 0)
1924
0
              break;
1925
30
            return ParsedAttr::AT_NoReturn;  // "gnu::noreturn"
1926
0
          }
1927
0
          break;
1928
0
        case 's':  // 2 strings to match.
1929
0
          switch (Name[6]) {
1930
0
          default: break;
1931
0
          case 'e':  // 1 string to match.
1932
0
            if (memcmp(Name.data()+7, "ntinel", 6) != 0)
1933
0
              break;
1934
0
            return ParsedAttr::AT_Sentinel;  // "gnu::sentinel"
1935
0
          case 'y':  // 1 string to match.
1936
0
            if (memcmp(Name.data()+7, "sv_abi", 6) != 0)
1937
0
              break;
1938
0
            return ParsedAttr::AT_SysVABI;  // "gnu::sysv_abi"
1939
0
          }
1940
0
          break;
1941
0
        case 't':  // 1 string to match.
1942
0
          if (memcmp(Name.data()+6, "hiscall", 7) != 0)
1943
0
            break;
1944
0
          return ParsedAttr::AT_ThisCall;  // "gnu::thiscall"
1945
0
        }
1946
0
        break;
1947
36
      case 's':  // 1 string to match.
1948
36
        if (memcmp(Name.data()+2, "l::suppress", 11) != 0)
1949
0
          break;
1950
36
        return ParsedAttr::AT_Suppress;  // "gsl::suppress"
1951
0
      }
1952
0
      break;
1953
4
    }
1954
4
    break;
1955
97
  case 14:   // 13 strings to match.
1956
97
    switch (Name[0]) {
1957
97
    
default: break0
;
1958
97
    case ':':  // 1 string to match.
1959
62
      if (memcmp(Name.data()+1, ":maybe_unused", 13) != 0)
1960
0
        break;
1961
62
      return ParsedAttr::AT_Unused;  // "::maybe_unused"
1962
62
    case 'c':  // 3 strings to match.
1963
16
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
1964
0
        break;
1965
16
      switch (Name[7]) {
1966
16
      
default: break0
;
1967
16
      case 'm':  // 1 string to match.
1968
0
        if (memcmp(Name.data()+8, "insize", 6) != 0)
1969
0
          break;
1970
0
        return ParsedAttr::AT_MinSize;   // "clang::minsize"
1971
16
      case 'o':  // 2 strings to match.
1972
16
        switch (Name[8]) {
1973
16
        
default: break0
;
1974
16
        case 'b':  // 1 string to match.
1975
0
          if (memcmp(Name.data()+9, "jc_gc", 5) != 0)
1976
0
            break;
1977
0
          return ParsedAttr::AT_ObjCGC;  // "clang::objc_gc"
1978
16
        case 'p':  // 1 string to match.
1979
16
          if (memcmp(Name.data()+9, "tnone", 5) != 0)
1980
0
            break;
1981
16
          return ParsedAttr::AT_OptimizeNone;  // "clang::optnone"
1982
0
        }
1983
0
        break;
1984
0
      }
1985
0
      break;
1986
19
    case 'g':  // 9 strings to match.
1987
19
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
1988
0
        break;
1989
19
      switch (Name[5]) {
1990
19
      
default: break0
;
1991
19
      case 'd':  // 2 strings to match.
1992
0
        if (memcmp(Name.data()+6, "ll", 2) != 0)
1993
0
          break;
1994
0
        switch (Name[8]) {
1995
0
        default: break;
1996
0
        case 'e':  // 1 string to match.
1997
0
          if (memcmp(Name.data()+9, "xport", 5) != 0)
1998
0
            break;
1999
0
          return ParsedAttr::AT_DLLExport;   // "gnu::dllexport"
2000
0
        case 'i':  // 1 string to match.
2001
0
          if (memcmp(Name.data()+9, "mport", 5) != 0)
2002
0
            break;
2003
0
          return ParsedAttr::AT_DLLImport;  // "gnu::dllimport"
2004
0
        }
2005
0
        break;
2006
16
      case 'i':  // 1 string to match.
2007
16
        if (memcmp(Name.data()+6, "nterrupt", 8) != 0)
2008
0
          break;
2009
16
        return ParsedAttr::AT_Interrupt;   // "gnu::interrupt"
2010
16
      case 'l':  // 1 string to match.
2011
0
        if (memcmp(Name.data()+6, "ong_call", 8) != 0)
2012
0
          break;
2013
0
        return ParsedAttr::AT_MipsLongCall;  // "gnu::long_call"
2014
0
      case 'm':  // 3 strings to match.
2015
0
        switch (Name[6]) {
2016
0
        default: break;
2017
0
        case 'a':  // 1 string to match.
2018
0
          if (memcmp(Name.data()+7, "y_alias", 7) != 0)
2019
0
            break;
2020
0
          return ParsedAttr::AT_MayAlias;  // "gnu::may_alias"
2021
0
        case 'i':  // 1 string to match.
2022
0
          if (memcmp(Name.data()+7, "cromips", 7) != 0)
2023
0
            break;
2024
0
          return ParsedAttr::AT_MicroMips;   // "gnu::micromips"
2025
0
        case 's':  // 1 string to match.
2026
0
          if (memcmp(Name.data()+7, "_struct", 7) != 0)
2027
0
            break;
2028
0
          return ParsedAttr::AT_MSStruct;  // "gnu::ms_struct"
2029
0
        }
2030
0
        break;
2031
0
      case 's':  // 1 string to match.
2032
0
        if (memcmp(Name.data()+6, "electany", 8) != 0)
2033
0
          break;
2034
0
        return ParsedAttr::AT_SelectAny;   // "gnu::selectany"
2035
3
      case 't':  // 1 string to match.
2036
3
        if (memcmp(Name.data()+6, "ls_model", 8) != 0)
2037
0
          break;
2038
3
        return ParsedAttr::AT_TLSModel;  // "gnu::tls_model"
2039
0
      }
2040
0
      break;
2041
0
    }
2042
0
    break;
2043
77
  case 15:   // 14 strings to match.
2044
77
    switch (Name[0]) {
2045
77
    
default: break10
;
2046
77
    case 'c':  // 5 strings to match.
2047
31
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
2048
0
        break;
2049
31
      switch (Name[7]) {
2050
31
      
default: break0
;
2051
31
      case 'N':  // 1 string to match.
2052
0
        if (memcmp(Name.data()+8, "SObject", 7) != 0)
2053
0
          break;
2054
0
        return ParsedAttr::AT_ObjCNSObject;  // "clang::NSObject"
2055
22
      case 'a':  // 1 string to match.
2056
22
        if (memcmp(Name.data()+8, "nnotate", 7) != 0)
2057
0
          break;
2058
22
        return ParsedAttr::AT_Annotate;  // "clang::annotate"
2059
22
      case 'i':  // 2 strings to match.
2060
4
        if (Name[8] != 'b')
2061
0
          break;
2062
4
        switch (Name[9]) {
2063
4
        
default: break0
;
2064
4
        case 'a':  // 1 string to match.
2065
0
          if (memcmp(Name.data()+10, "ction", 5) != 0)
2066
0
            break;
2067
0
          return ParsedAttr::AT_IBAction;  // "clang::ibaction"
2068
4
        case 'o':  // 1 string to match.
2069
4
          if (memcmp(Name.data()+10, "utlet", 5) != 0)
2070
0
            break;
2071
4
          return ParsedAttr::AT_IBOutlet;  // "clang::iboutlet"
2072
0
        }
2073
0
        break;
2074
5
      case 'n':  // 1 string to match.
2075
5
        if (memcmp(Name.data()+8, "oescape", 7) != 0)
2076
0
          break;
2077
5
        return ParsedAttr::AT_NoEscape;  // "clang::noescape"
2078
0
      }
2079
0
      break;
2080
36
    case 'g':  // 9 strings to match.
2081
36
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
2082
0
        break;
2083
36
      switch (Name[5]) {
2084
36
      
default: break0
;
2085
36
      case 'a':  // 2 strings to match.
2086
0
        switch (Name[6]) {
2087
0
        default: break;
2088
0
        case 'l':  // 1 string to match.
2089
0
          if (memcmp(Name.data()+7, "loc_size", 8) != 0)
2090
0
            break;
2091
0
          return ParsedAttr::AT_AllocSize;   // "gnu::alloc_size"
2092
0
        case 'r':  // 1 string to match.
2093
0
          if (memcmp(Name.data()+7, "tificial", 8) != 0)
2094
0
            break;
2095
0
          return ParsedAttr::AT_Artificial;  // "gnu::artificial"
2096
0
        }
2097
0
        break;
2098
20
      case 'd':  // 2 strings to match.
2099
20
        if (Name[6] != 'e')
2100
0
          break;
2101
20
        switch (Name[7]) {
2102
20
        
default: break0
;
2103
20
        case 'p':  // 1 string to match.
2104
20
          if (memcmp(Name.data()+8, "recated", 7) != 0)
2105
0
            break;
2106
20
          return ParsedAttr::AT_Deprecated;  // "gnu::deprecated"
2107
20
        case 's':  // 1 string to match.
2108
0
          if (memcmp(Name.data()+8, "tructor", 7) != 0)
2109
0
            break;
2110
0
          return ParsedAttr::AT_Destructor;  // "gnu::destructor"
2111
0
        }
2112
0
        break;
2113
0
      case 'f':  // 1 string to match.
2114
0
        if (memcmp(Name.data()+6, "ormat_arg", 9) != 0)
2115
0
          break;
2116
0
        return ParsedAttr::AT_FormatArg;   // "gnu::format_arg"
2117
2
      case 'g':  // 1 string to match.
2118
2
        if (memcmp(Name.data()+6, "nu_inline", 9) != 0)
2119
0
          break;
2120
2
        return ParsedAttr::AT_GNUInline;   // "gnu::gnu_inline"
2121
11
      case 'n':  // 1 string to match.
2122
11
        if (memcmp(Name.data()+6, "ocf_check", 9) != 0)
2123
0
          break;
2124
11
        return ParsedAttr::AT_AnyX86NoCfCheck;   // "gnu::nocf_check"
2125
11
      case 's':  // 1 string to match.
2126
0
        if (memcmp(Name.data()+6, "hort_call", 9) != 0)
2127
0
          break;
2128
0
        return ParsedAttr::AT_MipsShortCall;   // "gnu::short_call"
2129
3
      case 'v':  // 1 string to match.
2130
3
        if (memcmp(Name.data()+6, "isibility", 9) != 0)
2131
0
          break;
2132
3
        return ParsedAttr::AT_Visibility;  // "gnu::visibility"
2133
0
      }
2134
0
      break;
2135
10
    }
2136
10
    break;
2137
10
  case 16:   // 8 strings to match.
2138
6
    switch (Name[0]) {
2139
6
    
default: break0
;
2140
6
    case 'c':  // 3 strings to match.
2141
3
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
2142
0
        break;
2143
3
      switch (Name[7]) {
2144
3
      
default: break0
;
2145
3
      case 'f':  // 1 string to match.
2146
1
        if (memcmp(Name.data()+8, "lag_enum", 8) != 0)
2147
0
          break;
2148
1
        return ParsedAttr::AT_FlagEnum;  // "clang::flag_enum"
2149
2
      case 's':  // 1 string to match.
2150
2
        if (memcmp(Name.data()+8, "wiftcall", 8) != 0)
2151
0
          break;
2152
2
        return ParsedAttr::AT_SwiftCall;   // "clang::swiftcall"
2153
2
      case 'v':  // 1 string to match.
2154
0
        if (memcmp(Name.data()+8, "ecreturn", 8) != 0)
2155
0
          break;
2156
0
        return ParsedAttr::AT_VecReturn;  // "clang::vecreturn"
2157
0
      }
2158
0
      break;
2159
3
    case 'g':  // 5 strings to match.
2160
3
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
2161
0
        break;
2162
3
      switch (Name[5]) {
2163
3
      
default: break0
;
2164
3
      case 'a':  // 1 string to match.
2165
0
        if (memcmp(Name.data()+6, "lloc_align", 10) != 0)
2166
0
          break;
2167
0
        return ParsedAttr::AT_AllocAlign;  // "gnu::alloc_align"
2168
0
      case 'c':  // 1 string to match.
2169
0
        if (memcmp(Name.data()+6, "onstructor", 10) != 0)
2170
0
          break;
2171
0
        return ParsedAttr::AT_Constructor;   // "gnu::constructor"
2172
0
      case 'n':  // 1 string to match.
2173
0
        if (memcmp(Name.data()+6, "omicromips", 10) != 0)
2174
0
          break;
2175
0
        return ParsedAttr::AT_NoMicroMips;   // "gnu::nomicromips"
2176
3
      case 'v':  // 1 string to match.
2177
3
        if (memcmp(Name.data()+6, "ector_size", 10) != 0)
2178
0
          break;
2179
3
        return ParsedAttr::AT_VectorSize;  // "gnu::vector_size"
2180
3
      case 'w':  // 1 string to match.
2181
0
        if (memcmp(Name.data()+6, "arn_unused", 10) != 0)
2182
0
          break;
2183
0
        return ParsedAttr::AT_WarnUnused;  // "gnu::warn_unused"
2184
0
      }
2185
0
      break;
2186
0
    }
2187
0
    break;
2188
42
  case 17:   // 5 strings to match.
2189
42
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
2190
0
      break;
2191
42
    switch (Name[7]) {
2192
42
    
default: break0
;
2193
42
    case 'c':  // 3 strings to match.
2194
0
      switch (Name[8]) {
2195
0
      default: break;
2196
0
      case 'a':  // 1 string to match.
2197
0
        if (memcmp(Name.data()+9, "pability", 8) != 0)
2198
0
          break;
2199
0
        return ParsedAttr::AT_Capability;  // "clang::capability"
2200
0
      case 'o':  // 2 strings to match.
2201
0
        if (Name[9] != 'n')
2202
0
          break;
2203
0
        switch (Name[10]) {
2204
0
        default: break;
2205
0
        case 's':  // 1 string to match.
2206
0
          if (memcmp(Name.data()+11, "umable", 6) != 0)
2207
0
            break;
2208
0
          return ParsedAttr::AT_Consumable;  // "clang::consumable"
2209
0
        case 'v':  // 1 string to match.
2210
0
          if (memcmp(Name.data()+11, "ergent", 6) != 0)
2211
0
            break;
2212
0
          return ParsedAttr::AT_Convergent;  // "clang::convergent"
2213
0
        }
2214
0
        break;
2215
0
      }
2216
0
      break;
2217
42
    case 'n':  // 1 string to match.
2218
42
      if (memcmp(Name.data()+8, "o_destroy", 9) != 0)
2219
0
        break;
2220
42
      return ParsedAttr::AT_NoDestroy;   // "clang::no_destroy"
2221
42
    case 'v':  // 1 string to match.
2222
0
      if (memcmp(Name.data()+8, "ectorcall", 9) != 0)
2223
0
        break;
2224
0
      return ParsedAttr::AT_VectorCall;  // "clang::vectorcall"
2225
0
    }
2226
0
    break;
2227
110
  case 18:   // 13 strings to match.
2228
110
    switch (Name[0]) {
2229
110
    
default: break0
;
2230
110
    case 'c':  // 10 strings to match.
2231
108
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
2232
0
        break;
2233
108
      switch (Name[7]) {
2234
108
      
default: break0
;
2235
108
      case 'c':  // 1 string to match.
2236
0
        if (memcmp(Name.data()+8, "f_consumed", 10) != 0)
2237
0
          break;
2238
0
        return ParsedAttr::AT_CFConsumed;  // "clang::cf_consumed"
2239
76
      case 'f':  // 1 string to match.
2240
76
        if (memcmp(Name.data()+8, "allthrough", 10) != 0)
2241
0
          break;
2242
76
        return ParsedAttr::AT_FallThrough;   // "clang::fallthrough"
2243
76
      case 'g':  // 1 string to match.
2244
0
        if (memcmp(Name.data()+8, "uarded_var", 10) != 0)
2245
0
          break;
2246
0
        return ParsedAttr::AT_GuardedVar;  // "clang::guarded_var"
2247
28
      case 'n':  // 3 strings to match.
2248
28
        switch (Name[8]) {
2249
28
        
default: break0
;
2250
28
        case 'o':  // 2 strings to match.
2251
28
          switch (Name[9]) {
2252
28
          
default: break0
;
2253
28
          case '_':  // 1 string to match.
2254
24
            if (memcmp(Name.data()+10, "sanitize", 8) != 0)
2255
0
              break;
2256
24
            return ParsedAttr::AT_NoSanitize;  // "clang::no_sanitize"
2257
24
          case 'd':  // 1 string to match.
2258
4
            if (memcmp(Name.data()+10, "uplicate", 8) != 0)
2259
0
              break;
2260
4
            return ParsedAttr::AT_NoDuplicate;  // "clang::noduplicate"
2261
0
          }
2262
0
          break;
2263
0
        case 's':  // 1 string to match.
2264
0
          if (memcmp(Name.data()+9, "_consumed", 9) != 0)
2265
0
            break;
2266
0
          return ParsedAttr::AT_NSConsumed;  // "clang::ns_consumed"
2267
0
        }
2268
0
        break;
2269
0
      case 'o':  // 1 string to match.
2270
0
        if (memcmp(Name.data()+8, "bjc_bridge", 10) != 0)
2271
0
          break;
2272
0
        return ParsedAttr::AT_ObjCBridge;  // "clang::objc_bridge"
2273
2
      case 't':  // 1 string to match.
2274
2
        if (memcmp(Name.data()+8, "rivial_abi", 10) != 0)
2275
0
          break;
2276
2
        return ParsedAttr::AT_TrivialABI;  // "clang::trivial_abi"
2277
2
      case 'u':  // 1 string to match.
2278
2
        if (memcmp(Name.data()+8, "navailable", 10) != 0)
2279
0
          break;
2280
2
        return ParsedAttr::AT_Unavailable;   // "clang::unavailable"
2281
2
      case 'w':  // 1 string to match.
2282
0
        if (memcmp(Name.data()+8, "eak_import", 10) != 0)
2283
0
          break;
2284
0
        return ParsedAttr::AT_WeakImport;  // "clang::weak_import"
2285
0
      }
2286
0
      break;
2287
2
    case 'g':  // 3 strings to match.
2288
2
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
2289
0
        break;
2290
2
      switch (Name[5]) {
2291
2
      
default: break0
;
2292
2
      case 'a':  // 1 string to match.
2293
2
        if (memcmp(Name.data()+6, "lways_inline", 12) != 0)
2294
0
          break;
2295
2
        return ParsedAttr::AT_AlwaysInline;  // "gnu::always_inline"
2296
2
      case 'i':  // 1 string to match.
2297
0
        if (memcmp(Name.data()+6, "nit_priority", 12) != 0)
2298
0
          break;
2299
0
        return ParsedAttr::AT_InitPriority;  // "gnu::init_priority"
2300
0
      case 'r':  // 1 string to match.
2301
0
        if (memcmp(Name.data()+6, "eturns_twice", 12) != 0)
2302
0
          break;
2303
0
        return ParsedAttr::AT_ReturnsTwice;  // "gnu::returns_twice"
2304
0
      }
2305
0
      break;
2306
0
    }
2307
0
    break;
2308
81
  case 19:   // 8 strings to match.
2309
81
    switch (Name[0]) {
2310
81
    
default: break33
;
2311
81
    case 'c':  // 6 strings to match.
2312
23
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
2313
0
        break;
2314
23
      switch (Name[7]) {
2315
23
      
default: break2
;
2316
23
      case 'a':  // 1 string to match.
2317
14
        if (memcmp(Name.data()+8, "vailability", 11) != 0)
2318
0
          break;
2319
14
        return ParsedAttr::AT_Availability;  // "clang::availability"
2320
14
      case 'c':  // 2 strings to match.
2321
5
        if (memcmp(Name.data()+8, "pu_", 3) != 0)
2322
0
          break;
2323
5
        switch (Name[11]) {
2324
5
        
default: break0
;
2325
5
        case 'd':  // 1 string to match.
2326
0
          if (memcmp(Name.data()+12, "ispatch", 7) != 0)
2327
0
            break;
2328
0
          return ParsedAttr::AT_CPUDispatch;   // "clang::cpu_dispatch"
2329
5
        case 's':  // 1 string to match.
2330
5
          if (memcmp(Name.data()+12, "pecific", 7) != 0)
2331
0
            break;
2332
5
          return ParsedAttr::AT_CPUSpecific;  // "clang::cpu_specific"
2333
0
        }
2334
0
        break;
2335
2
      case 'o':  // 2 strings to match.
2336
2
        switch (Name[8]) {
2337
2
        
default: break0
;
2338
2
        case 'b':  // 1 string to match.
2339
0
          if (memcmp(Name.data()+9, "jc_boxable", 10) != 0)
2340
0
            break;
2341
0
          return ParsedAttr::AT_ObjCBoxable;   // "clang::objc_boxable"
2342
2
        case 'v':  // 1 string to match.
2343
2
          if (memcmp(Name.data()+9, "erloadable", 10) != 0)
2344
0
            break;
2345
2
          return ParsedAttr::AT_Overloadable;  // "clang::overloadable"
2346
0
        }
2347
0
        break;
2348
0
      case 'p':  // 1 string to match.
2349
0
        if (memcmp(Name.data()+8, "reserve_all", 11) != 0)
2350
0
          break;
2351
0
        return ParsedAttr::AT_PreserveAll;  // "clang::preserve_all"
2352
2
      }
2353
2
      break;
2354
25
    case 'g':  // 2 strings to match.
2355
25
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
2356
0
        break;
2357
25
      switch (Name[5]) {
2358
25
      
default: break0
;
2359
25
      case 'a':  // 1 string to match.
2360
0
        if (memcmp(Name.data()+6, "ssume_aligned", 13) != 0)
2361
0
          break;
2362
0
        return ParsedAttr::AT_AssumeAligned;   // "gnu::assume_aligned"
2363
25
      case 'n':  // 1 string to match.
2364
25
        if (memcmp(Name.data()+6, "o_split_stack", 13) != 0)
2365
0
          break;
2366
25
        return ParsedAttr::AT_NoSplitStack;  // "gnu::no_split_stack"
2367
0
      }
2368
0
      break;
2369
35
    }
2370
35
    break;
2371
207
  case 20:   // 10 strings to match.
2372
207
    switch (Name[0]) {
2373
207
    
default: break0
;
2374
207
    case ':':  // 1 string to match.
2375
103
      if (memcmp(Name.data()+1, ":carries_dependency", 19) != 0)
2376
2
        break;
2377
101
      return ParsedAttr::AT_CarriesDependency;   // "::carries_dependency"
2378
104
    case 'c':  // 8 strings to match.
2379
104
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
2380
0
        break;
2381
104
      switch (Name[7]) {
2382
104
      
default: break0
;
2383
104
      case 'a':  // 1 string to match.
2384
2
        if (memcmp(Name.data()+8, "ddress_space", 12) != 0)
2385
0
          break;
2386
2
        return ParsedAttr::AT_AddressSpace;  // "clang::address_space"
2387
2
      case 'c':  // 1 string to match.
2388
0
        if (memcmp(Name.data()+8, "allable_when", 12) != 0)
2389
0
          break;
2390
0
        return ParsedAttr::AT_CallableWhen;  // "clang::callable_when"
2391
44
      case 'l':  // 1 string to match.
2392
44
        if (memcmp(Name.data()+8, "ifetimebound", 12) != 0)
2393
0
          break;
2394
44
        return ParsedAttr::AT_LifetimeBound;   // "clang::lifetimebound"
2395
44
      case 'p':  // 1 string to match.
2396
0
        if (memcmp(Name.data()+8, "reserve_most", 12) != 0)
2397
0
          break;
2398
0
        return ParsedAttr::AT_PreserveMost;  // "clang::preserve_most"
2399
16
      case 'r':  // 1 string to match.
2400
16
        if (memcmp(Name.data()+8, "einitializes", 12) != 0)
2401
0
          break;
2402
16
        return ParsedAttr::AT_Reinitializes;   // "clang::reinitializes"
2403
16
      case 's':  // 2 strings to match.
2404
2
        switch (Name[8]) {
2405
2
        
default: break0
;
2406
2
        case 'e':  // 1 string to match.
2407
0
          if (memcmp(Name.data()+9, "t_typestate", 11) != 0)
2408
0
            break;
2409
0
          return ParsedAttr::AT_SetTypestate;  // "clang::set_typestate"
2410
2
        case 'w':  // 1 string to match.
2411
2
          if (memcmp(Name.data()+9, "ift_context", 11) != 0)
2412
0
            break;
2413
2
          return ParsedAttr::AT_SwiftContext;  // "clang::swift_context"
2414
0
        }
2415
0
        break;
2416
40
      case 'x':  // 1 string to match.
2417
40
        if (memcmp(Name.data()+8, "ray_log_args", 12) != 0)
2418
0
          break;
2419
40
        return ParsedAttr::AT_XRayLogArgs;  // "clang::xray_log_args"
2420
0
      }
2421
0
      break;
2422
0
    case 'g':  // 1 string to match.
2423
0
      if (memcmp(Name.data()+1, "nu::returns_nonnull", 19) != 0)
2424
0
        break;
2425
0
      return ParsedAttr::AT_ReturnsNonNull;  // "gnu::returns_nonnull"
2426
2
    }
2427
2
    break;
2428
54
  case 21:   // 6 strings to match.
2429
54
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
2430
4
      break;
2431
50
    switch (Name[7]) {
2432
50
    
default: break0
;
2433
50
    case 'a':  // 1 string to match.
2434
48
      if (memcmp(Name.data()+8, "lways_destroy", 13) != 0)
2435
0
        break;
2436
48
      return ParsedAttr::AT_AlwaysDestroy;   // "clang::always_destroy"
2437
48
    case 'i':  // 1 string to match.
2438
0
      if (memcmp(Name.data()+8, "ntel_ocl_bicc", 13) != 0)
2439
0
        break;
2440
0
      return ParsedAttr::AT_IntelOclBicc;  // "clang::intel_ocl_bicc"
2441
2
    case 'o':  // 2 strings to match.
2442
2
      if (memcmp(Name.data()+8, "bjc_", 4) != 0)
2443
0
        break;
2444
2
      switch (Name[12]) {
2445
2
      
default: break0
;
2446
2
      case 'e':  // 1 string to match.
2447
2
        if (memcmp(Name.data()+13, "xception", 8) != 0)
2448
0
          break;
2449
2
        return ParsedAttr::AT_ObjCException;   // "clang::objc_exception"
2450
2
      case 'o':  // 1 string to match.
2451
0
        if (memcmp(Name.data()+13, "wnership", 8) != 0)
2452
0
          break;
2453
0
        return ParsedAttr::AT_ObjCOwnership;  // "clang::objc_ownership"
2454
0
      }
2455
0
      break;
2456
0
    case 'p':  // 1 string to match.
2457
0
      if (memcmp(Name.data()+8, "t_guarded_var", 13) != 0)
2458
0
        break;
2459
0
      return ParsedAttr::AT_PtGuardedVar;  // "clang::pt_guarded_var"
2460
0
    case 't':  // 1 string to match.
2461
0
      if (memcmp(Name.data()+8, "est_typestate", 13) != 0)
2462
0
        break;
2463
0
      return ParsedAttr::AT_TestTypestate;  // "clang::test_typestate"
2464
0
    }
2465
0
    break;
2466
10
  case 22:   // 11 strings to match.
2467
10
    switch (Name[0]) {
2468
10
    
default: break0
;
2469
10
    case 'c':  // 10 strings to match.
2470
10
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
2471
0
        break;
2472
10
      switch (Name[7]) {
2473
10
      
default: break0
;
2474
10
      case 'a':  // 2 strings to match.
2475
0
        if (memcmp(Name.data()+8, "mdgpu_num_", 10) != 0)
2476
0
          break;
2477
0
        switch (Name[18]) {
2478
0
        default: break;
2479
0
        case 's':  // 1 string to match.
2480
0
          if (memcmp(Name.data()+19, "gpr", 3) != 0)
2481
0
            break;
2482
0
          return ParsedAttr::AT_AMDGPUNumSGPR;   // "clang::amdgpu_num_sgpr"
2483
0
        case 'v':  // 1 string to match.
2484
0
          if (memcmp(Name.data()+19, "gpr", 3) != 0)
2485
0
            break;
2486
0
          return ParsedAttr::AT_AMDGPUNumVGPR;  // "clang::amdgpu_num_vgpr"
2487
0
        }
2488
0
        break;
2489
10
      case 'n':  // 1 string to match.
2490
10
        if (memcmp(Name.data()+8, "ot_tail_called", 14) != 0)
2491
0
          break;
2492
10
        return ParsedAttr::AT_NotTailCalled;   // "clang::not_tail_called"
2493
10
      case 'o':  // 3 strings to match.
2494
0
        switch (Name[8]) {
2495
0
        default: break;
2496
0
        case 'b':  // 1 string to match.
2497
0
          if (memcmp(Name.data()+9, "jc_root_class", 13) != 0)
2498
0
            break;
2499
0
          return ParsedAttr::AT_ObjCRootClass;   // "clang::objc_root_class"
2500
0
        case 'w':  // 2 strings to match.
2501
0
          if (memcmp(Name.data()+9, "nership_", 8) != 0)
2502
0
            break;
2503
0
          switch (Name[17]) {
2504
0
          default: break;
2505
0
          case 'h':  // 1 string to match.
2506
0
            if (memcmp(Name.data()+18, "olds", 4) != 0)
2507
0
              break;
2508
0
            return ParsedAttr::AT_Ownership;   // "clang::ownership_holds"
2509
0
          case 't':  // 1 string to match.
2510
0
            if (memcmp(Name.data()+18, "akes", 4) != 0)
2511
0
              break;
2512
0
            return ParsedAttr::AT_Ownership;  // "clang::ownership_takes"
2513
0
          }
2514
0
          break;
2515
0
        }
2516
0
        break;
2517
0
      case 'p':  // 1 string to match.
2518
0
        if (memcmp(Name.data()+8, "aram_typestate", 14) != 0)
2519
0
          break;
2520
0
        return ParsedAttr::AT_ParamTypestate;  // "clang::param_typestate"
2521
0
      case 's':  // 1 string to match.
2522
0
        if (memcmp(Name.data()+8, "coped_lockable", 14) != 0)
2523
0
          break;
2524
0
        return ParsedAttr::AT_ScopedLockable;  // "clang::scoped_lockable"
2525
0
      case 't':  // 1 string to match.
2526
0
        if (memcmp(Name.data()+8, "ype_visibility", 14) != 0)
2527
0
          break;
2528
0
        return ParsedAttr::AT_TypeVisibility;  // "clang::type_visibility"
2529
0
      case 'u':  // 1 string to match.
2530
0
        if (memcmp(Name.data()+8, "nlock_function", 14) != 0)
2531
0
          break;
2532
0
        return ParsedAttr::AT_ReleaseCapability;  // "clang::unlock_function"
2533
0
      }
2534
0
      break;
2535
0
    case 'g':  // 1 string to match.
2536
0
      if (memcmp(Name.data()+1, "nu::transparent_union", 21) != 0)
2537
0
        break;
2538
0
      return ParsedAttr::AT_TransparentUnion;  // "gnu::transparent_union"
2539
0
    }
2540
0
    break;
2541
23
  case 23:   // 8 strings to match.
2542
23
    switch (Name[0]) {
2543
23
    
default: break2
;
2544
23
    case 'c':  // 6 strings to match.
2545
19
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
2546
0
        break;
2547
19
      switch (Name[7]) {
2548
19
      
default: break0
;
2549
19
      case 'i':  // 1 string to match.
2550
13
        if (memcmp(Name.data()+8, "nternal_linkage", 15) != 0)
2551
0
          break;
2552
13
        return ParsedAttr::AT_InternalLinkage;   // "clang::internal_linkage"
2553
13
      case 'm':  // 1 string to match.
2554
0
        if (memcmp(Name.data()+8, "in_vector_width", 15) != 0)
2555
0
          break;
2556
0
        return ParsedAttr::AT_MinVectorWidth;  // "clang::min_vector_width"
2557
6
      case 'n':  // 2 strings to match.
2558
6
        switch (Name[8]) {
2559
6
        
default: break0
;
2560
6
        case 'e':  // 1 string to match.
2561
0
          if (memcmp(Name.data()+9, "on_vector_type", 14) != 0)
2562
0
            break;
2563
0
          return ParsedAttr::AT_NeonVectorType;  // "clang::neon_vector_type"
2564
6
        case 's':  // 1 string to match.
2565
6
          if (memcmp(Name.data()+9, "_consumes_self", 14) != 0)
2566
0
            break;
2567
6
          return ParsedAttr::AT_NSConsumesSelf;  // "clang::ns_consumes_self"
2568
0
        }
2569
0
        break;
2570
0
      case 'p':  // 1 string to match.
2571
0
        if (memcmp(Name.data()+8, "ass_object_size", 15) != 0)
2572
0
          break;
2573
0
        return ParsedAttr::AT_PassObjectSize;  // "clang::pass_object_size"
2574
0
      case 'r':  // 1 string to match.
2575
0
        if (memcmp(Name.data()+8, "eturn_typestate", 15) != 0)
2576
0
          break;
2577
0
        return ParsedAttr::AT_ReturnTypestate;  // "clang::return_typestate"
2578
0
      }
2579
0
      break;
2580
2
    case 'g':  // 2 strings to match.
2581
2
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
2582
0
        break;
2583
2
      switch (Name[5]) {
2584
2
      
default: break0
;
2585
2
      case 'n':  // 1 string to match.
2586
0
        if (memcmp(Name.data()+6, "o_sanitize_thread", 17) != 0)
2587
0
          break;
2588
0
        return ParsedAttr::AT_NoSanitizeSpecific;  // "gnu::no_sanitize_thread"
2589
2
      case 'w':  // 1 string to match.
2590
2
        if (memcmp(Name.data()+6, "arn_unused_result", 17) != 0)
2591
0
          break;
2592
2
        return ParsedAttr::AT_WarnUnusedResult;  // "gnu::warn_unused_result"
2593
0
      }
2594
0
      break;
2595
2
    }
2596
2
    break;
2597
28
  case 24:   // 5 strings to match.
2598
28
    switch (Name[0]) {
2599
28
    
default: break2
;
2600
28
    case 'c':  // 4 strings to match.
2601
8
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
2602
0
        break;
2603
8
      switch (Name[7]) {
2604
8
      
default: break0
;
2605
8
      case 'a':  // 1 string to match.
2606
0
        if (memcmp(Name.data()+8, "ssert_capability", 16) != 0)
2607
0
          break;
2608
0
        return ParsedAttr::AT_AssertCapability;  // "clang::assert_capability"
2609
8
      case 'o':  // 2 strings to match.
2610
8
        switch (Name[8]) {
2611
8
        
default: break0
;
2612
8
        case 'b':  // 1 string to match.
2613
4
          if (memcmp(Name.data()+9, "jc_runtime_name", 15) != 0)
2614
0
            break;
2615
4
          return ParsedAttr::AT_ObjCRuntimeName;   // "clang::objc_runtime_name"
2616
4
        case 'w':  // 1 string to match.
2617
4
          if (memcmp(Name.data()+9, "nership_returns", 15) != 0)
2618
0
            break;
2619
4
          return ParsedAttr::AT_Ownership;  // "clang::ownership_returns"
2620
0
        }
2621
0
        break;
2622
0
      case 's':  // 1 string to match.
2623
0
        if (memcmp(Name.data()+8, "hared_capability", 16) != 0)
2624
0
          break;
2625
0
        return ParsedAttr::AT_Capability;  // "clang::shared_capability"
2626
0
      }
2627
0
      break;
2628
18
    case 'g':  // 1 string to match.
2629
18
      if (memcmp(Name.data()+1, "nu::no_sanitize_address", 23) != 0)
2630
0
        break;
2631
18
      return ParsedAttr::AT_NoSanitizeSpecific;  // "gnu::no_sanitize_address"
2632
2
    }
2633
2
    break;
2634
39
  case 25:   // 10 strings to match.
2635
39
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
2636
0
      break;
2637
39
    switch (Name[7]) {
2638
39
    
default: break0
;
2639
39
    case 'a':  // 1 string to match.
2640
0
      if (memcmp(Name.data()+8, "cquire_capability", 17) != 0)
2641
0
        break;
2642
0
      return ParsedAttr::AT_AcquireCapability;   // "clang::acquire_capability"
2643
18
    case 'd':  // 1 string to match.
2644
18
      if (memcmp(Name.data()+8, "isable_tail_calls", 17) != 0)
2645
0
        break;
2646
18
      return ParsedAttr::AT_DisableTailCalls;  // "clang::disable_tail_calls"
2647
18
    case 'e':  // 1 string to match.
2648
7
      if (memcmp(Name.data()+8, "num_extensibility", 17) != 0)
2649
0
        break;
2650
7
      return ParsedAttr::AT_EnumExtensibility;   // "clang::enum_extensibility"
2651
7
    case 'i':  // 1 string to match.
2652
0
      if (memcmp(Name.data()+8, "boutletcollection", 17) != 0)
2653
0
        break;
2654
0
      return ParsedAttr::AT_IBOutletCollection;  // "clang::iboutletcollection"
2655
0
    case 'n':  // 2 strings to match.
2656
0
      if (memcmp(Name.data()+8, "o_s", 3) != 0)
2657
0
        break;
2658
0
      switch (Name[11]) {
2659
0
      default: break;
2660
0
      case 'a':  // 1 string to match.
2661
0
        if (memcmp(Name.data()+12, "nitize_memory", 13) != 0)
2662
0
          break;
2663
0
        return ParsedAttr::AT_NoSanitizeSpecific;  // "clang::no_sanitize_memory"
2664
0
      case 't':  // 1 string to match.
2665
0
        if (memcmp(Name.data()+12, "ack_protector", 13) != 0)
2666
0
          break;
2667
0
        return ParsedAttr::AT_NoStackProtector;  // "clang::no_stack_protector"
2668
0
      }
2669
0
      break;
2670
0
    case 'o':  // 1 string to match.
2671
0
      if (memcmp(Name.data()+8, "bjc_method_family", 17) != 0)
2672
0
        break;
2673
0
      return ParsedAttr::AT_ObjCMethodFamily;  // "clang::objc_method_family"
2674
0
    case 'r':  // 1 string to match.
2675
0
      if (memcmp(Name.data()+8, "elease_capability", 17) != 0)
2676
0
        break;
2677
0
      return ParsedAttr::AT_ReleaseCapability;   // "clang::release_capability"
2678
0
    case 's':  // 1 string to match.
2679
0
      if (memcmp(Name.data()+8, "wift_error_result", 17) != 0)
2680
0
        break;
2681
0
      return ParsedAttr::AT_SwiftErrorResult;  // "clang::swift_error_result"
2682
14
    case 'w':  // 1 string to match.
2683
14
      if (memcmp(Name.data()+8, "arn_unused_result", 17) != 0)
2684
0
        break;
2685
14
      return ParsedAttr::AT_WarnUnusedResult;  // "clang::warn_unused_result"
2686
0
    }
2687
0
    break;
2688
6
  case 26:   // 9 strings to match.
2689
6
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
2690
0
      break;
2691
6
    switch (Name[7]) {
2692
6
    
default: break0
;
2693
6
    case 'a':  // 1 string to match.
2694
0
      if (memcmp(Name.data()+8, "mdgpu_waves_per_eu", 18) != 0)
2695
0
        break;
2696
0
      return ParsedAttr::AT_AMDGPUWavesPerEU;  // "clang::amdgpu_waves_per_eu"
2697
0
    case 'c':  // 3 strings to match.
2698
0
      if (memcmp(Name.data()+8, "f_", 2) != 0)
2699
0
        break;
2700
0
      switch (Name[10]) {
2701
0
      default: break;
2702
0
      case 'a':  // 1 string to match.
2703
0
        if (memcmp(Name.data()+11, "udited_transfer", 15) != 0)
2704
0
          break;
2705
0
        return ParsedAttr::AT_CFAuditedTransfer;   // "clang::cf_audited_transfer"
2706
0
      case 'r':  // 1 string to match.
2707
0
        if (memcmp(Name.data()+11, "eturns_retained", 15) != 0)
2708
0
          break;
2709
0
        return ParsedAttr::AT_CFReturnsRetained;   // "clang::cf_returns_retained"
2710
0
      case 'u':  // 1 string to match.
2711
0
        if (memcmp(Name.data()+11, "nknown_transfer", 15) != 0)
2712
0
          break;
2713
0
        return ParsedAttr::AT_CFUnknownTransfer;  // "clang::cf_unknown_transfer"
2714
0
      }
2715
0
      break;
2716
0
    case 'n':  // 1 string to match.
2717
0
      if (memcmp(Name.data()+8, "s_returns_retained", 18) != 0)
2718
0
        break;
2719
0
      return ParsedAttr::AT_NSReturnsRetained;   // "clang::ns_returns_retained"
2720
6
    case 'o':  // 3 strings to match.
2721
6
      if (memcmp(Name.data()+8, "bjc_", 4) != 0)
2722
0
        break;
2723
6
      switch (Name[12]) {
2724
6
      
default: break0
;
2725
6
      case 'b':  // 2 strings to match.
2726
6
        if (memcmp(Name.data()+13, "ridge_", 6) != 0)
2727
0
          break;
2728
6
        switch (Name[19]) {
2729
6
        
default: break0
;
2730
6
        case 'm':  // 1 string to match.
2731
0
          if (memcmp(Name.data()+20, "utable", 6) != 0)
2732
0
            break;
2733
0
          return ParsedAttr::AT_ObjCBridgeMutable;   // "clang::objc_bridge_mutable"
2734
6
        case 'r':  // 1 string to match.
2735
6
          if (memcmp(Name.data()+20, "elated", 6) != 0)
2736
0
            break;
2737
6
          return ParsedAttr::AT_ObjCBridgeRelated;  // "clang::objc_bridge_related"
2738
0
        }
2739
0
        break;
2740
0
      case 'r':  // 1 string to match.
2741
0
        if (memcmp(Name.data()+13, "equires_super", 13) != 0)
2742
0
          break;
2743
0
        return ParsedAttr::AT_ObjCRequiresSuper;  // "clang::objc_requires_super"
2744
0
      }
2745
0
      break;
2746
0
    case 'r':  // 1 string to match.
2747
0
      if (memcmp(Name.data()+8, "equires_capability", 18) != 0)
2748
0
        break;
2749
0
      return ParsedAttr::AT_RequiresCapability;  // "clang::requires_capability"
2750
0
    }
2751
0
    break;
2752
6
  case 27:   // 3 strings to match.
2753
6
    switch (Name[0]) {
2754
6
    default: break;
2755
6
    case 'c':  // 2 strings to match.
2756
0
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
2757
0
        break;
2758
0
      switch (Name[7]) {
2759
0
      default: break;
2760
0
      case 'n':  // 1 string to match.
2761
0
        if (memcmp(Name.data()+8, "eon_polyvector_type", 19) != 0)
2762
0
          break;
2763
0
        return ParsedAttr::AT_NeonPolyVectorType;  // "clang::neon_polyvector_type"
2764
0
      case 'o':  // 1 string to match.
2765
0
        if (memcmp(Name.data()+8, "bjc_runtime_visible", 19) != 0)
2766
0
          break;
2767
0
        return ParsedAttr::AT_ObjCRuntimeVisible;  // "clang::objc_runtime_visible"
2768
0
      }
2769
0
      break;
2770
0
    case 'g':  // 1 string to match.
2771
0
      if (memcmp(Name.data()+1, "nu::no_instrument_function", 26) != 0)
2772
0
        break;
2773
0
      return ParsedAttr::AT_NoInstrumentFunction;  // "gnu::no_instrument_function"
2774
6
    }
2775
6
    break;
2776
99
  case 28:   // 8 strings to match.
2777
99
    switch (Name[0]) {
2778
99
    
default: break0
;
2779
99
    case 'c':  // 7 strings to match.
2780
99
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
2781
0
        break;
2782
99
      switch (Name[7]) {
2783
99
      
default: break0
;
2784
99
      case 'l':  // 1 string to match.
2785
26
        if (memcmp(Name.data()+8, "to_visibility_public", 20) != 0)
2786
0
          break;
2787
26
        return ParsedAttr::AT_LTOVisibilityPublic;   // "clang::lto_visibility_public"
2788
26
      case 'o':  // 1 string to match.
2789
0
        if (memcmp(Name.data()+8, "bjc_precise_lifetime", 20) != 0)
2790
0
          break;
2791
0
        return ParsedAttr::AT_ObjCPreciseLifetime;   // "clang::objc_precise_lifetime"
2792
15
      case 'p':  // 1 string to match.
2793
15
        if (memcmp(Name.data()+8, "ointer_with_type_tag", 20) != 0)
2794
0
          break;
2795
15
        return ParsedAttr::AT_ArgumentWithTypeTag;   // "clang::pointer_with_type_tag"
2796
15
      case 's':  // 2 strings to match.
2797
0
        switch (Name[8]) {
2798
0
        default: break;
2799
0
        case 'h':  // 1 string to match.
2800
0
          if (memcmp(Name.data()+9, "ared_locks_required", 19) != 0)
2801
0
            break;
2802
0
          return ParsedAttr::AT_RequiresCapability;  // "clang::shared_locks_required"
2803
0
        case 'w':  // 1 string to match.
2804
0
          if (memcmp(Name.data()+9, "ift_indirect_result", 19) != 0)
2805
0
            break;
2806
0
          return ParsedAttr::AT_SwiftIndirectResult;  // "clang::swift_indirect_result"
2807
0
        }
2808
0
        break;
2809
14
      case 't':  // 1 string to match.
2810
14
        if (memcmp(Name.data()+8, "ype_tag_for_datatype", 20) != 0)
2811
0
          break;
2812
14
        return ParsedAttr::AT_TypeTagForDatatype;  // "clang::type_tag_for_datatype"
2813
44
      case 'x':  // 1 string to match.
2814
44
        if (memcmp(Name.data()+8, "ray_never_instrument", 20) != 0)
2815
0
          break;
2816
44
        return ParsedAttr::AT_XRayInstrument;  // "clang::xray_never_instrument"
2817
0
      }
2818
0
      break;
2819
0
    case 'g':  // 1 string to match.
2820
0
      if (memcmp(Name.data()+1, "nu::force_align_arg_pointer", 27) != 0)
2821
0
        break;
2822
0
      return ParsedAttr::AT_X86ForceAlignArgPointer;  // "gnu::force_align_arg_pointer"
2823
0
    }
2824
0
    break;
2825
86
  case 29:   // 5 strings to match.
2826
86
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
2827
0
      break;
2828
86
    switch (Name[7]) {
2829
86
    
default: break0
;
2830
86
    case 'a':  // 1 string to match.
2831
0
      if (memcmp(Name.data()+8, "rgument_with_type_tag", 21) != 0)
2832
0
        break;
2833
0
      return ParsedAttr::AT_ArgumentWithTypeTag;   // "clang::argument_with_type_tag"
2834
12
    case 'e':  // 1 string to match.
2835
12
      if (memcmp(Name.data()+8, "xternal_source_symbol", 21) != 0)
2836
0
        break;
2837
12
      return ParsedAttr::AT_ExternalSourceSymbol;  // "clang::external_source_symbol"
2838
12
    case 'o':  // 1 string to match.
2839
0
      if (memcmp(Name.data()+8, "bjc_independent_class", 21) != 0)
2840
0
        break;
2841
0
      return ParsedAttr::AT_ObjCIndependentClass;  // "clang::objc_independent_class"
2842
0
    case 't':  // 1 string to match.
2843
0
      if (memcmp(Name.data()+8, "ry_acquire_capability", 21) != 0)
2844
0
        break;
2845
0
      return ParsedAttr::AT_TryAcquireCapability;  // "clang::try_acquire_capability"
2846
74
    case 'x':  // 1 string to match.
2847
74
      if (memcmp(Name.data()+8, "ray_always_instrument", 21) != 0)
2848
0
        break;
2849
74
      return ParsedAttr::AT_XRayInstrument;  // "clang::xray_always_instrument"
2850
0
    }
2851
0
    break;
2852
4
  case 30:   // 4 strings to match.
2853
4
    switch (Name[0]) {
2854
4
    
default: break0
;
2855
4
    case 'c':  // 3 strings to match.
2856
0
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
2857
0
        break;
2858
0
      switch (Name[7]) {
2859
0
      default: break;
2860
0
      case 'c':  // 1 string to match.
2861
0
        if (memcmp(Name.data()+8, "f_returns_not_retained", 22) != 0)
2862
0
          break;
2863
0
        return ParsedAttr::AT_CFReturnsNotRetained;  // "clang::cf_returns_not_retained"
2864
0
      case 'n':  // 2 strings to match.
2865
0
        if (memcmp(Name.data()+8, "s_returns_", 10) != 0)
2866
0
          break;
2867
0
        switch (Name[18]) {
2868
0
        default: break;
2869
0
        case 'a':  // 1 string to match.
2870
0
          if (memcmp(Name.data()+19, "utoreleased", 11) != 0)
2871
0
            break;
2872
0
          return ParsedAttr::AT_NSReturnsAutoreleased;   // "clang::ns_returns_autoreleased"
2873
0
        case 'n':  // 1 string to match.
2874
0
          if (memcmp(Name.data()+19, "ot_retained", 11) != 0)
2875
0
            break;
2876
0
          return ParsedAttr::AT_NSReturnsNotRetained;  // "clang::ns_returns_not_retained"
2877
0
        }
2878
0
        break;
2879
0
      }
2880
0
      break;
2881
4
    case 'g':  // 1 string to match.
2882
4
      if (memcmp(Name.data()+1, "nu::no_caller_saved_registers", 29) != 0)
2883
0
        break;
2884
4
      return ParsedAttr::AT_AnyX86NoCallerSavedRegisters;  // "gnu::no_caller_saved_registers"
2885
0
    }
2886
0
    break;
2887
2
  case 31:   // 3 strings to match.
2888
2
    switch (Name[0]) {
2889
2
    
default: break0
;
2890
2
    case 'c':  // 2 strings to match.
2891
0
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
2892
0
        break;
2893
0
      switch (Name[7]) {
2894
0
      default: break;
2895
0
      case 'a':  // 1 string to match.
2896
0
        if (memcmp(Name.data()+8, "ssert_shared_capability", 23) != 0)
2897
0
          break;
2898
0
        return ParsedAttr::AT_AssertCapability;  // "clang::assert_shared_capability"
2899
0
      case 'e':  // 1 string to match.
2900
0
        if (memcmp(Name.data()+8, "xclusive_locks_required", 23) != 0)
2901
0
          break;
2902
0
        return ParsedAttr::AT_RequiresCapability;  // "clang::exclusive_locks_required"
2903
0
      }
2904
0
      break;
2905
2
    case 'g':  // 1 string to match.
2906
2
      if (memcmp(Name.data()+1, "nu::no_address_safety_analysis", 30) != 0)
2907
0
        break;
2908
2
      return ParsedAttr::AT_NoSanitizeSpecific;  // "gnu::no_address_safety_analysis"
2909
0
    }
2910
0
    break;
2911
0
  case 32:   // 3 strings to match.
2912
0
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
2913
0
      break;
2914
0
    switch (Name[7]) {
2915
0
    default: break;
2916
0
    case 'a':  // 1 string to match.
2917
0
      if (memcmp(Name.data()+8, "cquire_shared_capability", 24) != 0)
2918
0
        break;
2919
0
      return ParsedAttr::AT_AcquireCapability;   // "clang::acquire_shared_capability"
2920
0
    case 'n':  // 1 string to match.
2921
0
      if (memcmp(Name.data()+8, "o_thread_safety_analysis", 24) != 0)
2922
0
        break;
2923
0
      return ParsedAttr::AT_NoThreadSafetyAnalysis;  // "clang::no_thread_safety_analysis"
2924
0
    case 'r':  // 1 string to match.
2925
0
      if (memcmp(Name.data()+8, "elease_shared_capability", 24) != 0)
2926
0
        break;
2927
0
      return ParsedAttr::AT_ReleaseCapability;  // "clang::release_shared_capability"
2928
0
    }
2929
0
    break;
2930
2
  case 33:   // 4 strings to match.
2931
2
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
2932
0
      break;
2933
2
    switch (Name[7]) {
2934
2
    
default: break0
;
2935
2
    case 'c':  // 1 string to match.
2936
0
      if (memcmp(Name.data()+8, "onsumable_auto_cast_state", 25) != 0)
2937
0
        break;
2938
0
      return ParsedAttr::AT_ConsumableAutoCast;  // "clang::consumable_auto_cast_state"
2939
2
    case 'o':  // 1 string to match.
2940
2
      if (memcmp(Name.data()+8, "bjc_returns_inner_pointer", 25) != 0)
2941
0
        break;
2942
2
      return ParsedAttr::AT_ObjCReturnsInnerPointer;   // "clang::objc_returns_inner_pointer"
2943
2
    case 'r':  // 2 strings to match.
2944
0
      if (Name[8] != 'e')
2945
0
        break;
2946
0
      switch (Name[9]) {
2947
0
      default: break;
2948
0
      case 'l':  // 1 string to match.
2949
0
        if (memcmp(Name.data()+10, "ease_generic_capability", 23) != 0)
2950
0
          break;
2951
0
        return ParsedAttr::AT_ReleaseCapability;   // "clang::release_generic_capability"
2952
0
      case 'q':  // 1 string to match.
2953
0
        if (memcmp(Name.data()+10, "uires_shared_capability", 23) != 0)
2954
0
          break;
2955
0
        return ParsedAttr::AT_RequiresCapability;  // "clang::requires_shared_capability"
2956
0
      }
2957
0
      break;
2958
0
    }
2959
0
    break;
2960
2
  case 34:   // 3 strings to match.
2961
2
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
2962
2
      break;
2963
0
    switch (Name[7]) {
2964
0
    default: break;
2965
0
    case 'a':  // 1 string to match.
2966
0
      if (memcmp(Name.data()+8, "mdgpu_flat_work_group_size", 26) != 0)
2967
0
        break;
2968
0
      return ParsedAttr::AT_AMDGPUFlatWorkGroupSize;   // "clang::amdgpu_flat_work_group_size"
2969
0
    case 'o':  // 2 strings to match.
2970
0
      if (memcmp(Name.data()+8, "bjc_", 4) != 0)
2971
0
        break;
2972
0
      switch (Name[12]) {
2973
0
      default: break;
2974
0
      case 'd':  // 1 string to match.
2975
0
        if (memcmp(Name.data()+13, "esignated_initializer", 21) != 0)
2976
0
          break;
2977
0
        return ParsedAttr::AT_ObjCDesignatedInitializer;   // "clang::objc_designated_initializer"
2978
0
      case 's':  // 1 string to match.
2979
0
        if (memcmp(Name.data()+13, "ubclassing_restricted", 21) != 0)
2980
0
          break;
2981
0
        return ParsedAttr::AT_ObjCSubclassingRestricted;  // "clang::objc_subclassing_restricted"
2982
0
      }
2983
0
      break;
2984
0
    }
2985
0
    break;
2986
0
  case 35:   // 1 string to match.
2987
0
    if (memcmp(Name.data()+0, "clang::consumable_set_state_on_read", 35) != 0)
2988
0
      break;
2989
0
    return ParsedAttr::AT_ConsumableSetOnRead;   // "clang::consumable_set_state_on_read"
2990
0
  case 36:   // 1 string to match.
2991
0
    if (memcmp(Name.data()+0, "clang::try_acquire_shared_capability", 36) != 0)
2992
0
      break;
2993
0
    return ParsedAttr::AT_TryAcquireCapability;  // "clang::try_acquire_shared_capability"
2994
0
  case 38:   // 1 string to match.
2995
0
    if (memcmp(Name.data()+0, "clang::require_constant_initialization", 38) != 0)
2996
0
      break;
2997
0
    return ParsedAttr::AT_RequireConstantInit;   // "clang::require_constant_initialization"
2998
0
  case 41:   // 1 string to match.
2999
0
    if (memcmp(Name.data()+0, "clang::objc_requires_property_definitions", 41) != 0)
3000
0
      break;
3001
0
    return ParsedAttr::AT_ObjCRequiresPropertyDefs;  // "clang::objc_requires_property_definitions"
3002
0
  case 42:   // 1 string to match.
3003
0
    if (memcmp(Name.data()+0, "clang::objc_arc_weak_reference_unavailable", 42) != 0)
3004
0
      break;
3005
0
    return ParsedAttr::AT_ArcWeakrefUnavailable;   // "clang::objc_arc_weak_reference_unavailable"
3006
2
  case 53:   // 1 string to match.
3007
2
    if (memcmp(Name.data()+0, "clang::objc_protocol_requires_explicit_implementation", 53) != 0)
3008
0
      break;
3009
2
    return ParsedAttr::AT_ObjCExplicitProtocolImpl;  // "clang::objc_protocol_requires_explicit_implementation"
3010
295k
  }
3011
295k
  } else if (ParsedAttr::AS_C2x == Syntax) {
3012
187
  switch (Name.size()) {
3013
187
  
default: break3
;
3014
187
  case 11:   // 1 string to match.
3015
11
    if (memcmp(Name.data()+0, "::nodiscard", 11) != 0)
3016
0
      break;
3017
11
    return ParsedAttr::AT_WarnUnusedResult;  // "::nodiscard"
3018
21
  case 12:   // 1 string to match.
3019
21
    if (memcmp(Name.data()+0, "::deprecated", 12) != 0)
3020
1
      break;
3021
20
    return ParsedAttr::AT_Deprecated;  // "::deprecated"
3022
21
  case 13:   // 3 strings to match.
3023
21
    switch (Name[0]) {
3024
21
    
default: break0
;
3025
21
    case ':':  // 1 string to match.
3026
21
      if (memcmp(Name.data()+1, ":fallthrough", 12) != 0)
3027
0
        break;
3028
21
      return ParsedAttr::AT_FallThrough;   // "::fallthrough"
3029
21
    case 'c':  // 2 strings to match.
3030
0
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
3031
0
        break;
3032
0
      switch (Name[7]) {
3033
0
      default: break;
3034
0
      case 'b':  // 1 string to match.
3035
0
        if (memcmp(Name.data()+8, "locks", 5) != 0)
3036
0
          break;
3037
0
        return ParsedAttr::AT_Blocks;  // "clang::blocks"
3038
0
      case 'p':  // 1 string to match.
3039
0
        if (memcmp(Name.data()+8, "ascal", 5) != 0)
3040
0
          break;
3041
0
        return ParsedAttr::AT_Pascal;  // "clang::pascal"
3042
0
      }
3043
0
      break;
3044
0
    }
3045
0
    break;
3046
16
  case 14:   // 4 strings to match.
3047
16
    switch (Name[0]) {
3048
16
    
default: break0
;
3049
16
    case ':':  // 1 string to match.
3050
16
      if (memcmp(Name.data()+1, ":maybe_unused", 13) != 0)
3051
0
        break;
3052
16
      return ParsedAttr::AT_Unused;  // "::maybe_unused"
3053
16
    case 'c':  // 3 strings to match.
3054
0
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
3055
0
        break;
3056
0
      switch (Name[7]) {
3057
0
      default: break;
3058
0
      case 'm':  // 1 string to match.
3059
0
        if (memcmp(Name.data()+8, "insize", 6) != 0)
3060
0
          break;
3061
0
        return ParsedAttr::AT_MinSize;   // "clang::minsize"
3062
0
      case 'o':  // 2 strings to match.
3063
0
        switch (Name[8]) {
3064
0
        default: break;
3065
0
        case 'b':  // 1 string to match.
3066
0
          if (memcmp(Name.data()+9, "jc_gc", 5) != 0)
3067
0
            break;
3068
0
          return ParsedAttr::AT_ObjCGC;  // "clang::objc_gc"
3069
0
        case 'p':  // 1 string to match.
3070
0
          if (memcmp(Name.data()+9, "tnone", 5) != 0)
3071
0
            break;
3072
0
          return ParsedAttr::AT_OptimizeNone;  // "clang::optnone"
3073
0
        }
3074
0
        break;
3075
0
      }
3076
0
      break;
3077
0
    }
3078
0
    break;
3079
11
  case 15:   // 5 strings to match.
3080
11
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
3081
0
      break;
3082
11
    switch (Name[7]) {
3083
11
    
default: break0
;
3084
11
    case 'N':  // 1 string to match.
3085
0
      if (memcmp(Name.data()+8, "SObject", 7) != 0)
3086
0
        break;
3087
0
      return ParsedAttr::AT_ObjCNSObject;  // "clang::NSObject"
3088
6
    case 'a':  // 1 string to match.
3089
6
      if (memcmp(Name.data()+8, "nnotate", 7) != 0)
3090
0
        break;
3091
6
      return ParsedAttr::AT_Annotate;  // "clang::annotate"
3092
6
    case 'i':  // 2 strings to match.
3093
4
      if (Name[8] != 'b')
3094
0
        break;
3095
4
      switch (Name[9]) {
3096
4
      
default: break0
;
3097
4
      case 'a':  // 1 string to match.
3098
0
        if (memcmp(Name.data()+10, "ction", 5) != 0)
3099
0
          break;
3100
0
        return ParsedAttr::AT_IBAction;  // "clang::ibaction"
3101
4
      case 'o':  // 1 string to match.
3102
4
        if (memcmp(Name.data()+10, "utlet", 5) != 0)
3103
0
          break;
3104
4
        return ParsedAttr::AT_IBOutlet;  // "clang::iboutlet"
3105
0
      }
3106
0
      break;
3107
1
    case 'n':  // 1 string to match.
3108
1
      if (memcmp(Name.data()+8, "oescape", 7) != 0)
3109
0
        break;
3110
1
      return ParsedAttr::AT_NoEscape;  // "clang::noescape"
3111
0
    }
3112
0
    break;
3113
3
  case 16:   // 2 strings to match.
3114
3
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
3115
0
      break;
3116
3
    switch (Name[7]) {
3117
3
    
default: break0
;
3118
3
    case 'f':  // 1 string to match.
3119
1
      if (memcmp(Name.data()+8, "lag_enum", 8) != 0)
3120
0
        break;
3121
1
      return ParsedAttr::AT_FlagEnum;  // "clang::flag_enum"
3122
2
    case 's':  // 1 string to match.
3123
2
      if (memcmp(Name.data()+8, "wiftcall", 8) != 0)
3124
0
        break;
3125
2
      return ParsedAttr::AT_SwiftCall;  // "clang::swiftcall"
3126
0
    }
3127
0
    break;
3128
0
  case 17:   // 2 strings to match.
3129
0
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
3130
0
      break;
3131
0
    switch (Name[7]) {
3132
0
    default: break;
3133
0
    case 'c':  // 1 string to match.
3134
0
      if (memcmp(Name.data()+8, "onvergent", 9) != 0)
3135
0
        break;
3136
0
      return ParsedAttr::AT_Convergent;  // "clang::convergent"
3137
0
    case 'v':  // 1 string to match.
3138
0
      if (memcmp(Name.data()+8, "ectorcall", 9) != 0)
3139
0
        break;
3140
0
      return ParsedAttr::AT_VectorCall;  // "clang::vectorcall"
3141
0
    }
3142
0
    break;
3143
2
  case 18:   // 7 strings to match.
3144
2
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
3145
0
      break;
3146
2
    switch (Name[7]) {
3147
2
    
default: break0
;
3148
2
    case 'c':  // 1 string to match.
3149
0
      if (memcmp(Name.data()+8, "f_consumed", 10) != 0)
3150
0
        break;
3151
0
      return ParsedAttr::AT_CFConsumed;  // "clang::cf_consumed"
3152
0
    case 'n':  // 3 strings to match.
3153
0
      switch (Name[8]) {
3154
0
      default: break;
3155
0
      case 'o':  // 2 strings to match.
3156
0
        switch (Name[9]) {
3157
0
        default: break;
3158
0
        case '_':  // 1 string to match.
3159
0
          if (memcmp(Name.data()+10, "sanitize", 8) != 0)
3160
0
            break;
3161
0
          return ParsedAttr::AT_NoSanitize;  // "clang::no_sanitize"
3162
0
        case 'd':  // 1 string to match.
3163
0
          if (memcmp(Name.data()+10, "uplicate", 8) != 0)
3164
0
            break;
3165
0
          return ParsedAttr::AT_NoDuplicate;  // "clang::noduplicate"
3166
0
        }
3167
0
        break;
3168
0
      case 's':  // 1 string to match.
3169
0
        if (memcmp(Name.data()+9, "_consumed", 9) != 0)
3170
0
          break;
3171
0
        return ParsedAttr::AT_NSConsumed;  // "clang::ns_consumed"
3172
0
      }
3173
0
      break;
3174
0
    case 'o':  // 1 string to match.
3175
0
      if (memcmp(Name.data()+8, "bjc_bridge", 10) != 0)
3176
0
        break;
3177
0
      return ParsedAttr::AT_ObjCBridge;  // "clang::objc_bridge"
3178
2
    case 'u':  // 1 string to match.
3179
2
      if (memcmp(Name.data()+8, "navailable", 10) != 0)
3180
0
        break;
3181
2
      return ParsedAttr::AT_Unavailable;   // "clang::unavailable"
3182
2
    case 'w':  // 1 string to match.
3183
0
      if (memcmp(Name.data()+8, "eak_import", 10) != 0)
3184
0
        break;
3185
0
      return ParsedAttr::AT_WeakImport;  // "clang::weak_import"
3186
0
    }
3187
0
    break;
3188
17
  case 19:   // 6 strings to match.
3189
17
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
3190
1
      break;
3191
16
    switch (Name[7]) {
3192
16
    
default: break0
;
3193
16
    case 'a':  // 1 string to match.
3194
14
      if (memcmp(Name.data()+8, "vailability", 11) != 0)
3195
0
        break;
3196
14
      return ParsedAttr::AT_Availability;  // "clang::availability"
3197
14
    case 'c':  // 2 strings to match.
3198
0
      if (memcmp(Name.data()+8, "pu_", 3) != 0)
3199
0
        break;
3200
0
      switch (Name[11]) {
3201
0
      default: break;
3202
0
      case 'd':  // 1 string to match.
3203
0
        if (memcmp(Name.data()+12, "ispatch", 7) != 0)
3204
0
          break;
3205
0
        return ParsedAttr::AT_CPUDispatch;   // "clang::cpu_dispatch"
3206
0
      case 's':  // 1 string to match.
3207
0
        if (memcmp(Name.data()+12, "pecific", 7) != 0)
3208
0
          break;
3209
0
        return ParsedAttr::AT_CPUSpecific;  // "clang::cpu_specific"
3210
0
      }
3211
0
      break;
3212
2
    case 'o':  // 2 strings to match.
3213
2
      switch (Name[8]) {
3214
2
      
default: break0
;
3215
2
      case 'b':  // 1 string to match.
3216
0
        if (memcmp(Name.data()+9, "jc_boxable", 10) != 0)
3217
0
          break;
3218
0
        return ParsedAttr::AT_ObjCBoxable;   // "clang::objc_boxable"
3219
2
      case 'v':  // 1 string to match.
3220
2
        if (memcmp(Name.data()+9, "erloadable", 10) != 0)
3221
0
          break;
3222
2
        return ParsedAttr::AT_Overloadable;  // "clang::overloadable"
3223
0
      }
3224
0
      break;
3225
0
    case 'p':  // 1 string to match.
3226
0
      if (memcmp(Name.data()+8, "reserve_all", 11) != 0)
3227
0
        break;
3228
0
      return ParsedAttr::AT_PreserveAll;  // "clang::preserve_all"
3229
0
    }
3230
0
    break;
3231
4
  case 20:   // 4 strings to match.
3232
4
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
3233
0
      break;
3234
4
    switch (Name[7]) {
3235
4
    
default: break0
;
3236
4
    case 'a':  // 1 string to match.
3237
2
      if (memcmp(Name.data()+8, "ddress_space", 12) != 0)
3238
0
        break;
3239
2
      return ParsedAttr::AT_AddressSpace;  // "clang::address_space"
3240
2
    case 'p':  // 1 string to match.
3241
0
      if (memcmp(Name.data()+8, "reserve_most", 12) != 0)
3242
0
        break;
3243
0
      return ParsedAttr::AT_PreserveMost;  // "clang::preserve_most"
3244
2
    case 's':  // 1 string to match.
3245
2
      if (memcmp(Name.data()+8, "wift_context", 12) != 0)
3246
0
        break;
3247
2
      return ParsedAttr::AT_SwiftContext;  // "clang::swift_context"
3248
2
    case 'x':  // 1 string to match.
3249
0
      if (memcmp(Name.data()+8, "ray_log_args", 12) != 0)
3250
0
        break;
3251
0
      return ParsedAttr::AT_XRayLogArgs;  // "clang::xray_log_args"
3252
0
    }
3253
0
    break;
3254
2
  case 21:   // 2 strings to match.
3255
2
    if (memcmp(Name.data()+0, "clang::objc_", 12) != 0)
3256
0
      break;
3257
2
    switch (Name[12]) {
3258
2
    
default: break0
;
3259
2
    case 'e':  // 1 string to match.
3260
2
      if (memcmp(Name.data()+13, "xception", 8) != 0)
3261
0
        break;
3262
2
      return ParsedAttr::AT_ObjCException;   // "clang::objc_exception"
3263
2
    case 'o':  // 1 string to match.
3264
0
      if (memcmp(Name.data()+13, "wnership", 8) != 0)
3265
0
        break;
3266
0
      return ParsedAttr::AT_ObjCOwnership;  // "clang::objc_ownership"
3267
0
    }
3268
0
    break;
3269
0
  case 22:   // 5 strings to match.
3270
0
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
3271
0
      break;
3272
0
    switch (Name[7]) {
3273
0
    default: break;
3274
0
    case 'n':  // 1 string to match.
3275
0
      if (memcmp(Name.data()+8, "ot_tail_called", 14) != 0)
3276
0
        break;
3277
0
      return ParsedAttr::AT_NotTailCalled;   // "clang::not_tail_called"
3278
0
    case 'o':  // 3 strings to match.
3279
0
      switch (Name[8]) {
3280
0
      default: break;
3281
0
      case 'b':  // 1 string to match.
3282
0
        if (memcmp(Name.data()+9, "jc_root_class", 13) != 0)
3283
0
          break;
3284
0
        return ParsedAttr::AT_ObjCRootClass;   // "clang::objc_root_class"
3285
0
      case 'w':  // 2 strings to match.
3286
0
        if (memcmp(Name.data()+9, "nership_", 8) != 0)
3287
0
          break;
3288
0
        switch (Name[17]) {
3289
0
        default: break;
3290
0
        case 'h':  // 1 string to match.
3291
0
          if (memcmp(Name.data()+18, "olds", 4) != 0)
3292
0
            break;
3293
0
          return ParsedAttr::AT_Ownership;   // "clang::ownership_holds"
3294
0
        case 't':  // 1 string to match.
3295
0
          if (memcmp(Name.data()+18, "akes", 4) != 0)
3296
0
            break;
3297
0
          return ParsedAttr::AT_Ownership;  // "clang::ownership_takes"
3298
0
        }
3299
0
        break;
3300
0
      }
3301
0
      break;
3302
0
    case 't':  // 1 string to match.
3303
0
      if (memcmp(Name.data()+8, "ype_visibility", 14) != 0)
3304
0
        break;
3305
0
      return ParsedAttr::AT_TypeVisibility;  // "clang::type_visibility"
3306
0
    }
3307
0
    break;
3308
9
  case 23:   // 5 strings to match.
3309
9
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
3310
0
      break;
3311
9
    switch (Name[7]) {
3312
9
    
default: break0
;
3313
9
    case 'i':  // 1 string to match.
3314
3
      if (memcmp(Name.data()+8, "nternal_linkage", 15) != 0)
3315
0
        break;
3316
3
      return ParsedAttr::AT_InternalLinkage;   // "clang::internal_linkage"
3317
3
    case 'm':  // 1 string to match.
3318
0
      if (memcmp(Name.data()+8, "in_vector_width", 15) != 0)
3319
0
        break;
3320
0
      return ParsedAttr::AT_MinVectorWidth;  // "clang::min_vector_width"
3321
6
    case 'n':  // 2 strings to match.
3322
6
      switch (Name[8]) {
3323
6
      
default: break0
;
3324
6
      case 'e':  // 1 string to match.
3325
0
        if (memcmp(Name.data()+9, "on_vector_type", 14) != 0)
3326
0
          break;
3327
0
        return ParsedAttr::AT_NeonVectorType;  // "clang::neon_vector_type"
3328
6
      case 's':  // 1 string to match.
3329
6
        if (memcmp(Name.data()+9, "_consumes_self", 14) != 0)
3330
0
          break;
3331
6
        return ParsedAttr::AT_NSConsumesSelf;  // "clang::ns_consumes_self"
3332
0
      }
3333
0
      break;
3334
0
    case 'p':  // 1 string to match.
3335
0
      if (memcmp(Name.data()+8, "ass_object_size", 15) != 0)
3336
0
        break;
3337
0
      return ParsedAttr::AT_PassObjectSize;  // "clang::pass_object_size"
3338
0
    }
3339
0
    break;
3340
10
  case 24:   // 2 strings to match.
3341
10
    if (memcmp(Name.data()+0, "clang::o", 8) != 0)
3342
0
      break;
3343
10
    switch (Name[8]) {
3344
10
    
default: break0
;
3345
10
    case 'b':  // 1 string to match.
3346
4
      if (memcmp(Name.data()+9, "jc_runtime_name", 15) != 0)
3347
0
        break;
3348
4
      return ParsedAttr::AT_ObjCRuntimeName;   // "clang::objc_runtime_name"
3349
6
    case 'w':  // 1 string to match.
3350
6
      if (memcmp(Name.data()+9, "nership_returns", 15) != 0)
3351
0
        break;
3352
6
      return ParsedAttr::AT_Ownership;  // "clang::ownership_returns"
3353
0
    }
3354
0
    break;
3355
3
  case 25:   // 7 strings to match.
3356
3
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
3357
0
      break;
3358
3
    switch (Name[7]) {
3359
3
    
default: break0
;
3360
3
    case 'd':  // 1 string to match.
3361
0
      if (memcmp(Name.data()+8, "isable_tail_calls", 17) != 0)
3362
0
        break;
3363
0
      return ParsedAttr::AT_DisableTailCalls;  // "clang::disable_tail_calls"
3364
3
    case 'e':  // 1 string to match.
3365
3
      if (memcmp(Name.data()+8, "num_extensibility", 17) != 0)
3366
0
        break;
3367
3
      return ParsedAttr::AT_EnumExtensibility;   // "clang::enum_extensibility"
3368
3
    case 'i':  // 1 string to match.
3369
0
      if (memcmp(Name.data()+8, "boutletcollection", 17) != 0)
3370
0
        break;
3371
0
      return ParsedAttr::AT_IBOutletCollection;  // "clang::iboutletcollection"
3372
0
    case 'n':  // 2 strings to match.
3373
0
      if (memcmp(Name.data()+8, "o_s", 3) != 0)
3374
0
        break;
3375
0
      switch (Name[11]) {
3376
0
      default: break;
3377
0
      case 'a':  // 1 string to match.
3378
0
        if (memcmp(Name.data()+12, "nitize_memory", 13) != 0)
3379
0
          break;
3380
0
        return ParsedAttr::AT_NoSanitizeSpecific;  // "clang::no_sanitize_memory"
3381
0
      case 't':  // 1 string to match.
3382
0
        if (memcmp(Name.data()+12, "ack_protector", 13) != 0)
3383
0
          break;
3384
0
        return ParsedAttr::AT_NoStackProtector;  // "clang::no_stack_protector"
3385
0
      }
3386
0
      break;
3387
0
    case 'o':  // 1 string to match.
3388
0
      if (memcmp(Name.data()+8, "bjc_method_family", 17) != 0)
3389
0
        break;
3390
0
      return ParsedAttr::AT_ObjCMethodFamily;  // "clang::objc_method_family"
3391
0
    case 's':  // 1 string to match.
3392
0
      if (memcmp(Name.data()+8, "wift_error_result", 17) != 0)
3393
0
        break;
3394
0
      return ParsedAttr::AT_SwiftErrorResult;  // "clang::swift_error_result"
3395
0
    }
3396
0
    break;
3397
6
  case 26:   // 7 strings to match.
3398
6
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
3399
0
      break;
3400
6
    switch (Name[7]) {
3401
6
    
default: break0
;
3402
6
    case 'c':  // 3 strings to match.
3403
0
      if (memcmp(Name.data()+8, "f_", 2) != 0)
3404
0
        break;
3405
0
      switch (Name[10]) {
3406
0
      default: break;
3407
0
      case 'a':  // 1 string to match.
3408
0
        if (memcmp(Name.data()+11, "udited_transfer", 15) != 0)
3409
0
          break;
3410
0
        return ParsedAttr::AT_CFAuditedTransfer;   // "clang::cf_audited_transfer"
3411
0
      case 'r':  // 1 string to match.
3412
0
        if (memcmp(Name.data()+11, "eturns_retained", 15) != 0)
3413
0
          break;
3414
0
        return ParsedAttr::AT_CFReturnsRetained;   // "clang::cf_returns_retained"
3415
0
      case 'u':  // 1 string to match.
3416
0
        if (memcmp(Name.data()+11, "nknown_transfer", 15) != 0)
3417
0
          break;
3418
0
        return ParsedAttr::AT_CFUnknownTransfer;  // "clang::cf_unknown_transfer"
3419
0
      }
3420
0
      break;
3421
0
    case 'n':  // 1 string to match.
3422
0
      if (memcmp(Name.data()+8, "s_returns_retained", 18) != 0)
3423
0
        break;
3424
0
      return ParsedAttr::AT_NSReturnsRetained;   // "clang::ns_returns_retained"
3425
6
    case 'o':  // 3 strings to match.
3426
6
      if (memcmp(Name.data()+8, "bjc_", 4) != 0)
3427
0
        break;
3428
6
      switch (Name[12]) {
3429
6
      
default: break0
;
3430
6
      case 'b':  // 2 strings to match.
3431
6
        if (memcmp(Name.data()+13, "ridge_", 6) != 0)
3432
0
          break;
3433
6
        switch (Name[19]) {
3434
6
        
default: break0
;
3435
6
        case 'm':  // 1 string to match.
3436
0
          if (memcmp(Name.data()+20, "utable", 6) != 0)
3437
0
            break;
3438
0
          return ParsedAttr::AT_ObjCBridgeMutable;   // "clang::objc_bridge_mutable"
3439
6
        case 'r':  // 1 string to match.
3440
6
          if (memcmp(Name.data()+20, "elated", 6) != 0)
3441
0
            break;
3442
6
          return ParsedAttr::AT_ObjCBridgeRelated;  // "clang::objc_bridge_related"
3443
0
        }
3444
0
        break;
3445
0
      case 'r':  // 1 string to match.
3446
0
        if (memcmp(Name.data()+13, "equires_super", 13) != 0)
3447
0
          break;
3448
0
        return ParsedAttr::AT_ObjCRequiresSuper;  // "clang::objc_requires_super"
3449
0
      }
3450
0
      break;
3451
0
    }
3452
0
    break;
3453
0
  case 27:   // 2 strings to match.
3454
0
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
3455
0
      break;
3456
0
    switch (Name[7]) {
3457
0
    default: break;
3458
0
    case 'n':  // 1 string to match.
3459
0
      if (memcmp(Name.data()+8, "eon_polyvector_type", 19) != 0)
3460
0
        break;
3461
0
      return ParsedAttr::AT_NeonPolyVectorType;  // "clang::neon_polyvector_type"
3462
0
    case 'o':  // 1 string to match.
3463
0
      if (memcmp(Name.data()+8, "bjc_runtime_visible", 19) != 0)
3464
0
        break;
3465
0
      return ParsedAttr::AT_ObjCRuntimeVisible;  // "clang::objc_runtime_visible"
3466
0
    }
3467
0
    break;
3468
36
  case 28:   // 6 strings to match.
3469
36
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
3470
0
      break;
3471
36
    switch (Name[7]) {
3472
36
    
default: break0
;
3473
36
    case 'l':  // 1 string to match.
3474
0
      if (memcmp(Name.data()+8, "to_visibility_public", 20) != 0)
3475
0
        break;
3476
0
      return ParsedAttr::AT_LTOVisibilityPublic;   // "clang::lto_visibility_public"
3477
0
    case 'o':  // 1 string to match.
3478
0
      if (memcmp(Name.data()+8, "bjc_precise_lifetime", 20) != 0)
3479
0
        break;
3480
0
      return ParsedAttr::AT_ObjCPreciseLifetime;   // "clang::objc_precise_lifetime"
3481
22
    case 'p':  // 1 string to match.
3482
22
      if (memcmp(Name.data()+8, "ointer_with_type_tag", 20) != 0)
3483
0
        break;
3484
22
      return ParsedAttr::AT_ArgumentWithTypeTag;   // "clang::pointer_with_type_tag"
3485
22
    case 's':  // 1 string to match.
3486
0
      if (memcmp(Name.data()+8, "wift_indirect_result", 20) != 0)
3487
0
        break;
3488
0
      return ParsedAttr::AT_SwiftIndirectResult;   // "clang::swift_indirect_result"
3489
14
    case 't':  // 1 string to match.
3490
14
      if (memcmp(Name.data()+8, "ype_tag_for_datatype", 20) != 0)
3491
0
        break;
3492
14
      return ParsedAttr::AT_TypeTagForDatatype;  // "clang::type_tag_for_datatype"
3493
14
    case 'x':  // 1 string to match.
3494
0
      if (memcmp(Name.data()+8, "ray_never_instrument", 20) != 0)
3495
0
        break;
3496
0
      return ParsedAttr::AT_XRayInstrument;  // "clang::xray_never_instrument"
3497
0
    }
3498
0
    break;
3499
8
  case 29:   // 4 strings to match.
3500
8
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
3501
0
      break;
3502
8
    switch (Name[7]) {
3503
8
    
default: break0
;
3504
8
    case 'a':  // 1 string to match.
3505
0
      if (memcmp(Name.data()+8, "rgument_with_type_tag", 21) != 0)
3506
0
        break;
3507
0
      return ParsedAttr::AT_ArgumentWithTypeTag;   // "clang::argument_with_type_tag"
3508
8
    case 'e':  // 1 string to match.
3509
8
      if (memcmp(Name.data()+8, "xternal_source_symbol", 21) != 0)
3510
0
        break;
3511
8
      return ParsedAttr::AT_ExternalSourceSymbol;  // "clang::external_source_symbol"
3512
8
    case 'o':  // 1 string to match.
3513
0
      if (memcmp(Name.data()+8, "bjc_independent_class", 21) != 0)
3514
0
        break;
3515
0
      return ParsedAttr::AT_ObjCIndependentClass;  // "clang::objc_independent_class"
3516
0
    case 'x':  // 1 string to match.
3517
0
      if (memcmp(Name.data()+8, "ray_always_instrument", 21) != 0)
3518
0
        break;
3519
0
      return ParsedAttr::AT_XRayInstrument;  // "clang::xray_always_instrument"
3520
0
    }
3521
0
    break;
3522
0
  case 30:   // 3 strings to match.
3523
0
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
3524
0
      break;
3525
0
    switch (Name[7]) {
3526
0
    default: break;
3527
0
    case 'c':  // 1 string to match.
3528
0
      if (memcmp(Name.data()+8, "f_returns_not_retained", 22) != 0)
3529
0
        break;
3530
0
      return ParsedAttr::AT_CFReturnsNotRetained;  // "clang::cf_returns_not_retained"
3531
0
    case 'n':  // 2 strings to match.
3532
0
      if (memcmp(Name.data()+8, "s_returns_", 10) != 0)
3533
0
        break;
3534
0
      switch (Name[18]) {
3535
0
      default: break;
3536
0
      case 'a':  // 1 string to match.
3537
0
        if (memcmp(Name.data()+19, "utoreleased", 11) != 0)
3538
0
          break;
3539
0
        return ParsedAttr::AT_NSReturnsAutoreleased;   // "clang::ns_returns_autoreleased"
3540
0
      case 'n':  // 1 string to match.
3541
0
        if (memcmp(Name.data()+19, "ot_retained", 11) != 0)
3542
0
          break;
3543
0
        return ParsedAttr::AT_NSReturnsNotRetained;  // "clang::ns_returns_not_retained"
3544
0
      }
3545
0
      break;
3546
0
    }
3547
0
    break;
3548
0
  case 32:   // 1 string to match.
3549
0
    if (memcmp(Name.data()+0, "clang::no_thread_safety_analysis", 32) != 0)
3550
0
      break;
3551
0
    return ParsedAttr::AT_NoThreadSafetyAnalysis;  // "clang::no_thread_safety_analysis"
3552
2
  case 33:   // 1 string to match.
3553
2
    if (memcmp(Name.data()+0, "clang::objc_returns_inner_pointer", 33) != 0)
3554
0
      break;
3555
2
    return ParsedAttr::AT_ObjCReturnsInnerPointer;   // "clang::objc_returns_inner_pointer"
3556
2
  case 34:   // 2 strings to match.
3557
0
    if (memcmp(Name.data()+0, "clang::objc_", 12) != 0)
3558
0
      break;
3559
0
    switch (Name[12]) {
3560
0
    default: break;
3561
0
    case 'd':  // 1 string to match.
3562
0
      if (memcmp(Name.data()+13, "esignated_initializer", 21) != 0)
3563
0
        break;
3564
0
      return ParsedAttr::AT_ObjCDesignatedInitializer;   // "clang::objc_designated_initializer"
3565
0
    case 's':  // 1 string to match.
3566
0
      if (memcmp(Name.data()+13, "ubclassing_restricted", 21) != 0)
3567
0
        break;
3568
0
      return ParsedAttr::AT_ObjCSubclassingRestricted;  // "clang::objc_subclassing_restricted"
3569
0
    }
3570
0
    break;
3571
0
  case 41:   // 1 string to match.
3572
0
    if (memcmp(Name.data()+0, "clang::objc_requires_property_definitions", 41) != 0)
3573
0
      break;
3574
0
    return ParsedAttr::AT_ObjCRequiresPropertyDefs;  // "clang::objc_requires_property_definitions"
3575
0
  case 42:   // 1 string to match.
3576
0
    if (memcmp(Name.data()+0, "clang::objc_arc_weak_reference_unavailable", 42) != 0)
3577
0
      break;
3578
0
    return ParsedAttr::AT_ArcWeakrefUnavailable;   // "clang::objc_arc_weak_reference_unavailable"
3579
2
  case 53:   // 1 string to match.
3580
2
    if (memcmp(Name.data()+0, "clang::objc_protocol_requires_explicit_implementation", 53) != 0)
3581
0
      break;
3582
2
    return ParsedAttr::AT_ObjCExplicitProtocolImpl;  // "clang::objc_protocol_requires_explicit_implementation"
3583
295k
  }
3584
295k
  } else if (ParsedAttr::AS_Keyword == Syntax || 
ParsedAttr::AS_ContextSensitiveKeyword == Syntax55.4k
) {
3585
294k
  switch (Name.size()) {
3586
294k
  
default: break0
;
3587
294k
  case 5:  // 2 strings to match.
3588
704
    switch (Name[0]) {
3589
704
    
default: break0
;
3590
704
    case '_':  // 1 string to match.
3591
1
      if (memcmp(Name.data()+1, "_w64", 4) != 0)
3592
0
        break;
3593
1
      return ParsedAttr::IgnoredAttribute;   // "__w64"
3594
703
    case 'l':  // 1 string to match.
3595
703
      if (memcmp(Name.data()+1, "ocal", 4) != 0)
3596
0
        break;
3597
703
      return ParsedAttr::AT_OpenCLLocalAddressSpace;  // "local"
3598
0
    }
3599
0
    break;
3600
1.11k
  case 6:  // 5 strings to match.
3601
1.11k
    switch (Name[0]) {
3602
1.11k
    
default: break0
;
3603
1.11k
    case '_':  // 3 strings to match.
3604
26
      switch (Name[1]) {
3605
26
      
default: break0
;
3606
26
      case '_':  // 2 strings to match.
3607
24
        switch (Name[2]) {
3608
24
        
default: break0
;
3609
24
        case 's':  // 1 string to match.
3610
16
          if (memcmp(Name.data()+3, "ptr", 3) != 0)
3611
0
            break;
3612
16
          return ParsedAttr::AT_SPtr;  // "__sptr"
3613
16
        case 'u':  // 1 string to match.
3614
8
          if (memcmp(Name.data()+3, "ptr", 3) != 0)
3615
0
            break;
3616
8
          return ParsedAttr::AT_UPtr;  // "__uptr"
3617
0
        }
3618
0
        break;
3619
2
      case 'c':  // 1 string to match.
3620
2
        if (memcmp(Name.data()+2, "decl", 4) != 0)
3621
0
          break;
3622
2
        return ParsedAttr::AT_CDecl;  // "_cdecl"
3623
0
      }
3624
0
      break;
3625
576
    case 'g':  // 1 string to match.
3626
576
      if (memcmp(Name.data()+1, "lobal", 5) != 0)
3627
0
        break;
3628
576
      return ParsedAttr::AT_OpenCLGlobalAddressSpace;  // "global"
3629
576
    case 'k':  // 1 string to match.
3630
511
      if (memcmp(Name.data()+1, "ernel", 5) != 0)
3631
0
        break;
3632
511
      return ParsedAttr::AT_OpenCLKernel;  // "kernel"
3633
0
    }
3634
0
    break;
3635
17.3k
  case 7:  // 8 strings to match.
3636
17.3k
    switch (Name[0]) {
3637
17.3k
    
default: break0
;
3638
17.3k
    case '_':  // 5 strings to match.
3639
8.77k
      switch (Name[1]) {
3640
8.77k
      
default: break0
;
3641
8.77k
      case '_':  // 4 strings to match.
3642
8.76k
        switch (Name[2]) {
3643
8.76k
        
default: break0
;
3644
8.76k
        case 'c':  // 1 string to match.
3645
276
          if (memcmp(Name.data()+3, "decl", 4) != 0)
3646
0
            break;
3647
276
          return ParsedAttr::AT_CDecl;   // "__cdecl"
3648
8.46k
        case 'l':  // 1 string to match.
3649
8.46k
          if (memcmp(Name.data()+3, "ocal", 4) != 0)
3650
0
            break;
3651
8.46k
          return ParsedAttr::AT_OpenCLLocalAddressSpace;   // "__local"
3652
8.46k
        case 'p':  // 2 strings to match.
3653
30
          if (memcmp(Name.data()+3, "tr", 2) != 0)
3654
0
            break;
3655
30
          switch (Name[5]) {
3656
30
          
default: break0
;
3657
30
          case '3':  // 1 string to match.
3658
22
            if (Name[6] != '2')
3659
0
              break;
3660
22
            return ParsedAttr::AT_Ptr32;   // "__ptr32"
3661
22
          case '6':  // 1 string to match.
3662
8
            if (Name[6] != '4')
3663
0
              break;
3664
8
            return ParsedAttr::AT_Ptr64;  // "__ptr64"
3665
0
          }
3666
0
          break;
3667
0
        }
3668
0
        break;
3669
2
      case 'p':  // 1 string to match.
3670
2
        if (memcmp(Name.data()+2, "ascal", 5) != 0)
3671
0
          break;
3672
2
        return ParsedAttr::AT_Pascal;  // "_pascal"
3673
0
      }
3674
0
      break;
3675
7.85k
    case 'a':  // 1 string to match.
3676
7.85k
      if (memcmp(Name.data()+1, "lignas", 6) != 0)
3677
0
        break;
3678
7.85k
      return ParsedAttr::AT_Aligned;   // "alignas"
3679
7.85k
    case 'g':  // 1 string to match.
3680
295
      if (memcmp(Name.data()+1, "eneric", 6) != 0)
3681
0
        break;
3682
295
      return ParsedAttr::AT_OpenCLGenericAddressSpace;   // "generic"
3683
406
    case 'p':  // 1 string to match.
3684
406
      if (memcmp(Name.data()+1, "rivate", 6) != 0)
3685
0
        break;
3686
406
      return ParsedAttr::AT_OpenCLPrivateAddressSpace;  // "private"
3687
0
    }
3688
0
    break;
3689
188k
  case 8:  // 8 strings to match.
3690
188k
    switch (Name[0]) {
3691
188k
    
default: break0
;
3692
188k
    case '_':  // 7 strings to match.
3693
188k
      switch (Name[1]) {
3694
188k
      
default: break0
;
3695
188k
      case 'A':  // 1 string to match.
3696
40
        if (memcmp(Name.data()+2, "lignas", 6) != 0)
3697
0
          break;
3698
40
        return ParsedAttr::AT_Aligned;   // "_Alignas"
3699
178k
      case 'N':  // 1 string to match.
3700
178k
        if (memcmp(Name.data()+2, "onnull", 6) != 0)
3701
0
          break;
3702
178k
        return ParsedAttr::AT_TypeNonNull;   // "_Nonnull"
3703
178k
      case '_':  // 4 strings to match.
3704
9.96k
        switch (Name[2]) {
3705
9.96k
        
default: break0
;
3706
9.96k
        case 'g':  // 1 string to match.
3707
9.77k
          if (memcmp(Name.data()+3, "lobal", 5) != 0)
3708
0
            break;
3709
9.77k
          return ParsedAttr::AT_OpenCLGlobalAddressSpace;  // "__global"
3710
9.77k
        case 'k':  // 2 strings to match.
3711
180
          switch (Name[3]) {
3712
180
          
default: break0
;
3713
180
          case 'e':  // 1 string to match.
3714
82
            if (memcmp(Name.data()+4, "rnel", 4) != 0)
3715
0
              break;
3716
82
            return ParsedAttr::AT_OpenCLKernel;  // "__kernel"
3717
98
          case 'i':  // 1 string to match.
3718
98
            if (memcmp(Name.data()+4, "ndof", 4) != 0)
3719
0
              break;
3720
98
            return ParsedAttr::AT_ObjCKindOf;  // "__kindof"
3721
0
          }
3722
0
          break;
3723
15
        case 'p':  // 1 string to match.
3724
15
          if (memcmp(Name.data()+3, "ascal", 5) != 0)
3725
0
            break;
3726
15
          return ParsedAttr::AT_Pascal;  // "__pascal"
3727
0
        }
3728
0
        break;
3729
2
      case 's':  // 1 string to match.
3730
2
        if (memcmp(Name.data()+2, "tdcall", 6) != 0)
3731
0
          break;
3732
2
        return ParsedAttr::AT_StdCall;  // "_stdcall"
3733
0
      }
3734
0
      break;
3735
335
    case 'c':  // 1 string to match.
3736
335
      if (memcmp(Name.data()+1, "onstant", 7) != 0)
3737
0
        break;
3738
335
      return ParsedAttr::AT_OpenCLConstantAddressSpace;  // "constant"
3739
0
    }
3740
0
    break;
3741
80.4k
  case 9:  // 8 strings to match.
3742
80.4k
    switch (Name[0]) {
3743
80.4k
    
default: break0
;
3744
80.4k
    case '_':  // 7 strings to match.
3745
77.6k
      switch (Name[1]) {
3746
77.6k
      
default: break0
;
3747
77.6k
      case 'N':  // 1 string to match.
3748
74.9k
        if (memcmp(Name.data()+2, "ullable", 7) != 0)
3749
0
          break;
3750
74.9k
        return ParsedAttr::AT_TypeNullable;  // "_Nullable"
3751
74.9k
      case '_':  // 4 strings to match.
3752
2.77k
        switch (Name[2]) {
3753
2.77k
        
default: break0
;
3754
2.77k
        case 'g':  // 1 string to match.
3755
6
          if (memcmp(Name.data()+3, "eneric", 6) != 0)
3756
0
            break;
3757
6
          return ParsedAttr::AT_OpenCLGenericAddressSpace;   // "__generic"
3758
2.51k
        case 'p':  // 1 string to match.
3759
2.51k
          if (memcmp(Name.data()+3, "rivate", 6) != 0)
3760
0
            break;
3761
2.51k
          return ParsedAttr::AT_OpenCLPrivateAddressSpace;   // "__private"
3762
2.51k
        case 'r':  // 1 string to match.
3763
96
          if (memcmp(Name.data()+3, "egcall", 6) != 0)
3764
0
            break;
3765
96
          return ParsedAttr::AT_RegCall;   // "__regcall"
3766
151
        case 's':  // 1 string to match.
3767
151
          if (memcmp(Name.data()+3, "tdcall", 6) != 0)
3768
0
            break;
3769
151
          return ParsedAttr::AT_StdCall;  // "__stdcall"
3770
0
        }
3771
0
        break;
3772
2
      case 'f':  // 1 string to match.
3773
2
        if (memcmp(Name.data()+2, "astcall", 7) != 0)
3774
0
          break;
3775
2
        return ParsedAttr::AT_FastCall;  // "_fastcall"
3776
2
      case 't':  // 1 string to match.
3777
0
        if (memcmp(Name.data()+2, "hiscall", 7) != 0)
3778
0
          break;
3779
0
        return ParsedAttr::AT_ThisCall;  // "_thiscall"
3780
0
      }
3781
0
      break;
3782
2.76k
    case 'r':  // 1 string to match.
3783
2.76k
      if (memcmp(Name.data()+1, "ead_only", 8) != 0)
3784
0
        break;
3785
2.76k
      return ParsedAttr::AT_OpenCLAccess;  // "read_only"
3786
0
    }
3787
0
    break;
3788
4.99k
  case 10:   // 5 strings to match.
3789
4.99k
    switch (Name[0]) {
3790
4.99k
    
default: break0
;
3791
4.99k
    case '_':  // 3 strings to match.
3792
1.42k
      if (Name[1] != '_')
3793
0
        break;
3794
1.42k
      switch (Name[2]) {
3795
1.42k
      
default: break0
;
3796
1.42k
      case 'c':  // 1 string to match.
3797
1.29k
        if (memcmp(Name.data()+3, "onstant", 7) != 0)
3798
0
          break;
3799
1.29k
        return ParsedAttr::AT_OpenCLConstantAddressSpace;  // "__constant"
3800
1.29k
      case 'f':  // 1 string to match.
3801
94
        if (memcmp(Name.data()+3, "astcall", 7) != 0)
3802
0
          break;
3803
94
        return ParsedAttr::AT_FastCall;  // "__fastcall"
3804
94
      case 't':  // 1 string to match.
3805
45
        if (memcmp(Name.data()+3, "hiscall", 7) != 0)
3806
0
          break;
3807
45
        return ParsedAttr::AT_ThisCall;  // "__thiscall"
3808
0
      }
3809
0
      break;
3810
2.02k
    case 'r':  // 1 string to match.
3811
2.02k
      if (memcmp(Name.data()+1, "ead_write", 9) != 0)
3812
0
        break;
3813
2.02k
      return ParsedAttr::AT_OpenCLAccess;  // "read_write"
3814
2.02k
    case 'w':  // 1 string to match.
3815
1.54k
      if (memcmp(Name.data()+1, "rite_only", 9) != 0)
3816
0
        break;
3817
1.54k
      return ParsedAttr::AT_OpenCLAccess;  // "write_only"
3818
0
    }
3819
0
    break;
3820
5
  case 11:   // 2 strings to match.
3821
5
    if (Name[0] != '_')
3822
0
      break;
3823
5
    switch (Name[1]) {
3824
5
    
default: break0
;
3825
5
    case '_':  // 1 string to match.
3826
5
      if (memcmp(Name.data()+2, "read_only", 9) != 0)
3827
0
        break;
3828
5
      return ParsedAttr::AT_OpenCLAccess;  // "__read_only"
3829
5
    case 'v':  // 1 string to match.
3830
0
      if (memcmp(Name.data()+2, "ectorcall", 9) != 0)
3831
0
        break;
3832
0
      return ParsedAttr::AT_VectorCall;  // "_vectorcall"
3833
0
    }
3834
0
    break;
3835
113
  case 12:   // 3 strings to match.
3836
113
    if (memcmp(Name.data()+0, "__", 2) != 0)
3837
0
      break;
3838
113
    switch (Name[2]) {
3839
113
    
default: break0
;
3840
113
    case 'r':  // 1 string to match.
3841
3
      if (memcmp(Name.data()+3, "ead_write", 9) != 0)
3842
0
        break;
3843
3
      return ParsedAttr::AT_OpenCLAccess;  // "__read_write"
3844
105
    case 'v':  // 1 string to match.
3845
105
      if (memcmp(Name.data()+3, "ectorcall", 9) != 0)
3846
0
        break;
3847
105
      return ParsedAttr::AT_VectorCall;  // "__vectorcall"
3848
105
    case 'w':  // 1 string to match.
3849
5
      if (memcmp(Name.data()+3, "rite_only", 9) != 0)
3850
0
        break;
3851
5
      return ParsedAttr::AT_OpenCLAccess;  // "__write_only"
3852
0
    }
3853
0
    break;
3854
14
  case 13:   // 1 string to match.
3855
14
    if (memcmp(Name.data()+0, "__forceinline", 13) != 0)
3856
0
      break;
3857
14
    return ParsedAttr::AT_AlwaysInline;  // "__forceinline"
3858
1.15k
  case 17:   // 1 string to match.
3859
1.15k
    if (memcmp(Name.data()+0, "_Null_unspecified", 17) != 0)
3860
0
      break;
3861
1.15k
    return ParsedAttr::AT_TypeNullUnspecified;   // "_Null_unspecified"
3862
1.15k
  case 19:   // 1 string to match.
3863
0
    if (memcmp(Name.data()+0, "__unsafe_unretained", 19) != 0)
3864
0
      break;
3865
0
    return ParsedAttr::AT_ObjCInertUnsafeUnretained;   // "__unsafe_unretained"
3866
25
  case 20:   // 1 string to match.
3867
25
    if (memcmp(Name.data()+0, "__single_inheritance", 20) != 0)
3868
0
      break;
3869
25
    return ParsedAttr::AT_MSInheritance;   // "__single_inheritance"
3870
25
  case 21:   // 1 string to match.
3871
13
    if (memcmp(Name.data()+0, "__virtual_inheritance", 21) != 0)
3872
0
      break;
3873
13
    return ParsedAttr::AT_MSInheritance;   // "__virtual_inheritance"
3874
20
  case 22:   // 1 string to match.
3875
20
    if (memcmp(Name.data()+0, "__multiple_inheritance", 22) != 0)
3876
0
      break;
3877
20
    return ParsedAttr::AT_MSInheritance;   // "__multiple_inheritance"
3878
20
  case 25:   // 1 string to match.
3879
0
    if (memcmp(Name.data()+0, "__unspecified_inheritance", 25) != 0)
3880
0
      break;
3881
0
    return ParsedAttr::AT_MSInheritance;  // "__unspecified_inheritance"
3882
223
  }
3883
223
  } else if (ParsedAttr::AS_Pragma == Syntax) {
3884
223
  switch (Name.size()) {
3885
223
  
default: break0
;
3886
223
  case 4:  // 1 string to match.
3887
168
    if (memcmp(Name.data()+0, "loop", 4) != 0)
3888
0
      break;
3889
168
    return ParsedAttr::AT_LoopHint;  // "loop"
3890
168
  case 6:  // 1 string to match.
3891
32
    if (memcmp(Name.data()+0, "unroll", 6) != 0)
3892
0
      break;
3893
32
    return ParsedAttr::AT_LoopHint;  // "unroll"
3894
32
  case 8:  // 1 string to match.
3895
8
    if (memcmp(Name.data()+0, "nounroll", 8) != 0)
3896
0
      break;
3897
8
    return ParsedAttr::AT_LoopHint;  // "nounroll"
3898
9
  case 14:   // 1 string to match.
3899
9
    if (memcmp(Name.data()+0, "unroll_and_jam", 14) != 0)
3900
0
      break;
3901
9
    return ParsedAttr::AT_LoopHint;  // "unroll_and_jam"
3902
9
  case 16:   // 1 string to match.
3903
6
    if (memcmp(Name.data()+0, "nounroll_and_jam", 16) != 0)
3904
0
      break;
3905
6
    return ParsedAttr::AT_LoopHint;  // "nounroll_and_jam"
3906
223
  }
3907
223
  }
3908
209
  return ParsedAttr::UnknownAttribute;
3909
209
}