LCOV - code coverage report
Current view: top level - build-llvm/tools/clang/include/clang/Sema - AttrParsedAttrKinds.inc (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 820 1091 75.2 %
Date: 2018-06-17 00:07:59 Functions: 1 1 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
       2             : |*                                                                            *|
       3             : |* Attribute name matcher                                                     *|
       4             : |*                                                                            *|
       5             : |* Automatically generated file, do not edit!                                 *|
       6             : |*                                                                            *|
       7             : \*===----------------------------------------------------------------------===*/
       8             : 
       9     3528511 : static AttributeList::Kind getAttrKind(StringRef Name, AttributeList::Syntax Syntax) {
      10     3528511 :   if (AttributeList::AS_GNU == Syntax) {
      11     3480383 :   switch (Name.size()) {
      12             :   default: break;
      13          91 :   case 3:        // 3 strings to match.
      14          91 :     switch (Name[0]) {
      15             :     default: break;
      16             :     case 'f':    // 1 string to match.
      17          14 :       if (memcmp(Name.data()+1, "ar", 2) != 0)
      18             :         break;
      19             :       return AttributeList::AT_MipsLongCall;     // "far"
      20             :     case 'h':    // 1 string to match.
      21           4 :       if (memcmp(Name.data()+1, "ot", 2) != 0)
      22             :         break;
      23             :       return AttributeList::AT_Hot;      // "hot"
      24             :     case 'p':    // 1 string to match.
      25          73 :       if (memcmp(Name.data()+1, "cs", 2) != 0)
      26             :         break;
      27             :       return AttributeList::AT_Pcs;      // "pcs"
      28             :     }
      29             :     break;
      30       32326 :   case 4:        // 7 strings to match.
      31       32326 :     switch (Name[0]) {
      32             :     default: break;
      33             :     case 'c':    // 1 string to match.
      34          27 :       if (memcmp(Name.data()+1, "old", 3) != 0)
      35             :         break;
      36             :       return AttributeList::AT_Cold;     // "cold"
      37             :     case 'h':    // 1 string to match.
      38         463 :       if (memcmp(Name.data()+1, "ost", 3) != 0)
      39             :         break;
      40             :       return AttributeList::AT_CUDAHost;         // "host"
      41             :     case 'm':    // 1 string to match.
      42        9102 :       if (memcmp(Name.data()+1, "ode", 3) != 0)
      43             :         break;
      44             :       return AttributeList::AT_Mode;     // "mode"
      45             :     case 'n':    // 1 string to match.
      46          14 :       if (memcmp(Name.data()+1, "ear", 3) != 0)
      47             :         break;
      48             :       return AttributeList::AT_MipsShortCall;    // "near"
      49             :     case 'p':    // 1 string to match.
      50       21567 :       if (memcmp(Name.data()+1, "ure", 3) != 0)
      51             :         break;
      52             :       return AttributeList::AT_Pure;     // "pure"
      53             :     case 'u':    // 1 string to match.
      54         102 :       if (memcmp(Name.data()+1, "sed", 3) != 0)
      55             :         break;
      56             :       return AttributeList::AT_Used;     // "used"
      57             :     case 'w':    // 1 string to match.
      58        1050 :       if (memcmp(Name.data()+1, "eak", 3) != 0)
      59             :         break;
      60             :       return AttributeList::AT_Weak;     // "weak"
      61             :     }
      62             :     break;
      63      199529 :   case 5:        // 6 strings to match.
      64      199529 :     switch (Name[0]) {
      65             :     default: break;
      66             :     case 'a':    // 1 string to match.
      67         188 :       if (memcmp(Name.data()+1, "lias", 4) != 0)
      68             :         break;
      69             :       return AttributeList::AT_Alias;    // "alias"
      70      199285 :     case 'c':    // 2 strings to match.
      71      199285 :       switch (Name[1]) {
      72             :       default: break;
      73             :       case 'd':  // 1 string to match.
      74          97 :         if (memcmp(Name.data()+2, "ecl", 3) != 0)
      75             :           break;
      76             :         return AttributeList::AT_CDecl;  // "cdecl"
      77             :       case 'o':  // 1 string to match.
      78      199188 :         if (memcmp(Name.data()+2, "nst", 3) != 0)
      79             :           break;
      80             :         return AttributeList::AT_Const;  // "const"
      81             :       }
      82             :       break;
      83             :     case 'i':    // 1 string to match.
      84          26 :       if (memcmp(Name.data()+1, "func", 4) != 0)
      85             :         break;
      86             :       return AttributeList::AT_IFunc;    // "ifunc"
      87          30 :     case 'n':    // 2 strings to match.
      88          30 :       switch (Name[1]) {
      89             :       default: break;
      90             :       case 'a':  // 1 string to match.
      91          25 :         if (memcmp(Name.data()+2, "ked", 3) != 0)
      92             :           break;
      93             :         return AttributeList::AT_Naked;  // "naked"
      94             :       case 'o':  // 1 string to match.
      95           5 :         if (memcmp(Name.data()+2, "svm", 3) != 0)
      96             :           break;
      97             :         return AttributeList::AT_OpenCLNoSVM;    // "nosvm"
      98             :       }
      99             :       break;
     100             :     }
     101             :     break;
     102     1055694 :   case 6:        // 15 strings to match.
     103     1055694 :     switch (Name[0]) {
     104             :     default: break;
     105             :     case 'b':    // 1 string to match.
     106        1092 :       if (memcmp(Name.data()+1, "locks", 5) != 0)
     107             :         break;
     108             :       return AttributeList::AT_Blocks;   // "blocks"
     109             :     case 'c':    // 1 string to match.
     110           9 :       if (memcmp(Name.data()+1, "ommon", 5) != 0)
     111             :         break;
     112             :       return AttributeList::AT_Common;   // "common"
     113             :     case 'd':    // 1 string to match.
     114        1148 :       if (memcmp(Name.data()+1, "evice", 5) != 0)
     115             :         break;
     116             :       return AttributeList::AT_CUDADevice;       // "device"
     117             :     case 'f':    // 1 string to match.
     118       53067 :       if (memcmp(Name.data()+1, "ormat", 5) != 0)
     119             :         break;
     120             :       return AttributeList::AT_Format;   // "format"
     121             :     case 'g':    // 1 string to match.
     122         154 :       if (memcmp(Name.data()+1, "lobal", 5) != 0)
     123             :         break;
     124             :       return AttributeList::AT_CUDAGlobal;       // "global"
     125             :     case 'k':    // 1 string to match.
     126           4 :       if (memcmp(Name.data()+1, "ernel", 5) != 0)
     127             :         break;
     128             :       return AttributeList::AT_RenderScriptKernel;       // "kernel"
     129        4489 :     case 'm':    // 3 strings to match.
     130        4489 :       switch (Name[1]) {
     131             :       default: break;
     132             :       case 'a':  // 1 string to match.
     133        4436 :         if (memcmp(Name.data()+2, "lloc", 4) != 0)
     134             :           break;
     135             :         return AttributeList::AT_Restrict;       // "malloc"
     136             :       case 'i':  // 1 string to match.
     137          17 :         if (memcmp(Name.data()+2, "ps16", 4) != 0)
     138             :           break;
     139             :         return AttributeList::AT_Mips16;         // "mips16"
     140             :       case 's':  // 1 string to match.
     141          36 :         if (memcmp(Name.data()+2, "_abi", 4) != 0)
     142             :           break;
     143             :         return AttributeList::AT_MSABI;  // "ms_abi"
     144             :       }
     145             :       break;
     146        5223 :     case 'p':    // 2 strings to match.
     147        5223 :       if (Name[1] != 'a')
     148             :         break;
     149        5223 :       switch (Name[2]) {
     150             :       default: break;
     151             :       case 'c':  // 1 string to match.
     152        5222 :         if (memcmp(Name.data()+3, "ked", 3) != 0)
     153             :           break;
     154             :         return AttributeList::AT_Packed;         // "packed"
     155             :       case 's':  // 1 string to match.
     156           1 :         if (memcmp(Name.data()+3, "cal", 3) != 0)
     157             :           break;
     158             :         return AttributeList::AT_Pascal;         // "pascal"
     159             :       }
     160             :       break;
     161         212 :     case 's':    // 2 strings to match.
     162         212 :       switch (Name[1]) {
     163             :       default: break;
     164             :       case 'h':  // 1 string to match.
     165         206 :         if (memcmp(Name.data()+2, "ared", 4) != 0)
     166             :           break;
     167             :         return AttributeList::AT_CUDAShared;     // "shared"
     168             :       case 'i':  // 1 string to match.
     169           5 :         if (memcmp(Name.data()+2, "gnal", 4) != 0)
     170             :           break;
     171             :         return AttributeList::AT_AVRSignal;      // "signal"
     172             :       }
     173             :       break;
     174             :     case 't':    // 1 string to match.
     175      987784 :       if (memcmp(Name.data()+1, "arget", 5) != 0)
     176             :         break;
     177             :       return AttributeList::AT_Target;   // "target"
     178             :     case 'u':    // 1 string to match.
     179        2506 :       if (memcmp(Name.data()+1, "nused", 5) != 0)
     180             :         break;
     181             :       return AttributeList::AT_Unused;   // "unused"
     182             :     }
     183             :     break;
     184      981245 :   case 7:        // 18 strings to match.
     185      981245 :     switch (Name[0]) {
     186             :     default: break;
     187             :     case '_':    // 1 string to match.
     188           5 :       if (memcmp(Name.data()+1, "_const", 6) != 0)
     189             :         break;
     190             :       return AttributeList::AT_Const;    // "__const"
     191       17160 :     case 'a':    // 2 strings to match.
     192       17160 :       switch (Name[1]) {
     193             :       default: break;
     194             :       case 'b':  // 1 string to match.
     195        7466 :         if (memcmp(Name.data()+2, "i_tag", 5) != 0)
     196             :           break;
     197             :         return AttributeList::AT_AbiTag;         // "abi_tag"
     198             :       case 'l':  // 1 string to match.
     199        9694 :         if (memcmp(Name.data()+2, "igned", 5) != 0)
     200             :           break;
     201             :         return AttributeList::AT_Aligned;        // "aligned"
     202             :       }
     203             :       break;
     204             :     case 'b':    // 1 string to match.
     205          12 :       if (memcmp(Name.data()+1, "ounded", 6) != 0)
     206             :         break;
     207             :       return AttributeList::IgnoredAttribute;    // "bounded"
     208             :     case 'c':    // 1 string to match.
     209         114 :       if (memcmp(Name.data()+1, "leanup", 6) != 0)
     210             :         break;
     211             :       return AttributeList::AT_Cleanup;  // "cleanup"
     212             :     case 'f':    // 1 string to match.
     213          10 :       if (memcmp(Name.data()+1, "latten", 6) != 0)
     214             :         break;
     215             :       return AttributeList::AT_Flatten;  // "flatten"
     216             :     case 'm':    // 1 string to match.
     217          25 :       if (memcmp(Name.data()+1, "insize", 6) != 0)
     218             :         break;
     219             :       return AttributeList::AT_MinSize;  // "minsize"
     220      939273 :     case 'n':    // 4 strings to match.
     221      939273 :       switch (Name[1]) {
     222             :       default: break;
     223      939267 :       case 'o':  // 3 strings to match.
     224      939267 :         switch (Name[2]) {
     225             :         default: break;
     226             :         case 'd':        // 1 string to match.
     227      663967 :           if (memcmp(Name.data()+3, "ebug", 4) != 0)
     228             :             break;
     229             :           return AttributeList::AT_NoDebug;      // "nodebug"
     230             :         case 'n':        // 1 string to match.
     231      245326 :           if (memcmp(Name.data()+3, "null", 4) != 0)
     232             :             break;
     233             :           return AttributeList::AT_NonNull;      // "nonnull"
     234             :         case 't':        // 1 string to match.
     235       29974 :           if (memcmp(Name.data()+3, "hrow", 4) != 0)
     236             :             break;
     237             :           return AttributeList::AT_NoThrow;      // "nothrow"
     238             :         }
     239             :         break;
     240             :       case 'v':  // 1 string to match.
     241           6 :         if (memcmp(Name.data()+2, "_weak", 5) != 0)
     242             :           break;
     243             :         return AttributeList::IgnoredAttribute;  // "nv_weak"
     244             :       }
     245             :       break;
     246         671 :     case 'o':    // 2 strings to match.
     247         671 :       switch (Name[1]) {
     248             :       default: break;
     249             :       case 'b':  // 1 string to match.
     250         607 :         if (memcmp(Name.data()+2, "jc_gc", 5) != 0)
     251             :           break;
     252             :         return AttributeList::AT_ObjCGC;         // "objc_gc"
     253             :       case 'p':  // 1 string to match.
     254          64 :         if (memcmp(Name.data()+2, "tnone", 5) != 0)
     255             :           break;
     256             :         return AttributeList::AT_OptimizeNone;   // "optnone"
     257             :       }
     258             :       break;
     259             :     case 'r':    // 2 strings to match.
     260         165 :       if (memcmp(Name.data()+1, "eg", 2) != 0)
     261             :         break;
     262         165 :       switch (Name[3]) {
     263             :       default: break;
     264             :       case 'c':  // 1 string to match.
     265          11 :         if (memcmp(Name.data()+4, "all", 3) != 0)
     266             :           break;
     267             :         return AttributeList::AT_RegCall;        // "regcall"
     268             :       case 'p':  // 1 string to match.
     269         154 :         if (memcmp(Name.data()+4, "arm", 3) != 0)
     270             :           break;
     271             :         return AttributeList::AT_Regparm;        // "regparm"
     272             :       }
     273             :       break;
     274         229 :     case 's':    // 2 strings to match.
     275         229 :       switch (Name[1]) {
     276             :       default: break;
     277             :       case 'e':  // 1 string to match.
     278         122 :         if (memcmp(Name.data()+2, "ction", 5) != 0)
     279             :           break;
     280             :         return AttributeList::AT_Section;        // "section"
     281             :       case 't':  // 1 string to match.
     282         107 :         if (memcmp(Name.data()+2, "dcall", 5) != 0)
     283             :           break;
     284             :         return AttributeList::AT_StdCall;        // "stdcall"
     285             :       }
     286             :       break;
     287             :     case 'w':    // 1 string to match.
     288       23581 :       if (memcmp(Name.data()+1, "eakref", 6) != 0)
     289             :         break;
     290             :       return AttributeList::AT_WeakRef;  // "weakref"
     291             :     }
     292             :     break;
     293       16107 :   case 8:        // 15 strings to match.
     294       16107 :     switch (Name[0]) {
     295             :     default: break;
     296             :     case 'N':    // 1 string to match.
     297          17 :       if (memcmp(Name.data()+1, "SObject", 7) != 0)
     298             :         break;
     299             :       return AttributeList::AT_ObjCNSObject;     // "NSObject"
     300             :     case 'a':    // 1 string to match.
     301         486 :       if (memcmp(Name.data()+1, "nnotate", 7) != 0)
     302             :         break;
     303             :       return AttributeList::AT_Annotate;         // "annotate"
     304             :     case 'c':    // 1 string to match.
     305         118 :       if (memcmp(Name.data()+1, "onstant", 7) != 0)
     306             :         break;
     307             :       return AttributeList::AT_CUDAConstant;     // "constant"
     308             :     case 'f':    // 1 string to match.
     309          93 :       if (memcmp(Name.data()+1, "astcall", 7) != 0)
     310             :         break;
     311             :       return AttributeList::AT_FastCall;         // "fastcall"
     312         102 :     case 'i':    // 2 strings to match.
     313         102 :       if (Name[1] != 'b')
     314             :         break;
     315         102 :       switch (Name[2]) {
     316             :       default: break;
     317             :       case 'a':  // 1 string to match.
     318          57 :         if (memcmp(Name.data()+3, "ction", 5) != 0)
     319             :           break;
     320             :         return AttributeList::AT_IBAction;       // "ibaction"
     321             :       case 'o':  // 1 string to match.
     322          45 :         if (memcmp(Name.data()+3, "utlet", 5) != 0)
     323             :           break;
     324             :         return AttributeList::AT_IBOutlet;       // "iboutlet"
     325             :       }
     326             :       break;
     327             :     case 'l':    // 1 string to match.
     328          81 :       if (memcmp(Name.data()+1, "ockable", 7) != 0)
     329             :         break;
     330             :       return AttributeList::AT_Lockable;         // "lockable"
     331       14762 :     case 'n':    // 5 strings to match.
     332       14762 :       if (Name[1] != 'o')
     333             :         break;
     334       14762 :       switch (Name[2]) {
     335             :       default: break;
     336             :       case 'c':  // 1 string to match.
     337           4 :         if (memcmp(Name.data()+3, "ommon", 5) != 0)
     338             :           break;
     339             :         return AttributeList::AT_NoCommon;       // "nocommon"
     340             :       case 'e':  // 1 string to match.
     341          73 :         if (memcmp(Name.data()+3, "scape", 5) != 0)
     342             :           break;
     343             :         return AttributeList::AT_NoEscape;       // "noescape"
     344             :       case 'i':  // 1 string to match.
     345         360 :         if (memcmp(Name.data()+3, "nline", 5) != 0)
     346             :           break;
     347             :         return AttributeList::AT_NoInline;       // "noinline"
     348             :       case 'm':  // 1 string to match.
     349          10 :         if (memcmp(Name.data()+3, "ips16", 5) != 0)
     350             :           break;
     351             :         return AttributeList::AT_NoMips16;       // "nomips16"
     352             :       case 'r':  // 1 string to match.
     353       14315 :         if (memcmp(Name.data()+3, "eturn", 5) != 0)
     354             :           break;
     355             :         return AttributeList::AT_NoReturn;       // "noreturn"
     356             :       }
     357             :       break;
     358         428 :     case 's':    // 2 strings to match.
     359         428 :       switch (Name[1]) {
     360             :       default: break;
     361             :       case 'e':  // 1 string to match.
     362         415 :         if (memcmp(Name.data()+2, "ntinel", 6) != 0)
     363             :           break;
     364             :         return AttributeList::AT_Sentinel;       // "sentinel"
     365             :       case 'y':  // 1 string to match.
     366          13 :         if (memcmp(Name.data()+2, "sv_abi", 6) != 0)
     367             :           break;
     368             :         return AttributeList::AT_SysVABI;        // "sysv_abi"
     369             :       }
     370             :       break;
     371             :     case 't':    // 1 string to match.
     372          20 :       if (memcmp(Name.data()+1, "hiscall", 7) != 0)
     373             :         break;
     374             :       return AttributeList::AT_ThisCall;         // "thiscall"
     375             :     }
     376             :     break;
     377        8704 :   case 9:        // 13 strings to match.
     378        8704 :     switch (Name[0]) {
     379             :     default: break;
     380             :     case 'd':    // 2 strings to match.
     381         916 :       if (memcmp(Name.data()+1, "ll", 2) != 0)
     382             :         break;
     383         916 :       switch (Name[3]) {
     384             :       default: break;
     385             :       case 'e':  // 1 string to match.
     386         335 :         if (memcmp(Name.data()+4, "xport", 5) != 0)
     387             :           break;
     388             :         return AttributeList::AT_DLLExport;      // "dllexport"
     389             :       case 'i':  // 1 string to match.
     390         581 :         if (memcmp(Name.data()+4, "mport", 5) != 0)
     391             :           break;
     392             :         return AttributeList::AT_DLLImport;      // "dllimport"
     393             :       }
     394             :       break;
     395             :     case 'e':    // 1 string to match.
     396        1232 :       if (memcmp(Name.data()+1, "nable_if", 8) != 0)
     397             :         break;
     398             :       return AttributeList::AT_EnableIf;         // "enable_if"
     399             :     case 'f':    // 1 string to match.
     400          12 :       if (memcmp(Name.data()+1, "lag_enum", 8) != 0)
     401             :         break;
     402             :       return AttributeList::AT_FlagEnum;         // "flag_enum"
     403             :     case 'i':    // 1 string to match.
     404         357 :       if (memcmp(Name.data()+1, "nterrupt", 8) != 0)
     405             :         break;
     406             :       return AttributeList::AT_Interrupt;        // "interrupt"
     407             :     case 'l':    // 1 string to match.
     408          14 :       if (memcmp(Name.data()+1, "ong_call", 8) != 0)
     409             :         break;
     410             :       return AttributeList::AT_MipsLongCall;     // "long_call"
     411        4941 :     case 'm':    // 3 strings to match.
     412        4941 :       switch (Name[1]) {
     413             :       default: break;
     414             :       case 'a':  // 1 string to match.
     415        4858 :         if (memcmp(Name.data()+2, "y_alias", 7) != 0)
     416             :           break;
     417             :         return AttributeList::AT_MayAlias;       // "may_alias"
     418             :       case 'i':  // 1 string to match.
     419           8 :         if (memcmp(Name.data()+2, "cromips", 7) != 0)
     420             :           break;
     421             :         return AttributeList::AT_MicroMips;      // "micromips"
     422             :       case 's':  // 1 string to match.
     423          75 :         if (memcmp(Name.data()+2, "_struct", 7) != 0)
     424             :           break;
     425             :         return AttributeList::AT_MSStruct;       // "ms_struct"
     426             :       }
     427             :       break;
     428        1184 :     case 's':    // 2 strings to match.
     429        1184 :       switch (Name[1]) {
     430             :       default: break;
     431             :       case 'e':  // 1 string to match.
     432           3 :         if (memcmp(Name.data()+2, "lectany", 7) != 0)
     433             :           break;
     434             :         return AttributeList::AT_SelectAny;      // "selectany"
     435             :       case 'w':  // 1 string to match.
     436        1180 :         if (memcmp(Name.data()+2, "iftcall", 7) != 0)
     437             :           break;
     438             :         return AttributeList::AT_SwiftCall;      // "swiftcall"
     439             :       }
     440             :       break;
     441             :     case 't':    // 1 string to match.
     442          36 :       if (memcmp(Name.data()+1, "ls_model", 8) != 0)
     443             :         break;
     444             :       return AttributeList::AT_TLSModel;         // "tls_model"
     445             :     case 'v':    // 1 string to match.
     446          11 :       if (memcmp(Name.data()+1, "ecreturn", 8) != 0)
     447             :         break;
     448             :       return AttributeList::AT_VecReturn;        // "vecreturn"
     449             :     }
     450             :     break;
     451      102934 :   case 10:       // 14 strings to match.
     452      102934 :     switch (Name[0]) {
     453             :     default: break;
     454         114 :     case 'a':    // 2 strings to match.
     455         114 :       switch (Name[1]) {
     456             :       default: break;
     457             :       case 'l':  // 1 string to match.
     458          77 :         if (memcmp(Name.data()+2, "loc_size", 8) != 0)
     459             :           break;
     460             :         return AttributeList::AT_AllocSize;      // "alloc_size"
     461             :       case 'r':  // 1 string to match.
     462          37 :         if (memcmp(Name.data()+2, "tificial", 8) != 0)
     463             :           break;
     464             :         return AttributeList::AT_Artificial;     // "artificial"
     465             :       }
     466             :       break;
     467        2846 :     case 'c':    // 3 strings to match.
     468        2846 :       switch (Name[1]) {
     469             :       default: break;
     470             :       case 'a':  // 1 string to match.
     471          21 :         if (memcmp(Name.data()+2, "pability", 8) != 0)
     472             :           break;
     473             :         return AttributeList::AT_Capability;     // "capability"
     474        2825 :       case 'o':  // 2 strings to match.
     475        2825 :         if (Name[2] != 'n')
     476             :           break;
     477        2825 :         switch (Name[3]) {
     478             :         default: break;
     479             :         case 's':        // 1 string to match.
     480          26 :           if (memcmp(Name.data()+4, "umable", 6) != 0)
     481             :             break;
     482             :           return AttributeList::AT_Consumable;   // "consumable"
     483             :         case 'v':        // 1 string to match.
     484        2799 :           if (memcmp(Name.data()+4, "ergent", 6) != 0)
     485             :             break;
     486             :           return AttributeList::AT_Convergent;   // "convergent"
     487             :         }
     488             :         break;
     489             :       }
     490             :       break;
     491        6070 :     case 'd':    // 2 strings to match.
     492        6070 :       if (Name[1] != 'e')
     493             :         break;
     494        6070 :       switch (Name[2]) {
     495             :       default: break;
     496             :       case 'p':  // 1 string to match.
     497        6033 :         if (memcmp(Name.data()+3, "recated", 7) != 0)
     498             :           break;
     499             :         return AttributeList::AT_Deprecated;     // "deprecated"
     500             :       case 's':  // 1 string to match.
     501          37 :         if (memcmp(Name.data()+3, "tructor", 7) != 0)
     502             :           break;
     503             :         return AttributeList::AT_Destructor;     // "destructor"
     504             :       }
     505             :       break;
     506             :     case 'f':    // 1 string to match.
     507        1325 :       if (memcmp(Name.data()+1, "ormat_arg", 9) != 0)
     508             :         break;
     509             :       return AttributeList::AT_FormatArg;        // "format_arg"
     510        5598 :     case 'g':    // 2 strings to match.
     511        5598 :       switch (Name[1]) {
     512             :       default: break;
     513             :       case 'n':  // 1 string to match.
     514        4048 :         if (memcmp(Name.data()+2, "u_inline", 8) != 0)
     515             :           break;
     516             :         return AttributeList::AT_GNUInline;      // "gnu_inline"
     517             :       case 'u':  // 1 string to match.
     518        1550 :         if (memcmp(Name.data()+2, "arded_by", 8) != 0)
     519             :           break;
     520             :         return AttributeList::AT_GuardedBy;      // "guarded_by"
     521             :       }
     522             :       break;
     523             :     case 'n':    // 1 string to match.
     524          11 :       if (memcmp(Name.data()+1, "ocf_check", 9) != 0)
     525             :         break;
     526             :       return AttributeList::AT_AnyX86NoCfCheck;  // "nocf_check"
     527             :     case 's':    // 1 string to match.
     528          14 :       if (memcmp(Name.data()+1, "hort_call", 9) != 0)
     529             :         break;
     530             :       return AttributeList::AT_MipsShortCall;    // "short_call"
     531       86956 :     case 'v':    // 2 strings to match.
     532       86956 :       switch (Name[1]) {
     533             :       default: break;
     534             :       case 'e':  // 1 string to match.
     535          17 :         if (memcmp(Name.data()+2, "ctorcall", 8) != 0)
     536             :           break;
     537             :         return AttributeList::AT_VectorCall;     // "vectorcall"
     538             :       case 'i':  // 1 string to match.
     539       86939 :         if (memcmp(Name.data()+2, "sibility", 8) != 0)
     540             :           break;
     541             :         return AttributeList::AT_Visibility;     // "visibility"
     542             :       }
     543             :       break;
     544             :     }
     545             :     break;
     546       20559 :   case 11:       // 16 strings to match.
     547       20559 :     switch (Name[0]) {
     548             :     default: break;
     549         353 :     case 'a':    // 2 strings to match.
     550         353 :       if (Name[1] != 'l')
     551             :         break;
     552         353 :       switch (Name[2]) {
     553             :       default: break;
     554             :       case 'i':  // 1 string to match.
     555         305 :         if (memcmp(Name.data()+3, "gn_value", 8) != 0)
     556             :           break;
     557             :         return AttributeList::AT_AlignValue;     // "align_value"
     558             :       case 'l':  // 1 string to match.
     559          48 :         if (memcmp(Name.data()+3, "oc_align", 8) != 0)
     560             :           break;
     561             :         return AttributeList::AT_AllocAlign;     // "alloc_align"
     562             :       }
     563             :       break;
     564         327 :     case 'c':    // 2 strings to match.
     565         327 :       switch (Name[1]) {
     566             :       default: break;
     567             :       case 'f':  // 1 string to match.
     568         299 :         if (memcmp(Name.data()+2, "_consumed", 9) != 0)
     569             :           break;
     570             :         return AttributeList::AT_CFConsumed;     // "cf_consumed"
     571             :       case 'o':  // 1 string to match.
     572          28 :         if (memcmp(Name.data()+2, "nstructor", 9) != 0)
     573             :           break;
     574             :         return AttributeList::AT_Constructor;    // "constructor"
     575             :       }
     576             :       break;
     577             :     case 'd':    // 1 string to match.
     578         359 :       if (memcmp(Name.data()+1, "iagnose_if", 10) != 0)
     579             :         break;
     580             :       return AttributeList::AT_DiagnoseIf;       // "diagnose_if"
     581             :     case 'g':    // 1 string to match.
     582          37 :       if (memcmp(Name.data()+1, "uarded_var", 10) != 0)
     583             :         break;
     584             :       return AttributeList::AT_GuardedVar;       // "guarded_var"
     585         307 :     case 'n':    // 4 strings to match.
     586         307 :       switch (Name[1]) {
     587             :       default: break;
     588         194 :       case 'o':  // 3 strings to match.
     589         194 :         switch (Name[2]) {
     590             :         default: break;
     591             :         case '_':        // 1 string to match.
     592         183 :           if (memcmp(Name.data()+3, "sanitize", 8) != 0)
     593             :             break;
     594             :           return AttributeList::AT_NoSanitize;   // "no_sanitize"
     595             :         case 'd':        // 1 string to match.
     596           6 :           if (memcmp(Name.data()+3, "uplicate", 8) != 0)
     597             :             break;
     598             :           return AttributeList::AT_NoDuplicate;  // "noduplicate"
     599             :         case 'm':        // 1 string to match.
     600           5 :           if (memcmp(Name.data()+3, "icromips", 8) != 0)
     601             :             break;
     602             :           return AttributeList::AT_NoMicroMips;  // "nomicromips"
     603             :         }
     604             :         break;
     605             :       case 's':  // 1 string to match.
     606         113 :         if (memcmp(Name.data()+2, "_consumed", 9) != 0)
     607             :           break;
     608             :         return AttributeList::AT_NSConsumed;     // "ns_consumed"
     609             :       }
     610             :       break;
     611             :     case 'o':    // 1 string to match.
     612         208 :       if (memcmp(Name.data()+1, "bjc_bridge", 10) != 0)
     613             :         break;
     614             :       return AttributeList::AT_ObjCBridge;       // "objc_bridge"
     615             :     case 't':    // 1 string to match.
     616          36 :       if (memcmp(Name.data()+1, "rivial_abi", 10) != 0)
     617             :         break;
     618             :       return AttributeList::AT_TrivialABI;       // "trivial_abi"
     619             :     case 'u':    // 1 string to match.
     620        1604 :       if (memcmp(Name.data()+1, "navailable", 10) != 0)
     621             :         break;
     622             :       return AttributeList::AT_Unavailable;      // "unavailable"
     623             :     case 'v':    // 1 string to match.
     624       17268 :       if (memcmp(Name.data()+1, "ector_size", 10) != 0)
     625             :         break;
     626             :       return AttributeList::AT_VectorSize;       // "vector_size"
     627          60 :     case 'w':    // 2 strings to match.
     628          60 :       switch (Name[1]) {
     629             :       default: break;
     630             :       case 'a':  // 1 string to match.
     631           7 :         if (memcmp(Name.data()+2, "rn_unused", 9) != 0)
     632             :           break;
     633             :         return AttributeList::AT_WarnUnused;     // "warn_unused"
     634             :       case 'e':  // 1 string to match.
     635          53 :         if (memcmp(Name.data()+2, "ak_import", 9) != 0)
     636             :           break;
     637             :         return AttributeList::AT_WeakImport;     // "weak_import"
     638             :       }
     639             :       break;
     640             :     }
     641             :     break;
     642      279865 :   case 12:       // 4 strings to match.
     643      279865 :     switch (Name[0]) {
     644             :     default: break;
     645             :     case 'a':    // 1 string to match.
     646        1675 :       if (memcmp(Name.data()+1, "vailability", 11) != 0)
     647             :         break;
     648             :       return AttributeList::AT_Availability;     // "availability"
     649      278154 :     case 'o':    // 2 strings to match.
     650      278154 :       switch (Name[1]) {
     651             :       default: break;
     652             :       case 'b':  // 1 string to match.
     653          56 :         if (memcmp(Name.data()+2, "jc_boxable", 10) != 0)
     654             :           break;
     655             :         return AttributeList::AT_ObjCBoxable;    // "objc_boxable"
     656             :       case 'v':  // 1 string to match.
     657      278098 :         if (memcmp(Name.data()+2, "erloadable", 10) != 0)
     658             :           break;
     659             :         return AttributeList::AT_Overloadable;   // "overloadable"
     660             :       }
     661             :       break;
     662             :     case 'p':    // 1 string to match.
     663          36 :       if (memcmp(Name.data()+1, "reserve_all", 11) != 0)
     664             :         break;
     665             :       return AttributeList::AT_PreserveAll;      // "preserve_all"
     666             :     }
     667             :     break;
     668      750287 :   case 13:       // 13 strings to match.
     669      750287 :     switch (Name[0]) {
     670             :     default: break;
     671      748057 :     case 'a':    // 2 strings to match.
     672      748057 :       switch (Name[1]) {
     673             :       default: break;
     674             :       case 'd':  // 1 string to match.
     675         376 :         if (memcmp(Name.data()+2, "dress_space", 11) != 0)
     676             :           break;
     677             :         return AttributeList::AT_AddressSpace;   // "address_space"
     678             :       case 'l':  // 1 string to match.
     679      747681 :         if (memcmp(Name.data()+2, "ways_inline", 11) != 0)
     680             :           break;
     681             :         return AttributeList::AT_AlwaysInline;   // "always_inline"
     682             :       }
     683             :       break;
     684             :     case 'c':    // 1 string to match.
     685          37 :       if (memcmp(Name.data()+1, "allable_when", 12) != 0)
     686             :         break;
     687             :       return AttributeList::AT_CallableWhen;     // "callable_when"
     688             :     case 'i':    // 1 string to match.
     689        1208 :       if (memcmp(Name.data()+1, "nit_priority", 12) != 0)
     690             :         break;
     691             :       return AttributeList::AT_InitPriority;     // "init_priority"
     692         344 :     case 'l':    // 2 strings to match.
     693         344 :       switch (Name[1]) {
     694             :       default: break;
     695             :       case 'a':  // 1 string to match.
     696          74 :         if (memcmp(Name.data()+2, "unch_bounds", 11) != 0)
     697             :           break;
     698             :         return AttributeList::AT_CUDALaunchBounds;       // "launch_bounds"
     699             :       case 'o':  // 1 string to match.
     700         270 :         if (memcmp(Name.data()+2, "ck_returned", 11) != 0)
     701             :           break;
     702             :         return AttributeList::AT_LockReturned;   // "lock_returned"
     703             :       }
     704             :       break;
     705         495 :     case 'p':    // 2 strings to match.
     706         495 :       switch (Name[1]) {
     707             :       default: break;
     708             :       case 'r':  // 1 string to match.
     709          48 :         if (memcmp(Name.data()+2, "eserve_most", 11) != 0)
     710             :           break;
     711             :         return AttributeList::AT_PreserveMost;   // "preserve_most"
     712             :       case 't':  // 1 string to match.
     713         447 :         if (memcmp(Name.data()+2, "_guarded_by", 11) != 0)
     714             :           break;
     715             :         return AttributeList::AT_PtGuardedBy;    // "pt_guarded_by"
     716             :       }
     717             :       break;
     718             :     case 'r':    // 1 string to match.
     719          13 :       if (memcmp(Name.data()+1, "eturns_twice", 12) != 0)
     720             :         break;
     721             :       return AttributeList::AT_ReturnsTwice;     // "returns_twice"
     722          94 :     case 's':    // 2 strings to match.
     723          94 :       switch (Name[1]) {
     724             :       default: break;
     725             :       case 'e':  // 1 string to match.
     726          38 :         if (memcmp(Name.data()+2, "t_typestate", 11) != 0)
     727             :           break;
     728             :         return AttributeList::AT_SetTypestate;   // "set_typestate"
     729             :       case 'w':  // 1 string to match.
     730          56 :         if (memcmp(Name.data()+2, "ift_context", 11) != 0)
     731             :           break;
     732             :         return AttributeList::AT_SwiftContext;   // "swift_context"
     733             :       }
     734             :       break;
     735             :     case 'v':    // 1 string to match.
     736          21 :       if (memcmp(Name.data()+1, "ec_type_hint", 12) != 0)
     737             :         break;
     738             :       return AttributeList::AT_VecTypeHint;      // "vec_type_hint"
     739             :     case 'x':    // 1 string to match.
     740          18 :       if (memcmp(Name.data()+1, "ray_log_args", 12) != 0)
     741             :         break;
     742             :       return AttributeList::AT_XRayLogArgs;      // "xray_log_args"
     743             :     }
     744             :     break;
     745        7206 :   case 14:       // 11 strings to match.
     746        7206 :     switch (Name[0]) {
     747             :     default: break;
     748         484 :     case 'a':    // 2 strings to match.
     749         484 :       switch (Name[1]) {
     750             :       default: break;
     751             :       case 'c':  // 1 string to match.
     752         438 :         if (memcmp(Name.data()+2, "quired_after", 12) != 0)
     753             :           break;
     754             :         return AttributeList::AT_AcquiredAfter;  // "acquired_after"
     755             :       case 's':  // 1 string to match.
     756          46 :         if (memcmp(Name.data()+2, "sume_aligned", 12) != 0)
     757             :           break;
     758             :         return AttributeList::AT_AssumeAligned;  // "assume_aligned"
     759             :       }
     760             :       break;
     761             :     case 'c':    // 1 string to match.
     762           6 :       if (memcmp(Name.data()+1, "udart_builtin", 13) != 0)
     763             :         break;
     764             :       return AttributeList::IgnoredAttribute;    // "cudart_builtin"
     765             :     case 'd':    // 1 string to match.
     766          24 :       if (memcmp(Name.data()+1, "evice_builtin", 13) != 0)
     767             :         break;
     768             :       return AttributeList::IgnoredAttribute;    // "device_builtin"
     769             :     case 'i':    // 1 string to match.
     770           6 :       if (memcmp(Name.data()+1, "ntel_ocl_bicc", 13) != 0)
     771             :         break;
     772             :       return AttributeList::AT_IntelOclBicc;     // "intel_ocl_bicc"
     773             :     case 'l':    // 1 string to match.
     774         422 :       if (memcmp(Name.data()+1, "ocks_excluded", 13) != 0)
     775             :         break;
     776             :       return AttributeList::AT_LocksExcluded;    // "locks_excluded"
     777             :     case 'n':    // 1 string to match.
     778          11 :       if (memcmp(Name.data()+1, "o_split_stack", 13) != 0)
     779             :         break;
     780             :       return AttributeList::AT_NoSplitStack;     // "no_split_stack"
     781             :     case 'o':    // 2 strings to match.
     782        6174 :       if (memcmp(Name.data()+1, "bjc_", 4) != 0)
     783             :         break;
     784        6174 :       switch (Name[5]) {
     785             :       default: break;
     786             :       case 'e':  // 1 string to match.
     787          28 :         if (memcmp(Name.data()+6, "xception", 8) != 0)
     788             :           break;
     789             :         return AttributeList::AT_ObjCException;  // "objc_exception"
     790             :       case 'o':  // 1 string to match.
     791        6146 :         if (memcmp(Name.data()+6, "wnership", 8) != 0)
     792             :           break;
     793             :         return AttributeList::AT_ObjCOwnership;  // "objc_ownership"
     794             :       }
     795             :       break;
     796             :     case 'p':    // 1 string to match.
     797          53 :       if (memcmp(Name.data()+1, "t_guarded_var", 13) != 0)
     798             :         break;
     799             :       return AttributeList::AT_PtGuardedVar;     // "pt_guarded_var"
     800             :     case 't':    // 1 string to match.
     801          26 :       if (memcmp(Name.data()+1, "est_typestate", 13) != 0)
     802             :         break;
     803             :       return AttributeList::AT_TestTypestate;    // "test_typestate"
     804             :     }
     805             :     break;
     806        5144 :   case 15:       // 13 strings to match.
     807        5144 :     switch (Name[0]) {
     808             :     default: break;
     809         605 :     case 'a':    // 3 strings to match.
     810         605 :       switch (Name[1]) {
     811             :       default: break;
     812             :       case 'c':  // 1 string to match.
     813         317 :         if (memcmp(Name.data()+2, "quired_before", 13) != 0)
     814             :           break;
     815             :         return AttributeList::AT_AcquiredBefore;         // "acquired_before"
     816             :       case 'm':  // 2 strings to match.
     817         288 :         if (memcmp(Name.data()+2, "dgpu_num_", 9) != 0)
     818             :           break;
     819         288 :         switch (Name[11]) {
     820             :         default: break;
     821             :         case 's':        // 1 string to match.
     822         144 :           if (memcmp(Name.data()+12, "gpr", 3) != 0)
     823             :             break;
     824             :           return AttributeList::AT_AMDGPUNumSGPR;        // "amdgpu_num_sgpr"
     825             :         case 'v':        // 1 string to match.
     826         144 :           if (memcmp(Name.data()+12, "gpr", 3) != 0)
     827             :             break;
     828             :           return AttributeList::AT_AMDGPUNumVGPR;        // "amdgpu_num_vgpr"
     829             :         }
     830             :         break;
     831             :       }
     832             :       break;
     833             :     case 'e':    // 1 string to match.
     834        3413 :       if (memcmp(Name.data()+1, "xt_vector_type", 14) != 0)
     835             :         break;
     836             :       return AttributeList::AT_ExtVectorType;    // "ext_vector_type"
     837             :     case 'n':    // 1 string to match.
     838           8 :       if (memcmp(Name.data()+1, "ot_tail_called", 14) != 0)
     839             :         break;
     840             :       return AttributeList::AT_NotTailCalled;    // "not_tail_called"
     841         258 :     case 'o':    // 3 strings to match.
     842         258 :       switch (Name[1]) {
     843             :       default: break;
     844             :       case 'b':  // 1 string to match.
     845         160 :         if (memcmp(Name.data()+2, "jc_root_class", 13) != 0)
     846             :           break;
     847             :         return AttributeList::AT_ObjCRootClass;  // "objc_root_class"
     848             :       case 'w':  // 2 strings to match.
     849          98 :         if (memcmp(Name.data()+2, "nership_", 8) != 0)
     850             :           break;
     851          98 :         switch (Name[10]) {
     852             :         default: break;
     853             :         case 'h':        // 1 string to match.
     854          54 :           if (memcmp(Name.data()+11, "olds", 4) != 0)
     855             :             break;
     856             :           return AttributeList::AT_Ownership;    // "ownership_holds"
     857             :         case 't':        // 1 string to match.
     858          44 :           if (memcmp(Name.data()+11, "akes", 4) != 0)
     859             :             break;
     860             :           return AttributeList::AT_Ownership;    // "ownership_takes"
     861             :         }
     862             :         break;
     863             :       }
     864             :       break;
     865             :     case 'p':    // 1 string to match.
     866          21 :       if (memcmp(Name.data()+1, "aram_typestate", 14) != 0)
     867             :         break;
     868             :       return AttributeList::AT_ParamTypestate;   // "param_typestate"
     869             :     case 'r':    // 1 string to match.
     870          19 :       if (memcmp(Name.data()+1, "eturns_nonnull", 14) != 0)
     871             :         break;
     872             :       return AttributeList::AT_ReturnsNonNull;   // "returns_nonnull"
     873             :     case 's':    // 1 string to match.
     874          57 :       if (memcmp(Name.data()+1, "coped_lockable", 14) != 0)
     875             :         break;
     876             :       return AttributeList::AT_ScopedLockable;   // "scoped_lockable"
     877             :     case 't':    // 1 string to match.
     878          62 :       if (memcmp(Name.data()+1, "ype_visibility", 14) != 0)
     879             :         break;
     880             :       return AttributeList::AT_TypeVisibility;   // "type_visibility"
     881             :     case 'u':    // 1 string to match.
     882         701 :       if (memcmp(Name.data()+1, "nlock_function", 14) != 0)
     883             :         break;
     884             :       return AttributeList::AT_ReleaseCapability;        // "unlock_function"
     885             :     }
     886             :     break;
     887        4411 :   case 16:       // 5 strings to match.
     888        4411 :     switch (Name[0]) {
     889             :     default: break;
     890             :     case 'i':    // 1 string to match.
     891          36 :       if (memcmp(Name.data()+1, "nternal_linkage", 15) != 0)
     892             :         break;
     893             :       return AttributeList::AT_InternalLinkage;  // "internal_linkage"
     894        4109 :     case 'n':    // 2 strings to match.
     895        4109 :       switch (Name[1]) {
     896             :       default: break;
     897             :       case 'e':  // 1 string to match.
     898        4096 :         if (memcmp(Name.data()+2, "on_vector_type", 14) != 0)
     899             :           break;
     900             :         return AttributeList::AT_NeonVectorType;         // "neon_vector_type"
     901             :       case 's':  // 1 string to match.
     902          13 :         if (memcmp(Name.data()+2, "_consumes_self", 14) != 0)
     903             :           break;
     904             :         return AttributeList::AT_NSConsumesSelf;         // "ns_consumes_self"
     905             :       }
     906             :       break;
     907             :     case 'p':    // 1 string to match.
     908         228 :       if (memcmp(Name.data()+1, "ass_object_size", 15) != 0)
     909             :         break;
     910             :       return AttributeList::AT_PassObjectSize;   // "pass_object_size"
     911             :     case 'r':    // 1 string to match.
     912          38 :       if (memcmp(Name.data()+1, "eturn_typestate", 15) != 0)
     913             :         break;
     914             :       return AttributeList::AT_ReturnTypestate;  // "return_typestate"
     915             :     }
     916             :     break;
     917         240 :   case 17:       // 6 strings to match.
     918         240 :     switch (Name[0]) {
     919             :     default: break;
     920          45 :     case 'a':    // 2 strings to match.
     921          45 :       switch (Name[1]) {
     922             :       default: break;
     923             :       case 'n':  // 1 string to match.
     924           6 :         if (memcmp(Name.data()+2, "alyzer_noreturn", 15) != 0)
     925             :           break;
     926             :         return AttributeList::AT_AnalyzerNoReturn;       // "analyzer_noreturn"
     927             :       case 's':  // 1 string to match.
     928          39 :         if (memcmp(Name.data()+2, "sert_capability", 15) != 0)
     929             :           break;
     930             :         return AttributeList::AT_AssertCapability;       // "assert_capability"
     931             :       }
     932             :       break;
     933         130 :     case 'o':    // 2 strings to match.
     934         130 :       switch (Name[1]) {
     935             :       default: break;
     936             :       case 'b':  // 1 string to match.
     937          79 :         if (memcmp(Name.data()+2, "jc_runtime_name", 15) != 0)
     938             :           break;
     939             :         return AttributeList::AT_ObjCRuntimeName;        // "objc_runtime_name"
     940             :       case 'w':  // 1 string to match.
     941          51 :         if (memcmp(Name.data()+2, "nership_returns", 15) != 0)
     942             :           break;
     943             :         return AttributeList::AT_Ownership;      // "ownership_returns"
     944             :       }
     945             :       break;
     946             :     case 's':    // 1 string to match.
     947          11 :       if (memcmp(Name.data()+1, "hared_capability", 16) != 0)
     948             :         break;
     949             :       return AttributeList::AT_Capability;       // "shared_capability"
     950             :     case 't':    // 1 string to match.
     951          51 :       if (memcmp(Name.data()+1, "ransparent_union", 16) != 0)
     952             :         break;
     953             :       return AttributeList::AT_TransparentUnion;         // "transparent_union"
     954             :     }
     955             :     break;
     956        8819 :   case 18:       // 14 strings to match.
     957        8819 :     switch (Name[0]) {
     958             :     default: break;
     959          37 :     case 'a':    // 2 strings to match.
     960          37 :       switch (Name[1]) {
     961             :       default: break;
     962             :       case 'c':  // 1 string to match.
     963           5 :         if (memcmp(Name.data()+2, "quire_capability", 16) != 0)
     964             :           break;
     965             :         return AttributeList::AT_AcquireCapability;      // "acquire_capability"
     966             :       case 's':  // 1 string to match.
     967          32 :         if (memcmp(Name.data()+2, "sert_shared_lock", 16) != 0)
     968             :           break;
     969             :         return AttributeList::AT_AssertSharedLock;       // "assert_shared_lock"
     970             :       }
     971             :       break;
     972             :     case 'c':    // 1 string to match.
     973           0 :       if (memcmp(Name.data()+1, "arries_dependency", 17) != 0)
     974             :         break;
     975             :       return AttributeList::AT_CarriesDependency;        // "carries_dependency"
     976             :     case 'd':    // 1 string to match.
     977           7 :       if (memcmp(Name.data()+1, "isable_tail_calls", 17) != 0)
     978             :         break;
     979             :       return AttributeList::AT_DisableTailCalls;         // "disable_tail_calls"
     980             :     case 'e':    // 1 string to match.
     981        3943 :       if (memcmp(Name.data()+1, "num_extensibility", 17) != 0)
     982             :         break;
     983             :       return AttributeList::AT_EnumExtensibility;        // "enum_extensibility"
     984             :     case 'i':    // 1 string to match.
     985          74 :       if (memcmp(Name.data()+1, "boutletcollection", 17) != 0)
     986             :         break;
     987             :       return AttributeList::AT_IBOutletCollection;       // "iboutletcollection"
     988             :     case 'n':    // 3 strings to match.
     989          45 :       if (memcmp(Name.data()+1, "o_s", 3) != 0)
     990             :         break;
     991          45 :       switch (Name[4]) {
     992             :       default: break;
     993             :       case 'a':  // 2 strings to match.
     994          32 :         if (memcmp(Name.data()+5, "nitize_", 7) != 0)
     995             :           break;
     996          32 :         switch (Name[12]) {
     997             :         default: break;
     998             :         case 'm':        // 1 string to match.
     999          12 :           if (memcmp(Name.data()+13, "emory", 5) != 0)
    1000             :             break;
    1001             :           return AttributeList::AT_NoSanitizeSpecific;   // "no_sanitize_memory"
    1002             :         case 't':        // 1 string to match.
    1003          20 :           if (memcmp(Name.data()+13, "hread", 5) != 0)
    1004             :             break;
    1005             :           return AttributeList::AT_NoSanitizeSpecific;   // "no_sanitize_thread"
    1006             :         }
    1007             :         break;
    1008             :       case 't':  // 1 string to match.
    1009          13 :         if (memcmp(Name.data()+5, "ack_protector", 13) != 0)
    1010             :           break;
    1011             :         return AttributeList::AT_NoStackProtector;       // "no_stack_protector"
    1012             :       }
    1013             :       break;
    1014          76 :     case 'o':    // 2 strings to match.
    1015          76 :       switch (Name[1]) {
    1016             :       default: break;
    1017             :       case 'b':  // 1 string to match.
    1018          37 :         if (memcmp(Name.data()+2, "jc_method_family", 16) != 0)
    1019             :           break;
    1020             :         return AttributeList::AT_ObjCMethodFamily;       // "objc_method_family"
    1021             :       case 'p':  // 1 string to match.
    1022          39 :         if (memcmp(Name.data()+2, "encl_unroll_hint", 16) != 0)
    1023             :           break;
    1024             :         return AttributeList::AT_OpenCLUnrollHint;       // "opencl_unroll_hint"
    1025             :       }
    1026             :       break;
    1027             :     case 'r':    // 1 string to match.
    1028          20 :       if (memcmp(Name.data()+1, "elease_capability", 17) != 0)
    1029             :         break;
    1030             :       return AttributeList::AT_ReleaseCapability;        // "release_capability"
    1031             :     case 's':    // 1 string to match.
    1032          34 :       if (memcmp(Name.data()+1, "wift_error_result", 17) != 0)
    1033             :         break;
    1034             :       return AttributeList::AT_SwiftErrorResult;         // "swift_error_result"
    1035             :     case 'w':    // 1 string to match.
    1036        4583 :       if (memcmp(Name.data()+1, "arn_unused_result", 17) != 0)
    1037             :         break;
    1038             :       return AttributeList::AT_WarnUnusedResult;         // "warn_unused_result"
    1039             :     }
    1040             :     break;
    1041         970 :   case 19:       // 10 strings to match.
    1042         970 :     switch (Name[0]) {
    1043             :     default: break;
    1044             :     case 'a':    // 1 string to match.
    1045         236 :       if (memcmp(Name.data()+1, "mdgpu_waves_per_eu", 18) != 0)
    1046             :         break;
    1047             :       return AttributeList::AT_AMDGPUWavesPerEU;         // "amdgpu_waves_per_eu"
    1048             :     case 'c':    // 3 strings to match.
    1049         193 :       if (memcmp(Name.data()+1, "f_", 2) != 0)
    1050             :         break;
    1051         193 :       switch (Name[3]) {
    1052             :       default: break;
    1053             :       case 'a':  // 1 string to match.
    1054           0 :         if (memcmp(Name.data()+4, "udited_transfer", 15) != 0)
    1055             :           break;
    1056             :         return AttributeList::AT_CFAuditedTransfer;      // "cf_audited_transfer"
    1057             :       case 'r':  // 1 string to match.
    1058         192 :         if (memcmp(Name.data()+4, "eturns_retained", 15) != 0)
    1059             :           break;
    1060             :         return AttributeList::AT_CFReturnsRetained;      // "cf_returns_retained"
    1061             :       case 'u':  // 1 string to match.
    1062           1 :         if (memcmp(Name.data()+4, "nknown_transfer", 15) != 0)
    1063             :           break;
    1064             :         return AttributeList::AT_CFUnknownTransfer;      // "cf_unknown_transfer"
    1065             :       }
    1066             :       break;
    1067         338 :     case 'n':    // 2 strings to match.
    1068         338 :       switch (Name[1]) {
    1069             :       default: break;
    1070             :       case 'o':  // 1 string to match.
    1071          33 :         if (memcmp(Name.data()+2, "_sanitize_address", 17) != 0)
    1072             :           break;
    1073             :         return AttributeList::AT_NoSanitizeSpecific;     // "no_sanitize_address"
    1074             :       case 's':  // 1 string to match.
    1075         305 :         if (memcmp(Name.data()+2, "_returns_retained", 17) != 0)
    1076             :           break;
    1077             :         return AttributeList::AT_NSReturnsRetained;      // "ns_returns_retained"
    1078             :       }
    1079             :       break;
    1080             :     case 'o':    // 3 strings to match.
    1081         128 :       if (memcmp(Name.data()+1, "bjc_", 4) != 0)
    1082             :         break;
    1083         128 :       switch (Name[5]) {
    1084             :       default: break;
    1085             :       case 'b':  // 2 strings to match.
    1086          76 :         if (memcmp(Name.data()+6, "ridge_", 6) != 0)
    1087             :           break;
    1088          76 :         switch (Name[12]) {
    1089             :         default: break;
    1090             :         case 'm':        // 1 string to match.
    1091          20 :           if (memcmp(Name.data()+13, "utable", 6) != 0)
    1092             :             break;
    1093             :           return AttributeList::AT_ObjCBridgeMutable;    // "objc_bridge_mutable"
    1094             :         case 'r':        // 1 string to match.
    1095          56 :           if (memcmp(Name.data()+13, "elated", 6) != 0)
    1096             :             break;
    1097             :           return AttributeList::AT_ObjCBridgeRelated;    // "objc_bridge_related"
    1098             :         }
    1099             :         break;
    1100             :       case 'r':  // 1 string to match.
    1101          52 :         if (memcmp(Name.data()+6, "equires_super", 13) != 0)
    1102             :           break;
    1103             :         return AttributeList::AT_ObjCRequiresSuper;      // "objc_requires_super"
    1104             :       }
    1105             :       break;
    1106             :     case 'r':    // 1 string to match.
    1107          75 :       if (memcmp(Name.data()+1, "equires_capability", 18) != 0)
    1108             :         break;
    1109             :       return AttributeList::AT_RequiresCapability;       // "requires_capability"
    1110             :     }
    1111             :     break;
    1112        1381 :   case 20:       // 5 strings to match.
    1113        1381 :     switch (Name[0]) {
    1114             :     default: break;
    1115             :     case 'n':    // 1 string to match.
    1116        1006 :       if (memcmp(Name.data()+1, "eon_polyvector_type", 19) != 0)
    1117             :         break;
    1118             :       return AttributeList::AT_NeonPolyVectorType;       // "neon_polyvector_type"
    1119             :     case 'o':    // 1 string to match.
    1120           3 :       if (memcmp(Name.data()+1, "bjc_runtime_visible", 19) != 0)
    1121             :         break;
    1122             :       return AttributeList::AT_ObjCRuntimeVisible;       // "objc_runtime_visible"
    1123             :     case 'r':    // 1 string to match.
    1124          26 :       if (memcmp(Name.data()+1, "eqd_work_group_size", 19) != 0)
    1125             :         break;
    1126             :       return AttributeList::AT_ReqdWorkGroupSize;        // "reqd_work_group_size"
    1127             :     case 's':    // 1 string to match.
    1128         332 :       if (memcmp(Name.data()+1, "hared_lock_function", 19) != 0)
    1129             :         break;
    1130             :       return AttributeList::AT_AcquireCapability;        // "shared_lock_function"
    1131             :     case 'w':    // 1 string to match.
    1132          14 :       if (memcmp(Name.data()+1, "ork_group_size_hint", 19) != 0)
    1133             :         break;
    1134             :       return AttributeList::AT_WorkGroupSizeHint;        // "work_group_size_hint"
    1135             :     }
    1136             :     break;
    1137        1133 :   case 21:       // 8 strings to match.
    1138        1133 :     switch (Name[0]) {
    1139             :     default: break;
    1140             :     case 'a':    // 1 string to match.
    1141          38 :       if (memcmp(Name.data()+1, "ssert_exclusive_lock", 20) != 0)
    1142             :         break;
    1143             :       return AttributeList::AT_AssertExclusiveLock;      // "assert_exclusive_lock"
    1144             :     case 'l':    // 1 string to match.
    1145           0 :       if (memcmp(Name.data()+1, "to_visibility_public", 20) != 0)
    1146             :         break;
    1147             :       return AttributeList::AT_LTOVisibilityPublic;      // "lto_visibility_public"
    1148             :     case 'o':    // 1 string to match.
    1149           9 :       if (memcmp(Name.data()+1, "bjc_precise_lifetime", 20) != 0)
    1150             :         break;
    1151             :       return AttributeList::AT_ObjCPreciseLifetime;      // "objc_precise_lifetime"
    1152             :     case 'p':    // 1 string to match.
    1153         258 :       if (memcmp(Name.data()+1, "ointer_with_type_tag", 20) != 0)
    1154             :         break;
    1155             :       return AttributeList::AT_ArgumentWithTypeTag;      // "pointer_with_type_tag"
    1156         484 :     case 's':    // 2 strings to match.
    1157         484 :       switch (Name[1]) {
    1158             :       default: break;
    1159             :       case 'h':  // 1 string to match.
    1160         416 :         if (memcmp(Name.data()+2, "ared_locks_required", 19) != 0)
    1161             :           break;
    1162             :         return AttributeList::AT_RequiresCapability;     // "shared_locks_required"
    1163             :       case 'w':  // 1 string to match.
    1164          68 :         if (memcmp(Name.data()+2, "ift_indirect_result", 19) != 0)
    1165             :           break;
    1166             :         return AttributeList::AT_SwiftIndirectResult;    // "swift_indirect_result"
    1167             :       }
    1168             :       break;
    1169             :     case 't':    // 1 string to match.
    1170         344 :       if (memcmp(Name.data()+1, "ype_tag_for_datatype", 20) != 0)
    1171             :         break;
    1172             :       return AttributeList::AT_TypeTagForDatatype;       // "type_tag_for_datatype"
    1173             :     case 'x':    // 1 string to match.
    1174           0 :       if (memcmp(Name.data()+1, "ray_never_instrument", 20) != 0)
    1175             :         break;
    1176             :       return AttributeList::AT_XRayInstrument;   // "xray_never_instrument"
    1177             :     }
    1178             :     break;
    1179         216 :   case 22:       // 6 strings to match.
    1180         216 :     switch (Name[0]) {
    1181             :     default: break;
    1182             :     case 'a':    // 1 string to match.
    1183          33 :       if (memcmp(Name.data()+1, "rgument_with_type_tag", 21) != 0)
    1184             :         break;
    1185             :       return AttributeList::AT_ArgumentWithTypeTag;      // "argument_with_type_tag"
    1186             :     case 'e':    // 1 string to match.
    1187         122 :       if (memcmp(Name.data()+1, "xternal_source_symbol", 21) != 0)
    1188             :         break;
    1189             :       return AttributeList::AT_ExternalSourceSymbol;     // "external_source_symbol"
    1190             :     case 'n':    // 1 string to match.
    1191          27 :       if (memcmp(Name.data()+1, "o_instrument_function", 21) != 0)
    1192             :         break;
    1193             :       return AttributeList::AT_NoInstrumentFunction;     // "no_instrument_function"
    1194             :     case 'o':    // 1 string to match.
    1195           8 :       if (memcmp(Name.data()+1, "bjc_independent_class", 21) != 0)
    1196             :         break;
    1197             :       return AttributeList::AT_ObjCIndependentClass;     // "objc_independent_class"
    1198             :     case 't':    // 1 string to match.
    1199          22 :       if (memcmp(Name.data()+1, "ry_acquire_capability", 21) != 0)
    1200             :         break;
    1201             :       return AttributeList::AT_TryAcquireCapability;     // "try_acquire_capability"
    1202             :     case 'x':    // 1 string to match.
    1203           4 :       if (memcmp(Name.data()+1, "ray_always_instrument", 21) != 0)
    1204             :         break;
    1205             :       return AttributeList::AT_XRayInstrument;   // "xray_always_instrument"
    1206             :     }
    1207             :     break;
    1208        1077 :   case 23:       // 6 strings to match.
    1209        1077 :     switch (Name[0]) {
    1210             :     default: break;
    1211             :     case 'c':    // 1 string to match.
    1212          43 :       if (memcmp(Name.data()+1, "f_returns_not_retained", 22) != 0)
    1213             :         break;
    1214             :       return AttributeList::AT_CFReturnsNotRetained;     // "cf_returns_not_retained"
    1215             :     case 'e':    // 1 string to match.
    1216         727 :       if (memcmp(Name.data()+1, "xclusive_lock_function", 22) != 0)
    1217             :         break;
    1218             :       return AttributeList::AT_AcquireCapability;        // "exclusive_lock_function"
    1219             :     case 'f':    // 1 string to match.
    1220          10 :       if (memcmp(Name.data()+1, "orce_align_arg_pointer", 22) != 0)
    1221             :         break;
    1222             :       return AttributeList::AT_X86ForceAlignArgPointer;  // "force_align_arg_pointer"
    1223             :     case 'n':    // 2 strings to match.
    1224         112 :       if (memcmp(Name.data()+1, "s_returns_", 10) != 0)
    1225             :         break;
    1226         112 :       switch (Name[11]) {
    1227             :       default: break;
    1228             :       case 'a':  // 1 string to match.
    1229           4 :         if (memcmp(Name.data()+12, "utoreleased", 11) != 0)
    1230             :           break;
    1231             :         return AttributeList::AT_NSReturnsAutoreleased;  // "ns_returns_autoreleased"
    1232             :       case 'n':  // 1 string to match.
    1233         108 :         if (memcmp(Name.data()+12, "ot_retained", 11) != 0)
    1234             :           break;
    1235             :         return AttributeList::AT_NSReturnsNotRetained;   // "ns_returns_not_retained"
    1236             :       }
    1237             :       break;
    1238             :     case 's':    // 1 string to match.
    1239         185 :       if (memcmp(Name.data()+1, "hared_trylock_function", 22) != 0)
    1240             :         break;
    1241             :       return AttributeList::AT_SharedTrylockFunction;    // "shared_trylock_function"
    1242             :     }
    1243             :     break;
    1244        1574 :   case 24:       // 2 strings to match.
    1245        1574 :     switch (Name[0]) {
    1246             :     default: break;
    1247             :     case 'a':    // 1 string to match.
    1248          25 :       if (memcmp(Name.data()+1, "ssert_shared_capability", 23) != 0)
    1249             :         break;
    1250             :       return AttributeList::AT_AssertCapability;         // "assert_shared_capability"
    1251             :     case 'e':    // 1 string to match.
    1252        1549 :       if (memcmp(Name.data()+1, "xclusive_locks_required", 23) != 0)
    1253             :         break;
    1254             :       return AttributeList::AT_RequiresCapability;       // "exclusive_locks_required"
    1255             :     }
    1256             :     break;
    1257         126 :   case 25:       // 5 strings to match.
    1258         126 :     switch (Name[0]) {
    1259             :     default: break;
    1260             :     case 'a':    // 1 string to match.
    1261           3 :       if (memcmp(Name.data()+1, "cquire_shared_capability", 24) != 0)
    1262             :         break;
    1263             :       return AttributeList::AT_AcquireCapability;        // "acquire_shared_capability"
    1264             :     case 'i':    // 1 string to match.
    1265          12 :       if (memcmp(Name.data()+1, "ntel_reqd_sub_group_size", 24) != 0)
    1266             :         break;
    1267             :       return AttributeList::AT_OpenCLIntelReqdSubGroupSize;      // "intel_reqd_sub_group_size"
    1268             :     case 'n':    // 2 strings to match.
    1269          93 :       if (memcmp(Name.data()+1, "o_", 2) != 0)
    1270             :         break;
    1271          93 :       switch (Name[3]) {
    1272             :       default: break;
    1273             :       case 'c':  // 1 string to match.
    1274          27 :         if (memcmp(Name.data()+4, "aller_saved_registers", 21) != 0)
    1275             :           break;
    1276             :         return AttributeList::AT_AnyX86NoCallerSavedRegisters;   // "no_caller_saved_registers"
    1277             :       case 't':  // 1 string to match.
    1278          66 :         if (memcmp(Name.data()+4, "hread_safety_analysis", 21) != 0)
    1279             :           break;
    1280             :         return AttributeList::AT_NoThreadSafetyAnalysis;         // "no_thread_safety_analysis"
    1281             :       }
    1282             :       break;
    1283             :     case 'r':    // 1 string to match.
    1284          18 :       if (memcmp(Name.data()+1, "elease_shared_capability", 24) != 0)
    1285             :         break;
    1286             :       return AttributeList::AT_ReleaseCapability;        // "release_shared_capability"
    1287             :     }
    1288             :     break;
    1289         245 :   case 26:       // 6 strings to match.
    1290         245 :     switch (Name[0]) {
    1291             :     default: break;
    1292             :     case 'c':    // 1 string to match.
    1293           2 :       if (memcmp(Name.data()+1, "onsumable_auto_cast_state", 25) != 0)
    1294             :         break;
    1295             :       return AttributeList::AT_ConsumableAutoCast;       // "consumable_auto_cast_state"
    1296             :     case 'e':    // 1 string to match.
    1297         209 :       if (memcmp(Name.data()+1, "xclusive_trylock_function", 25) != 0)
    1298             :         break;
    1299             :       return AttributeList::AT_ExclusiveTrylockFunction;         // "exclusive_trylock_function"
    1300             :     case 'n':    // 1 string to match.
    1301           1 :       if (memcmp(Name.data()+1, "o_address_safety_analysis", 25) != 0)
    1302             :         break;
    1303             :       return AttributeList::AT_NoSanitizeSpecific;       // "no_address_safety_analysis"
    1304             :     case 'o':    // 1 string to match.
    1305          23 :       if (memcmp(Name.data()+1, "bjc_returns_inner_pointer", 25) != 0)
    1306             :         break;
    1307             :       return AttributeList::AT_ObjCReturnsInnerPointer;  // "objc_returns_inner_pointer"
    1308          10 :     case 'r':    // 2 strings to match.
    1309          10 :       if (Name[1] != 'e')
    1310             :         break;
    1311          10 :       switch (Name[2]) {
    1312             :       default: break;
    1313             :       case 'l':  // 1 string to match.
    1314           3 :         if (memcmp(Name.data()+3, "ease_generic_capability", 23) != 0)
    1315             :           break;
    1316             :         return AttributeList::AT_ReleaseCapability;      // "release_generic_capability"
    1317             :       case 'q':  // 1 string to match.
    1318           7 :         if (memcmp(Name.data()+3, "uires_shared_capability", 23) != 0)
    1319             :           break;
    1320             :         return AttributeList::AT_RequiresCapability;     // "requires_shared_capability"
    1321             :       }
    1322             :       break;
    1323             :     }
    1324             :     break;
    1325         255 :   case 27:       // 5 strings to match.
    1326         255 :     switch (Name[0]) {
    1327             :     default: break;
    1328             :     case 'a':    // 1 string to match.
    1329         190 :       if (memcmp(Name.data()+1, "mdgpu_flat_work_group_size", 26) != 0)
    1330             :         break;
    1331             :       return AttributeList::AT_AMDGPUFlatWorkGroupSize;  // "amdgpu_flat_work_group_size"
    1332             :     case 'd':    // 2 strings to match.
    1333          12 :       if (memcmp(Name.data()+1, "evice_builtin_", 14) != 0)
    1334             :         break;
    1335          12 :       switch (Name[15]) {
    1336             :       default: break;
    1337             :       case 's':  // 1 string to match.
    1338           6 :         if (memcmp(Name.data()+16, "urface_type", 11) != 0)
    1339             :           break;
    1340             :         return AttributeList::IgnoredAttribute;  // "device_builtin_surface_type"
    1341             :       case 't':  // 1 string to match.
    1342           6 :         if (memcmp(Name.data()+16, "exture_type", 11) != 0)
    1343             :           break;
    1344             :         return AttributeList::IgnoredAttribute;  // "device_builtin_texture_type"
    1345             :       }
    1346             :       break;
    1347             :     case 'o':    // 2 strings to match.
    1348          53 :       if (memcmp(Name.data()+1, "bjc_", 4) != 0)
    1349             :         break;
    1350          53 :       switch (Name[5]) {
    1351             :       default: break;
    1352             :       case 'd':  // 1 string to match.
    1353          35 :         if (memcmp(Name.data()+6, "esignated_initializer", 21) != 0)
    1354             :           break;
    1355             :         return AttributeList::AT_ObjCDesignatedInitializer;      // "objc_designated_initializer"
    1356             :       case 's':  // 1 string to match.
    1357          18 :         if (memcmp(Name.data()+6, "ubclassing_restricted", 21) != 0)
    1358             :           break;
    1359             :         return AttributeList::AT_ObjCSubclassingRestricted;      // "objc_subclassing_restricted"
    1360             :       }
    1361             :       break;
    1362             :     }
    1363             :     break;
    1364             :   case 28:       // 1 string to match.
    1365           2 :     if (memcmp(Name.data()+0, "consumable_set_state_on_read", 28) != 0)
    1366             :       break;
    1367             :     return AttributeList::AT_ConsumableSetOnRead;        // "consumable_set_state_on_read"
    1368             :   case 29:       // 1 string to match.
    1369          12 :     if (memcmp(Name.data()+0, "try_acquire_shared_capability", 29) != 0)
    1370             :       break;
    1371             :     return AttributeList::AT_TryAcquireCapability;       // "try_acquire_shared_capability"
    1372             :   case 31:       // 1 string to match.
    1373         168 :     if (memcmp(Name.data()+0, "require_constant_initialization", 31) != 0)
    1374             :       break;
    1375             :     return AttributeList::AT_RequireConstantInit;        // "require_constant_initialization"
    1376             :   case 34:       // 1 string to match.
    1377          12 :     if (memcmp(Name.data()+0, "objc_requires_property_definitions", 34) != 0)
    1378             :       break;
    1379             :     return AttributeList::AT_ObjCRequiresPropertyDefs;   // "objc_requires_property_definitions"
    1380             :   case 35:       // 1 string to match.
    1381          39 :     if (memcmp(Name.data()+0, "objc_arc_weak_reference_unavailable", 35) != 0)
    1382             :       break;
    1383             :     return AttributeList::AT_ArcWeakrefUnavailable;      // "objc_arc_weak_reference_unavailable"
    1384             :   case 46:       // 1 string to match.
    1385          12 :     if (memcmp(Name.data()+0, "objc_protocol_requires_explicit_implementation", 46) != 0)
    1386             :       break;
    1387             :     return AttributeList::AT_ObjCExplicitProtocolImpl;   // "objc_protocol_requires_explicit_implementation"
    1388             :   }
    1389       48128 :   } else if (AttributeList::AS_Declspec == Syntax) {
    1390        7359 :   switch (Name.size()) {
    1391             :   default: break;
    1392             :   case 4:        // 1 string to match.
    1393          84 :     if (memcmp(Name.data()+0, "uuid", 4) != 0)
    1394             :       break;
    1395             :     return AttributeList::AT_Uuid;       // "uuid"
    1396         224 :   case 5:        // 2 strings to match.
    1397         224 :     switch (Name[0]) {
    1398             :     default: break;
    1399             :     case 'a':    // 1 string to match.
    1400         215 :       if (memcmp(Name.data()+1, "lign", 4) != 0)
    1401             :         break;
    1402             :       return AttributeList::AT_Aligned;  // "align"
    1403             :     case 'n':    // 1 string to match.
    1404           9 :       if (memcmp(Name.data()+1, "aked", 4) != 0)
    1405             :         break;
    1406             :       return AttributeList::AT_Naked;    // "naked"
    1407             :     }
    1408             :     break;
    1409             :   case 6:        // 1 string to match.
    1410          55 :     if (memcmp(Name.data()+0, "thread", 6) != 0)
    1411             :       break;
    1412             :     return AttributeList::AT_Thread;     // "thread"
    1413             :   case 7:        // 2 strings to match.
    1414           8 :     if (memcmp(Name.data()+0, "no", 2) != 0)
    1415             :       break;
    1416           4 :     switch (Name[2]) {
    1417             :     default: break;
    1418             :     case 'a':    // 1 string to match.
    1419           2 :       if (memcmp(Name.data()+3, "lias", 4) != 0)
    1420             :         break;
    1421             :       return AttributeList::AT_NoAlias;  // "noalias"
    1422             :     case 't':    // 1 string to match.
    1423           2 :       if (memcmp(Name.data()+3, "hrow", 4) != 0)
    1424             :         break;
    1425             :       return AttributeList::AT_NoThrow;  // "nothrow"
    1426             :     }
    1427             :     break;
    1428         174 :   case 8:        // 7 strings to match.
    1429         174 :     switch (Name[0]) {
    1430             :     default: break;
    1431             :     case '_':    // 1 string to match.
    1432           3 :       if (memcmp(Name.data()+1, "_host__", 7) != 0)
    1433             :         break;
    1434             :       return AttributeList::AT_CUDAHost;         // "__host__"
    1435             :     case 'a':    // 1 string to match.
    1436           8 :       if (memcmp(Name.data()+1, "llocate", 7) != 0)
    1437             :         break;
    1438             :       return AttributeList::AT_Section;  // "allocate"
    1439          59 :     case 'n':    // 3 strings to match.
    1440          59 :       if (Name[1] != 'o')
    1441             :         break;
    1442          59 :       switch (Name[2]) {
    1443             :       default: break;
    1444             :       case 'i':  // 1 string to match.
    1445          31 :         if (memcmp(Name.data()+3, "nline", 5) != 0)
    1446             :           break;
    1447             :         return AttributeList::AT_NoInline;       // "noinline"
    1448             :       case 'r':  // 1 string to match.
    1449          16 :         if (memcmp(Name.data()+3, "eturn", 5) != 0)
    1450             :           break;
    1451             :         return AttributeList::AT_NoReturn;       // "noreturn"
    1452             :       case 'v':  // 1 string to match.
    1453          12 :         if (memcmp(Name.data()+3, "table", 5) != 0)
    1454             :           break;
    1455             :         return AttributeList::AT_MSNoVTable;     // "novtable"
    1456             :       }
    1457             :       break;
    1458             :     case 'p':    // 1 string to match.
    1459         103 :       if (memcmp(Name.data()+1, "roperty", 7) != 0)
    1460             :         break;
    1461             :       return AttributeList::IgnoredAttribute;    // "property"
    1462             :     case 'r':    // 1 string to match.
    1463           1 :       if (memcmp(Name.data()+1, "estrict", 7) != 0)
    1464             :         break;
    1465             :       return AttributeList::AT_Restrict;         // "restrict"
    1466             :     }
    1467             :     break;
    1468        6732 :   case 9:        // 3 strings to match.
    1469        6732 :     switch (Name[0]) {
    1470             :     default: break;
    1471             :     case 'd':    // 2 strings to match.
    1472        6674 :       if (memcmp(Name.data()+1, "ll", 2) != 0)
    1473             :         break;
    1474        6674 :       switch (Name[3]) {
    1475             :       default: break;
    1476             :       case 'e':  // 1 string to match.
    1477        3100 :         if (memcmp(Name.data()+4, "xport", 5) != 0)
    1478             :           break;
    1479             :         return AttributeList::AT_DLLExport;      // "dllexport"
    1480             :       case 'i':  // 1 string to match.
    1481        3574 :         if (memcmp(Name.data()+4, "mport", 5) != 0)
    1482             :           break;
    1483             :         return AttributeList::AT_DLLImport;      // "dllimport"
    1484             :       }
    1485             :       break;
    1486             :     case 's':    // 1 string to match.
    1487          54 :       if (memcmp(Name.data()+1, "electany", 8) != 0)
    1488             :         break;
    1489             :       return AttributeList::AT_SelectAny;        // "selectany"
    1490             :     }
    1491             :     break;
    1492          34 :   case 10:       // 4 strings to match.
    1493          34 :     switch (Name[0]) {
    1494             :     default: break;
    1495           9 :     case '_':    // 3 strings to match.
    1496           9 :       if (Name[1] != '_')
    1497             :         break;
    1498           9 :       switch (Name[2]) {
    1499             :       default: break;
    1500             :       case 'd':  // 1 string to match.
    1501           3 :         if (memcmp(Name.data()+3, "evice__", 7) != 0)
    1502             :           break;
    1503             :         return AttributeList::AT_CUDADevice;     // "__device__"
    1504             :       case 'g':  // 1 string to match.
    1505           3 :         if (memcmp(Name.data()+3, "lobal__", 7) != 0)
    1506             :           break;
    1507             :         return AttributeList::AT_CUDAGlobal;     // "__global__"
    1508             :       case 's':  // 1 string to match.
    1509           3 :         if (memcmp(Name.data()+3, "hared__", 7) != 0)
    1510             :           break;
    1511             :         return AttributeList::AT_CUDAShared;     // "__shared__"
    1512             :       }
    1513             :       break;
    1514             :     case 'd':    // 1 string to match.
    1515          25 :       if (memcmp(Name.data()+1, "eprecated", 9) != 0)
    1516             :         break;
    1517             :       return AttributeList::AT_Deprecated;       // "deprecated"
    1518             :     }
    1519             :     break;
    1520             :   case 11:       // 1 string to match.
    1521          15 :     if (memcmp(Name.data()+0, "empty_bases", 11) != 0)
    1522             :       break;
    1523             :     return AttributeList::AT_EmptyBases;         // "empty_bases"
    1524             :   case 12:       // 1 string to match.
    1525           4 :     if (memcmp(Name.data()+0, "__constant__", 12) != 0)
    1526             :       break;
    1527             :     return AttributeList::AT_CUDAConstant;       // "__constant__"
    1528             :   case 14:       // 1 string to match.
    1529           8 :     if (memcmp(Name.data()+0, "layout_version", 14) != 0)
    1530             :       break;
    1531             :     return AttributeList::AT_LayoutVersion;      // "layout_version"
    1532             :   case 17:       // 1 string to match.
    1533           0 :     if (memcmp(Name.data()+0, "__launch_bounds__", 17) != 0)
    1534             :       break;
    1535             :     return AttributeList::AT_CUDALaunchBounds;   // "__launch_bounds__"
    1536             :   case 18:       // 2 strings to match.
    1537          15 :     if (memcmp(Name.data()+0, "__", 2) != 0)
    1538             :       break;
    1539          15 :     switch (Name[2]) {
    1540             :     default: break;
    1541             :     case 'c':    // 1 string to match.
    1542           3 :       if (memcmp(Name.data()+3, "udart_builtin__", 15) != 0)
    1543             :         break;
    1544             :       return AttributeList::IgnoredAttribute;    // "__cudart_builtin__"
    1545             :     case 'd':    // 1 string to match.
    1546          12 :       if (memcmp(Name.data()+3, "evice_builtin__", 15) != 0)
    1547             :         break;
    1548             :       return AttributeList::IgnoredAttribute;    // "__device_builtin__"
    1549             :     }
    1550             :     break;
    1551             :   case 31:       // 2 strings to match.
    1552           6 :     if (memcmp(Name.data()+0, "__device_builtin_", 17) != 0)
    1553             :       break;
    1554           6 :     switch (Name[17]) {
    1555             :     default: break;
    1556             :     case 's':    // 1 string to match.
    1557           3 :       if (memcmp(Name.data()+18, "urface_type__", 13) != 0)
    1558             :         break;
    1559             :       return AttributeList::IgnoredAttribute;    // "__device_builtin_surface_type__"
    1560             :     case 't':    // 1 string to match.
    1561           3 :       if (memcmp(Name.data()+18, "exture_type__", 13) != 0)
    1562             :         break;
    1563             :       return AttributeList::IgnoredAttribute;    // "__device_builtin_texture_type__"
    1564             :     }
    1565             :     break;
    1566             :   }
    1567       40769 :   } else if (AttributeList::AS_Microsoft == Syntax) {
    1568          52 :   switch (Name.size()) {
    1569             :   default: break;
    1570             :   case 4:        // 1 string to match.
    1571          52 :     if (memcmp(Name.data()+0, "uuid", 4) != 0)
    1572             :       break;
    1573             :     return AttributeList::AT_Uuid;       // "uuid"
    1574             :   }
    1575       40717 :   } else if (AttributeList::AS_CXX11 == Syntax) {
    1576        4977 :   switch (Name.size()) {
    1577             :   default: break;
    1578             :   case 8:        // 3 strings to match.
    1579          13 :     if (memcmp(Name.data()+0, "gnu::", 5) != 0)
    1580             :       break;
    1581           0 :     switch (Name[5]) {
    1582             :     default: break;
    1583             :     case 'f':    // 1 string to match.
    1584           0 :       if (memcmp(Name.data()+6, "ar", 2) != 0)
    1585             :         break;
    1586             :       return AttributeList::AT_MipsLongCall;     // "gnu::far"
    1587             :     case 'h':    // 1 string to match.
    1588           0 :       if (memcmp(Name.data()+6, "ot", 2) != 0)
    1589             :         break;
    1590             :       return AttributeList::AT_Hot;      // "gnu::hot"
    1591             :     case 'p':    // 1 string to match.
    1592           0 :       if (memcmp(Name.data()+6, "cs", 2) != 0)
    1593             :         break;
    1594             :       return AttributeList::AT_Pcs;      // "gnu::pcs"
    1595             :     }
    1596             :     break;
    1597             :   case 9:        // 6 strings to match.
    1598          32 :     if (memcmp(Name.data()+0, "gnu::", 5) != 0)
    1599             :       break;
    1600          10 :     switch (Name[5]) {
    1601             :     default: break;
    1602             :     case 'c':    // 1 string to match.
    1603           0 :       if (memcmp(Name.data()+6, "old", 3) != 0)
    1604             :         break;
    1605             :       return AttributeList::AT_Cold;     // "gnu::cold"
    1606             :     case 'm':    // 1 string to match.
    1607           4 :       if (memcmp(Name.data()+6, "ode", 3) != 0)
    1608             :         break;
    1609             :       return AttributeList::AT_Mode;     // "gnu::mode"
    1610             :     case 'n':    // 1 string to match.
    1611           0 :       if (memcmp(Name.data()+6, "ear", 3) != 0)
    1612             :         break;
    1613             :       return AttributeList::AT_MipsShortCall;    // "gnu::near"
    1614             :     case 'p':    // 1 string to match.
    1615           2 :       if (memcmp(Name.data()+6, "ure", 3) != 0)
    1616             :         break;
    1617             :       return AttributeList::AT_Pure;     // "gnu::pure"
    1618             :     case 'u':    // 1 string to match.
    1619           4 :       if (memcmp(Name.data()+6, "sed", 3) != 0)
    1620             :         break;
    1621             :       return AttributeList::AT_Used;     // "gnu::used"
    1622             :     case 'w':    // 1 string to match.
    1623           0 :       if (memcmp(Name.data()+6, "eak", 3) != 0)
    1624             :         break;
    1625             :       return AttributeList::AT_Weak;     // "gnu::weak"
    1626             :     }
    1627             :     break;
    1628        2107 :   case 10:       // 6 strings to match.
    1629        2107 :     switch (Name[0]) {
    1630             :     default: break;
    1631             :     case ':':    // 1 string to match.
    1632        2089 :       if (memcmp(Name.data()+1, ":noreturn", 9) != 0)
    1633             :         break;
    1634             :       return AttributeList::AT_CXX11NoReturn;    // "::noreturn"
    1635             :     case 'g':    // 5 strings to match.
    1636          18 :       if (memcmp(Name.data()+1, "nu::", 4) != 0)
    1637             :         break;
    1638          18 :       switch (Name[5]) {
    1639             :       default: break;
    1640             :       case 'a':  // 1 string to match.
    1641           9 :         if (memcmp(Name.data()+6, "lias", 4) != 0)
    1642             :           break;
    1643             :         return AttributeList::AT_Alias;  // "gnu::alias"
    1644           6 :       case 'c':  // 2 strings to match.
    1645           6 :         switch (Name[6]) {
    1646             :         default: break;
    1647             :         case 'd':        // 1 string to match.
    1648           2 :           if (memcmp(Name.data()+7, "ecl", 3) != 0)
    1649             :             break;
    1650             :           return AttributeList::AT_CDecl;        // "gnu::cdecl"
    1651             :         case 'o':        // 1 string to match.
    1652           4 :           if (memcmp(Name.data()+7, "nst", 3) != 0)
    1653             :             break;
    1654             :           return AttributeList::AT_Const;        // "gnu::const"
    1655             :         }
    1656             :         break;
    1657             :       case 'i':  // 1 string to match.
    1658           0 :         if (memcmp(Name.data()+6, "func", 4) != 0)
    1659             :           break;
    1660             :         return AttributeList::AT_IFunc;  // "gnu::ifunc"
    1661             :       case 'n':  // 1 string to match.
    1662           3 :         if (memcmp(Name.data()+6, "aked", 4) != 0)
    1663             :           break;
    1664             :         return AttributeList::AT_Naked;  // "gnu::naked"
    1665             :       }
    1666             :       break;
    1667             :     }
    1668             :     break;
    1669          81 :   case 11:       // 10 strings to match.
    1670          81 :     switch (Name[0]) {
    1671             :     default: break;
    1672             :     case ':':    // 1 string to match.
    1673          55 :       if (memcmp(Name.data()+1, ":nodiscard", 10) != 0)
    1674             :         break;
    1675             :       return AttributeList::AT_WarnUnusedResult;         // "::nodiscard"
    1676             :     case 'g':    // 9 strings to match.
    1677          24 :       if (memcmp(Name.data()+1, "nu::", 4) != 0)
    1678             :         break;
    1679          24 :       switch (Name[5]) {
    1680             :       default: break;
    1681             :       case 'c':  // 1 string to match.
    1682           0 :         if (memcmp(Name.data()+6, "ommon", 5) != 0)
    1683             :           break;
    1684             :         return AttributeList::AT_Common;         // "gnu::common"
    1685             :       case 'f':  // 1 string to match.
    1686           4 :         if (memcmp(Name.data()+6, "ormat", 5) != 0)
    1687             :           break;
    1688             :         return AttributeList::AT_Format;         // "gnu::format"
    1689           0 :       case 'm':  // 3 strings to match.
    1690           0 :         switch (Name[6]) {
    1691             :         default: break;
    1692             :         case 'a':        // 1 string to match.
    1693           0 :           if (memcmp(Name.data()+7, "lloc", 4) != 0)
    1694             :             break;
    1695             :           return AttributeList::AT_Restrict;     // "gnu::malloc"
    1696             :         case 'i':        // 1 string to match.
    1697           0 :           if (memcmp(Name.data()+7, "ps16", 4) != 0)
    1698             :             break;
    1699             :           return AttributeList::AT_Mips16;       // "gnu::mips16"
    1700             :         case 's':        // 1 string to match.
    1701           0 :           if (memcmp(Name.data()+7, "_abi", 4) != 0)
    1702             :             break;
    1703             :           return AttributeList::AT_MSABI;        // "gnu::ms_abi"
    1704             :         }
    1705             :         break;
    1706             :       case 'p':  // 1 string to match.
    1707           2 :         if (memcmp(Name.data()+6, "acked", 5) != 0)
    1708             :           break;
    1709             :         return AttributeList::AT_Packed;         // "gnu::packed"
    1710             :       case 's':  // 1 string to match.
    1711           0 :         if (memcmp(Name.data()+6, "ignal", 5) != 0)
    1712             :           break;
    1713             :         return AttributeList::AT_AVRSignal;      // "gnu::signal"
    1714             :       case 't':  // 1 string to match.
    1715           0 :         if (memcmp(Name.data()+6, "arget", 5) != 0)
    1716             :           break;
    1717             :         return AttributeList::AT_Target;         // "gnu::target"
    1718             :       case 'u':  // 1 string to match.
    1719          18 :         if (memcmp(Name.data()+6, "nused", 5) != 0)
    1720             :           break;
    1721             :         return AttributeList::AT_Unused;         // "gnu::unused"
    1722             :       }
    1723             :       break;
    1724             :     }
    1725             :     break;
    1726         159 :   case 12:       // 14 strings to match.
    1727         159 :     switch (Name[0]) {
    1728             :     default: break;
    1729             :     case ':':    // 1 string to match.
    1730          88 :       if (memcmp(Name.data()+1, ":deprecated", 11) != 0)
    1731             :         break;
    1732             :       return AttributeList::AT_Deprecated;       // "::deprecated"
    1733             :     case 'g':    // 13 strings to match.
    1734          66 :       if (memcmp(Name.data()+1, "nu::", 4) != 0)
    1735             :         break;
    1736          66 :       switch (Name[5]) {
    1737             :       default: break;
    1738             :       case '_':  // 1 string to match.
    1739           2 :         if (memcmp(Name.data()+6, "_const", 6) != 0)
    1740             :           break;
    1741             :         return AttributeList::AT_Const;  // "gnu::__const"
    1742          31 :       case 'a':  // 2 strings to match.
    1743          31 :         switch (Name[6]) {
    1744             :         default: break;
    1745             :         case 'b':        // 1 string to match.
    1746           4 :           if (memcmp(Name.data()+7, "i_tag", 5) != 0)
    1747             :             break;
    1748             :           return AttributeList::AT_AbiTag;       // "gnu::abi_tag"
    1749             :         case 'l':        // 1 string to match.
    1750          27 :           if (memcmp(Name.data()+7, "igned", 5) != 0)
    1751             :             break;
    1752             :           return AttributeList::AT_Aligned;      // "gnu::aligned"
    1753             :         }
    1754             :         break;
    1755             :       case 'c':  // 1 string to match.
    1756           4 :         if (memcmp(Name.data()+6, "leanup", 6) != 0)
    1757             :           break;
    1758             :         return AttributeList::AT_Cleanup;        // "gnu::cleanup"
    1759             :       case 'f':  // 1 string to match.
    1760          19 :         if (memcmp(Name.data()+6, "latten", 6) != 0)
    1761             :           break;
    1762             :         return AttributeList::AT_Flatten;        // "gnu::flatten"
    1763           4 :       case 'n':  // 3 strings to match.
    1764           4 :         if (Name[6] != 'o')
    1765             :           break;
    1766           4 :         switch (Name[7]) {
    1767             :         default: break;
    1768             :         case 'd':        // 1 string to match.
    1769           2 :           if (memcmp(Name.data()+8, "ebug", 4) != 0)
    1770             :             break;
    1771             :           return AttributeList::AT_NoDebug;      // "gnu::nodebug"
    1772             :         case 'n':        // 1 string to match.
    1773           2 :           if (memcmp(Name.data()+8, "null", 4) != 0)
    1774             :             break;
    1775             :           return AttributeList::AT_NonNull;      // "gnu::nonnull"
    1776             :         case 't':        // 1 string to match.
    1777           0 :           if (memcmp(Name.data()+8, "hrow", 4) != 0)
    1778             :             break;
    1779             :           return AttributeList::AT_NoThrow;      // "gnu::nothrow"
    1780             :         }
    1781             :         break;
    1782             :       case 'r':  // 2 strings to match.
    1783           0 :         if (memcmp(Name.data()+6, "eg", 2) != 0)
    1784             :           break;
    1785           0 :         switch (Name[8]) {
    1786             :         default: break;
    1787             :         case 'c':        // 1 string to match.
    1788           0 :           if (memcmp(Name.data()+9, "all", 3) != 0)
    1789             :             break;
    1790             :           return AttributeList::AT_RegCall;      // "gnu::regcall"
    1791             :         case 'p':        // 1 string to match.
    1792           0 :           if (memcmp(Name.data()+9, "arm", 3) != 0)
    1793             :             break;
    1794             :           return AttributeList::AT_Regparm;      // "gnu::regparm"
    1795             :         }
    1796             :         break;
    1797           6 :       case 's':  // 2 strings to match.
    1798           6 :         switch (Name[6]) {
    1799             :         default: break;
    1800             :         case 'e':        // 1 string to match.
    1801           0 :           if (memcmp(Name.data()+7, "ction", 5) != 0)
    1802             :             break;
    1803             :           return AttributeList::AT_Section;      // "gnu::section"
    1804             :         case 't':        // 1 string to match.
    1805           6 :           if (memcmp(Name.data()+7, "dcall", 5) != 0)
    1806             :             break;
    1807             :           return AttributeList::AT_StdCall;      // "gnu::stdcall"
    1808             :         }
    1809             :         break;
    1810             :       case 'w':  // 1 string to match.
    1811           0 :         if (memcmp(Name.data()+6, "eakref", 6) != 0)
    1812             :           break;
    1813             :         return AttributeList::AT_WeakRef;        // "gnu::weakref"
    1814             :       }
    1815             :       break;
    1816             :     }
    1817             :     break;
    1818         157 :   case 13:       // 12 strings to match.
    1819         157 :     switch (Name[0]) {
    1820             :     default: break;
    1821             :     case ':':    // 1 string to match.
    1822          79 :       if (memcmp(Name.data()+1, ":fallthrough", 12) != 0)
    1823             :         break;
    1824             :       return AttributeList::AT_FallThrough;      // "::fallthrough"
    1825             :     case 'c':    // 2 strings to match.
    1826           0 :       if (memcmp(Name.data()+1, "lang::", 6) != 0)
    1827             :         break;
    1828           0 :       switch (Name[7]) {
    1829             :       default: break;
    1830             :       case 'b':  // 1 string to match.
    1831           0 :         if (memcmp(Name.data()+8, "locks", 5) != 0)
    1832             :           break;
    1833             :         return AttributeList::AT_Blocks;         // "clang::blocks"
    1834             :       case 'p':  // 1 string to match.
    1835           0 :         if (memcmp(Name.data()+8, "ascal", 5) != 0)
    1836             :           break;
    1837             :         return AttributeList::AT_Pascal;         // "clang::pascal"
    1838             :       }
    1839             :       break;
    1840          78 :     case 'g':    // 9 strings to match.
    1841          78 :       switch (Name[1]) {
    1842             :       default: break;
    1843             :       case 'n':  // 8 strings to match.
    1844          42 :         if (memcmp(Name.data()+2, "u::", 3) != 0)
    1845             :           break;
    1846          42 :         switch (Name[5]) {
    1847             :         default: break;
    1848             :         case 'f':        // 1 string to match.
    1849          12 :           if (memcmp(Name.data()+6, "astcall", 7) != 0)
    1850             :             break;
    1851             :           return AttributeList::AT_FastCall;     // "gnu::fastcall"
    1852          30 :         case 'n':        // 4 strings to match.
    1853          30 :           if (Name[6] != 'o')
    1854             :             break;
    1855          30 :           switch (Name[7]) {
    1856             :           default: break;
    1857             :           case 'c':      // 1 string to match.
    1858           0 :             if (memcmp(Name.data()+8, "ommon", 5) != 0)
    1859             :               break;
    1860             :             return AttributeList::AT_NoCommon;   // "gnu::nocommon"
    1861             :           case 'i':      // 1 string to match.
    1862           0 :             if (memcmp(Name.data()+8, "nline", 5) != 0)
    1863             :               break;
    1864             :             return AttributeList::AT_NoInline;   // "gnu::noinline"
    1865             :           case 'm':      // 1 string to match.
    1866           0 :             if (memcmp(Name.data()+8, "ips16", 5) != 0)
    1867             :               break;
    1868             :             return AttributeList::AT_NoMips16;   // "gnu::nomips16"
    1869             :           case 'r':      // 1 string to match.
    1870          30 :             if (memcmp(Name.data()+8, "eturn", 5) != 0)
    1871             :               break;
    1872             :             return AttributeList::AT_NoReturn;   // "gnu::noreturn"
    1873             :           }
    1874             :           break;
    1875           0 :         case 's':        // 2 strings to match.
    1876           0 :           switch (Name[6]) {
    1877             :           default: break;
    1878             :           case 'e':      // 1 string to match.
    1879           0 :             if (memcmp(Name.data()+7, "ntinel", 6) != 0)
    1880             :               break;
    1881             :             return AttributeList::AT_Sentinel;   // "gnu::sentinel"
    1882             :           case 'y':      // 1 string to match.
    1883           0 :             if (memcmp(Name.data()+7, "sv_abi", 6) != 0)
    1884             :               break;
    1885             :             return AttributeList::AT_SysVABI;    // "gnu::sysv_abi"
    1886             :           }
    1887             :           break;
    1888             :         case 't':        // 1 string to match.
    1889           0 :           if (memcmp(Name.data()+6, "hiscall", 7) != 0)
    1890             :             break;
    1891             :           return AttributeList::AT_ThisCall;     // "gnu::thiscall"
    1892             :         }
    1893             :         break;
    1894             :       case 's':  // 1 string to match.
    1895          36 :         if (memcmp(Name.data()+2, "l::suppress", 11) != 0)
    1896             :           break;
    1897             :         return AttributeList::AT_Suppress;       // "gsl::suppress"
    1898             :       }
    1899             :       break;
    1900             :     }
    1901             :     break;
    1902         119 :   case 14:       // 13 strings to match.
    1903         119 :     switch (Name[0]) {
    1904             :     default: break;
    1905             :     case ':':    // 1 string to match.
    1906          62 :       if (memcmp(Name.data()+1, ":maybe_unused", 13) != 0)
    1907             :         break;
    1908             :       return AttributeList::AT_Unused;   // "::maybe_unused"
    1909             :     case 'c':    // 3 strings to match.
    1910          16 :       if (memcmp(Name.data()+1, "lang::", 6) != 0)
    1911             :         break;
    1912          16 :       switch (Name[7]) {
    1913             :       default: break;
    1914             :       case 'm':  // 1 string to match.
    1915           0 :         if (memcmp(Name.data()+8, "insize", 6) != 0)
    1916             :           break;
    1917             :         return AttributeList::AT_MinSize;        // "clang::minsize"
    1918          16 :       case 'o':  // 2 strings to match.
    1919          16 :         switch (Name[8]) {
    1920             :         default: break;
    1921             :         case 'b':        // 1 string to match.
    1922           0 :           if (memcmp(Name.data()+9, "jc_gc", 5) != 0)
    1923             :             break;
    1924             :           return AttributeList::AT_ObjCGC;       // "clang::objc_gc"
    1925             :         case 'p':        // 1 string to match.
    1926          16 :           if (memcmp(Name.data()+9, "tnone", 5) != 0)
    1927             :             break;
    1928             :           return AttributeList::AT_OptimizeNone;         // "clang::optnone"
    1929             :         }
    1930             :         break;
    1931             :       }
    1932             :       break;
    1933             :     case 'g':    // 9 strings to match.
    1934          41 :       if (memcmp(Name.data()+1, "nu::", 4) != 0)
    1935             :         break;
    1936          41 :       switch (Name[5]) {
    1937             :       default: break;
    1938             :       case 'd':  // 2 strings to match.
    1939           0 :         if (memcmp(Name.data()+6, "ll", 2) != 0)
    1940             :           break;
    1941           0 :         switch (Name[8]) {
    1942             :         default: break;
    1943             :         case 'e':        // 1 string to match.
    1944           0 :           if (memcmp(Name.data()+9, "xport", 5) != 0)
    1945             :             break;
    1946             :           return AttributeList::AT_DLLExport;    // "gnu::dllexport"
    1947             :         case 'i':        // 1 string to match.
    1948           0 :           if (memcmp(Name.data()+9, "mport", 5) != 0)
    1949             :             break;
    1950             :           return AttributeList::AT_DLLImport;    // "gnu::dllimport"
    1951             :         }
    1952             :         break;
    1953             :       case 'i':  // 1 string to match.
    1954           0 :         if (memcmp(Name.data()+6, "nterrupt", 8) != 0)
    1955             :           break;
    1956             :         return AttributeList::AT_Interrupt;      // "gnu::interrupt"
    1957             :       case 'l':  // 1 string to match.
    1958           0 :         if (memcmp(Name.data()+6, "ong_call", 8) != 0)
    1959             :           break;
    1960             :         return AttributeList::AT_MipsLongCall;   // "gnu::long_call"
    1961          38 :       case 'm':  // 3 strings to match.
    1962          38 :         switch (Name[6]) {
    1963             :         default: break;
    1964             :         case 'a':        // 1 string to match.
    1965          38 :           if (memcmp(Name.data()+7, "y_alias", 7) != 0)
    1966             :             break;
    1967             :           return AttributeList::AT_MayAlias;     // "gnu::may_alias"
    1968             :         case 'i':        // 1 string to match.
    1969           0 :           if (memcmp(Name.data()+7, "cromips", 7) != 0)
    1970             :             break;
    1971             :           return AttributeList::AT_MicroMips;    // "gnu::micromips"
    1972             :         case 's':        // 1 string to match.
    1973           0 :           if (memcmp(Name.data()+7, "_struct", 7) != 0)
    1974             :             break;
    1975             :           return AttributeList::AT_MSStruct;     // "gnu::ms_struct"
    1976             :         }
    1977             :         break;
    1978             :       case 's':  // 1 string to match.
    1979           0 :         if (memcmp(Name.data()+6, "electany", 8) != 0)
    1980             :           break;
    1981             :         return AttributeList::AT_SelectAny;      // "gnu::selectany"
    1982             :       case 't':  // 1 string to match.
    1983           3 :         if (memcmp(Name.data()+6, "ls_model", 8) != 0)
    1984             :           break;
    1985             :         return AttributeList::AT_TLSModel;       // "gnu::tls_model"
    1986             :       }
    1987             :       break;
    1988             :     }
    1989             :     break;
    1990          77 :   case 15:       // 14 strings to match.
    1991          77 :     switch (Name[0]) {
    1992             :     default: break;
    1993             :     case 'c':    // 5 strings to match.
    1994          31 :       if (memcmp(Name.data()+1, "lang::", 6) != 0)
    1995             :         break;
    1996          31 :       switch (Name[7]) {
    1997             :       default: break;
    1998             :       case 'N':  // 1 string to match.
    1999           0 :         if (memcmp(Name.data()+8, "SObject", 7) != 0)
    2000             :           break;
    2001             :         return AttributeList::AT_ObjCNSObject;   // "clang::NSObject"
    2002             :       case 'a':  // 1 string to match.
    2003          22 :         if (memcmp(Name.data()+8, "nnotate", 7) != 0)
    2004             :           break;
    2005             :         return AttributeList::AT_Annotate;       // "clang::annotate"
    2006           4 :       case 'i':  // 2 strings to match.
    2007           4 :         if (Name[8] != 'b')
    2008             :           break;
    2009           4 :         switch (Name[9]) {
    2010             :         default: break;
    2011             :         case 'a':        // 1 string to match.
    2012           0 :           if (memcmp(Name.data()+10, "ction", 5) != 0)
    2013             :             break;
    2014             :           return AttributeList::AT_IBAction;     // "clang::ibaction"
    2015             :         case 'o':        // 1 string to match.
    2016           4 :           if (memcmp(Name.data()+10, "utlet", 5) != 0)
    2017             :             break;
    2018             :           return AttributeList::AT_IBOutlet;     // "clang::iboutlet"
    2019             :         }
    2020             :         break;
    2021             :       case 'n':  // 1 string to match.
    2022           5 :         if (memcmp(Name.data()+8, "oescape", 7) != 0)
    2023             :           break;
    2024             :         return AttributeList::AT_NoEscape;       // "clang::noescape"
    2025             :       }
    2026             :       break;
    2027             :     case 'g':    // 9 strings to match.
    2028          36 :       if (memcmp(Name.data()+1, "nu::", 4) != 0)
    2029             :         break;
    2030          36 :       switch (Name[5]) {
    2031             :       default: break;
    2032           0 :       case 'a':  // 2 strings to match.
    2033           0 :         switch (Name[6]) {
    2034             :         default: break;
    2035             :         case 'l':        // 1 string to match.
    2036           0 :           if (memcmp(Name.data()+7, "loc_size", 8) != 0)
    2037             :             break;
    2038             :           return AttributeList::AT_AllocSize;    // "gnu::alloc_size"
    2039             :         case 'r':        // 1 string to match.
    2040           0 :           if (memcmp(Name.data()+7, "tificial", 8) != 0)
    2041             :             break;
    2042             :           return AttributeList::AT_Artificial;   // "gnu::artificial"
    2043             :         }
    2044             :         break;
    2045          20 :       case 'd':  // 2 strings to match.
    2046          20 :         if (Name[6] != 'e')
    2047             :           break;
    2048          20 :         switch (Name[7]) {
    2049             :         default: break;
    2050             :         case 'p':        // 1 string to match.
    2051          20 :           if (memcmp(Name.data()+8, "recated", 7) != 0)
    2052             :             break;
    2053             :           return AttributeList::AT_Deprecated;   // "gnu::deprecated"
    2054             :         case 's':        // 1 string to match.
    2055           0 :           if (memcmp(Name.data()+8, "tructor", 7) != 0)
    2056             :             break;
    2057             :           return AttributeList::AT_Destructor;   // "gnu::destructor"
    2058             :         }
    2059             :         break;
    2060             :       case 'f':  // 1 string to match.
    2061           0 :         if (memcmp(Name.data()+6, "ormat_arg", 9) != 0)
    2062             :           break;
    2063             :         return AttributeList::AT_FormatArg;      // "gnu::format_arg"
    2064             :       case 'g':  // 1 string to match.
    2065           2 :         if (memcmp(Name.data()+6, "nu_inline", 9) != 0)
    2066             :           break;
    2067             :         return AttributeList::AT_GNUInline;      // "gnu::gnu_inline"
    2068             :       case 'n':  // 1 string to match.
    2069          11 :         if (memcmp(Name.data()+6, "ocf_check", 9) != 0)
    2070             :           break;
    2071             :         return AttributeList::AT_AnyX86NoCfCheck;        // "gnu::nocf_check"
    2072             :       case 's':  // 1 string to match.
    2073           0 :         if (memcmp(Name.data()+6, "hort_call", 9) != 0)
    2074             :           break;
    2075             :         return AttributeList::AT_MipsShortCall;  // "gnu::short_call"
    2076             :       case 'v':  // 1 string to match.
    2077           3 :         if (memcmp(Name.data()+6, "isibility", 9) != 0)
    2078             :           break;
    2079             :         return AttributeList::AT_Visibility;     // "gnu::visibility"
    2080             :       }
    2081             :       break;
    2082             :     }
    2083             :     break;
    2084        1554 :   case 16:       // 8 strings to match.
    2085        1554 :     switch (Name[0]) {
    2086             :     default: break;
    2087             :     case 'c':    // 3 strings to match.
    2088           3 :       if (memcmp(Name.data()+1, "lang::", 6) != 0)
    2089             :         break;
    2090           3 :       switch (Name[7]) {
    2091             :       default: break;
    2092             :       case 'f':  // 1 string to match.
    2093           1 :         if (memcmp(Name.data()+8, "lag_enum", 8) != 0)
    2094             :           break;
    2095             :         return AttributeList::AT_FlagEnum;       // "clang::flag_enum"
    2096             :       case 's':  // 1 string to match.
    2097           2 :         if (memcmp(Name.data()+8, "wiftcall", 8) != 0)
    2098             :           break;
    2099             :         return AttributeList::AT_SwiftCall;      // "clang::swiftcall"
    2100             :       case 'v':  // 1 string to match.
    2101           0 :         if (memcmp(Name.data()+8, "ecreturn", 8) != 0)
    2102             :           break;
    2103             :         return AttributeList::AT_VecReturn;      // "clang::vecreturn"
    2104             :       }
    2105             :       break;
    2106             :     case 'g':    // 5 strings to match.
    2107           3 :       if (memcmp(Name.data()+1, "nu::", 4) != 0)
    2108             :         break;
    2109           3 :       switch (Name[5]) {
    2110             :       default: break;
    2111             :       case 'a':  // 1 string to match.
    2112           0 :         if (memcmp(Name.data()+6, "lloc_align", 10) != 0)
    2113             :           break;
    2114             :         return AttributeList::AT_AllocAlign;     // "gnu::alloc_align"
    2115             :       case 'c':  // 1 string to match.
    2116           0 :         if (memcmp(Name.data()+6, "onstructor", 10) != 0)
    2117             :           break;
    2118             :         return AttributeList::AT_Constructor;    // "gnu::constructor"
    2119             :       case 'n':  // 1 string to match.
    2120           0 :         if (memcmp(Name.data()+6, "omicromips", 10) != 0)
    2121             :           break;
    2122             :         return AttributeList::AT_NoMicroMips;    // "gnu::nomicromips"
    2123             :       case 'v':  // 1 string to match.
    2124           3 :         if (memcmp(Name.data()+6, "ector_size", 10) != 0)
    2125             :           break;
    2126             :         return AttributeList::AT_VectorSize;     // "gnu::vector_size"
    2127             :       case 'w':  // 1 string to match.
    2128           0 :         if (memcmp(Name.data()+6, "arn_unused", 10) != 0)
    2129             :           break;
    2130             :         return AttributeList::AT_WarnUnused;     // "gnu::warn_unused"
    2131             :       }
    2132             :       break;
    2133             :     }
    2134             :     break;
    2135             :   case 17:       // 4 strings to match.
    2136           0 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    2137             :       break;
    2138           0 :     switch (Name[7]) {
    2139             :     default: break;
    2140           0 :     case 'c':    // 3 strings to match.
    2141           0 :       switch (Name[8]) {
    2142             :       default: break;
    2143             :       case 'a':  // 1 string to match.
    2144           0 :         if (memcmp(Name.data()+9, "pability", 8) != 0)
    2145             :           break;
    2146             :         return AttributeList::AT_Capability;     // "clang::capability"
    2147           0 :       case 'o':  // 2 strings to match.
    2148           0 :         if (Name[9] != 'n')
    2149             :           break;
    2150           0 :         switch (Name[10]) {
    2151             :         default: break;
    2152             :         case 's':        // 1 string to match.
    2153           0 :           if (memcmp(Name.data()+11, "umable", 6) != 0)
    2154             :             break;
    2155             :           return AttributeList::AT_Consumable;   // "clang::consumable"
    2156             :         case 'v':        // 1 string to match.
    2157           0 :           if (memcmp(Name.data()+11, "ergent", 6) != 0)
    2158             :             break;
    2159             :           return AttributeList::AT_Convergent;   // "clang::convergent"
    2160             :         }
    2161             :         break;
    2162             :       }
    2163             :       break;
    2164             :     case 'v':    // 1 string to match.
    2165           0 :       if (memcmp(Name.data()+8, "ectorcall", 9) != 0)
    2166             :         break;
    2167             :       return AttributeList::AT_VectorCall;       // "clang::vectorcall"
    2168             :     }
    2169             :     break;
    2170         110 :   case 18:       // 13 strings to match.
    2171         110 :     switch (Name[0]) {
    2172             :     default: break;
    2173             :     case 'c':    // 10 strings to match.
    2174         108 :       if (memcmp(Name.data()+1, "lang::", 6) != 0)
    2175             :         break;
    2176         108 :       switch (Name[7]) {
    2177             :       default: break;
    2178             :       case 'c':  // 1 string to match.
    2179           0 :         if (memcmp(Name.data()+8, "f_consumed", 10) != 0)
    2180             :           break;
    2181             :         return AttributeList::AT_CFConsumed;     // "clang::cf_consumed"
    2182             :       case 'f':  // 1 string to match.
    2183          76 :         if (memcmp(Name.data()+8, "allthrough", 10) != 0)
    2184             :           break;
    2185             :         return AttributeList::AT_FallThrough;    // "clang::fallthrough"
    2186             :       case 'g':  // 1 string to match.
    2187           0 :         if (memcmp(Name.data()+8, "uarded_var", 10) != 0)
    2188             :           break;
    2189             :         return AttributeList::AT_GuardedVar;     // "clang::guarded_var"
    2190          28 :       case 'n':  // 3 strings to match.
    2191          28 :         switch (Name[8]) {
    2192             :         default: break;
    2193          28 :         case 'o':        // 2 strings to match.
    2194          28 :           switch (Name[9]) {
    2195             :           default: break;
    2196             :           case '_':      // 1 string to match.
    2197          24 :             if (memcmp(Name.data()+10, "sanitize", 8) != 0)
    2198             :               break;
    2199             :             return AttributeList::AT_NoSanitize;         // "clang::no_sanitize"
    2200             :           case 'd':      // 1 string to match.
    2201           4 :             if (memcmp(Name.data()+10, "uplicate", 8) != 0)
    2202             :               break;
    2203             :             return AttributeList::AT_NoDuplicate;        // "clang::noduplicate"
    2204             :           }
    2205             :           break;
    2206             :         case 's':        // 1 string to match.
    2207           0 :           if (memcmp(Name.data()+9, "_consumed", 9) != 0)
    2208             :             break;
    2209             :           return AttributeList::AT_NSConsumed;   // "clang::ns_consumed"
    2210             :         }
    2211             :         break;
    2212             :       case 'o':  // 1 string to match.
    2213           0 :         if (memcmp(Name.data()+8, "bjc_bridge", 10) != 0)
    2214             :           break;
    2215             :         return AttributeList::AT_ObjCBridge;     // "clang::objc_bridge"
    2216             :       case 't':  // 1 string to match.
    2217           2 :         if (memcmp(Name.data()+8, "rivial_abi", 10) != 0)
    2218             :           break;
    2219             :         return AttributeList::AT_TrivialABI;     // "clang::trivial_abi"
    2220             :       case 'u':  // 1 string to match.
    2221           2 :         if (memcmp(Name.data()+8, "navailable", 10) != 0)
    2222             :           break;
    2223             :         return AttributeList::AT_Unavailable;    // "clang::unavailable"
    2224             :       case 'w':  // 1 string to match.
    2225           0 :         if (memcmp(Name.data()+8, "eak_import", 10) != 0)
    2226             :           break;
    2227             :         return AttributeList::AT_WeakImport;     // "clang::weak_import"
    2228             :       }
    2229             :       break;
    2230             :     case 'g':    // 3 strings to match.
    2231           2 :       if (memcmp(Name.data()+1, "nu::", 4) != 0)
    2232             :         break;
    2233           2 :       switch (Name[5]) {
    2234             :       default: break;
    2235             :       case 'a':  // 1 string to match.
    2236           2 :         if (memcmp(Name.data()+6, "lways_inline", 12) != 0)
    2237             :           break;
    2238             :         return AttributeList::AT_AlwaysInline;   // "gnu::always_inline"
    2239             :       case 'i':  // 1 string to match.
    2240           0 :         if (memcmp(Name.data()+6, "nit_priority", 12) != 0)
    2241             :           break;
    2242             :         return AttributeList::AT_InitPriority;   // "gnu::init_priority"
    2243             :       case 'r':  // 1 string to match.
    2244           0 :         if (memcmp(Name.data()+6, "eturns_twice", 12) != 0)
    2245             :           break;
    2246             :         return AttributeList::AT_ReturnsTwice;   // "gnu::returns_twice"
    2247             :       }
    2248             :       break;
    2249             :     }
    2250             :     break;
    2251          76 :   case 19:       // 6 strings to match.
    2252          76 :     switch (Name[0]) {
    2253             :     default: break;
    2254             :     case 'c':    // 4 strings to match.
    2255          18 :       if (memcmp(Name.data()+1, "lang::", 6) != 0)
    2256             :         break;
    2257          18 :       switch (Name[7]) {
    2258             :       default: break;
    2259             :       case 'a':  // 1 string to match.
    2260          14 :         if (memcmp(Name.data()+8, "vailability", 11) != 0)
    2261             :           break;
    2262             :         return AttributeList::AT_Availability;   // "clang::availability"
    2263           2 :       case 'o':  // 2 strings to match.
    2264           2 :         switch (Name[8]) {
    2265             :         default: break;
    2266             :         case 'b':        // 1 string to match.
    2267           0 :           if (memcmp(Name.data()+9, "jc_boxable", 10) != 0)
    2268             :             break;
    2269             :           return AttributeList::AT_ObjCBoxable;  // "clang::objc_boxable"
    2270             :         case 'v':        // 1 string to match.
    2271           2 :           if (memcmp(Name.data()+9, "erloadable", 10) != 0)
    2272             :             break;
    2273             :           return AttributeList::AT_Overloadable;         // "clang::overloadable"
    2274             :         }
    2275             :         break;
    2276             :       case 'p':  // 1 string to match.
    2277           0 :         if (memcmp(Name.data()+8, "reserve_all", 11) != 0)
    2278             :           break;
    2279             :         return AttributeList::AT_PreserveAll;    // "clang::preserve_all"
    2280             :       }
    2281             :       break;
    2282             :     case 'g':    // 2 strings to match.
    2283          25 :       if (memcmp(Name.data()+1, "nu::", 4) != 0)
    2284             :         break;
    2285          25 :       switch (Name[5]) {
    2286             :       default: break;
    2287             :       case 'a':  // 1 string to match.
    2288           0 :         if (memcmp(Name.data()+6, "ssume_aligned", 13) != 0)
    2289             :           break;
    2290             :         return AttributeList::AT_AssumeAligned;  // "gnu::assume_aligned"
    2291             :       case 'n':  // 1 string to match.
    2292          25 :         if (memcmp(Name.data()+6, "o_split_stack", 13) != 0)
    2293             :           break;
    2294             :         return AttributeList::AT_NoSplitStack;   // "gnu::no_split_stack"
    2295             :       }
    2296             :       break;
    2297             :     }
    2298             :     break;
    2299         147 :   case 20:       // 8 strings to match.
    2300         147 :     switch (Name[0]) {
    2301             :     default: break;
    2302             :     case ':':    // 1 string to match.
    2303         103 :       if (memcmp(Name.data()+1, ":carries_dependency", 19) != 0)
    2304             :         break;
    2305             :       return AttributeList::AT_CarriesDependency;        // "::carries_dependency"
    2306             :     case 'c':    // 6 strings to match.
    2307          44 :       if (memcmp(Name.data()+1, "lang::", 6) != 0)
    2308             :         break;
    2309          44 :       switch (Name[7]) {
    2310             :       default: break;
    2311             :       case 'a':  // 1 string to match.
    2312           2 :         if (memcmp(Name.data()+8, "ddress_space", 12) != 0)
    2313             :           break;
    2314             :         return AttributeList::AT_AddressSpace;   // "clang::address_space"
    2315             :       case 'c':  // 1 string to match.
    2316           0 :         if (memcmp(Name.data()+8, "allable_when", 12) != 0)
    2317             :           break;
    2318             :         return AttributeList::AT_CallableWhen;   // "clang::callable_when"
    2319             :       case 'p':  // 1 string to match.
    2320           0 :         if (memcmp(Name.data()+8, "reserve_most", 12) != 0)
    2321             :           break;
    2322             :         return AttributeList::AT_PreserveMost;   // "clang::preserve_most"
    2323           2 :       case 's':  // 2 strings to match.
    2324           2 :         switch (Name[8]) {
    2325             :         default: break;
    2326             :         case 'e':        // 1 string to match.
    2327           0 :           if (memcmp(Name.data()+9, "t_typestate", 11) != 0)
    2328             :             break;
    2329             :           return AttributeList::AT_SetTypestate;         // "clang::set_typestate"
    2330             :         case 'w':        // 1 string to match.
    2331           2 :           if (memcmp(Name.data()+9, "ift_context", 11) != 0)
    2332             :             break;
    2333             :           return AttributeList::AT_SwiftContext;         // "clang::swift_context"
    2334             :         }
    2335             :         break;
    2336             :       case 'x':  // 1 string to match.
    2337          40 :         if (memcmp(Name.data()+8, "ray_log_args", 12) != 0)
    2338             :           break;
    2339             :         return AttributeList::AT_XRayLogArgs;    // "clang::xray_log_args"
    2340             :       }
    2341             :       break;
    2342             :     case 'g':    // 1 string to match.
    2343           0 :       if (memcmp(Name.data()+1, "nu::returns_nonnull", 19) != 0)
    2344             :         break;
    2345             :       return AttributeList::AT_ReturnsNonNull;   // "gnu::returns_nonnull"
    2346             :     }
    2347             :     break;
    2348             :   case 21:       // 5 strings to match.
    2349           6 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    2350             :       break;
    2351           2 :     switch (Name[7]) {
    2352             :     default: break;
    2353             :     case 'i':    // 1 string to match.
    2354           0 :       if (memcmp(Name.data()+8, "ntel_ocl_bicc", 13) != 0)
    2355             :         break;
    2356             :       return AttributeList::AT_IntelOclBicc;     // "clang::intel_ocl_bicc"
    2357             :     case 'o':    // 2 strings to match.
    2358           2 :       if (memcmp(Name.data()+8, "bjc_", 4) != 0)
    2359             :         break;
    2360           2 :       switch (Name[12]) {
    2361             :       default: break;
    2362             :       case 'e':  // 1 string to match.
    2363           2 :         if (memcmp(Name.data()+13, "xception", 8) != 0)
    2364             :           break;
    2365             :         return AttributeList::AT_ObjCException;  // "clang::objc_exception"
    2366             :       case 'o':  // 1 string to match.
    2367           0 :         if (memcmp(Name.data()+13, "wnership", 8) != 0)
    2368             :           break;
    2369             :         return AttributeList::AT_ObjCOwnership;  // "clang::objc_ownership"
    2370             :       }
    2371             :       break;
    2372             :     case 'p':    // 1 string to match.
    2373           0 :       if (memcmp(Name.data()+8, "t_guarded_var", 13) != 0)
    2374             :         break;
    2375             :       return AttributeList::AT_PtGuardedVar;     // "clang::pt_guarded_var"
    2376             :     case 't':    // 1 string to match.
    2377           0 :       if (memcmp(Name.data()+8, "est_typestate", 13) != 0)
    2378             :         break;
    2379             :       return AttributeList::AT_TestTypestate;    // "clang::test_typestate"
    2380             :     }
    2381             :     break;
    2382          10 :   case 22:       // 11 strings to match.
    2383          10 :     switch (Name[0]) {
    2384             :     default: break;
    2385             :     case 'c':    // 10 strings to match.
    2386          10 :       if (memcmp(Name.data()+1, "lang::", 6) != 0)
    2387             :         break;
    2388          10 :       switch (Name[7]) {
    2389             :       default: break;
    2390             :       case 'a':  // 2 strings to match.
    2391           0 :         if (memcmp(Name.data()+8, "mdgpu_num_", 10) != 0)
    2392             :           break;
    2393           0 :         switch (Name[18]) {
    2394             :         default: break;
    2395             :         case 's':        // 1 string to match.
    2396           0 :           if (memcmp(Name.data()+19, "gpr", 3) != 0)
    2397             :             break;
    2398             :           return AttributeList::AT_AMDGPUNumSGPR;        // "clang::amdgpu_num_sgpr"
    2399             :         case 'v':        // 1 string to match.
    2400           0 :           if (memcmp(Name.data()+19, "gpr", 3) != 0)
    2401             :             break;
    2402             :           return AttributeList::AT_AMDGPUNumVGPR;        // "clang::amdgpu_num_vgpr"
    2403             :         }
    2404             :         break;
    2405             :       case 'n':  // 1 string to match.
    2406          10 :         if (memcmp(Name.data()+8, "ot_tail_called", 14) != 0)
    2407             :           break;
    2408             :         return AttributeList::AT_NotTailCalled;  // "clang::not_tail_called"
    2409           0 :       case 'o':  // 3 strings to match.
    2410           0 :         switch (Name[8]) {
    2411             :         default: break;
    2412             :         case 'b':        // 1 string to match.
    2413           0 :           if (memcmp(Name.data()+9, "jc_root_class", 13) != 0)
    2414             :             break;
    2415             :           return AttributeList::AT_ObjCRootClass;        // "clang::objc_root_class"
    2416             :         case 'w':        // 2 strings to match.
    2417           0 :           if (memcmp(Name.data()+9, "nership_", 8) != 0)
    2418             :             break;
    2419           0 :           switch (Name[17]) {
    2420             :           default: break;
    2421             :           case 'h':      // 1 string to match.
    2422           0 :             if (memcmp(Name.data()+18, "olds", 4) != 0)
    2423             :               break;
    2424             :             return AttributeList::AT_Ownership;  // "clang::ownership_holds"
    2425             :           case 't':      // 1 string to match.
    2426           0 :             if (memcmp(Name.data()+18, "akes", 4) != 0)
    2427             :               break;
    2428             :             return AttributeList::AT_Ownership;  // "clang::ownership_takes"
    2429             :           }
    2430             :           break;
    2431             :         }
    2432             :         break;
    2433             :       case 'p':  // 1 string to match.
    2434           0 :         if (memcmp(Name.data()+8, "aram_typestate", 14) != 0)
    2435             :           break;
    2436             :         return AttributeList::AT_ParamTypestate;         // "clang::param_typestate"
    2437             :       case 's':  // 1 string to match.
    2438           0 :         if (memcmp(Name.data()+8, "coped_lockable", 14) != 0)
    2439             :           break;
    2440             :         return AttributeList::AT_ScopedLockable;         // "clang::scoped_lockable"
    2441             :       case 't':  // 1 string to match.
    2442           0 :         if (memcmp(Name.data()+8, "ype_visibility", 14) != 0)
    2443             :           break;
    2444             :         return AttributeList::AT_TypeVisibility;         // "clang::type_visibility"
    2445             :       case 'u':  // 1 string to match.
    2446           0 :         if (memcmp(Name.data()+8, "nlock_function", 14) != 0)
    2447             :           break;
    2448             :         return AttributeList::AT_ReleaseCapability;      // "clang::unlock_function"
    2449             :       }
    2450             :       break;
    2451             :     case 'g':    // 1 string to match.
    2452           0 :       if (memcmp(Name.data()+1, "nu::transparent_union", 21) != 0)
    2453             :         break;
    2454             :       return AttributeList::AT_TransparentUnion;         // "gnu::transparent_union"
    2455             :     }
    2456             :     break;
    2457          23 :   case 23:       // 7 strings to match.
    2458          23 :     switch (Name[0]) {
    2459             :     default: break;
    2460             :     case 'c':    // 5 strings to match.
    2461          19 :       if (memcmp(Name.data()+1, "lang::", 6) != 0)
    2462             :         break;
    2463          19 :       switch (Name[7]) {
    2464             :       default: break;
    2465             :       case 'i':  // 1 string to match.
    2466          13 :         if (memcmp(Name.data()+8, "nternal_linkage", 15) != 0)
    2467             :           break;
    2468             :         return AttributeList::AT_InternalLinkage;        // "clang::internal_linkage"
    2469           6 :       case 'n':  // 2 strings to match.
    2470           6 :         switch (Name[8]) {
    2471             :         default: break;
    2472             :         case 'e':        // 1 string to match.
    2473           0 :           if (memcmp(Name.data()+9, "on_vector_type", 14) != 0)
    2474             :             break;
    2475             :           return AttributeList::AT_NeonVectorType;       // "clang::neon_vector_type"
    2476             :         case 's':        // 1 string to match.
    2477           6 :           if (memcmp(Name.data()+9, "_consumes_self", 14) != 0)
    2478             :             break;
    2479             :           return AttributeList::AT_NSConsumesSelf;       // "clang::ns_consumes_self"
    2480             :         }
    2481             :         break;
    2482             :       case 'p':  // 1 string to match.
    2483           0 :         if (memcmp(Name.data()+8, "ass_object_size", 15) != 0)
    2484             :           break;
    2485             :         return AttributeList::AT_PassObjectSize;         // "clang::pass_object_size"
    2486             :       case 'r':  // 1 string to match.
    2487           0 :         if (memcmp(Name.data()+8, "eturn_typestate", 15) != 0)
    2488             :           break;
    2489             :         return AttributeList::AT_ReturnTypestate;        // "clang::return_typestate"
    2490             :       }
    2491             :       break;
    2492             :     case 'g':    // 2 strings to match.
    2493           2 :       if (memcmp(Name.data()+1, "nu::", 4) != 0)
    2494             :         break;
    2495           2 :       switch (Name[5]) {
    2496             :       default: break;
    2497             :       case 'n':  // 1 string to match.
    2498           0 :         if (memcmp(Name.data()+6, "o_sanitize_thread", 17) != 0)
    2499             :           break;
    2500             :         return AttributeList::AT_NoSanitizeSpecific;     // "gnu::no_sanitize_thread"
    2501             :       case 'w':  // 1 string to match.
    2502           2 :         if (memcmp(Name.data()+6, "arn_unused_result", 17) != 0)
    2503             :           break;
    2504             :         return AttributeList::AT_WarnUnusedResult;       // "gnu::warn_unused_result"
    2505             :       }
    2506             :       break;
    2507             :     }
    2508             :     break;
    2509          28 :   case 24:       // 5 strings to match.
    2510          28 :     switch (Name[0]) {
    2511             :     default: break;
    2512             :     case 'c':    // 4 strings to match.
    2513           8 :       if (memcmp(Name.data()+1, "lang::", 6) != 0)
    2514             :         break;
    2515           8 :       switch (Name[7]) {
    2516             :       default: break;
    2517             :       case 'a':  // 1 string to match.
    2518           0 :         if (memcmp(Name.data()+8, "ssert_capability", 16) != 0)
    2519             :           break;
    2520             :         return AttributeList::AT_AssertCapability;       // "clang::assert_capability"
    2521           8 :       case 'o':  // 2 strings to match.
    2522           8 :         switch (Name[8]) {
    2523             :         default: break;
    2524             :         case 'b':        // 1 string to match.
    2525           4 :           if (memcmp(Name.data()+9, "jc_runtime_name", 15) != 0)
    2526             :             break;
    2527             :           return AttributeList::AT_ObjCRuntimeName;      // "clang::objc_runtime_name"
    2528             :         case 'w':        // 1 string to match.
    2529           4 :           if (memcmp(Name.data()+9, "nership_returns", 15) != 0)
    2530             :             break;
    2531             :           return AttributeList::AT_Ownership;    // "clang::ownership_returns"
    2532             :         }
    2533             :         break;
    2534             :       case 's':  // 1 string to match.
    2535           0 :         if (memcmp(Name.data()+8, "hared_capability", 16) != 0)
    2536             :           break;
    2537             :         return AttributeList::AT_Capability;     // "clang::shared_capability"
    2538             :       }
    2539             :       break;
    2540             :     case 'g':    // 1 string to match.
    2541          18 :       if (memcmp(Name.data()+1, "nu::no_sanitize_address", 23) != 0)
    2542             :         break;
    2543             :       return AttributeList::AT_NoSanitizeSpecific;       // "gnu::no_sanitize_address"
    2544             :     }
    2545             :     break;
    2546             :   case 25:       // 10 strings to match.
    2547          39 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    2548             :       break;
    2549          39 :     switch (Name[7]) {
    2550             :     default: break;
    2551             :     case 'a':    // 1 string to match.
    2552           0 :       if (memcmp(Name.data()+8, "cquire_capability", 17) != 0)
    2553             :         break;
    2554             :       return AttributeList::AT_AcquireCapability;        // "clang::acquire_capability"
    2555             :     case 'd':    // 1 string to match.
    2556          18 :       if (memcmp(Name.data()+8, "isable_tail_calls", 17) != 0)
    2557             :         break;
    2558             :       return AttributeList::AT_DisableTailCalls;         // "clang::disable_tail_calls"
    2559             :     case 'e':    // 1 string to match.
    2560           7 :       if (memcmp(Name.data()+8, "num_extensibility", 17) != 0)
    2561             :         break;
    2562             :       return AttributeList::AT_EnumExtensibility;        // "clang::enum_extensibility"
    2563             :     case 'i':    // 1 string to match.
    2564           0 :       if (memcmp(Name.data()+8, "boutletcollection", 17) != 0)
    2565             :         break;
    2566             :       return AttributeList::AT_IBOutletCollection;       // "clang::iboutletcollection"
    2567             :     case 'n':    // 2 strings to match.
    2568           0 :       if (memcmp(Name.data()+8, "o_s", 3) != 0)
    2569             :         break;
    2570           0 :       switch (Name[11]) {
    2571             :       default: break;
    2572             :       case 'a':  // 1 string to match.
    2573           0 :         if (memcmp(Name.data()+12, "nitize_memory", 13) != 0)
    2574             :           break;
    2575             :         return AttributeList::AT_NoSanitizeSpecific;     // "clang::no_sanitize_memory"
    2576             :       case 't':  // 1 string to match.
    2577           0 :         if (memcmp(Name.data()+12, "ack_protector", 13) != 0)
    2578             :           break;
    2579             :         return AttributeList::AT_NoStackProtector;       // "clang::no_stack_protector"
    2580             :       }
    2581             :       break;
    2582             :     case 'o':    // 1 string to match.
    2583           0 :       if (memcmp(Name.data()+8, "bjc_method_family", 17) != 0)
    2584             :         break;
    2585             :       return AttributeList::AT_ObjCMethodFamily;         // "clang::objc_method_family"
    2586             :     case 'r':    // 1 string to match.
    2587           0 :       if (memcmp(Name.data()+8, "elease_capability", 17) != 0)
    2588             :         break;
    2589             :       return AttributeList::AT_ReleaseCapability;        // "clang::release_capability"
    2590             :     case 's':    // 1 string to match.
    2591           0 :       if (memcmp(Name.data()+8, "wift_error_result", 17) != 0)
    2592             :         break;
    2593             :       return AttributeList::AT_SwiftErrorResult;         // "clang::swift_error_result"
    2594             :     case 'w':    // 1 string to match.
    2595          14 :       if (memcmp(Name.data()+8, "arn_unused_result", 17) != 0)
    2596             :         break;
    2597             :       return AttributeList::AT_WarnUnusedResult;         // "clang::warn_unused_result"
    2598             :     }
    2599             :     break;
    2600             :   case 26:       // 9 strings to match.
    2601           6 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    2602             :       break;
    2603           6 :     switch (Name[7]) {
    2604             :     default: break;
    2605             :     case 'a':    // 1 string to match.
    2606           0 :       if (memcmp(Name.data()+8, "mdgpu_waves_per_eu", 18) != 0)
    2607             :         break;
    2608             :       return AttributeList::AT_AMDGPUWavesPerEU;         // "clang::amdgpu_waves_per_eu"
    2609             :     case 'c':    // 3 strings to match.
    2610           0 :       if (memcmp(Name.data()+8, "f_", 2) != 0)
    2611             :         break;
    2612           0 :       switch (Name[10]) {
    2613             :       default: break;
    2614             :       case 'a':  // 1 string to match.
    2615           0 :         if (memcmp(Name.data()+11, "udited_transfer", 15) != 0)
    2616             :           break;
    2617             :         return AttributeList::AT_CFAuditedTransfer;      // "clang::cf_audited_transfer"
    2618             :       case 'r':  // 1 string to match.
    2619           0 :         if (memcmp(Name.data()+11, "eturns_retained", 15) != 0)
    2620             :           break;
    2621             :         return AttributeList::AT_CFReturnsRetained;      // "clang::cf_returns_retained"
    2622             :       case 'u':  // 1 string to match.
    2623           0 :         if (memcmp(Name.data()+11, "nknown_transfer", 15) != 0)
    2624             :           break;
    2625             :         return AttributeList::AT_CFUnknownTransfer;      // "clang::cf_unknown_transfer"
    2626             :       }
    2627             :       break;
    2628             :     case 'n':    // 1 string to match.
    2629           0 :       if (memcmp(Name.data()+8, "s_returns_retained", 18) != 0)
    2630             :         break;
    2631             :       return AttributeList::AT_NSReturnsRetained;        // "clang::ns_returns_retained"
    2632             :     case 'o':    // 3 strings to match.
    2633           6 :       if (memcmp(Name.data()+8, "bjc_", 4) != 0)
    2634             :         break;
    2635           6 :       switch (Name[12]) {
    2636             :       default: break;
    2637             :       case 'b':  // 2 strings to match.
    2638           6 :         if (memcmp(Name.data()+13, "ridge_", 6) != 0)
    2639             :           break;
    2640           6 :         switch (Name[19]) {
    2641             :         default: break;
    2642             :         case 'm':        // 1 string to match.
    2643           0 :           if (memcmp(Name.data()+20, "utable", 6) != 0)
    2644             :             break;
    2645             :           return AttributeList::AT_ObjCBridgeMutable;    // "clang::objc_bridge_mutable"
    2646             :         case 'r':        // 1 string to match.
    2647           6 :           if (memcmp(Name.data()+20, "elated", 6) != 0)
    2648             :             break;
    2649             :           return AttributeList::AT_ObjCBridgeRelated;    // "clang::objc_bridge_related"
    2650             :         }
    2651             :         break;
    2652             :       case 'r':  // 1 string to match.
    2653           0 :         if (memcmp(Name.data()+13, "equires_super", 13) != 0)
    2654             :           break;
    2655             :         return AttributeList::AT_ObjCRequiresSuper;      // "clang::objc_requires_super"
    2656             :       }
    2657             :       break;
    2658             :     case 'r':    // 1 string to match.
    2659           0 :       if (memcmp(Name.data()+8, "equires_capability", 18) != 0)
    2660             :         break;
    2661             :       return AttributeList::AT_RequiresCapability;       // "clang::requires_capability"
    2662             :     }
    2663             :     break;
    2664           6 :   case 27:       // 3 strings to match.
    2665           6 :     switch (Name[0]) {
    2666             :     default: break;
    2667             :     case 'c':    // 2 strings to match.
    2668           0 :       if (memcmp(Name.data()+1, "lang::", 6) != 0)
    2669             :         break;
    2670           0 :       switch (Name[7]) {
    2671             :       default: break;
    2672             :       case 'n':  // 1 string to match.
    2673           0 :         if (memcmp(Name.data()+8, "eon_polyvector_type", 19) != 0)
    2674             :           break;
    2675             :         return AttributeList::AT_NeonPolyVectorType;     // "clang::neon_polyvector_type"
    2676             :       case 'o':  // 1 string to match.
    2677           0 :         if (memcmp(Name.data()+8, "bjc_runtime_visible", 19) != 0)
    2678             :           break;
    2679             :         return AttributeList::AT_ObjCRuntimeVisible;     // "clang::objc_runtime_visible"
    2680             :       }
    2681             :       break;
    2682             :     case 'g':    // 1 string to match.
    2683           0 :       if (memcmp(Name.data()+1, "nu::no_instrument_function", 26) != 0)
    2684             :         break;
    2685             :       return AttributeList::AT_NoInstrumentFunction;     // "gnu::no_instrument_function"
    2686             :     }
    2687             :     break;
    2688          83 :   case 28:       // 8 strings to match.
    2689          83 :     switch (Name[0]) {
    2690             :     default: break;
    2691             :     case 'c':    // 7 strings to match.
    2692          83 :       if (memcmp(Name.data()+1, "lang::", 6) != 0)
    2693             :         break;
    2694          83 :       switch (Name[7]) {
    2695             :       default: break;
    2696             :       case 'l':  // 1 string to match.
    2697          24 :         if (memcmp(Name.data()+8, "to_visibility_public", 20) != 0)
    2698             :           break;
    2699             :         return AttributeList::AT_LTOVisibilityPublic;    // "clang::lto_visibility_public"
    2700             :       case 'o':  // 1 string to match.
    2701           0 :         if (memcmp(Name.data()+8, "bjc_precise_lifetime", 20) != 0)
    2702             :           break;
    2703             :         return AttributeList::AT_ObjCPreciseLifetime;    // "clang::objc_precise_lifetime"
    2704             :       case 'p':  // 1 string to match.
    2705          15 :         if (memcmp(Name.data()+8, "ointer_with_type_tag", 20) != 0)
    2706             :           break;
    2707             :         return AttributeList::AT_ArgumentWithTypeTag;    // "clang::pointer_with_type_tag"
    2708           0 :       case 's':  // 2 strings to match.
    2709           0 :         switch (Name[8]) {
    2710             :         default: break;
    2711             :         case 'h':        // 1 string to match.
    2712           0 :           if (memcmp(Name.data()+9, "ared_locks_required", 19) != 0)
    2713             :             break;
    2714             :           return AttributeList::AT_RequiresCapability;   // "clang::shared_locks_required"
    2715             :         case 'w':        // 1 string to match.
    2716           0 :           if (memcmp(Name.data()+9, "ift_indirect_result", 19) != 0)
    2717             :             break;
    2718             :           return AttributeList::AT_SwiftIndirectResult;  // "clang::swift_indirect_result"
    2719             :         }
    2720             :         break;
    2721             :       case 't':  // 1 string to match.
    2722          14 :         if (memcmp(Name.data()+8, "ype_tag_for_datatype", 20) != 0)
    2723             :           break;
    2724             :         return AttributeList::AT_TypeTagForDatatype;     // "clang::type_tag_for_datatype"
    2725             :       case 'x':  // 1 string to match.
    2726          30 :         if (memcmp(Name.data()+8, "ray_never_instrument", 20) != 0)
    2727             :           break;
    2728             :         return AttributeList::AT_XRayInstrument;         // "clang::xray_never_instrument"
    2729             :       }
    2730             :       break;
    2731             :     case 'g':    // 1 string to match.
    2732           0 :       if (memcmp(Name.data()+1, "nu::force_align_arg_pointer", 27) != 0)
    2733             :         break;
    2734             :       return AttributeList::AT_X86ForceAlignArgPointer;  // "gnu::force_align_arg_pointer"
    2735             :     }
    2736             :     break;
    2737             :   case 29:       // 5 strings to match.
    2738          72 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    2739             :       break;
    2740          72 :     switch (Name[7]) {
    2741             :     default: break;
    2742             :     case 'a':    // 1 string to match.
    2743           0 :       if (memcmp(Name.data()+8, "rgument_with_type_tag", 21) != 0)
    2744             :         break;
    2745             :       return AttributeList::AT_ArgumentWithTypeTag;      // "clang::argument_with_type_tag"
    2746             :     case 'e':    // 1 string to match.
    2747          12 :       if (memcmp(Name.data()+8, "xternal_source_symbol", 21) != 0)
    2748             :         break;
    2749             :       return AttributeList::AT_ExternalSourceSymbol;     // "clang::external_source_symbol"
    2750             :     case 'o':    // 1 string to match.
    2751           0 :       if (memcmp(Name.data()+8, "bjc_independent_class", 21) != 0)
    2752             :         break;
    2753             :       return AttributeList::AT_ObjCIndependentClass;     // "clang::objc_independent_class"
    2754             :     case 't':    // 1 string to match.
    2755           0 :       if (memcmp(Name.data()+8, "ry_acquire_capability", 21) != 0)
    2756             :         break;
    2757             :       return AttributeList::AT_TryAcquireCapability;     // "clang::try_acquire_capability"
    2758             :     case 'x':    // 1 string to match.
    2759          60 :       if (memcmp(Name.data()+8, "ray_always_instrument", 21) != 0)
    2760             :         break;
    2761             :       return AttributeList::AT_XRayInstrument;   // "clang::xray_always_instrument"
    2762             :     }
    2763             :     break;
    2764           4 :   case 30:       // 4 strings to match.
    2765           4 :     switch (Name[0]) {
    2766             :     default: break;
    2767             :     case 'c':    // 3 strings to match.
    2768           0 :       if (memcmp(Name.data()+1, "lang::", 6) != 0)
    2769             :         break;
    2770           0 :       switch (Name[7]) {
    2771             :       default: break;
    2772             :       case 'c':  // 1 string to match.
    2773           0 :         if (memcmp(Name.data()+8, "f_returns_not_retained", 22) != 0)
    2774             :           break;
    2775             :         return AttributeList::AT_CFReturnsNotRetained;   // "clang::cf_returns_not_retained"
    2776             :       case 'n':  // 2 strings to match.
    2777           0 :         if (memcmp(Name.data()+8, "s_returns_", 10) != 0)
    2778             :           break;
    2779           0 :         switch (Name[18]) {
    2780             :         default: break;
    2781             :         case 'a':        // 1 string to match.
    2782           0 :           if (memcmp(Name.data()+19, "utoreleased", 11) != 0)
    2783             :             break;
    2784             :           return AttributeList::AT_NSReturnsAutoreleased;        // "clang::ns_returns_autoreleased"
    2785             :         case 'n':        // 1 string to match.
    2786           0 :           if (memcmp(Name.data()+19, "ot_retained", 11) != 0)
    2787             :             break;
    2788             :           return AttributeList::AT_NSReturnsNotRetained;         // "clang::ns_returns_not_retained"
    2789             :         }
    2790             :         break;
    2791             :       }
    2792             :       break;
    2793             :     case 'g':    // 1 string to match.
    2794           4 :       if (memcmp(Name.data()+1, "nu::no_caller_saved_registers", 29) != 0)
    2795             :         break;
    2796             :       return AttributeList::AT_AnyX86NoCallerSavedRegisters;     // "gnu::no_caller_saved_registers"
    2797             :     }
    2798             :     break;
    2799           2 :   case 31:       // 3 strings to match.
    2800           2 :     switch (Name[0]) {
    2801             :     default: break;
    2802             :     case 'c':    // 2 strings to match.
    2803           0 :       if (memcmp(Name.data()+1, "lang::", 6) != 0)
    2804             :         break;
    2805           0 :       switch (Name[7]) {
    2806             :       default: break;
    2807             :       case 'a':  // 1 string to match.
    2808           0 :         if (memcmp(Name.data()+8, "ssert_shared_capability", 23) != 0)
    2809             :           break;
    2810             :         return AttributeList::AT_AssertCapability;       // "clang::assert_shared_capability"
    2811             :       case 'e':  // 1 string to match.
    2812           0 :         if (memcmp(Name.data()+8, "xclusive_locks_required", 23) != 0)
    2813             :           break;
    2814             :         return AttributeList::AT_RequiresCapability;     // "clang::exclusive_locks_required"
    2815             :       }
    2816             :       break;
    2817             :     case 'g':    // 1 string to match.
    2818           2 :       if (memcmp(Name.data()+1, "nu::no_address_safety_analysis", 30) != 0)
    2819             :         break;
    2820             :       return AttributeList::AT_NoSanitizeSpecific;       // "gnu::no_address_safety_analysis"
    2821             :     }
    2822             :     break;
    2823             :   case 32:       // 3 strings to match.
    2824           0 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    2825             :       break;
    2826           0 :     switch (Name[7]) {
    2827             :     default: break;
    2828             :     case 'a':    // 1 string to match.
    2829           0 :       if (memcmp(Name.data()+8, "cquire_shared_capability", 24) != 0)
    2830             :         break;
    2831             :       return AttributeList::AT_AcquireCapability;        // "clang::acquire_shared_capability"
    2832             :     case 'n':    // 1 string to match.
    2833           0 :       if (memcmp(Name.data()+8, "o_thread_safety_analysis", 24) != 0)
    2834             :         break;
    2835             :       return AttributeList::AT_NoThreadSafetyAnalysis;   // "clang::no_thread_safety_analysis"
    2836             :     case 'r':    // 1 string to match.
    2837           0 :       if (memcmp(Name.data()+8, "elease_shared_capability", 24) != 0)
    2838             :         break;
    2839             :       return AttributeList::AT_ReleaseCapability;        // "clang::release_shared_capability"
    2840             :     }
    2841             :     break;
    2842             :   case 33:       // 4 strings to match.
    2843           2 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    2844             :       break;
    2845           2 :     switch (Name[7]) {
    2846             :     default: break;
    2847             :     case 'c':    // 1 string to match.
    2848           0 :       if (memcmp(Name.data()+8, "onsumable_auto_cast_state", 25) != 0)
    2849             :         break;
    2850             :       return AttributeList::AT_ConsumableAutoCast;       // "clang::consumable_auto_cast_state"
    2851             :     case 'o':    // 1 string to match.
    2852           2 :       if (memcmp(Name.data()+8, "bjc_returns_inner_pointer", 25) != 0)
    2853             :         break;
    2854             :       return AttributeList::AT_ObjCReturnsInnerPointer;  // "clang::objc_returns_inner_pointer"
    2855           0 :     case 'r':    // 2 strings to match.
    2856           0 :       if (Name[8] != 'e')
    2857             :         break;
    2858           0 :       switch (Name[9]) {
    2859             :       default: break;
    2860             :       case 'l':  // 1 string to match.
    2861           0 :         if (memcmp(Name.data()+10, "ease_generic_capability", 23) != 0)
    2862             :           break;
    2863             :         return AttributeList::AT_ReleaseCapability;      // "clang::release_generic_capability"
    2864             :       case 'q':  // 1 string to match.
    2865           0 :         if (memcmp(Name.data()+10, "uires_shared_capability", 23) != 0)
    2866             :           break;
    2867             :         return AttributeList::AT_RequiresCapability;     // "clang::requires_shared_capability"
    2868             :       }
    2869             :       break;
    2870             :     }
    2871             :     break;
    2872             :   case 34:       // 3 strings to match.
    2873           2 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    2874             :       break;
    2875           0 :     switch (Name[7]) {
    2876             :     default: break;
    2877             :     case 'a':    // 1 string to match.
    2878           0 :       if (memcmp(Name.data()+8, "mdgpu_flat_work_group_size", 26) != 0)
    2879             :         break;
    2880             :       return AttributeList::AT_AMDGPUFlatWorkGroupSize;  // "clang::amdgpu_flat_work_group_size"
    2881             :     case 'o':    // 2 strings to match.
    2882           0 :       if (memcmp(Name.data()+8, "bjc_", 4) != 0)
    2883             :         break;
    2884           0 :       switch (Name[12]) {
    2885             :       default: break;
    2886             :       case 'd':  // 1 string to match.
    2887           0 :         if (memcmp(Name.data()+13, "esignated_initializer", 21) != 0)
    2888             :           break;
    2889             :         return AttributeList::AT_ObjCDesignatedInitializer;      // "clang::objc_designated_initializer"
    2890             :       case 's':  // 1 string to match.
    2891           0 :         if (memcmp(Name.data()+13, "ubclassing_restricted", 21) != 0)
    2892             :           break;
    2893             :         return AttributeList::AT_ObjCSubclassingRestricted;      // "clang::objc_subclassing_restricted"
    2894             :       }
    2895             :       break;
    2896             :     }
    2897             :     break;
    2898             :   case 35:       // 1 string to match.
    2899           0 :     if (memcmp(Name.data()+0, "clang::consumable_set_state_on_read", 35) != 0)
    2900             :       break;
    2901             :     return AttributeList::AT_ConsumableSetOnRead;        // "clang::consumable_set_state_on_read"
    2902             :   case 36:       // 1 string to match.
    2903           0 :     if (memcmp(Name.data()+0, "clang::try_acquire_shared_capability", 36) != 0)
    2904             :       break;
    2905             :     return AttributeList::AT_TryAcquireCapability;       // "clang::try_acquire_shared_capability"
    2906             :   case 38:       // 1 string to match.
    2907           0 :     if (memcmp(Name.data()+0, "clang::require_constant_initialization", 38) != 0)
    2908             :       break;
    2909             :     return AttributeList::AT_RequireConstantInit;        // "clang::require_constant_initialization"
    2910             :   case 41:       // 1 string to match.
    2911           0 :     if (memcmp(Name.data()+0, "clang::objc_requires_property_definitions", 41) != 0)
    2912             :       break;
    2913             :     return AttributeList::AT_ObjCRequiresPropertyDefs;   // "clang::objc_requires_property_definitions"
    2914             :   case 42:       // 1 string to match.
    2915           0 :     if (memcmp(Name.data()+0, "clang::objc_arc_weak_reference_unavailable", 42) != 0)
    2916             :       break;
    2917             :     return AttributeList::AT_ArcWeakrefUnavailable;      // "clang::objc_arc_weak_reference_unavailable"
    2918             :   case 53:       // 1 string to match.
    2919           2 :     if (memcmp(Name.data()+0, "clang::objc_protocol_requires_explicit_implementation", 53) != 0)
    2920             :       break;
    2921             :     return AttributeList::AT_ObjCExplicitProtocolImpl;   // "clang::objc_protocol_requires_explicit_implementation"
    2922             :   }
    2923       35740 :   } else if (AttributeList::AS_C2x == Syntax) {
    2924         187 :   switch (Name.size()) {
    2925             :   default: break;
    2926             :   case 11:       // 1 string to match.
    2927          11 :     if (memcmp(Name.data()+0, "::nodiscard", 11) != 0)
    2928             :       break;
    2929             :     return AttributeList::AT_WarnUnusedResult;   // "::nodiscard"
    2930             :   case 12:       // 1 string to match.
    2931          21 :     if (memcmp(Name.data()+0, "::deprecated", 12) != 0)
    2932             :       break;
    2933             :     return AttributeList::AT_Deprecated;         // "::deprecated"
    2934          21 :   case 13:       // 3 strings to match.
    2935          21 :     switch (Name[0]) {
    2936             :     default: break;
    2937             :     case ':':    // 1 string to match.
    2938          21 :       if (memcmp(Name.data()+1, ":fallthrough", 12) != 0)
    2939             :         break;
    2940             :       return AttributeList::AT_FallThrough;      // "::fallthrough"
    2941             :     case 'c':    // 2 strings to match.
    2942           0 :       if (memcmp(Name.data()+1, "lang::", 6) != 0)
    2943             :         break;
    2944           0 :       switch (Name[7]) {
    2945             :       default: break;
    2946             :       case 'b':  // 1 string to match.
    2947           0 :         if (memcmp(Name.data()+8, "locks", 5) != 0)
    2948             :           break;
    2949             :         return AttributeList::AT_Blocks;         // "clang::blocks"
    2950             :       case 'p':  // 1 string to match.
    2951           0 :         if (memcmp(Name.data()+8, "ascal", 5) != 0)
    2952             :           break;
    2953             :         return AttributeList::AT_Pascal;         // "clang::pascal"
    2954             :       }
    2955             :       break;
    2956             :     }
    2957             :     break;
    2958          16 :   case 14:       // 4 strings to match.
    2959          16 :     switch (Name[0]) {
    2960             :     default: break;
    2961             :     case ':':    // 1 string to match.
    2962          16 :       if (memcmp(Name.data()+1, ":maybe_unused", 13) != 0)
    2963             :         break;
    2964             :       return AttributeList::AT_Unused;   // "::maybe_unused"
    2965             :     case 'c':    // 3 strings to match.
    2966           0 :       if (memcmp(Name.data()+1, "lang::", 6) != 0)
    2967             :         break;
    2968           0 :       switch (Name[7]) {
    2969             :       default: break;
    2970             :       case 'm':  // 1 string to match.
    2971           0 :         if (memcmp(Name.data()+8, "insize", 6) != 0)
    2972             :           break;
    2973             :         return AttributeList::AT_MinSize;        // "clang::minsize"
    2974           0 :       case 'o':  // 2 strings to match.
    2975           0 :         switch (Name[8]) {
    2976             :         default: break;
    2977             :         case 'b':        // 1 string to match.
    2978           0 :           if (memcmp(Name.data()+9, "jc_gc", 5) != 0)
    2979             :             break;
    2980             :           return AttributeList::AT_ObjCGC;       // "clang::objc_gc"
    2981             :         case 'p':        // 1 string to match.
    2982           0 :           if (memcmp(Name.data()+9, "tnone", 5) != 0)
    2983             :             break;
    2984             :           return AttributeList::AT_OptimizeNone;         // "clang::optnone"
    2985             :         }
    2986             :         break;
    2987             :       }
    2988             :       break;
    2989             :     }
    2990             :     break;
    2991             :   case 15:       // 5 strings to match.
    2992          11 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    2993             :       break;
    2994          11 :     switch (Name[7]) {
    2995             :     default: break;
    2996             :     case 'N':    // 1 string to match.
    2997           0 :       if (memcmp(Name.data()+8, "SObject", 7) != 0)
    2998             :         break;
    2999             :       return AttributeList::AT_ObjCNSObject;     // "clang::NSObject"
    3000             :     case 'a':    // 1 string to match.
    3001           6 :       if (memcmp(Name.data()+8, "nnotate", 7) != 0)
    3002             :         break;
    3003             :       return AttributeList::AT_Annotate;         // "clang::annotate"
    3004           4 :     case 'i':    // 2 strings to match.
    3005           4 :       if (Name[8] != 'b')
    3006             :         break;
    3007           4 :       switch (Name[9]) {
    3008             :       default: break;
    3009             :       case 'a':  // 1 string to match.
    3010           0 :         if (memcmp(Name.data()+10, "ction", 5) != 0)
    3011             :           break;
    3012             :         return AttributeList::AT_IBAction;       // "clang::ibaction"
    3013             :       case 'o':  // 1 string to match.
    3014           4 :         if (memcmp(Name.data()+10, "utlet", 5) != 0)
    3015             :           break;
    3016             :         return AttributeList::AT_IBOutlet;       // "clang::iboutlet"
    3017             :       }
    3018             :       break;
    3019             :     case 'n':    // 1 string to match.
    3020           1 :       if (memcmp(Name.data()+8, "oescape", 7) != 0)
    3021             :         break;
    3022             :       return AttributeList::AT_NoEscape;         // "clang::noescape"
    3023             :     }
    3024             :     break;
    3025             :   case 16:       // 2 strings to match.
    3026           3 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    3027             :       break;
    3028           3 :     switch (Name[7]) {
    3029             :     default: break;
    3030             :     case 'f':    // 1 string to match.
    3031           1 :       if (memcmp(Name.data()+8, "lag_enum", 8) != 0)
    3032             :         break;
    3033             :       return AttributeList::AT_FlagEnum;         // "clang::flag_enum"
    3034             :     case 's':    // 1 string to match.
    3035           2 :       if (memcmp(Name.data()+8, "wiftcall", 8) != 0)
    3036             :         break;
    3037             :       return AttributeList::AT_SwiftCall;        // "clang::swiftcall"
    3038             :     }
    3039             :     break;
    3040             :   case 17:       // 2 strings to match.
    3041           0 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    3042             :       break;
    3043           0 :     switch (Name[7]) {
    3044             :     default: break;
    3045             :     case 'c':    // 1 string to match.
    3046           0 :       if (memcmp(Name.data()+8, "onvergent", 9) != 0)
    3047             :         break;
    3048             :       return AttributeList::AT_Convergent;       // "clang::convergent"
    3049             :     case 'v':    // 1 string to match.
    3050           0 :       if (memcmp(Name.data()+8, "ectorcall", 9) != 0)
    3051             :         break;
    3052             :       return AttributeList::AT_VectorCall;       // "clang::vectorcall"
    3053             :     }
    3054             :     break;
    3055             :   case 18:       // 7 strings to match.
    3056           2 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    3057             :       break;
    3058           2 :     switch (Name[7]) {
    3059             :     default: break;
    3060             :     case 'c':    // 1 string to match.
    3061           0 :       if (memcmp(Name.data()+8, "f_consumed", 10) != 0)
    3062             :         break;
    3063             :       return AttributeList::AT_CFConsumed;       // "clang::cf_consumed"
    3064           0 :     case 'n':    // 3 strings to match.
    3065           0 :       switch (Name[8]) {
    3066             :       default: break;
    3067           0 :       case 'o':  // 2 strings to match.
    3068           0 :         switch (Name[9]) {
    3069             :         default: break;
    3070             :         case '_':        // 1 string to match.
    3071           0 :           if (memcmp(Name.data()+10, "sanitize", 8) != 0)
    3072             :             break;
    3073             :           return AttributeList::AT_NoSanitize;   // "clang::no_sanitize"
    3074             :         case 'd':        // 1 string to match.
    3075           0 :           if (memcmp(Name.data()+10, "uplicate", 8) != 0)
    3076             :             break;
    3077             :           return AttributeList::AT_NoDuplicate;  // "clang::noduplicate"
    3078             :         }
    3079             :         break;
    3080             :       case 's':  // 1 string to match.
    3081           0 :         if (memcmp(Name.data()+9, "_consumed", 9) != 0)
    3082             :           break;
    3083             :         return AttributeList::AT_NSConsumed;     // "clang::ns_consumed"
    3084             :       }
    3085             :       break;
    3086             :     case 'o':    // 1 string to match.
    3087           0 :       if (memcmp(Name.data()+8, "bjc_bridge", 10) != 0)
    3088             :         break;
    3089             :       return AttributeList::AT_ObjCBridge;       // "clang::objc_bridge"
    3090             :     case 'u':    // 1 string to match.
    3091           2 :       if (memcmp(Name.data()+8, "navailable", 10) != 0)
    3092             :         break;
    3093             :       return AttributeList::AT_Unavailable;      // "clang::unavailable"
    3094             :     case 'w':    // 1 string to match.
    3095           0 :       if (memcmp(Name.data()+8, "eak_import", 10) != 0)
    3096             :         break;
    3097             :       return AttributeList::AT_WeakImport;       // "clang::weak_import"
    3098             :     }
    3099             :     break;
    3100             :   case 19:       // 4 strings to match.
    3101          17 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    3102             :       break;
    3103          16 :     switch (Name[7]) {
    3104             :     default: break;
    3105             :     case 'a':    // 1 string to match.
    3106          14 :       if (memcmp(Name.data()+8, "vailability", 11) != 0)
    3107             :         break;
    3108             :       return AttributeList::AT_Availability;     // "clang::availability"
    3109           2 :     case 'o':    // 2 strings to match.
    3110           2 :       switch (Name[8]) {
    3111             :       default: break;
    3112             :       case 'b':  // 1 string to match.
    3113           0 :         if (memcmp(Name.data()+9, "jc_boxable", 10) != 0)
    3114             :           break;
    3115             :         return AttributeList::AT_ObjCBoxable;    // "clang::objc_boxable"
    3116             :       case 'v':  // 1 string to match.
    3117           2 :         if (memcmp(Name.data()+9, "erloadable", 10) != 0)
    3118             :           break;
    3119             :         return AttributeList::AT_Overloadable;   // "clang::overloadable"
    3120             :       }
    3121             :       break;
    3122             :     case 'p':    // 1 string to match.
    3123           0 :       if (memcmp(Name.data()+8, "reserve_all", 11) != 0)
    3124             :         break;
    3125             :       return AttributeList::AT_PreserveAll;      // "clang::preserve_all"
    3126             :     }
    3127             :     break;
    3128             :   case 20:       // 4 strings to match.
    3129           4 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    3130             :       break;
    3131           4 :     switch (Name[7]) {
    3132             :     default: break;
    3133             :     case 'a':    // 1 string to match.
    3134           2 :       if (memcmp(Name.data()+8, "ddress_space", 12) != 0)
    3135             :         break;
    3136             :       return AttributeList::AT_AddressSpace;     // "clang::address_space"
    3137             :     case 'p':    // 1 string to match.
    3138           0 :       if (memcmp(Name.data()+8, "reserve_most", 12) != 0)
    3139             :         break;
    3140             :       return AttributeList::AT_PreserveMost;     // "clang::preserve_most"
    3141             :     case 's':    // 1 string to match.
    3142           2 :       if (memcmp(Name.data()+8, "wift_context", 12) != 0)
    3143             :         break;
    3144             :       return AttributeList::AT_SwiftContext;     // "clang::swift_context"
    3145             :     case 'x':    // 1 string to match.
    3146           0 :       if (memcmp(Name.data()+8, "ray_log_args", 12) != 0)
    3147             :         break;
    3148             :       return AttributeList::AT_XRayLogArgs;      // "clang::xray_log_args"
    3149             :     }
    3150             :     break;
    3151             :   case 21:       // 2 strings to match.
    3152           2 :     if (memcmp(Name.data()+0, "clang::objc_", 12) != 0)
    3153             :       break;
    3154           2 :     switch (Name[12]) {
    3155             :     default: break;
    3156             :     case 'e':    // 1 string to match.
    3157           2 :       if (memcmp(Name.data()+13, "xception", 8) != 0)
    3158             :         break;
    3159             :       return AttributeList::AT_ObjCException;    // "clang::objc_exception"
    3160             :     case 'o':    // 1 string to match.
    3161           0 :       if (memcmp(Name.data()+13, "wnership", 8) != 0)
    3162             :         break;
    3163             :       return AttributeList::AT_ObjCOwnership;    // "clang::objc_ownership"
    3164             :     }
    3165             :     break;
    3166             :   case 22:       // 5 strings to match.
    3167           0 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    3168             :       break;
    3169           0 :     switch (Name[7]) {
    3170             :     default: break;
    3171             :     case 'n':    // 1 string to match.
    3172           0 :       if (memcmp(Name.data()+8, "ot_tail_called", 14) != 0)
    3173             :         break;
    3174             :       return AttributeList::AT_NotTailCalled;    // "clang::not_tail_called"
    3175           0 :     case 'o':    // 3 strings to match.
    3176           0 :       switch (Name[8]) {
    3177             :       default: break;
    3178             :       case 'b':  // 1 string to match.
    3179           0 :         if (memcmp(Name.data()+9, "jc_root_class", 13) != 0)
    3180             :           break;
    3181             :         return AttributeList::AT_ObjCRootClass;  // "clang::objc_root_class"
    3182             :       case 'w':  // 2 strings to match.
    3183           0 :         if (memcmp(Name.data()+9, "nership_", 8) != 0)
    3184             :           break;
    3185           0 :         switch (Name[17]) {
    3186             :         default: break;
    3187             :         case 'h':        // 1 string to match.
    3188           0 :           if (memcmp(Name.data()+18, "olds", 4) != 0)
    3189             :             break;
    3190             :           return AttributeList::AT_Ownership;    // "clang::ownership_holds"
    3191             :         case 't':        // 1 string to match.
    3192           0 :           if (memcmp(Name.data()+18, "akes", 4) != 0)
    3193             :             break;
    3194             :           return AttributeList::AT_Ownership;    // "clang::ownership_takes"
    3195             :         }
    3196             :         break;
    3197             :       }
    3198             :       break;
    3199             :     case 't':    // 1 string to match.
    3200           0 :       if (memcmp(Name.data()+8, "ype_visibility", 14) != 0)
    3201             :         break;
    3202             :       return AttributeList::AT_TypeVisibility;   // "clang::type_visibility"
    3203             :     }
    3204             :     break;
    3205             :   case 23:       // 4 strings to match.
    3206           9 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    3207             :       break;
    3208           9 :     switch (Name[7]) {
    3209             :     default: break;
    3210             :     case 'i':    // 1 string to match.
    3211           3 :       if (memcmp(Name.data()+8, "nternal_linkage", 15) != 0)
    3212             :         break;
    3213             :       return AttributeList::AT_InternalLinkage;  // "clang::internal_linkage"
    3214           6 :     case 'n':    // 2 strings to match.
    3215           6 :       switch (Name[8]) {
    3216             :       default: break;
    3217             :       case 'e':  // 1 string to match.
    3218           0 :         if (memcmp(Name.data()+9, "on_vector_type", 14) != 0)
    3219             :           break;
    3220             :         return AttributeList::AT_NeonVectorType;         // "clang::neon_vector_type"
    3221             :       case 's':  // 1 string to match.
    3222           6 :         if (memcmp(Name.data()+9, "_consumes_self", 14) != 0)
    3223             :           break;
    3224             :         return AttributeList::AT_NSConsumesSelf;         // "clang::ns_consumes_self"
    3225             :       }
    3226             :       break;
    3227             :     case 'p':    // 1 string to match.
    3228           0 :       if (memcmp(Name.data()+8, "ass_object_size", 15) != 0)
    3229             :         break;
    3230             :       return AttributeList::AT_PassObjectSize;   // "clang::pass_object_size"
    3231             :     }
    3232             :     break;
    3233             :   case 24:       // 2 strings to match.
    3234          10 :     if (memcmp(Name.data()+0, "clang::o", 8) != 0)
    3235             :       break;
    3236          10 :     switch (Name[8]) {
    3237             :     default: break;
    3238             :     case 'b':    // 1 string to match.
    3239           4 :       if (memcmp(Name.data()+9, "jc_runtime_name", 15) != 0)
    3240             :         break;
    3241             :       return AttributeList::AT_ObjCRuntimeName;  // "clang::objc_runtime_name"
    3242             :     case 'w':    // 1 string to match.
    3243           6 :       if (memcmp(Name.data()+9, "nership_returns", 15) != 0)
    3244             :         break;
    3245             :       return AttributeList::AT_Ownership;        // "clang::ownership_returns"
    3246             :     }
    3247             :     break;
    3248             :   case 25:       // 7 strings to match.
    3249           3 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    3250             :       break;
    3251           3 :     switch (Name[7]) {
    3252             :     default: break;
    3253             :     case 'd':    // 1 string to match.
    3254           0 :       if (memcmp(Name.data()+8, "isable_tail_calls", 17) != 0)
    3255             :         break;
    3256             :       return AttributeList::AT_DisableTailCalls;         // "clang::disable_tail_calls"
    3257             :     case 'e':    // 1 string to match.
    3258           3 :       if (memcmp(Name.data()+8, "num_extensibility", 17) != 0)
    3259             :         break;
    3260             :       return AttributeList::AT_EnumExtensibility;        // "clang::enum_extensibility"
    3261             :     case 'i':    // 1 string to match.
    3262           0 :       if (memcmp(Name.data()+8, "boutletcollection", 17) != 0)
    3263             :         break;
    3264             :       return AttributeList::AT_IBOutletCollection;       // "clang::iboutletcollection"
    3265             :     case 'n':    // 2 strings to match.
    3266           0 :       if (memcmp(Name.data()+8, "o_s", 3) != 0)
    3267             :         break;
    3268           0 :       switch (Name[11]) {
    3269             :       default: break;
    3270             :       case 'a':  // 1 string to match.
    3271           0 :         if (memcmp(Name.data()+12, "nitize_memory", 13) != 0)
    3272             :           break;
    3273             :         return AttributeList::AT_NoSanitizeSpecific;     // "clang::no_sanitize_memory"
    3274             :       case 't':  // 1 string to match.
    3275           0 :         if (memcmp(Name.data()+12, "ack_protector", 13) != 0)
    3276             :           break;
    3277             :         return AttributeList::AT_NoStackProtector;       // "clang::no_stack_protector"
    3278             :       }
    3279             :       break;
    3280             :     case 'o':    // 1 string to match.
    3281           0 :       if (memcmp(Name.data()+8, "bjc_method_family", 17) != 0)
    3282             :         break;
    3283             :       return AttributeList::AT_ObjCMethodFamily;         // "clang::objc_method_family"
    3284             :     case 's':    // 1 string to match.
    3285           0 :       if (memcmp(Name.data()+8, "wift_error_result", 17) != 0)
    3286             :         break;
    3287             :       return AttributeList::AT_SwiftErrorResult;         // "clang::swift_error_result"
    3288             :     }
    3289             :     break;
    3290             :   case 26:       // 7 strings to match.
    3291           6 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    3292             :       break;
    3293           6 :     switch (Name[7]) {
    3294             :     default: break;
    3295             :     case 'c':    // 3 strings to match.
    3296           0 :       if (memcmp(Name.data()+8, "f_", 2) != 0)
    3297             :         break;
    3298           0 :       switch (Name[10]) {
    3299             :       default: break;
    3300             :       case 'a':  // 1 string to match.
    3301           0 :         if (memcmp(Name.data()+11, "udited_transfer", 15) != 0)
    3302             :           break;
    3303             :         return AttributeList::AT_CFAuditedTransfer;      // "clang::cf_audited_transfer"
    3304             :       case 'r':  // 1 string to match.
    3305           0 :         if (memcmp(Name.data()+11, "eturns_retained", 15) != 0)
    3306             :           break;
    3307             :         return AttributeList::AT_CFReturnsRetained;      // "clang::cf_returns_retained"
    3308             :       case 'u':  // 1 string to match.
    3309           0 :         if (memcmp(Name.data()+11, "nknown_transfer", 15) != 0)
    3310             :           break;
    3311             :         return AttributeList::AT_CFUnknownTransfer;      // "clang::cf_unknown_transfer"
    3312             :       }
    3313             :       break;
    3314             :     case 'n':    // 1 string to match.
    3315           0 :       if (memcmp(Name.data()+8, "s_returns_retained", 18) != 0)
    3316             :         break;
    3317             :       return AttributeList::AT_NSReturnsRetained;        // "clang::ns_returns_retained"
    3318             :     case 'o':    // 3 strings to match.
    3319           6 :       if (memcmp(Name.data()+8, "bjc_", 4) != 0)
    3320             :         break;
    3321           6 :       switch (Name[12]) {
    3322             :       default: break;
    3323             :       case 'b':  // 2 strings to match.
    3324           6 :         if (memcmp(Name.data()+13, "ridge_", 6) != 0)
    3325             :           break;
    3326           6 :         switch (Name[19]) {
    3327             :         default: break;
    3328             :         case 'm':        // 1 string to match.
    3329           0 :           if (memcmp(Name.data()+20, "utable", 6) != 0)
    3330             :             break;
    3331             :           return AttributeList::AT_ObjCBridgeMutable;    // "clang::objc_bridge_mutable"
    3332             :         case 'r':        // 1 string to match.
    3333           6 :           if (memcmp(Name.data()+20, "elated", 6) != 0)
    3334             :             break;
    3335             :           return AttributeList::AT_ObjCBridgeRelated;    // "clang::objc_bridge_related"
    3336             :         }
    3337             :         break;
    3338             :       case 'r':  // 1 string to match.
    3339           0 :         if (memcmp(Name.data()+13, "equires_super", 13) != 0)
    3340             :           break;
    3341             :         return AttributeList::AT_ObjCRequiresSuper;      // "clang::objc_requires_super"
    3342             :       }
    3343             :       break;
    3344             :     }
    3345             :     break;
    3346             :   case 27:       // 2 strings to match.
    3347           0 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    3348             :       break;
    3349           0 :     switch (Name[7]) {
    3350             :     default: break;
    3351             :     case 'n':    // 1 string to match.
    3352           0 :       if (memcmp(Name.data()+8, "eon_polyvector_type", 19) != 0)
    3353             :         break;
    3354             :       return AttributeList::AT_NeonPolyVectorType;       // "clang::neon_polyvector_type"
    3355             :     case 'o':    // 1 string to match.
    3356           0 :       if (memcmp(Name.data()+8, "bjc_runtime_visible", 19) != 0)
    3357             :         break;
    3358             :       return AttributeList::AT_ObjCRuntimeVisible;       // "clang::objc_runtime_visible"
    3359             :     }
    3360             :     break;
    3361             :   case 28:       // 6 strings to match.
    3362          36 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    3363             :       break;
    3364          36 :     switch (Name[7]) {
    3365             :     default: break;
    3366             :     case 'l':    // 1 string to match.
    3367           0 :       if (memcmp(Name.data()+8, "to_visibility_public", 20) != 0)
    3368             :         break;
    3369             :       return AttributeList::AT_LTOVisibilityPublic;      // "clang::lto_visibility_public"
    3370             :     case 'o':    // 1 string to match.
    3371           0 :       if (memcmp(Name.data()+8, "bjc_precise_lifetime", 20) != 0)
    3372             :         break;
    3373             :       return AttributeList::AT_ObjCPreciseLifetime;      // "clang::objc_precise_lifetime"
    3374             :     case 'p':    // 1 string to match.
    3375          22 :       if (memcmp(Name.data()+8, "ointer_with_type_tag", 20) != 0)
    3376             :         break;
    3377             :       return AttributeList::AT_ArgumentWithTypeTag;      // "clang::pointer_with_type_tag"
    3378             :     case 's':    // 1 string to match.
    3379           0 :       if (memcmp(Name.data()+8, "wift_indirect_result", 20) != 0)
    3380             :         break;
    3381             :       return AttributeList::AT_SwiftIndirectResult;      // "clang::swift_indirect_result"
    3382             :     case 't':    // 1 string to match.
    3383          14 :       if (memcmp(Name.data()+8, "ype_tag_for_datatype", 20) != 0)
    3384             :         break;
    3385             :       return AttributeList::AT_TypeTagForDatatype;       // "clang::type_tag_for_datatype"
    3386             :     case 'x':    // 1 string to match.
    3387           0 :       if (memcmp(Name.data()+8, "ray_never_instrument", 20) != 0)
    3388             :         break;
    3389             :       return AttributeList::AT_XRayInstrument;   // "clang::xray_never_instrument"
    3390             :     }
    3391             :     break;
    3392             :   case 29:       // 4 strings to match.
    3393           8 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    3394             :       break;
    3395           8 :     switch (Name[7]) {
    3396             :     default: break;
    3397             :     case 'a':    // 1 string to match.
    3398           0 :       if (memcmp(Name.data()+8, "rgument_with_type_tag", 21) != 0)
    3399             :         break;
    3400             :       return AttributeList::AT_ArgumentWithTypeTag;      // "clang::argument_with_type_tag"
    3401             :     case 'e':    // 1 string to match.
    3402           8 :       if (memcmp(Name.data()+8, "xternal_source_symbol", 21) != 0)
    3403             :         break;
    3404             :       return AttributeList::AT_ExternalSourceSymbol;     // "clang::external_source_symbol"
    3405             :     case 'o':    // 1 string to match.
    3406           0 :       if (memcmp(Name.data()+8, "bjc_independent_class", 21) != 0)
    3407             :         break;
    3408             :       return AttributeList::AT_ObjCIndependentClass;     // "clang::objc_independent_class"
    3409             :     case 'x':    // 1 string to match.
    3410           0 :       if (memcmp(Name.data()+8, "ray_always_instrument", 21) != 0)
    3411             :         break;
    3412             :       return AttributeList::AT_XRayInstrument;   // "clang::xray_always_instrument"
    3413             :     }
    3414             :     break;
    3415             :   case 30:       // 3 strings to match.
    3416           0 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    3417             :       break;
    3418           0 :     switch (Name[7]) {
    3419             :     default: break;
    3420             :     case 'c':    // 1 string to match.
    3421           0 :       if (memcmp(Name.data()+8, "f_returns_not_retained", 22) != 0)
    3422             :         break;
    3423             :       return AttributeList::AT_CFReturnsNotRetained;     // "clang::cf_returns_not_retained"
    3424             :     case 'n':    // 2 strings to match.
    3425           0 :       if (memcmp(Name.data()+8, "s_returns_", 10) != 0)
    3426             :         break;
    3427           0 :       switch (Name[18]) {
    3428             :       default: break;
    3429             :       case 'a':  // 1 string to match.
    3430           0 :         if (memcmp(Name.data()+19, "utoreleased", 11) != 0)
    3431             :           break;
    3432             :         return AttributeList::AT_NSReturnsAutoreleased;  // "clang::ns_returns_autoreleased"
    3433             :       case 'n':  // 1 string to match.
    3434           0 :         if (memcmp(Name.data()+19, "ot_retained", 11) != 0)
    3435             :           break;
    3436             :         return AttributeList::AT_NSReturnsNotRetained;   // "clang::ns_returns_not_retained"
    3437             :       }
    3438             :       break;
    3439             :     }
    3440             :     break;
    3441             :   case 32:       // 1 string to match.
    3442           0 :     if (memcmp(Name.data()+0, "clang::no_thread_safety_analysis", 32) != 0)
    3443             :       break;
    3444             :     return AttributeList::AT_NoThreadSafetyAnalysis;     // "clang::no_thread_safety_analysis"
    3445             :   case 33:       // 1 string to match.
    3446           2 :     if (memcmp(Name.data()+0, "clang::objc_returns_inner_pointer", 33) != 0)
    3447             :       break;
    3448             :     return AttributeList::AT_ObjCReturnsInnerPointer;    // "clang::objc_returns_inner_pointer"
    3449             :   case 34:       // 2 strings to match.
    3450           0 :     if (memcmp(Name.data()+0, "clang::objc_", 12) != 0)
    3451             :       break;
    3452           0 :     switch (Name[12]) {
    3453             :     default: break;
    3454             :     case 'd':    // 1 string to match.
    3455           0 :       if (memcmp(Name.data()+13, "esignated_initializer", 21) != 0)
    3456             :         break;
    3457             :       return AttributeList::AT_ObjCDesignatedInitializer;        // "clang::objc_designated_initializer"
    3458             :     case 's':    // 1 string to match.
    3459           0 :       if (memcmp(Name.data()+13, "ubclassing_restricted", 21) != 0)
    3460             :         break;
    3461             :       return AttributeList::AT_ObjCSubclassingRestricted;        // "clang::objc_subclassing_restricted"
    3462             :     }
    3463             :     break;
    3464             :   case 41:       // 1 string to match.
    3465           0 :     if (memcmp(Name.data()+0, "clang::objc_requires_property_definitions", 41) != 0)
    3466             :       break;
    3467             :     return AttributeList::AT_ObjCRequiresPropertyDefs;   // "clang::objc_requires_property_definitions"
    3468             :   case 42:       // 1 string to match.
    3469           0 :     if (memcmp(Name.data()+0, "clang::objc_arc_weak_reference_unavailable", 42) != 0)
    3470             :       break;
    3471             :     return AttributeList::AT_ArcWeakrefUnavailable;      // "clang::objc_arc_weak_reference_unavailable"
    3472             :   case 53:       // 1 string to match.
    3473           2 :     if (memcmp(Name.data()+0, "clang::objc_protocol_requires_explicit_implementation", 53) != 0)
    3474             :       break;
    3475             :     return AttributeList::AT_ObjCExplicitProtocolImpl;   // "clang::objc_protocol_requires_explicit_implementation"
    3476             :   }
    3477       35553 :   } else if (AttributeList::AS_Keyword == Syntax || AttributeList::AS_ContextSensitiveKeyword == Syntax) {
    3478       35358 :   switch (Name.size()) {
    3479             :   default: break;
    3480         683 :   case 5:        // 2 strings to match.
    3481         683 :     switch (Name[0]) {
    3482             :     default: break;
    3483             :     case '_':    // 1 string to match.
    3484           1 :       if (memcmp(Name.data()+1, "_w64", 4) != 0)
    3485             :         break;
    3486             :       return AttributeList::IgnoredAttribute;    // "__w64"
    3487             :     case 'l':    // 1 string to match.
    3488         682 :       if (memcmp(Name.data()+1, "ocal", 4) != 0)
    3489             :         break;
    3490             :       return AttributeList::AT_OpenCLLocalAddressSpace;  // "local"
    3491             :     }
    3492             :     break;
    3493        1122 :   case 6:        // 5 strings to match.
    3494        1122 :     switch (Name[0]) {
    3495             :     default: break;
    3496          26 :     case '_':    // 3 strings to match.
    3497          26 :       switch (Name[1]) {
    3498             :       default: break;
    3499          24 :       case '_':  // 2 strings to match.
    3500          24 :         switch (Name[2]) {
    3501             :         default: break;
    3502             :         case 's':        // 1 string to match.
    3503          16 :           if (memcmp(Name.data()+3, "ptr", 3) != 0)
    3504             :             break;
    3505             :           return AttributeList::AT_SPtr;         // "__sptr"
    3506             :         case 'u':        // 1 string to match.
    3507           8 :           if (memcmp(Name.data()+3, "ptr", 3) != 0)
    3508             :             break;
    3509             :           return AttributeList::AT_UPtr;         // "__uptr"
    3510             :         }
    3511             :         break;
    3512             :       case 'c':  // 1 string to match.
    3513           2 :         if (memcmp(Name.data()+2, "decl", 4) != 0)
    3514             :           break;
    3515             :         return AttributeList::AT_CDecl;  // "_cdecl"
    3516             :       }
    3517             :       break;
    3518             :     case 'g':    // 1 string to match.
    3519         618 :       if (memcmp(Name.data()+1, "lobal", 5) != 0)
    3520             :         break;
    3521             :       return AttributeList::AT_OpenCLGlobalAddressSpace;         // "global"
    3522             :     case 'k':    // 1 string to match.
    3523         478 :       if (memcmp(Name.data()+1, "ernel", 5) != 0)
    3524             :         break;
    3525             :       return AttributeList::AT_OpenCLKernel;     // "kernel"
    3526             :     }
    3527             :     break;
    3528       10774 :   case 7:        // 8 strings to match.
    3529       10774 :     switch (Name[0]) {
    3530             :     default: break;
    3531        8745 :     case '_':    // 5 strings to match.
    3532        8745 :       switch (Name[1]) {
    3533             :       default: break;
    3534        8743 :       case '_':  // 4 strings to match.
    3535        8743 :         switch (Name[2]) {
    3536             :         default: break;
    3537             :         case 'c':        // 1 string to match.
    3538         256 :           if (memcmp(Name.data()+3, "decl", 4) != 0)
    3539             :             break;
    3540             :           return AttributeList::AT_CDecl;        // "__cdecl"
    3541             :         case 'l':        // 1 string to match.
    3542        8458 :           if (memcmp(Name.data()+3, "ocal", 4) != 0)
    3543             :             break;
    3544             :           return AttributeList::AT_OpenCLLocalAddressSpace;      // "__local"
    3545             :         case 'p':        // 2 strings to match.
    3546          29 :           if (memcmp(Name.data()+3, "tr", 2) != 0)
    3547             :             break;
    3548          29 :           switch (Name[5]) {
    3549             :           default: break;
    3550          21 :           case '3':      // 1 string to match.
    3551          21 :             if (Name[6] != '2')
    3552             :               break;
    3553             :             return AttributeList::AT_Ptr32;      // "__ptr32"
    3554           8 :           case '6':      // 1 string to match.
    3555           8 :             if (Name[6] != '4')
    3556             :               break;
    3557             :             return AttributeList::AT_Ptr64;      // "__ptr64"
    3558             :           }
    3559             :           break;
    3560             :         }
    3561             :         break;
    3562             :       case 'p':  // 1 string to match.
    3563           2 :         if (memcmp(Name.data()+2, "ascal", 5) != 0)
    3564             :           break;
    3565             :         return AttributeList::AT_Pascal;         // "_pascal"
    3566             :       }
    3567             :       break;
    3568             :     case 'a':    // 1 string to match.
    3569        1339 :       if (memcmp(Name.data()+1, "lignas", 6) != 0)
    3570             :         break;
    3571             :       return AttributeList::AT_Aligned;  // "alignas"
    3572             :     case 'g':    // 1 string to match.
    3573         284 :       if (memcmp(Name.data()+1, "eneric", 6) != 0)
    3574             :         break;
    3575             :       return AttributeList::AT_OpenCLGenericAddressSpace;        // "generic"
    3576             :     case 'p':    // 1 string to match.
    3577         406 :       if (memcmp(Name.data()+1, "rivate", 6) != 0)
    3578             :         break;
    3579             :       return AttributeList::AT_OpenCLPrivateAddressSpace;        // "private"
    3580             :     }
    3581             :     break;
    3582       11387 :   case 8:        // 8 strings to match.
    3583       11387 :     switch (Name[0]) {
    3584             :     default: break;
    3585       11055 :     case '_':    // 7 strings to match.
    3586       11055 :       switch (Name[1]) {
    3587             :       default: break;
    3588             :       case 'A':  // 1 string to match.
    3589          40 :         if (memcmp(Name.data()+2, "lignas", 6) != 0)
    3590             :           break;
    3591             :         return AttributeList::AT_Aligned;        // "_Alignas"
    3592             :       case 'N':  // 1 string to match.
    3593        1086 :         if (memcmp(Name.data()+2, "onnull", 6) != 0)
    3594             :           break;
    3595             :         return AttributeList::AT_TypeNonNull;    // "_Nonnull"
    3596        9927 :       case '_':  // 4 strings to match.
    3597        9927 :         switch (Name[2]) {
    3598             :         default: break;
    3599             :         case 'g':        // 1 string to match.
    3600        9771 :           if (memcmp(Name.data()+3, "lobal", 5) != 0)
    3601             :             break;
    3602             :           return AttributeList::AT_OpenCLGlobalAddressSpace;     // "__global"
    3603         141 :         case 'k':        // 2 strings to match.
    3604         141 :           switch (Name[3]) {
    3605             :           default: break;
    3606             :           case 'e':      // 1 string to match.
    3607          78 :             if (memcmp(Name.data()+4, "rnel", 4) != 0)
    3608             :               break;
    3609             :             return AttributeList::AT_OpenCLKernel;       // "__kernel"
    3610             :           case 'i':      // 1 string to match.
    3611          63 :             if (memcmp(Name.data()+4, "ndof", 4) != 0)
    3612             :               break;
    3613             :             return AttributeList::AT_ObjCKindOf;         // "__kindof"
    3614             :           }
    3615             :           break;
    3616             :         case 'p':        // 1 string to match.
    3617          15 :           if (memcmp(Name.data()+3, "ascal", 5) != 0)
    3618             :             break;
    3619             :           return AttributeList::AT_Pascal;       // "__pascal"
    3620             :         }
    3621             :         break;
    3622             :       case 's':  // 1 string to match.
    3623           2 :         if (memcmp(Name.data()+2, "tdcall", 6) != 0)
    3624             :           break;
    3625             :         return AttributeList::AT_StdCall;        // "_stdcall"
    3626             :       }
    3627             :       break;
    3628             :     case 'c':    // 1 string to match.
    3629         332 :       if (memcmp(Name.data()+1, "onstant", 7) != 0)
    3630             :         break;
    3631             :       return AttributeList::AT_OpenCLConstantAddressSpace;       // "constant"
    3632             :     }
    3633             :     break;
    3634        6215 :   case 9:        // 8 strings to match.
    3635        6215 :     switch (Name[0]) {
    3636             :     default: break;
    3637        3466 :     case '_':    // 7 strings to match.
    3638        3466 :       switch (Name[1]) {
    3639             :       default: break;
    3640             :       case 'N':  // 1 string to match.
    3641         705 :         if (memcmp(Name.data()+2, "ullable", 7) != 0)
    3642             :           break;
    3643             :         return AttributeList::AT_TypeNullable;   // "_Nullable"
    3644        2759 :       case '_':  // 4 strings to match.
    3645        2759 :         switch (Name[2]) {
    3646             :         default: break;
    3647             :         case 'g':        // 1 string to match.
    3648           6 :           if (memcmp(Name.data()+3, "eneric", 6) != 0)
    3649             :             break;
    3650             :           return AttributeList::AT_OpenCLGenericAddressSpace;    // "__generic"
    3651             :         case 'p':        // 1 string to match.
    3652        2514 :           if (memcmp(Name.data()+3, "rivate", 6) != 0)
    3653             :             break;
    3654             :           return AttributeList::AT_OpenCLPrivateAddressSpace;    // "__private"
    3655             :         case 'r':        // 1 string to match.
    3656          96 :           if (memcmp(Name.data()+3, "egcall", 6) != 0)
    3657             :             break;
    3658             :           return AttributeList::AT_RegCall;      // "__regcall"
    3659             :         case 's':        // 1 string to match.
    3660         143 :           if (memcmp(Name.data()+3, "tdcall", 6) != 0)
    3661             :             break;
    3662             :           return AttributeList::AT_StdCall;      // "__stdcall"
    3663             :         }
    3664             :         break;
    3665             :       case 'f':  // 1 string to match.
    3666           2 :         if (memcmp(Name.data()+2, "astcall", 7) != 0)
    3667             :           break;
    3668             :         return AttributeList::AT_FastCall;       // "_fastcall"
    3669             :       case 't':  // 1 string to match.
    3670           0 :         if (memcmp(Name.data()+2, "hiscall", 7) != 0)
    3671             :           break;
    3672             :         return AttributeList::AT_ThisCall;       // "_thiscall"
    3673             :       }
    3674             :       break;
    3675             :     case 'r':    // 1 string to match.
    3676        2749 :       if (memcmp(Name.data()+1, "ead_only", 8) != 0)
    3677             :         break;
    3678             :       return AttributeList::AT_OpenCLAccess;     // "read_only"
    3679             :     }
    3680             :     break;
    3681        4961 :   case 10:       // 5 strings to match.
    3682        4961 :     switch (Name[0]) {
    3683             :     default: break;
    3684        1416 :     case '_':    // 3 strings to match.
    3685        1416 :       if (Name[1] != '_')
    3686             :         break;
    3687        1416 :       switch (Name[2]) {
    3688             :       default: break;
    3689             :       case 'c':  // 1 string to match.
    3690        1285 :         if (memcmp(Name.data()+3, "onstant", 7) != 0)
    3691             :           break;
    3692             :         return AttributeList::AT_OpenCLConstantAddressSpace;     // "__constant"
    3693             :       case 'f':  // 1 string to match.
    3694          89 :         if (memcmp(Name.data()+3, "astcall", 7) != 0)
    3695             :           break;
    3696             :         return AttributeList::AT_FastCall;       // "__fastcall"
    3697             :       case 't':  // 1 string to match.
    3698          42 :         if (memcmp(Name.data()+3, "hiscall", 7) != 0)
    3699             :           break;
    3700             :         return AttributeList::AT_ThisCall;       // "__thiscall"
    3701             :       }
    3702             :       break;
    3703             :     case 'r':    // 1 string to match.
    3704        2016 :       if (memcmp(Name.data()+1, "ead_write", 9) != 0)
    3705             :         break;
    3706             :       return AttributeList::AT_OpenCLAccess;     // "read_write"
    3707             :     case 'w':    // 1 string to match.
    3708        1529 :       if (memcmp(Name.data()+1, "rite_only", 9) != 0)
    3709             :         break;
    3710             :       return AttributeList::AT_OpenCLAccess;     // "write_only"
    3711             :     }
    3712             :     break;
    3713           3 :   case 11:       // 2 strings to match.
    3714           3 :     if (Name[0] != '_')
    3715             :       break;
    3716           3 :     switch (Name[1]) {
    3717             :     default: break;
    3718             :     case '_':    // 1 string to match.
    3719           3 :       if (memcmp(Name.data()+2, "read_only", 9) != 0)
    3720             :         break;
    3721             :       return AttributeList::AT_OpenCLAccess;     // "__read_only"
    3722             :     case 'v':    // 1 string to match.
    3723           0 :       if (memcmp(Name.data()+2, "ectorcall", 9) != 0)
    3724             :         break;
    3725             :       return AttributeList::AT_VectorCall;       // "_vectorcall"
    3726             :     }
    3727             :     break;
    3728             :   case 12:       // 3 strings to match.
    3729         110 :     if (memcmp(Name.data()+0, "__", 2) != 0)
    3730             :       break;
    3731         110 :     switch (Name[2]) {
    3732             :     default: break;
    3733             :     case 'r':    // 1 string to match.
    3734           3 :       if (memcmp(Name.data()+3, "ead_write", 9) != 0)
    3735             :         break;
    3736             :       return AttributeList::AT_OpenCLAccess;     // "__read_write"
    3737             :     case 'v':    // 1 string to match.
    3738         104 :       if (memcmp(Name.data()+3, "ectorcall", 9) != 0)
    3739             :         break;
    3740             :       return AttributeList::AT_VectorCall;       // "__vectorcall"
    3741             :     case 'w':    // 1 string to match.
    3742           3 :       if (memcmp(Name.data()+3, "rite_only", 9) != 0)
    3743             :         break;
    3744             :       return AttributeList::AT_OpenCLAccess;     // "__write_only"
    3745             :     }
    3746             :     break;
    3747             :   case 13:       // 1 string to match.
    3748          14 :     if (memcmp(Name.data()+0, "__forceinline", 13) != 0)
    3749             :       break;
    3750             :     return AttributeList::AT_AlwaysInline;       // "__forceinline"
    3751             :   case 17:       // 1 string to match.
    3752          31 :     if (memcmp(Name.data()+0, "_Null_unspecified", 17) != 0)
    3753             :       break;
    3754             :     return AttributeList::AT_TypeNullUnspecified;        // "_Null_unspecified"
    3755             :   case 20:       // 1 string to match.
    3756          25 :     if (memcmp(Name.data()+0, "__single_inheritance", 20) != 0)
    3757             :       break;
    3758             :     return AttributeList::AT_MSInheritance;      // "__single_inheritance"
    3759             :   case 21:       // 1 string to match.
    3760          13 :     if (memcmp(Name.data()+0, "__virtual_inheritance", 21) != 0)
    3761             :       break;
    3762             :     return AttributeList::AT_MSInheritance;      // "__virtual_inheritance"
    3763             :   case 22:       // 1 string to match.
    3764          20 :     if (memcmp(Name.data()+0, "__multiple_inheritance", 22) != 0)
    3765             :       break;
    3766             :     return AttributeList::AT_MSInheritance;      // "__multiple_inheritance"
    3767             :   case 25:       // 1 string to match.
    3768           0 :     if (memcmp(Name.data()+0, "__unspecified_inheritance", 25) != 0)
    3769             :       break;
    3770             :     return AttributeList::AT_MSInheritance;      // "__unspecified_inheritance"
    3771             :   }
    3772         195 :   } else if (AttributeList::AS_Pragma == Syntax) {
    3773         195 :   switch (Name.size()) {
    3774             :   default: break;
    3775             :   case 4:        // 1 string to match.
    3776         158 :     if (memcmp(Name.data()+0, "loop", 4) != 0)
    3777             :       break;
    3778             :     return AttributeList::AT_LoopHint;   // "loop"
    3779             :   case 6:        // 1 string to match.
    3780          29 :     if (memcmp(Name.data()+0, "unroll", 6) != 0)
    3781             :       break;
    3782             :     return AttributeList::AT_LoopHint;   // "unroll"
    3783             :   case 8:        // 1 string to match.
    3784           8 :     if (memcmp(Name.data()+0, "nounroll", 8) != 0)
    3785             :       break;
    3786             :     return AttributeList::AT_LoopHint;   // "nounroll"
    3787             :   }
    3788             :   }
    3789             :   return AttributeList::UnknownAttribute;
    3790             : }

Generated by: LCOV version 1.13