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

Generated by: LCOV version 1.13