summaryrefslogtreecommitdiff
path: root/include/clang/Basic/AttrHasAttributeImpl.inc
blob: f876b98cd17335cf5eb28ee9ed5abdab885c330f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
|*                                                                            *|
|*Code to implement the __has_attribute logic                                 *|
|*                                                                            *|
|* Automatically generated file, do not edit!                                 *|
|*                                                                            *|
\*===----------------------------------------------------------------------===*/

switch (Syntax) {
case AttrSyntax::Generic:
  return llvm::StringSwitch<bool>(Name)
    .Case("interrupt", (T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb))
    .Case("acquire_capability", true)
    .Case("acquire_capability", true)
    .Case("acquire_shared_capability", true)
    .Case("acquire_shared_capability", true)
    .Case("exclusive_lock_function", true)
    .Case("shared_lock_function", true)
    .Case("acquired_after", true)
    .Case("acquired_before", true)
    .Case("address_space", true)
    .Case("alias", true)
    .Case("alias", true)
    .Case("aligned", true)
    .Case("aligned", true)
    .Case("align", true)
    .Case("alignas", true)
    .Case("_Alignas", true)
    .Case("always_inline", true)
    .Case("always_inline", true)
    .Case("__forceinline", true)
    .Case("analyzer_noreturn", true)
    .Case("annotate", true)
    .Case("objc_arc_weak_reference_unavailable", true)
    .Case("argument_with_type_tag", true)
    .Case("pointer_with_type_tag", true)
    .Case("asm", true)
    .Case("__asm__", true)
    .Case("assert_capability", true)
    .Case("assert_capability", true)
    .Case("assert_shared_capability", true)
    .Case("assert_shared_capability", true)
    .Case("assert_exclusive_lock", true)
    .Case("assert_shared_lock", true)
    .Case("availability", true)
    .Case("blocks", true)
    .Case("bounded", true)
    .Case("_Noreturn", true)
    .Case("cdecl", true)
    .Case("cdecl", true)
    .Case("__cdecl", true)
    .Case("_cdecl", true)
    .Case("cf_audited_transfer", true)
    .Case("cf_consumed", true)
    .Case("cf_returns_not_retained", true)
    .Case("cf_returns_retained", true)
    .Case("cf_unknown_transfer", true)
    .Case("constant", true)
    .Case("device", true)
    .Case("global", true)
    .Case("host", true)
    .Case("launch_bounds", true)
    .Case("shared", true)
    .Case("noreturn", true)
    .Case("callable_when", true)
    .Case("capability", true)
    .Case("capability", true)
    .Case("shared_capability", true)
    .Case("shared_capability", true)
    .Case("carries_dependency", true)
    .Case("carries_dependency", true)
    .Case("cleanup", true)
    .Case("cleanup", true)
    .Case("cold", true)
    .Case("cold", true)
    .Case("common", true)
    .Case("common", true)
    .Case("const", true)
    .Case("const", true)
    .Case("__const", true)
    .Case("__const", true)
    .Case("constructor", true)
    .Case("constructor", true)
    .Case("consumable", true)
    .Case("consumable_auto_cast_state", true)
    .Case("consumable_set_state_on_read", true)
    .Case("dllexport", (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64 || T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb) && (T.getOS() == llvm::Triple::Win32))
    .Case("dllexport", (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64 || T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb) && (T.getOS() == llvm::Triple::Win32))
    .Case("dllexport", (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64 || T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb) && (T.getOS() == llvm::Triple::Win32))
    .Case("dllimport", (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64 || T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb) && (T.getOS() == llvm::Triple::Win32))
    .Case("dllimport", (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64 || T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb) && (T.getOS() == llvm::Triple::Win32))
    .Case("dllimport", (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64 || T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb) && (T.getOS() == llvm::Triple::Win32))
    .Case("deprecated", true)
    .Case("deprecated", true)
    .Case("deprecated", true)
    .Case("deprecated", true)
    .Case("destructor", true)
    .Case("destructor", true)
    .Case("enable_if", true)
    .Case("exclusive_trylock_function", true)
    .Case("ext_vector_type", true)
    .Case("fallthrough", true)
    .Case("fastcall", true)
    .Case("fastcall", true)
    .Case("__fastcall", true)
    .Case("_fastcall", true)
    .Case("final", true)
    .Case("sealed", true)
    .Case("flatten", true)
    .Case("flatten", true)
    .Case("format", true)
    .Case("format", true)
    .Case("format_arg", true)
    .Case("format_arg", true)
    .Case("gnu_inline", true)
    .Case("gnu_inline", true)
    .Case("guarded_by", true)
    .Case("guarded_var", true)
    .Case("hot", true)
    .Case("hot", true)
    .Case("ibaction", true)
    .Case("iboutlet", true)
    .Case("iboutletcollection", true)
    .Case("init_priority", true)
    .Case("init_seg", true)
    .Case("intel_ocl_bicc", true)
    .Case("lock_returned", true)
    .Case("lockable", true)
    .Case("locks_excluded", true)
    .Case("loop", true)
    .Case("unroll", true)
    .Case("ms_abi", true)
    .Case("ms_abi", true)
    .Case("__single_inheritance", true)
    .Case("__multiple_inheritance", true)
    .Case("__virtual_inheritance", true)
    .Case("__unspecified_inheritance", true)
    .Case("interrupt", (T.getArch() == llvm::Triple::msp430))
    .Case("malloc", true)
    .Case("malloc", true)
    .Case("may_alias", true)
    .Case("may_alias", true)
    .Case("minsize", true)
    .Case("mips16", (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel))
    .Case("mips16", (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel))
    .Case("mode", true)
    .Case("mode", true)
    .Case("property", true)
    .Case("ms_struct", true)
    .Case("ms_struct", true)
    .Case("ns_consumed", true)
    .Case("ns_consumes_self", true)
    .Case("ns_returns_autoreleased", true)
    .Case("ns_returns_not_retained", true)
    .Case("ns_returns_retained", true)
    .Case("naked", true)
    .Case("naked", true)
    .Case("naked", true)
    .Case("neon_polyvector_type", true)
    .Case("neon_vector_type", true)
    .Case("nocommon", true)
    .Case("nocommon", true)
    .Case("nodebug", true)
    .Case("noduplicate", true)
    .Case("noduplicate", true)
    .Case("noinline", true)
    .Case("noinline", true)
    .Case("noinline", true)
    .Case("no_instrument_function", true)
    .Case("no_instrument_function", true)
    .Case("nomips16", (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel))
    .Case("nomips16", (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel))
    .Case("noreturn", true)
    .Case("noreturn", true)
    .Case("noreturn", true)
    .Case("no_address_safety_analysis", true)
    .Case("no_address_safety_analysis", true)
    .Case("no_sanitize_address", true)
    .Case("no_sanitize_address", true)
    .Case("no_sanitize_memory", true)
    .Case("no_sanitize_thread", true)
    .Case("no_split_stack", true)
    .Case("no_split_stack", true)
    .Case("no_thread_safety_analysis", true)
    .Case("nothrow", true)
    .Case("nothrow", true)
    .Case("nothrow", true)
    .Case("nonnull", true)
    .Case("nonnull", true)
    .Case("objc_bridge", true)
    .Case("objc_bridge_mutable", true)
    .Case("objc_bridge_related", true)
    .Case("objc_designated_initializer", true)
    .Case("objc_exception", true)
    .Case("objc_protocol_requires_explicit_implementation", true)
    .Case("objc_gc", true)
    .Case("objc_method_family", true)
    .Case("NSObject", true)
    .Case("objc_ownership", true)
    .Case("objc_precise_lifetime", true)
    .Case("objc_requires_property_definitions", true)
    .Case("objc_requires_super", true)
    .Case("objc_returns_inner_pointer", true)
    .Case("objc_root_class", true)
    .Case("objc_runtime_name", true)
    .Case("__constant", true)
    .Case("constant", true)
    .Case("__global", true)
    .Case("global", true)
    .Case("__read_only", true)
    .Case("read_only", true)
    .Case("__write_only", true)
    .Case("write_only", true)
    .Case("__read_write", true)
    .Case("read_write", true)
    .Case("__kernel", true)
    .Case("kernel", true)
    .Case("__local", true)
    .Case("local", true)
    .Case("__private", true)
    .Case("private", true)
    .Case("optnone", true)
    .Case("optnone", true)
    .Case("overloadable", true)
    .Case("override", true)
    .Case("ownership_holds", true)
    .Case("ownership_returns", true)
    .Case("ownership_takes", true)
    .Case("packed", true)
    .Case("packed", true)
    .Case("param_typestate", true)
    .Case("pascal", true)
    .Case("__pascal", true)
    .Case("_pascal", true)
    .Case("pcs", true)
    .Case("pcs", true)
    .Case("pnaclcall", true)
    .Case("pt_guarded_by", true)
    .Case("pt_guarded_var", true)
    .Case("__ptr32", true)
    .Case("__ptr64", true)
    .Case("pure", true)
    .Case("pure", true)
    .Case("regparm", true)
    .Case("regparm", true)
    .Case("release_capability", true)
    .Case("release_capability", true)
    .Case("release_shared_capability", true)
    .Case("release_shared_capability", true)
    .Case("release_generic_capability", true)
    .Case("release_generic_capability", true)
    .Case("unlock_function", true)
    .Case("reqd_work_group_size", true)
    .Case("requires_capability", true)
    .Case("requires_capability", true)
    .Case("exclusive_locks_required", true)
    .Case("requires_shared_capability", true)
    .Case("requires_shared_capability", true)
    .Case("shared_locks_required", true)
    .Case("return_typestate", true)
    .Case("returns_nonnull", true)
    .Case("returns_nonnull", true)
    .Case("returns_twice", true)
    .Case("returns_twice", true)
    .Case("__sptr", true)
    .Case("scoped_lockable", true)
    .Case("section", true)
    .Case("section", true)
    .Case("allocate", true)
    .Case("selectany", true)
    .Case("sentinel", true)
    .Case("sentinel", true)
    .Case("set_typestate", true)
    .Case("shared_trylock_function", true)
    .Case("stdcall", true)
    .Case("stdcall", true)
    .Case("__stdcall", true)
    .Case("_stdcall", true)
    .Case("sysv_abi", true)
    .Case("sysv_abi", true)
    .Case("tls_model", true)
    .Case("tls_model", true)
    .Case("test_typestate", true)
    .Case("thiscall", true)
    .Case("thiscall", true)
    .Case("__thiscall", true)
    .Case("_thiscall", true)
    .Case("thread", true)
    .Case("transparent_union", true)
    .Case("transparent_union", true)
    .Case("try_acquire_capability", true)
    .Case("try_acquire_capability", true)
    .Case("try_acquire_shared_capability", true)
    .Case("try_acquire_shared_capability", true)
    .Case("type_tag_for_datatype", true)
    .Case("type_visibility", true)
    .Case("type_visibility", true)
    .Case("__uptr", true)
    .Case("__unaligned", true)
    .Case("unavailable", true)
    .Case("unused", true)
    .Case("unused", true)
    .Case("used", true)
    .Case("used", true)
    .Case("uuid", true)
    .Case("vecreturn", true)
    .Case("vec_type_hint", true)
    .Case("vector_size", true)
    .Case("vector_size", true)
    .Case("visibility", true)
    .Case("visibility", true)
    .Case("warn_unused", true)
    .Case("warn_unused_result", true)
    .Case("warn_unused_result", true)
    .Case("warn_unused_result", true)
    .Case("weak", true)
    .Case("weak", true)
    .Case("weak_import", true)
    .Case("weakref", true)
    .Case("weakref", true)
    .Case("__w64", true)
    .Case("work_group_size_hint", true)
    .Case("force_align_arg_pointer", (T.getArch() == llvm::Triple::x86))
    .Default(false);
case AttrSyntax::GNU:
  return llvm::StringSwitch<bool>(Name)
    .Case("interrupt", (T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb))
    .Case("acquire_capability", true)
    .Case("acquire_shared_capability", true)
    .Case("exclusive_lock_function", true)
    .Case("shared_lock_function", true)
    .Case("acquire_capability", true)
    .Case("acquire_shared_capability", true)
    .Case("exclusive_lock_function", true)
    .Case("shared_lock_function", true)
    .Case("acquire_capability", true)
    .Case("acquire_shared_capability", true)
    .Case("exclusive_lock_function", true)
    .Case("shared_lock_function", true)
    .Case("acquire_capability", true)
    .Case("acquire_shared_capability", true)
    .Case("exclusive_lock_function", true)
    .Case("shared_lock_function", true)
    .Case("acquired_after", true)
    .Case("acquired_before", true)
    .Case("address_space", true)
    .Case("alias", true)
    .Case("aligned", true)
    .Case("always_inline", true)
    .Case("analyzer_noreturn", true)
    .Case("annotate", true)
    .Case("objc_arc_weak_reference_unavailable", true)
    .Case("argument_with_type_tag", true)
    .Case("pointer_with_type_tag", true)
    .Case("argument_with_type_tag", true)
    .Case("pointer_with_type_tag", true)
    .Case("assert_capability", true)
    .Case("assert_shared_capability", true)
    .Case("assert_capability", true)
    .Case("assert_shared_capability", true)
    .Case("assert_exclusive_lock", true)
    .Case("assert_shared_lock", true)
    .Case("availability", true)
    .Case("blocks", true)
    .Case("bounded", true)
    .Case("cdecl", true)
    .Case("cf_audited_transfer", true)
    .Case("cf_consumed", true)
    .Case("cf_returns_not_retained", true)
    .Case("cf_returns_retained", true)
    .Case("cf_unknown_transfer", true)
    .Case("constant", true)
    .Case("device", true)
    .Case("global", true)
    .Case("host", true)
    .Case("launch_bounds", true)
    .Case("shared", true)
    .Case("callable_when", true)
    .Case("capability", true)
    .Case("shared_capability", true)
    .Case("capability", true)
    .Case("shared_capability", true)
    .Case("carries_dependency", true)
    .Case("cleanup", true)
    .Case("cold", true)
    .Case("common", true)
    .Case("const", true)
    .Case("__const", true)
    .Case("const", true)
    .Case("__const", true)
    .Case("constructor", true)
    .Case("consumable", true)
    .Case("consumable_auto_cast_state", true)
    .Case("consumable_set_state_on_read", true)
    .Case("dllexport", (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64 || T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb) && (T.getOS() == llvm::Triple::Win32))
    .Case("dllimport", (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64 || T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb) && (T.getOS() == llvm::Triple::Win32))
    .Case("deprecated", true)
    .Case("destructor", true)
    .Case("enable_if", true)
    .Case("exclusive_trylock_function", true)
    .Case("ext_vector_type", true)
    .Case("fastcall", true)
    .Case("flatten", true)
    .Case("format", true)
    .Case("format_arg", true)
    .Case("gnu_inline", true)
    .Case("guarded_by", true)
    .Case("guarded_var", true)
    .Case("hot", true)
    .Case("ibaction", true)
    .Case("iboutlet", true)
    .Case("iboutletcollection", true)
    .Case("init_priority", true)
    .Case("intel_ocl_bicc", true)
    .Case("lock_returned", true)
    .Case("lockable", true)
    .Case("locks_excluded", true)
    .Case("ms_abi", true)
    .Case("interrupt", (T.getArch() == llvm::Triple::msp430))
    .Case("malloc", true)
    .Case("may_alias", true)
    .Case("minsize", true)
    .Case("mips16", (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel))
    .Case("mode", true)
    .Case("ms_struct", true)
    .Case("ns_consumed", true)
    .Case("ns_consumes_self", true)
    .Case("ns_returns_autoreleased", true)
    .Case("ns_returns_not_retained", true)
    .Case("ns_returns_retained", true)
    .Case("naked", true)
    .Case("neon_polyvector_type", true)
    .Case("neon_vector_type", true)
    .Case("nocommon", true)
    .Case("nodebug", true)
    .Case("noduplicate", true)
    .Case("noinline", true)
    .Case("no_instrument_function", true)
    .Case("nomips16", (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel))
    .Case("noreturn", true)
    .Case("no_address_safety_analysis", true)
    .Case("no_sanitize_address", true)
    .Case("no_address_safety_analysis", true)
    .Case("no_sanitize_address", true)
    .Case("no_sanitize_memory", true)
    .Case("no_sanitize_thread", true)
    .Case("no_split_stack", true)
    .Case("no_thread_safety_analysis", true)
    .Case("nothrow", true)
    .Case("nonnull", true)
    .Case("objc_bridge", true)
    .Case("objc_bridge_mutable", true)
    .Case("objc_bridge_related", true)
    .Case("objc_designated_initializer", true)
    .Case("objc_exception", true)
    .Case("objc_protocol_requires_explicit_implementation", true)
    .Case("objc_gc", true)
    .Case("objc_method_family", true)
    .Case("NSObject", true)
    .Case("objc_ownership", true)
    .Case("objc_precise_lifetime", true)
    .Case("objc_requires_property_definitions", true)
    .Case("objc_requires_super", true)
    .Case("objc_returns_inner_pointer", true)
    .Case("objc_root_class", true)
    .Case("objc_runtime_name", true)
    .Case("optnone", true)
    .Case("overloadable", true)
    .Case("ownership_holds", true)
    .Case("ownership_returns", true)
    .Case("ownership_takes", true)
    .Case("ownership_holds", true)
    .Case("ownership_returns", true)
    .Case("ownership_takes", true)
    .Case("ownership_holds", true)
    .Case("ownership_returns", true)
    .Case("ownership_takes", true)
    .Case("packed", true)
    .Case("param_typestate", true)
    .Case("pascal", true)
    .Case("pcs", true)
    .Case("pnaclcall", true)
    .Case("pt_guarded_by", true)
    .Case("pt_guarded_var", true)
    .Case("pure", true)
    .Case("regparm", true)
    .Case("release_capability", true)
    .Case("release_shared_capability", true)
    .Case("release_generic_capability", true)
    .Case("unlock_function", true)
    .Case("release_capability", true)
    .Case("release_shared_capability", true)
    .Case("release_generic_capability", true)
    .Case("unlock_function", true)
    .Case("release_capability", true)
    .Case("release_shared_capability", true)
    .Case("release_generic_capability", true)
    .Case("unlock_function", true)
    .Case("release_capability", true)
    .Case("release_shared_capability", true)
    .Case("release_generic_capability", true)
    .Case("unlock_function", true)
    .Case("reqd_work_group_size", true)
    .Case("requires_capability", true)
    .Case("exclusive_locks_required", true)
    .Case("requires_shared_capability", true)
    .Case("shared_locks_required", true)
    .Case("requires_capability", true)
    .Case("exclusive_locks_required", true)
    .Case("requires_shared_capability", true)
    .Case("shared_locks_required", true)
    .Case("requires_capability", true)
    .Case("exclusive_locks_required", true)
    .Case("requires_shared_capability", true)
    .Case("shared_locks_required", true)
    .Case("requires_capability", true)
    .Case("exclusive_locks_required", true)
    .Case("requires_shared_capability", true)
    .Case("shared_locks_required", true)
    .Case("return_typestate", true)
    .Case("returns_nonnull", true)
    .Case("returns_twice", true)
    .Case("scoped_lockable", true)
    .Case("section", true)
    .Case("sentinel", true)
    .Case("set_typestate", true)
    .Case("shared_trylock_function", true)
    .Case("stdcall", true)
    .Case("sysv_abi", true)
    .Case("tls_model", true)
    .Case("test_typestate", true)
    .Case("thiscall", true)
    .Case("transparent_union", true)
    .Case("try_acquire_capability", true)
    .Case("try_acquire_shared_capability", true)
    .Case("try_acquire_capability", true)
    .Case("try_acquire_shared_capability", true)
    .Case("type_tag_for_datatype", true)
    .Case("type_visibility", true)
    .Case("unavailable", true)
    .Case("unused", true)
    .Case("used", true)
    .Case("vecreturn", true)
    .Case("vec_type_hint", true)
    .Case("vector_size", true)
    .Case("visibility", true)
    .Case("warn_unused", true)
    .Case("warn_unused_result", true)
    .Case("weak", true)
    .Case("weak_import", true)
    .Case("weakref", true)
    .Case("work_group_size_hint", true)
    .Case("force_align_arg_pointer", (T.getArch() == llvm::Triple::x86))
    .Default(false);
case AttrSyntax::Declspec:
  return llvm::StringSwitch<bool>(Name)
    .Case("align", true)
    .Case("dllexport", (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64 || T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb) && (T.getOS() == llvm::Triple::Win32))
    .Case("dllimport", (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64 || T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb) && (T.getOS() == llvm::Triple::Win32))
    .Case("deprecated", true)
    .Case("property", true)
    .Case("naked", true)
    .Case("noinline", true)
    .Case("noreturn", true)
    .Case("nothrow", true)
    .Case("allocate", true)
    .Case("selectany", true)
    .Case("thread", true)
    .Case("uuid", true)
    .Default(false);
case AttrSyntax::Pragma:
  return llvm::StringSwitch<bool>(Name)
    .Case("init_seg", true)
    .Case("loop", true)
    .Case("unroll", true)
    .Case("loop", true)
    .Case("unroll", true)
    .Default(false);
case AttrSyntax::CXX: {
if (!Scope || Scope->getName() == "") {
  return llvm::StringSwitch<bool>(Name)
    .Case("noreturn", LangOpts.CPlusPlus11)
    .Case("carries_dependency", LangOpts.CPlusPlus11)
    .Case("deprecated", LangOpts.CPlusPlus11)
    .Case("deprecated", LangOpts.CPlusPlus11)
    .Default(false);
} else if (Scope->getName() == "clang") {
  return llvm::StringSwitch<bool>(Name)
    .Case("acquire_capability", LangOpts.CPlusPlus11)
    .Case("acquire_shared_capability", LangOpts.CPlusPlus11)
    .Case("acquire_capability", LangOpts.CPlusPlus11)
    .Case("acquire_shared_capability", LangOpts.CPlusPlus11)
    .Case("assert_capability", LangOpts.CPlusPlus11)
    .Case("assert_shared_capability", LangOpts.CPlusPlus11)
    .Case("assert_capability", LangOpts.CPlusPlus11)
    .Case("assert_shared_capability", LangOpts.CPlusPlus11)
    .Case("capability", LangOpts.CPlusPlus11)
    .Case("shared_capability", LangOpts.CPlusPlus11)
    .Case("capability", LangOpts.CPlusPlus11)
    .Case("shared_capability", LangOpts.CPlusPlus11)
    .Case("fallthrough", LangOpts.CPlusPlus11)
    .Case("noduplicate", LangOpts.CPlusPlus11)
    .Case("optnone", LangOpts.CPlusPlus11)
    .Case("release_capability", LangOpts.CPlusPlus11)
    .Case("release_shared_capability", LangOpts.CPlusPlus11)
    .Case("release_generic_capability", LangOpts.CPlusPlus11)
    .Case("release_capability", LangOpts.CPlusPlus11)
    .Case("release_shared_capability", LangOpts.CPlusPlus11)
    .Case("release_generic_capability", LangOpts.CPlusPlus11)
    .Case("release_capability", LangOpts.CPlusPlus11)
    .Case("release_shared_capability", LangOpts.CPlusPlus11)
    .Case("release_generic_capability", LangOpts.CPlusPlus11)
    .Case("requires_capability", LangOpts.CPlusPlus11)
    .Case("requires_shared_capability", LangOpts.CPlusPlus11)
    .Case("requires_capability", LangOpts.CPlusPlus11)
    .Case("requires_shared_capability", LangOpts.CPlusPlus11)
    .Case("try_acquire_capability", LangOpts.CPlusPlus11)
    .Case("try_acquire_shared_capability", LangOpts.CPlusPlus11)
    .Case("try_acquire_capability", LangOpts.CPlusPlus11)
    .Case("try_acquire_shared_capability", LangOpts.CPlusPlus11)
    .Case("type_visibility", LangOpts.CPlusPlus11)
    .Case("warn_unused_result", LangOpts.CPlusPlus11)
    .Default(false);
} else if (Scope->getName() == "gnu") {
  return llvm::StringSwitch<bool>(Name)
    .Case("alias", LangOpts.CPlusPlus11)
    .Case("aligned", LangOpts.CPlusPlus11)
    .Case("always_inline", LangOpts.CPlusPlus11)
    .Case("cdecl", LangOpts.CPlusPlus11)
    .Case("cleanup", LangOpts.CPlusPlus11)
    .Case("cold", LangOpts.CPlusPlus11)
    .Case("common", LangOpts.CPlusPlus11)
    .Case("const", LangOpts.CPlusPlus11)
    .Case("__const", LangOpts.CPlusPlus11)
    .Case("const", LangOpts.CPlusPlus11)
    .Case("__const", LangOpts.CPlusPlus11)
    .Case("constructor", LangOpts.CPlusPlus11)
    .Case("dllexport", (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64 || T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb) && (T.getOS() == llvm::Triple::Win32) && LangOpts.CPlusPlus11)
    .Case("dllimport", (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64 || T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb) && (T.getOS() == llvm::Triple::Win32) && LangOpts.CPlusPlus11)
    .Case("deprecated", LangOpts.CPlusPlus11)
    .Case("destructor", LangOpts.CPlusPlus11)
    .Case("fastcall", LangOpts.CPlusPlus11)
    .Case("flatten", LangOpts.CPlusPlus11)
    .Case("format", LangOpts.CPlusPlus11)
    .Case("format_arg", LangOpts.CPlusPlus11)
    .Case("gnu_inline", LangOpts.CPlusPlus11)
    .Case("hot", LangOpts.CPlusPlus11)
    .Case("ms_abi", LangOpts.CPlusPlus11)
    .Case("malloc", LangOpts.CPlusPlus11)
    .Case("may_alias", LangOpts.CPlusPlus11)
    .Case("mips16", (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel) && LangOpts.CPlusPlus11)
    .Case("mode", LangOpts.CPlusPlus11)
    .Case("ms_struct", LangOpts.CPlusPlus11)
    .Case("naked", LangOpts.CPlusPlus11)
    .Case("nocommon", LangOpts.CPlusPlus11)
    .Case("noinline", LangOpts.CPlusPlus11)
    .Case("no_instrument_function", LangOpts.CPlusPlus11)
    .Case("nomips16", (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel) && LangOpts.CPlusPlus11)
    .Case("noreturn", LangOpts.CPlusPlus11)
    .Case("no_address_safety_analysis", LangOpts.CPlusPlus11)
    .Case("no_sanitize_address", LangOpts.CPlusPlus11)
    .Case("no_address_safety_analysis", LangOpts.CPlusPlus11)
    .Case("no_sanitize_address", LangOpts.CPlusPlus11)
    .Case("no_split_stack", LangOpts.CPlusPlus11)
    .Case("nothrow", LangOpts.CPlusPlus11)
    .Case("nonnull", LangOpts.CPlusPlus11)
    .Case("packed", LangOpts.CPlusPlus11)
    .Case("pcs", LangOpts.CPlusPlus11)
    .Case("pure", LangOpts.CPlusPlus11)
    .Case("regparm", LangOpts.CPlusPlus11)
    .Case("returns_nonnull", LangOpts.CPlusPlus11)
    .Case("returns_twice", LangOpts.CPlusPlus11)
    .Case("section", LangOpts.CPlusPlus11)
    .Case("sentinel", LangOpts.CPlusPlus11)
    .Case("stdcall", LangOpts.CPlusPlus11)
    .Case("sysv_abi", LangOpts.CPlusPlus11)
    .Case("tls_model", LangOpts.CPlusPlus11)
    .Case("thiscall", LangOpts.CPlusPlus11)
    .Case("transparent_union", LangOpts.CPlusPlus11)
    .Case("unused", LangOpts.CPlusPlus11)
    .Case("used", LangOpts.CPlusPlus11)
    .Case("vector_size", LangOpts.CPlusPlus11)
    .Case("visibility", LangOpts.CPlusPlus11)
    .Case("warn_unused_result", LangOpts.CPlusPlus11)
    .Case("weak", LangOpts.CPlusPlus11)
    .Case("weakref", LangOpts.CPlusPlus11)
    .Default(false);
}
}
}