Coverage Report

Created: 2018-12-11 00:00

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