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

static AttributeCommonInfo::Kind getAttrKind(StringRef Name, AttributeCommonInfo::Syntax Syntax) {
  if (AttributeCommonInfo::AS_GNU == Syntax) {
  switch (Name.size()) {
  default: break;
  case 3:	 // 3 strings to match.
    switch (Name[0]) {
    default: break;
    case 'f':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ar", 2) != 0)
        break;
      return AttributeCommonInfo::AT_MipsLongCall;	 // "far"
    case 'h':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ot", 2) != 0)
        break;
      return AttributeCommonInfo::AT_Hot;	 // "hot"
    case 'p':	 // 1 string to match.
      if (memcmp(Name.data()+1, "cs", 2) != 0)
        break;
      return AttributeCommonInfo::AT_Pcs;	 // "pcs"
    }
    break;
  case 4:	 // 8 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 1 string to match.
      if (memcmp(Name.data()+1, "old", 3) != 0)
        break;
      return AttributeCommonInfo::AT_Cold;	 // "cold"
    case 'h':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ost", 3) != 0)
        break;
      return AttributeCommonInfo::AT_CUDAHost;	 // "host"
    case 'l':	 // 1 string to match.
      if (memcmp(Name.data()+1, "eaf", 3) != 0)
        break;
      return AttributeCommonInfo::AT_Leaf;	 // "leaf"
    case 'm':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ode", 3) != 0)
        break;
      return AttributeCommonInfo::AT_Mode;	 // "mode"
    case 'n':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ear", 3) != 0)
        break;
      return AttributeCommonInfo::AT_MipsShortCall;	 // "near"
    case 'p':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ure", 3) != 0)
        break;
      return AttributeCommonInfo::AT_Pure;	 // "pure"
    case 'u':	 // 1 string to match.
      if (memcmp(Name.data()+1, "sed", 3) != 0)
        break;
      return AttributeCommonInfo::AT_Used;	 // "used"
    case 'w':	 // 1 string to match.
      if (memcmp(Name.data()+1, "eak", 3) != 0)
        break;
      return AttributeCommonInfo::AT_Weak;	 // "weak"
    }
    break;
  case 5:	 // 8 strings to match.
    switch (Name[0]) {
    default: break;
    case 'a':	 // 1 string to match.
      if (memcmp(Name.data()+1, "lias", 4) != 0)
        break;
      return AttributeCommonInfo::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) != 0)
          break;
        return AttributeCommonInfo::AT_CDecl;	 // "cdecl"
      case 'o':	 // 1 string to match.
        if (memcmp(Name.data()+2, "nst", 3) != 0)
          break;
        return AttributeCommonInfo::AT_Const;	 // "const"
      }
      break;
    case 'e':	 // 1 string to match.
      if (memcmp(Name.data()+1, "rror", 4) != 0)
        break;
      return AttributeCommonInfo::AT_Error;	 // "error"
    case 'g':	 // 1 string to match.
      if (memcmp(Name.data()+1, "uard", 4) != 0)
        break;
      return AttributeCommonInfo::AT_CFGuard;	 // "guard"
    case 'i':	 // 1 string to match.
      if (memcmp(Name.data()+1, "func", 4) != 0)
        break;
      return AttributeCommonInfo::AT_IFunc;	 // "ifunc"
    case 'n':	 // 2 strings to match.
      switch (Name[1]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+2, "ked", 3) != 0)
          break;
        return AttributeCommonInfo::AT_Naked;	 // "naked"
      case 'o':	 // 1 string to match.
        if (memcmp(Name.data()+2, "svm", 3) != 0)
          break;
        return AttributeCommonInfo::AT_OpenCLNoSVM;	 // "nosvm"
      }
      break;
    }
    break;
  case 6:	 // 17 strings to match.
    switch (Name[0]) {
    default: break;
    case 'a':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ssume", 5) != 0)
        break;
      return AttributeCommonInfo::AT_Assumption;	 // "assume"
    case 'b':	 // 1 string to match.
      if (memcmp(Name.data()+1, "locks", 5) != 0)
        break;
      return AttributeCommonInfo::AT_Blocks;	 // "blocks"
    case 'c':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ommon", 5) != 0)
        break;
      return AttributeCommonInfo::AT_Common;	 // "common"
    case 'd':	 // 1 string to match.
      if (memcmp(Name.data()+1, "evice", 5) != 0)
        break;
      return AttributeCommonInfo::AT_CUDADevice;	 // "device"
    case 'f':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ormat", 5) != 0)
        break;
      return AttributeCommonInfo::AT_Format;	 // "format"
    case 'g':	 // 1 string to match.
      if (memcmp(Name.data()+1, "lobal", 5) != 0)
        break;
      return AttributeCommonInfo::AT_CUDAGlobal;	 // "global"
    case 'k':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ernel", 5) != 0)
        break;
      return AttributeCommonInfo::AT_RenderScriptKernel;	 // "kernel"
    case 'm':	 // 3 strings to match.
      switch (Name[1]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+2, "lloc", 4) != 0)
          break;
        return AttributeCommonInfo::AT_Restrict;	 // "malloc"
      case 'i':	 // 1 string to match.
        if (memcmp(Name.data()+2, "ps16", 4) != 0)
          break;
        return AttributeCommonInfo::AT_Mips16;	 // "mips16"
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+2, "_abi", 4) != 0)
          break;
        return AttributeCommonInfo::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) != 0)
          break;
        return AttributeCommonInfo::AT_Packed;	 // "packed"
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+3, "cal", 3) != 0)
          break;
        return AttributeCommonInfo::AT_Pascal;	 // "pascal"
      }
      break;
    case 'r':	 // 1 string to match.
      if (memcmp(Name.data()+1, "etain", 5) != 0)
        break;
      return AttributeCommonInfo::AT_Retain;	 // "retain"
    case 's':	 // 2 strings to match.
      switch (Name[1]) {
      default: break;
      case 'h':	 // 1 string to match.
        if (memcmp(Name.data()+2, "ared", 4) != 0)
          break;
        return AttributeCommonInfo::AT_CUDAShared;	 // "shared"
      case 'i':	 // 1 string to match.
        if (memcmp(Name.data()+2, "gnal", 4) != 0)
          break;
        return AttributeCommonInfo::AT_AVRSignal;	 // "signal"
      }
      break;
    case 't':	 // 1 string to match.
      if (memcmp(Name.data()+1, "arget", 5) != 0)
        break;
      return AttributeCommonInfo::AT_Target;	 // "target"
    case 'u':	 // 1 string to match.
      if (memcmp(Name.data()+1, "nused", 5) != 0)
        break;
      return AttributeCommonInfo::AT_Unused;	 // "unused"
    }
    break;
  case 7:	 // 22 strings to match.
    switch (Name[0]) {
    default: break;
    case '_':	 // 1 string to match.
      if (memcmp(Name.data()+1, "_const", 6) != 0)
        break;
      return AttributeCommonInfo::AT_Const;	 // "__const"
    case 'a':	 // 2 strings to match.
      switch (Name[1]) {
      default: break;
      case 'b':	 // 1 string to match.
        if (memcmp(Name.data()+2, "i_tag", 5) != 0)
          break;
        return AttributeCommonInfo::AT_AbiTag;	 // "abi_tag"
      case 'l':	 // 1 string to match.
        if (memcmp(Name.data()+2, "igned", 5) != 0)
          break;
        return AttributeCommonInfo::AT_Aligned;	 // "aligned"
      }
      break;
    case 'b':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ounded", 6) != 0)
        break;
      return AttributeCommonInfo::IgnoredAttribute;	 // "bounded"
    case 'c':	 // 1 string to match.
      if (memcmp(Name.data()+1, "leanup", 6) != 0)
        break;
      return AttributeCommonInfo::AT_Cleanup;	 // "cleanup"
    case 'f':	 // 1 string to match.
      if (memcmp(Name.data()+1, "latten", 6) != 0)
        break;
      return AttributeCommonInfo::AT_Flatten;	 // "flatten"
    case 'm':	 // 2 strings to match.
      switch (Name[1]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+2, "naged", 5) != 0)
          break;
        return AttributeCommonInfo::AT_HIPManaged;	 // "managed"
      case 'i':	 // 1 string to match.
        if (memcmp(Name.data()+2, "nsize", 5) != 0)
          break;
        return AttributeCommonInfo::AT_MinSize;	 // "minsize"
      }
      break;
    case 'n':	 // 6 strings to match.
      switch (Name[1]) {
      default: break;
      case 'o':	 // 5 strings to match.
        switch (Name[2]) {
        default: break;
        case 'd':	 // 2 strings to match.
          if (Name[3] != 'e')
            break;
          switch (Name[4]) {
          default: break;
          case 'b':	 // 1 string to match.
            if (memcmp(Name.data()+5, "ug", 2) != 0)
              break;
            return AttributeCommonInfo::AT_NoDebug;	 // "nodebug"
          case 'r':	 // 1 string to match.
            if (memcmp(Name.data()+5, "ef", 2) != 0)
              break;
            return AttributeCommonInfo::AT_NoDeref;	 // "noderef"
          }
          break;
        case 'm':	 // 1 string to match.
          if (memcmp(Name.data()+3, "erge", 4) != 0)
            break;
          return AttributeCommonInfo::AT_NoMerge;	 // "nomerge"
        case 'n':	 // 1 string to match.
          if (memcmp(Name.data()+3, "null", 4) != 0)
            break;
          return AttributeCommonInfo::AT_NonNull;	 // "nonnull"
        case 't':	 // 1 string to match.
          if (memcmp(Name.data()+3, "hrow", 4) != 0)
            break;
          return AttributeCommonInfo::AT_NoThrow;	 // "nothrow"
        }
        break;
      case 'v':	 // 1 string to match.
        if (memcmp(Name.data()+2, "_weak", 5) != 0)
          break;
        return AttributeCommonInfo::IgnoredAttribute;	 // "nv_weak"
      }
      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) != 0)
          break;
        return AttributeCommonInfo::AT_ObjCGC;	 // "objc_gc"
      case 'p':	 // 1 string to match.
        if (memcmp(Name.data()+2, "tnone", 5) != 0)
          break;
        return AttributeCommonInfo::AT_OptimizeNone;	 // "optnone"
      }
      break;
    case 'r':	 // 2 strings to match.
      if (memcmp(Name.data()+1, "eg", 2) != 0)
        break;
      switch (Name[3]) {
      default: break;
      case 'c':	 // 1 string to match.
        if (memcmp(Name.data()+4, "all", 3) != 0)
          break;
        return AttributeCommonInfo::AT_RegCall;	 // "regcall"
      case 'p':	 // 1 string to match.
        if (memcmp(Name.data()+4, "arm", 3) != 0)
          break;
        return AttributeCommonInfo::AT_Regparm;	 // "regparm"
      }
      break;
    case 's':	 // 2 strings to match.
      switch (Name[1]) {
      default: break;
      case 'e':	 // 1 string to match.
        if (memcmp(Name.data()+2, "ction", 5) != 0)
          break;
        return AttributeCommonInfo::AT_Section;	 // "section"
      case 't':	 // 1 string to match.
        if (memcmp(Name.data()+2, "dcall", 5) != 0)
          break;
        return AttributeCommonInfo::AT_StdCall;	 // "stdcall"
      }
      break;
    case 'w':	 // 2 strings to match.
      switch (Name[1]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+2, "rning", 5) != 0)
          break;
        return AttributeCommonInfo::AT_Error;	 // "warning"
      case 'e':	 // 1 string to match.
        if (memcmp(Name.data()+2, "akref", 5) != 0)
          break;
        return AttributeCommonInfo::AT_WeakRef;	 // "weakref"
      }
      break;
    }
    break;
  case 8:	 // 17 strings to match.
    switch (Name[0]) {
    default: break;
    case 'N':	 // 1 string to match.
      if (memcmp(Name.data()+1, "SObject", 7) != 0)
        break;
      return AttributeCommonInfo::AT_ObjCNSObject;	 // "NSObject"
    case 'a':	 // 1 string to match.
      if (memcmp(Name.data()+1, "nnotate", 7) != 0)
        break;
      return AttributeCommonInfo::AT_Annotate;	 // "annotate"
    case 'c':	 // 2 strings to match.
      switch (Name[1]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+2, "llback", 6) != 0)
          break;
        return AttributeCommonInfo::AT_Callback;	 // "callback"
      case 'o':	 // 1 string to match.
        if (memcmp(Name.data()+2, "nstant", 6) != 0)
          break;
        return AttributeCommonInfo::AT_CUDAConstant;	 // "constant"
      }
      break;
    case 'f':	 // 1 string to match.
      if (memcmp(Name.data()+1, "astcall", 7) != 0)
        break;
      return AttributeCommonInfo::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) != 0)
          break;
        return AttributeCommonInfo::AT_IBAction;	 // "ibaction"
      case 'o':	 // 1 string to match.
        if (memcmp(Name.data()+3, "utlet", 5) != 0)
          break;
        return AttributeCommonInfo::AT_IBOutlet;	 // "iboutlet"
      }
      break;
    case 'l':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ockable", 7) != 0)
        break;
      return AttributeCommonInfo::AT_Lockable;	 // "lockable"
    case 'm':	 // 1 string to match.
      if (memcmp(Name.data()+1, "usttail", 7) != 0)
        break;
      return AttributeCommonInfo::AT_MustTail;	 // "musttail"
    case 'n':	 // 5 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) != 0)
          break;
        return AttributeCommonInfo::AT_NoCommon;	 // "nocommon"
      case 'e':	 // 1 string to match.
        if (memcmp(Name.data()+3, "scape", 5) != 0)
          break;
        return AttributeCommonInfo::AT_NoEscape;	 // "noescape"
      case 'i':	 // 1 string to match.
        if (memcmp(Name.data()+3, "nline", 5) != 0)
          break;
        return AttributeCommonInfo::AT_NoInline;	 // "noinline"
      case 'm':	 // 1 string to match.
        if (memcmp(Name.data()+3, "ips16", 5) != 0)
          break;
        return AttributeCommonInfo::AT_NoMips16;	 // "nomips16"
      case 'r':	 // 1 string to match.
        if (memcmp(Name.data()+3, "eturn", 5) != 0)
          break;
        return AttributeCommonInfo::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) != 0)
          break;
        return AttributeCommonInfo::AT_Sentinel;	 // "sentinel"
      case 'y':	 // 1 string to match.
        if (memcmp(Name.data()+2, "sv_abi", 6) != 0)
          break;
        return AttributeCommonInfo::AT_SysVABI;	 // "sysv_abi"
      }
      break;
    case 't':	 // 1 string to match.
      if (memcmp(Name.data()+1, "hiscall", 7) != 0)
        break;
      return AttributeCommonInfo::AT_ThisCall;	 // "thiscall"
    }
    break;
  case 9:	 // 14 strings to match.
    switch (Name[0]) {
    default: break;
    case 'd':	 // 2 strings to match.
      if (memcmp(Name.data()+1, "ll", 2) != 0)
        break;
      switch (Name[3]) {
      default: break;
      case 'e':	 // 1 string to match.
        if (memcmp(Name.data()+4, "xport", 5) != 0)
          break;
        return AttributeCommonInfo::AT_DLLExport;	 // "dllexport"
      case 'i':	 // 1 string to match.
        if (memcmp(Name.data()+4, "mport", 5) != 0)
          break;
        return AttributeCommonInfo::AT_DLLImport;	 // "dllimport"
      }
      break;
    case 'e':	 // 1 string to match.
      if (memcmp(Name.data()+1, "nable_if", 8) != 0)
        break;
      return AttributeCommonInfo::AT_EnableIf;	 // "enable_if"
    case 'f':	 // 1 string to match.
      if (memcmp(Name.data()+1, "lag_enum", 8) != 0)
        break;
      return AttributeCommonInfo::AT_FlagEnum;	 // "flag_enum"
    case 'i':	 // 1 string to match.
      if (memcmp(Name.data()+1, "nterrupt", 8) != 0)
        break;
      return AttributeCommonInfo::AT_Interrupt;	 // "interrupt"
    case 'l':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ong_call", 8) != 0)
        break;
      return AttributeCommonInfo::AT_MipsLongCall;	 // "long_call"
    case 'm':	 // 3 strings to match.
      switch (Name[1]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+2, "y_alias", 7) != 0)
          break;
        return AttributeCommonInfo::AT_MayAlias;	 // "may_alias"
      case 'i':	 // 1 string to match.
        if (memcmp(Name.data()+2, "cromips", 7) != 0)
          break;
        return AttributeCommonInfo::AT_MicroMips;	 // "micromips"
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+2, "_struct", 7) != 0)
          break;
        return AttributeCommonInfo::AT_MSStruct;	 // "ms_struct"
      }
      break;
    case 'n':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ouwtable", 8) != 0)
        break;
      return AttributeCommonInfo::AT_NoUwtable;	 // "nouwtable"
    case 's':	 // 2 strings to match.
      switch (Name[1]) {
      default: break;
      case 'e':	 // 1 string to match.
        if (memcmp(Name.data()+2, "lectany", 7) != 0)
          break;
        return AttributeCommonInfo::AT_SelectAny;	 // "selectany"
      case 'w':	 // 1 string to match.
        if (memcmp(Name.data()+2, "iftcall", 7) != 0)
          break;
        return AttributeCommonInfo::AT_SwiftCall;	 // "swiftcall"
      }
      break;
    case 't':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ls_model", 8) != 0)
        break;
      return AttributeCommonInfo::AT_TLSModel;	 // "tls_model"
    case 'v':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ecreturn", 8) != 0)
        break;
      return AttributeCommonInfo::AT_VecReturn;	 // "vecreturn"
    }
    break;
  case 10:	 // 19 strings to match.
    switch (Name[0]) {
    default: break;
    case 'a':	 // 2 strings to match.
      switch (Name[1]) {
      default: break;
      case 'l':	 // 1 string to match.
        if (memcmp(Name.data()+2, "loc_size", 8) != 0)
          break;
        return AttributeCommonInfo::AT_AllocSize;	 // "alloc_size"
      case 'r':	 // 1 string to match.
        if (memcmp(Name.data()+2, "tificial", 8) != 0)
          break;
        return AttributeCommonInfo::AT_Artificial;	 // "artificial"
      }
      break;
    case 'c':	 // 3 strings to match.
      switch (Name[1]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+2, "pability", 8) != 0)
          break;
        return AttributeCommonInfo::AT_Capability;	 // "capability"
      case 'o':	 // 2 strings to match.
        if (Name[2] != 'n')
          break;
        switch (Name[3]) {
        default: break;
        case 's':	 // 1 string to match.
          if (memcmp(Name.data()+4, "umable", 6) != 0)
            break;
          return AttributeCommonInfo::AT_Consumable;	 // "consumable"
        case 'v':	 // 1 string to match.
          if (memcmp(Name.data()+4, "ergent", 6) != 0)
            break;
          return AttributeCommonInfo::AT_Convergent;	 // "convergent"
        }
        break;
      }
      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) != 0)
          break;
        return AttributeCommonInfo::AT_Deprecated;	 // "deprecated"
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+3, "tructor", 7) != 0)
          break;
        return AttributeCommonInfo::AT_Destructor;	 // "destructor"
      }
      break;
    case 'f':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ormat_arg", 9) != 0)
        break;
      return AttributeCommonInfo::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) != 0)
          break;
        return AttributeCommonInfo::AT_GNUInline;	 // "gnu_inline"
      case 'u':	 // 1 string to match.
        if (memcmp(Name.data()+2, "arded_by", 8) != 0)
          break;
        return AttributeCommonInfo::AT_GuardedBy;	 // "guarded_by"
      }
      break;
    case 'n':	 // 3 strings to match.
      if (Name[1] != 'o')
        break;
      switch (Name[2]) {
      default: break;
      case '_':	 // 2 strings to match.
        switch (Name[3]) {
        default: break;
        case 'b':	 // 1 string to match.
          if (memcmp(Name.data()+4, "uiltin", 6) != 0)
            break;
          return AttributeCommonInfo::AT_NoBuiltin;	 // "no_builtin"
        case 'd':	 // 1 string to match.
          if (memcmp(Name.data()+4, "estroy", 6) != 0)
            break;
          return AttributeCommonInfo::AT_NoDestroy;	 // "no_destroy"
        }
        break;
      case 'c':	 // 1 string to match.
        if (memcmp(Name.data()+3, "f_check", 7) != 0)
          break;
        return AttributeCommonInfo::AT_AnyX86NoCfCheck;	 // "nocf_check"
      }
      break;
    case 's':	 // 3 strings to match.
      switch (Name[1]) {
      default: break;
      case 'h':	 // 1 string to match.
        if (memcmp(Name.data()+2, "ort_call", 8) != 0)
          break;
        return AttributeCommonInfo::AT_MipsShortCall;	 // "short_call"
      case 'w':	 // 2 strings to match.
        if (memcmp(Name.data()+2, "ift_", 4) != 0)
          break;
        switch (Name[6]) {
        default: break;
        case 'a':	 // 1 string to match.
          if (memcmp(Name.data()+7, "ttr", 3) != 0)
            break;
          return AttributeCommonInfo::AT_SwiftAttr;	 // "swift_attr"
        case 'n':	 // 1 string to match.
          if (memcmp(Name.data()+7, "ame", 3) != 0)
            break;
          return AttributeCommonInfo::AT_SwiftName;	 // "swift_name"
        }
        break;
      }
      break;
    case 'u':	 // 1 string to match.
      if (memcmp(Name.data()+1, "se_handle", 9) != 0)
        break;
      return AttributeCommonInfo::AT_UseHandle;	 // "use_handle"
    case 'v':	 // 2 strings to match.
      switch (Name[1]) {
      default: break;
      case 'e':	 // 1 string to match.
        if (memcmp(Name.data()+2, "ctorcall", 8) != 0)
          break;
        return AttributeCommonInfo::AT_VectorCall;	 // "vectorcall"
      case 'i':	 // 1 string to match.
        if (memcmp(Name.data()+2, "sibility", 8) != 0)
          break;
        return AttributeCommonInfo::AT_Visibility;	 // "visibility"
      }
      break;
    }
    break;
  case 11:	 // 28 strings to match.
    switch (Name[0]) {
    default: break;
    case 'a':	 // 2 strings to match.
      if (Name[1] != 'l')
        break;
      switch (Name[2]) {
      default: break;
      case 'i':	 // 1 string to match.
        if (memcmp(Name.data()+3, "gn_value", 8) != 0)
          break;
        return AttributeCommonInfo::AT_AlignValue;	 // "align_value"
      case 'l':	 // 1 string to match.
        if (memcmp(Name.data()+3, "oc_align", 8) != 0)
          break;
        return AttributeCommonInfo::AT_AllocAlign;	 // "alloc_align"
      }
      break;
    case 'c':	 // 3 strings to match.
      switch (Name[1]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+2, "lled_once", 9) != 0)
          break;
        return AttributeCommonInfo::AT_CalledOnce;	 // "called_once"
      case 'f':	 // 1 string to match.
        if (memcmp(Name.data()+2, "_consumed", 9) != 0)
          break;
        return AttributeCommonInfo::AT_CFConsumed;	 // "cf_consumed"
      case 'o':	 // 1 string to match.
        if (memcmp(Name.data()+2, "nstructor", 9) != 0)
          break;
        return AttributeCommonInfo::AT_Constructor;	 // "constructor"
      }
      break;
    case 'd':	 // 1 string to match.
      if (memcmp(Name.data()+1, "iagnose_if", 10) != 0)
        break;
      return AttributeCommonInfo::AT_DiagnoseIf;	 // "diagnose_if"
    case 'e':	 // 2 strings to match.
      switch (Name[1]) {
      default: break;
      case 'n':	 // 1 string to match.
        if (memcmp(Name.data()+2, "force_tcb", 9) != 0)
          break;
        return AttributeCommonInfo::AT_EnforceTCB;	 // "enforce_tcb"
      case 'x':	 // 1 string to match.
        if (memcmp(Name.data()+2, "port_name", 9) != 0)
          break;
        return AttributeCommonInfo::AT_WebAssemblyExportName;	 // "export_name"
      }
      break;
    case 'f':	 // 1 string to match.
      if (memcmp(Name.data()+1, "allthrough", 10) != 0)
        break;
      return AttributeCommonInfo::AT_FallThrough;	 // "fallthrough"
    case 'g':	 // 1 string to match.
      if (memcmp(Name.data()+1, "uarded_var", 10) != 0)
        break;
      return AttributeCommonInfo::AT_GuardedVar;	 // "guarded_var"
    case 'i':	 // 1 string to match.
      if (memcmp(Name.data()+1, "mport_name", 10) != 0)
        break;
      return AttributeCommonInfo::AT_WebAssemblyImportName;	 // "import_name"
    case 'm':	 // 2 strings to match.
      if (Name[1] != 'a')
        break;
      switch (Name[2]) {
      default: break;
      case 't':	 // 1 string to match.
        if (memcmp(Name.data()+3, "rix_type", 8) != 0)
          break;
        return AttributeCommonInfo::AT_MatrixType;	 // "matrix_type"
      case 'y':	 // 1 string to match.
        if (memcmp(Name.data()+3, "be_undef", 8) != 0)
          break;
        return AttributeCommonInfo::AT_MaybeUndef;	 // "maybe_undef"
      }
      break;
    case 'n':	 // 4 strings to match.
      switch (Name[1]) {
      default: break;
      case 'o':	 // 3 strings to match.
        switch (Name[2]) {
        default: break;
        case '_':	 // 1 string to match.
          if (memcmp(Name.data()+3, "sanitize", 8) != 0)
            break;
          return AttributeCommonInfo::AT_NoSanitize;	 // "no_sanitize"
        case 'd':	 // 1 string to match.
          if (memcmp(Name.data()+3, "uplicate", 8) != 0)
            break;
          return AttributeCommonInfo::AT_NoDuplicate;	 // "noduplicate"
        case 'm':	 // 1 string to match.
          if (memcmp(Name.data()+3, "icromips", 8) != 0)
            break;
          return AttributeCommonInfo::AT_NoMicroMips;	 // "nomicromips"
        }
        break;
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+2, "_consumed", 9) != 0)
          break;
        return AttributeCommonInfo::AT_NSConsumed;	 // "ns_consumed"
      }
      break;
    case 'o':	 // 3 strings to match.
      switch (Name[1]) {
      default: break;
      case 'b':	 // 2 strings to match.
        if (memcmp(Name.data()+2, "jc_", 3) != 0)
          break;
        switch (Name[5]) {
        default: break;
        case 'b':	 // 1 string to match.
          if (memcmp(Name.data()+6, "ridge", 5) != 0)
            break;
          return AttributeCommonInfo::AT_ObjCBridge;	 // "objc_bridge"
        case 'd':	 // 1 string to match.
          if (memcmp(Name.data()+6, "irect", 5) != 0)
            break;
          return AttributeCommonInfo::AT_ObjCDirect;	 // "objc_direct"
        }
        break;
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+2, "_consumed", 9) != 0)
          break;
        return AttributeCommonInfo::AT_OSConsumed;	 // "os_consumed"
      }
      break;
    case 's':	 // 3 strings to match.
      switch (Name[1]) {
      default: break;
      case 'w':	 // 2 strings to match.
        if (memcmp(Name.data()+2, "ift_", 4) != 0)
          break;
        switch (Name[6]) {
        default: break;
        case 'a':	 // 1 string to match.
          if (memcmp(Name.data()+7, "sync", 4) != 0)
            break;
          return AttributeCommonInfo::AT_SwiftAsync;	 // "swift_async"
        case 'e':	 // 1 string to match.
          if (memcmp(Name.data()+7, "rror", 4) != 0)
            break;
          return AttributeCommonInfo::AT_SwiftError;	 // "swift_error"
        }
        break;
      case 'y':	 // 1 string to match.
        if (memcmp(Name.data()+2, "cl_kernel", 9) != 0)
          break;
        return AttributeCommonInfo::AT_SYCLKernel;	 // "sycl_kernel"
      }
      break;
    case 't':	 // 1 string to match.
      if (memcmp(Name.data()+1, "rivial_abi", 10) != 0)
        break;
      return AttributeCommonInfo::AT_TrivialABI;	 // "trivial_abi"
    case 'u':	 // 1 string to match.
      if (memcmp(Name.data()+1, "navailable", 10) != 0)
        break;
      return AttributeCommonInfo::AT_Unavailable;	 // "unavailable"
    case 'v':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ector_size", 10) != 0)
        break;
      return AttributeCommonInfo::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) != 0)
          break;
        return AttributeCommonInfo::AT_WarnUnused;	 // "warn_unused"
      case 'e':	 // 1 string to match.
        if (memcmp(Name.data()+2, "ak_import", 9) != 0)
          break;
        return AttributeCommonInfo::AT_WeakImport;	 // "weak_import"
      }
      break;
    }
    break;
  case 12:	 // 10 strings to match.
    switch (Name[0]) {
    default: break;
    case 'a':	 // 1 string to match.
      if (memcmp(Name.data()+1, "vailability", 11) != 0)
        break;
      return AttributeCommonInfo::AT_Availability;	 // "availability"
    case 'b':	 // 2 strings to match.
      if (memcmp(Name.data()+1, "tf_", 3) != 0)
        break;
      switch (Name[4]) {
      default: break;
      case 'd':	 // 1 string to match.
        if (memcmp(Name.data()+5, "ecl_tag", 7) != 0)
          break;
        return AttributeCommonInfo::AT_BTFDeclTag;	 // "btf_decl_tag"
      case 't':	 // 1 string to match.
        if (memcmp(Name.data()+5, "ype_tag", 7) != 0)
          break;
        return AttributeCommonInfo::AT_BTFTypeTag;	 // "btf_type_tag"
      }
      break;
    case 'c':	 // 2 strings to match.
      if (memcmp(Name.data()+1, "pu_", 3) != 0)
        break;
      switch (Name[4]) {
      default: break;
      case 'd':	 // 1 string to match.
        if (memcmp(Name.data()+5, "ispatch", 7) != 0)
          break;
        return AttributeCommonInfo::AT_CPUDispatch;	 // "cpu_dispatch"
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+5, "pecific", 7) != 0)
          break;
        return AttributeCommonInfo::AT_CPUSpecific;	 // "cpu_specific"
      }
      break;
    case 'o':	 // 3 strings to match.
      switch (Name[1]) {
      default: break;
      case 'b':	 // 1 string to match.
        if (memcmp(Name.data()+2, "jc_boxable", 10) != 0)
          break;
        return AttributeCommonInfo::AT_ObjCBoxable;	 // "objc_boxable"
      case 'p':	 // 1 string to match.
        if (memcmp(Name.data()+2, "encl_local", 10) != 0)
          break;
        return AttributeCommonInfo::AT_OpenCLLocalAddressSpace;	 // "opencl_local"
      case 'v':	 // 1 string to match.
        if (memcmp(Name.data()+2, "erloadable", 10) != 0)
          break;
        return AttributeCommonInfo::AT_Overloadable;	 // "overloadable"
      }
      break;
    case 'p':	 // 1 string to match.
      if (memcmp(Name.data()+1, "reserve_all", 11) != 0)
        break;
      return AttributeCommonInfo::AT_PreserveAll;	 // "preserve_all"
    case 's':	 // 1 string to match.
      if (memcmp(Name.data()+1, "wift_bridge", 11) != 0)
        break;
      return AttributeCommonInfo::AT_SwiftBridge;	 // "swift_bridge"
    }
    break;
  case 13:	 // 23 strings to match.
    switch (Name[0]) {
    default: break;
    case 'a':	 // 3 strings to match.
      switch (Name[1]) {
      default: break;
      case 'd':	 // 1 string to match.
        if (memcmp(Name.data()+2, "dress_space", 11) != 0)
          break;
        return AttributeCommonInfo::AT_AddressSpace;	 // "address_space"
      case 'l':	 // 1 string to match.
        if (memcmp(Name.data()+2, "ways_inline", 11) != 0)
          break;
        return AttributeCommonInfo::AT_AlwaysInline;	 // "always_inline"
      case 'm':	 // 1 string to match.
        if (memcmp(Name.data()+2, "dgpu_kernel", 11) != 0)
          break;
        return AttributeCommonInfo::AT_AMDGPUKernelCall;	 // "amdgpu_kernel"
      }
      break;
    case 'c':	 // 1 string to match.
      if (memcmp(Name.data()+1, "allable_when", 12) != 0)
        break;
      return AttributeCommonInfo::AT_CallableWhen;	 // "callable_when"
    case 'i':	 // 2 strings to match.
      switch (Name[1]) {
      default: break;
      case 'm':	 // 1 string to match.
        if (memcmp(Name.data()+2, "port_module", 11) != 0)
          break;
        return AttributeCommonInfo::AT_WebAssemblyImportModule;	 // "import_module"
      case 'n':	 // 1 string to match.
        if (memcmp(Name.data()+2, "it_priority", 11) != 0)
          break;
        return AttributeCommonInfo::AT_InitPriority;	 // "init_priority"
      }
      break;
    case 'l':	 // 3 strings to match.
      switch (Name[1]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+2, "unch_bounds", 11) != 0)
          break;
        return AttributeCommonInfo::AT_CUDALaunchBounds;	 // "launch_bounds"
      case 'i':	 // 1 string to match.
        if (memcmp(Name.data()+2, "fetimebound", 11) != 0)
          break;
        return AttributeCommonInfo::AT_LifetimeBound;	 // "lifetimebound"
      case 'o':	 // 1 string to match.
        if (memcmp(Name.data()+2, "ck_returned", 11) != 0)
          break;
        return AttributeCommonInfo::AT_LockReturned;	 // "lock_returned"
      }
      break;
    case 'o':	 // 1 string to match.
      if (memcmp(Name.data()+1, "pencl_global", 12) != 0)
        break;
      return AttributeCommonInfo::AT_OpenCLGlobalAddressSpace;	 // "opencl_global"
    case 'p':	 // 2 strings to match.
      switch (Name[1]) {
      default: break;
      case 'r':	 // 1 string to match.
        if (memcmp(Name.data()+2, "eserve_most", 11) != 0)
          break;
        return AttributeCommonInfo::AT_PreserveMost;	 // "preserve_most"
      case 't':	 // 1 string to match.
        if (memcmp(Name.data()+2, "_guarded_by", 11) != 0)
          break;
        return AttributeCommonInfo::AT_PtGuardedBy;	 // "pt_guarded_by"
      }
      break;
    case 'r':	 // 2 strings to match.
      if (Name[1] != 'e')
        break;
      switch (Name[2]) {
      default: break;
      case 'i':	 // 1 string to match.
        if (memcmp(Name.data()+3, "nitializes", 10) != 0)
          break;
        return AttributeCommonInfo::AT_Reinitializes;	 // "reinitializes"
      case 't':	 // 1 string to match.
        if (memcmp(Name.data()+3, "urns_twice", 10) != 0)
          break;
        return AttributeCommonInfo::AT_ReturnsTwice;	 // "returns_twice"
      }
      break;
    case 's':	 // 5 strings to match.
      switch (Name[1]) {
      default: break;
      case 'e':	 // 1 string to match.
        if (memcmp(Name.data()+2, "t_typestate", 11) != 0)
          break;
        return AttributeCommonInfo::AT_SetTypestate;	 // "set_typestate"
      case 'w':	 // 4 strings to match.
        if (memcmp(Name.data()+2, "ift_", 4) != 0)
          break;
        switch (Name[6]) {
        default: break;
        case 'c':	 // 1 string to match.
          if (memcmp(Name.data()+7, "ontext", 6) != 0)
            break;
          return AttributeCommonInfo::AT_SwiftContext;	 // "swift_context"
        case 'n':	 // 1 string to match.
          if (memcmp(Name.data()+7, "ewtype", 6) != 0)
            break;
          return AttributeCommonInfo::AT_SwiftNewType;	 // "swift_newtype"
        case 'p':	 // 1 string to match.
          if (memcmp(Name.data()+7, "rivate", 6) != 0)
            break;
          return AttributeCommonInfo::AT_SwiftPrivate;	 // "swift_private"
        case 'w':	 // 1 string to match.
          if (memcmp(Name.data()+7, "rapper", 6) != 0)
            break;
          return AttributeCommonInfo::AT_SwiftNewType;	 // "swift_wrapper"
        }
        break;
      }
      break;
    case 't':	 // 1 string to match.
      if (memcmp(Name.data()+1, "arget_clones", 12) != 0)
        break;
      return AttributeCommonInfo::AT_TargetClones;	 // "target_clones"
    case 'u':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ninitialized", 12) != 0)
        break;
      return AttributeCommonInfo::AT_Uninitialized;	 // "uninitialized"
    case 'v':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ec_type_hint", 12) != 0)
        break;
      return AttributeCommonInfo::AT_VecTypeHint;	 // "vec_type_hint"
    case 'x':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ray_log_args", 12) != 0)
        break;
      return AttributeCommonInfo::AT_XRayLogArgs;	 // "xray_log_args"
    }
    break;
  case 14:	 // 18 strings to match.
    switch (Name[0]) {
    default: break;
    case 'a':	 // 4 strings to match.
      switch (Name[1]) {
      default: break;
      case 'c':	 // 2 strings to match.
        if (memcmp(Name.data()+2, "quire", 5) != 0)
          break;
        switch (Name[7]) {
        default: break;
        case '_':	 // 1 string to match.
          if (memcmp(Name.data()+8, "handle", 6) != 0)
            break;
          return AttributeCommonInfo::AT_AcquireHandle;	 // "acquire_handle"
        case 'd':	 // 1 string to match.
          if (memcmp(Name.data()+8, "_after", 6) != 0)
            break;
          return AttributeCommonInfo::AT_AcquiredAfter;	 // "acquired_after"
        }
        break;
      case 'l':	 // 1 string to match.
        if (memcmp(Name.data()+2, "ways_destroy", 12) != 0)
          break;
        return AttributeCommonInfo::AT_AlwaysDestroy;	 // "always_destroy"
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+2, "sume_aligned", 12) != 0)
          break;
        return AttributeCommonInfo::AT_AssumeAligned;	 // "assume_aligned"
      }
      break;
    case 'c':	 // 1 string to match.
      if (memcmp(Name.data()+1, "udart_builtin", 13) != 0)
        break;
      return AttributeCommonInfo::IgnoredAttribute;	 // "cudart_builtin"
    case 'd':	 // 1 string to match.
      if (memcmp(Name.data()+1, "evice_builtin", 13) != 0)
        break;
      return AttributeCommonInfo::IgnoredAttribute;	 // "device_builtin"
    case 'i':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ntel_ocl_bicc", 13) != 0)
        break;
      return AttributeCommonInfo::AT_IntelOclBicc;	 // "intel_ocl_bicc"
    case 'l':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ocks_excluded", 13) != 0)
        break;
      return AttributeCommonInfo::AT_LocksExcluded;	 // "locks_excluded"
    case 'n':	 // 1 string to match.
      if (memcmp(Name.data()+1, "o_split_stack", 13) != 0)
        break;
      return AttributeCommonInfo::AT_NoSplitStack;	 // "no_split_stack"
    case 'o':	 // 4 strings to match.
      switch (Name[1]) {
      default: break;
      case 'b':	 // 2 strings to match.
        if (memcmp(Name.data()+2, "jc_", 3) != 0)
          break;
        switch (Name[5]) {
        default: break;
        case 'e':	 // 1 string to match.
          if (memcmp(Name.data()+6, "xception", 8) != 0)
            break;
          return AttributeCommonInfo::AT_ObjCException;	 // "objc_exception"
        case 'o':	 // 1 string to match.
          if (memcmp(Name.data()+6, "wnership", 8) != 0)
            break;
          return AttributeCommonInfo::AT_ObjCOwnership;	 // "objc_ownership"
        }
        break;
      case 'p':	 // 2 strings to match.
        if (memcmp(Name.data()+2, "encl_", 5) != 0)
          break;
        switch (Name[7]) {
        default: break;
        case 'g':	 // 1 string to match.
          if (memcmp(Name.data()+8, "eneric", 6) != 0)
            break;
          return AttributeCommonInfo::AT_OpenCLGenericAddressSpace;	 // "opencl_generic"
        case 'p':	 // 1 string to match.
          if (memcmp(Name.data()+8, "rivate", 6) != 0)
            break;
          return AttributeCommonInfo::AT_OpenCLPrivateAddressSpace;	 // "opencl_private"
        }
        break;
      }
      break;
    case 'p':	 // 2 strings to match.
      switch (Name[1]) {
      default: break;
      case 'r':	 // 1 string to match.
        if (memcmp(Name.data()+2, "eferred_name", 12) != 0)
          break;
        return AttributeCommonInfo::AT_PreferredName;	 // "preferred_name"
      case 't':	 // 1 string to match.
        if (memcmp(Name.data()+2, "_guarded_var", 12) != 0)
          break;
        return AttributeCommonInfo::AT_PtGuardedVar;	 // "pt_guarded_var"
      }
      break;
    case 'r':	 // 1 string to match.
      if (memcmp(Name.data()+1, "elease_handle", 13) != 0)
        break;
      return AttributeCommonInfo::AT_ReleaseHandle;	 // "release_handle"
    case 's':	 // 1 string to match.
      if (memcmp(Name.data()+1, "wiftasynccall", 13) != 0)
        break;
      return AttributeCommonInfo::AT_SwiftAsyncCall;	 // "swiftasynccall"
    case 't':	 // 1 string to match.
      if (memcmp(Name.data()+1, "est_typestate", 13) != 0)
        break;
      return AttributeCommonInfo::AT_TestTypestate;	 // "test_typestate"
    }
    break;
  case 15:	 // 19 strings to match.
    switch (Name[0]) {
    default: break;
    case 'a':	 // 4 strings to match.
      switch (Name[1]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+2, "rch64_sve_pcs", 13) != 0)
          break;
        return AttributeCommonInfo::AT_AArch64SVEPcs;	 // "aarch64_sve_pcs"
      case 'c':	 // 1 string to match.
        if (memcmp(Name.data()+2, "quired_before", 13) != 0)
          break;
        return AttributeCommonInfo::AT_AcquiredBefore;	 // "acquired_before"
      case 'm':	 // 2 strings to match.
        if (memcmp(Name.data()+2, "dgpu_num_", 9) != 0)
          break;
        switch (Name[11]) {
        default: break;
        case 's':	 // 1 string to match.
          if (memcmp(Name.data()+12, "gpr", 3) != 0)
            break;
          return AttributeCommonInfo::AT_AMDGPUNumSGPR;	 // "amdgpu_num_sgpr"
        case 'v':	 // 1 string to match.
          if (memcmp(Name.data()+12, "gpr", 3) != 0)
            break;
          return AttributeCommonInfo::AT_AMDGPUNumVGPR;	 // "amdgpu_num_vgpr"
        }
        break;
      }
      break;
    case 'e':	 // 1 string to match.
      if (memcmp(Name.data()+1, "xt_vector_type", 14) != 0)
        break;
      return AttributeCommonInfo::AT_ExtVectorType;	 // "ext_vector_type"
    case 'f':	 // 1 string to match.
      if (memcmp(Name.data()+1, "unction_return", 14) != 0)
        break;
      return AttributeCommonInfo::AT_FunctionReturnThunks;	 // "function_return"
    case 'n':	 // 2 strings to match.
      switch (Name[1]) {
      default: break;
      case 'o':	 // 1 string to match.
        if (memcmp(Name.data()+2, "t_tail_called", 13) != 0)
          break;
        return AttributeCommonInfo::AT_NotTailCalled;	 // "not_tail_called"
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+2, "_error_domain", 13) != 0)
          break;
        return AttributeCommonInfo::AT_NSErrorDomain;	 // "ns_error_domain"
      }
      break;
    case 'o':	 // 5 strings to match.
      switch (Name[1]) {
      default: break;
      case 'b':	 // 2 strings to match.
        if (memcmp(Name.data()+2, "jc_", 3) != 0)
          break;
        switch (Name[5]) {
        default: break;
        case 'c':	 // 1 string to match.
          if (memcmp(Name.data()+6, "lass_stub", 9) != 0)
            break;
          return AttributeCommonInfo::AT_ObjCClassStub;	 // "objc_class_stub"
        case 'r':	 // 1 string to match.
          if (memcmp(Name.data()+6, "oot_class", 9) != 0)
            break;
          return AttributeCommonInfo::AT_ObjCRootClass;	 // "objc_root_class"
        }
        break;
      case 'p':	 // 1 string to match.
        if (memcmp(Name.data()+2, "encl_constant", 13) != 0)
          break;
        return AttributeCommonInfo::AT_OpenCLConstantAddressSpace;	 // "opencl_constant"
      case 'w':	 // 2 strings to match.
        if (memcmp(Name.data()+2, "nership_", 8) != 0)
          break;
        switch (Name[10]) {
        default: break;
        case 'h':	 // 1 string to match.
          if (memcmp(Name.data()+11, "olds", 4) != 0)
            break;
          return AttributeCommonInfo::AT_Ownership;	 // "ownership_holds"
        case 't':	 // 1 string to match.
          if (memcmp(Name.data()+11, "akes", 4) != 0)
            break;
          return AttributeCommonInfo::AT_Ownership;	 // "ownership_takes"
        }
        break;
      }
      break;
    case 'p':	 // 1 string to match.
      if (memcmp(Name.data()+1, "aram_typestate", 14) != 0)
        break;
      return AttributeCommonInfo::AT_ParamTypestate;	 // "param_typestate"
    case 'r':	 // 1 string to match.
      if (memcmp(Name.data()+1, "eturns_nonnull", 14) != 0)
        break;
      return AttributeCommonInfo::AT_ReturnsNonNull;	 // "returns_nonnull"
    case 's':	 // 1 string to match.
      if (memcmp(Name.data()+1, "coped_lockable", 14) != 0)
        break;
      return AttributeCommonInfo::AT_ScopedLockable;	 // "scoped_lockable"
    case 't':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ype_visibility", 14) != 0)
        break;
      return AttributeCommonInfo::AT_TypeVisibility;	 // "type_visibility"
    case 'u':	 // 2 strings to match.
      switch (Name[1]) {
      default: break;
      case 'n':	 // 1 string to match.
        if (memcmp(Name.data()+2, "lock_function", 13) != 0)
          break;
        return AttributeCommonInfo::AT_ReleaseCapability;	 // "unlock_function"
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+2, "ing_if_exists", 13) != 0)
          break;
        return AttributeCommonInfo::AT_UsingIfExists;	 // "using_if_exists"
      }
      break;
    }
    break;
  case 16:	 // 11 strings to match.
    switch (Name[0]) {
    default: break;
    case 'e':	 // 1 string to match.
      if (memcmp(Name.data()+1, "nforce_tcb_leaf", 15) != 0)
        break;
      return AttributeCommonInfo::AT_EnforceTCBLeaf;	 // "enforce_tcb_leaf"
    case 'i':	 // 1 string to match.
      if (memcmp(Name.data()+1, "nternal_linkage", 15) != 0)
        break;
      return AttributeCommonInfo::AT_InternalLinkage;	 // "internal_linkage"
    case 'm':	 // 1 string to match.
      if (memcmp(Name.data()+1, "in_vector_width", 15) != 0)
        break;
      return AttributeCommonInfo::AT_MinVectorWidth;	 // "min_vector_width"
    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) != 0)
          break;
        return AttributeCommonInfo::AT_NeonVectorType;	 // "neon_vector_type"
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+2, "_consumes_self", 14) != 0)
          break;
        return AttributeCommonInfo::AT_NSConsumesSelf;	 // "ns_consumes_self"
      }
      break;
    case 'o':	 // 1 string to match.
      if (memcmp(Name.data()+1, "s_consumes_this", 15) != 0)
        break;
      return AttributeCommonInfo::AT_OSConsumesThis;	 // "os_consumes_this"
    case 'p':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ass_object_size", 15) != 0)
        break;
      return AttributeCommonInfo::AT_PassObjectSize;	 // "pass_object_size"
    case 'r':	 // 2 strings to match.
      switch (Name[1]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+2, "ndomize_layout", 14) != 0)
          break;
        return AttributeCommonInfo::AT_RandomizeLayout;	 // "randomize_layout"
      case 'e':	 // 1 string to match.
        if (memcmp(Name.data()+2, "turn_typestate", 14) != 0)
          break;
        return AttributeCommonInfo::AT_ReturnTypestate;	 // "return_typestate"
      }
      break;
    case 's':	 // 2 strings to match.
      switch (Name[1]) {
      default: break;
      case 't':	 // 1 string to match.
        if (memcmp(Name.data()+2, "andalone_debug", 14) != 0)
          break;
        return AttributeCommonInfo::AT_StandaloneDebug;	 // "standalone_debug"
      case 'w':	 // 1 string to match.
        if (memcmp(Name.data()+2, "ift_async_name", 14) != 0)
          break;
        return AttributeCommonInfo::AT_SwiftAsyncName;	 // "swift_async_name"
      }
      break;
    }
    break;
  case 17:	 // 7 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) != 0)
          break;
        return AttributeCommonInfo::AT_AnalyzerNoReturn;	 // "analyzer_noreturn"
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+2, "sert_capability", 15) != 0)
          break;
        return AttributeCommonInfo::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) != 0)
          break;
        return AttributeCommonInfo::AT_ObjCRuntimeName;	 // "objc_runtime_name"
      case 'w':	 // 1 string to match.
        if (memcmp(Name.data()+2, "nership_returns", 15) != 0)
          break;
        return AttributeCommonInfo::AT_Ownership;	 // "ownership_returns"
      }
      break;
    case 's':	 // 2 strings to match.
      switch (Name[1]) {
      default: break;
      case 'h':	 // 1 string to match.
        if (memcmp(Name.data()+2, "ared_capability", 15) != 0)
          break;
        return AttributeCommonInfo::AT_Capability;	 // "shared_capability"
      case 'w':	 // 1 string to match.
        if (memcmp(Name.data()+2, "ift_async_error", 15) != 0)
          break;
        return AttributeCommonInfo::AT_SwiftAsyncError;	 // "swift_async_error"
      }
      break;
    case 't':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ransparent_union", 16) != 0)
        break;
      return AttributeCommonInfo::AT_TransparentUnion;	 // "transparent_union"
    }
    break;
  case 18:	 // 20 strings to match.
    switch (Name[0]) {
    default: break;
    case 'a':	 // 3 strings to match.
      switch (Name[1]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+2, "rch64_vector_pcs", 16) != 0)
          break;
        return AttributeCommonInfo::AT_AArch64VectorPcs;	 // "aarch64_vector_pcs"
      case 'c':	 // 1 string to match.
        if (memcmp(Name.data()+2, "quire_capability", 16) != 0)
          break;
        return AttributeCommonInfo::AT_AcquireCapability;	 // "acquire_capability"
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+2, "sert_shared_lock", 16) != 0)
          break;
        return AttributeCommonInfo::AT_AssertSharedLock;	 // "assert_shared_lock"
      }
      break;
    case 'c':	 // 1 string to match.
      if (memcmp(Name.data()+1, "arries_dependency", 17) != 0)
        break;
      return AttributeCommonInfo::AT_CarriesDependency;	 // "carries_dependency"
    case 'd':	 // 1 string to match.
      if (memcmp(Name.data()+1, "isable_tail_calls", 17) != 0)
        break;
      return AttributeCommonInfo::AT_DisableTailCalls;	 // "disable_tail_calls"
    case 'e':	 // 1 string to match.
      if (memcmp(Name.data()+1, "num_extensibility", 17) != 0)
        break;
      return AttributeCommonInfo::AT_EnumExtensibility;	 // "enum_extensibility"
    case 'i':	 // 1 string to match.
      if (memcmp(Name.data()+1, "boutletcollection", 17) != 0)
        break;
      return AttributeCommonInfo::AT_IBOutletCollection;	 // "iboutletcollection"
    case 'm':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ig_server_routine", 17) != 0)
        break;
      return AttributeCommonInfo::AT_MIGServerRoutine;	 // "mig_server_routine"
    case 'n':	 // 3 strings to match.
      if (memcmp(Name.data()+1, "o_s", 3) != 0)
        break;
      switch (Name[4]) {
      default: break;
      case 'a':	 // 2 strings to match.
        if (memcmp(Name.data()+5, "nitize_", 7) != 0)
          break;
        switch (Name[12]) {
        default: break;
        case 'm':	 // 1 string to match.
          if (memcmp(Name.data()+13, "emory", 5) != 0)
            break;
          return AttributeCommonInfo::AT_NoSanitizeSpecific;	 // "no_sanitize_memory"
        case 't':	 // 1 string to match.
          if (memcmp(Name.data()+13, "hread", 5) != 0)
            break;
          return AttributeCommonInfo::AT_NoSanitizeSpecific;	 // "no_sanitize_thread"
        }
        break;
      case 't':	 // 1 string to match.
        if (memcmp(Name.data()+5, "ack_protector", 13) != 0)
          break;
        return AttributeCommonInfo::AT_NoStackProtector;	 // "no_stack_protector"
      }
      break;
    case 'o':	 // 4 strings to match.
      switch (Name[1]) {
      default: break;
      case 'b':	 // 2 strings to match.
        if (memcmp(Name.data()+2, "jc_", 3) != 0)
          break;
        switch (Name[5]) {
        default: break;
        case 'm':	 // 1 string to match.
          if (memcmp(Name.data()+6, "ethod_family", 12) != 0)
            break;
          return AttributeCommonInfo::AT_ObjCMethodFamily;	 // "objc_method_family"
        case 'n':	 // 1 string to match.
          if (memcmp(Name.data()+6, "onlazy_class", 12) != 0)
            break;
          return AttributeCommonInfo::AT_ObjCNonLazyClass;	 // "objc_nonlazy_class"
        }
        break;
      case 'p':	 // 2 strings to match.
        if (memcmp(Name.data()+2, "encl_", 5) != 0)
          break;
        switch (Name[7]) {
        default: break;
        case 'g':	 // 1 string to match.
          if (memcmp(Name.data()+8, "lobal_host", 10) != 0)
            break;
          return AttributeCommonInfo::AT_OpenCLGlobalHostAddressSpace;	 // "opencl_global_host"
        case 'u':	 // 1 string to match.
          if (memcmp(Name.data()+8, "nroll_hint", 10) != 0)
            break;
          return AttributeCommonInfo::AT_OpenCLUnrollHint;	 // "opencl_unroll_hint"
        }
        break;
      }
      break;
    case 'r':	 // 1 string to match.
      if (memcmp(Name.data()+1, "elease_capability", 17) != 0)
        break;
      return AttributeCommonInfo::AT_ReleaseCapability;	 // "release_capability"
    case 's':	 // 3 strings to match.
      switch (Name[1]) {
      default: break;
      case 'w':	 // 2 strings to match.
        if (memcmp(Name.data()+2, "ift_", 4) != 0)
          break;
        switch (Name[6]) {
        default: break;
        case 'e':	 // 1 string to match.
          if (memcmp(Name.data()+7, "rror_result", 11) != 0)
            break;
          return AttributeCommonInfo::AT_SwiftErrorResult;	 // "swift_error_result"
        case 'o':	 // 1 string to match.
          if (memcmp(Name.data()+7, "bjc_members", 11) != 0)
            break;
          return AttributeCommonInfo::AT_SwiftObjCMembers;	 // "swift_objc_members"
        }
        break;
      case 'y':	 // 1 string to match.
        if (memcmp(Name.data()+2, "cl_special_class", 16) != 0)
          break;
        return AttributeCommonInfo::AT_SYCLSpecialClass;	 // "sycl_special_class"
      }
      break;
    case 'w':	 // 1 string to match.
      if (memcmp(Name.data()+1, "arn_unused_result", 17) != 0)
        break;
      return AttributeCommonInfo::AT_WarnUnusedResult;	 // "warn_unused_result"
    }
    break;
  case 19:	 // 19 strings to match.
    switch (Name[0]) {
    default: break;
    case 'a':	 // 2 strings to match.
      switch (Name[1]) {
      default: break;
      case 'm':	 // 1 string to match.
        if (memcmp(Name.data()+2, "dgpu_waves_per_eu", 17) != 0)
          break;
        return AttributeCommonInfo::AT_AMDGPUWavesPerEU;	 // "amdgpu_waves_per_eu"
      case 'r':	 // 1 string to match.
        if (memcmp(Name.data()+2, "m_sve_vector_bits", 17) != 0)
          break;
        return AttributeCommonInfo::AT_ArmSveVectorBits;	 // "arm_sve_vector_bits"
      }
      break;
    case 'c':	 // 5 strings to match.
      switch (Name[1]) {
      default: break;
      case 'f':	 // 3 strings to match.
        if (Name[2] != '_')
          break;
        switch (Name[3]) {
        default: break;
        case 'a':	 // 1 string to match.
          if (memcmp(Name.data()+4, "udited_transfer", 15) != 0)
            break;
          return AttributeCommonInfo::AT_CFAuditedTransfer;	 // "cf_audited_transfer"
        case 'r':	 // 1 string to match.
          if (memcmp(Name.data()+4, "eturns_retained", 15) != 0)
            break;
          return AttributeCommonInfo::AT_CFReturnsRetained;	 // "cf_returns_retained"
        case 'u':	 // 1 string to match.
          if (memcmp(Name.data()+4, "nknown_transfer", 15) != 0)
            break;
          return AttributeCommonInfo::AT_CFUnknownTransfer;	 // "cf_unknown_transfer"
        }
        break;
      case 'l':	 // 1 string to match.
        if (memcmp(Name.data()+2, "ang_builtin_alias", 17) != 0)
          break;
        return AttributeCommonInfo::AT_BuiltinAlias;	 // "clang_builtin_alias"
      case 'm':	 // 1 string to match.
        if (memcmp(Name.data()+2, "se_nonsecure_call", 17) != 0)
          break;
        return AttributeCommonInfo::AT_CmseNSCall;	 // "cmse_nonsecure_call"
      }
      break;
    case 'd':	 // 1 string to match.
      if (memcmp(Name.data()+1, "iagnose_as_builtin", 18) != 0)
        break;
      return AttributeCommonInfo::AT_DiagnoseAsBuiltin;	 // "diagnose_as_builtin"
    case 'n':	 // 3 strings to match.
      switch (Name[1]) {
      default: break;
      case 'o':	 // 2 strings to match.
        if (Name[2] != '_')
          break;
        switch (Name[3]) {
        default: break;
        case 'r':	 // 1 string to match.
          if (memcmp(Name.data()+4, "andomize_layout", 15) != 0)
            break;
          return AttributeCommonInfo::AT_NoRandomizeLayout;	 // "no_randomize_layout"
        case 's':	 // 1 string to match.
          if (memcmp(Name.data()+4, "anitize_address", 15) != 0)
            break;
          return AttributeCommonInfo::AT_NoSanitizeSpecific;	 // "no_sanitize_address"
        }
        break;
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+2, "_returns_retained", 17) != 0)
          break;
        return AttributeCommonInfo::AT_NSReturnsRetained;	 // "ns_returns_retained"
      }
      break;
    case 'o':	 // 5 strings to match.
      switch (Name[1]) {
      default: break;
      case 'b':	 // 4 strings to match.
        if (memcmp(Name.data()+2, "jc_", 3) != 0)
          break;
        switch (Name[5]) {
        default: break;
        case 'b':	 // 2 strings to match.
          if (memcmp(Name.data()+6, "ridge_", 6) != 0)
            break;
          switch (Name[12]) {
          default: break;
          case 'm':	 // 1 string to match.
            if (memcmp(Name.data()+13, "utable", 6) != 0)
              break;
            return AttributeCommonInfo::AT_ObjCBridgeMutable;	 // "objc_bridge_mutable"
          case 'r':	 // 1 string to match.
            if (memcmp(Name.data()+13, "elated", 6) != 0)
              break;
            return AttributeCommonInfo::AT_ObjCBridgeRelated;	 // "objc_bridge_related"
          }
          break;
        case 'd':	 // 1 string to match.
          if (memcmp(Name.data()+6, "irect_members", 13) != 0)
            break;
          return AttributeCommonInfo::AT_ObjCDirectMembers;	 // "objc_direct_members"
        case 'r':	 // 1 string to match.
          if (memcmp(Name.data()+6, "equires_super", 13) != 0)
            break;
          return AttributeCommonInfo::AT_ObjCRequiresSuper;	 // "objc_requires_super"
        }
        break;
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+2, "_returns_retained", 17) != 0)
          break;
        return AttributeCommonInfo::AT_OSReturnsRetained;	 // "os_returns_retained"
      }
      break;
    case 'r':	 // 1 string to match.
      if (memcmp(Name.data()+1, "equires_capability", 18) != 0)
        break;
      return AttributeCommonInfo::AT_RequiresCapability;	 // "requires_capability"
    case 's':	 // 1 string to match.
      if (memcmp(Name.data()+1, "wift_async_context", 18) != 0)
        break;
      return AttributeCommonInfo::AT_SwiftAsyncContext;	 // "swift_async_context"
    case 'z':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ero_call_used_regs", 18) != 0)
        break;
      return AttributeCommonInfo::AT_ZeroCallUsedRegs;	 // "zero_call_used_regs"
    }
    break;
  case 20:	 // 8 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 1 string to match.
      if (memcmp(Name.data()+1, "mse_nonsecure_entry", 19) != 0)
        break;
      return AttributeCommonInfo::AT_CmseNSEntry;	 // "cmse_nonsecure_entry"
    case 'l':	 // 1 string to match.
      if (memcmp(Name.data()+1, "oader_uninitialized", 19) != 0)
        break;
      return AttributeCommonInfo::AT_LoaderUninitialized;	 // "loader_uninitialized"
    case 'n':	 // 1 string to match.
      if (memcmp(Name.data()+1, "eon_polyvector_type", 19) != 0)
        break;
      return AttributeCommonInfo::AT_NeonPolyVectorType;	 // "neon_polyvector_type"
    case 'o':	 // 2 strings to match.
      switch (Name[1]) {
      default: break;
      case 'b':	 // 1 string to match.
        if (memcmp(Name.data()+2, "jc_runtime_visible", 18) != 0)
          break;
        return AttributeCommonInfo::AT_ObjCRuntimeVisible;	 // "objc_runtime_visible"
      case 'p':	 // 1 string to match.
        if (memcmp(Name.data()+2, "encl_global_device", 18) != 0)
          break;
        return AttributeCommonInfo::AT_OpenCLGlobalDeviceAddressSpace;	 // "opencl_global_device"
      }
      break;
    case 'r':	 // 1 string to match.
      if (memcmp(Name.data()+1, "eqd_work_group_size", 19) != 0)
        break;
      return AttributeCommonInfo::AT_ReqdWorkGroupSize;	 // "reqd_work_group_size"
    case 's':	 // 1 string to match.
      if (memcmp(Name.data()+1, "hared_lock_function", 19) != 0)
        break;
      return AttributeCommonInfo::AT_AcquireCapability;	 // "shared_lock_function"
    case 'w':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ork_group_size_hint", 19) != 0)
        break;
      return AttributeCommonInfo::AT_WorkGroupSizeHint;	 // "work_group_size_hint"
    }
    break;
  case 21:	 // 10 strings to match.
    switch (Name[0]) {
    default: break;
    case 'a':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ssert_exclusive_lock", 20) != 0)
        break;
      return AttributeCommonInfo::AT_AssertExclusiveLock;	 // "assert_exclusive_lock"
    case 'l':	 // 1 string to match.
      if (memcmp(Name.data()+1, "to_visibility_public", 20) != 0)
        break;
      return AttributeCommonInfo::AT_LTOVisibilityPublic;	 // "lto_visibility_public"
    case 'o':	 // 1 string to match.
      if (memcmp(Name.data()+1, "bjc_precise_lifetime", 20) != 0)
        break;
      return AttributeCommonInfo::AT_ObjCPreciseLifetime;	 // "objc_precise_lifetime"
    case 'p':	 // 2 strings to match.
      switch (Name[1]) {
      default: break;
      case 'o':	 // 1 string to match.
        if (memcmp(Name.data()+2, "inter_with_type_tag", 19) != 0)
          break;
        return AttributeCommonInfo::AT_ArgumentWithTypeTag;	 // "pointer_with_type_tag"
      case 'r':	 // 1 string to match.
        if (memcmp(Name.data()+2, "eserve_access_index", 19) != 0)
          break;
        return AttributeCommonInfo::AT_BPFPreserveAccessIndex;	 // "preserve_access_index"
      }
      break;
    case 's':	 // 3 strings to match.
      switch (Name[1]) {
      default: break;
      case 'h':	 // 1 string to match.
        if (memcmp(Name.data()+2, "ared_locks_required", 19) != 0)
          break;
        return AttributeCommonInfo::AT_RequiresCapability;	 // "shared_locks_required"
      case 'w':	 // 2 strings to match.
        if (memcmp(Name.data()+2, "ift_", 4) != 0)
          break;
        switch (Name[6]) {
        default: break;
        case 'b':	 // 1 string to match.
          if (memcmp(Name.data()+7, "ridged_typedef", 14) != 0)
            break;
          return AttributeCommonInfo::AT_SwiftBridgedTypedef;	 // "swift_bridged_typedef"
        case 'i':	 // 1 string to match.
          if (memcmp(Name.data()+7, "ndirect_result", 14) != 0)
            break;
          return AttributeCommonInfo::AT_SwiftIndirectResult;	 // "swift_indirect_result"
        }
        break;
      }
      break;
    case 't':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ype_tag_for_datatype", 20) != 0)
        break;
      return AttributeCommonInfo::AT_TypeTagForDatatype;	 // "type_tag_for_datatype"
    case 'x':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ray_never_instrument", 20) != 0)
        break;
      return AttributeCommonInfo::AT_XRayInstrument;	 // "xray_never_instrument"
    }
    break;
  case 22:	 // 6 strings to match.
    switch (Name[0]) {
    default: break;
    case 'a':	 // 1 string to match.
      if (memcmp(Name.data()+1, "rgument_with_type_tag", 21) != 0)
        break;
      return AttributeCommonInfo::AT_ArgumentWithTypeTag;	 // "argument_with_type_tag"
    case 'e':	 // 1 string to match.
      if (memcmp(Name.data()+1, "xternal_source_symbol", 21) != 0)
        break;
      return AttributeCommonInfo::AT_ExternalSourceSymbol;	 // "external_source_symbol"
    case 'n':	 // 1 string to match.
      if (memcmp(Name.data()+1, "o_instrument_function", 21) != 0)
        break;
      return AttributeCommonInfo::AT_NoInstrumentFunction;	 // "no_instrument_function"
    case 'o':	 // 1 string to match.
      if (memcmp(Name.data()+1, "bjc_independent_class", 21) != 0)
        break;
      return AttributeCommonInfo::AT_ObjCIndependentClass;	 // "objc_independent_class"
    case 't':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ry_acquire_capability", 21) != 0)
        break;
      return AttributeCommonInfo::AT_TryAcquireCapability;	 // "try_acquire_capability"
    case 'x':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ray_always_instrument", 21) != 0)
        break;
      return AttributeCommonInfo::AT_XRayInstrument;	 // "xray_always_instrument"
    }
    break;
  case 23:	 // 7 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 1 string to match.
      if (memcmp(Name.data()+1, "f_returns_not_retained", 22) != 0)
        break;
      return AttributeCommonInfo::AT_CFReturnsNotRetained;	 // "cf_returns_not_retained"
    case 'e':	 // 1 string to match.
      if (memcmp(Name.data()+1, "xclusive_lock_function", 22) != 0)
        break;
      return AttributeCommonInfo::AT_AcquireCapability;	 // "exclusive_lock_function"
    case 'f':	 // 1 string to match.
      if (memcmp(Name.data()+1, "orce_align_arg_pointer", 22) != 0)
        break;
      return AttributeCommonInfo::AT_X86ForceAlignArgPointer;	 // "force_align_arg_pointer"
    case 'n':	 // 2 strings to match.
      if (memcmp(Name.data()+1, "s_returns_", 10) != 0)
        break;
      switch (Name[11]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+12, "utoreleased", 11) != 0)
          break;
        return AttributeCommonInfo::AT_NSReturnsAutoreleased;	 // "ns_returns_autoreleased"
      case 'n':	 // 1 string to match.
        if (memcmp(Name.data()+12, "ot_retained", 11) != 0)
          break;
        return AttributeCommonInfo::AT_NSReturnsNotRetained;	 // "ns_returns_not_retained"
      }
      break;
    case 'o':	 // 1 string to match.
      if (memcmp(Name.data()+1, "s_returns_not_retained", 22) != 0)
        break;
      return AttributeCommonInfo::AT_OSReturnsNotRetained;	 // "os_returns_not_retained"
    case 's':	 // 1 string to match.
      if (memcmp(Name.data()+1, "hared_trylock_function", 22) != 0)
        break;
      return AttributeCommonInfo::AT_SharedTrylockFunction;	 // "shared_trylock_function"
    }
    break;
  case 24:	 // 6 strings to match.
    switch (Name[0]) {
    default: break;
    case 'a':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ssert_shared_capability", 23) != 0)
        break;
      return AttributeCommonInfo::AT_AssertCapability;	 // "assert_shared_capability"
    case 'c':	 // 1 string to match.
      if (memcmp(Name.data()+1, "fi_canonical_jump_table", 23) != 0)
        break;
      return AttributeCommonInfo::AT_CFICanonicalJumpTable;	 // "cfi_canonical_jump_table"
    case 'e':	 // 1 string to match.
      if (memcmp(Name.data()+1, "xclusive_locks_required", 23) != 0)
        break;
      return AttributeCommonInfo::AT_RequiresCapability;	 // "exclusive_locks_required"
    case 'o':	 // 1 string to match.
      if (memcmp(Name.data()+1, "bjc_externally_retained", 23) != 0)
        break;
      return AttributeCommonInfo::AT_ObjCExternallyRetained;	 // "objc_externally_retained"
    case 'p':	 // 2 strings to match.
      if (Name[1] != 'a')
        break;
      switch (Name[2]) {
      default: break;
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+3, "s_dynamic_object_size", 21) != 0)
          break;
        return AttributeCommonInfo::AT_PassObjectSize;	 // "pass_dynamic_object_size"
      case 't':	 // 1 string to match.
        if (memcmp(Name.data()+3, "chable_function_entry", 21) != 0)
          break;
        return AttributeCommonInfo::AT_PatchableFunctionEntry;	 // "patchable_function_entry"
      }
      break;
    }
    break;
  case 25:	 // 7 strings to match.
    switch (Name[0]) {
    default: break;
    case '_':	 // 1 string to match.
      if (memcmp(Name.data()+1, "_clang_arm_builtin_alias", 24) != 0)
        break;
      return AttributeCommonInfo::AT_ArmBuiltinAlias;	 // "__clang_arm_builtin_alias"
    case 'a':	 // 1 string to match.
      if (memcmp(Name.data()+1, "cquire_shared_capability", 24) != 0)
        break;
      return AttributeCommonInfo::AT_AcquireCapability;	 // "acquire_shared_capability"
    case 'i':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ntel_reqd_sub_group_size", 24) != 0)
        break;
      return AttributeCommonInfo::AT_OpenCLIntelReqdSubGroupSize;	 // "intel_reqd_sub_group_size"
    case 'n':	 // 2 strings to match.
      if (memcmp(Name.data()+1, "o_", 2) != 0)
        break;
      switch (Name[3]) {
      default: break;
      case 'c':	 // 1 string to match.
        if (memcmp(Name.data()+4, "aller_saved_registers", 21) != 0)
          break;
        return AttributeCommonInfo::AT_AnyX86NoCallerSavedRegisters;	 // "no_caller_saved_registers"
      case 't':	 // 1 string to match.
        if (memcmp(Name.data()+4, "hread_safety_analysis", 21) != 0)
          break;
        return AttributeCommonInfo::AT_NoThreadSafetyAnalysis;	 // "no_thread_safety_analysis"
      }
      break;
    case 'o':	 // 1 string to match.
      if (memcmp(Name.data()+1, "bjc_non_runtime_protocol", 24) != 0)
        break;
      return AttributeCommonInfo::AT_ObjCNonRuntimeProtocol;	 // "objc_non_runtime_protocol"
    case 'r':	 // 1 string to match.
      if (memcmp(Name.data()+1, "elease_shared_capability", 24) != 0)
        break;
      return AttributeCommonInfo::AT_ReleaseCapability;	 // "release_shared_capability"
    }
    break;
  case 26:	 // 7 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 1 string to match.
      if (memcmp(Name.data()+1, "onsumable_auto_cast_state", 25) != 0)
        break;
      return AttributeCommonInfo::AT_ConsumableAutoCast;	 // "consumable_auto_cast_state"
    case 'e':	 // 1 string to match.
      if (memcmp(Name.data()+1, "xclusive_trylock_function", 25) != 0)
        break;
      return AttributeCommonInfo::AT_ExclusiveTrylockFunction;	 // "exclusive_trylock_function"
    case 'n':	 // 1 string to match.
      if (memcmp(Name.data()+1, "o_address_safety_analysis", 25) != 0)
        break;
      return AttributeCommonInfo::AT_NoSanitizeSpecific;	 // "no_address_safety_analysis"
    case 'o':	 // 1 string to match.
      if (memcmp(Name.data()+1, "bjc_returns_inner_pointer", 25) != 0)
        break;
      return AttributeCommonInfo::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) != 0)
          break;
        return AttributeCommonInfo::AT_ReleaseCapability;	 // "release_generic_capability"
      case 'q':	 // 1 string to match.
        if (memcmp(Name.data()+3, "uires_shared_capability", 23) != 0)
          break;
        return AttributeCommonInfo::AT_RequiresCapability;	 // "requires_shared_capability"
      }
      break;
    case 's':	 // 1 string to match.
      if (memcmp(Name.data()+1, "peculative_load_hardening", 25) != 0)
        break;
      return AttributeCommonInfo::AT_SpeculativeLoadHardening;	 // "speculative_load_hardening"
    }
    break;
  case 27:	 // 6 strings to match.
    switch (Name[0]) {
    default: break;
    case 'a':	 // 1 string to match.
      if (memcmp(Name.data()+1, "mdgpu_flat_work_group_size", 26) != 0)
        break;
      return AttributeCommonInfo::AT_AMDGPUFlatWorkGroupSize;	 // "amdgpu_flat_work_group_size"
    case 'd':	 // 2 strings to match.
      if (memcmp(Name.data()+1, "evice_builtin_", 14) != 0)
        break;
      switch (Name[15]) {
      default: break;
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+16, "urface_type", 11) != 0)
          break;
        return AttributeCommonInfo::AT_CUDADeviceBuiltinSurfaceType;	 // "device_builtin_surface_type"
      case 't':	 // 1 string to match.
        if (memcmp(Name.data()+16, "exture_type", 11) != 0)
          break;
        return AttributeCommonInfo::AT_CUDADeviceBuiltinTextureType;	 // "device_builtin_texture_type"
      }
      break;
    case 'o':	 // 3 strings to match.
      switch (Name[1]) {
      default: break;
      case 'b':	 // 2 strings to match.
        if (memcmp(Name.data()+2, "jc_", 3) != 0)
          break;
        switch (Name[5]) {
        default: break;
        case 'd':	 // 1 string to match.
          if (memcmp(Name.data()+6, "esignated_initializer", 21) != 0)
            break;
          return AttributeCommonInfo::AT_ObjCDesignatedInitializer;	 // "objc_designated_initializer"
        case 's':	 // 1 string to match.
          if (memcmp(Name.data()+6, "ubclassing_restricted", 21) != 0)
            break;
          return AttributeCommonInfo::AT_ObjCSubclassingRestricted;	 // "objc_subclassing_restricted"
        }
        break;
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+2, "_returns_retained_on_zero", 25) != 0)
          break;
        return AttributeCommonInfo::AT_OSReturnsRetainedOnZero;	 // "os_returns_retained_on_zero"
      }
      break;
    }
    break;
  case 28:	 // 1 string to match.
    if (memcmp(Name.data()+0, "consumable_set_state_on_read", 28) != 0)
      break;
    return AttributeCommonInfo::AT_ConsumableSetOnRead;	 // "consumable_set_state_on_read"
  case 29:	 // 2 strings to match.
    switch (Name[0]) {
    default: break;
    case 'n':	 // 1 string to match.
      if (memcmp(Name.data()+1, "o_speculative_load_hardening", 28) != 0)
        break;
      return AttributeCommonInfo::AT_NoSpeculativeLoadHardening;	 // "no_speculative_load_hardening"
    case 't':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ry_acquire_shared_capability", 28) != 0)
        break;
      return AttributeCommonInfo::AT_TryAcquireCapability;	 // "try_acquire_shared_capability"
    }
    break;
  case 30:	 // 1 string to match.
    if (memcmp(Name.data()+0, "no_profile_instrument_function", 30) != 0)
      break;
    return AttributeCommonInfo::AT_NoProfileFunction;	 // "no_profile_instrument_function"
  case 31:	 // 2 strings to match.
    switch (Name[0]) {
    default: break;
    case 'o':	 // 1 string to match.
      if (memcmp(Name.data()+1, "s_returns_retained_on_non_zero", 30) != 0)
        break;
      return AttributeCommonInfo::AT_OSReturnsRetainedOnNonZero;	 // "os_returns_retained_on_non_zero"
    case 'r':	 // 1 string to match.
      if (memcmp(Name.data()+1, "equire_constant_initialization", 30) != 0)
        break;
      return AttributeCommonInfo::AT_ConstInit;	 // "require_constant_initialization"
    }
    break;
  case 33:	 // 1 string to match.
    if (memcmp(Name.data()+0, "disable_sanitizer_instrumentation", 33) != 0)
      break;
    return AttributeCommonInfo::AT_DisableSanitizerInstrumentation;	 // "disable_sanitizer_instrumentation"
  case 34:	 // 1 string to match.
    if (memcmp(Name.data()+0, "objc_requires_property_definitions", 34) != 0)
      break;
    return AttributeCommonInfo::AT_ObjCRequiresPropertyDefs;	 // "objc_requires_property_definitions"
  case 35:	 // 3 strings to match.
    switch (Name[0]) {
    default: break;
    case '_':	 // 1 string to match.
      if (memcmp(Name.data()+1, "_clang_arm_mve_strict_polymorphism", 34) != 0)
        break;
      return AttributeCommonInfo::AT_ArmMveStrictPolymorphism;	 // "__clang_arm_mve_strict_polymorphism"
    case 'e':	 // 1 string to match.
      if (memcmp(Name.data()+1, "xclude_from_explicit_instantiation", 34) != 0)
        break;
      return AttributeCommonInfo::AT_ExcludeFromExplicitInstantiation;	 // "exclude_from_explicit_instantiation"
    case 'o':	 // 1 string to match.
      if (memcmp(Name.data()+1, "bjc_arc_weak_reference_unavailable", 34) != 0)
        break;
      return AttributeCommonInfo::AT_ArcWeakrefUnavailable;	 // "objc_arc_weak_reference_unavailable"
    }
    break;
  case 46:	 // 1 string to match.
    if (memcmp(Name.data()+0, "objc_protocol_requires_explicit_implementation", 46) != 0)
      break;
    return AttributeCommonInfo::AT_ObjCExplicitProtocolImpl;	 // "objc_protocol_requires_explicit_implementation"
  }
  } else if (AttributeCommonInfo::AS_Declspec == Syntax) {
  switch (Name.size()) {
  default: break;
  case 4:	 // 1 string to match.
    if (memcmp(Name.data()+0, "uuid", 4) != 0)
      break;
    return AttributeCommonInfo::AT_Uuid;	 // "uuid"
  case 5:	 // 3 strings to match.
    switch (Name[0]) {
    default: break;
    case 'a':	 // 1 string to match.
      if (memcmp(Name.data()+1, "lign", 4) != 0)
        break;
      return AttributeCommonInfo::AT_Aligned;	 // "align"
    case 'g':	 // 1 string to match.
      if (memcmp(Name.data()+1, "uard", 4) != 0)
        break;
      return AttributeCommonInfo::AT_CFGuard;	 // "guard"
    case 'n':	 // 1 string to match.
      if (memcmp(Name.data()+1, "aked", 4) != 0)
        break;
      return AttributeCommonInfo::AT_Naked;	 // "naked"
    }
    break;
  case 6:	 // 1 string to match.
    if (memcmp(Name.data()+0, "thread", 6) != 0)
      break;
    return AttributeCommonInfo::AT_Thread;	 // "thread"
  case 7:	 // 2 strings to match.
    if (memcmp(Name.data()+0, "no", 2) != 0)
      break;
    switch (Name[2]) {
    default: break;
    case 'a':	 // 1 string to match.
      if (memcmp(Name.data()+3, "lias", 4) != 0)
        break;
      return AttributeCommonInfo::AT_NoAlias;	 // "noalias"
    case 't':	 // 1 string to match.
      if (memcmp(Name.data()+3, "hrow", 4) != 0)
        break;
      return AttributeCommonInfo::AT_NoThrow;	 // "nothrow"
    }
    break;
  case 8:	 // 8 strings to match.
    switch (Name[0]) {
    default: break;
    case '_':	 // 1 string to match.
      if (memcmp(Name.data()+1, "_host__", 7) != 0)
        break;
      return AttributeCommonInfo::AT_CUDAHost;	 // "__host__"
    case 'a':	 // 1 string to match.
      if (memcmp(Name.data()+1, "llocate", 7) != 0)
        break;
      return AttributeCommonInfo::AT_Section;	 // "allocate"
    case 'c':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ode_seg", 7) != 0)
        break;
      return AttributeCommonInfo::AT_CodeSeg;	 // "code_seg"
    case 'n':	 // 3 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) != 0)
          break;
        return AttributeCommonInfo::AT_NoInline;	 // "noinline"
      case 'r':	 // 1 string to match.
        if (memcmp(Name.data()+3, "eturn", 5) != 0)
          break;
        return AttributeCommonInfo::AT_NoReturn;	 // "noreturn"
      case 'v':	 // 1 string to match.
        if (memcmp(Name.data()+3, "table", 5) != 0)
          break;
        return AttributeCommonInfo::AT_MSNoVTable;	 // "novtable"
      }
      break;
    case 'p':	 // 1 string to match.
      if (memcmp(Name.data()+1, "roperty", 7) != 0)
        break;
      return AttributeCommonInfo::IgnoredAttribute;	 // "property"
    case 'r':	 // 1 string to match.
      if (memcmp(Name.data()+1, "estrict", 7) != 0)
        break;
      return AttributeCommonInfo::AT_Restrict;	 // "restrict"
    }
    break;
  case 9:	 // 4 strings to match.
    switch (Name[0]) {
    default: break;
    case 'a':	 // 1 string to match.
      if (memcmp(Name.data()+1, "llocator", 8) != 0)
        break;
      return AttributeCommonInfo::AT_MSAllocator;	 // "allocator"
    case 'd':	 // 2 strings to match.
      if (memcmp(Name.data()+1, "ll", 2) != 0)
        break;
      switch (Name[3]) {
      default: break;
      case 'e':	 // 1 string to match.
        if (memcmp(Name.data()+4, "xport", 5) != 0)
          break;
        return AttributeCommonInfo::AT_DLLExport;	 // "dllexport"
      case 'i':	 // 1 string to match.
        if (memcmp(Name.data()+4, "mport", 5) != 0)
          break;
        return AttributeCommonInfo::AT_DLLImport;	 // "dllimport"
      }
      break;
    case 's':	 // 1 string to match.
      if (memcmp(Name.data()+1, "electany", 8) != 0)
        break;
      return AttributeCommonInfo::AT_SelectAny;	 // "selectany"
    }
    break;
  case 10:	 // 4 strings to match.
    switch (Name[0]) {
    default: break;
    case '_':	 // 3 strings to match.
      if (Name[1] != '_')
        break;
      switch (Name[2]) {
      default: break;
      case 'd':	 // 1 string to match.
        if (memcmp(Name.data()+3, "evice__", 7) != 0)
          break;
        return AttributeCommonInfo::AT_CUDADevice;	 // "__device__"
      case 'g':	 // 1 string to match.
        if (memcmp(Name.data()+3, "lobal__", 7) != 0)
          break;
        return AttributeCommonInfo::AT_CUDAGlobal;	 // "__global__"
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+3, "hared__", 7) != 0)
          break;
        return AttributeCommonInfo::AT_CUDAShared;	 // "__shared__"
      }
      break;
    case 'd':	 // 1 string to match.
      if (memcmp(Name.data()+1, "eprecated", 9) != 0)
        break;
      return AttributeCommonInfo::AT_Deprecated;	 // "deprecated"
    }
    break;
  case 11:	 // 3 strings to match.
    switch (Name[0]) {
    default: break;
    case '_':	 // 1 string to match.
      if (memcmp(Name.data()+1, "_managed__", 10) != 0)
        break;
      return AttributeCommonInfo::AT_HIPManaged;	 // "__managed__"
    case 'e':	 // 1 string to match.
      if (memcmp(Name.data()+1, "mpty_bases", 10) != 0)
        break;
      return AttributeCommonInfo::AT_EmptyBases;	 // "empty_bases"
    case 's':	 // 1 string to match.
      if (memcmp(Name.data()+1, "afebuffers", 10) != 0)
        break;
      return AttributeCommonInfo::AT_NoStackProtector;	 // "safebuffers"
    }
    break;
  case 12:	 // 3 strings to match.
    switch (Name[0]) {
    default: break;
    case '_':	 // 1 string to match.
      if (memcmp(Name.data()+1, "_constant__", 11) != 0)
        break;
      return AttributeCommonInfo::AT_CUDAConstant;	 // "__constant__"
    case 'c':	 // 2 strings to match.
      if (memcmp(Name.data()+1, "pu_", 3) != 0)
        break;
      switch (Name[4]) {
      default: break;
      case 'd':	 // 1 string to match.
        if (memcmp(Name.data()+5, "ispatch", 7) != 0)
          break;
        return AttributeCommonInfo::AT_CPUDispatch;	 // "cpu_dispatch"
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+5, "pecific", 7) != 0)
          break;
        return AttributeCommonInfo::AT_CPUSpecific;	 // "cpu_specific"
      }
      break;
    }
    break;
  case 14:	 // 1 string to match.
    if (memcmp(Name.data()+0, "layout_version", 14) != 0)
      break;
    return AttributeCommonInfo::AT_LayoutVersion;	 // "layout_version"
  case 15:	 // 1 string to match.
    if (memcmp(Name.data()+0, "strict_gs_check", 15) != 0)
      break;
    return AttributeCommonInfo::AT_StrictGuardStackCheck;	 // "strict_gs_check"
  case 17:	 // 1 string to match.
    if (memcmp(Name.data()+0, "__launch_bounds__", 17) != 0)
      break;
    return AttributeCommonInfo::AT_CUDALaunchBounds;	 // "__launch_bounds__"
  case 18:	 // 2 strings to match.
    if (memcmp(Name.data()+0, "__", 2) != 0)
      break;
    switch (Name[2]) {
    default: break;
    case 'c':	 // 1 string to match.
      if (memcmp(Name.data()+3, "udart_builtin__", 15) != 0)
        break;
      return AttributeCommonInfo::IgnoredAttribute;	 // "__cudart_builtin__"
    case 'd':	 // 1 string to match.
      if (memcmp(Name.data()+3, "evice_builtin__", 15) != 0)
        break;
      return AttributeCommonInfo::IgnoredAttribute;	 // "__device_builtin__"
    }
    break;
  case 31:	 // 2 strings to match.
    if (memcmp(Name.data()+0, "__device_builtin_", 17) != 0)
      break;
    switch (Name[17]) {
    default: break;
    case 's':	 // 1 string to match.
      if (memcmp(Name.data()+18, "urface_type__", 13) != 0)
        break;
      return AttributeCommonInfo::AT_CUDADeviceBuiltinSurfaceType;	 // "__device_builtin_surface_type__"
    case 't':	 // 1 string to match.
      if (memcmp(Name.data()+18, "exture_type__", 13) != 0)
        break;
      return AttributeCommonInfo::AT_CUDADeviceBuiltinTextureType;	 // "__device_builtin_texture_type__"
    }
    break;
  }
  } else if (AttributeCommonInfo::AS_Microsoft == Syntax) {
  switch (Name.size()) {
  default: break;
  case 4:	 // 1 string to match.
    if (memcmp(Name.data()+0, "uuid", 4) != 0)
      break;
    return AttributeCommonInfo::AT_Uuid;	 // "uuid"
  case 6:	 // 1 string to match.
    if (memcmp(Name.data()+0, "shader", 6) != 0)
      break;
    return AttributeCommonInfo::AT_HLSLShader;	 // "shader"
  case 10:	 // 1 string to match.
    if (memcmp(Name.data()+0, "numthreads", 10) != 0)
      break;
    return AttributeCommonInfo::AT_HLSLNumThreads;	 // "numthreads"
  }
  } else if (AttributeCommonInfo::AS_CXX11 == Syntax) {
  switch (Name.size()) {
  default: break;
  case 6:	 // 1 string to match.
    if (memcmp(Name.data()+0, "likely", 6) != 0)
      break;
    return AttributeCommonInfo::AT_Likely;	 // "likely"
  case 8:	 // 5 strings to match.
    switch (Name[0]) {
    default: break;
    case 'g':	 // 3 strings to match.
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
        break;
      switch (Name[5]) {
      default: break;
      case 'f':	 // 1 string to match.
        if (memcmp(Name.data()+6, "ar", 2) != 0)
          break;
        return AttributeCommonInfo::AT_MipsLongCall;	 // "gnu::far"
      case 'h':	 // 1 string to match.
        if (memcmp(Name.data()+6, "ot", 2) != 0)
          break;
        return AttributeCommonInfo::AT_Hot;	 // "gnu::hot"
      case 'p':	 // 1 string to match.
        if (memcmp(Name.data()+6, "cs", 2) != 0)
          break;
        return AttributeCommonInfo::AT_Pcs;	 // "gnu::pcs"
      }
      break;
    case 'n':	 // 1 string to match.
      if (memcmp(Name.data()+1, "oreturn", 7) != 0)
        break;
      return AttributeCommonInfo::AT_CXX11NoReturn;	 // "noreturn"
    case 'u':	 // 1 string to match.
      if (memcmp(Name.data()+1, "nlikely", 7) != 0)
        break;
      return AttributeCommonInfo::AT_Unlikely;	 // "unlikely"
    }
    break;
  case 9:	 // 8 strings to match.
    switch (Name[0]) {
    default: break;
    case 'g':	 // 7 strings to match.
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
        break;
      switch (Name[5]) {
      default: break;
      case 'c':	 // 1 string to match.
        if (memcmp(Name.data()+6, "old", 3) != 0)
          break;
        return AttributeCommonInfo::AT_Cold;	 // "gnu::cold"
      case 'l':	 // 1 string to match.
        if (memcmp(Name.data()+6, "eaf", 3) != 0)
          break;
        return AttributeCommonInfo::AT_Leaf;	 // "gnu::leaf"
      case 'm':	 // 1 string to match.
        if (memcmp(Name.data()+6, "ode", 3) != 0)
          break;
        return AttributeCommonInfo::AT_Mode;	 // "gnu::mode"
      case 'n':	 // 1 string to match.
        if (memcmp(Name.data()+6, "ear", 3) != 0)
          break;
        return AttributeCommonInfo::AT_MipsShortCall;	 // "gnu::near"
      case 'p':	 // 1 string to match.
        if (memcmp(Name.data()+6, "ure", 3) != 0)
          break;
        return AttributeCommonInfo::AT_Pure;	 // "gnu::pure"
      case 'u':	 // 1 string to match.
        if (memcmp(Name.data()+6, "sed", 3) != 0)
          break;
        return AttributeCommonInfo::AT_Used;	 // "gnu::used"
      case 'w':	 // 1 string to match.
        if (memcmp(Name.data()+6, "eak", 3) != 0)
          break;
        return AttributeCommonInfo::AT_Weak;	 // "gnu::weak"
      }
      break;
    case 'n':	 // 1 string to match.
      if (memcmp(Name.data()+1, "odiscard", 8) != 0)
        break;
      return AttributeCommonInfo::AT_WarnUnusedResult;	 // "nodiscard"
    }
    break;
  case 10:	 // 8 strings to match.
    switch (Name[0]) {
    default: break;
    case 'd':	 // 1 string to match.
      if (memcmp(Name.data()+1, "eprecated", 9) != 0)
        break;
      return AttributeCommonInfo::AT_Deprecated;	 // "deprecated"
    case 'g':	 // 7 strings to match.
      switch (Name[1]) {
      default: break;
      case 'n':	 // 6 strings to match.
        if (memcmp(Name.data()+2, "u::", 3) != 0)
          break;
        switch (Name[5]) {
        default: break;
        case 'a':	 // 1 string to match.
          if (memcmp(Name.data()+6, "lias", 4) != 0)
            break;
          return AttributeCommonInfo::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) != 0)
              break;
            return AttributeCommonInfo::AT_CDecl;	 // "gnu::cdecl"
          case 'o':	 // 1 string to match.
            if (memcmp(Name.data()+7, "nst", 3) != 0)
              break;
            return AttributeCommonInfo::AT_Const;	 // "gnu::const"
          }
          break;
        case 'e':	 // 1 string to match.
          if (memcmp(Name.data()+6, "rror", 4) != 0)
            break;
          return AttributeCommonInfo::AT_Error;	 // "gnu::error"
        case 'i':	 // 1 string to match.
          if (memcmp(Name.data()+6, "func", 4) != 0)
            break;
          return AttributeCommonInfo::AT_IFunc;	 // "gnu::ifunc"
        case 'n':	 // 1 string to match.
          if (memcmp(Name.data()+6, "aked", 4) != 0)
            break;
          return AttributeCommonInfo::AT_Naked;	 // "gnu::naked"
        }
        break;
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+2, "l::Owner", 8) != 0)
          break;
        return AttributeCommonInfo::AT_Owner;	 // "gsl::Owner"
      }
      break;
    }
    break;
  case 11:	 // 11 strings to match.
    switch (Name[0]) {
    default: break;
    case 'f':	 // 1 string to match.
      if (memcmp(Name.data()+1, "allthrough", 10) != 0)
        break;
      return AttributeCommonInfo::AT_FallThrough;	 // "fallthrough"
    case 'g':	 // 10 strings to match.
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
        break;
      switch (Name[5]) {
      default: break;
      case 'c':	 // 1 string to match.
        if (memcmp(Name.data()+6, "ommon", 5) != 0)
          break;
        return AttributeCommonInfo::AT_Common;	 // "gnu::common"
      case 'f':	 // 1 string to match.
        if (memcmp(Name.data()+6, "ormat", 5) != 0)
          break;
        return AttributeCommonInfo::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) != 0)
            break;
          return AttributeCommonInfo::AT_Restrict;	 // "gnu::malloc"
        case 'i':	 // 1 string to match.
          if (memcmp(Name.data()+7, "ps16", 4) != 0)
            break;
          return AttributeCommonInfo::AT_Mips16;	 // "gnu::mips16"
        case 's':	 // 1 string to match.
          if (memcmp(Name.data()+7, "_abi", 4) != 0)
            break;
          return AttributeCommonInfo::AT_MSABI;	 // "gnu::ms_abi"
        }
        break;
      case 'p':	 // 1 string to match.
        if (memcmp(Name.data()+6, "acked", 5) != 0)
          break;
        return AttributeCommonInfo::AT_Packed;	 // "gnu::packed"
      case 'r':	 // 1 string to match.
        if (memcmp(Name.data()+6, "etain", 5) != 0)
          break;
        return AttributeCommonInfo::AT_Retain;	 // "gnu::retain"
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+6, "ignal", 5) != 0)
          break;
        return AttributeCommonInfo::AT_AVRSignal;	 // "gnu::signal"
      case 't':	 // 1 string to match.
        if (memcmp(Name.data()+6, "arget", 5) != 0)
          break;
        return AttributeCommonInfo::AT_Target;	 // "gnu::target"
      case 'u':	 // 1 string to match.
        if (memcmp(Name.data()+6, "nused", 5) != 0)
          break;
        return AttributeCommonInfo::AT_Unused;	 // "gnu::unused"
      }
      break;
    }
    break;
  case 12:	 // 17 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 1 string to match.
      if (memcmp(Name.data()+1, "lang::guard", 11) != 0)
        break;
      return AttributeCommonInfo::AT_CFGuard;	 // "clang::guard"
    case 'g':	 // 15 strings to match.
      switch (Name[1]) {
      default: break;
      case 'n':	 // 14 strings to match.
        if (memcmp(Name.data()+2, "u::", 3) != 0)
          break;
        switch (Name[5]) {
        default: break;
        case '_':	 // 1 string to match.
          if (memcmp(Name.data()+6, "_const", 6) != 0)
            break;
          return AttributeCommonInfo::AT_Const;	 // "gnu::__const"
        case 'a':	 // 2 strings to match.
          switch (Name[6]) {
          default: break;
          case 'b':	 // 1 string to match.
            if (memcmp(Name.data()+7, "i_tag", 5) != 0)
              break;
            return AttributeCommonInfo::AT_AbiTag;	 // "gnu::abi_tag"
          case 'l':	 // 1 string to match.
            if (memcmp(Name.data()+7, "igned", 5) != 0)
              break;
            return AttributeCommonInfo::AT_Aligned;	 // "gnu::aligned"
          }
          break;
        case 'c':	 // 1 string to match.
          if (memcmp(Name.data()+6, "leanup", 6) != 0)
            break;
          return AttributeCommonInfo::AT_Cleanup;	 // "gnu::cleanup"
        case 'f':	 // 1 string to match.
          if (memcmp(Name.data()+6, "latten", 6) != 0)
            break;
          return AttributeCommonInfo::AT_Flatten;	 // "gnu::flatten"
        case 'n':	 // 3 strings to match.
          if (Name[6] != 'o')
            break;
          switch (Name[7]) {
          default: break;
          case 'd':	 // 1 string to match.
            if (memcmp(Name.data()+8, "ebug", 4) != 0)
              break;
            return AttributeCommonInfo::AT_NoDebug;	 // "gnu::nodebug"
          case 'n':	 // 1 string to match.
            if (memcmp(Name.data()+8, "null", 4) != 0)
              break;
            return AttributeCommonInfo::AT_NonNull;	 // "gnu::nonnull"
          case 't':	 // 1 string to match.
            if (memcmp(Name.data()+8, "hrow", 4) != 0)
              break;
            return AttributeCommonInfo::AT_NoThrow;	 // "gnu::nothrow"
          }
          break;
        case 'r':	 // 2 strings to match.
          if (memcmp(Name.data()+6, "eg", 2) != 0)
            break;
          switch (Name[8]) {
          default: break;
          case 'c':	 // 1 string to match.
            if (memcmp(Name.data()+9, "all", 3) != 0)
              break;
            return AttributeCommonInfo::AT_RegCall;	 // "gnu::regcall"
          case 'p':	 // 1 string to match.
            if (memcmp(Name.data()+9, "arm", 3) != 0)
              break;
            return AttributeCommonInfo::AT_Regparm;	 // "gnu::regparm"
          }
          break;
        case 's':	 // 2 strings to match.
          switch (Name[6]) {
          default: break;
          case 'e':	 // 1 string to match.
            if (memcmp(Name.data()+7, "ction", 5) != 0)
              break;
            return AttributeCommonInfo::AT_Section;	 // "gnu::section"
          case 't':	 // 1 string to match.
            if (memcmp(Name.data()+7, "dcall", 5) != 0)
              break;
            return AttributeCommonInfo::AT_StdCall;	 // "gnu::stdcall"
          }
          break;
        case 'w':	 // 2 strings to match.
          switch (Name[6]) {
          default: break;
          case 'a':	 // 1 string to match.
            if (memcmp(Name.data()+7, "rning", 5) != 0)
              break;
            return AttributeCommonInfo::AT_Error;	 // "gnu::warning"
          case 'e':	 // 1 string to match.
            if (memcmp(Name.data()+7, "akref", 5) != 0)
              break;
            return AttributeCommonInfo::AT_WeakRef;	 // "gnu::weakref"
          }
          break;
        }
        break;
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+2, "l::Pointer", 10) != 0)
          break;
        return AttributeCommonInfo::AT_Pointer;	 // "gsl::Pointer"
      }
      break;
    case 'm':	 // 1 string to match.
      if (memcmp(Name.data()+1, "aybe_unused", 11) != 0)
        break;
      return AttributeCommonInfo::AT_Unused;	 // "maybe_unused"
    }
    break;
  case 13:	 // 12 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 3 strings to match.
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
        break;
      switch (Name[7]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+8, "ssume", 5) != 0)
          break;
        return AttributeCommonInfo::AT_Assumption;	 // "clang::assume"
      case 'b':	 // 1 string to match.
        if (memcmp(Name.data()+8, "locks", 5) != 0)
          break;
        return AttributeCommonInfo::AT_Blocks;	 // "clang::blocks"
      case 'p':	 // 1 string to match.
        if (memcmp(Name.data()+8, "ascal", 5) != 0)
          break;
        return AttributeCommonInfo::AT_Pascal;	 // "clang::pascal"
      }
      break;
    case 'g':	 // 9 strings to match.
      switch (Name[1]) {
      default: break;
      case 'n':	 // 8 strings to match.
        if (memcmp(Name.data()+2, "u::", 3) != 0)
          break;
        switch (Name[5]) {
        default: break;
        case 'f':	 // 1 string to match.
          if (memcmp(Name.data()+6, "astcall", 7) != 0)
            break;
          return AttributeCommonInfo::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) != 0)
              break;
            return AttributeCommonInfo::AT_NoCommon;	 // "gnu::nocommon"
          case 'i':	 // 1 string to match.
            if (memcmp(Name.data()+8, "nline", 5) != 0)
              break;
            return AttributeCommonInfo::AT_NoInline;	 // "gnu::noinline"
          case 'm':	 // 1 string to match.
            if (memcmp(Name.data()+8, "ips16", 5) != 0)
              break;
            return AttributeCommonInfo::AT_NoMips16;	 // "gnu::nomips16"
          case 'r':	 // 1 string to match.
            if (memcmp(Name.data()+8, "eturn", 5) != 0)
              break;
            return AttributeCommonInfo::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) != 0)
              break;
            return AttributeCommonInfo::AT_Sentinel;	 // "gnu::sentinel"
          case 'y':	 // 1 string to match.
            if (memcmp(Name.data()+7, "sv_abi", 6) != 0)
              break;
            return AttributeCommonInfo::AT_SysVABI;	 // "gnu::sysv_abi"
          }
          break;
        case 't':	 // 1 string to match.
          if (memcmp(Name.data()+6, "hiscall", 7) != 0)
            break;
          return AttributeCommonInfo::AT_ThisCall;	 // "gnu::thiscall"
        }
        break;
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+2, "l::suppress", 11) != 0)
          break;
        return AttributeCommonInfo::AT_Suppress;	 // "gsl::suppress"
      }
      break;
    }
    break;
  case 14:	 // 14 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 5 strings to match.
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
        break;
      switch (Name[7]) {
      default: break;
      case 'm':	 // 1 string to match.
        if (memcmp(Name.data()+8, "insize", 6) != 0)
          break;
        return AttributeCommonInfo::AT_MinSize;	 // "clang::minsize"
      case 'n':	 // 2 strings to match.
        if (Name[8] != 'o')
          break;
        switch (Name[9]) {
        default: break;
        case 'd':	 // 1 string to match.
          if (memcmp(Name.data()+10, "eref", 4) != 0)
            break;
          return AttributeCommonInfo::AT_NoDeref;	 // "clang::noderef"
        case 'm':	 // 1 string to match.
          if (memcmp(Name.data()+10, "erge", 4) != 0)
            break;
          return AttributeCommonInfo::AT_NoMerge;	 // "clang::nomerge"
        }
        break;
      case 'o':	 // 2 strings to match.
        switch (Name[8]) {
        default: break;
        case 'b':	 // 1 string to match.
          if (memcmp(Name.data()+9, "jc_gc", 5) != 0)
            break;
          return AttributeCommonInfo::AT_ObjCGC;	 // "clang::objc_gc"
        case 'p':	 // 1 string to match.
          if (memcmp(Name.data()+9, "tnone", 5) != 0)
            break;
          return AttributeCommonInfo::AT_OptimizeNone;	 // "clang::optnone"
        }
        break;
      }
      break;
    case 'g':	 // 9 strings to match.
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
        break;
      switch (Name[5]) {
      default: break;
      case 'd':	 // 2 strings to match.
        if (memcmp(Name.data()+6, "ll", 2) != 0)
          break;
        switch (Name[8]) {
        default: break;
        case 'e':	 // 1 string to match.
          if (memcmp(Name.data()+9, "xport", 5) != 0)
            break;
          return AttributeCommonInfo::AT_DLLExport;	 // "gnu::dllexport"
        case 'i':	 // 1 string to match.
          if (memcmp(Name.data()+9, "mport", 5) != 0)
            break;
          return AttributeCommonInfo::AT_DLLImport;	 // "gnu::dllimport"
        }
        break;
      case 'i':	 // 1 string to match.
        if (memcmp(Name.data()+6, "nterrupt", 8) != 0)
          break;
        return AttributeCommonInfo::AT_Interrupt;	 // "gnu::interrupt"
      case 'l':	 // 1 string to match.
        if (memcmp(Name.data()+6, "ong_call", 8) != 0)
          break;
        return AttributeCommonInfo::AT_MipsLongCall;	 // "gnu::long_call"
      case 'm':	 // 3 strings to match.
        switch (Name[6]) {
        default: break;
        case 'a':	 // 1 string to match.
          if (memcmp(Name.data()+7, "y_alias", 7) != 0)
            break;
          return AttributeCommonInfo::AT_MayAlias;	 // "gnu::may_alias"
        case 'i':	 // 1 string to match.
          if (memcmp(Name.data()+7, "cromips", 7) != 0)
            break;
          return AttributeCommonInfo::AT_MicroMips;	 // "gnu::micromips"
        case 's':	 // 1 string to match.
          if (memcmp(Name.data()+7, "_struct", 7) != 0)
            break;
          return AttributeCommonInfo::AT_MSStruct;	 // "gnu::ms_struct"
        }
        break;
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+6, "electany", 8) != 0)
          break;
        return AttributeCommonInfo::AT_SelectAny;	 // "gnu::selectany"
      case 't':	 // 1 string to match.
        if (memcmp(Name.data()+6, "ls_model", 8) != 0)
          break;
        return AttributeCommonInfo::AT_TLSModel;	 // "gnu::tls_model"
      }
      break;
    }
    break;
  case 15:	 // 17 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 8 strings to match.
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
        break;
      switch (Name[7]) {
      default: break;
      case 'N':	 // 1 string to match.
        if (memcmp(Name.data()+8, "SObject", 7) != 0)
          break;
        return AttributeCommonInfo::AT_ObjCNSObject;	 // "clang::NSObject"
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+8, "nnotate", 7) != 0)
          break;
        return AttributeCommonInfo::AT_Annotate;	 // "clang::annotate"
      case 'c':	 // 1 string to match.
        if (memcmp(Name.data()+8, "allback", 7) != 0)
          break;
        return AttributeCommonInfo::AT_Callback;	 // "clang::callback"
      case 'i':	 // 2 strings to match.
        if (Name[8] != 'b')
          break;
        switch (Name[9]) {
        default: break;
        case 'a':	 // 1 string to match.
          if (memcmp(Name.data()+10, "ction", 5) != 0)
            break;
          return AttributeCommonInfo::AT_IBAction;	 // "clang::ibaction"
        case 'o':	 // 1 string to match.
          if (memcmp(Name.data()+10, "utlet", 5) != 0)
            break;
          return AttributeCommonInfo::AT_IBOutlet;	 // "clang::iboutlet"
        }
        break;
      case 'm':	 // 1 string to match.
        if (memcmp(Name.data()+8, "usttail", 7) != 0)
          break;
        return AttributeCommonInfo::AT_MustTail;	 // "clang::musttail"
      case 'n':	 // 2 strings to match.
        if (Name[8] != 'o')
          break;
        switch (Name[9]) {
        default: break;
        case 'e':	 // 1 string to match.
          if (memcmp(Name.data()+10, "scape", 5) != 0)
            break;
          return AttributeCommonInfo::AT_NoEscape;	 // "clang::noescape"
        case 'i':	 // 1 string to match.
          if (memcmp(Name.data()+10, "nline", 5) != 0)
            break;
          return AttributeCommonInfo::AT_NoInline;	 // "clang::noinline"
        }
        break;
      }
      break;
    case 'g':	 // 9 strings to match.
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
        break;
      switch (Name[5]) {
      default: break;
      case 'a':	 // 2 strings to match.
        switch (Name[6]) {
        default: break;
        case 'l':	 // 1 string to match.
          if (memcmp(Name.data()+7, "loc_size", 8) != 0)
            break;
          return AttributeCommonInfo::AT_AllocSize;	 // "gnu::alloc_size"
        case 'r':	 // 1 string to match.
          if (memcmp(Name.data()+7, "tificial", 8) != 0)
            break;
          return AttributeCommonInfo::AT_Artificial;	 // "gnu::artificial"
        }
        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) != 0)
            break;
          return AttributeCommonInfo::AT_Deprecated;	 // "gnu::deprecated"
        case 's':	 // 1 string to match.
          if (memcmp(Name.data()+8, "tructor", 7) != 0)
            break;
          return AttributeCommonInfo::AT_Destructor;	 // "gnu::destructor"
        }
        break;
      case 'f':	 // 1 string to match.
        if (memcmp(Name.data()+6, "ormat_arg", 9) != 0)
          break;
        return AttributeCommonInfo::AT_FormatArg;	 // "gnu::format_arg"
      case 'g':	 // 1 string to match.
        if (memcmp(Name.data()+6, "nu_inline", 9) != 0)
          break;
        return AttributeCommonInfo::AT_GNUInline;	 // "gnu::gnu_inline"
      case 'n':	 // 1 string to match.
        if (memcmp(Name.data()+6, "ocf_check", 9) != 0)
          break;
        return AttributeCommonInfo::AT_AnyX86NoCfCheck;	 // "gnu::nocf_check"
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+6, "hort_call", 9) != 0)
          break;
        return AttributeCommonInfo::AT_MipsShortCall;	 // "gnu::short_call"
      case 'v':	 // 1 string to match.
        if (memcmp(Name.data()+6, "isibility", 9) != 0)
          break;
        return AttributeCommonInfo::AT_Visibility;	 // "gnu::visibility"
      }
      break;
    }
    break;
  case 16:	 // 10 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 4 strings to match.
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
        break;
      switch (Name[7]) {
      default: break;
      case 'f':	 // 1 string to match.
        if (memcmp(Name.data()+8, "lag_enum", 8) != 0)
          break;
        return AttributeCommonInfo::AT_FlagEnum;	 // "clang::flag_enum"
      case 'n':	 // 1 string to match.
        if (memcmp(Name.data()+8, "ouwtable", 8) != 0)
          break;
        return AttributeCommonInfo::AT_NoUwtable;	 // "clang::nouwtable"
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+8, "wiftcall", 8) != 0)
          break;
        return AttributeCommonInfo::AT_SwiftCall;	 // "clang::swiftcall"
      case 'v':	 // 1 string to match.
        if (memcmp(Name.data()+8, "ecreturn", 8) != 0)
          break;
        return AttributeCommonInfo::AT_VecReturn;	 // "clang::vecreturn"
      }
      break;
    case 'g':	 // 6 strings to match.
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
        break;
      switch (Name[5]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+6, "lloc_align", 10) != 0)
          break;
        return AttributeCommonInfo::AT_AllocAlign;	 // "gnu::alloc_align"
      case 'c':	 // 1 string to match.
        if (memcmp(Name.data()+6, "onstructor", 10) != 0)
          break;
        return AttributeCommonInfo::AT_Constructor;	 // "gnu::constructor"
      case 'f':	 // 1 string to match.
        if (memcmp(Name.data()+6, "allthrough", 10) != 0)
          break;
        return AttributeCommonInfo::AT_FallThrough;	 // "gnu::fallthrough"
      case 'n':	 // 1 string to match.
        if (memcmp(Name.data()+6, "omicromips", 10) != 0)
          break;
        return AttributeCommonInfo::AT_NoMicroMips;	 // "gnu::nomicromips"
      case 'v':	 // 1 string to match.
        if (memcmp(Name.data()+6, "ector_size", 10) != 0)
          break;
        return AttributeCommonInfo::AT_VectorSize;	 // "gnu::vector_size"
      case 'w':	 // 1 string to match.
        if (memcmp(Name.data()+6, "arn_unused", 10) != 0)
          break;
        return AttributeCommonInfo::AT_WarnUnused;	 // "gnu::warn_unused"
      }
      break;
    }
    break;
  case 17:	 // 8 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 7 strings to match.
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
        break;
      switch (Name[7]) {
      default: break;
      case 'c':	 // 3 strings to match.
        switch (Name[8]) {
        default: break;
        case 'a':	 // 1 string to match.
          if (memcmp(Name.data()+9, "pability", 8) != 0)
            break;
          return AttributeCommonInfo::AT_Capability;	 // "clang::capability"
        case 'o':	 // 2 strings to match.
          if (Name[9] != 'n')
            break;
          switch (Name[10]) {
          default: break;
          case 's':	 // 1 string to match.
            if (memcmp(Name.data()+11, "umable", 6) != 0)
              break;
            return AttributeCommonInfo::AT_Consumable;	 // "clang::consumable"
          case 'v':	 // 1 string to match.
            if (memcmp(Name.data()+11, "ergent", 6) != 0)
              break;
            return AttributeCommonInfo::AT_Convergent;	 // "clang::convergent"
          }
          break;
        }
        break;
      case 'n':	 // 2 strings to match.
        if (memcmp(Name.data()+8, "o_", 2) != 0)
          break;
        switch (Name[10]) {
        default: break;
        case 'b':	 // 1 string to match.
          if (memcmp(Name.data()+11, "uiltin", 6) != 0)
            break;
          return AttributeCommonInfo::AT_NoBuiltin;	 // "clang::no_builtin"
        case 'd':	 // 1 string to match.
          if (memcmp(Name.data()+11, "estroy", 6) != 0)
            break;
          return AttributeCommonInfo::AT_NoDestroy;	 // "clang::no_destroy"
        }
        break;
      case 'u':	 // 1 string to match.
        if (memcmp(Name.data()+8, "se_handle", 9) != 0)
          break;
        return AttributeCommonInfo::AT_UseHandle;	 // "clang::use_handle"
      case 'v':	 // 1 string to match.
        if (memcmp(Name.data()+8, "ectorcall", 9) != 0)
          break;
        return AttributeCommonInfo::AT_VectorCall;	 // "clang::vectorcall"
      }
      break;
    case 'n':	 // 1 string to match.
      if (memcmp(Name.data()+1, "o_unique_address", 16) != 0)
        break;
      return AttributeCommonInfo::AT_NoUniqueAddress;	 // "no_unique_address"
    }
    break;
  case 18:	 // 25 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 21 strings to match.
      switch (Name[1]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+2, "rries_dependency", 16) != 0)
          break;
        return AttributeCommonInfo::AT_CarriesDependency;	 // "carries_dependency"
      case 'l':	 // 20 strings to match.
        if (memcmp(Name.data()+2, "ang::", 5) != 0)
          break;
        switch (Name[7]) {
        default: break;
        case 'c':	 // 2 strings to match.
          switch (Name[8]) {
          default: break;
          case 'a':	 // 1 string to match.
            if (memcmp(Name.data()+9, "lled_once", 9) != 0)
              break;
            return AttributeCommonInfo::AT_CalledOnce;	 // "clang::called_once"
          case 'f':	 // 1 string to match.
            if (memcmp(Name.data()+9, "_consumed", 9) != 0)
              break;
            return AttributeCommonInfo::AT_CFConsumed;	 // "clang::cf_consumed"
          }
          break;
        case 'e':	 // 2 strings to match.
          switch (Name[8]) {
          default: break;
          case 'n':	 // 1 string to match.
            if (memcmp(Name.data()+9, "force_tcb", 9) != 0)
              break;
            return AttributeCommonInfo::AT_EnforceTCB;	 // "clang::enforce_tcb"
          case 'x':	 // 1 string to match.
            if (memcmp(Name.data()+9, "port_name", 9) != 0)
              break;
            return AttributeCommonInfo::AT_WebAssemblyExportName;	 // "clang::export_name"
          }
          break;
        case 'f':	 // 1 string to match.
          if (memcmp(Name.data()+8, "allthrough", 10) != 0)
            break;
          return AttributeCommonInfo::AT_FallThrough;	 // "clang::fallthrough"
        case 'g':	 // 1 string to match.
          if (memcmp(Name.data()+8, "uarded_var", 10) != 0)
            break;
          return AttributeCommonInfo::AT_GuardedVar;	 // "clang::guarded_var"
        case 'i':	 // 1 string to match.
          if (memcmp(Name.data()+8, "mport_name", 10) != 0)
            break;
          return AttributeCommonInfo::AT_WebAssemblyImportName;	 // "clang::import_name"
        case 'm':	 // 2 strings to match.
          if (Name[8] != 'a')
            break;
          switch (Name[9]) {
          default: break;
          case 't':	 // 1 string to match.
            if (memcmp(Name.data()+10, "rix_type", 8) != 0)
              break;
            return AttributeCommonInfo::AT_MatrixType;	 // "clang::matrix_type"
          case 'y':	 // 1 string to match.
            if (memcmp(Name.data()+10, "be_undef", 8) != 0)
              break;
            return AttributeCommonInfo::AT_MaybeUndef;	 // "clang::maybe_undef"
          }
          break;
        case 'n':	 // 3 strings to match.
          switch (Name[8]) {
          default: break;
          case 'o':	 // 2 strings to match.
            switch (Name[9]) {
            default: break;
            case '_':	 // 1 string to match.
              if (memcmp(Name.data()+10, "sanitize", 8) != 0)
                break;
              return AttributeCommonInfo::AT_NoSanitize;	 // "clang::no_sanitize"
            case 'd':	 // 1 string to match.
              if (memcmp(Name.data()+10, "uplicate", 8) != 0)
                break;
              return AttributeCommonInfo::AT_NoDuplicate;	 // "clang::noduplicate"
            }
            break;
          case 's':	 // 1 string to match.
            if (memcmp(Name.data()+9, "_consumed", 9) != 0)
              break;
            return AttributeCommonInfo::AT_NSConsumed;	 // "clang::ns_consumed"
          }
          break;
        case 'o':	 // 3 strings to match.
          switch (Name[8]) {
          default: break;
          case 'b':	 // 2 strings to match.
            if (memcmp(Name.data()+9, "jc_", 3) != 0)
              break;
            switch (Name[12]) {
            default: break;
            case 'b':	 // 1 string to match.
              if (memcmp(Name.data()+13, "ridge", 5) != 0)
                break;
              return AttributeCommonInfo::AT_ObjCBridge;	 // "clang::objc_bridge"
            case 'd':	 // 1 string to match.
              if (memcmp(Name.data()+13, "irect", 5) != 0)
                break;
              return AttributeCommonInfo::AT_ObjCDirect;	 // "clang::objc_direct"
            }
            break;
          case 's':	 // 1 string to match.
            if (memcmp(Name.data()+9, "_consumed", 9) != 0)
              break;
            return AttributeCommonInfo::AT_OSConsumed;	 // "clang::os_consumed"
          }
          break;
        case 's':	 // 2 strings to match.
          switch (Name[8]) {
          default: break;
          case 'w':	 // 1 string to match.
            if (memcmp(Name.data()+9, "ift_async", 9) != 0)
              break;
            return AttributeCommonInfo::AT_SwiftAsync;	 // "clang::swift_async"
          case 'y':	 // 1 string to match.
            if (memcmp(Name.data()+9, "cl_kernel", 9) != 0)
              break;
            return AttributeCommonInfo::AT_SYCLKernel;	 // "clang::sycl_kernel"
          }
          break;
        case 't':	 // 1 string to match.
          if (memcmp(Name.data()+8, "rivial_abi", 10) != 0)
            break;
          return AttributeCommonInfo::AT_TrivialABI;	 // "clang::trivial_abi"
        case 'u':	 // 1 string to match.
          if (memcmp(Name.data()+8, "navailable", 10) != 0)
            break;
          return AttributeCommonInfo::AT_Unavailable;	 // "clang::unavailable"
        case 'w':	 // 1 string to match.
          if (memcmp(Name.data()+8, "eak_import", 10) != 0)
            break;
          return AttributeCommonInfo::AT_WeakImport;	 // "clang::weak_import"
        }
        break;
      }
      break;
    case 'g':	 // 4 strings to match.
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
        break;
      switch (Name[5]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+6, "lways_inline", 12) != 0)
          break;
        return AttributeCommonInfo::AT_AlwaysInline;	 // "gnu::always_inline"
      case 'i':	 // 1 string to match.
        if (memcmp(Name.data()+6, "nit_priority", 12) != 0)
          break;
        return AttributeCommonInfo::AT_InitPriority;	 // "gnu::init_priority"
      case 'r':	 // 1 string to match.
        if (memcmp(Name.data()+6, "eturns_twice", 12) != 0)
          break;
        return AttributeCommonInfo::AT_ReturnsTwice;	 // "gnu::returns_twice"
      case 't':	 // 1 string to match.
        if (memcmp(Name.data()+6, "arget_clones", 12) != 0)
          break;
        return AttributeCommonInfo::AT_TargetClones;	 // "gnu::target_clones"
      }
      break;
    }
    break;
  case 19:	 // 11 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 9 strings to match.
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
        break;
      switch (Name[7]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+8, "vailability", 11) != 0)
          break;
        return AttributeCommonInfo::AT_Availability;	 // "clang::availability"
      case 'b':	 // 2 strings to match.
        if (memcmp(Name.data()+8, "tf_", 3) != 0)
          break;
        switch (Name[11]) {
        default: break;
        case 'd':	 // 1 string to match.
          if (memcmp(Name.data()+12, "ecl_tag", 7) != 0)
            break;
          return AttributeCommonInfo::AT_BTFDeclTag;	 // "clang::btf_decl_tag"
        case 't':	 // 1 string to match.
          if (memcmp(Name.data()+12, "ype_tag", 7) != 0)
            break;
          return AttributeCommonInfo::AT_BTFTypeTag;	 // "clang::btf_type_tag"
        }
        break;
      case 'c':	 // 2 strings to match.
        if (memcmp(Name.data()+8, "pu_", 3) != 0)
          break;
        switch (Name[11]) {
        default: break;
        case 'd':	 // 1 string to match.
          if (memcmp(Name.data()+12, "ispatch", 7) != 0)
            break;
          return AttributeCommonInfo::AT_CPUDispatch;	 // "clang::cpu_dispatch"
        case 's':	 // 1 string to match.
          if (memcmp(Name.data()+12, "pecific", 7) != 0)
            break;
          return AttributeCommonInfo::AT_CPUSpecific;	 // "clang::cpu_specific"
        }
        break;
      case 'o':	 // 3 strings to match.
        switch (Name[8]) {
        default: break;
        case 'b':	 // 1 string to match.
          if (memcmp(Name.data()+9, "jc_boxable", 10) != 0)
            break;
          return AttributeCommonInfo::AT_ObjCBoxable;	 // "clang::objc_boxable"
        case 'p':	 // 1 string to match.
          if (memcmp(Name.data()+9, "encl_local", 10) != 0)
            break;
          return AttributeCommonInfo::AT_OpenCLLocalAddressSpace;	 // "clang::opencl_local"
        case 'v':	 // 1 string to match.
          if (memcmp(Name.data()+9, "erloadable", 10) != 0)
            break;
          return AttributeCommonInfo::AT_Overloadable;	 // "clang::overloadable"
        }
        break;
      case 'p':	 // 1 string to match.
        if (memcmp(Name.data()+8, "reserve_all", 11) != 0)
          break;
        return AttributeCommonInfo::AT_PreserveAll;	 // "clang::preserve_all"
      }
      break;
    case 'g':	 // 2 strings to match.
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
        break;
      switch (Name[5]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+6, "ssume_aligned", 13) != 0)
          break;
        return AttributeCommonInfo::AT_AssumeAligned;	 // "gnu::assume_aligned"
      case 'n':	 // 1 string to match.
        if (memcmp(Name.data()+6, "o_split_stack", 13) != 0)
          break;
        return AttributeCommonInfo::AT_NoSplitStack;	 // "gnu::no_split_stack"
      }
      break;
    }
    break;
  case 20:	 // 17 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 15 strings to match.
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
        break;
      switch (Name[7]) {
      default: break;
      case 'a':	 // 4 strings to match.
        switch (Name[8]) {
        default: break;
        case 'd':	 // 1 string to match.
          if (memcmp(Name.data()+9, "dress_space", 11) != 0)
            break;
          return AttributeCommonInfo::AT_AddressSpace;	 // "clang::address_space"
        case 'l':	 // 1 string to match.
          if (memcmp(Name.data()+9, "ways_inline", 11) != 0)
            break;
          return AttributeCommonInfo::AT_AlwaysInline;	 // "clang::always_inline"
        case 'm':	 // 1 string to match.
          if (memcmp(Name.data()+9, "dgpu_kernel", 11) != 0)
            break;
          return AttributeCommonInfo::AT_AMDGPUKernelCall;	 // "clang::amdgpu_kernel"
        case 'n':	 // 1 string to match.
          if (memcmp(Name.data()+9, "notate_type", 11) != 0)
            break;
          return AttributeCommonInfo::AT_AnnotateType;	 // "clang::annotate_type"
        }
        break;
      case 'b':	 // 1 string to match.
        if (memcmp(Name.data()+8, "uiltin_alias", 12) != 0)
          break;
        return AttributeCommonInfo::AT_BuiltinAlias;	 // "clang::builtin_alias"
      case 'c':	 // 1 string to match.
        if (memcmp(Name.data()+8, "allable_when", 12) != 0)
          break;
        return AttributeCommonInfo::AT_CallableWhen;	 // "clang::callable_when"
      case 'i':	 // 1 string to match.
        if (memcmp(Name.data()+8, "mport_module", 12) != 0)
          break;
        return AttributeCommonInfo::AT_WebAssemblyImportModule;	 // "clang::import_module"
      case 'l':	 // 1 string to match.
        if (memcmp(Name.data()+8, "ifetimebound", 12) != 0)
          break;
        return AttributeCommonInfo::AT_LifetimeBound;	 // "clang::lifetimebound"
      case 'o':	 // 1 string to match.
        if (memcmp(Name.data()+8, "pencl_global", 12) != 0)
          break;
        return AttributeCommonInfo::AT_OpenCLGlobalAddressSpace;	 // "clang::opencl_global"
      case 'p':	 // 1 string to match.
        if (memcmp(Name.data()+8, "reserve_most", 12) != 0)
          break;
        return AttributeCommonInfo::AT_PreserveMost;	 // "clang::preserve_most"
      case 'r':	 // 1 string to match.
        if (memcmp(Name.data()+8, "einitializes", 12) != 0)
          break;
        return AttributeCommonInfo::AT_Reinitializes;	 // "clang::reinitializes"
      case 's':	 // 2 strings to match.
        switch (Name[8]) {
        default: break;
        case 'e':	 // 1 string to match.
          if (memcmp(Name.data()+9, "t_typestate", 11) != 0)
            break;
          return AttributeCommonInfo::AT_SetTypestate;	 // "clang::set_typestate"
        case 'w':	 // 1 string to match.
          if (memcmp(Name.data()+9, "ift_context", 11) != 0)
            break;
          return AttributeCommonInfo::AT_SwiftContext;	 // "clang::swift_context"
        }
        break;
      case 'u':	 // 1 string to match.
        if (memcmp(Name.data()+8, "ninitialized", 12) != 0)
          break;
        return AttributeCommonInfo::AT_Uninitialized;	 // "clang::uninitialized"
      case 'x':	 // 1 string to match.
        if (memcmp(Name.data()+8, "ray_log_args", 12) != 0)
          break;
        return AttributeCommonInfo::AT_XRayLogArgs;	 // "clang::xray_log_args"
      }
      break;
    case 'g':	 // 2 strings to match.
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
        break;
      switch (Name[5]) {
      default: break;
      case 'f':	 // 1 string to match.
        if (memcmp(Name.data()+6, "unction_return", 14) != 0)
          break;
        return AttributeCommonInfo::AT_FunctionReturnThunks;	 // "gnu::function_return"
      case 'r':	 // 1 string to match.
        if (memcmp(Name.data()+6, "eturns_nonnull", 14) != 0)
          break;
        return AttributeCommonInfo::AT_ReturnsNonNull;	 // "gnu::returns_nonnull"
      }
      break;
    }
    break;
  case 21:	 // 13 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 12 strings to match.
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
        break;
      switch (Name[7]) {
      default: break;
      case 'a':	 // 2 strings to match.
        switch (Name[8]) {
        default: break;
        case 'c':	 // 1 string to match.
          if (memcmp(Name.data()+9, "quire_handle", 12) != 0)
            break;
          return AttributeCommonInfo::AT_AcquireHandle;	 // "clang::acquire_handle"
        case 'l':	 // 1 string to match.
          if (memcmp(Name.data()+9, "ways_destroy", 12) != 0)
            break;
          return AttributeCommonInfo::AT_AlwaysDestroy;	 // "clang::always_destroy"
        }
        break;
      case 'i':	 // 1 string to match.
        if (memcmp(Name.data()+8, "ntel_ocl_bicc", 13) != 0)
          break;
        return AttributeCommonInfo::AT_IntelOclBicc;	 // "clang::intel_ocl_bicc"
      case 'o':	 // 4 strings to match.
        switch (Name[8]) {
        default: break;
        case 'b':	 // 2 strings to match.
          if (memcmp(Name.data()+9, "jc_", 3) != 0)
            break;
          switch (Name[12]) {
          default: break;
          case 'e':	 // 1 string to match.
            if (memcmp(Name.data()+13, "xception", 8) != 0)
              break;
            return AttributeCommonInfo::AT_ObjCException;	 // "clang::objc_exception"
          case 'o':	 // 1 string to match.
            if (memcmp(Name.data()+13, "wnership", 8) != 0)
              break;
            return AttributeCommonInfo::AT_ObjCOwnership;	 // "clang::objc_ownership"
          }
          break;
        case 'p':	 // 2 strings to match.
          if (memcmp(Name.data()+9, "encl_", 5) != 0)
            break;
          switch (Name[14]) {
          default: break;
          case 'g':	 // 1 string to match.
            if (memcmp(Name.data()+15, "eneric", 6) != 0)
              break;
            return AttributeCommonInfo::AT_OpenCLGenericAddressSpace;	 // "clang::opencl_generic"
          case 'p':	 // 1 string to match.
            if (memcmp(Name.data()+15, "rivate", 6) != 0)
              break;
            return AttributeCommonInfo::AT_OpenCLPrivateAddressSpace;	 // "clang::opencl_private"
          }
          break;
        }
        break;
      case 'p':	 // 2 strings to match.
        switch (Name[8]) {
        default: break;
        case 'r':	 // 1 string to match.
          if (memcmp(Name.data()+9, "eferred_name", 12) != 0)
            break;
          return AttributeCommonInfo::AT_PreferredName;	 // "clang::preferred_name"
        case 't':	 // 1 string to match.
          if (memcmp(Name.data()+9, "_guarded_var", 12) != 0)
            break;
          return AttributeCommonInfo::AT_PtGuardedVar;	 // "clang::pt_guarded_var"
        }
        break;
      case 'r':	 // 1 string to match.
        if (memcmp(Name.data()+8, "elease_handle", 13) != 0)
          break;
        return AttributeCommonInfo::AT_ReleaseHandle;	 // "clang::release_handle"
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+8, "wiftasynccall", 13) != 0)
          break;
        return AttributeCommonInfo::AT_SwiftAsyncCall;	 // "clang::swiftasynccall"
      case 't':	 // 1 string to match.
        if (memcmp(Name.data()+8, "est_typestate", 13) != 0)
          break;
        return AttributeCommonInfo::AT_TestTypestate;	 // "clang::test_typestate"
      }
      break;
    case 'g':	 // 1 string to match.
      if (memcmp(Name.data()+1, "nu::randomize_layout", 20) != 0)
        break;
      return AttributeCommonInfo::AT_RandomizeLayout;	 // "gnu::randomize_layout"
    }
    break;
  case 22:	 // 15 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 14 strings to match.
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
        break;
      switch (Name[7]) {
      default: break;
      case 'a':	 // 3 strings to match.
        switch (Name[8]) {
        default: break;
        case 'a':	 // 1 string to match.
          if (memcmp(Name.data()+9, "rch64_sve_pcs", 13) != 0)
            break;
          return AttributeCommonInfo::AT_AArch64SVEPcs;	 // "clang::aarch64_sve_pcs"
        case 'm':	 // 2 strings to match.
          if (memcmp(Name.data()+9, "dgpu_num_", 9) != 0)
            break;
          switch (Name[18]) {
          default: break;
          case 's':	 // 1 string to match.
            if (memcmp(Name.data()+19, "gpr", 3) != 0)
              break;
            return AttributeCommonInfo::AT_AMDGPUNumSGPR;	 // "clang::amdgpu_num_sgpr"
          case 'v':	 // 1 string to match.
            if (memcmp(Name.data()+19, "gpr", 3) != 0)
              break;
            return AttributeCommonInfo::AT_AMDGPUNumVGPR;	 // "clang::amdgpu_num_vgpr"
          }
          break;
        }
        break;
      case 'n':	 // 1 string to match.
        if (memcmp(Name.data()+8, "ot_tail_called", 14) != 0)
          break;
        return AttributeCommonInfo::AT_NotTailCalled;	 // "clang::not_tail_called"
      case 'o':	 // 5 strings to match.
        switch (Name[8]) {
        default: break;
        case 'b':	 // 2 strings to match.
          if (memcmp(Name.data()+9, "jc_", 3) != 0)
            break;
          switch (Name[12]) {
          default: break;
          case 'c':	 // 1 string to match.
            if (memcmp(Name.data()+13, "lass_stub", 9) != 0)
              break;
            return AttributeCommonInfo::AT_ObjCClassStub;	 // "clang::objc_class_stub"
          case 'r':	 // 1 string to match.
            if (memcmp(Name.data()+13, "oot_class", 9) != 0)
              break;
            return AttributeCommonInfo::AT_ObjCRootClass;	 // "clang::objc_root_class"
          }
          break;
        case 'p':	 // 1 string to match.
          if (memcmp(Name.data()+9, "encl_constant", 13) != 0)
            break;
          return AttributeCommonInfo::AT_OpenCLConstantAddressSpace;	 // "clang::opencl_constant"
        case 'w':	 // 2 strings to match.
          if (memcmp(Name.data()+9, "nership_", 8) != 0)
            break;
          switch (Name[17]) {
          default: break;
          case 'h':	 // 1 string to match.
            if (memcmp(Name.data()+18, "olds", 4) != 0)
              break;
            return AttributeCommonInfo::AT_Ownership;	 // "clang::ownership_holds"
          case 't':	 // 1 string to match.
            if (memcmp(Name.data()+18, "akes", 4) != 0)
              break;
            return AttributeCommonInfo::AT_Ownership;	 // "clang::ownership_takes"
          }
          break;
        }
        break;
      case 'p':	 // 1 string to match.
        if (memcmp(Name.data()+8, "aram_typestate", 14) != 0)
          break;
        return AttributeCommonInfo::AT_ParamTypestate;	 // "clang::param_typestate"
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+8, "coped_lockable", 14) != 0)
          break;
        return AttributeCommonInfo::AT_ScopedLockable;	 // "clang::scoped_lockable"
      case 't':	 // 1 string to match.
        if (memcmp(Name.data()+8, "ype_visibility", 14) != 0)
          break;
        return AttributeCommonInfo::AT_TypeVisibility;	 // "clang::type_visibility"
      case 'u':	 // 2 strings to match.
        switch (Name[8]) {
        default: break;
        case 'n':	 // 1 string to match.
          if (memcmp(Name.data()+9, "lock_function", 13) != 0)
            break;
          return AttributeCommonInfo::AT_ReleaseCapability;	 // "clang::unlock_function"
        case 's':	 // 1 string to match.
          if (memcmp(Name.data()+9, "ing_if_exists", 13) != 0)
            break;
          return AttributeCommonInfo::AT_UsingIfExists;	 // "clang::using_if_exists"
        }
        break;
      }
      break;
    case 'g':	 // 1 string to match.
      if (memcmp(Name.data()+1, "nu::transparent_union", 21) != 0)
        break;
      return AttributeCommonInfo::AT_TransparentUnion;	 // "gnu::transparent_union"
    }
    break;
  case 23:	 // 11 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 9 strings to match.
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
        break;
      switch (Name[7]) {
      default: break;
      case 'e':	 // 1 string to match.
        if (memcmp(Name.data()+8, "nforce_tcb_leaf", 15) != 0)
          break;
        return AttributeCommonInfo::AT_EnforceTCBLeaf;	 // "clang::enforce_tcb_leaf"
      case 'i':	 // 1 string to match.
        if (memcmp(Name.data()+8, "nternal_linkage", 15) != 0)
          break;
        return AttributeCommonInfo::AT_InternalLinkage;	 // "clang::internal_linkage"
      case 'm':	 // 1 string to match.
        if (memcmp(Name.data()+8, "in_vector_width", 15) != 0)
          break;
        return AttributeCommonInfo::AT_MinVectorWidth;	 // "clang::min_vector_width"
      case 'n':	 // 2 strings to match.
        switch (Name[8]) {
        default: break;
        case 'e':	 // 1 string to match.
          if (memcmp(Name.data()+9, "on_vector_type", 14) != 0)
            break;
          return AttributeCommonInfo::AT_NeonVectorType;	 // "clang::neon_vector_type"
        case 's':	 // 1 string to match.
          if (memcmp(Name.data()+9, "_consumes_self", 14) != 0)
            break;
          return AttributeCommonInfo::AT_NSConsumesSelf;	 // "clang::ns_consumes_self"
        }
        break;
      case 'o':	 // 1 string to match.
        if (memcmp(Name.data()+8, "s_consumes_this", 15) != 0)
          break;
        return AttributeCommonInfo::AT_OSConsumesThis;	 // "clang::os_consumes_this"
      case 'p':	 // 1 string to match.
        if (memcmp(Name.data()+8, "ass_object_size", 15) != 0)
          break;
        return AttributeCommonInfo::AT_PassObjectSize;	 // "clang::pass_object_size"
      case 'r':	 // 1 string to match.
        if (memcmp(Name.data()+8, "eturn_typestate", 15) != 0)
          break;
        return AttributeCommonInfo::AT_ReturnTypestate;	 // "clang::return_typestate"
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+8, "tandalone_debug", 15) != 0)
          break;
        return AttributeCommonInfo::AT_StandaloneDebug;	 // "clang::standalone_debug"
      }
      break;
    case 'g':	 // 2 strings to match.
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
        break;
      switch (Name[5]) {
      default: break;
      case 'n':	 // 1 string to match.
        if (memcmp(Name.data()+6, "o_sanitize_thread", 17) != 0)
          break;
        return AttributeCommonInfo::AT_NoSanitizeSpecific;	 // "gnu::no_sanitize_thread"
      case 'w':	 // 1 string to match.
        if (memcmp(Name.data()+6, "arn_unused_result", 17) != 0)
          break;
        return AttributeCommonInfo::AT_WarnUnusedResult;	 // "gnu::warn_unused_result"
      }
      break;
    }
    break;
  case 24:	 // 8 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 5 strings to match.
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
        break;
      switch (Name[7]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+8, "ssert_capability", 16) != 0)
          break;
        return AttributeCommonInfo::AT_AssertCapability;	 // "clang::assert_capability"
      case 'o':	 // 2 strings to match.
        switch (Name[8]) {
        default: break;
        case 'b':	 // 1 string to match.
          if (memcmp(Name.data()+9, "jc_runtime_name", 15) != 0)
            break;
          return AttributeCommonInfo::AT_ObjCRuntimeName;	 // "clang::objc_runtime_name"
        case 'w':	 // 1 string to match.
          if (memcmp(Name.data()+9, "nership_returns", 15) != 0)
            break;
          return AttributeCommonInfo::AT_Ownership;	 // "clang::ownership_returns"
        }
        break;
      case 's':	 // 2 strings to match.
        switch (Name[8]) {
        default: break;
        case 'h':	 // 1 string to match.
          if (memcmp(Name.data()+9, "ared_capability", 15) != 0)
            break;
          return AttributeCommonInfo::AT_Capability;	 // "clang::shared_capability"
        case 'w':	 // 1 string to match.
          if (memcmp(Name.data()+9, "ift_async_error", 15) != 0)
            break;
          return AttributeCommonInfo::AT_SwiftAsyncError;	 // "clang::swift_async_error"
        }
        break;
      }
      break;
    case 'g':	 // 3 strings to match.
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
        break;
      switch (Name[5]) {
      default: break;
      case 'n':	 // 2 strings to match.
        if (memcmp(Name.data()+6, "o_", 2) != 0)
          break;
        switch (Name[8]) {
        default: break;
        case 'r':	 // 1 string to match.
          if (memcmp(Name.data()+9, "andomize_layout", 15) != 0)
            break;
          return AttributeCommonInfo::AT_NoRandomizeLayout;	 // "gnu::no_randomize_layout"
        case 's':	 // 1 string to match.
          if (memcmp(Name.data()+9, "anitize_address", 15) != 0)
            break;
          return AttributeCommonInfo::AT_NoSanitizeSpecific;	 // "gnu::no_sanitize_address"
        }
        break;
      case 'z':	 // 1 string to match.
        if (memcmp(Name.data()+6, "ero_call_used_regs", 18) != 0)
          break;
        return AttributeCommonInfo::AT_ZeroCallUsedRegs;	 // "gnu::zero_call_used_regs"
      }
      break;
    }
    break;
  case 25:	 // 15 strings to match.
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
      break;
    switch (Name[7]) {
    default: break;
    case 'a':	 // 2 strings to match.
      switch (Name[8]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+9, "rch64_vector_pcs", 16) != 0)
          break;
        return AttributeCommonInfo::AT_AArch64VectorPcs;	 // "clang::aarch64_vector_pcs"
      case 'c':	 // 1 string to match.
        if (memcmp(Name.data()+9, "quire_capability", 16) != 0)
          break;
        return AttributeCommonInfo::AT_AcquireCapability;	 // "clang::acquire_capability"
      }
      break;
    case 'd':	 // 1 string to match.
      if (memcmp(Name.data()+8, "isable_tail_calls", 17) != 0)
        break;
      return AttributeCommonInfo::AT_DisableTailCalls;	 // "clang::disable_tail_calls"
    case 'e':	 // 1 string to match.
      if (memcmp(Name.data()+8, "num_extensibility", 17) != 0)
        break;
      return AttributeCommonInfo::AT_EnumExtensibility;	 // "clang::enum_extensibility"
    case 'i':	 // 1 string to match.
      if (memcmp(Name.data()+8, "boutletcollection", 17) != 0)
        break;
      return AttributeCommonInfo::AT_IBOutletCollection;	 // "clang::iboutletcollection"
    case 'm':	 // 1 string to match.
      if (memcmp(Name.data()+8, "ig_server_routine", 17) != 0)
        break;
      return AttributeCommonInfo::AT_MIGServerRoutine;	 // "clang::mig_server_routine"
    case 'n':	 // 2 strings to match.
      if (memcmp(Name.data()+8, "o_s", 3) != 0)
        break;
      switch (Name[11]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+12, "nitize_memory", 13) != 0)
          break;
        return AttributeCommonInfo::AT_NoSanitizeSpecific;	 // "clang::no_sanitize_memory"
      case 't':	 // 1 string to match.
        if (memcmp(Name.data()+12, "ack_protector", 13) != 0)
          break;
        return AttributeCommonInfo::AT_NoStackProtector;	 // "clang::no_stack_protector"
      }
      break;
    case 'o':	 // 3 strings to match.
      switch (Name[8]) {
      default: break;
      case 'b':	 // 2 strings to match.
        if (memcmp(Name.data()+9, "jc_", 3) != 0)
          break;
        switch (Name[12]) {
        default: break;
        case 'm':	 // 1 string to match.
          if (memcmp(Name.data()+13, "ethod_family", 12) != 0)
            break;
          return AttributeCommonInfo::AT_ObjCMethodFamily;	 // "clang::objc_method_family"
        case 'n':	 // 1 string to match.
          if (memcmp(Name.data()+13, "onlazy_class", 12) != 0)
            break;
          return AttributeCommonInfo::AT_ObjCNonLazyClass;	 // "clang::objc_nonlazy_class"
        }
        break;
      case 'p':	 // 1 string to match.
        if (memcmp(Name.data()+9, "encl_global_host", 16) != 0)
          break;
        return AttributeCommonInfo::AT_OpenCLGlobalHostAddressSpace;	 // "clang::opencl_global_host"
      }
      break;
    case 'r':	 // 1 string to match.
      if (memcmp(Name.data()+8, "elease_capability", 17) != 0)
        break;
      return AttributeCommonInfo::AT_ReleaseCapability;	 // "clang::release_capability"
    case 's':	 // 2 strings to match.
      switch (Name[8]) {
      default: break;
      case 'w':	 // 1 string to match.
        if (memcmp(Name.data()+9, "ift_error_result", 16) != 0)
          break;
        return AttributeCommonInfo::AT_SwiftErrorResult;	 // "clang::swift_error_result"
      case 'y':	 // 1 string to match.
        if (memcmp(Name.data()+9, "cl_special_class", 16) != 0)
          break;
        return AttributeCommonInfo::AT_SYCLSpecialClass;	 // "clang::sycl_special_class"
      }
      break;
    case 'w':	 // 1 string to match.
      if (memcmp(Name.data()+8, "arn_unused_result", 17) != 0)
        break;
      return AttributeCommonInfo::AT_WarnUnusedResult;	 // "clang::warn_unused_result"
    }
    break;
  case 26:	 // 13 strings to match.
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
      break;
    switch (Name[7]) {
    default: break;
    case 'a':	 // 1 string to match.
      if (memcmp(Name.data()+8, "mdgpu_waves_per_eu", 18) != 0)
        break;
      return AttributeCommonInfo::AT_AMDGPUWavesPerEU;	 // "clang::amdgpu_waves_per_eu"
    case 'c':	 // 3 strings to match.
      if (memcmp(Name.data()+8, "f_", 2) != 0)
        break;
      switch (Name[10]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+11, "udited_transfer", 15) != 0)
          break;
        return AttributeCommonInfo::AT_CFAuditedTransfer;	 // "clang::cf_audited_transfer"
      case 'r':	 // 1 string to match.
        if (memcmp(Name.data()+11, "eturns_retained", 15) != 0)
          break;
        return AttributeCommonInfo::AT_CFReturnsRetained;	 // "clang::cf_returns_retained"
      case 'u':	 // 1 string to match.
        if (memcmp(Name.data()+11, "nknown_transfer", 15) != 0)
          break;
        return AttributeCommonInfo::AT_CFUnknownTransfer;	 // "clang::cf_unknown_transfer"
      }
      break;
    case 'd':	 // 1 string to match.
      if (memcmp(Name.data()+8, "iagnose_as_builtin", 18) != 0)
        break;
      return AttributeCommonInfo::AT_DiagnoseAsBuiltin;	 // "clang::diagnose_as_builtin"
    case 'n':	 // 1 string to match.
      if (memcmp(Name.data()+8, "s_returns_retained", 18) != 0)
        break;
      return AttributeCommonInfo::AT_NSReturnsRetained;	 // "clang::ns_returns_retained"
    case 'o':	 // 5 strings to match.
      switch (Name[8]) {
      default: break;
      case 'b':	 // 4 strings to match.
        if (memcmp(Name.data()+9, "jc_", 3) != 0)
          break;
        switch (Name[12]) {
        default: break;
        case 'b':	 // 2 strings to match.
          if (memcmp(Name.data()+13, "ridge_", 6) != 0)
            break;
          switch (Name[19]) {
          default: break;
          case 'm':	 // 1 string to match.
            if (memcmp(Name.data()+20, "utable", 6) != 0)
              break;
            return AttributeCommonInfo::AT_ObjCBridgeMutable;	 // "clang::objc_bridge_mutable"
          case 'r':	 // 1 string to match.
            if (memcmp(Name.data()+20, "elated", 6) != 0)
              break;
            return AttributeCommonInfo::AT_ObjCBridgeRelated;	 // "clang::objc_bridge_related"
          }
          break;
        case 'd':	 // 1 string to match.
          if (memcmp(Name.data()+13, "irect_members", 13) != 0)
            break;
          return AttributeCommonInfo::AT_ObjCDirectMembers;	 // "clang::objc_direct_members"
        case 'r':	 // 1 string to match.
          if (memcmp(Name.data()+13, "equires_super", 13) != 0)
            break;
          return AttributeCommonInfo::AT_ObjCRequiresSuper;	 // "clang::objc_requires_super"
        }
        break;
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+9, "_returns_retained", 17) != 0)
          break;
        return AttributeCommonInfo::AT_OSReturnsRetained;	 // "clang::os_returns_retained"
      }
      break;
    case 'r':	 // 1 string to match.
      if (memcmp(Name.data()+8, "equires_capability", 18) != 0)
        break;
      return AttributeCommonInfo::AT_RequiresCapability;	 // "clang::requires_capability"
    case 's':	 // 1 string to match.
      if (memcmp(Name.data()+8, "wift_async_context", 18) != 0)
        break;
      return AttributeCommonInfo::AT_SwiftAsyncContext;	 // "clang::swift_async_context"
    }
    break;
  case 27:	 // 5 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 4 strings to match.
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
        break;
      switch (Name[7]) {
      default: break;
      case 'l':	 // 1 string to match.
        if (memcmp(Name.data()+8, "oader_uninitialized", 19) != 0)
          break;
        return AttributeCommonInfo::AT_LoaderUninitialized;	 // "clang::loader_uninitialized"
      case 'n':	 // 1 string to match.
        if (memcmp(Name.data()+8, "eon_polyvector_type", 19) != 0)
          break;
        return AttributeCommonInfo::AT_NeonPolyVectorType;	 // "clang::neon_polyvector_type"
      case 'o':	 // 2 strings to match.
        switch (Name[8]) {
        default: break;
        case 'b':	 // 1 string to match.
          if (memcmp(Name.data()+9, "jc_runtime_visible", 18) != 0)
            break;
          return AttributeCommonInfo::AT_ObjCRuntimeVisible;	 // "clang::objc_runtime_visible"
        case 'p':	 // 1 string to match.
          if (memcmp(Name.data()+9, "encl_global_device", 18) != 0)
            break;
          return AttributeCommonInfo::AT_OpenCLGlobalDeviceAddressSpace;	 // "clang::opencl_global_device"
        }
        break;
      }
      break;
    case 'g':	 // 1 string to match.
      if (memcmp(Name.data()+1, "nu::no_instrument_function", 26) != 0)
        break;
      return AttributeCommonInfo::AT_NoInstrumentFunction;	 // "gnu::no_instrument_function"
    }
    break;
  case 28:	 // 9 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 8 strings to match.
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
        break;
      switch (Name[7]) {
      default: break;
      case 'l':	 // 1 string to match.
        if (memcmp(Name.data()+8, "to_visibility_public", 20) != 0)
          break;
        return AttributeCommonInfo::AT_LTOVisibilityPublic;	 // "clang::lto_visibility_public"
      case 'o':	 // 1 string to match.
        if (memcmp(Name.data()+8, "bjc_precise_lifetime", 20) != 0)
          break;
        return AttributeCommonInfo::AT_ObjCPreciseLifetime;	 // "clang::objc_precise_lifetime"
      case 'p':	 // 2 strings to match.
        switch (Name[8]) {
        default: break;
        case 'o':	 // 1 string to match.
          if (memcmp(Name.data()+9, "inter_with_type_tag", 19) != 0)
            break;
          return AttributeCommonInfo::AT_ArgumentWithTypeTag;	 // "clang::pointer_with_type_tag"
        case 'r':	 // 1 string to match.
          if (memcmp(Name.data()+9, "eserve_access_index", 19) != 0)
            break;
          return AttributeCommonInfo::AT_BPFPreserveAccessIndex;	 // "clang::preserve_access_index"
        }
        break;
      case 's':	 // 2 strings to match.
        switch (Name[8]) {
        default: break;
        case 'h':	 // 1 string to match.
          if (memcmp(Name.data()+9, "ared_locks_required", 19) != 0)
            break;
          return AttributeCommonInfo::AT_RequiresCapability;	 // "clang::shared_locks_required"
        case 'w':	 // 1 string to match.
          if (memcmp(Name.data()+9, "ift_indirect_result", 19) != 0)
            break;
          return AttributeCommonInfo::AT_SwiftIndirectResult;	 // "clang::swift_indirect_result"
        }
        break;
      case 't':	 // 1 string to match.
        if (memcmp(Name.data()+8, "ype_tag_for_datatype", 20) != 0)
          break;
        return AttributeCommonInfo::AT_TypeTagForDatatype;	 // "clang::type_tag_for_datatype"
      case 'x':	 // 1 string to match.
        if (memcmp(Name.data()+8, "ray_never_instrument", 20) != 0)
          break;
        return AttributeCommonInfo::AT_XRayInstrument;	 // "clang::xray_never_instrument"
      }
      break;
    case 'g':	 // 1 string to match.
      if (memcmp(Name.data()+1, "nu::force_align_arg_pointer", 27) != 0)
        break;
      return AttributeCommonInfo::AT_X86ForceAlignArgPointer;	 // "gnu::force_align_arg_pointer"
    }
    break;
  case 29:	 // 6 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 5 strings to match.
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
        break;
      switch (Name[7]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+8, "rgument_with_type_tag", 21) != 0)
          break;
        return AttributeCommonInfo::AT_ArgumentWithTypeTag;	 // "clang::argument_with_type_tag"
      case 'e':	 // 1 string to match.
        if (memcmp(Name.data()+8, "xternal_source_symbol", 21) != 0)
          break;
        return AttributeCommonInfo::AT_ExternalSourceSymbol;	 // "clang::external_source_symbol"
      case 'o':	 // 1 string to match.
        if (memcmp(Name.data()+8, "bjc_independent_class", 21) != 0)
          break;
        return AttributeCommonInfo::AT_ObjCIndependentClass;	 // "clang::objc_independent_class"
      case 't':	 // 1 string to match.
        if (memcmp(Name.data()+8, "ry_acquire_capability", 21) != 0)
          break;
        return AttributeCommonInfo::AT_TryAcquireCapability;	 // "clang::try_acquire_capability"
      case 'x':	 // 1 string to match.
        if (memcmp(Name.data()+8, "ray_always_instrument", 21) != 0)
          break;
        return AttributeCommonInfo::AT_XRayInstrument;	 // "clang::xray_always_instrument"
      }
      break;
    case 'g':	 // 1 string to match.
      if (memcmp(Name.data()+1, "nu::patchable_function_entry", 28) != 0)
        break;
      return AttributeCommonInfo::AT_PatchableFunctionEntry;	 // "gnu::patchable_function_entry"
    }
    break;
  case 30:	 // 5 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 4 strings to match.
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
        break;
      switch (Name[7]) {
      default: break;
      case 'c':	 // 1 string to match.
        if (memcmp(Name.data()+8, "f_returns_not_retained", 22) != 0)
          break;
        return AttributeCommonInfo::AT_CFReturnsNotRetained;	 // "clang::cf_returns_not_retained"
      case 'n':	 // 2 strings to match.
        if (memcmp(Name.data()+8, "s_returns_", 10) != 0)
          break;
        switch (Name[18]) {
        default: break;
        case 'a':	 // 1 string to match.
          if (memcmp(Name.data()+19, "utoreleased", 11) != 0)
            break;
          return AttributeCommonInfo::AT_NSReturnsAutoreleased;	 // "clang::ns_returns_autoreleased"
        case 'n':	 // 1 string to match.
          if (memcmp(Name.data()+19, "ot_retained", 11) != 0)
            break;
          return AttributeCommonInfo::AT_NSReturnsNotRetained;	 // "clang::ns_returns_not_retained"
        }
        break;
      case 'o':	 // 1 string to match.
        if (memcmp(Name.data()+8, "s_returns_not_retained", 22) != 0)
          break;
        return AttributeCommonInfo::AT_OSReturnsNotRetained;	 // "clang::os_returns_not_retained"
      }
      break;
    case 'g':	 // 1 string to match.
      if (memcmp(Name.data()+1, "nu::no_caller_saved_registers", 29) != 0)
        break;
      return AttributeCommonInfo::AT_AnyX86NoCallerSavedRegisters;	 // "gnu::no_caller_saved_registers"
    }
    break;
  case 31:	 // 6 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 5 strings to match.
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
        break;
      switch (Name[7]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+8, "ssert_shared_capability", 23) != 0)
          break;
        return AttributeCommonInfo::AT_AssertCapability;	 // "clang::assert_shared_capability"
      case 'c':	 // 1 string to match.
        if (memcmp(Name.data()+8, "fi_canonical_jump_table", 23) != 0)
          break;
        return AttributeCommonInfo::AT_CFICanonicalJumpTable;	 // "clang::cfi_canonical_jump_table"
      case 'e':	 // 1 string to match.
        if (memcmp(Name.data()+8, "xclusive_locks_required", 23) != 0)
          break;
        return AttributeCommonInfo::AT_RequiresCapability;	 // "clang::exclusive_locks_required"
      case 'o':	 // 1 string to match.
        if (memcmp(Name.data()+8, "bjc_externally_retained", 23) != 0)
          break;
        return AttributeCommonInfo::AT_ObjCExternallyRetained;	 // "clang::objc_externally_retained"
      case 'p':	 // 1 string to match.
        if (memcmp(Name.data()+8, "ass_dynamic_object_size", 23) != 0)
          break;
        return AttributeCommonInfo::AT_PassObjectSize;	 // "clang::pass_dynamic_object_size"
      }
      break;
    case 'g':	 // 1 string to match.
      if (memcmp(Name.data()+1, "nu::no_address_safety_analysis", 30) != 0)
        break;
      return AttributeCommonInfo::AT_NoSanitizeSpecific;	 // "gnu::no_address_safety_analysis"
    }
    break;
  case 32:	 // 5 strings to match.
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
      break;
    switch (Name[7]) {
    default: break;
    case '_':	 // 1 string to match.
      if (memcmp(Name.data()+8, "_clang_arm_builtin_alias", 24) != 0)
        break;
      return AttributeCommonInfo::AT_ArmBuiltinAlias;	 // "clang::__clang_arm_builtin_alias"
    case 'a':	 // 1 string to match.
      if (memcmp(Name.data()+8, "cquire_shared_capability", 24) != 0)
        break;
      return AttributeCommonInfo::AT_AcquireCapability;	 // "clang::acquire_shared_capability"
    case 'n':	 // 1 string to match.
      if (memcmp(Name.data()+8, "o_thread_safety_analysis", 24) != 0)
        break;
      return AttributeCommonInfo::AT_NoThreadSafetyAnalysis;	 // "clang::no_thread_safety_analysis"
    case 'o':	 // 1 string to match.
      if (memcmp(Name.data()+8, "bjc_non_runtime_protocol", 24) != 0)
        break;
      return AttributeCommonInfo::AT_ObjCNonRuntimeProtocol;	 // "clang::objc_non_runtime_protocol"
    case 'r':	 // 1 string to match.
      if (memcmp(Name.data()+8, "elease_shared_capability", 24) != 0)
        break;
      return AttributeCommonInfo::AT_ReleaseCapability;	 // "clang::release_shared_capability"
    }
    break;
  case 33:	 // 5 strings to match.
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
      break;
    switch (Name[7]) {
    default: break;
    case 'c':	 // 1 string to match.
      if (memcmp(Name.data()+8, "onsumable_auto_cast_state", 25) != 0)
        break;
      return AttributeCommonInfo::AT_ConsumableAutoCast;	 // "clang::consumable_auto_cast_state"
    case 'o':	 // 1 string to match.
      if (memcmp(Name.data()+8, "bjc_returns_inner_pointer", 25) != 0)
        break;
      return AttributeCommonInfo::AT_ObjCReturnsInnerPointer;	 // "clang::objc_returns_inner_pointer"
    case 'r':	 // 2 strings to match.
      if (Name[8] != 'e')
        break;
      switch (Name[9]) {
      default: break;
      case 'l':	 // 1 string to match.
        if (memcmp(Name.data()+10, "ease_generic_capability", 23) != 0)
          break;
        return AttributeCommonInfo::AT_ReleaseCapability;	 // "clang::release_generic_capability"
      case 'q':	 // 1 string to match.
        if (memcmp(Name.data()+10, "uires_shared_capability", 23) != 0)
          break;
        return AttributeCommonInfo::AT_RequiresCapability;	 // "clang::requires_shared_capability"
      }
      break;
    case 's':	 // 1 string to match.
      if (memcmp(Name.data()+8, "peculative_load_hardening", 25) != 0)
        break;
      return AttributeCommonInfo::AT_SpeculativeLoadHardening;	 // "clang::speculative_load_hardening"
    }
    break;
  case 34:	 // 4 strings to match.
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
      break;
    switch (Name[7]) {
    default: break;
    case 'a':	 // 1 string to match.
      if (memcmp(Name.data()+8, "mdgpu_flat_work_group_size", 26) != 0)
        break;
      return AttributeCommonInfo::AT_AMDGPUFlatWorkGroupSize;	 // "clang::amdgpu_flat_work_group_size"
    case 'o':	 // 3 strings to match.
      switch (Name[8]) {
      default: break;
      case 'b':	 // 2 strings to match.
        if (memcmp(Name.data()+9, "jc_", 3) != 0)
          break;
        switch (Name[12]) {
        default: break;
        case 'd':	 // 1 string to match.
          if (memcmp(Name.data()+13, "esignated_initializer", 21) != 0)
            break;
          return AttributeCommonInfo::AT_ObjCDesignatedInitializer;	 // "clang::objc_designated_initializer"
        case 's':	 // 1 string to match.
          if (memcmp(Name.data()+13, "ubclassing_restricted", 21) != 0)
            break;
          return AttributeCommonInfo::AT_ObjCSubclassingRestricted;	 // "clang::objc_subclassing_restricted"
        }
        break;
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+9, "_returns_retained_on_zero", 25) != 0)
          break;
        return AttributeCommonInfo::AT_OSReturnsRetainedOnZero;	 // "clang::os_returns_retained_on_zero"
      }
      break;
    }
    break;
  case 35:	 // 2 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 1 string to match.
      if (memcmp(Name.data()+1, "lang::consumable_set_state_on_read", 34) != 0)
        break;
      return AttributeCommonInfo::AT_ConsumableSetOnRead;	 // "clang::consumable_set_state_on_read"
    case 'g':	 // 1 string to match.
      if (memcmp(Name.data()+1, "nu::no_profile_instrument_function", 34) != 0)
        break;
      return AttributeCommonInfo::AT_NoProfileFunction;	 // "gnu::no_profile_instrument_function"
    }
    break;
  case 36:	 // 2 strings to match.
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
      break;
    switch (Name[7]) {
    default: break;
    case 'n':	 // 1 string to match.
      if (memcmp(Name.data()+8, "o_speculative_load_hardening", 28) != 0)
        break;
      return AttributeCommonInfo::AT_NoSpeculativeLoadHardening;	 // "clang::no_speculative_load_hardening"
    case 't':	 // 1 string to match.
      if (memcmp(Name.data()+8, "ry_acquire_shared_capability", 28) != 0)
        break;
      return AttributeCommonInfo::AT_TryAcquireCapability;	 // "clang::try_acquire_shared_capability"
    }
    break;
  case 38:	 // 2 strings to match.
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
      break;
    switch (Name[7]) {
    default: break;
    case 'o':	 // 1 string to match.
      if (memcmp(Name.data()+8, "s_returns_retained_on_non_zero", 30) != 0)
        break;
      return AttributeCommonInfo::AT_OSReturnsRetainedOnNonZero;	 // "clang::os_returns_retained_on_non_zero"
    case 'r':	 // 1 string to match.
      if (memcmp(Name.data()+8, "equire_constant_initialization", 30) != 0)
        break;
      return AttributeCommonInfo::AT_ConstInit;	 // "clang::require_constant_initialization"
    }
    break;
  case 40:	 // 1 string to match.
    if (memcmp(Name.data()+0, "clang::disable_sanitizer_instrumentation", 40) != 0)
      break;
    return AttributeCommonInfo::AT_DisableSanitizerInstrumentation;	 // "clang::disable_sanitizer_instrumentation"
  case 41:	 // 1 string to match.
    if (memcmp(Name.data()+0, "clang::objc_requires_property_definitions", 41) != 0)
      break;
    return AttributeCommonInfo::AT_ObjCRequiresPropertyDefs;	 // "clang::objc_requires_property_definitions"
  case 42:	 // 3 strings to match.
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
      break;
    switch (Name[7]) {
    default: break;
    case '_':	 // 1 string to match.
      if (memcmp(Name.data()+8, "_clang_arm_mve_strict_polymorphism", 34) != 0)
        break;
      return AttributeCommonInfo::AT_ArmMveStrictPolymorphism;	 // "clang::__clang_arm_mve_strict_polymorphism"
    case 'e':	 // 1 string to match.
      if (memcmp(Name.data()+8, "xclude_from_explicit_instantiation", 34) != 0)
        break;
      return AttributeCommonInfo::AT_ExcludeFromExplicitInstantiation;	 // "clang::exclude_from_explicit_instantiation"
    case 'o':	 // 1 string to match.
      if (memcmp(Name.data()+8, "bjc_arc_weak_reference_unavailable", 34) != 0)
        break;
      return AttributeCommonInfo::AT_ArcWeakrefUnavailable;	 // "clang::objc_arc_weak_reference_unavailable"
    }
    break;
  case 53:	 // 1 string to match.
    if (memcmp(Name.data()+0, "clang::objc_protocol_requires_explicit_implementation", 53) != 0)
      break;
    return AttributeCommonInfo::AT_ObjCExplicitProtocolImpl;	 // "clang::objc_protocol_requires_explicit_implementation"
  }
  } else if (AttributeCommonInfo::AS_C2x == Syntax) {
  switch (Name.size()) {
  default: break;
  case 8:	 // 4 strings to match.
    switch (Name[0]) {
    default: break;
    case 'g':	 // 3 strings to match.
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
        break;
      switch (Name[5]) {
      default: break;
      case 'f':	 // 1 string to match.
        if (memcmp(Name.data()+6, "ar", 2) != 0)
          break;
        return AttributeCommonInfo::AT_MipsLongCall;	 // "gnu::far"
      case 'h':	 // 1 string to match.
        if (memcmp(Name.data()+6, "ot", 2) != 0)
          break;
        return AttributeCommonInfo::AT_Hot;	 // "gnu::hot"
      case 'p':	 // 1 string to match.
        if (memcmp(Name.data()+6, "cs", 2) != 0)
          break;
        return AttributeCommonInfo::AT_Pcs;	 // "gnu::pcs"
      }
      break;
    case 'n':	 // 1 string to match.
      if (memcmp(Name.data()+1, "oreturn", 7) != 0)
        break;
      return AttributeCommonInfo::AT_CXX11NoReturn;	 // "noreturn"
    }
    break;
  case 9:	 // 9 strings to match.
    switch (Name[0]) {
    default: break;
    case '_':	 // 1 string to match.
      if (memcmp(Name.data()+1, "Noreturn", 8) != 0)
        break;
      return AttributeCommonInfo::AT_CXX11NoReturn;	 // "_Noreturn"
    case 'g':	 // 7 strings to match.
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
        break;
      switch (Name[5]) {
      default: break;
      case 'c':	 // 1 string to match.
        if (memcmp(Name.data()+6, "old", 3) != 0)
          break;
        return AttributeCommonInfo::AT_Cold;	 // "gnu::cold"
      case 'l':	 // 1 string to match.
        if (memcmp(Name.data()+6, "eaf", 3) != 0)
          break;
        return AttributeCommonInfo::AT_Leaf;	 // "gnu::leaf"
      case 'm':	 // 1 string to match.
        if (memcmp(Name.data()+6, "ode", 3) != 0)
          break;
        return AttributeCommonInfo::AT_Mode;	 // "gnu::mode"
      case 'n':	 // 1 string to match.
        if (memcmp(Name.data()+6, "ear", 3) != 0)
          break;
        return AttributeCommonInfo::AT_MipsShortCall;	 // "gnu::near"
      case 'p':	 // 1 string to match.
        if (memcmp(Name.data()+6, "ure", 3) != 0)
          break;
        return AttributeCommonInfo::AT_Pure;	 // "gnu::pure"
      case 'u':	 // 1 string to match.
        if (memcmp(Name.data()+6, "sed", 3) != 0)
          break;
        return AttributeCommonInfo::AT_Used;	 // "gnu::used"
      case 'w':	 // 1 string to match.
        if (memcmp(Name.data()+6, "eak", 3) != 0)
          break;
        return AttributeCommonInfo::AT_Weak;	 // "gnu::weak"
      }
      break;
    case 'n':	 // 1 string to match.
      if (memcmp(Name.data()+1, "odiscard", 8) != 0)
        break;
      return AttributeCommonInfo::AT_WarnUnusedResult;	 // "nodiscard"
    }
    break;
  case 10:	 // 7 strings to match.
    switch (Name[0]) {
    default: break;
    case 'd':	 // 1 string to match.
      if (memcmp(Name.data()+1, "eprecated", 9) != 0)
        break;
      return AttributeCommonInfo::AT_Deprecated;	 // "deprecated"
    case 'g':	 // 6 strings to match.
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
        break;
      switch (Name[5]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+6, "lias", 4) != 0)
          break;
        return AttributeCommonInfo::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) != 0)
            break;
          return AttributeCommonInfo::AT_CDecl;	 // "gnu::cdecl"
        case 'o':	 // 1 string to match.
          if (memcmp(Name.data()+7, "nst", 3) != 0)
            break;
          return AttributeCommonInfo::AT_Const;	 // "gnu::const"
        }
        break;
      case 'e':	 // 1 string to match.
        if (memcmp(Name.data()+6, "rror", 4) != 0)
          break;
        return AttributeCommonInfo::AT_Error;	 // "gnu::error"
      case 'i':	 // 1 string to match.
        if (memcmp(Name.data()+6, "func", 4) != 0)
          break;
        return AttributeCommonInfo::AT_IFunc;	 // "gnu::ifunc"
      case 'n':	 // 1 string to match.
        if (memcmp(Name.data()+6, "aked", 4) != 0)
          break;
        return AttributeCommonInfo::AT_Naked;	 // "gnu::naked"
      }
      break;
    }
    break;
  case 11:	 // 11 strings to match.
    switch (Name[0]) {
    default: break;
    case 'f':	 // 1 string to match.
      if (memcmp(Name.data()+1, "allthrough", 10) != 0)
        break;
      return AttributeCommonInfo::AT_FallThrough;	 // "fallthrough"
    case 'g':	 // 10 strings to match.
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
        break;
      switch (Name[5]) {
      default: break;
      case 'c':	 // 1 string to match.
        if (memcmp(Name.data()+6, "ommon", 5) != 0)
          break;
        return AttributeCommonInfo::AT_Common;	 // "gnu::common"
      case 'f':	 // 1 string to match.
        if (memcmp(Name.data()+6, "ormat", 5) != 0)
          break;
        return AttributeCommonInfo::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) != 0)
            break;
          return AttributeCommonInfo::AT_Restrict;	 // "gnu::malloc"
        case 'i':	 // 1 string to match.
          if (memcmp(Name.data()+7, "ps16", 4) != 0)
            break;
          return AttributeCommonInfo::AT_Mips16;	 // "gnu::mips16"
        case 's':	 // 1 string to match.
          if (memcmp(Name.data()+7, "_abi", 4) != 0)
            break;
          return AttributeCommonInfo::AT_MSABI;	 // "gnu::ms_abi"
        }
        break;
      case 'p':	 // 1 string to match.
        if (memcmp(Name.data()+6, "acked", 5) != 0)
          break;
        return AttributeCommonInfo::AT_Packed;	 // "gnu::packed"
      case 'r':	 // 1 string to match.
        if (memcmp(Name.data()+6, "etain", 5) != 0)
          break;
        return AttributeCommonInfo::AT_Retain;	 // "gnu::retain"
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+6, "ignal", 5) != 0)
          break;
        return AttributeCommonInfo::AT_AVRSignal;	 // "gnu::signal"
      case 't':	 // 1 string to match.
        if (memcmp(Name.data()+6, "arget", 5) != 0)
          break;
        return AttributeCommonInfo::AT_Target;	 // "gnu::target"
      case 'u':	 // 1 string to match.
        if (memcmp(Name.data()+6, "nused", 5) != 0)
          break;
        return AttributeCommonInfo::AT_Unused;	 // "gnu::unused"
      }
      break;
    }
    break;
  case 12:	 // 15 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 1 string to match.
      if (memcmp(Name.data()+1, "lang::guard", 11) != 0)
        break;
      return AttributeCommonInfo::AT_CFGuard;	 // "clang::guard"
    case 'g':	 // 13 strings to match.
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
        break;
      switch (Name[5]) {
      default: break;
      case '_':	 // 1 string to match.
        if (memcmp(Name.data()+6, "_const", 6) != 0)
          break;
        return AttributeCommonInfo::AT_Const;	 // "gnu::__const"
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+6, "ligned", 6) != 0)
          break;
        return AttributeCommonInfo::AT_Aligned;	 // "gnu::aligned"
      case 'c':	 // 1 string to match.
        if (memcmp(Name.data()+6, "leanup", 6) != 0)
          break;
        return AttributeCommonInfo::AT_Cleanup;	 // "gnu::cleanup"
      case 'f':	 // 1 string to match.
        if (memcmp(Name.data()+6, "latten", 6) != 0)
          break;
        return AttributeCommonInfo::AT_Flatten;	 // "gnu::flatten"
      case 'n':	 // 3 strings to match.
        if (Name[6] != 'o')
          break;
        switch (Name[7]) {
        default: break;
        case 'd':	 // 1 string to match.
          if (memcmp(Name.data()+8, "ebug", 4) != 0)
            break;
          return AttributeCommonInfo::AT_NoDebug;	 // "gnu::nodebug"
        case 'n':	 // 1 string to match.
          if (memcmp(Name.data()+8, "null", 4) != 0)
            break;
          return AttributeCommonInfo::AT_NonNull;	 // "gnu::nonnull"
        case 't':	 // 1 string to match.
          if (memcmp(Name.data()+8, "hrow", 4) != 0)
            break;
          return AttributeCommonInfo::AT_NoThrow;	 // "gnu::nothrow"
        }
        break;
      case 'r':	 // 2 strings to match.
        if (memcmp(Name.data()+6, "eg", 2) != 0)
          break;
        switch (Name[8]) {
        default: break;
        case 'c':	 // 1 string to match.
          if (memcmp(Name.data()+9, "all", 3) != 0)
            break;
          return AttributeCommonInfo::AT_RegCall;	 // "gnu::regcall"
        case 'p':	 // 1 string to match.
          if (memcmp(Name.data()+9, "arm", 3) != 0)
            break;
          return AttributeCommonInfo::AT_Regparm;	 // "gnu::regparm"
        }
        break;
      case 's':	 // 2 strings to match.
        switch (Name[6]) {
        default: break;
        case 'e':	 // 1 string to match.
          if (memcmp(Name.data()+7, "ction", 5) != 0)
            break;
          return AttributeCommonInfo::AT_Section;	 // "gnu::section"
        case 't':	 // 1 string to match.
          if (memcmp(Name.data()+7, "dcall", 5) != 0)
            break;
          return AttributeCommonInfo::AT_StdCall;	 // "gnu::stdcall"
        }
        break;
      case 'w':	 // 2 strings to match.
        switch (Name[6]) {
        default: break;
        case 'a':	 // 1 string to match.
          if (memcmp(Name.data()+7, "rning", 5) != 0)
            break;
          return AttributeCommonInfo::AT_Error;	 // "gnu::warning"
        case 'e':	 // 1 string to match.
          if (memcmp(Name.data()+7, "akref", 5) != 0)
            break;
          return AttributeCommonInfo::AT_WeakRef;	 // "gnu::weakref"
        }
        break;
      }
      break;
    case 'm':	 // 1 string to match.
      if (memcmp(Name.data()+1, "aybe_unused", 11) != 0)
        break;
      return AttributeCommonInfo::AT_Unused;	 // "maybe_unused"
    }
    break;
  case 13:	 // 12 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 4 strings to match.
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
        break;
      switch (Name[7]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+8, "ssume", 5) != 0)
          break;
        return AttributeCommonInfo::AT_Assumption;	 // "clang::assume"
      case 'b':	 // 1 string to match.
        if (memcmp(Name.data()+8, "locks", 5) != 0)
          break;
        return AttributeCommonInfo::AT_Blocks;	 // "clang::blocks"
      case 'l':	 // 1 string to match.
        if (memcmp(Name.data()+8, "ikely", 5) != 0)
          break;
        return AttributeCommonInfo::AT_Likely;	 // "clang::likely"
      case 'p':	 // 1 string to match.
        if (memcmp(Name.data()+8, "ascal", 5) != 0)
          break;
        return AttributeCommonInfo::AT_Pascal;	 // "clang::pascal"
      }
      break;
    case 'g':	 // 8 strings to match.
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
        break;
      switch (Name[5]) {
      default: break;
      case 'f':	 // 1 string to match.
        if (memcmp(Name.data()+6, "astcall", 7) != 0)
          break;
        return AttributeCommonInfo::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) != 0)
            break;
          return AttributeCommonInfo::AT_NoCommon;	 // "gnu::nocommon"
        case 'i':	 // 1 string to match.
          if (memcmp(Name.data()+8, "nline", 5) != 0)
            break;
          return AttributeCommonInfo::AT_NoInline;	 // "gnu::noinline"
        case 'm':	 // 1 string to match.
          if (memcmp(Name.data()+8, "ips16", 5) != 0)
            break;
          return AttributeCommonInfo::AT_NoMips16;	 // "gnu::nomips16"
        case 'r':	 // 1 string to match.
          if (memcmp(Name.data()+8, "eturn", 5) != 0)
            break;
          return AttributeCommonInfo::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) != 0)
            break;
          return AttributeCommonInfo::AT_Sentinel;	 // "gnu::sentinel"
        case 'y':	 // 1 string to match.
          if (memcmp(Name.data()+7, "sv_abi", 6) != 0)
            break;
          return AttributeCommonInfo::AT_SysVABI;	 // "gnu::sysv_abi"
        }
        break;
      case 't':	 // 1 string to match.
        if (memcmp(Name.data()+6, "hiscall", 7) != 0)
          break;
        return AttributeCommonInfo::AT_ThisCall;	 // "gnu::thiscall"
      }
      break;
    }
    break;
  case 14:	 // 14 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 5 strings to match.
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
        break;
      switch (Name[7]) {
      default: break;
      case 'm':	 // 1 string to match.
        if (memcmp(Name.data()+8, "insize", 6) != 0)
          break;
        return AttributeCommonInfo::AT_MinSize;	 // "clang::minsize"
      case 'n':	 // 2 strings to match.
        if (Name[8] != 'o')
          break;
        switch (Name[9]) {
        default: break;
        case 'd':	 // 1 string to match.
          if (memcmp(Name.data()+10, "eref", 4) != 0)
            break;
          return AttributeCommonInfo::AT_NoDeref;	 // "clang::noderef"
        case 'm':	 // 1 string to match.
          if (memcmp(Name.data()+10, "erge", 4) != 0)
            break;
          return AttributeCommonInfo::AT_NoMerge;	 // "clang::nomerge"
        }
        break;
      case 'o':	 // 2 strings to match.
        switch (Name[8]) {
        default: break;
        case 'b':	 // 1 string to match.
          if (memcmp(Name.data()+9, "jc_gc", 5) != 0)
            break;
          return AttributeCommonInfo::AT_ObjCGC;	 // "clang::objc_gc"
        case 'p':	 // 1 string to match.
          if (memcmp(Name.data()+9, "tnone", 5) != 0)
            break;
          return AttributeCommonInfo::AT_OptimizeNone;	 // "clang::optnone"
        }
        break;
      }
      break;
    case 'g':	 // 9 strings to match.
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
        break;
      switch (Name[5]) {
      default: break;
      case 'd':	 // 2 strings to match.
        if (memcmp(Name.data()+6, "ll", 2) != 0)
          break;
        switch (Name[8]) {
        default: break;
        case 'e':	 // 1 string to match.
          if (memcmp(Name.data()+9, "xport", 5) != 0)
            break;
          return AttributeCommonInfo::AT_DLLExport;	 // "gnu::dllexport"
        case 'i':	 // 1 string to match.
          if (memcmp(Name.data()+9, "mport", 5) != 0)
            break;
          return AttributeCommonInfo::AT_DLLImport;	 // "gnu::dllimport"
        }
        break;
      case 'i':	 // 1 string to match.
        if (memcmp(Name.data()+6, "nterrupt", 8) != 0)
          break;
        return AttributeCommonInfo::AT_Interrupt;	 // "gnu::interrupt"
      case 'l':	 // 1 string to match.
        if (memcmp(Name.data()+6, "ong_call", 8) != 0)
          break;
        return AttributeCommonInfo::AT_MipsLongCall;	 // "gnu::long_call"
      case 'm':	 // 3 strings to match.
        switch (Name[6]) {
        default: break;
        case 'a':	 // 1 string to match.
          if (memcmp(Name.data()+7, "y_alias", 7) != 0)
            break;
          return AttributeCommonInfo::AT_MayAlias;	 // "gnu::may_alias"
        case 'i':	 // 1 string to match.
          if (memcmp(Name.data()+7, "cromips", 7) != 0)
            break;
          return AttributeCommonInfo::AT_MicroMips;	 // "gnu::micromips"
        case 's':	 // 1 string to match.
          if (memcmp(Name.data()+7, "_struct", 7) != 0)
            break;
          return AttributeCommonInfo::AT_MSStruct;	 // "gnu::ms_struct"
        }
        break;
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+6, "electany", 8) != 0)
          break;
        return AttributeCommonInfo::AT_SelectAny;	 // "gnu::selectany"
      case 't':	 // 1 string to match.
        if (memcmp(Name.data()+6, "ls_model", 8) != 0)
          break;
        return AttributeCommonInfo::AT_TLSModel;	 // "gnu::tls_model"
      }
      break;
    }
    break;
  case 15:	 // 18 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 9 strings to match.
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
        break;
      switch (Name[7]) {
      default: break;
      case 'N':	 // 1 string to match.
        if (memcmp(Name.data()+8, "SObject", 7) != 0)
          break;
        return AttributeCommonInfo::AT_ObjCNSObject;	 // "clang::NSObject"
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+8, "nnotate", 7) != 0)
          break;
        return AttributeCommonInfo::AT_Annotate;	 // "clang::annotate"
      case 'c':	 // 1 string to match.
        if (memcmp(Name.data()+8, "allback", 7) != 0)
          break;
        return AttributeCommonInfo::AT_Callback;	 // "clang::callback"
      case 'i':	 // 2 strings to match.
        if (Name[8] != 'b')
          break;
        switch (Name[9]) {
        default: break;
        case 'a':	 // 1 string to match.
          if (memcmp(Name.data()+10, "ction", 5) != 0)
            break;
          return AttributeCommonInfo::AT_IBAction;	 // "clang::ibaction"
        case 'o':	 // 1 string to match.
          if (memcmp(Name.data()+10, "utlet", 5) != 0)
            break;
          return AttributeCommonInfo::AT_IBOutlet;	 // "clang::iboutlet"
        }
        break;
      case 'm':	 // 1 string to match.
        if (memcmp(Name.data()+8, "usttail", 7) != 0)
          break;
        return AttributeCommonInfo::AT_MustTail;	 // "clang::musttail"
      case 'n':	 // 2 strings to match.
        if (Name[8] != 'o')
          break;
        switch (Name[9]) {
        default: break;
        case 'e':	 // 1 string to match.
          if (memcmp(Name.data()+10, "scape", 5) != 0)
            break;
          return AttributeCommonInfo::AT_NoEscape;	 // "clang::noescape"
        case 'i':	 // 1 string to match.
          if (memcmp(Name.data()+10, "nline", 5) != 0)
            break;
          return AttributeCommonInfo::AT_NoInline;	 // "clang::noinline"
        }
        break;
      case 'u':	 // 1 string to match.
        if (memcmp(Name.data()+8, "nlikely", 7) != 0)
          break;
        return AttributeCommonInfo::AT_Unlikely;	 // "clang::unlikely"
      }
      break;
    case 'g':	 // 9 strings to match.
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
        break;
      switch (Name[5]) {
      default: break;
      case 'a':	 // 2 strings to match.
        switch (Name[6]) {
        default: break;
        case 'l':	 // 1 string to match.
          if (memcmp(Name.data()+7, "loc_size", 8) != 0)
            break;
          return AttributeCommonInfo::AT_AllocSize;	 // "gnu::alloc_size"
        case 'r':	 // 1 string to match.
          if (memcmp(Name.data()+7, "tificial", 8) != 0)
            break;
          return AttributeCommonInfo::AT_Artificial;	 // "gnu::artificial"
        }
        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) != 0)
            break;
          return AttributeCommonInfo::AT_Deprecated;	 // "gnu::deprecated"
        case 's':	 // 1 string to match.
          if (memcmp(Name.data()+8, "tructor", 7) != 0)
            break;
          return AttributeCommonInfo::AT_Destructor;	 // "gnu::destructor"
        }
        break;
      case 'f':	 // 1 string to match.
        if (memcmp(Name.data()+6, "ormat_arg", 9) != 0)
          break;
        return AttributeCommonInfo::AT_FormatArg;	 // "gnu::format_arg"
      case 'g':	 // 1 string to match.
        if (memcmp(Name.data()+6, "nu_inline", 9) != 0)
          break;
        return AttributeCommonInfo::AT_GNUInline;	 // "gnu::gnu_inline"
      case 'n':	 // 1 string to match.
        if (memcmp(Name.data()+6, "ocf_check", 9) != 0)
          break;
        return AttributeCommonInfo::AT_AnyX86NoCfCheck;	 // "gnu::nocf_check"
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+6, "hort_call", 9) != 0)
          break;
        return AttributeCommonInfo::AT_MipsShortCall;	 // "gnu::short_call"
      case 'v':	 // 1 string to match.
        if (memcmp(Name.data()+6, "isibility", 9) != 0)
          break;
        return AttributeCommonInfo::AT_Visibility;	 // "gnu::visibility"
      }
      break;
    }
    break;
  case 16:	 // 9 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 3 strings to match.
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
        break;
      switch (Name[7]) {
      default: break;
      case 'f':	 // 1 string to match.
        if (memcmp(Name.data()+8, "lag_enum", 8) != 0)
          break;
        return AttributeCommonInfo::AT_FlagEnum;	 // "clang::flag_enum"
      case 'n':	 // 1 string to match.
        if (memcmp(Name.data()+8, "ouwtable", 8) != 0)
          break;
        return AttributeCommonInfo::AT_NoUwtable;	 // "clang::nouwtable"
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+8, "wiftcall", 8) != 0)
          break;
        return AttributeCommonInfo::AT_SwiftCall;	 // "clang::swiftcall"
      }
      break;
    case 'g':	 // 6 strings to match.
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
        break;
      switch (Name[5]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+6, "lloc_align", 10) != 0)
          break;
        return AttributeCommonInfo::AT_AllocAlign;	 // "gnu::alloc_align"
      case 'c':	 // 1 string to match.
        if (memcmp(Name.data()+6, "onstructor", 10) != 0)
          break;
        return AttributeCommonInfo::AT_Constructor;	 // "gnu::constructor"
      case 'f':	 // 1 string to match.
        if (memcmp(Name.data()+6, "allthrough", 10) != 0)
          break;
        return AttributeCommonInfo::AT_FallThrough;	 // "gnu::fallthrough"
      case 'n':	 // 1 string to match.
        if (memcmp(Name.data()+6, "omicromips", 10) != 0)
          break;
        return AttributeCommonInfo::AT_NoMicroMips;	 // "gnu::nomicromips"
      case 'v':	 // 1 string to match.
        if (memcmp(Name.data()+6, "ector_size", 10) != 0)
          break;
        return AttributeCommonInfo::AT_VectorSize;	 // "gnu::vector_size"
      case 'w':	 // 1 string to match.
        if (memcmp(Name.data()+6, "arn_unused", 10) != 0)
          break;
        return AttributeCommonInfo::AT_WarnUnused;	 // "gnu::warn_unused"
      }
      break;
    }
    break;
  case 17:	 // 4 strings to match.
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
      break;
    switch (Name[7]) {
    default: break;
    case 'c':	 // 1 string to match.
      if (memcmp(Name.data()+8, "onvergent", 9) != 0)
        break;
      return AttributeCommonInfo::AT_Convergent;	 // "clang::convergent"
    case 'n':	 // 1 string to match.
      if (memcmp(Name.data()+8, "o_builtin", 9) != 0)
        break;
      return AttributeCommonInfo::AT_NoBuiltin;	 // "clang::no_builtin"
    case 'u':	 // 1 string to match.
      if (memcmp(Name.data()+8, "se_handle", 9) != 0)
        break;
      return AttributeCommonInfo::AT_UseHandle;	 // "clang::use_handle"
    case 'v':	 // 1 string to match.
      if (memcmp(Name.data()+8, "ectorcall", 9) != 0)
        break;
      return AttributeCommonInfo::AT_VectorCall;	 // "clang::vectorcall"
    }
    break;
  case 18:	 // 20 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 17 strings to match.
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
        break;
      switch (Name[7]) {
      default: break;
      case 'c':	 // 2 strings to match.
        switch (Name[8]) {
        default: break;
        case 'a':	 // 1 string to match.
          if (memcmp(Name.data()+9, "lled_once", 9) != 0)
            break;
          return AttributeCommonInfo::AT_CalledOnce;	 // "clang::called_once"
        case 'f':	 // 1 string to match.
          if (memcmp(Name.data()+9, "_consumed", 9) != 0)
            break;
          return AttributeCommonInfo::AT_CFConsumed;	 // "clang::cf_consumed"
        }
        break;
      case 'e':	 // 2 strings to match.
        switch (Name[8]) {
        default: break;
        case 'n':	 // 1 string to match.
          if (memcmp(Name.data()+9, "force_tcb", 9) != 0)
            break;
          return AttributeCommonInfo::AT_EnforceTCB;	 // "clang::enforce_tcb"
        case 'x':	 // 1 string to match.
          if (memcmp(Name.data()+9, "port_name", 9) != 0)
            break;
          return AttributeCommonInfo::AT_WebAssemblyExportName;	 // "clang::export_name"
        }
        break;
      case 'i':	 // 1 string to match.
        if (memcmp(Name.data()+8, "mport_name", 10) != 0)
          break;
        return AttributeCommonInfo::AT_WebAssemblyImportName;	 // "clang::import_name"
      case 'm':	 // 2 strings to match.
        if (Name[8] != 'a')
          break;
        switch (Name[9]) {
        default: break;
        case 't':	 // 1 string to match.
          if (memcmp(Name.data()+10, "rix_type", 8) != 0)
            break;
          return AttributeCommonInfo::AT_MatrixType;	 // "clang::matrix_type"
        case 'y':	 // 1 string to match.
          if (memcmp(Name.data()+10, "be_undef", 8) != 0)
            break;
          return AttributeCommonInfo::AT_MaybeUndef;	 // "clang::maybe_undef"
        }
        break;
      case 'n':	 // 3 strings to match.
        switch (Name[8]) {
        default: break;
        case 'o':	 // 2 strings to match.
          switch (Name[9]) {
          default: break;
          case '_':	 // 1 string to match.
            if (memcmp(Name.data()+10, "sanitize", 8) != 0)
              break;
            return AttributeCommonInfo::AT_NoSanitize;	 // "clang::no_sanitize"
          case 'd':	 // 1 string to match.
            if (memcmp(Name.data()+10, "uplicate", 8) != 0)
              break;
            return AttributeCommonInfo::AT_NoDuplicate;	 // "clang::noduplicate"
          }
          break;
        case 's':	 // 1 string to match.
          if (memcmp(Name.data()+9, "_consumed", 9) != 0)
            break;
          return AttributeCommonInfo::AT_NSConsumed;	 // "clang::ns_consumed"
        }
        break;
      case 'o':	 // 3 strings to match.
        switch (Name[8]) {
        default: break;
        case 'b':	 // 2 strings to match.
          if (memcmp(Name.data()+9, "jc_", 3) != 0)
            break;
          switch (Name[12]) {
          default: break;
          case 'b':	 // 1 string to match.
            if (memcmp(Name.data()+13, "ridge", 5) != 0)
              break;
            return AttributeCommonInfo::AT_ObjCBridge;	 // "clang::objc_bridge"
          case 'd':	 // 1 string to match.
            if (memcmp(Name.data()+13, "irect", 5) != 0)
              break;
            return AttributeCommonInfo::AT_ObjCDirect;	 // "clang::objc_direct"
          }
          break;
        case 's':	 // 1 string to match.
          if (memcmp(Name.data()+9, "_consumed", 9) != 0)
            break;
          return AttributeCommonInfo::AT_OSConsumed;	 // "clang::os_consumed"
        }
        break;
      case 's':	 // 2 strings to match.
        switch (Name[8]) {
        default: break;
        case 'w':	 // 1 string to match.
          if (memcmp(Name.data()+9, "ift_async", 9) != 0)
            break;
          return AttributeCommonInfo::AT_SwiftAsync;	 // "clang::swift_async"
        case 'y':	 // 1 string to match.
          if (memcmp(Name.data()+9, "cl_kernel", 9) != 0)
            break;
          return AttributeCommonInfo::AT_SYCLKernel;	 // "clang::sycl_kernel"
        }
        break;
      case 'u':	 // 1 string to match.
        if (memcmp(Name.data()+8, "navailable", 10) != 0)
          break;
        return AttributeCommonInfo::AT_Unavailable;	 // "clang::unavailable"
      case 'w':	 // 1 string to match.
        if (memcmp(Name.data()+8, "eak_import", 10) != 0)
          break;
        return AttributeCommonInfo::AT_WeakImport;	 // "clang::weak_import"
      }
      break;
    case 'g':	 // 3 strings to match.
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
        break;
      switch (Name[5]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+6, "lways_inline", 12) != 0)
          break;
        return AttributeCommonInfo::AT_AlwaysInline;	 // "gnu::always_inline"
      case 'r':	 // 1 string to match.
        if (memcmp(Name.data()+6, "eturns_twice", 12) != 0)
          break;
        return AttributeCommonInfo::AT_ReturnsTwice;	 // "gnu::returns_twice"
      case 't':	 // 1 string to match.
        if (memcmp(Name.data()+6, "arget_clones", 12) != 0)
          break;
        return AttributeCommonInfo::AT_TargetClones;	 // "gnu::target_clones"
      }
      break;
    }
    break;
  case 19:	 // 11 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 9 strings to match.
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
        break;
      switch (Name[7]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+8, "vailability", 11) != 0)
          break;
        return AttributeCommonInfo::AT_Availability;	 // "clang::availability"
      case 'b':	 // 2 strings to match.
        if (memcmp(Name.data()+8, "tf_", 3) != 0)
          break;
        switch (Name[11]) {
        default: break;
        case 'd':	 // 1 string to match.
          if (memcmp(Name.data()+12, "ecl_tag", 7) != 0)
            break;
          return AttributeCommonInfo::AT_BTFDeclTag;	 // "clang::btf_decl_tag"
        case 't':	 // 1 string to match.
          if (memcmp(Name.data()+12, "ype_tag", 7) != 0)
            break;
          return AttributeCommonInfo::AT_BTFTypeTag;	 // "clang::btf_type_tag"
        }
        break;
      case 'c':	 // 2 strings to match.
        if (memcmp(Name.data()+8, "pu_", 3) != 0)
          break;
        switch (Name[11]) {
        default: break;
        case 'd':	 // 1 string to match.
          if (memcmp(Name.data()+12, "ispatch", 7) != 0)
            break;
          return AttributeCommonInfo::AT_CPUDispatch;	 // "clang::cpu_dispatch"
        case 's':	 // 1 string to match.
          if (memcmp(Name.data()+12, "pecific", 7) != 0)
            break;
          return AttributeCommonInfo::AT_CPUSpecific;	 // "clang::cpu_specific"
        }
        break;
      case 'o':	 // 3 strings to match.
        switch (Name[8]) {
        default: break;
        case 'b':	 // 1 string to match.
          if (memcmp(Name.data()+9, "jc_boxable", 10) != 0)
            break;
          return AttributeCommonInfo::AT_ObjCBoxable;	 // "clang::objc_boxable"
        case 'p':	 // 1 string to match.
          if (memcmp(Name.data()+9, "encl_local", 10) != 0)
            break;
          return AttributeCommonInfo::AT_OpenCLLocalAddressSpace;	 // "clang::opencl_local"
        case 'v':	 // 1 string to match.
          if (memcmp(Name.data()+9, "erloadable", 10) != 0)
            break;
          return AttributeCommonInfo::AT_Overloadable;	 // "clang::overloadable"
        }
        break;
      case 'p':	 // 1 string to match.
        if (memcmp(Name.data()+8, "reserve_all", 11) != 0)
          break;
        return AttributeCommonInfo::AT_PreserveAll;	 // "clang::preserve_all"
      }
      break;
    case 'g':	 // 2 strings to match.
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
        break;
      switch (Name[5]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+6, "ssume_aligned", 13) != 0)
          break;
        return AttributeCommonInfo::AT_AssumeAligned;	 // "gnu::assume_aligned"
      case 'n':	 // 1 string to match.
        if (memcmp(Name.data()+6, "o_split_stack", 13) != 0)
          break;
        return AttributeCommonInfo::AT_NoSplitStack;	 // "gnu::no_split_stack"
      }
      break;
    }
    break;
  case 20:	 // 12 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 10 strings to match.
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
        break;
      switch (Name[7]) {
      default: break;
      case 'a':	 // 4 strings to match.
        switch (Name[8]) {
        default: break;
        case 'd':	 // 1 string to match.
          if (memcmp(Name.data()+9, "dress_space", 11) != 0)
            break;
          return AttributeCommonInfo::AT_AddressSpace;	 // "clang::address_space"
        case 'l':	 // 1 string to match.
          if (memcmp(Name.data()+9, "ways_inline", 11) != 0)
            break;
          return AttributeCommonInfo::AT_AlwaysInline;	 // "clang::always_inline"
        case 'm':	 // 1 string to match.
          if (memcmp(Name.data()+9, "dgpu_kernel", 11) != 0)
            break;
          return AttributeCommonInfo::AT_AMDGPUKernelCall;	 // "clang::amdgpu_kernel"
        case 'n':	 // 1 string to match.
          if (memcmp(Name.data()+9, "notate_type", 11) != 0)
            break;
          return AttributeCommonInfo::AT_AnnotateType;	 // "clang::annotate_type"
        }
        break;
      case 'b':	 // 1 string to match.
        if (memcmp(Name.data()+8, "uiltin_alias", 12) != 0)
          break;
        return AttributeCommonInfo::AT_BuiltinAlias;	 // "clang::builtin_alias"
      case 'i':	 // 1 string to match.
        if (memcmp(Name.data()+8, "mport_module", 12) != 0)
          break;
        return AttributeCommonInfo::AT_WebAssemblyImportModule;	 // "clang::import_module"
      case 'o':	 // 1 string to match.
        if (memcmp(Name.data()+8, "pencl_global", 12) != 0)
          break;
        return AttributeCommonInfo::AT_OpenCLGlobalAddressSpace;	 // "clang::opencl_global"
      case 'p':	 // 1 string to match.
        if (memcmp(Name.data()+8, "reserve_most", 12) != 0)
          break;
        return AttributeCommonInfo::AT_PreserveMost;	 // "clang::preserve_most"
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+8, "wift_context", 12) != 0)
          break;
        return AttributeCommonInfo::AT_SwiftContext;	 // "clang::swift_context"
      case 'x':	 // 1 string to match.
        if (memcmp(Name.data()+8, "ray_log_args", 12) != 0)
          break;
        return AttributeCommonInfo::AT_XRayLogArgs;	 // "clang::xray_log_args"
      }
      break;
    case 'g':	 // 2 strings to match.
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
        break;
      switch (Name[5]) {
      default: break;
      case 'f':	 // 1 string to match.
        if (memcmp(Name.data()+6, "unction_return", 14) != 0)
          break;
        return AttributeCommonInfo::AT_FunctionReturnThunks;	 // "gnu::function_return"
      case 'r':	 // 1 string to match.
        if (memcmp(Name.data()+6, "eturns_nonnull", 14) != 0)
          break;
        return AttributeCommonInfo::AT_ReturnsNonNull;	 // "gnu::returns_nonnull"
      }
      break;
    }
    break;
  case 21:	 // 8 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 7 strings to match.
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
        break;
      switch (Name[7]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+8, "cquire_handle", 13) != 0)
          break;
        return AttributeCommonInfo::AT_AcquireHandle;	 // "clang::acquire_handle"
      case 'o':	 // 4 strings to match.
        switch (Name[8]) {
        default: break;
        case 'b':	 // 2 strings to match.
          if (memcmp(Name.data()+9, "jc_", 3) != 0)
            break;
          switch (Name[12]) {
          default: break;
          case 'e':	 // 1 string to match.
            if (memcmp(Name.data()+13, "xception", 8) != 0)
              break;
            return AttributeCommonInfo::AT_ObjCException;	 // "clang::objc_exception"
          case 'o':	 // 1 string to match.
            if (memcmp(Name.data()+13, "wnership", 8) != 0)
              break;
            return AttributeCommonInfo::AT_ObjCOwnership;	 // "clang::objc_ownership"
          }
          break;
        case 'p':	 // 2 strings to match.
          if (memcmp(Name.data()+9, "encl_", 5) != 0)
            break;
          switch (Name[14]) {
          default: break;
          case 'g':	 // 1 string to match.
            if (memcmp(Name.data()+15, "eneric", 6) != 0)
              break;
            return AttributeCommonInfo::AT_OpenCLGenericAddressSpace;	 // "clang::opencl_generic"
          case 'p':	 // 1 string to match.
            if (memcmp(Name.data()+15, "rivate", 6) != 0)
              break;
            return AttributeCommonInfo::AT_OpenCLPrivateAddressSpace;	 // "clang::opencl_private"
          }
          break;
        }
        break;
      case 'r':	 // 1 string to match.
        if (memcmp(Name.data()+8, "elease_handle", 13) != 0)
          break;
        return AttributeCommonInfo::AT_ReleaseHandle;	 // "clang::release_handle"
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+8, "wiftasynccall", 13) != 0)
          break;
        return AttributeCommonInfo::AT_SwiftAsyncCall;	 // "clang::swiftasynccall"
      }
      break;
    case 'g':	 // 1 string to match.
      if (memcmp(Name.data()+1, "nu::randomize_layout", 20) != 0)
        break;
      return AttributeCommonInfo::AT_RandomizeLayout;	 // "gnu::randomize_layout"
    }
    break;
  case 22:	 // 9 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 8 strings to match.
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
        break;
      switch (Name[7]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+8, "arch64_sve_pcs", 14) != 0)
          break;
        return AttributeCommonInfo::AT_AArch64SVEPcs;	 // "clang::aarch64_sve_pcs"
      case 'n':	 // 1 string to match.
        if (memcmp(Name.data()+8, "ot_tail_called", 14) != 0)
          break;
        return AttributeCommonInfo::AT_NotTailCalled;	 // "clang::not_tail_called"
      case 'o':	 // 5 strings to match.
        switch (Name[8]) {
        default: break;
        case 'b':	 // 2 strings to match.
          if (memcmp(Name.data()+9, "jc_", 3) != 0)
            break;
          switch (Name[12]) {
          default: break;
          case 'c':	 // 1 string to match.
            if (memcmp(Name.data()+13, "lass_stub", 9) != 0)
              break;
            return AttributeCommonInfo::AT_ObjCClassStub;	 // "clang::objc_class_stub"
          case 'r':	 // 1 string to match.
            if (memcmp(Name.data()+13, "oot_class", 9) != 0)
              break;
            return AttributeCommonInfo::AT_ObjCRootClass;	 // "clang::objc_root_class"
          }
          break;
        case 'p':	 // 1 string to match.
          if (memcmp(Name.data()+9, "encl_constant", 13) != 0)
            break;
          return AttributeCommonInfo::AT_OpenCLConstantAddressSpace;	 // "clang::opencl_constant"
        case 'w':	 // 2 strings to match.
          if (memcmp(Name.data()+9, "nership_", 8) != 0)
            break;
          switch (Name[17]) {
          default: break;
          case 'h':	 // 1 string to match.
            if (memcmp(Name.data()+18, "olds", 4) != 0)
              break;
            return AttributeCommonInfo::AT_Ownership;	 // "clang::ownership_holds"
          case 't':	 // 1 string to match.
            if (memcmp(Name.data()+18, "akes", 4) != 0)
              break;
            return AttributeCommonInfo::AT_Ownership;	 // "clang::ownership_takes"
          }
          break;
        }
        break;
      case 't':	 // 1 string to match.
        if (memcmp(Name.data()+8, "ype_visibility", 14) != 0)
          break;
        return AttributeCommonInfo::AT_TypeVisibility;	 // "clang::type_visibility"
      }
      break;
    case 'g':	 // 1 string to match.
      if (memcmp(Name.data()+1, "nu::transparent_union", 21) != 0)
        break;
      return AttributeCommonInfo::AT_TransparentUnion;	 // "gnu::transparent_union"
    }
    break;
  case 23:	 // 9 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 7 strings to match.
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
        break;
      switch (Name[7]) {
      default: break;
      case 'e':	 // 1 string to match.
        if (memcmp(Name.data()+8, "nforce_tcb_leaf", 15) != 0)
          break;
        return AttributeCommonInfo::AT_EnforceTCBLeaf;	 // "clang::enforce_tcb_leaf"
      case 'i':	 // 1 string to match.
        if (memcmp(Name.data()+8, "nternal_linkage", 15) != 0)
          break;
        return AttributeCommonInfo::AT_InternalLinkage;	 // "clang::internal_linkage"
      case 'm':	 // 1 string to match.
        if (memcmp(Name.data()+8, "in_vector_width", 15) != 0)
          break;
        return AttributeCommonInfo::AT_MinVectorWidth;	 // "clang::min_vector_width"
      case 'n':	 // 2 strings to match.
        switch (Name[8]) {
        default: break;
        case 'e':	 // 1 string to match.
          if (memcmp(Name.data()+9, "on_vector_type", 14) != 0)
            break;
          return AttributeCommonInfo::AT_NeonVectorType;	 // "clang::neon_vector_type"
        case 's':	 // 1 string to match.
          if (memcmp(Name.data()+9, "_consumes_self", 14) != 0)
            break;
          return AttributeCommonInfo::AT_NSConsumesSelf;	 // "clang::ns_consumes_self"
        }
        break;
      case 'o':	 // 1 string to match.
        if (memcmp(Name.data()+8, "s_consumes_this", 15) != 0)
          break;
        return AttributeCommonInfo::AT_OSConsumesThis;	 // "clang::os_consumes_this"
      case 'p':	 // 1 string to match.
        if (memcmp(Name.data()+8, "ass_object_size", 15) != 0)
          break;
        return AttributeCommonInfo::AT_PassObjectSize;	 // "clang::pass_object_size"
      }
      break;
    case 'g':	 // 2 strings to match.
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
        break;
      switch (Name[5]) {
      default: break;
      case 'n':	 // 1 string to match.
        if (memcmp(Name.data()+6, "o_sanitize_thread", 17) != 0)
          break;
        return AttributeCommonInfo::AT_NoSanitizeSpecific;	 // "gnu::no_sanitize_thread"
      case 'w':	 // 1 string to match.
        if (memcmp(Name.data()+6, "arn_unused_result", 17) != 0)
          break;
        return AttributeCommonInfo::AT_WarnUnusedResult;	 // "gnu::warn_unused_result"
      }
      break;
    }
    break;
  case 24:	 // 6 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 3 strings to match.
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
        break;
      switch (Name[7]) {
      default: break;
      case 'o':	 // 2 strings to match.
        switch (Name[8]) {
        default: break;
        case 'b':	 // 1 string to match.
          if (memcmp(Name.data()+9, "jc_runtime_name", 15) != 0)
            break;
          return AttributeCommonInfo::AT_ObjCRuntimeName;	 // "clang::objc_runtime_name"
        case 'w':	 // 1 string to match.
          if (memcmp(Name.data()+9, "nership_returns", 15) != 0)
            break;
          return AttributeCommonInfo::AT_Ownership;	 // "clang::ownership_returns"
        }
        break;
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+8, "wift_async_error", 16) != 0)
          break;
        return AttributeCommonInfo::AT_SwiftAsyncError;	 // "clang::swift_async_error"
      }
      break;
    case 'g':	 // 3 strings to match.
      if (memcmp(Name.data()+1, "nu::", 4) != 0)
        break;
      switch (Name[5]) {
      default: break;
      case 'n':	 // 2 strings to match.
        if (memcmp(Name.data()+6, "o_", 2) != 0)
          break;
        switch (Name[8]) {
        default: break;
        case 'r':	 // 1 string to match.
          if (memcmp(Name.data()+9, "andomize_layout", 15) != 0)
            break;
          return AttributeCommonInfo::AT_NoRandomizeLayout;	 // "gnu::no_randomize_layout"
        case 's':	 // 1 string to match.
          if (memcmp(Name.data()+9, "anitize_address", 15) != 0)
            break;
          return AttributeCommonInfo::AT_NoSanitizeSpecific;	 // "gnu::no_sanitize_address"
        }
        break;
      case 'z':	 // 1 string to match.
        if (memcmp(Name.data()+6, "ero_call_used_regs", 18) != 0)
          break;
        return AttributeCommonInfo::AT_ZeroCallUsedRegs;	 // "gnu::zero_call_used_regs"
      }
      break;
    }
    break;
  case 25:	 // 12 strings to match.
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
      break;
    switch (Name[7]) {
    default: break;
    case 'a':	 // 1 string to match.
      if (memcmp(Name.data()+8, "arch64_vector_pcs", 17) != 0)
        break;
      return AttributeCommonInfo::AT_AArch64VectorPcs;	 // "clang::aarch64_vector_pcs"
    case 'd':	 // 1 string to match.
      if (memcmp(Name.data()+8, "isable_tail_calls", 17) != 0)
        break;
      return AttributeCommonInfo::AT_DisableTailCalls;	 // "clang::disable_tail_calls"
    case 'e':	 // 1 string to match.
      if (memcmp(Name.data()+8, "num_extensibility", 17) != 0)
        break;
      return AttributeCommonInfo::AT_EnumExtensibility;	 // "clang::enum_extensibility"
    case 'i':	 // 1 string to match.
      if (memcmp(Name.data()+8, "boutletcollection", 17) != 0)
        break;
      return AttributeCommonInfo::AT_IBOutletCollection;	 // "clang::iboutletcollection"
    case 'm':	 // 1 string to match.
      if (memcmp(Name.data()+8, "ig_server_routine", 17) != 0)
        break;
      return AttributeCommonInfo::AT_MIGServerRoutine;	 // "clang::mig_server_routine"
    case 'n':	 // 2 strings to match.
      if (memcmp(Name.data()+8, "o_s", 3) != 0)
        break;
      switch (Name[11]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+12, "nitize_memory", 13) != 0)
          break;
        return AttributeCommonInfo::AT_NoSanitizeSpecific;	 // "clang::no_sanitize_memory"
      case 't':	 // 1 string to match.
        if (memcmp(Name.data()+12, "ack_protector", 13) != 0)
          break;
        return AttributeCommonInfo::AT_NoStackProtector;	 // "clang::no_stack_protector"
      }
      break;
    case 'o':	 // 3 strings to match.
      switch (Name[8]) {
      default: break;
      case 'b':	 // 2 strings to match.
        if (memcmp(Name.data()+9, "jc_", 3) != 0)
          break;
        switch (Name[12]) {
        default: break;
        case 'm':	 // 1 string to match.
          if (memcmp(Name.data()+13, "ethod_family", 12) != 0)
            break;
          return AttributeCommonInfo::AT_ObjCMethodFamily;	 // "clang::objc_method_family"
        case 'n':	 // 1 string to match.
          if (memcmp(Name.data()+13, "onlazy_class", 12) != 0)
            break;
          return AttributeCommonInfo::AT_ObjCNonLazyClass;	 // "clang::objc_nonlazy_class"
        }
        break;
      case 'p':	 // 1 string to match.
        if (memcmp(Name.data()+9, "encl_global_host", 16) != 0)
          break;
        return AttributeCommonInfo::AT_OpenCLGlobalHostAddressSpace;	 // "clang::opencl_global_host"
      }
      break;
    case 's':	 // 2 strings to match.
      switch (Name[8]) {
      default: break;
      case 'w':	 // 1 string to match.
        if (memcmp(Name.data()+9, "ift_error_result", 16) != 0)
          break;
        return AttributeCommonInfo::AT_SwiftErrorResult;	 // "clang::swift_error_result"
      case 'y':	 // 1 string to match.
        if (memcmp(Name.data()+9, "cl_special_class", 16) != 0)
          break;
        return AttributeCommonInfo::AT_SYCLSpecialClass;	 // "clang::sycl_special_class"
      }
      break;
    }
    break;
  case 26:	 // 11 strings to match.
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
      break;
    switch (Name[7]) {
    default: break;
    case 'c':	 // 3 strings to match.
      if (memcmp(Name.data()+8, "f_", 2) != 0)
        break;
      switch (Name[10]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+11, "udited_transfer", 15) != 0)
          break;
        return AttributeCommonInfo::AT_CFAuditedTransfer;	 // "clang::cf_audited_transfer"
      case 'r':	 // 1 string to match.
        if (memcmp(Name.data()+11, "eturns_retained", 15) != 0)
          break;
        return AttributeCommonInfo::AT_CFReturnsRetained;	 // "clang::cf_returns_retained"
      case 'u':	 // 1 string to match.
        if (memcmp(Name.data()+11, "nknown_transfer", 15) != 0)
          break;
        return AttributeCommonInfo::AT_CFUnknownTransfer;	 // "clang::cf_unknown_transfer"
      }
      break;
    case 'd':	 // 1 string to match.
      if (memcmp(Name.data()+8, "iagnose_as_builtin", 18) != 0)
        break;
      return AttributeCommonInfo::AT_DiagnoseAsBuiltin;	 // "clang::diagnose_as_builtin"
    case 'n':	 // 1 string to match.
      if (memcmp(Name.data()+8, "s_returns_retained", 18) != 0)
        break;
      return AttributeCommonInfo::AT_NSReturnsRetained;	 // "clang::ns_returns_retained"
    case 'o':	 // 5 strings to match.
      switch (Name[8]) {
      default: break;
      case 'b':	 // 4 strings to match.
        if (memcmp(Name.data()+9, "jc_", 3) != 0)
          break;
        switch (Name[12]) {
        default: break;
        case 'b':	 // 2 strings to match.
          if (memcmp(Name.data()+13, "ridge_", 6) != 0)
            break;
          switch (Name[19]) {
          default: break;
          case 'm':	 // 1 string to match.
            if (memcmp(Name.data()+20, "utable", 6) != 0)
              break;
            return AttributeCommonInfo::AT_ObjCBridgeMutable;	 // "clang::objc_bridge_mutable"
          case 'r':	 // 1 string to match.
            if (memcmp(Name.data()+20, "elated", 6) != 0)
              break;
            return AttributeCommonInfo::AT_ObjCBridgeRelated;	 // "clang::objc_bridge_related"
          }
          break;
        case 'd':	 // 1 string to match.
          if (memcmp(Name.data()+13, "irect_members", 13) != 0)
            break;
          return AttributeCommonInfo::AT_ObjCDirectMembers;	 // "clang::objc_direct_members"
        case 'r':	 // 1 string to match.
          if (memcmp(Name.data()+13, "equires_super", 13) != 0)
            break;
          return AttributeCommonInfo::AT_ObjCRequiresSuper;	 // "clang::objc_requires_super"
        }
        break;
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+9, "_returns_retained", 17) != 0)
          break;
        return AttributeCommonInfo::AT_OSReturnsRetained;	 // "clang::os_returns_retained"
      }
      break;
    case 's':	 // 1 string to match.
      if (memcmp(Name.data()+8, "wift_async_context", 18) != 0)
        break;
      return AttributeCommonInfo::AT_SwiftAsyncContext;	 // "clang::swift_async_context"
    }
    break;
  case 27:	 // 5 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 4 strings to match.
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
        break;
      switch (Name[7]) {
      default: break;
      case 'l':	 // 1 string to match.
        if (memcmp(Name.data()+8, "oader_uninitialized", 19) != 0)
          break;
        return AttributeCommonInfo::AT_LoaderUninitialized;	 // "clang::loader_uninitialized"
      case 'n':	 // 1 string to match.
        if (memcmp(Name.data()+8, "eon_polyvector_type", 19) != 0)
          break;
        return AttributeCommonInfo::AT_NeonPolyVectorType;	 // "clang::neon_polyvector_type"
      case 'o':	 // 2 strings to match.
        switch (Name[8]) {
        default: break;
        case 'b':	 // 1 string to match.
          if (memcmp(Name.data()+9, "jc_runtime_visible", 18) != 0)
            break;
          return AttributeCommonInfo::AT_ObjCRuntimeVisible;	 // "clang::objc_runtime_visible"
        case 'p':	 // 1 string to match.
          if (memcmp(Name.data()+9, "encl_global_device", 18) != 0)
            break;
          return AttributeCommonInfo::AT_OpenCLGlobalDeviceAddressSpace;	 // "clang::opencl_global_device"
        }
        break;
      }
      break;
    case 'g':	 // 1 string to match.
      if (memcmp(Name.data()+1, "nu::no_instrument_function", 26) != 0)
        break;
      return AttributeCommonInfo::AT_NoInstrumentFunction;	 // "gnu::no_instrument_function"
    }
    break;
  case 28:	 // 8 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 7 strings to match.
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
        break;
      switch (Name[7]) {
      default: break;
      case 'l':	 // 1 string to match.
        if (memcmp(Name.data()+8, "to_visibility_public", 20) != 0)
          break;
        return AttributeCommonInfo::AT_LTOVisibilityPublic;	 // "clang::lto_visibility_public"
      case 'o':	 // 1 string to match.
        if (memcmp(Name.data()+8, "bjc_precise_lifetime", 20) != 0)
          break;
        return AttributeCommonInfo::AT_ObjCPreciseLifetime;	 // "clang::objc_precise_lifetime"
      case 'p':	 // 2 strings to match.
        switch (Name[8]) {
        default: break;
        case 'o':	 // 1 string to match.
          if (memcmp(Name.data()+9, "inter_with_type_tag", 19) != 0)
            break;
          return AttributeCommonInfo::AT_ArgumentWithTypeTag;	 // "clang::pointer_with_type_tag"
        case 'r':	 // 1 string to match.
          if (memcmp(Name.data()+9, "eserve_access_index", 19) != 0)
            break;
          return AttributeCommonInfo::AT_BPFPreserveAccessIndex;	 // "clang::preserve_access_index"
        }
        break;
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+8, "wift_indirect_result", 20) != 0)
          break;
        return AttributeCommonInfo::AT_SwiftIndirectResult;	 // "clang::swift_indirect_result"
      case 't':	 // 1 string to match.
        if (memcmp(Name.data()+8, "ype_tag_for_datatype", 20) != 0)
          break;
        return AttributeCommonInfo::AT_TypeTagForDatatype;	 // "clang::type_tag_for_datatype"
      case 'x':	 // 1 string to match.
        if (memcmp(Name.data()+8, "ray_never_instrument", 20) != 0)
          break;
        return AttributeCommonInfo::AT_XRayInstrument;	 // "clang::xray_never_instrument"
      }
      break;
    case 'g':	 // 1 string to match.
      if (memcmp(Name.data()+1, "nu::force_align_arg_pointer", 27) != 0)
        break;
      return AttributeCommonInfo::AT_X86ForceAlignArgPointer;	 // "gnu::force_align_arg_pointer"
    }
    break;
  case 29:	 // 5 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 4 strings to match.
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
        break;
      switch (Name[7]) {
      default: break;
      case 'a':	 // 1 string to match.
        if (memcmp(Name.data()+8, "rgument_with_type_tag", 21) != 0)
          break;
        return AttributeCommonInfo::AT_ArgumentWithTypeTag;	 // "clang::argument_with_type_tag"
      case 'e':	 // 1 string to match.
        if (memcmp(Name.data()+8, "xternal_source_symbol", 21) != 0)
          break;
        return AttributeCommonInfo::AT_ExternalSourceSymbol;	 // "clang::external_source_symbol"
      case 'o':	 // 1 string to match.
        if (memcmp(Name.data()+8, "bjc_independent_class", 21) != 0)
          break;
        return AttributeCommonInfo::AT_ObjCIndependentClass;	 // "clang::objc_independent_class"
      case 'x':	 // 1 string to match.
        if (memcmp(Name.data()+8, "ray_always_instrument", 21) != 0)
          break;
        return AttributeCommonInfo::AT_XRayInstrument;	 // "clang::xray_always_instrument"
      }
      break;
    case 'g':	 // 1 string to match.
      if (memcmp(Name.data()+1, "nu::patchable_function_entry", 28) != 0)
        break;
      return AttributeCommonInfo::AT_PatchableFunctionEntry;	 // "gnu::patchable_function_entry"
    }
    break;
  case 30:	 // 5 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 4 strings to match.
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
        break;
      switch (Name[7]) {
      default: break;
      case 'c':	 // 1 string to match.
        if (memcmp(Name.data()+8, "f_returns_not_retained", 22) != 0)
          break;
        return AttributeCommonInfo::AT_CFReturnsNotRetained;	 // "clang::cf_returns_not_retained"
      case 'n':	 // 2 strings to match.
        if (memcmp(Name.data()+8, "s_returns_", 10) != 0)
          break;
        switch (Name[18]) {
        default: break;
        case 'a':	 // 1 string to match.
          if (memcmp(Name.data()+19, "utoreleased", 11) != 0)
            break;
          return AttributeCommonInfo::AT_NSReturnsAutoreleased;	 // "clang::ns_returns_autoreleased"
        case 'n':	 // 1 string to match.
          if (memcmp(Name.data()+19, "ot_retained", 11) != 0)
            break;
          return AttributeCommonInfo::AT_NSReturnsNotRetained;	 // "clang::ns_returns_not_retained"
        }
        break;
      case 'o':	 // 1 string to match.
        if (memcmp(Name.data()+8, "s_returns_not_retained", 22) != 0)
          break;
        return AttributeCommonInfo::AT_OSReturnsNotRetained;	 // "clang::os_returns_not_retained"
      }
      break;
    case 'g':	 // 1 string to match.
      if (memcmp(Name.data()+1, "nu::no_caller_saved_registers", 29) != 0)
        break;
      return AttributeCommonInfo::AT_AnyX86NoCallerSavedRegisters;	 // "gnu::no_caller_saved_registers"
    }
    break;
  case 31:	 // 4 strings to match.
    switch (Name[0]) {
    default: break;
    case 'c':	 // 3 strings to match.
      if (memcmp(Name.data()+1, "lang::", 6) != 0)
        break;
      switch (Name[7]) {
      default: break;
      case 'c':	 // 1 string to match.
        if (memcmp(Name.data()+8, "fi_canonical_jump_table", 23) != 0)
          break;
        return AttributeCommonInfo::AT_CFICanonicalJumpTable;	 // "clang::cfi_canonical_jump_table"
      case 'o':	 // 1 string to match.
        if (memcmp(Name.data()+8, "bjc_externally_retained", 23) != 0)
          break;
        return AttributeCommonInfo::AT_ObjCExternallyRetained;	 // "clang::objc_externally_retained"
      case 'p':	 // 1 string to match.
        if (memcmp(Name.data()+8, "ass_dynamic_object_size", 23) != 0)
          break;
        return AttributeCommonInfo::AT_PassObjectSize;	 // "clang::pass_dynamic_object_size"
      }
      break;
    case 'g':	 // 1 string to match.
      if (memcmp(Name.data()+1, "nu::no_address_safety_analysis", 30) != 0)
        break;
      return AttributeCommonInfo::AT_NoSanitizeSpecific;	 // "gnu::no_address_safety_analysis"
    }
    break;
  case 32:	 // 3 strings to match.
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
      break;
    switch (Name[7]) {
    default: break;
    case '_':	 // 1 string to match.
      if (memcmp(Name.data()+8, "_clang_arm_builtin_alias", 24) != 0)
        break;
      return AttributeCommonInfo::AT_ArmBuiltinAlias;	 // "clang::__clang_arm_builtin_alias"
    case 'n':	 // 1 string to match.
      if (memcmp(Name.data()+8, "o_thread_safety_analysis", 24) != 0)
        break;
      return AttributeCommonInfo::AT_NoThreadSafetyAnalysis;	 // "clang::no_thread_safety_analysis"
    case 'o':	 // 1 string to match.
      if (memcmp(Name.data()+8, "bjc_non_runtime_protocol", 24) != 0)
        break;
      return AttributeCommonInfo::AT_ObjCNonRuntimeProtocol;	 // "clang::objc_non_runtime_protocol"
    }
    break;
  case 33:	 // 2 strings to match.
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
      break;
    switch (Name[7]) {
    default: break;
    case 'o':	 // 1 string to match.
      if (memcmp(Name.data()+8, "bjc_returns_inner_pointer", 25) != 0)
        break;
      return AttributeCommonInfo::AT_ObjCReturnsInnerPointer;	 // "clang::objc_returns_inner_pointer"
    case 's':	 // 1 string to match.
      if (memcmp(Name.data()+8, "peculative_load_hardening", 25) != 0)
        break;
      return AttributeCommonInfo::AT_SpeculativeLoadHardening;	 // "clang::speculative_load_hardening"
    }
    break;
  case 34:	 // 3 strings to match.
    if (memcmp(Name.data()+0, "clang::o", 8) != 0)
      break;
    switch (Name[8]) {
    default: break;
    case 'b':	 // 2 strings to match.
      if (memcmp(Name.data()+9, "jc_", 3) != 0)
        break;
      switch (Name[12]) {
      default: break;
      case 'd':	 // 1 string to match.
        if (memcmp(Name.data()+13, "esignated_initializer", 21) != 0)
          break;
        return AttributeCommonInfo::AT_ObjCDesignatedInitializer;	 // "clang::objc_designated_initializer"
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+13, "ubclassing_restricted", 21) != 0)
          break;
        return AttributeCommonInfo::AT_ObjCSubclassingRestricted;	 // "clang::objc_subclassing_restricted"
      }
      break;
    case 's':	 // 1 string to match.
      if (memcmp(Name.data()+9, "_returns_retained_on_zero", 25) != 0)
        break;
      return AttributeCommonInfo::AT_OSReturnsRetainedOnZero;	 // "clang::os_returns_retained_on_zero"
    }
    break;
  case 35:	 // 1 string to match.
    if (memcmp(Name.data()+0, "gnu::no_profile_instrument_function", 35) != 0)
      break;
    return AttributeCommonInfo::AT_NoProfileFunction;	 // "gnu::no_profile_instrument_function"
  case 36:	 // 1 string to match.
    if (memcmp(Name.data()+0, "clang::no_speculative_load_hardening", 36) != 0)
      break;
    return AttributeCommonInfo::AT_NoSpeculativeLoadHardening;	 // "clang::no_speculative_load_hardening"
  case 38:	 // 1 string to match.
    if (memcmp(Name.data()+0, "clang::os_returns_retained_on_non_zero", 38) != 0)
      break;
    return AttributeCommonInfo::AT_OSReturnsRetainedOnNonZero;	 // "clang::os_returns_retained_on_non_zero"
  case 40:	 // 1 string to match.
    if (memcmp(Name.data()+0, "clang::disable_sanitizer_instrumentation", 40) != 0)
      break;
    return AttributeCommonInfo::AT_DisableSanitizerInstrumentation;	 // "clang::disable_sanitizer_instrumentation"
  case 41:	 // 1 string to match.
    if (memcmp(Name.data()+0, "clang::objc_requires_property_definitions", 41) != 0)
      break;
    return AttributeCommonInfo::AT_ObjCRequiresPropertyDefs;	 // "clang::objc_requires_property_definitions"
  case 42:	 // 3 strings to match.
    if (memcmp(Name.data()+0, "clang::", 7) != 0)
      break;
    switch (Name[7]) {
    default: break;
    case '_':	 // 1 string to match.
      if (memcmp(Name.data()+8, "_clang_arm_mve_strict_polymorphism", 34) != 0)
        break;
      return AttributeCommonInfo::AT_ArmMveStrictPolymorphism;	 // "clang::__clang_arm_mve_strict_polymorphism"
    case 'e':	 // 1 string to match.
      if (memcmp(Name.data()+8, "xclude_from_explicit_instantiation", 34) != 0)
        break;
      return AttributeCommonInfo::AT_ExcludeFromExplicitInstantiation;	 // "clang::exclude_from_explicit_instantiation"
    case 'o':	 // 1 string to match.
      if (memcmp(Name.data()+8, "bjc_arc_weak_reference_unavailable", 34) != 0)
        break;
      return AttributeCommonInfo::AT_ArcWeakrefUnavailable;	 // "clang::objc_arc_weak_reference_unavailable"
    }
    break;
  case 53:	 // 1 string to match.
    if (memcmp(Name.data()+0, "clang::objc_protocol_requires_explicit_implementation", 53) != 0)
      break;
    return AttributeCommonInfo::AT_ObjCExplicitProtocolImpl;	 // "clang::objc_protocol_requires_explicit_implementation"
  }
  } else if (AttributeCommonInfo::AS_Keyword == Syntax || AttributeCommonInfo::AS_ContextSensitiveKeyword == 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) != 0)
        break;
      return AttributeCommonInfo::IgnoredAttribute;	 // "__w64"
    case 'l':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ocal", 4) != 0)
        break;
      return AttributeCommonInfo::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) != 0)
            break;
          return AttributeCommonInfo::AT_SPtr;	 // "__sptr"
        case 'u':	 // 1 string to match.
          if (memcmp(Name.data()+3, "ptr", 3) != 0)
            break;
          return AttributeCommonInfo::AT_UPtr;	 // "__uptr"
        }
        break;
      case 'c':	 // 1 string to match.
        if (memcmp(Name.data()+2, "decl", 4) != 0)
          break;
        return AttributeCommonInfo::AT_CDecl;	 // "_cdecl"
      }
      break;
    case 'g':	 // 1 string to match.
      if (memcmp(Name.data()+1, "lobal", 5) != 0)
        break;
      return AttributeCommonInfo::AT_OpenCLGlobalAddressSpace;	 // "global"
    case 'k':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ernel", 5) != 0)
        break;
      return AttributeCommonInfo::AT_OpenCLKernel;	 // "kernel"
    }
    break;
  case 7:	 // 8 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) != 0)
            break;
          return AttributeCommonInfo::AT_CDecl;	 // "__cdecl"
        case 'l':	 // 1 string to match.
          if (memcmp(Name.data()+3, "ocal", 4) != 0)
            break;
          return AttributeCommonInfo::AT_OpenCLLocalAddressSpace;	 // "__local"
        case 'p':	 // 2 strings to match.
          if (memcmp(Name.data()+3, "tr", 2) != 0)
            break;
          switch (Name[5]) {
          default: break;
          case '3':	 // 1 string to match.
            if (Name[6] != '2')
              break;
            return AttributeCommonInfo::AT_Ptr32;	 // "__ptr32"
          case '6':	 // 1 string to match.
            if (Name[6] != '4')
              break;
            return AttributeCommonInfo::AT_Ptr64;	 // "__ptr64"
          }
          break;
        }
        break;
      case 'p':	 // 1 string to match.
        if (memcmp(Name.data()+2, "ascal", 5) != 0)
          break;
        return AttributeCommonInfo::AT_Pascal;	 // "_pascal"
      }
      break;
    case 'a':	 // 1 string to match.
      if (memcmp(Name.data()+1, "lignas", 6) != 0)
        break;
      return AttributeCommonInfo::AT_Aligned;	 // "alignas"
    case 'g':	 // 1 string to match.
      if (memcmp(Name.data()+1, "eneric", 6) != 0)
        break;
      return AttributeCommonInfo::AT_OpenCLGenericAddressSpace;	 // "generic"
    case 'p':	 // 1 string to match.
      if (memcmp(Name.data()+1, "rivate", 6) != 0)
        break;
      return AttributeCommonInfo::AT_OpenCLPrivateAddressSpace;	 // "private"
    }
    break;
  case 8:	 // 8 strings to match.
    switch (Name[0]) {
    default: break;
    case '_':	 // 7 strings to match.
      switch (Name[1]) {
      default: break;
      case 'A':	 // 1 string to match.
        if (memcmp(Name.data()+2, "lignas", 6) != 0)
          break;
        return AttributeCommonInfo::AT_Aligned;	 // "_Alignas"
      case 'N':	 // 1 string to match.
        if (memcmp(Name.data()+2, "onnull", 6) != 0)
          break;
        return AttributeCommonInfo::AT_TypeNonNull;	 // "_Nonnull"
      case '_':	 // 4 strings to match.
        switch (Name[2]) {
        default: break;
        case 'g':	 // 1 string to match.
          if (memcmp(Name.data()+3, "lobal", 5) != 0)
            break;
          return AttributeCommonInfo::AT_OpenCLGlobalAddressSpace;	 // "__global"
        case 'k':	 // 2 strings to match.
          switch (Name[3]) {
          default: break;
          case 'e':	 // 1 string to match.
            if (memcmp(Name.data()+4, "rnel", 4) != 0)
              break;
            return AttributeCommonInfo::AT_OpenCLKernel;	 // "__kernel"
          case 'i':	 // 1 string to match.
            if (memcmp(Name.data()+4, "ndof", 4) != 0)
              break;
            return AttributeCommonInfo::AT_ObjCKindOf;	 // "__kindof"
          }
          break;
        case 'p':	 // 1 string to match.
          if (memcmp(Name.data()+3, "ascal", 5) != 0)
            break;
          return AttributeCommonInfo::AT_Pascal;	 // "__pascal"
        }
        break;
      case 's':	 // 1 string to match.
        if (memcmp(Name.data()+2, "tdcall", 6) != 0)
          break;
        return AttributeCommonInfo::AT_StdCall;	 // "_stdcall"
      }
      break;
    case 'c':	 // 1 string to match.
      if (memcmp(Name.data()+1, "onstant", 7) != 0)
        break;
      return AttributeCommonInfo::AT_OpenCLConstantAddressSpace;	 // "constant"
    }
    break;
  case 9:	 // 9 strings to match.
    switch (Name[0]) {
    default: break;
    case '_':	 // 7 strings to match.
      switch (Name[1]) {
      default: break;
      case 'N':	 // 1 string to match.
        if (memcmp(Name.data()+2, "ullable", 7) != 0)
          break;
        return AttributeCommonInfo::AT_TypeNullable;	 // "_Nullable"
      case '_':	 // 4 strings to match.
        switch (Name[2]) {
        default: break;
        case 'g':	 // 1 string to match.
          if (memcmp(Name.data()+3, "eneric", 6) != 0)
            break;
          return AttributeCommonInfo::AT_OpenCLGenericAddressSpace;	 // "__generic"
        case 'p':	 // 1 string to match.
          if (memcmp(Name.data()+3, "rivate", 6) != 0)
            break;
          return AttributeCommonInfo::AT_OpenCLPrivateAddressSpace;	 // "__private"
        case 'r':	 // 1 string to match.
          if (memcmp(Name.data()+3, "egcall", 6) != 0)
            break;
          return AttributeCommonInfo::AT_RegCall;	 // "__regcall"
        case 's':	 // 1 string to match.
          if (memcmp(Name.data()+3, "tdcall", 6) != 0)
            break;
          return AttributeCommonInfo::AT_StdCall;	 // "__stdcall"
        }
        break;
      case 'f':	 // 1 string to match.
        if (memcmp(Name.data()+2, "astcall", 7) != 0)
          break;
        return AttributeCommonInfo::AT_FastCall;	 // "_fastcall"
      case 't':	 // 1 string to match.
        if (memcmp(Name.data()+2, "hiscall", 7) != 0)
          break;
        return AttributeCommonInfo::AT_ThisCall;	 // "_thiscall"
      }
      break;
    case 'c':	 // 1 string to match.
      if (memcmp(Name.data()+1, "onstinit", 8) != 0)
        break;
      return AttributeCommonInfo::AT_ConstInit;	 // "constinit"
    case 'r':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ead_only", 8) != 0)
        break;
      return AttributeCommonInfo::AT_OpenCLAccess;	 // "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) != 0)
          break;
        return AttributeCommonInfo::AT_OpenCLConstantAddressSpace;	 // "__constant"
      case 'f':	 // 1 string to match.
        if (memcmp(Name.data()+3, "astcall", 7) != 0)
          break;
        return AttributeCommonInfo::AT_FastCall;	 // "__fastcall"
      case 't':	 // 1 string to match.
        if (memcmp(Name.data()+3, "hiscall", 7) != 0)
          break;
        return AttributeCommonInfo::AT_ThisCall;	 // "__thiscall"
      }
      break;
    case 'r':	 // 1 string to match.
      if (memcmp(Name.data()+1, "ead_write", 9) != 0)
        break;
      return AttributeCommonInfo::AT_OpenCLAccess;	 // "read_write"
    case 'w':	 // 1 string to match.
      if (memcmp(Name.data()+1, "rite_only", 9) != 0)
        break;
      return AttributeCommonInfo::AT_OpenCLAccess;	 // "write_only"
    }
    break;
  case 11:	 // 2 strings to match.
    if (Name[0] != '_')
      break;
    switch (Name[1]) {
    default: break;
    case '_':	 // 1 string to match.
      if (memcmp(Name.data()+2, "read_only", 9) != 0)
        break;
      return AttributeCommonInfo::AT_OpenCLAccess;	 // "__read_only"
    case 'v':	 // 1 string to match.
      if (memcmp(Name.data()+2, "ectorcall", 9) != 0)
        break;
      return AttributeCommonInfo::AT_VectorCall;	 // "_vectorcall"
    }
    break;
  case 12:	 // 4 strings to match.
    if (memcmp(Name.data()+0, "__", 2) != 0)
      break;
    switch (Name[2]) {
    default: break;
    case 'n':	 // 1 string to match.
      if (memcmp(Name.data()+3, "oinline__", 9) != 0)
        break;
      return AttributeCommonInfo::AT_NoInline;	 // "__noinline__"
    case 'r':	 // 1 string to match.
      if (memcmp(Name.data()+3, "ead_write", 9) != 0)
        break;
      return AttributeCommonInfo::AT_OpenCLAccess;	 // "__read_write"
    case 'v':	 // 1 string to match.
      if (memcmp(Name.data()+3, "ectorcall", 9) != 0)
        break;
      return AttributeCommonInfo::AT_VectorCall;	 // "__vectorcall"
    case 'w':	 // 1 string to match.
      if (memcmp(Name.data()+3, "rite_only", 9) != 0)
        break;
      return AttributeCommonInfo::AT_OpenCLAccess;	 // "__write_only"
    }
    break;
  case 13:	 // 1 string to match.
    if (memcmp(Name.data()+0, "__forceinline", 13) != 0)
      break;
    return AttributeCommonInfo::AT_AlwaysInline;	 // "__forceinline"
  case 16:	 // 1 string to match.
    if (memcmp(Name.data()+0, "_Nullable_result", 16) != 0)
      break;
    return AttributeCommonInfo::AT_TypeNullableResult;	 // "_Nullable_result"
  case 17:	 // 1 string to match.
    if (memcmp(Name.data()+0, "_Null_unspecified", 17) != 0)
      break;
    return AttributeCommonInfo::AT_TypeNullUnspecified;	 // "_Null_unspecified"
  case 19:	 // 1 string to match.
    if (memcmp(Name.data()+0, "__unsafe_unretained", 19) != 0)
      break;
    return AttributeCommonInfo::AT_ObjCInertUnsafeUnretained;	 // "__unsafe_unretained"
  case 20:	 // 1 string to match.
    if (memcmp(Name.data()+0, "__single_inheritance", 20) != 0)
      break;
    return AttributeCommonInfo::AT_MSInheritance;	 // "__single_inheritance"
  case 21:	 // 1 string to match.
    if (memcmp(Name.data()+0, "__virtual_inheritance", 21) != 0)
      break;
    return AttributeCommonInfo::AT_MSInheritance;	 // "__virtual_inheritance"
  case 22:	 // 1 string to match.
    if (memcmp(Name.data()+0, "__multiple_inheritance", 22) != 0)
      break;
    return AttributeCommonInfo::AT_MSInheritance;	 // "__multiple_inheritance"
  case 25:	 // 1 string to match.
    if (memcmp(Name.data()+0, "__unspecified_inheritance", 25) != 0)
      break;
    return AttributeCommonInfo::AT_MSInheritance;	 // "__unspecified_inheritance"
  }
  } else if (AttributeCommonInfo::AS_Pragma == Syntax) {
  switch (Name.size()) {
  default: break;
  case 4:	 // 1 string to match.
    if (memcmp(Name.data()+0, "loop", 4) != 0)
      break;
    return AttributeCommonInfo::AT_LoopHint;	 // "loop"
  case 6:	 // 1 string to match.
    if (memcmp(Name.data()+0, "unroll", 6) != 0)
      break;
    return AttributeCommonInfo::AT_LoopHint;	 // "unroll"
  case 8:	 // 1 string to match.
    if (memcmp(Name.data()+0, "nounroll", 8) != 0)
      break;
    return AttributeCommonInfo::AT_LoopHint;	 // "nounroll"
  case 14:	 // 1 string to match.
    if (memcmp(Name.data()+0, "unroll_and_jam", 14) != 0)
      break;
    return AttributeCommonInfo::AT_LoopHint;	 // "unroll_and_jam"
  case 16:	 // 1 string to match.
    if (memcmp(Name.data()+0, "nounroll_and_jam", 16) != 0)
      break;
    return AttributeCommonInfo::AT_LoopHint;	 // "nounroll_and_jam"
  }
  } else if (AttributeCommonInfo::AS_HLSLSemantic == Syntax) {
  switch (Name.size()) {
  default: break;
  case 8:	 // 1 string to match.
    if (memcmp(Name.data()+0, "register", 8) != 0)
      break;
    return AttributeCommonInfo::AT_HLSLResourceBinding;	 // "register"
  case 13:	 // 1 string to match.
    if (memcmp(Name.data()+0, "SV_GroupIndex", 13) != 0)
      break;
    return AttributeCommonInfo::AT_HLSLSV_GroupIndex;	 // "SV_GroupIndex"
  }
  }
  return AttributeCommonInfo::UnknownAttribute;
}
