Coverage Report

Created: 2019-03-22 08:08

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