Back to home page

EIC code displayed by LXR

 
 

    


Warning, /include/clang/Sema/AttrParsedAttrKinds.inc is written in an unsupported language. File is not indexed.

0001 /*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
0002 |*                                                                            *|
0003 |* Attribute name matcher                                                     *|
0004 |*                                                                            *|
0005 |* Automatically generated file, do not edit!                                 *|
0006 |* From: Attr.td                                                              *|
0007 |*                                                                            *|
0008 \*===----------------------------------------------------------------------===*/
0009 
0010 static AttributeCommonInfo::Kind getAttrKind(StringRef Name, AttributeCommonInfo::Syntax Syntax) {
0011   if (AttributeCommonInfo::AS_GNU == Syntax) {
0012   switch (Name.size()) {
0013   default: break;
0014   case 3:        // 3 strings to match.
0015     switch (Name[0]) {
0016     default: break;
0017     case 'f':    // 1 string to match.
0018       if (memcmp(Name.data()+1, "ar", 2) != 0)
0019         break;
0020       return AttributeCommonInfo::AT_MipsLongCall;       // "far"
0021     case 'h':    // 1 string to match.
0022       if (memcmp(Name.data()+1, "ot", 2) != 0)
0023         break;
0024       return AttributeCommonInfo::AT_Hot;        // "hot"
0025     case 'p':    // 1 string to match.
0026       if (memcmp(Name.data()+1, "cs", 2) != 0)
0027         break;
0028       return AttributeCommonInfo::AT_Pcs;        // "pcs"
0029     }
0030     break;
0031   case 4:        // 8 strings to match.
0032     switch (Name[0]) {
0033     default: break;
0034     case 'c':    // 1 string to match.
0035       if (memcmp(Name.data()+1, "old", 3) != 0)
0036         break;
0037       return AttributeCommonInfo::AT_Cold;       // "cold"
0038     case 'h':    // 1 string to match.
0039       if (memcmp(Name.data()+1, "ost", 3) != 0)
0040         break;
0041       return AttributeCommonInfo::AT_CUDAHost;   // "host"
0042     case 'l':    // 1 string to match.
0043       if (memcmp(Name.data()+1, "eaf", 3) != 0)
0044         break;
0045       return AttributeCommonInfo::AT_Leaf;       // "leaf"
0046     case 'm':    // 1 string to match.
0047       if (memcmp(Name.data()+1, "ode", 3) != 0)
0048         break;
0049       return AttributeCommonInfo::AT_Mode;       // "mode"
0050     case 'n':    // 1 string to match.
0051       if (memcmp(Name.data()+1, "ear", 3) != 0)
0052         break;
0053       return AttributeCommonInfo::AT_MipsShortCall;      // "near"
0054     case 'p':    // 1 string to match.
0055       if (memcmp(Name.data()+1, "ure", 3) != 0)
0056         break;
0057       return AttributeCommonInfo::AT_Pure;       // "pure"
0058     case 'u':    // 1 string to match.
0059       if (memcmp(Name.data()+1, "sed", 3) != 0)
0060         break;
0061       return AttributeCommonInfo::AT_Used;       // "used"
0062     case 'w':    // 1 string to match.
0063       if (memcmp(Name.data()+1, "eak", 3) != 0)
0064         break;
0065       return AttributeCommonInfo::AT_Weak;       // "weak"
0066     }
0067     break;
0068   case 5:        // 9 strings to match.
0069     switch (Name[0]) {
0070     default: break;
0071     case 'a':    // 1 string to match.
0072       if (memcmp(Name.data()+1, "lias", 4) != 0)
0073         break;
0074       return AttributeCommonInfo::AT_Alias;      // "alias"
0075     case 'c':    // 2 strings to match.
0076       switch (Name[1]) {
0077       default: break;
0078       case 'd':  // 1 string to match.
0079         if (memcmp(Name.data()+2, "ecl", 3) != 0)
0080           break;
0081         return AttributeCommonInfo::AT_CDecl;    // "cdecl"
0082       case 'o':  // 1 string to match.
0083         if (memcmp(Name.data()+2, "nst", 3) != 0)
0084           break;
0085         return AttributeCommonInfo::AT_Const;    // "const"
0086       }
0087       break;
0088     case 'e':    // 1 string to match.
0089       if (memcmp(Name.data()+1, "rror", 4) != 0)
0090         break;
0091       return AttributeCommonInfo::AT_Error;      // "error"
0092     case 'g':    // 1 string to match.
0093       if (memcmp(Name.data()+1, "uard", 4) != 0)
0094         break;
0095       return AttributeCommonInfo::AT_CFGuard;    // "guard"
0096     case 'i':    // 1 string to match.
0097       if (memcmp(Name.data()+1, "func", 4) != 0)
0098         break;
0099       return AttributeCommonInfo::AT_IFunc;      // "ifunc"
0100     case 'm':    // 1 string to match.
0101       if (memcmp(Name.data()+1, "odel", 4) != 0)
0102         break;
0103       return AttributeCommonInfo::AT_CodeModel;  // "model"
0104     case 'n':    // 2 strings to match.
0105       switch (Name[1]) {
0106       default: break;
0107       case 'a':  // 1 string to match.
0108         if (memcmp(Name.data()+2, "ked", 3) != 0)
0109           break;
0110         return AttributeCommonInfo::AT_Naked;    // "naked"
0111       case 'o':  // 1 string to match.
0112         if (memcmp(Name.data()+2, "svm", 3) != 0)
0113           break;
0114         return AttributeCommonInfo::AT_OpenCLNoSVM;      // "nosvm"
0115       }
0116       break;
0117     }
0118     break;
0119   case 6:        // 16 strings to match.
0120     switch (Name[0]) {
0121     default: break;
0122     case 'a':    // 1 string to match.
0123       if (memcmp(Name.data()+1, "ssume", 5) != 0)
0124         break;
0125       return AttributeCommonInfo::AT_CXXAssume;  // "assume"
0126     case 'b':    // 1 string to match.
0127       if (memcmp(Name.data()+1, "locks", 5) != 0)
0128         break;
0129       return AttributeCommonInfo::AT_Blocks;     // "blocks"
0130     case 'c':    // 1 string to match.
0131       if (memcmp(Name.data()+1, "ommon", 5) != 0)
0132         break;
0133       return AttributeCommonInfo::AT_Common;     // "common"
0134     case 'd':    // 1 string to match.
0135       if (memcmp(Name.data()+1, "evice", 5) != 0)
0136         break;
0137       return AttributeCommonInfo::AT_CUDADevice;         // "device"
0138     case 'f':    // 1 string to match.
0139       if (memcmp(Name.data()+1, "ormat", 5) != 0)
0140         break;
0141       return AttributeCommonInfo::AT_Format;     // "format"
0142     case 'g':    // 1 string to match.
0143       if (memcmp(Name.data()+1, "lobal", 5) != 0)
0144         break;
0145       return AttributeCommonInfo::AT_CUDAGlobal;         // "global"
0146     case 'm':    // 3 strings to match.
0147       switch (Name[1]) {
0148       default: break;
0149       case 'a':  // 1 string to match.
0150         if (memcmp(Name.data()+2, "lloc", 4) != 0)
0151           break;
0152         return AttributeCommonInfo::AT_Restrict;         // "malloc"
0153       case 'i':  // 1 string to match.
0154         if (memcmp(Name.data()+2, "ps16", 4) != 0)
0155           break;
0156         return AttributeCommonInfo::AT_Mips16;   // "mips16"
0157       case 's':  // 1 string to match.
0158         if (memcmp(Name.data()+2, "_abi", 4) != 0)
0159           break;
0160         return AttributeCommonInfo::AT_MSABI;    // "ms_abi"
0161       }
0162       break;
0163     case 'p':    // 2 strings to match.
0164       if (Name[1] != 'a')
0165         break;
0166       switch (Name[2]) {
0167       default: break;
0168       case 'c':  // 1 string to match.
0169         if (memcmp(Name.data()+3, "ked", 3) != 0)
0170           break;
0171         return AttributeCommonInfo::AT_Packed;   // "packed"
0172       case 's':  // 1 string to match.
0173         if (memcmp(Name.data()+3, "cal", 3) != 0)
0174           break;
0175         return AttributeCommonInfo::AT_Pascal;   // "pascal"
0176       }
0177       break;
0178     case 'r':    // 1 string to match.
0179       if (memcmp(Name.data()+1, "etain", 5) != 0)
0180         break;
0181       return AttributeCommonInfo::AT_Retain;     // "retain"
0182     case 's':    // 2 strings to match.
0183       switch (Name[1]) {
0184       default: break;
0185       case 'h':  // 1 string to match.
0186         if (memcmp(Name.data()+2, "ared", 4) != 0)
0187           break;
0188         return AttributeCommonInfo::AT_CUDAShared;       // "shared"
0189       case 'i':  // 1 string to match.
0190         if (memcmp(Name.data()+2, "gnal", 4) != 0)
0191           break;
0192         return AttributeCommonInfo::AT_AVRSignal;        // "signal"
0193       }
0194       break;
0195     case 't':    // 1 string to match.
0196       if (memcmp(Name.data()+1, "arget", 5) != 0)
0197         break;
0198       return AttributeCommonInfo::AT_Target;     // "target"
0199     case 'u':    // 1 string to match.
0200       if (memcmp(Name.data()+1, "nused", 5) != 0)
0201         break;
0202       return AttributeCommonInfo::AT_Unused;     // "unused"
0203     }
0204     break;
0205   case 7:        // 22 strings to match.
0206     switch (Name[0]) {
0207     default: break;
0208     case '_':    // 1 string to match.
0209       if (memcmp(Name.data()+1, "_const", 6) != 0)
0210         break;
0211       return AttributeCommonInfo::AT_Const;      // "__const"
0212     case 'a':    // 2 strings to match.
0213       switch (Name[1]) {
0214       default: break;
0215       case 'b':  // 1 string to match.
0216         if (memcmp(Name.data()+2, "i_tag", 5) != 0)
0217           break;
0218         return AttributeCommonInfo::AT_AbiTag;   // "abi_tag"
0219       case 'l':  // 1 string to match.
0220         if (memcmp(Name.data()+2, "igned", 5) != 0)
0221           break;
0222         return AttributeCommonInfo::AT_Aligned;  // "aligned"
0223       }
0224       break;
0225     case 'b':    // 1 string to match.
0226       if (memcmp(Name.data()+1, "ounded", 6) != 0)
0227         break;
0228       return AttributeCommonInfo::IgnoredAttribute;      // "bounded"
0229     case 'c':    // 1 string to match.
0230       if (memcmp(Name.data()+1, "leanup", 6) != 0)
0231         break;
0232       return AttributeCommonInfo::AT_Cleanup;    // "cleanup"
0233     case 'f':    // 1 string to match.
0234       if (memcmp(Name.data()+1, "latten", 6) != 0)
0235         break;
0236       return AttributeCommonInfo::AT_Flatten;    // "flatten"
0237     case 'm':    // 2 strings to match.
0238       switch (Name[1]) {
0239       default: break;
0240       case 'a':  // 1 string to match.
0241         if (memcmp(Name.data()+2, "naged", 5) != 0)
0242           break;
0243         return AttributeCommonInfo::AT_HIPManaged;       // "managed"
0244       case 'i':  // 1 string to match.
0245         if (memcmp(Name.data()+2, "nsize", 5) != 0)
0246           break;
0247         return AttributeCommonInfo::AT_MinSize;  // "minsize"
0248       }
0249       break;
0250     case 'n':    // 6 strings to match.
0251       switch (Name[1]) {
0252       default: break;
0253       case 'o':  // 5 strings to match.
0254         switch (Name[2]) {
0255         default: break;
0256         case 'd':        // 2 strings to match.
0257           if (Name[3] != 'e')
0258             break;
0259           switch (Name[4]) {
0260           default: break;
0261           case 'b':      // 1 string to match.
0262             if (memcmp(Name.data()+5, "ug", 2) != 0)
0263               break;
0264             return AttributeCommonInfo::AT_NoDebug;      // "nodebug"
0265           case 'r':      // 1 string to match.
0266             if (memcmp(Name.data()+5, "ef", 2) != 0)
0267               break;
0268             return AttributeCommonInfo::AT_NoDeref;      // "noderef"
0269           }
0270           break;
0271         case 'm':        // 1 string to match.
0272           if (memcmp(Name.data()+3, "erge", 4) != 0)
0273             break;
0274           return AttributeCommonInfo::AT_NoMerge;        // "nomerge"
0275         case 'n':        // 1 string to match.
0276           if (memcmp(Name.data()+3, "null", 4) != 0)
0277             break;
0278           return AttributeCommonInfo::AT_NonNull;        // "nonnull"
0279         case 't':        // 1 string to match.
0280           if (memcmp(Name.data()+3, "hrow", 4) != 0)
0281             break;
0282           return AttributeCommonInfo::AT_NoThrow;        // "nothrow"
0283         }
0284         break;
0285       case 'v':  // 1 string to match.
0286         if (memcmp(Name.data()+2, "_weak", 5) != 0)
0287           break;
0288         return AttributeCommonInfo::IgnoredAttribute;    // "nv_weak"
0289       }
0290       break;
0291     case 'o':    // 2 strings to match.
0292       switch (Name[1]) {
0293       default: break;
0294       case 'b':  // 1 string to match.
0295         if (memcmp(Name.data()+2, "jc_gc", 5) != 0)
0296           break;
0297         return AttributeCommonInfo::AT_ObjCGC;   // "objc_gc"
0298       case 'p':  // 1 string to match.
0299         if (memcmp(Name.data()+2, "tnone", 5) != 0)
0300           break;
0301         return AttributeCommonInfo::AT_OptimizeNone;     // "optnone"
0302       }
0303       break;
0304     case 'r':    // 2 strings to match.
0305       if (memcmp(Name.data()+1, "eg", 2) != 0)
0306         break;
0307       switch (Name[3]) {
0308       default: break;
0309       case 'c':  // 1 string to match.
0310         if (memcmp(Name.data()+4, "all", 3) != 0)
0311           break;
0312         return AttributeCommonInfo::AT_RegCall;  // "regcall"
0313       case 'p':  // 1 string to match.
0314         if (memcmp(Name.data()+4, "arm", 3) != 0)
0315           break;
0316         return AttributeCommonInfo::AT_Regparm;  // "regparm"
0317       }
0318       break;
0319     case 's':    // 2 strings to match.
0320       switch (Name[1]) {
0321       default: break;
0322       case 'e':  // 1 string to match.
0323         if (memcmp(Name.data()+2, "ction", 5) != 0)
0324           break;
0325         return AttributeCommonInfo::AT_Section;  // "section"
0326       case 't':  // 1 string to match.
0327         if (memcmp(Name.data()+2, "dcall", 5) != 0)
0328           break;
0329         return AttributeCommonInfo::AT_StdCall;  // "stdcall"
0330       }
0331       break;
0332     case 'w':    // 2 strings to match.
0333       switch (Name[1]) {
0334       default: break;
0335       case 'a':  // 1 string to match.
0336         if (memcmp(Name.data()+2, "rning", 5) != 0)
0337           break;
0338         return AttributeCommonInfo::AT_Error;    // "warning"
0339       case 'e':  // 1 string to match.
0340         if (memcmp(Name.data()+2, "akref", 5) != 0)
0341           break;
0342         return AttributeCommonInfo::AT_WeakRef;  // "weakref"
0343       }
0344       break;
0345     }
0346     break;
0347   case 8:        // 21 strings to match.
0348     switch (Name[0]) {
0349     default: break;
0350     case 'N':    // 1 string to match.
0351       if (memcmp(Name.data()+1, "SObject", 7) != 0)
0352         break;
0353       return AttributeCommonInfo::AT_ObjCNSObject;       // "NSObject"
0354     case 'a':    // 1 string to match.
0355       if (memcmp(Name.data()+1, "nnotate", 7) != 0)
0356         break;
0357       return AttributeCommonInfo::AT_Annotate;   // "annotate"
0358     case 'b':    // 1 string to match.
0359       if (memcmp(Name.data()+1, "locking", 7) != 0)
0360         break;
0361       return AttributeCommonInfo::AT_Blocking;   // "blocking"
0362     case 'c':    // 2 strings to match.
0363       switch (Name[1]) {
0364       default: break;
0365       case 'a':  // 1 string to match.
0366         if (memcmp(Name.data()+2, "llback", 6) != 0)
0367           break;
0368         return AttributeCommonInfo::AT_Callback;         // "callback"
0369       case 'o':  // 1 string to match.
0370         if (memcmp(Name.data()+2, "nstant", 6) != 0)
0371           break;
0372         return AttributeCommonInfo::AT_CUDAConstant;     // "constant"
0373       }
0374       break;
0375     case 'f':    // 1 string to match.
0376       if (memcmp(Name.data()+1, "astcall", 7) != 0)
0377         break;
0378       return AttributeCommonInfo::AT_FastCall;   // "fastcall"
0379     case 'i':    // 2 strings to match.
0380       if (Name[1] != 'b')
0381         break;
0382       switch (Name[2]) {
0383       default: break;
0384       case 'a':  // 1 string to match.
0385         if (memcmp(Name.data()+3, "ction", 5) != 0)
0386           break;
0387         return AttributeCommonInfo::AT_IBAction;         // "ibaction"
0388       case 'o':  // 1 string to match.
0389         if (memcmp(Name.data()+3, "utlet", 5) != 0)
0390           break;
0391         return AttributeCommonInfo::AT_IBOutlet;         // "iboutlet"
0392       }
0393       break;
0394     case 'l':    // 1 string to match.
0395       if (memcmp(Name.data()+1, "ockable", 7) != 0)
0396         break;
0397       return AttributeCommonInfo::AT_Lockable;   // "lockable"
0398     case 'm':    // 2 strings to match.
0399       switch (Name[1]) {
0400       default: break;
0401       case '6':  // 1 string to match.
0402         if (memcmp(Name.data()+2, "8k_rtd", 6) != 0)
0403           break;
0404         return AttributeCommonInfo::AT_M68kRTD;  // "m68k_rtd"
0405       case 'u':  // 1 string to match.
0406         if (memcmp(Name.data()+2, "sttail", 6) != 0)
0407           break;
0408         return AttributeCommonInfo::AT_MustTail;         // "musttail"
0409       }
0410       break;
0411     case 'n':    // 5 strings to match.
0412       if (Name[1] != 'o')
0413         break;
0414       switch (Name[2]) {
0415       default: break;
0416       case 'c':  // 1 string to match.
0417         if (memcmp(Name.data()+3, "ommon", 5) != 0)
0418           break;
0419         return AttributeCommonInfo::AT_NoCommon;         // "nocommon"
0420       case 'e':  // 1 string to match.
0421         if (memcmp(Name.data()+3, "scape", 5) != 0)
0422           break;
0423         return AttributeCommonInfo::AT_NoEscape;         // "noescape"
0424       case 'i':  // 1 string to match.
0425         if (memcmp(Name.data()+3, "nline", 5) != 0)
0426           break;
0427         return AttributeCommonInfo::AT_NoInline;         // "noinline"
0428       case 'm':  // 1 string to match.
0429         if (memcmp(Name.data()+3, "ips16", 5) != 0)
0430           break;
0431         return AttributeCommonInfo::AT_NoMips16;         // "nomips16"
0432       case 'r':  // 1 string to match.
0433         if (memcmp(Name.data()+3, "eturn", 5) != 0)
0434           break;
0435         return AttributeCommonInfo::AT_NoReturn;         // "noreturn"
0436       }
0437       break;
0438     case 's':    // 4 strings to match.
0439       switch (Name[1]) {
0440       default: break;
0441       case 'e':  // 1 string to match.
0442         if (memcmp(Name.data()+2, "ntinel", 6) != 0)
0443           break;
0444         return AttributeCommonInfo::AT_Sentinel;         // "sentinel"
0445       case 'i':  // 1 string to match.
0446         if (memcmp(Name.data()+2, "zed_by", 6) != 0)
0447           break;
0448         return AttributeCommonInfo::AT_SizedBy;  // "sized_by"
0449       case 'u':  // 1 string to match.
0450         if (memcmp(Name.data()+2, "ppress", 6) != 0)
0451           break;
0452         return AttributeCommonInfo::AT_Suppress;         // "suppress"
0453       case 'y':  // 1 string to match.
0454         if (memcmp(Name.data()+2, "sv_abi", 6) != 0)
0455           break;
0456         return AttributeCommonInfo::AT_SysVABI;  // "sysv_abi"
0457       }
0458       break;
0459     case 't':    // 1 string to match.
0460       if (memcmp(Name.data()+1, "hiscall", 7) != 0)
0461         break;
0462       return AttributeCommonInfo::AT_ThisCall;   // "thiscall"
0463     }
0464     break;
0465   case 9:        // 14 strings to match.
0466     switch (Name[0]) {
0467     default: break;
0468     case 'd':    // 2 strings to match.
0469       if (memcmp(Name.data()+1, "ll", 2) != 0)
0470         break;
0471       switch (Name[3]) {
0472       default: break;
0473       case 'e':  // 1 string to match.
0474         if (memcmp(Name.data()+4, "xport", 5) != 0)
0475           break;
0476         return AttributeCommonInfo::AT_DLLExport;        // "dllexport"
0477       case 'i':  // 1 string to match.
0478         if (memcmp(Name.data()+4, "mport", 5) != 0)
0479           break;
0480         return AttributeCommonInfo::AT_DLLImport;        // "dllimport"
0481       }
0482       break;
0483     case 'e':    // 1 string to match.
0484       if (memcmp(Name.data()+1, "nable_if", 8) != 0)
0485         break;
0486       return AttributeCommonInfo::AT_EnableIf;   // "enable_if"
0487     case 'f':    // 1 string to match.
0488       if (memcmp(Name.data()+1, "lag_enum", 8) != 0)
0489         break;
0490       return AttributeCommonInfo::AT_FlagEnum;   // "flag_enum"
0491     case 'i':    // 1 string to match.
0492       if (memcmp(Name.data()+1, "nterrupt", 8) != 0)
0493         break;
0494       return AttributeCommonInfo::AT_Interrupt;  // "interrupt"
0495     case 'l':    // 1 string to match.
0496       if (memcmp(Name.data()+1, "ong_call", 8) != 0)
0497         break;
0498       return AttributeCommonInfo::AT_MipsLongCall;       // "long_call"
0499     case 'm':    // 3 strings to match.
0500       switch (Name[1]) {
0501       default: break;
0502       case 'a':  // 1 string to match.
0503         if (memcmp(Name.data()+2, "y_alias", 7) != 0)
0504           break;
0505         return AttributeCommonInfo::AT_MayAlias;         // "may_alias"
0506       case 'i':  // 1 string to match.
0507         if (memcmp(Name.data()+2, "cromips", 7) != 0)
0508           break;
0509         return AttributeCommonInfo::AT_MicroMips;        // "micromips"
0510       case 's':  // 1 string to match.
0511         if (memcmp(Name.data()+2, "_struct", 7) != 0)
0512           break;
0513         return AttributeCommonInfo::AT_MSStruct;         // "ms_struct"
0514       }
0515       break;
0516     case 'n':    // 1 string to match.
0517       if (memcmp(Name.data()+1, "ouwtable", 8) != 0)
0518         break;
0519       return AttributeCommonInfo::AT_NoUwtable;  // "nouwtable"
0520     case 's':    // 2 strings to match.
0521       switch (Name[1]) {
0522       default: break;
0523       case 'e':  // 1 string to match.
0524         if (memcmp(Name.data()+2, "lectany", 7) != 0)
0525           break;
0526         return AttributeCommonInfo::AT_SelectAny;        // "selectany"
0527       case 'w':  // 1 string to match.
0528         if (memcmp(Name.data()+2, "iftcall", 7) != 0)
0529           break;
0530         return AttributeCommonInfo::AT_SwiftCall;        // "swiftcall"
0531       }
0532       break;
0533     case 't':    // 1 string to match.
0534       if (memcmp(Name.data()+1, "ls_model", 8) != 0)
0535         break;
0536       return AttributeCommonInfo::AT_TLSModel;   // "tls_model"
0537     case 'v':    // 1 string to match.
0538       if (memcmp(Name.data()+1, "ecreturn", 8) != 0)
0539         break;
0540       return AttributeCommonInfo::AT_VecReturn;  // "vecreturn"
0541     }
0542     break;
0543   case 10:       // 22 strings to match.
0544     switch (Name[0]) {
0545     default: break;
0546     case 'a':    // 3 strings to match.
0547       switch (Name[1]) {
0548       default: break;
0549       case 'l':  // 2 strings to match.
0550         if (memcmp(Name.data()+2, "loc", 3) != 0)
0551           break;
0552         switch (Name[5]) {
0553         default: break;
0554         case '_':        // 1 string to match.
0555           if (memcmp(Name.data()+6, "size", 4) != 0)
0556             break;
0557           return AttributeCommonInfo::AT_AllocSize;      // "alloc_size"
0558         case 'a':        // 1 string to match.
0559           if (memcmp(Name.data()+6, "ting", 4) != 0)
0560             break;
0561           return AttributeCommonInfo::AT_Allocating;     // "allocating"
0562         }
0563         break;
0564       case 'r':  // 1 string to match.
0565         if (memcmp(Name.data()+2, "tificial", 8) != 0)
0566           break;
0567         return AttributeCommonInfo::AT_Artificial;       // "artificial"
0568       }
0569       break;
0570     case 'c':    // 5 strings to match.
0571       switch (Name[1]) {
0572       default: break;
0573       case 'a':  // 1 string to match.
0574         if (memcmp(Name.data()+2, "pability", 8) != 0)
0575           break;
0576         return AttributeCommonInfo::AT_Capability;       // "capability"
0577       case 'o':  // 4 strings to match.
0578         switch (Name[2]) {
0579         default: break;
0580         case 'd':        // 1 string to match.
0581           if (memcmp(Name.data()+3, "e_align", 7) != 0)
0582             break;
0583           return AttributeCommonInfo::AT_CodeAlign;      // "code_align"
0584         case 'n':        // 2 strings to match.
0585           switch (Name[3]) {
0586           default: break;
0587           case 's':      // 1 string to match.
0588             if (memcmp(Name.data()+4, "umable", 6) != 0)
0589               break;
0590             return AttributeCommonInfo::AT_Consumable;   // "consumable"
0591           case 'v':      // 1 string to match.
0592             if (memcmp(Name.data()+4, "ergent", 6) != 0)
0593               break;
0594             return AttributeCommonInfo::AT_Convergent;   // "convergent"
0595           }
0596           break;
0597         case 'u':        // 1 string to match.
0598           if (memcmp(Name.data()+3, "nted_by", 7) != 0)
0599             break;
0600           return AttributeCommonInfo::AT_CountedBy;      // "counted_by"
0601         }
0602         break;
0603       }
0604       break;
0605     case 'd':    // 2 strings to match.
0606       if (Name[1] != 'e')
0607         break;
0608       switch (Name[2]) {
0609       default: break;
0610       case 'p':  // 1 string to match.
0611         if (memcmp(Name.data()+3, "recated", 7) != 0)
0612           break;
0613         return AttributeCommonInfo::AT_Deprecated;       // "deprecated"
0614       case 's':  // 1 string to match.
0615         if (memcmp(Name.data()+3, "tructor", 7) != 0)
0616           break;
0617         return AttributeCommonInfo::AT_Destructor;       // "destructor"
0618       }
0619       break;
0620     case 'f':    // 1 string to match.
0621       if (memcmp(Name.data()+1, "ormat_arg", 9) != 0)
0622         break;
0623       return AttributeCommonInfo::AT_FormatArg;  // "format_arg"
0624     case 'g':    // 2 strings to match.
0625       switch (Name[1]) {
0626       default: break;
0627       case 'n':  // 1 string to match.
0628         if (memcmp(Name.data()+2, "u_inline", 8) != 0)
0629           break;
0630         return AttributeCommonInfo::AT_GNUInline;        // "gnu_inline"
0631       case 'u':  // 1 string to match.
0632         if (memcmp(Name.data()+2, "arded_by", 8) != 0)
0633           break;
0634         return AttributeCommonInfo::AT_GuardedBy;        // "guarded_by"
0635       }
0636       break;
0637     case 'n':    // 3 strings to match.
0638       if (Name[1] != 'o')
0639         break;
0640       switch (Name[2]) {
0641       default: break;
0642       case '_':  // 2 strings to match.
0643         switch (Name[3]) {
0644         default: break;
0645         case 'b':        // 1 string to match.
0646           if (memcmp(Name.data()+4, "uiltin", 6) != 0)
0647             break;
0648           return AttributeCommonInfo::AT_NoBuiltin;      // "no_builtin"
0649         case 'd':        // 1 string to match.
0650           if (memcmp(Name.data()+4, "estroy", 6) != 0)
0651             break;
0652           return AttributeCommonInfo::AT_NoDestroy;      // "no_destroy"
0653         }
0654         break;
0655       case 'c':  // 1 string to match.
0656         if (memcmp(Name.data()+3, "f_check", 7) != 0)
0657           break;
0658         return AttributeCommonInfo::AT_AnyX86NoCfCheck;  // "nocf_check"
0659       }
0660       break;
0661     case 's':    // 3 strings to match.
0662       switch (Name[1]) {
0663       default: break;
0664       case 'h':  // 1 string to match.
0665         if (memcmp(Name.data()+2, "ort_call", 8) != 0)
0666           break;
0667         return AttributeCommonInfo::AT_MipsShortCall;    // "short_call"
0668       case 'w':  // 2 strings to match.
0669         if (memcmp(Name.data()+2, "ift_", 4) != 0)
0670           break;
0671         switch (Name[6]) {
0672         default: break;
0673         case 'a':        // 1 string to match.
0674           if (memcmp(Name.data()+7, "ttr", 3) != 0)
0675             break;
0676           return AttributeCommonInfo::AT_SwiftAttr;      // "swift_attr"
0677         case 'n':        // 1 string to match.
0678           if (memcmp(Name.data()+7, "ame", 3) != 0)
0679             break;
0680           return AttributeCommonInfo::AT_SwiftName;      // "swift_name"
0681         }
0682         break;
0683       }
0684       break;
0685     case 'u':    // 1 string to match.
0686       if (memcmp(Name.data()+1, "se_handle", 9) != 0)
0687         break;
0688       return AttributeCommonInfo::AT_UseHandle;  // "use_handle"
0689     case 'v':    // 2 strings to match.
0690       switch (Name[1]) {
0691       default: break;
0692       case 'e':  // 1 string to match.
0693         if (memcmp(Name.data()+2, "ctorcall", 8) != 0)
0694           break;
0695         return AttributeCommonInfo::AT_VectorCall;       // "vectorcall"
0696       case 'i':  // 1 string to match.
0697         if (memcmp(Name.data()+2, "sibility", 8) != 0)
0698           break;
0699         return AttributeCommonInfo::AT_Visibility;       // "visibility"
0700       }
0701       break;
0702     }
0703     break;
0704   case 11:       // 29 strings to match.
0705     switch (Name[0]) {
0706     default: break;
0707     case 'a':    // 2 strings to match.
0708       if (Name[1] != 'l')
0709         break;
0710       switch (Name[2]) {
0711       default: break;
0712       case 'i':  // 1 string to match.
0713         if (memcmp(Name.data()+3, "gn_value", 8) != 0)
0714           break;
0715         return AttributeCommonInfo::AT_AlignValue;       // "align_value"
0716       case 'l':  // 1 string to match.
0717         if (memcmp(Name.data()+3, "oc_align", 8) != 0)
0718           break;
0719         return AttributeCommonInfo::AT_AllocAlign;       // "alloc_align"
0720       }
0721       break;
0722     case 'c':    // 3 strings to match.
0723       switch (Name[1]) {
0724       default: break;
0725       case 'a':  // 1 string to match.
0726         if (memcmp(Name.data()+2, "lled_once", 9) != 0)
0727           break;
0728         return AttributeCommonInfo::AT_CalledOnce;       // "called_once"
0729       case 'f':  // 1 string to match.
0730         if (memcmp(Name.data()+2, "_consumed", 9) != 0)
0731           break;
0732         return AttributeCommonInfo::AT_CFConsumed;       // "cf_consumed"
0733       case 'o':  // 1 string to match.
0734         if (memcmp(Name.data()+2, "nstructor", 9) != 0)
0735           break;
0736         return AttributeCommonInfo::AT_Constructor;      // "constructor"
0737       }
0738       break;
0739     case 'd':    // 1 string to match.
0740       if (memcmp(Name.data()+1, "iagnose_if", 10) != 0)
0741         break;
0742       return AttributeCommonInfo::AT_DiagnoseIf;         // "diagnose_if"
0743     case 'e':    // 2 strings to match.
0744       switch (Name[1]) {
0745       default: break;
0746       case 'n':  // 1 string to match.
0747         if (memcmp(Name.data()+2, "force_tcb", 9) != 0)
0748           break;
0749         return AttributeCommonInfo::AT_EnforceTCB;       // "enforce_tcb"
0750       case 'x':  // 1 string to match.
0751         if (memcmp(Name.data()+2, "port_name", 9) != 0)
0752           break;
0753         return AttributeCommonInfo::AT_WebAssemblyExportName;    // "export_name"
0754       }
0755       break;
0756     case 'f':    // 1 string to match.
0757       if (memcmp(Name.data()+1, "allthrough", 10) != 0)
0758         break;
0759       return AttributeCommonInfo::AT_FallThrough;        // "fallthrough"
0760     case 'g':    // 1 string to match.
0761       if (memcmp(Name.data()+1, "uarded_var", 10) != 0)
0762         break;
0763       return AttributeCommonInfo::AT_GuardedVar;         // "guarded_var"
0764     case 'i':    // 1 string to match.
0765       if (memcmp(Name.data()+1, "mport_name", 10) != 0)
0766         break;
0767       return AttributeCommonInfo::AT_WebAssemblyImportName;      // "import_name"
0768     case 'm':    // 2 strings to match.
0769       if (Name[1] != 'a')
0770         break;
0771       switch (Name[2]) {
0772       default: break;
0773       case 't':  // 1 string to match.
0774         if (memcmp(Name.data()+3, "rix_type", 8) != 0)
0775           break;
0776         return AttributeCommonInfo::AT_MatrixType;       // "matrix_type"
0777       case 'y':  // 1 string to match.
0778         if (memcmp(Name.data()+3, "be_undef", 8) != 0)
0779           break;
0780         return AttributeCommonInfo::AT_MaybeUndef;       // "maybe_undef"
0781       }
0782       break;
0783     case 'n':    // 5 strings to match.
0784       switch (Name[1]) {
0785       default: break;
0786       case 'o':  // 4 strings to match.
0787         switch (Name[2]) {
0788         default: break;
0789         case '_':        // 1 string to match.
0790           if (memcmp(Name.data()+3, "sanitize", 8) != 0)
0791             break;
0792           return AttributeCommonInfo::AT_NoSanitize;     // "no_sanitize"
0793         case 'd':        // 1 string to match.
0794           if (memcmp(Name.data()+3, "uplicate", 8) != 0)
0795             break;
0796           return AttributeCommonInfo::AT_NoDuplicate;    // "noduplicate"
0797         case 'm':        // 1 string to match.
0798           if (memcmp(Name.data()+3, "icromips", 8) != 0)
0799             break;
0800           return AttributeCommonInfo::AT_NoMicroMips;    // "nomicromips"
0801         case 'n':        // 1 string to match.
0802           if (memcmp(Name.data()+3, "blocking", 8) != 0)
0803             break;
0804           return AttributeCommonInfo::AT_NonBlocking;    // "nonblocking"
0805         }
0806         break;
0807       case 's':  // 1 string to match.
0808         if (memcmp(Name.data()+2, "_consumed", 9) != 0)
0809           break;
0810         return AttributeCommonInfo::AT_NSConsumed;       // "ns_consumed"
0811       }
0812       break;
0813     case 'o':    // 3 strings to match.
0814       switch (Name[1]) {
0815       default: break;
0816       case 'b':  // 2 strings to match.
0817         if (memcmp(Name.data()+2, "jc_", 3) != 0)
0818           break;
0819         switch (Name[5]) {
0820         default: break;
0821         case 'b':        // 1 string to match.
0822           if (memcmp(Name.data()+6, "ridge", 5) != 0)
0823             break;
0824           return AttributeCommonInfo::AT_ObjCBridge;     // "objc_bridge"
0825         case 'd':        // 1 string to match.
0826           if (memcmp(Name.data()+6, "irect", 5) != 0)
0827             break;
0828           return AttributeCommonInfo::AT_ObjCDirect;     // "objc_direct"
0829         }
0830         break;
0831       case 's':  // 1 string to match.
0832         if (memcmp(Name.data()+2, "_consumed", 9) != 0)
0833           break;
0834         return AttributeCommonInfo::AT_OSConsumed;       // "os_consumed"
0835       }
0836       break;
0837     case 's':    // 3 strings to match.
0838       switch (Name[1]) {
0839       default: break;
0840       case 'w':  // 2 strings to match.
0841         if (memcmp(Name.data()+2, "ift_", 4) != 0)
0842           break;
0843         switch (Name[6]) {
0844         default: break;
0845         case 'a':        // 1 string to match.
0846           if (memcmp(Name.data()+7, "sync", 4) != 0)
0847             break;
0848           return AttributeCommonInfo::AT_SwiftAsync;     // "swift_async"
0849         case 'e':        // 1 string to match.
0850           if (memcmp(Name.data()+7, "rror", 4) != 0)
0851             break;
0852           return AttributeCommonInfo::AT_SwiftError;     // "swift_error"
0853         }
0854         break;
0855       case 'y':  // 1 string to match.
0856         if (memcmp(Name.data()+2, "cl_kernel", 9) != 0)
0857           break;
0858         return AttributeCommonInfo::AT_SYCLKernel;       // "sycl_kernel"
0859       }
0860       break;
0861     case 't':    // 1 string to match.
0862       if (memcmp(Name.data()+1, "rivial_abi", 10) != 0)
0863         break;
0864       return AttributeCommonInfo::AT_TrivialABI;         // "trivial_abi"
0865     case 'u':    // 1 string to match.
0866       if (memcmp(Name.data()+1, "navailable", 10) != 0)
0867         break;
0868       return AttributeCommonInfo::AT_Unavailable;        // "unavailable"
0869     case 'v':    // 1 string to match.
0870       if (memcmp(Name.data()+1, "ector_size", 10) != 0)
0871         break;
0872       return AttributeCommonInfo::AT_VectorSize;         // "vector_size"
0873     case 'w':    // 2 strings to match.
0874       switch (Name[1]) {
0875       default: break;
0876       case 'a':  // 1 string to match.
0877         if (memcmp(Name.data()+2, "rn_unused", 9) != 0)
0878           break;
0879         return AttributeCommonInfo::AT_WarnUnused;       // "warn_unused"
0880       case 'e':  // 1 string to match.
0881         if (memcmp(Name.data()+2, "ak_import", 9) != 0)
0882           break;
0883         return AttributeCommonInfo::AT_WeakImport;       // "weak_import"
0884       }
0885       break;
0886     }
0887     break;
0888   case 12:       // 14 strings to match.
0889     switch (Name[0]) {
0890     default: break;
0891     case 'a':    // 1 string to match.
0892       if (memcmp(Name.data()+1, "vailability", 11) != 0)
0893         break;
0894       return AttributeCommonInfo::AT_Availability;       // "availability"
0895     case 'b':    // 3 strings to match.
0896       switch (Name[1]) {
0897       default: break;
0898       case 'p':  // 1 string to match.
0899         if (memcmp(Name.data()+2, "f_fastcall", 10) != 0)
0900           break;
0901         return AttributeCommonInfo::AT_BPFFastCall;      // "bpf_fastcall"
0902       case 't':  // 2 strings to match.
0903         if (memcmp(Name.data()+2, "f_", 2) != 0)
0904           break;
0905         switch (Name[4]) {
0906         default: break;
0907         case 'd':        // 1 string to match.
0908           if (memcmp(Name.data()+5, "ecl_tag", 7) != 0)
0909             break;
0910           return AttributeCommonInfo::AT_BTFDeclTag;     // "btf_decl_tag"
0911         case 't':        // 1 string to match.
0912           if (memcmp(Name.data()+5, "ype_tag", 7) != 0)
0913             break;
0914           return AttributeCommonInfo::AT_BTFTypeTag;     // "btf_type_tag"
0915         }
0916         break;
0917       }
0918       break;
0919     case 'c':    // 3 strings to match.
0920       switch (Name[1]) {
0921       default: break;
0922       case 'o':  // 1 string to match.
0923         if (memcmp(Name.data()+2, "ro_wrapper", 10) != 0)
0924           break;
0925         return AttributeCommonInfo::AT_CoroWrapper;      // "coro_wrapper"
0926       case 'p':  // 2 strings to match.
0927         if (memcmp(Name.data()+2, "u_", 2) != 0)
0928           break;
0929         switch (Name[4]) {
0930         default: break;
0931         case 'd':        // 1 string to match.
0932           if (memcmp(Name.data()+5, "ispatch", 7) != 0)
0933             break;
0934           return AttributeCommonInfo::AT_CPUDispatch;    // "cpu_dispatch"
0935         case 's':        // 1 string to match.
0936           if (memcmp(Name.data()+5, "pecific", 7) != 0)
0937             break;
0938           return AttributeCommonInfo::AT_CPUSpecific;    // "cpu_specific"
0939         }
0940         break;
0941       }
0942       break;
0943     case 'n':    // 2 strings to match.
0944       switch (Name[1]) {
0945       default: break;
0946       case 'o':  // 1 string to match.
0947         if (memcmp(Name.data()+2, "convergent", 10) != 0)
0948           break;
0949         return AttributeCommonInfo::AT_NoConvergent;     // "noconvergent"
0950       case 'v':  // 1 string to match.
0951         if (memcmp(Name.data()+2, "ptx_kernel", 10) != 0)
0952           break;
0953         return AttributeCommonInfo::AT_NVPTXKernel;      // "nvptx_kernel"
0954       }
0955       break;
0956     case 'o':    // 3 strings to match.
0957       switch (Name[1]) {
0958       default: break;
0959       case 'b':  // 1 string to match.
0960         if (memcmp(Name.data()+2, "jc_boxable", 10) != 0)
0961           break;
0962         return AttributeCommonInfo::AT_ObjCBoxable;      // "objc_boxable"
0963       case 'p':  // 1 string to match.
0964         if (memcmp(Name.data()+2, "encl_local", 10) != 0)
0965           break;
0966         return AttributeCommonInfo::AT_OpenCLLocalAddressSpace;  // "opencl_local"
0967       case 'v':  // 1 string to match.
0968         if (memcmp(Name.data()+2, "erloadable", 10) != 0)
0969           break;
0970         return AttributeCommonInfo::AT_Overloadable;     // "overloadable"
0971       }
0972       break;
0973     case 'p':    // 1 string to match.
0974       if (memcmp(Name.data()+1, "reserve_all", 11) != 0)
0975         break;
0976       return AttributeCommonInfo::AT_PreserveAll;        // "preserve_all"
0977     case 's':    // 1 string to match.
0978       if (memcmp(Name.data()+1, "wift_bridge", 11) != 0)
0979         break;
0980       return AttributeCommonInfo::AT_SwiftBridge;        // "swift_bridge"
0981     }
0982     break;
0983   case 13:       // 26 strings to match.
0984     switch (Name[0]) {
0985     default: break;
0986     case 'a':    // 3 strings to match.
0987       switch (Name[1]) {
0988       default: break;
0989       case 'd':  // 1 string to match.
0990         if (memcmp(Name.data()+2, "dress_space", 11) != 0)
0991           break;
0992         return AttributeCommonInfo::AT_AddressSpace;     // "address_space"
0993       case 'l':  // 1 string to match.
0994         if (memcmp(Name.data()+2, "ways_inline", 11) != 0)
0995           break;
0996         return AttributeCommonInfo::AT_AlwaysInline;     // "always_inline"
0997       case 'm':  // 1 string to match.
0998         if (memcmp(Name.data()+2, "dgpu_kernel", 11) != 0)
0999           break;
1000         return AttributeCommonInfo::AT_AMDGPUKernelCall;         // "amdgpu_kernel"
1001       }
1002       break;
1003     case 'c':    // 1 string to match.
1004       if (memcmp(Name.data()+1, "allable_when", 12) != 0)
1005         break;
1006       return AttributeCommonInfo::AT_CallableWhen;       // "callable_when"
1007     case 'g':    // 1 string to match.
1008       if (memcmp(Name.data()+1, "rid_constant", 12) != 0)
1009         break;
1010       return AttributeCommonInfo::AT_CUDAGridConstant;   // "grid_constant"
1011     case 'i':    // 2 strings to match.
1012       switch (Name[1]) {
1013       default: break;
1014       case 'm':  // 1 string to match.
1015         if (memcmp(Name.data()+2, "port_module", 11) != 0)
1016           break;
1017         return AttributeCommonInfo::AT_WebAssemblyImportModule;  // "import_module"
1018       case 'n':  // 1 string to match.
1019         if (memcmp(Name.data()+2, "it_priority", 11) != 0)
1020           break;
1021         return AttributeCommonInfo::AT_InitPriority;     // "init_priority"
1022       }
1023       break;
1024     case 'l':    // 3 strings to match.
1025       switch (Name[1]) {
1026       default: break;
1027       case 'a':  // 1 string to match.
1028         if (memcmp(Name.data()+2, "unch_bounds", 11) != 0)
1029           break;
1030         return AttributeCommonInfo::AT_CUDALaunchBounds;         // "launch_bounds"
1031       case 'i':  // 1 string to match.
1032         if (memcmp(Name.data()+2, "fetimebound", 11) != 0)
1033           break;
1034         return AttributeCommonInfo::AT_LifetimeBound;    // "lifetimebound"
1035       case 'o':  // 1 string to match.
1036         if (memcmp(Name.data()+2, "ck_returned", 11) != 0)
1037           break;
1038         return AttributeCommonInfo::AT_LockReturned;     // "lock_returned"
1039       }
1040       break;
1041     case 'n':    // 1 string to match.
1042       if (memcmp(Name.data()+1, "onallocating", 12) != 0)
1043         break;
1044       return AttributeCommonInfo::AT_NonAllocating;      // "nonallocating"
1045     case 'o':    // 1 string to match.
1046       if (memcmp(Name.data()+1, "pencl_global", 12) != 0)
1047         break;
1048       return AttributeCommonInfo::AT_OpenCLGlobalAddressSpace;   // "opencl_global"
1049     case 'p':    // 3 strings to match.
1050       switch (Name[1]) {
1051       default: break;
1052       case 'r':  // 2 strings to match.
1053         if (memcmp(Name.data()+2, "eserve_", 7) != 0)
1054           break;
1055         switch (Name[9]) {
1056         default: break;
1057         case 'm':        // 1 string to match.
1058           if (memcmp(Name.data()+10, "ost", 3) != 0)
1059             break;
1060           return AttributeCommonInfo::AT_PreserveMost;   // "preserve_most"
1061         case 'n':        // 1 string to match.
1062           if (memcmp(Name.data()+10, "one", 3) != 0)
1063             break;
1064           return AttributeCommonInfo::AT_PreserveNone;   // "preserve_none"
1065         }
1066         break;
1067       case 't':  // 1 string to match.
1068         if (memcmp(Name.data()+2, "_guarded_by", 11) != 0)
1069           break;
1070         return AttributeCommonInfo::AT_PtGuardedBy;      // "pt_guarded_by"
1071       }
1072       break;
1073     case 'r':    // 2 strings to match.
1074       if (Name[1] != 'e')
1075         break;
1076       switch (Name[2]) {
1077       default: break;
1078       case 'i':  // 1 string to match.
1079         if (memcmp(Name.data()+3, "nitializes", 10) != 0)
1080           break;
1081         return AttributeCommonInfo::AT_Reinitializes;    // "reinitializes"
1082       case 't':  // 1 string to match.
1083         if (memcmp(Name.data()+3, "urns_twice", 10) != 0)
1084           break;
1085         return AttributeCommonInfo::AT_ReturnsTwice;     // "returns_twice"
1086       }
1087       break;
1088     case 's':    // 5 strings to match.
1089       switch (Name[1]) {
1090       default: break;
1091       case 'e':  // 1 string to match.
1092         if (memcmp(Name.data()+2, "t_typestate", 11) != 0)
1093           break;
1094         return AttributeCommonInfo::AT_SetTypestate;     // "set_typestate"
1095       case 'w':  // 4 strings to match.
1096         if (memcmp(Name.data()+2, "ift_", 4) != 0)
1097           break;
1098         switch (Name[6]) {
1099         default: break;
1100         case 'c':        // 1 string to match.
1101           if (memcmp(Name.data()+7, "ontext", 6) != 0)
1102             break;
1103           return AttributeCommonInfo::AT_SwiftContext;   // "swift_context"
1104         case 'n':        // 1 string to match.
1105           if (memcmp(Name.data()+7, "ewtype", 6) != 0)
1106             break;
1107           return AttributeCommonInfo::AT_SwiftNewType;   // "swift_newtype"
1108         case 'p':        // 1 string to match.
1109           if (memcmp(Name.data()+7, "rivate", 6) != 0)
1110             break;
1111           return AttributeCommonInfo::AT_SwiftPrivate;   // "swift_private"
1112         case 'w':        // 1 string to match.
1113           if (memcmp(Name.data()+7, "rapper", 6) != 0)
1114             break;
1115           return AttributeCommonInfo::AT_SwiftNewType;   // "swift_wrapper"
1116         }
1117         break;
1118       }
1119       break;
1120     case 't':    // 1 string to match.
1121       if (memcmp(Name.data()+1, "arget_clones", 12) != 0)
1122         break;
1123       return AttributeCommonInfo::AT_TargetClones;       // "target_clones"
1124     case 'u':    // 1 string to match.
1125       if (memcmp(Name.data()+1, "ninitialized", 12) != 0)
1126         break;
1127       return AttributeCommonInfo::AT_Uninitialized;      // "uninitialized"
1128     case 'v':    // 1 string to match.
1129       if (memcmp(Name.data()+1, "ec_type_hint", 12) != 0)
1130         break;
1131       return AttributeCommonInfo::AT_VecTypeHint;        // "vec_type_hint"
1132     case 'x':    // 1 string to match.
1133       if (memcmp(Name.data()+1, "ray_log_args", 12) != 0)
1134         break;
1135       return AttributeCommonInfo::AT_XRayLogArgs;        // "xray_log_args"
1136     }
1137     break;
1138   case 14:       // 20 strings to match.
1139     switch (Name[0]) {
1140     default: break;
1141     case 'a':    // 4 strings to match.
1142       switch (Name[1]) {
1143       default: break;
1144       case 'c':  // 2 strings to match.
1145         if (memcmp(Name.data()+2, "quire", 5) != 0)
1146           break;
1147         switch (Name[7]) {
1148         default: break;
1149         case '_':        // 1 string to match.
1150           if (memcmp(Name.data()+8, "handle", 6) != 0)
1151             break;
1152           return AttributeCommonInfo::AT_AcquireHandle;  // "acquire_handle"
1153         case 'd':        // 1 string to match.
1154           if (memcmp(Name.data()+8, "_after", 6) != 0)
1155             break;
1156           return AttributeCommonInfo::AT_AcquiredAfter;  // "acquired_after"
1157         }
1158         break;
1159       case 'l':  // 1 string to match.
1160         if (memcmp(Name.data()+2, "ways_destroy", 12) != 0)
1161           break;
1162         return AttributeCommonInfo::AT_AlwaysDestroy;    // "always_destroy"
1163       case 's':  // 1 string to match.
1164         if (memcmp(Name.data()+2, "sume_aligned", 12) != 0)
1165           break;
1166         return AttributeCommonInfo::AT_AssumeAligned;    // "assume_aligned"
1167       }
1168       break;
1169     case 'c':    // 1 string to match.
1170       if (memcmp(Name.data()+1, "udart_builtin", 13) != 0)
1171         break;
1172       return AttributeCommonInfo::IgnoredAttribute;      // "cudart_builtin"
1173     case 'd':    // 1 string to match.
1174       if (memcmp(Name.data()+1, "evice_builtin", 13) != 0)
1175         break;
1176       return AttributeCommonInfo::IgnoredAttribute;      // "device_builtin"
1177     case 'i':    // 1 string to match.
1178       if (memcmp(Name.data()+1, "ntel_ocl_bicc", 13) != 0)
1179         break;
1180       return AttributeCommonInfo::AT_IntelOclBicc;       // "intel_ocl_bicc"
1181     case 'l':    // 1 string to match.
1182       if (memcmp(Name.data()+1, "ocks_excluded", 13) != 0)
1183         break;
1184       return AttributeCommonInfo::AT_LocksExcluded;      // "locks_excluded"
1185     case 'n':    // 1 string to match.
1186       if (memcmp(Name.data()+1, "o_split_stack", 13) != 0)
1187         break;
1188       return AttributeCommonInfo::AT_NoSplitStack;       // "no_split_stack"
1189     case 'o':    // 4 strings to match.
1190       switch (Name[1]) {
1191       default: break;
1192       case 'b':  // 2 strings to match.
1193         if (memcmp(Name.data()+2, "jc_", 3) != 0)
1194           break;
1195         switch (Name[5]) {
1196         default: break;
1197         case 'e':        // 1 string to match.
1198           if (memcmp(Name.data()+6, "xception", 8) != 0)
1199             break;
1200           return AttributeCommonInfo::AT_ObjCException;  // "objc_exception"
1201         case 'o':        // 1 string to match.
1202           if (memcmp(Name.data()+6, "wnership", 8) != 0)
1203             break;
1204           return AttributeCommonInfo::AT_ObjCOwnership;  // "objc_ownership"
1205         }
1206         break;
1207       case 'p':  // 2 strings to match.
1208         if (memcmp(Name.data()+2, "encl_", 5) != 0)
1209           break;
1210         switch (Name[7]) {
1211         default: break;
1212         case 'g':        // 1 string to match.
1213           if (memcmp(Name.data()+8, "eneric", 6) != 0)
1214             break;
1215           return AttributeCommonInfo::AT_OpenCLGenericAddressSpace;      // "opencl_generic"
1216         case 'p':        // 1 string to match.
1217           if (memcmp(Name.data()+8, "rivate", 6) != 0)
1218             break;
1219           return AttributeCommonInfo::AT_OpenCLPrivateAddressSpace;      // "opencl_private"
1220         }
1221         break;
1222       }
1223       break;
1224     case 'p':    // 3 strings to match.
1225       switch (Name[1]) {
1226       default: break;
1227       case 'r':  // 2 strings to match.
1228         if (memcmp(Name.data()+2, "eferred_", 8) != 0)
1229           break;
1230         switch (Name[10]) {
1231         default: break;
1232         case 'n':        // 1 string to match.
1233           if (memcmp(Name.data()+11, "ame", 3) != 0)
1234             break;
1235           return AttributeCommonInfo::AT_PreferredName;  // "preferred_name"
1236         case 't':        // 1 string to match.
1237           if (memcmp(Name.data()+11, "ype", 3) != 0)
1238             break;
1239           return AttributeCommonInfo::AT_PreferredType;  // "preferred_type"
1240         }
1241         break;
1242       case 't':  // 1 string to match.
1243         if (memcmp(Name.data()+2, "_guarded_var", 12) != 0)
1244           break;
1245         return AttributeCommonInfo::AT_PtGuardedVar;     // "pt_guarded_var"
1246       }
1247       break;
1248     case 'r':    // 1 string to match.
1249       if (memcmp(Name.data()+1, "elease_handle", 13) != 0)
1250         break;
1251       return AttributeCommonInfo::AT_ReleaseHandle;      // "release_handle"
1252     case 's':    // 1 string to match.
1253       if (memcmp(Name.data()+1, "wiftasynccall", 13) != 0)
1254         break;
1255       return AttributeCommonInfo::AT_SwiftAsyncCall;     // "swiftasynccall"
1256     case 't':    // 2 strings to match.
1257       switch (Name[1]) {
1258       default: break;
1259       case 'a':  // 1 string to match.
1260         if (memcmp(Name.data()+2, "rget_version", 12) != 0)
1261           break;
1262         return AttributeCommonInfo::AT_TargetVersion;    // "target_version"
1263       case 'e':  // 1 string to match.
1264         if (memcmp(Name.data()+2, "st_typestate", 12) != 0)
1265           break;
1266         return AttributeCommonInfo::AT_TestTypestate;    // "test_typestate"
1267       }
1268       break;
1269     }
1270     break;
1271   case 15:       // 20 strings to match.
1272     switch (Name[0]) {
1273     default: break;
1274     case 'a':    // 4 strings to match.
1275       switch (Name[1]) {
1276       default: break;
1277       case 'a':  // 1 string to match.
1278         if (memcmp(Name.data()+2, "rch64_sve_pcs", 13) != 0)
1279           break;
1280         return AttributeCommonInfo::AT_AArch64SVEPcs;    // "aarch64_sve_pcs"
1281       case 'c':  // 1 string to match.
1282         if (memcmp(Name.data()+2, "quired_before", 13) != 0)
1283           break;
1284         return AttributeCommonInfo::AT_AcquiredBefore;   // "acquired_before"
1285       case 'm':  // 2 strings to match.
1286         if (memcmp(Name.data()+2, "dgpu_num_", 9) != 0)
1287           break;
1288         switch (Name[11]) {
1289         default: break;
1290         case 's':        // 1 string to match.
1291           if (memcmp(Name.data()+12, "gpr", 3) != 0)
1292             break;
1293           return AttributeCommonInfo::AT_AMDGPUNumSGPR;  // "amdgpu_num_sgpr"
1294         case 'v':        // 1 string to match.
1295           if (memcmp(Name.data()+12, "gpr", 3) != 0)
1296             break;
1297           return AttributeCommonInfo::AT_AMDGPUNumVGPR;  // "amdgpu_num_vgpr"
1298         }
1299         break;
1300       }
1301       break;
1302     case 'e':    // 1 string to match.
1303       if (memcmp(Name.data()+1, "xt_vector_type", 14) != 0)
1304         break;
1305       return AttributeCommonInfo::AT_ExtVectorType;      // "ext_vector_type"
1306     case 'f':    // 1 string to match.
1307       if (memcmp(Name.data()+1, "unction_return", 14) != 0)
1308         break;
1309       return AttributeCommonInfo::AT_FunctionReturnThunks;       // "function_return"
1310     case 'n':    // 2 strings to match.
1311       switch (Name[1]) {
1312       default: break;
1313       case 'o':  // 1 string to match.
1314         if (memcmp(Name.data()+2, "t_tail_called", 13) != 0)
1315           break;
1316         return AttributeCommonInfo::AT_NotTailCalled;    // "not_tail_called"
1317       case 's':  // 1 string to match.
1318         if (memcmp(Name.data()+2, "_error_domain", 13) != 0)
1319           break;
1320         return AttributeCommonInfo::AT_NSErrorDomain;    // "ns_error_domain"
1321       }
1322       break;
1323     case 'o':    // 5 strings to match.
1324       switch (Name[1]) {
1325       default: break;
1326       case 'b':  // 2 strings to match.
1327         if (memcmp(Name.data()+2, "jc_", 3) != 0)
1328           break;
1329         switch (Name[5]) {
1330         default: break;
1331         case 'c':        // 1 string to match.
1332           if (memcmp(Name.data()+6, "lass_stub", 9) != 0)
1333             break;
1334           return AttributeCommonInfo::AT_ObjCClassStub;  // "objc_class_stub"
1335         case 'r':        // 1 string to match.
1336           if (memcmp(Name.data()+6, "oot_class", 9) != 0)
1337             break;
1338           return AttributeCommonInfo::AT_ObjCRootClass;  // "objc_root_class"
1339         }
1340         break;
1341       case 'p':  // 1 string to match.
1342         if (memcmp(Name.data()+2, "encl_constant", 13) != 0)
1343           break;
1344         return AttributeCommonInfo::AT_OpenCLConstantAddressSpace;       // "opencl_constant"
1345       case 'w':  // 2 strings to match.
1346         if (memcmp(Name.data()+2, "nership_", 8) != 0)
1347           break;
1348         switch (Name[10]) {
1349         default: break;
1350         case 'h':        // 1 string to match.
1351           if (memcmp(Name.data()+11, "olds", 4) != 0)
1352             break;
1353           return AttributeCommonInfo::AT_Ownership;      // "ownership_holds"
1354         case 't':        // 1 string to match.
1355           if (memcmp(Name.data()+11, "akes", 4) != 0)
1356             break;
1357           return AttributeCommonInfo::AT_Ownership;      // "ownership_takes"
1358         }
1359         break;
1360       }
1361       break;
1362     case 'p':    // 1 string to match.
1363       if (memcmp(Name.data()+1, "aram_typestate", 14) != 0)
1364         break;
1365       return AttributeCommonInfo::AT_ParamTypestate;     // "param_typestate"
1366     case 'r':    // 2 strings to match.
1367       switch (Name[1]) {
1368       default: break;
1369       case 'e':  // 1 string to match.
1370         if (memcmp(Name.data()+2, "turns_nonnull", 13) != 0)
1371           break;
1372         return AttributeCommonInfo::AT_ReturnsNonNull;   // "returns_nonnull"
1373       case 'i':  // 1 string to match.
1374         if (memcmp(Name.data()+2, "scv_vector_cc", 13) != 0)
1375           break;
1376         return AttributeCommonInfo::AT_RISCVVectorCC;    // "riscv_vector_cc"
1377       }
1378       break;
1379     case 's':    // 1 string to match.
1380       if (memcmp(Name.data()+1, "coped_lockable", 14) != 0)
1381         break;
1382       return AttributeCommonInfo::AT_ScopedLockable;     // "scoped_lockable"
1383     case 't':    // 1 string to match.
1384       if (memcmp(Name.data()+1, "ype_visibility", 14) != 0)
1385         break;
1386       return AttributeCommonInfo::AT_TypeVisibility;     // "type_visibility"
1387     case 'u':    // 2 strings to match.
1388       switch (Name[1]) {
1389       default: break;
1390       case 'n':  // 1 string to match.
1391         if (memcmp(Name.data()+2, "lock_function", 13) != 0)
1392           break;
1393         return AttributeCommonInfo::AT_ReleaseCapability;        // "unlock_function"
1394       case 's':  // 1 string to match.
1395         if (memcmp(Name.data()+2, "ing_if_exists", 13) != 0)
1396           break;
1397         return AttributeCommonInfo::AT_UsingIfExists;    // "using_if_exists"
1398       }
1399       break;
1400     }
1401     break;
1402   case 16:       // 14 strings to match.
1403     switch (Name[0]) {
1404     default: break;
1405     case 'c':    // 1 string to match.
1406       if (memcmp(Name.data()+1, "oro_return_type", 15) != 0)
1407         break;
1408       return AttributeCommonInfo::AT_CoroReturnType;     // "coro_return_type"
1409     case 'e':    // 1 string to match.
1410       if (memcmp(Name.data()+1, "nforce_tcb_leaf", 15) != 0)
1411         break;
1412       return AttributeCommonInfo::AT_EnforceTCBLeaf;     // "enforce_tcb_leaf"
1413     case 'h':    // 1 string to match.
1414       if (memcmp(Name.data()+1, "ybrid_patchable", 15) != 0)
1415         break;
1416       return AttributeCommonInfo::AT_HybridPatchable;    // "hybrid_patchable"
1417     case 'i':    // 1 string to match.
1418       if (memcmp(Name.data()+1, "nternal_linkage", 15) != 0)
1419         break;
1420       return AttributeCommonInfo::AT_InternalLinkage;    // "internal_linkage"
1421     case 'm':    // 1 string to match.
1422       if (memcmp(Name.data()+1, "in_vector_width", 15) != 0)
1423         break;
1424       return AttributeCommonInfo::AT_MinVectorWidth;     // "min_vector_width"
1425     case 'n':    // 2 strings to match.
1426       switch (Name[1]) {
1427       default: break;
1428       case 'e':  // 1 string to match.
1429         if (memcmp(Name.data()+2, "on_vector_type", 14) != 0)
1430           break;
1431         return AttributeCommonInfo::AT_NeonVectorType;   // "neon_vector_type"
1432       case 's':  // 1 string to match.
1433         if (memcmp(Name.data()+2, "_consumes_self", 14) != 0)
1434           break;
1435         return AttributeCommonInfo::AT_NSConsumesSelf;   // "ns_consumes_self"
1436       }
1437       break;
1438     case 'o':    // 1 string to match.
1439       if (memcmp(Name.data()+1, "s_consumes_this", 15) != 0)
1440         break;
1441       return AttributeCommonInfo::AT_OSConsumesThis;     // "os_consumes_this"
1442     case 'p':    // 1 string to match.
1443       if (memcmp(Name.data()+1, "ass_object_size", 15) != 0)
1444         break;
1445       return AttributeCommonInfo::AT_PassObjectSize;     // "pass_object_size"
1446     case 'r':    // 2 strings to match.
1447       switch (Name[1]) {
1448       default: break;
1449       case 'a':  // 1 string to match.
1450         if (memcmp(Name.data()+2, "ndomize_layout", 14) != 0)
1451           break;
1452         return AttributeCommonInfo::AT_RandomizeLayout;  // "randomize_layout"
1453       case 'e':  // 1 string to match.
1454         if (memcmp(Name.data()+2, "turn_typestate", 14) != 0)
1455           break;
1456         return AttributeCommonInfo::AT_ReturnTypestate;  // "return_typestate"
1457       }
1458       break;
1459     case 's':    // 3 strings to match.
1460       switch (Name[1]) {
1461       default: break;
1462       case 'i':  // 1 string to match.
1463         if (memcmp(Name.data()+2, "zed_by_or_null", 14) != 0)
1464           break;
1465         return AttributeCommonInfo::AT_SizedByOrNull;    // "sized_by_or_null"
1466       case 't':  // 1 string to match.
1467         if (memcmp(Name.data()+2, "andalone_debug", 14) != 0)
1468           break;
1469         return AttributeCommonInfo::AT_StandaloneDebug;  // "standalone_debug"
1470       case 'w':  // 1 string to match.
1471         if (memcmp(Name.data()+2, "ift_async_name", 14) != 0)
1472           break;
1473         return AttributeCommonInfo::AT_SwiftAsyncName;   // "swift_async_name"
1474       }
1475       break;
1476     }
1477     break;
1478   case 17:       // 7 strings to match.
1479     switch (Name[0]) {
1480     default: break;
1481     case 'a':    // 2 strings to match.
1482       switch (Name[1]) {
1483       default: break;
1484       case 'n':  // 1 string to match.
1485         if (memcmp(Name.data()+2, "alyzer_noreturn", 15) != 0)
1486           break;
1487         return AttributeCommonInfo::AT_AnalyzerNoReturn;         // "analyzer_noreturn"
1488       case 's':  // 1 string to match.
1489         if (memcmp(Name.data()+2, "sert_capability", 15) != 0)
1490           break;
1491         return AttributeCommonInfo::AT_AssertCapability;         // "assert_capability"
1492       }
1493       break;
1494     case 'o':    // 2 strings to match.
1495       switch (Name[1]) {
1496       default: break;
1497       case 'b':  // 1 string to match.
1498         if (memcmp(Name.data()+2, "jc_runtime_name", 15) != 0)
1499           break;
1500         return AttributeCommonInfo::AT_ObjCRuntimeName;  // "objc_runtime_name"
1501       case 'w':  // 1 string to match.
1502         if (memcmp(Name.data()+2, "nership_returns", 15) != 0)
1503           break;
1504         return AttributeCommonInfo::AT_Ownership;        // "ownership_returns"
1505       }
1506       break;
1507     case 's':    // 2 strings to match.
1508       switch (Name[1]) {
1509       default: break;
1510       case 'h':  // 1 string to match.
1511         if (memcmp(Name.data()+2, "ared_capability", 15) != 0)
1512           break;
1513         return AttributeCommonInfo::AT_Capability;       // "shared_capability"
1514       case 'w':  // 1 string to match.
1515         if (memcmp(Name.data()+2, "ift_async_error", 15) != 0)
1516           break;
1517         return AttributeCommonInfo::AT_SwiftAsyncError;  // "swift_async_error"
1518       }
1519       break;
1520     case 't':    // 1 string to match.
1521       if (memcmp(Name.data()+1, "ransparent_union", 16) != 0)
1522         break;
1523       return AttributeCommonInfo::AT_TransparentUnion;   // "transparent_union"
1524     }
1525     break;
1526   case 18:       // 23 strings to match.
1527     switch (Name[0]) {
1528     default: break;
1529     case 'a':    // 3 strings to match.
1530       switch (Name[1]) {
1531       default: break;
1532       case 'a':  // 1 string to match.
1533         if (memcmp(Name.data()+2, "rch64_vector_pcs", 16) != 0)
1534           break;
1535         return AttributeCommonInfo::AT_AArch64VectorPcs;         // "aarch64_vector_pcs"
1536       case 'c':  // 1 string to match.
1537         if (memcmp(Name.data()+2, "quire_capability", 16) != 0)
1538           break;
1539         return AttributeCommonInfo::AT_AcquireCapability;        // "acquire_capability"
1540       case 's':  // 1 string to match.
1541         if (memcmp(Name.data()+2, "sert_shared_lock", 16) != 0)
1542           break;
1543         return AttributeCommonInfo::AT_AssertSharedLock;         // "assert_shared_lock"
1544       }
1545       break;
1546     case 'c':    // 3 strings to match.
1547       switch (Name[1]) {
1548       default: break;
1549       case 'a':  // 1 string to match.
1550         if (memcmp(Name.data()+2, "rries_dependency", 16) != 0)
1551           break;
1552         return AttributeCommonInfo::AT_CarriesDependency;        // "carries_dependency"
1553       case 'o':  // 2 strings to match.
1554         switch (Name[2]) {
1555         default: break;
1556         case 'r':        // 1 string to match.
1557           if (memcmp(Name.data()+3, "o_lifetimebound", 15) != 0)
1558             break;
1559           return AttributeCommonInfo::AT_CoroLifetimeBound;      // "coro_lifetimebound"
1560         case 'u':        // 1 string to match.
1561           if (memcmp(Name.data()+3, "nted_by_or_null", 15) != 0)
1562             break;
1563           return AttributeCommonInfo::AT_CountedByOrNull;        // "counted_by_or_null"
1564         }
1565         break;
1566       }
1567       break;
1568     case 'd':    // 1 string to match.
1569       if (memcmp(Name.data()+1, "isable_tail_calls", 17) != 0)
1570         break;
1571       return AttributeCommonInfo::AT_DisableTailCalls;   // "disable_tail_calls"
1572     case 'e':    // 1 string to match.
1573       if (memcmp(Name.data()+1, "num_extensibility", 17) != 0)
1574         break;
1575       return AttributeCommonInfo::AT_EnumExtensibility;  // "enum_extensibility"
1576     case 'i':    // 1 string to match.
1577       if (memcmp(Name.data()+1, "boutletcollection", 17) != 0)
1578         break;
1579       return AttributeCommonInfo::AT_IBOutletCollection;         // "iboutletcollection"
1580     case 'm':    // 1 string to match.
1581       if (memcmp(Name.data()+1, "ig_server_routine", 17) != 0)
1582         break;
1583       return AttributeCommonInfo::AT_MIGServerRoutine;   // "mig_server_routine"
1584     case 'n':    // 4 strings to match.
1585       if (memcmp(Name.data()+1, "o_s", 3) != 0)
1586         break;
1587       switch (Name[4]) {
1588       default: break;
1589       case 'a':  // 2 strings to match.
1590         if (memcmp(Name.data()+5, "nitize_", 7) != 0)
1591           break;
1592         switch (Name[12]) {
1593         default: break;
1594         case 'm':        // 1 string to match.
1595           if (memcmp(Name.data()+13, "emory", 5) != 0)
1596             break;
1597           return AttributeCommonInfo::AT_NoSanitizeSpecific;     // "no_sanitize_memory"
1598         case 't':        // 1 string to match.
1599           if (memcmp(Name.data()+13, "hread", 5) != 0)
1600             break;
1601           return AttributeCommonInfo::AT_NoSanitizeSpecific;     // "no_sanitize_thread"
1602         }
1603         break;
1604       case 'p':  // 1 string to match.
1605         if (memcmp(Name.data()+5, "ecializations", 13) != 0)
1606           break;
1607         return AttributeCommonInfo::AT_NoSpecializations;        // "no_specializations"
1608       case 't':  // 1 string to match.
1609         if (memcmp(Name.data()+5, "ack_protector", 13) != 0)
1610           break;
1611         return AttributeCommonInfo::AT_NoStackProtector;         // "no_stack_protector"
1612       }
1613       break;
1614     case 'o':    // 4 strings to match.
1615       switch (Name[1]) {
1616       default: break;
1617       case 'b':  // 2 strings to match.
1618         if (memcmp(Name.data()+2, "jc_", 3) != 0)
1619           break;
1620         switch (Name[5]) {
1621         default: break;
1622         case 'm':        // 1 string to match.
1623           if (memcmp(Name.data()+6, "ethod_family", 12) != 0)
1624             break;
1625           return AttributeCommonInfo::AT_ObjCMethodFamily;       // "objc_method_family"
1626         case 'n':        // 1 string to match.
1627           if (memcmp(Name.data()+6, "onlazy_class", 12) != 0)
1628             break;
1629           return AttributeCommonInfo::AT_ObjCNonLazyClass;       // "objc_nonlazy_class"
1630         }
1631         break;
1632       case 'p':  // 2 strings to match.
1633         if (memcmp(Name.data()+2, "encl_", 5) != 0)
1634           break;
1635         switch (Name[7]) {
1636         default: break;
1637         case 'g':        // 1 string to match.
1638           if (memcmp(Name.data()+8, "lobal_host", 10) != 0)
1639             break;
1640           return AttributeCommonInfo::AT_OpenCLGlobalHostAddressSpace;   // "opencl_global_host"
1641         case 'u':        // 1 string to match.
1642           if (memcmp(Name.data()+8, "nroll_hint", 10) != 0)
1643             break;
1644           return AttributeCommonInfo::AT_OpenCLUnrollHint;       // "opencl_unroll_hint"
1645         }
1646         break;
1647       }
1648       break;
1649     case 'r':    // 1 string to match.
1650       if (memcmp(Name.data()+1, "elease_capability", 17) != 0)
1651         break;
1652       return AttributeCommonInfo::AT_ReleaseCapability;  // "release_capability"
1653     case 's':    // 3 strings to match.
1654       switch (Name[1]) {
1655       default: break;
1656       case 'w':  // 2 strings to match.
1657         if (memcmp(Name.data()+2, "ift_", 4) != 0)
1658           break;
1659         switch (Name[6]) {
1660         default: break;
1661         case 'e':        // 1 string to match.
1662           if (memcmp(Name.data()+7, "rror_result", 11) != 0)
1663             break;
1664           return AttributeCommonInfo::AT_SwiftErrorResult;       // "swift_error_result"
1665         case 'o':        // 1 string to match.
1666           if (memcmp(Name.data()+7, "bjc_members", 11) != 0)
1667             break;
1668           return AttributeCommonInfo::AT_SwiftObjCMembers;       // "swift_objc_members"
1669         }
1670         break;
1671       case 'y':  // 1 string to match.
1672         if (memcmp(Name.data()+2, "cl_special_class", 16) != 0)
1673           break;
1674         return AttributeCommonInfo::AT_SYCLSpecialClass;         // "sycl_special_class"
1675       }
1676       break;
1677     case 'w':    // 1 string to match.
1678       if (memcmp(Name.data()+1, "arn_unused_result", 17) != 0)
1679         break;
1680       return AttributeCommonInfo::AT_WarnUnusedResult;   // "warn_unused_result"
1681     }
1682     break;
1683   case 19:       // 22 strings to match.
1684     switch (Name[0]) {
1685     default: break;
1686     case 'a':    // 2 strings to match.
1687       switch (Name[1]) {
1688       default: break;
1689       case 'm':  // 1 string to match.
1690         if (memcmp(Name.data()+2, "dgpu_waves_per_eu", 17) != 0)
1691           break;
1692         return AttributeCommonInfo::AT_AMDGPUWavesPerEU;         // "amdgpu_waves_per_eu"
1693       case 'r':  // 1 string to match.
1694         if (memcmp(Name.data()+2, "m_sve_vector_bits", 17) != 0)
1695           break;
1696         return AttributeCommonInfo::AT_ArmSveVectorBits;         // "arm_sve_vector_bits"
1697       }
1698       break;
1699     case 'c':    // 6 strings to match.
1700       switch (Name[1]) {
1701       default: break;
1702       case 'f':  // 3 strings to match.
1703         if (Name[2] != '_')
1704           break;
1705         switch (Name[3]) {
1706         default: break;
1707         case 'a':        // 1 string to match.
1708           if (memcmp(Name.data()+4, "udited_transfer", 15) != 0)
1709             break;
1710           return AttributeCommonInfo::AT_CFAuditedTransfer;      // "cf_audited_transfer"
1711         case 'r':        // 1 string to match.
1712           if (memcmp(Name.data()+4, "eturns_retained", 15) != 0)
1713             break;
1714           return AttributeCommonInfo::AT_CFReturnsRetained;      // "cf_returns_retained"
1715         case 'u':        // 1 string to match.
1716           if (memcmp(Name.data()+4, "nknown_transfer", 15) != 0)
1717             break;
1718           return AttributeCommonInfo::AT_CFUnknownTransfer;      // "cf_unknown_transfer"
1719         }
1720         break;
1721       case 'l':  // 1 string to match.
1722         if (memcmp(Name.data()+2, "ang_builtin_alias", 17) != 0)
1723           break;
1724         return AttributeCommonInfo::AT_BuiltinAlias;     // "clang_builtin_alias"
1725       case 'm':  // 1 string to match.
1726         if (memcmp(Name.data()+2, "se_nonsecure_call", 17) != 0)
1727           break;
1728         return AttributeCommonInfo::AT_CmseNSCall;       // "cmse_nonsecure_call"
1729       case 'o':  // 1 string to match.
1730         if (memcmp(Name.data()+2, "ro_await_elidable", 17) != 0)
1731           break;
1732         return AttributeCommonInfo::AT_CoroAwaitElidable;        // "coro_await_elidable"
1733       }
1734       break;
1735     case 'd':    // 1 string to match.
1736       if (memcmp(Name.data()+1, "iagnose_as_builtin", 18) != 0)
1737         break;
1738       return AttributeCommonInfo::AT_DiagnoseAsBuiltin;  // "diagnose_as_builtin"
1739     case 'l':    // 1 string to match.
1740       if (memcmp(Name.data()+1, "ifetime_capture_by", 18) != 0)
1741         break;
1742       return AttributeCommonInfo::AT_LifetimeCaptureBy;  // "lifetime_capture_by"
1743     case 'n':    // 3 strings to match.
1744       switch (Name[1]) {
1745       default: break;
1746       case 'o':  // 2 strings to match.
1747         if (Name[2] != '_')
1748           break;
1749         switch (Name[3]) {
1750         default: break;
1751         case 'r':        // 1 string to match.
1752           if (memcmp(Name.data()+4, "andomize_layout", 15) != 0)
1753             break;
1754           return AttributeCommonInfo::AT_NoRandomizeLayout;      // "no_randomize_layout"
1755         case 's':        // 1 string to match.
1756           if (memcmp(Name.data()+4, "anitize_address", 15) != 0)
1757             break;
1758           return AttributeCommonInfo::AT_NoSanitizeSpecific;     // "no_sanitize_address"
1759         }
1760         break;
1761       case 's':  // 1 string to match.
1762         if (memcmp(Name.data()+2, "_returns_retained", 17) != 0)
1763           break;
1764         return AttributeCommonInfo::AT_NSReturnsRetained;        // "ns_returns_retained"
1765       }
1766       break;
1767     case 'o':    // 5 strings to match.
1768       switch (Name[1]) {
1769       default: break;
1770       case 'b':  // 4 strings to match.
1771         if (memcmp(Name.data()+2, "jc_", 3) != 0)
1772           break;
1773         switch (Name[5]) {
1774         default: break;
1775         case 'b':        // 2 strings to match.
1776           if (memcmp(Name.data()+6, "ridge_", 6) != 0)
1777             break;
1778           switch (Name[12]) {
1779           default: break;
1780           case 'm':      // 1 string to match.
1781             if (memcmp(Name.data()+13, "utable", 6) != 0)
1782               break;
1783             return AttributeCommonInfo::AT_ObjCBridgeMutable;    // "objc_bridge_mutable"
1784           case 'r':      // 1 string to match.
1785             if (memcmp(Name.data()+13, "elated", 6) != 0)
1786               break;
1787             return AttributeCommonInfo::AT_ObjCBridgeRelated;    // "objc_bridge_related"
1788           }
1789           break;
1790         case 'd':        // 1 string to match.
1791           if (memcmp(Name.data()+6, "irect_members", 13) != 0)
1792             break;
1793           return AttributeCommonInfo::AT_ObjCDirectMembers;      // "objc_direct_members"
1794         case 'r':        // 1 string to match.
1795           if (memcmp(Name.data()+6, "equires_super", 13) != 0)
1796             break;
1797           return AttributeCommonInfo::AT_ObjCRequiresSuper;      // "objc_requires_super"
1798         }
1799         break;
1800       case 's':  // 1 string to match.
1801         if (memcmp(Name.data()+2, "_returns_retained", 17) != 0)
1802           break;
1803         return AttributeCommonInfo::AT_OSReturnsRetained;        // "os_returns_retained"
1804       }
1805       break;
1806     case 'r':    // 1 string to match.
1807       if (memcmp(Name.data()+1, "equires_capability", 18) != 0)
1808         break;
1809       return AttributeCommonInfo::AT_RequiresCapability;         // "requires_capability"
1810     case 's':    // 1 string to match.
1811       if (memcmp(Name.data()+1, "wift_async_context", 18) != 0)
1812         break;
1813       return AttributeCommonInfo::AT_SwiftAsyncContext;  // "swift_async_context"
1814     case 'u':    // 1 string to match.
1815       if (memcmp(Name.data()+1, "nsafe_buffer_usage", 18) != 0)
1816         break;
1817       return AttributeCommonInfo::AT_UnsafeBufferUsage;  // "unsafe_buffer_usage"
1818     case 'z':    // 1 string to match.
1819       if (memcmp(Name.data()+1, "ero_call_used_regs", 18) != 0)
1820         break;
1821       return AttributeCommonInfo::AT_ZeroCallUsedRegs;   // "zero_call_used_regs"
1822     }
1823     break;
1824   case 20:       // 9 strings to match.
1825     switch (Name[0]) {
1826     default: break;
1827     case 'c':    // 2 strings to match.
1828       switch (Name[1]) {
1829       default: break;
1830       case 'l':  // 1 string to match.
1831         if (memcmp(Name.data()+2, "spv_libclc_builtin", 18) != 0)
1832           break;
1833         return AttributeCommonInfo::AT_ClspvLibclcBuiltin;       // "clspv_libclc_builtin"
1834       case 'm':  // 1 string to match.
1835         if (memcmp(Name.data()+2, "se_nonsecure_entry", 18) != 0)
1836           break;
1837         return AttributeCommonInfo::AT_CmseNSEntry;      // "cmse_nonsecure_entry"
1838       }
1839       break;
1840     case 'l':    // 1 string to match.
1841       if (memcmp(Name.data()+1, "oader_uninitialized", 19) != 0)
1842         break;
1843       return AttributeCommonInfo::AT_LoaderUninitialized;        // "loader_uninitialized"
1844     case 'n':    // 1 string to match.
1845       if (memcmp(Name.data()+1, "eon_polyvector_type", 19) != 0)
1846         break;
1847       return AttributeCommonInfo::AT_NeonPolyVectorType;         // "neon_polyvector_type"
1848     case 'o':    // 2 strings to match.
1849       switch (Name[1]) {
1850       default: break;
1851       case 'b':  // 1 string to match.
1852         if (memcmp(Name.data()+2, "jc_runtime_visible", 18) != 0)
1853           break;
1854         return AttributeCommonInfo::AT_ObjCRuntimeVisible;       // "objc_runtime_visible"
1855       case 'p':  // 1 string to match.
1856         if (memcmp(Name.data()+2, "encl_global_device", 18) != 0)
1857           break;
1858         return AttributeCommonInfo::AT_OpenCLGlobalDeviceAddressSpace;   // "opencl_global_device"
1859       }
1860       break;
1861     case 'r':    // 1 string to match.
1862       if (memcmp(Name.data()+1, "eqd_work_group_size", 19) != 0)
1863         break;
1864       return AttributeCommonInfo::AT_ReqdWorkGroupSize;  // "reqd_work_group_size"
1865     case 's':    // 1 string to match.
1866       if (memcmp(Name.data()+1, "hared_lock_function", 19) != 0)
1867         break;
1868       return AttributeCommonInfo::AT_AcquireCapability;  // "shared_lock_function"
1869     case 'w':    // 1 string to match.
1870       if (memcmp(Name.data()+1, "ork_group_size_hint", 19) != 0)
1871         break;
1872       return AttributeCommonInfo::AT_WorkGroupSizeHint;  // "work_group_size_hint"
1873     }
1874     break;
1875   case 21:       // 11 strings to match.
1876     switch (Name[0]) {
1877     default: break;
1878     case 'a':    // 1 string to match.
1879       if (memcmp(Name.data()+1, "ssert_exclusive_lock", 20) != 0)
1880         break;
1881       return AttributeCommonInfo::AT_AssertExclusiveLock;        // "assert_exclusive_lock"
1882     case 'l':    // 1 string to match.
1883       if (memcmp(Name.data()+1, "to_visibility_public", 20) != 0)
1884         break;
1885       return AttributeCommonInfo::AT_LTOVisibilityPublic;        // "lto_visibility_public"
1886     case 'o':    // 1 string to match.
1887       if (memcmp(Name.data()+1, "bjc_precise_lifetime", 20) != 0)
1888         break;
1889       return AttributeCommonInfo::AT_ObjCPreciseLifetime;        // "objc_precise_lifetime"
1890     case 'p':    // 2 strings to match.
1891       switch (Name[1]) {
1892       default: break;
1893       case 'o':  // 1 string to match.
1894         if (memcmp(Name.data()+2, "inter_with_type_tag", 19) != 0)
1895           break;
1896         return AttributeCommonInfo::AT_ArgumentWithTypeTag;      // "pointer_with_type_tag"
1897       case 'r':  // 1 string to match.
1898         if (memcmp(Name.data()+2, "eserve_access_index", 19) != 0)
1899           break;
1900         return AttributeCommonInfo::AT_BPFPreserveAccessIndex;   // "preserve_access_index"
1901       }
1902       break;
1903     case 'r':    // 1 string to match.
1904       if (memcmp(Name.data()+1, "iscv_rvv_vector_bits", 20) != 0)
1905         break;
1906       return AttributeCommonInfo::AT_RISCVRVVVectorBits;         // "riscv_rvv_vector_bits"
1907     case 's':    // 3 strings to match.
1908       switch (Name[1]) {
1909       default: break;
1910       case 'h':  // 1 string to match.
1911         if (memcmp(Name.data()+2, "ared_locks_required", 19) != 0)
1912           break;
1913         return AttributeCommonInfo::AT_RequiresCapability;       // "shared_locks_required"
1914       case 'w':  // 2 strings to match.
1915         if (memcmp(Name.data()+2, "ift_", 4) != 0)
1916           break;
1917         switch (Name[6]) {
1918         default: break;
1919         case 'b':        // 1 string to match.
1920           if (memcmp(Name.data()+7, "ridged_typedef", 14) != 0)
1921             break;
1922           return AttributeCommonInfo::AT_SwiftBridgedTypedef;    // "swift_bridged_typedef"
1923         case 'i':        // 1 string to match.
1924           if (memcmp(Name.data()+7, "ndirect_result", 14) != 0)
1925             break;
1926           return AttributeCommonInfo::AT_SwiftIndirectResult;    // "swift_indirect_result"
1927         }
1928         break;
1929       }
1930       break;
1931     case 't':    // 1 string to match.
1932       if (memcmp(Name.data()+1, "ype_tag_for_datatype", 20) != 0)
1933         break;
1934       return AttributeCommonInfo::AT_TypeTagForDatatype;         // "type_tag_for_datatype"
1935     case 'x':    // 1 string to match.
1936       if (memcmp(Name.data()+1, "ray_never_instrument", 20) != 0)
1937         break;
1938       return AttributeCommonInfo::AT_XRayInstrument;     // "xray_never_instrument"
1939     }
1940     break;
1941   case 22:       // 8 strings to match.
1942     switch (Name[0]) {
1943     default: break;
1944     case 'a':    // 1 string to match.
1945       if (memcmp(Name.data()+1, "rgument_with_type_tag", 21) != 0)
1946         break;
1947       return AttributeCommonInfo::AT_ArgumentWithTypeTag;        // "argument_with_type_tag"
1948     case 'e':    // 1 string to match.
1949       if (memcmp(Name.data()+1, "xternal_source_symbol", 21) != 0)
1950         break;
1951       return AttributeCommonInfo::AT_ExternalSourceSymbol;       // "external_source_symbol"
1952     case 'n':    // 1 string to match.
1953       if (memcmp(Name.data()+1, "o_instrument_function", 21) != 0)
1954         break;
1955       return AttributeCommonInfo::AT_NoInstrumentFunction;       // "no_instrument_function"
1956     case 'o':    // 1 string to match.
1957       if (memcmp(Name.data()+1, "bjc_independent_class", 21) != 0)
1958         break;
1959       return AttributeCommonInfo::AT_ObjCIndependentClass;       // "objc_independent_class"
1960     case 'p':    // 2 strings to match.
1961       switch (Name[1]) {
1962       default: break;
1963       case 'r':  // 1 string to match.
1964         if (memcmp(Name.data()+2, "eserve_static_offset", 20) != 0)
1965           break;
1966         return AttributeCommonInfo::AT_BPFPreserveStaticOffset;  // "preserve_static_offset"
1967       case 't':  // 1 string to match.
1968         if (memcmp(Name.data()+2, "rauth_vtable_pointer", 20) != 0)
1969           break;
1970         return AttributeCommonInfo::AT_VTablePointerAuthentication;      // "ptrauth_vtable_pointer"
1971       }
1972       break;
1973     case 't':    // 1 string to match.
1974       if (memcmp(Name.data()+1, "ry_acquire_capability", 21) != 0)
1975         break;
1976       return AttributeCommonInfo::AT_TryAcquireCapability;       // "try_acquire_capability"
1977     case 'x':    // 1 string to match.
1978       if (memcmp(Name.data()+1, "ray_always_instrument", 21) != 0)
1979         break;
1980       return AttributeCommonInfo::AT_XRayInstrument;     // "xray_always_instrument"
1981     }
1982     break;
1983   case 23:       // 8 strings to match.
1984     switch (Name[0]) {
1985     default: break;
1986     case 'c':    // 1 string to match.
1987       if (memcmp(Name.data()+1, "f_returns_not_retained", 22) != 0)
1988         break;
1989       return AttributeCommonInfo::AT_CFReturnsNotRetained;       // "cf_returns_not_retained"
1990     case 'e':    // 1 string to match.
1991       if (memcmp(Name.data()+1, "xclusive_lock_function", 22) != 0)
1992         break;
1993       return AttributeCommonInfo::AT_AcquireCapability;  // "exclusive_lock_function"
1994     case 'f':    // 1 string to match.
1995       if (memcmp(Name.data()+1, "orce_align_arg_pointer", 22) != 0)
1996         break;
1997       return AttributeCommonInfo::AT_X86ForceAlignArgPointer;    // "force_align_arg_pointer"
1998     case 'n':    // 2 strings to match.
1999       if (memcmp(Name.data()+1, "s_returns_", 10) != 0)
2000         break;
2001       switch (Name[11]) {
2002       default: break;
2003       case 'a':  // 1 string to match.
2004         if (memcmp(Name.data()+12, "utoreleased", 11) != 0)
2005           break;
2006         return AttributeCommonInfo::AT_NSReturnsAutoreleased;    // "ns_returns_autoreleased"
2007       case 'n':  // 1 string to match.
2008         if (memcmp(Name.data()+12, "ot_retained", 11) != 0)
2009           break;
2010         return AttributeCommonInfo::AT_NSReturnsNotRetained;     // "ns_returns_not_retained"
2011       }
2012       break;
2013     case 'o':    // 1 string to match.
2014       if (memcmp(Name.data()+1, "s_returns_not_retained", 22) != 0)
2015         break;
2016       return AttributeCommonInfo::AT_OSReturnsNotRetained;       // "os_returns_not_retained"
2017     case 's':    // 2 strings to match.
2018       switch (Name[1]) {
2019       default: break;
2020       case 'h':  // 1 string to match.
2021         if (memcmp(Name.data()+2, "ared_trylock_function", 21) != 0)
2022           break;
2023         return AttributeCommonInfo::AT_SharedTrylockFunction;    // "shared_trylock_function"
2024       case 'y':  // 1 string to match.
2025         if (memcmp(Name.data()+2, "cl_kernel_entry_point", 21) != 0)
2026           break;
2027         return AttributeCommonInfo::AT_SYCLKernelEntryPoint;     // "sycl_kernel_entry_point"
2028       }
2029       break;
2030     }
2031     break;
2032   case 24:       // 6 strings to match.
2033     switch (Name[0]) {
2034     default: break;
2035     case 'a':    // 1 string to match.
2036       if (memcmp(Name.data()+1, "ssert_shared_capability", 23) != 0)
2037         break;
2038       return AttributeCommonInfo::AT_AssertCapability;   // "assert_shared_capability"
2039     case 'c':    // 1 string to match.
2040       if (memcmp(Name.data()+1, "fi_canonical_jump_table", 23) != 0)
2041         break;
2042       return AttributeCommonInfo::AT_CFICanonicalJumpTable;      // "cfi_canonical_jump_table"
2043     case 'e':    // 1 string to match.
2044       if (memcmp(Name.data()+1, "xclusive_locks_required", 23) != 0)
2045         break;
2046       return AttributeCommonInfo::AT_RequiresCapability;         // "exclusive_locks_required"
2047     case 'o':    // 1 string to match.
2048       if (memcmp(Name.data()+1, "bjc_externally_retained", 23) != 0)
2049         break;
2050       return AttributeCommonInfo::AT_ObjCExternallyRetained;     // "objc_externally_retained"
2051     case 'p':    // 2 strings to match.
2052       if (Name[1] != 'a')
2053         break;
2054       switch (Name[2]) {
2055       default: break;
2056       case 's':  // 1 string to match.
2057         if (memcmp(Name.data()+3, "s_dynamic_object_size", 21) != 0)
2058           break;
2059         return AttributeCommonInfo::AT_PassObjectSize;   // "pass_dynamic_object_size"
2060       case 't':  // 1 string to match.
2061         if (memcmp(Name.data()+3, "chable_function_entry", 21) != 0)
2062           break;
2063         return AttributeCommonInfo::AT_PatchableFunctionEntry;   // "patchable_function_entry"
2064       }
2065       break;
2066     }
2067     break;
2068   case 25:       // 7 strings to match.
2069     switch (Name[0]) {
2070     default: break;
2071     case '_':    // 1 string to match.
2072       if (memcmp(Name.data()+1, "_clang_arm_builtin_alias", 24) != 0)
2073         break;
2074       return AttributeCommonInfo::AT_ArmBuiltinAlias;    // "__clang_arm_builtin_alias"
2075     case 'a':    // 1 string to match.
2076       if (memcmp(Name.data()+1, "cquire_shared_capability", 24) != 0)
2077         break;
2078       return AttributeCommonInfo::AT_AcquireCapability;  // "acquire_shared_capability"
2079     case 'i':    // 1 string to match.
2080       if (memcmp(Name.data()+1, "ntel_reqd_sub_group_size", 24) != 0)
2081         break;
2082       return AttributeCommonInfo::AT_OpenCLIntelReqdSubGroupSize;        // "intel_reqd_sub_group_size"
2083     case 'n':    // 2 strings to match.
2084       if (memcmp(Name.data()+1, "o_", 2) != 0)
2085         break;
2086       switch (Name[3]) {
2087       default: break;
2088       case 'c':  // 1 string to match.
2089         if (memcmp(Name.data()+4, "aller_saved_registers", 21) != 0)
2090           break;
2091         return AttributeCommonInfo::AT_AnyX86NoCallerSavedRegisters;     // "no_caller_saved_registers"
2092       case 't':  // 1 string to match.
2093         if (memcmp(Name.data()+4, "hread_safety_analysis", 21) != 0)
2094           break;
2095         return AttributeCommonInfo::AT_NoThreadSafetyAnalysis;   // "no_thread_safety_analysis"
2096       }
2097       break;
2098     case 'o':    // 1 string to match.
2099       if (memcmp(Name.data()+1, "bjc_non_runtime_protocol", 24) != 0)
2100         break;
2101       return AttributeCommonInfo::AT_ObjCNonRuntimeProtocol;     // "objc_non_runtime_protocol"
2102     case 'r':    // 1 string to match.
2103       if (memcmp(Name.data()+1, "elease_shared_capability", 24) != 0)
2104         break;
2105       return AttributeCommonInfo::AT_ReleaseCapability;  // "release_shared_capability"
2106     }
2107     break;
2108   case 26:       // 9 strings to match.
2109     switch (Name[0]) {
2110     default: break;
2111     case 'a':    // 1 string to match.
2112       if (memcmp(Name.data()+1, "mdgpu_max_num_work_groups", 25) != 0)
2113         break;
2114       return AttributeCommonInfo::AT_AMDGPUMaxNumWorkGroups;     // "amdgpu_max_num_work_groups"
2115     case 'c':    // 2 strings to match.
2116       if (Name[1] != 'o')
2117         break;
2118       switch (Name[2]) {
2119       default: break;
2120       case 'n':  // 1 string to match.
2121         if (memcmp(Name.data()+3, "sumable_auto_cast_state", 23) != 0)
2122           break;
2123         return AttributeCommonInfo::AT_ConsumableAutoCast;       // "consumable_auto_cast_state"
2124       case 'r':  // 1 string to match.
2125         if (memcmp(Name.data()+3, "o_disable_lifetimebound", 23) != 0)
2126           break;
2127         return AttributeCommonInfo::AT_CoroDisableLifetimeBound;         // "coro_disable_lifetimebound"
2128       }
2129       break;
2130     case 'e':    // 1 string to match.
2131       if (memcmp(Name.data()+1, "xclusive_trylock_function", 25) != 0)
2132         break;
2133       return AttributeCommonInfo::AT_ExclusiveTrylockFunction;   // "exclusive_trylock_function"
2134     case 'n':    // 1 string to match.
2135       if (memcmp(Name.data()+1, "o_address_safety_analysis", 25) != 0)
2136         break;
2137       return AttributeCommonInfo::AT_NoSanitizeSpecific;         // "no_address_safety_analysis"
2138     case 'o':    // 1 string to match.
2139       if (memcmp(Name.data()+1, "bjc_returns_inner_pointer", 25) != 0)
2140         break;
2141       return AttributeCommonInfo::AT_ObjCReturnsInnerPointer;    // "objc_returns_inner_pointer"
2142     case 'r':    // 2 strings to match.
2143       if (Name[1] != 'e')
2144         break;
2145       switch (Name[2]) {
2146       default: break;
2147       case 'l':  // 1 string to match.
2148         if (memcmp(Name.data()+3, "ease_generic_capability", 23) != 0)
2149           break;
2150         return AttributeCommonInfo::AT_ReleaseCapability;        // "release_generic_capability"
2151       case 'q':  // 1 string to match.
2152         if (memcmp(Name.data()+3, "uires_shared_capability", 23) != 0)
2153           break;
2154         return AttributeCommonInfo::AT_RequiresCapability;       // "requires_shared_capability"
2155       }
2156       break;
2157     case 's':    // 1 string to match.
2158       if (memcmp(Name.data()+1, "peculative_load_hardening", 25) != 0)
2159         break;
2160       return AttributeCommonInfo::AT_SpeculativeLoadHardening;   // "speculative_load_hardening"
2161     }
2162     break;
2163   case 27:       // 7 strings to match.
2164     switch (Name[0]) {
2165     default: break;
2166     case 'a':    // 1 string to match.
2167       if (memcmp(Name.data()+1, "mdgpu_flat_work_group_size", 26) != 0)
2168         break;
2169       return AttributeCommonInfo::AT_AMDGPUFlatWorkGroupSize;    // "amdgpu_flat_work_group_size"
2170     case 'd':    // 2 strings to match.
2171       if (memcmp(Name.data()+1, "evice_builtin_", 14) != 0)
2172         break;
2173       switch (Name[15]) {
2174       default: break;
2175       case 's':  // 1 string to match.
2176         if (memcmp(Name.data()+16, "urface_type", 11) != 0)
2177           break;
2178         return AttributeCommonInfo::AT_CUDADeviceBuiltinSurfaceType;     // "device_builtin_surface_type"
2179       case 't':  // 1 string to match.
2180         if (memcmp(Name.data()+16, "exture_type", 11) != 0)
2181           break;
2182         return AttributeCommonInfo::AT_CUDADeviceBuiltinTextureType;     // "device_builtin_texture_type"
2183       }
2184       break;
2185     case 'e':    // 1 string to match.
2186       if (memcmp(Name.data()+1, "nforce_read_only_placement", 26) != 0)
2187         break;
2188       return AttributeCommonInfo::AT_ReadOnlyPlacement;  // "enforce_read_only_placement"
2189     case 'o':    // 3 strings to match.
2190       switch (Name[1]) {
2191       default: break;
2192       case 'b':  // 2 strings to match.
2193         if (memcmp(Name.data()+2, "jc_", 3) != 0)
2194           break;
2195         switch (Name[5]) {
2196         default: break;
2197         case 'd':        // 1 string to match.
2198           if (memcmp(Name.data()+6, "esignated_initializer", 21) != 0)
2199             break;
2200           return AttributeCommonInfo::AT_ObjCDesignatedInitializer;      // "objc_designated_initializer"
2201         case 's':        // 1 string to match.
2202           if (memcmp(Name.data()+6, "ubclassing_restricted", 21) != 0)
2203             break;
2204           return AttributeCommonInfo::AT_ObjCSubclassingRestricted;      // "objc_subclassing_restricted"
2205         }
2206         break;
2207       case 's':  // 1 string to match.
2208         if (memcmp(Name.data()+2, "_returns_retained_on_zero", 25) != 0)
2209           break;
2210         return AttributeCommonInfo::AT_OSReturnsRetainedOnZero;  // "os_returns_retained_on_zero"
2211       }
2212       break;
2213     }
2214     break;
2215   case 28:       // 2 strings to match.
2216     if (memcmp(Name.data()+0, "co", 2) != 0)
2217       break;
2218     switch (Name[2]) {
2219     default: break;
2220     case 'n':    // 1 string to match.
2221       if (memcmp(Name.data()+3, "sumable_set_state_on_read", 25) != 0)
2222         break;
2223       return AttributeCommonInfo::AT_ConsumableSetOnRead;        // "consumable_set_state_on_read"
2224     case 'r':    // 1 string to match.
2225       if (memcmp(Name.data()+3, "o_await_elidable_argument", 25) != 0)
2226         break;
2227       return AttributeCommonInfo::AT_CoroAwaitElidableArgument;  // "coro_await_elidable_argument"
2228     }
2229     break;
2230   case 29:       // 2 strings to match.
2231     switch (Name[0]) {
2232     default: break;
2233     case 'n':    // 1 string to match.
2234       if (memcmp(Name.data()+1, "o_speculative_load_hardening", 28) != 0)
2235         break;
2236       return AttributeCommonInfo::AT_NoSpeculativeLoadHardening;         // "no_speculative_load_hardening"
2237     case 't':    // 1 string to match.
2238       if (memcmp(Name.data()+1, "ry_acquire_shared_capability", 28) != 0)
2239         break;
2240       return AttributeCommonInfo::AT_TryAcquireCapability;       // "try_acquire_shared_capability"
2241     }
2242     break;
2243   case 30:       // 1 string to match.
2244     if (memcmp(Name.data()+0, "no_profile_instrument_function", 30) != 0)
2245       break;
2246     return AttributeCommonInfo::AT_NoProfileFunction;    // "no_profile_instrument_function"
2247   case 31:       // 4 strings to match.
2248     switch (Name[0]) {
2249     default: break;
2250     case 'c':    // 1 string to match.
2251       if (memcmp(Name.data()+1, "oro_only_destroy_when_complete", 30) != 0)
2252         break;
2253       return AttributeCommonInfo::AT_CoroOnlyDestroyWhenComplete;        // "coro_only_destroy_when_complete"
2254     case 'o':    // 1 string to match.
2255       if (memcmp(Name.data()+1, "s_returns_retained_on_non_zero", 30) != 0)
2256         break;
2257       return AttributeCommonInfo::AT_OSReturnsRetainedOnNonZero;         // "os_returns_retained_on_non_zero"
2258     case 'r':    // 2 strings to match.
2259       if (memcmp(Name.data()+1, "equire_", 7) != 0)
2260         break;
2261       switch (Name[8]) {
2262       default: break;
2263       case 'c':  // 1 string to match.
2264         if (memcmp(Name.data()+9, "onstant_initialization", 22) != 0)
2265           break;
2266         return AttributeCommonInfo::AT_ConstInit;        // "require_constant_initialization"
2267       case 'e':  // 1 string to match.
2268         if (memcmp(Name.data()+9, "xplicit_initialization", 22) != 0)
2269           break;
2270         return AttributeCommonInfo::AT_ExplicitInit;     // "require_explicit_initialization"
2271       }
2272       break;
2273     }
2274     break;
2275   case 33:       // 1 string to match.
2276     if (memcmp(Name.data()+0, "disable_sanitizer_instrumentation", 33) != 0)
2277       break;
2278     return AttributeCommonInfo::AT_DisableSanitizerInstrumentation;      // "disable_sanitizer_instrumentation"
2279   case 34:       // 1 string to match.
2280     if (memcmp(Name.data()+0, "objc_requires_property_definitions", 34) != 0)
2281       break;
2282     return AttributeCommonInfo::AT_ObjCRequiresPropertyDefs;     // "objc_requires_property_definitions"
2283   case 35:       // 3 strings to match.
2284     switch (Name[0]) {
2285     default: break;
2286     case '_':    // 1 string to match.
2287       if (memcmp(Name.data()+1, "_clang_arm_mve_strict_polymorphism", 34) != 0)
2288         break;
2289       return AttributeCommonInfo::AT_ArmMveStrictPolymorphism;   // "__clang_arm_mve_strict_polymorphism"
2290     case 'e':    // 1 string to match.
2291       if (memcmp(Name.data()+1, "xclude_from_explicit_instantiation", 34) != 0)
2292         break;
2293       return AttributeCommonInfo::AT_ExcludeFromExplicitInstantiation;   // "exclude_from_explicit_instantiation"
2294     case 'o':    // 1 string to match.
2295       if (memcmp(Name.data()+1, "bjc_arc_weak_reference_unavailable", 34) != 0)
2296         break;
2297       return AttributeCommonInfo::AT_ArcWeakrefUnavailable;      // "objc_arc_weak_reference_unavailable"
2298     }
2299     break;
2300   case 37:       // 1 string to match.
2301     if (memcmp(Name.data()+0, "available_only_in_default_eval_method", 37) != 0)
2302       break;
2303     return AttributeCommonInfo::AT_AvailableOnlyInDefaultEvalMethod;     // "available_only_in_default_eval_method"
2304   case 46:       // 1 string to match.
2305     if (memcmp(Name.data()+0, "objc_protocol_requires_explicit_implementation", 46) != 0)
2306       break;
2307     return AttributeCommonInfo::AT_ObjCExplicitProtocolImpl;     // "objc_protocol_requires_explicit_implementation"
2308   }
2309   } else if (AttributeCommonInfo::AS_Declspec == Syntax) {
2310   switch (Name.size()) {
2311   default: break;
2312   case 4:        // 1 string to match.
2313     if (memcmp(Name.data()+0, "uuid", 4) != 0)
2314       break;
2315     return AttributeCommonInfo::AT_Uuid;         // "uuid"
2316   case 5:        // 3 strings to match.
2317     switch (Name[0]) {
2318     default: break;
2319     case 'a':    // 1 string to match.
2320       if (memcmp(Name.data()+1, "lign", 4) != 0)
2321         break;
2322       return AttributeCommonInfo::AT_Aligned;    // "align"
2323     case 'g':    // 1 string to match.
2324       if (memcmp(Name.data()+1, "uard", 4) != 0)
2325         break;
2326       return AttributeCommonInfo::AT_CFGuard;    // "guard"
2327     case 'n':    // 1 string to match.
2328       if (memcmp(Name.data()+1, "aked", 4) != 0)
2329         break;
2330       return AttributeCommonInfo::AT_Naked;      // "naked"
2331     }
2332     break;
2333   case 6:        // 1 string to match.
2334     if (memcmp(Name.data()+0, "thread", 6) != 0)
2335       break;
2336     return AttributeCommonInfo::AT_Thread;       // "thread"
2337   case 7:        // 2 strings to match.
2338     if (memcmp(Name.data()+0, "no", 2) != 0)
2339       break;
2340     switch (Name[2]) {
2341     default: break;
2342     case 'a':    // 1 string to match.
2343       if (memcmp(Name.data()+3, "lias", 4) != 0)
2344         break;
2345       return AttributeCommonInfo::AT_NoAlias;    // "noalias"
2346     case 't':    // 1 string to match.
2347       if (memcmp(Name.data()+3, "hrow", 4) != 0)
2348         break;
2349       return AttributeCommonInfo::AT_NoThrow;    // "nothrow"
2350     }
2351     break;
2352   case 8:        // 8 strings to match.
2353     switch (Name[0]) {
2354     default: break;
2355     case '_':    // 1 string to match.
2356       if (memcmp(Name.data()+1, "_host__", 7) != 0)
2357         break;
2358       return AttributeCommonInfo::AT_CUDAHost;   // "__host__"
2359     case 'a':    // 1 string to match.
2360       if (memcmp(Name.data()+1, "llocate", 7) != 0)
2361         break;
2362       return AttributeCommonInfo::AT_Section;    // "allocate"
2363     case 'c':    // 1 string to match.
2364       if (memcmp(Name.data()+1, "ode_seg", 7) != 0)
2365         break;
2366       return AttributeCommonInfo::AT_CodeSeg;    // "code_seg"
2367     case 'n':    // 3 strings to match.
2368       if (Name[1] != 'o')
2369         break;
2370       switch (Name[2]) {
2371       default: break;
2372       case 'i':  // 1 string to match.
2373         if (memcmp(Name.data()+3, "nline", 5) != 0)
2374           break;
2375         return AttributeCommonInfo::AT_NoInline;         // "noinline"
2376       case 'r':  // 1 string to match.
2377         if (memcmp(Name.data()+3, "eturn", 5) != 0)
2378           break;
2379         return AttributeCommonInfo::AT_NoReturn;         // "noreturn"
2380       case 'v':  // 1 string to match.
2381         if (memcmp(Name.data()+3, "table", 5) != 0)
2382           break;
2383         return AttributeCommonInfo::AT_MSNoVTable;       // "novtable"
2384       }
2385       break;
2386     case 'p':    // 1 string to match.
2387       if (memcmp(Name.data()+1, "roperty", 7) != 0)
2388         break;
2389       return AttributeCommonInfo::IgnoredAttribute;      // "property"
2390     case 'r':    // 1 string to match.
2391       if (memcmp(Name.data()+1, "estrict", 7) != 0)
2392         break;
2393       return AttributeCommonInfo::AT_Restrict;   // "restrict"
2394     }
2395     break;
2396   case 9:        // 4 strings to match.
2397     switch (Name[0]) {
2398     default: break;
2399     case 'a':    // 1 string to match.
2400       if (memcmp(Name.data()+1, "llocator", 8) != 0)
2401         break;
2402       return AttributeCommonInfo::AT_MSAllocator;        // "allocator"
2403     case 'd':    // 2 strings to match.
2404       if (memcmp(Name.data()+1, "ll", 2) != 0)
2405         break;
2406       switch (Name[3]) {
2407       default: break;
2408       case 'e':  // 1 string to match.
2409         if (memcmp(Name.data()+4, "xport", 5) != 0)
2410           break;
2411         return AttributeCommonInfo::AT_DLLExport;        // "dllexport"
2412       case 'i':  // 1 string to match.
2413         if (memcmp(Name.data()+4, "mport", 5) != 0)
2414           break;
2415         return AttributeCommonInfo::AT_DLLImport;        // "dllimport"
2416       }
2417       break;
2418     case 's':    // 1 string to match.
2419       if (memcmp(Name.data()+1, "electany", 8) != 0)
2420         break;
2421       return AttributeCommonInfo::AT_SelectAny;  // "selectany"
2422     }
2423     break;
2424   case 10:       // 4 strings to match.
2425     switch (Name[0]) {
2426     default: break;
2427     case '_':    // 3 strings to match.
2428       if (Name[1] != '_')
2429         break;
2430       switch (Name[2]) {
2431       default: break;
2432       case 'd':  // 1 string to match.
2433         if (memcmp(Name.data()+3, "evice__", 7) != 0)
2434           break;
2435         return AttributeCommonInfo::AT_CUDADevice;       // "__device__"
2436       case 'g':  // 1 string to match.
2437         if (memcmp(Name.data()+3, "lobal__", 7) != 0)
2438           break;
2439         return AttributeCommonInfo::AT_CUDAGlobal;       // "__global__"
2440       case 's':  // 1 string to match.
2441         if (memcmp(Name.data()+3, "hared__", 7) != 0)
2442           break;
2443         return AttributeCommonInfo::AT_CUDAShared;       // "__shared__"
2444       }
2445       break;
2446     case 'd':    // 1 string to match.
2447       if (memcmp(Name.data()+1, "eprecated", 9) != 0)
2448         break;
2449       return AttributeCommonInfo::AT_Deprecated;         // "deprecated"
2450     }
2451     break;
2452   case 11:       // 4 strings to match.
2453     switch (Name[0]) {
2454     default: break;
2455     case '_':    // 1 string to match.
2456       if (memcmp(Name.data()+1, "_managed__", 10) != 0)
2457         break;
2458       return AttributeCommonInfo::AT_HIPManaged;         // "__managed__"
2459     case 'e':    // 1 string to match.
2460       if (memcmp(Name.data()+1, "mpty_bases", 10) != 0)
2461         break;
2462       return AttributeCommonInfo::AT_EmptyBases;         // "empty_bases"
2463     case 'n':    // 1 string to match.
2464       if (memcmp(Name.data()+1, "o_init_all", 10) != 0)
2465         break;
2466       return AttributeCommonInfo::AT_NoTrivialAutoVarInit;       // "no_init_all"
2467     case 's':    // 1 string to match.
2468       if (memcmp(Name.data()+1, "afebuffers", 10) != 0)
2469         break;
2470       return AttributeCommonInfo::AT_NoStackProtector;   // "safebuffers"
2471     }
2472     break;
2473   case 12:       // 4 strings to match.
2474     switch (Name[0]) {
2475     default: break;
2476     case '_':    // 1 string to match.
2477       if (memcmp(Name.data()+1, "_constant__", 11) != 0)
2478         break;
2479       return AttributeCommonInfo::AT_CUDAConstant;       // "__constant__"
2480     case 'c':    // 2 strings to match.
2481       if (memcmp(Name.data()+1, "pu_", 3) != 0)
2482         break;
2483       switch (Name[4]) {
2484       default: break;
2485       case 'd':  // 1 string to match.
2486         if (memcmp(Name.data()+5, "ispatch", 7) != 0)
2487           break;
2488         return AttributeCommonInfo::AT_CPUDispatch;      // "cpu_dispatch"
2489       case 's':  // 1 string to match.
2490         if (memcmp(Name.data()+5, "pecific", 7) != 0)
2491           break;
2492         return AttributeCommonInfo::AT_CPUSpecific;      // "cpu_specific"
2493       }
2494       break;
2495     case 'n':    // 1 string to match.
2496       if (memcmp(Name.data()+1, "oconvergent", 11) != 0)
2497         break;
2498       return AttributeCommonInfo::AT_NoConvergent;       // "noconvergent"
2499     }
2500     break;
2501   case 14:       // 1 string to match.
2502     if (memcmp(Name.data()+0, "layout_version", 14) != 0)
2503       break;
2504     return AttributeCommonInfo::AT_LayoutVersion;        // "layout_version"
2505   case 15:       // 1 string to match.
2506     if (memcmp(Name.data()+0, "strict_gs_check", 15) != 0)
2507       break;
2508     return AttributeCommonInfo::AT_StrictGuardStackCheck;        // "strict_gs_check"
2509   case 16:       // 1 string to match.
2510     if (memcmp(Name.data()+0, "hybrid_patchable", 16) != 0)
2511       break;
2512     return AttributeCommonInfo::AT_HybridPatchable;      // "hybrid_patchable"
2513   case 17:       // 2 strings to match.
2514     if (memcmp(Name.data()+0, "__", 2) != 0)
2515       break;
2516     switch (Name[2]) {
2517     default: break;
2518     case 'g':    // 1 string to match.
2519       if (memcmp(Name.data()+3, "rid_constant__", 14) != 0)
2520         break;
2521       return AttributeCommonInfo::AT_CUDAGridConstant;   // "__grid_constant__"
2522     case 'l':    // 1 string to match.
2523       if (memcmp(Name.data()+3, "aunch_bounds__", 14) != 0)
2524         break;
2525       return AttributeCommonInfo::AT_CUDALaunchBounds;   // "__launch_bounds__"
2526     }
2527     break;
2528   case 18:       // 2 strings to match.
2529     if (memcmp(Name.data()+0, "__", 2) != 0)
2530       break;
2531     switch (Name[2]) {
2532     default: break;
2533     case 'c':    // 1 string to match.
2534       if (memcmp(Name.data()+3, "udart_builtin__", 15) != 0)
2535         break;
2536       return AttributeCommonInfo::IgnoredAttribute;      // "__cudart_builtin__"
2537     case 'd':    // 1 string to match.
2538       if (memcmp(Name.data()+3, "evice_builtin__", 15) != 0)
2539         break;
2540       return AttributeCommonInfo::IgnoredAttribute;      // "__device_builtin__"
2541     }
2542     break;
2543   case 31:       // 2 strings to match.
2544     if (memcmp(Name.data()+0, "__device_builtin_", 17) != 0)
2545       break;
2546     switch (Name[17]) {
2547     default: break;
2548     case 's':    // 1 string to match.
2549       if (memcmp(Name.data()+18, "urface_type__", 13) != 0)
2550         break;
2551       return AttributeCommonInfo::AT_CUDADeviceBuiltinSurfaceType;       // "__device_builtin_surface_type__"
2552     case 't':    // 1 string to match.
2553       if (memcmp(Name.data()+18, "exture_type__", 13) != 0)
2554         break;
2555       return AttributeCommonInfo::AT_CUDADeviceBuiltinTextureType;       // "__device_builtin_texture_type__"
2556     }
2557     break;
2558   }
2559   } else if (AttributeCommonInfo::AS_Microsoft == Syntax) {
2560   switch (Name.size()) {
2561   default: break;
2562   case 4:        // 2 strings to match.
2563     switch (Name[0]) {
2564     default: break;
2565     case 'l':    // 1 string to match.
2566       if (memcmp(Name.data()+1, "oop", 3) != 0)
2567         break;
2568       return AttributeCommonInfo::AT_HLSLLoopHint;       // "loop"
2569     case 'u':    // 1 string to match.
2570       if (memcmp(Name.data()+1, "uid", 3) != 0)
2571         break;
2572       return AttributeCommonInfo::AT_Uuid;       // "uuid"
2573     }
2574     break;
2575   case 6:        // 3 strings to match.
2576     switch (Name[0]) {
2577     default: break;
2578     case 'b':    // 1 string to match.
2579       if (memcmp(Name.data()+1, "ranch", 5) != 0)
2580         break;
2581       return AttributeCommonInfo::AT_HLSLControlFlowHint;        // "branch"
2582     case 's':    // 1 string to match.
2583       if (memcmp(Name.data()+1, "hader", 5) != 0)
2584         break;
2585       return AttributeCommonInfo::AT_HLSLShader;         // "shader"
2586     case 'u':    // 1 string to match.
2587       if (memcmp(Name.data()+1, "nroll", 5) != 0)
2588         break;
2589       return AttributeCommonInfo::AT_HLSLLoopHint;       // "unroll"
2590     }
2591     break;
2592   case 7:        // 1 string to match.
2593     if (memcmp(Name.data()+0, "flatten", 7) != 0)
2594       break;
2595     return AttributeCommonInfo::AT_HLSLControlFlowHint;  // "flatten"
2596   case 8:        // 1 string to match.
2597     if (memcmp(Name.data()+0, "WaveSize", 8) != 0)
2598       break;
2599     return AttributeCommonInfo::AT_HLSLWaveSize;         // "WaveSize"
2600   case 10:       // 1 string to match.
2601     if (memcmp(Name.data()+0, "numthreads", 10) != 0)
2602       break;
2603     return AttributeCommonInfo::AT_HLSLNumThreads;       // "numthreads"
2604   }
2605   } else if (AttributeCommonInfo::AS_CXX11 == Syntax) {
2606   switch (Name.size()) {
2607   default: break;
2608   case 6:        // 2 strings to match.
2609     switch (Name[0]) {
2610     default: break;
2611     case 'a':    // 1 string to match.
2612       if (memcmp(Name.data()+1, "ssume", 5) != 0)
2613         break;
2614       return AttributeCommonInfo::AT_CXXAssume;  // "assume"
2615     case 'l':    // 1 string to match.
2616       if (memcmp(Name.data()+1, "ikely", 5) != 0)
2617         break;
2618       return AttributeCommonInfo::AT_Likely;     // "likely"
2619     }
2620     break;
2621   case 8:        // 5 strings to match.
2622     switch (Name[0]) {
2623     default: break;
2624     case 'g':    // 3 strings to match.
2625       if (memcmp(Name.data()+1, "nu::", 4) != 0)
2626         break;
2627       switch (Name[5]) {
2628       default: break;
2629       case 'f':  // 1 string to match.
2630         if (memcmp(Name.data()+6, "ar", 2) != 0)
2631           break;
2632         return AttributeCommonInfo::AT_MipsLongCall;     // "gnu::far"
2633       case 'h':  // 1 string to match.
2634         if (memcmp(Name.data()+6, "ot", 2) != 0)
2635           break;
2636         return AttributeCommonInfo::AT_Hot;      // "gnu::hot"
2637       case 'p':  // 1 string to match.
2638         if (memcmp(Name.data()+6, "cs", 2) != 0)
2639           break;
2640         return AttributeCommonInfo::AT_Pcs;      // "gnu::pcs"
2641       }
2642       break;
2643     case 'n':    // 1 string to match.
2644       if (memcmp(Name.data()+1, "oreturn", 7) != 0)
2645         break;
2646       return AttributeCommonInfo::AT_CXX11NoReturn;      // "noreturn"
2647     case 'u':    // 1 string to match.
2648       if (memcmp(Name.data()+1, "nlikely", 7) != 0)
2649         break;
2650       return AttributeCommonInfo::AT_Unlikely;   // "unlikely"
2651     }
2652     break;
2653   case 9:        // 8 strings to match.
2654     switch (Name[0]) {
2655     default: break;
2656     case 'g':    // 7 strings to match.
2657       if (memcmp(Name.data()+1, "nu::", 4) != 0)
2658         break;
2659       switch (Name[5]) {
2660       default: break;
2661       case 'c':  // 1 string to match.
2662         if (memcmp(Name.data()+6, "old", 3) != 0)
2663           break;
2664         return AttributeCommonInfo::AT_Cold;     // "gnu::cold"
2665       case 'l':  // 1 string to match.
2666         if (memcmp(Name.data()+6, "eaf", 3) != 0)
2667           break;
2668         return AttributeCommonInfo::AT_Leaf;     // "gnu::leaf"
2669       case 'm':  // 1 string to match.
2670         if (memcmp(Name.data()+6, "ode", 3) != 0)
2671           break;
2672         return AttributeCommonInfo::AT_Mode;     // "gnu::mode"
2673       case 'n':  // 1 string to match.
2674         if (memcmp(Name.data()+6, "ear", 3) != 0)
2675           break;
2676         return AttributeCommonInfo::AT_MipsShortCall;    // "gnu::near"
2677       case 'p':  // 1 string to match.
2678         if (memcmp(Name.data()+6, "ure", 3) != 0)
2679           break;
2680         return AttributeCommonInfo::AT_Pure;     // "gnu::pure"
2681       case 'u':  // 1 string to match.
2682         if (memcmp(Name.data()+6, "sed", 3) != 0)
2683           break;
2684         return AttributeCommonInfo::AT_Used;     // "gnu::used"
2685       case 'w':  // 1 string to match.
2686         if (memcmp(Name.data()+6, "eak", 3) != 0)
2687           break;
2688         return AttributeCommonInfo::AT_Weak;     // "gnu::weak"
2689       }
2690       break;
2691     case 'n':    // 1 string to match.
2692       if (memcmp(Name.data()+1, "odiscard", 8) != 0)
2693         break;
2694       return AttributeCommonInfo::AT_WarnUnusedResult;   // "nodiscard"
2695     }
2696     break;
2697   case 10:       // 9 strings to match.
2698     switch (Name[0]) {
2699     default: break;
2700     case 'd':    // 1 string to match.
2701       if (memcmp(Name.data()+1, "eprecated", 9) != 0)
2702         break;
2703       return AttributeCommonInfo::AT_Deprecated;         // "deprecated"
2704     case 'g':    // 8 strings to match.
2705       switch (Name[1]) {
2706       default: break;
2707       case 'n':  // 7 strings to match.
2708         if (memcmp(Name.data()+2, "u::", 3) != 0)
2709           break;
2710         switch (Name[5]) {
2711         default: break;
2712         case 'a':        // 1 string to match.
2713           if (memcmp(Name.data()+6, "lias", 4) != 0)
2714             break;
2715           return AttributeCommonInfo::AT_Alias;  // "gnu::alias"
2716         case 'c':        // 2 strings to match.
2717           switch (Name[6]) {
2718           default: break;
2719           case 'd':      // 1 string to match.
2720             if (memcmp(Name.data()+7, "ecl", 3) != 0)
2721               break;
2722             return AttributeCommonInfo::AT_CDecl;        // "gnu::cdecl"
2723           case 'o':      // 1 string to match.
2724             if (memcmp(Name.data()+7, "nst", 3) != 0)
2725               break;
2726             return AttributeCommonInfo::AT_Const;        // "gnu::const"
2727           }
2728           break;
2729         case 'e':        // 1 string to match.
2730           if (memcmp(Name.data()+6, "rror", 4) != 0)
2731             break;
2732           return AttributeCommonInfo::AT_Error;  // "gnu::error"
2733         case 'i':        // 1 string to match.
2734           if (memcmp(Name.data()+6, "func", 4) != 0)
2735             break;
2736           return AttributeCommonInfo::AT_IFunc;  // "gnu::ifunc"
2737         case 'm':        // 1 string to match.
2738           if (memcmp(Name.data()+6, "odel", 4) != 0)
2739             break;
2740           return AttributeCommonInfo::AT_CodeModel;      // "gnu::model"
2741         case 'n':        // 1 string to match.
2742           if (memcmp(Name.data()+6, "aked", 4) != 0)
2743             break;
2744           return AttributeCommonInfo::AT_Naked;  // "gnu::naked"
2745         }
2746         break;
2747       case 's':  // 1 string to match.
2748         if (memcmp(Name.data()+2, "l::Owner", 8) != 0)
2749           break;
2750         return AttributeCommonInfo::AT_Owner;    // "gsl::Owner"
2751       }
2752       break;
2753     }
2754     break;
2755   case 11:       // 12 strings to match.
2756     switch (Name[0]) {
2757     default: break;
2758     case 'f':    // 1 string to match.
2759       if (memcmp(Name.data()+1, "allthrough", 10) != 0)
2760         break;
2761       return AttributeCommonInfo::AT_FallThrough;        // "fallthrough"
2762     case 'g':    // 10 strings to match.
2763       if (memcmp(Name.data()+1, "nu::", 4) != 0)
2764         break;
2765       switch (Name[5]) {
2766       default: break;
2767       case 'c':  // 1 string to match.
2768         if (memcmp(Name.data()+6, "ommon", 5) != 0)
2769           break;
2770         return AttributeCommonInfo::AT_Common;   // "gnu::common"
2771       case 'f':  // 1 string to match.
2772         if (memcmp(Name.data()+6, "ormat", 5) != 0)
2773           break;
2774         return AttributeCommonInfo::AT_Format;   // "gnu::format"
2775       case 'm':  // 3 strings to match.
2776         switch (Name[6]) {
2777         default: break;
2778         case 'a':        // 1 string to match.
2779           if (memcmp(Name.data()+7, "lloc", 4) != 0)
2780             break;
2781           return AttributeCommonInfo::AT_Restrict;       // "gnu::malloc"
2782         case 'i':        // 1 string to match.
2783           if (memcmp(Name.data()+7, "ps16", 4) != 0)
2784             break;
2785           return AttributeCommonInfo::AT_Mips16;         // "gnu::mips16"
2786         case 's':        // 1 string to match.
2787           if (memcmp(Name.data()+7, "_abi", 4) != 0)
2788             break;
2789           return AttributeCommonInfo::AT_MSABI;  // "gnu::ms_abi"
2790         }
2791         break;
2792       case 'p':  // 1 string to match.
2793         if (memcmp(Name.data()+6, "acked", 5) != 0)
2794           break;
2795         return AttributeCommonInfo::AT_Packed;   // "gnu::packed"
2796       case 'r':  // 1 string to match.
2797         if (memcmp(Name.data()+6, "etain", 5) != 0)
2798           break;
2799         return AttributeCommonInfo::AT_Retain;   // "gnu::retain"
2800       case 's':  // 1 string to match.
2801         if (memcmp(Name.data()+6, "ignal", 5) != 0)
2802           break;
2803         return AttributeCommonInfo::AT_AVRSignal;        // "gnu::signal"
2804       case 't':  // 1 string to match.
2805         if (memcmp(Name.data()+6, "arget", 5) != 0)
2806           break;
2807         return AttributeCommonInfo::AT_Target;   // "gnu::target"
2808       case 'u':  // 1 string to match.
2809         if (memcmp(Name.data()+6, "nused", 5) != 0)
2810           break;
2811         return AttributeCommonInfo::AT_Unused;   // "gnu::unused"
2812       }
2813       break;
2814     case 'o':    // 1 string to match.
2815       if (memcmp(Name.data()+1, "mp::assume", 10) != 0)
2816         break;
2817       return AttributeCommonInfo::AT_OMPAssume;  // "omp::assume"
2818     }
2819     break;
2820   case 12:       // 18 strings to match.
2821     switch (Name[0]) {
2822     default: break;
2823     case 'c':    // 1 string to match.
2824       if (memcmp(Name.data()+1, "lang::guard", 11) != 0)
2825         break;
2826       return AttributeCommonInfo::AT_CFGuard;    // "clang::guard"
2827     case 'g':    // 15 strings to match.
2828       switch (Name[1]) {
2829       default: break;
2830       case 'n':  // 14 strings to match.
2831         if (memcmp(Name.data()+2, "u::", 3) != 0)
2832           break;
2833         switch (Name[5]) {
2834         default: break;
2835         case '_':        // 1 string to match.
2836           if (memcmp(Name.data()+6, "_const", 6) != 0)
2837             break;
2838           return AttributeCommonInfo::AT_Const;  // "gnu::__const"
2839         case 'a':        // 2 strings to match.
2840           switch (Name[6]) {
2841           default: break;
2842           case 'b':      // 1 string to match.
2843             if (memcmp(Name.data()+7, "i_tag", 5) != 0)
2844               break;
2845             return AttributeCommonInfo::AT_AbiTag;       // "gnu::abi_tag"
2846           case 'l':      // 1 string to match.
2847             if (memcmp(Name.data()+7, "igned", 5) != 0)
2848               break;
2849             return AttributeCommonInfo::AT_Aligned;      // "gnu::aligned"
2850           }
2851           break;
2852         case 'c':        // 1 string to match.
2853           if (memcmp(Name.data()+6, "leanup", 6) != 0)
2854             break;
2855           return AttributeCommonInfo::AT_Cleanup;        // "gnu::cleanup"
2856         case 'f':        // 1 string to match.
2857           if (memcmp(Name.data()+6, "latten", 6) != 0)
2858             break;
2859           return AttributeCommonInfo::AT_Flatten;        // "gnu::flatten"
2860         case 'n':        // 3 strings to match.
2861           if (Name[6] != 'o')
2862             break;
2863           switch (Name[7]) {
2864           default: break;
2865           case 'd':      // 1 string to match.
2866             if (memcmp(Name.data()+8, "ebug", 4) != 0)
2867               break;
2868             return AttributeCommonInfo::AT_NoDebug;      // "gnu::nodebug"
2869           case 'n':      // 1 string to match.
2870             if (memcmp(Name.data()+8, "null", 4) != 0)
2871               break;
2872             return AttributeCommonInfo::AT_NonNull;      // "gnu::nonnull"
2873           case 't':      // 1 string to match.
2874             if (memcmp(Name.data()+8, "hrow", 4) != 0)
2875               break;
2876             return AttributeCommonInfo::AT_NoThrow;      // "gnu::nothrow"
2877           }
2878           break;
2879         case 'r':        // 2 strings to match.
2880           if (memcmp(Name.data()+6, "eg", 2) != 0)
2881             break;
2882           switch (Name[8]) {
2883           default: break;
2884           case 'c':      // 1 string to match.
2885             if (memcmp(Name.data()+9, "all", 3) != 0)
2886               break;
2887             return AttributeCommonInfo::AT_RegCall;      // "gnu::regcall"
2888           case 'p':      // 1 string to match.
2889             if (memcmp(Name.data()+9, "arm", 3) != 0)
2890               break;
2891             return AttributeCommonInfo::AT_Regparm;      // "gnu::regparm"
2892           }
2893           break;
2894         case 's':        // 2 strings to match.
2895           switch (Name[6]) {
2896           default: break;
2897           case 'e':      // 1 string to match.
2898             if (memcmp(Name.data()+7, "ction", 5) != 0)
2899               break;
2900             return AttributeCommonInfo::AT_Section;      // "gnu::section"
2901           case 't':      // 1 string to match.
2902             if (memcmp(Name.data()+7, "dcall", 5) != 0)
2903               break;
2904             return AttributeCommonInfo::AT_StdCall;      // "gnu::stdcall"
2905           }
2906           break;
2907         case 'w':        // 2 strings to match.
2908           switch (Name[6]) {
2909           default: break;
2910           case 'a':      // 1 string to match.
2911             if (memcmp(Name.data()+7, "rning", 5) != 0)
2912               break;
2913             return AttributeCommonInfo::AT_Error;        // "gnu::warning"
2914           case 'e':      // 1 string to match.
2915             if (memcmp(Name.data()+7, "akref", 5) != 0)
2916               break;
2917             return AttributeCommonInfo::AT_WeakRef;      // "gnu::weakref"
2918           }
2919           break;
2920         }
2921         break;
2922       case 's':  // 1 string to match.
2923         if (memcmp(Name.data()+2, "l::Pointer", 10) != 0)
2924           break;
2925         return AttributeCommonInfo::AT_Pointer;  // "gsl::Pointer"
2926       }
2927       break;
2928     case 'h':    // 1 string to match.
2929       if (memcmp(Name.data()+1, "lsl::is_rov", 11) != 0)
2930         break;
2931       return AttributeCommonInfo::AT_HLSLROV;    // "hlsl::is_rov"
2932     case 'm':    // 1 string to match.
2933       if (memcmp(Name.data()+1, "aybe_unused", 11) != 0)
2934         break;
2935       return AttributeCommonInfo::AT_Unused;     // "maybe_unused"
2936     }
2937     break;
2938   case 13:       // 12 strings to match.
2939     switch (Name[0]) {
2940     default: break;
2941     case 'c':    // 3 strings to match.
2942       if (memcmp(Name.data()+1, "lang::", 6) != 0)
2943         break;
2944       switch (Name[7]) {
2945       default: break;
2946       case 'a':  // 1 string to match.
2947         if (memcmp(Name.data()+8, "ssume", 5) != 0)
2948           break;
2949         return AttributeCommonInfo::AT_CXXAssume;        // "clang::assume"
2950       case 'b':  // 1 string to match.
2951         if (memcmp(Name.data()+8, "locks", 5) != 0)
2952           break;
2953         return AttributeCommonInfo::AT_Blocks;   // "clang::blocks"
2954       case 'p':  // 1 string to match.
2955         if (memcmp(Name.data()+8, "ascal", 5) != 0)
2956           break;
2957         return AttributeCommonInfo::AT_Pascal;   // "clang::pascal"
2958       }
2959       break;
2960     case 'g':    // 9 strings to match.
2961       switch (Name[1]) {
2962       default: break;
2963       case 'n':  // 8 strings to match.
2964         if (memcmp(Name.data()+2, "u::", 3) != 0)
2965           break;
2966         switch (Name[5]) {
2967         default: break;
2968         case 'f':        // 1 string to match.
2969           if (memcmp(Name.data()+6, "astcall", 7) != 0)
2970             break;
2971           return AttributeCommonInfo::AT_FastCall;       // "gnu::fastcall"
2972         case 'n':        // 4 strings to match.
2973           if (Name[6] != 'o')
2974             break;
2975           switch (Name[7]) {
2976           default: break;
2977           case 'c':      // 1 string to match.
2978             if (memcmp(Name.data()+8, "ommon", 5) != 0)
2979               break;
2980             return AttributeCommonInfo::AT_NoCommon;     // "gnu::nocommon"
2981           case 'i':      // 1 string to match.
2982             if (memcmp(Name.data()+8, "nline", 5) != 0)
2983               break;
2984             return AttributeCommonInfo::AT_NoInline;     // "gnu::noinline"
2985           case 'm':      // 1 string to match.
2986             if (memcmp(Name.data()+8, "ips16", 5) != 0)
2987               break;
2988             return AttributeCommonInfo::AT_NoMips16;     // "gnu::nomips16"
2989           case 'r':      // 1 string to match.
2990             if (memcmp(Name.data()+8, "eturn", 5) != 0)
2991               break;
2992             return AttributeCommonInfo::AT_NoReturn;     // "gnu::noreturn"
2993           }
2994           break;
2995         case 's':        // 2 strings to match.
2996           switch (Name[6]) {
2997           default: break;
2998           case 'e':      // 1 string to match.
2999             if (memcmp(Name.data()+7, "ntinel", 6) != 0)
3000               break;
3001             return AttributeCommonInfo::AT_Sentinel;     // "gnu::sentinel"
3002           case 'y':      // 1 string to match.
3003             if (memcmp(Name.data()+7, "sv_abi", 6) != 0)
3004               break;
3005             return AttributeCommonInfo::AT_SysVABI;      // "gnu::sysv_abi"
3006           }
3007           break;
3008         case 't':        // 1 string to match.
3009           if (memcmp(Name.data()+6, "hiscall", 7) != 0)
3010             break;
3011           return AttributeCommonInfo::AT_ThisCall;       // "gnu::thiscall"
3012         }
3013         break;
3014       case 's':  // 1 string to match.
3015         if (memcmp(Name.data()+2, "l::suppress", 11) != 0)
3016           break;
3017         return AttributeCommonInfo::AT_Suppress;         // "gsl::suppress"
3018       }
3019       break;
3020     }
3021     break;
3022   case 14:       // 15 strings to match.
3023     switch (Name[0]) {
3024     default: break;
3025     case 'c':    // 5 strings to match.
3026       if (memcmp(Name.data()+1, "lang::", 6) != 0)
3027         break;
3028       switch (Name[7]) {
3029       default: break;
3030       case 'm':  // 1 string to match.
3031         if (memcmp(Name.data()+8, "insize", 6) != 0)
3032           break;
3033         return AttributeCommonInfo::AT_MinSize;  // "clang::minsize"
3034       case 'n':  // 2 strings to match.
3035         if (Name[8] != 'o')
3036           break;
3037         switch (Name[9]) {
3038         default: break;
3039         case 'd':        // 1 string to match.
3040           if (memcmp(Name.data()+10, "eref", 4) != 0)
3041             break;
3042           return AttributeCommonInfo::AT_NoDeref;        // "clang::noderef"
3043         case 'm':        // 1 string to match.
3044           if (memcmp(Name.data()+10, "erge", 4) != 0)
3045             break;
3046           return AttributeCommonInfo::AT_NoMerge;        // "clang::nomerge"
3047         }
3048         break;
3049       case 'o':  // 2 strings to match.
3050         switch (Name[8]) {
3051         default: break;
3052         case 'b':        // 1 string to match.
3053           if (memcmp(Name.data()+9, "jc_gc", 5) != 0)
3054             break;
3055           return AttributeCommonInfo::AT_ObjCGC;         // "clang::objc_gc"
3056         case 'p':        // 1 string to match.
3057           if (memcmp(Name.data()+9, "tnone", 5) != 0)
3058             break;
3059           return AttributeCommonInfo::AT_OptimizeNone;   // "clang::optnone"
3060         }
3061         break;
3062       }
3063       break;
3064     case 'g':    // 9 strings to match.
3065       if (memcmp(Name.data()+1, "nu::", 4) != 0)
3066         break;
3067       switch (Name[5]) {
3068       default: break;
3069       case 'd':  // 2 strings to match.
3070         if (memcmp(Name.data()+6, "ll", 2) != 0)
3071           break;
3072         switch (Name[8]) {
3073         default: break;
3074         case 'e':        // 1 string to match.
3075           if (memcmp(Name.data()+9, "xport", 5) != 0)
3076             break;
3077           return AttributeCommonInfo::AT_DLLExport;      // "gnu::dllexport"
3078         case 'i':        // 1 string to match.
3079           if (memcmp(Name.data()+9, "mport", 5) != 0)
3080             break;
3081           return AttributeCommonInfo::AT_DLLImport;      // "gnu::dllimport"
3082         }
3083         break;
3084       case 'i':  // 1 string to match.
3085         if (memcmp(Name.data()+6, "nterrupt", 8) != 0)
3086           break;
3087         return AttributeCommonInfo::AT_Interrupt;        // "gnu::interrupt"
3088       case 'l':  // 1 string to match.
3089         if (memcmp(Name.data()+6, "ong_call", 8) != 0)
3090           break;
3091         return AttributeCommonInfo::AT_MipsLongCall;     // "gnu::long_call"
3092       case 'm':  // 3 strings to match.
3093         switch (Name[6]) {
3094         default: break;
3095         case 'a':        // 1 string to match.
3096           if (memcmp(Name.data()+7, "y_alias", 7) != 0)
3097             break;
3098           return AttributeCommonInfo::AT_MayAlias;       // "gnu::may_alias"
3099         case 'i':        // 1 string to match.
3100           if (memcmp(Name.data()+7, "cromips", 7) != 0)
3101             break;
3102           return AttributeCommonInfo::AT_MicroMips;      // "gnu::micromips"
3103         case 's':        // 1 string to match.
3104           if (memcmp(Name.data()+7, "_struct", 7) != 0)
3105             break;
3106           return AttributeCommonInfo::AT_MSStruct;       // "gnu::ms_struct"
3107         }
3108         break;
3109       case 's':  // 1 string to match.
3110         if (memcmp(Name.data()+6, "electany", 8) != 0)
3111           break;
3112         return AttributeCommonInfo::AT_SelectAny;        // "gnu::selectany"
3113       case 't':  // 1 string to match.
3114         if (memcmp(Name.data()+6, "ls_model", 8) != 0)
3115           break;
3116         return AttributeCommonInfo::AT_TLSModel;         // "gnu::tls_model"
3117       }
3118       break;
3119     case 'm':    // 1 string to match.
3120       if (memcmp(Name.data()+1, "svc::noinline", 13) != 0)
3121         break;
3122       return AttributeCommonInfo::AT_NoInline;   // "msvc::noinline"
3123     }
3124     break;
3125   case 15:       // 22 strings to match.
3126     switch (Name[0]) {
3127     default: break;
3128     case 'c':    // 12 strings to match.
3129       if (memcmp(Name.data()+1, "lang::", 6) != 0)
3130         break;
3131       switch (Name[7]) {
3132       default: break;
3133       case 'N':  // 1 string to match.
3134         if (memcmp(Name.data()+8, "SObject", 7) != 0)
3135           break;
3136         return AttributeCommonInfo::AT_ObjCNSObject;     // "clang::NSObject"
3137       case 'a':  // 1 string to match.
3138         if (memcmp(Name.data()+8, "nnotate", 7) != 0)
3139           break;
3140         return AttributeCommonInfo::AT_Annotate;         // "clang::annotate"
3141       case 'b':  // 1 string to match.
3142         if (memcmp(Name.data()+8, "locking", 7) != 0)
3143           break;
3144         return AttributeCommonInfo::AT_Blocking;         // "clang::blocking"
3145       case 'c':  // 1 string to match.
3146         if (memcmp(Name.data()+8, "allback", 7) != 0)
3147           break;
3148         return AttributeCommonInfo::AT_Callback;         // "clang::callback"
3149       case 'i':  // 2 strings to match.
3150         if (Name[8] != 'b')
3151           break;
3152         switch (Name[9]) {
3153         default: break;
3154         case 'a':        // 1 string to match.
3155           if (memcmp(Name.data()+10, "ction", 5) != 0)
3156             break;
3157           return AttributeCommonInfo::AT_IBAction;       // "clang::ibaction"
3158         case 'o':        // 1 string to match.
3159           if (memcmp(Name.data()+10, "utlet", 5) != 0)
3160             break;
3161           return AttributeCommonInfo::AT_IBOutlet;       // "clang::iboutlet"
3162         }
3163         break;
3164       case 'm':  // 2 strings to match.
3165         switch (Name[8]) {
3166         default: break;
3167         case '6':        // 1 string to match.
3168           if (memcmp(Name.data()+9, "8k_rtd", 6) != 0)
3169             break;
3170           return AttributeCommonInfo::AT_M68kRTD;        // "clang::m68k_rtd"
3171         case 'u':        // 1 string to match.
3172           if (memcmp(Name.data()+9, "sttail", 6) != 0)
3173             break;
3174           return AttributeCommonInfo::AT_MustTail;       // "clang::musttail"
3175         }
3176         break;
3177       case 'n':  // 2 strings to match.
3178         if (Name[8] != 'o')
3179           break;
3180         switch (Name[9]) {
3181         default: break;
3182         case 'e':        // 1 string to match.
3183           if (memcmp(Name.data()+10, "scape", 5) != 0)
3184             break;
3185           return AttributeCommonInfo::AT_NoEscape;       // "clang::noescape"
3186         case 'i':        // 1 string to match.
3187           if (memcmp(Name.data()+10, "nline", 5) != 0)
3188             break;
3189           return AttributeCommonInfo::AT_NoInline;       // "clang::noinline"
3190         }
3191         break;
3192       case 's':  // 2 strings to match.
3193         switch (Name[8]) {
3194         default: break;
3195         case 'i':        // 1 string to match.
3196           if (memcmp(Name.data()+9, "zed_by", 6) != 0)
3197             break;
3198           return AttributeCommonInfo::AT_SizedBy;        // "clang::sized_by"
3199         case 'u':        // 1 string to match.
3200           if (memcmp(Name.data()+9, "ppress", 6) != 0)
3201             break;
3202           return AttributeCommonInfo::AT_Suppress;       // "clang::suppress"
3203         }
3204         break;
3205       }
3206       break;
3207     case 'g':    // 9 strings to match.
3208       if (memcmp(Name.data()+1, "nu::", 4) != 0)
3209         break;
3210       switch (Name[5]) {
3211       default: break;
3212       case 'a':  // 2 strings to match.
3213         switch (Name[6]) {
3214         default: break;
3215         case 'l':        // 1 string to match.
3216           if (memcmp(Name.data()+7, "loc_size", 8) != 0)
3217             break;
3218           return AttributeCommonInfo::AT_AllocSize;      // "gnu::alloc_size"
3219         case 'r':        // 1 string to match.
3220           if (memcmp(Name.data()+7, "tificial", 8) != 0)
3221             break;
3222           return AttributeCommonInfo::AT_Artificial;     // "gnu::artificial"
3223         }
3224         break;
3225       case 'd':  // 2 strings to match.
3226         if (Name[6] != 'e')
3227           break;
3228         switch (Name[7]) {
3229         default: break;
3230         case 'p':        // 1 string to match.
3231           if (memcmp(Name.data()+8, "recated", 7) != 0)
3232             break;
3233           return AttributeCommonInfo::AT_Deprecated;     // "gnu::deprecated"
3234         case 's':        // 1 string to match.
3235           if (memcmp(Name.data()+8, "tructor", 7) != 0)
3236             break;
3237           return AttributeCommonInfo::AT_Destructor;     // "gnu::destructor"
3238         }
3239         break;
3240       case 'f':  // 1 string to match.
3241         if (memcmp(Name.data()+6, "ormat_arg", 9) != 0)
3242           break;
3243         return AttributeCommonInfo::AT_FormatArg;        // "gnu::format_arg"
3244       case 'g':  // 1 string to match.
3245         if (memcmp(Name.data()+6, "nu_inline", 9) != 0)
3246           break;
3247         return AttributeCommonInfo::AT_GNUInline;        // "gnu::gnu_inline"
3248       case 'n':  // 1 string to match.
3249         if (memcmp(Name.data()+6, "ocf_check", 9) != 0)
3250           break;
3251         return AttributeCommonInfo::AT_AnyX86NoCfCheck;  // "gnu::nocf_check"
3252       case 's':  // 1 string to match.
3253         if (memcmp(Name.data()+6, "hort_call", 9) != 0)
3254           break;
3255         return AttributeCommonInfo::AT_MipsShortCall;    // "gnu::short_call"
3256       case 'v':  // 1 string to match.
3257         if (memcmp(Name.data()+6, "isibility", 9) != 0)
3258           break;
3259         return AttributeCommonInfo::AT_Visibility;       // "gnu::visibility"
3260       }
3261       break;
3262     case 'm':    // 1 string to match.
3263       if (memcmp(Name.data()+1, "svc::constexpr", 14) != 0)
3264         break;
3265       return AttributeCommonInfo::AT_MSConstexpr;        // "msvc::constexpr"
3266     }
3267     break;
3268   case 16:       // 12 strings to match.
3269     switch (Name[0]) {
3270     default: break;
3271     case 'c':    // 4 strings to match.
3272       if (memcmp(Name.data()+1, "lang::", 6) != 0)
3273         break;
3274       switch (Name[7]) {
3275       default: break;
3276       case 'f':  // 1 string to match.
3277         if (memcmp(Name.data()+8, "lag_enum", 8) != 0)
3278           break;
3279         return AttributeCommonInfo::AT_FlagEnum;         // "clang::flag_enum"
3280       case 'n':  // 1 string to match.
3281         if (memcmp(Name.data()+8, "ouwtable", 8) != 0)
3282           break;
3283         return AttributeCommonInfo::AT_NoUwtable;        // "clang::nouwtable"
3284       case 's':  // 1 string to match.
3285         if (memcmp(Name.data()+8, "wiftcall", 8) != 0)
3286           break;
3287         return AttributeCommonInfo::AT_SwiftCall;        // "clang::swiftcall"
3288       case 'v':  // 1 string to match.
3289         if (memcmp(Name.data()+8, "ecreturn", 8) != 0)
3290           break;
3291         return AttributeCommonInfo::AT_VecReturn;        // "clang::vecreturn"
3292       }
3293       break;
3294     case 'g':    // 6 strings to match.
3295       if (memcmp(Name.data()+1, "nu::", 4) != 0)
3296         break;
3297       switch (Name[5]) {
3298       default: break;
3299       case 'a':  // 1 string to match.
3300         if (memcmp(Name.data()+6, "lloc_align", 10) != 0)
3301           break;
3302         return AttributeCommonInfo::AT_AllocAlign;       // "gnu::alloc_align"
3303       case 'c':  // 1 string to match.
3304         if (memcmp(Name.data()+6, "onstructor", 10) != 0)
3305           break;
3306         return AttributeCommonInfo::AT_Constructor;      // "gnu::constructor"
3307       case 'f':  // 1 string to match.
3308         if (memcmp(Name.data()+6, "allthrough", 10) != 0)
3309           break;
3310         return AttributeCommonInfo::AT_FallThrough;      // "gnu::fallthrough"
3311       case 'n':  // 1 string to match.
3312         if (memcmp(Name.data()+6, "omicromips", 10) != 0)
3313           break;
3314         return AttributeCommonInfo::AT_NoMicroMips;      // "gnu::nomicromips"
3315       case 'v':  // 1 string to match.
3316         if (memcmp(Name.data()+6, "ector_size", 10) != 0)
3317           break;
3318         return AttributeCommonInfo::AT_VectorSize;       // "gnu::vector_size"
3319       case 'w':  // 1 string to match.
3320         if (memcmp(Name.data()+6, "arn_unused", 10) != 0)
3321           break;
3322         return AttributeCommonInfo::AT_WarnUnused;       // "gnu::warn_unused"
3323       }
3324       break;
3325     case 'h':    // 1 string to match.
3326       if (memcmp(Name.data()+1, "lsl::raw_buffer", 15) != 0)
3327         break;
3328       return AttributeCommonInfo::AT_HLSLRawBuffer;      // "hlsl::raw_buffer"
3329     case 'r':    // 1 string to match.
3330       if (memcmp(Name.data()+1, "iscv::vector_cc", 15) != 0)
3331         break;
3332       return AttributeCommonInfo::AT_RISCVVectorCC;      // "riscv::vector_cc"
3333     }
3334     break;
3335   case 17:       // 11 strings to match.
3336     switch (Name[0]) {
3337     default: break;
3338     case 'c':    // 10 strings to match.
3339       if (memcmp(Name.data()+1, "lang::", 6) != 0)
3340         break;
3341       switch (Name[7]) {
3342       default: break;
3343       case 'a':  // 1 string to match.
3344         if (memcmp(Name.data()+8, "llocating", 9) != 0)
3345           break;
3346         return AttributeCommonInfo::AT_Allocating;       // "clang::allocating"
3347       case 'c':  // 5 strings to match.
3348         switch (Name[8]) {
3349         default: break;
3350         case 'a':        // 1 string to match.
3351           if (memcmp(Name.data()+9, "pability", 8) != 0)
3352             break;
3353           return AttributeCommonInfo::AT_Capability;     // "clang::capability"
3354         case 'o':        // 4 strings to match.
3355           switch (Name[9]) {
3356           default: break;
3357           case 'd':      // 1 string to match.
3358             if (memcmp(Name.data()+10, "e_align", 7) != 0)
3359               break;
3360             return AttributeCommonInfo::AT_CodeAlign;    // "clang::code_align"
3361           case 'n':      // 2 strings to match.
3362             switch (Name[10]) {
3363             default: break;
3364             case 's':    // 1 string to match.
3365               if (memcmp(Name.data()+11, "umable", 6) != 0)
3366                 break;
3367               return AttributeCommonInfo::AT_Consumable;         // "clang::consumable"
3368             case 'v':    // 1 string to match.
3369               if (memcmp(Name.data()+11, "ergent", 6) != 0)
3370                 break;
3371               return AttributeCommonInfo::AT_Convergent;         // "clang::convergent"
3372             }
3373             break;
3374           case 'u':      // 1 string to match.
3375             if (memcmp(Name.data()+10, "nted_by", 7) != 0)
3376               break;
3377             return AttributeCommonInfo::AT_CountedBy;    // "clang::counted_by"
3378           }
3379           break;
3380         }
3381         break;
3382       case 'n':  // 2 strings to match.
3383         if (memcmp(Name.data()+8, "o_", 2) != 0)
3384           break;
3385         switch (Name[10]) {
3386         default: break;
3387         case 'b':        // 1 string to match.
3388           if (memcmp(Name.data()+11, "uiltin", 6) != 0)
3389             break;
3390           return AttributeCommonInfo::AT_NoBuiltin;      // "clang::no_builtin"
3391         case 'd':        // 1 string to match.
3392           if (memcmp(Name.data()+11, "estroy", 6) != 0)
3393             break;
3394           return AttributeCommonInfo::AT_NoDestroy;      // "clang::no_destroy"
3395         }
3396         break;
3397       case 'u':  // 1 string to match.
3398         if (memcmp(Name.data()+8, "se_handle", 9) != 0)
3399           break;
3400         return AttributeCommonInfo::AT_UseHandle;        // "clang::use_handle"
3401       case 'v':  // 1 string to match.
3402         if (memcmp(Name.data()+8, "ectorcall", 9) != 0)
3403           break;
3404         return AttributeCommonInfo::AT_VectorCall;       // "clang::vectorcall"
3405       }
3406       break;
3407     case 'n':    // 1 string to match.
3408       if (memcmp(Name.data()+1, "o_unique_address", 16) != 0)
3409         break;
3410       return AttributeCommonInfo::AT_NoUniqueAddress;    // "no_unique_address"
3411     }
3412     break;
3413   case 18:       // 26 strings to match.
3414     switch (Name[0]) {
3415     default: break;
3416     case 'c':    // 22 strings to match.
3417       switch (Name[1]) {
3418       default: break;
3419       case 'a':  // 1 string to match.
3420         if (memcmp(Name.data()+2, "rries_dependency", 16) != 0)
3421           break;
3422         return AttributeCommonInfo::AT_CarriesDependency;        // "carries_dependency"
3423       case 'l':  // 21 strings to match.
3424         if (memcmp(Name.data()+2, "ang::", 5) != 0)
3425           break;
3426         switch (Name[7]) {
3427         default: break;
3428         case 'c':        // 2 strings to match.
3429           switch (Name[8]) {
3430           default: break;
3431           case 'a':      // 1 string to match.
3432             if (memcmp(Name.data()+9, "lled_once", 9) != 0)
3433               break;
3434             return AttributeCommonInfo::AT_CalledOnce;   // "clang::called_once"
3435           case 'f':      // 1 string to match.
3436             if (memcmp(Name.data()+9, "_consumed", 9) != 0)
3437               break;
3438             return AttributeCommonInfo::AT_CFConsumed;   // "clang::cf_consumed"
3439           }
3440           break;
3441         case 'e':        // 2 strings to match.
3442           switch (Name[8]) {
3443           default: break;
3444           case 'n':      // 1 string to match.
3445             if (memcmp(Name.data()+9, "force_tcb", 9) != 0)
3446               break;
3447             return AttributeCommonInfo::AT_EnforceTCB;   // "clang::enforce_tcb"
3448           case 'x':      // 1 string to match.
3449             if (memcmp(Name.data()+9, "port_name", 9) != 0)
3450               break;
3451             return AttributeCommonInfo::AT_WebAssemblyExportName;        // "clang::export_name"
3452           }
3453           break;
3454         case 'f':        // 1 string to match.
3455           if (memcmp(Name.data()+8, "allthrough", 10) != 0)
3456             break;
3457           return AttributeCommonInfo::AT_FallThrough;    // "clang::fallthrough"
3458         case 'g':        // 1 string to match.
3459           if (memcmp(Name.data()+8, "uarded_var", 10) != 0)
3460             break;
3461           return AttributeCommonInfo::AT_GuardedVar;     // "clang::guarded_var"
3462         case 'i':        // 1 string to match.
3463           if (memcmp(Name.data()+8, "mport_name", 10) != 0)
3464             break;
3465           return AttributeCommonInfo::AT_WebAssemblyImportName;  // "clang::import_name"
3466         case 'm':        // 2 strings to match.
3467           if (Name[8] != 'a')
3468             break;
3469           switch (Name[9]) {
3470           default: break;
3471           case 't':      // 1 string to match.
3472             if (memcmp(Name.data()+10, "rix_type", 8) != 0)
3473               break;
3474             return AttributeCommonInfo::AT_MatrixType;   // "clang::matrix_type"
3475           case 'y':      // 1 string to match.
3476             if (memcmp(Name.data()+10, "be_undef", 8) != 0)
3477               break;
3478             return AttributeCommonInfo::AT_MaybeUndef;   // "clang::maybe_undef"
3479           }
3480           break;
3481         case 'n':        // 4 strings to match.
3482           switch (Name[8]) {
3483           default: break;
3484           case 'o':      // 3 strings to match.
3485             switch (Name[9]) {
3486             default: break;
3487             case '_':    // 1 string to match.
3488               if (memcmp(Name.data()+10, "sanitize", 8) != 0)
3489                 break;
3490               return AttributeCommonInfo::AT_NoSanitize;         // "clang::no_sanitize"
3491             case 'd':    // 1 string to match.
3492               if (memcmp(Name.data()+10, "uplicate", 8) != 0)
3493                 break;
3494               return AttributeCommonInfo::AT_NoDuplicate;        // "clang::noduplicate"
3495             case 'n':    // 1 string to match.
3496               if (memcmp(Name.data()+10, "blocking", 8) != 0)
3497                 break;
3498               return AttributeCommonInfo::AT_NonBlocking;        // "clang::nonblocking"
3499             }
3500             break;
3501           case 's':      // 1 string to match.
3502             if (memcmp(Name.data()+9, "_consumed", 9) != 0)
3503               break;
3504             return AttributeCommonInfo::AT_NSConsumed;   // "clang::ns_consumed"
3505           }
3506           break;
3507         case 'o':        // 3 strings to match.
3508           switch (Name[8]) {
3509           default: break;
3510           case 'b':      // 2 strings to match.
3511             if (memcmp(Name.data()+9, "jc_", 3) != 0)
3512               break;
3513             switch (Name[12]) {
3514             default: break;
3515             case 'b':    // 1 string to match.
3516               if (memcmp(Name.data()+13, "ridge", 5) != 0)
3517                 break;
3518               return AttributeCommonInfo::AT_ObjCBridge;         // "clang::objc_bridge"
3519             case 'd':    // 1 string to match.
3520               if (memcmp(Name.data()+13, "irect", 5) != 0)
3521                 break;
3522               return AttributeCommonInfo::AT_ObjCDirect;         // "clang::objc_direct"
3523             }
3524             break;
3525           case 's':      // 1 string to match.
3526             if (memcmp(Name.data()+9, "_consumed", 9) != 0)
3527               break;
3528             return AttributeCommonInfo::AT_OSConsumed;   // "clang::os_consumed"
3529           }
3530           break;
3531         case 's':        // 2 strings to match.
3532           switch (Name[8]) {
3533           default: break;
3534           case 'w':      // 1 string to match.
3535             if (memcmp(Name.data()+9, "ift_async", 9) != 0)
3536               break;
3537             return AttributeCommonInfo::AT_SwiftAsync;   // "clang::swift_async"
3538           case 'y':      // 1 string to match.
3539             if (memcmp(Name.data()+9, "cl_kernel", 9) != 0)
3540               break;
3541             return AttributeCommonInfo::AT_SYCLKernel;   // "clang::sycl_kernel"
3542           }
3543           break;
3544         case 't':        // 1 string to match.
3545           if (memcmp(Name.data()+8, "rivial_abi", 10) != 0)
3546             break;
3547           return AttributeCommonInfo::AT_TrivialABI;     // "clang::trivial_abi"
3548         case 'u':        // 1 string to match.
3549           if (memcmp(Name.data()+8, "navailable", 10) != 0)
3550             break;
3551           return AttributeCommonInfo::AT_Unavailable;    // "clang::unavailable"
3552         case 'w':        // 1 string to match.
3553           if (memcmp(Name.data()+8, "eak_import", 10) != 0)
3554             break;
3555           return AttributeCommonInfo::AT_WeakImport;     // "clang::weak_import"
3556         }
3557         break;
3558       }
3559       break;
3560     case 'g':    // 4 strings to match.
3561       if (memcmp(Name.data()+1, "nu::", 4) != 0)
3562         break;
3563       switch (Name[5]) {
3564       default: break;
3565       case 'a':  // 1 string to match.
3566         if (memcmp(Name.data()+6, "lways_inline", 12) != 0)
3567           break;
3568         return AttributeCommonInfo::AT_AlwaysInline;     // "gnu::always_inline"
3569       case 'i':  // 1 string to match.
3570         if (memcmp(Name.data()+6, "nit_priority", 12) != 0)
3571           break;
3572         return AttributeCommonInfo::AT_InitPriority;     // "gnu::init_priority"
3573       case 'r':  // 1 string to match.
3574         if (memcmp(Name.data()+6, "eturns_twice", 12) != 0)
3575           break;
3576         return AttributeCommonInfo::AT_ReturnsTwice;     // "gnu::returns_twice"
3577       case 't':  // 1 string to match.
3578         if (memcmp(Name.data()+6, "arget_clones", 12) != 0)
3579           break;
3580         return AttributeCommonInfo::AT_TargetClones;     // "gnu::target_clones"
3581       }
3582       break;
3583     }
3584     break;
3585   case 19:       // 16 strings to match.
3586     switch (Name[0]) {
3587     default: break;
3588     case 'c':    // 13 strings to match.
3589       if (memcmp(Name.data()+1, "lang::", 6) != 0)
3590         break;
3591       switch (Name[7]) {
3592       default: break;
3593       case 'a':  // 1 string to match.
3594         if (memcmp(Name.data()+8, "vailability", 11) != 0)
3595           break;
3596         return AttributeCommonInfo::AT_Availability;     // "clang::availability"
3597       case 'b':  // 3 strings to match.
3598         switch (Name[8]) {
3599         default: break;
3600         case 'p':        // 1 string to match.
3601           if (memcmp(Name.data()+9, "f_fastcall", 10) != 0)
3602             break;
3603           return AttributeCommonInfo::AT_BPFFastCall;    // "clang::bpf_fastcall"
3604         case 't':        // 2 strings to match.
3605           if (memcmp(Name.data()+9, "f_", 2) != 0)
3606             break;
3607           switch (Name[11]) {
3608           default: break;
3609           case 'd':      // 1 string to match.
3610             if (memcmp(Name.data()+12, "ecl_tag", 7) != 0)
3611               break;
3612             return AttributeCommonInfo::AT_BTFDeclTag;   // "clang::btf_decl_tag"
3613           case 't':      // 1 string to match.
3614             if (memcmp(Name.data()+12, "ype_tag", 7) != 0)
3615               break;
3616             return AttributeCommonInfo::AT_BTFTypeTag;   // "clang::btf_type_tag"
3617           }
3618           break;
3619         }
3620         break;
3621       case 'c':  // 3 strings to match.
3622         switch (Name[8]) {
3623         default: break;
3624         case 'o':        // 1 string to match.
3625           if (memcmp(Name.data()+9, "ro_wrapper", 10) != 0)
3626             break;
3627           return AttributeCommonInfo::AT_CoroWrapper;    // "clang::coro_wrapper"
3628         case 'p':        // 2 strings to match.
3629           if (memcmp(Name.data()+9, "u_", 2) != 0)
3630             break;
3631           switch (Name[11]) {
3632           default: break;
3633           case 'd':      // 1 string to match.
3634             if (memcmp(Name.data()+12, "ispatch", 7) != 0)
3635               break;
3636             return AttributeCommonInfo::AT_CPUDispatch;  // "clang::cpu_dispatch"
3637           case 's':      // 1 string to match.
3638             if (memcmp(Name.data()+12, "pecific", 7) != 0)
3639               break;
3640             return AttributeCommonInfo::AT_CPUSpecific;  // "clang::cpu_specific"
3641           }
3642           break;
3643         }
3644         break;
3645       case 'n':  // 2 strings to match.
3646         switch (Name[8]) {
3647         default: break;
3648         case 'o':        // 1 string to match.
3649           if (memcmp(Name.data()+9, "convergent", 10) != 0)
3650             break;
3651           return AttributeCommonInfo::AT_NoConvergent;   // "clang::noconvergent"
3652         case 'v':        // 1 string to match.
3653           if (memcmp(Name.data()+9, "ptx_kernel", 10) != 0)
3654             break;
3655           return AttributeCommonInfo::AT_NVPTXKernel;    // "clang::nvptx_kernel"
3656         }
3657         break;
3658       case 'o':  // 3 strings to match.
3659         switch (Name[8]) {
3660         default: break;
3661         case 'b':        // 1 string to match.
3662           if (memcmp(Name.data()+9, "jc_boxable", 10) != 0)
3663             break;
3664           return AttributeCommonInfo::AT_ObjCBoxable;    // "clang::objc_boxable"
3665         case 'p':        // 1 string to match.
3666           if (memcmp(Name.data()+9, "encl_local", 10) != 0)
3667             break;
3668           return AttributeCommonInfo::AT_OpenCLLocalAddressSpace;        // "clang::opencl_local"
3669         case 'v':        // 1 string to match.
3670           if (memcmp(Name.data()+9, "erloadable", 10) != 0)
3671             break;
3672           return AttributeCommonInfo::AT_Overloadable;   // "clang::overloadable"
3673         }
3674         break;
3675       case 'p':  // 1 string to match.
3676         if (memcmp(Name.data()+8, "reserve_all", 11) != 0)
3677           break;
3678         return AttributeCommonInfo::AT_PreserveAll;      // "clang::preserve_all"
3679       }
3680       break;
3681     case 'g':    // 3 strings to match.
3682       if (memcmp(Name.data()+1, "nu::", 4) != 0)
3683         break;
3684       switch (Name[5]) {
3685       default: break;
3686       case 'a':  // 1 string to match.
3687         if (memcmp(Name.data()+6, "ssume_aligned", 13) != 0)
3688           break;
3689         return AttributeCommonInfo::AT_AssumeAligned;    // "gnu::assume_aligned"
3690       case 'n':  // 1 string to match.
3691         if (memcmp(Name.data()+6, "o_split_stack", 13) != 0)
3692           break;
3693         return AttributeCommonInfo::AT_NoSplitStack;     // "gnu::no_split_stack"
3694       case 't':  // 1 string to match.
3695         if (memcmp(Name.data()+6, "arget_version", 13) != 0)
3696           break;
3697         return AttributeCommonInfo::AT_TargetVersion;    // "gnu::target_version"
3698       }
3699       break;
3700     }
3701     break;
3702   case 20:       // 21 strings to match.
3703     switch (Name[0]) {
3704     default: break;
3705     case 'c':    // 17 strings to match.
3706       if (memcmp(Name.data()+1, "lang::", 6) != 0)
3707         break;
3708       switch (Name[7]) {
3709       default: break;
3710       case 'a':  // 4 strings to match.
3711         switch (Name[8]) {
3712         default: break;
3713         case 'd':        // 1 string to match.
3714           if (memcmp(Name.data()+9, "dress_space", 11) != 0)
3715             break;
3716           return AttributeCommonInfo::AT_AddressSpace;   // "clang::address_space"
3717         case 'l':        // 1 string to match.
3718           if (memcmp(Name.data()+9, "ways_inline", 11) != 0)
3719             break;
3720           return AttributeCommonInfo::AT_AlwaysInline;   // "clang::always_inline"
3721         case 'm':        // 1 string to match.
3722           if (memcmp(Name.data()+9, "dgpu_kernel", 11) != 0)
3723             break;
3724           return AttributeCommonInfo::AT_AMDGPUKernelCall;       // "clang::amdgpu_kernel"
3725         case 'n':        // 1 string to match.
3726           if (memcmp(Name.data()+9, "notate_type", 11) != 0)
3727             break;
3728           return AttributeCommonInfo::AT_AnnotateType;   // "clang::annotate_type"
3729         }
3730         break;
3731       case 'b':  // 1 string to match.
3732         if (memcmp(Name.data()+8, "uiltin_alias", 12) != 0)
3733           break;
3734         return AttributeCommonInfo::AT_BuiltinAlias;     // "clang::builtin_alias"
3735       case 'c':  // 1 string to match.
3736         if (memcmp(Name.data()+8, "allable_when", 12) != 0)
3737           break;
3738         return AttributeCommonInfo::AT_CallableWhen;     // "clang::callable_when"
3739       case 'i':  // 1 string to match.
3740         if (memcmp(Name.data()+8, "mport_module", 12) != 0)
3741           break;
3742         return AttributeCommonInfo::AT_WebAssemblyImportModule;  // "clang::import_module"
3743       case 'l':  // 1 string to match.
3744         if (memcmp(Name.data()+8, "ifetimebound", 12) != 0)
3745           break;
3746         return AttributeCommonInfo::AT_LifetimeBound;    // "clang::lifetimebound"
3747       case 'n':  // 1 string to match.
3748         if (memcmp(Name.data()+8, "onallocating", 12) != 0)
3749           break;
3750         return AttributeCommonInfo::AT_NonAllocating;    // "clang::nonallocating"
3751       case 'o':  // 1 string to match.
3752         if (memcmp(Name.data()+8, "pencl_global", 12) != 0)
3753           break;
3754         return AttributeCommonInfo::AT_OpenCLGlobalAddressSpace;         // "clang::opencl_global"
3755       case 'p':  // 2 strings to match.
3756         if (memcmp(Name.data()+8, "reserve_", 8) != 0)
3757           break;
3758         switch (Name[16]) {
3759         default: break;
3760         case 'm':        // 1 string to match.
3761           if (memcmp(Name.data()+17, "ost", 3) != 0)
3762             break;
3763           return AttributeCommonInfo::AT_PreserveMost;   // "clang::preserve_most"
3764         case 'n':        // 1 string to match.
3765           if (memcmp(Name.data()+17, "one", 3) != 0)
3766             break;
3767           return AttributeCommonInfo::AT_PreserveNone;   // "clang::preserve_none"
3768         }
3769         break;
3770       case 'r':  // 1 string to match.
3771         if (memcmp(Name.data()+8, "einitializes", 12) != 0)
3772           break;
3773         return AttributeCommonInfo::AT_Reinitializes;    // "clang::reinitializes"
3774       case 's':  // 2 strings to match.
3775         switch (Name[8]) {
3776         default: break;
3777         case 'e':        // 1 string to match.
3778           if (memcmp(Name.data()+9, "t_typestate", 11) != 0)
3779             break;
3780           return AttributeCommonInfo::AT_SetTypestate;   // "clang::set_typestate"
3781         case 'w':        // 1 string to match.
3782           if (memcmp(Name.data()+9, "ift_context", 11) != 0)
3783             break;
3784           return AttributeCommonInfo::AT_SwiftContext;   // "clang::swift_context"
3785         }
3786         break;
3787       case 'u':  // 1 string to match.
3788         if (memcmp(Name.data()+8, "ninitialized", 12) != 0)
3789           break;
3790         return AttributeCommonInfo::AT_Uninitialized;    // "clang::uninitialized"
3791       case 'x':  // 1 string to match.
3792         if (memcmp(Name.data()+8, "ray_log_args", 12) != 0)
3793           break;
3794         return AttributeCommonInfo::AT_XRayLogArgs;      // "clang::xray_log_args"
3795       }
3796       break;
3797     case 'g':    // 2 strings to match.
3798       if (memcmp(Name.data()+1, "nu::", 4) != 0)
3799         break;
3800       switch (Name[5]) {
3801       default: break;
3802       case 'f':  // 1 string to match.
3803         if (memcmp(Name.data()+6, "unction_return", 14) != 0)
3804           break;
3805         return AttributeCommonInfo::AT_FunctionReturnThunks;     // "gnu::function_return"
3806       case 'r':  // 1 string to match.
3807         if (memcmp(Name.data()+6, "eturns_nonnull", 14) != 0)
3808           break;
3809         return AttributeCommonInfo::AT_ReturnsNonNull;   // "gnu::returns_nonnull"
3810       }
3811       break;
3812     case 'h':    // 2 strings to match.
3813       if (memcmp(Name.data()+1, "lsl::", 5) != 0)
3814         break;
3815       switch (Name[6]) {
3816       default: break;
3817       case 'c':  // 1 string to match.
3818         if (memcmp(Name.data()+7, "ontained_type", 13) != 0)
3819           break;
3820         return AttributeCommonInfo::AT_HLSLContainedType;        // "hlsl::contained_type"
3821       case 'r':  // 1 string to match.
3822         if (memcmp(Name.data()+7, "esource_class", 13) != 0)
3823           break;
3824         return AttributeCommonInfo::AT_HLSLResourceClass;        // "hlsl::resource_class"
3825       }
3826       break;
3827     }
3828     break;
3829   case 21:       // 14 strings to match.
3830     switch (Name[0]) {
3831     default: break;
3832     case 'c':    // 13 strings to match.
3833       if (memcmp(Name.data()+1, "lang::", 6) != 0)
3834         break;
3835       switch (Name[7]) {
3836       default: break;
3837       case 'a':  // 2 strings to match.
3838         switch (Name[8]) {
3839         default: break;
3840         case 'c':        // 1 string to match.
3841           if (memcmp(Name.data()+9, "quire_handle", 12) != 0)
3842             break;
3843           return AttributeCommonInfo::AT_AcquireHandle;  // "clang::acquire_handle"
3844         case 'l':        // 1 string to match.
3845           if (memcmp(Name.data()+9, "ways_destroy", 12) != 0)
3846             break;
3847           return AttributeCommonInfo::AT_AlwaysDestroy;  // "clang::always_destroy"
3848         }
3849         break;
3850       case 'i':  // 1 string to match.
3851         if (memcmp(Name.data()+8, "ntel_ocl_bicc", 13) != 0)
3852           break;
3853         return AttributeCommonInfo::AT_IntelOclBicc;     // "clang::intel_ocl_bicc"
3854       case 'o':  // 4 strings to match.
3855         switch (Name[8]) {
3856         default: break;
3857         case 'b':        // 2 strings to match.
3858           if (memcmp(Name.data()+9, "jc_", 3) != 0)
3859             break;
3860           switch (Name[12]) {
3861           default: break;
3862           case 'e':      // 1 string to match.
3863             if (memcmp(Name.data()+13, "xception", 8) != 0)
3864               break;
3865             return AttributeCommonInfo::AT_ObjCException;        // "clang::objc_exception"
3866           case 'o':      // 1 string to match.
3867             if (memcmp(Name.data()+13, "wnership", 8) != 0)
3868               break;
3869             return AttributeCommonInfo::AT_ObjCOwnership;        // "clang::objc_ownership"
3870           }
3871           break;
3872         case 'p':        // 2 strings to match.
3873           if (memcmp(Name.data()+9, "encl_", 5) != 0)
3874             break;
3875           switch (Name[14]) {
3876           default: break;
3877           case 'g':      // 1 string to match.
3878             if (memcmp(Name.data()+15, "eneric", 6) != 0)
3879               break;
3880             return AttributeCommonInfo::AT_OpenCLGenericAddressSpace;    // "clang::opencl_generic"
3881           case 'p':      // 1 string to match.
3882             if (memcmp(Name.data()+15, "rivate", 6) != 0)
3883               break;
3884             return AttributeCommonInfo::AT_OpenCLPrivateAddressSpace;    // "clang::opencl_private"
3885           }
3886           break;
3887         }
3888         break;
3889       case 'p':  // 3 strings to match.
3890         switch (Name[8]) {
3891         default: break;
3892         case 'r':        // 2 strings to match.
3893           if (memcmp(Name.data()+9, "eferred_", 8) != 0)
3894             break;
3895           switch (Name[17]) {
3896           default: break;
3897           case 'n':      // 1 string to match.
3898             if (memcmp(Name.data()+18, "ame", 3) != 0)
3899               break;
3900             return AttributeCommonInfo::AT_PreferredName;        // "clang::preferred_name"
3901           case 't':      // 1 string to match.
3902             if (memcmp(Name.data()+18, "ype", 3) != 0)
3903               break;
3904             return AttributeCommonInfo::AT_PreferredType;        // "clang::preferred_type"
3905           }
3906           break;
3907         case 't':        // 1 string to match.
3908           if (memcmp(Name.data()+9, "_guarded_var", 12) != 0)
3909             break;
3910           return AttributeCommonInfo::AT_PtGuardedVar;   // "clang::pt_guarded_var"
3911         }
3912         break;
3913       case 'r':  // 1 string to match.
3914         if (memcmp(Name.data()+8, "elease_handle", 13) != 0)
3915           break;
3916         return AttributeCommonInfo::AT_ReleaseHandle;    // "clang::release_handle"
3917       case 's':  // 1 string to match.
3918         if (memcmp(Name.data()+8, "wiftasynccall", 13) != 0)
3919           break;
3920         return AttributeCommonInfo::AT_SwiftAsyncCall;   // "clang::swiftasynccall"
3921       case 't':  // 1 string to match.
3922         if (memcmp(Name.data()+8, "est_typestate", 13) != 0)
3923           break;
3924         return AttributeCommonInfo::AT_TestTypestate;    // "clang::test_typestate"
3925       }
3926       break;
3927     case 'g':    // 1 string to match.
3928       if (memcmp(Name.data()+1, "nu::randomize_layout", 20) != 0)
3929         break;
3930       return AttributeCommonInfo::AT_RandomizeLayout;    // "gnu::randomize_layout"
3931     }
3932     break;
3933   case 22:       // 16 strings to match.
3934     switch (Name[0]) {
3935     default: break;
3936     case 'c':    // 15 strings to match.
3937       if (memcmp(Name.data()+1, "lang::", 6) != 0)
3938         break;
3939       switch (Name[7]) {
3940       default: break;
3941       case 'a':  // 3 strings to match.
3942         switch (Name[8]) {
3943         default: break;
3944         case 'a':        // 1 string to match.
3945           if (memcmp(Name.data()+9, "rch64_sve_pcs", 13) != 0)
3946             break;
3947           return AttributeCommonInfo::AT_AArch64SVEPcs;  // "clang::aarch64_sve_pcs"
3948         case 'm':        // 2 strings to match.
3949           if (memcmp(Name.data()+9, "dgpu_num_", 9) != 0)
3950             break;
3951           switch (Name[18]) {
3952           default: break;
3953           case 's':      // 1 string to match.
3954             if (memcmp(Name.data()+19, "gpr", 3) != 0)
3955               break;
3956             return AttributeCommonInfo::AT_AMDGPUNumSGPR;        // "clang::amdgpu_num_sgpr"
3957           case 'v':      // 1 string to match.
3958             if (memcmp(Name.data()+19, "gpr", 3) != 0)
3959               break;
3960             return AttributeCommonInfo::AT_AMDGPUNumVGPR;        // "clang::amdgpu_num_vgpr"
3961           }
3962           break;
3963         }
3964         break;
3965       case 'n':  // 1 string to match.
3966         if (memcmp(Name.data()+8, "ot_tail_called", 14) != 0)
3967           break;
3968         return AttributeCommonInfo::AT_NotTailCalled;    // "clang::not_tail_called"
3969       case 'o':  // 5 strings to match.
3970         switch (Name[8]) {
3971         default: break;
3972         case 'b':        // 2 strings to match.
3973           if (memcmp(Name.data()+9, "jc_", 3) != 0)
3974             break;
3975           switch (Name[12]) {
3976           default: break;
3977           case 'c':      // 1 string to match.
3978             if (memcmp(Name.data()+13, "lass_stub", 9) != 0)
3979               break;
3980             return AttributeCommonInfo::AT_ObjCClassStub;        // "clang::objc_class_stub"
3981           case 'r':      // 1 string to match.
3982             if (memcmp(Name.data()+13, "oot_class", 9) != 0)
3983               break;
3984             return AttributeCommonInfo::AT_ObjCRootClass;        // "clang::objc_root_class"
3985           }
3986           break;
3987         case 'p':        // 1 string to match.
3988           if (memcmp(Name.data()+9, "encl_constant", 13) != 0)
3989             break;
3990           return AttributeCommonInfo::AT_OpenCLConstantAddressSpace;     // "clang::opencl_constant"
3991         case 'w':        // 2 strings to match.
3992           if (memcmp(Name.data()+9, "nership_", 8) != 0)
3993             break;
3994           switch (Name[17]) {
3995           default: break;
3996           case 'h':      // 1 string to match.
3997             if (memcmp(Name.data()+18, "olds", 4) != 0)
3998               break;
3999             return AttributeCommonInfo::AT_Ownership;    // "clang::ownership_holds"
4000           case 't':      // 1 string to match.
4001             if (memcmp(Name.data()+18, "akes", 4) != 0)
4002               break;
4003             return AttributeCommonInfo::AT_Ownership;    // "clang::ownership_takes"
4004           }
4005           break;
4006         }
4007         break;
4008       case 'p':  // 1 string to match.
4009         if (memcmp(Name.data()+8, "aram_typestate", 14) != 0)
4010           break;
4011         return AttributeCommonInfo::AT_ParamTypestate;   // "clang::param_typestate"
4012       case 'r':  // 1 string to match.
4013         if (memcmp(Name.data()+8, "iscv_vector_cc", 14) != 0)
4014           break;
4015         return AttributeCommonInfo::AT_RISCVVectorCC;    // "clang::riscv_vector_cc"
4016       case 's':  // 1 string to match.
4017         if (memcmp(Name.data()+8, "coped_lockable", 14) != 0)
4018           break;
4019         return AttributeCommonInfo::AT_ScopedLockable;   // "clang::scoped_lockable"
4020       case 't':  // 1 string to match.
4021         if (memcmp(Name.data()+8, "ype_visibility", 14) != 0)
4022           break;
4023         return AttributeCommonInfo::AT_TypeVisibility;   // "clang::type_visibility"
4024       case 'u':  // 2 strings to match.
4025         switch (Name[8]) {
4026         default: break;
4027         case 'n':        // 1 string to match.
4028           if (memcmp(Name.data()+9, "lock_function", 13) != 0)
4029             break;
4030           return AttributeCommonInfo::AT_ReleaseCapability;      // "clang::unlock_function"
4031         case 's':        // 1 string to match.
4032           if (memcmp(Name.data()+9, "ing_if_exists", 13) != 0)
4033             break;
4034           return AttributeCommonInfo::AT_UsingIfExists;  // "clang::using_if_exists"
4035         }
4036         break;
4037       }
4038       break;
4039     case 'g':    // 1 string to match.
4040       if (memcmp(Name.data()+1, "nu::transparent_union", 21) != 0)
4041         break;
4042       return AttributeCommonInfo::AT_TransparentUnion;   // "gnu::transparent_union"
4043     }
4044     break;
4045   case 23:       // 16 strings to match.
4046     switch (Name[0]) {
4047     default: break;
4048     case 'c':    // 12 strings to match.
4049       if (memcmp(Name.data()+1, "lang::", 6) != 0)
4050         break;
4051       switch (Name[7]) {
4052       default: break;
4053       case 'c':  // 1 string to match.
4054         if (memcmp(Name.data()+8, "oro_return_type", 15) != 0)
4055           break;
4056         return AttributeCommonInfo::AT_CoroReturnType;   // "clang::coro_return_type"
4057       case 'e':  // 1 string to match.
4058         if (memcmp(Name.data()+8, "nforce_tcb_leaf", 15) != 0)
4059           break;
4060         return AttributeCommonInfo::AT_EnforceTCBLeaf;   // "clang::enforce_tcb_leaf"
4061       case 'h':  // 1 string to match.
4062         if (memcmp(Name.data()+8, "ybrid_patchable", 15) != 0)
4063           break;
4064         return AttributeCommonInfo::AT_HybridPatchable;  // "clang::hybrid_patchable"
4065       case 'i':  // 1 string to match.
4066         if (memcmp(Name.data()+8, "nternal_linkage", 15) != 0)
4067           break;
4068         return AttributeCommonInfo::AT_InternalLinkage;  // "clang::internal_linkage"
4069       case 'm':  // 1 string to match.
4070         if (memcmp(Name.data()+8, "in_vector_width", 15) != 0)
4071           break;
4072         return AttributeCommonInfo::AT_MinVectorWidth;   // "clang::min_vector_width"
4073       case 'n':  // 2 strings to match.
4074         switch (Name[8]) {
4075         default: break;
4076         case 'e':        // 1 string to match.
4077           if (memcmp(Name.data()+9, "on_vector_type", 14) != 0)
4078             break;
4079           return AttributeCommonInfo::AT_NeonVectorType;         // "clang::neon_vector_type"
4080         case 's':        // 1 string to match.
4081           if (memcmp(Name.data()+9, "_consumes_self", 14) != 0)
4082             break;
4083           return AttributeCommonInfo::AT_NSConsumesSelf;         // "clang::ns_consumes_self"
4084         }
4085         break;
4086       case 'o':  // 1 string to match.
4087         if (memcmp(Name.data()+8, "s_consumes_this", 15) != 0)
4088           break;
4089         return AttributeCommonInfo::AT_OSConsumesThis;   // "clang::os_consumes_this"
4090       case 'p':  // 1 string to match.
4091         if (memcmp(Name.data()+8, "ass_object_size", 15) != 0)
4092           break;
4093         return AttributeCommonInfo::AT_PassObjectSize;   // "clang::pass_object_size"
4094       case 'r':  // 1 string to match.
4095         if (memcmp(Name.data()+8, "eturn_typestate", 15) != 0)
4096           break;
4097         return AttributeCommonInfo::AT_ReturnTypestate;  // "clang::return_typestate"
4098       case 's':  // 2 strings to match.
4099         switch (Name[8]) {
4100         default: break;
4101         case 'i':        // 1 string to match.
4102           if (memcmp(Name.data()+9, "zed_by_or_null", 14) != 0)
4103             break;
4104           return AttributeCommonInfo::AT_SizedByOrNull;  // "clang::sized_by_or_null"
4105         case 't':        // 1 string to match.
4106           if (memcmp(Name.data()+9, "andalone_debug", 14) != 0)
4107             break;
4108           return AttributeCommonInfo::AT_StandaloneDebug;        // "clang::standalone_debug"
4109         }
4110         break;
4111       }
4112       break;
4113     case 'g':    // 3 strings to match.
4114       if (memcmp(Name.data()+1, "nu::", 4) != 0)
4115         break;
4116       switch (Name[5]) {
4117       default: break;
4118       case 'n':  // 2 strings to match.
4119         if (memcmp(Name.data()+6, "o_s", 3) != 0)
4120           break;
4121         switch (Name[9]) {
4122         default: break;
4123         case 'a':        // 1 string to match.
4124           if (memcmp(Name.data()+10, "nitize_thread", 13) != 0)
4125             break;
4126           return AttributeCommonInfo::AT_NoSanitizeSpecific;     // "gnu::no_sanitize_thread"
4127         case 't':        // 1 string to match.
4128           if (memcmp(Name.data()+10, "ack_protector", 13) != 0)
4129             break;
4130           return AttributeCommonInfo::AT_NoStackProtector;       // "gnu::no_stack_protector"
4131         }
4132         break;
4133       case 'w':  // 1 string to match.
4134         if (memcmp(Name.data()+6, "arn_unused_result", 17) != 0)
4135           break;
4136         return AttributeCommonInfo::AT_WarnUnusedResult;         // "gnu::warn_unused_result"
4137       }
4138       break;
4139     case 'm':    // 1 string to match.
4140       if (memcmp(Name.data()+1, "svc::no_unique_address", 22) != 0)
4141         break;
4142       return AttributeCommonInfo::AT_NoUniqueAddress;    // "msvc::no_unique_address"
4143     }
4144     break;
4145   case 24:       // 8 strings to match.
4146     switch (Name[0]) {
4147     default: break;
4148     case 'c':    // 5 strings to match.
4149       if (memcmp(Name.data()+1, "lang::", 6) != 0)
4150         break;
4151       switch (Name[7]) {
4152       default: break;
4153       case 'a':  // 1 string to match.
4154         if (memcmp(Name.data()+8, "ssert_capability", 16) != 0)
4155           break;
4156         return AttributeCommonInfo::AT_AssertCapability;         // "clang::assert_capability"
4157       case 'o':  // 2 strings to match.
4158         switch (Name[8]) {
4159         default: break;
4160         case 'b':        // 1 string to match.
4161           if (memcmp(Name.data()+9, "jc_runtime_name", 15) != 0)
4162             break;
4163           return AttributeCommonInfo::AT_ObjCRuntimeName;        // "clang::objc_runtime_name"
4164         case 'w':        // 1 string to match.
4165           if (memcmp(Name.data()+9, "nership_returns", 15) != 0)
4166             break;
4167           return AttributeCommonInfo::AT_Ownership;      // "clang::ownership_returns"
4168         }
4169         break;
4170       case 's':  // 2 strings to match.
4171         switch (Name[8]) {
4172         default: break;
4173         case 'h':        // 1 string to match.
4174           if (memcmp(Name.data()+9, "ared_capability", 15) != 0)
4175             break;
4176           return AttributeCommonInfo::AT_Capability;     // "clang::shared_capability"
4177         case 'w':        // 1 string to match.
4178           if (memcmp(Name.data()+9, "ift_async_error", 15) != 0)
4179             break;
4180           return AttributeCommonInfo::AT_SwiftAsyncError;        // "clang::swift_async_error"
4181         }
4182         break;
4183       }
4184       break;
4185     case 'g':    // 3 strings to match.
4186       if (memcmp(Name.data()+1, "nu::", 4) != 0)
4187         break;
4188       switch (Name[5]) {
4189       default: break;
4190       case 'n':  // 2 strings to match.
4191         if (memcmp(Name.data()+6, "o_", 2) != 0)
4192           break;
4193         switch (Name[8]) {
4194         default: break;
4195         case 'r':        // 1 string to match.
4196           if (memcmp(Name.data()+9, "andomize_layout", 15) != 0)
4197             break;
4198           return AttributeCommonInfo::AT_NoRandomizeLayout;      // "gnu::no_randomize_layout"
4199         case 's':        // 1 string to match.
4200           if (memcmp(Name.data()+9, "anitize_address", 15) != 0)
4201             break;
4202           return AttributeCommonInfo::AT_NoSanitizeSpecific;     // "gnu::no_sanitize_address"
4203         }
4204         break;
4205       case 'z':  // 1 string to match.
4206         if (memcmp(Name.data()+6, "ero_call_used_regs", 18) != 0)
4207           break;
4208         return AttributeCommonInfo::AT_ZeroCallUsedRegs;         // "gnu::zero_call_used_regs"
4209       }
4210       break;
4211     }
4212     break;
4213   case 25:       // 18 strings to match.
4214     if (memcmp(Name.data()+0, "clang::", 7) != 0)
4215       break;
4216     switch (Name[7]) {
4217     default: break;
4218     case 'a':    // 2 strings to match.
4219       switch (Name[8]) {
4220       default: break;
4221       case 'a':  // 1 string to match.
4222         if (memcmp(Name.data()+9, "rch64_vector_pcs", 16) != 0)
4223           break;
4224         return AttributeCommonInfo::AT_AArch64VectorPcs;         // "clang::aarch64_vector_pcs"
4225       case 'c':  // 1 string to match.
4226         if (memcmp(Name.data()+9, "quire_capability", 16) != 0)
4227           break;
4228         return AttributeCommonInfo::AT_AcquireCapability;        // "clang::acquire_capability"
4229       }
4230       break;
4231     case 'c':    // 2 strings to match.
4232       if (Name[8] != 'o')
4233         break;
4234       switch (Name[9]) {
4235       default: break;
4236       case 'r':  // 1 string to match.
4237         if (memcmp(Name.data()+10, "o_lifetimebound", 15) != 0)
4238           break;
4239         return AttributeCommonInfo::AT_CoroLifetimeBound;        // "clang::coro_lifetimebound"
4240       case 'u':  // 1 string to match.
4241         if (memcmp(Name.data()+10, "nted_by_or_null", 15) != 0)
4242           break;
4243         return AttributeCommonInfo::AT_CountedByOrNull;  // "clang::counted_by_or_null"
4244       }
4245       break;
4246     case 'd':    // 1 string to match.
4247       if (memcmp(Name.data()+8, "isable_tail_calls", 17) != 0)
4248         break;
4249       return AttributeCommonInfo::AT_DisableTailCalls;   // "clang::disable_tail_calls"
4250     case 'e':    // 1 string to match.
4251       if (memcmp(Name.data()+8, "num_extensibility", 17) != 0)
4252         break;
4253       return AttributeCommonInfo::AT_EnumExtensibility;  // "clang::enum_extensibility"
4254     case 'i':    // 1 string to match.
4255       if (memcmp(Name.data()+8, "boutletcollection", 17) != 0)
4256         break;
4257       return AttributeCommonInfo::AT_IBOutletCollection;         // "clang::iboutletcollection"
4258     case 'm':    // 1 string to match.
4259       if (memcmp(Name.data()+8, "ig_server_routine", 17) != 0)
4260         break;
4261       return AttributeCommonInfo::AT_MIGServerRoutine;   // "clang::mig_server_routine"
4262     case 'n':    // 3 strings to match.
4263       if (memcmp(Name.data()+8, "o_s", 3) != 0)
4264         break;
4265       switch (Name[11]) {
4266       default: break;
4267       case 'a':  // 1 string to match.
4268         if (memcmp(Name.data()+12, "nitize_memory", 13) != 0)
4269           break;
4270         return AttributeCommonInfo::AT_NoSanitizeSpecific;       // "clang::no_sanitize_memory"
4271       case 'p':  // 1 string to match.
4272         if (memcmp(Name.data()+12, "ecializations", 13) != 0)
4273           break;
4274         return AttributeCommonInfo::AT_NoSpecializations;        // "clang::no_specializations"
4275       case 't':  // 1 string to match.
4276         if (memcmp(Name.data()+12, "ack_protector", 13) != 0)
4277           break;
4278         return AttributeCommonInfo::AT_NoStackProtector;         // "clang::no_stack_protector"
4279       }
4280       break;
4281     case 'o':    // 3 strings to match.
4282       switch (Name[8]) {
4283       default: break;
4284       case 'b':  // 2 strings to match.
4285         if (memcmp(Name.data()+9, "jc_", 3) != 0)
4286           break;
4287         switch (Name[12]) {
4288         default: break;
4289         case 'm':        // 1 string to match.
4290           if (memcmp(Name.data()+13, "ethod_family", 12) != 0)
4291             break;
4292           return AttributeCommonInfo::AT_ObjCMethodFamily;       // "clang::objc_method_family"
4293         case 'n':        // 1 string to match.
4294           if (memcmp(Name.data()+13, "onlazy_class", 12) != 0)
4295             break;
4296           return AttributeCommonInfo::AT_ObjCNonLazyClass;       // "clang::objc_nonlazy_class"
4297         }
4298         break;
4299       case 'p':  // 1 string to match.
4300         if (memcmp(Name.data()+9, "encl_global_host", 16) != 0)
4301           break;
4302         return AttributeCommonInfo::AT_OpenCLGlobalHostAddressSpace;     // "clang::opencl_global_host"
4303       }
4304       break;
4305     case 'r':    // 1 string to match.
4306       if (memcmp(Name.data()+8, "elease_capability", 17) != 0)
4307         break;
4308       return AttributeCommonInfo::AT_ReleaseCapability;  // "clang::release_capability"
4309     case 's':    // 2 strings to match.
4310       switch (Name[8]) {
4311       default: break;
4312       case 'w':  // 1 string to match.
4313         if (memcmp(Name.data()+9, "ift_error_result", 16) != 0)
4314           break;
4315         return AttributeCommonInfo::AT_SwiftErrorResult;         // "clang::swift_error_result"
4316       case 'y':  // 1 string to match.
4317         if (memcmp(Name.data()+9, "cl_special_class", 16) != 0)
4318           break;
4319         return AttributeCommonInfo::AT_SYCLSpecialClass;         // "clang::sycl_special_class"
4320       }
4321       break;
4322     case 'w':    // 1 string to match.
4323       if (memcmp(Name.data()+8, "arn_unused_result", 17) != 0)
4324         break;
4325       return AttributeCommonInfo::AT_WarnUnusedResult;   // "clang::warn_unused_result"
4326     }
4327     break;
4328   case 26:       // 16 strings to match.
4329     if (memcmp(Name.data()+0, "clang::", 7) != 0)
4330       break;
4331     switch (Name[7]) {
4332     default: break;
4333     case 'a':    // 1 string to match.
4334       if (memcmp(Name.data()+8, "mdgpu_waves_per_eu", 18) != 0)
4335         break;
4336       return AttributeCommonInfo::AT_AMDGPUWavesPerEU;   // "clang::amdgpu_waves_per_eu"
4337     case 'c':    // 4 strings to match.
4338       switch (Name[8]) {
4339       default: break;
4340       case 'f':  // 3 strings to match.
4341         if (Name[9] != '_')
4342           break;
4343         switch (Name[10]) {
4344         default: break;
4345         case 'a':        // 1 string to match.
4346           if (memcmp(Name.data()+11, "udited_transfer", 15) != 0)
4347             break;
4348           return AttributeCommonInfo::AT_CFAuditedTransfer;      // "clang::cf_audited_transfer"
4349         case 'r':        // 1 string to match.
4350           if (memcmp(Name.data()+11, "eturns_retained", 15) != 0)
4351             break;
4352           return AttributeCommonInfo::AT_CFReturnsRetained;      // "clang::cf_returns_retained"
4353         case 'u':        // 1 string to match.
4354           if (memcmp(Name.data()+11, "nknown_transfer", 15) != 0)
4355             break;
4356           return AttributeCommonInfo::AT_CFUnknownTransfer;      // "clang::cf_unknown_transfer"
4357         }
4358         break;
4359       case 'o':  // 1 string to match.
4360         if (memcmp(Name.data()+9, "ro_await_elidable", 17) != 0)
4361           break;
4362         return AttributeCommonInfo::AT_CoroAwaitElidable;        // "clang::coro_await_elidable"
4363       }
4364       break;
4365     case 'd':    // 1 string to match.
4366       if (memcmp(Name.data()+8, "iagnose_as_builtin", 18) != 0)
4367         break;
4368       return AttributeCommonInfo::AT_DiagnoseAsBuiltin;  // "clang::diagnose_as_builtin"
4369     case 'l':    // 1 string to match.
4370       if (memcmp(Name.data()+8, "ifetime_capture_by", 18) != 0)
4371         break;
4372       return AttributeCommonInfo::AT_LifetimeCaptureBy;  // "clang::lifetime_capture_by"
4373     case 'n':    // 1 string to match.
4374       if (memcmp(Name.data()+8, "s_returns_retained", 18) != 0)
4375         break;
4376       return AttributeCommonInfo::AT_NSReturnsRetained;  // "clang::ns_returns_retained"
4377     case 'o':    // 5 strings to match.
4378       switch (Name[8]) {
4379       default: break;
4380       case 'b':  // 4 strings to match.
4381         if (memcmp(Name.data()+9, "jc_", 3) != 0)
4382           break;
4383         switch (Name[12]) {
4384         default: break;
4385         case 'b':        // 2 strings to match.
4386           if (memcmp(Name.data()+13, "ridge_", 6) != 0)
4387             break;
4388           switch (Name[19]) {
4389           default: break;
4390           case 'm':      // 1 string to match.
4391             if (memcmp(Name.data()+20, "utable", 6) != 0)
4392               break;
4393             return AttributeCommonInfo::AT_ObjCBridgeMutable;    // "clang::objc_bridge_mutable"
4394           case 'r':      // 1 string to match.
4395             if (memcmp(Name.data()+20, "elated", 6) != 0)
4396               break;
4397             return AttributeCommonInfo::AT_ObjCBridgeRelated;    // "clang::objc_bridge_related"
4398           }
4399           break;
4400         case 'd':        // 1 string to match.
4401           if (memcmp(Name.data()+13, "irect_members", 13) != 0)
4402             break;
4403           return AttributeCommonInfo::AT_ObjCDirectMembers;      // "clang::objc_direct_members"
4404         case 'r':        // 1 string to match.
4405           if (memcmp(Name.data()+13, "equires_super", 13) != 0)
4406             break;
4407           return AttributeCommonInfo::AT_ObjCRequiresSuper;      // "clang::objc_requires_super"
4408         }
4409         break;
4410       case 's':  // 1 string to match.
4411         if (memcmp(Name.data()+9, "_returns_retained", 17) != 0)
4412           break;
4413         return AttributeCommonInfo::AT_OSReturnsRetained;        // "clang::os_returns_retained"
4414       }
4415       break;
4416     case 'r':    // 1 string to match.
4417       if (memcmp(Name.data()+8, "equires_capability", 18) != 0)
4418         break;
4419       return AttributeCommonInfo::AT_RequiresCapability;         // "clang::requires_capability"
4420     case 's':    // 1 string to match.
4421       if (memcmp(Name.data()+8, "wift_async_context", 18) != 0)
4422         break;
4423       return AttributeCommonInfo::AT_SwiftAsyncContext;  // "clang::swift_async_context"
4424     case 'u':    // 1 string to match.
4425       if (memcmp(Name.data()+8, "nsafe_buffer_usage", 18) != 0)
4426         break;
4427       return AttributeCommonInfo::AT_UnsafeBufferUsage;  // "clang::unsafe_buffer_usage"
4428     }
4429     break;
4430   case 27:       // 6 strings to match.
4431     switch (Name[0]) {
4432     default: break;
4433     case 'c':    // 5 strings to match.
4434       if (memcmp(Name.data()+1, "lang::", 6) != 0)
4435         break;
4436       switch (Name[7]) {
4437       default: break;
4438       case 'c':  // 1 string to match.
4439         if (memcmp(Name.data()+8, "lspv_libclc_builtin", 19) != 0)
4440           break;
4441         return AttributeCommonInfo::AT_ClspvLibclcBuiltin;       // "clang::clspv_libclc_builtin"
4442       case 'l':  // 1 string to match.
4443         if (memcmp(Name.data()+8, "oader_uninitialized", 19) != 0)
4444           break;
4445         return AttributeCommonInfo::AT_LoaderUninitialized;      // "clang::loader_uninitialized"
4446       case 'n':  // 1 string to match.
4447         if (memcmp(Name.data()+8, "eon_polyvector_type", 19) != 0)
4448           break;
4449         return AttributeCommonInfo::AT_NeonPolyVectorType;       // "clang::neon_polyvector_type"
4450       case 'o':  // 2 strings to match.
4451         switch (Name[8]) {
4452         default: break;
4453         case 'b':        // 1 string to match.
4454           if (memcmp(Name.data()+9, "jc_runtime_visible", 18) != 0)
4455             break;
4456           return AttributeCommonInfo::AT_ObjCRuntimeVisible;     // "clang::objc_runtime_visible"
4457         case 'p':        // 1 string to match.
4458           if (memcmp(Name.data()+9, "encl_global_device", 18) != 0)
4459             break;
4460           return AttributeCommonInfo::AT_OpenCLGlobalDeviceAddressSpace;         // "clang::opencl_global_device"
4461         }
4462         break;
4463       }
4464       break;
4465     case 'g':    // 1 string to match.
4466       if (memcmp(Name.data()+1, "nu::no_instrument_function", 26) != 0)
4467         break;
4468       return AttributeCommonInfo::AT_NoInstrumentFunction;       // "gnu::no_instrument_function"
4469     }
4470     break;
4471   case 28:       // 9 strings to match.
4472     switch (Name[0]) {
4473     default: break;
4474     case 'c':    // 8 strings to match.
4475       if (memcmp(Name.data()+1, "lang::", 6) != 0)
4476         break;
4477       switch (Name[7]) {
4478       default: break;
4479       case 'l':  // 1 string to match.
4480         if (memcmp(Name.data()+8, "to_visibility_public", 20) != 0)
4481           break;
4482         return AttributeCommonInfo::AT_LTOVisibilityPublic;      // "clang::lto_visibility_public"
4483       case 'o':  // 1 string to match.
4484         if (memcmp(Name.data()+8, "bjc_precise_lifetime", 20) != 0)
4485           break;
4486         return AttributeCommonInfo::AT_ObjCPreciseLifetime;      // "clang::objc_precise_lifetime"
4487       case 'p':  // 2 strings to match.
4488         switch (Name[8]) {
4489         default: break;
4490         case 'o':        // 1 string to match.
4491           if (memcmp(Name.data()+9, "inter_with_type_tag", 19) != 0)
4492             break;
4493           return AttributeCommonInfo::AT_ArgumentWithTypeTag;    // "clang::pointer_with_type_tag"
4494         case 'r':        // 1 string to match.
4495           if (memcmp(Name.data()+9, "eserve_access_index", 19) != 0)
4496             break;
4497           return AttributeCommonInfo::AT_BPFPreserveAccessIndex;         // "clang::preserve_access_index"
4498         }
4499         break;
4500       case 's':  // 2 strings to match.
4501         switch (Name[8]) {
4502         default: break;
4503         case 'h':        // 1 string to match.
4504           if (memcmp(Name.data()+9, "ared_locks_required", 19) != 0)
4505             break;
4506           return AttributeCommonInfo::AT_RequiresCapability;     // "clang::shared_locks_required"
4507         case 'w':        // 1 string to match.
4508           if (memcmp(Name.data()+9, "ift_indirect_result", 19) != 0)
4509             break;
4510           return AttributeCommonInfo::AT_SwiftIndirectResult;    // "clang::swift_indirect_result"
4511         }
4512         break;
4513       case 't':  // 1 string to match.
4514         if (memcmp(Name.data()+8, "ype_tag_for_datatype", 20) != 0)
4515           break;
4516         return AttributeCommonInfo::AT_TypeTagForDatatype;       // "clang::type_tag_for_datatype"
4517       case 'x':  // 1 string to match.
4518         if (memcmp(Name.data()+8, "ray_never_instrument", 20) != 0)
4519           break;
4520         return AttributeCommonInfo::AT_XRayInstrument;   // "clang::xray_never_instrument"
4521       }
4522       break;
4523     case 'g':    // 1 string to match.
4524       if (memcmp(Name.data()+1, "nu::force_align_arg_pointer", 27) != 0)
4525         break;
4526       return AttributeCommonInfo::AT_X86ForceAlignArgPointer;    // "gnu::force_align_arg_pointer"
4527     }
4528     break;
4529   case 29:       // 8 strings to match.
4530     switch (Name[0]) {
4531     default: break;
4532     case 'c':    // 7 strings to match.
4533       if (memcmp(Name.data()+1, "lang::", 6) != 0)
4534         break;
4535       switch (Name[7]) {
4536       default: break;
4537       case 'a':  // 1 string to match.
4538         if (memcmp(Name.data()+8, "rgument_with_type_tag", 21) != 0)
4539           break;
4540         return AttributeCommonInfo::AT_ArgumentWithTypeTag;      // "clang::argument_with_type_tag"
4541       case 'e':  // 1 string to match.
4542         if (memcmp(Name.data()+8, "xternal_source_symbol", 21) != 0)
4543           break;
4544         return AttributeCommonInfo::AT_ExternalSourceSymbol;     // "clang::external_source_symbol"
4545       case 'o':  // 1 string to match.
4546         if (memcmp(Name.data()+8, "bjc_independent_class", 21) != 0)
4547           break;
4548         return AttributeCommonInfo::AT_ObjCIndependentClass;     // "clang::objc_independent_class"
4549       case 'p':  // 2 strings to match.
4550         switch (Name[8]) {
4551         default: break;
4552         case 'r':        // 1 string to match.
4553           if (memcmp(Name.data()+9, "eserve_static_offset", 20) != 0)
4554             break;
4555           return AttributeCommonInfo::AT_BPFPreserveStaticOffset;        // "clang::preserve_static_offset"
4556         case 't':        // 1 string to match.
4557           if (memcmp(Name.data()+9, "rauth_vtable_pointer", 20) != 0)
4558             break;
4559           return AttributeCommonInfo::AT_VTablePointerAuthentication;    // "clang::ptrauth_vtable_pointer"
4560         }
4561         break;
4562       case 't':  // 1 string to match.
4563         if (memcmp(Name.data()+8, "ry_acquire_capability", 21) != 0)
4564           break;
4565         return AttributeCommonInfo::AT_TryAcquireCapability;     // "clang::try_acquire_capability"
4566       case 'x':  // 1 string to match.
4567         if (memcmp(Name.data()+8, "ray_always_instrument", 21) != 0)
4568           break;
4569         return AttributeCommonInfo::AT_XRayInstrument;   // "clang::xray_always_instrument"
4570       }
4571       break;
4572     case 'g':    // 1 string to match.
4573       if (memcmp(Name.data()+1, "nu::patchable_function_entry", 28) != 0)
4574         break;
4575       return AttributeCommonInfo::AT_PatchableFunctionEntry;     // "gnu::patchable_function_entry"
4576     }
4577     break;
4578   case 30:       // 6 strings to match.
4579     switch (Name[0]) {
4580     default: break;
4581     case 'c':    // 5 strings to match.
4582       if (memcmp(Name.data()+1, "lang::", 6) != 0)
4583         break;
4584       switch (Name[7]) {
4585       default: break;
4586       case 'c':  // 1 string to match.
4587         if (memcmp(Name.data()+8, "f_returns_not_retained", 22) != 0)
4588           break;
4589         return AttributeCommonInfo::AT_CFReturnsNotRetained;     // "clang::cf_returns_not_retained"
4590       case 'n':  // 2 strings to match.
4591         if (memcmp(Name.data()+8, "s_returns_", 10) != 0)
4592           break;
4593         switch (Name[18]) {
4594         default: break;
4595         case 'a':        // 1 string to match.
4596           if (memcmp(Name.data()+19, "utoreleased", 11) != 0)
4597             break;
4598           return AttributeCommonInfo::AT_NSReturnsAutoreleased;  // "clang::ns_returns_autoreleased"
4599         case 'n':        // 1 string to match.
4600           if (memcmp(Name.data()+19, "ot_retained", 11) != 0)
4601             break;
4602           return AttributeCommonInfo::AT_NSReturnsNotRetained;   // "clang::ns_returns_not_retained"
4603         }
4604         break;
4605       case 'o':  // 1 string to match.
4606         if (memcmp(Name.data()+8, "s_returns_not_retained", 22) != 0)
4607           break;
4608         return AttributeCommonInfo::AT_OSReturnsNotRetained;     // "clang::os_returns_not_retained"
4609       case 's':  // 1 string to match.
4610         if (memcmp(Name.data()+8, "ycl_kernel_entry_point", 22) != 0)
4611           break;
4612         return AttributeCommonInfo::AT_SYCLKernelEntryPoint;     // "clang::sycl_kernel_entry_point"
4613       }
4614       break;
4615     case 'g':    // 1 string to match.
4616       if (memcmp(Name.data()+1, "nu::no_caller_saved_registers", 29) != 0)
4617         break;
4618       return AttributeCommonInfo::AT_AnyX86NoCallerSavedRegisters;       // "gnu::no_caller_saved_registers"
4619     }
4620     break;
4621   case 31:       // 6 strings to match.
4622     switch (Name[0]) {
4623     default: break;
4624     case 'c':    // 5 strings to match.
4625       if (memcmp(Name.data()+1, "lang::", 6) != 0)
4626         break;
4627       switch (Name[7]) {
4628       default: break;
4629       case 'a':  // 1 string to match.
4630         if (memcmp(Name.data()+8, "ssert_shared_capability", 23) != 0)
4631           break;
4632         return AttributeCommonInfo::AT_AssertCapability;         // "clang::assert_shared_capability"
4633       case 'c':  // 1 string to match.
4634         if (memcmp(Name.data()+8, "fi_canonical_jump_table", 23) != 0)
4635           break;
4636         return AttributeCommonInfo::AT_CFICanonicalJumpTable;    // "clang::cfi_canonical_jump_table"
4637       case 'e':  // 1 string to match.
4638         if (memcmp(Name.data()+8, "xclusive_locks_required", 23) != 0)
4639           break;
4640         return AttributeCommonInfo::AT_RequiresCapability;       // "clang::exclusive_locks_required"
4641       case 'o':  // 1 string to match.
4642         if (memcmp(Name.data()+8, "bjc_externally_retained", 23) != 0)
4643           break;
4644         return AttributeCommonInfo::AT_ObjCExternallyRetained;   // "clang::objc_externally_retained"
4645       case 'p':  // 1 string to match.
4646         if (memcmp(Name.data()+8, "ass_dynamic_object_size", 23) != 0)
4647           break;
4648         return AttributeCommonInfo::AT_PassObjectSize;   // "clang::pass_dynamic_object_size"
4649       }
4650       break;
4651     case 'g':    // 1 string to match.
4652       if (memcmp(Name.data()+1, "nu::no_address_safety_analysis", 30) != 0)
4653         break;
4654       return AttributeCommonInfo::AT_NoSanitizeSpecific;         // "gnu::no_address_safety_analysis"
4655     }
4656     break;
4657   case 32:       // 5 strings to match.
4658     if (memcmp(Name.data()+0, "clang::", 7) != 0)
4659       break;
4660     switch (Name[7]) {
4661     default: break;
4662     case '_':    // 1 string to match.
4663       if (memcmp(Name.data()+8, "_clang_arm_builtin_alias", 24) != 0)
4664         break;
4665       return AttributeCommonInfo::AT_ArmBuiltinAlias;    // "clang::__clang_arm_builtin_alias"
4666     case 'a':    // 1 string to match.
4667       if (memcmp(Name.data()+8, "cquire_shared_capability", 24) != 0)
4668         break;
4669       return AttributeCommonInfo::AT_AcquireCapability;  // "clang::acquire_shared_capability"
4670     case 'n':    // 1 string to match.
4671       if (memcmp(Name.data()+8, "o_thread_safety_analysis", 24) != 0)
4672         break;
4673       return AttributeCommonInfo::AT_NoThreadSafetyAnalysis;     // "clang::no_thread_safety_analysis"
4674     case 'o':    // 1 string to match.
4675       if (memcmp(Name.data()+8, "bjc_non_runtime_protocol", 24) != 0)
4676         break;
4677       return AttributeCommonInfo::AT_ObjCNonRuntimeProtocol;     // "clang::objc_non_runtime_protocol"
4678     case 'r':    // 1 string to match.
4679       if (memcmp(Name.data()+8, "elease_shared_capability", 24) != 0)
4680         break;
4681       return AttributeCommonInfo::AT_ReleaseCapability;  // "clang::release_shared_capability"
4682     }
4683     break;
4684   case 33:       // 7 strings to match.
4685     if (memcmp(Name.data()+0, "clang::", 7) != 0)
4686       break;
4687     switch (Name[7]) {
4688     default: break;
4689     case 'a':    // 1 string to match.
4690       if (memcmp(Name.data()+8, "mdgpu_max_num_work_groups", 25) != 0)
4691         break;
4692       return AttributeCommonInfo::AT_AMDGPUMaxNumWorkGroups;     // "clang::amdgpu_max_num_work_groups"
4693     case 'c':    // 2 strings to match.
4694       if (Name[8] != 'o')
4695         break;
4696       switch (Name[9]) {
4697       default: break;
4698       case 'n':  // 1 string to match.
4699         if (memcmp(Name.data()+10, "sumable_auto_cast_state", 23) != 0)
4700           break;
4701         return AttributeCommonInfo::AT_ConsumableAutoCast;       // "clang::consumable_auto_cast_state"
4702       case 'r':  // 1 string to match.
4703         if (memcmp(Name.data()+10, "o_disable_lifetimebound", 23) != 0)
4704           break;
4705         return AttributeCommonInfo::AT_CoroDisableLifetimeBound;         // "clang::coro_disable_lifetimebound"
4706       }
4707       break;
4708     case 'o':    // 1 string to match.
4709       if (memcmp(Name.data()+8, "bjc_returns_inner_pointer", 25) != 0)
4710         break;
4711       return AttributeCommonInfo::AT_ObjCReturnsInnerPointer;    // "clang::objc_returns_inner_pointer"
4712     case 'r':    // 2 strings to match.
4713       if (Name[8] != 'e')
4714         break;
4715       switch (Name[9]) {
4716       default: break;
4717       case 'l':  // 1 string to match.
4718         if (memcmp(Name.data()+10, "ease_generic_capability", 23) != 0)
4719           break;
4720         return AttributeCommonInfo::AT_ReleaseCapability;        // "clang::release_generic_capability"
4721       case 'q':  // 1 string to match.
4722         if (memcmp(Name.data()+10, "uires_shared_capability", 23) != 0)
4723           break;
4724         return AttributeCommonInfo::AT_RequiresCapability;       // "clang::requires_shared_capability"
4725       }
4726       break;
4727     case 's':    // 1 string to match.
4728       if (memcmp(Name.data()+8, "peculative_load_hardening", 25) != 0)
4729         break;
4730       return AttributeCommonInfo::AT_SpeculativeLoadHardening;   // "clang::speculative_load_hardening"
4731     }
4732     break;
4733   case 34:       // 5 strings to match.
4734     if (memcmp(Name.data()+0, "clang::", 7) != 0)
4735       break;
4736     switch (Name[7]) {
4737     default: break;
4738     case 'a':    // 1 string to match.
4739       if (memcmp(Name.data()+8, "mdgpu_flat_work_group_size", 26) != 0)
4740         break;
4741       return AttributeCommonInfo::AT_AMDGPUFlatWorkGroupSize;    // "clang::amdgpu_flat_work_group_size"
4742     case 'e':    // 1 string to match.
4743       if (memcmp(Name.data()+8, "nforce_read_only_placement", 26) != 0)
4744         break;
4745       return AttributeCommonInfo::AT_ReadOnlyPlacement;  // "clang::enforce_read_only_placement"
4746     case 'o':    // 3 strings to match.
4747       switch (Name[8]) {
4748       default: break;
4749       case 'b':  // 2 strings to match.
4750         if (memcmp(Name.data()+9, "jc_", 3) != 0)
4751           break;
4752         switch (Name[12]) {
4753         default: break;
4754         case 'd':        // 1 string to match.
4755           if (memcmp(Name.data()+13, "esignated_initializer", 21) != 0)
4756             break;
4757           return AttributeCommonInfo::AT_ObjCDesignatedInitializer;      // "clang::objc_designated_initializer"
4758         case 's':        // 1 string to match.
4759           if (memcmp(Name.data()+13, "ubclassing_restricted", 21) != 0)
4760             break;
4761           return AttributeCommonInfo::AT_ObjCSubclassingRestricted;      // "clang::objc_subclassing_restricted"
4762         }
4763         break;
4764       case 's':  // 1 string to match.
4765         if (memcmp(Name.data()+9, "_returns_retained_on_zero", 25) != 0)
4766           break;
4767         return AttributeCommonInfo::AT_OSReturnsRetainedOnZero;  // "clang::os_returns_retained_on_zero"
4768       }
4769       break;
4770     }
4771     break;
4772   case 35:       // 3 strings to match.
4773     switch (Name[0]) {
4774     default: break;
4775     case 'c':    // 2 strings to match.
4776       if (memcmp(Name.data()+1, "lang::co", 8) != 0)
4777         break;
4778       switch (Name[9]) {
4779       default: break;
4780       case 'n':  // 1 string to match.
4781         if (memcmp(Name.data()+10, "sumable_set_state_on_read", 25) != 0)
4782           break;
4783         return AttributeCommonInfo::AT_ConsumableSetOnRead;      // "clang::consumable_set_state_on_read"
4784       case 'r':  // 1 string to match.
4785         if (memcmp(Name.data()+10, "o_await_elidable_argument", 25) != 0)
4786           break;
4787         return AttributeCommonInfo::AT_CoroAwaitElidableArgument;        // "clang::coro_await_elidable_argument"
4788       }
4789       break;
4790     case 'g':    // 1 string to match.
4791       if (memcmp(Name.data()+1, "nu::no_profile_instrument_function", 34) != 0)
4792         break;
4793       return AttributeCommonInfo::AT_NoProfileFunction;  // "gnu::no_profile_instrument_function"
4794     }
4795     break;
4796   case 36:       // 2 strings to match.
4797     if (memcmp(Name.data()+0, "clang::", 7) != 0)
4798       break;
4799     switch (Name[7]) {
4800     default: break;
4801     case 'n':    // 1 string to match.
4802       if (memcmp(Name.data()+8, "o_speculative_load_hardening", 28) != 0)
4803         break;
4804       return AttributeCommonInfo::AT_NoSpeculativeLoadHardening;         // "clang::no_speculative_load_hardening"
4805     case 't':    // 1 string to match.
4806       if (memcmp(Name.data()+8, "ry_acquire_shared_capability", 28) != 0)
4807         break;
4808       return AttributeCommonInfo::AT_TryAcquireCapability;       // "clang::try_acquire_shared_capability"
4809     }
4810     break;
4811   case 38:       // 4 strings to match.
4812     if (memcmp(Name.data()+0, "clang::", 7) != 0)
4813       break;
4814     switch (Name[7]) {
4815     default: break;
4816     case 'c':    // 1 string to match.
4817       if (memcmp(Name.data()+8, "oro_only_destroy_when_complete", 30) != 0)
4818         break;
4819       return AttributeCommonInfo::AT_CoroOnlyDestroyWhenComplete;        // "clang::coro_only_destroy_when_complete"
4820     case 'o':    // 1 string to match.
4821       if (memcmp(Name.data()+8, "s_returns_retained_on_non_zero", 30) != 0)
4822         break;
4823       return AttributeCommonInfo::AT_OSReturnsRetainedOnNonZero;         // "clang::os_returns_retained_on_non_zero"
4824     case 'r':    // 2 strings to match.
4825       if (memcmp(Name.data()+8, "equire_", 7) != 0)
4826         break;
4827       switch (Name[15]) {
4828       default: break;
4829       case 'c':  // 1 string to match.
4830         if (memcmp(Name.data()+16, "onstant_initialization", 22) != 0)
4831           break;
4832         return AttributeCommonInfo::AT_ConstInit;        // "clang::require_constant_initialization"
4833       case 'e':  // 1 string to match.
4834         if (memcmp(Name.data()+16, "xplicit_initialization", 22) != 0)
4835           break;
4836         return AttributeCommonInfo::AT_ExplicitInit;     // "clang::require_explicit_initialization"
4837       }
4838       break;
4839     }
4840     break;
4841   case 40:       // 1 string to match.
4842     if (memcmp(Name.data()+0, "clang::disable_sanitizer_instrumentation", 40) != 0)
4843       break;
4844     return AttributeCommonInfo::AT_DisableSanitizerInstrumentation;      // "clang::disable_sanitizer_instrumentation"
4845   case 41:       // 1 string to match.
4846     if (memcmp(Name.data()+0, "clang::objc_requires_property_definitions", 41) != 0)
4847       break;
4848     return AttributeCommonInfo::AT_ObjCRequiresPropertyDefs;     // "clang::objc_requires_property_definitions"
4849   case 42:       // 3 strings to match.
4850     if (memcmp(Name.data()+0, "clang::", 7) != 0)
4851       break;
4852     switch (Name[7]) {
4853     default: break;
4854     case '_':    // 1 string to match.
4855       if (memcmp(Name.data()+8, "_clang_arm_mve_strict_polymorphism", 34) != 0)
4856         break;
4857       return AttributeCommonInfo::AT_ArmMveStrictPolymorphism;   // "clang::__clang_arm_mve_strict_polymorphism"
4858     case 'e':    // 1 string to match.
4859       if (memcmp(Name.data()+8, "xclude_from_explicit_instantiation", 34) != 0)
4860         break;
4861       return AttributeCommonInfo::AT_ExcludeFromExplicitInstantiation;   // "clang::exclude_from_explicit_instantiation"
4862     case 'o':    // 1 string to match.
4863       if (memcmp(Name.data()+8, "bjc_arc_weak_reference_unavailable", 34) != 0)
4864         break;
4865       return AttributeCommonInfo::AT_ArcWeakrefUnavailable;      // "clang::objc_arc_weak_reference_unavailable"
4866     }
4867     break;
4868   case 44:       // 1 string to match.
4869     if (memcmp(Name.data()+0, "clang::available_only_in_default_eval_method", 44) != 0)
4870       break;
4871     return AttributeCommonInfo::AT_AvailableOnlyInDefaultEvalMethod;     // "clang::available_only_in_default_eval_method"
4872   case 53:       // 1 string to match.
4873     if (memcmp(Name.data()+0, "clang::objc_protocol_requires_explicit_implementation", 53) != 0)
4874       break;
4875     return AttributeCommonInfo::AT_ObjCExplicitProtocolImpl;     // "clang::objc_protocol_requires_explicit_implementation"
4876   }
4877   } else if (AttributeCommonInfo::AS_C23 == Syntax) {
4878   switch (Name.size()) {
4879   default: break;
4880   case 8:        // 4 strings to match.
4881     switch (Name[0]) {
4882     default: break;
4883     case 'g':    // 3 strings to match.
4884       if (memcmp(Name.data()+1, "nu::", 4) != 0)
4885         break;
4886       switch (Name[5]) {
4887       default: break;
4888       case 'f':  // 1 string to match.
4889         if (memcmp(Name.data()+6, "ar", 2) != 0)
4890           break;
4891         return AttributeCommonInfo::AT_MipsLongCall;     // "gnu::far"
4892       case 'h':  // 1 string to match.
4893         if (memcmp(Name.data()+6, "ot", 2) != 0)
4894           break;
4895         return AttributeCommonInfo::AT_Hot;      // "gnu::hot"
4896       case 'p':  // 1 string to match.
4897         if (memcmp(Name.data()+6, "cs", 2) != 0)
4898           break;
4899         return AttributeCommonInfo::AT_Pcs;      // "gnu::pcs"
4900       }
4901       break;
4902     case 'n':    // 1 string to match.
4903       if (memcmp(Name.data()+1, "oreturn", 7) != 0)
4904         break;
4905       return AttributeCommonInfo::AT_CXX11NoReturn;      // "noreturn"
4906     }
4907     break;
4908   case 9:        // 9 strings to match.
4909     switch (Name[0]) {
4910     default: break;
4911     case '_':    // 1 string to match.
4912       if (memcmp(Name.data()+1, "Noreturn", 8) != 0)
4913         break;
4914       return AttributeCommonInfo::AT_CXX11NoReturn;      // "_Noreturn"
4915     case 'g':    // 7 strings to match.
4916       if (memcmp(Name.data()+1, "nu::", 4) != 0)
4917         break;
4918       switch (Name[5]) {
4919       default: break;
4920       case 'c':  // 1 string to match.
4921         if (memcmp(Name.data()+6, "old", 3) != 0)
4922           break;
4923         return AttributeCommonInfo::AT_Cold;     // "gnu::cold"
4924       case 'l':  // 1 string to match.
4925         if (memcmp(Name.data()+6, "eaf", 3) != 0)
4926           break;
4927         return AttributeCommonInfo::AT_Leaf;     // "gnu::leaf"
4928       case 'm':  // 1 string to match.
4929         if (memcmp(Name.data()+6, "ode", 3) != 0)
4930           break;
4931         return AttributeCommonInfo::AT_Mode;     // "gnu::mode"
4932       case 'n':  // 1 string to match.
4933         if (memcmp(Name.data()+6, "ear", 3) != 0)
4934           break;
4935         return AttributeCommonInfo::AT_MipsShortCall;    // "gnu::near"
4936       case 'p':  // 1 string to match.
4937         if (memcmp(Name.data()+6, "ure", 3) != 0)
4938           break;
4939         return AttributeCommonInfo::AT_Pure;     // "gnu::pure"
4940       case 'u':  // 1 string to match.
4941         if (memcmp(Name.data()+6, "sed", 3) != 0)
4942           break;
4943         return AttributeCommonInfo::AT_Used;     // "gnu::used"
4944       case 'w':  // 1 string to match.
4945         if (memcmp(Name.data()+6, "eak", 3) != 0)
4946           break;
4947         return AttributeCommonInfo::AT_Weak;     // "gnu::weak"
4948       }
4949       break;
4950     case 'n':    // 1 string to match.
4951       if (memcmp(Name.data()+1, "odiscard", 8) != 0)
4952         break;
4953       return AttributeCommonInfo::AT_WarnUnusedResult;   // "nodiscard"
4954     }
4955     break;
4956   case 10:       // 8 strings to match.
4957     switch (Name[0]) {
4958     default: break;
4959     case 'd':    // 1 string to match.
4960       if (memcmp(Name.data()+1, "eprecated", 9) != 0)
4961         break;
4962       return AttributeCommonInfo::AT_Deprecated;         // "deprecated"
4963     case 'g':    // 7 strings to match.
4964       if (memcmp(Name.data()+1, "nu::", 4) != 0)
4965         break;
4966       switch (Name[5]) {
4967       default: break;
4968       case 'a':  // 1 string to match.
4969         if (memcmp(Name.data()+6, "lias", 4) != 0)
4970           break;
4971         return AttributeCommonInfo::AT_Alias;    // "gnu::alias"
4972       case 'c':  // 2 strings to match.
4973         switch (Name[6]) {
4974         default: break;
4975         case 'd':        // 1 string to match.
4976           if (memcmp(Name.data()+7, "ecl", 3) != 0)
4977             break;
4978           return AttributeCommonInfo::AT_CDecl;  // "gnu::cdecl"
4979         case 'o':        // 1 string to match.
4980           if (memcmp(Name.data()+7, "nst", 3) != 0)
4981             break;
4982           return AttributeCommonInfo::AT_Const;  // "gnu::const"
4983         }
4984         break;
4985       case 'e':  // 1 string to match.
4986         if (memcmp(Name.data()+6, "rror", 4) != 0)
4987           break;
4988         return AttributeCommonInfo::AT_Error;    // "gnu::error"
4989       case 'i':  // 1 string to match.
4990         if (memcmp(Name.data()+6, "func", 4) != 0)
4991           break;
4992         return AttributeCommonInfo::AT_IFunc;    // "gnu::ifunc"
4993       case 'm':  // 1 string to match.
4994         if (memcmp(Name.data()+6, "odel", 4) != 0)
4995           break;
4996         return AttributeCommonInfo::AT_CodeModel;        // "gnu::model"
4997       case 'n':  // 1 string to match.
4998         if (memcmp(Name.data()+6, "aked", 4) != 0)
4999           break;
5000         return AttributeCommonInfo::AT_Naked;    // "gnu::naked"
5001       }
5002       break;
5003     }
5004     break;
5005   case 11:       // 11 strings to match.
5006     switch (Name[0]) {
5007     default: break;
5008     case 'f':    // 1 string to match.
5009       if (memcmp(Name.data()+1, "allthrough", 10) != 0)
5010         break;
5011       return AttributeCommonInfo::AT_FallThrough;        // "fallthrough"
5012     case 'g':    // 10 strings to match.
5013       if (memcmp(Name.data()+1, "nu::", 4) != 0)
5014         break;
5015       switch (Name[5]) {
5016       default: break;
5017       case 'c':  // 1 string to match.
5018         if (memcmp(Name.data()+6, "ommon", 5) != 0)
5019           break;
5020         return AttributeCommonInfo::AT_Common;   // "gnu::common"
5021       case 'f':  // 1 string to match.
5022         if (memcmp(Name.data()+6, "ormat", 5) != 0)
5023           break;
5024         return AttributeCommonInfo::AT_Format;   // "gnu::format"
5025       case 'm':  // 3 strings to match.
5026         switch (Name[6]) {
5027         default: break;
5028         case 'a':        // 1 string to match.
5029           if (memcmp(Name.data()+7, "lloc", 4) != 0)
5030             break;
5031           return AttributeCommonInfo::AT_Restrict;       // "gnu::malloc"
5032         case 'i':        // 1 string to match.
5033           if (memcmp(Name.data()+7, "ps16", 4) != 0)
5034             break;
5035           return AttributeCommonInfo::AT_Mips16;         // "gnu::mips16"
5036         case 's':        // 1 string to match.
5037           if (memcmp(Name.data()+7, "_abi", 4) != 0)
5038             break;
5039           return AttributeCommonInfo::AT_MSABI;  // "gnu::ms_abi"
5040         }
5041         break;
5042       case 'p':  // 1 string to match.
5043         if (memcmp(Name.data()+6, "acked", 5) != 0)
5044           break;
5045         return AttributeCommonInfo::AT_Packed;   // "gnu::packed"
5046       case 'r':  // 1 string to match.
5047         if (memcmp(Name.data()+6, "etain", 5) != 0)
5048           break;
5049         return AttributeCommonInfo::AT_Retain;   // "gnu::retain"
5050       case 's':  // 1 string to match.
5051         if (memcmp(Name.data()+6, "ignal", 5) != 0)
5052           break;
5053         return AttributeCommonInfo::AT_AVRSignal;        // "gnu::signal"
5054       case 't':  // 1 string to match.
5055         if (memcmp(Name.data()+6, "arget", 5) != 0)
5056           break;
5057         return AttributeCommonInfo::AT_Target;   // "gnu::target"
5058       case 'u':  // 1 string to match.
5059         if (memcmp(Name.data()+6, "nused", 5) != 0)
5060           break;
5061         return AttributeCommonInfo::AT_Unused;   // "gnu::unused"
5062       }
5063       break;
5064     }
5065     break;
5066   case 12:       // 15 strings to match.
5067     switch (Name[0]) {
5068     default: break;
5069     case 'c':    // 1 string to match.
5070       if (memcmp(Name.data()+1, "lang::guard", 11) != 0)
5071         break;
5072       return AttributeCommonInfo::AT_CFGuard;    // "clang::guard"
5073     case 'g':    // 13 strings to match.
5074       if (memcmp(Name.data()+1, "nu::", 4) != 0)
5075         break;
5076       switch (Name[5]) {
5077       default: break;
5078       case '_':  // 1 string to match.
5079         if (memcmp(Name.data()+6, "_const", 6) != 0)
5080           break;
5081         return AttributeCommonInfo::AT_Const;    // "gnu::__const"
5082       case 'a':  // 1 string to match.
5083         if (memcmp(Name.data()+6, "ligned", 6) != 0)
5084           break;
5085         return AttributeCommonInfo::AT_Aligned;  // "gnu::aligned"
5086       case 'c':  // 1 string to match.
5087         if (memcmp(Name.data()+6, "leanup", 6) != 0)
5088           break;
5089         return AttributeCommonInfo::AT_Cleanup;  // "gnu::cleanup"
5090       case 'f':  // 1 string to match.
5091         if (memcmp(Name.data()+6, "latten", 6) != 0)
5092           break;
5093         return AttributeCommonInfo::AT_Flatten;  // "gnu::flatten"
5094       case 'n':  // 3 strings to match.
5095         if (Name[6] != 'o')
5096           break;
5097         switch (Name[7]) {
5098         default: break;
5099         case 'd':        // 1 string to match.
5100           if (memcmp(Name.data()+8, "ebug", 4) != 0)
5101             break;
5102           return AttributeCommonInfo::AT_NoDebug;        // "gnu::nodebug"
5103         case 'n':        // 1 string to match.
5104           if (memcmp(Name.data()+8, "null", 4) != 0)
5105             break;
5106           return AttributeCommonInfo::AT_NonNull;        // "gnu::nonnull"
5107         case 't':        // 1 string to match.
5108           if (memcmp(Name.data()+8, "hrow", 4) != 0)
5109             break;
5110           return AttributeCommonInfo::AT_NoThrow;        // "gnu::nothrow"
5111         }
5112         break;
5113       case 'r':  // 2 strings to match.
5114         if (memcmp(Name.data()+6, "eg", 2) != 0)
5115           break;
5116         switch (Name[8]) {
5117         default: break;
5118         case 'c':        // 1 string to match.
5119           if (memcmp(Name.data()+9, "all", 3) != 0)
5120             break;
5121           return AttributeCommonInfo::AT_RegCall;        // "gnu::regcall"
5122         case 'p':        // 1 string to match.
5123           if (memcmp(Name.data()+9, "arm", 3) != 0)
5124             break;
5125           return AttributeCommonInfo::AT_Regparm;        // "gnu::regparm"
5126         }
5127         break;
5128       case 's':  // 2 strings to match.
5129         switch (Name[6]) {
5130         default: break;
5131         case 'e':        // 1 string to match.
5132           if (memcmp(Name.data()+7, "ction", 5) != 0)
5133             break;
5134           return AttributeCommonInfo::AT_Section;        // "gnu::section"
5135         case 't':        // 1 string to match.
5136           if (memcmp(Name.data()+7, "dcall", 5) != 0)
5137             break;
5138           return AttributeCommonInfo::AT_StdCall;        // "gnu::stdcall"
5139         }
5140         break;
5141       case 'w':  // 2 strings to match.
5142         switch (Name[6]) {
5143         default: break;
5144         case 'a':        // 1 string to match.
5145           if (memcmp(Name.data()+7, "rning", 5) != 0)
5146             break;
5147           return AttributeCommonInfo::AT_Error;  // "gnu::warning"
5148         case 'e':        // 1 string to match.
5149           if (memcmp(Name.data()+7, "akref", 5) != 0)
5150             break;
5151           return AttributeCommonInfo::AT_WeakRef;        // "gnu::weakref"
5152         }
5153         break;
5154       }
5155       break;
5156     case 'm':    // 1 string to match.
5157       if (memcmp(Name.data()+1, "aybe_unused", 11) != 0)
5158         break;
5159       return AttributeCommonInfo::AT_Unused;     // "maybe_unused"
5160     }
5161     break;
5162   case 13:       // 12 strings to match.
5163     switch (Name[0]) {
5164     default: break;
5165     case 'c':    // 4 strings to match.
5166       if (memcmp(Name.data()+1, "lang::", 6) != 0)
5167         break;
5168       switch (Name[7]) {
5169       default: break;
5170       case 'a':  // 1 string to match.
5171         if (memcmp(Name.data()+8, "ssume", 5) != 0)
5172           break;
5173         return AttributeCommonInfo::AT_CXXAssume;        // "clang::assume"
5174       case 'b':  // 1 string to match.
5175         if (memcmp(Name.data()+8, "locks", 5) != 0)
5176           break;
5177         return AttributeCommonInfo::AT_Blocks;   // "clang::blocks"
5178       case 'l':  // 1 string to match.
5179         if (memcmp(Name.data()+8, "ikely", 5) != 0)
5180           break;
5181         return AttributeCommonInfo::AT_Likely;   // "clang::likely"
5182       case 'p':  // 1 string to match.
5183         if (memcmp(Name.data()+8, "ascal", 5) != 0)
5184           break;
5185         return AttributeCommonInfo::AT_Pascal;   // "clang::pascal"
5186       }
5187       break;
5188     case 'g':    // 8 strings to match.
5189       if (memcmp(Name.data()+1, "nu::", 4) != 0)
5190         break;
5191       switch (Name[5]) {
5192       default: break;
5193       case 'f':  // 1 string to match.
5194         if (memcmp(Name.data()+6, "astcall", 7) != 0)
5195           break;
5196         return AttributeCommonInfo::AT_FastCall;         // "gnu::fastcall"
5197       case 'n':  // 4 strings to match.
5198         if (Name[6] != 'o')
5199           break;
5200         switch (Name[7]) {
5201         default: break;
5202         case 'c':        // 1 string to match.
5203           if (memcmp(Name.data()+8, "ommon", 5) != 0)
5204             break;
5205           return AttributeCommonInfo::AT_NoCommon;       // "gnu::nocommon"
5206         case 'i':        // 1 string to match.
5207           if (memcmp(Name.data()+8, "nline", 5) != 0)
5208             break;
5209           return AttributeCommonInfo::AT_NoInline;       // "gnu::noinline"
5210         case 'm':        // 1 string to match.
5211           if (memcmp(Name.data()+8, "ips16", 5) != 0)
5212             break;
5213           return AttributeCommonInfo::AT_NoMips16;       // "gnu::nomips16"
5214         case 'r':        // 1 string to match.
5215           if (memcmp(Name.data()+8, "eturn", 5) != 0)
5216             break;
5217           return AttributeCommonInfo::AT_NoReturn;       // "gnu::noreturn"
5218         }
5219         break;
5220       case 's':  // 2 strings to match.
5221         switch (Name[6]) {
5222         default: break;
5223         case 'e':        // 1 string to match.
5224           if (memcmp(Name.data()+7, "ntinel", 6) != 0)
5225             break;
5226           return AttributeCommonInfo::AT_Sentinel;       // "gnu::sentinel"
5227         case 'y':        // 1 string to match.
5228           if (memcmp(Name.data()+7, "sv_abi", 6) != 0)
5229             break;
5230           return AttributeCommonInfo::AT_SysVABI;        // "gnu::sysv_abi"
5231         }
5232         break;
5233       case 't':  // 1 string to match.
5234         if (memcmp(Name.data()+6, "hiscall", 7) != 0)
5235           break;
5236         return AttributeCommonInfo::AT_ThisCall;         // "gnu::thiscall"
5237       }
5238       break;
5239     }
5240     break;
5241   case 14:       // 15 strings to match.
5242     switch (Name[0]) {
5243     default: break;
5244     case 'c':    // 5 strings to match.
5245       if (memcmp(Name.data()+1, "lang::", 6) != 0)
5246         break;
5247       switch (Name[7]) {
5248       default: break;
5249       case 'm':  // 1 string to match.
5250         if (memcmp(Name.data()+8, "insize", 6) != 0)
5251           break;
5252         return AttributeCommonInfo::AT_MinSize;  // "clang::minsize"
5253       case 'n':  // 2 strings to match.
5254         if (Name[8] != 'o')
5255           break;
5256         switch (Name[9]) {
5257         default: break;
5258         case 'd':        // 1 string to match.
5259           if (memcmp(Name.data()+10, "eref", 4) != 0)
5260             break;
5261           return AttributeCommonInfo::AT_NoDeref;        // "clang::noderef"
5262         case 'm':        // 1 string to match.
5263           if (memcmp(Name.data()+10, "erge", 4) != 0)
5264             break;
5265           return AttributeCommonInfo::AT_NoMerge;        // "clang::nomerge"
5266         }
5267         break;
5268       case 'o':  // 2 strings to match.
5269         switch (Name[8]) {
5270         default: break;
5271         case 'b':        // 1 string to match.
5272           if (memcmp(Name.data()+9, "jc_gc", 5) != 0)
5273             break;
5274           return AttributeCommonInfo::AT_ObjCGC;         // "clang::objc_gc"
5275         case 'p':        // 1 string to match.
5276           if (memcmp(Name.data()+9, "tnone", 5) != 0)
5277             break;
5278           return AttributeCommonInfo::AT_OptimizeNone;   // "clang::optnone"
5279         }
5280         break;
5281       }
5282       break;
5283     case 'g':    // 9 strings to match.
5284       if (memcmp(Name.data()+1, "nu::", 4) != 0)
5285         break;
5286       switch (Name[5]) {
5287       default: break;
5288       case 'd':  // 2 strings to match.
5289         if (memcmp(Name.data()+6, "ll", 2) != 0)
5290           break;
5291         switch (Name[8]) {
5292         default: break;
5293         case 'e':        // 1 string to match.
5294           if (memcmp(Name.data()+9, "xport", 5) != 0)
5295             break;
5296           return AttributeCommonInfo::AT_DLLExport;      // "gnu::dllexport"
5297         case 'i':        // 1 string to match.
5298           if (memcmp(Name.data()+9, "mport", 5) != 0)
5299             break;
5300           return AttributeCommonInfo::AT_DLLImport;      // "gnu::dllimport"
5301         }
5302         break;
5303       case 'i':  // 1 string to match.
5304         if (memcmp(Name.data()+6, "nterrupt", 8) != 0)
5305           break;
5306         return AttributeCommonInfo::AT_Interrupt;        // "gnu::interrupt"
5307       case 'l':  // 1 string to match.
5308         if (memcmp(Name.data()+6, "ong_call", 8) != 0)
5309           break;
5310         return AttributeCommonInfo::AT_MipsLongCall;     // "gnu::long_call"
5311       case 'm':  // 3 strings to match.
5312         switch (Name[6]) {
5313         default: break;
5314         case 'a':        // 1 string to match.
5315           if (memcmp(Name.data()+7, "y_alias", 7) != 0)
5316             break;
5317           return AttributeCommonInfo::AT_MayAlias;       // "gnu::may_alias"
5318         case 'i':        // 1 string to match.
5319           if (memcmp(Name.data()+7, "cromips", 7) != 0)
5320             break;
5321           return AttributeCommonInfo::AT_MicroMips;      // "gnu::micromips"
5322         case 's':        // 1 string to match.
5323           if (memcmp(Name.data()+7, "_struct", 7) != 0)
5324             break;
5325           return AttributeCommonInfo::AT_MSStruct;       // "gnu::ms_struct"
5326         }
5327         break;
5328       case 's':  // 1 string to match.
5329         if (memcmp(Name.data()+6, "electany", 8) != 0)
5330           break;
5331         return AttributeCommonInfo::AT_SelectAny;        // "gnu::selectany"
5332       case 't':  // 1 string to match.
5333         if (memcmp(Name.data()+6, "ls_model", 8) != 0)
5334           break;
5335         return AttributeCommonInfo::AT_TLSModel;         // "gnu::tls_model"
5336       }
5337       break;
5338     case 'm':    // 1 string to match.
5339       if (memcmp(Name.data()+1, "svc::noinline", 13) != 0)
5340         break;
5341       return AttributeCommonInfo::AT_NoInline;   // "msvc::noinline"
5342     }
5343     break;
5344   case 15:       // 22 strings to match.
5345     switch (Name[0]) {
5346     default: break;
5347     case 'c':    // 13 strings to match.
5348       if (memcmp(Name.data()+1, "lang::", 6) != 0)
5349         break;
5350       switch (Name[7]) {
5351       default: break;
5352       case 'N':  // 1 string to match.
5353         if (memcmp(Name.data()+8, "SObject", 7) != 0)
5354           break;
5355         return AttributeCommonInfo::AT_ObjCNSObject;     // "clang::NSObject"
5356       case 'a':  // 1 string to match.
5357         if (memcmp(Name.data()+8, "nnotate", 7) != 0)
5358           break;
5359         return AttributeCommonInfo::AT_Annotate;         // "clang::annotate"
5360       case 'b':  // 1 string to match.
5361         if (memcmp(Name.data()+8, "locking", 7) != 0)
5362           break;
5363         return AttributeCommonInfo::AT_Blocking;         // "clang::blocking"
5364       case 'c':  // 1 string to match.
5365         if (memcmp(Name.data()+8, "allback", 7) != 0)
5366           break;
5367         return AttributeCommonInfo::AT_Callback;         // "clang::callback"
5368       case 'i':  // 2 strings to match.
5369         if (Name[8] != 'b')
5370           break;
5371         switch (Name[9]) {
5372         default: break;
5373         case 'a':        // 1 string to match.
5374           if (memcmp(Name.data()+10, "ction", 5) != 0)
5375             break;
5376           return AttributeCommonInfo::AT_IBAction;       // "clang::ibaction"
5377         case 'o':        // 1 string to match.
5378           if (memcmp(Name.data()+10, "utlet", 5) != 0)
5379             break;
5380           return AttributeCommonInfo::AT_IBOutlet;       // "clang::iboutlet"
5381         }
5382         break;
5383       case 'm':  // 2 strings to match.
5384         switch (Name[8]) {
5385         default: break;
5386         case '6':        // 1 string to match.
5387           if (memcmp(Name.data()+9, "8k_rtd", 6) != 0)
5388             break;
5389           return AttributeCommonInfo::AT_M68kRTD;        // "clang::m68k_rtd"
5390         case 'u':        // 1 string to match.
5391           if (memcmp(Name.data()+9, "sttail", 6) != 0)
5392             break;
5393           return AttributeCommonInfo::AT_MustTail;       // "clang::musttail"
5394         }
5395         break;
5396       case 'n':  // 2 strings to match.
5397         if (Name[8] != 'o')
5398           break;
5399         switch (Name[9]) {
5400         default: break;
5401         case 'e':        // 1 string to match.
5402           if (memcmp(Name.data()+10, "scape", 5) != 0)
5403             break;
5404           return AttributeCommonInfo::AT_NoEscape;       // "clang::noescape"
5405         case 'i':        // 1 string to match.
5406           if (memcmp(Name.data()+10, "nline", 5) != 0)
5407             break;
5408           return AttributeCommonInfo::AT_NoInline;       // "clang::noinline"
5409         }
5410         break;
5411       case 's':  // 2 strings to match.
5412         switch (Name[8]) {
5413         default: break;
5414         case 'i':        // 1 string to match.
5415           if (memcmp(Name.data()+9, "zed_by", 6) != 0)
5416             break;
5417           return AttributeCommonInfo::AT_SizedBy;        // "clang::sized_by"
5418         case 'u':        // 1 string to match.
5419           if (memcmp(Name.data()+9, "ppress", 6) != 0)
5420             break;
5421           return AttributeCommonInfo::AT_Suppress;       // "clang::suppress"
5422         }
5423         break;
5424       case 'u':  // 1 string to match.
5425         if (memcmp(Name.data()+8, "nlikely", 7) != 0)
5426           break;
5427         return AttributeCommonInfo::AT_Unlikely;         // "clang::unlikely"
5428       }
5429       break;
5430     case 'g':    // 9 strings to match.
5431       if (memcmp(Name.data()+1, "nu::", 4) != 0)
5432         break;
5433       switch (Name[5]) {
5434       default: break;
5435       case 'a':  // 2 strings to match.
5436         switch (Name[6]) {
5437         default: break;
5438         case 'l':        // 1 string to match.
5439           if (memcmp(Name.data()+7, "loc_size", 8) != 0)
5440             break;
5441           return AttributeCommonInfo::AT_AllocSize;      // "gnu::alloc_size"
5442         case 'r':        // 1 string to match.
5443           if (memcmp(Name.data()+7, "tificial", 8) != 0)
5444             break;
5445           return AttributeCommonInfo::AT_Artificial;     // "gnu::artificial"
5446         }
5447         break;
5448       case 'd':  // 2 strings to match.
5449         if (Name[6] != 'e')
5450           break;
5451         switch (Name[7]) {
5452         default: break;
5453         case 'p':        // 1 string to match.
5454           if (memcmp(Name.data()+8, "recated", 7) != 0)
5455             break;
5456           return AttributeCommonInfo::AT_Deprecated;     // "gnu::deprecated"
5457         case 's':        // 1 string to match.
5458           if (memcmp(Name.data()+8, "tructor", 7) != 0)
5459             break;
5460           return AttributeCommonInfo::AT_Destructor;     // "gnu::destructor"
5461         }
5462         break;
5463       case 'f':  // 1 string to match.
5464         if (memcmp(Name.data()+6, "ormat_arg", 9) != 0)
5465           break;
5466         return AttributeCommonInfo::AT_FormatArg;        // "gnu::format_arg"
5467       case 'g':  // 1 string to match.
5468         if (memcmp(Name.data()+6, "nu_inline", 9) != 0)
5469           break;
5470         return AttributeCommonInfo::AT_GNUInline;        // "gnu::gnu_inline"
5471       case 'n':  // 1 string to match.
5472         if (memcmp(Name.data()+6, "ocf_check", 9) != 0)
5473           break;
5474         return AttributeCommonInfo::AT_AnyX86NoCfCheck;  // "gnu::nocf_check"
5475       case 's':  // 1 string to match.
5476         if (memcmp(Name.data()+6, "hort_call", 9) != 0)
5477           break;
5478         return AttributeCommonInfo::AT_MipsShortCall;    // "gnu::short_call"
5479       case 'v':  // 1 string to match.
5480         if (memcmp(Name.data()+6, "isibility", 9) != 0)
5481           break;
5482         return AttributeCommonInfo::AT_Visibility;       // "gnu::visibility"
5483       }
5484       break;
5485     }
5486     break;
5487   case 16:       // 10 strings to match.
5488     switch (Name[0]) {
5489     default: break;
5490     case 'c':    // 3 strings to match.
5491       if (memcmp(Name.data()+1, "lang::", 6) != 0)
5492         break;
5493       switch (Name[7]) {
5494       default: break;
5495       case 'f':  // 1 string to match.
5496         if (memcmp(Name.data()+8, "lag_enum", 8) != 0)
5497           break;
5498         return AttributeCommonInfo::AT_FlagEnum;         // "clang::flag_enum"
5499       case 'n':  // 1 string to match.
5500         if (memcmp(Name.data()+8, "ouwtable", 8) != 0)
5501           break;
5502         return AttributeCommonInfo::AT_NoUwtable;        // "clang::nouwtable"
5503       case 's':  // 1 string to match.
5504         if (memcmp(Name.data()+8, "wiftcall", 8) != 0)
5505           break;
5506         return AttributeCommonInfo::AT_SwiftCall;        // "clang::swiftcall"
5507       }
5508       break;
5509     case 'g':    // 6 strings to match.
5510       if (memcmp(Name.data()+1, "nu::", 4) != 0)
5511         break;
5512       switch (Name[5]) {
5513       default: break;
5514       case 'a':  // 1 string to match.
5515         if (memcmp(Name.data()+6, "lloc_align", 10) != 0)
5516           break;
5517         return AttributeCommonInfo::AT_AllocAlign;       // "gnu::alloc_align"
5518       case 'c':  // 1 string to match.
5519         if (memcmp(Name.data()+6, "onstructor", 10) != 0)
5520           break;
5521         return AttributeCommonInfo::AT_Constructor;      // "gnu::constructor"
5522       case 'f':  // 1 string to match.
5523         if (memcmp(Name.data()+6, "allthrough", 10) != 0)
5524           break;
5525         return AttributeCommonInfo::AT_FallThrough;      // "gnu::fallthrough"
5526       case 'n':  // 1 string to match.
5527         if (memcmp(Name.data()+6, "omicromips", 10) != 0)
5528           break;
5529         return AttributeCommonInfo::AT_NoMicroMips;      // "gnu::nomicromips"
5530       case 'v':  // 1 string to match.
5531         if (memcmp(Name.data()+6, "ector_size", 10) != 0)
5532           break;
5533         return AttributeCommonInfo::AT_VectorSize;       // "gnu::vector_size"
5534       case 'w':  // 1 string to match.
5535         if (memcmp(Name.data()+6, "arn_unused", 10) != 0)
5536           break;
5537         return AttributeCommonInfo::AT_WarnUnused;       // "gnu::warn_unused"
5538       }
5539       break;
5540     case 'r':    // 1 string to match.
5541       if (memcmp(Name.data()+1, "iscv::vector_cc", 15) != 0)
5542         break;
5543       return AttributeCommonInfo::AT_RISCVVectorCC;      // "riscv::vector_cc"
5544     }
5545     break;
5546   case 17:       // 7 strings to match.
5547     if (memcmp(Name.data()+0, "clang::", 7) != 0)
5548       break;
5549     switch (Name[7]) {
5550     default: break;
5551     case 'a':    // 1 string to match.
5552       if (memcmp(Name.data()+8, "llocating", 9) != 0)
5553         break;
5554       return AttributeCommonInfo::AT_Allocating;         // "clang::allocating"
5555     case 'c':    // 3 strings to match.
5556       if (Name[8] != 'o')
5557         break;
5558       switch (Name[9]) {
5559       default: break;
5560       case 'd':  // 1 string to match.
5561         if (memcmp(Name.data()+10, "e_align", 7) != 0)
5562           break;
5563         return AttributeCommonInfo::AT_CodeAlign;        // "clang::code_align"
5564       case 'n':  // 1 string to match.
5565         if (memcmp(Name.data()+10, "vergent", 7) != 0)
5566           break;
5567         return AttributeCommonInfo::AT_Convergent;       // "clang::convergent"
5568       case 'u':  // 1 string to match.
5569         if (memcmp(Name.data()+10, "nted_by", 7) != 0)
5570           break;
5571         return AttributeCommonInfo::AT_CountedBy;        // "clang::counted_by"
5572       }
5573       break;
5574     case 'n':    // 1 string to match.
5575       if (memcmp(Name.data()+8, "o_builtin", 9) != 0)
5576         break;
5577       return AttributeCommonInfo::AT_NoBuiltin;  // "clang::no_builtin"
5578     case 'u':    // 1 string to match.
5579       if (memcmp(Name.data()+8, "se_handle", 9) != 0)
5580         break;
5581       return AttributeCommonInfo::AT_UseHandle;  // "clang::use_handle"
5582     case 'v':    // 1 string to match.
5583       if (memcmp(Name.data()+8, "ectorcall", 9) != 0)
5584         break;
5585       return AttributeCommonInfo::AT_VectorCall;         // "clang::vectorcall"
5586     }
5587     break;
5588   case 18:       // 21 strings to match.
5589     switch (Name[0]) {
5590     default: break;
5591     case 'c':    // 18 strings to match.
5592       if (memcmp(Name.data()+1, "lang::", 6) != 0)
5593         break;
5594       switch (Name[7]) {
5595       default: break;
5596       case 'c':  // 2 strings to match.
5597         switch (Name[8]) {
5598         default: break;
5599         case 'a':        // 1 string to match.
5600           if (memcmp(Name.data()+9, "lled_once", 9) != 0)
5601             break;
5602           return AttributeCommonInfo::AT_CalledOnce;     // "clang::called_once"
5603         case 'f':        // 1 string to match.
5604           if (memcmp(Name.data()+9, "_consumed", 9) != 0)
5605             break;
5606           return AttributeCommonInfo::AT_CFConsumed;     // "clang::cf_consumed"
5607         }
5608         break;
5609       case 'e':  // 2 strings to match.
5610         switch (Name[8]) {
5611         default: break;
5612         case 'n':        // 1 string to match.
5613           if (memcmp(Name.data()+9, "force_tcb", 9) != 0)
5614             break;
5615           return AttributeCommonInfo::AT_EnforceTCB;     // "clang::enforce_tcb"
5616         case 'x':        // 1 string to match.
5617           if (memcmp(Name.data()+9, "port_name", 9) != 0)
5618             break;
5619           return AttributeCommonInfo::AT_WebAssemblyExportName;  // "clang::export_name"
5620         }
5621         break;
5622       case 'i':  // 1 string to match.
5623         if (memcmp(Name.data()+8, "mport_name", 10) != 0)
5624           break;
5625         return AttributeCommonInfo::AT_WebAssemblyImportName;    // "clang::import_name"
5626       case 'm':  // 2 strings to match.
5627         if (Name[8] != 'a')
5628           break;
5629         switch (Name[9]) {
5630         default: break;
5631         case 't':        // 1 string to match.
5632           if (memcmp(Name.data()+10, "rix_type", 8) != 0)
5633             break;
5634           return AttributeCommonInfo::AT_MatrixType;     // "clang::matrix_type"
5635         case 'y':        // 1 string to match.
5636           if (memcmp(Name.data()+10, "be_undef", 8) != 0)
5637             break;
5638           return AttributeCommonInfo::AT_MaybeUndef;     // "clang::maybe_undef"
5639         }
5640         break;
5641       case 'n':  // 4 strings to match.
5642         switch (Name[8]) {
5643         default: break;
5644         case 'o':        // 3 strings to match.
5645           switch (Name[9]) {
5646           default: break;
5647           case '_':      // 1 string to match.
5648             if (memcmp(Name.data()+10, "sanitize", 8) != 0)
5649               break;
5650             return AttributeCommonInfo::AT_NoSanitize;   // "clang::no_sanitize"
5651           case 'd':      // 1 string to match.
5652             if (memcmp(Name.data()+10, "uplicate", 8) != 0)
5653               break;
5654             return AttributeCommonInfo::AT_NoDuplicate;  // "clang::noduplicate"
5655           case 'n':      // 1 string to match.
5656             if (memcmp(Name.data()+10, "blocking", 8) != 0)
5657               break;
5658             return AttributeCommonInfo::AT_NonBlocking;  // "clang::nonblocking"
5659           }
5660           break;
5661         case 's':        // 1 string to match.
5662           if (memcmp(Name.data()+9, "_consumed", 9) != 0)
5663             break;
5664           return AttributeCommonInfo::AT_NSConsumed;     // "clang::ns_consumed"
5665         }
5666         break;
5667       case 'o':  // 3 strings to match.
5668         switch (Name[8]) {
5669         default: break;
5670         case 'b':        // 2 strings to match.
5671           if (memcmp(Name.data()+9, "jc_", 3) != 0)
5672             break;
5673           switch (Name[12]) {
5674           default: break;
5675           case 'b':      // 1 string to match.
5676             if (memcmp(Name.data()+13, "ridge", 5) != 0)
5677               break;
5678             return AttributeCommonInfo::AT_ObjCBridge;   // "clang::objc_bridge"
5679           case 'd':      // 1 string to match.
5680             if (memcmp(Name.data()+13, "irect", 5) != 0)
5681               break;
5682             return AttributeCommonInfo::AT_ObjCDirect;   // "clang::objc_direct"
5683           }
5684           break;
5685         case 's':        // 1 string to match.
5686           if (memcmp(Name.data()+9, "_consumed", 9) != 0)
5687             break;
5688           return AttributeCommonInfo::AT_OSConsumed;     // "clang::os_consumed"
5689         }
5690         break;
5691       case 's':  // 2 strings to match.
5692         switch (Name[8]) {
5693         default: break;
5694         case 'w':        // 1 string to match.
5695           if (memcmp(Name.data()+9, "ift_async", 9) != 0)
5696             break;
5697           return AttributeCommonInfo::AT_SwiftAsync;     // "clang::swift_async"
5698         case 'y':        // 1 string to match.
5699           if (memcmp(Name.data()+9, "cl_kernel", 9) != 0)
5700             break;
5701           return AttributeCommonInfo::AT_SYCLKernel;     // "clang::sycl_kernel"
5702         }
5703         break;
5704       case 'u':  // 1 string to match.
5705         if (memcmp(Name.data()+8, "navailable", 10) != 0)
5706           break;
5707         return AttributeCommonInfo::AT_Unavailable;      // "clang::unavailable"
5708       case 'w':  // 1 string to match.
5709         if (memcmp(Name.data()+8, "eak_import", 10) != 0)
5710           break;
5711         return AttributeCommonInfo::AT_WeakImport;       // "clang::weak_import"
5712       }
5713       break;
5714     case 'g':    // 3 strings to match.
5715       if (memcmp(Name.data()+1, "nu::", 4) != 0)
5716         break;
5717       switch (Name[5]) {
5718       default: break;
5719       case 'a':  // 1 string to match.
5720         if (memcmp(Name.data()+6, "lways_inline", 12) != 0)
5721           break;
5722         return AttributeCommonInfo::AT_AlwaysInline;     // "gnu::always_inline"
5723       case 'r':  // 1 string to match.
5724         if (memcmp(Name.data()+6, "eturns_twice", 12) != 0)
5725           break;
5726         return AttributeCommonInfo::AT_ReturnsTwice;     // "gnu::returns_twice"
5727       case 't':  // 1 string to match.
5728         if (memcmp(Name.data()+6, "arget_clones", 12) != 0)
5729           break;
5730         return AttributeCommonInfo::AT_TargetClones;     // "gnu::target_clones"
5731       }
5732       break;
5733     }
5734     break;
5735   case 19:       // 16 strings to match.
5736     switch (Name[0]) {
5737     default: break;
5738     case 'c':    // 13 strings to match.
5739       if (memcmp(Name.data()+1, "lang::", 6) != 0)
5740         break;
5741       switch (Name[7]) {
5742       default: break;
5743       case 'a':  // 1 string to match.
5744         if (memcmp(Name.data()+8, "vailability", 11) != 0)
5745           break;
5746         return AttributeCommonInfo::AT_Availability;     // "clang::availability"
5747       case 'b':  // 3 strings to match.
5748         switch (Name[8]) {
5749         default: break;
5750         case 'p':        // 1 string to match.
5751           if (memcmp(Name.data()+9, "f_fastcall", 10) != 0)
5752             break;
5753           return AttributeCommonInfo::AT_BPFFastCall;    // "clang::bpf_fastcall"
5754         case 't':        // 2 strings to match.
5755           if (memcmp(Name.data()+9, "f_", 2) != 0)
5756             break;
5757           switch (Name[11]) {
5758           default: break;
5759           case 'd':      // 1 string to match.
5760             if (memcmp(Name.data()+12, "ecl_tag", 7) != 0)
5761               break;
5762             return AttributeCommonInfo::AT_BTFDeclTag;   // "clang::btf_decl_tag"
5763           case 't':      // 1 string to match.
5764             if (memcmp(Name.data()+12, "ype_tag", 7) != 0)
5765               break;
5766             return AttributeCommonInfo::AT_BTFTypeTag;   // "clang::btf_type_tag"
5767           }
5768           break;
5769         }
5770         break;
5771       case 'c':  // 3 strings to match.
5772         switch (Name[8]) {
5773         default: break;
5774         case 'o':        // 1 string to match.
5775           if (memcmp(Name.data()+9, "ro_wrapper", 10) != 0)
5776             break;
5777           return AttributeCommonInfo::AT_CoroWrapper;    // "clang::coro_wrapper"
5778         case 'p':        // 2 strings to match.
5779           if (memcmp(Name.data()+9, "u_", 2) != 0)
5780             break;
5781           switch (Name[11]) {
5782           default: break;
5783           case 'd':      // 1 string to match.
5784             if (memcmp(Name.data()+12, "ispatch", 7) != 0)
5785               break;
5786             return AttributeCommonInfo::AT_CPUDispatch;  // "clang::cpu_dispatch"
5787           case 's':      // 1 string to match.
5788             if (memcmp(Name.data()+12, "pecific", 7) != 0)
5789               break;
5790             return AttributeCommonInfo::AT_CPUSpecific;  // "clang::cpu_specific"
5791           }
5792           break;
5793         }
5794         break;
5795       case 'n':  // 2 strings to match.
5796         switch (Name[8]) {
5797         default: break;
5798         case 'o':        // 1 string to match.
5799           if (memcmp(Name.data()+9, "convergent", 10) != 0)
5800             break;
5801           return AttributeCommonInfo::AT_NoConvergent;   // "clang::noconvergent"
5802         case 'v':        // 1 string to match.
5803           if (memcmp(Name.data()+9, "ptx_kernel", 10) != 0)
5804             break;
5805           return AttributeCommonInfo::AT_NVPTXKernel;    // "clang::nvptx_kernel"
5806         }
5807         break;
5808       case 'o':  // 3 strings to match.
5809         switch (Name[8]) {
5810         default: break;
5811         case 'b':        // 1 string to match.
5812           if (memcmp(Name.data()+9, "jc_boxable", 10) != 0)
5813             break;
5814           return AttributeCommonInfo::AT_ObjCBoxable;    // "clang::objc_boxable"
5815         case 'p':        // 1 string to match.
5816           if (memcmp(Name.data()+9, "encl_local", 10) != 0)
5817             break;
5818           return AttributeCommonInfo::AT_OpenCLLocalAddressSpace;        // "clang::opencl_local"
5819         case 'v':        // 1 string to match.
5820           if (memcmp(Name.data()+9, "erloadable", 10) != 0)
5821             break;
5822           return AttributeCommonInfo::AT_Overloadable;   // "clang::overloadable"
5823         }
5824         break;
5825       case 'p':  // 1 string to match.
5826         if (memcmp(Name.data()+8, "reserve_all", 11) != 0)
5827           break;
5828         return AttributeCommonInfo::AT_PreserveAll;      // "clang::preserve_all"
5829       }
5830       break;
5831     case 'g':    // 3 strings to match.
5832       if (memcmp(Name.data()+1, "nu::", 4) != 0)
5833         break;
5834       switch (Name[5]) {
5835       default: break;
5836       case 'a':  // 1 string to match.
5837         if (memcmp(Name.data()+6, "ssume_aligned", 13) != 0)
5838           break;
5839         return AttributeCommonInfo::AT_AssumeAligned;    // "gnu::assume_aligned"
5840       case 'n':  // 1 string to match.
5841         if (memcmp(Name.data()+6, "o_split_stack", 13) != 0)
5842           break;
5843         return AttributeCommonInfo::AT_NoSplitStack;     // "gnu::no_split_stack"
5844       case 't':  // 1 string to match.
5845         if (memcmp(Name.data()+6, "arget_version", 13) != 0)
5846           break;
5847         return AttributeCommonInfo::AT_TargetVersion;    // "gnu::target_version"
5848       }
5849       break;
5850     }
5851     break;
5852   case 20:       // 14 strings to match.
5853     switch (Name[0]) {
5854     default: break;
5855     case 'c':    // 12 strings to match.
5856       if (memcmp(Name.data()+1, "lang::", 6) != 0)
5857         break;
5858       switch (Name[7]) {
5859       default: break;
5860       case 'a':  // 4 strings to match.
5861         switch (Name[8]) {
5862         default: break;
5863         case 'd':        // 1 string to match.
5864           if (memcmp(Name.data()+9, "dress_space", 11) != 0)
5865             break;
5866           return AttributeCommonInfo::AT_AddressSpace;   // "clang::address_space"
5867         case 'l':        // 1 string to match.
5868           if (memcmp(Name.data()+9, "ways_inline", 11) != 0)
5869             break;
5870           return AttributeCommonInfo::AT_AlwaysInline;   // "clang::always_inline"
5871         case 'm':        // 1 string to match.
5872           if (memcmp(Name.data()+9, "dgpu_kernel", 11) != 0)
5873             break;
5874           return AttributeCommonInfo::AT_AMDGPUKernelCall;       // "clang::amdgpu_kernel"
5875         case 'n':        // 1 string to match.
5876           if (memcmp(Name.data()+9, "notate_type", 11) != 0)
5877             break;
5878           return AttributeCommonInfo::AT_AnnotateType;   // "clang::annotate_type"
5879         }
5880         break;
5881       case 'b':  // 1 string to match.
5882         if (memcmp(Name.data()+8, "uiltin_alias", 12) != 0)
5883           break;
5884         return AttributeCommonInfo::AT_BuiltinAlias;     // "clang::builtin_alias"
5885       case 'i':  // 1 string to match.
5886         if (memcmp(Name.data()+8, "mport_module", 12) != 0)
5887           break;
5888         return AttributeCommonInfo::AT_WebAssemblyImportModule;  // "clang::import_module"
5889       case 'n':  // 1 string to match.
5890         if (memcmp(Name.data()+8, "onallocating", 12) != 0)
5891           break;
5892         return AttributeCommonInfo::AT_NonAllocating;    // "clang::nonallocating"
5893       case 'o':  // 1 string to match.
5894         if (memcmp(Name.data()+8, "pencl_global", 12) != 0)
5895           break;
5896         return AttributeCommonInfo::AT_OpenCLGlobalAddressSpace;         // "clang::opencl_global"
5897       case 'p':  // 2 strings to match.
5898         if (memcmp(Name.data()+8, "reserve_", 8) != 0)
5899           break;
5900         switch (Name[16]) {
5901         default: break;
5902         case 'm':        // 1 string to match.
5903           if (memcmp(Name.data()+17, "ost", 3) != 0)
5904             break;
5905           return AttributeCommonInfo::AT_PreserveMost;   // "clang::preserve_most"
5906         case 'n':        // 1 string to match.
5907           if (memcmp(Name.data()+17, "one", 3) != 0)
5908             break;
5909           return AttributeCommonInfo::AT_PreserveNone;   // "clang::preserve_none"
5910         }
5911         break;
5912       case 's':  // 1 string to match.
5913         if (memcmp(Name.data()+8, "wift_context", 12) != 0)
5914           break;
5915         return AttributeCommonInfo::AT_SwiftContext;     // "clang::swift_context"
5916       case 'x':  // 1 string to match.
5917         if (memcmp(Name.data()+8, "ray_log_args", 12) != 0)
5918           break;
5919         return AttributeCommonInfo::AT_XRayLogArgs;      // "clang::xray_log_args"
5920       }
5921       break;
5922     case 'g':    // 2 strings to match.
5923       if (memcmp(Name.data()+1, "nu::", 4) != 0)
5924         break;
5925       switch (Name[5]) {
5926       default: break;
5927       case 'f':  // 1 string to match.
5928         if (memcmp(Name.data()+6, "unction_return", 14) != 0)
5929           break;
5930         return AttributeCommonInfo::AT_FunctionReturnThunks;     // "gnu::function_return"
5931       case 'r':  // 1 string to match.
5932         if (memcmp(Name.data()+6, "eturns_nonnull", 14) != 0)
5933           break;
5934         return AttributeCommonInfo::AT_ReturnsNonNull;   // "gnu::returns_nonnull"
5935       }
5936       break;
5937     }
5938     break;
5939   case 21:       // 9 strings to match.
5940     switch (Name[0]) {
5941     default: break;
5942     case 'c':    // 8 strings to match.
5943       if (memcmp(Name.data()+1, "lang::", 6) != 0)
5944         break;
5945       switch (Name[7]) {
5946       default: break;
5947       case 'a':  // 1 string to match.
5948         if (memcmp(Name.data()+8, "cquire_handle", 13) != 0)
5949           break;
5950         return AttributeCommonInfo::AT_AcquireHandle;    // "clang::acquire_handle"
5951       case 'o':  // 4 strings to match.
5952         switch (Name[8]) {
5953         default: break;
5954         case 'b':        // 2 strings to match.
5955           if (memcmp(Name.data()+9, "jc_", 3) != 0)
5956             break;
5957           switch (Name[12]) {
5958           default: break;
5959           case 'e':      // 1 string to match.
5960             if (memcmp(Name.data()+13, "xception", 8) != 0)
5961               break;
5962             return AttributeCommonInfo::AT_ObjCException;        // "clang::objc_exception"
5963           case 'o':      // 1 string to match.
5964             if (memcmp(Name.data()+13, "wnership", 8) != 0)
5965               break;
5966             return AttributeCommonInfo::AT_ObjCOwnership;        // "clang::objc_ownership"
5967           }
5968           break;
5969         case 'p':        // 2 strings to match.
5970           if (memcmp(Name.data()+9, "encl_", 5) != 0)
5971             break;
5972           switch (Name[14]) {
5973           default: break;
5974           case 'g':      // 1 string to match.
5975             if (memcmp(Name.data()+15, "eneric", 6) != 0)
5976               break;
5977             return AttributeCommonInfo::AT_OpenCLGenericAddressSpace;    // "clang::opencl_generic"
5978           case 'p':      // 1 string to match.
5979             if (memcmp(Name.data()+15, "rivate", 6) != 0)
5980               break;
5981             return AttributeCommonInfo::AT_OpenCLPrivateAddressSpace;    // "clang::opencl_private"
5982           }
5983           break;
5984         }
5985         break;
5986       case 'p':  // 1 string to match.
5987         if (memcmp(Name.data()+8, "referred_type", 13) != 0)
5988           break;
5989         return AttributeCommonInfo::AT_PreferredType;    // "clang::preferred_type"
5990       case 'r':  // 1 string to match.
5991         if (memcmp(Name.data()+8, "elease_handle", 13) != 0)
5992           break;
5993         return AttributeCommonInfo::AT_ReleaseHandle;    // "clang::release_handle"
5994       case 's':  // 1 string to match.
5995         if (memcmp(Name.data()+8, "wiftasynccall", 13) != 0)
5996           break;
5997         return AttributeCommonInfo::AT_SwiftAsyncCall;   // "clang::swiftasynccall"
5998       }
5999       break;
6000     case 'g':    // 1 string to match.
6001       if (memcmp(Name.data()+1, "nu::randomize_layout", 20) != 0)
6002         break;
6003       return AttributeCommonInfo::AT_RandomizeLayout;    // "gnu::randomize_layout"
6004     }
6005     break;
6006   case 22:       // 10 strings to match.
6007     switch (Name[0]) {
6008     default: break;
6009     case 'c':    // 9 strings to match.
6010       if (memcmp(Name.data()+1, "lang::", 6) != 0)
6011         break;
6012       switch (Name[7]) {
6013       default: break;
6014       case 'a':  // 1 string to match.
6015         if (memcmp(Name.data()+8, "arch64_sve_pcs", 14) != 0)
6016           break;
6017         return AttributeCommonInfo::AT_AArch64SVEPcs;    // "clang::aarch64_sve_pcs"
6018       case 'n':  // 1 string to match.
6019         if (memcmp(Name.data()+8, "ot_tail_called", 14) != 0)
6020           break;
6021         return AttributeCommonInfo::AT_NotTailCalled;    // "clang::not_tail_called"
6022       case 'o':  // 5 strings to match.
6023         switch (Name[8]) {
6024         default: break;
6025         case 'b':        // 2 strings to match.
6026           if (memcmp(Name.data()+9, "jc_", 3) != 0)
6027             break;
6028           switch (Name[12]) {
6029           default: break;
6030           case 'c':      // 1 string to match.
6031             if (memcmp(Name.data()+13, "lass_stub", 9) != 0)
6032               break;
6033             return AttributeCommonInfo::AT_ObjCClassStub;        // "clang::objc_class_stub"
6034           case 'r':      // 1 string to match.
6035             if (memcmp(Name.data()+13, "oot_class", 9) != 0)
6036               break;
6037             return AttributeCommonInfo::AT_ObjCRootClass;        // "clang::objc_root_class"
6038           }
6039           break;
6040         case 'p':        // 1 string to match.
6041           if (memcmp(Name.data()+9, "encl_constant", 13) != 0)
6042             break;
6043           return AttributeCommonInfo::AT_OpenCLConstantAddressSpace;     // "clang::opencl_constant"
6044         case 'w':        // 2 strings to match.
6045           if (memcmp(Name.data()+9, "nership_", 8) != 0)
6046             break;
6047           switch (Name[17]) {
6048           default: break;
6049           case 'h':      // 1 string to match.
6050             if (memcmp(Name.data()+18, "olds", 4) != 0)
6051               break;
6052             return AttributeCommonInfo::AT_Ownership;    // "clang::ownership_holds"
6053           case 't':      // 1 string to match.
6054             if (memcmp(Name.data()+18, "akes", 4) != 0)
6055               break;
6056             return AttributeCommonInfo::AT_Ownership;    // "clang::ownership_takes"
6057           }
6058           break;
6059         }
6060         break;
6061       case 'r':  // 1 string to match.
6062         if (memcmp(Name.data()+8, "iscv_vector_cc", 14) != 0)
6063           break;
6064         return AttributeCommonInfo::AT_RISCVVectorCC;    // "clang::riscv_vector_cc"
6065       case 't':  // 1 string to match.
6066         if (memcmp(Name.data()+8, "ype_visibility", 14) != 0)
6067           break;
6068         return AttributeCommonInfo::AT_TypeVisibility;   // "clang::type_visibility"
6069       }
6070       break;
6071     case 'g':    // 1 string to match.
6072       if (memcmp(Name.data()+1, "nu::transparent_union", 21) != 0)
6073         break;
6074       return AttributeCommonInfo::AT_TransparentUnion;   // "gnu::transparent_union"
6075     }
6076     break;
6077   case 23:       // 13 strings to match.
6078     switch (Name[0]) {
6079     default: break;
6080     case 'c':    // 10 strings to match.
6081       if (memcmp(Name.data()+1, "lang::", 6) != 0)
6082         break;
6083       switch (Name[7]) {
6084       default: break;
6085       case 'c':  // 1 string to match.
6086         if (memcmp(Name.data()+8, "oro_return_type", 15) != 0)
6087           break;
6088         return AttributeCommonInfo::AT_CoroReturnType;   // "clang::coro_return_type"
6089       case 'e':  // 1 string to match.
6090         if (memcmp(Name.data()+8, "nforce_tcb_leaf", 15) != 0)
6091           break;
6092         return AttributeCommonInfo::AT_EnforceTCBLeaf;   // "clang::enforce_tcb_leaf"
6093       case 'h':  // 1 string to match.
6094         if (memcmp(Name.data()+8, "ybrid_patchable", 15) != 0)
6095           break;
6096         return AttributeCommonInfo::AT_HybridPatchable;  // "clang::hybrid_patchable"
6097       case 'i':  // 1 string to match.
6098         if (memcmp(Name.data()+8, "nternal_linkage", 15) != 0)
6099           break;
6100         return AttributeCommonInfo::AT_InternalLinkage;  // "clang::internal_linkage"
6101       case 'm':  // 1 string to match.
6102         if (memcmp(Name.data()+8, "in_vector_width", 15) != 0)
6103           break;
6104         return AttributeCommonInfo::AT_MinVectorWidth;   // "clang::min_vector_width"
6105       case 'n':  // 2 strings to match.
6106         switch (Name[8]) {
6107         default: break;
6108         case 'e':        // 1 string to match.
6109           if (memcmp(Name.data()+9, "on_vector_type", 14) != 0)
6110             break;
6111           return AttributeCommonInfo::AT_NeonVectorType;         // "clang::neon_vector_type"
6112         case 's':        // 1 string to match.
6113           if (memcmp(Name.data()+9, "_consumes_self", 14) != 0)
6114             break;
6115           return AttributeCommonInfo::AT_NSConsumesSelf;         // "clang::ns_consumes_self"
6116         }
6117         break;
6118       case 'o':  // 1 string to match.
6119         if (memcmp(Name.data()+8, "s_consumes_this", 15) != 0)
6120           break;
6121         return AttributeCommonInfo::AT_OSConsumesThis;   // "clang::os_consumes_this"
6122       case 'p':  // 1 string to match.
6123         if (memcmp(Name.data()+8, "ass_object_size", 15) != 0)
6124           break;
6125         return AttributeCommonInfo::AT_PassObjectSize;   // "clang::pass_object_size"
6126       case 's':  // 1 string to match.
6127         if (memcmp(Name.data()+8, "ized_by_or_null", 15) != 0)
6128           break;
6129         return AttributeCommonInfo::AT_SizedByOrNull;    // "clang::sized_by_or_null"
6130       }
6131       break;
6132     case 'g':    // 3 strings to match.
6133       if (memcmp(Name.data()+1, "nu::", 4) != 0)
6134         break;
6135       switch (Name[5]) {
6136       default: break;
6137       case 'n':  // 2 strings to match.
6138         if (memcmp(Name.data()+6, "o_s", 3) != 0)
6139           break;
6140         switch (Name[9]) {
6141         default: break;
6142         case 'a':        // 1 string to match.
6143           if (memcmp(Name.data()+10, "nitize_thread", 13) != 0)
6144             break;
6145           return AttributeCommonInfo::AT_NoSanitizeSpecific;     // "gnu::no_sanitize_thread"
6146         case 't':        // 1 string to match.
6147           if (memcmp(Name.data()+10, "ack_protector", 13) != 0)
6148             break;
6149           return AttributeCommonInfo::AT_NoStackProtector;       // "gnu::no_stack_protector"
6150         }
6151         break;
6152       case 'w':  // 1 string to match.
6153         if (memcmp(Name.data()+6, "arn_unused_result", 17) != 0)
6154           break;
6155         return AttributeCommonInfo::AT_WarnUnusedResult;         // "gnu::warn_unused_result"
6156       }
6157       break;
6158     }
6159     break;
6160   case 24:       // 6 strings to match.
6161     switch (Name[0]) {
6162     default: break;
6163     case 'c':    // 3 strings to match.
6164       if (memcmp(Name.data()+1, "lang::", 6) != 0)
6165         break;
6166       switch (Name[7]) {
6167       default: break;
6168       case 'o':  // 2 strings to match.
6169         switch (Name[8]) {
6170         default: break;
6171         case 'b':        // 1 string to match.
6172           if (memcmp(Name.data()+9, "jc_runtime_name", 15) != 0)
6173             break;
6174           return AttributeCommonInfo::AT_ObjCRuntimeName;        // "clang::objc_runtime_name"
6175         case 'w':        // 1 string to match.
6176           if (memcmp(Name.data()+9, "nership_returns", 15) != 0)
6177             break;
6178           return AttributeCommonInfo::AT_Ownership;      // "clang::ownership_returns"
6179         }
6180         break;
6181       case 's':  // 1 string to match.
6182         if (memcmp(Name.data()+8, "wift_async_error", 16) != 0)
6183           break;
6184         return AttributeCommonInfo::AT_SwiftAsyncError;  // "clang::swift_async_error"
6185       }
6186       break;
6187     case 'g':    // 3 strings to match.
6188       if (memcmp(Name.data()+1, "nu::", 4) != 0)
6189         break;
6190       switch (Name[5]) {
6191       default: break;
6192       case 'n':  // 2 strings to match.
6193         if (memcmp(Name.data()+6, "o_", 2) != 0)
6194           break;
6195         switch (Name[8]) {
6196         default: break;
6197         case 'r':        // 1 string to match.
6198           if (memcmp(Name.data()+9, "andomize_layout", 15) != 0)
6199             break;
6200           return AttributeCommonInfo::AT_NoRandomizeLayout;      // "gnu::no_randomize_layout"
6201         case 's':        // 1 string to match.
6202           if (memcmp(Name.data()+9, "anitize_address", 15) != 0)
6203             break;
6204           return AttributeCommonInfo::AT_NoSanitizeSpecific;     // "gnu::no_sanitize_address"
6205         }
6206         break;
6207       case 'z':  // 1 string to match.
6208         if (memcmp(Name.data()+6, "ero_call_used_regs", 18) != 0)
6209           break;
6210         return AttributeCommonInfo::AT_ZeroCallUsedRegs;         // "gnu::zero_call_used_regs"
6211       }
6212       break;
6213     }
6214     break;
6215   case 25:       // 14 strings to match.
6216     if (memcmp(Name.data()+0, "clang::", 7) != 0)
6217       break;
6218     switch (Name[7]) {
6219     default: break;
6220     case 'a':    // 1 string to match.
6221       if (memcmp(Name.data()+8, "arch64_vector_pcs", 17) != 0)
6222         break;
6223       return AttributeCommonInfo::AT_AArch64VectorPcs;   // "clang::aarch64_vector_pcs"
6224     case 'c':    // 2 strings to match.
6225       if (Name[8] != 'o')
6226         break;
6227       switch (Name[9]) {
6228       default: break;
6229       case 'r':  // 1 string to match.
6230         if (memcmp(Name.data()+10, "o_lifetimebound", 15) != 0)
6231           break;
6232         return AttributeCommonInfo::AT_CoroLifetimeBound;        // "clang::coro_lifetimebound"
6233       case 'u':  // 1 string to match.
6234         if (memcmp(Name.data()+10, "nted_by_or_null", 15) != 0)
6235           break;
6236         return AttributeCommonInfo::AT_CountedByOrNull;  // "clang::counted_by_or_null"
6237       }
6238       break;
6239     case 'd':    // 1 string to match.
6240       if (memcmp(Name.data()+8, "isable_tail_calls", 17) != 0)
6241         break;
6242       return AttributeCommonInfo::AT_DisableTailCalls;   // "clang::disable_tail_calls"
6243     case 'e':    // 1 string to match.
6244       if (memcmp(Name.data()+8, "num_extensibility", 17) != 0)
6245         break;
6246       return AttributeCommonInfo::AT_EnumExtensibility;  // "clang::enum_extensibility"
6247     case 'i':    // 1 string to match.
6248       if (memcmp(Name.data()+8, "boutletcollection", 17) != 0)
6249         break;
6250       return AttributeCommonInfo::AT_IBOutletCollection;         // "clang::iboutletcollection"
6251     case 'm':    // 1 string to match.
6252       if (memcmp(Name.data()+8, "ig_server_routine", 17) != 0)
6253         break;
6254       return AttributeCommonInfo::AT_MIGServerRoutine;   // "clang::mig_server_routine"
6255     case 'n':    // 2 strings to match.
6256       if (memcmp(Name.data()+8, "o_s", 3) != 0)
6257         break;
6258       switch (Name[11]) {
6259       default: break;
6260       case 'a':  // 1 string to match.
6261         if (memcmp(Name.data()+12, "nitize_memory", 13) != 0)
6262           break;
6263         return AttributeCommonInfo::AT_NoSanitizeSpecific;       // "clang::no_sanitize_memory"
6264       case 't':  // 1 string to match.
6265         if (memcmp(Name.data()+12, "ack_protector", 13) != 0)
6266           break;
6267         return AttributeCommonInfo::AT_NoStackProtector;         // "clang::no_stack_protector"
6268       }
6269       break;
6270     case 'o':    // 3 strings to match.
6271       switch (Name[8]) {
6272       default: break;
6273       case 'b':  // 2 strings to match.
6274         if (memcmp(Name.data()+9, "jc_", 3) != 0)
6275           break;
6276         switch (Name[12]) {
6277         default: break;
6278         case 'm':        // 1 string to match.
6279           if (memcmp(Name.data()+13, "ethod_family", 12) != 0)
6280             break;
6281           return AttributeCommonInfo::AT_ObjCMethodFamily;       // "clang::objc_method_family"
6282         case 'n':        // 1 string to match.
6283           if (memcmp(Name.data()+13, "onlazy_class", 12) != 0)
6284             break;
6285           return AttributeCommonInfo::AT_ObjCNonLazyClass;       // "clang::objc_nonlazy_class"
6286         }
6287         break;
6288       case 'p':  // 1 string to match.
6289         if (memcmp(Name.data()+9, "encl_global_host", 16) != 0)
6290           break;
6291         return AttributeCommonInfo::AT_OpenCLGlobalHostAddressSpace;     // "clang::opencl_global_host"
6292       }
6293       break;
6294     case 's':    // 2 strings to match.
6295       switch (Name[8]) {
6296       default: break;
6297       case 'w':  // 1 string to match.
6298         if (memcmp(Name.data()+9, "ift_error_result", 16) != 0)
6299           break;
6300         return AttributeCommonInfo::AT_SwiftErrorResult;         // "clang::swift_error_result"
6301       case 'y':  // 1 string to match.
6302         if (memcmp(Name.data()+9, "cl_special_class", 16) != 0)
6303           break;
6304         return AttributeCommonInfo::AT_SYCLSpecialClass;         // "clang::sycl_special_class"
6305       }
6306       break;
6307     }
6308     break;
6309   case 26:       // 13 strings to match.
6310     if (memcmp(Name.data()+0, "clang::", 7) != 0)
6311       break;
6312     switch (Name[7]) {
6313     default: break;
6314     case 'c':    // 4 strings to match.
6315       switch (Name[8]) {
6316       default: break;
6317       case 'f':  // 3 strings to match.
6318         if (Name[9] != '_')
6319           break;
6320         switch (Name[10]) {
6321         default: break;
6322         case 'a':        // 1 string to match.
6323           if (memcmp(Name.data()+11, "udited_transfer", 15) != 0)
6324             break;
6325           return AttributeCommonInfo::AT_CFAuditedTransfer;      // "clang::cf_audited_transfer"
6326         case 'r':        // 1 string to match.
6327           if (memcmp(Name.data()+11, "eturns_retained", 15) != 0)
6328             break;
6329           return AttributeCommonInfo::AT_CFReturnsRetained;      // "clang::cf_returns_retained"
6330         case 'u':        // 1 string to match.
6331           if (memcmp(Name.data()+11, "nknown_transfer", 15) != 0)
6332             break;
6333           return AttributeCommonInfo::AT_CFUnknownTransfer;      // "clang::cf_unknown_transfer"
6334         }
6335         break;
6336       case 'o':  // 1 string to match.
6337         if (memcmp(Name.data()+9, "ro_await_elidable", 17) != 0)
6338           break;
6339         return AttributeCommonInfo::AT_CoroAwaitElidable;        // "clang::coro_await_elidable"
6340       }
6341       break;
6342     case 'd':    // 1 string to match.
6343       if (memcmp(Name.data()+8, "iagnose_as_builtin", 18) != 0)
6344         break;
6345       return AttributeCommonInfo::AT_DiagnoseAsBuiltin;  // "clang::diagnose_as_builtin"
6346     case 'n':    // 1 string to match.
6347       if (memcmp(Name.data()+8, "s_returns_retained", 18) != 0)
6348         break;
6349       return AttributeCommonInfo::AT_NSReturnsRetained;  // "clang::ns_returns_retained"
6350     case 'o':    // 5 strings to match.
6351       switch (Name[8]) {
6352       default: break;
6353       case 'b':  // 4 strings to match.
6354         if (memcmp(Name.data()+9, "jc_", 3) != 0)
6355           break;
6356         switch (Name[12]) {
6357         default: break;
6358         case 'b':        // 2 strings to match.
6359           if (memcmp(Name.data()+13, "ridge_", 6) != 0)
6360             break;
6361           switch (Name[19]) {
6362           default: break;
6363           case 'm':      // 1 string to match.
6364             if (memcmp(Name.data()+20, "utable", 6) != 0)
6365               break;
6366             return AttributeCommonInfo::AT_ObjCBridgeMutable;    // "clang::objc_bridge_mutable"
6367           case 'r':      // 1 string to match.
6368             if (memcmp(Name.data()+20, "elated", 6) != 0)
6369               break;
6370             return AttributeCommonInfo::AT_ObjCBridgeRelated;    // "clang::objc_bridge_related"
6371           }
6372           break;
6373         case 'd':        // 1 string to match.
6374           if (memcmp(Name.data()+13, "irect_members", 13) != 0)
6375             break;
6376           return AttributeCommonInfo::AT_ObjCDirectMembers;      // "clang::objc_direct_members"
6377         case 'r':        // 1 string to match.
6378           if (memcmp(Name.data()+13, "equires_super", 13) != 0)
6379             break;
6380           return AttributeCommonInfo::AT_ObjCRequiresSuper;      // "clang::objc_requires_super"
6381         }
6382         break;
6383       case 's':  // 1 string to match.
6384         if (memcmp(Name.data()+9, "_returns_retained", 17) != 0)
6385           break;
6386         return AttributeCommonInfo::AT_OSReturnsRetained;        // "clang::os_returns_retained"
6387       }
6388       break;
6389     case 's':    // 1 string to match.
6390       if (memcmp(Name.data()+8, "wift_async_context", 18) != 0)
6391         break;
6392       return AttributeCommonInfo::AT_SwiftAsyncContext;  // "clang::swift_async_context"
6393     case 'u':    // 1 string to match.
6394       if (memcmp(Name.data()+8, "nsafe_buffer_usage", 18) != 0)
6395         break;
6396       return AttributeCommonInfo::AT_UnsafeBufferUsage;  // "clang::unsafe_buffer_usage"
6397     }
6398     break;
6399   case 27:       // 6 strings to match.
6400     switch (Name[0]) {
6401     default: break;
6402     case 'c':    // 5 strings to match.
6403       if (memcmp(Name.data()+1, "lang::", 6) != 0)
6404         break;
6405       switch (Name[7]) {
6406       default: break;
6407       case 'c':  // 1 string to match.
6408         if (memcmp(Name.data()+8, "lspv_libclc_builtin", 19) != 0)
6409           break;
6410         return AttributeCommonInfo::AT_ClspvLibclcBuiltin;       // "clang::clspv_libclc_builtin"
6411       case 'l':  // 1 string to match.
6412         if (memcmp(Name.data()+8, "oader_uninitialized", 19) != 0)
6413           break;
6414         return AttributeCommonInfo::AT_LoaderUninitialized;      // "clang::loader_uninitialized"
6415       case 'n':  // 1 string to match.
6416         if (memcmp(Name.data()+8, "eon_polyvector_type", 19) != 0)
6417           break;
6418         return AttributeCommonInfo::AT_NeonPolyVectorType;       // "clang::neon_polyvector_type"
6419       case 'o':  // 2 strings to match.
6420         switch (Name[8]) {
6421         default: break;
6422         case 'b':        // 1 string to match.
6423           if (memcmp(Name.data()+9, "jc_runtime_visible", 18) != 0)
6424             break;
6425           return AttributeCommonInfo::AT_ObjCRuntimeVisible;     // "clang::objc_runtime_visible"
6426         case 'p':        // 1 string to match.
6427           if (memcmp(Name.data()+9, "encl_global_device", 18) != 0)
6428             break;
6429           return AttributeCommonInfo::AT_OpenCLGlobalDeviceAddressSpace;         // "clang::opencl_global_device"
6430         }
6431         break;
6432       }
6433       break;
6434     case 'g':    // 1 string to match.
6435       if (memcmp(Name.data()+1, "nu::no_instrument_function", 26) != 0)
6436         break;
6437       return AttributeCommonInfo::AT_NoInstrumentFunction;       // "gnu::no_instrument_function"
6438     }
6439     break;
6440   case 28:       // 8 strings to match.
6441     switch (Name[0]) {
6442     default: break;
6443     case 'c':    // 7 strings to match.
6444       if (memcmp(Name.data()+1, "lang::", 6) != 0)
6445         break;
6446       switch (Name[7]) {
6447       default: break;
6448       case 'l':  // 1 string to match.
6449         if (memcmp(Name.data()+8, "to_visibility_public", 20) != 0)
6450           break;
6451         return AttributeCommonInfo::AT_LTOVisibilityPublic;      // "clang::lto_visibility_public"
6452       case 'o':  // 1 string to match.
6453         if (memcmp(Name.data()+8, "bjc_precise_lifetime", 20) != 0)
6454           break;
6455         return AttributeCommonInfo::AT_ObjCPreciseLifetime;      // "clang::objc_precise_lifetime"
6456       case 'p':  // 2 strings to match.
6457         switch (Name[8]) {
6458         default: break;
6459         case 'o':        // 1 string to match.
6460           if (memcmp(Name.data()+9, "inter_with_type_tag", 19) != 0)
6461             break;
6462           return AttributeCommonInfo::AT_ArgumentWithTypeTag;    // "clang::pointer_with_type_tag"
6463         case 'r':        // 1 string to match.
6464           if (memcmp(Name.data()+9, "eserve_access_index", 19) != 0)
6465             break;
6466           return AttributeCommonInfo::AT_BPFPreserveAccessIndex;         // "clang::preserve_access_index"
6467         }
6468         break;
6469       case 's':  // 1 string to match.
6470         if (memcmp(Name.data()+8, "wift_indirect_result", 20) != 0)
6471           break;
6472         return AttributeCommonInfo::AT_SwiftIndirectResult;      // "clang::swift_indirect_result"
6473       case 't':  // 1 string to match.
6474         if (memcmp(Name.data()+8, "ype_tag_for_datatype", 20) != 0)
6475           break;
6476         return AttributeCommonInfo::AT_TypeTagForDatatype;       // "clang::type_tag_for_datatype"
6477       case 'x':  // 1 string to match.
6478         if (memcmp(Name.data()+8, "ray_never_instrument", 20) != 0)
6479           break;
6480         return AttributeCommonInfo::AT_XRayInstrument;   // "clang::xray_never_instrument"
6481       }
6482       break;
6483     case 'g':    // 1 string to match.
6484       if (memcmp(Name.data()+1, "nu::force_align_arg_pointer", 27) != 0)
6485         break;
6486       return AttributeCommonInfo::AT_X86ForceAlignArgPointer;    // "gnu::force_align_arg_pointer"
6487     }
6488     break;
6489   case 29:       // 7 strings to match.
6490     switch (Name[0]) {
6491     default: break;
6492     case 'c':    // 6 strings to match.
6493       if (memcmp(Name.data()+1, "lang::", 6) != 0)
6494         break;
6495       switch (Name[7]) {
6496       default: break;
6497       case 'a':  // 1 string to match.
6498         if (memcmp(Name.data()+8, "rgument_with_type_tag", 21) != 0)
6499           break;
6500         return AttributeCommonInfo::AT_ArgumentWithTypeTag;      // "clang::argument_with_type_tag"
6501       case 'e':  // 1 string to match.
6502         if (memcmp(Name.data()+8, "xternal_source_symbol", 21) != 0)
6503           break;
6504         return AttributeCommonInfo::AT_ExternalSourceSymbol;     // "clang::external_source_symbol"
6505       case 'o':  // 1 string to match.
6506         if (memcmp(Name.data()+8, "bjc_independent_class", 21) != 0)
6507           break;
6508         return AttributeCommonInfo::AT_ObjCIndependentClass;     // "clang::objc_independent_class"
6509       case 'p':  // 2 strings to match.
6510         switch (Name[8]) {
6511         default: break;
6512         case 'r':        // 1 string to match.
6513           if (memcmp(Name.data()+9, "eserve_static_offset", 20) != 0)
6514             break;
6515           return AttributeCommonInfo::AT_BPFPreserveStaticOffset;        // "clang::preserve_static_offset"
6516         case 't':        // 1 string to match.
6517           if (memcmp(Name.data()+9, "rauth_vtable_pointer", 20) != 0)
6518             break;
6519           return AttributeCommonInfo::AT_VTablePointerAuthentication;    // "clang::ptrauth_vtable_pointer"
6520         }
6521         break;
6522       case 'x':  // 1 string to match.
6523         if (memcmp(Name.data()+8, "ray_always_instrument", 21) != 0)
6524           break;
6525         return AttributeCommonInfo::AT_XRayInstrument;   // "clang::xray_always_instrument"
6526       }
6527       break;
6528     case 'g':    // 1 string to match.
6529       if (memcmp(Name.data()+1, "nu::patchable_function_entry", 28) != 0)
6530         break;
6531       return AttributeCommonInfo::AT_PatchableFunctionEntry;     // "gnu::patchable_function_entry"
6532     }
6533     break;
6534   case 30:       // 6 strings to match.
6535     switch (Name[0]) {
6536     default: break;
6537     case 'c':    // 5 strings to match.
6538       if (memcmp(Name.data()+1, "lang::", 6) != 0)
6539         break;
6540       switch (Name[7]) {
6541       default: break;
6542       case 'c':  // 1 string to match.
6543         if (memcmp(Name.data()+8, "f_returns_not_retained", 22) != 0)
6544           break;
6545         return AttributeCommonInfo::AT_CFReturnsNotRetained;     // "clang::cf_returns_not_retained"
6546       case 'n':  // 2 strings to match.
6547         if (memcmp(Name.data()+8, "s_returns_", 10) != 0)
6548           break;
6549         switch (Name[18]) {
6550         default: break;
6551         case 'a':        // 1 string to match.
6552           if (memcmp(Name.data()+19, "utoreleased", 11) != 0)
6553             break;
6554           return AttributeCommonInfo::AT_NSReturnsAutoreleased;  // "clang::ns_returns_autoreleased"
6555         case 'n':        // 1 string to match.
6556           if (memcmp(Name.data()+19, "ot_retained", 11) != 0)
6557             break;
6558           return AttributeCommonInfo::AT_NSReturnsNotRetained;   // "clang::ns_returns_not_retained"
6559         }
6560         break;
6561       case 'o':  // 1 string to match.
6562         if (memcmp(Name.data()+8, "s_returns_not_retained", 22) != 0)
6563           break;
6564         return AttributeCommonInfo::AT_OSReturnsNotRetained;     // "clang::os_returns_not_retained"
6565       case 's':  // 1 string to match.
6566         if (memcmp(Name.data()+8, "ycl_kernel_entry_point", 22) != 0)
6567           break;
6568         return AttributeCommonInfo::AT_SYCLKernelEntryPoint;     // "clang::sycl_kernel_entry_point"
6569       }
6570       break;
6571     case 'g':    // 1 string to match.
6572       if (memcmp(Name.data()+1, "nu::no_caller_saved_registers", 29) != 0)
6573         break;
6574       return AttributeCommonInfo::AT_AnyX86NoCallerSavedRegisters;       // "gnu::no_caller_saved_registers"
6575     }
6576     break;
6577   case 31:       // 4 strings to match.
6578     switch (Name[0]) {
6579     default: break;
6580     case 'c':    // 3 strings to match.
6581       if (memcmp(Name.data()+1, "lang::", 6) != 0)
6582         break;
6583       switch (Name[7]) {
6584       default: break;
6585       case 'c':  // 1 string to match.
6586         if (memcmp(Name.data()+8, "fi_canonical_jump_table", 23) != 0)
6587           break;
6588         return AttributeCommonInfo::AT_CFICanonicalJumpTable;    // "clang::cfi_canonical_jump_table"
6589       case 'o':  // 1 string to match.
6590         if (memcmp(Name.data()+8, "bjc_externally_retained", 23) != 0)
6591           break;
6592         return AttributeCommonInfo::AT_ObjCExternallyRetained;   // "clang::objc_externally_retained"
6593       case 'p':  // 1 string to match.
6594         if (memcmp(Name.data()+8, "ass_dynamic_object_size", 23) != 0)
6595           break;
6596         return AttributeCommonInfo::AT_PassObjectSize;   // "clang::pass_dynamic_object_size"
6597       }
6598       break;
6599     case 'g':    // 1 string to match.
6600       if (memcmp(Name.data()+1, "nu::no_address_safety_analysis", 30) != 0)
6601         break;
6602       return AttributeCommonInfo::AT_NoSanitizeSpecific;         // "gnu::no_address_safety_analysis"
6603     }
6604     break;
6605   case 32:       // 3 strings to match.
6606     if (memcmp(Name.data()+0, "clang::", 7) != 0)
6607       break;
6608     switch (Name[7]) {
6609     default: break;
6610     case '_':    // 1 string to match.
6611       if (memcmp(Name.data()+8, "_clang_arm_builtin_alias", 24) != 0)
6612         break;
6613       return AttributeCommonInfo::AT_ArmBuiltinAlias;    // "clang::__clang_arm_builtin_alias"
6614     case 'n':    // 1 string to match.
6615       if (memcmp(Name.data()+8, "o_thread_safety_analysis", 24) != 0)
6616         break;
6617       return AttributeCommonInfo::AT_NoThreadSafetyAnalysis;     // "clang::no_thread_safety_analysis"
6618     case 'o':    // 1 string to match.
6619       if (memcmp(Name.data()+8, "bjc_non_runtime_protocol", 24) != 0)
6620         break;
6621       return AttributeCommonInfo::AT_ObjCNonRuntimeProtocol;     // "clang::objc_non_runtime_protocol"
6622     }
6623     break;
6624   case 33:       // 3 strings to match.
6625     if (memcmp(Name.data()+0, "clang::", 7) != 0)
6626       break;
6627     switch (Name[7]) {
6628     default: break;
6629     case 'c':    // 1 string to match.
6630       if (memcmp(Name.data()+8, "oro_disable_lifetimebound", 25) != 0)
6631         break;
6632       return AttributeCommonInfo::AT_CoroDisableLifetimeBound;   // "clang::coro_disable_lifetimebound"
6633     case 'o':    // 1 string to match.
6634       if (memcmp(Name.data()+8, "bjc_returns_inner_pointer", 25) != 0)
6635         break;
6636       return AttributeCommonInfo::AT_ObjCReturnsInnerPointer;    // "clang::objc_returns_inner_pointer"
6637     case 's':    // 1 string to match.
6638       if (memcmp(Name.data()+8, "peculative_load_hardening", 25) != 0)
6639         break;
6640       return AttributeCommonInfo::AT_SpeculativeLoadHardening;   // "clang::speculative_load_hardening"
6641     }
6642     break;
6643   case 34:       // 4 strings to match.
6644     if (memcmp(Name.data()+0, "clang::", 7) != 0)
6645       break;
6646     switch (Name[7]) {
6647     default: break;
6648     case 'e':    // 1 string to match.
6649       if (memcmp(Name.data()+8, "nforce_read_only_placement", 26) != 0)
6650         break;
6651       return AttributeCommonInfo::AT_ReadOnlyPlacement;  // "clang::enforce_read_only_placement"
6652     case 'o':    // 3 strings to match.
6653       switch (Name[8]) {
6654       default: break;
6655       case 'b':  // 2 strings to match.
6656         if (memcmp(Name.data()+9, "jc_", 3) != 0)
6657           break;
6658         switch (Name[12]) {
6659         default: break;
6660         case 'd':        // 1 string to match.
6661           if (memcmp(Name.data()+13, "esignated_initializer", 21) != 0)
6662             break;
6663           return AttributeCommonInfo::AT_ObjCDesignatedInitializer;      // "clang::objc_designated_initializer"
6664         case 's':        // 1 string to match.
6665           if (memcmp(Name.data()+13, "ubclassing_restricted", 21) != 0)
6666             break;
6667           return AttributeCommonInfo::AT_ObjCSubclassingRestricted;      // "clang::objc_subclassing_restricted"
6668         }
6669         break;
6670       case 's':  // 1 string to match.
6671         if (memcmp(Name.data()+9, "_returns_retained_on_zero", 25) != 0)
6672           break;
6673         return AttributeCommonInfo::AT_OSReturnsRetainedOnZero;  // "clang::os_returns_retained_on_zero"
6674       }
6675       break;
6676     }
6677     break;
6678   case 35:       // 2 strings to match.
6679     switch (Name[0]) {
6680     default: break;
6681     case 'c':    // 1 string to match.
6682       if (memcmp(Name.data()+1, "lang::coro_await_elidable_argument", 34) != 0)
6683         break;
6684       return AttributeCommonInfo::AT_CoroAwaitElidableArgument;  // "clang::coro_await_elidable_argument"
6685     case 'g':    // 1 string to match.
6686       if (memcmp(Name.data()+1, "nu::no_profile_instrument_function", 34) != 0)
6687         break;
6688       return AttributeCommonInfo::AT_NoProfileFunction;  // "gnu::no_profile_instrument_function"
6689     }
6690     break;
6691   case 36:       // 1 string to match.
6692     if (memcmp(Name.data()+0, "clang::no_speculative_load_hardening", 36) != 0)
6693       break;
6694     return AttributeCommonInfo::AT_NoSpeculativeLoadHardening;   // "clang::no_speculative_load_hardening"
6695   case 38:       // 3 strings to match.
6696     if (memcmp(Name.data()+0, "clang::", 7) != 0)
6697       break;
6698     switch (Name[7]) {
6699     default: break;
6700     case 'c':    // 1 string to match.
6701       if (memcmp(Name.data()+8, "oro_only_destroy_when_complete", 30) != 0)
6702         break;
6703       return AttributeCommonInfo::AT_CoroOnlyDestroyWhenComplete;        // "clang::coro_only_destroy_when_complete"
6704     case 'o':    // 1 string to match.
6705       if (memcmp(Name.data()+8, "s_returns_retained_on_non_zero", 30) != 0)
6706         break;
6707       return AttributeCommonInfo::AT_OSReturnsRetainedOnNonZero;         // "clang::os_returns_retained_on_non_zero"
6708     case 'r':    // 1 string to match.
6709       if (memcmp(Name.data()+8, "equire_explicit_initialization", 30) != 0)
6710         break;
6711       return AttributeCommonInfo::AT_ExplicitInit;       // "clang::require_explicit_initialization"
6712     }
6713     break;
6714   case 40:       // 1 string to match.
6715     if (memcmp(Name.data()+0, "clang::disable_sanitizer_instrumentation", 40) != 0)
6716       break;
6717     return AttributeCommonInfo::AT_DisableSanitizerInstrumentation;      // "clang::disable_sanitizer_instrumentation"
6718   case 41:       // 1 string to match.
6719     if (memcmp(Name.data()+0, "clang::objc_requires_property_definitions", 41) != 0)
6720       break;
6721     return AttributeCommonInfo::AT_ObjCRequiresPropertyDefs;     // "clang::objc_requires_property_definitions"
6722   case 42:       // 3 strings to match.
6723     if (memcmp(Name.data()+0, "clang::", 7) != 0)
6724       break;
6725     switch (Name[7]) {
6726     default: break;
6727     case '_':    // 1 string to match.
6728       if (memcmp(Name.data()+8, "_clang_arm_mve_strict_polymorphism", 34) != 0)
6729         break;
6730       return AttributeCommonInfo::AT_ArmMveStrictPolymorphism;   // "clang::__clang_arm_mve_strict_polymorphism"
6731     case 'e':    // 1 string to match.
6732       if (memcmp(Name.data()+8, "xclude_from_explicit_instantiation", 34) != 0)
6733         break;
6734       return AttributeCommonInfo::AT_ExcludeFromExplicitInstantiation;   // "clang::exclude_from_explicit_instantiation"
6735     case 'o':    // 1 string to match.
6736       if (memcmp(Name.data()+8, "bjc_arc_weak_reference_unavailable", 34) != 0)
6737         break;
6738       return AttributeCommonInfo::AT_ArcWeakrefUnavailable;      // "clang::objc_arc_weak_reference_unavailable"
6739     }
6740     break;
6741   case 44:       // 1 string to match.
6742     if (memcmp(Name.data()+0, "clang::available_only_in_default_eval_method", 44) != 0)
6743       break;
6744     return AttributeCommonInfo::AT_AvailableOnlyInDefaultEvalMethod;     // "clang::available_only_in_default_eval_method"
6745   case 53:       // 1 string to match.
6746     if (memcmp(Name.data()+0, "clang::objc_protocol_requires_explicit_implementation", 53) != 0)
6747       break;
6748     return AttributeCommonInfo::AT_ObjCExplicitProtocolImpl;     // "clang::objc_protocol_requires_explicit_implementation"
6749   }
6750   } else if (AttributeCommonInfo::AS_Keyword == Syntax || AttributeCommonInfo::AS_ContextSensitiveKeyword == Syntax) {
6751   switch (Name.size()) {
6752   default: break;
6753   case 2:        // 1 string to match.
6754     if (memcmp(Name.data()+0, "in", 2) != 0)
6755       break;
6756     return AttributeCommonInfo::AT_HLSLParamModifier;    // "in"
6757   case 3:        // 1 string to match.
6758     if (memcmp(Name.data()+0, "out", 3) != 0)
6759       break;
6760     return AttributeCommonInfo::AT_HLSLParamModifier;    // "out"
6761   case 5:        // 3 strings to match.
6762     switch (Name[0]) {
6763     default: break;
6764     case '_':    // 1 string to match.
6765       if (memcmp(Name.data()+1, "_w64", 4) != 0)
6766         break;
6767       return AttributeCommonInfo::IgnoredAttribute;      // "__w64"
6768     case 'i':    // 1 string to match.
6769       if (memcmp(Name.data()+1, "nout", 4) != 0)
6770         break;
6771       return AttributeCommonInfo::AT_HLSLParamModifier;  // "inout"
6772     case 'l':    // 1 string to match.
6773       if (memcmp(Name.data()+1, "ocal", 4) != 0)
6774         break;
6775       return AttributeCommonInfo::AT_OpenCLLocalAddressSpace;    // "local"
6776     }
6777     break;
6778   case 6:        // 5 strings to match.
6779     switch (Name[0]) {
6780     default: break;
6781     case '_':    // 3 strings to match.
6782       switch (Name[1]) {
6783       default: break;
6784       case '_':  // 2 strings to match.
6785         switch (Name[2]) {
6786         default: break;
6787         case 's':        // 1 string to match.
6788           if (memcmp(Name.data()+3, "ptr", 3) != 0)
6789             break;
6790           return AttributeCommonInfo::AT_SPtr;   // "__sptr"
6791         case 'u':        // 1 string to match.
6792           if (memcmp(Name.data()+3, "ptr", 3) != 0)
6793             break;
6794           return AttributeCommonInfo::AT_UPtr;   // "__uptr"
6795         }
6796         break;
6797       case 'c':  // 1 string to match.
6798         if (memcmp(Name.data()+2, "decl", 4) != 0)
6799           break;
6800         return AttributeCommonInfo::AT_CDecl;    // "_cdecl"
6801       }
6802       break;
6803     case 'g':    // 1 string to match.
6804       if (memcmp(Name.data()+1, "lobal", 5) != 0)
6805         break;
6806       return AttributeCommonInfo::AT_OpenCLGlobalAddressSpace;   // "global"
6807     case 'k':    // 1 string to match.
6808       if (memcmp(Name.data()+1, "ernel", 5) != 0)
6809         break;
6810       return AttributeCommonInfo::AT_OpenCLKernel;       // "kernel"
6811     }
6812     break;
6813   case 7:        // 8 strings to match.
6814     switch (Name[0]) {
6815     default: break;
6816     case '_':    // 5 strings to match.
6817       switch (Name[1]) {
6818       default: break;
6819       case '_':  // 4 strings to match.
6820         switch (Name[2]) {
6821         default: break;
6822         case 'c':        // 1 string to match.
6823           if (memcmp(Name.data()+3, "decl", 4) != 0)
6824             break;
6825           return AttributeCommonInfo::AT_CDecl;  // "__cdecl"
6826         case 'l':        // 1 string to match.
6827           if (memcmp(Name.data()+3, "ocal", 4) != 0)
6828             break;
6829           return AttributeCommonInfo::AT_OpenCLLocalAddressSpace;        // "__local"
6830         case 'p':        // 2 strings to match.
6831           if (memcmp(Name.data()+3, "tr", 2) != 0)
6832             break;
6833           switch (Name[5]) {
6834           default: break;
6835           case '3':      // 1 string to match.
6836             if (Name[6] != '2')
6837               break;
6838             return AttributeCommonInfo::AT_Ptr32;        // "__ptr32"
6839           case '6':      // 1 string to match.
6840             if (Name[6] != '4')
6841               break;
6842             return AttributeCommonInfo::AT_Ptr64;        // "__ptr64"
6843           }
6844           break;
6845         }
6846         break;
6847       case 'p':  // 1 string to match.
6848         if (memcmp(Name.data()+2, "ascal", 5) != 0)
6849           break;
6850         return AttributeCommonInfo::AT_Pascal;   // "_pascal"
6851       }
6852       break;
6853     case 'a':    // 1 string to match.
6854       if (memcmp(Name.data()+1, "lignas", 6) != 0)
6855         break;
6856       return AttributeCommonInfo::AT_Aligned;    // "alignas"
6857     case 'g':    // 1 string to match.
6858       if (memcmp(Name.data()+1, "eneric", 6) != 0)
6859         break;
6860       return AttributeCommonInfo::AT_OpenCLGenericAddressSpace;  // "generic"
6861     case 'p':    // 1 string to match.
6862       if (memcmp(Name.data()+1, "rivate", 6) != 0)
6863         break;
6864       return AttributeCommonInfo::AT_OpenCLPrivateAddressSpace;  // "private"
6865     }
6866     break;
6867   case 8:        // 9 strings to match.
6868     switch (Name[0]) {
6869     default: break;
6870     case '_':    // 8 strings to match.
6871       switch (Name[1]) {
6872       default: break;
6873       case 'A':  // 1 string to match.
6874         if (memcmp(Name.data()+2, "lignas", 6) != 0)
6875           break;
6876         return AttributeCommonInfo::AT_Aligned;  // "_Alignas"
6877       case 'N':  // 1 string to match.
6878         if (memcmp(Name.data()+2, "onnull", 6) != 0)
6879           break;
6880         return AttributeCommonInfo::AT_TypeNonNull;      // "_Nonnull"
6881       case '_':  // 5 strings to match.
6882         switch (Name[2]) {
6883         default: break;
6884         case 'a':        // 1 string to match.
6885           if (memcmp(Name.data()+3, "rm_in", 5) != 0)
6886             break;
6887           return AttributeCommonInfo::AT_ArmIn;  // "__arm_in"
6888         case 'g':        // 1 string to match.
6889           if (memcmp(Name.data()+3, "lobal", 5) != 0)
6890             break;
6891           return AttributeCommonInfo::AT_OpenCLGlobalAddressSpace;       // "__global"
6892         case 'k':        // 2 strings to match.
6893           switch (Name[3]) {
6894           default: break;
6895           case 'e':      // 1 string to match.
6896             if (memcmp(Name.data()+4, "rnel", 4) != 0)
6897               break;
6898             return AttributeCommonInfo::AT_OpenCLKernel;         // "__kernel"
6899           case 'i':      // 1 string to match.
6900             if (memcmp(Name.data()+4, "ndof", 4) != 0)
6901               break;
6902             return AttributeCommonInfo::AT_ObjCKindOf;   // "__kindof"
6903           }
6904           break;
6905         case 'p':        // 1 string to match.
6906           if (memcmp(Name.data()+3, "ascal", 5) != 0)
6907             break;
6908           return AttributeCommonInfo::AT_Pascal;         // "__pascal"
6909         }
6910         break;
6911       case 's':  // 1 string to match.
6912         if (memcmp(Name.data()+2, "tdcall", 6) != 0)
6913           break;
6914         return AttributeCommonInfo::AT_StdCall;  // "_stdcall"
6915       }
6916       break;
6917     case 'c':    // 1 string to match.
6918       if (memcmp(Name.data()+1, "onstant", 7) != 0)
6919         break;
6920       return AttributeCommonInfo::AT_OpenCLConstantAddressSpace;         // "constant"
6921     }
6922     break;
6923   case 9:        // 12 strings to match.
6924     switch (Name[0]) {
6925     default: break;
6926     case '_':    // 10 strings to match.
6927       switch (Name[1]) {
6928       default: break;
6929       case 'N':  // 1 string to match.
6930         if (memcmp(Name.data()+2, "ullable", 7) != 0)
6931           break;
6932         return AttributeCommonInfo::AT_TypeNullable;     // "_Nullable"
6933       case '_':  // 7 strings to match.
6934         switch (Name[2]) {
6935         default: break;
6936         case 'a':        // 2 strings to match.
6937           if (memcmp(Name.data()+3, "rm_", 3) != 0)
6938             break;
6939           switch (Name[6]) {
6940           default: break;
6941           case 'n':      // 1 string to match.
6942             if (memcmp(Name.data()+7, "ew", 2) != 0)
6943               break;
6944             return AttributeCommonInfo::AT_ArmNew;       // "__arm_new"
6945           case 'o':      // 1 string to match.
6946             if (memcmp(Name.data()+7, "ut", 2) != 0)
6947               break;
6948             return AttributeCommonInfo::AT_ArmOut;       // "__arm_out"
6949           }
6950           break;
6951         case 'f':        // 1 string to match.
6952           if (memcmp(Name.data()+3, "uncref", 6) != 0)
6953             break;
6954           return AttributeCommonInfo::AT_WebAssemblyFuncref;     // "__funcref"
6955         case 'g':        // 1 string to match.
6956           if (memcmp(Name.data()+3, "eneric", 6) != 0)
6957             break;
6958           return AttributeCommonInfo::AT_OpenCLGenericAddressSpace;      // "__generic"
6959         case 'p':        // 1 string to match.
6960           if (memcmp(Name.data()+3, "rivate", 6) != 0)
6961             break;
6962           return AttributeCommonInfo::AT_OpenCLPrivateAddressSpace;      // "__private"
6963         case 'r':        // 1 string to match.
6964           if (memcmp(Name.data()+3, "egcall", 6) != 0)
6965             break;
6966           return AttributeCommonInfo::AT_RegCall;        // "__regcall"
6967         case 's':        // 1 string to match.
6968           if (memcmp(Name.data()+3, "tdcall", 6) != 0)
6969             break;
6970           return AttributeCommonInfo::AT_StdCall;        // "__stdcall"
6971         }
6972         break;
6973       case 'f':  // 1 string to match.
6974         if (memcmp(Name.data()+2, "astcall", 7) != 0)
6975           break;
6976         return AttributeCommonInfo::AT_FastCall;         // "_fastcall"
6977       case 't':  // 1 string to match.
6978         if (memcmp(Name.data()+2, "hiscall", 7) != 0)
6979           break;
6980         return AttributeCommonInfo::AT_ThisCall;         // "_thiscall"
6981       }
6982       break;
6983     case 'c':    // 1 string to match.
6984       if (memcmp(Name.data()+1, "onstinit", 8) != 0)
6985         break;
6986       return AttributeCommonInfo::AT_ConstInit;  // "constinit"
6987     case 'r':    // 1 string to match.
6988       if (memcmp(Name.data()+1, "ead_only", 8) != 0)
6989         break;
6990       return AttributeCommonInfo::AT_OpenCLAccess;       // "read_only"
6991     }
6992     break;
6993   case 10:       // 5 strings to match.
6994     switch (Name[0]) {
6995     default: break;
6996     case '_':    // 3 strings to match.
6997       if (Name[1] != '_')
6998         break;
6999       switch (Name[2]) {
7000       default: break;
7001       case 'c':  // 1 string to match.
7002         if (memcmp(Name.data()+3, "onstant", 7) != 0)
7003           break;
7004         return AttributeCommonInfo::AT_OpenCLConstantAddressSpace;       // "__constant"
7005       case 'f':  // 1 string to match.
7006         if (memcmp(Name.data()+3, "astcall", 7) != 0)
7007           break;
7008         return AttributeCommonInfo::AT_FastCall;         // "__fastcall"
7009       case 't':  // 1 string to match.
7010         if (memcmp(Name.data()+3, "hiscall", 7) != 0)
7011           break;
7012         return AttributeCommonInfo::AT_ThisCall;         // "__thiscall"
7013       }
7014       break;
7015     case 'r':    // 1 string to match.
7016       if (memcmp(Name.data()+1, "ead_write", 9) != 0)
7017         break;
7018       return AttributeCommonInfo::AT_OpenCLAccess;       // "read_write"
7019     case 'w':    // 1 string to match.
7020       if (memcmp(Name.data()+1, "rite_only", 9) != 0)
7021         break;
7022       return AttributeCommonInfo::AT_OpenCLAccess;       // "write_only"
7023     }
7024     break;
7025   case 11:       // 4 strings to match.
7026     switch (Name[0]) {
7027     default: break;
7028     case '_':    // 3 strings to match.
7029       switch (Name[1]) {
7030       default: break;
7031       case '_':  // 2 strings to match.
7032         switch (Name[2]) {
7033         default: break;
7034         case 'a':        // 1 string to match.
7035           if (memcmp(Name.data()+3, "rm_inout", 8) != 0)
7036             break;
7037           return AttributeCommonInfo::AT_ArmInOut;       // "__arm_inout"
7038         case 'r':        // 1 string to match.
7039           if (memcmp(Name.data()+3, "ead_only", 8) != 0)
7040             break;
7041           return AttributeCommonInfo::AT_OpenCLAccess;   // "__read_only"
7042         }
7043         break;
7044       case 'v':  // 1 string to match.
7045         if (memcmp(Name.data()+2, "ectorcall", 9) != 0)
7046           break;
7047         return AttributeCommonInfo::AT_VectorCall;       // "_vectorcall"
7048       }
7049       break;
7050     case 'g':    // 1 string to match.
7051       if (memcmp(Name.data()+1, "roupshared", 10) != 0)
7052         break;
7053       return AttributeCommonInfo::AT_HLSLGroupSharedAddressSpace;        // "groupshared"
7054     }
7055     break;
7056   case 12:       // 4 strings to match.
7057     if (memcmp(Name.data()+0, "__", 2) != 0)
7058       break;
7059     switch (Name[2]) {
7060     default: break;
7061     case 'n':    // 1 string to match.
7062       if (memcmp(Name.data()+3, "oinline__", 9) != 0)
7063         break;
7064       return AttributeCommonInfo::AT_NoInline;   // "__noinline__"
7065     case 'r':    // 1 string to match.
7066       if (memcmp(Name.data()+3, "ead_write", 9) != 0)
7067         break;
7068       return AttributeCommonInfo::AT_OpenCLAccess;       // "__read_write"
7069     case 'v':    // 1 string to match.
7070       if (memcmp(Name.data()+3, "ectorcall", 9) != 0)
7071         break;
7072       return AttributeCommonInfo::AT_VectorCall;         // "__vectorcall"
7073     case 'w':    // 1 string to match.
7074       if (memcmp(Name.data()+3, "rite_only", 9) != 0)
7075         break;
7076       return AttributeCommonInfo::AT_OpenCLAccess;       // "__write_only"
7077     }
7078     break;
7079   case 13:       // 1 string to match.
7080     if (memcmp(Name.data()+0, "__forceinline", 13) != 0)
7081       break;
7082     return AttributeCommonInfo::AT_AlwaysInline;         // "__forceinline"
7083   case 14:       // 1 string to match.
7084     if (memcmp(Name.data()+0, "__arm_agnostic", 14) != 0)
7085       break;
7086     return AttributeCommonInfo::AT_ArmAgnostic;  // "__arm_agnostic"
7087   case 15:       // 2 strings to match.
7088     if (memcmp(Name.data()+0, "__arm_", 6) != 0)
7089       break;
7090     switch (Name[6]) {
7091     default: break;
7092     case 'p':    // 1 string to match.
7093       if (memcmp(Name.data()+7, "reserves", 8) != 0)
7094         break;
7095       return AttributeCommonInfo::AT_ArmPreserves;       // "__arm_preserves"
7096     case 's':    // 1 string to match.
7097       if (memcmp(Name.data()+7, "treaming", 8) != 0)
7098         break;
7099       return AttributeCommonInfo::AT_ArmStreaming;       // "__arm_streaming"
7100     }
7101     break;
7102   case 16:       // 1 string to match.
7103     if (memcmp(Name.data()+0, "_Nullable_result", 16) != 0)
7104       break;
7105     return AttributeCommonInfo::AT_TypeNullableResult;   // "_Nullable_result"
7106   case 17:       // 1 string to match.
7107     if (memcmp(Name.data()+0, "_Null_unspecified", 17) != 0)
7108       break;
7109     return AttributeCommonInfo::AT_TypeNullUnspecified;  // "_Null_unspecified"
7110   case 19:       // 1 string to match.
7111     if (memcmp(Name.data()+0, "__unsafe_unretained", 19) != 0)
7112       break;
7113     return AttributeCommonInfo::AT_ObjCInertUnsafeUnretained;    // "__unsafe_unretained"
7114   case 20:       // 1 string to match.
7115     if (memcmp(Name.data()+0, "__single_inheritance", 20) != 0)
7116       break;
7117     return AttributeCommonInfo::AT_MSInheritance;        // "__single_inheritance"
7118   case 21:       // 1 string to match.
7119     if (memcmp(Name.data()+0, "__virtual_inheritance", 21) != 0)
7120       break;
7121     return AttributeCommonInfo::AT_MSInheritance;        // "__virtual_inheritance"
7122   case 22:       // 1 string to match.
7123     if (memcmp(Name.data()+0, "__multiple_inheritance", 22) != 0)
7124       break;
7125     return AttributeCommonInfo::AT_MSInheritance;        // "__multiple_inheritance"
7126   case 23:       // 1 string to match.
7127     if (memcmp(Name.data()+0, "__arm_locally_streaming", 23) != 0)
7128       break;
7129     return AttributeCommonInfo::AT_ArmLocallyStreaming;  // "__arm_locally_streaming"
7130   case 25:       // 1 string to match.
7131     if (memcmp(Name.data()+0, "__unspecified_inheritance", 25) != 0)
7132       break;
7133     return AttributeCommonInfo::AT_MSInheritance;        // "__unspecified_inheritance"
7134   case 26:       // 1 string to match.
7135     if (memcmp(Name.data()+0, "__arm_streaming_compatible", 26) != 0)
7136       break;
7137     return AttributeCommonInfo::AT_ArmStreamingCompatible;       // "__arm_streaming_compatible"
7138   }
7139   } else if (AttributeCommonInfo::AS_Pragma == Syntax) {
7140   switch (Name.size()) {
7141   default: break;
7142   case 4:        // 1 string to match.
7143     if (memcmp(Name.data()+0, "loop", 4) != 0)
7144       break;
7145     return AttributeCommonInfo::AT_LoopHint;     // "loop"
7146   case 6:        // 1 string to match.
7147     if (memcmp(Name.data()+0, "unroll", 6) != 0)
7148       break;
7149     return AttributeCommonInfo::AT_LoopHint;     // "unroll"
7150   case 8:        // 1 string to match.
7151     if (memcmp(Name.data()+0, "nounroll", 8) != 0)
7152       break;
7153     return AttributeCommonInfo::AT_LoopHint;     // "nounroll"
7154   case 14:       // 1 string to match.
7155     if (memcmp(Name.data()+0, "unroll_and_jam", 14) != 0)
7156       break;
7157     return AttributeCommonInfo::AT_LoopHint;     // "unroll_and_jam"
7158   case 16:       // 1 string to match.
7159     if (memcmp(Name.data()+0, "nounroll_and_jam", 16) != 0)
7160       break;
7161     return AttributeCommonInfo::AT_LoopHint;     // "nounroll_and_jam"
7162   }
7163   } else if (AttributeCommonInfo::AS_HLSLAnnotation == Syntax) {
7164   switch (Name.size()) {
7165   default: break;
7166   case 8:        // 1 string to match.
7167     if (memcmp(Name.data()+0, "register", 8) != 0)
7168       break;
7169     return AttributeCommonInfo::AT_HLSLResourceBinding;  // "register"
7170   case 10:       // 2 strings to match.
7171     switch (Name[0]) {
7172     default: break;
7173     case 'S':    // 1 string to match.
7174       if (memcmp(Name.data()+1, "V_GroupID", 9) != 0)
7175         break;
7176       return AttributeCommonInfo::AT_HLSLSV_GroupID;     // "SV_GroupID"
7177     case 'p':    // 1 string to match.
7178       if (memcmp(Name.data()+1, "ackoffset", 9) != 0)
7179         break;
7180       return AttributeCommonInfo::AT_HLSLPackOffset;     // "packoffset"
7181     }
7182     break;
7183   case 13:       // 1 string to match.
7184     if (memcmp(Name.data()+0, "SV_GroupIndex", 13) != 0)
7185       break;
7186     return AttributeCommonInfo::AT_HLSLSV_GroupIndex;    // "SV_GroupIndex"
7187   case 16:       // 1 string to match.
7188     if (memcmp(Name.data()+0, "SV_GroupThreadID", 16) != 0)
7189       break;
7190     return AttributeCommonInfo::AT_HLSLSV_GroupThreadID;         // "SV_GroupThreadID"
7191   case 19:       // 1 string to match.
7192     if (memcmp(Name.data()+0, "SV_DispatchThreadID", 19) != 0)
7193       break;
7194     return AttributeCommonInfo::AT_HLSLSV_DispatchThreadID;      // "SV_DispatchThreadID"
7195   }
7196   }
7197   return AttributeCommonInfo::UnknownAttribute;
7198 }