/*===- 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);
}
}
}
