Coverage Report

Created: 2018-07-12 09:57

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