/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
|*                                                                            *|
|*Attribute name matcher                                                      *|
|*                                                                            *|
|* Automatically generated file, do not edit!                                 *|
|*                                                                            *|
\*===----------------------------------------------------------------------===*/

static AttributeList::Kind getAttrKind(StringRef Name, AttributeList::Syntax Syntax) {
  if (AttributeList::AS_GNU == Syntax) {
  switch (Name.size()) {
  default: break;
  case 3:	 // 2 strings to match.
    switch (Name[0]) {
    default: break;
    case 'h':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ot", 2))
        break;
      return AttributeList::AT_Hot;	 // "hot"
    case 'p':	 // 1 string to match.
      if (memcmp(Name.data()+1, "cs", 2))
        break;
      return AttributeList::AT_Pcs;	 // "pcs"
    }
    break;
  case 4:	 // 6 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 1 string to match.
      if (memcmp(Name.data()+1, "old", 3))
        break;
      return AttributeList::AT_Cold;	 // "cold"
    case 'h':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ost", 3))
        break;
      return AttributeList::AT_CUDAHost;	 // "host"
    case 'm':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ode", 3))
        break;
      return AttributeList::AT_Mode;	 // "mode"
    case 'p':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ure", 3))
        break;
      return AttributeList::AT_Pure;	 // "pure"
    case 'u':	 // 1 string to match.
      if (memcmp(Name.data()+1, "sed", 3))
        break;
      return AttributeList::AT_Used;	 // "used"
    case 'w':	 // 1 string to match.
      if (memcmp(Name.data()+1, "eak", 3))
        break;
      return AttributeList::AT_Weak;	 // "weak"
    }
    break;
  case 5:	 // 4 strings to match.
    switch (Name[0]) {
    default: break;
    case 'a':	 // 1 string to match.
      if (memcmp(Name.data()+1, "lias", 4))
        break;
      return AttributeList::AT_Alias;	 // "alias"
    case 'c':	 // 2 strings to match.
      switch (Name[1]) {
      default: break;
      case 'd':	 // 1 string to match.
        if (memcmp(Name.data()+2, "ecl", 3))
          break;
        return AttributeList::AT_CDecl;	 // "cdecl"
      case 'o':	 // 1 string to match.
        if (memcmp(Name.data()+2, "nst", 3))
          break;
        return AttributeList::AT_Const;	 // "const"
      }
      break;
    case 'n':	 // 1 string to match.
      if (memcmp(Name.data()+1, "aked", 4))
        break;
      return AttributeList::AT_Naked;	 // "naked"
    }
    break;
  case 6:	 // 12 strings to match.
    switch (Name[0]) {
    default: break;
    case 'b':	 // 1 string to match.
      if (memcmp(Name.data()+1, "locks", 5))
        break;
      return AttributeList::AT_Blocks;	 // "blocks"
    case 'c':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ommon", 5))
        break;
      return AttributeList::AT_Common;	 // "common"
    case 'd':	 // 1 string to match.
      if (memcmp(Name.data()+1, "evice", 5))
        break;
      return AttributeList::AT_CUDADevice;	 // "device"
    case 'f':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ormat", 5))
        break;
      return AttributeList::AT_Format;	 // "format"
    case 'g':	 // 1 string to match.
      if (memcmp(Name.data()+1, "lobal", 5))
        break;
      return AttributeList::AT_CUDAGlobal;	 // "global"
    case 'm':	 // 3 strings to match.
      switch (Name[1]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+2, "lloc", 4))
          break;
        return AttributeList::AT_Malloc;	 // "malloc"
      case 'i':	 // 1 string to match.
        if (memcmp(Name.data()+2, "ps16", 4))
          break;
        return AttributeList::AT_Mips16;	 // "mips16"
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+2, "_abi", 4))
          break;
        return AttributeList::AT_MSABI;	 // "ms_abi"
      }
      break;
    case 'p':	 // 2 strings to match.
      if (Name[1] != 'a')
        break;
      switch (Name[2]) {
      default: break;
      case 'c':	 // 1 string to match.
        if (memcmp(Name.data()+3, "ked", 3))
          break;
        return AttributeList::AT_Packed;	 // "packed"
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+3, "cal", 3))
          break;
        return AttributeList::AT_Pascal;	 // "pascal"
      }
      break;
    case 's':	 // 1 string to match.
      if (memcmp(Name.data()+1, "hared", 5))
        break;
      return AttributeList::AT_CUDAShared;	 // "shared"
    case 'u':	 // 1 string to match.
      if (memcmp(Name.data()+1, "nused", 5))
        break;
      return AttributeList::AT_Unused;	 // "unused"
    }
    break;
  case 7:	 // 15 strings to match.
    switch (Name[0]) {
    default: break;
    case '_':	 // 1 string to match.
      if (memcmp(Name.data()+1, "_const", 6))
        break;
      return AttributeList::AT_Const;	 // "__const"
    case 'a':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ligned", 6))
        break;
      return AttributeList::AT_Aligned;	 // "aligned"
    case 'b':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ounded", 6))
        break;
      return AttributeList::IgnoredAttribute;	 // "bounded"
    case 'c':	 // 1 string to match.
      if (memcmp(Name.data()+1, "leanup", 6))
        break;
      return AttributeList::AT_Cleanup;	 // "cleanup"
    case 'f':	 // 1 string to match.
      if (memcmp(Name.data()+1, "latten", 6))
        break;
      return AttributeList::AT_Flatten;	 // "flatten"
    case 'm':	 // 1 string to match.
      if (memcmp(Name.data()+1, "insize", 6))
        break;
      return AttributeList::AT_MinSize;	 // "minsize"
    case 'n':	 // 3 strings to match.
      if (Name[1] != 'o')
        break;
      switch (Name[2]) {
      default: break;
      case 'd':	 // 1 string to match.
        if (memcmp(Name.data()+3, "ebug", 4))
          break;
        return AttributeList::AT_NoDebug;	 // "nodebug"
      case 'n':	 // 1 string to match.
        if (memcmp(Name.data()+3, "null", 4))
          break;
        return AttributeList::AT_NonNull;	 // "nonnull"
      case 't':	 // 1 string to match.
        if (memcmp(Name.data()+3, "hrow", 4))
          break;
        return AttributeList::AT_NoThrow;	 // "nothrow"
      }
      break;
    case 'o':	 // 2 strings to match.
      switch (Name[1]) {
      default: break;
      case 'b':	 // 1 string to match.
        if (memcmp(Name.data()+2, "jc_gc", 5))
          break;
        return AttributeList::AT_ObjCGC;	 // "objc_gc"
      case 'p':	 // 1 string to match.
        if (memcmp(Name.data()+2, "tnone", 5))
          break;
        return AttributeList::AT_OptimizeNone;	 // "optnone"
      }
      break;
    case 'r':	 // 1 string to match.
      if (memcmp(Name.data()+1, "egparm", 6))
        break;
      return AttributeList::AT_Regparm;	 // "regparm"
    case 's':	 // 2 strings to match.
      switch (Name[1]) {
      default: break;
      case 'e':	 // 1 string to match.
        if (memcmp(Name.data()+2, "ction", 5))
          break;
        return AttributeList::AT_Section;	 // "section"
      case 't':	 // 1 string to match.
        if (memcmp(Name.data()+2, "dcall", 5))
          break;
        return AttributeList::AT_StdCall;	 // "stdcall"
      }
      break;
    case 'w':	 // 1 string to match.
      if (memcmp(Name.data()+1, "eakref", 6))
        break;
      return AttributeList::AT_WeakRef;	 // "weakref"
    }
    break;
  case 8:	 // 14 strings to match.
    switch (Name[0]) {
    default: break;
    case 'N':	 // 1 string to match.
      if (memcmp(Name.data()+1, "SObject", 7))
        break;
      return AttributeList::AT_ObjCNSObject;	 // "NSObject"
    case 'a':	 // 1 string to match.
      if (memcmp(Name.data()+1, "nnotate", 7))
        break;
      return AttributeList::AT_Annotate;	 // "annotate"
    case 'c':	 // 1 string to match.
      if (memcmp(Name.data()+1, "onstant", 7))
        break;
      return AttributeList::AT_CUDAConstant;	 // "constant"
    case 'f':	 // 1 string to match.
      if (memcmp(Name.data()+1, "astcall", 7))
        break;
      return AttributeList::AT_FastCall;	 // "fastcall"
    case 'i':	 // 2 strings to match.
      if (Name[1] != 'b')
        break;
      switch (Name[2]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+3, "ction", 5))
          break;
        return AttributeList::AT_IBAction;	 // "ibaction"
      case 'o':	 // 1 string to match.
        if (memcmp(Name.data()+3, "utlet", 5))
          break;
        return AttributeList::AT_IBOutlet;	 // "iboutlet"
      }
      break;
    case 'l':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ockable", 7))
        break;
      return AttributeList::AT_Lockable;	 // "lockable"
    case 'n':	 // 4 strings to match.
      if (Name[1] != 'o')
        break;
      switch (Name[2]) {
      default: break;
      case 'c':	 // 1 string to match.
        if (memcmp(Name.data()+3, "ommon", 5))
          break;
        return AttributeList::AT_NoCommon;	 // "nocommon"
      case 'i':	 // 1 string to match.
        if (memcmp(Name.data()+3, "nline", 5))
          break;
        return AttributeList::AT_NoInline;	 // "noinline"
      case 'm':	 // 1 string to match.
        if (memcmp(Name.data()+3, "ips16", 5))
          break;
        return AttributeList::AT_NoMips16;	 // "nomips16"
      case 'r':	 // 1 string to match.
        if (memcmp(Name.data()+3, "eturn", 5))
          break;
        return AttributeList::AT_NoReturn;	 // "noreturn"
      }
      break;
    case 's':	 // 2 strings to match.
      switch (Name[1]) {
      default: break;
      case 'e':	 // 1 string to match.
        if (memcmp(Name.data()+2, "ntinel", 6))
          break;
        return AttributeList::AT_Sentinel;	 // "sentinel"
      case 'y':	 // 1 string to match.
        if (memcmp(Name.data()+2, "sv_abi", 6))
          break;
        return AttributeList::AT_SysVABI;	 // "sysv_abi"
      }
      break;
    case 't':	 // 1 string to match.
      if (memcmp(Name.data()+1, "hiscall", 7))
        break;
      return AttributeList::AT_ThisCall;	 // "thiscall"
    }
    break;
  case 9:	 // 9 strings to match.
    switch (Name[0]) {
    default: break;
    case 'd':	 // 2 strings to match.
      if (memcmp(Name.data()+1, "ll", 2))
        break;
      switch (Name[3]) {
      default: break;
      case 'e':	 // 1 string to match.
        if (memcmp(Name.data()+4, "xport", 5))
          break;
        return AttributeList::AT_DLLExport;	 // "dllexport"
      case 'i':	 // 1 string to match.
        if (memcmp(Name.data()+4, "mport", 5))
          break;
        return AttributeList::AT_DLLImport;	 // "dllimport"
      }
      break;
    case 'e':	 // 1 string to match.
      if (memcmp(Name.data()+1, "nable_if", 8))
        break;
      return AttributeList::AT_EnableIf;	 // "enable_if"
    case 'i':	 // 1 string to match.
      if (memcmp(Name.data()+1, "nterrupt", 8))
        break;
      return AttributeList::AT_Interrupt;	 // "interrupt"
    case 'm':	 // 2 strings to match.
      switch (Name[1]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+2, "y_alias", 7))
          break;
        return AttributeList::AT_MayAlias;	 // "may_alias"
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+2, "_struct", 7))
          break;
        return AttributeList::AT_MsStruct;	 // "ms_struct"
      }
      break;
    case 'p':	 // 1 string to match.
      if (memcmp(Name.data()+1, "naclcall", 8))
        break;
      return AttributeList::AT_PnaclCall;	 // "pnaclcall"
    case 't':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ls_model", 8))
        break;
      return AttributeList::AT_TLSModel;	 // "tls_model"
    case 'v':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ecreturn", 8))
        break;
      return AttributeList::AT_VecReturn;	 // "vecreturn"
    }
    break;
  case 10:	 // 8 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 2 strings to match.
      switch (Name[1]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+2, "pability", 8))
          break;
        return AttributeList::AT_Capability;	 // "capability"
      case 'o':	 // 1 string to match.
        if (memcmp(Name.data()+2, "nsumable", 8))
          break;
        return AttributeList::AT_Consumable;	 // "consumable"
      }
      break;
    case 'd':	 // 2 strings to match.
      if (Name[1] != 'e')
        break;
      switch (Name[2]) {
      default: break;
      case 'p':	 // 1 string to match.
        if (memcmp(Name.data()+3, "recated", 7))
          break;
        return AttributeList::AT_Deprecated;	 // "deprecated"
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+3, "tructor", 7))
          break;
        return AttributeList::AT_Destructor;	 // "destructor"
      }
      break;
    case 'f':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ormat_arg", 9))
        break;
      return AttributeList::AT_FormatArg;	 // "format_arg"
    case 'g':	 // 2 strings to match.
      switch (Name[1]) {
      default: break;
      case 'n':	 // 1 string to match.
        if (memcmp(Name.data()+2, "u_inline", 8))
          break;
        return AttributeList::AT_GNUInline;	 // "gnu_inline"
      case 'u':	 // 1 string to match.
        if (memcmp(Name.data()+2, "arded_by", 8))
          break;
        return AttributeList::AT_GuardedBy;	 // "guarded_by"
      }
      break;
    case 'v':	 // 1 string to match.
      if (memcmp(Name.data()+1, "isibility", 9))
        break;
      return AttributeList::AT_Visibility;	 // "visibility"
    }
    break;
  case 11:	 // 10 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 2 strings to match.
      switch (Name[1]) {
      default: break;
      case 'f':	 // 1 string to match.
        if (memcmp(Name.data()+2, "_consumed", 9))
          break;
        return AttributeList::AT_CFConsumed;	 // "cf_consumed"
      case 'o':	 // 1 string to match.
        if (memcmp(Name.data()+2, "nstructor", 9))
          break;
        return AttributeList::AT_Constructor;	 // "constructor"
      }
      break;
    case 'g':	 // 1 string to match.
      if (memcmp(Name.data()+1, "uarded_var", 10))
        break;
      return AttributeList::AT_GuardedVar;	 // "guarded_var"
    case 'n':	 // 2 strings to match.
      switch (Name[1]) {
      default: break;
      case 'o':	 // 1 string to match.
        if (memcmp(Name.data()+2, "duplicate", 9))
          break;
        return AttributeList::AT_NoDuplicate;	 // "noduplicate"
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+2, "_consumed", 9))
          break;
        return AttributeList::AT_NSConsumed;	 // "ns_consumed"
      }
      break;
    case 'o':	 // 1 string to match.
      if (memcmp(Name.data()+1, "bjc_bridge", 10))
        break;
      return AttributeList::AT_ObjCBridge;	 // "objc_bridge"
    case 'u':	 // 1 string to match.
      if (memcmp(Name.data()+1, "navailable", 10))
        break;
      return AttributeList::AT_Unavailable;	 // "unavailable"
    case 'v':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ector_size", 10))
        break;
      return AttributeList::AT_VectorSize;	 // "vector_size"
    case 'w':	 // 2 strings to match.
      switch (Name[1]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+2, "rn_unused", 9))
          break;
        return AttributeList::AT_WarnUnused;	 // "warn_unused"
      case 'e':	 // 1 string to match.
        if (memcmp(Name.data()+2, "ak_import", 9))
          break;
        return AttributeList::AT_WeakImport;	 // "weak_import"
      }
      break;
    }
    break;
  case 12:	 // 2 strings to match.
    switch (Name[0]) {
    default: break;
    case 'a':	 // 1 string to match.
      if (memcmp(Name.data()+1, "vailability", 11))
        break;
      return AttributeList::AT_Availability;	 // "availability"
    case 'o':	 // 1 string to match.
      if (memcmp(Name.data()+1, "verloadable", 11))
        break;
      return AttributeList::AT_Overloadable;	 // "overloadable"
    }
    break;
  case 13:	 // 10 strings to match.
    switch (Name[0]) {
    default: break;
    case 'a':	 // 2 strings to match.
      switch (Name[1]) {
      default: break;
      case 'd':	 // 1 string to match.
        if (memcmp(Name.data()+2, "dress_space", 11))
          break;
        return AttributeList::AT_AddressSpace;	 // "address_space"
      case 'l':	 // 1 string to match.
        if (memcmp(Name.data()+2, "ways_inline", 11))
          break;
        return AttributeList::AT_AlwaysInline;	 // "always_inline"
      }
      break;
    case 'c':	 // 1 string to match.
      if (memcmp(Name.data()+1, "allable_when", 12))
        break;
      return AttributeList::AT_CallableWhen;	 // "callable_when"
    case 'i':	 // 1 string to match.
      if (memcmp(Name.data()+1, "nit_priority", 12))
        break;
      return AttributeList::AT_InitPriority;	 // "init_priority"
    case 'l':	 // 2 strings to match.
      switch (Name[1]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+2, "unch_bounds", 11))
          break;
        return AttributeList::AT_CUDALaunchBounds;	 // "launch_bounds"
      case 'o':	 // 1 string to match.
        if (memcmp(Name.data()+2, "ck_returned", 11))
          break;
        return AttributeList::AT_LockReturned;	 // "lock_returned"
      }
      break;
    case 'p':	 // 1 string to match.
      if (memcmp(Name.data()+1, "t_guarded_by", 12))
        break;
      return AttributeList::AT_PtGuardedBy;	 // "pt_guarded_by"
    case 'r':	 // 1 string to match.
      if (memcmp(Name.data()+1, "eturns_twice", 12))
        break;
      return AttributeList::AT_ReturnsTwice;	 // "returns_twice"
    case 's':	 // 1 string to match.
      if (memcmp(Name.data()+1, "et_typestate", 12))
        break;
      return AttributeList::AT_SetTypestate;	 // "set_typestate"
    case 'v':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ec_type_hint", 12))
        break;
      return AttributeList::AT_VecTypeHint;	 // "vec_type_hint"
    }
    break;
  case 14:	 // 8 strings to match.
    switch (Name[0]) {
    default: break;
    case 'a':	 // 1 string to match.
      if (memcmp(Name.data()+1, "cquired_after", 13))
        break;
      return AttributeList::AT_AcquiredAfter;	 // "acquired_after"
    case 'i':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ntel_ocl_bicc", 13))
        break;
      return AttributeList::AT_IntelOclBicc;	 // "intel_ocl_bicc"
    case 'l':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ocks_excluded", 13))
        break;
      return AttributeList::AT_LocksExcluded;	 // "locks_excluded"
    case 'n':	 // 1 string to match.
      if (memcmp(Name.data()+1, "o_split_stack", 13))
        break;
      return AttributeList::AT_NoSplitStack;	 // "no_split_stack"
    case 'o':	 // 2 strings to match.
      if (memcmp(Name.data()+1, "bjc_", 4))
        break;
      switch (Name[5]) {
      default: break;
      case 'e':	 // 1 string to match.
        if (memcmp(Name.data()+6, "xception", 8))
          break;
        return AttributeList::AT_ObjCException;	 // "objc_exception"
      case 'o':	 // 1 string to match.
        if (memcmp(Name.data()+6, "wnership", 8))
          break;
        return AttributeList::AT_ObjCOwnership;	 // "objc_ownership"
      }
      break;
    case 'p':	 // 1 string to match.
      if (memcmp(Name.data()+1, "t_guarded_var", 13))
        break;
      return AttributeList::AT_PtGuardedVar;	 // "pt_guarded_var"
    case 't':	 // 1 string to match.
      if (memcmp(Name.data()+1, "est_typestate", 13))
        break;
      return AttributeList::AT_TestTypestate;	 // "test_typestate"
    }
    break;
  case 15:	 // 10 strings to match.
    switch (Name[0]) {
    default: break;
    case 'a':	 // 1 string to match.
      if (memcmp(Name.data()+1, "cquired_before", 14))
        break;
      return AttributeList::AT_AcquiredBefore;	 // "acquired_before"
    case 'e':	 // 1 string to match.
      if (memcmp(Name.data()+1, "xt_vector_type", 14))
        break;
      return AttributeList::AT_ExtVectorType;	 // "ext_vector_type"
    case 'o':	 // 3 strings to match.
      switch (Name[1]) {
      default: break;
      case 'b':	 // 1 string to match.
        if (memcmp(Name.data()+2, "jc_root_class", 13))
          break;
        return AttributeList::AT_ObjCRootClass;	 // "objc_root_class"
      case 'w':	 // 2 strings to match.
        if (memcmp(Name.data()+2, "nership_", 8))
          break;
        switch (Name[10]) {
        default: break;
        case 'h':	 // 1 string to match.
          if (memcmp(Name.data()+11, "olds", 4))
            break;
          return AttributeList::AT_Ownership;	 // "ownership_holds"
        case 't':	 // 1 string to match.
          if (memcmp(Name.data()+11, "akes", 4))
            break;
          return AttributeList::AT_Ownership;	 // "ownership_takes"
        }
        break;
      }
      break;
    case 'p':	 // 1 string to match.
      if (memcmp(Name.data()+1, "aram_typestate", 14))
        break;
      return AttributeList::AT_ParamTypestate;	 // "param_typestate"
    case 'r':	 // 1 string to match.
      if (memcmp(Name.data()+1, "eturns_nonnull", 14))
        break;
      return AttributeList::AT_ReturnsNonNull;	 // "returns_nonnull"
    case 's':	 // 1 string to match.
      if (memcmp(Name.data()+1, "coped_lockable", 14))
        break;
      return AttributeList::AT_ScopedLockable;	 // "scoped_lockable"
    case 't':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ype_visibility", 14))
        break;
      return AttributeList::AT_TypeVisibility;	 // "type_visibility"
    case 'u':	 // 1 string to match.
      if (memcmp(Name.data()+1, "nlock_function", 14))
        break;
      return AttributeList::AT_ReleaseCapability;	 // "unlock_function"
    }
    break;
  case 16:	 // 3 strings to match.
    switch (Name[0]) {
    default: break;
    case 'n':	 // 2 strings to match.
      switch (Name[1]) {
      default: break;
      case 'e':	 // 1 string to match.
        if (memcmp(Name.data()+2, "on_vector_type", 14))
          break;
        return AttributeList::AT_NeonVectorType;	 // "neon_vector_type"
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+2, "_consumes_self", 14))
          break;
        return AttributeList::AT_NSConsumesSelf;	 // "ns_consumes_self"
      }
      break;
    case 'r':	 // 1 string to match.
      if (memcmp(Name.data()+1, "eturn_typestate", 15))
        break;
      return AttributeList::AT_ReturnTypestate;	 // "return_typestate"
    }
    break;
  case 17:	 // 6 strings to match.
    switch (Name[0]) {
    default: break;
    case 'a':	 // 2 strings to match.
      switch (Name[1]) {
      default: break;
      case 'n':	 // 1 string to match.
        if (memcmp(Name.data()+2, "alyzer_noreturn", 15))
          break;
        return AttributeList::AT_AnalyzerNoReturn;	 // "analyzer_noreturn"
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+2, "sert_capability", 15))
          break;
        return AttributeList::AT_AssertCapability;	 // "assert_capability"
      }
      break;
    case 'o':	 // 2 strings to match.
      switch (Name[1]) {
      default: break;
      case 'b':	 // 1 string to match.
        if (memcmp(Name.data()+2, "jc_runtime_name", 15))
          break;
        return AttributeList::AT_ObjCRuntimeName;	 // "objc_runtime_name"
      case 'w':	 // 1 string to match.
        if (memcmp(Name.data()+2, "nership_returns", 15))
          break;
        return AttributeList::AT_Ownership;	 // "ownership_returns"
      }
      break;
    case 's':	 // 1 string to match.
      if (memcmp(Name.data()+1, "hared_capability", 16))
        break;
      return AttributeList::AT_Capability;	 // "shared_capability"
    case 't':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ransparent_union", 16))
        break;
      return AttributeList::AT_TransparentUnion;	 // "transparent_union"
    }
    break;
  case 18:	 // 9 strings to match.
    switch (Name[0]) {
    default: break;
    case 'a':	 // 2 strings to match.
      switch (Name[1]) {
      default: break;
      case 'c':	 // 1 string to match.
        if (memcmp(Name.data()+2, "quire_capability", 16))
          break;
        return AttributeList::AT_AcquireCapability;	 // "acquire_capability"
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+2, "sert_shared_lock", 16))
          break;
        return AttributeList::AT_AssertSharedLock;	 // "assert_shared_lock"
      }
      break;
    case 'c':	 // 1 string to match.
      if (memcmp(Name.data()+1, "arries_dependency", 17))
        break;
      return AttributeList::AT_CarriesDependency;	 // "carries_dependency"
    case 'i':	 // 1 string to match.
      if (memcmp(Name.data()+1, "boutletcollection", 17))
        break;
      return AttributeList::AT_IBOutletCollection;	 // "iboutletcollection"
    case 'n':	 // 2 strings to match.
      if (memcmp(Name.data()+1, "o_sanitize_", 11))
        break;
      switch (Name[12]) {
      default: break;
      case 'm':	 // 1 string to match.
        if (memcmp(Name.data()+13, "emory", 5))
          break;
        return AttributeList::AT_NoSanitizeMemory;	 // "no_sanitize_memory"
      case 't':	 // 1 string to match.
        if (memcmp(Name.data()+13, "hread", 5))
          break;
        return AttributeList::AT_NoSanitizeThread;	 // "no_sanitize_thread"
      }
      break;
    case 'o':	 // 1 string to match.
      if (memcmp(Name.data()+1, "bjc_method_family", 17))
        break;
      return AttributeList::AT_ObjCMethodFamily;	 // "objc_method_family"
    case 'r':	 // 1 string to match.
      if (memcmp(Name.data()+1, "elease_capability", 17))
        break;
      return AttributeList::AT_ReleaseCapability;	 // "release_capability"
    case 'w':	 // 1 string to match.
      if (memcmp(Name.data()+1, "arn_unused_result", 17))
        break;
      return AttributeList::AT_WarnUnusedResult;	 // "warn_unused_result"
    }
    break;
  case 19:	 // 9 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 3 strings to match.
      if (memcmp(Name.data()+1, "f_", 2))
        break;
      switch (Name[3]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+4, "udited_transfer", 15))
          break;
        return AttributeList::AT_CFAuditedTransfer;	 // "cf_audited_transfer"
      case 'r':	 // 1 string to match.
        if (memcmp(Name.data()+4, "eturns_retained", 15))
          break;
        return AttributeList::AT_CFReturnsRetained;	 // "cf_returns_retained"
      case 'u':	 // 1 string to match.
        if (memcmp(Name.data()+4, "nknown_transfer", 15))
          break;
        return AttributeList::AT_CFUnknownTransfer;	 // "cf_unknown_transfer"
      }
      break;
    case 'n':	 // 2 strings to match.
      switch (Name[1]) {
      default: break;
      case 'o':	 // 1 string to match.
        if (memcmp(Name.data()+2, "_sanitize_address", 17))
          break;
        return AttributeList::AT_NoSanitizeAddress;	 // "no_sanitize_address"
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+2, "_returns_retained", 17))
          break;
        return AttributeList::AT_NSReturnsRetained;	 // "ns_returns_retained"
      }
      break;
    case 'o':	 // 3 strings to match.
      if (memcmp(Name.data()+1, "bjc_", 4))
        break;
      switch (Name[5]) {
      default: break;
      case 'b':	 // 2 strings to match.
        if (memcmp(Name.data()+6, "ridge_", 6))
          break;
        switch (Name[12]) {
        default: break;
        case 'm':	 // 1 string to match.
          if (memcmp(Name.data()+13, "utable", 6))
            break;
          return AttributeList::AT_ObjCBridgeMutable;	 // "objc_bridge_mutable"
        case 'r':	 // 1 string to match.
          if (memcmp(Name.data()+13, "elated", 6))
            break;
          return AttributeList::AT_ObjCBridgeRelated;	 // "objc_bridge_related"
        }
        break;
      case 'r':	 // 1 string to match.
        if (memcmp(Name.data()+6, "equires_super", 13))
          break;
        return AttributeList::AT_ObjCRequiresSuper;	 // "objc_requires_super"
      }
      break;
    case 'r':	 // 1 string to match.
      if (memcmp(Name.data()+1, "equires_capability", 18))
        break;
      return AttributeList::AT_RequiresCapability;	 // "requires_capability"
    }
    break;
  case 20:	 // 4 strings to match.
    switch (Name[0]) {
    default: break;
    case 'n':	 // 1 string to match.
      if (memcmp(Name.data()+1, "eon_polyvector_type", 19))
        break;
      return AttributeList::AT_NeonPolyVectorType;	 // "neon_polyvector_type"
    case 'r':	 // 1 string to match.
      if (memcmp(Name.data()+1, "eqd_work_group_size", 19))
        break;
      return AttributeList::AT_ReqdWorkGroupSize;	 // "reqd_work_group_size"
    case 's':	 // 1 string to match.
      if (memcmp(Name.data()+1, "hared_lock_function", 19))
        break;
      return AttributeList::AT_AcquireCapability;	 // "shared_lock_function"
    case 'w':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ork_group_size_hint", 19))
        break;
      return AttributeList::AT_WorkGroupSizeHint;	 // "work_group_size_hint"
    }
    break;
  case 21:	 // 5 strings to match.
    switch (Name[0]) {
    default: break;
    case 'a':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ssert_exclusive_lock", 20))
        break;
      return AttributeList::AT_AssertExclusiveLock;	 // "assert_exclusive_lock"
    case 'o':	 // 1 string to match.
      if (memcmp(Name.data()+1, "bjc_precise_lifetime", 20))
        break;
      return AttributeList::AT_ObjCPreciseLifetime;	 // "objc_precise_lifetime"
    case 'p':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ointer_with_type_tag", 20))
        break;
      return AttributeList::AT_ArgumentWithTypeTag;	 // "pointer_with_type_tag"
    case 's':	 // 1 string to match.
      if (memcmp(Name.data()+1, "hared_locks_required", 20))
        break;
      return AttributeList::AT_RequiresCapability;	 // "shared_locks_required"
    case 't':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ype_tag_for_datatype", 20))
        break;
      return AttributeList::AT_TypeTagForDatatype;	 // "type_tag_for_datatype"
    }
    break;
  case 22:	 // 3 strings to match.
    switch (Name[0]) {
    default: break;
    case 'a':	 // 1 string to match.
      if (memcmp(Name.data()+1, "rgument_with_type_tag", 21))
        break;
      return AttributeList::AT_ArgumentWithTypeTag;	 // "argument_with_type_tag"
    case 'n':	 // 1 string to match.
      if (memcmp(Name.data()+1, "o_instrument_function", 21))
        break;
      return AttributeList::AT_NoInstrumentFunction;	 // "no_instrument_function"
    case 't':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ry_acquire_capability", 21))
        break;
      return AttributeList::AT_TryAcquireCapability;	 // "try_acquire_capability"
    }
    break;
  case 23:	 // 6 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 1 string to match.
      if (memcmp(Name.data()+1, "f_returns_not_retained", 22))
        break;
      return AttributeList::AT_CFReturnsNotRetained;	 // "cf_returns_not_retained"
    case 'e':	 // 1 string to match.
      if (memcmp(Name.data()+1, "xclusive_lock_function", 22))
        break;
      return AttributeList::AT_AcquireCapability;	 // "exclusive_lock_function"
    case 'f':	 // 1 string to match.
      if (memcmp(Name.data()+1, "orce_align_arg_pointer", 22))
        break;
      return AttributeList::AT_X86ForceAlignArgPointer;	 // "force_align_arg_pointer"
    case 'n':	 // 2 strings to match.
      if (memcmp(Name.data()+1, "s_returns_", 10))
        break;
      switch (Name[11]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+12, "utoreleased", 11))
          break;
        return AttributeList::AT_NSReturnsAutoreleased;	 // "ns_returns_autoreleased"
      case 'n':	 // 1 string to match.
        if (memcmp(Name.data()+12, "ot_retained", 11))
          break;
        return AttributeList::AT_NSReturnsNotRetained;	 // "ns_returns_not_retained"
      }
      break;
    case 's':	 // 1 string to match.
      if (memcmp(Name.data()+1, "hared_trylock_function", 22))
        break;
      return AttributeList::AT_SharedTrylockFunction;	 // "shared_trylock_function"
    }
    break;
  case 24:	 // 2 strings to match.
    switch (Name[0]) {
    default: break;
    case 'a':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ssert_shared_capability", 23))
        break;
      return AttributeList::AT_AssertCapability;	 // "assert_shared_capability"
    case 'e':	 // 1 string to match.
      if (memcmp(Name.data()+1, "xclusive_locks_required", 23))
        break;
      return AttributeList::AT_RequiresCapability;	 // "exclusive_locks_required"
    }
    break;
  case 25:	 // 3 strings to match.
    switch (Name[0]) {
    default: break;
    case 'a':	 // 1 string to match.
      if (memcmp(Name.data()+1, "cquire_shared_capability", 24))
        break;
      return AttributeList::AT_AcquireCapability;	 // "acquire_shared_capability"
    case 'n':	 // 1 string to match.
      if (memcmp(Name.data()+1, "o_thread_safety_analysis", 24))
        break;
      return AttributeList::AT_NoThreadSafetyAnalysis;	 // "no_thread_safety_analysis"
    case 'r':	 // 1 string to match.
      if (memcmp(Name.data()+1, "elease_shared_capability", 24))
        break;
      return AttributeList::AT_ReleaseCapability;	 // "release_shared_capability"
    }
    break;
  case 26:	 // 6 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 1 string to match.
      if (memcmp(Name.data()+1, "onsumable_auto_cast_state", 25))
        break;
      return AttributeList::AT_ConsumableAutoCast;	 // "consumable_auto_cast_state"
    case 'e':	 // 1 string to match.
      if (memcmp(Name.data()+1, "xclusive_trylock_function", 25))
        break;
      return AttributeList::AT_ExclusiveTrylockFunction;	 // "exclusive_trylock_function"
    case 'n':	 // 1 string to match.
      if (memcmp(Name.data()+1, "o_address_safety_analysis", 25))
        break;
      return AttributeList::AT_NoSanitizeAddress;	 // "no_address_safety_analysis"
    case 'o':	 // 1 string to match.
      if (memcmp(Name.data()+1, "bjc_returns_inner_pointer", 25))
        break;
      return AttributeList::AT_ObjCReturnsInnerPointer;	 // "objc_returns_inner_pointer"
    case 'r':	 // 2 strings to match.
      if (Name[1] != 'e')
        break;
      switch (Name[2]) {
      default: break;
      case 'l':	 // 1 string to match.
        if (memcmp(Name.data()+3, "ease_generic_capability", 23))
          break;
        return AttributeList::AT_ReleaseCapability;	 // "release_generic_capability"
      case 'q':	 // 1 string to match.
        if (memcmp(Name.data()+3, "uires_shared_capability", 23))
          break;
        return AttributeList::AT_RequiresCapability;	 // "requires_shared_capability"
      }
      break;
    }
    break;
  case 27:	 // 1 string to match.
    if (memcmp(Name.data()+0, "objc_designated_initializer", 27))
      break;
    return AttributeList::AT_ObjCDesignatedInitializer;	 // "objc_designated_initializer"
  case 28:	 // 1 string to match.
    if (memcmp(Name.data()+0, "consumable_set_state_on_read", 28))
      break;
    return AttributeList::AT_ConsumableSetOnRead;	 // "consumable_set_state_on_read"
  case 29:	 // 1 string to match.
    if (memcmp(Name.data()+0, "try_acquire_shared_capability", 29))
      break;
    return AttributeList::AT_TryAcquireCapability;	 // "try_acquire_shared_capability"
  case 34:	 // 1 string to match.
    if (memcmp(Name.data()+0, "objc_requires_property_definitions", 34))
      break;
    return AttributeList::AT_ObjCRequiresPropertyDefs;	 // "objc_requires_property_definitions"
  case 35:	 // 1 string to match.
    if (memcmp(Name.data()+0, "objc_arc_weak_reference_unavailable", 35))
      break;
    return AttributeList::AT_ArcWeakrefUnavailable;	 // "objc_arc_weak_reference_unavailable"
  case 46:	 // 1 string to match.
    if (memcmp(Name.data()+0, "objc_protocol_requires_explicit_implementation", 46))
      break;
    return AttributeList::AT_ObjCExplicitProtocolImpl;	 // "objc_protocol_requires_explicit_implementation"
  }
  } else if (AttributeList::AS_Declspec == Syntax) {
  switch (Name.size()) {
  default: break;
  case 4:	 // 1 string to match.
    if (memcmp(Name.data()+0, "uuid", 4))
      break;
    return AttributeList::AT_Uuid;	 // "uuid"
  case 5:	 // 2 strings to match.
    switch (Name[0]) {
    default: break;
    case 'a':	 // 1 string to match.
      if (memcmp(Name.data()+1, "lign", 4))
        break;
      return AttributeList::AT_Aligned;	 // "align"
    case 'n':	 // 1 string to match.
      if (memcmp(Name.data()+1, "aked", 4))
        break;
      return AttributeList::AT_Naked;	 // "naked"
    }
    break;
  case 6:	 // 1 string to match.
    if (memcmp(Name.data()+0, "thread", 6))
      break;
    return AttributeList::AT_Thread;	 // "thread"
  case 7:	 // 1 string to match.
    if (memcmp(Name.data()+0, "nothrow", 7))
      break;
    return AttributeList::AT_NoThrow;	 // "nothrow"
  case 8:	 // 4 strings to match.
    switch (Name[0]) {
    default: break;
    case 'a':	 // 1 string to match.
      if (memcmp(Name.data()+1, "llocate", 7))
        break;
      return AttributeList::AT_Section;	 // "allocate"
    case 'n':	 // 2 strings to match.
      if (Name[1] != 'o')
        break;
      switch (Name[2]) {
      default: break;
      case 'i':	 // 1 string to match.
        if (memcmp(Name.data()+3, "nline", 5))
          break;
        return AttributeList::AT_NoInline;	 // "noinline"
      case 'r':	 // 1 string to match.
        if (memcmp(Name.data()+3, "eturn", 5))
          break;
        return AttributeList::AT_NoReturn;	 // "noreturn"
      }
      break;
    case 'p':	 // 1 string to match.
      if (memcmp(Name.data()+1, "roperty", 7))
        break;
      return AttributeList::IgnoredAttribute;	 // "property"
    }
    break;
  case 9:	 // 3 strings to match.
    switch (Name[0]) {
    default: break;
    case 'd':	 // 2 strings to match.
      if (memcmp(Name.data()+1, "ll", 2))
        break;
      switch (Name[3]) {
      default: break;
      case 'e':	 // 1 string to match.
        if (memcmp(Name.data()+4, "xport", 5))
          break;
        return AttributeList::AT_DLLExport;	 // "dllexport"
      case 'i':	 // 1 string to match.
        if (memcmp(Name.data()+4, "mport", 5))
          break;
        return AttributeList::AT_DLLImport;	 // "dllimport"
      }
      break;
    case 's':	 // 1 string to match.
      if (memcmp(Name.data()+1, "electany", 8))
        break;
      return AttributeList::AT_SelectAny;	 // "selectany"
    }
    break;
  case 10:	 // 1 string to match.
    if (memcmp(Name.data()+0, "deprecated", 10))
      break;
    return AttributeList::AT_Deprecated;	 // "deprecated"
  }
  } else if (AttributeList::AS_CXX11 == Syntax) {
  switch (Name.size()) {
  default: break;
  case 8:	 // 2 strings to match.
    if (memcmp(Name.data()+0, "gnu::", 5))
      break;
    switch (Name[5]) {
    default: break;
    case 'h':	 // 1 string to match.
      if (memcmp(Name.data()+6, "ot", 2))
        break;
      return AttributeList::AT_Hot;	 // "gnu::hot"
    case 'p':	 // 1 string to match.
      if (memcmp(Name.data()+6, "cs", 2))
        break;
      return AttributeList::AT_Pcs;	 // "gnu::pcs"
    }
    break;
  case 9:	 // 5 strings to match.
    if (memcmp(Name.data()+0, "gnu::", 5))
      break;
    switch (Name[5]) {
    default: break;
    case 'c':	 // 1 string to match.
      if (memcmp(Name.data()+6, "old", 3))
        break;
      return AttributeList::AT_Cold;	 // "gnu::cold"
    case 'm':	 // 1 string to match.
      if (memcmp(Name.data()+6, "ode", 3))
        break;
      return AttributeList::AT_Mode;	 // "gnu::mode"
    case 'p':	 // 1 string to match.
      if (memcmp(Name.data()+6, "ure", 3))
        break;
      return AttributeList::AT_Pure;	 // "gnu::pure"
    case 'u':	 // 1 string to match.
      if (memcmp(Name.data()+6, "sed", 3))
        break;
      return AttributeList::AT_Used;	 // "gnu::used"
    case 'w':	 // 1 string to match.
      if (memcmp(Name.data()+6, "eak", 3))
        break;
      return AttributeList::AT_Weak;	 // "gnu::weak"
    }
    break;
  case 10:	 // 5 strings to match.
    switch (Name[0]) {
    default: break;
    case ':':	 // 1 string to match.
      if (memcmp(Name.data()+1, ":noreturn", 9))
        break;
      return AttributeList::AT_CXX11NoReturn;	 // "::noreturn"
    case 'g':	 // 4 strings to match.
      if (memcmp(Name.data()+1, "nu::", 4))
        break;
      switch (Name[5]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+6, "lias", 4))
          break;
        return AttributeList::AT_Alias;	 // "gnu::alias"
      case 'c':	 // 2 strings to match.
        switch (Name[6]) {
        default: break;
        case 'd':	 // 1 string to match.
          if (memcmp(Name.data()+7, "ecl", 3))
            break;
          return AttributeList::AT_CDecl;	 // "gnu::cdecl"
        case 'o':	 // 1 string to match.
          if (memcmp(Name.data()+7, "nst", 3))
            break;
          return AttributeList::AT_Const;	 // "gnu::const"
        }
        break;
      case 'n':	 // 1 string to match.
        if (memcmp(Name.data()+6, "aked", 4))
          break;
        return AttributeList::AT_Naked;	 // "gnu::naked"
      }
      break;
    }
    break;
  case 11:	 // 7 strings to match.
    if (memcmp(Name.data()+0, "gnu::", 5))
      break;
    switch (Name[5]) {
    default: break;
    case 'c':	 // 1 string to match.
      if (memcmp(Name.data()+6, "ommon", 5))
        break;
      return AttributeList::AT_Common;	 // "gnu::common"
    case 'f':	 // 1 string to match.
      if (memcmp(Name.data()+6, "ormat", 5))
        break;
      return AttributeList::AT_Format;	 // "gnu::format"
    case 'm':	 // 3 strings to match.
      switch (Name[6]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+7, "lloc", 4))
          break;
        return AttributeList::AT_Malloc;	 // "gnu::malloc"
      case 'i':	 // 1 string to match.
        if (memcmp(Name.data()+7, "ps16", 4))
          break;
        return AttributeList::AT_Mips16;	 // "gnu::mips16"
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+7, "_abi", 4))
          break;
        return AttributeList::AT_MSABI;	 // "gnu::ms_abi"
      }
      break;
    case 'p':	 // 1 string to match.
      if (memcmp(Name.data()+6, "acked", 5))
        break;
      return AttributeList::AT_Packed;	 // "gnu::packed"
    case 'u':	 // 1 string to match.
      if (memcmp(Name.data()+6, "nused", 5))
        break;
      return AttributeList::AT_Unused;	 // "gnu::unused"
    }
    break;
  case 12:	 // 11 strings to match.
    switch (Name[0]) {
    default: break;
    case ':':	 // 1 string to match.
      if (memcmp(Name.data()+1, ":deprecated", 11))
        break;
      return AttributeList::AT_Deprecated;	 // "::deprecated"
    case 'g':	 // 10 strings to match.
      if (memcmp(Name.data()+1, "nu::", 4))
        break;
      switch (Name[5]) {
      default: break;
      case '_':	 // 1 string to match.
        if (memcmp(Name.data()+6, "_const", 6))
          break;
        return AttributeList::AT_Const;	 // "gnu::__const"
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+6, "ligned", 6))
          break;
        return AttributeList::AT_Aligned;	 // "gnu::aligned"
      case 'c':	 // 1 string to match.
        if (memcmp(Name.data()+6, "leanup", 6))
          break;
        return AttributeList::AT_Cleanup;	 // "gnu::cleanup"
      case 'f':	 // 1 string to match.
        if (memcmp(Name.data()+6, "latten", 6))
          break;
        return AttributeList::AT_Flatten;	 // "gnu::flatten"
      case 'n':	 // 2 strings to match.
        if (Name[6] != 'o')
          break;
        switch (Name[7]) {
        default: break;
        case 'n':	 // 1 string to match.
          if (memcmp(Name.data()+8, "null", 4))
            break;
          return AttributeList::AT_NonNull;	 // "gnu::nonnull"
        case 't':	 // 1 string to match.
          if (memcmp(Name.data()+8, "hrow", 4))
            break;
          return AttributeList::AT_NoThrow;	 // "gnu::nothrow"
        }
        break;
      case 'r':	 // 1 string to match.
        if (memcmp(Name.data()+6, "egparm", 6))
          break;
        return AttributeList::AT_Regparm;	 // "gnu::regparm"
      case 's':	 // 2 strings to match.
        switch (Name[6]) {
        default: break;
        case 'e':	 // 1 string to match.
          if (memcmp(Name.data()+7, "ction", 5))
            break;
          return AttributeList::AT_Section;	 // "gnu::section"
        case 't':	 // 1 string to match.
          if (memcmp(Name.data()+7, "dcall", 5))
            break;
          return AttributeList::AT_StdCall;	 // "gnu::stdcall"
        }
        break;
      case 'w':	 // 1 string to match.
        if (memcmp(Name.data()+6, "eakref", 6))
          break;
        return AttributeList::AT_WeakRef;	 // "gnu::weakref"
      }
      break;
    }
    break;
  case 13:	 // 8 strings to match.
    if (memcmp(Name.data()+0, "gnu::", 5))
      break;
    switch (Name[5]) {
    default: break;
    case 'f':	 // 1 string to match.
      if (memcmp(Name.data()+6, "astcall", 7))
        break;
      return AttributeList::AT_FastCall;	 // "gnu::fastcall"
    case 'n':	 // 4 strings to match.
      if (Name[6] != 'o')
        break;
      switch (Name[7]) {
      default: break;
      case 'c':	 // 1 string to match.
        if (memcmp(Name.data()+8, "ommon", 5))
          break;
        return AttributeList::AT_NoCommon;	 // "gnu::nocommon"
      case 'i':	 // 1 string to match.
        if (memcmp(Name.data()+8, "nline", 5))
          break;
        return AttributeList::AT_NoInline;	 // "gnu::noinline"
      case 'm':	 // 1 string to match.
        if (memcmp(Name.data()+8, "ips16", 5))
          break;
        return AttributeList::AT_NoMips16;	 // "gnu::nomips16"
      case 'r':	 // 1 string to match.
        if (memcmp(Name.data()+8, "eturn", 5))
          break;
        return AttributeList::AT_NoReturn;	 // "gnu::noreturn"
      }
      break;
    case 's':	 // 2 strings to match.
      switch (Name[6]) {
      default: break;
      case 'e':	 // 1 string to match.
        if (memcmp(Name.data()+7, "ntinel", 6))
          break;
        return AttributeList::AT_Sentinel;	 // "gnu::sentinel"
      case 'y':	 // 1 string to match.
        if (memcmp(Name.data()+7, "sv_abi", 6))
          break;
        return AttributeList::AT_SysVABI;	 // "gnu::sysv_abi"
      }
      break;
    case 't':	 // 1 string to match.
      if (memcmp(Name.data()+6, "hiscall", 7))
        break;
      return AttributeList::AT_ThisCall;	 // "gnu::thiscall"
    }
    break;
  case 14:	 // 6 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 1 string to match.
      if (memcmp(Name.data()+1, "lang::optnone", 13))
        break;
      return AttributeList::AT_OptimizeNone;	 // "clang::optnone"
    case 'g':	 // 5 strings to match.
      if (memcmp(Name.data()+1, "nu::", 4))
        break;
      switch (Name[5]) {
      default: break;
      case 'd':	 // 2 strings to match.
        if (memcmp(Name.data()+6, "ll", 2))
          break;
        switch (Name[8]) {
        default: break;
        case 'e':	 // 1 string to match.
          if (memcmp(Name.data()+9, "xport", 5))
            break;
          return AttributeList::AT_DLLExport;	 // "gnu::dllexport"
        case 'i':	 // 1 string to match.
          if (memcmp(Name.data()+9, "mport", 5))
            break;
          return AttributeList::AT_DLLImport;	 // "gnu::dllimport"
        }
        break;
      case 'm':	 // 2 strings to match.
        switch (Name[6]) {
        default: break;
        case 'a':	 // 1 string to match.
          if (memcmp(Name.data()+7, "y_alias", 7))
            break;
          return AttributeList::AT_MayAlias;	 // "gnu::may_alias"
        case 's':	 // 1 string to match.
          if (memcmp(Name.data()+7, "_struct", 7))
            break;
          return AttributeList::AT_MsStruct;	 // "gnu::ms_struct"
        }
        break;
      case 't':	 // 1 string to match.
        if (memcmp(Name.data()+6, "ls_model", 8))
          break;
        return AttributeList::AT_TLSModel;	 // "gnu::tls_model"
      }
      break;
    }
    break;
  case 15:	 // 5 strings to match.
    if (memcmp(Name.data()+0, "gnu::", 5))
      break;
    switch (Name[5]) {
    default: break;
    case 'd':	 // 2 strings to match.
      if (Name[6] != 'e')
        break;
      switch (Name[7]) {
      default: break;
      case 'p':	 // 1 string to match.
        if (memcmp(Name.data()+8, "recated", 7))
          break;
        return AttributeList::AT_Deprecated;	 // "gnu::deprecated"
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+8, "tructor", 7))
          break;
        return AttributeList::AT_Destructor;	 // "gnu::destructor"
      }
      break;
    case 'f':	 // 1 string to match.
      if (memcmp(Name.data()+6, "ormat_arg", 9))
        break;
      return AttributeList::AT_FormatArg;	 // "gnu::format_arg"
    case 'g':	 // 1 string to match.
      if (memcmp(Name.data()+6, "nu_inline", 9))
        break;
      return AttributeList::AT_GNUInline;	 // "gnu::gnu_inline"
    case 'v':	 // 1 string to match.
      if (memcmp(Name.data()+6, "isibility", 9))
        break;
      return AttributeList::AT_Visibility;	 // "gnu::visibility"
    }
    break;
  case 16:	 // 2 strings to match.
    if (memcmp(Name.data()+0, "gnu::", 5))
      break;
    switch (Name[5]) {
    default: break;
    case 'c':	 // 1 string to match.
      if (memcmp(Name.data()+6, "onstructor", 10))
        break;
      return AttributeList::AT_Constructor;	 // "gnu::constructor"
    case 'v':	 // 1 string to match.
      if (memcmp(Name.data()+6, "ector_size", 10))
        break;
      return AttributeList::AT_VectorSize;	 // "gnu::vector_size"
    }
    break;
  case 17:	 // 1 string to match.
    if (memcmp(Name.data()+0, "clang::capability", 17))
      break;
    return AttributeList::AT_Capability;	 // "clang::capability"
  case 18:	 // 4 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 2 strings to match.
      if (memcmp(Name.data()+1, "lang::", 6))
        break;
      switch (Name[7]) {
      default: break;
      case 'f':	 // 1 string to match.
        if (memcmp(Name.data()+8, "allthrough", 10))
          break;
        return AttributeList::AT_FallThrough;	 // "clang::fallthrough"
      case 'n':	 // 1 string to match.
        if (memcmp(Name.data()+8, "oduplicate", 10))
          break;
        return AttributeList::AT_NoDuplicate;	 // "clang::noduplicate"
      }
      break;
    case 'g':	 // 2 strings to match.
      if (memcmp(Name.data()+1, "nu::", 4))
        break;
      switch (Name[5]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+6, "lways_inline", 12))
          break;
        return AttributeList::AT_AlwaysInline;	 // "gnu::always_inline"
      case 'r':	 // 1 string to match.
        if (memcmp(Name.data()+6, "eturns_twice", 12))
          break;
        return AttributeList::AT_ReturnsTwice;	 // "gnu::returns_twice"
      }
      break;
    }
    break;
  case 19:	 // 1 string to match.
    if (memcmp(Name.data()+0, "gnu::no_split_stack", 19))
      break;
    return AttributeList::AT_NoSplitStack;	 // "gnu::no_split_stack"
  case 20:	 // 2 strings to match.
    switch (Name[0]) {
    default: break;
    case ':':	 // 1 string to match.
      if (memcmp(Name.data()+1, ":carries_dependency", 19))
        break;
      return AttributeList::AT_CarriesDependency;	 // "::carries_dependency"
    case 'g':	 // 1 string to match.
      if (memcmp(Name.data()+1, "nu::returns_nonnull", 19))
        break;
      return AttributeList::AT_ReturnsNonNull;	 // "gnu::returns_nonnull"
    }
    break;
  case 22:	 // 2 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 1 string to match.
      if (memcmp(Name.data()+1, "lang::type_visibility", 21))
        break;
      return AttributeList::AT_TypeVisibility;	 // "clang::type_visibility"
    case 'g':	 // 1 string to match.
      if (memcmp(Name.data()+1, "nu::transparent_union", 21))
        break;
      return AttributeList::AT_TransparentUnion;	 // "gnu::transparent_union"
    }
    break;
  case 23:	 // 1 string to match.
    if (memcmp(Name.data()+0, "gnu::warn_unused_result", 23))
      break;
    return AttributeList::AT_WarnUnusedResult;	 // "gnu::warn_unused_result"
  case 24:	 // 3 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 2 strings to match.
      if (memcmp(Name.data()+1, "lang::", 6))
        break;
      switch (Name[7]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+8, "ssert_capability", 16))
          break;
        return AttributeList::AT_AssertCapability;	 // "clang::assert_capability"
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+8, "hared_capability", 16))
          break;
        return AttributeList::AT_Capability;	 // "clang::shared_capability"
      }
      break;
    case 'g':	 // 1 string to match.
      if (memcmp(Name.data()+1, "nu::no_sanitize_address", 23))
        break;
      return AttributeList::AT_NoSanitizeAddress;	 // "gnu::no_sanitize_address"
    }
    break;
  case 25:	 // 3 strings to match.
    if (memcmp(Name.data()+0, "clang::", 7))
      break;
    switch (Name[7]) {
    default: break;
    case 'a':	 // 1 string to match.
      if (memcmp(Name.data()+8, "cquire_capability", 17))
        break;
      return AttributeList::AT_AcquireCapability;	 // "clang::acquire_capability"
    case 'r':	 // 1 string to match.
      if (memcmp(Name.data()+8, "elease_capability", 17))
        break;
      return AttributeList::AT_ReleaseCapability;	 // "clang::release_capability"
    case 'w':	 // 1 string to match.
      if (memcmp(Name.data()+8, "arn_unused_result", 17))
        break;
      return AttributeList::AT_WarnUnusedResult;	 // "clang::warn_unused_result"
    }
    break;
  case 26:	 // 1 string to match.
    if (memcmp(Name.data()+0, "clang::requires_capability", 26))
      break;
    return AttributeList::AT_RequiresCapability;	 // "clang::requires_capability"
  case 27:	 // 1 string to match.
    if (memcmp(Name.data()+0, "gnu::no_instrument_function", 27))
      break;
    return AttributeList::AT_NoInstrumentFunction;	 // "gnu::no_instrument_function"
  case 29:	 // 1 string to match.
    if (memcmp(Name.data()+0, "clang::try_acquire_capability", 29))
      break;
    return AttributeList::AT_TryAcquireCapability;	 // "clang::try_acquire_capability"
  case 31:	 // 2 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 1 string to match.
      if (memcmp(Name.data()+1, "lang::assert_shared_capability", 30))
        break;
      return AttributeList::AT_AssertCapability;	 // "clang::assert_shared_capability"
    case 'g':	 // 1 string to match.
      if (memcmp(Name.data()+1, "nu::no_address_safety_analysis", 30))
        break;
      return AttributeList::AT_NoSanitizeAddress;	 // "gnu::no_address_safety_analysis"
    }
    break;
  case 32:	 // 2 strings to match.
    if (memcmp(Name.data()+0, "clang::", 7))
      break;
    switch (Name[7]) {
    default: break;
    case 'a':	 // 1 string to match.
      if (memcmp(Name.data()+8, "cquire_shared_capability", 24))
        break;
      return AttributeList::AT_AcquireCapability;	 // "clang::acquire_shared_capability"
    case 'r':	 // 1 string to match.
      if (memcmp(Name.data()+8, "elease_shared_capability", 24))
        break;
      return AttributeList::AT_ReleaseCapability;	 // "clang::release_shared_capability"
    }
    break;
  case 33:	 // 2 strings to match.
    if (memcmp(Name.data()+0, "clang::re", 9))
      break;
    switch (Name[9]) {
    default: break;
    case 'l':	 // 1 string to match.
      if (memcmp(Name.data()+10, "ease_generic_capability", 23))
        break;
      return AttributeList::AT_ReleaseCapability;	 // "clang::release_generic_capability"
    case 'q':	 // 1 string to match.
      if (memcmp(Name.data()+10, "uires_shared_capability", 23))
        break;
      return AttributeList::AT_RequiresCapability;	 // "clang::requires_shared_capability"
    }
    break;
  case 36:	 // 1 string to match.
    if (memcmp(Name.data()+0, "clang::try_acquire_shared_capability", 36))
      break;
    return AttributeList::AT_TryAcquireCapability;	 // "clang::try_acquire_shared_capability"
  }
  } else if (AttributeList::AS_Keyword == Syntax) {
  switch (Name.size()) {
  default: break;
  case 5:	 // 2 strings to match.
    switch (Name[0]) {
    default: break;
    case '_':	 // 1 string to match.
      if (memcmp(Name.data()+1, "_w64", 4))
        break;
      return AttributeList::IgnoredAttribute;	 // "__w64"
    case 'l':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ocal", 4))
        break;
      return AttributeList::AT_OpenCLLocalAddressSpace;	 // "local"
    }
    break;
  case 6:	 // 5 strings to match.
    switch (Name[0]) {
    default: break;
    case '_':	 // 3 strings to match.
      switch (Name[1]) {
      default: break;
      case '_':	 // 2 strings to match.
        switch (Name[2]) {
        default: break;
        case 's':	 // 1 string to match.
          if (memcmp(Name.data()+3, "ptr", 3))
            break;
          return AttributeList::AT_SPtr;	 // "__sptr"
        case 'u':	 // 1 string to match.
          if (memcmp(Name.data()+3, "ptr", 3))
            break;
          return AttributeList::AT_UPtr;	 // "__uptr"
        }
        break;
      case 'c':	 // 1 string to match.
        if (memcmp(Name.data()+2, "decl", 4))
          break;
        return AttributeList::AT_CDecl;	 // "_cdecl"
      }
      break;
    case 'g':	 // 1 string to match.
      if (memcmp(Name.data()+1, "lobal", 5))
        break;
      return AttributeList::AT_OpenCLGlobalAddressSpace;	 // "global"
    case 'k':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ernel", 5))
        break;
      return AttributeList::AT_OpenCLKernel;	 // "kernel"
    }
    break;
  case 7:	 // 7 strings to match.
    switch (Name[0]) {
    default: break;
    case '_':	 // 5 strings to match.
      switch (Name[1]) {
      default: break;
      case '_':	 // 4 strings to match.
        switch (Name[2]) {
        default: break;
        case 'c':	 // 1 string to match.
          if (memcmp(Name.data()+3, "decl", 4))
            break;
          return AttributeList::AT_CDecl;	 // "__cdecl"
        case 'l':	 // 1 string to match.
          if (memcmp(Name.data()+3, "ocal", 4))
            break;
          return AttributeList::AT_OpenCLLocalAddressSpace;	 // "__local"
        case 'p':	 // 2 strings to match.
          if (memcmp(Name.data()+3, "tr", 2))
            break;
          switch (Name[5]) {
          default: break;
          case '3':	 // 1 string to match.
            if (Name[6] != '2')
              break;
            return AttributeList::AT_Ptr32;	 // "__ptr32"
          case '6':	 // 1 string to match.
            if (Name[6] != '4')
              break;
            return AttributeList::AT_Ptr64;	 // "__ptr64"
          }
          break;
        }
        break;
      case 'p':	 // 1 string to match.
        if (memcmp(Name.data()+2, "ascal", 5))
          break;
        return AttributeList::AT_Pascal;	 // "_pascal"
      }
      break;
    case 'a':	 // 1 string to match.
      if (memcmp(Name.data()+1, "lignas", 6))
        break;
      return AttributeList::AT_Aligned;	 // "alignas"
    case 'p':	 // 1 string to match.
      if (memcmp(Name.data()+1, "rivate", 6))
        break;
      return AttributeList::AT_OpenCLPrivateAddressSpace;	 // "private"
    }
    break;
  case 8:	 // 6 strings to match.
    switch (Name[0]) {
    default: break;
    case '_':	 // 5 strings to match.
      switch (Name[1]) {
      default: break;
      case 'A':	 // 1 string to match.
        if (memcmp(Name.data()+2, "lignas", 6))
          break;
        return AttributeList::AT_Aligned;	 // "_Alignas"
      case '_':	 // 3 strings to match.
        switch (Name[2]) {
        default: break;
        case 'g':	 // 1 string to match.
          if (memcmp(Name.data()+3, "lobal", 5))
            break;
          return AttributeList::AT_OpenCLGlobalAddressSpace;	 // "__global"
        case 'k':	 // 1 string to match.
          if (memcmp(Name.data()+3, "ernel", 5))
            break;
          return AttributeList::AT_OpenCLKernel;	 // "__kernel"
        case 'p':	 // 1 string to match.
          if (memcmp(Name.data()+3, "ascal", 5))
            break;
          return AttributeList::AT_Pascal;	 // "__pascal"
        }
        break;
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+2, "tdcall", 6))
          break;
        return AttributeList::AT_StdCall;	 // "_stdcall"
      }
      break;
    case 'c':	 // 1 string to match.
      if (memcmp(Name.data()+1, "onstant", 7))
        break;
      return AttributeList::AT_OpenCLConstantAddressSpace;	 // "constant"
    }
    break;
  case 9:	 // 5 strings to match.
    switch (Name[0]) {
    default: break;
    case '_':	 // 4 strings to match.
      switch (Name[1]) {
      default: break;
      case '_':	 // 2 strings to match.
        switch (Name[2]) {
        default: break;
        case 'p':	 // 1 string to match.
          if (memcmp(Name.data()+3, "rivate", 6))
            break;
          return AttributeList::AT_OpenCLPrivateAddressSpace;	 // "__private"
        case 's':	 // 1 string to match.
          if (memcmp(Name.data()+3, "tdcall", 6))
            break;
          return AttributeList::AT_StdCall;	 // "__stdcall"
        }
        break;
      case 'f':	 // 1 string to match.
        if (memcmp(Name.data()+2, "astcall", 7))
          break;
        return AttributeList::AT_FastCall;	 // "_fastcall"
      case 't':	 // 1 string to match.
        if (memcmp(Name.data()+2, "hiscall", 7))
          break;
        return AttributeList::AT_ThisCall;	 // "_thiscall"
      }
      break;
    case 'r':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ead_only", 8))
        break;
      return AttributeList::AT_OpenCLImageAccess;	 // "read_only"
    }
    break;
  case 10:	 // 5 strings to match.
    switch (Name[0]) {
    default: break;
    case '_':	 // 3 strings to match.
      if (Name[1] != '_')
        break;
      switch (Name[2]) {
      default: break;
      case 'c':	 // 1 string to match.
        if (memcmp(Name.data()+3, "onstant", 7))
          break;
        return AttributeList::AT_OpenCLConstantAddressSpace;	 // "__constant"
      case 'f':	 // 1 string to match.
        if (memcmp(Name.data()+3, "astcall", 7))
          break;
        return AttributeList::AT_FastCall;	 // "__fastcall"
      case 't':	 // 1 string to match.
        if (memcmp(Name.data()+3, "hiscall", 7))
          break;
        return AttributeList::AT_ThisCall;	 // "__thiscall"
      }
      break;
    case 'r':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ead_write", 9))
        break;
      return AttributeList::AT_OpenCLImageAccess;	 // "read_write"
    case 'w':	 // 1 string to match.
      if (memcmp(Name.data()+1, "rite_only", 9))
        break;
      return AttributeList::AT_OpenCLImageAccess;	 // "write_only"
    }
    break;
  case 11:	 // 2 strings to match.
    if (memcmp(Name.data()+0, "__", 2))
      break;
    switch (Name[2]) {
    default: break;
    case 'r':	 // 1 string to match.
      if (memcmp(Name.data()+3, "ead_only", 8))
        break;
      return AttributeList::AT_OpenCLImageAccess;	 // "__read_only"
    case 'u':	 // 1 string to match.
      if (memcmp(Name.data()+3, "naligned", 8))
        break;
      return AttributeList::IgnoredAttribute;	 // "__unaligned"
    }
    break;
  case 12:	 // 2 strings to match.
    if (memcmp(Name.data()+0, "__", 2))
      break;
    switch (Name[2]) {
    default: break;
    case 'r':	 // 1 string to match.
      if (memcmp(Name.data()+3, "ead_write", 9))
        break;
      return AttributeList::AT_OpenCLImageAccess;	 // "__read_write"
    case 'w':	 // 1 string to match.
      if (memcmp(Name.data()+3, "rite_only", 9))
        break;
      return AttributeList::AT_OpenCLImageAccess;	 // "__write_only"
    }
    break;
  case 13:	 // 1 string to match.
    if (memcmp(Name.data()+0, "__forceinline", 13))
      break;
    return AttributeList::AT_AlwaysInline;	 // "__forceinline"
  case 20:	 // 1 string to match.
    if (memcmp(Name.data()+0, "__single_inheritance", 20))
      break;
    return AttributeList::AT_MSInheritance;	 // "__single_inheritance"
  case 21:	 // 1 string to match.
    if (memcmp(Name.data()+0, "__virtual_inheritance", 21))
      break;
    return AttributeList::AT_MSInheritance;	 // "__virtual_inheritance"
  case 22:	 // 1 string to match.
    if (memcmp(Name.data()+0, "__multiple_inheritance", 22))
      break;
    return AttributeList::AT_MSInheritance;	 // "__multiple_inheritance"
  case 25:	 // 1 string to match.
    if (memcmp(Name.data()+0, "__unspecified_inheritance", 25))
      break;
    return AttributeList::AT_MSInheritance;	 // "__unspecified_inheritance"
  }
  } else if (AttributeList::AS_Pragma == Syntax) {
  switch (Name.size()) {
  default: break;
  case 4:	 // 1 string to match.
    if (memcmp(Name.data()+0, "loop", 4))
      break;
    return AttributeList::AT_LoopHint;	 // "loop"
  case 6:	 // 1 string to match.
    if (memcmp(Name.data()+0, "unroll", 6))
      break;
    return AttributeList::AT_LoopHint;	 // "unroll"
  }
  }
  return AttributeList::UnknownAttribute;
}
