Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 1
/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
2
|*                                                                            *|
3
|* Attribute name matcher                                                     *|
4
|*                                                                            *|
5
|* Automatically generated file, do not edit!                                 *|
6
|*                                                                            *|
7
\*===----------------------------------------------------------------------===*/
8
 
9
static AttributeCommonInfo::Kind getAttrKind(StringRef Name, AttributeCommonInfo::Syntax Syntax) {
10
  if (AttributeCommonInfo::AS_GNU == Syntax) {
11
  switch (Name.size()) {
12
  default: break;
13
  case 3:	 // 3 strings to match.
14
    switch (Name[0]) {
15
    default: break;
16
    case 'f':	 // 1 string to match.
17
      if (memcmp(Name.data()+1, "ar", 2) != 0)
18
        break;
19
      return AttributeCommonInfo::AT_MipsLongCall;	 // "far"
20
    case 'h':	 // 1 string to match.
21
      if (memcmp(Name.data()+1, "ot", 2) != 0)
22
        break;
23
      return AttributeCommonInfo::AT_Hot;	 // "hot"
24
    case 'p':	 // 1 string to match.
25
      if (memcmp(Name.data()+1, "cs", 2) != 0)
26
        break;
27
      return AttributeCommonInfo::AT_Pcs;	 // "pcs"
28
    }
29
    break;
30
  case 4:	 // 8 strings to match.
31
    switch (Name[0]) {
32
    default: break;
33
    case 'c':	 // 1 string to match.
34
      if (memcmp(Name.data()+1, "old", 3) != 0)
35
        break;
36
      return AttributeCommonInfo::AT_Cold;	 // "cold"
37
    case 'h':	 // 1 string to match.
38
      if (memcmp(Name.data()+1, "ost", 3) != 0)
39
        break;
40
      return AttributeCommonInfo::AT_CUDAHost;	 // "host"
41
    case 'l':	 // 1 string to match.
42
      if (memcmp(Name.data()+1, "eaf", 3) != 0)
43
        break;
44
      return AttributeCommonInfo::AT_Leaf;	 // "leaf"
45
    case 'm':	 // 1 string to match.
46
      if (memcmp(Name.data()+1, "ode", 3) != 0)
47
        break;
48
      return AttributeCommonInfo::AT_Mode;	 // "mode"
49
    case 'n':	 // 1 string to match.
50
      if (memcmp(Name.data()+1, "ear", 3) != 0)
51
        break;
52
      return AttributeCommonInfo::AT_MipsShortCall;	 // "near"
53
    case 'p':	 // 1 string to match.
54
      if (memcmp(Name.data()+1, "ure", 3) != 0)
55
        break;
56
      return AttributeCommonInfo::AT_Pure;	 // "pure"
57
    case 'u':	 // 1 string to match.
58
      if (memcmp(Name.data()+1, "sed", 3) != 0)
59
        break;
60
      return AttributeCommonInfo::AT_Used;	 // "used"
61
    case 'w':	 // 1 string to match.
62
      if (memcmp(Name.data()+1, "eak", 3) != 0)
63
        break;
64
      return AttributeCommonInfo::AT_Weak;	 // "weak"
65
    }
66
    break;
67
  case 5:	 // 8 strings to match.
68
    switch (Name[0]) {
69
    default: break;
70
    case 'a':	 // 1 string to match.
71
      if (memcmp(Name.data()+1, "lias", 4) != 0)
72
        break;
73
      return AttributeCommonInfo::AT_Alias;	 // "alias"
74
    case 'c':	 // 2 strings to match.
75
      switch (Name[1]) {
76
      default: break;
77
      case 'd':	 // 1 string to match.
78
        if (memcmp(Name.data()+2, "ecl", 3) != 0)
79
          break;
80
        return AttributeCommonInfo::AT_CDecl;	 // "cdecl"
81
      case 'o':	 // 1 string to match.
82
        if (memcmp(Name.data()+2, "nst", 3) != 0)
83
          break;
84
        return AttributeCommonInfo::AT_Const;	 // "const"
85
      }
86
      break;
87
    case 'e':	 // 1 string to match.
88
      if (memcmp(Name.data()+1, "rror", 4) != 0)
89
        break;
90
      return AttributeCommonInfo::AT_Error;	 // "error"
91
    case 'g':	 // 1 string to match.
92
      if (memcmp(Name.data()+1, "uard", 4) != 0)
93
        break;
94
      return AttributeCommonInfo::AT_CFGuard;	 // "guard"
95
    case 'i':	 // 1 string to match.
96
      if (memcmp(Name.data()+1, "func", 4) != 0)
97
        break;
98
      return AttributeCommonInfo::AT_IFunc;	 // "ifunc"
99
    case 'n':	 // 2 strings to match.
100
      switch (Name[1]) {
101
      default: break;
102
      case 'a':	 // 1 string to match.
103
        if (memcmp(Name.data()+2, "ked", 3) != 0)
104
          break;
105
        return AttributeCommonInfo::AT_Naked;	 // "naked"
106
      case 'o':	 // 1 string to match.
107
        if (memcmp(Name.data()+2, "svm", 3) != 0)
108
          break;
109
        return AttributeCommonInfo::AT_OpenCLNoSVM;	 // "nosvm"
110
      }
111
      break;
112
    }
113
    break;
114
  case 6:	 // 17 strings to match.
115
    switch (Name[0]) {
116
    default: break;
117
    case 'a':	 // 1 string to match.
118
      if (memcmp(Name.data()+1, "ssume", 5) != 0)
119
        break;
120
      return AttributeCommonInfo::AT_Assumption;	 // "assume"
121
    case 'b':	 // 1 string to match.
122
      if (memcmp(Name.data()+1, "locks", 5) != 0)
123
        break;
124
      return AttributeCommonInfo::AT_Blocks;	 // "blocks"
125
    case 'c':	 // 1 string to match.
126
      if (memcmp(Name.data()+1, "ommon", 5) != 0)
127
        break;
128
      return AttributeCommonInfo::AT_Common;	 // "common"
129
    case 'd':	 // 1 string to match.
130
      if (memcmp(Name.data()+1, "evice", 5) != 0)
131
        break;
132
      return AttributeCommonInfo::AT_CUDADevice;	 // "device"
133
    case 'f':	 // 1 string to match.
134
      if (memcmp(Name.data()+1, "ormat", 5) != 0)
135
        break;
136
      return AttributeCommonInfo::AT_Format;	 // "format"
137
    case 'g':	 // 1 string to match.
138
      if (memcmp(Name.data()+1, "lobal", 5) != 0)
139
        break;
140
      return AttributeCommonInfo::AT_CUDAGlobal;	 // "global"
141
    case 'k':	 // 1 string to match.
142
      if (memcmp(Name.data()+1, "ernel", 5) != 0)
143
        break;
144
      return AttributeCommonInfo::AT_RenderScriptKernel;	 // "kernel"
145
    case 'm':	 // 3 strings to match.
146
      switch (Name[1]) {
147
      default: break;
148
      case 'a':	 // 1 string to match.
149
        if (memcmp(Name.data()+2, "lloc", 4) != 0)
150
          break;
151
        return AttributeCommonInfo::AT_Restrict;	 // "malloc"
152
      case 'i':	 // 1 string to match.
153
        if (memcmp(Name.data()+2, "ps16", 4) != 0)
154
          break;
155
        return AttributeCommonInfo::AT_Mips16;	 // "mips16"
156
      case 's':	 // 1 string to match.
157
        if (memcmp(Name.data()+2, "_abi", 4) != 0)
158
          break;
159
        return AttributeCommonInfo::AT_MSABI;	 // "ms_abi"
160
      }
161
      break;
162
    case 'p':	 // 2 strings to match.
163
      if (Name[1] != 'a')
164
        break;
165
      switch (Name[2]) {
166
      default: break;
167
      case 'c':	 // 1 string to match.
168
        if (memcmp(Name.data()+3, "ked", 3) != 0)
169
          break;
170
        return AttributeCommonInfo::AT_Packed;	 // "packed"
171
      case 's':	 // 1 string to match.
172
        if (memcmp(Name.data()+3, "cal", 3) != 0)
173
          break;
174
        return AttributeCommonInfo::AT_Pascal;	 // "pascal"
175
      }
176
      break;
177
    case 'r':	 // 1 string to match.
178
      if (memcmp(Name.data()+1, "etain", 5) != 0)
179
        break;
180
      return AttributeCommonInfo::AT_Retain;	 // "retain"
181
    case 's':	 // 2 strings to match.
182
      switch (Name[1]) {
183
      default: break;
184
      case 'h':	 // 1 string to match.
185
        if (memcmp(Name.data()+2, "ared", 4) != 0)
186
          break;
187
        return AttributeCommonInfo::AT_CUDAShared;	 // "shared"
188
      case 'i':	 // 1 string to match.
189
        if (memcmp(Name.data()+2, "gnal", 4) != 0)
190
          break;
191
        return AttributeCommonInfo::AT_AVRSignal;	 // "signal"
192
      }
193
      break;
194
    case 't':	 // 1 string to match.
195
      if (memcmp(Name.data()+1, "arget", 5) != 0)
196
        break;
197
      return AttributeCommonInfo::AT_Target;	 // "target"
198
    case 'u':	 // 1 string to match.
199
      if (memcmp(Name.data()+1, "nused", 5) != 0)
200
        break;
201
      return AttributeCommonInfo::AT_Unused;	 // "unused"
202
    }
203
    break;
204
  case 7:	 // 22 strings to match.
205
    switch (Name[0]) {
206
    default: break;
207
    case '_':	 // 1 string to match.
208
      if (memcmp(Name.data()+1, "_const", 6) != 0)
209
        break;
210
      return AttributeCommonInfo::AT_Const;	 // "__const"
211
    case 'a':	 // 2 strings to match.
212
      switch (Name[1]) {
213
      default: break;
214
      case 'b':	 // 1 string to match.
215
        if (memcmp(Name.data()+2, "i_tag", 5) != 0)
216
          break;
217
        return AttributeCommonInfo::AT_AbiTag;	 // "abi_tag"
218
      case 'l':	 // 1 string to match.
219
        if (memcmp(Name.data()+2, "igned", 5) != 0)
220
          break;
221
        return AttributeCommonInfo::AT_Aligned;	 // "aligned"
222
      }
223
      break;
224
    case 'b':	 // 1 string to match.
225
      if (memcmp(Name.data()+1, "ounded", 6) != 0)
226
        break;
227
      return AttributeCommonInfo::IgnoredAttribute;	 // "bounded"
228
    case 'c':	 // 1 string to match.
229
      if (memcmp(Name.data()+1, "leanup", 6) != 0)
230
        break;
231
      return AttributeCommonInfo::AT_Cleanup;	 // "cleanup"
232
    case 'f':	 // 1 string to match.
233
      if (memcmp(Name.data()+1, "latten", 6) != 0)
234
        break;
235
      return AttributeCommonInfo::AT_Flatten;	 // "flatten"
236
    case 'm':	 // 2 strings to match.
237
      switch (Name[1]) {
238
      default: break;
239
      case 'a':	 // 1 string to match.
240
        if (memcmp(Name.data()+2, "naged", 5) != 0)
241
          break;
242
        return AttributeCommonInfo::AT_HIPManaged;	 // "managed"
243
      case 'i':	 // 1 string to match.
244
        if (memcmp(Name.data()+2, "nsize", 5) != 0)
245
          break;
246
        return AttributeCommonInfo::AT_MinSize;	 // "minsize"
247
      }
248
      break;
249
    case 'n':	 // 6 strings to match.
250
      switch (Name[1]) {
251
      default: break;
252
      case 'o':	 // 5 strings to match.
253
        switch (Name[2]) {
254
        default: break;
255
        case 'd':	 // 2 strings to match.
256
          if (Name[3] != 'e')
257
            break;
258
          switch (Name[4]) {
259
          default: break;
260
          case 'b':	 // 1 string to match.
261
            if (memcmp(Name.data()+5, "ug", 2) != 0)
262
              break;
263
            return AttributeCommonInfo::AT_NoDebug;	 // "nodebug"
264
          case 'r':	 // 1 string to match.
265
            if (memcmp(Name.data()+5, "ef", 2) != 0)
266
              break;
267
            return AttributeCommonInfo::AT_NoDeref;	 // "noderef"
268
          }
269
          break;
270
        case 'm':	 // 1 string to match.
271
          if (memcmp(Name.data()+3, "erge", 4) != 0)
272
            break;
273
          return AttributeCommonInfo::AT_NoMerge;	 // "nomerge"
274
        case 'n':	 // 1 string to match.
275
          if (memcmp(Name.data()+3, "null", 4) != 0)
276
            break;
277
          return AttributeCommonInfo::AT_NonNull;	 // "nonnull"
278
        case 't':	 // 1 string to match.
279
          if (memcmp(Name.data()+3, "hrow", 4) != 0)
280
            break;
281
          return AttributeCommonInfo::AT_NoThrow;	 // "nothrow"
282
        }
283
        break;
284
      case 'v':	 // 1 string to match.
285
        if (memcmp(Name.data()+2, "_weak", 5) != 0)
286
          break;
287
        return AttributeCommonInfo::IgnoredAttribute;	 // "nv_weak"
288
      }
289
      break;
290
    case 'o':	 // 2 strings to match.
291
      switch (Name[1]) {
292
      default: break;
293
      case 'b':	 // 1 string to match.
294
        if (memcmp(Name.data()+2, "jc_gc", 5) != 0)
295
          break;
296
        return AttributeCommonInfo::AT_ObjCGC;	 // "objc_gc"
297
      case 'p':	 // 1 string to match.
298
        if (memcmp(Name.data()+2, "tnone", 5) != 0)
299
          break;
300
        return AttributeCommonInfo::AT_OptimizeNone;	 // "optnone"
301
      }
302
      break;
303
    case 'r':	 // 2 strings to match.
304
      if (memcmp(Name.data()+1, "eg", 2) != 0)
305
        break;
306
      switch (Name[3]) {
307
      default: break;
308
      case 'c':	 // 1 string to match.
309
        if (memcmp(Name.data()+4, "all", 3) != 0)
310
          break;
311
        return AttributeCommonInfo::AT_RegCall;	 // "regcall"
312
      case 'p':	 // 1 string to match.
313
        if (memcmp(Name.data()+4, "arm", 3) != 0)
314
          break;
315
        return AttributeCommonInfo::AT_Regparm;	 // "regparm"
316
      }
317
      break;
318
    case 's':	 // 2 strings to match.
319
      switch (Name[1]) {
320
      default: break;
321
      case 'e':	 // 1 string to match.
322
        if (memcmp(Name.data()+2, "ction", 5) != 0)
323
          break;
324
        return AttributeCommonInfo::AT_Section;	 // "section"
325
      case 't':	 // 1 string to match.
326
        if (memcmp(Name.data()+2, "dcall", 5) != 0)
327
          break;
328
        return AttributeCommonInfo::AT_StdCall;	 // "stdcall"
329
      }
330
      break;
331
    case 'w':	 // 2 strings to match.
332
      switch (Name[1]) {
333
      default: break;
334
      case 'a':	 // 1 string to match.
335
        if (memcmp(Name.data()+2, "rning", 5) != 0)
336
          break;
337
        return AttributeCommonInfo::AT_Error;	 // "warning"
338
      case 'e':	 // 1 string to match.
339
        if (memcmp(Name.data()+2, "akref", 5) != 0)
340
          break;
341
        return AttributeCommonInfo::AT_WeakRef;	 // "weakref"
342
      }
343
      break;
344
    }
345
    break;
346
  case 8:	 // 17 strings to match.
347
    switch (Name[0]) {
348
    default: break;
349
    case 'N':	 // 1 string to match.
350
      if (memcmp(Name.data()+1, "SObject", 7) != 0)
351
        break;
352
      return AttributeCommonInfo::AT_ObjCNSObject;	 // "NSObject"
353
    case 'a':	 // 1 string to match.
354
      if (memcmp(Name.data()+1, "nnotate", 7) != 0)
355
        break;
356
      return AttributeCommonInfo::AT_Annotate;	 // "annotate"
357
    case 'c':	 // 2 strings to match.
358
      switch (Name[1]) {
359
      default: break;
360
      case 'a':	 // 1 string to match.
361
        if (memcmp(Name.data()+2, "llback", 6) != 0)
362
          break;
363
        return AttributeCommonInfo::AT_Callback;	 // "callback"
364
      case 'o':	 // 1 string to match.
365
        if (memcmp(Name.data()+2, "nstant", 6) != 0)
366
          break;
367
        return AttributeCommonInfo::AT_CUDAConstant;	 // "constant"
368
      }
369
      break;
370
    case 'f':	 // 1 string to match.
371
      if (memcmp(Name.data()+1, "astcall", 7) != 0)
372
        break;
373
      return AttributeCommonInfo::AT_FastCall;	 // "fastcall"
374
    case 'i':	 // 2 strings to match.
375
      if (Name[1] != 'b')
376
        break;
377
      switch (Name[2]) {
378
      default: break;
379
      case 'a':	 // 1 string to match.
380
        if (memcmp(Name.data()+3, "ction", 5) != 0)
381
          break;
382
        return AttributeCommonInfo::AT_IBAction;	 // "ibaction"
383
      case 'o':	 // 1 string to match.
384
        if (memcmp(Name.data()+3, "utlet", 5) != 0)
385
          break;
386
        return AttributeCommonInfo::AT_IBOutlet;	 // "iboutlet"
387
      }
388
      break;
389
    case 'l':	 // 1 string to match.
390
      if (memcmp(Name.data()+1, "ockable", 7) != 0)
391
        break;
392
      return AttributeCommonInfo::AT_Lockable;	 // "lockable"
393
    case 'm':	 // 1 string to match.
394
      if (memcmp(Name.data()+1, "usttail", 7) != 0)
395
        break;
396
      return AttributeCommonInfo::AT_MustTail;	 // "musttail"
397
    case 'n':	 // 5 strings to match.
398
      if (Name[1] != 'o')
399
        break;
400
      switch (Name[2]) {
401
      default: break;
402
      case 'c':	 // 1 string to match.
403
        if (memcmp(Name.data()+3, "ommon", 5) != 0)
404
          break;
405
        return AttributeCommonInfo::AT_NoCommon;	 // "nocommon"
406
      case 'e':	 // 1 string to match.
407
        if (memcmp(Name.data()+3, "scape", 5) != 0)
408
          break;
409
        return AttributeCommonInfo::AT_NoEscape;	 // "noescape"
410
      case 'i':	 // 1 string to match.
411
        if (memcmp(Name.data()+3, "nline", 5) != 0)
412
          break;
413
        return AttributeCommonInfo::AT_NoInline;	 // "noinline"
414
      case 'm':	 // 1 string to match.
415
        if (memcmp(Name.data()+3, "ips16", 5) != 0)
416
          break;
417
        return AttributeCommonInfo::AT_NoMips16;	 // "nomips16"
418
      case 'r':	 // 1 string to match.
419
        if (memcmp(Name.data()+3, "eturn", 5) != 0)
420
          break;
421
        return AttributeCommonInfo::AT_NoReturn;	 // "noreturn"
422
      }
423
      break;
424
    case 's':	 // 2 strings to match.
425
      switch (Name[1]) {
426
      default: break;
427
      case 'e':	 // 1 string to match.
428
        if (memcmp(Name.data()+2, "ntinel", 6) != 0)
429
          break;
430
        return AttributeCommonInfo::AT_Sentinel;	 // "sentinel"
431
      case 'y':	 // 1 string to match.
432
        if (memcmp(Name.data()+2, "sv_abi", 6) != 0)
433
          break;
434
        return AttributeCommonInfo::AT_SysVABI;	 // "sysv_abi"
435
      }
436
      break;
437
    case 't':	 // 1 string to match.
438
      if (memcmp(Name.data()+1, "hiscall", 7) != 0)
439
        break;
440
      return AttributeCommonInfo::AT_ThisCall;	 // "thiscall"
441
    }
442
    break;
443
  case 9:	 // 14 strings to match.
444
    switch (Name[0]) {
445
    default: break;
446
    case 'd':	 // 2 strings to match.
447
      if (memcmp(Name.data()+1, "ll", 2) != 0)
448
        break;
449
      switch (Name[3]) {
450
      default: break;
451
      case 'e':	 // 1 string to match.
452
        if (memcmp(Name.data()+4, "xport", 5) != 0)
453
          break;
454
        return AttributeCommonInfo::AT_DLLExport;	 // "dllexport"
455
      case 'i':	 // 1 string to match.
456
        if (memcmp(Name.data()+4, "mport", 5) != 0)
457
          break;
458
        return AttributeCommonInfo::AT_DLLImport;	 // "dllimport"
459
      }
460
      break;
461
    case 'e':	 // 1 string to match.
462
      if (memcmp(Name.data()+1, "nable_if", 8) != 0)
463
        break;
464
      return AttributeCommonInfo::AT_EnableIf;	 // "enable_if"
465
    case 'f':	 // 1 string to match.
466
      if (memcmp(Name.data()+1, "lag_enum", 8) != 0)
467
        break;
468
      return AttributeCommonInfo::AT_FlagEnum;	 // "flag_enum"
469
    case 'i':	 // 1 string to match.
470
      if (memcmp(Name.data()+1, "nterrupt", 8) != 0)
471
        break;
472
      return AttributeCommonInfo::AT_Interrupt;	 // "interrupt"
473
    case 'l':	 // 1 string to match.
474
      if (memcmp(Name.data()+1, "ong_call", 8) != 0)
475
        break;
476
      return AttributeCommonInfo::AT_MipsLongCall;	 // "long_call"
477
    case 'm':	 // 3 strings to match.
478
      switch (Name[1]) {
479
      default: break;
480
      case 'a':	 // 1 string to match.
481
        if (memcmp(Name.data()+2, "y_alias", 7) != 0)
482
          break;
483
        return AttributeCommonInfo::AT_MayAlias;	 // "may_alias"
484
      case 'i':	 // 1 string to match.
485
        if (memcmp(Name.data()+2, "cromips", 7) != 0)
486
          break;
487
        return AttributeCommonInfo::AT_MicroMips;	 // "micromips"
488
      case 's':	 // 1 string to match.
489
        if (memcmp(Name.data()+2, "_struct", 7) != 0)
490
          break;
491
        return AttributeCommonInfo::AT_MSStruct;	 // "ms_struct"
492
      }
493
      break;
494
    case 'n':	 // 1 string to match.
495
      if (memcmp(Name.data()+1, "ouwtable", 8) != 0)
496
        break;
497
      return AttributeCommonInfo::AT_NoUwtable;	 // "nouwtable"
498
    case 's':	 // 2 strings to match.
499
      switch (Name[1]) {
500
      default: break;
501
      case 'e':	 // 1 string to match.
502
        if (memcmp(Name.data()+2, "lectany", 7) != 0)
503
          break;
504
        return AttributeCommonInfo::AT_SelectAny;	 // "selectany"
505
      case 'w':	 // 1 string to match.
506
        if (memcmp(Name.data()+2, "iftcall", 7) != 0)
507
          break;
508
        return AttributeCommonInfo::AT_SwiftCall;	 // "swiftcall"
509
      }
510
      break;
511
    case 't':	 // 1 string to match.
512
      if (memcmp(Name.data()+1, "ls_model", 8) != 0)
513
        break;
514
      return AttributeCommonInfo::AT_TLSModel;	 // "tls_model"
515
    case 'v':	 // 1 string to match.
516
      if (memcmp(Name.data()+1, "ecreturn", 8) != 0)
517
        break;
518
      return AttributeCommonInfo::AT_VecReturn;	 // "vecreturn"
519
    }
520
    break;
521
  case 10:	 // 19 strings to match.
522
    switch (Name[0]) {
523
    default: break;
524
    case 'a':	 // 2 strings to match.
525
      switch (Name[1]) {
526
      default: break;
527
      case 'l':	 // 1 string to match.
528
        if (memcmp(Name.data()+2, "loc_size", 8) != 0)
529
          break;
530
        return AttributeCommonInfo::AT_AllocSize;	 // "alloc_size"
531
      case 'r':	 // 1 string to match.
532
        if (memcmp(Name.data()+2, "tificial", 8) != 0)
533
          break;
534
        return AttributeCommonInfo::AT_Artificial;	 // "artificial"
535
      }
536
      break;
537
    case 'c':	 // 3 strings to match.
538
      switch (Name[1]) {
539
      default: break;
540
      case 'a':	 // 1 string to match.
541
        if (memcmp(Name.data()+2, "pability", 8) != 0)
542
          break;
543
        return AttributeCommonInfo::AT_Capability;	 // "capability"
544
      case 'o':	 // 2 strings to match.
545
        if (Name[2] != 'n')
546
          break;
547
        switch (Name[3]) {
548
        default: break;
549
        case 's':	 // 1 string to match.
550
          if (memcmp(Name.data()+4, "umable", 6) != 0)
551
            break;
552
          return AttributeCommonInfo::AT_Consumable;	 // "consumable"
553
        case 'v':	 // 1 string to match.
554
          if (memcmp(Name.data()+4, "ergent", 6) != 0)
555
            break;
556
          return AttributeCommonInfo::AT_Convergent;	 // "convergent"
557
        }
558
        break;
559
      }
560
      break;
561
    case 'd':	 // 2 strings to match.
562
      if (Name[1] != 'e')
563
        break;
564
      switch (Name[2]) {
565
      default: break;
566
      case 'p':	 // 1 string to match.
567
        if (memcmp(Name.data()+3, "recated", 7) != 0)
568
          break;
569
        return AttributeCommonInfo::AT_Deprecated;	 // "deprecated"
570
      case 's':	 // 1 string to match.
571
        if (memcmp(Name.data()+3, "tructor", 7) != 0)
572
          break;
573
        return AttributeCommonInfo::AT_Destructor;	 // "destructor"
574
      }
575
      break;
576
    case 'f':	 // 1 string to match.
577
      if (memcmp(Name.data()+1, "ormat_arg", 9) != 0)
578
        break;
579
      return AttributeCommonInfo::AT_FormatArg;	 // "format_arg"
580
    case 'g':	 // 2 strings to match.
581
      switch (Name[1]) {
582
      default: break;
583
      case 'n':	 // 1 string to match.
584
        if (memcmp(Name.data()+2, "u_inline", 8) != 0)
585
          break;
586
        return AttributeCommonInfo::AT_GNUInline;	 // "gnu_inline"
587
      case 'u':	 // 1 string to match.
588
        if (memcmp(Name.data()+2, "arded_by", 8) != 0)
589
          break;
590
        return AttributeCommonInfo::AT_GuardedBy;	 // "guarded_by"
591
      }
592
      break;
593
    case 'n':	 // 3 strings to match.
594
      if (Name[1] != 'o')
595
        break;
596
      switch (Name[2]) {
597
      default: break;
598
      case '_':	 // 2 strings to match.
599
        switch (Name[3]) {
600
        default: break;
601
        case 'b':	 // 1 string to match.
602
          if (memcmp(Name.data()+4, "uiltin", 6) != 0)
603
            break;
604
          return AttributeCommonInfo::AT_NoBuiltin;	 // "no_builtin"
605
        case 'd':	 // 1 string to match.
606
          if (memcmp(Name.data()+4, "estroy", 6) != 0)
607
            break;
608
          return AttributeCommonInfo::AT_NoDestroy;	 // "no_destroy"
609
        }
610
        break;
611
      case 'c':	 // 1 string to match.
612
        if (memcmp(Name.data()+3, "f_check", 7) != 0)
613
          break;
614
        return AttributeCommonInfo::AT_AnyX86NoCfCheck;	 // "nocf_check"
615
      }
616
      break;
617
    case 's':	 // 3 strings to match.
618
      switch (Name[1]) {
619
      default: break;
620
      case 'h':	 // 1 string to match.
621
        if (memcmp(Name.data()+2, "ort_call", 8) != 0)
622
          break;
623
        return AttributeCommonInfo::AT_MipsShortCall;	 // "short_call"
624
      case 'w':	 // 2 strings to match.
625
        if (memcmp(Name.data()+2, "ift_", 4) != 0)
626
          break;
627
        switch (Name[6]) {
628
        default: break;
629
        case 'a':	 // 1 string to match.
630
          if (memcmp(Name.data()+7, "ttr", 3) != 0)
631
            break;
632
          return AttributeCommonInfo::AT_SwiftAttr;	 // "swift_attr"
633
        case 'n':	 // 1 string to match.
634
          if (memcmp(Name.data()+7, "ame", 3) != 0)
635
            break;
636
          return AttributeCommonInfo::AT_SwiftName;	 // "swift_name"
637
        }
638
        break;
639
      }
640
      break;
641
    case 'u':	 // 1 string to match.
642
      if (memcmp(Name.data()+1, "se_handle", 9) != 0)
643
        break;
644
      return AttributeCommonInfo::AT_UseHandle;	 // "use_handle"
645
    case 'v':	 // 2 strings to match.
646
      switch (Name[1]) {
647
      default: break;
648
      case 'e':	 // 1 string to match.
649
        if (memcmp(Name.data()+2, "ctorcall", 8) != 0)
650
          break;
651
        return AttributeCommonInfo::AT_VectorCall;	 // "vectorcall"
652
      case 'i':	 // 1 string to match.
653
        if (memcmp(Name.data()+2, "sibility", 8) != 0)
654
          break;
655
        return AttributeCommonInfo::AT_Visibility;	 // "visibility"
656
      }
657
      break;
658
    }
659
    break;
660
  case 11:	 // 28 strings to match.
661
    switch (Name[0]) {
662
    default: break;
663
    case 'a':	 // 2 strings to match.
664
      if (Name[1] != 'l')
665
        break;
666
      switch (Name[2]) {
667
      default: break;
668
      case 'i':	 // 1 string to match.
669
        if (memcmp(Name.data()+3, "gn_value", 8) != 0)
670
          break;
671
        return AttributeCommonInfo::AT_AlignValue;	 // "align_value"
672
      case 'l':	 // 1 string to match.
673
        if (memcmp(Name.data()+3, "oc_align", 8) != 0)
674
          break;
675
        return AttributeCommonInfo::AT_AllocAlign;	 // "alloc_align"
676
      }
677
      break;
678
    case 'c':	 // 3 strings to match.
679
      switch (Name[1]) {
680
      default: break;
681
      case 'a':	 // 1 string to match.
682
        if (memcmp(Name.data()+2, "lled_once", 9) != 0)
683
          break;
684
        return AttributeCommonInfo::AT_CalledOnce;	 // "called_once"
685
      case 'f':	 // 1 string to match.
686
        if (memcmp(Name.data()+2, "_consumed", 9) != 0)
687
          break;
688
        return AttributeCommonInfo::AT_CFConsumed;	 // "cf_consumed"
689
      case 'o':	 // 1 string to match.
690
        if (memcmp(Name.data()+2, "nstructor", 9) != 0)
691
          break;
692
        return AttributeCommonInfo::AT_Constructor;	 // "constructor"
693
      }
694
      break;
695
    case 'd':	 // 1 string to match.
696
      if (memcmp(Name.data()+1, "iagnose_if", 10) != 0)
697
        break;
698
      return AttributeCommonInfo::AT_DiagnoseIf;	 // "diagnose_if"
699
    case 'e':	 // 2 strings to match.
700
      switch (Name[1]) {
701
      default: break;
702
      case 'n':	 // 1 string to match.
703
        if (memcmp(Name.data()+2, "force_tcb", 9) != 0)
704
          break;
705
        return AttributeCommonInfo::AT_EnforceTCB;	 // "enforce_tcb"
706
      case 'x':	 // 1 string to match.
707
        if (memcmp(Name.data()+2, "port_name", 9) != 0)
708
          break;
709
        return AttributeCommonInfo::AT_WebAssemblyExportName;	 // "export_name"
710
      }
711
      break;
712
    case 'f':	 // 1 string to match.
713
      if (memcmp(Name.data()+1, "allthrough", 10) != 0)
714
        break;
715
      return AttributeCommonInfo::AT_FallThrough;	 // "fallthrough"
716
    case 'g':	 // 1 string to match.
717
      if (memcmp(Name.data()+1, "uarded_var", 10) != 0)
718
        break;
719
      return AttributeCommonInfo::AT_GuardedVar;	 // "guarded_var"
720
    case 'i':	 // 1 string to match.
721
      if (memcmp(Name.data()+1, "mport_name", 10) != 0)
722
        break;
723
      return AttributeCommonInfo::AT_WebAssemblyImportName;	 // "import_name"
724
    case 'm':	 // 2 strings to match.
725
      if (Name[1] != 'a')
726
        break;
727
      switch (Name[2]) {
728
      default: break;
729
      case 't':	 // 1 string to match.
730
        if (memcmp(Name.data()+3, "rix_type", 8) != 0)
731
          break;
732
        return AttributeCommonInfo::AT_MatrixType;	 // "matrix_type"
733
      case 'y':	 // 1 string to match.
734
        if (memcmp(Name.data()+3, "be_undef", 8) != 0)
735
          break;
736
        return AttributeCommonInfo::AT_MaybeUndef;	 // "maybe_undef"
737
      }
738
      break;
739
    case 'n':	 // 4 strings to match.
740
      switch (Name[1]) {
741
      default: break;
742
      case 'o':	 // 3 strings to match.
743
        switch (Name[2]) {
744
        default: break;
745
        case '_':	 // 1 string to match.
746
          if (memcmp(Name.data()+3, "sanitize", 8) != 0)
747
            break;
748
          return AttributeCommonInfo::AT_NoSanitize;	 // "no_sanitize"
749
        case 'd':	 // 1 string to match.
750
          if (memcmp(Name.data()+3, "uplicate", 8) != 0)
751
            break;
752
          return AttributeCommonInfo::AT_NoDuplicate;	 // "noduplicate"
753
        case 'm':	 // 1 string to match.
754
          if (memcmp(Name.data()+3, "icromips", 8) != 0)
755
            break;
756
          return AttributeCommonInfo::AT_NoMicroMips;	 // "nomicromips"
757
        }
758
        break;
759
      case 's':	 // 1 string to match.
760
        if (memcmp(Name.data()+2, "_consumed", 9) != 0)
761
          break;
762
        return AttributeCommonInfo::AT_NSConsumed;	 // "ns_consumed"
763
      }
764
      break;
765
    case 'o':	 // 3 strings to match.
766
      switch (Name[1]) {
767
      default: break;
768
      case 'b':	 // 2 strings to match.
769
        if (memcmp(Name.data()+2, "jc_", 3) != 0)
770
          break;
771
        switch (Name[5]) {
772
        default: break;
773
        case 'b':	 // 1 string to match.
774
          if (memcmp(Name.data()+6, "ridge", 5) != 0)
775
            break;
776
          return AttributeCommonInfo::AT_ObjCBridge;	 // "objc_bridge"
777
        case 'd':	 // 1 string to match.
778
          if (memcmp(Name.data()+6, "irect", 5) != 0)
779
            break;
780
          return AttributeCommonInfo::AT_ObjCDirect;	 // "objc_direct"
781
        }
782
        break;
783
      case 's':	 // 1 string to match.
784
        if (memcmp(Name.data()+2, "_consumed", 9) != 0)
785
          break;
786
        return AttributeCommonInfo::AT_OSConsumed;	 // "os_consumed"
787
      }
788
      break;
789
    case 's':	 // 3 strings to match.
790
      switch (Name[1]) {
791
      default: break;
792
      case 'w':	 // 2 strings to match.
793
        if (memcmp(Name.data()+2, "ift_", 4) != 0)
794
          break;
795
        switch (Name[6]) {
796
        default: break;
797
        case 'a':	 // 1 string to match.
798
          if (memcmp(Name.data()+7, "sync", 4) != 0)
799
            break;
800
          return AttributeCommonInfo::AT_SwiftAsync;	 // "swift_async"
801
        case 'e':	 // 1 string to match.
802
          if (memcmp(Name.data()+7, "rror", 4) != 0)
803
            break;
804
          return AttributeCommonInfo::AT_SwiftError;	 // "swift_error"
805
        }
806
        break;
807
      case 'y':	 // 1 string to match.
808
        if (memcmp(Name.data()+2, "cl_kernel", 9) != 0)
809
          break;
810
        return AttributeCommonInfo::AT_SYCLKernel;	 // "sycl_kernel"
811
      }
812
      break;
813
    case 't':	 // 1 string to match.
814
      if (memcmp(Name.data()+1, "rivial_abi", 10) != 0)
815
        break;
816
      return AttributeCommonInfo::AT_TrivialABI;	 // "trivial_abi"
817
    case 'u':	 // 1 string to match.
818
      if (memcmp(Name.data()+1, "navailable", 10) != 0)
819
        break;
820
      return AttributeCommonInfo::AT_Unavailable;	 // "unavailable"
821
    case 'v':	 // 1 string to match.
822
      if (memcmp(Name.data()+1, "ector_size", 10) != 0)
823
        break;
824
      return AttributeCommonInfo::AT_VectorSize;	 // "vector_size"
825
    case 'w':	 // 2 strings to match.
826
      switch (Name[1]) {
827
      default: break;
828
      case 'a':	 // 1 string to match.
829
        if (memcmp(Name.data()+2, "rn_unused", 9) != 0)
830
          break;
831
        return AttributeCommonInfo::AT_WarnUnused;	 // "warn_unused"
832
      case 'e':	 // 1 string to match.
833
        if (memcmp(Name.data()+2, "ak_import", 9) != 0)
834
          break;
835
        return AttributeCommonInfo::AT_WeakImport;	 // "weak_import"
836
      }
837
      break;
838
    }
839
    break;
840
  case 12:	 // 10 strings to match.
841
    switch (Name[0]) {
842
    default: break;
843
    case 'a':	 // 1 string to match.
844
      if (memcmp(Name.data()+1, "vailability", 11) != 0)
845
        break;
846
      return AttributeCommonInfo::AT_Availability;	 // "availability"
847
    case 'b':	 // 2 strings to match.
848
      if (memcmp(Name.data()+1, "tf_", 3) != 0)
849
        break;
850
      switch (Name[4]) {
851
      default: break;
852
      case 'd':	 // 1 string to match.
853
        if (memcmp(Name.data()+5, "ecl_tag", 7) != 0)
854
          break;
855
        return AttributeCommonInfo::AT_BTFDeclTag;	 // "btf_decl_tag"
856
      case 't':	 // 1 string to match.
857
        if (memcmp(Name.data()+5, "ype_tag", 7) != 0)
858
          break;
859
        return AttributeCommonInfo::AT_BTFTypeTag;	 // "btf_type_tag"
860
      }
861
      break;
862
    case 'c':	 // 2 strings to match.
863
      if (memcmp(Name.data()+1, "pu_", 3) != 0)
864
        break;
865
      switch (Name[4]) {
866
      default: break;
867
      case 'd':	 // 1 string to match.
868
        if (memcmp(Name.data()+5, "ispatch", 7) != 0)
869
          break;
870
        return AttributeCommonInfo::AT_CPUDispatch;	 // "cpu_dispatch"
871
      case 's':	 // 1 string to match.
872
        if (memcmp(Name.data()+5, "pecific", 7) != 0)
873
          break;
874
        return AttributeCommonInfo::AT_CPUSpecific;	 // "cpu_specific"
875
      }
876
      break;
877
    case 'o':	 // 3 strings to match.
878
      switch (Name[1]) {
879
      default: break;
880
      case 'b':	 // 1 string to match.
881
        if (memcmp(Name.data()+2, "jc_boxable", 10) != 0)
882
          break;
883
        return AttributeCommonInfo::AT_ObjCBoxable;	 // "objc_boxable"
884
      case 'p':	 // 1 string to match.
885
        if (memcmp(Name.data()+2, "encl_local", 10) != 0)
886
          break;
887
        return AttributeCommonInfo::AT_OpenCLLocalAddressSpace;	 // "opencl_local"
888
      case 'v':	 // 1 string to match.
889
        if (memcmp(Name.data()+2, "erloadable", 10) != 0)
890
          break;
891
        return AttributeCommonInfo::AT_Overloadable;	 // "overloadable"
892
      }
893
      break;
894
    case 'p':	 // 1 string to match.
895
      if (memcmp(Name.data()+1, "reserve_all", 11) != 0)
896
        break;
897
      return AttributeCommonInfo::AT_PreserveAll;	 // "preserve_all"
898
    case 's':	 // 1 string to match.
899
      if (memcmp(Name.data()+1, "wift_bridge", 11) != 0)
900
        break;
901
      return AttributeCommonInfo::AT_SwiftBridge;	 // "swift_bridge"
902
    }
903
    break;
904
  case 13:	 // 23 strings to match.
905
    switch (Name[0]) {
906
    default: break;
907
    case 'a':	 // 3 strings to match.
908
      switch (Name[1]) {
909
      default: break;
910
      case 'd':	 // 1 string to match.
911
        if (memcmp(Name.data()+2, "dress_space", 11) != 0)
912
          break;
913
        return AttributeCommonInfo::AT_AddressSpace;	 // "address_space"
914
      case 'l':	 // 1 string to match.
915
        if (memcmp(Name.data()+2, "ways_inline", 11) != 0)
916
          break;
917
        return AttributeCommonInfo::AT_AlwaysInline;	 // "always_inline"
918
      case 'm':	 // 1 string to match.
919
        if (memcmp(Name.data()+2, "dgpu_kernel", 11) != 0)
920
          break;
921
        return AttributeCommonInfo::AT_AMDGPUKernelCall;	 // "amdgpu_kernel"
922
      }
923
      break;
924
    case 'c':	 // 1 string to match.
925
      if (memcmp(Name.data()+1, "allable_when", 12) != 0)
926
        break;
927
      return AttributeCommonInfo::AT_CallableWhen;	 // "callable_when"
928
    case 'i':	 // 2 strings to match.
929
      switch (Name[1]) {
930
      default: break;
931
      case 'm':	 // 1 string to match.
932
        if (memcmp(Name.data()+2, "port_module", 11) != 0)
933
          break;
934
        return AttributeCommonInfo::AT_WebAssemblyImportModule;	 // "import_module"
935
      case 'n':	 // 1 string to match.
936
        if (memcmp(Name.data()+2, "it_priority", 11) != 0)
937
          break;
938
        return AttributeCommonInfo::AT_InitPriority;	 // "init_priority"
939
      }
940
      break;
941
    case 'l':	 // 3 strings to match.
942
      switch (Name[1]) {
943
      default: break;
944
      case 'a':	 // 1 string to match.
945
        if (memcmp(Name.data()+2, "unch_bounds", 11) != 0)
946
          break;
947
        return AttributeCommonInfo::AT_CUDALaunchBounds;	 // "launch_bounds"
948
      case 'i':	 // 1 string to match.
949
        if (memcmp(Name.data()+2, "fetimebound", 11) != 0)
950
          break;
951
        return AttributeCommonInfo::AT_LifetimeBound;	 // "lifetimebound"
952
      case 'o':	 // 1 string to match.
953
        if (memcmp(Name.data()+2, "ck_returned", 11) != 0)
954
          break;
955
        return AttributeCommonInfo::AT_LockReturned;	 // "lock_returned"
956
      }
957
      break;
958
    case 'o':	 // 1 string to match.
959
      if (memcmp(Name.data()+1, "pencl_global", 12) != 0)
960
        break;
961
      return AttributeCommonInfo::AT_OpenCLGlobalAddressSpace;	 // "opencl_global"
962
    case 'p':	 // 2 strings to match.
963
      switch (Name[1]) {
964
      default: break;
965
      case 'r':	 // 1 string to match.
966
        if (memcmp(Name.data()+2, "eserve_most", 11) != 0)
967
          break;
968
        return AttributeCommonInfo::AT_PreserveMost;	 // "preserve_most"
969
      case 't':	 // 1 string to match.
970
        if (memcmp(Name.data()+2, "_guarded_by", 11) != 0)
971
          break;
972
        return AttributeCommonInfo::AT_PtGuardedBy;	 // "pt_guarded_by"
973
      }
974
      break;
975
    case 'r':	 // 2 strings to match.
976
      if (Name[1] != 'e')
977
        break;
978
      switch (Name[2]) {
979
      default: break;
980
      case 'i':	 // 1 string to match.
981
        if (memcmp(Name.data()+3, "nitializes", 10) != 0)
982
          break;
983
        return AttributeCommonInfo::AT_Reinitializes;	 // "reinitializes"
984
      case 't':	 // 1 string to match.
985
        if (memcmp(Name.data()+3, "urns_twice", 10) != 0)
986
          break;
987
        return AttributeCommonInfo::AT_ReturnsTwice;	 // "returns_twice"
988
      }
989
      break;
990
    case 's':	 // 5 strings to match.
991
      switch (Name[1]) {
992
      default: break;
993
      case 'e':	 // 1 string to match.
994
        if (memcmp(Name.data()+2, "t_typestate", 11) != 0)
995
          break;
996
        return AttributeCommonInfo::AT_SetTypestate;	 // "set_typestate"
997
      case 'w':	 // 4 strings to match.
998
        if (memcmp(Name.data()+2, "ift_", 4) != 0)
999
          break;
1000
        switch (Name[6]) {
1001
        default: break;
1002
        case 'c':	 // 1 string to match.
1003
          if (memcmp(Name.data()+7, "ontext", 6) != 0)
1004
            break;
1005
          return AttributeCommonInfo::AT_SwiftContext;	 // "swift_context"
1006
        case 'n':	 // 1 string to match.
1007
          if (memcmp(Name.data()+7, "ewtype", 6) != 0)
1008
            break;
1009
          return AttributeCommonInfo::AT_SwiftNewType;	 // "swift_newtype"
1010
        case 'p':	 // 1 string to match.
1011
          if (memcmp(Name.data()+7, "rivate", 6) != 0)
1012
            break;
1013
          return AttributeCommonInfo::AT_SwiftPrivate;	 // "swift_private"
1014
        case 'w':	 // 1 string to match.
1015
          if (memcmp(Name.data()+7, "rapper", 6) != 0)
1016
            break;
1017
          return AttributeCommonInfo::AT_SwiftNewType;	 // "swift_wrapper"
1018
        }
1019
        break;
1020
      }
1021
      break;
1022
    case 't':	 // 1 string to match.
1023
      if (memcmp(Name.data()+1, "arget_clones", 12) != 0)
1024
        break;
1025
      return AttributeCommonInfo::AT_TargetClones;	 // "target_clones"
1026
    case 'u':	 // 1 string to match.
1027
      if (memcmp(Name.data()+1, "ninitialized", 12) != 0)
1028
        break;
1029
      return AttributeCommonInfo::AT_Uninitialized;	 // "uninitialized"
1030
    case 'v':	 // 1 string to match.
1031
      if (memcmp(Name.data()+1, "ec_type_hint", 12) != 0)
1032
        break;
1033
      return AttributeCommonInfo::AT_VecTypeHint;	 // "vec_type_hint"
1034
    case 'x':	 // 1 string to match.
1035
      if (memcmp(Name.data()+1, "ray_log_args", 12) != 0)
1036
        break;
1037
      return AttributeCommonInfo::AT_XRayLogArgs;	 // "xray_log_args"
1038
    }
1039
    break;
1040
  case 14:	 // 19 strings to match.
1041
    switch (Name[0]) {
1042
    default: break;
1043
    case 'a':	 // 4 strings to match.
1044
      switch (Name[1]) {
1045
      default: break;
1046
      case 'c':	 // 2 strings to match.
1047
        if (memcmp(Name.data()+2, "quire", 5) != 0)
1048
          break;
1049
        switch (Name[7]) {
1050
        default: break;
1051
        case '_':	 // 1 string to match.
1052
          if (memcmp(Name.data()+8, "handle", 6) != 0)
1053
            break;
1054
          return AttributeCommonInfo::AT_AcquireHandle;	 // "acquire_handle"
1055
        case 'd':	 // 1 string to match.
1056
          if (memcmp(Name.data()+8, "_after", 6) != 0)
1057
            break;
1058
          return AttributeCommonInfo::AT_AcquiredAfter;	 // "acquired_after"
1059
        }
1060
        break;
1061
      case 'l':	 // 1 string to match.
1062
        if (memcmp(Name.data()+2, "ways_destroy", 12) != 0)
1063
          break;
1064
        return AttributeCommonInfo::AT_AlwaysDestroy;	 // "always_destroy"
1065
      case 's':	 // 1 string to match.
1066
        if (memcmp(Name.data()+2, "sume_aligned", 12) != 0)
1067
          break;
1068
        return AttributeCommonInfo::AT_AssumeAligned;	 // "assume_aligned"
1069
      }
1070
      break;
1071
    case 'c':	 // 1 string to match.
1072
      if (memcmp(Name.data()+1, "udart_builtin", 13) != 0)
1073
        break;
1074
      return AttributeCommonInfo::IgnoredAttribute;	 // "cudart_builtin"
1075
    case 'd':	 // 1 string to match.
1076
      if (memcmp(Name.data()+1, "evice_builtin", 13) != 0)
1077
        break;
1078
      return AttributeCommonInfo::IgnoredAttribute;	 // "device_builtin"
1079
    case 'i':	 // 1 string to match.
1080
      if (memcmp(Name.data()+1, "ntel_ocl_bicc", 13) != 0)
1081
        break;
1082
      return AttributeCommonInfo::AT_IntelOclBicc;	 // "intel_ocl_bicc"
1083
    case 'l':	 // 1 string to match.
1084
      if (memcmp(Name.data()+1, "ocks_excluded", 13) != 0)
1085
        break;
1086
      return AttributeCommonInfo::AT_LocksExcluded;	 // "locks_excluded"
1087
    case 'n':	 // 1 string to match.
1088
      if (memcmp(Name.data()+1, "o_split_stack", 13) != 0)
1089
        break;
1090
      return AttributeCommonInfo::AT_NoSplitStack;	 // "no_split_stack"
1091
    case 'o':	 // 4 strings to match.
1092
      switch (Name[1]) {
1093
      default: break;
1094
      case 'b':	 // 2 strings to match.
1095
        if (memcmp(Name.data()+2, "jc_", 3) != 0)
1096
          break;
1097
        switch (Name[5]) {
1098
        default: break;
1099
        case 'e':	 // 1 string to match.
1100
          if (memcmp(Name.data()+6, "xception", 8) != 0)
1101
            break;
1102
          return AttributeCommonInfo::AT_ObjCException;	 // "objc_exception"
1103
        case 'o':	 // 1 string to match.
1104
          if (memcmp(Name.data()+6, "wnership", 8) != 0)
1105
            break;
1106
          return AttributeCommonInfo::AT_ObjCOwnership;	 // "objc_ownership"
1107
        }
1108
        break;
1109
      case 'p':	 // 2 strings to match.
1110
        if (memcmp(Name.data()+2, "encl_", 5) != 0)
1111
          break;
1112
        switch (Name[7]) {
1113
        default: break;
1114
        case 'g':	 // 1 string to match.
1115
          if (memcmp(Name.data()+8, "eneric", 6) != 0)
1116
            break;
1117
          return AttributeCommonInfo::AT_OpenCLGenericAddressSpace;	 // "opencl_generic"
1118
        case 'p':	 // 1 string to match.
1119
          if (memcmp(Name.data()+8, "rivate", 6) != 0)
1120
            break;
1121
          return AttributeCommonInfo::AT_OpenCLPrivateAddressSpace;	 // "opencl_private"
1122
        }
1123
        break;
1124
      }
1125
      break;
1126
    case 'p':	 // 2 strings to match.
1127
      switch (Name[1]) {
1128
      default: break;
1129
      case 'r':	 // 1 string to match.
1130
        if (memcmp(Name.data()+2, "eferred_name", 12) != 0)
1131
          break;
1132
        return AttributeCommonInfo::AT_PreferredName;	 // "preferred_name"
1133
      case 't':	 // 1 string to match.
1134
        if (memcmp(Name.data()+2, "_guarded_var", 12) != 0)
1135
          break;
1136
        return AttributeCommonInfo::AT_PtGuardedVar;	 // "pt_guarded_var"
1137
      }
1138
      break;
1139
    case 'r':	 // 1 string to match.
1140
      if (memcmp(Name.data()+1, "elease_handle", 13) != 0)
1141
        break;
1142
      return AttributeCommonInfo::AT_ReleaseHandle;	 // "release_handle"
1143
    case 's':	 // 1 string to match.
1144
      if (memcmp(Name.data()+1, "wiftasynccall", 13) != 0)
1145
        break;
1146
      return AttributeCommonInfo::AT_SwiftAsyncCall;	 // "swiftasynccall"
1147
    case 't':	 // 2 strings to match.
1148
      switch (Name[1]) {
1149
      default: break;
1150
      case 'a':	 // 1 string to match.
1151
        if (memcmp(Name.data()+2, "rget_version", 12) != 0)
1152
          break;
1153
        return AttributeCommonInfo::AT_TargetVersion;	 // "target_version"
1154
      case 'e':	 // 1 string to match.
1155
        if (memcmp(Name.data()+2, "st_typestate", 12) != 0)
1156
          break;
1157
        return AttributeCommonInfo::AT_TestTypestate;	 // "test_typestate"
1158
      }
1159
      break;
1160
    }
1161
    break;
1162
  case 15:	 // 19 strings to match.
1163
    switch (Name[0]) {
1164
    default: break;
1165
    case 'a':	 // 4 strings to match.
1166
      switch (Name[1]) {
1167
      default: break;
1168
      case 'a':	 // 1 string to match.
1169
        if (memcmp(Name.data()+2, "rch64_sve_pcs", 13) != 0)
1170
          break;
1171
        return AttributeCommonInfo::AT_AArch64SVEPcs;	 // "aarch64_sve_pcs"
1172
      case 'c':	 // 1 string to match.
1173
        if (memcmp(Name.data()+2, "quired_before", 13) != 0)
1174
          break;
1175
        return AttributeCommonInfo::AT_AcquiredBefore;	 // "acquired_before"
1176
      case 'm':	 // 2 strings to match.
1177
        if (memcmp(Name.data()+2, "dgpu_num_", 9) != 0)
1178
          break;
1179
        switch (Name[11]) {
1180
        default: break;
1181
        case 's':	 // 1 string to match.
1182
          if (memcmp(Name.data()+12, "gpr", 3) != 0)
1183
            break;
1184
          return AttributeCommonInfo::AT_AMDGPUNumSGPR;	 // "amdgpu_num_sgpr"
1185
        case 'v':	 // 1 string to match.
1186
          if (memcmp(Name.data()+12, "gpr", 3) != 0)
1187
            break;
1188
          return AttributeCommonInfo::AT_AMDGPUNumVGPR;	 // "amdgpu_num_vgpr"
1189
        }
1190
        break;
1191
      }
1192
      break;
1193
    case 'e':	 // 1 string to match.
1194
      if (memcmp(Name.data()+1, "xt_vector_type", 14) != 0)
1195
        break;
1196
      return AttributeCommonInfo::AT_ExtVectorType;	 // "ext_vector_type"
1197
    case 'f':	 // 1 string to match.
1198
      if (memcmp(Name.data()+1, "unction_return", 14) != 0)
1199
        break;
1200
      return AttributeCommonInfo::AT_FunctionReturnThunks;	 // "function_return"
1201
    case 'n':	 // 2 strings to match.
1202
      switch (Name[1]) {
1203
      default: break;
1204
      case 'o':	 // 1 string to match.
1205
        if (memcmp(Name.data()+2, "t_tail_called", 13) != 0)
1206
          break;
1207
        return AttributeCommonInfo::AT_NotTailCalled;	 // "not_tail_called"
1208
      case 's':	 // 1 string to match.
1209
        if (memcmp(Name.data()+2, "_error_domain", 13) != 0)
1210
          break;
1211
        return AttributeCommonInfo::AT_NSErrorDomain;	 // "ns_error_domain"
1212
      }
1213
      break;
1214
    case 'o':	 // 5 strings to match.
1215
      switch (Name[1]) {
1216
      default: break;
1217
      case 'b':	 // 2 strings to match.
1218
        if (memcmp(Name.data()+2, "jc_", 3) != 0)
1219
          break;
1220
        switch (Name[5]) {
1221
        default: break;
1222
        case 'c':	 // 1 string to match.
1223
          if (memcmp(Name.data()+6, "lass_stub", 9) != 0)
1224
            break;
1225
          return AttributeCommonInfo::AT_ObjCClassStub;	 // "objc_class_stub"
1226
        case 'r':	 // 1 string to match.
1227
          if (memcmp(Name.data()+6, "oot_class", 9) != 0)
1228
            break;
1229
          return AttributeCommonInfo::AT_ObjCRootClass;	 // "objc_root_class"
1230
        }
1231
        break;
1232
      case 'p':	 // 1 string to match.
1233
        if (memcmp(Name.data()+2, "encl_constant", 13) != 0)
1234
          break;
1235
        return AttributeCommonInfo::AT_OpenCLConstantAddressSpace;	 // "opencl_constant"
1236
      case 'w':	 // 2 strings to match.
1237
        if (memcmp(Name.data()+2, "nership_", 8) != 0)
1238
          break;
1239
        switch (Name[10]) {
1240
        default: break;
1241
        case 'h':	 // 1 string to match.
1242
          if (memcmp(Name.data()+11, "olds", 4) != 0)
1243
            break;
1244
          return AttributeCommonInfo::AT_Ownership;	 // "ownership_holds"
1245
        case 't':	 // 1 string to match.
1246
          if (memcmp(Name.data()+11, "akes", 4) != 0)
1247
            break;
1248
          return AttributeCommonInfo::AT_Ownership;	 // "ownership_takes"
1249
        }
1250
        break;
1251
      }
1252
      break;
1253
    case 'p':	 // 1 string to match.
1254
      if (memcmp(Name.data()+1, "aram_typestate", 14) != 0)
1255
        break;
1256
      return AttributeCommonInfo::AT_ParamTypestate;	 // "param_typestate"
1257
    case 'r':	 // 1 string to match.
1258
      if (memcmp(Name.data()+1, "eturns_nonnull", 14) != 0)
1259
        break;
1260
      return AttributeCommonInfo::AT_ReturnsNonNull;	 // "returns_nonnull"
1261
    case 's':	 // 1 string to match.
1262
      if (memcmp(Name.data()+1, "coped_lockable", 14) != 0)
1263
        break;
1264
      return AttributeCommonInfo::AT_ScopedLockable;	 // "scoped_lockable"
1265
    case 't':	 // 1 string to match.
1266
      if (memcmp(Name.data()+1, "ype_visibility", 14) != 0)
1267
        break;
1268
      return AttributeCommonInfo::AT_TypeVisibility;	 // "type_visibility"
1269
    case 'u':	 // 2 strings to match.
1270
      switch (Name[1]) {
1271
      default: break;
1272
      case 'n':	 // 1 string to match.
1273
        if (memcmp(Name.data()+2, "lock_function", 13) != 0)
1274
          break;
1275
        return AttributeCommonInfo::AT_ReleaseCapability;	 // "unlock_function"
1276
      case 's':	 // 1 string to match.
1277
        if (memcmp(Name.data()+2, "ing_if_exists", 13) != 0)
1278
          break;
1279
        return AttributeCommonInfo::AT_UsingIfExists;	 // "using_if_exists"
1280
      }
1281
      break;
1282
    }
1283
    break;
1284
  case 16:	 // 11 strings to match.
1285
    switch (Name[0]) {
1286
    default: break;
1287
    case 'e':	 // 1 string to match.
1288
      if (memcmp(Name.data()+1, "nforce_tcb_leaf", 15) != 0)
1289
        break;
1290
      return AttributeCommonInfo::AT_EnforceTCBLeaf;	 // "enforce_tcb_leaf"
1291
    case 'i':	 // 1 string to match.
1292
      if (memcmp(Name.data()+1, "nternal_linkage", 15) != 0)
1293
        break;
1294
      return AttributeCommonInfo::AT_InternalLinkage;	 // "internal_linkage"
1295
    case 'm':	 // 1 string to match.
1296
      if (memcmp(Name.data()+1, "in_vector_width", 15) != 0)
1297
        break;
1298
      return AttributeCommonInfo::AT_MinVectorWidth;	 // "min_vector_width"
1299
    case 'n':	 // 2 strings to match.
1300
      switch (Name[1]) {
1301
      default: break;
1302
      case 'e':	 // 1 string to match.
1303
        if (memcmp(Name.data()+2, "on_vector_type", 14) != 0)
1304
          break;
1305
        return AttributeCommonInfo::AT_NeonVectorType;	 // "neon_vector_type"
1306
      case 's':	 // 1 string to match.
1307
        if (memcmp(Name.data()+2, "_consumes_self", 14) != 0)
1308
          break;
1309
        return AttributeCommonInfo::AT_NSConsumesSelf;	 // "ns_consumes_self"
1310
      }
1311
      break;
1312
    case 'o':	 // 1 string to match.
1313
      if (memcmp(Name.data()+1, "s_consumes_this", 15) != 0)
1314
        break;
1315
      return AttributeCommonInfo::AT_OSConsumesThis;	 // "os_consumes_this"
1316
    case 'p':	 // 1 string to match.
1317
      if (memcmp(Name.data()+1, "ass_object_size", 15) != 0)
1318
        break;
1319
      return AttributeCommonInfo::AT_PassObjectSize;	 // "pass_object_size"
1320
    case 'r':	 // 2 strings to match.
1321
      switch (Name[1]) {
1322
      default: break;
1323
      case 'a':	 // 1 string to match.
1324
        if (memcmp(Name.data()+2, "ndomize_layout", 14) != 0)
1325
          break;
1326
        return AttributeCommonInfo::AT_RandomizeLayout;	 // "randomize_layout"
1327
      case 'e':	 // 1 string to match.
1328
        if (memcmp(Name.data()+2, "turn_typestate", 14) != 0)
1329
          break;
1330
        return AttributeCommonInfo::AT_ReturnTypestate;	 // "return_typestate"
1331
      }
1332
      break;
1333
    case 's':	 // 2 strings to match.
1334
      switch (Name[1]) {
1335
      default: break;
1336
      case 't':	 // 1 string to match.
1337
        if (memcmp(Name.data()+2, "andalone_debug", 14) != 0)
1338
          break;
1339
        return AttributeCommonInfo::AT_StandaloneDebug;	 // "standalone_debug"
1340
      case 'w':	 // 1 string to match.
1341
        if (memcmp(Name.data()+2, "ift_async_name", 14) != 0)
1342
          break;
1343
        return AttributeCommonInfo::AT_SwiftAsyncName;	 // "swift_async_name"
1344
      }
1345
      break;
1346
    }
1347
    break;
1348
  case 17:	 // 7 strings to match.
1349
    switch (Name[0]) {
1350
    default: break;
1351
    case 'a':	 // 2 strings to match.
1352
      switch (Name[1]) {
1353
      default: break;
1354
      case 'n':	 // 1 string to match.
1355
        if (memcmp(Name.data()+2, "alyzer_noreturn", 15) != 0)
1356
          break;
1357
        return AttributeCommonInfo::AT_AnalyzerNoReturn;	 // "analyzer_noreturn"
1358
      case 's':	 // 1 string to match.
1359
        if (memcmp(Name.data()+2, "sert_capability", 15) != 0)
1360
          break;
1361
        return AttributeCommonInfo::AT_AssertCapability;	 // "assert_capability"
1362
      }
1363
      break;
1364
    case 'o':	 // 2 strings to match.
1365
      switch (Name[1]) {
1366
      default: break;
1367
      case 'b':	 // 1 string to match.
1368
        if (memcmp(Name.data()+2, "jc_runtime_name", 15) != 0)
1369
          break;
1370
        return AttributeCommonInfo::AT_ObjCRuntimeName;	 // "objc_runtime_name"
1371
      case 'w':	 // 1 string to match.
1372
        if (memcmp(Name.data()+2, "nership_returns", 15) != 0)
1373
          break;
1374
        return AttributeCommonInfo::AT_Ownership;	 // "ownership_returns"
1375
      }
1376
      break;
1377
    case 's':	 // 2 strings to match.
1378
      switch (Name[1]) {
1379
      default: break;
1380
      case 'h':	 // 1 string to match.
1381
        if (memcmp(Name.data()+2, "ared_capability", 15) != 0)
1382
          break;
1383
        return AttributeCommonInfo::AT_Capability;	 // "shared_capability"
1384
      case 'w':	 // 1 string to match.
1385
        if (memcmp(Name.data()+2, "ift_async_error", 15) != 0)
1386
          break;
1387
        return AttributeCommonInfo::AT_SwiftAsyncError;	 // "swift_async_error"
1388
      }
1389
      break;
1390
    case 't':	 // 1 string to match.
1391
      if (memcmp(Name.data()+1, "ransparent_union", 16) != 0)
1392
        break;
1393
      return AttributeCommonInfo::AT_TransparentUnion;	 // "transparent_union"
1394
    }
1395
    break;
1396
  case 18:	 // 20 strings to match.
1397
    switch (Name[0]) {
1398
    default: break;
1399
    case 'a':	 // 3 strings to match.
1400
      switch (Name[1]) {
1401
      default: break;
1402
      case 'a':	 // 1 string to match.
1403
        if (memcmp(Name.data()+2, "rch64_vector_pcs", 16) != 0)
1404
          break;
1405
        return AttributeCommonInfo::AT_AArch64VectorPcs;	 // "aarch64_vector_pcs"
1406
      case 'c':	 // 1 string to match.
1407
        if (memcmp(Name.data()+2, "quire_capability", 16) != 0)
1408
          break;
1409
        return AttributeCommonInfo::AT_AcquireCapability;	 // "acquire_capability"
1410
      case 's':	 // 1 string to match.
1411
        if (memcmp(Name.data()+2, "sert_shared_lock", 16) != 0)
1412
          break;
1413
        return AttributeCommonInfo::AT_AssertSharedLock;	 // "assert_shared_lock"
1414
      }
1415
      break;
1416
    case 'c':	 // 1 string to match.
1417
      if (memcmp(Name.data()+1, "arries_dependency", 17) != 0)
1418
        break;
1419
      return AttributeCommonInfo::AT_CarriesDependency;	 // "carries_dependency"
1420
    case 'd':	 // 1 string to match.
1421
      if (memcmp(Name.data()+1, "isable_tail_calls", 17) != 0)
1422
        break;
1423
      return AttributeCommonInfo::AT_DisableTailCalls;	 // "disable_tail_calls"
1424
    case 'e':	 // 1 string to match.
1425
      if (memcmp(Name.data()+1, "num_extensibility", 17) != 0)
1426
        break;
1427
      return AttributeCommonInfo::AT_EnumExtensibility;	 // "enum_extensibility"
1428
    case 'i':	 // 1 string to match.
1429
      if (memcmp(Name.data()+1, "boutletcollection", 17) != 0)
1430
        break;
1431
      return AttributeCommonInfo::AT_IBOutletCollection;	 // "iboutletcollection"
1432
    case 'm':	 // 1 string to match.
1433
      if (memcmp(Name.data()+1, "ig_server_routine", 17) != 0)
1434
        break;
1435
      return AttributeCommonInfo::AT_MIGServerRoutine;	 // "mig_server_routine"
1436
    case 'n':	 // 3 strings to match.
1437
      if (memcmp(Name.data()+1, "o_s", 3) != 0)
1438
        break;
1439
      switch (Name[4]) {
1440
      default: break;
1441
      case 'a':	 // 2 strings to match.
1442
        if (memcmp(Name.data()+5, "nitize_", 7) != 0)
1443
          break;
1444
        switch (Name[12]) {
1445
        default: break;
1446
        case 'm':	 // 1 string to match.
1447
          if (memcmp(Name.data()+13, "emory", 5) != 0)
1448
            break;
1449
          return AttributeCommonInfo::AT_NoSanitizeSpecific;	 // "no_sanitize_memory"
1450
        case 't':	 // 1 string to match.
1451
          if (memcmp(Name.data()+13, "hread", 5) != 0)
1452
            break;
1453
          return AttributeCommonInfo::AT_NoSanitizeSpecific;	 // "no_sanitize_thread"
1454
        }
1455
        break;
1456
      case 't':	 // 1 string to match.
1457
        if (memcmp(Name.data()+5, "ack_protector", 13) != 0)
1458
          break;
1459
        return AttributeCommonInfo::AT_NoStackProtector;	 // "no_stack_protector"
1460
      }
1461
      break;
1462
    case 'o':	 // 4 strings to match.
1463
      switch (Name[1]) {
1464
      default: break;
1465
      case 'b':	 // 2 strings to match.
1466
        if (memcmp(Name.data()+2, "jc_", 3) != 0)
1467
          break;
1468
        switch (Name[5]) {
1469
        default: break;
1470
        case 'm':	 // 1 string to match.
1471
          if (memcmp(Name.data()+6, "ethod_family", 12) != 0)
1472
            break;
1473
          return AttributeCommonInfo::AT_ObjCMethodFamily;	 // "objc_method_family"
1474
        case 'n':	 // 1 string to match.
1475
          if (memcmp(Name.data()+6, "onlazy_class", 12) != 0)
1476
            break;
1477
          return AttributeCommonInfo::AT_ObjCNonLazyClass;	 // "objc_nonlazy_class"
1478
        }
1479
        break;
1480
      case 'p':	 // 2 strings to match.
1481
        if (memcmp(Name.data()+2, "encl_", 5) != 0)
1482
          break;
1483
        switch (Name[7]) {
1484
        default: break;
1485
        case 'g':	 // 1 string to match.
1486
          if (memcmp(Name.data()+8, "lobal_host", 10) != 0)
1487
            break;
1488
          return AttributeCommonInfo::AT_OpenCLGlobalHostAddressSpace;	 // "opencl_global_host"
1489
        case 'u':	 // 1 string to match.
1490
          if (memcmp(Name.data()+8, "nroll_hint", 10) != 0)
1491
            break;
1492
          return AttributeCommonInfo::AT_OpenCLUnrollHint;	 // "opencl_unroll_hint"
1493
        }
1494
        break;
1495
      }
1496
      break;
1497
    case 'r':	 // 1 string to match.
1498
      if (memcmp(Name.data()+1, "elease_capability", 17) != 0)
1499
        break;
1500
      return AttributeCommonInfo::AT_ReleaseCapability;	 // "release_capability"
1501
    case 's':	 // 3 strings to match.
1502
      switch (Name[1]) {
1503
      default: break;
1504
      case 'w':	 // 2 strings to match.
1505
        if (memcmp(Name.data()+2, "ift_", 4) != 0)
1506
          break;
1507
        switch (Name[6]) {
1508
        default: break;
1509
        case 'e':	 // 1 string to match.
1510
          if (memcmp(Name.data()+7, "rror_result", 11) != 0)
1511
            break;
1512
          return AttributeCommonInfo::AT_SwiftErrorResult;	 // "swift_error_result"
1513
        case 'o':	 // 1 string to match.
1514
          if (memcmp(Name.data()+7, "bjc_members", 11) != 0)
1515
            break;
1516
          return AttributeCommonInfo::AT_SwiftObjCMembers;	 // "swift_objc_members"
1517
        }
1518
        break;
1519
      case 'y':	 // 1 string to match.
1520
        if (memcmp(Name.data()+2, "cl_special_class", 16) != 0)
1521
          break;
1522
        return AttributeCommonInfo::AT_SYCLSpecialClass;	 // "sycl_special_class"
1523
      }
1524
      break;
1525
    case 'w':	 // 1 string to match.
1526
      if (memcmp(Name.data()+1, "arn_unused_result", 17) != 0)
1527
        break;
1528
      return AttributeCommonInfo::AT_WarnUnusedResult;	 // "warn_unused_result"
1529
    }
1530
    break;
1531
  case 19:	 // 19 strings to match.
1532
    switch (Name[0]) {
1533
    default: break;
1534
    case 'a':	 // 2 strings to match.
1535
      switch (Name[1]) {
1536
      default: break;
1537
      case 'm':	 // 1 string to match.
1538
        if (memcmp(Name.data()+2, "dgpu_waves_per_eu", 17) != 0)
1539
          break;
1540
        return AttributeCommonInfo::AT_AMDGPUWavesPerEU;	 // "amdgpu_waves_per_eu"
1541
      case 'r':	 // 1 string to match.
1542
        if (memcmp(Name.data()+2, "m_sve_vector_bits", 17) != 0)
1543
          break;
1544
        return AttributeCommonInfo::AT_ArmSveVectorBits;	 // "arm_sve_vector_bits"
1545
      }
1546
      break;
1547
    case 'c':	 // 5 strings to match.
1548
      switch (Name[1]) {
1549
      default: break;
1550
      case 'f':	 // 3 strings to match.
1551
        if (Name[2] != '_')
1552
          break;
1553
        switch (Name[3]) {
1554
        default: break;
1555
        case 'a':	 // 1 string to match.
1556
          if (memcmp(Name.data()+4, "udited_transfer", 15) != 0)
1557
            break;
1558
          return AttributeCommonInfo::AT_CFAuditedTransfer;	 // "cf_audited_transfer"
1559
        case 'r':	 // 1 string to match.
1560
          if (memcmp(Name.data()+4, "eturns_retained", 15) != 0)
1561
            break;
1562
          return AttributeCommonInfo::AT_CFReturnsRetained;	 // "cf_returns_retained"
1563
        case 'u':	 // 1 string to match.
1564
          if (memcmp(Name.data()+4, "nknown_transfer", 15) != 0)
1565
            break;
1566
          return AttributeCommonInfo::AT_CFUnknownTransfer;	 // "cf_unknown_transfer"
1567
        }
1568
        break;
1569
      case 'l':	 // 1 string to match.
1570
        if (memcmp(Name.data()+2, "ang_builtin_alias", 17) != 0)
1571
          break;
1572
        return AttributeCommonInfo::AT_BuiltinAlias;	 // "clang_builtin_alias"
1573
      case 'm':	 // 1 string to match.
1574
        if (memcmp(Name.data()+2, "se_nonsecure_call", 17) != 0)
1575
          break;
1576
        return AttributeCommonInfo::AT_CmseNSCall;	 // "cmse_nonsecure_call"
1577
      }
1578
      break;
1579
    case 'd':	 // 1 string to match.
1580
      if (memcmp(Name.data()+1, "iagnose_as_builtin", 18) != 0)
1581
        break;
1582
      return AttributeCommonInfo::AT_DiagnoseAsBuiltin;	 // "diagnose_as_builtin"
1583
    case 'n':	 // 3 strings to match.
1584
      switch (Name[1]) {
1585
      default: break;
1586
      case 'o':	 // 2 strings to match.
1587
        if (Name[2] != '_')
1588
          break;
1589
        switch (Name[3]) {
1590
        default: break;
1591
        case 'r':	 // 1 string to match.
1592
          if (memcmp(Name.data()+4, "andomize_layout", 15) != 0)
1593
            break;
1594
          return AttributeCommonInfo::AT_NoRandomizeLayout;	 // "no_randomize_layout"
1595
        case 's':	 // 1 string to match.
1596
          if (memcmp(Name.data()+4, "anitize_address", 15) != 0)
1597
            break;
1598
          return AttributeCommonInfo::AT_NoSanitizeSpecific;	 // "no_sanitize_address"
1599
        }
1600
        break;
1601
      case 's':	 // 1 string to match.
1602
        if (memcmp(Name.data()+2, "_returns_retained", 17) != 0)
1603
          break;
1604
        return AttributeCommonInfo::AT_NSReturnsRetained;	 // "ns_returns_retained"
1605
      }
1606
      break;
1607
    case 'o':	 // 5 strings to match.
1608
      switch (Name[1]) {
1609
      default: break;
1610
      case 'b':	 // 4 strings to match.
1611
        if (memcmp(Name.data()+2, "jc_", 3) != 0)
1612
          break;
1613
        switch (Name[5]) {
1614
        default: break;
1615
        case 'b':	 // 2 strings to match.
1616
          if (memcmp(Name.data()+6, "ridge_", 6) != 0)
1617
            break;
1618
          switch (Name[12]) {
1619
          default: break;
1620
          case 'm':	 // 1 string to match.
1621
            if (memcmp(Name.data()+13, "utable", 6) != 0)
1622
              break;
1623
            return AttributeCommonInfo::AT_ObjCBridgeMutable;	 // "objc_bridge_mutable"
1624
          case 'r':	 // 1 string to match.
1625
            if (memcmp(Name.data()+13, "elated", 6) != 0)
1626
              break;
1627
            return AttributeCommonInfo::AT_ObjCBridgeRelated;	 // "objc_bridge_related"
1628
          }
1629
          break;
1630
        case 'd':	 // 1 string to match.
1631
          if (memcmp(Name.data()+6, "irect_members", 13) != 0)
1632
            break;
1633
          return AttributeCommonInfo::AT_ObjCDirectMembers;	 // "objc_direct_members"
1634
        case 'r':	 // 1 string to match.
1635
          if (memcmp(Name.data()+6, "equires_super", 13) != 0)
1636
            break;
1637
          return AttributeCommonInfo::AT_ObjCRequiresSuper;	 // "objc_requires_super"
1638
        }
1639
        break;
1640
      case 's':	 // 1 string to match.
1641
        if (memcmp(Name.data()+2, "_returns_retained", 17) != 0)
1642
          break;
1643
        return AttributeCommonInfo::AT_OSReturnsRetained;	 // "os_returns_retained"
1644
      }
1645
      break;
1646
    case 'r':	 // 1 string to match.
1647
      if (memcmp(Name.data()+1, "equires_capability", 18) != 0)
1648
        break;
1649
      return AttributeCommonInfo::AT_RequiresCapability;	 // "requires_capability"
1650
    case 's':	 // 1 string to match.
1651
      if (memcmp(Name.data()+1, "wift_async_context", 18) != 0)
1652
        break;
1653
      return AttributeCommonInfo::AT_SwiftAsyncContext;	 // "swift_async_context"
1654
    case 'z':	 // 1 string to match.
1655
      if (memcmp(Name.data()+1, "ero_call_used_regs", 18) != 0)
1656
        break;
1657
      return AttributeCommonInfo::AT_ZeroCallUsedRegs;	 // "zero_call_used_regs"
1658
    }
1659
    break;
1660
  case 20:	 // 8 strings to match.
1661
    switch (Name[0]) {
1662
    default: break;
1663
    case 'c':	 // 1 string to match.
1664
      if (memcmp(Name.data()+1, "mse_nonsecure_entry", 19) != 0)
1665
        break;
1666
      return AttributeCommonInfo::AT_CmseNSEntry;	 // "cmse_nonsecure_entry"
1667
    case 'l':	 // 1 string to match.
1668
      if (memcmp(Name.data()+1, "oader_uninitialized", 19) != 0)
1669
        break;
1670
      return AttributeCommonInfo::AT_LoaderUninitialized;	 // "loader_uninitialized"
1671
    case 'n':	 // 1 string to match.
1672
      if (memcmp(Name.data()+1, "eon_polyvector_type", 19) != 0)
1673
        break;
1674
      return AttributeCommonInfo::AT_NeonPolyVectorType;	 // "neon_polyvector_type"
1675
    case 'o':	 // 2 strings to match.
1676
      switch (Name[1]) {
1677
      default: break;
1678
      case 'b':	 // 1 string to match.
1679
        if (memcmp(Name.data()+2, "jc_runtime_visible", 18) != 0)
1680
          break;
1681
        return AttributeCommonInfo::AT_ObjCRuntimeVisible;	 // "objc_runtime_visible"
1682
      case 'p':	 // 1 string to match.
1683
        if (memcmp(Name.data()+2, "encl_global_device", 18) != 0)
1684
          break;
1685
        return AttributeCommonInfo::AT_OpenCLGlobalDeviceAddressSpace;	 // "opencl_global_device"
1686
      }
1687
      break;
1688
    case 'r':	 // 1 string to match.
1689
      if (memcmp(Name.data()+1, "eqd_work_group_size", 19) != 0)
1690
        break;
1691
      return AttributeCommonInfo::AT_ReqdWorkGroupSize;	 // "reqd_work_group_size"
1692
    case 's':	 // 1 string to match.
1693
      if (memcmp(Name.data()+1, "hared_lock_function", 19) != 0)
1694
        break;
1695
      return AttributeCommonInfo::AT_AcquireCapability;	 // "shared_lock_function"
1696
    case 'w':	 // 1 string to match.
1697
      if (memcmp(Name.data()+1, "ork_group_size_hint", 19) != 0)
1698
        break;
1699
      return AttributeCommonInfo::AT_WorkGroupSizeHint;	 // "work_group_size_hint"
1700
    }
1701
    break;
1702
  case 21:	 // 10 strings to match.
1703
    switch (Name[0]) {
1704
    default: break;
1705
    case 'a':	 // 1 string to match.
1706
      if (memcmp(Name.data()+1, "ssert_exclusive_lock", 20) != 0)
1707
        break;
1708
      return AttributeCommonInfo::AT_AssertExclusiveLock;	 // "assert_exclusive_lock"
1709
    case 'l':	 // 1 string to match.
1710
      if (memcmp(Name.data()+1, "to_visibility_public", 20) != 0)
1711
        break;
1712
      return AttributeCommonInfo::AT_LTOVisibilityPublic;	 // "lto_visibility_public"
1713
    case 'o':	 // 1 string to match.
1714
      if (memcmp(Name.data()+1, "bjc_precise_lifetime", 20) != 0)
1715
        break;
1716
      return AttributeCommonInfo::AT_ObjCPreciseLifetime;	 // "objc_precise_lifetime"
1717
    case 'p':	 // 2 strings to match.
1718
      switch (Name[1]) {
1719
      default: break;
1720
      case 'o':	 // 1 string to match.
1721
        if (memcmp(Name.data()+2, "inter_with_type_tag", 19) != 0)
1722
          break;
1723
        return AttributeCommonInfo::AT_ArgumentWithTypeTag;	 // "pointer_with_type_tag"
1724
      case 'r':	 // 1 string to match.
1725
        if (memcmp(Name.data()+2, "eserve_access_index", 19) != 0)
1726
          break;
1727
        return AttributeCommonInfo::AT_BPFPreserveAccessIndex;	 // "preserve_access_index"
1728
      }
1729
      break;
1730
    case 's':	 // 3 strings to match.
1731
      switch (Name[1]) {
1732
      default: break;
1733
      case 'h':	 // 1 string to match.
1734
        if (memcmp(Name.data()+2, "ared_locks_required", 19) != 0)
1735
          break;
1736
        return AttributeCommonInfo::AT_RequiresCapability;	 // "shared_locks_required"
1737
      case 'w':	 // 2 strings to match.
1738
        if (memcmp(Name.data()+2, "ift_", 4) != 0)
1739
          break;
1740
        switch (Name[6]) {
1741
        default: break;
1742
        case 'b':	 // 1 string to match.
1743
          if (memcmp(Name.data()+7, "ridged_typedef", 14) != 0)
1744
            break;
1745
          return AttributeCommonInfo::AT_SwiftBridgedTypedef;	 // "swift_bridged_typedef"
1746
        case 'i':	 // 1 string to match.
1747
          if (memcmp(Name.data()+7, "ndirect_result", 14) != 0)
1748
            break;
1749
          return AttributeCommonInfo::AT_SwiftIndirectResult;	 // "swift_indirect_result"
1750
        }
1751
        break;
1752
      }
1753
      break;
1754
    case 't':	 // 1 string to match.
1755
      if (memcmp(Name.data()+1, "ype_tag_for_datatype", 20) != 0)
1756
        break;
1757
      return AttributeCommonInfo::AT_TypeTagForDatatype;	 // "type_tag_for_datatype"
1758
    case 'x':	 // 1 string to match.
1759
      if (memcmp(Name.data()+1, "ray_never_instrument", 20) != 0)
1760
        break;
1761
      return AttributeCommonInfo::AT_XRayInstrument;	 // "xray_never_instrument"
1762
    }
1763
    break;
1764
  case 22:	 // 6 strings to match.
1765
    switch (Name[0]) {
1766
    default: break;
1767
    case 'a':	 // 1 string to match.
1768
      if (memcmp(Name.data()+1, "rgument_with_type_tag", 21) != 0)
1769
        break;
1770
      return AttributeCommonInfo::AT_ArgumentWithTypeTag;	 // "argument_with_type_tag"
1771
    case 'e':	 // 1 string to match.
1772
      if (memcmp(Name.data()+1, "xternal_source_symbol", 21) != 0)
1773
        break;
1774
      return AttributeCommonInfo::AT_ExternalSourceSymbol;	 // "external_source_symbol"
1775
    case 'n':	 // 1 string to match.
1776
      if (memcmp(Name.data()+1, "o_instrument_function", 21) != 0)
1777
        break;
1778
      return AttributeCommonInfo::AT_NoInstrumentFunction;	 // "no_instrument_function"
1779
    case 'o':	 // 1 string to match.
1780
      if (memcmp(Name.data()+1, "bjc_independent_class", 21) != 0)
1781
        break;
1782
      return AttributeCommonInfo::AT_ObjCIndependentClass;	 // "objc_independent_class"
1783
    case 't':	 // 1 string to match.
1784
      if (memcmp(Name.data()+1, "ry_acquire_capability", 21) != 0)
1785
        break;
1786
      return AttributeCommonInfo::AT_TryAcquireCapability;	 // "try_acquire_capability"
1787
    case 'x':	 // 1 string to match.
1788
      if (memcmp(Name.data()+1, "ray_always_instrument", 21) != 0)
1789
        break;
1790
      return AttributeCommonInfo::AT_XRayInstrument;	 // "xray_always_instrument"
1791
    }
1792
    break;
1793
  case 23:	 // 7 strings to match.
1794
    switch (Name[0]) {
1795
    default: break;
1796
    case 'c':	 // 1 string to match.
1797
      if (memcmp(Name.data()+1, "f_returns_not_retained", 22) != 0)
1798
        break;
1799
      return AttributeCommonInfo::AT_CFReturnsNotRetained;	 // "cf_returns_not_retained"
1800
    case 'e':	 // 1 string to match.
1801
      if (memcmp(Name.data()+1, "xclusive_lock_function", 22) != 0)
1802
        break;
1803
      return AttributeCommonInfo::AT_AcquireCapability;	 // "exclusive_lock_function"
1804
    case 'f':	 // 1 string to match.
1805
      if (memcmp(Name.data()+1, "orce_align_arg_pointer", 22) != 0)
1806
        break;
1807
      return AttributeCommonInfo::AT_X86ForceAlignArgPointer;	 // "force_align_arg_pointer"
1808
    case 'n':	 // 2 strings to match.
1809
      if (memcmp(Name.data()+1, "s_returns_", 10) != 0)
1810
        break;
1811
      switch (Name[11]) {
1812
      default: break;
1813
      case 'a':	 // 1 string to match.
1814
        if (memcmp(Name.data()+12, "utoreleased", 11) != 0)
1815
          break;
1816
        return AttributeCommonInfo::AT_NSReturnsAutoreleased;	 // "ns_returns_autoreleased"
1817
      case 'n':	 // 1 string to match.
1818
        if (memcmp(Name.data()+12, "ot_retained", 11) != 0)
1819
          break;
1820
        return AttributeCommonInfo::AT_NSReturnsNotRetained;	 // "ns_returns_not_retained"
1821
      }
1822
      break;
1823
    case 'o':	 // 1 string to match.
1824
      if (memcmp(Name.data()+1, "s_returns_not_retained", 22) != 0)
1825
        break;
1826
      return AttributeCommonInfo::AT_OSReturnsNotRetained;	 // "os_returns_not_retained"
1827
    case 's':	 // 1 string to match.
1828
      if (memcmp(Name.data()+1, "hared_trylock_function", 22) != 0)
1829
        break;
1830
      return AttributeCommonInfo::AT_SharedTrylockFunction;	 // "shared_trylock_function"
1831
    }
1832
    break;
1833
  case 24:	 // 6 strings to match.
1834
    switch (Name[0]) {
1835
    default: break;
1836
    case 'a':	 // 1 string to match.
1837
      if (memcmp(Name.data()+1, "ssert_shared_capability", 23) != 0)
1838
        break;
1839
      return AttributeCommonInfo::AT_AssertCapability;	 // "assert_shared_capability"
1840
    case 'c':	 // 1 string to match.
1841
      if (memcmp(Name.data()+1, "fi_canonical_jump_table", 23) != 0)
1842
        break;
1843
      return AttributeCommonInfo::AT_CFICanonicalJumpTable;	 // "cfi_canonical_jump_table"
1844
    case 'e':	 // 1 string to match.
1845
      if (memcmp(Name.data()+1, "xclusive_locks_required", 23) != 0)
1846
        break;
1847
      return AttributeCommonInfo::AT_RequiresCapability;	 // "exclusive_locks_required"
1848
    case 'o':	 // 1 string to match.
1849
      if (memcmp(Name.data()+1, "bjc_externally_retained", 23) != 0)
1850
        break;
1851
      return AttributeCommonInfo::AT_ObjCExternallyRetained;	 // "objc_externally_retained"
1852
    case 'p':	 // 2 strings to match.
1853
      if (Name[1] != 'a')
1854
        break;
1855
      switch (Name[2]) {
1856
      default: break;
1857
      case 's':	 // 1 string to match.
1858
        if (memcmp(Name.data()+3, "s_dynamic_object_size", 21) != 0)
1859
          break;
1860
        return AttributeCommonInfo::AT_PassObjectSize;	 // "pass_dynamic_object_size"
1861
      case 't':	 // 1 string to match.
1862
        if (memcmp(Name.data()+3, "chable_function_entry", 21) != 0)
1863
          break;
1864
        return AttributeCommonInfo::AT_PatchableFunctionEntry;	 // "patchable_function_entry"
1865
      }
1866
      break;
1867
    }
1868
    break;
1869
  case 25:	 // 7 strings to match.
1870
    switch (Name[0]) {
1871
    default: break;
1872
    case '_':	 // 1 string to match.
1873
      if (memcmp(Name.data()+1, "_clang_arm_builtin_alias", 24) != 0)
1874
        break;
1875
      return AttributeCommonInfo::AT_ArmBuiltinAlias;	 // "__clang_arm_builtin_alias"
1876
    case 'a':	 // 1 string to match.
1877
      if (memcmp(Name.data()+1, "cquire_shared_capability", 24) != 0)
1878
        break;
1879
      return AttributeCommonInfo::AT_AcquireCapability;	 // "acquire_shared_capability"
1880
    case 'i':	 // 1 string to match.
1881
      if (memcmp(Name.data()+1, "ntel_reqd_sub_group_size", 24) != 0)
1882
        break;
1883
      return AttributeCommonInfo::AT_OpenCLIntelReqdSubGroupSize;	 // "intel_reqd_sub_group_size"
1884
    case 'n':	 // 2 strings to match.
1885
      if (memcmp(Name.data()+1, "o_", 2) != 0)
1886
        break;
1887
      switch (Name[3]) {
1888
      default: break;
1889
      case 'c':	 // 1 string to match.
1890
        if (memcmp(Name.data()+4, "aller_saved_registers", 21) != 0)
1891
          break;
1892
        return AttributeCommonInfo::AT_AnyX86NoCallerSavedRegisters;	 // "no_caller_saved_registers"
1893
      case 't':	 // 1 string to match.
1894
        if (memcmp(Name.data()+4, "hread_safety_analysis", 21) != 0)
1895
          break;
1896
        return AttributeCommonInfo::AT_NoThreadSafetyAnalysis;	 // "no_thread_safety_analysis"
1897
      }
1898
      break;
1899
    case 'o':	 // 1 string to match.
1900
      if (memcmp(Name.data()+1, "bjc_non_runtime_protocol", 24) != 0)
1901
        break;
1902
      return AttributeCommonInfo::AT_ObjCNonRuntimeProtocol;	 // "objc_non_runtime_protocol"
1903
    case 'r':	 // 1 string to match.
1904
      if (memcmp(Name.data()+1, "elease_shared_capability", 24) != 0)
1905
        break;
1906
      return AttributeCommonInfo::AT_ReleaseCapability;	 // "release_shared_capability"
1907
    }
1908
    break;
1909
  case 26:	 // 7 strings to match.
1910
    switch (Name[0]) {
1911
    default: break;
1912
    case 'c':	 // 1 string to match.
1913
      if (memcmp(Name.data()+1, "onsumable_auto_cast_state", 25) != 0)
1914
        break;
1915
      return AttributeCommonInfo::AT_ConsumableAutoCast;	 // "consumable_auto_cast_state"
1916
    case 'e':	 // 1 string to match.
1917
      if (memcmp(Name.data()+1, "xclusive_trylock_function", 25) != 0)
1918
        break;
1919
      return AttributeCommonInfo::AT_ExclusiveTrylockFunction;	 // "exclusive_trylock_function"
1920
    case 'n':	 // 1 string to match.
1921
      if (memcmp(Name.data()+1, "o_address_safety_analysis", 25) != 0)
1922
        break;
1923
      return AttributeCommonInfo::AT_NoSanitizeSpecific;	 // "no_address_safety_analysis"
1924
    case 'o':	 // 1 string to match.
1925
      if (memcmp(Name.data()+1, "bjc_returns_inner_pointer", 25) != 0)
1926
        break;
1927
      return AttributeCommonInfo::AT_ObjCReturnsInnerPointer;	 // "objc_returns_inner_pointer"
1928
    case 'r':	 // 2 strings to match.
1929
      if (Name[1] != 'e')
1930
        break;
1931
      switch (Name[2]) {
1932
      default: break;
1933
      case 'l':	 // 1 string to match.
1934
        if (memcmp(Name.data()+3, "ease_generic_capability", 23) != 0)
1935
          break;
1936
        return AttributeCommonInfo::AT_ReleaseCapability;	 // "release_generic_capability"
1937
      case 'q':	 // 1 string to match.
1938
        if (memcmp(Name.data()+3, "uires_shared_capability", 23) != 0)
1939
          break;
1940
        return AttributeCommonInfo::AT_RequiresCapability;	 // "requires_shared_capability"
1941
      }
1942
      break;
1943
    case 's':	 // 1 string to match.
1944
      if (memcmp(Name.data()+1, "peculative_load_hardening", 25) != 0)
1945
        break;
1946
      return AttributeCommonInfo::AT_SpeculativeLoadHardening;	 // "speculative_load_hardening"
1947
    }
1948
    break;
1949
  case 27:	 // 7 strings to match.
1950
    switch (Name[0]) {
1951
    default: break;
1952
    case 'a':	 // 1 string to match.
1953
      if (memcmp(Name.data()+1, "mdgpu_flat_work_group_size", 26) != 0)
1954
        break;
1955
      return AttributeCommonInfo::AT_AMDGPUFlatWorkGroupSize;	 // "amdgpu_flat_work_group_size"
1956
    case 'd':	 // 2 strings to match.
1957
      if (memcmp(Name.data()+1, "evice_builtin_", 14) != 0)
1958
        break;
1959
      switch (Name[15]) {
1960
      default: break;
1961
      case 's':	 // 1 string to match.
1962
        if (memcmp(Name.data()+16, "urface_type", 11) != 0)
1963
          break;
1964
        return AttributeCommonInfo::AT_CUDADeviceBuiltinSurfaceType;	 // "device_builtin_surface_type"
1965
      case 't':	 // 1 string to match.
1966
        if (memcmp(Name.data()+16, "exture_type", 11) != 0)
1967
          break;
1968
        return AttributeCommonInfo::AT_CUDADeviceBuiltinTextureType;	 // "device_builtin_texture_type"
1969
      }
1970
      break;
1971
    case 'e':	 // 1 string to match.
1972
      if (memcmp(Name.data()+1, "nforce_read_only_placement", 26) != 0)
1973
        break;
1974
      return AttributeCommonInfo::AT_ReadOnlyPlacement;	 // "enforce_read_only_placement"
1975
    case 'o':	 // 3 strings to match.
1976
      switch (Name[1]) {
1977
      default: break;
1978
      case 'b':	 // 2 strings to match.
1979
        if (memcmp(Name.data()+2, "jc_", 3) != 0)
1980
          break;
1981
        switch (Name[5]) {
1982
        default: break;
1983
        case 'd':	 // 1 string to match.
1984
          if (memcmp(Name.data()+6, "esignated_initializer", 21) != 0)
1985
            break;
1986
          return AttributeCommonInfo::AT_ObjCDesignatedInitializer;	 // "objc_designated_initializer"
1987
        case 's':	 // 1 string to match.
1988
          if (memcmp(Name.data()+6, "ubclassing_restricted", 21) != 0)
1989
            break;
1990
          return AttributeCommonInfo::AT_ObjCSubclassingRestricted;	 // "objc_subclassing_restricted"
1991
        }
1992
        break;
1993
      case 's':	 // 1 string to match.
1994
        if (memcmp(Name.data()+2, "_returns_retained_on_zero", 25) != 0)
1995
          break;
1996
        return AttributeCommonInfo::AT_OSReturnsRetainedOnZero;	 // "os_returns_retained_on_zero"
1997
      }
1998
      break;
1999
    }
2000
    break;
2001
  case 28:	 // 1 string to match.
2002
    if (memcmp(Name.data()+0, "consumable_set_state_on_read", 28) != 0)
2003
      break;
2004
    return AttributeCommonInfo::AT_ConsumableSetOnRead;	 // "consumable_set_state_on_read"
2005
  case 29:	 // 2 strings to match.
2006
    switch (Name[0]) {
2007
    default: break;
2008
    case 'n':	 // 1 string to match.
2009
      if (memcmp(Name.data()+1, "o_speculative_load_hardening", 28) != 0)
2010
        break;
2011
      return AttributeCommonInfo::AT_NoSpeculativeLoadHardening;	 // "no_speculative_load_hardening"
2012
    case 't':	 // 1 string to match.
2013
      if (memcmp(Name.data()+1, "ry_acquire_shared_capability", 28) != 0)
2014
        break;
2015
      return AttributeCommonInfo::AT_TryAcquireCapability;	 // "try_acquire_shared_capability"
2016
    }
2017
    break;
2018
  case 30:	 // 1 string to match.
2019
    if (memcmp(Name.data()+0, "no_profile_instrument_function", 30) != 0)
2020
      break;
2021
    return AttributeCommonInfo::AT_NoProfileFunction;	 // "no_profile_instrument_function"
2022
  case 31:	 // 2 strings to match.
2023
    switch (Name[0]) {
2024
    default: break;
2025
    case 'o':	 // 1 string to match.
2026
      if (memcmp(Name.data()+1, "s_returns_retained_on_non_zero", 30) != 0)
2027
        break;
2028
      return AttributeCommonInfo::AT_OSReturnsRetainedOnNonZero;	 // "os_returns_retained_on_non_zero"
2029
    case 'r':	 // 1 string to match.
2030
      if (memcmp(Name.data()+1, "equire_constant_initialization", 30) != 0)
2031
        break;
2032
      return AttributeCommonInfo::AT_ConstInit;	 // "require_constant_initialization"
2033
    }
2034
    break;
2035
  case 33:	 // 1 string to match.
2036
    if (memcmp(Name.data()+0, "disable_sanitizer_instrumentation", 33) != 0)
2037
      break;
2038
    return AttributeCommonInfo::AT_DisableSanitizerInstrumentation;	 // "disable_sanitizer_instrumentation"
2039
  case 34:	 // 1 string to match.
2040
    if (memcmp(Name.data()+0, "objc_requires_property_definitions", 34) != 0)
2041
      break;
2042
    return AttributeCommonInfo::AT_ObjCRequiresPropertyDefs;	 // "objc_requires_property_definitions"
2043
  case 35:	 // 3 strings to match.
2044
    switch (Name[0]) {
2045
    default: break;
2046
    case '_':	 // 1 string to match.
2047
      if (memcmp(Name.data()+1, "_clang_arm_mve_strict_polymorphism", 34) != 0)
2048
        break;
2049
      return AttributeCommonInfo::AT_ArmMveStrictPolymorphism;	 // "__clang_arm_mve_strict_polymorphism"
2050
    case 'e':	 // 1 string to match.
2051
      if (memcmp(Name.data()+1, "xclude_from_explicit_instantiation", 34) != 0)
2052
        break;
2053
      return AttributeCommonInfo::AT_ExcludeFromExplicitInstantiation;	 // "exclude_from_explicit_instantiation"
2054
    case 'o':	 // 1 string to match.
2055
      if (memcmp(Name.data()+1, "bjc_arc_weak_reference_unavailable", 34) != 0)
2056
        break;
2057
      return AttributeCommonInfo::AT_ArcWeakrefUnavailable;	 // "objc_arc_weak_reference_unavailable"
2058
    }
2059
    break;
2060
  case 46:	 // 1 string to match.
2061
    if (memcmp(Name.data()+0, "objc_protocol_requires_explicit_implementation", 46) != 0)
2062
      break;
2063
    return AttributeCommonInfo::AT_ObjCExplicitProtocolImpl;	 // "objc_protocol_requires_explicit_implementation"
2064
  }
2065
  } else if (AttributeCommonInfo::AS_Declspec == Syntax) {
2066
  switch (Name.size()) {
2067
  default: break;
2068
  case 4:	 // 1 string to match.
2069
    if (memcmp(Name.data()+0, "uuid", 4) != 0)
2070
      break;
2071
    return AttributeCommonInfo::AT_Uuid;	 // "uuid"
2072
  case 5:	 // 3 strings to match.
2073
    switch (Name[0]) {
2074
    default: break;
2075
    case 'a':	 // 1 string to match.
2076
      if (memcmp(Name.data()+1, "lign", 4) != 0)
2077
        break;
2078
      return AttributeCommonInfo::AT_Aligned;	 // "align"
2079
    case 'g':	 // 1 string to match.
2080
      if (memcmp(Name.data()+1, "uard", 4) != 0)
2081
        break;
2082
      return AttributeCommonInfo::AT_CFGuard;	 // "guard"
2083
    case 'n':	 // 1 string to match.
2084
      if (memcmp(Name.data()+1, "aked", 4) != 0)
2085
        break;
2086
      return AttributeCommonInfo::AT_Naked;	 // "naked"
2087
    }
2088
    break;
2089
  case 6:	 // 1 string to match.
2090
    if (memcmp(Name.data()+0, "thread", 6) != 0)
2091
      break;
2092
    return AttributeCommonInfo::AT_Thread;	 // "thread"
2093
  case 7:	 // 2 strings to match.
2094
    if (memcmp(Name.data()+0, "no", 2) != 0)
2095
      break;
2096
    switch (Name[2]) {
2097
    default: break;
2098
    case 'a':	 // 1 string to match.
2099
      if (memcmp(Name.data()+3, "lias", 4) != 0)
2100
        break;
2101
      return AttributeCommonInfo::AT_NoAlias;	 // "noalias"
2102
    case 't':	 // 1 string to match.
2103
      if (memcmp(Name.data()+3, "hrow", 4) != 0)
2104
        break;
2105
      return AttributeCommonInfo::AT_NoThrow;	 // "nothrow"
2106
    }
2107
    break;
2108
  case 8:	 // 8 strings to match.
2109
    switch (Name[0]) {
2110
    default: break;
2111
    case '_':	 // 1 string to match.
2112
      if (memcmp(Name.data()+1, "_host__", 7) != 0)
2113
        break;
2114
      return AttributeCommonInfo::AT_CUDAHost;	 // "__host__"
2115
    case 'a':	 // 1 string to match.
2116
      if (memcmp(Name.data()+1, "llocate", 7) != 0)
2117
        break;
2118
      return AttributeCommonInfo::AT_Section;	 // "allocate"
2119
    case 'c':	 // 1 string to match.
2120
      if (memcmp(Name.data()+1, "ode_seg", 7) != 0)
2121
        break;
2122
      return AttributeCommonInfo::AT_CodeSeg;	 // "code_seg"
2123
    case 'n':	 // 3 strings to match.
2124
      if (Name[1] != 'o')
2125
        break;
2126
      switch (Name[2]) {
2127
      default: break;
2128
      case 'i':	 // 1 string to match.
2129
        if (memcmp(Name.data()+3, "nline", 5) != 0)
2130
          break;
2131
        return AttributeCommonInfo::AT_NoInline;	 // "noinline"
2132
      case 'r':	 // 1 string to match.
2133
        if (memcmp(Name.data()+3, "eturn", 5) != 0)
2134
          break;
2135
        return AttributeCommonInfo::AT_NoReturn;	 // "noreturn"
2136
      case 'v':	 // 1 string to match.
2137
        if (memcmp(Name.data()+3, "table", 5) != 0)
2138
          break;
2139
        return AttributeCommonInfo::AT_MSNoVTable;	 // "novtable"
2140
      }
2141
      break;
2142
    case 'p':	 // 1 string to match.
2143
      if (memcmp(Name.data()+1, "roperty", 7) != 0)
2144
        break;
2145
      return AttributeCommonInfo::IgnoredAttribute;	 // "property"
2146
    case 'r':	 // 1 string to match.
2147
      if (memcmp(Name.data()+1, "estrict", 7) != 0)
2148
        break;
2149
      return AttributeCommonInfo::AT_Restrict;	 // "restrict"
2150
    }
2151
    break;
2152
  case 9:	 // 4 strings to match.
2153
    switch (Name[0]) {
2154
    default: break;
2155
    case 'a':	 // 1 string to match.
2156
      if (memcmp(Name.data()+1, "llocator", 8) != 0)
2157
        break;
2158
      return AttributeCommonInfo::AT_MSAllocator;	 // "allocator"
2159
    case 'd':	 // 2 strings to match.
2160
      if (memcmp(Name.data()+1, "ll", 2) != 0)
2161
        break;
2162
      switch (Name[3]) {
2163
      default: break;
2164
      case 'e':	 // 1 string to match.
2165
        if (memcmp(Name.data()+4, "xport", 5) != 0)
2166
          break;
2167
        return AttributeCommonInfo::AT_DLLExport;	 // "dllexport"
2168
      case 'i':	 // 1 string to match.
2169
        if (memcmp(Name.data()+4, "mport", 5) != 0)
2170
          break;
2171
        return AttributeCommonInfo::AT_DLLImport;	 // "dllimport"
2172
      }
2173
      break;
2174
    case 's':	 // 1 string to match.
2175
      if (memcmp(Name.data()+1, "electany", 8) != 0)
2176
        break;
2177
      return AttributeCommonInfo::AT_SelectAny;	 // "selectany"
2178
    }
2179
    break;
2180
  case 10:	 // 4 strings to match.
2181
    switch (Name[0]) {
2182
    default: break;
2183
    case '_':	 // 3 strings to match.
2184
      if (Name[1] != '_')
2185
        break;
2186
      switch (Name[2]) {
2187
      default: break;
2188
      case 'd':	 // 1 string to match.
2189
        if (memcmp(Name.data()+3, "evice__", 7) != 0)
2190
          break;
2191
        return AttributeCommonInfo::AT_CUDADevice;	 // "__device__"
2192
      case 'g':	 // 1 string to match.
2193
        if (memcmp(Name.data()+3, "lobal__", 7) != 0)
2194
          break;
2195
        return AttributeCommonInfo::AT_CUDAGlobal;	 // "__global__"
2196
      case 's':	 // 1 string to match.
2197
        if (memcmp(Name.data()+3, "hared__", 7) != 0)
2198
          break;
2199
        return AttributeCommonInfo::AT_CUDAShared;	 // "__shared__"
2200
      }
2201
      break;
2202
    case 'd':	 // 1 string to match.
2203
      if (memcmp(Name.data()+1, "eprecated", 9) != 0)
2204
        break;
2205
      return AttributeCommonInfo::AT_Deprecated;	 // "deprecated"
2206
    }
2207
    break;
2208
  case 11:	 // 3 strings to match.
2209
    switch (Name[0]) {
2210
    default: break;
2211
    case '_':	 // 1 string to match.
2212
      if (memcmp(Name.data()+1, "_managed__", 10) != 0)
2213
        break;
2214
      return AttributeCommonInfo::AT_HIPManaged;	 // "__managed__"
2215
    case 'e':	 // 1 string to match.
2216
      if (memcmp(Name.data()+1, "mpty_bases", 10) != 0)
2217
        break;
2218
      return AttributeCommonInfo::AT_EmptyBases;	 // "empty_bases"
2219
    case 's':	 // 1 string to match.
2220
      if (memcmp(Name.data()+1, "afebuffers", 10) != 0)
2221
        break;
2222
      return AttributeCommonInfo::AT_NoStackProtector;	 // "safebuffers"
2223
    }
2224
    break;
2225
  case 12:	 // 3 strings to match.
2226
    switch (Name[0]) {
2227
    default: break;
2228
    case '_':	 // 1 string to match.
2229
      if (memcmp(Name.data()+1, "_constant__", 11) != 0)
2230
        break;
2231
      return AttributeCommonInfo::AT_CUDAConstant;	 // "__constant__"
2232
    case 'c':	 // 2 strings to match.
2233
      if (memcmp(Name.data()+1, "pu_", 3) != 0)
2234
        break;
2235
      switch (Name[4]) {
2236
      default: break;
2237
      case 'd':	 // 1 string to match.
2238
        if (memcmp(Name.data()+5, "ispatch", 7) != 0)
2239
          break;
2240
        return AttributeCommonInfo::AT_CPUDispatch;	 // "cpu_dispatch"
2241
      case 's':	 // 1 string to match.
2242
        if (memcmp(Name.data()+5, "pecific", 7) != 0)
2243
          break;
2244
        return AttributeCommonInfo::AT_CPUSpecific;	 // "cpu_specific"
2245
      }
2246
      break;
2247
    }
2248
    break;
2249
  case 14:	 // 1 string to match.
2250
    if (memcmp(Name.data()+0, "layout_version", 14) != 0)
2251
      break;
2252
    return AttributeCommonInfo::AT_LayoutVersion;	 // "layout_version"
2253
  case 15:	 // 1 string to match.
2254
    if (memcmp(Name.data()+0, "strict_gs_check", 15) != 0)
2255
      break;
2256
    return AttributeCommonInfo::AT_StrictGuardStackCheck;	 // "strict_gs_check"
2257
  case 17:	 // 1 string to match.
2258
    if (memcmp(Name.data()+0, "__launch_bounds__", 17) != 0)
2259
      break;
2260
    return AttributeCommonInfo::AT_CUDALaunchBounds;	 // "__launch_bounds__"
2261
  case 18:	 // 2 strings to match.
2262
    if (memcmp(Name.data()+0, "__", 2) != 0)
2263
      break;
2264
    switch (Name[2]) {
2265
    default: break;
2266
    case 'c':	 // 1 string to match.
2267
      if (memcmp(Name.data()+3, "udart_builtin__", 15) != 0)
2268
        break;
2269
      return AttributeCommonInfo::IgnoredAttribute;	 // "__cudart_builtin__"
2270
    case 'd':	 // 1 string to match.
2271
      if (memcmp(Name.data()+3, "evice_builtin__", 15) != 0)
2272
        break;
2273
      return AttributeCommonInfo::IgnoredAttribute;	 // "__device_builtin__"
2274
    }
2275
    break;
2276
  case 31:	 // 2 strings to match.
2277
    if (memcmp(Name.data()+0, "__device_builtin_", 17) != 0)
2278
      break;
2279
    switch (Name[17]) {
2280
    default: break;
2281
    case 's':	 // 1 string to match.
2282
      if (memcmp(Name.data()+18, "urface_type__", 13) != 0)
2283
        break;
2284
      return AttributeCommonInfo::AT_CUDADeviceBuiltinSurfaceType;	 // "__device_builtin_surface_type__"
2285
    case 't':	 // 1 string to match.
2286
      if (memcmp(Name.data()+18, "exture_type__", 13) != 0)
2287
        break;
2288
      return AttributeCommonInfo::AT_CUDADeviceBuiltinTextureType;	 // "__device_builtin_texture_type__"
2289
    }
2290
    break;
2291
  }
2292
  } else if (AttributeCommonInfo::AS_Microsoft == Syntax) {
2293
  switch (Name.size()) {
2294
  default: break;
2295
  case 4:	 // 1 string to match.
2296
    if (memcmp(Name.data()+0, "uuid", 4) != 0)
2297
      break;
2298
    return AttributeCommonInfo::AT_Uuid;	 // "uuid"
2299
  case 6:	 // 1 string to match.
2300
    if (memcmp(Name.data()+0, "shader", 6) != 0)
2301
      break;
2302
    return AttributeCommonInfo::AT_HLSLShader;	 // "shader"
2303
  case 10:	 // 1 string to match.
2304
    if (memcmp(Name.data()+0, "numthreads", 10) != 0)
2305
      break;
2306
    return AttributeCommonInfo::AT_HLSLNumThreads;	 // "numthreads"
2307
  }
2308
  } else if (AttributeCommonInfo::AS_CXX11 == Syntax) {
2309
  switch (Name.size()) {
2310
  default: break;
2311
  case 6:	 // 1 string to match.
2312
    if (memcmp(Name.data()+0, "likely", 6) != 0)
2313
      break;
2314
    return AttributeCommonInfo::AT_Likely;	 // "likely"
2315
  case 8:	 // 5 strings to match.
2316
    switch (Name[0]) {
2317
    default: break;
2318
    case 'g':	 // 3 strings to match.
2319
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
2320
        break;
2321
      switch (Name[5]) {
2322
      default: break;
2323
      case 'f':	 // 1 string to match.
2324
        if (memcmp(Name.data()+6, "ar", 2) != 0)
2325
          break;
2326
        return AttributeCommonInfo::AT_MipsLongCall;	 // "gnu::far"
2327
      case 'h':	 // 1 string to match.
2328
        if (memcmp(Name.data()+6, "ot", 2) != 0)
2329
          break;
2330
        return AttributeCommonInfo::AT_Hot;	 // "gnu::hot"
2331
      case 'p':	 // 1 string to match.
2332
        if (memcmp(Name.data()+6, "cs", 2) != 0)
2333
          break;
2334
        return AttributeCommonInfo::AT_Pcs;	 // "gnu::pcs"
2335
      }
2336
      break;
2337
    case 'n':	 // 1 string to match.
2338
      if (memcmp(Name.data()+1, "oreturn", 7) != 0)
2339
        break;
2340
      return AttributeCommonInfo::AT_CXX11NoReturn;	 // "noreturn"
2341
    case 'u':	 // 1 string to match.
2342
      if (memcmp(Name.data()+1, "nlikely", 7) != 0)
2343
        break;
2344
      return AttributeCommonInfo::AT_Unlikely;	 // "unlikely"
2345
    }
2346
    break;
2347
  case 9:	 // 8 strings to match.
2348
    switch (Name[0]) {
2349
    default: break;
2350
    case 'g':	 // 7 strings to match.
2351
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
2352
        break;
2353
      switch (Name[5]) {
2354
      default: break;
2355
      case 'c':	 // 1 string to match.
2356
        if (memcmp(Name.data()+6, "old", 3) != 0)
2357
          break;
2358
        return AttributeCommonInfo::AT_Cold;	 // "gnu::cold"
2359
      case 'l':	 // 1 string to match.
2360
        if (memcmp(Name.data()+6, "eaf", 3) != 0)
2361
          break;
2362
        return AttributeCommonInfo::AT_Leaf;	 // "gnu::leaf"
2363
      case 'm':	 // 1 string to match.
2364
        if (memcmp(Name.data()+6, "ode", 3) != 0)
2365
          break;
2366
        return AttributeCommonInfo::AT_Mode;	 // "gnu::mode"
2367
      case 'n':	 // 1 string to match.
2368
        if (memcmp(Name.data()+6, "ear", 3) != 0)
2369
          break;
2370
        return AttributeCommonInfo::AT_MipsShortCall;	 // "gnu::near"
2371
      case 'p':	 // 1 string to match.
2372
        if (memcmp(Name.data()+6, "ure", 3) != 0)
2373
          break;
2374
        return AttributeCommonInfo::AT_Pure;	 // "gnu::pure"
2375
      case 'u':	 // 1 string to match.
2376
        if (memcmp(Name.data()+6, "sed", 3) != 0)
2377
          break;
2378
        return AttributeCommonInfo::AT_Used;	 // "gnu::used"
2379
      case 'w':	 // 1 string to match.
2380
        if (memcmp(Name.data()+6, "eak", 3) != 0)
2381
          break;
2382
        return AttributeCommonInfo::AT_Weak;	 // "gnu::weak"
2383
      }
2384
      break;
2385
    case 'n':	 // 1 string to match.
2386
      if (memcmp(Name.data()+1, "odiscard", 8) != 0)
2387
        break;
2388
      return AttributeCommonInfo::AT_WarnUnusedResult;	 // "nodiscard"
2389
    }
2390
    break;
2391
  case 10:	 // 8 strings to match.
2392
    switch (Name[0]) {
2393
    default: break;
2394
    case 'd':	 // 1 string to match.
2395
      if (memcmp(Name.data()+1, "eprecated", 9) != 0)
2396
        break;
2397
      return AttributeCommonInfo::AT_Deprecated;	 // "deprecated"
2398
    case 'g':	 // 7 strings to match.
2399
      switch (Name[1]) {
2400
      default: break;
2401
      case 'n':	 // 6 strings to match.
2402
        if (memcmp(Name.data()+2, "u::", 3) != 0)
2403
          break;
2404
        switch (Name[5]) {
2405
        default: break;
2406
        case 'a':	 // 1 string to match.
2407
          if (memcmp(Name.data()+6, "lias", 4) != 0)
2408
            break;
2409
          return AttributeCommonInfo::AT_Alias;	 // "gnu::alias"
2410
        case 'c':	 // 2 strings to match.
2411
          switch (Name[6]) {
2412
          default: break;
2413
          case 'd':	 // 1 string to match.
2414
            if (memcmp(Name.data()+7, "ecl", 3) != 0)
2415
              break;
2416
            return AttributeCommonInfo::AT_CDecl;	 // "gnu::cdecl"
2417
          case 'o':	 // 1 string to match.
2418
            if (memcmp(Name.data()+7, "nst", 3) != 0)
2419
              break;
2420
            return AttributeCommonInfo::AT_Const;	 // "gnu::const"
2421
          }
2422
          break;
2423
        case 'e':	 // 1 string to match.
2424
          if (memcmp(Name.data()+6, "rror", 4) != 0)
2425
            break;
2426
          return AttributeCommonInfo::AT_Error;	 // "gnu::error"
2427
        case 'i':	 // 1 string to match.
2428
          if (memcmp(Name.data()+6, "func", 4) != 0)
2429
            break;
2430
          return AttributeCommonInfo::AT_IFunc;	 // "gnu::ifunc"
2431
        case 'n':	 // 1 string to match.
2432
          if (memcmp(Name.data()+6, "aked", 4) != 0)
2433
            break;
2434
          return AttributeCommonInfo::AT_Naked;	 // "gnu::naked"
2435
        }
2436
        break;
2437
      case 's':	 // 1 string to match.
2438
        if (memcmp(Name.data()+2, "l::Owner", 8) != 0)
2439
          break;
2440
        return AttributeCommonInfo::AT_Owner;	 // "gsl::Owner"
2441
      }
2442
      break;
2443
    }
2444
    break;
2445
  case 11:	 // 11 strings to match.
2446
    switch (Name[0]) {
2447
    default: break;
2448
    case 'f':	 // 1 string to match.
2449
      if (memcmp(Name.data()+1, "allthrough", 10) != 0)
2450
        break;
2451
      return AttributeCommonInfo::AT_FallThrough;	 // "fallthrough"
2452
    case 'g':	 // 10 strings to match.
2453
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
2454
        break;
2455
      switch (Name[5]) {
2456
      default: break;
2457
      case 'c':	 // 1 string to match.
2458
        if (memcmp(Name.data()+6, "ommon", 5) != 0)
2459
          break;
2460
        return AttributeCommonInfo::AT_Common;	 // "gnu::common"
2461
      case 'f':	 // 1 string to match.
2462
        if (memcmp(Name.data()+6, "ormat", 5) != 0)
2463
          break;
2464
        return AttributeCommonInfo::AT_Format;	 // "gnu::format"
2465
      case 'm':	 // 3 strings to match.
2466
        switch (Name[6]) {
2467
        default: break;
2468
        case 'a':	 // 1 string to match.
2469
          if (memcmp(Name.data()+7, "lloc", 4) != 0)
2470
            break;
2471
          return AttributeCommonInfo::AT_Restrict;	 // "gnu::malloc"
2472
        case 'i':	 // 1 string to match.
2473
          if (memcmp(Name.data()+7, "ps16", 4) != 0)
2474
            break;
2475
          return AttributeCommonInfo::AT_Mips16;	 // "gnu::mips16"
2476
        case 's':	 // 1 string to match.
2477
          if (memcmp(Name.data()+7, "_abi", 4) != 0)
2478
            break;
2479
          return AttributeCommonInfo::AT_MSABI;	 // "gnu::ms_abi"
2480
        }
2481
        break;
2482
      case 'p':	 // 1 string to match.
2483
        if (memcmp(Name.data()+6, "acked", 5) != 0)
2484
          break;
2485
        return AttributeCommonInfo::AT_Packed;	 // "gnu::packed"
2486
      case 'r':	 // 1 string to match.
2487
        if (memcmp(Name.data()+6, "etain", 5) != 0)
2488
          break;
2489
        return AttributeCommonInfo::AT_Retain;	 // "gnu::retain"
2490
      case 's':	 // 1 string to match.
2491
        if (memcmp(Name.data()+6, "ignal", 5) != 0)
2492
          break;
2493
        return AttributeCommonInfo::AT_AVRSignal;	 // "gnu::signal"
2494
      case 't':	 // 1 string to match.
2495
        if (memcmp(Name.data()+6, "arget", 5) != 0)
2496
          break;
2497
        return AttributeCommonInfo::AT_Target;	 // "gnu::target"
2498
      case 'u':	 // 1 string to match.
2499
        if (memcmp(Name.data()+6, "nused", 5) != 0)
2500
          break;
2501
        return AttributeCommonInfo::AT_Unused;	 // "gnu::unused"
2502
      }
2503
      break;
2504
    }
2505
    break;
2506
  case 12:	 // 17 strings to match.
2507
    switch (Name[0]) {
2508
    default: break;
2509
    case 'c':	 // 1 string to match.
2510
      if (memcmp(Name.data()+1, "lang::guard", 11) != 0)
2511
        break;
2512
      return AttributeCommonInfo::AT_CFGuard;	 // "clang::guard"
2513
    case 'g':	 // 15 strings to match.
2514
      switch (Name[1]) {
2515
      default: break;
2516
      case 'n':	 // 14 strings to match.
2517
        if (memcmp(Name.data()+2, "u::", 3) != 0)
2518
          break;
2519
        switch (Name[5]) {
2520
        default: break;
2521
        case '_':	 // 1 string to match.
2522
          if (memcmp(Name.data()+6, "_const", 6) != 0)
2523
            break;
2524
          return AttributeCommonInfo::AT_Const;	 // "gnu::__const"
2525
        case 'a':	 // 2 strings to match.
2526
          switch (Name[6]) {
2527
          default: break;
2528
          case 'b':	 // 1 string to match.
2529
            if (memcmp(Name.data()+7, "i_tag", 5) != 0)
2530
              break;
2531
            return AttributeCommonInfo::AT_AbiTag;	 // "gnu::abi_tag"
2532
          case 'l':	 // 1 string to match.
2533
            if (memcmp(Name.data()+7, "igned", 5) != 0)
2534
              break;
2535
            return AttributeCommonInfo::AT_Aligned;	 // "gnu::aligned"
2536
          }
2537
          break;
2538
        case 'c':	 // 1 string to match.
2539
          if (memcmp(Name.data()+6, "leanup", 6) != 0)
2540
            break;
2541
          return AttributeCommonInfo::AT_Cleanup;	 // "gnu::cleanup"
2542
        case 'f':	 // 1 string to match.
2543
          if (memcmp(Name.data()+6, "latten", 6) != 0)
2544
            break;
2545
          return AttributeCommonInfo::AT_Flatten;	 // "gnu::flatten"
2546
        case 'n':	 // 3 strings to match.
2547
          if (Name[6] != 'o')
2548
            break;
2549
          switch (Name[7]) {
2550
          default: break;
2551
          case 'd':	 // 1 string to match.
2552
            if (memcmp(Name.data()+8, "ebug", 4) != 0)
2553
              break;
2554
            return AttributeCommonInfo::AT_NoDebug;	 // "gnu::nodebug"
2555
          case 'n':	 // 1 string to match.
2556
            if (memcmp(Name.data()+8, "null", 4) != 0)
2557
              break;
2558
            return AttributeCommonInfo::AT_NonNull;	 // "gnu::nonnull"
2559
          case 't':	 // 1 string to match.
2560
            if (memcmp(Name.data()+8, "hrow", 4) != 0)
2561
              break;
2562
            return AttributeCommonInfo::AT_NoThrow;	 // "gnu::nothrow"
2563
          }
2564
          break;
2565
        case 'r':	 // 2 strings to match.
2566
          if (memcmp(Name.data()+6, "eg", 2) != 0)
2567
            break;
2568
          switch (Name[8]) {
2569
          default: break;
2570
          case 'c':	 // 1 string to match.
2571
            if (memcmp(Name.data()+9, "all", 3) != 0)
2572
              break;
2573
            return AttributeCommonInfo::AT_RegCall;	 // "gnu::regcall"
2574
          case 'p':	 // 1 string to match.
2575
            if (memcmp(Name.data()+9, "arm", 3) != 0)
2576
              break;
2577
            return AttributeCommonInfo::AT_Regparm;	 // "gnu::regparm"
2578
          }
2579
          break;
2580
        case 's':	 // 2 strings to match.
2581
          switch (Name[6]) {
2582
          default: break;
2583
          case 'e':	 // 1 string to match.
2584
            if (memcmp(Name.data()+7, "ction", 5) != 0)
2585
              break;
2586
            return AttributeCommonInfo::AT_Section;	 // "gnu::section"
2587
          case 't':	 // 1 string to match.
2588
            if (memcmp(Name.data()+7, "dcall", 5) != 0)
2589
              break;
2590
            return AttributeCommonInfo::AT_StdCall;	 // "gnu::stdcall"
2591
          }
2592
          break;
2593
        case 'w':	 // 2 strings to match.
2594
          switch (Name[6]) {
2595
          default: break;
2596
          case 'a':	 // 1 string to match.
2597
            if (memcmp(Name.data()+7, "rning", 5) != 0)
2598
              break;
2599
            return AttributeCommonInfo::AT_Error;	 // "gnu::warning"
2600
          case 'e':	 // 1 string to match.
2601
            if (memcmp(Name.data()+7, "akref", 5) != 0)
2602
              break;
2603
            return AttributeCommonInfo::AT_WeakRef;	 // "gnu::weakref"
2604
          }
2605
          break;
2606
        }
2607
        break;
2608
      case 's':	 // 1 string to match.
2609
        if (memcmp(Name.data()+2, "l::Pointer", 10) != 0)
2610
          break;
2611
        return AttributeCommonInfo::AT_Pointer;	 // "gsl::Pointer"
2612
      }
2613
      break;
2614
    case 'm':	 // 1 string to match.
2615
      if (memcmp(Name.data()+1, "aybe_unused", 11) != 0)
2616
        break;
2617
      return AttributeCommonInfo::AT_Unused;	 // "maybe_unused"
2618
    }
2619
    break;
2620
  case 13:	 // 12 strings to match.
2621
    switch (Name[0]) {
2622
    default: break;
2623
    case 'c':	 // 3 strings to match.
2624
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
2625
        break;
2626
      switch (Name[7]) {
2627
      default: break;
2628
      case 'a':	 // 1 string to match.
2629
        if (memcmp(Name.data()+8, "ssume", 5) != 0)
2630
          break;
2631
        return AttributeCommonInfo::AT_Assumption;	 // "clang::assume"
2632
      case 'b':	 // 1 string to match.
2633
        if (memcmp(Name.data()+8, "locks", 5) != 0)
2634
          break;
2635
        return AttributeCommonInfo::AT_Blocks;	 // "clang::blocks"
2636
      case 'p':	 // 1 string to match.
2637
        if (memcmp(Name.data()+8, "ascal", 5) != 0)
2638
          break;
2639
        return AttributeCommonInfo::AT_Pascal;	 // "clang::pascal"
2640
      }
2641
      break;
2642
    case 'g':	 // 9 strings to match.
2643
      switch (Name[1]) {
2644
      default: break;
2645
      case 'n':	 // 8 strings to match.
2646
        if (memcmp(Name.data()+2, "u::", 3) != 0)
2647
          break;
2648
        switch (Name[5]) {
2649
        default: break;
2650
        case 'f':	 // 1 string to match.
2651
          if (memcmp(Name.data()+6, "astcall", 7) != 0)
2652
            break;
2653
          return AttributeCommonInfo::AT_FastCall;	 // "gnu::fastcall"
2654
        case 'n':	 // 4 strings to match.
2655
          if (Name[6] != 'o')
2656
            break;
2657
          switch (Name[7]) {
2658
          default: break;
2659
          case 'c':	 // 1 string to match.
2660
            if (memcmp(Name.data()+8, "ommon", 5) != 0)
2661
              break;
2662
            return AttributeCommonInfo::AT_NoCommon;	 // "gnu::nocommon"
2663
          case 'i':	 // 1 string to match.
2664
            if (memcmp(Name.data()+8, "nline", 5) != 0)
2665
              break;
2666
            return AttributeCommonInfo::AT_NoInline;	 // "gnu::noinline"
2667
          case 'm':	 // 1 string to match.
2668
            if (memcmp(Name.data()+8, "ips16", 5) != 0)
2669
              break;
2670
            return AttributeCommonInfo::AT_NoMips16;	 // "gnu::nomips16"
2671
          case 'r':	 // 1 string to match.
2672
            if (memcmp(Name.data()+8, "eturn", 5) != 0)
2673
              break;
2674
            return AttributeCommonInfo::AT_NoReturn;	 // "gnu::noreturn"
2675
          }
2676
          break;
2677
        case 's':	 // 2 strings to match.
2678
          switch (Name[6]) {
2679
          default: break;
2680
          case 'e':	 // 1 string to match.
2681
            if (memcmp(Name.data()+7, "ntinel", 6) != 0)
2682
              break;
2683
            return AttributeCommonInfo::AT_Sentinel;	 // "gnu::sentinel"
2684
          case 'y':	 // 1 string to match.
2685
            if (memcmp(Name.data()+7, "sv_abi", 6) != 0)
2686
              break;
2687
            return AttributeCommonInfo::AT_SysVABI;	 // "gnu::sysv_abi"
2688
          }
2689
          break;
2690
        case 't':	 // 1 string to match.
2691
          if (memcmp(Name.data()+6, "hiscall", 7) != 0)
2692
            break;
2693
          return AttributeCommonInfo::AT_ThisCall;	 // "gnu::thiscall"
2694
        }
2695
        break;
2696
      case 's':	 // 1 string to match.
2697
        if (memcmp(Name.data()+2, "l::suppress", 11) != 0)
2698
          break;
2699
        return AttributeCommonInfo::AT_Suppress;	 // "gsl::suppress"
2700
      }
2701
      break;
2702
    }
2703
    break;
2704
  case 14:	 // 14 strings to match.
2705
    switch (Name[0]) {
2706
    default: break;
2707
    case 'c':	 // 5 strings to match.
2708
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
2709
        break;
2710
      switch (Name[7]) {
2711
      default: break;
2712
      case 'm':	 // 1 string to match.
2713
        if (memcmp(Name.data()+8, "insize", 6) != 0)
2714
          break;
2715
        return AttributeCommonInfo::AT_MinSize;	 // "clang::minsize"
2716
      case 'n':	 // 2 strings to match.
2717
        if (Name[8] != 'o')
2718
          break;
2719
        switch (Name[9]) {
2720
        default: break;
2721
        case 'd':	 // 1 string to match.
2722
          if (memcmp(Name.data()+10, "eref", 4) != 0)
2723
            break;
2724
          return AttributeCommonInfo::AT_NoDeref;	 // "clang::noderef"
2725
        case 'm':	 // 1 string to match.
2726
          if (memcmp(Name.data()+10, "erge", 4) != 0)
2727
            break;
2728
          return AttributeCommonInfo::AT_NoMerge;	 // "clang::nomerge"
2729
        }
2730
        break;
2731
      case 'o':	 // 2 strings to match.
2732
        switch (Name[8]) {
2733
        default: break;
2734
        case 'b':	 // 1 string to match.
2735
          if (memcmp(Name.data()+9, "jc_gc", 5) != 0)
2736
            break;
2737
          return AttributeCommonInfo::AT_ObjCGC;	 // "clang::objc_gc"
2738
        case 'p':	 // 1 string to match.
2739
          if (memcmp(Name.data()+9, "tnone", 5) != 0)
2740
            break;
2741
          return AttributeCommonInfo::AT_OptimizeNone;	 // "clang::optnone"
2742
        }
2743
        break;
2744
      }
2745
      break;
2746
    case 'g':	 // 9 strings to match.
2747
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
2748
        break;
2749
      switch (Name[5]) {
2750
      default: break;
2751
      case 'd':	 // 2 strings to match.
2752
        if (memcmp(Name.data()+6, "ll", 2) != 0)
2753
          break;
2754
        switch (Name[8]) {
2755
        default: break;
2756
        case 'e':	 // 1 string to match.
2757
          if (memcmp(Name.data()+9, "xport", 5) != 0)
2758
            break;
2759
          return AttributeCommonInfo::AT_DLLExport;	 // "gnu::dllexport"
2760
        case 'i':	 // 1 string to match.
2761
          if (memcmp(Name.data()+9, "mport", 5) != 0)
2762
            break;
2763
          return AttributeCommonInfo::AT_DLLImport;	 // "gnu::dllimport"
2764
        }
2765
        break;
2766
      case 'i':	 // 1 string to match.
2767
        if (memcmp(Name.data()+6, "nterrupt", 8) != 0)
2768
          break;
2769
        return AttributeCommonInfo::AT_Interrupt;	 // "gnu::interrupt"
2770
      case 'l':	 // 1 string to match.
2771
        if (memcmp(Name.data()+6, "ong_call", 8) != 0)
2772
          break;
2773
        return AttributeCommonInfo::AT_MipsLongCall;	 // "gnu::long_call"
2774
      case 'm':	 // 3 strings to match.
2775
        switch (Name[6]) {
2776
        default: break;
2777
        case 'a':	 // 1 string to match.
2778
          if (memcmp(Name.data()+7, "y_alias", 7) != 0)
2779
            break;
2780
          return AttributeCommonInfo::AT_MayAlias;	 // "gnu::may_alias"
2781
        case 'i':	 // 1 string to match.
2782
          if (memcmp(Name.data()+7, "cromips", 7) != 0)
2783
            break;
2784
          return AttributeCommonInfo::AT_MicroMips;	 // "gnu::micromips"
2785
        case 's':	 // 1 string to match.
2786
          if (memcmp(Name.data()+7, "_struct", 7) != 0)
2787
            break;
2788
          return AttributeCommonInfo::AT_MSStruct;	 // "gnu::ms_struct"
2789
        }
2790
        break;
2791
      case 's':	 // 1 string to match.
2792
        if (memcmp(Name.data()+6, "electany", 8) != 0)
2793
          break;
2794
        return AttributeCommonInfo::AT_SelectAny;	 // "gnu::selectany"
2795
      case 't':	 // 1 string to match.
2796
        if (memcmp(Name.data()+6, "ls_model", 8) != 0)
2797
          break;
2798
        return AttributeCommonInfo::AT_TLSModel;	 // "gnu::tls_model"
2799
      }
2800
      break;
2801
    }
2802
    break;
2803
  case 15:	 // 17 strings to match.
2804
    switch (Name[0]) {
2805
    default: break;
2806
    case 'c':	 // 8 strings to match.
2807
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
2808
        break;
2809
      switch (Name[7]) {
2810
      default: break;
2811
      case 'N':	 // 1 string to match.
2812
        if (memcmp(Name.data()+8, "SObject", 7) != 0)
2813
          break;
2814
        return AttributeCommonInfo::AT_ObjCNSObject;	 // "clang::NSObject"
2815
      case 'a':	 // 1 string to match.
2816
        if (memcmp(Name.data()+8, "nnotate", 7) != 0)
2817
          break;
2818
        return AttributeCommonInfo::AT_Annotate;	 // "clang::annotate"
2819
      case 'c':	 // 1 string to match.
2820
        if (memcmp(Name.data()+8, "allback", 7) != 0)
2821
          break;
2822
        return AttributeCommonInfo::AT_Callback;	 // "clang::callback"
2823
      case 'i':	 // 2 strings to match.
2824
        if (Name[8] != 'b')
2825
          break;
2826
        switch (Name[9]) {
2827
        default: break;
2828
        case 'a':	 // 1 string to match.
2829
          if (memcmp(Name.data()+10, "ction", 5) != 0)
2830
            break;
2831
          return AttributeCommonInfo::AT_IBAction;	 // "clang::ibaction"
2832
        case 'o':	 // 1 string to match.
2833
          if (memcmp(Name.data()+10, "utlet", 5) != 0)
2834
            break;
2835
          return AttributeCommonInfo::AT_IBOutlet;	 // "clang::iboutlet"
2836
        }
2837
        break;
2838
      case 'm':	 // 1 string to match.
2839
        if (memcmp(Name.data()+8, "usttail", 7) != 0)
2840
          break;
2841
        return AttributeCommonInfo::AT_MustTail;	 // "clang::musttail"
2842
      case 'n':	 // 2 strings to match.
2843
        if (Name[8] != 'o')
2844
          break;
2845
        switch (Name[9]) {
2846
        default: break;
2847
        case 'e':	 // 1 string to match.
2848
          if (memcmp(Name.data()+10, "scape", 5) != 0)
2849
            break;
2850
          return AttributeCommonInfo::AT_NoEscape;	 // "clang::noescape"
2851
        case 'i':	 // 1 string to match.
2852
          if (memcmp(Name.data()+10, "nline", 5) != 0)
2853
            break;
2854
          return AttributeCommonInfo::AT_NoInline;	 // "clang::noinline"
2855
        }
2856
        break;
2857
      }
2858
      break;
2859
    case 'g':	 // 9 strings to match.
2860
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
2861
        break;
2862
      switch (Name[5]) {
2863
      default: break;
2864
      case 'a':	 // 2 strings to match.
2865
        switch (Name[6]) {
2866
        default: break;
2867
        case 'l':	 // 1 string to match.
2868
          if (memcmp(Name.data()+7, "loc_size", 8) != 0)
2869
            break;
2870
          return AttributeCommonInfo::AT_AllocSize;	 // "gnu::alloc_size"
2871
        case 'r':	 // 1 string to match.
2872
          if (memcmp(Name.data()+7, "tificial", 8) != 0)
2873
            break;
2874
          return AttributeCommonInfo::AT_Artificial;	 // "gnu::artificial"
2875
        }
2876
        break;
2877
      case 'd':	 // 2 strings to match.
2878
        if (Name[6] != 'e')
2879
          break;
2880
        switch (Name[7]) {
2881
        default: break;
2882
        case 'p':	 // 1 string to match.
2883
          if (memcmp(Name.data()+8, "recated", 7) != 0)
2884
            break;
2885
          return AttributeCommonInfo::AT_Deprecated;	 // "gnu::deprecated"
2886
        case 's':	 // 1 string to match.
2887
          if (memcmp(Name.data()+8, "tructor", 7) != 0)
2888
            break;
2889
          return AttributeCommonInfo::AT_Destructor;	 // "gnu::destructor"
2890
        }
2891
        break;
2892
      case 'f':	 // 1 string to match.
2893
        if (memcmp(Name.data()+6, "ormat_arg", 9) != 0)
2894
          break;
2895
        return AttributeCommonInfo::AT_FormatArg;	 // "gnu::format_arg"
2896
      case 'g':	 // 1 string to match.
2897
        if (memcmp(Name.data()+6, "nu_inline", 9) != 0)
2898
          break;
2899
        return AttributeCommonInfo::AT_GNUInline;	 // "gnu::gnu_inline"
2900
      case 'n':	 // 1 string to match.
2901
        if (memcmp(Name.data()+6, "ocf_check", 9) != 0)
2902
          break;
2903
        return AttributeCommonInfo::AT_AnyX86NoCfCheck;	 // "gnu::nocf_check"
2904
      case 's':	 // 1 string to match.
2905
        if (memcmp(Name.data()+6, "hort_call", 9) != 0)
2906
          break;
2907
        return AttributeCommonInfo::AT_MipsShortCall;	 // "gnu::short_call"
2908
      case 'v':	 // 1 string to match.
2909
        if (memcmp(Name.data()+6, "isibility", 9) != 0)
2910
          break;
2911
        return AttributeCommonInfo::AT_Visibility;	 // "gnu::visibility"
2912
      }
2913
      break;
2914
    }
2915
    break;
2916
  case 16:	 // 10 strings to match.
2917
    switch (Name[0]) {
2918
    default: break;
2919
    case 'c':	 // 4 strings to match.
2920
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
2921
        break;
2922
      switch (Name[7]) {
2923
      default: break;
2924
      case 'f':	 // 1 string to match.
2925
        if (memcmp(Name.data()+8, "lag_enum", 8) != 0)
2926
          break;
2927
        return AttributeCommonInfo::AT_FlagEnum;	 // "clang::flag_enum"
2928
      case 'n':	 // 1 string to match.
2929
        if (memcmp(Name.data()+8, "ouwtable", 8) != 0)
2930
          break;
2931
        return AttributeCommonInfo::AT_NoUwtable;	 // "clang::nouwtable"
2932
      case 's':	 // 1 string to match.
2933
        if (memcmp(Name.data()+8, "wiftcall", 8) != 0)
2934
          break;
2935
        return AttributeCommonInfo::AT_SwiftCall;	 // "clang::swiftcall"
2936
      case 'v':	 // 1 string to match.
2937
        if (memcmp(Name.data()+8, "ecreturn", 8) != 0)
2938
          break;
2939
        return AttributeCommonInfo::AT_VecReturn;	 // "clang::vecreturn"
2940
      }
2941
      break;
2942
    case 'g':	 // 6 strings to match.
2943
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
2944
        break;
2945
      switch (Name[5]) {
2946
      default: break;
2947
      case 'a':	 // 1 string to match.
2948
        if (memcmp(Name.data()+6, "lloc_align", 10) != 0)
2949
          break;
2950
        return AttributeCommonInfo::AT_AllocAlign;	 // "gnu::alloc_align"
2951
      case 'c':	 // 1 string to match.
2952
        if (memcmp(Name.data()+6, "onstructor", 10) != 0)
2953
          break;
2954
        return AttributeCommonInfo::AT_Constructor;	 // "gnu::constructor"
2955
      case 'f':	 // 1 string to match.
2956
        if (memcmp(Name.data()+6, "allthrough", 10) != 0)
2957
          break;
2958
        return AttributeCommonInfo::AT_FallThrough;	 // "gnu::fallthrough"
2959
      case 'n':	 // 1 string to match.
2960
        if (memcmp(Name.data()+6, "omicromips", 10) != 0)
2961
          break;
2962
        return AttributeCommonInfo::AT_NoMicroMips;	 // "gnu::nomicromips"
2963
      case 'v':	 // 1 string to match.
2964
        if (memcmp(Name.data()+6, "ector_size", 10) != 0)
2965
          break;
2966
        return AttributeCommonInfo::AT_VectorSize;	 // "gnu::vector_size"
2967
      case 'w':	 // 1 string to match.
2968
        if (memcmp(Name.data()+6, "arn_unused", 10) != 0)
2969
          break;
2970
        return AttributeCommonInfo::AT_WarnUnused;	 // "gnu::warn_unused"
2971
      }
2972
      break;
2973
    }
2974
    break;
2975
  case 17:	 // 8 strings to match.
2976
    switch (Name[0]) {
2977
    default: break;
2978
    case 'c':	 // 7 strings to match.
2979
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
2980
        break;
2981
      switch (Name[7]) {
2982
      default: break;
2983
      case 'c':	 // 3 strings to match.
2984
        switch (Name[8]) {
2985
        default: break;
2986
        case 'a':	 // 1 string to match.
2987
          if (memcmp(Name.data()+9, "pability", 8) != 0)
2988
            break;
2989
          return AttributeCommonInfo::AT_Capability;	 // "clang::capability"
2990
        case 'o':	 // 2 strings to match.
2991
          if (Name[9] != 'n')
2992
            break;
2993
          switch (Name[10]) {
2994
          default: break;
2995
          case 's':	 // 1 string to match.
2996
            if (memcmp(Name.data()+11, "umable", 6) != 0)
2997
              break;
2998
            return AttributeCommonInfo::AT_Consumable;	 // "clang::consumable"
2999
          case 'v':	 // 1 string to match.
3000
            if (memcmp(Name.data()+11, "ergent", 6) != 0)
3001
              break;
3002
            return AttributeCommonInfo::AT_Convergent;	 // "clang::convergent"
3003
          }
3004
          break;
3005
        }
3006
        break;
3007
      case 'n':	 // 2 strings to match.
3008
        if (memcmp(Name.data()+8, "o_", 2) != 0)
3009
          break;
3010
        switch (Name[10]) {
3011
        default: break;
3012
        case 'b':	 // 1 string to match.
3013
          if (memcmp(Name.data()+11, "uiltin", 6) != 0)
3014
            break;
3015
          return AttributeCommonInfo::AT_NoBuiltin;	 // "clang::no_builtin"
3016
        case 'd':	 // 1 string to match.
3017
          if (memcmp(Name.data()+11, "estroy", 6) != 0)
3018
            break;
3019
          return AttributeCommonInfo::AT_NoDestroy;	 // "clang::no_destroy"
3020
        }
3021
        break;
3022
      case 'u':	 // 1 string to match.
3023
        if (memcmp(Name.data()+8, "se_handle", 9) != 0)
3024
          break;
3025
        return AttributeCommonInfo::AT_UseHandle;	 // "clang::use_handle"
3026
      case 'v':	 // 1 string to match.
3027
        if (memcmp(Name.data()+8, "ectorcall", 9) != 0)
3028
          break;
3029
        return AttributeCommonInfo::AT_VectorCall;	 // "clang::vectorcall"
3030
      }
3031
      break;
3032
    case 'n':	 // 1 string to match.
3033
      if (memcmp(Name.data()+1, "o_unique_address", 16) != 0)
3034
        break;
3035
      return AttributeCommonInfo::AT_NoUniqueAddress;	 // "no_unique_address"
3036
    }
3037
    break;
3038
  case 18:	 // 25 strings to match.
3039
    switch (Name[0]) {
3040
    default: break;
3041
    case 'c':	 // 21 strings to match.
3042
      switch (Name[1]) {
3043
      default: break;
3044
      case 'a':	 // 1 string to match.
3045
        if (memcmp(Name.data()+2, "rries_dependency", 16) != 0)
3046
          break;
3047
        return AttributeCommonInfo::AT_CarriesDependency;	 // "carries_dependency"
3048
      case 'l':	 // 20 strings to match.
3049
        if (memcmp(Name.data()+2, "ang::", 5) != 0)
3050
          break;
3051
        switch (Name[7]) {
3052
        default: break;
3053
        case 'c':	 // 2 strings to match.
3054
          switch (Name[8]) {
3055
          default: break;
3056
          case 'a':	 // 1 string to match.
3057
            if (memcmp(Name.data()+9, "lled_once", 9) != 0)
3058
              break;
3059
            return AttributeCommonInfo::AT_CalledOnce;	 // "clang::called_once"
3060
          case 'f':	 // 1 string to match.
3061
            if (memcmp(Name.data()+9, "_consumed", 9) != 0)
3062
              break;
3063
            return AttributeCommonInfo::AT_CFConsumed;	 // "clang::cf_consumed"
3064
          }
3065
          break;
3066
        case 'e':	 // 2 strings to match.
3067
          switch (Name[8]) {
3068
          default: break;
3069
          case 'n':	 // 1 string to match.
3070
            if (memcmp(Name.data()+9, "force_tcb", 9) != 0)
3071
              break;
3072
            return AttributeCommonInfo::AT_EnforceTCB;	 // "clang::enforce_tcb"
3073
          case 'x':	 // 1 string to match.
3074
            if (memcmp(Name.data()+9, "port_name", 9) != 0)
3075
              break;
3076
            return AttributeCommonInfo::AT_WebAssemblyExportName;	 // "clang::export_name"
3077
          }
3078
          break;
3079
        case 'f':	 // 1 string to match.
3080
          if (memcmp(Name.data()+8, "allthrough", 10) != 0)
3081
            break;
3082
          return AttributeCommonInfo::AT_FallThrough;	 // "clang::fallthrough"
3083
        case 'g':	 // 1 string to match.
3084
          if (memcmp(Name.data()+8, "uarded_var", 10) != 0)
3085
            break;
3086
          return AttributeCommonInfo::AT_GuardedVar;	 // "clang::guarded_var"
3087
        case 'i':	 // 1 string to match.
3088
          if (memcmp(Name.data()+8, "mport_name", 10) != 0)
3089
            break;
3090
          return AttributeCommonInfo::AT_WebAssemblyImportName;	 // "clang::import_name"
3091
        case 'm':	 // 2 strings to match.
3092
          if (Name[8] != 'a')
3093
            break;
3094
          switch (Name[9]) {
3095
          default: break;
3096
          case 't':	 // 1 string to match.
3097
            if (memcmp(Name.data()+10, "rix_type", 8) != 0)
3098
              break;
3099
            return AttributeCommonInfo::AT_MatrixType;	 // "clang::matrix_type"
3100
          case 'y':	 // 1 string to match.
3101
            if (memcmp(Name.data()+10, "be_undef", 8) != 0)
3102
              break;
3103
            return AttributeCommonInfo::AT_MaybeUndef;	 // "clang::maybe_undef"
3104
          }
3105
          break;
3106
        case 'n':	 // 3 strings to match.
3107
          switch (Name[8]) {
3108
          default: break;
3109
          case 'o':	 // 2 strings to match.
3110
            switch (Name[9]) {
3111
            default: break;
3112
            case '_':	 // 1 string to match.
3113
              if (memcmp(Name.data()+10, "sanitize", 8) != 0)
3114
                break;
3115
              return AttributeCommonInfo::AT_NoSanitize;	 // "clang::no_sanitize"
3116
            case 'd':	 // 1 string to match.
3117
              if (memcmp(Name.data()+10, "uplicate", 8) != 0)
3118
                break;
3119
              return AttributeCommonInfo::AT_NoDuplicate;	 // "clang::noduplicate"
3120
            }
3121
            break;
3122
          case 's':	 // 1 string to match.
3123
            if (memcmp(Name.data()+9, "_consumed", 9) != 0)
3124
              break;
3125
            return AttributeCommonInfo::AT_NSConsumed;	 // "clang::ns_consumed"
3126
          }
3127
          break;
3128
        case 'o':	 // 3 strings to match.
3129
          switch (Name[8]) {
3130
          default: break;
3131
          case 'b':	 // 2 strings to match.
3132
            if (memcmp(Name.data()+9, "jc_", 3) != 0)
3133
              break;
3134
            switch (Name[12]) {
3135
            default: break;
3136
            case 'b':	 // 1 string to match.
3137
              if (memcmp(Name.data()+13, "ridge", 5) != 0)
3138
                break;
3139
              return AttributeCommonInfo::AT_ObjCBridge;	 // "clang::objc_bridge"
3140
            case 'd':	 // 1 string to match.
3141
              if (memcmp(Name.data()+13, "irect", 5) != 0)
3142
                break;
3143
              return AttributeCommonInfo::AT_ObjCDirect;	 // "clang::objc_direct"
3144
            }
3145
            break;
3146
          case 's':	 // 1 string to match.
3147
            if (memcmp(Name.data()+9, "_consumed", 9) != 0)
3148
              break;
3149
            return AttributeCommonInfo::AT_OSConsumed;	 // "clang::os_consumed"
3150
          }
3151
          break;
3152
        case 's':	 // 2 strings to match.
3153
          switch (Name[8]) {
3154
          default: break;
3155
          case 'w':	 // 1 string to match.
3156
            if (memcmp(Name.data()+9, "ift_async", 9) != 0)
3157
              break;
3158
            return AttributeCommonInfo::AT_SwiftAsync;	 // "clang::swift_async"
3159
          case 'y':	 // 1 string to match.
3160
            if (memcmp(Name.data()+9, "cl_kernel", 9) != 0)
3161
              break;
3162
            return AttributeCommonInfo::AT_SYCLKernel;	 // "clang::sycl_kernel"
3163
          }
3164
          break;
3165
        case 't':	 // 1 string to match.
3166
          if (memcmp(Name.data()+8, "rivial_abi", 10) != 0)
3167
            break;
3168
          return AttributeCommonInfo::AT_TrivialABI;	 // "clang::trivial_abi"
3169
        case 'u':	 // 1 string to match.
3170
          if (memcmp(Name.data()+8, "navailable", 10) != 0)
3171
            break;
3172
          return AttributeCommonInfo::AT_Unavailable;	 // "clang::unavailable"
3173
        case 'w':	 // 1 string to match.
3174
          if (memcmp(Name.data()+8, "eak_import", 10) != 0)
3175
            break;
3176
          return AttributeCommonInfo::AT_WeakImport;	 // "clang::weak_import"
3177
        }
3178
        break;
3179
      }
3180
      break;
3181
    case 'g':	 // 4 strings to match.
3182
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
3183
        break;
3184
      switch (Name[5]) {
3185
      default: break;
3186
      case 'a':	 // 1 string to match.
3187
        if (memcmp(Name.data()+6, "lways_inline", 12) != 0)
3188
          break;
3189
        return AttributeCommonInfo::AT_AlwaysInline;	 // "gnu::always_inline"
3190
      case 'i':	 // 1 string to match.
3191
        if (memcmp(Name.data()+6, "nit_priority", 12) != 0)
3192
          break;
3193
        return AttributeCommonInfo::AT_InitPriority;	 // "gnu::init_priority"
3194
      case 'r':	 // 1 string to match.
3195
        if (memcmp(Name.data()+6, "eturns_twice", 12) != 0)
3196
          break;
3197
        return AttributeCommonInfo::AT_ReturnsTwice;	 // "gnu::returns_twice"
3198
      case 't':	 // 1 string to match.
3199
        if (memcmp(Name.data()+6, "arget_clones", 12) != 0)
3200
          break;
3201
        return AttributeCommonInfo::AT_TargetClones;	 // "gnu::target_clones"
3202
      }
3203
      break;
3204
    }
3205
    break;
3206
  case 19:	 // 12 strings to match.
3207
    switch (Name[0]) {
3208
    default: break;
3209
    case 'c':	 // 9 strings to match.
3210
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
3211
        break;
3212
      switch (Name[7]) {
3213
      default: break;
3214
      case 'a':	 // 1 string to match.
3215
        if (memcmp(Name.data()+8, "vailability", 11) != 0)
3216
          break;
3217
        return AttributeCommonInfo::AT_Availability;	 // "clang::availability"
3218
      case 'b':	 // 2 strings to match.
3219
        if (memcmp(Name.data()+8, "tf_", 3) != 0)
3220
          break;
3221
        switch (Name[11]) {
3222
        default: break;
3223
        case 'd':	 // 1 string to match.
3224
          if (memcmp(Name.data()+12, "ecl_tag", 7) != 0)
3225
            break;
3226
          return AttributeCommonInfo::AT_BTFDeclTag;	 // "clang::btf_decl_tag"
3227
        case 't':	 // 1 string to match.
3228
          if (memcmp(Name.data()+12, "ype_tag", 7) != 0)
3229
            break;
3230
          return AttributeCommonInfo::AT_BTFTypeTag;	 // "clang::btf_type_tag"
3231
        }
3232
        break;
3233
      case 'c':	 // 2 strings to match.
3234
        if (memcmp(Name.data()+8, "pu_", 3) != 0)
3235
          break;
3236
        switch (Name[11]) {
3237
        default: break;
3238
        case 'd':	 // 1 string to match.
3239
          if (memcmp(Name.data()+12, "ispatch", 7) != 0)
3240
            break;
3241
          return AttributeCommonInfo::AT_CPUDispatch;	 // "clang::cpu_dispatch"
3242
        case 's':	 // 1 string to match.
3243
          if (memcmp(Name.data()+12, "pecific", 7) != 0)
3244
            break;
3245
          return AttributeCommonInfo::AT_CPUSpecific;	 // "clang::cpu_specific"
3246
        }
3247
        break;
3248
      case 'o':	 // 3 strings to match.
3249
        switch (Name[8]) {
3250
        default: break;
3251
        case 'b':	 // 1 string to match.
3252
          if (memcmp(Name.data()+9, "jc_boxable", 10) != 0)
3253
            break;
3254
          return AttributeCommonInfo::AT_ObjCBoxable;	 // "clang::objc_boxable"
3255
        case 'p':	 // 1 string to match.
3256
          if (memcmp(Name.data()+9, "encl_local", 10) != 0)
3257
            break;
3258
          return AttributeCommonInfo::AT_OpenCLLocalAddressSpace;	 // "clang::opencl_local"
3259
        case 'v':	 // 1 string to match.
3260
          if (memcmp(Name.data()+9, "erloadable", 10) != 0)
3261
            break;
3262
          return AttributeCommonInfo::AT_Overloadable;	 // "clang::overloadable"
3263
        }
3264
        break;
3265
      case 'p':	 // 1 string to match.
3266
        if (memcmp(Name.data()+8, "reserve_all", 11) != 0)
3267
          break;
3268
        return AttributeCommonInfo::AT_PreserveAll;	 // "clang::preserve_all"
3269
      }
3270
      break;
3271
    case 'g':	 // 3 strings to match.
3272
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
3273
        break;
3274
      switch (Name[5]) {
3275
      default: break;
3276
      case 'a':	 // 1 string to match.
3277
        if (memcmp(Name.data()+6, "ssume_aligned", 13) != 0)
3278
          break;
3279
        return AttributeCommonInfo::AT_AssumeAligned;	 // "gnu::assume_aligned"
3280
      case 'n':	 // 1 string to match.
3281
        if (memcmp(Name.data()+6, "o_split_stack", 13) != 0)
3282
          break;
3283
        return AttributeCommonInfo::AT_NoSplitStack;	 // "gnu::no_split_stack"
3284
      case 't':	 // 1 string to match.
3285
        if (memcmp(Name.data()+6, "arget_version", 13) != 0)
3286
          break;
3287
        return AttributeCommonInfo::AT_TargetVersion;	 // "gnu::target_version"
3288
      }
3289
      break;
3290
    }
3291
    break;
3292
  case 20:	 // 17 strings to match.
3293
    switch (Name[0]) {
3294
    default: break;
3295
    case 'c':	 // 15 strings to match.
3296
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
3297
        break;
3298
      switch (Name[7]) {
3299
      default: break;
3300
      case 'a':	 // 4 strings to match.
3301
        switch (Name[8]) {
3302
        default: break;
3303
        case 'd':	 // 1 string to match.
3304
          if (memcmp(Name.data()+9, "dress_space", 11) != 0)
3305
            break;
3306
          return AttributeCommonInfo::AT_AddressSpace;	 // "clang::address_space"
3307
        case 'l':	 // 1 string to match.
3308
          if (memcmp(Name.data()+9, "ways_inline", 11) != 0)
3309
            break;
3310
          return AttributeCommonInfo::AT_AlwaysInline;	 // "clang::always_inline"
3311
        case 'm':	 // 1 string to match.
3312
          if (memcmp(Name.data()+9, "dgpu_kernel", 11) != 0)
3313
            break;
3314
          return AttributeCommonInfo::AT_AMDGPUKernelCall;	 // "clang::amdgpu_kernel"
3315
        case 'n':	 // 1 string to match.
3316
          if (memcmp(Name.data()+9, "notate_type", 11) != 0)
3317
            break;
3318
          return AttributeCommonInfo::AT_AnnotateType;	 // "clang::annotate_type"
3319
        }
3320
        break;
3321
      case 'b':	 // 1 string to match.
3322
        if (memcmp(Name.data()+8, "uiltin_alias", 12) != 0)
3323
          break;
3324
        return AttributeCommonInfo::AT_BuiltinAlias;	 // "clang::builtin_alias"
3325
      case 'c':	 // 1 string to match.
3326
        if (memcmp(Name.data()+8, "allable_when", 12) != 0)
3327
          break;
3328
        return AttributeCommonInfo::AT_CallableWhen;	 // "clang::callable_when"
3329
      case 'i':	 // 1 string to match.
3330
        if (memcmp(Name.data()+8, "mport_module", 12) != 0)
3331
          break;
3332
        return AttributeCommonInfo::AT_WebAssemblyImportModule;	 // "clang::import_module"
3333
      case 'l':	 // 1 string to match.
3334
        if (memcmp(Name.data()+8, "ifetimebound", 12) != 0)
3335
          break;
3336
        return AttributeCommonInfo::AT_LifetimeBound;	 // "clang::lifetimebound"
3337
      case 'o':	 // 1 string to match.
3338
        if (memcmp(Name.data()+8, "pencl_global", 12) != 0)
3339
          break;
3340
        return AttributeCommonInfo::AT_OpenCLGlobalAddressSpace;	 // "clang::opencl_global"
3341
      case 'p':	 // 1 string to match.
3342
        if (memcmp(Name.data()+8, "reserve_most", 12) != 0)
3343
          break;
3344
        return AttributeCommonInfo::AT_PreserveMost;	 // "clang::preserve_most"
3345
      case 'r':	 // 1 string to match.
3346
        if (memcmp(Name.data()+8, "einitializes", 12) != 0)
3347
          break;
3348
        return AttributeCommonInfo::AT_Reinitializes;	 // "clang::reinitializes"
3349
      case 's':	 // 2 strings to match.
3350
        switch (Name[8]) {
3351
        default: break;
3352
        case 'e':	 // 1 string to match.
3353
          if (memcmp(Name.data()+9, "t_typestate", 11) != 0)
3354
            break;
3355
          return AttributeCommonInfo::AT_SetTypestate;	 // "clang::set_typestate"
3356
        case 'w':	 // 1 string to match.
3357
          if (memcmp(Name.data()+9, "ift_context", 11) != 0)
3358
            break;
3359
          return AttributeCommonInfo::AT_SwiftContext;	 // "clang::swift_context"
3360
        }
3361
        break;
3362
      case 'u':	 // 1 string to match.
3363
        if (memcmp(Name.data()+8, "ninitialized", 12) != 0)
3364
          break;
3365
        return AttributeCommonInfo::AT_Uninitialized;	 // "clang::uninitialized"
3366
      case 'x':	 // 1 string to match.
3367
        if (memcmp(Name.data()+8, "ray_log_args", 12) != 0)
3368
          break;
3369
        return AttributeCommonInfo::AT_XRayLogArgs;	 // "clang::xray_log_args"
3370
      }
3371
      break;
3372
    case 'g':	 // 2 strings to match.
3373
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
3374
        break;
3375
      switch (Name[5]) {
3376
      default: break;
3377
      case 'f':	 // 1 string to match.
3378
        if (memcmp(Name.data()+6, "unction_return", 14) != 0)
3379
          break;
3380
        return AttributeCommonInfo::AT_FunctionReturnThunks;	 // "gnu::function_return"
3381
      case 'r':	 // 1 string to match.
3382
        if (memcmp(Name.data()+6, "eturns_nonnull", 14) != 0)
3383
          break;
3384
        return AttributeCommonInfo::AT_ReturnsNonNull;	 // "gnu::returns_nonnull"
3385
      }
3386
      break;
3387
    }
3388
    break;
3389
  case 21:	 // 13 strings to match.
3390
    switch (Name[0]) {
3391
    default: break;
3392
    case 'c':	 // 12 strings to match.
3393
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
3394
        break;
3395
      switch (Name[7]) {
3396
      default: break;
3397
      case 'a':	 // 2 strings to match.
3398
        switch (Name[8]) {
3399
        default: break;
3400
        case 'c':	 // 1 string to match.
3401
          if (memcmp(Name.data()+9, "quire_handle", 12) != 0)
3402
            break;
3403
          return AttributeCommonInfo::AT_AcquireHandle;	 // "clang::acquire_handle"
3404
        case 'l':	 // 1 string to match.
3405
          if (memcmp(Name.data()+9, "ways_destroy", 12) != 0)
3406
            break;
3407
          return AttributeCommonInfo::AT_AlwaysDestroy;	 // "clang::always_destroy"
3408
        }
3409
        break;
3410
      case 'i':	 // 1 string to match.
3411
        if (memcmp(Name.data()+8, "ntel_ocl_bicc", 13) != 0)
3412
          break;
3413
        return AttributeCommonInfo::AT_IntelOclBicc;	 // "clang::intel_ocl_bicc"
3414
      case 'o':	 // 4 strings to match.
3415
        switch (Name[8]) {
3416
        default: break;
3417
        case 'b':	 // 2 strings to match.
3418
          if (memcmp(Name.data()+9, "jc_", 3) != 0)
3419
            break;
3420
          switch (Name[12]) {
3421
          default: break;
3422
          case 'e':	 // 1 string to match.
3423
            if (memcmp(Name.data()+13, "xception", 8) != 0)
3424
              break;
3425
            return AttributeCommonInfo::AT_ObjCException;	 // "clang::objc_exception"
3426
          case 'o':	 // 1 string to match.
3427
            if (memcmp(Name.data()+13, "wnership", 8) != 0)
3428
              break;
3429
            return AttributeCommonInfo::AT_ObjCOwnership;	 // "clang::objc_ownership"
3430
          }
3431
          break;
3432
        case 'p':	 // 2 strings to match.
3433
          if (memcmp(Name.data()+9, "encl_", 5) != 0)
3434
            break;
3435
          switch (Name[14]) {
3436
          default: break;
3437
          case 'g':	 // 1 string to match.
3438
            if (memcmp(Name.data()+15, "eneric", 6) != 0)
3439
              break;
3440
            return AttributeCommonInfo::AT_OpenCLGenericAddressSpace;	 // "clang::opencl_generic"
3441
          case 'p':	 // 1 string to match.
3442
            if (memcmp(Name.data()+15, "rivate", 6) != 0)
3443
              break;
3444
            return AttributeCommonInfo::AT_OpenCLPrivateAddressSpace;	 // "clang::opencl_private"
3445
          }
3446
          break;
3447
        }
3448
        break;
3449
      case 'p':	 // 2 strings to match.
3450
        switch (Name[8]) {
3451
        default: break;
3452
        case 'r':	 // 1 string to match.
3453
          if (memcmp(Name.data()+9, "eferred_name", 12) != 0)
3454
            break;
3455
          return AttributeCommonInfo::AT_PreferredName;	 // "clang::preferred_name"
3456
        case 't':	 // 1 string to match.
3457
          if (memcmp(Name.data()+9, "_guarded_var", 12) != 0)
3458
            break;
3459
          return AttributeCommonInfo::AT_PtGuardedVar;	 // "clang::pt_guarded_var"
3460
        }
3461
        break;
3462
      case 'r':	 // 1 string to match.
3463
        if (memcmp(Name.data()+8, "elease_handle", 13) != 0)
3464
          break;
3465
        return AttributeCommonInfo::AT_ReleaseHandle;	 // "clang::release_handle"
3466
      case 's':	 // 1 string to match.
3467
        if (memcmp(Name.data()+8, "wiftasynccall", 13) != 0)
3468
          break;
3469
        return AttributeCommonInfo::AT_SwiftAsyncCall;	 // "clang::swiftasynccall"
3470
      case 't':	 // 1 string to match.
3471
        if (memcmp(Name.data()+8, "est_typestate", 13) != 0)
3472
          break;
3473
        return AttributeCommonInfo::AT_TestTypestate;	 // "clang::test_typestate"
3474
      }
3475
      break;
3476
    case 'g':	 // 1 string to match.
3477
      if (memcmp(Name.data()+1, "nu::randomize_layout", 20) != 0)
3478
        break;
3479
      return AttributeCommonInfo::AT_RandomizeLayout;	 // "gnu::randomize_layout"
3480
    }
3481
    break;
3482
  case 22:	 // 15 strings to match.
3483
    switch (Name[0]) {
3484
    default: break;
3485
    case 'c':	 // 14 strings to match.
3486
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
3487
        break;
3488
      switch (Name[7]) {
3489
      default: break;
3490
      case 'a':	 // 3 strings to match.
3491
        switch (Name[8]) {
3492
        default: break;
3493
        case 'a':	 // 1 string to match.
3494
          if (memcmp(Name.data()+9, "rch64_sve_pcs", 13) != 0)
3495
            break;
3496
          return AttributeCommonInfo::AT_AArch64SVEPcs;	 // "clang::aarch64_sve_pcs"
3497
        case 'm':	 // 2 strings to match.
3498
          if (memcmp(Name.data()+9, "dgpu_num_", 9) != 0)
3499
            break;
3500
          switch (Name[18]) {
3501
          default: break;
3502
          case 's':	 // 1 string to match.
3503
            if (memcmp(Name.data()+19, "gpr", 3) != 0)
3504
              break;
3505
            return AttributeCommonInfo::AT_AMDGPUNumSGPR;	 // "clang::amdgpu_num_sgpr"
3506
          case 'v':	 // 1 string to match.
3507
            if (memcmp(Name.data()+19, "gpr", 3) != 0)
3508
              break;
3509
            return AttributeCommonInfo::AT_AMDGPUNumVGPR;	 // "clang::amdgpu_num_vgpr"
3510
          }
3511
          break;
3512
        }
3513
        break;
3514
      case 'n':	 // 1 string to match.
3515
        if (memcmp(Name.data()+8, "ot_tail_called", 14) != 0)
3516
          break;
3517
        return AttributeCommonInfo::AT_NotTailCalled;	 // "clang::not_tail_called"
3518
      case 'o':	 // 5 strings to match.
3519
        switch (Name[8]) {
3520
        default: break;
3521
        case 'b':	 // 2 strings to match.
3522
          if (memcmp(Name.data()+9, "jc_", 3) != 0)
3523
            break;
3524
          switch (Name[12]) {
3525
          default: break;
3526
          case 'c':	 // 1 string to match.
3527
            if (memcmp(Name.data()+13, "lass_stub", 9) != 0)
3528
              break;
3529
            return AttributeCommonInfo::AT_ObjCClassStub;	 // "clang::objc_class_stub"
3530
          case 'r':	 // 1 string to match.
3531
            if (memcmp(Name.data()+13, "oot_class", 9) != 0)
3532
              break;
3533
            return AttributeCommonInfo::AT_ObjCRootClass;	 // "clang::objc_root_class"
3534
          }
3535
          break;
3536
        case 'p':	 // 1 string to match.
3537
          if (memcmp(Name.data()+9, "encl_constant", 13) != 0)
3538
            break;
3539
          return AttributeCommonInfo::AT_OpenCLConstantAddressSpace;	 // "clang::opencl_constant"
3540
        case 'w':	 // 2 strings to match.
3541
          if (memcmp(Name.data()+9, "nership_", 8) != 0)
3542
            break;
3543
          switch (Name[17]) {
3544
          default: break;
3545
          case 'h':	 // 1 string to match.
3546
            if (memcmp(Name.data()+18, "olds", 4) != 0)
3547
              break;
3548
            return AttributeCommonInfo::AT_Ownership;	 // "clang::ownership_holds"
3549
          case 't':	 // 1 string to match.
3550
            if (memcmp(Name.data()+18, "akes", 4) != 0)
3551
              break;
3552
            return AttributeCommonInfo::AT_Ownership;	 // "clang::ownership_takes"
3553
          }
3554
          break;
3555
        }
3556
        break;
3557
      case 'p':	 // 1 string to match.
3558
        if (memcmp(Name.data()+8, "aram_typestate", 14) != 0)
3559
          break;
3560
        return AttributeCommonInfo::AT_ParamTypestate;	 // "clang::param_typestate"
3561
      case 's':	 // 1 string to match.
3562
        if (memcmp(Name.data()+8, "coped_lockable", 14) != 0)
3563
          break;
3564
        return AttributeCommonInfo::AT_ScopedLockable;	 // "clang::scoped_lockable"
3565
      case 't':	 // 1 string to match.
3566
        if (memcmp(Name.data()+8, "ype_visibility", 14) != 0)
3567
          break;
3568
        return AttributeCommonInfo::AT_TypeVisibility;	 // "clang::type_visibility"
3569
      case 'u':	 // 2 strings to match.
3570
        switch (Name[8]) {
3571
        default: break;
3572
        case 'n':	 // 1 string to match.
3573
          if (memcmp(Name.data()+9, "lock_function", 13) != 0)
3574
            break;
3575
          return AttributeCommonInfo::AT_ReleaseCapability;	 // "clang::unlock_function"
3576
        case 's':	 // 1 string to match.
3577
          if (memcmp(Name.data()+9, "ing_if_exists", 13) != 0)
3578
            break;
3579
          return AttributeCommonInfo::AT_UsingIfExists;	 // "clang::using_if_exists"
3580
        }
3581
        break;
3582
      }
3583
      break;
3584
    case 'g':	 // 1 string to match.
3585
      if (memcmp(Name.data()+1, "nu::transparent_union", 21) != 0)
3586
        break;
3587
      return AttributeCommonInfo::AT_TransparentUnion;	 // "gnu::transparent_union"
3588
    }
3589
    break;
3590
  case 23:	 // 11 strings to match.
3591
    switch (Name[0]) {
3592
    default: break;
3593
    case 'c':	 // 9 strings to match.
3594
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
3595
        break;
3596
      switch (Name[7]) {
3597
      default: break;
3598
      case 'e':	 // 1 string to match.
3599
        if (memcmp(Name.data()+8, "nforce_tcb_leaf", 15) != 0)
3600
          break;
3601
        return AttributeCommonInfo::AT_EnforceTCBLeaf;	 // "clang::enforce_tcb_leaf"
3602
      case 'i':	 // 1 string to match.
3603
        if (memcmp(Name.data()+8, "nternal_linkage", 15) != 0)
3604
          break;
3605
        return AttributeCommonInfo::AT_InternalLinkage;	 // "clang::internal_linkage"
3606
      case 'm':	 // 1 string to match.
3607
        if (memcmp(Name.data()+8, "in_vector_width", 15) != 0)
3608
          break;
3609
        return AttributeCommonInfo::AT_MinVectorWidth;	 // "clang::min_vector_width"
3610
      case 'n':	 // 2 strings to match.
3611
        switch (Name[8]) {
3612
        default: break;
3613
        case 'e':	 // 1 string to match.
3614
          if (memcmp(Name.data()+9, "on_vector_type", 14) != 0)
3615
            break;
3616
          return AttributeCommonInfo::AT_NeonVectorType;	 // "clang::neon_vector_type"
3617
        case 's':	 // 1 string to match.
3618
          if (memcmp(Name.data()+9, "_consumes_self", 14) != 0)
3619
            break;
3620
          return AttributeCommonInfo::AT_NSConsumesSelf;	 // "clang::ns_consumes_self"
3621
        }
3622
        break;
3623
      case 'o':	 // 1 string to match.
3624
        if (memcmp(Name.data()+8, "s_consumes_this", 15) != 0)
3625
          break;
3626
        return AttributeCommonInfo::AT_OSConsumesThis;	 // "clang::os_consumes_this"
3627
      case 'p':	 // 1 string to match.
3628
        if (memcmp(Name.data()+8, "ass_object_size", 15) != 0)
3629
          break;
3630
        return AttributeCommonInfo::AT_PassObjectSize;	 // "clang::pass_object_size"
3631
      case 'r':	 // 1 string to match.
3632
        if (memcmp(Name.data()+8, "eturn_typestate", 15) != 0)
3633
          break;
3634
        return AttributeCommonInfo::AT_ReturnTypestate;	 // "clang::return_typestate"
3635
      case 's':	 // 1 string to match.
3636
        if (memcmp(Name.data()+8, "tandalone_debug", 15) != 0)
3637
          break;
3638
        return AttributeCommonInfo::AT_StandaloneDebug;	 // "clang::standalone_debug"
3639
      }
3640
      break;
3641
    case 'g':	 // 2 strings to match.
3642
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
3643
        break;
3644
      switch (Name[5]) {
3645
      default: break;
3646
      case 'n':	 // 1 string to match.
3647
        if (memcmp(Name.data()+6, "o_sanitize_thread", 17) != 0)
3648
          break;
3649
        return AttributeCommonInfo::AT_NoSanitizeSpecific;	 // "gnu::no_sanitize_thread"
3650
      case 'w':	 // 1 string to match.
3651
        if (memcmp(Name.data()+6, "arn_unused_result", 17) != 0)
3652
          break;
3653
        return AttributeCommonInfo::AT_WarnUnusedResult;	 // "gnu::warn_unused_result"
3654
      }
3655
      break;
3656
    }
3657
    break;
3658
  case 24:	 // 8 strings to match.
3659
    switch (Name[0]) {
3660
    default: break;
3661
    case 'c':	 // 5 strings to match.
3662
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
3663
        break;
3664
      switch (Name[7]) {
3665
      default: break;
3666
      case 'a':	 // 1 string to match.
3667
        if (memcmp(Name.data()+8, "ssert_capability", 16) != 0)
3668
          break;
3669
        return AttributeCommonInfo::AT_AssertCapability;	 // "clang::assert_capability"
3670
      case 'o':	 // 2 strings to match.
3671
        switch (Name[8]) {
3672
        default: break;
3673
        case 'b':	 // 1 string to match.
3674
          if (memcmp(Name.data()+9, "jc_runtime_name", 15) != 0)
3675
            break;
3676
          return AttributeCommonInfo::AT_ObjCRuntimeName;	 // "clang::objc_runtime_name"
3677
        case 'w':	 // 1 string to match.
3678
          if (memcmp(Name.data()+9, "nership_returns", 15) != 0)
3679
            break;
3680
          return AttributeCommonInfo::AT_Ownership;	 // "clang::ownership_returns"
3681
        }
3682
        break;
3683
      case 's':	 // 2 strings to match.
3684
        switch (Name[8]) {
3685
        default: break;
3686
        case 'h':	 // 1 string to match.
3687
          if (memcmp(Name.data()+9, "ared_capability", 15) != 0)
3688
            break;
3689
          return AttributeCommonInfo::AT_Capability;	 // "clang::shared_capability"
3690
        case 'w':	 // 1 string to match.
3691
          if (memcmp(Name.data()+9, "ift_async_error", 15) != 0)
3692
            break;
3693
          return AttributeCommonInfo::AT_SwiftAsyncError;	 // "clang::swift_async_error"
3694
        }
3695
        break;
3696
      }
3697
      break;
3698
    case 'g':	 // 3 strings to match.
3699
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
3700
        break;
3701
      switch (Name[5]) {
3702
      default: break;
3703
      case 'n':	 // 2 strings to match.
3704
        if (memcmp(Name.data()+6, "o_", 2) != 0)
3705
          break;
3706
        switch (Name[8]) {
3707
        default: break;
3708
        case 'r':	 // 1 string to match.
3709
          if (memcmp(Name.data()+9, "andomize_layout", 15) != 0)
3710
            break;
3711
          return AttributeCommonInfo::AT_NoRandomizeLayout;	 // "gnu::no_randomize_layout"
3712
        case 's':	 // 1 string to match.
3713
          if (memcmp(Name.data()+9, "anitize_address", 15) != 0)
3714
            break;
3715
          return AttributeCommonInfo::AT_NoSanitizeSpecific;	 // "gnu::no_sanitize_address"
3716
        }
3717
        break;
3718
      case 'z':	 // 1 string to match.
3719
        if (memcmp(Name.data()+6, "ero_call_used_regs", 18) != 0)
3720
          break;
3721
        return AttributeCommonInfo::AT_ZeroCallUsedRegs;	 // "gnu::zero_call_used_regs"
3722
      }
3723
      break;
3724
    }
3725
    break;
3726
  case 25:	 // 15 strings to match.
3727
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
3728
      break;
3729
    switch (Name[7]) {
3730
    default: break;
3731
    case 'a':	 // 2 strings to match.
3732
      switch (Name[8]) {
3733
      default: break;
3734
      case 'a':	 // 1 string to match.
3735
        if (memcmp(Name.data()+9, "rch64_vector_pcs", 16) != 0)
3736
          break;
3737
        return AttributeCommonInfo::AT_AArch64VectorPcs;	 // "clang::aarch64_vector_pcs"
3738
      case 'c':	 // 1 string to match.
3739
        if (memcmp(Name.data()+9, "quire_capability", 16) != 0)
3740
          break;
3741
        return AttributeCommonInfo::AT_AcquireCapability;	 // "clang::acquire_capability"
3742
      }
3743
      break;
3744
    case 'd':	 // 1 string to match.
3745
      if (memcmp(Name.data()+8, "isable_tail_calls", 17) != 0)
3746
        break;
3747
      return AttributeCommonInfo::AT_DisableTailCalls;	 // "clang::disable_tail_calls"
3748
    case 'e':	 // 1 string to match.
3749
      if (memcmp(Name.data()+8, "num_extensibility", 17) != 0)
3750
        break;
3751
      return AttributeCommonInfo::AT_EnumExtensibility;	 // "clang::enum_extensibility"
3752
    case 'i':	 // 1 string to match.
3753
      if (memcmp(Name.data()+8, "boutletcollection", 17) != 0)
3754
        break;
3755
      return AttributeCommonInfo::AT_IBOutletCollection;	 // "clang::iboutletcollection"
3756
    case 'm':	 // 1 string to match.
3757
      if (memcmp(Name.data()+8, "ig_server_routine", 17) != 0)
3758
        break;
3759
      return AttributeCommonInfo::AT_MIGServerRoutine;	 // "clang::mig_server_routine"
3760
    case 'n':	 // 2 strings to match.
3761
      if (memcmp(Name.data()+8, "o_s", 3) != 0)
3762
        break;
3763
      switch (Name[11]) {
3764
      default: break;
3765
      case 'a':	 // 1 string to match.
3766
        if (memcmp(Name.data()+12, "nitize_memory", 13) != 0)
3767
          break;
3768
        return AttributeCommonInfo::AT_NoSanitizeSpecific;	 // "clang::no_sanitize_memory"
3769
      case 't':	 // 1 string to match.
3770
        if (memcmp(Name.data()+12, "ack_protector", 13) != 0)
3771
          break;
3772
        return AttributeCommonInfo::AT_NoStackProtector;	 // "clang::no_stack_protector"
3773
      }
3774
      break;
3775
    case 'o':	 // 3 strings to match.
3776
      switch (Name[8]) {
3777
      default: break;
3778
      case 'b':	 // 2 strings to match.
3779
        if (memcmp(Name.data()+9, "jc_", 3) != 0)
3780
          break;
3781
        switch (Name[12]) {
3782
        default: break;
3783
        case 'm':	 // 1 string to match.
3784
          if (memcmp(Name.data()+13, "ethod_family", 12) != 0)
3785
            break;
3786
          return AttributeCommonInfo::AT_ObjCMethodFamily;	 // "clang::objc_method_family"
3787
        case 'n':	 // 1 string to match.
3788
          if (memcmp(Name.data()+13, "onlazy_class", 12) != 0)
3789
            break;
3790
          return AttributeCommonInfo::AT_ObjCNonLazyClass;	 // "clang::objc_nonlazy_class"
3791
        }
3792
        break;
3793
      case 'p':	 // 1 string to match.
3794
        if (memcmp(Name.data()+9, "encl_global_host", 16) != 0)
3795
          break;
3796
        return AttributeCommonInfo::AT_OpenCLGlobalHostAddressSpace;	 // "clang::opencl_global_host"
3797
      }
3798
      break;
3799
    case 'r':	 // 1 string to match.
3800
      if (memcmp(Name.data()+8, "elease_capability", 17) != 0)
3801
        break;
3802
      return AttributeCommonInfo::AT_ReleaseCapability;	 // "clang::release_capability"
3803
    case 's':	 // 2 strings to match.
3804
      switch (Name[8]) {
3805
      default: break;
3806
      case 'w':	 // 1 string to match.
3807
        if (memcmp(Name.data()+9, "ift_error_result", 16) != 0)
3808
          break;
3809
        return AttributeCommonInfo::AT_SwiftErrorResult;	 // "clang::swift_error_result"
3810
      case 'y':	 // 1 string to match.
3811
        if (memcmp(Name.data()+9, "cl_special_class", 16) != 0)
3812
          break;
3813
        return AttributeCommonInfo::AT_SYCLSpecialClass;	 // "clang::sycl_special_class"
3814
      }
3815
      break;
3816
    case 'w':	 // 1 string to match.
3817
      if (memcmp(Name.data()+8, "arn_unused_result", 17) != 0)
3818
        break;
3819
      return AttributeCommonInfo::AT_WarnUnusedResult;	 // "clang::warn_unused_result"
3820
    }
3821
    break;
3822
  case 26:	 // 13 strings to match.
3823
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
3824
      break;
3825
    switch (Name[7]) {
3826
    default: break;
3827
    case 'a':	 // 1 string to match.
3828
      if (memcmp(Name.data()+8, "mdgpu_waves_per_eu", 18) != 0)
3829
        break;
3830
      return AttributeCommonInfo::AT_AMDGPUWavesPerEU;	 // "clang::amdgpu_waves_per_eu"
3831
    case 'c':	 // 3 strings to match.
3832
      if (memcmp(Name.data()+8, "f_", 2) != 0)
3833
        break;
3834
      switch (Name[10]) {
3835
      default: break;
3836
      case 'a':	 // 1 string to match.
3837
        if (memcmp(Name.data()+11, "udited_transfer", 15) != 0)
3838
          break;
3839
        return AttributeCommonInfo::AT_CFAuditedTransfer;	 // "clang::cf_audited_transfer"
3840
      case 'r':	 // 1 string to match.
3841
        if (memcmp(Name.data()+11, "eturns_retained", 15) != 0)
3842
          break;
3843
        return AttributeCommonInfo::AT_CFReturnsRetained;	 // "clang::cf_returns_retained"
3844
      case 'u':	 // 1 string to match.
3845
        if (memcmp(Name.data()+11, "nknown_transfer", 15) != 0)
3846
          break;
3847
        return AttributeCommonInfo::AT_CFUnknownTransfer;	 // "clang::cf_unknown_transfer"
3848
      }
3849
      break;
3850
    case 'd':	 // 1 string to match.
3851
      if (memcmp(Name.data()+8, "iagnose_as_builtin", 18) != 0)
3852
        break;
3853
      return AttributeCommonInfo::AT_DiagnoseAsBuiltin;	 // "clang::diagnose_as_builtin"
3854
    case 'n':	 // 1 string to match.
3855
      if (memcmp(Name.data()+8, "s_returns_retained", 18) != 0)
3856
        break;
3857
      return AttributeCommonInfo::AT_NSReturnsRetained;	 // "clang::ns_returns_retained"
3858
    case 'o':	 // 5 strings to match.
3859
      switch (Name[8]) {
3860
      default: break;
3861
      case 'b':	 // 4 strings to match.
3862
        if (memcmp(Name.data()+9, "jc_", 3) != 0)
3863
          break;
3864
        switch (Name[12]) {
3865
        default: break;
3866
        case 'b':	 // 2 strings to match.
3867
          if (memcmp(Name.data()+13, "ridge_", 6) != 0)
3868
            break;
3869
          switch (Name[19]) {
3870
          default: break;
3871
          case 'm':	 // 1 string to match.
3872
            if (memcmp(Name.data()+20, "utable", 6) != 0)
3873
              break;
3874
            return AttributeCommonInfo::AT_ObjCBridgeMutable;	 // "clang::objc_bridge_mutable"
3875
          case 'r':	 // 1 string to match.
3876
            if (memcmp(Name.data()+20, "elated", 6) != 0)
3877
              break;
3878
            return AttributeCommonInfo::AT_ObjCBridgeRelated;	 // "clang::objc_bridge_related"
3879
          }
3880
          break;
3881
        case 'd':	 // 1 string to match.
3882
          if (memcmp(Name.data()+13, "irect_members", 13) != 0)
3883
            break;
3884
          return AttributeCommonInfo::AT_ObjCDirectMembers;	 // "clang::objc_direct_members"
3885
        case 'r':	 // 1 string to match.
3886
          if (memcmp(Name.data()+13, "equires_super", 13) != 0)
3887
            break;
3888
          return AttributeCommonInfo::AT_ObjCRequiresSuper;	 // "clang::objc_requires_super"
3889
        }
3890
        break;
3891
      case 's':	 // 1 string to match.
3892
        if (memcmp(Name.data()+9, "_returns_retained", 17) != 0)
3893
          break;
3894
        return AttributeCommonInfo::AT_OSReturnsRetained;	 // "clang::os_returns_retained"
3895
      }
3896
      break;
3897
    case 'r':	 // 1 string to match.
3898
      if (memcmp(Name.data()+8, "equires_capability", 18) != 0)
3899
        break;
3900
      return AttributeCommonInfo::AT_RequiresCapability;	 // "clang::requires_capability"
3901
    case 's':	 // 1 string to match.
3902
      if (memcmp(Name.data()+8, "wift_async_context", 18) != 0)
3903
        break;
3904
      return AttributeCommonInfo::AT_SwiftAsyncContext;	 // "clang::swift_async_context"
3905
    }
3906
    break;
3907
  case 27:	 // 5 strings to match.
3908
    switch (Name[0]) {
3909
    default: break;
3910
    case 'c':	 // 4 strings to match.
3911
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
3912
        break;
3913
      switch (Name[7]) {
3914
      default: break;
3915
      case 'l':	 // 1 string to match.
3916
        if (memcmp(Name.data()+8, "oader_uninitialized", 19) != 0)
3917
          break;
3918
        return AttributeCommonInfo::AT_LoaderUninitialized;	 // "clang::loader_uninitialized"
3919
      case 'n':	 // 1 string to match.
3920
        if (memcmp(Name.data()+8, "eon_polyvector_type", 19) != 0)
3921
          break;
3922
        return AttributeCommonInfo::AT_NeonPolyVectorType;	 // "clang::neon_polyvector_type"
3923
      case 'o':	 // 2 strings to match.
3924
        switch (Name[8]) {
3925
        default: break;
3926
        case 'b':	 // 1 string to match.
3927
          if (memcmp(Name.data()+9, "jc_runtime_visible", 18) != 0)
3928
            break;
3929
          return AttributeCommonInfo::AT_ObjCRuntimeVisible;	 // "clang::objc_runtime_visible"
3930
        case 'p':	 // 1 string to match.
3931
          if (memcmp(Name.data()+9, "encl_global_device", 18) != 0)
3932
            break;
3933
          return AttributeCommonInfo::AT_OpenCLGlobalDeviceAddressSpace;	 // "clang::opencl_global_device"
3934
        }
3935
        break;
3936
      }
3937
      break;
3938
    case 'g':	 // 1 string to match.
3939
      if (memcmp(Name.data()+1, "nu::no_instrument_function", 26) != 0)
3940
        break;
3941
      return AttributeCommonInfo::AT_NoInstrumentFunction;	 // "gnu::no_instrument_function"
3942
    }
3943
    break;
3944
  case 28:	 // 9 strings to match.
3945
    switch (Name[0]) {
3946
    default: break;
3947
    case 'c':	 // 8 strings to match.
3948
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
3949
        break;
3950
      switch (Name[7]) {
3951
      default: break;
3952
      case 'l':	 // 1 string to match.
3953
        if (memcmp(Name.data()+8, "to_visibility_public", 20) != 0)
3954
          break;
3955
        return AttributeCommonInfo::AT_LTOVisibilityPublic;	 // "clang::lto_visibility_public"
3956
      case 'o':	 // 1 string to match.
3957
        if (memcmp(Name.data()+8, "bjc_precise_lifetime", 20) != 0)
3958
          break;
3959
        return AttributeCommonInfo::AT_ObjCPreciseLifetime;	 // "clang::objc_precise_lifetime"
3960
      case 'p':	 // 2 strings to match.
3961
        switch (Name[8]) {
3962
        default: break;
3963
        case 'o':	 // 1 string to match.
3964
          if (memcmp(Name.data()+9, "inter_with_type_tag", 19) != 0)
3965
            break;
3966
          return AttributeCommonInfo::AT_ArgumentWithTypeTag;	 // "clang::pointer_with_type_tag"
3967
        case 'r':	 // 1 string to match.
3968
          if (memcmp(Name.data()+9, "eserve_access_index", 19) != 0)
3969
            break;
3970
          return AttributeCommonInfo::AT_BPFPreserveAccessIndex;	 // "clang::preserve_access_index"
3971
        }
3972
        break;
3973
      case 's':	 // 2 strings to match.
3974
        switch (Name[8]) {
3975
        default: break;
3976
        case 'h':	 // 1 string to match.
3977
          if (memcmp(Name.data()+9, "ared_locks_required", 19) != 0)
3978
            break;
3979
          return AttributeCommonInfo::AT_RequiresCapability;	 // "clang::shared_locks_required"
3980
        case 'w':	 // 1 string to match.
3981
          if (memcmp(Name.data()+9, "ift_indirect_result", 19) != 0)
3982
            break;
3983
          return AttributeCommonInfo::AT_SwiftIndirectResult;	 // "clang::swift_indirect_result"
3984
        }
3985
        break;
3986
      case 't':	 // 1 string to match.
3987
        if (memcmp(Name.data()+8, "ype_tag_for_datatype", 20) != 0)
3988
          break;
3989
        return AttributeCommonInfo::AT_TypeTagForDatatype;	 // "clang::type_tag_for_datatype"
3990
      case 'x':	 // 1 string to match.
3991
        if (memcmp(Name.data()+8, "ray_never_instrument", 20) != 0)
3992
          break;
3993
        return AttributeCommonInfo::AT_XRayInstrument;	 // "clang::xray_never_instrument"
3994
      }
3995
      break;
3996
    case 'g':	 // 1 string to match.
3997
      if (memcmp(Name.data()+1, "nu::force_align_arg_pointer", 27) != 0)
3998
        break;
3999
      return AttributeCommonInfo::AT_X86ForceAlignArgPointer;	 // "gnu::force_align_arg_pointer"
4000
    }
4001
    break;
4002
  case 29:	 // 6 strings to match.
4003
    switch (Name[0]) {
4004
    default: break;
4005
    case 'c':	 // 5 strings to match.
4006
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
4007
        break;
4008
      switch (Name[7]) {
4009
      default: break;
4010
      case 'a':	 // 1 string to match.
4011
        if (memcmp(Name.data()+8, "rgument_with_type_tag", 21) != 0)
4012
          break;
4013
        return AttributeCommonInfo::AT_ArgumentWithTypeTag;	 // "clang::argument_with_type_tag"
4014
      case 'e':	 // 1 string to match.
4015
        if (memcmp(Name.data()+8, "xternal_source_symbol", 21) != 0)
4016
          break;
4017
        return AttributeCommonInfo::AT_ExternalSourceSymbol;	 // "clang::external_source_symbol"
4018
      case 'o':	 // 1 string to match.
4019
        if (memcmp(Name.data()+8, "bjc_independent_class", 21) != 0)
4020
          break;
4021
        return AttributeCommonInfo::AT_ObjCIndependentClass;	 // "clang::objc_independent_class"
4022
      case 't':	 // 1 string to match.
4023
        if (memcmp(Name.data()+8, "ry_acquire_capability", 21) != 0)
4024
          break;
4025
        return AttributeCommonInfo::AT_TryAcquireCapability;	 // "clang::try_acquire_capability"
4026
      case 'x':	 // 1 string to match.
4027
        if (memcmp(Name.data()+8, "ray_always_instrument", 21) != 0)
4028
          break;
4029
        return AttributeCommonInfo::AT_XRayInstrument;	 // "clang::xray_always_instrument"
4030
      }
4031
      break;
4032
    case 'g':	 // 1 string to match.
4033
      if (memcmp(Name.data()+1, "nu::patchable_function_entry", 28) != 0)
4034
        break;
4035
      return AttributeCommonInfo::AT_PatchableFunctionEntry;	 // "gnu::patchable_function_entry"
4036
    }
4037
    break;
4038
  case 30:	 // 5 strings to match.
4039
    switch (Name[0]) {
4040
    default: break;
4041
    case 'c':	 // 4 strings to match.
4042
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
4043
        break;
4044
      switch (Name[7]) {
4045
      default: break;
4046
      case 'c':	 // 1 string to match.
4047
        if (memcmp(Name.data()+8, "f_returns_not_retained", 22) != 0)
4048
          break;
4049
        return AttributeCommonInfo::AT_CFReturnsNotRetained;	 // "clang::cf_returns_not_retained"
4050
      case 'n':	 // 2 strings to match.
4051
        if (memcmp(Name.data()+8, "s_returns_", 10) != 0)
4052
          break;
4053
        switch (Name[18]) {
4054
        default: break;
4055
        case 'a':	 // 1 string to match.
4056
          if (memcmp(Name.data()+19, "utoreleased", 11) != 0)
4057
            break;
4058
          return AttributeCommonInfo::AT_NSReturnsAutoreleased;	 // "clang::ns_returns_autoreleased"
4059
        case 'n':	 // 1 string to match.
4060
          if (memcmp(Name.data()+19, "ot_retained", 11) != 0)
4061
            break;
4062
          return AttributeCommonInfo::AT_NSReturnsNotRetained;	 // "clang::ns_returns_not_retained"
4063
        }
4064
        break;
4065
      case 'o':	 // 1 string to match.
4066
        if (memcmp(Name.data()+8, "s_returns_not_retained", 22) != 0)
4067
          break;
4068
        return AttributeCommonInfo::AT_OSReturnsNotRetained;	 // "clang::os_returns_not_retained"
4069
      }
4070
      break;
4071
    case 'g':	 // 1 string to match.
4072
      if (memcmp(Name.data()+1, "nu::no_caller_saved_registers", 29) != 0)
4073
        break;
4074
      return AttributeCommonInfo::AT_AnyX86NoCallerSavedRegisters;	 // "gnu::no_caller_saved_registers"
4075
    }
4076
    break;
4077
  case 31:	 // 6 strings to match.
4078
    switch (Name[0]) {
4079
    default: break;
4080
    case 'c':	 // 5 strings to match.
4081
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
4082
        break;
4083
      switch (Name[7]) {
4084
      default: break;
4085
      case 'a':	 // 1 string to match.
4086
        if (memcmp(Name.data()+8, "ssert_shared_capability", 23) != 0)
4087
          break;
4088
        return AttributeCommonInfo::AT_AssertCapability;	 // "clang::assert_shared_capability"
4089
      case 'c':	 // 1 string to match.
4090
        if (memcmp(Name.data()+8, "fi_canonical_jump_table", 23) != 0)
4091
          break;
4092
        return AttributeCommonInfo::AT_CFICanonicalJumpTable;	 // "clang::cfi_canonical_jump_table"
4093
      case 'e':	 // 1 string to match.
4094
        if (memcmp(Name.data()+8, "xclusive_locks_required", 23) != 0)
4095
          break;
4096
        return AttributeCommonInfo::AT_RequiresCapability;	 // "clang::exclusive_locks_required"
4097
      case 'o':	 // 1 string to match.
4098
        if (memcmp(Name.data()+8, "bjc_externally_retained", 23) != 0)
4099
          break;
4100
        return AttributeCommonInfo::AT_ObjCExternallyRetained;	 // "clang::objc_externally_retained"
4101
      case 'p':	 // 1 string to match.
4102
        if (memcmp(Name.data()+8, "ass_dynamic_object_size", 23) != 0)
4103
          break;
4104
        return AttributeCommonInfo::AT_PassObjectSize;	 // "clang::pass_dynamic_object_size"
4105
      }
4106
      break;
4107
    case 'g':	 // 1 string to match.
4108
      if (memcmp(Name.data()+1, "nu::no_address_safety_analysis", 30) != 0)
4109
        break;
4110
      return AttributeCommonInfo::AT_NoSanitizeSpecific;	 // "gnu::no_address_safety_analysis"
4111
    }
4112
    break;
4113
  case 32:	 // 5 strings to match.
4114
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
4115
      break;
4116
    switch (Name[7]) {
4117
    default: break;
4118
    case '_':	 // 1 string to match.
4119
      if (memcmp(Name.data()+8, "_clang_arm_builtin_alias", 24) != 0)
4120
        break;
4121
      return AttributeCommonInfo::AT_ArmBuiltinAlias;	 // "clang::__clang_arm_builtin_alias"
4122
    case 'a':	 // 1 string to match.
4123
      if (memcmp(Name.data()+8, "cquire_shared_capability", 24) != 0)
4124
        break;
4125
      return AttributeCommonInfo::AT_AcquireCapability;	 // "clang::acquire_shared_capability"
4126
    case 'n':	 // 1 string to match.
4127
      if (memcmp(Name.data()+8, "o_thread_safety_analysis", 24) != 0)
4128
        break;
4129
      return AttributeCommonInfo::AT_NoThreadSafetyAnalysis;	 // "clang::no_thread_safety_analysis"
4130
    case 'o':	 // 1 string to match.
4131
      if (memcmp(Name.data()+8, "bjc_non_runtime_protocol", 24) != 0)
4132
        break;
4133
      return AttributeCommonInfo::AT_ObjCNonRuntimeProtocol;	 // "clang::objc_non_runtime_protocol"
4134
    case 'r':	 // 1 string to match.
4135
      if (memcmp(Name.data()+8, "elease_shared_capability", 24) != 0)
4136
        break;
4137
      return AttributeCommonInfo::AT_ReleaseCapability;	 // "clang::release_shared_capability"
4138
    }
4139
    break;
4140
  case 33:	 // 5 strings to match.
4141
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
4142
      break;
4143
    switch (Name[7]) {
4144
    default: break;
4145
    case 'c':	 // 1 string to match.
4146
      if (memcmp(Name.data()+8, "onsumable_auto_cast_state", 25) != 0)
4147
        break;
4148
      return AttributeCommonInfo::AT_ConsumableAutoCast;	 // "clang::consumable_auto_cast_state"
4149
    case 'o':	 // 1 string to match.
4150
      if (memcmp(Name.data()+8, "bjc_returns_inner_pointer", 25) != 0)
4151
        break;
4152
      return AttributeCommonInfo::AT_ObjCReturnsInnerPointer;	 // "clang::objc_returns_inner_pointer"
4153
    case 'r':	 // 2 strings to match.
4154
      if (Name[8] != 'e')
4155
        break;
4156
      switch (Name[9]) {
4157
      default: break;
4158
      case 'l':	 // 1 string to match.
4159
        if (memcmp(Name.data()+10, "ease_generic_capability", 23) != 0)
4160
          break;
4161
        return AttributeCommonInfo::AT_ReleaseCapability;	 // "clang::release_generic_capability"
4162
      case 'q':	 // 1 string to match.
4163
        if (memcmp(Name.data()+10, "uires_shared_capability", 23) != 0)
4164
          break;
4165
        return AttributeCommonInfo::AT_RequiresCapability;	 // "clang::requires_shared_capability"
4166
      }
4167
      break;
4168
    case 's':	 // 1 string to match.
4169
      if (memcmp(Name.data()+8, "peculative_load_hardening", 25) != 0)
4170
        break;
4171
      return AttributeCommonInfo::AT_SpeculativeLoadHardening;	 // "clang::speculative_load_hardening"
4172
    }
4173
    break;
4174
  case 34:	 // 5 strings to match.
4175
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
4176
      break;
4177
    switch (Name[7]) {
4178
    default: break;
4179
    case 'a':	 // 1 string to match.
4180
      if (memcmp(Name.data()+8, "mdgpu_flat_work_group_size", 26) != 0)
4181
        break;
4182
      return AttributeCommonInfo::AT_AMDGPUFlatWorkGroupSize;	 // "clang::amdgpu_flat_work_group_size"
4183
    case 'e':	 // 1 string to match.
4184
      if (memcmp(Name.data()+8, "nforce_read_only_placement", 26) != 0)
4185
        break;
4186
      return AttributeCommonInfo::AT_ReadOnlyPlacement;	 // "clang::enforce_read_only_placement"
4187
    case 'o':	 // 3 strings to match.
4188
      switch (Name[8]) {
4189
      default: break;
4190
      case 'b':	 // 2 strings to match.
4191
        if (memcmp(Name.data()+9, "jc_", 3) != 0)
4192
          break;
4193
        switch (Name[12]) {
4194
        default: break;
4195
        case 'd':	 // 1 string to match.
4196
          if (memcmp(Name.data()+13, "esignated_initializer", 21) != 0)
4197
            break;
4198
          return AttributeCommonInfo::AT_ObjCDesignatedInitializer;	 // "clang::objc_designated_initializer"
4199
        case 's':	 // 1 string to match.
4200
          if (memcmp(Name.data()+13, "ubclassing_restricted", 21) != 0)
4201
            break;
4202
          return AttributeCommonInfo::AT_ObjCSubclassingRestricted;	 // "clang::objc_subclassing_restricted"
4203
        }
4204
        break;
4205
      case 's':	 // 1 string to match.
4206
        if (memcmp(Name.data()+9, "_returns_retained_on_zero", 25) != 0)
4207
          break;
4208
        return AttributeCommonInfo::AT_OSReturnsRetainedOnZero;	 // "clang::os_returns_retained_on_zero"
4209
      }
4210
      break;
4211
    }
4212
    break;
4213
  case 35:	 // 2 strings to match.
4214
    switch (Name[0]) {
4215
    default: break;
4216
    case 'c':	 // 1 string to match.
4217
      if (memcmp(Name.data()+1, "lang::consumable_set_state_on_read", 34) != 0)
4218
        break;
4219
      return AttributeCommonInfo::AT_ConsumableSetOnRead;	 // "clang::consumable_set_state_on_read"
4220
    case 'g':	 // 1 string to match.
4221
      if (memcmp(Name.data()+1, "nu::no_profile_instrument_function", 34) != 0)
4222
        break;
4223
      return AttributeCommonInfo::AT_NoProfileFunction;	 // "gnu::no_profile_instrument_function"
4224
    }
4225
    break;
4226
  case 36:	 // 2 strings to match.
4227
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
4228
      break;
4229
    switch (Name[7]) {
4230
    default: break;
4231
    case 'n':	 // 1 string to match.
4232
      if (memcmp(Name.data()+8, "o_speculative_load_hardening", 28) != 0)
4233
        break;
4234
      return AttributeCommonInfo::AT_NoSpeculativeLoadHardening;	 // "clang::no_speculative_load_hardening"
4235
    case 't':	 // 1 string to match.
4236
      if (memcmp(Name.data()+8, "ry_acquire_shared_capability", 28) != 0)
4237
        break;
4238
      return AttributeCommonInfo::AT_TryAcquireCapability;	 // "clang::try_acquire_shared_capability"
4239
    }
4240
    break;
4241
  case 38:	 // 2 strings to match.
4242
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
4243
      break;
4244
    switch (Name[7]) {
4245
    default: break;
4246
    case 'o':	 // 1 string to match.
4247
      if (memcmp(Name.data()+8, "s_returns_retained_on_non_zero", 30) != 0)
4248
        break;
4249
      return AttributeCommonInfo::AT_OSReturnsRetainedOnNonZero;	 // "clang::os_returns_retained_on_non_zero"
4250
    case 'r':	 // 1 string to match.
4251
      if (memcmp(Name.data()+8, "equire_constant_initialization", 30) != 0)
4252
        break;
4253
      return AttributeCommonInfo::AT_ConstInit;	 // "clang::require_constant_initialization"
4254
    }
4255
    break;
4256
  case 40:	 // 1 string to match.
4257
    if (memcmp(Name.data()+0, "clang::disable_sanitizer_instrumentation", 40) != 0)
4258
      break;
4259
    return AttributeCommonInfo::AT_DisableSanitizerInstrumentation;	 // "clang::disable_sanitizer_instrumentation"
4260
  case 41:	 // 1 string to match.
4261
    if (memcmp(Name.data()+0, "clang::objc_requires_property_definitions", 41) != 0)
4262
      break;
4263
    return AttributeCommonInfo::AT_ObjCRequiresPropertyDefs;	 // "clang::objc_requires_property_definitions"
4264
  case 42:	 // 3 strings to match.
4265
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
4266
      break;
4267
    switch (Name[7]) {
4268
    default: break;
4269
    case '_':	 // 1 string to match.
4270
      if (memcmp(Name.data()+8, "_clang_arm_mve_strict_polymorphism", 34) != 0)
4271
        break;
4272
      return AttributeCommonInfo::AT_ArmMveStrictPolymorphism;	 // "clang::__clang_arm_mve_strict_polymorphism"
4273
    case 'e':	 // 1 string to match.
4274
      if (memcmp(Name.data()+8, "xclude_from_explicit_instantiation", 34) != 0)
4275
        break;
4276
      return AttributeCommonInfo::AT_ExcludeFromExplicitInstantiation;	 // "clang::exclude_from_explicit_instantiation"
4277
    case 'o':	 // 1 string to match.
4278
      if (memcmp(Name.data()+8, "bjc_arc_weak_reference_unavailable", 34) != 0)
4279
        break;
4280
      return AttributeCommonInfo::AT_ArcWeakrefUnavailable;	 // "clang::objc_arc_weak_reference_unavailable"
4281
    }
4282
    break;
4283
  case 53:	 // 1 string to match.
4284
    if (memcmp(Name.data()+0, "clang::objc_protocol_requires_explicit_implementation", 53) != 0)
4285
      break;
4286
    return AttributeCommonInfo::AT_ObjCExplicitProtocolImpl;	 // "clang::objc_protocol_requires_explicit_implementation"
4287
  }
4288
  } else if (AttributeCommonInfo::AS_C2x == Syntax) {
4289
  switch (Name.size()) {
4290
  default: break;
4291
  case 8:	 // 4 strings to match.
4292
    switch (Name[0]) {
4293
    default: break;
4294
    case 'g':	 // 3 strings to match.
4295
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
4296
        break;
4297
      switch (Name[5]) {
4298
      default: break;
4299
      case 'f':	 // 1 string to match.
4300
        if (memcmp(Name.data()+6, "ar", 2) != 0)
4301
          break;
4302
        return AttributeCommonInfo::AT_MipsLongCall;	 // "gnu::far"
4303
      case 'h':	 // 1 string to match.
4304
        if (memcmp(Name.data()+6, "ot", 2) != 0)
4305
          break;
4306
        return AttributeCommonInfo::AT_Hot;	 // "gnu::hot"
4307
      case 'p':	 // 1 string to match.
4308
        if (memcmp(Name.data()+6, "cs", 2) != 0)
4309
          break;
4310
        return AttributeCommonInfo::AT_Pcs;	 // "gnu::pcs"
4311
      }
4312
      break;
4313
    case 'n':	 // 1 string to match.
4314
      if (memcmp(Name.data()+1, "oreturn", 7) != 0)
4315
        break;
4316
      return AttributeCommonInfo::AT_CXX11NoReturn;	 // "noreturn"
4317
    }
4318
    break;
4319
  case 9:	 // 9 strings to match.
4320
    switch (Name[0]) {
4321
    default: break;
4322
    case '_':	 // 1 string to match.
4323
      if (memcmp(Name.data()+1, "Noreturn", 8) != 0)
4324
        break;
4325
      return AttributeCommonInfo::AT_CXX11NoReturn;	 // "_Noreturn"
4326
    case 'g':	 // 7 strings to match.
4327
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
4328
        break;
4329
      switch (Name[5]) {
4330
      default: break;
4331
      case 'c':	 // 1 string to match.
4332
        if (memcmp(Name.data()+6, "old", 3) != 0)
4333
          break;
4334
        return AttributeCommonInfo::AT_Cold;	 // "gnu::cold"
4335
      case 'l':	 // 1 string to match.
4336
        if (memcmp(Name.data()+6, "eaf", 3) != 0)
4337
          break;
4338
        return AttributeCommonInfo::AT_Leaf;	 // "gnu::leaf"
4339
      case 'm':	 // 1 string to match.
4340
        if (memcmp(Name.data()+6, "ode", 3) != 0)
4341
          break;
4342
        return AttributeCommonInfo::AT_Mode;	 // "gnu::mode"
4343
      case 'n':	 // 1 string to match.
4344
        if (memcmp(Name.data()+6, "ear", 3) != 0)
4345
          break;
4346
        return AttributeCommonInfo::AT_MipsShortCall;	 // "gnu::near"
4347
      case 'p':	 // 1 string to match.
4348
        if (memcmp(Name.data()+6, "ure", 3) != 0)
4349
          break;
4350
        return AttributeCommonInfo::AT_Pure;	 // "gnu::pure"
4351
      case 'u':	 // 1 string to match.
4352
        if (memcmp(Name.data()+6, "sed", 3) != 0)
4353
          break;
4354
        return AttributeCommonInfo::AT_Used;	 // "gnu::used"
4355
      case 'w':	 // 1 string to match.
4356
        if (memcmp(Name.data()+6, "eak", 3) != 0)
4357
          break;
4358
        return AttributeCommonInfo::AT_Weak;	 // "gnu::weak"
4359
      }
4360
      break;
4361
    case 'n':	 // 1 string to match.
4362
      if (memcmp(Name.data()+1, "odiscard", 8) != 0)
4363
        break;
4364
      return AttributeCommonInfo::AT_WarnUnusedResult;	 // "nodiscard"
4365
    }
4366
    break;
4367
  case 10:	 // 7 strings to match.
4368
    switch (Name[0]) {
4369
    default: break;
4370
    case 'd':	 // 1 string to match.
4371
      if (memcmp(Name.data()+1, "eprecated", 9) != 0)
4372
        break;
4373
      return AttributeCommonInfo::AT_Deprecated;	 // "deprecated"
4374
    case 'g':	 // 6 strings to match.
4375
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
4376
        break;
4377
      switch (Name[5]) {
4378
      default: break;
4379
      case 'a':	 // 1 string to match.
4380
        if (memcmp(Name.data()+6, "lias", 4) != 0)
4381
          break;
4382
        return AttributeCommonInfo::AT_Alias;	 // "gnu::alias"
4383
      case 'c':	 // 2 strings to match.
4384
        switch (Name[6]) {
4385
        default: break;
4386
        case 'd':	 // 1 string to match.
4387
          if (memcmp(Name.data()+7, "ecl", 3) != 0)
4388
            break;
4389
          return AttributeCommonInfo::AT_CDecl;	 // "gnu::cdecl"
4390
        case 'o':	 // 1 string to match.
4391
          if (memcmp(Name.data()+7, "nst", 3) != 0)
4392
            break;
4393
          return AttributeCommonInfo::AT_Const;	 // "gnu::const"
4394
        }
4395
        break;
4396
      case 'e':	 // 1 string to match.
4397
        if (memcmp(Name.data()+6, "rror", 4) != 0)
4398
          break;
4399
        return AttributeCommonInfo::AT_Error;	 // "gnu::error"
4400
      case 'i':	 // 1 string to match.
4401
        if (memcmp(Name.data()+6, "func", 4) != 0)
4402
          break;
4403
        return AttributeCommonInfo::AT_IFunc;	 // "gnu::ifunc"
4404
      case 'n':	 // 1 string to match.
4405
        if (memcmp(Name.data()+6, "aked", 4) != 0)
4406
          break;
4407
        return AttributeCommonInfo::AT_Naked;	 // "gnu::naked"
4408
      }
4409
      break;
4410
    }
4411
    break;
4412
  case 11:	 // 11 strings to match.
4413
    switch (Name[0]) {
4414
    default: break;
4415
    case 'f':	 // 1 string to match.
4416
      if (memcmp(Name.data()+1, "allthrough", 10) != 0)
4417
        break;
4418
      return AttributeCommonInfo::AT_FallThrough;	 // "fallthrough"
4419
    case 'g':	 // 10 strings to match.
4420
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
4421
        break;
4422
      switch (Name[5]) {
4423
      default: break;
4424
      case 'c':	 // 1 string to match.
4425
        if (memcmp(Name.data()+6, "ommon", 5) != 0)
4426
          break;
4427
        return AttributeCommonInfo::AT_Common;	 // "gnu::common"
4428
      case 'f':	 // 1 string to match.
4429
        if (memcmp(Name.data()+6, "ormat", 5) != 0)
4430
          break;
4431
        return AttributeCommonInfo::AT_Format;	 // "gnu::format"
4432
      case 'm':	 // 3 strings to match.
4433
        switch (Name[6]) {
4434
        default: break;
4435
        case 'a':	 // 1 string to match.
4436
          if (memcmp(Name.data()+7, "lloc", 4) != 0)
4437
            break;
4438
          return AttributeCommonInfo::AT_Restrict;	 // "gnu::malloc"
4439
        case 'i':	 // 1 string to match.
4440
          if (memcmp(Name.data()+7, "ps16", 4) != 0)
4441
            break;
4442
          return AttributeCommonInfo::AT_Mips16;	 // "gnu::mips16"
4443
        case 's':	 // 1 string to match.
4444
          if (memcmp(Name.data()+7, "_abi", 4) != 0)
4445
            break;
4446
          return AttributeCommonInfo::AT_MSABI;	 // "gnu::ms_abi"
4447
        }
4448
        break;
4449
      case 'p':	 // 1 string to match.
4450
        if (memcmp(Name.data()+6, "acked", 5) != 0)
4451
          break;
4452
        return AttributeCommonInfo::AT_Packed;	 // "gnu::packed"
4453
      case 'r':	 // 1 string to match.
4454
        if (memcmp(Name.data()+6, "etain", 5) != 0)
4455
          break;
4456
        return AttributeCommonInfo::AT_Retain;	 // "gnu::retain"
4457
      case 's':	 // 1 string to match.
4458
        if (memcmp(Name.data()+6, "ignal", 5) != 0)
4459
          break;
4460
        return AttributeCommonInfo::AT_AVRSignal;	 // "gnu::signal"
4461
      case 't':	 // 1 string to match.
4462
        if (memcmp(Name.data()+6, "arget", 5) != 0)
4463
          break;
4464
        return AttributeCommonInfo::AT_Target;	 // "gnu::target"
4465
      case 'u':	 // 1 string to match.
4466
        if (memcmp(Name.data()+6, "nused", 5) != 0)
4467
          break;
4468
        return AttributeCommonInfo::AT_Unused;	 // "gnu::unused"
4469
      }
4470
      break;
4471
    }
4472
    break;
4473
  case 12:	 // 15 strings to match.
4474
    switch (Name[0]) {
4475
    default: break;
4476
    case 'c':	 // 1 string to match.
4477
      if (memcmp(Name.data()+1, "lang::guard", 11) != 0)
4478
        break;
4479
      return AttributeCommonInfo::AT_CFGuard;	 // "clang::guard"
4480
    case 'g':	 // 13 strings to match.
4481
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
4482
        break;
4483
      switch (Name[5]) {
4484
      default: break;
4485
      case '_':	 // 1 string to match.
4486
        if (memcmp(Name.data()+6, "_const", 6) != 0)
4487
          break;
4488
        return AttributeCommonInfo::AT_Const;	 // "gnu::__const"
4489
      case 'a':	 // 1 string to match.
4490
        if (memcmp(Name.data()+6, "ligned", 6) != 0)
4491
          break;
4492
        return AttributeCommonInfo::AT_Aligned;	 // "gnu::aligned"
4493
      case 'c':	 // 1 string to match.
4494
        if (memcmp(Name.data()+6, "leanup", 6) != 0)
4495
          break;
4496
        return AttributeCommonInfo::AT_Cleanup;	 // "gnu::cleanup"
4497
      case 'f':	 // 1 string to match.
4498
        if (memcmp(Name.data()+6, "latten", 6) != 0)
4499
          break;
4500
        return AttributeCommonInfo::AT_Flatten;	 // "gnu::flatten"
4501
      case 'n':	 // 3 strings to match.
4502
        if (Name[6] != 'o')
4503
          break;
4504
        switch (Name[7]) {
4505
        default: break;
4506
        case 'd':	 // 1 string to match.
4507
          if (memcmp(Name.data()+8, "ebug", 4) != 0)
4508
            break;
4509
          return AttributeCommonInfo::AT_NoDebug;	 // "gnu::nodebug"
4510
        case 'n':	 // 1 string to match.
4511
          if (memcmp(Name.data()+8, "null", 4) != 0)
4512
            break;
4513
          return AttributeCommonInfo::AT_NonNull;	 // "gnu::nonnull"
4514
        case 't':	 // 1 string to match.
4515
          if (memcmp(Name.data()+8, "hrow", 4) != 0)
4516
            break;
4517
          return AttributeCommonInfo::AT_NoThrow;	 // "gnu::nothrow"
4518
        }
4519
        break;
4520
      case 'r':	 // 2 strings to match.
4521
        if (memcmp(Name.data()+6, "eg", 2) != 0)
4522
          break;
4523
        switch (Name[8]) {
4524
        default: break;
4525
        case 'c':	 // 1 string to match.
4526
          if (memcmp(Name.data()+9, "all", 3) != 0)
4527
            break;
4528
          return AttributeCommonInfo::AT_RegCall;	 // "gnu::regcall"
4529
        case 'p':	 // 1 string to match.
4530
          if (memcmp(Name.data()+9, "arm", 3) != 0)
4531
            break;
4532
          return AttributeCommonInfo::AT_Regparm;	 // "gnu::regparm"
4533
        }
4534
        break;
4535
      case 's':	 // 2 strings to match.
4536
        switch (Name[6]) {
4537
        default: break;
4538
        case 'e':	 // 1 string to match.
4539
          if (memcmp(Name.data()+7, "ction", 5) != 0)
4540
            break;
4541
          return AttributeCommonInfo::AT_Section;	 // "gnu::section"
4542
        case 't':	 // 1 string to match.
4543
          if (memcmp(Name.data()+7, "dcall", 5) != 0)
4544
            break;
4545
          return AttributeCommonInfo::AT_StdCall;	 // "gnu::stdcall"
4546
        }
4547
        break;
4548
      case 'w':	 // 2 strings to match.
4549
        switch (Name[6]) {
4550
        default: break;
4551
        case 'a':	 // 1 string to match.
4552
          if (memcmp(Name.data()+7, "rning", 5) != 0)
4553
            break;
4554
          return AttributeCommonInfo::AT_Error;	 // "gnu::warning"
4555
        case 'e':	 // 1 string to match.
4556
          if (memcmp(Name.data()+7, "akref", 5) != 0)
4557
            break;
4558
          return AttributeCommonInfo::AT_WeakRef;	 // "gnu::weakref"
4559
        }
4560
        break;
4561
      }
4562
      break;
4563
    case 'm':	 // 1 string to match.
4564
      if (memcmp(Name.data()+1, "aybe_unused", 11) != 0)
4565
        break;
4566
      return AttributeCommonInfo::AT_Unused;	 // "maybe_unused"
4567
    }
4568
    break;
4569
  case 13:	 // 12 strings to match.
4570
    switch (Name[0]) {
4571
    default: break;
4572
    case 'c':	 // 4 strings to match.
4573
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
4574
        break;
4575
      switch (Name[7]) {
4576
      default: break;
4577
      case 'a':	 // 1 string to match.
4578
        if (memcmp(Name.data()+8, "ssume", 5) != 0)
4579
          break;
4580
        return AttributeCommonInfo::AT_Assumption;	 // "clang::assume"
4581
      case 'b':	 // 1 string to match.
4582
        if (memcmp(Name.data()+8, "locks", 5) != 0)
4583
          break;
4584
        return AttributeCommonInfo::AT_Blocks;	 // "clang::blocks"
4585
      case 'l':	 // 1 string to match.
4586
        if (memcmp(Name.data()+8, "ikely", 5) != 0)
4587
          break;
4588
        return AttributeCommonInfo::AT_Likely;	 // "clang::likely"
4589
      case 'p':	 // 1 string to match.
4590
        if (memcmp(Name.data()+8, "ascal", 5) != 0)
4591
          break;
4592
        return AttributeCommonInfo::AT_Pascal;	 // "clang::pascal"
4593
      }
4594
      break;
4595
    case 'g':	 // 8 strings to match.
4596
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
4597
        break;
4598
      switch (Name[5]) {
4599
      default: break;
4600
      case 'f':	 // 1 string to match.
4601
        if (memcmp(Name.data()+6, "astcall", 7) != 0)
4602
          break;
4603
        return AttributeCommonInfo::AT_FastCall;	 // "gnu::fastcall"
4604
      case 'n':	 // 4 strings to match.
4605
        if (Name[6] != 'o')
4606
          break;
4607
        switch (Name[7]) {
4608
        default: break;
4609
        case 'c':	 // 1 string to match.
4610
          if (memcmp(Name.data()+8, "ommon", 5) != 0)
4611
            break;
4612
          return AttributeCommonInfo::AT_NoCommon;	 // "gnu::nocommon"
4613
        case 'i':	 // 1 string to match.
4614
          if (memcmp(Name.data()+8, "nline", 5) != 0)
4615
            break;
4616
          return AttributeCommonInfo::AT_NoInline;	 // "gnu::noinline"
4617
        case 'm':	 // 1 string to match.
4618
          if (memcmp(Name.data()+8, "ips16", 5) != 0)
4619
            break;
4620
          return AttributeCommonInfo::AT_NoMips16;	 // "gnu::nomips16"
4621
        case 'r':	 // 1 string to match.
4622
          if (memcmp(Name.data()+8, "eturn", 5) != 0)
4623
            break;
4624
          return AttributeCommonInfo::AT_NoReturn;	 // "gnu::noreturn"
4625
        }
4626
        break;
4627
      case 's':	 // 2 strings to match.
4628
        switch (Name[6]) {
4629
        default: break;
4630
        case 'e':	 // 1 string to match.
4631
          if (memcmp(Name.data()+7, "ntinel", 6) != 0)
4632
            break;
4633
          return AttributeCommonInfo::AT_Sentinel;	 // "gnu::sentinel"
4634
        case 'y':	 // 1 string to match.
4635
          if (memcmp(Name.data()+7, "sv_abi", 6) != 0)
4636
            break;
4637
          return AttributeCommonInfo::AT_SysVABI;	 // "gnu::sysv_abi"
4638
        }
4639
        break;
4640
      case 't':	 // 1 string to match.
4641
        if (memcmp(Name.data()+6, "hiscall", 7) != 0)
4642
          break;
4643
        return AttributeCommonInfo::AT_ThisCall;	 // "gnu::thiscall"
4644
      }
4645
      break;
4646
    }
4647
    break;
4648
  case 14:	 // 14 strings to match.
4649
    switch (Name[0]) {
4650
    default: break;
4651
    case 'c':	 // 5 strings to match.
4652
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
4653
        break;
4654
      switch (Name[7]) {
4655
      default: break;
4656
      case 'm':	 // 1 string to match.
4657
        if (memcmp(Name.data()+8, "insize", 6) != 0)
4658
          break;
4659
        return AttributeCommonInfo::AT_MinSize;	 // "clang::minsize"
4660
      case 'n':	 // 2 strings to match.
4661
        if (Name[8] != 'o')
4662
          break;
4663
        switch (Name[9]) {
4664
        default: break;
4665
        case 'd':	 // 1 string to match.
4666
          if (memcmp(Name.data()+10, "eref", 4) != 0)
4667
            break;
4668
          return AttributeCommonInfo::AT_NoDeref;	 // "clang::noderef"
4669
        case 'm':	 // 1 string to match.
4670
          if (memcmp(Name.data()+10, "erge", 4) != 0)
4671
            break;
4672
          return AttributeCommonInfo::AT_NoMerge;	 // "clang::nomerge"
4673
        }
4674
        break;
4675
      case 'o':	 // 2 strings to match.
4676
        switch (Name[8]) {
4677
        default: break;
4678
        case 'b':	 // 1 string to match.
4679
          if (memcmp(Name.data()+9, "jc_gc", 5) != 0)
4680
            break;
4681
          return AttributeCommonInfo::AT_ObjCGC;	 // "clang::objc_gc"
4682
        case 'p':	 // 1 string to match.
4683
          if (memcmp(Name.data()+9, "tnone", 5) != 0)
4684
            break;
4685
          return AttributeCommonInfo::AT_OptimizeNone;	 // "clang::optnone"
4686
        }
4687
        break;
4688
      }
4689
      break;
4690
    case 'g':	 // 9 strings to match.
4691
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
4692
        break;
4693
      switch (Name[5]) {
4694
      default: break;
4695
      case 'd':	 // 2 strings to match.
4696
        if (memcmp(Name.data()+6, "ll", 2) != 0)
4697
          break;
4698
        switch (Name[8]) {
4699
        default: break;
4700
        case 'e':	 // 1 string to match.
4701
          if (memcmp(Name.data()+9, "xport", 5) != 0)
4702
            break;
4703
          return AttributeCommonInfo::AT_DLLExport;	 // "gnu::dllexport"
4704
        case 'i':	 // 1 string to match.
4705
          if (memcmp(Name.data()+9, "mport", 5) != 0)
4706
            break;
4707
          return AttributeCommonInfo::AT_DLLImport;	 // "gnu::dllimport"
4708
        }
4709
        break;
4710
      case 'i':	 // 1 string to match.
4711
        if (memcmp(Name.data()+6, "nterrupt", 8) != 0)
4712
          break;
4713
        return AttributeCommonInfo::AT_Interrupt;	 // "gnu::interrupt"
4714
      case 'l':	 // 1 string to match.
4715
        if (memcmp(Name.data()+6, "ong_call", 8) != 0)
4716
          break;
4717
        return AttributeCommonInfo::AT_MipsLongCall;	 // "gnu::long_call"
4718
      case 'm':	 // 3 strings to match.
4719
        switch (Name[6]) {
4720
        default: break;
4721
        case 'a':	 // 1 string to match.
4722
          if (memcmp(Name.data()+7, "y_alias", 7) != 0)
4723
            break;
4724
          return AttributeCommonInfo::AT_MayAlias;	 // "gnu::may_alias"
4725
        case 'i':	 // 1 string to match.
4726
          if (memcmp(Name.data()+7, "cromips", 7) != 0)
4727
            break;
4728
          return AttributeCommonInfo::AT_MicroMips;	 // "gnu::micromips"
4729
        case 's':	 // 1 string to match.
4730
          if (memcmp(Name.data()+7, "_struct", 7) != 0)
4731
            break;
4732
          return AttributeCommonInfo::AT_MSStruct;	 // "gnu::ms_struct"
4733
        }
4734
        break;
4735
      case 's':	 // 1 string to match.
4736
        if (memcmp(Name.data()+6, "electany", 8) != 0)
4737
          break;
4738
        return AttributeCommonInfo::AT_SelectAny;	 // "gnu::selectany"
4739
      case 't':	 // 1 string to match.
4740
        if (memcmp(Name.data()+6, "ls_model", 8) != 0)
4741
          break;
4742
        return AttributeCommonInfo::AT_TLSModel;	 // "gnu::tls_model"
4743
      }
4744
      break;
4745
    }
4746
    break;
4747
  case 15:	 // 18 strings to match.
4748
    switch (Name[0]) {
4749
    default: break;
4750
    case 'c':	 // 9 strings to match.
4751
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
4752
        break;
4753
      switch (Name[7]) {
4754
      default: break;
4755
      case 'N':	 // 1 string to match.
4756
        if (memcmp(Name.data()+8, "SObject", 7) != 0)
4757
          break;
4758
        return AttributeCommonInfo::AT_ObjCNSObject;	 // "clang::NSObject"
4759
      case 'a':	 // 1 string to match.
4760
        if (memcmp(Name.data()+8, "nnotate", 7) != 0)
4761
          break;
4762
        return AttributeCommonInfo::AT_Annotate;	 // "clang::annotate"
4763
      case 'c':	 // 1 string to match.
4764
        if (memcmp(Name.data()+8, "allback", 7) != 0)
4765
          break;
4766
        return AttributeCommonInfo::AT_Callback;	 // "clang::callback"
4767
      case 'i':	 // 2 strings to match.
4768
        if (Name[8] != 'b')
4769
          break;
4770
        switch (Name[9]) {
4771
        default: break;
4772
        case 'a':	 // 1 string to match.
4773
          if (memcmp(Name.data()+10, "ction", 5) != 0)
4774
            break;
4775
          return AttributeCommonInfo::AT_IBAction;	 // "clang::ibaction"
4776
        case 'o':	 // 1 string to match.
4777
          if (memcmp(Name.data()+10, "utlet", 5) != 0)
4778
            break;
4779
          return AttributeCommonInfo::AT_IBOutlet;	 // "clang::iboutlet"
4780
        }
4781
        break;
4782
      case 'm':	 // 1 string to match.
4783
        if (memcmp(Name.data()+8, "usttail", 7) != 0)
4784
          break;
4785
        return AttributeCommonInfo::AT_MustTail;	 // "clang::musttail"
4786
      case 'n':	 // 2 strings to match.
4787
        if (Name[8] != 'o')
4788
          break;
4789
        switch (Name[9]) {
4790
        default: break;
4791
        case 'e':	 // 1 string to match.
4792
          if (memcmp(Name.data()+10, "scape", 5) != 0)
4793
            break;
4794
          return AttributeCommonInfo::AT_NoEscape;	 // "clang::noescape"
4795
        case 'i':	 // 1 string to match.
4796
          if (memcmp(Name.data()+10, "nline", 5) != 0)
4797
            break;
4798
          return AttributeCommonInfo::AT_NoInline;	 // "clang::noinline"
4799
        }
4800
        break;
4801
      case 'u':	 // 1 string to match.
4802
        if (memcmp(Name.data()+8, "nlikely", 7) != 0)
4803
          break;
4804
        return AttributeCommonInfo::AT_Unlikely;	 // "clang::unlikely"
4805
      }
4806
      break;
4807
    case 'g':	 // 9 strings to match.
4808
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
4809
        break;
4810
      switch (Name[5]) {
4811
      default: break;
4812
      case 'a':	 // 2 strings to match.
4813
        switch (Name[6]) {
4814
        default: break;
4815
        case 'l':	 // 1 string to match.
4816
          if (memcmp(Name.data()+7, "loc_size", 8) != 0)
4817
            break;
4818
          return AttributeCommonInfo::AT_AllocSize;	 // "gnu::alloc_size"
4819
        case 'r':	 // 1 string to match.
4820
          if (memcmp(Name.data()+7, "tificial", 8) != 0)
4821
            break;
4822
          return AttributeCommonInfo::AT_Artificial;	 // "gnu::artificial"
4823
        }
4824
        break;
4825
      case 'd':	 // 2 strings to match.
4826
        if (Name[6] != 'e')
4827
          break;
4828
        switch (Name[7]) {
4829
        default: break;
4830
        case 'p':	 // 1 string to match.
4831
          if (memcmp(Name.data()+8, "recated", 7) != 0)
4832
            break;
4833
          return AttributeCommonInfo::AT_Deprecated;	 // "gnu::deprecated"
4834
        case 's':	 // 1 string to match.
4835
          if (memcmp(Name.data()+8, "tructor", 7) != 0)
4836
            break;
4837
          return AttributeCommonInfo::AT_Destructor;	 // "gnu::destructor"
4838
        }
4839
        break;
4840
      case 'f':	 // 1 string to match.
4841
        if (memcmp(Name.data()+6, "ormat_arg", 9) != 0)
4842
          break;
4843
        return AttributeCommonInfo::AT_FormatArg;	 // "gnu::format_arg"
4844
      case 'g':	 // 1 string to match.
4845
        if (memcmp(Name.data()+6, "nu_inline", 9) != 0)
4846
          break;
4847
        return AttributeCommonInfo::AT_GNUInline;	 // "gnu::gnu_inline"
4848
      case 'n':	 // 1 string to match.
4849
        if (memcmp(Name.data()+6, "ocf_check", 9) != 0)
4850
          break;
4851
        return AttributeCommonInfo::AT_AnyX86NoCfCheck;	 // "gnu::nocf_check"
4852
      case 's':	 // 1 string to match.
4853
        if (memcmp(Name.data()+6, "hort_call", 9) != 0)
4854
          break;
4855
        return AttributeCommonInfo::AT_MipsShortCall;	 // "gnu::short_call"
4856
      case 'v':	 // 1 string to match.
4857
        if (memcmp(Name.data()+6, "isibility", 9) != 0)
4858
          break;
4859
        return AttributeCommonInfo::AT_Visibility;	 // "gnu::visibility"
4860
      }
4861
      break;
4862
    }
4863
    break;
4864
  case 16:	 // 9 strings to match.
4865
    switch (Name[0]) {
4866
    default: break;
4867
    case 'c':	 // 3 strings to match.
4868
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
4869
        break;
4870
      switch (Name[7]) {
4871
      default: break;
4872
      case 'f':	 // 1 string to match.
4873
        if (memcmp(Name.data()+8, "lag_enum", 8) != 0)
4874
          break;
4875
        return AttributeCommonInfo::AT_FlagEnum;	 // "clang::flag_enum"
4876
      case 'n':	 // 1 string to match.
4877
        if (memcmp(Name.data()+8, "ouwtable", 8) != 0)
4878
          break;
4879
        return AttributeCommonInfo::AT_NoUwtable;	 // "clang::nouwtable"
4880
      case 's':	 // 1 string to match.
4881
        if (memcmp(Name.data()+8, "wiftcall", 8) != 0)
4882
          break;
4883
        return AttributeCommonInfo::AT_SwiftCall;	 // "clang::swiftcall"
4884
      }
4885
      break;
4886
    case 'g':	 // 6 strings to match.
4887
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
4888
        break;
4889
      switch (Name[5]) {
4890
      default: break;
4891
      case 'a':	 // 1 string to match.
4892
        if (memcmp(Name.data()+6, "lloc_align", 10) != 0)
4893
          break;
4894
        return AttributeCommonInfo::AT_AllocAlign;	 // "gnu::alloc_align"
4895
      case 'c':	 // 1 string to match.
4896
        if (memcmp(Name.data()+6, "onstructor", 10) != 0)
4897
          break;
4898
        return AttributeCommonInfo::AT_Constructor;	 // "gnu::constructor"
4899
      case 'f':	 // 1 string to match.
4900
        if (memcmp(Name.data()+6, "allthrough", 10) != 0)
4901
          break;
4902
        return AttributeCommonInfo::AT_FallThrough;	 // "gnu::fallthrough"
4903
      case 'n':	 // 1 string to match.
4904
        if (memcmp(Name.data()+6, "omicromips", 10) != 0)
4905
          break;
4906
        return AttributeCommonInfo::AT_NoMicroMips;	 // "gnu::nomicromips"
4907
      case 'v':	 // 1 string to match.
4908
        if (memcmp(Name.data()+6, "ector_size", 10) != 0)
4909
          break;
4910
        return AttributeCommonInfo::AT_VectorSize;	 // "gnu::vector_size"
4911
      case 'w':	 // 1 string to match.
4912
        if (memcmp(Name.data()+6, "arn_unused", 10) != 0)
4913
          break;
4914
        return AttributeCommonInfo::AT_WarnUnused;	 // "gnu::warn_unused"
4915
      }
4916
      break;
4917
    }
4918
    break;
4919
  case 17:	 // 4 strings to match.
4920
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
4921
      break;
4922
    switch (Name[7]) {
4923
    default: break;
4924
    case 'c':	 // 1 string to match.
4925
      if (memcmp(Name.data()+8, "onvergent", 9) != 0)
4926
        break;
4927
      return AttributeCommonInfo::AT_Convergent;	 // "clang::convergent"
4928
    case 'n':	 // 1 string to match.
4929
      if (memcmp(Name.data()+8, "o_builtin", 9) != 0)
4930
        break;
4931
      return AttributeCommonInfo::AT_NoBuiltin;	 // "clang::no_builtin"
4932
    case 'u':	 // 1 string to match.
4933
      if (memcmp(Name.data()+8, "se_handle", 9) != 0)
4934
        break;
4935
      return AttributeCommonInfo::AT_UseHandle;	 // "clang::use_handle"
4936
    case 'v':	 // 1 string to match.
4937
      if (memcmp(Name.data()+8, "ectorcall", 9) != 0)
4938
        break;
4939
      return AttributeCommonInfo::AT_VectorCall;	 // "clang::vectorcall"
4940
    }
4941
    break;
4942
  case 18:	 // 20 strings to match.
4943
    switch (Name[0]) {
4944
    default: break;
4945
    case 'c':	 // 17 strings to match.
4946
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
4947
        break;
4948
      switch (Name[7]) {
4949
      default: break;
4950
      case 'c':	 // 2 strings to match.
4951
        switch (Name[8]) {
4952
        default: break;
4953
        case 'a':	 // 1 string to match.
4954
          if (memcmp(Name.data()+9, "lled_once", 9) != 0)
4955
            break;
4956
          return AttributeCommonInfo::AT_CalledOnce;	 // "clang::called_once"
4957
        case 'f':	 // 1 string to match.
4958
          if (memcmp(Name.data()+9, "_consumed", 9) != 0)
4959
            break;
4960
          return AttributeCommonInfo::AT_CFConsumed;	 // "clang::cf_consumed"
4961
        }
4962
        break;
4963
      case 'e':	 // 2 strings to match.
4964
        switch (Name[8]) {
4965
        default: break;
4966
        case 'n':	 // 1 string to match.
4967
          if (memcmp(Name.data()+9, "force_tcb", 9) != 0)
4968
            break;
4969
          return AttributeCommonInfo::AT_EnforceTCB;	 // "clang::enforce_tcb"
4970
        case 'x':	 // 1 string to match.
4971
          if (memcmp(Name.data()+9, "port_name", 9) != 0)
4972
            break;
4973
          return AttributeCommonInfo::AT_WebAssemblyExportName;	 // "clang::export_name"
4974
        }
4975
        break;
4976
      case 'i':	 // 1 string to match.
4977
        if (memcmp(Name.data()+8, "mport_name", 10) != 0)
4978
          break;
4979
        return AttributeCommonInfo::AT_WebAssemblyImportName;	 // "clang::import_name"
4980
      case 'm':	 // 2 strings to match.
4981
        if (Name[8] != 'a')
4982
          break;
4983
        switch (Name[9]) {
4984
        default: break;
4985
        case 't':	 // 1 string to match.
4986
          if (memcmp(Name.data()+10, "rix_type", 8) != 0)
4987
            break;
4988
          return AttributeCommonInfo::AT_MatrixType;	 // "clang::matrix_type"
4989
        case 'y':	 // 1 string to match.
4990
          if (memcmp(Name.data()+10, "be_undef", 8) != 0)
4991
            break;
4992
          return AttributeCommonInfo::AT_MaybeUndef;	 // "clang::maybe_undef"
4993
        }
4994
        break;
4995
      case 'n':	 // 3 strings to match.
4996
        switch (Name[8]) {
4997
        default: break;
4998
        case 'o':	 // 2 strings to match.
4999
          switch (Name[9]) {
5000
          default: break;
5001
          case '_':	 // 1 string to match.
5002
            if (memcmp(Name.data()+10, "sanitize", 8) != 0)
5003
              break;
5004
            return AttributeCommonInfo::AT_NoSanitize;	 // "clang::no_sanitize"
5005
          case 'd':	 // 1 string to match.
5006
            if (memcmp(Name.data()+10, "uplicate", 8) != 0)
5007
              break;
5008
            return AttributeCommonInfo::AT_NoDuplicate;	 // "clang::noduplicate"
5009
          }
5010
          break;
5011
        case 's':	 // 1 string to match.
5012
          if (memcmp(Name.data()+9, "_consumed", 9) != 0)
5013
            break;
5014
          return AttributeCommonInfo::AT_NSConsumed;	 // "clang::ns_consumed"
5015
        }
5016
        break;
5017
      case 'o':	 // 3 strings to match.
5018
        switch (Name[8]) {
5019
        default: break;
5020
        case 'b':	 // 2 strings to match.
5021
          if (memcmp(Name.data()+9, "jc_", 3) != 0)
5022
            break;
5023
          switch (Name[12]) {
5024
          default: break;
5025
          case 'b':	 // 1 string to match.
5026
            if (memcmp(Name.data()+13, "ridge", 5) != 0)
5027
              break;
5028
            return AttributeCommonInfo::AT_ObjCBridge;	 // "clang::objc_bridge"
5029
          case 'd':	 // 1 string to match.
5030
            if (memcmp(Name.data()+13, "irect", 5) != 0)
5031
              break;
5032
            return AttributeCommonInfo::AT_ObjCDirect;	 // "clang::objc_direct"
5033
          }
5034
          break;
5035
        case 's':	 // 1 string to match.
5036
          if (memcmp(Name.data()+9, "_consumed", 9) != 0)
5037
            break;
5038
          return AttributeCommonInfo::AT_OSConsumed;	 // "clang::os_consumed"
5039
        }
5040
        break;
5041
      case 's':	 // 2 strings to match.
5042
        switch (Name[8]) {
5043
        default: break;
5044
        case 'w':	 // 1 string to match.
5045
          if (memcmp(Name.data()+9, "ift_async", 9) != 0)
5046
            break;
5047
          return AttributeCommonInfo::AT_SwiftAsync;	 // "clang::swift_async"
5048
        case 'y':	 // 1 string to match.
5049
          if (memcmp(Name.data()+9, "cl_kernel", 9) != 0)
5050
            break;
5051
          return AttributeCommonInfo::AT_SYCLKernel;	 // "clang::sycl_kernel"
5052
        }
5053
        break;
5054
      case 'u':	 // 1 string to match.
5055
        if (memcmp(Name.data()+8, "navailable", 10) != 0)
5056
          break;
5057
        return AttributeCommonInfo::AT_Unavailable;	 // "clang::unavailable"
5058
      case 'w':	 // 1 string to match.
5059
        if (memcmp(Name.data()+8, "eak_import", 10) != 0)
5060
          break;
5061
        return AttributeCommonInfo::AT_WeakImport;	 // "clang::weak_import"
5062
      }
5063
      break;
5064
    case 'g':	 // 3 strings to match.
5065
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
5066
        break;
5067
      switch (Name[5]) {
5068
      default: break;
5069
      case 'a':	 // 1 string to match.
5070
        if (memcmp(Name.data()+6, "lways_inline", 12) != 0)
5071
          break;
5072
        return AttributeCommonInfo::AT_AlwaysInline;	 // "gnu::always_inline"
5073
      case 'r':	 // 1 string to match.
5074
        if (memcmp(Name.data()+6, "eturns_twice", 12) != 0)
5075
          break;
5076
        return AttributeCommonInfo::AT_ReturnsTwice;	 // "gnu::returns_twice"
5077
      case 't':	 // 1 string to match.
5078
        if (memcmp(Name.data()+6, "arget_clones", 12) != 0)
5079
          break;
5080
        return AttributeCommonInfo::AT_TargetClones;	 // "gnu::target_clones"
5081
      }
5082
      break;
5083
    }
5084
    break;
5085
  case 19:	 // 12 strings to match.
5086
    switch (Name[0]) {
5087
    default: break;
5088
    case 'c':	 // 9 strings to match.
5089
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
5090
        break;
5091
      switch (Name[7]) {
5092
      default: break;
5093
      case 'a':	 // 1 string to match.
5094
        if (memcmp(Name.data()+8, "vailability", 11) != 0)
5095
          break;
5096
        return AttributeCommonInfo::AT_Availability;	 // "clang::availability"
5097
      case 'b':	 // 2 strings to match.
5098
        if (memcmp(Name.data()+8, "tf_", 3) != 0)
5099
          break;
5100
        switch (Name[11]) {
5101
        default: break;
5102
        case 'd':	 // 1 string to match.
5103
          if (memcmp(Name.data()+12, "ecl_tag", 7) != 0)
5104
            break;
5105
          return AttributeCommonInfo::AT_BTFDeclTag;	 // "clang::btf_decl_tag"
5106
        case 't':	 // 1 string to match.
5107
          if (memcmp(Name.data()+12, "ype_tag", 7) != 0)
5108
            break;
5109
          return AttributeCommonInfo::AT_BTFTypeTag;	 // "clang::btf_type_tag"
5110
        }
5111
        break;
5112
      case 'c':	 // 2 strings to match.
5113
        if (memcmp(Name.data()+8, "pu_", 3) != 0)
5114
          break;
5115
        switch (Name[11]) {
5116
        default: break;
5117
        case 'd':	 // 1 string to match.
5118
          if (memcmp(Name.data()+12, "ispatch", 7) != 0)
5119
            break;
5120
          return AttributeCommonInfo::AT_CPUDispatch;	 // "clang::cpu_dispatch"
5121
        case 's':	 // 1 string to match.
5122
          if (memcmp(Name.data()+12, "pecific", 7) != 0)
5123
            break;
5124
          return AttributeCommonInfo::AT_CPUSpecific;	 // "clang::cpu_specific"
5125
        }
5126
        break;
5127
      case 'o':	 // 3 strings to match.
5128
        switch (Name[8]) {
5129
        default: break;
5130
        case 'b':	 // 1 string to match.
5131
          if (memcmp(Name.data()+9, "jc_boxable", 10) != 0)
5132
            break;
5133
          return AttributeCommonInfo::AT_ObjCBoxable;	 // "clang::objc_boxable"
5134
        case 'p':	 // 1 string to match.
5135
          if (memcmp(Name.data()+9, "encl_local", 10) != 0)
5136
            break;
5137
          return AttributeCommonInfo::AT_OpenCLLocalAddressSpace;	 // "clang::opencl_local"
5138
        case 'v':	 // 1 string to match.
5139
          if (memcmp(Name.data()+9, "erloadable", 10) != 0)
5140
            break;
5141
          return AttributeCommonInfo::AT_Overloadable;	 // "clang::overloadable"
5142
        }
5143
        break;
5144
      case 'p':	 // 1 string to match.
5145
        if (memcmp(Name.data()+8, "reserve_all", 11) != 0)
5146
          break;
5147
        return AttributeCommonInfo::AT_PreserveAll;	 // "clang::preserve_all"
5148
      }
5149
      break;
5150
    case 'g':	 // 3 strings to match.
5151
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
5152
        break;
5153
      switch (Name[5]) {
5154
      default: break;
5155
      case 'a':	 // 1 string to match.
5156
        if (memcmp(Name.data()+6, "ssume_aligned", 13) != 0)
5157
          break;
5158
        return AttributeCommonInfo::AT_AssumeAligned;	 // "gnu::assume_aligned"
5159
      case 'n':	 // 1 string to match.
5160
        if (memcmp(Name.data()+6, "o_split_stack", 13) != 0)
5161
          break;
5162
        return AttributeCommonInfo::AT_NoSplitStack;	 // "gnu::no_split_stack"
5163
      case 't':	 // 1 string to match.
5164
        if (memcmp(Name.data()+6, "arget_version", 13) != 0)
5165
          break;
5166
        return AttributeCommonInfo::AT_TargetVersion;	 // "gnu::target_version"
5167
      }
5168
      break;
5169
    }
5170
    break;
5171
  case 20:	 // 12 strings to match.
5172
    switch (Name[0]) {
5173
    default: break;
5174
    case 'c':	 // 10 strings to match.
5175
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
5176
        break;
5177
      switch (Name[7]) {
5178
      default: break;
5179
      case 'a':	 // 4 strings to match.
5180
        switch (Name[8]) {
5181
        default: break;
5182
        case 'd':	 // 1 string to match.
5183
          if (memcmp(Name.data()+9, "dress_space", 11) != 0)
5184
            break;
5185
          return AttributeCommonInfo::AT_AddressSpace;	 // "clang::address_space"
5186
        case 'l':	 // 1 string to match.
5187
          if (memcmp(Name.data()+9, "ways_inline", 11) != 0)
5188
            break;
5189
          return AttributeCommonInfo::AT_AlwaysInline;	 // "clang::always_inline"
5190
        case 'm':	 // 1 string to match.
5191
          if (memcmp(Name.data()+9, "dgpu_kernel", 11) != 0)
5192
            break;
5193
          return AttributeCommonInfo::AT_AMDGPUKernelCall;	 // "clang::amdgpu_kernel"
5194
        case 'n':	 // 1 string to match.
5195
          if (memcmp(Name.data()+9, "notate_type", 11) != 0)
5196
            break;
5197
          return AttributeCommonInfo::AT_AnnotateType;	 // "clang::annotate_type"
5198
        }
5199
        break;
5200
      case 'b':	 // 1 string to match.
5201
        if (memcmp(Name.data()+8, "uiltin_alias", 12) != 0)
5202
          break;
5203
        return AttributeCommonInfo::AT_BuiltinAlias;	 // "clang::builtin_alias"
5204
      case 'i':	 // 1 string to match.
5205
        if (memcmp(Name.data()+8, "mport_module", 12) != 0)
5206
          break;
5207
        return AttributeCommonInfo::AT_WebAssemblyImportModule;	 // "clang::import_module"
5208
      case 'o':	 // 1 string to match.
5209
        if (memcmp(Name.data()+8, "pencl_global", 12) != 0)
5210
          break;
5211
        return AttributeCommonInfo::AT_OpenCLGlobalAddressSpace;	 // "clang::opencl_global"
5212
      case 'p':	 // 1 string to match.
5213
        if (memcmp(Name.data()+8, "reserve_most", 12) != 0)
5214
          break;
5215
        return AttributeCommonInfo::AT_PreserveMost;	 // "clang::preserve_most"
5216
      case 's':	 // 1 string to match.
5217
        if (memcmp(Name.data()+8, "wift_context", 12) != 0)
5218
          break;
5219
        return AttributeCommonInfo::AT_SwiftContext;	 // "clang::swift_context"
5220
      case 'x':	 // 1 string to match.
5221
        if (memcmp(Name.data()+8, "ray_log_args", 12) != 0)
5222
          break;
5223
        return AttributeCommonInfo::AT_XRayLogArgs;	 // "clang::xray_log_args"
5224
      }
5225
      break;
5226
    case 'g':	 // 2 strings to match.
5227
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
5228
        break;
5229
      switch (Name[5]) {
5230
      default: break;
5231
      case 'f':	 // 1 string to match.
5232
        if (memcmp(Name.data()+6, "unction_return", 14) != 0)
5233
          break;
5234
        return AttributeCommonInfo::AT_FunctionReturnThunks;	 // "gnu::function_return"
5235
      case 'r':	 // 1 string to match.
5236
        if (memcmp(Name.data()+6, "eturns_nonnull", 14) != 0)
5237
          break;
5238
        return AttributeCommonInfo::AT_ReturnsNonNull;	 // "gnu::returns_nonnull"
5239
      }
5240
      break;
5241
    }
5242
    break;
5243
  case 21:	 // 8 strings to match.
5244
    switch (Name[0]) {
5245
    default: break;
5246
    case 'c':	 // 7 strings to match.
5247
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
5248
        break;
5249
      switch (Name[7]) {
5250
      default: break;
5251
      case 'a':	 // 1 string to match.
5252
        if (memcmp(Name.data()+8, "cquire_handle", 13) != 0)
5253
          break;
5254
        return AttributeCommonInfo::AT_AcquireHandle;	 // "clang::acquire_handle"
5255
      case 'o':	 // 4 strings to match.
5256
        switch (Name[8]) {
5257
        default: break;
5258
        case 'b':	 // 2 strings to match.
5259
          if (memcmp(Name.data()+9, "jc_", 3) != 0)
5260
            break;
5261
          switch (Name[12]) {
5262
          default: break;
5263
          case 'e':	 // 1 string to match.
5264
            if (memcmp(Name.data()+13, "xception", 8) != 0)
5265
              break;
5266
            return AttributeCommonInfo::AT_ObjCException;	 // "clang::objc_exception"
5267
          case 'o':	 // 1 string to match.
5268
            if (memcmp(Name.data()+13, "wnership", 8) != 0)
5269
              break;
5270
            return AttributeCommonInfo::AT_ObjCOwnership;	 // "clang::objc_ownership"
5271
          }
5272
          break;
5273
        case 'p':	 // 2 strings to match.
5274
          if (memcmp(Name.data()+9, "encl_", 5) != 0)
5275
            break;
5276
          switch (Name[14]) {
5277
          default: break;
5278
          case 'g':	 // 1 string to match.
5279
            if (memcmp(Name.data()+15, "eneric", 6) != 0)
5280
              break;
5281
            return AttributeCommonInfo::AT_OpenCLGenericAddressSpace;	 // "clang::opencl_generic"
5282
          case 'p':	 // 1 string to match.
5283
            if (memcmp(Name.data()+15, "rivate", 6) != 0)
5284
              break;
5285
            return AttributeCommonInfo::AT_OpenCLPrivateAddressSpace;	 // "clang::opencl_private"
5286
          }
5287
          break;
5288
        }
5289
        break;
5290
      case 'r':	 // 1 string to match.
5291
        if (memcmp(Name.data()+8, "elease_handle", 13) != 0)
5292
          break;
5293
        return AttributeCommonInfo::AT_ReleaseHandle;	 // "clang::release_handle"
5294
      case 's':	 // 1 string to match.
5295
        if (memcmp(Name.data()+8, "wiftasynccall", 13) != 0)
5296
          break;
5297
        return AttributeCommonInfo::AT_SwiftAsyncCall;	 // "clang::swiftasynccall"
5298
      }
5299
      break;
5300
    case 'g':	 // 1 string to match.
5301
      if (memcmp(Name.data()+1, "nu::randomize_layout", 20) != 0)
5302
        break;
5303
      return AttributeCommonInfo::AT_RandomizeLayout;	 // "gnu::randomize_layout"
5304
    }
5305
    break;
5306
  case 22:	 // 9 strings to match.
5307
    switch (Name[0]) {
5308
    default: break;
5309
    case 'c':	 // 8 strings to match.
5310
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
5311
        break;
5312
      switch (Name[7]) {
5313
      default: break;
5314
      case 'a':	 // 1 string to match.
5315
        if (memcmp(Name.data()+8, "arch64_sve_pcs", 14) != 0)
5316
          break;
5317
        return AttributeCommonInfo::AT_AArch64SVEPcs;	 // "clang::aarch64_sve_pcs"
5318
      case 'n':	 // 1 string to match.
5319
        if (memcmp(Name.data()+8, "ot_tail_called", 14) != 0)
5320
          break;
5321
        return AttributeCommonInfo::AT_NotTailCalled;	 // "clang::not_tail_called"
5322
      case 'o':	 // 5 strings to match.
5323
        switch (Name[8]) {
5324
        default: break;
5325
        case 'b':	 // 2 strings to match.
5326
          if (memcmp(Name.data()+9, "jc_", 3) != 0)
5327
            break;
5328
          switch (Name[12]) {
5329
          default: break;
5330
          case 'c':	 // 1 string to match.
5331
            if (memcmp(Name.data()+13, "lass_stub", 9) != 0)
5332
              break;
5333
            return AttributeCommonInfo::AT_ObjCClassStub;	 // "clang::objc_class_stub"
5334
          case 'r':	 // 1 string to match.
5335
            if (memcmp(Name.data()+13, "oot_class", 9) != 0)
5336
              break;
5337
            return AttributeCommonInfo::AT_ObjCRootClass;	 // "clang::objc_root_class"
5338
          }
5339
          break;
5340
        case 'p':	 // 1 string to match.
5341
          if (memcmp(Name.data()+9, "encl_constant", 13) != 0)
5342
            break;
5343
          return AttributeCommonInfo::AT_OpenCLConstantAddressSpace;	 // "clang::opencl_constant"
5344
        case 'w':	 // 2 strings to match.
5345
          if (memcmp(Name.data()+9, "nership_", 8) != 0)
5346
            break;
5347
          switch (Name[17]) {
5348
          default: break;
5349
          case 'h':	 // 1 string to match.
5350
            if (memcmp(Name.data()+18, "olds", 4) != 0)
5351
              break;
5352
            return AttributeCommonInfo::AT_Ownership;	 // "clang::ownership_holds"
5353
          case 't':	 // 1 string to match.
5354
            if (memcmp(Name.data()+18, "akes", 4) != 0)
5355
              break;
5356
            return AttributeCommonInfo::AT_Ownership;	 // "clang::ownership_takes"
5357
          }
5358
          break;
5359
        }
5360
        break;
5361
      case 't':	 // 1 string to match.
5362
        if (memcmp(Name.data()+8, "ype_visibility", 14) != 0)
5363
          break;
5364
        return AttributeCommonInfo::AT_TypeVisibility;	 // "clang::type_visibility"
5365
      }
5366
      break;
5367
    case 'g':	 // 1 string to match.
5368
      if (memcmp(Name.data()+1, "nu::transparent_union", 21) != 0)
5369
        break;
5370
      return AttributeCommonInfo::AT_TransparentUnion;	 // "gnu::transparent_union"
5371
    }
5372
    break;
5373
  case 23:	 // 9 strings to match.
5374
    switch (Name[0]) {
5375
    default: break;
5376
    case 'c':	 // 7 strings to match.
5377
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
5378
        break;
5379
      switch (Name[7]) {
5380
      default: break;
5381
      case 'e':	 // 1 string to match.
5382
        if (memcmp(Name.data()+8, "nforce_tcb_leaf", 15) != 0)
5383
          break;
5384
        return AttributeCommonInfo::AT_EnforceTCBLeaf;	 // "clang::enforce_tcb_leaf"
5385
      case 'i':	 // 1 string to match.
5386
        if (memcmp(Name.data()+8, "nternal_linkage", 15) != 0)
5387
          break;
5388
        return AttributeCommonInfo::AT_InternalLinkage;	 // "clang::internal_linkage"
5389
      case 'm':	 // 1 string to match.
5390
        if (memcmp(Name.data()+8, "in_vector_width", 15) != 0)
5391
          break;
5392
        return AttributeCommonInfo::AT_MinVectorWidth;	 // "clang::min_vector_width"
5393
      case 'n':	 // 2 strings to match.
5394
        switch (Name[8]) {
5395
        default: break;
5396
        case 'e':	 // 1 string to match.
5397
          if (memcmp(Name.data()+9, "on_vector_type", 14) != 0)
5398
            break;
5399
          return AttributeCommonInfo::AT_NeonVectorType;	 // "clang::neon_vector_type"
5400
        case 's':	 // 1 string to match.
5401
          if (memcmp(Name.data()+9, "_consumes_self", 14) != 0)
5402
            break;
5403
          return AttributeCommonInfo::AT_NSConsumesSelf;	 // "clang::ns_consumes_self"
5404
        }
5405
        break;
5406
      case 'o':	 // 1 string to match.
5407
        if (memcmp(Name.data()+8, "s_consumes_this", 15) != 0)
5408
          break;
5409
        return AttributeCommonInfo::AT_OSConsumesThis;	 // "clang::os_consumes_this"
5410
      case 'p':	 // 1 string to match.
5411
        if (memcmp(Name.data()+8, "ass_object_size", 15) != 0)
5412
          break;
5413
        return AttributeCommonInfo::AT_PassObjectSize;	 // "clang::pass_object_size"
5414
      }
5415
      break;
5416
    case 'g':	 // 2 strings to match.
5417
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
5418
        break;
5419
      switch (Name[5]) {
5420
      default: break;
5421
      case 'n':	 // 1 string to match.
5422
        if (memcmp(Name.data()+6, "o_sanitize_thread", 17) != 0)
5423
          break;
5424
        return AttributeCommonInfo::AT_NoSanitizeSpecific;	 // "gnu::no_sanitize_thread"
5425
      case 'w':	 // 1 string to match.
5426
        if (memcmp(Name.data()+6, "arn_unused_result", 17) != 0)
5427
          break;
5428
        return AttributeCommonInfo::AT_WarnUnusedResult;	 // "gnu::warn_unused_result"
5429
      }
5430
      break;
5431
    }
5432
    break;
5433
  case 24:	 // 6 strings to match.
5434
    switch (Name[0]) {
5435
    default: break;
5436
    case 'c':	 // 3 strings to match.
5437
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
5438
        break;
5439
      switch (Name[7]) {
5440
      default: break;
5441
      case 'o':	 // 2 strings to match.
5442
        switch (Name[8]) {
5443
        default: break;
5444
        case 'b':	 // 1 string to match.
5445
          if (memcmp(Name.data()+9, "jc_runtime_name", 15) != 0)
5446
            break;
5447
          return AttributeCommonInfo::AT_ObjCRuntimeName;	 // "clang::objc_runtime_name"
5448
        case 'w':	 // 1 string to match.
5449
          if (memcmp(Name.data()+9, "nership_returns", 15) != 0)
5450
            break;
5451
          return AttributeCommonInfo::AT_Ownership;	 // "clang::ownership_returns"
5452
        }
5453
        break;
5454
      case 's':	 // 1 string to match.
5455
        if (memcmp(Name.data()+8, "wift_async_error", 16) != 0)
5456
          break;
5457
        return AttributeCommonInfo::AT_SwiftAsyncError;	 // "clang::swift_async_error"
5458
      }
5459
      break;
5460
    case 'g':	 // 3 strings to match.
5461
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
5462
        break;
5463
      switch (Name[5]) {
5464
      default: break;
5465
      case 'n':	 // 2 strings to match.
5466
        if (memcmp(Name.data()+6, "o_", 2) != 0)
5467
          break;
5468
        switch (Name[8]) {
5469
        default: break;
5470
        case 'r':	 // 1 string to match.
5471
          if (memcmp(Name.data()+9, "andomize_layout", 15) != 0)
5472
            break;
5473
          return AttributeCommonInfo::AT_NoRandomizeLayout;	 // "gnu::no_randomize_layout"
5474
        case 's':	 // 1 string to match.
5475
          if (memcmp(Name.data()+9, "anitize_address", 15) != 0)
5476
            break;
5477
          return AttributeCommonInfo::AT_NoSanitizeSpecific;	 // "gnu::no_sanitize_address"
5478
        }
5479
        break;
5480
      case 'z':	 // 1 string to match.
5481
        if (memcmp(Name.data()+6, "ero_call_used_regs", 18) != 0)
5482
          break;
5483
        return AttributeCommonInfo::AT_ZeroCallUsedRegs;	 // "gnu::zero_call_used_regs"
5484
      }
5485
      break;
5486
    }
5487
    break;
5488
  case 25:	 // 12 strings to match.
5489
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
5490
      break;
5491
    switch (Name[7]) {
5492
    default: break;
5493
    case 'a':	 // 1 string to match.
5494
      if (memcmp(Name.data()+8, "arch64_vector_pcs", 17) != 0)
5495
        break;
5496
      return AttributeCommonInfo::AT_AArch64VectorPcs;	 // "clang::aarch64_vector_pcs"
5497
    case 'd':	 // 1 string to match.
5498
      if (memcmp(Name.data()+8, "isable_tail_calls", 17) != 0)
5499
        break;
5500
      return AttributeCommonInfo::AT_DisableTailCalls;	 // "clang::disable_tail_calls"
5501
    case 'e':	 // 1 string to match.
5502
      if (memcmp(Name.data()+8, "num_extensibility", 17) != 0)
5503
        break;
5504
      return AttributeCommonInfo::AT_EnumExtensibility;	 // "clang::enum_extensibility"
5505
    case 'i':	 // 1 string to match.
5506
      if (memcmp(Name.data()+8, "boutletcollection", 17) != 0)
5507
        break;
5508
      return AttributeCommonInfo::AT_IBOutletCollection;	 // "clang::iboutletcollection"
5509
    case 'm':	 // 1 string to match.
5510
      if (memcmp(Name.data()+8, "ig_server_routine", 17) != 0)
5511
        break;
5512
      return AttributeCommonInfo::AT_MIGServerRoutine;	 // "clang::mig_server_routine"
5513
    case 'n':	 // 2 strings to match.
5514
      if (memcmp(Name.data()+8, "o_s", 3) != 0)
5515
        break;
5516
      switch (Name[11]) {
5517
      default: break;
5518
      case 'a':	 // 1 string to match.
5519
        if (memcmp(Name.data()+12, "nitize_memory", 13) != 0)
5520
          break;
5521
        return AttributeCommonInfo::AT_NoSanitizeSpecific;	 // "clang::no_sanitize_memory"
5522
      case 't':	 // 1 string to match.
5523
        if (memcmp(Name.data()+12, "ack_protector", 13) != 0)
5524
          break;
5525
        return AttributeCommonInfo::AT_NoStackProtector;	 // "clang::no_stack_protector"
5526
      }
5527
      break;
5528
    case 'o':	 // 3 strings to match.
5529
      switch (Name[8]) {
5530
      default: break;
5531
      case 'b':	 // 2 strings to match.
5532
        if (memcmp(Name.data()+9, "jc_", 3) != 0)
5533
          break;
5534
        switch (Name[12]) {
5535
        default: break;
5536
        case 'm':	 // 1 string to match.
5537
          if (memcmp(Name.data()+13, "ethod_family", 12) != 0)
5538
            break;
5539
          return AttributeCommonInfo::AT_ObjCMethodFamily;	 // "clang::objc_method_family"
5540
        case 'n':	 // 1 string to match.
5541
          if (memcmp(Name.data()+13, "onlazy_class", 12) != 0)
5542
            break;
5543
          return AttributeCommonInfo::AT_ObjCNonLazyClass;	 // "clang::objc_nonlazy_class"
5544
        }
5545
        break;
5546
      case 'p':	 // 1 string to match.
5547
        if (memcmp(Name.data()+9, "encl_global_host", 16) != 0)
5548
          break;
5549
        return AttributeCommonInfo::AT_OpenCLGlobalHostAddressSpace;	 // "clang::opencl_global_host"
5550
      }
5551
      break;
5552
    case 's':	 // 2 strings to match.
5553
      switch (Name[8]) {
5554
      default: break;
5555
      case 'w':	 // 1 string to match.
5556
        if (memcmp(Name.data()+9, "ift_error_result", 16) != 0)
5557
          break;
5558
        return AttributeCommonInfo::AT_SwiftErrorResult;	 // "clang::swift_error_result"
5559
      case 'y':	 // 1 string to match.
5560
        if (memcmp(Name.data()+9, "cl_special_class", 16) != 0)
5561
          break;
5562
        return AttributeCommonInfo::AT_SYCLSpecialClass;	 // "clang::sycl_special_class"
5563
      }
5564
      break;
5565
    }
5566
    break;
5567
  case 26:	 // 11 strings to match.
5568
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
5569
      break;
5570
    switch (Name[7]) {
5571
    default: break;
5572
    case 'c':	 // 3 strings to match.
5573
      if (memcmp(Name.data()+8, "f_", 2) != 0)
5574
        break;
5575
      switch (Name[10]) {
5576
      default: break;
5577
      case 'a':	 // 1 string to match.
5578
        if (memcmp(Name.data()+11, "udited_transfer", 15) != 0)
5579
          break;
5580
        return AttributeCommonInfo::AT_CFAuditedTransfer;	 // "clang::cf_audited_transfer"
5581
      case 'r':	 // 1 string to match.
5582
        if (memcmp(Name.data()+11, "eturns_retained", 15) != 0)
5583
          break;
5584
        return AttributeCommonInfo::AT_CFReturnsRetained;	 // "clang::cf_returns_retained"
5585
      case 'u':	 // 1 string to match.
5586
        if (memcmp(Name.data()+11, "nknown_transfer", 15) != 0)
5587
          break;
5588
        return AttributeCommonInfo::AT_CFUnknownTransfer;	 // "clang::cf_unknown_transfer"
5589
      }
5590
      break;
5591
    case 'd':	 // 1 string to match.
5592
      if (memcmp(Name.data()+8, "iagnose_as_builtin", 18) != 0)
5593
        break;
5594
      return AttributeCommonInfo::AT_DiagnoseAsBuiltin;	 // "clang::diagnose_as_builtin"
5595
    case 'n':	 // 1 string to match.
5596
      if (memcmp(Name.data()+8, "s_returns_retained", 18) != 0)
5597
        break;
5598
      return AttributeCommonInfo::AT_NSReturnsRetained;	 // "clang::ns_returns_retained"
5599
    case 'o':	 // 5 strings to match.
5600
      switch (Name[8]) {
5601
      default: break;
5602
      case 'b':	 // 4 strings to match.
5603
        if (memcmp(Name.data()+9, "jc_", 3) != 0)
5604
          break;
5605
        switch (Name[12]) {
5606
        default: break;
5607
        case 'b':	 // 2 strings to match.
5608
          if (memcmp(Name.data()+13, "ridge_", 6) != 0)
5609
            break;
5610
          switch (Name[19]) {
5611
          default: break;
5612
          case 'm':	 // 1 string to match.
5613
            if (memcmp(Name.data()+20, "utable", 6) != 0)
5614
              break;
5615
            return AttributeCommonInfo::AT_ObjCBridgeMutable;	 // "clang::objc_bridge_mutable"
5616
          case 'r':	 // 1 string to match.
5617
            if (memcmp(Name.data()+20, "elated", 6) != 0)
5618
              break;
5619
            return AttributeCommonInfo::AT_ObjCBridgeRelated;	 // "clang::objc_bridge_related"
5620
          }
5621
          break;
5622
        case 'd':	 // 1 string to match.
5623
          if (memcmp(Name.data()+13, "irect_members", 13) != 0)
5624
            break;
5625
          return AttributeCommonInfo::AT_ObjCDirectMembers;	 // "clang::objc_direct_members"
5626
        case 'r':	 // 1 string to match.
5627
          if (memcmp(Name.data()+13, "equires_super", 13) != 0)
5628
            break;
5629
          return AttributeCommonInfo::AT_ObjCRequiresSuper;	 // "clang::objc_requires_super"
5630
        }
5631
        break;
5632
      case 's':	 // 1 string to match.
5633
        if (memcmp(Name.data()+9, "_returns_retained", 17) != 0)
5634
          break;
5635
        return AttributeCommonInfo::AT_OSReturnsRetained;	 // "clang::os_returns_retained"
5636
      }
5637
      break;
5638
    case 's':	 // 1 string to match.
5639
      if (memcmp(Name.data()+8, "wift_async_context", 18) != 0)
5640
        break;
5641
      return AttributeCommonInfo::AT_SwiftAsyncContext;	 // "clang::swift_async_context"
5642
    }
5643
    break;
5644
  case 27:	 // 5 strings to match.
5645
    switch (Name[0]) {
5646
    default: break;
5647
    case 'c':	 // 4 strings to match.
5648
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
5649
        break;
5650
      switch (Name[7]) {
5651
      default: break;
5652
      case 'l':	 // 1 string to match.
5653
        if (memcmp(Name.data()+8, "oader_uninitialized", 19) != 0)
5654
          break;
5655
        return AttributeCommonInfo::AT_LoaderUninitialized;	 // "clang::loader_uninitialized"
5656
      case 'n':	 // 1 string to match.
5657
        if (memcmp(Name.data()+8, "eon_polyvector_type", 19) != 0)
5658
          break;
5659
        return AttributeCommonInfo::AT_NeonPolyVectorType;	 // "clang::neon_polyvector_type"
5660
      case 'o':	 // 2 strings to match.
5661
        switch (Name[8]) {
5662
        default: break;
5663
        case 'b':	 // 1 string to match.
5664
          if (memcmp(Name.data()+9, "jc_runtime_visible", 18) != 0)
5665
            break;
5666
          return AttributeCommonInfo::AT_ObjCRuntimeVisible;	 // "clang::objc_runtime_visible"
5667
        case 'p':	 // 1 string to match.
5668
          if (memcmp(Name.data()+9, "encl_global_device", 18) != 0)
5669
            break;
5670
          return AttributeCommonInfo::AT_OpenCLGlobalDeviceAddressSpace;	 // "clang::opencl_global_device"
5671
        }
5672
        break;
5673
      }
5674
      break;
5675
    case 'g':	 // 1 string to match.
5676
      if (memcmp(Name.data()+1, "nu::no_instrument_function", 26) != 0)
5677
        break;
5678
      return AttributeCommonInfo::AT_NoInstrumentFunction;	 // "gnu::no_instrument_function"
5679
    }
5680
    break;
5681
  case 28:	 // 8 strings to match.
5682
    switch (Name[0]) {
5683
    default: break;
5684
    case 'c':	 // 7 strings to match.
5685
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
5686
        break;
5687
      switch (Name[7]) {
5688
      default: break;
5689
      case 'l':	 // 1 string to match.
5690
        if (memcmp(Name.data()+8, "to_visibility_public", 20) != 0)
5691
          break;
5692
        return AttributeCommonInfo::AT_LTOVisibilityPublic;	 // "clang::lto_visibility_public"
5693
      case 'o':	 // 1 string to match.
5694
        if (memcmp(Name.data()+8, "bjc_precise_lifetime", 20) != 0)
5695
          break;
5696
        return AttributeCommonInfo::AT_ObjCPreciseLifetime;	 // "clang::objc_precise_lifetime"
5697
      case 'p':	 // 2 strings to match.
5698
        switch (Name[8]) {
5699
        default: break;
5700
        case 'o':	 // 1 string to match.
5701
          if (memcmp(Name.data()+9, "inter_with_type_tag", 19) != 0)
5702
            break;
5703
          return AttributeCommonInfo::AT_ArgumentWithTypeTag;	 // "clang::pointer_with_type_tag"
5704
        case 'r':	 // 1 string to match.
5705
          if (memcmp(Name.data()+9, "eserve_access_index", 19) != 0)
5706
            break;
5707
          return AttributeCommonInfo::AT_BPFPreserveAccessIndex;	 // "clang::preserve_access_index"
5708
        }
5709
        break;
5710
      case 's':	 // 1 string to match.
5711
        if (memcmp(Name.data()+8, "wift_indirect_result", 20) != 0)
5712
          break;
5713
        return AttributeCommonInfo::AT_SwiftIndirectResult;	 // "clang::swift_indirect_result"
5714
      case 't':	 // 1 string to match.
5715
        if (memcmp(Name.data()+8, "ype_tag_for_datatype", 20) != 0)
5716
          break;
5717
        return AttributeCommonInfo::AT_TypeTagForDatatype;	 // "clang::type_tag_for_datatype"
5718
      case 'x':	 // 1 string to match.
5719
        if (memcmp(Name.data()+8, "ray_never_instrument", 20) != 0)
5720
          break;
5721
        return AttributeCommonInfo::AT_XRayInstrument;	 // "clang::xray_never_instrument"
5722
      }
5723
      break;
5724
    case 'g':	 // 1 string to match.
5725
      if (memcmp(Name.data()+1, "nu::force_align_arg_pointer", 27) != 0)
5726
        break;
5727
      return AttributeCommonInfo::AT_X86ForceAlignArgPointer;	 // "gnu::force_align_arg_pointer"
5728
    }
5729
    break;
5730
  case 29:	 // 5 strings to match.
5731
    switch (Name[0]) {
5732
    default: break;
5733
    case 'c':	 // 4 strings to match.
5734
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
5735
        break;
5736
      switch (Name[7]) {
5737
      default: break;
5738
      case 'a':	 // 1 string to match.
5739
        if (memcmp(Name.data()+8, "rgument_with_type_tag", 21) != 0)
5740
          break;
5741
        return AttributeCommonInfo::AT_ArgumentWithTypeTag;	 // "clang::argument_with_type_tag"
5742
      case 'e':	 // 1 string to match.
5743
        if (memcmp(Name.data()+8, "xternal_source_symbol", 21) != 0)
5744
          break;
5745
        return AttributeCommonInfo::AT_ExternalSourceSymbol;	 // "clang::external_source_symbol"
5746
      case 'o':	 // 1 string to match.
5747
        if (memcmp(Name.data()+8, "bjc_independent_class", 21) != 0)
5748
          break;
5749
        return AttributeCommonInfo::AT_ObjCIndependentClass;	 // "clang::objc_independent_class"
5750
      case 'x':	 // 1 string to match.
5751
        if (memcmp(Name.data()+8, "ray_always_instrument", 21) != 0)
5752
          break;
5753
        return AttributeCommonInfo::AT_XRayInstrument;	 // "clang::xray_always_instrument"
5754
      }
5755
      break;
5756
    case 'g':	 // 1 string to match.
5757
      if (memcmp(Name.data()+1, "nu::patchable_function_entry", 28) != 0)
5758
        break;
5759
      return AttributeCommonInfo::AT_PatchableFunctionEntry;	 // "gnu::patchable_function_entry"
5760
    }
5761
    break;
5762
  case 30:	 // 5 strings to match.
5763
    switch (Name[0]) {
5764
    default: break;
5765
    case 'c':	 // 4 strings to match.
5766
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
5767
        break;
5768
      switch (Name[7]) {
5769
      default: break;
5770
      case 'c':	 // 1 string to match.
5771
        if (memcmp(Name.data()+8, "f_returns_not_retained", 22) != 0)
5772
          break;
5773
        return AttributeCommonInfo::AT_CFReturnsNotRetained;	 // "clang::cf_returns_not_retained"
5774
      case 'n':	 // 2 strings to match.
5775
        if (memcmp(Name.data()+8, "s_returns_", 10) != 0)
5776
          break;
5777
        switch (Name[18]) {
5778
        default: break;
5779
        case 'a':	 // 1 string to match.
5780
          if (memcmp(Name.data()+19, "utoreleased", 11) != 0)
5781
            break;
5782
          return AttributeCommonInfo::AT_NSReturnsAutoreleased;	 // "clang::ns_returns_autoreleased"
5783
        case 'n':	 // 1 string to match.
5784
          if (memcmp(Name.data()+19, "ot_retained", 11) != 0)
5785
            break;
5786
          return AttributeCommonInfo::AT_NSReturnsNotRetained;	 // "clang::ns_returns_not_retained"
5787
        }
5788
        break;
5789
      case 'o':	 // 1 string to match.
5790
        if (memcmp(Name.data()+8, "s_returns_not_retained", 22) != 0)
5791
          break;
5792
        return AttributeCommonInfo::AT_OSReturnsNotRetained;	 // "clang::os_returns_not_retained"
5793
      }
5794
      break;
5795
    case 'g':	 // 1 string to match.
5796
      if (memcmp(Name.data()+1, "nu::no_caller_saved_registers", 29) != 0)
5797
        break;
5798
      return AttributeCommonInfo::AT_AnyX86NoCallerSavedRegisters;	 // "gnu::no_caller_saved_registers"
5799
    }
5800
    break;
5801
  case 31:	 // 4 strings to match.
5802
    switch (Name[0]) {
5803
    default: break;
5804
    case 'c':	 // 3 strings to match.
5805
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
5806
        break;
5807
      switch (Name[7]) {
5808
      default: break;
5809
      case 'c':	 // 1 string to match.
5810
        if (memcmp(Name.data()+8, "fi_canonical_jump_table", 23) != 0)
5811
          break;
5812
        return AttributeCommonInfo::AT_CFICanonicalJumpTable;	 // "clang::cfi_canonical_jump_table"
5813
      case 'o':	 // 1 string to match.
5814
        if (memcmp(Name.data()+8, "bjc_externally_retained", 23) != 0)
5815
          break;
5816
        return AttributeCommonInfo::AT_ObjCExternallyRetained;	 // "clang::objc_externally_retained"
5817
      case 'p':	 // 1 string to match.
5818
        if (memcmp(Name.data()+8, "ass_dynamic_object_size", 23) != 0)
5819
          break;
5820
        return AttributeCommonInfo::AT_PassObjectSize;	 // "clang::pass_dynamic_object_size"
5821
      }
5822
      break;
5823
    case 'g':	 // 1 string to match.
5824
      if (memcmp(Name.data()+1, "nu::no_address_safety_analysis", 30) != 0)
5825
        break;
5826
      return AttributeCommonInfo::AT_NoSanitizeSpecific;	 // "gnu::no_address_safety_analysis"
5827
    }
5828
    break;
5829
  case 32:	 // 3 strings to match.
5830
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
5831
      break;
5832
    switch (Name[7]) {
5833
    default: break;
5834
    case '_':	 // 1 string to match.
5835
      if (memcmp(Name.data()+8, "_clang_arm_builtin_alias", 24) != 0)
5836
        break;
5837
      return AttributeCommonInfo::AT_ArmBuiltinAlias;	 // "clang::__clang_arm_builtin_alias"
5838
    case 'n':	 // 1 string to match.
5839
      if (memcmp(Name.data()+8, "o_thread_safety_analysis", 24) != 0)
5840
        break;
5841
      return AttributeCommonInfo::AT_NoThreadSafetyAnalysis;	 // "clang::no_thread_safety_analysis"
5842
    case 'o':	 // 1 string to match.
5843
      if (memcmp(Name.data()+8, "bjc_non_runtime_protocol", 24) != 0)
5844
        break;
5845
      return AttributeCommonInfo::AT_ObjCNonRuntimeProtocol;	 // "clang::objc_non_runtime_protocol"
5846
    }
5847
    break;
5848
  case 33:	 // 2 strings to match.
5849
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
5850
      break;
5851
    switch (Name[7]) {
5852
    default: break;
5853
    case 'o':	 // 1 string to match.
5854
      if (memcmp(Name.data()+8, "bjc_returns_inner_pointer", 25) != 0)
5855
        break;
5856
      return AttributeCommonInfo::AT_ObjCReturnsInnerPointer;	 // "clang::objc_returns_inner_pointer"
5857
    case 's':	 // 1 string to match.
5858
      if (memcmp(Name.data()+8, "peculative_load_hardening", 25) != 0)
5859
        break;
5860
      return AttributeCommonInfo::AT_SpeculativeLoadHardening;	 // "clang::speculative_load_hardening"
5861
    }
5862
    break;
5863
  case 34:	 // 4 strings to match.
5864
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
5865
      break;
5866
    switch (Name[7]) {
5867
    default: break;
5868
    case 'e':	 // 1 string to match.
5869
      if (memcmp(Name.data()+8, "nforce_read_only_placement", 26) != 0)
5870
        break;
5871
      return AttributeCommonInfo::AT_ReadOnlyPlacement;	 // "clang::enforce_read_only_placement"
5872
    case 'o':	 // 3 strings to match.
5873
      switch (Name[8]) {
5874
      default: break;
5875
      case 'b':	 // 2 strings to match.
5876
        if (memcmp(Name.data()+9, "jc_", 3) != 0)
5877
          break;
5878
        switch (Name[12]) {
5879
        default: break;
5880
        case 'd':	 // 1 string to match.
5881
          if (memcmp(Name.data()+13, "esignated_initializer", 21) != 0)
5882
            break;
5883
          return AttributeCommonInfo::AT_ObjCDesignatedInitializer;	 // "clang::objc_designated_initializer"
5884
        case 's':	 // 1 string to match.
5885
          if (memcmp(Name.data()+13, "ubclassing_restricted", 21) != 0)
5886
            break;
5887
          return AttributeCommonInfo::AT_ObjCSubclassingRestricted;	 // "clang::objc_subclassing_restricted"
5888
        }
5889
        break;
5890
      case 's':	 // 1 string to match.
5891
        if (memcmp(Name.data()+9, "_returns_retained_on_zero", 25) != 0)
5892
          break;
5893
        return AttributeCommonInfo::AT_OSReturnsRetainedOnZero;	 // "clang::os_returns_retained_on_zero"
5894
      }
5895
      break;
5896
    }
5897
    break;
5898
  case 35:	 // 1 string to match.
5899
    if (memcmp(Name.data()+0, "gnu::no_profile_instrument_function", 35) != 0)
5900
      break;
5901
    return AttributeCommonInfo::AT_NoProfileFunction;	 // "gnu::no_profile_instrument_function"
5902
  case 36:	 // 1 string to match.
5903
    if (memcmp(Name.data()+0, "clang::no_speculative_load_hardening", 36) != 0)
5904
      break;
5905
    return AttributeCommonInfo::AT_NoSpeculativeLoadHardening;	 // "clang::no_speculative_load_hardening"
5906
  case 38:	 // 1 string to match.
5907
    if (memcmp(Name.data()+0, "clang::os_returns_retained_on_non_zero", 38) != 0)
5908
      break;
5909
    return AttributeCommonInfo::AT_OSReturnsRetainedOnNonZero;	 // "clang::os_returns_retained_on_non_zero"
5910
  case 40:	 // 1 string to match.
5911
    if (memcmp(Name.data()+0, "clang::disable_sanitizer_instrumentation", 40) != 0)
5912
      break;
5913
    return AttributeCommonInfo::AT_DisableSanitizerInstrumentation;	 // "clang::disable_sanitizer_instrumentation"
5914
  case 41:	 // 1 string to match.
5915
    if (memcmp(Name.data()+0, "clang::objc_requires_property_definitions", 41) != 0)
5916
      break;
5917
    return AttributeCommonInfo::AT_ObjCRequiresPropertyDefs;	 // "clang::objc_requires_property_definitions"
5918
  case 42:	 // 3 strings to match.
5919
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
5920
      break;
5921
    switch (Name[7]) {
5922
    default: break;
5923
    case '_':	 // 1 string to match.
5924
      if (memcmp(Name.data()+8, "_clang_arm_mve_strict_polymorphism", 34) != 0)
5925
        break;
5926
      return AttributeCommonInfo::AT_ArmMveStrictPolymorphism;	 // "clang::__clang_arm_mve_strict_polymorphism"
5927
    case 'e':	 // 1 string to match.
5928
      if (memcmp(Name.data()+8, "xclude_from_explicit_instantiation", 34) != 0)
5929
        break;
5930
      return AttributeCommonInfo::AT_ExcludeFromExplicitInstantiation;	 // "clang::exclude_from_explicit_instantiation"
5931
    case 'o':	 // 1 string to match.
5932
      if (memcmp(Name.data()+8, "bjc_arc_weak_reference_unavailable", 34) != 0)
5933
        break;
5934
      return AttributeCommonInfo::AT_ArcWeakrefUnavailable;	 // "clang::objc_arc_weak_reference_unavailable"
5935
    }
5936
    break;
5937
  case 53:	 // 1 string to match.
5938
    if (memcmp(Name.data()+0, "clang::objc_protocol_requires_explicit_implementation", 53) != 0)
5939
      break;
5940
    return AttributeCommonInfo::AT_ObjCExplicitProtocolImpl;	 // "clang::objc_protocol_requires_explicit_implementation"
5941
  }
5942
  } else if (AttributeCommonInfo::AS_Keyword == Syntax || AttributeCommonInfo::AS_ContextSensitiveKeyword == Syntax) {
5943
  switch (Name.size()) {
5944
  default: break;
5945
  case 5:	 // 2 strings to match.
5946
    switch (Name[0]) {
5947
    default: break;
5948
    case '_':	 // 1 string to match.
5949
      if (memcmp(Name.data()+1, "_w64", 4) != 0)
5950
        break;
5951
      return AttributeCommonInfo::IgnoredAttribute;	 // "__w64"
5952
    case 'l':	 // 1 string to match.
5953
      if (memcmp(Name.data()+1, "ocal", 4) != 0)
5954
        break;
5955
      return AttributeCommonInfo::AT_OpenCLLocalAddressSpace;	 // "local"
5956
    }
5957
    break;
5958
  case 6:	 // 5 strings to match.
5959
    switch (Name[0]) {
5960
    default: break;
5961
    case '_':	 // 3 strings to match.
5962
      switch (Name[1]) {
5963
      default: break;
5964
      case '_':	 // 2 strings to match.
5965
        switch (Name[2]) {
5966
        default: break;
5967
        case 's':	 // 1 string to match.
5968
          if (memcmp(Name.data()+3, "ptr", 3) != 0)
5969
            break;
5970
          return AttributeCommonInfo::AT_SPtr;	 // "__sptr"
5971
        case 'u':	 // 1 string to match.
5972
          if (memcmp(Name.data()+3, "ptr", 3) != 0)
5973
            break;
5974
          return AttributeCommonInfo::AT_UPtr;	 // "__uptr"
5975
        }
5976
        break;
5977
      case 'c':	 // 1 string to match.
5978
        if (memcmp(Name.data()+2, "decl", 4) != 0)
5979
          break;
5980
        return AttributeCommonInfo::AT_CDecl;	 // "_cdecl"
5981
      }
5982
      break;
5983
    case 'g':	 // 1 string to match.
5984
      if (memcmp(Name.data()+1, "lobal", 5) != 0)
5985
        break;
5986
      return AttributeCommonInfo::AT_OpenCLGlobalAddressSpace;	 // "global"
5987
    case 'k':	 // 1 string to match.
5988
      if (memcmp(Name.data()+1, "ernel", 5) != 0)
5989
        break;
5990
      return AttributeCommonInfo::AT_OpenCLKernel;	 // "kernel"
5991
    }
5992
    break;
5993
  case 7:	 // 8 strings to match.
5994
    switch (Name[0]) {
5995
    default: break;
5996
    case '_':	 // 5 strings to match.
5997
      switch (Name[1]) {
5998
      default: break;
5999
      case '_':	 // 4 strings to match.
6000
        switch (Name[2]) {
6001
        default: break;
6002
        case 'c':	 // 1 string to match.
6003
          if (memcmp(Name.data()+3, "decl", 4) != 0)
6004
            break;
6005
          return AttributeCommonInfo::AT_CDecl;	 // "__cdecl"
6006
        case 'l':	 // 1 string to match.
6007
          if (memcmp(Name.data()+3, "ocal", 4) != 0)
6008
            break;
6009
          return AttributeCommonInfo::AT_OpenCLLocalAddressSpace;	 // "__local"
6010
        case 'p':	 // 2 strings to match.
6011
          if (memcmp(Name.data()+3, "tr", 2) != 0)
6012
            break;
6013
          switch (Name[5]) {
6014
          default: break;
6015
          case '3':	 // 1 string to match.
6016
            if (Name[6] != '2')
6017
              break;
6018
            return AttributeCommonInfo::AT_Ptr32;	 // "__ptr32"
6019
          case '6':	 // 1 string to match.
6020
            if (Name[6] != '4')
6021
              break;
6022
            return AttributeCommonInfo::AT_Ptr64;	 // "__ptr64"
6023
          }
6024
          break;
6025
        }
6026
        break;
6027
      case 'p':	 // 1 string to match.
6028
        if (memcmp(Name.data()+2, "ascal", 5) != 0)
6029
          break;
6030
        return AttributeCommonInfo::AT_Pascal;	 // "_pascal"
6031
      }
6032
      break;
6033
    case 'a':	 // 1 string to match.
6034
      if (memcmp(Name.data()+1, "lignas", 6) != 0)
6035
        break;
6036
      return AttributeCommonInfo::AT_Aligned;	 // "alignas"
6037
    case 'g':	 // 1 string to match.
6038
      if (memcmp(Name.data()+1, "eneric", 6) != 0)
6039
        break;
6040
      return AttributeCommonInfo::AT_OpenCLGenericAddressSpace;	 // "generic"
6041
    case 'p':	 // 1 string to match.
6042
      if (memcmp(Name.data()+1, "rivate", 6) != 0)
6043
        break;
6044
      return AttributeCommonInfo::AT_OpenCLPrivateAddressSpace;	 // "private"
6045
    }
6046
    break;
6047
  case 8:	 // 8 strings to match.
6048
    switch (Name[0]) {
6049
    default: break;
6050
    case '_':	 // 7 strings to match.
6051
      switch (Name[1]) {
6052
      default: break;
6053
      case 'A':	 // 1 string to match.
6054
        if (memcmp(Name.data()+2, "lignas", 6) != 0)
6055
          break;
6056
        return AttributeCommonInfo::AT_Aligned;	 // "_Alignas"
6057
      case 'N':	 // 1 string to match.
6058
        if (memcmp(Name.data()+2, "onnull", 6) != 0)
6059
          break;
6060
        return AttributeCommonInfo::AT_TypeNonNull;	 // "_Nonnull"
6061
      case '_':	 // 4 strings to match.
6062
        switch (Name[2]) {
6063
        default: break;
6064
        case 'g':	 // 1 string to match.
6065
          if (memcmp(Name.data()+3, "lobal", 5) != 0)
6066
            break;
6067
          return AttributeCommonInfo::AT_OpenCLGlobalAddressSpace;	 // "__global"
6068
        case 'k':	 // 2 strings to match.
6069
          switch (Name[3]) {
6070
          default: break;
6071
          case 'e':	 // 1 string to match.
6072
            if (memcmp(Name.data()+4, "rnel", 4) != 0)
6073
              break;
6074
            return AttributeCommonInfo::AT_OpenCLKernel;	 // "__kernel"
6075
          case 'i':	 // 1 string to match.
6076
            if (memcmp(Name.data()+4, "ndof", 4) != 0)
6077
              break;
6078
            return AttributeCommonInfo::AT_ObjCKindOf;	 // "__kindof"
6079
          }
6080
          break;
6081
        case 'p':	 // 1 string to match.
6082
          if (memcmp(Name.data()+3, "ascal", 5) != 0)
6083
            break;
6084
          return AttributeCommonInfo::AT_Pascal;	 // "__pascal"
6085
        }
6086
        break;
6087
      case 's':	 // 1 string to match.
6088
        if (memcmp(Name.data()+2, "tdcall", 6) != 0)
6089
          break;
6090
        return AttributeCommonInfo::AT_StdCall;	 // "_stdcall"
6091
      }
6092
      break;
6093
    case 'c':	 // 1 string to match.
6094
      if (memcmp(Name.data()+1, "onstant", 7) != 0)
6095
        break;
6096
      return AttributeCommonInfo::AT_OpenCLConstantAddressSpace;	 // "constant"
6097
    }
6098
    break;
6099
  case 9:	 // 9 strings to match.
6100
    switch (Name[0]) {
6101
    default: break;
6102
    case '_':	 // 7 strings to match.
6103
      switch (Name[1]) {
6104
      default: break;
6105
      case 'N':	 // 1 string to match.
6106
        if (memcmp(Name.data()+2, "ullable", 7) != 0)
6107
          break;
6108
        return AttributeCommonInfo::AT_TypeNullable;	 // "_Nullable"
6109
      case '_':	 // 4 strings to match.
6110
        switch (Name[2]) {
6111
        default: break;
6112
        case 'g':	 // 1 string to match.
6113
          if (memcmp(Name.data()+3, "eneric", 6) != 0)
6114
            break;
6115
          return AttributeCommonInfo::AT_OpenCLGenericAddressSpace;	 // "__generic"
6116
        case 'p':	 // 1 string to match.
6117
          if (memcmp(Name.data()+3, "rivate", 6) != 0)
6118
            break;
6119
          return AttributeCommonInfo::AT_OpenCLPrivateAddressSpace;	 // "__private"
6120
        case 'r':	 // 1 string to match.
6121
          if (memcmp(Name.data()+3, "egcall", 6) != 0)
6122
            break;
6123
          return AttributeCommonInfo::AT_RegCall;	 // "__regcall"
6124
        case 's':	 // 1 string to match.
6125
          if (memcmp(Name.data()+3, "tdcall", 6) != 0)
6126
            break;
6127
          return AttributeCommonInfo::AT_StdCall;	 // "__stdcall"
6128
        }
6129
        break;
6130
      case 'f':	 // 1 string to match.
6131
        if (memcmp(Name.data()+2, "astcall", 7) != 0)
6132
          break;
6133
        return AttributeCommonInfo::AT_FastCall;	 // "_fastcall"
6134
      case 't':	 // 1 string to match.
6135
        if (memcmp(Name.data()+2, "hiscall", 7) != 0)
6136
          break;
6137
        return AttributeCommonInfo::AT_ThisCall;	 // "_thiscall"
6138
      }
6139
      break;
6140
    case 'c':	 // 1 string to match.
6141
      if (memcmp(Name.data()+1, "onstinit", 8) != 0)
6142
        break;
6143
      return AttributeCommonInfo::AT_ConstInit;	 // "constinit"
6144
    case 'r':	 // 1 string to match.
6145
      if (memcmp(Name.data()+1, "ead_only", 8) != 0)
6146
        break;
6147
      return AttributeCommonInfo::AT_OpenCLAccess;	 // "read_only"
6148
    }
6149
    break;
6150
  case 10:	 // 5 strings to match.
6151
    switch (Name[0]) {
6152
    default: break;
6153
    case '_':	 // 3 strings to match.
6154
      if (Name[1] != '_')
6155
        break;
6156
      switch (Name[2]) {
6157
      default: break;
6158
      case 'c':	 // 1 string to match.
6159
        if (memcmp(Name.data()+3, "onstant", 7) != 0)
6160
          break;
6161
        return AttributeCommonInfo::AT_OpenCLConstantAddressSpace;	 // "__constant"
6162
      case 'f':	 // 1 string to match.
6163
        if (memcmp(Name.data()+3, "astcall", 7) != 0)
6164
          break;
6165
        return AttributeCommonInfo::AT_FastCall;	 // "__fastcall"
6166
      case 't':	 // 1 string to match.
6167
        if (memcmp(Name.data()+3, "hiscall", 7) != 0)
6168
          break;
6169
        return AttributeCommonInfo::AT_ThisCall;	 // "__thiscall"
6170
      }
6171
      break;
6172
    case 'r':	 // 1 string to match.
6173
      if (memcmp(Name.data()+1, "ead_write", 9) != 0)
6174
        break;
6175
      return AttributeCommonInfo::AT_OpenCLAccess;	 // "read_write"
6176
    case 'w':	 // 1 string to match.
6177
      if (memcmp(Name.data()+1, "rite_only", 9) != 0)
6178
        break;
6179
      return AttributeCommonInfo::AT_OpenCLAccess;	 // "write_only"
6180
    }
6181
    break;
6182
  case 11:	 // 3 strings to match.
6183
    switch (Name[0]) {
6184
    default: break;
6185
    case '_':	 // 2 strings to match.
6186
      switch (Name[1]) {
6187
      default: break;
6188
      case '_':	 // 1 string to match.
6189
        if (memcmp(Name.data()+2, "read_only", 9) != 0)
6190
          break;
6191
        return AttributeCommonInfo::AT_OpenCLAccess;	 // "__read_only"
6192
      case 'v':	 // 1 string to match.
6193
        if (memcmp(Name.data()+2, "ectorcall", 9) != 0)
6194
          break;
6195
        return AttributeCommonInfo::AT_VectorCall;	 // "_vectorcall"
6196
      }
6197
      break;
6198
    case 'g':	 // 1 string to match.
6199
      if (memcmp(Name.data()+1, "roupshared", 10) != 0)
6200
        break;
6201
      return AttributeCommonInfo::AT_HLSLGroupSharedAddressSpace;	 // "groupshared"
6202
    }
6203
    break;
6204
  case 12:	 // 4 strings to match.
6205
    if (memcmp(Name.data()+0, "__", 2) != 0)
6206
      break;
6207
    switch (Name[2]) {
6208
    default: break;
6209
    case 'n':	 // 1 string to match.
6210
      if (memcmp(Name.data()+3, "oinline__", 9) != 0)
6211
        break;
6212
      return AttributeCommonInfo::AT_NoInline;	 // "__noinline__"
6213
    case 'r':	 // 1 string to match.
6214
      if (memcmp(Name.data()+3, "ead_write", 9) != 0)
6215
        break;
6216
      return AttributeCommonInfo::AT_OpenCLAccess;	 // "__read_write"
6217
    case 'v':	 // 1 string to match.
6218
      if (memcmp(Name.data()+3, "ectorcall", 9) != 0)
6219
        break;
6220
      return AttributeCommonInfo::AT_VectorCall;	 // "__vectorcall"
6221
    case 'w':	 // 1 string to match.
6222
      if (memcmp(Name.data()+3, "rite_only", 9) != 0)
6223
        break;
6224
      return AttributeCommonInfo::AT_OpenCLAccess;	 // "__write_only"
6225
    }
6226
    break;
6227
  case 13:	 // 1 string to match.
6228
    if (memcmp(Name.data()+0, "__forceinline", 13) != 0)
6229
      break;
6230
    return AttributeCommonInfo::AT_AlwaysInline;	 // "__forceinline"
6231
  case 16:	 // 1 string to match.
6232
    if (memcmp(Name.data()+0, "_Nullable_result", 16) != 0)
6233
      break;
6234
    return AttributeCommonInfo::AT_TypeNullableResult;	 // "_Nullable_result"
6235
  case 17:	 // 1 string to match.
6236
    if (memcmp(Name.data()+0, "_Null_unspecified", 17) != 0)
6237
      break;
6238
    return AttributeCommonInfo::AT_TypeNullUnspecified;	 // "_Null_unspecified"
6239
  case 19:	 // 1 string to match.
6240
    if (memcmp(Name.data()+0, "__unsafe_unretained", 19) != 0)
6241
      break;
6242
    return AttributeCommonInfo::AT_ObjCInertUnsafeUnretained;	 // "__unsafe_unretained"
6243
  case 20:	 // 1 string to match.
6244
    if (memcmp(Name.data()+0, "__single_inheritance", 20) != 0)
6245
      break;
6246
    return AttributeCommonInfo::AT_MSInheritance;	 // "__single_inheritance"
6247
  case 21:	 // 1 string to match.
6248
    if (memcmp(Name.data()+0, "__virtual_inheritance", 21) != 0)
6249
      break;
6250
    return AttributeCommonInfo::AT_MSInheritance;	 // "__virtual_inheritance"
6251
  case 22:	 // 1 string to match.
6252
    if (memcmp(Name.data()+0, "__multiple_inheritance", 22) != 0)
6253
      break;
6254
    return AttributeCommonInfo::AT_MSInheritance;	 // "__multiple_inheritance"
6255
  case 25:	 // 1 string to match.
6256
    if (memcmp(Name.data()+0, "__unspecified_inheritance", 25) != 0)
6257
      break;
6258
    return AttributeCommonInfo::AT_MSInheritance;	 // "__unspecified_inheritance"
6259
  }
6260
  } else if (AttributeCommonInfo::AS_Pragma == Syntax) {
6261
  switch (Name.size()) {
6262
  default: break;
6263
  case 4:	 // 1 string to match.
6264
    if (memcmp(Name.data()+0, "loop", 4) != 0)
6265
      break;
6266
    return AttributeCommonInfo::AT_LoopHint;	 // "loop"
6267
  case 6:	 // 1 string to match.
6268
    if (memcmp(Name.data()+0, "unroll", 6) != 0)
6269
      break;
6270
    return AttributeCommonInfo::AT_LoopHint;	 // "unroll"
6271
  case 8:	 // 1 string to match.
6272
    if (memcmp(Name.data()+0, "nounroll", 8) != 0)
6273
      break;
6274
    return AttributeCommonInfo::AT_LoopHint;	 // "nounroll"
6275
  case 14:	 // 1 string to match.
6276
    if (memcmp(Name.data()+0, "unroll_and_jam", 14) != 0)
6277
      break;
6278
    return AttributeCommonInfo::AT_LoopHint;	 // "unroll_and_jam"
6279
  case 16:	 // 1 string to match.
6280
    if (memcmp(Name.data()+0, "nounroll_and_jam", 16) != 0)
6281
      break;
6282
    return AttributeCommonInfo::AT_LoopHint;	 // "nounroll_and_jam"
6283
  }
6284
  } else if (AttributeCommonInfo::AS_HLSLSemantic == Syntax) {
6285
  switch (Name.size()) {
6286
  default: break;
6287
  case 8:	 // 1 string to match.
6288
    if (memcmp(Name.data()+0, "register", 8) != 0)
6289
      break;
6290
    return AttributeCommonInfo::AT_HLSLResourceBinding;	 // "register"
6291
  case 13:	 // 1 string to match.
6292
    if (memcmp(Name.data()+0, "SV_GroupIndex", 13) != 0)
6293
      break;
6294
    return AttributeCommonInfo::AT_HLSLSV_GroupIndex;	 // "SV_GroupIndex"
6295
  case 19:	 // 1 string to match.
6296
    if (memcmp(Name.data()+0, "SV_DispatchThreadID", 19) != 0)
6297
      break;
6298
    return AttributeCommonInfo::AT_HLSLSV_DispatchThreadID;	 // "SV_DispatchThreadID"
6299
  }
6300
  }
6301
  return AttributeCommonInfo::UnknownAttribute;
6302
}