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 1506 70.7 %
Date: 2018-09-23 13:06:45 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    42704033 : static ParsedAttr::Kind getAttrKind(StringRef Name, ParsedAttr::Syntax Syntax) {
      10    42704033 :   if (ParsedAttr::AS_GNU == Syntax) {
      11    42137280 :   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      361214 :   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         603 :       if (memcmp(Name.data()+1, "ost", 3) != 0)
      39             :         break;
      40         603 :       return ParsedAttr::AT_CUDAHost;    // "host"
      41             :     case 'm':    // 1 string to match.
      42       82773 :       if (memcmp(Name.data()+1, "ode", 3) != 0)
      43             :         break;
      44       82773 :       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      276554 :       if (memcmp(Name.data()+1, "ure", 3) != 0)
      51             :         break;
      52      276554 :       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        1132 :       if (memcmp(Name.data()+1, "eak", 3) != 0)
      59             :         break;
      60        1132 :       return ParsedAttr::AT_Weak;        // "weak"
      61             :     }
      62             :     break;
      63      546864 :   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      546620 :     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      546523 :         if (memcmp(Name.data()+2, "nst", 3) != 0)
      79             :           break;
      80      546523 :         return ParsedAttr::AT_Const;     // "const"
      81             :       }
      82             :       break;
      83             :     case 'i':    // 1 string to match.
      84          26 :       if (memcmp(Name.data()+1, "func", 4) != 0)
      85             :         break;
      86          26 :       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     1229633 :   case 6:        // 15 strings to match.
     103             :     switch (Name[0]) {
     104             :     default: break;
     105             :     case 'b':    // 1 string to match.
     106        1119 :       if (memcmp(Name.data()+1, "locks", 5) != 0)
     107             :         break;
     108        1119 :       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        1304 :       if (memcmp(Name.data()+1, "evice", 5) != 0)
     115             :         break;
     116        1304 :       return ParsedAttr::AT_CUDADevice;  // "device"
     117             :     case 'f':    // 1 string to match.
     118      138660 :       if (memcmp(Name.data()+1, "ormat", 5) != 0)
     119             :         break;
     120      138659 :       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       60429 :     case 'm':    // 3 strings to match.
     130             :       switch (Name[1]) {
     131             :       default: break;
     132             :       case 'a':  // 1 string to match.
     133       60376 :         if (memcmp(Name.data()+2, "lloc", 4) != 0)
     134             :           break;
     135       60376 :         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        5291 :     case 'p':    // 2 strings to match.
     147        5291 :       if (Name[1] != 'a')
     148             :         break;
     149             :       switch (Name[2]) {
     150             :       default: break;
     151             :       case 'c':  // 1 string to match.
     152        5290 :         if (memcmp(Name.data()+3, "ked", 3) != 0)
     153             :           break;
     154        5290 :         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     1019618 :       if (memcmp(Name.data()+1, "arget", 5) != 0)
     176             :         break;
     177     1019618 :       return ParsedAttr::AT_Target;      // "target"
     178             :     case 'u':    // 1 string to match.
     179        2823 :       if (memcmp(Name.data()+1, "nused", 5) != 0)
     180             :         break;
     181        2823 :       return ParsedAttr::AT_Unused;      // "unused"
     182             :     }
     183             :     break;
     184     2967992 :   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       39794 :     case 'a':    // 2 strings to match.
     192             :       switch (Name[1]) {
     193             :       default: break;
     194             :       case 'b':  // 1 string to match.
     195        7006 :         if (memcmp(Name.data()+2, "i_tag", 5) != 0)
     196             :           break;
     197        7006 :         return ParsedAttr::AT_AbiTag;    // "abi_tag"
     198             :       case 'l':  // 1 string to match.
     199       32788 :         if (memcmp(Name.data()+2, "igned", 5) != 0)
     200             :           break;
     201       32788 :         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     2907354 :     case 'n':    // 4 strings to match.
     221             :       switch (Name[1]) {
     222             :       default: break;
     223     2907348 :       case 'o':  // 3 strings to match.
     224             :         switch (Name[2]) {
     225             :         default: break;
     226             :         case 'd':        // 1 string to match.
     227      716167 :           if (memcmp(Name.data()+3, "ebug", 4) != 0)
     228             :             break;
     229      716167 :           return ParsedAttr::AT_NoDebug;         // "nodebug"
     230             :         case 'n':        // 1 string to match.
     231     2168522 :           if (memcmp(Name.data()+3, "null", 4) != 0)
     232             :             break;
     233     2168522 :           return ParsedAttr::AT_NonNull;         // "nonnull"
     234             :         case 't':        // 1 string to match.
     235       22659 :           if (memcmp(Name.data()+3, "hrow", 4) != 0)
     236             :             break;
     237       22659 :           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         707 :     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          64 :         if (memcmp(Name.data()+2, "tnone", 5) != 0)
     255             :           break;
     256          64 :         return ParsedAttr::AT_OptimizeNone;      // "optnone"
     257             :       }
     258             :       break;
     259             :     case 'r':    // 2 strings to match.
     260         161 :       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         150 :         if (memcmp(Name.data()+4, "arm", 3) != 0)
     270             :           break;
     271         150 :         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       19561 :       if (memcmp(Name.data()+1, "eakref", 6) != 0)
     289             :         break;
     290       19561 :       return ParsedAttr::AT_WeakRef;     // "weakref"
     291             :     }
     292             :     break;
     293       51696 :   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         486 :       if (memcmp(Name.data()+1, "nnotate", 7) != 0)
     302             :         break;
     303         486 :       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       50366 :     case 'n':    // 5 strings to match.
     332       50366 :       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          92 :         if (memcmp(Name.data()+3, "scape", 5) != 0)
     342             :           break;
     343          92 :         return ParsedAttr::AT_NoEscape;  // "noescape"
     344             :       case 'i':  // 1 string to match.
     345         366 :         if (memcmp(Name.data()+3, "nline", 5) != 0)
     346             :           break;
     347         366 :         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       49894 :         if (memcmp(Name.data()+3, "eturn", 5) != 0)
     354             :           break;
     355       49894 :         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      111835 :   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      104204 :       if (memcmp(Name.data()+1, "nable_if", 8) != 0)
     397             :         break;
     398      104204 :       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        5007 :     case 'm':    // 3 strings to match.
     412             :       switch (Name[1]) {
     413             :       default: break;
     414             :       case 'a':  // 1 string to match.
     415        4924 :         if (memcmp(Name.data()+2, "y_alias", 7) != 0)
     416             :           break;
     417        4924 :         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    21078357 :   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        2894 :     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        2825 :       case 'o':  // 2 strings to match.
     475        2825 :         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        2799 :           if (memcmp(Name.data()+4, "ergent", 6) != 0)
     485             :             break;
     486        2799 :           return ParsedAttr::AT_Convergent;      // "convergent"
     487             :         }
     488             :         break;
     489             :       }
     490             :       break;
     491        8925 :     case 'd':    // 2 strings to match.
     492        8925 :       if (Name[1] != 'e')
     493             :         break;
     494             :       switch (Name[2]) {
     495             :       default: break;
     496             :       case 'p':  // 1 string to match.
     497        8888 :         if (memcmp(Name.data()+3, "recated", 7) != 0)
     498             :           break;
     499        8888 :         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        8828 :     case 'g':    // 2 strings to match.
     511             :       switch (Name[1]) {
     512             :       default: break;
     513             :       case 'n':  // 1 string to match.
     514        7204 :         if (memcmp(Name.data()+2, "u_inline", 8) != 0)
     515             :           break;
     516        7204 :         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    21056198 :     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    21056181 :         if (memcmp(Name.data()+2, "sibility", 8) != 0)
     551             :           break;
     552    21056181 :         return ParsedAttr::AT_Visibility;        // "visibility"
     553             :       }
     554             :       break;
     555             :     }
     556             :     break;
     557      400876 :   case 11:       // 16 strings to match.
     558             :     switch (Name[0]) {
     559             :     default: break;
     560         357 :     case 'a':    // 2 strings to match.
     561         357 :       if (Name[1] != 'l')
     562             :         break;
     563             :       switch (Name[2]) {
     564             :       default: break;
     565             :       case 'i':  // 1 string to match.
     566         309 :         if (memcmp(Name.data()+3, "gn_value", 8) != 0)
     567             :           break;
     568         309 :         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      231641 :       if (memcmp(Name.data()+1, "iagnose_if", 10) != 0)
     590             :         break;
     591      231641 :       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      128516 :     case 'n':    // 4 strings to match.
     597             :       switch (Name[1]) {
     598             :       default: break;
     599      128404 :       case 'o':  // 3 strings to match.
     600             :         switch (Name[2]) {
     601             :         default: break;
     602             :         case '_':        // 1 string to match.
     603      128393 :           if (memcmp(Name.data()+3, "sanitize", 8) != 0)
     604             :             break;
     605      128393 :           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          37 :       if (memcmp(Name.data()+1, "rivial_abi", 10) != 0)
     628             :         break;
     629          37 :       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       38078 :       if (memcmp(Name.data()+1, "ector_size", 10) != 0)
     636             :         break;
     637       38078 :       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      280377 :   case 12:       // 6 strings to match.
     654             :     switch (Name[0]) {
     655             :     default: break;
     656             :     case 'a':    // 1 string to match.
     657        1701 :       if (memcmp(Name.data()+1, "vailability", 11) != 0)
     658             :         break;
     659        1701 :       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      278414 :     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      278357 :         if (memcmp(Name.data()+2, "erloadable", 10) != 0)
     684             :           break;
     685      278357 :         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    10350195 :   case 13:       // 15 strings to match.
     695             :     switch (Name[0]) {
     696             :     default: break;
     697    10347950 :     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    10347452 :         if (memcmp(Name.data()+2, "ways_inline", 11) != 0)
     706             :           break;
     707    10347452 :         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        7219 :   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        6184 :       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        6155 :         if (memcmp(Name.data()+6, "wnership", 8) != 0)
     837             :           break;
     838        6155 :         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     3744619 :   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        3499 :       if (memcmp(Name.data()+1, "xt_vector_type", 14) != 0)
     880             :         break;
     881        3499 :       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         265 :     case 'o':    // 3 strings to match.
     887             :       switch (Name[1]) {
     888             :       default: break;
     889             :       case 'b':  // 1 string to match.
     890         167 :         if (memcmp(Name.data()+2, "jc_root_class", 13) != 0)
     891             :           break;
     892         167 :         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          81 :       if (memcmp(Name.data()+1, "coped_lockable", 14) != 0)
     920             :         break;
     921          81 :       return ParsedAttr::AT_ScopedLockable;      // "scoped_lockable"
     922             :     case 't':    // 1 string to match.
     923     3739284 :       if (memcmp(Name.data()+1, "ype_visibility", 14) != 0)
     924             :         break;
     925     3739284 :       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      974923 :   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      969879 :       if (memcmp(Name.data()+1, "in_vector_width", 15) != 0)
     941             :         break;
     942      969879 :       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       23718 :   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        3295 :       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       19699 :       if (memcmp(Name.data()+1, "arn_unused_result", 17) != 0)
    1086             :         break;
    1087       19699 :       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         248 :   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          93 :       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          66 :         if (memcmp(Name.data()+4, "hread_safety_analysis", 21) != 0)
    1328             :           break;
    1329          66 :         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             :   case 35:       // 1 string to match.
    1430          39 :     if (memcmp(Name.data()+0, "objc_arc_weak_reference_unavailable", 35) != 0)
    1431             :       break;
    1432          39 :     return ParsedAttr::AT_ArcWeakrefUnavailable;         // "objc_arc_weak_reference_unavailable"
    1433             :   case 46:       // 1 string to match.
    1434          13 :     if (memcmp(Name.data()+0, "objc_protocol_requires_explicit_implementation", 46) != 0)
    1435             :       break;
    1436          13 :     return ParsedAttr::AT_ObjCExplicitProtocolImpl;      // "objc_protocol_requires_explicit_implementation"
    1437             :   }
    1438      566753 :   } else if (ParsedAttr::AS_Declspec == Syntax) {
    1439        7479 :   switch (Name.size()) {
    1440             :   default: break;
    1441             :   case 4:        // 1 string to match.
    1442          84 :     if (memcmp(Name.data()+0, "uuid", 4) != 0)
    1443             :       break;
    1444          84 :     return ParsedAttr::AT_Uuid;  // "uuid"
    1445         224 :   case 5:        // 2 strings to match.
    1446             :     switch (Name[0]) {
    1447             :     default: break;
    1448             :     case 'a':    // 1 string to match.
    1449         215 :       if (memcmp(Name.data()+1, "lign", 4) != 0)
    1450             :         break;
    1451         215 :       return ParsedAttr::AT_Aligned;     // "align"
    1452             :     case 'n':    // 1 string to match.
    1453           9 :       if (memcmp(Name.data()+1, "aked", 4) != 0)
    1454             :         break;
    1455           9 :       return ParsedAttr::AT_Naked;       // "naked"
    1456             :     }
    1457             :     break;
    1458             :   case 6:        // 1 string to match.
    1459          55 :     if (memcmp(Name.data()+0, "thread", 6) != 0)
    1460             :       break;
    1461          55 :     return ParsedAttr::AT_Thread;        // "thread"
    1462             :   case 7:        // 2 strings to match.
    1463           8 :     if (memcmp(Name.data()+0, "no", 2) != 0)
    1464             :       break;
    1465             :     switch (Name[2]) {
    1466             :     default: break;
    1467             :     case 'a':    // 1 string to match.
    1468           2 :       if (memcmp(Name.data()+3, "lias", 4) != 0)
    1469             :         break;
    1470           2 :       return ParsedAttr::AT_NoAlias;     // "noalias"
    1471             :     case 't':    // 1 string to match.
    1472           2 :       if (memcmp(Name.data()+3, "hrow", 4) != 0)
    1473             :         break;
    1474           2 :       return ParsedAttr::AT_NoThrow;     // "nothrow"
    1475             :     }
    1476             :     break;
    1477         255 :   case 8:        // 8 strings to match.
    1478             :     switch (Name[0]) {
    1479             :     default: break;
    1480             :     case '_':    // 1 string to match.
    1481           3 :       if (memcmp(Name.data()+1, "_host__", 7) != 0)
    1482             :         break;
    1483           3 :       return ParsedAttr::AT_CUDAHost;    // "__host__"
    1484             :     case 'a':    // 1 string to match.
    1485           8 :       if (memcmp(Name.data()+1, "llocate", 7) != 0)
    1486             :         break;
    1487           8 :       return ParsedAttr::AT_Section;     // "allocate"
    1488             :     case 'c':    // 1 string to match.
    1489          81 :       if (memcmp(Name.data()+1, "ode_seg", 7) != 0)
    1490             :         break;
    1491          81 :       return ParsedAttr::AT_CodeSeg;     // "code_seg"
    1492          59 :     case 'n':    // 3 strings to match.
    1493          59 :       if (Name[1] != 'o')
    1494             :         break;
    1495             :       switch (Name[2]) {
    1496             :       default: break;
    1497             :       case 'i':  // 1 string to match.
    1498          31 :         if (memcmp(Name.data()+3, "nline", 5) != 0)
    1499             :           break;
    1500          31 :         return ParsedAttr::AT_NoInline;  // "noinline"
    1501             :       case 'r':  // 1 string to match.
    1502          16 :         if (memcmp(Name.data()+3, "eturn", 5) != 0)
    1503             :           break;
    1504          16 :         return ParsedAttr::AT_NoReturn;  // "noreturn"
    1505             :       case 'v':  // 1 string to match.
    1506          12 :         if (memcmp(Name.data()+3, "table", 5) != 0)
    1507             :           break;
    1508          12 :         return ParsedAttr::AT_MSNoVTable;        // "novtable"
    1509             :       }
    1510             :       break;
    1511             :     case 'p':    // 1 string to match.
    1512         103 :       if (memcmp(Name.data()+1, "roperty", 7) != 0)
    1513             :         break;
    1514         103 :       return ParsedAttr::IgnoredAttribute;       // "property"
    1515             :     case 'r':    // 1 string to match.
    1516           1 :       if (memcmp(Name.data()+1, "estrict", 7) != 0)
    1517             :         break;
    1518           1 :       return ParsedAttr::AT_Restrict;    // "restrict"
    1519             :     }
    1520             :     break;
    1521        6771 :   case 9:        // 3 strings to match.
    1522             :     switch (Name[0]) {
    1523             :     default: break;
    1524             :     case 'd':    // 2 strings to match.
    1525        6713 :       if (memcmp(Name.data()+1, "ll", 2) != 0)
    1526             :         break;
    1527             :       switch (Name[3]) {
    1528             :       default: break;
    1529             :       case 'e':  // 1 string to match.
    1530        3139 :         if (memcmp(Name.data()+4, "xport", 5) != 0)
    1531             :           break;
    1532        3139 :         return ParsedAttr::AT_DLLExport;         // "dllexport"
    1533             :       case 'i':  // 1 string to match.
    1534        3574 :         if (memcmp(Name.data()+4, "mport", 5) != 0)
    1535             :           break;
    1536        3574 :         return ParsedAttr::AT_DLLImport;         // "dllimport"
    1537             :       }
    1538             :       break;
    1539             :     case 's':    // 1 string to match.
    1540          54 :       if (memcmp(Name.data()+1, "electany", 8) != 0)
    1541             :         break;
    1542          54 :       return ParsedAttr::AT_SelectAny;   // "selectany"
    1543             :     }
    1544             :     break;
    1545          34 :   case 10:       // 4 strings to match.
    1546             :     switch (Name[0]) {
    1547             :     default: break;
    1548           9 :     case '_':    // 3 strings to match.
    1549           9 :       if (Name[1] != '_')
    1550             :         break;
    1551             :       switch (Name[2]) {
    1552             :       default: break;
    1553             :       case 'd':  // 1 string to match.
    1554           3 :         if (memcmp(Name.data()+3, "evice__", 7) != 0)
    1555             :           break;
    1556           3 :         return ParsedAttr::AT_CUDADevice;        // "__device__"
    1557             :       case 'g':  // 1 string to match.
    1558           3 :         if (memcmp(Name.data()+3, "lobal__", 7) != 0)
    1559             :           break;
    1560           3 :         return ParsedAttr::AT_CUDAGlobal;        // "__global__"
    1561             :       case 's':  // 1 string to match.
    1562           3 :         if (memcmp(Name.data()+3, "hared__", 7) != 0)
    1563             :           break;
    1564           3 :         return ParsedAttr::AT_CUDAShared;        // "__shared__"
    1565             :       }
    1566             :       break;
    1567             :     case 'd':    // 1 string to match.
    1568          25 :       if (memcmp(Name.data()+1, "eprecated", 9) != 0)
    1569             :         break;
    1570          25 :       return ParsedAttr::AT_Deprecated;  // "deprecated"
    1571             :     }
    1572             :     break;
    1573             :   case 11:       // 1 string to match.
    1574          15 :     if (memcmp(Name.data()+0, "empty_bases", 11) != 0)
    1575             :       break;
    1576          14 :     return ParsedAttr::AT_EmptyBases;    // "empty_bases"
    1577             :   case 12:       // 1 string to match.
    1578           4 :     if (memcmp(Name.data()+0, "__constant__", 12) != 0)
    1579             :       break;
    1580           3 :     return ParsedAttr::AT_CUDAConstant;  // "__constant__"
    1581             :   case 14:       // 1 string to match.
    1582           8 :     if (memcmp(Name.data()+0, "layout_version", 14) != 0)
    1583             :       break;
    1584           8 :     return ParsedAttr::AT_LayoutVersion;         // "layout_version"
    1585             :   case 17:       // 1 string to match.
    1586           0 :     if (memcmp(Name.data()+0, "__launch_bounds__", 17) != 0)
    1587             :       break;
    1588           0 :     return ParsedAttr::AT_CUDALaunchBounds;      // "__launch_bounds__"
    1589             :   case 18:       // 2 strings to match.
    1590          15 :     if (memcmp(Name.data()+0, "__", 2) != 0)
    1591             :       break;
    1592             :     switch (Name[2]) {
    1593             :     default: break;
    1594             :     case 'c':    // 1 string to match.
    1595           3 :       if (memcmp(Name.data()+3, "udart_builtin__", 15) != 0)
    1596             :         break;
    1597           3 :       return ParsedAttr::IgnoredAttribute;       // "__cudart_builtin__"
    1598             :     case 'd':    // 1 string to match.
    1599          12 :       if (memcmp(Name.data()+3, "evice_builtin__", 15) != 0)
    1600             :         break;
    1601          12 :       return ParsedAttr::IgnoredAttribute;       // "__device_builtin__"
    1602             :     }
    1603             :     break;
    1604             :   case 31:       // 2 strings to match.
    1605           6 :     if (memcmp(Name.data()+0, "__device_builtin_", 17) != 0)
    1606             :       break;
    1607             :     switch (Name[17]) {
    1608             :     default: break;
    1609             :     case 's':    // 1 string to match.
    1610           3 :       if (memcmp(Name.data()+18, "urface_type__", 13) != 0)
    1611             :         break;
    1612           3 :       return ParsedAttr::IgnoredAttribute;       // "__device_builtin_surface_type__"
    1613             :     case 't':    // 1 string to match.
    1614           3 :       if (memcmp(Name.data()+18, "exture_type__", 13) != 0)
    1615             :         break;
    1616           3 :       return ParsedAttr::IgnoredAttribute;       // "__device_builtin_texture_type__"
    1617             :     }
    1618             :     break;
    1619             :   }
    1620      559274 :   } else if (ParsedAttr::AS_Microsoft == Syntax) {
    1621          52 :   switch (Name.size()) {
    1622             :   default: break;
    1623             :   case 4:        // 1 string to match.
    1624          52 :     if (memcmp(Name.data()+0, "uuid", 4) != 0)
    1625             :       break;
    1626          52 :     return ParsedAttr::AT_Uuid;  // "uuid"
    1627             :   }
    1628      559222 :   } else if (ParsedAttr::AS_CXX11 == Syntax) {
    1629      441904 :   switch (Name.size()) {
    1630             :   default: break;
    1631             :   case 8:        // 3 strings to match.
    1632          13 :     if (memcmp(Name.data()+0, "gnu::", 5) != 0)
    1633             :       break;
    1634             :     switch (Name[5]) {
    1635             :     default: break;
    1636             :     case 'f':    // 1 string to match.
    1637           0 :       if (memcmp(Name.data()+6, "ar", 2) != 0)
    1638             :         break;
    1639           0 :       return ParsedAttr::AT_MipsLongCall;        // "gnu::far"
    1640             :     case 'h':    // 1 string to match.
    1641           0 :       if (memcmp(Name.data()+6, "ot", 2) != 0)
    1642             :         break;
    1643           0 :       return ParsedAttr::AT_Hot;         // "gnu::hot"
    1644             :     case 'p':    // 1 string to match.
    1645           0 :       if (memcmp(Name.data()+6, "cs", 2) != 0)
    1646             :         break;
    1647           0 :       return ParsedAttr::AT_Pcs;         // "gnu::pcs"
    1648             :     }
    1649             :     break;
    1650             :   case 9:        // 6 strings to match.
    1651          32 :     if (memcmp(Name.data()+0, "gnu::", 5) != 0)
    1652             :       break;
    1653             :     switch (Name[5]) {
    1654             :     default: break;
    1655             :     case 'c':    // 1 string to match.
    1656           0 :       if (memcmp(Name.data()+6, "old", 3) != 0)
    1657             :         break;
    1658           0 :       return ParsedAttr::AT_Cold;        // "gnu::cold"
    1659             :     case 'm':    // 1 string to match.
    1660           4 :       if (memcmp(Name.data()+6, "ode", 3) != 0)
    1661             :         break;
    1662           4 :       return ParsedAttr::AT_Mode;        // "gnu::mode"
    1663             :     case 'n':    // 1 string to match.
    1664           0 :       if (memcmp(Name.data()+6, "ear", 3) != 0)
    1665             :         break;
    1666           0 :       return ParsedAttr::AT_MipsShortCall;       // "gnu::near"
    1667             :     case 'p':    // 1 string to match.
    1668           2 :       if (memcmp(Name.data()+6, "ure", 3) != 0)
    1669             :         break;
    1670           2 :       return ParsedAttr::AT_Pure;        // "gnu::pure"
    1671             :     case 'u':    // 1 string to match.
    1672           4 :       if (memcmp(Name.data()+6, "sed", 3) != 0)
    1673             :         break;
    1674           4 :       return ParsedAttr::AT_Used;        // "gnu::used"
    1675             :     case 'w':    // 1 string to match.
    1676           0 :       if (memcmp(Name.data()+6, "eak", 3) != 0)
    1677             :         break;
    1678           0 :       return ParsedAttr::AT_Weak;        // "gnu::weak"
    1679             :     }
    1680             :     break;
    1681      242437 :   case 10:       // 6 strings to match.
    1682             :     switch (Name[0]) {
    1683             :     default: break;
    1684             :     case ':':    // 1 string to match.
    1685      242417 :       if (memcmp(Name.data()+1, ":noreturn", 9) != 0)
    1686             :         break;
    1687      242413 :       return ParsedAttr::AT_CXX11NoReturn;       // "::noreturn"
    1688             :     case 'g':    // 5 strings to match.
    1689          20 :       if (memcmp(Name.data()+1, "nu::", 4) != 0)
    1690             :         break;
    1691             :       switch (Name[5]) {
    1692             :       default: break;
    1693             :       case 'a':  // 1 string to match.
    1694           9 :         if (memcmp(Name.data()+6, "lias", 4) != 0)
    1695             :           break;
    1696           9 :         return ParsedAttr::AT_Alias;     // "gnu::alias"
    1697           8 :       case 'c':  // 2 strings to match.
    1698             :         switch (Name[6]) {
    1699             :         default: break;
    1700             :         case 'd':        // 1 string to match.
    1701           4 :           if (memcmp(Name.data()+7, "ecl", 3) != 0)
    1702             :             break;
    1703           4 :           return ParsedAttr::AT_CDecl;   // "gnu::cdecl"
    1704             :         case 'o':        // 1 string to match.
    1705           4 :           if (memcmp(Name.data()+7, "nst", 3) != 0)
    1706             :             break;
    1707           4 :           return ParsedAttr::AT_Const;   // "gnu::const"
    1708             :         }
    1709             :         break;
    1710             :       case 'i':  // 1 string to match.
    1711           0 :         if (memcmp(Name.data()+6, "func", 4) != 0)
    1712             :           break;
    1713           0 :         return ParsedAttr::AT_IFunc;     // "gnu::ifunc"
    1714             :       case 'n':  // 1 string to match.
    1715           3 :         if (memcmp(Name.data()+6, "aked", 4) != 0)
    1716             :           break;
    1717           3 :         return ParsedAttr::AT_Naked;     // "gnu::naked"
    1718             :       }
    1719             :       break;
    1720             :     }
    1721             :     break;
    1722      196389 :   case 11:       // 10 strings to match.
    1723             :     switch (Name[0]) {
    1724             :     default: break;
    1725             :     case ':':    // 1 string to match.
    1726      196363 :       if (memcmp(Name.data()+1, ":nodiscard", 10) != 0)
    1727             :         break;
    1728      196359 :       return ParsedAttr::AT_WarnUnusedResult;    // "::nodiscard"
    1729             :     case 'g':    // 9 strings to match.
    1730          24 :       if (memcmp(Name.data()+1, "nu::", 4) != 0)
    1731             :         break;
    1732             :       switch (Name[5]) {
    1733             :       default: break;
    1734             :       case 'c':  // 1 string to match.
    1735           0 :         if (memcmp(Name.data()+6, "ommon", 5) != 0)
    1736             :           break;
    1737           0 :         return ParsedAttr::AT_Common;    // "gnu::common"
    1738             :       case 'f':  // 1 string to match.
    1739           4 :         if (memcmp(Name.data()+6, "ormat", 5) != 0)
    1740             :           break;
    1741           4 :         return ParsedAttr::AT_Format;    // "gnu::format"
    1742           0 :       case 'm':  // 3 strings to match.
    1743             :         switch (Name[6]) {
    1744             :         default: break;
    1745             :         case 'a':        // 1 string to match.
    1746           0 :           if (memcmp(Name.data()+7, "lloc", 4) != 0)
    1747             :             break;
    1748           0 :           return ParsedAttr::AT_Restrict;        // "gnu::malloc"
    1749             :         case 'i':        // 1 string to match.
    1750           0 :           if (memcmp(Name.data()+7, "ps16", 4) != 0)
    1751             :             break;
    1752           0 :           return ParsedAttr::AT_Mips16;  // "gnu::mips16"
    1753             :         case 's':        // 1 string to match.
    1754           0 :           if (memcmp(Name.data()+7, "_abi", 4) != 0)
    1755             :             break;
    1756           0 :           return ParsedAttr::AT_MSABI;   // "gnu::ms_abi"
    1757             :         }
    1758             :         break;
    1759             :       case 'p':  // 1 string to match.
    1760           2 :         if (memcmp(Name.data()+6, "acked", 5) != 0)
    1761             :           break;
    1762           2 :         return ParsedAttr::AT_Packed;    // "gnu::packed"
    1763             :       case 's':  // 1 string to match.
    1764           0 :         if (memcmp(Name.data()+6, "ignal", 5) != 0)
    1765             :           break;
    1766           0 :         return ParsedAttr::AT_AVRSignal;         // "gnu::signal"
    1767             :       case 't':  // 1 string to match.
    1768           0 :         if (memcmp(Name.data()+6, "arget", 5) != 0)
    1769             :           break;
    1770           0 :         return ParsedAttr::AT_Target;    // "gnu::target"
    1771             :       case 'u':  // 1 string to match.
    1772          18 :         if (memcmp(Name.data()+6, "nused", 5) != 0)
    1773             :           break;
    1774          18 :         return ParsedAttr::AT_Unused;    // "gnu::unused"
    1775             :       }
    1776             :       break;
    1777             :     }
    1778             :     break;
    1779         162 :   case 12:       // 14 strings to match.
    1780             :     switch (Name[0]) {
    1781             :     default: break;
    1782             :     case ':':    // 1 string to match.
    1783          91 :       if (memcmp(Name.data()+1, ":deprecated", 11) != 0)
    1784             :         break;
    1785          89 :       return ParsedAttr::AT_Deprecated;  // "::deprecated"
    1786             :     case 'g':    // 13 strings to match.
    1787          66 :       if (memcmp(Name.data()+1, "nu::", 4) != 0)
    1788             :         break;
    1789             :       switch (Name[5]) {
    1790             :       default: break;
    1791             :       case '_':  // 1 string to match.
    1792           2 :         if (memcmp(Name.data()+6, "_const", 6) != 0)
    1793             :           break;
    1794           2 :         return ParsedAttr::AT_Const;     // "gnu::__const"
    1795          31 :       case 'a':  // 2 strings to match.
    1796             :         switch (Name[6]) {
    1797             :         default: break;
    1798             :         case 'b':        // 1 string to match.
    1799           4 :           if (memcmp(Name.data()+7, "i_tag", 5) != 0)
    1800             :             break;
    1801           4 :           return ParsedAttr::AT_AbiTag;  // "gnu::abi_tag"
    1802             :         case 'l':        // 1 string to match.
    1803          27 :           if (memcmp(Name.data()+7, "igned", 5) != 0)
    1804             :             break;
    1805          27 :           return ParsedAttr::AT_Aligned;         // "gnu::aligned"
    1806             :         }
    1807             :         break;
    1808             :       case 'c':  // 1 string to match.
    1809           4 :         if (memcmp(Name.data()+6, "leanup", 6) != 0)
    1810             :           break;
    1811           4 :         return ParsedAttr::AT_Cleanup;   // "gnu::cleanup"
    1812             :       case 'f':  // 1 string to match.
    1813          19 :         if (memcmp(Name.data()+6, "latten", 6) != 0)
    1814             :           break;
    1815          19 :         return ParsedAttr::AT_Flatten;   // "gnu::flatten"
    1816           4 :       case 'n':  // 3 strings to match.
    1817           4 :         if (Name[6] != 'o')
    1818             :           break;
    1819             :         switch (Name[7]) {
    1820             :         default: break;
    1821             :         case 'd':        // 1 string to match.
    1822           2 :           if (memcmp(Name.data()+8, "ebug", 4) != 0)
    1823             :             break;
    1824           2 :           return ParsedAttr::AT_NoDebug;         // "gnu::nodebug"
    1825             :         case 'n':        // 1 string to match.
    1826           2 :           if (memcmp(Name.data()+8, "null", 4) != 0)
    1827             :             break;
    1828           2 :           return ParsedAttr::AT_NonNull;         // "gnu::nonnull"
    1829             :         case 't':        // 1 string to match.
    1830           0 :           if (memcmp(Name.data()+8, "hrow", 4) != 0)
    1831             :             break;
    1832           0 :           return ParsedAttr::AT_NoThrow;         // "gnu::nothrow"
    1833             :         }
    1834             :         break;
    1835             :       case 'r':  // 2 strings to match.
    1836           0 :         if (memcmp(Name.data()+6, "eg", 2) != 0)
    1837             :           break;
    1838             :         switch (Name[8]) {
    1839             :         default: break;
    1840             :         case 'c':        // 1 string to match.
    1841           0 :           if (memcmp(Name.data()+9, "all", 3) != 0)
    1842             :             break;
    1843           0 :           return ParsedAttr::AT_RegCall;         // "gnu::regcall"
    1844             :         case 'p':        // 1 string to match.
    1845           0 :           if (memcmp(Name.data()+9, "arm", 3) != 0)
    1846             :             break;
    1847           0 :           return ParsedAttr::AT_Regparm;         // "gnu::regparm"
    1848             :         }
    1849             :         break;
    1850           6 :       case 's':  // 2 strings to match.
    1851             :         switch (Name[6]) {
    1852             :         default: break;
    1853             :         case 'e':        // 1 string to match.
    1854           0 :           if (memcmp(Name.data()+7, "ction", 5) != 0)
    1855             :             break;
    1856           0 :           return ParsedAttr::AT_Section;         // "gnu::section"
    1857             :         case 't':        // 1 string to match.
    1858           6 :           if (memcmp(Name.data()+7, "dcall", 5) != 0)
    1859             :             break;
    1860           6 :           return ParsedAttr::AT_StdCall;         // "gnu::stdcall"
    1861             :         }
    1862             :         break;
    1863             :       case 'w':  // 1 string to match.
    1864           0 :         if (memcmp(Name.data()+6, "eakref", 6) != 0)
    1865             :           break;
    1866           0 :         return ParsedAttr::AT_WeakRef;   // "gnu::weakref"
    1867             :       }
    1868             :       break;
    1869             :     }
    1870             :     break;
    1871         157 :   case 13:       // 12 strings to match.
    1872             :     switch (Name[0]) {
    1873             :     default: break;
    1874             :     case ':':    // 1 string to match.
    1875          79 :       if (memcmp(Name.data()+1, ":fallthrough", 12) != 0)
    1876             :         break;
    1877          75 :       return ParsedAttr::AT_FallThrough;         // "::fallthrough"
    1878             :     case 'c':    // 2 strings to match.
    1879           0 :       if (memcmp(Name.data()+1, "lang::", 6) != 0)
    1880             :         break;
    1881             :       switch (Name[7]) {
    1882             :       default: break;
    1883             :       case 'b':  // 1 string to match.
    1884           0 :         if (memcmp(Name.data()+8, "locks", 5) != 0)
    1885             :           break;
    1886           0 :         return ParsedAttr::AT_Blocks;    // "clang::blocks"
    1887             :       case 'p':  // 1 string to match.
    1888           0 :         if (memcmp(Name.data()+8, "ascal", 5) != 0)
    1889             :           break;
    1890           0 :         return ParsedAttr::AT_Pascal;    // "clang::pascal"
    1891             :       }
    1892             :       break;
    1893          78 :     case 'g':    // 9 strings to match.
    1894             :       switch (Name[1]) {
    1895             :       default: break;
    1896             :       case 'n':  // 8 strings to match.
    1897          42 :         if (memcmp(Name.data()+2, "u::", 3) != 0)
    1898             :           break;
    1899             :         switch (Name[5]) {
    1900             :         default: break;
    1901             :         case 'f':        // 1 string to match.
    1902          12 :           if (memcmp(Name.data()+6, "astcall", 7) != 0)
    1903             :             break;
    1904          12 :           return ParsedAttr::AT_FastCall;        // "gnu::fastcall"
    1905          30 :         case 'n':        // 4 strings to match.
    1906          30 :           if (Name[6] != 'o')
    1907             :             break;
    1908             :           switch (Name[7]) {
    1909             :           default: break;
    1910             :           case 'c':      // 1 string to match.
    1911           0 :             if (memcmp(Name.data()+8, "ommon", 5) != 0)
    1912             :               break;
    1913           0 :             return ParsedAttr::AT_NoCommon;      // "gnu::nocommon"
    1914             :           case 'i':      // 1 string to match.
    1915           0 :             if (memcmp(Name.data()+8, "nline", 5) != 0)
    1916             :               break;
    1917           0 :             return ParsedAttr::AT_NoInline;      // "gnu::noinline"
    1918             :           case 'm':      // 1 string to match.
    1919           0 :             if (memcmp(Name.data()+8, "ips16", 5) != 0)
    1920             :               break;
    1921           0 :             return ParsedAttr::AT_NoMips16;      // "gnu::nomips16"
    1922             :           case 'r':      // 1 string to match.
    1923          30 :             if (memcmp(Name.data()+8, "eturn", 5) != 0)
    1924             :               break;
    1925          30 :             return ParsedAttr::AT_NoReturn;      // "gnu::noreturn"
    1926             :           }
    1927             :           break;
    1928           0 :         case 's':        // 2 strings to match.
    1929             :           switch (Name[6]) {
    1930             :           default: break;
    1931             :           case 'e':      // 1 string to match.
    1932           0 :             if (memcmp(Name.data()+7, "ntinel", 6) != 0)
    1933             :               break;
    1934           0 :             return ParsedAttr::AT_Sentinel;      // "gnu::sentinel"
    1935             :           case 'y':      // 1 string to match.
    1936           0 :             if (memcmp(Name.data()+7, "sv_abi", 6) != 0)
    1937             :               break;
    1938           0 :             return ParsedAttr::AT_SysVABI;       // "gnu::sysv_abi"
    1939             :           }
    1940             :           break;
    1941             :         case 't':        // 1 string to match.
    1942           0 :           if (memcmp(Name.data()+6, "hiscall", 7) != 0)
    1943             :             break;
    1944           0 :           return ParsedAttr::AT_ThisCall;        // "gnu::thiscall"
    1945             :         }
    1946             :         break;
    1947             :       case 's':  // 1 string to match.
    1948          36 :         if (memcmp(Name.data()+2, "l::suppress", 11) != 0)
    1949             :           break;
    1950          36 :         return ParsedAttr::AT_Suppress;  // "gsl::suppress"
    1951             :       }
    1952             :       break;
    1953             :     }
    1954             :     break;
    1955         131 :   case 14:       // 13 strings to match.
    1956             :     switch (Name[0]) {
    1957             :     default: break;
    1958             :     case ':':    // 1 string to match.
    1959          62 :       if (memcmp(Name.data()+1, ":maybe_unused", 13) != 0)
    1960             :         break;
    1961          62 :       return ParsedAttr::AT_Unused;      // "::maybe_unused"
    1962             :     case 'c':    // 3 strings to match.
    1963          16 :       if (memcmp(Name.data()+1, "lang::", 6) != 0)
    1964             :         break;
    1965             :       switch (Name[7]) {
    1966             :       default: break;
    1967             :       case 'm':  // 1 string to match.
    1968           0 :         if (memcmp(Name.data()+8, "insize", 6) != 0)
    1969             :           break;
    1970           0 :         return ParsedAttr::AT_MinSize;   // "clang::minsize"
    1971          16 :       case 'o':  // 2 strings to match.
    1972             :         switch (Name[8]) {
    1973             :         default: break;
    1974             :         case 'b':        // 1 string to match.
    1975           0 :           if (memcmp(Name.data()+9, "jc_gc", 5) != 0)
    1976             :             break;
    1977           0 :           return ParsedAttr::AT_ObjCGC;  // "clang::objc_gc"
    1978             :         case 'p':        // 1 string to match.
    1979          16 :           if (memcmp(Name.data()+9, "tnone", 5) != 0)
    1980             :             break;
    1981          16 :           return ParsedAttr::AT_OptimizeNone;    // "clang::optnone"
    1982             :         }
    1983             :         break;
    1984             :       }
    1985             :       break;
    1986             :     case 'g':    // 9 strings to match.
    1987          53 :       if (memcmp(Name.data()+1, "nu::", 4) != 0)
    1988             :         break;
    1989             :       switch (Name[5]) {
    1990             :       default: break;
    1991             :       case 'd':  // 2 strings to match.
    1992           0 :         if (memcmp(Name.data()+6, "ll", 2) != 0)
    1993             :           break;
    1994             :         switch (Name[8]) {
    1995             :         default: break;
    1996             :         case 'e':        // 1 string to match.
    1997           0 :           if (memcmp(Name.data()+9, "xport", 5) != 0)
    1998             :             break;
    1999           0 :           return ParsedAttr::AT_DLLExport;       // "gnu::dllexport"
    2000             :         case 'i':        // 1 string to match.
    2001           0 :           if (memcmp(Name.data()+9, "mport", 5) != 0)
    2002             :             break;
    2003           0 :           return ParsedAttr::AT_DLLImport;       // "gnu::dllimport"
    2004             :         }
    2005             :         break;
    2006             :       case 'i':  // 1 string to match.
    2007          16 :         if (memcmp(Name.data()+6, "nterrupt", 8) != 0)
    2008             :           break;
    2009          16 :         return ParsedAttr::AT_Interrupt;         // "gnu::interrupt"
    2010             :       case 'l':  // 1 string to match.
    2011           0 :         if (memcmp(Name.data()+6, "ong_call", 8) != 0)
    2012             :           break;
    2013           0 :         return ParsedAttr::AT_MipsLongCall;      // "gnu::long_call"
    2014          34 :       case 'm':  // 3 strings to match.
    2015             :         switch (Name[6]) {
    2016             :         default: break;
    2017             :         case 'a':        // 1 string to match.
    2018          34 :           if (memcmp(Name.data()+7, "y_alias", 7) != 0)
    2019             :             break;
    2020          34 :           return ParsedAttr::AT_MayAlias;        // "gnu::may_alias"
    2021             :         case 'i':        // 1 string to match.
    2022           0 :           if (memcmp(Name.data()+7, "cromips", 7) != 0)
    2023             :             break;
    2024           0 :           return ParsedAttr::AT_MicroMips;       // "gnu::micromips"
    2025             :         case 's':        // 1 string to match.
    2026           0 :           if (memcmp(Name.data()+7, "_struct", 7) != 0)
    2027             :             break;
    2028           0 :           return ParsedAttr::AT_MSStruct;        // "gnu::ms_struct"
    2029             :         }
    2030             :         break;
    2031             :       case 's':  // 1 string to match.
    2032           0 :         if (memcmp(Name.data()+6, "electany", 8) != 0)
    2033             :           break;
    2034           0 :         return ParsedAttr::AT_SelectAny;         // "gnu::selectany"
    2035             :       case 't':  // 1 string to match.
    2036           3 :         if (memcmp(Name.data()+6, "ls_model", 8) != 0)
    2037             :           break;
    2038           3 :         return ParsedAttr::AT_TLSModel;  // "gnu::tls_model"
    2039             :       }
    2040             :       break;
    2041             :     }
    2042             :     break;
    2043          77 :   case 15:       // 14 strings to match.
    2044             :     switch (Name[0]) {
    2045             :     default: break;
    2046             :     case 'c':    // 5 strings to match.
    2047          31 :       if (memcmp(Name.data()+1, "lang::", 6) != 0)
    2048             :         break;
    2049             :       switch (Name[7]) {
    2050             :       default: break;
    2051             :       case 'N':  // 1 string to match.
    2052           0 :         if (memcmp(Name.data()+8, "SObject", 7) != 0)
    2053             :           break;
    2054           0 :         return ParsedAttr::AT_ObjCNSObject;      // "clang::NSObject"
    2055             :       case 'a':  // 1 string to match.
    2056          22 :         if (memcmp(Name.data()+8, "nnotate", 7) != 0)
    2057             :           break;
    2058          22 :         return ParsedAttr::AT_Annotate;  // "clang::annotate"
    2059           4 :       case 'i':  // 2 strings to match.
    2060           4 :         if (Name[8] != 'b')
    2061             :           break;
    2062             :         switch (Name[9]) {
    2063             :         default: break;
    2064             :         case 'a':        // 1 string to match.
    2065           0 :           if (memcmp(Name.data()+10, "ction", 5) != 0)
    2066             :             break;
    2067           0 :           return ParsedAttr::AT_IBAction;        // "clang::ibaction"
    2068             :         case 'o':        // 1 string to match.
    2069           4 :           if (memcmp(Name.data()+10, "utlet", 5) != 0)
    2070             :             break;
    2071           4 :           return ParsedAttr::AT_IBOutlet;        // "clang::iboutlet"
    2072             :         }
    2073             :         break;
    2074             :       case 'n':  // 1 string to match.
    2075           5 :         if (memcmp(Name.data()+8, "oescape", 7) != 0)
    2076             :           break;
    2077           5 :         return ParsedAttr::AT_NoEscape;  // "clang::noescape"
    2078             :       }
    2079             :       break;
    2080             :     case 'g':    // 9 strings to match.
    2081          36 :       if (memcmp(Name.data()+1, "nu::", 4) != 0)
    2082             :         break;
    2083             :       switch (Name[5]) {
    2084             :       default: break;
    2085           0 :       case 'a':  // 2 strings to match.
    2086             :         switch (Name[6]) {
    2087             :         default: break;
    2088             :         case 'l':        // 1 string to match.
    2089           0 :           if (memcmp(Name.data()+7, "loc_size", 8) != 0)
    2090             :             break;
    2091           0 :           return ParsedAttr::AT_AllocSize;       // "gnu::alloc_size"
    2092             :         case 'r':        // 1 string to match.
    2093           0 :           if (memcmp(Name.data()+7, "tificial", 8) != 0)
    2094             :             break;
    2095           0 :           return ParsedAttr::AT_Artificial;      // "gnu::artificial"
    2096             :         }
    2097             :         break;
    2098          20 :       case 'd':  // 2 strings to match.
    2099          20 :         if (Name[6] != 'e')
    2100             :           break;
    2101             :         switch (Name[7]) {
    2102             :         default: break;
    2103             :         case 'p':        // 1 string to match.
    2104          20 :           if (memcmp(Name.data()+8, "recated", 7) != 0)
    2105             :             break;
    2106          20 :           return ParsedAttr::AT_Deprecated;      // "gnu::deprecated"
    2107             :         case 's':        // 1 string to match.
    2108           0 :           if (memcmp(Name.data()+8, "tructor", 7) != 0)
    2109             :             break;
    2110           0 :           return ParsedAttr::AT_Destructor;      // "gnu::destructor"
    2111             :         }
    2112             :         break;
    2113             :       case 'f':  // 1 string to match.
    2114           0 :         if (memcmp(Name.data()+6, "ormat_arg", 9) != 0)
    2115             :           break;
    2116           0 :         return ParsedAttr::AT_FormatArg;         // "gnu::format_arg"
    2117             :       case 'g':  // 1 string to match.
    2118           2 :         if (memcmp(Name.data()+6, "nu_inline", 9) != 0)
    2119             :           break;
    2120           2 :         return ParsedAttr::AT_GNUInline;         // "gnu::gnu_inline"
    2121             :       case 'n':  // 1 string to match.
    2122          11 :         if (memcmp(Name.data()+6, "ocf_check", 9) != 0)
    2123             :           break;
    2124          11 :         return ParsedAttr::AT_AnyX86NoCfCheck;   // "gnu::nocf_check"
    2125             :       case 's':  // 1 string to match.
    2126           0 :         if (memcmp(Name.data()+6, "hort_call", 9) != 0)
    2127             :           break;
    2128           0 :         return ParsedAttr::AT_MipsShortCall;     // "gnu::short_call"
    2129             :       case 'v':  // 1 string to match.
    2130           3 :         if (memcmp(Name.data()+6, "isibility", 9) != 0)
    2131             :           break;
    2132           3 :         return ParsedAttr::AT_Visibility;        // "gnu::visibility"
    2133             :       }
    2134             :       break;
    2135             :     }
    2136             :     break;
    2137        1641 :   case 16:       // 8 strings to match.
    2138             :     switch (Name[0]) {
    2139             :     default: break;
    2140             :     case 'c':    // 3 strings to match.
    2141           3 :       if (memcmp(Name.data()+1, "lang::", 6) != 0)
    2142             :         break;
    2143             :       switch (Name[7]) {
    2144             :       default: break;
    2145             :       case 'f':  // 1 string to match.
    2146           1 :         if (memcmp(Name.data()+8, "lag_enum", 8) != 0)
    2147             :           break;
    2148           1 :         return ParsedAttr::AT_FlagEnum;  // "clang::flag_enum"
    2149             :       case 's':  // 1 string to match.
    2150           2 :         if (memcmp(Name.data()+8, "wiftcall", 8) != 0)
    2151             :           break;
    2152           2 :         return ParsedAttr::AT_SwiftCall;         // "clang::swiftcall"
    2153             :       case 'v':  // 1 string to match.
    2154           0 :         if (memcmp(Name.data()+8, "ecreturn", 8) != 0)
    2155             :           break;
    2156           0 :         return ParsedAttr::AT_VecReturn;         // "clang::vecreturn"
    2157             :       }
    2158             :       break;
    2159             :     case 'g':    // 5 strings to match.
    2160           3 :       if (memcmp(Name.data()+1, "nu::", 4) != 0)
    2161             :         break;
    2162             :       switch (Name[5]) {
    2163             :       default: break;
    2164             :       case 'a':  // 1 string to match.
    2165           0 :         if (memcmp(Name.data()+6, "lloc_align", 10) != 0)
    2166             :           break;
    2167           0 :         return ParsedAttr::AT_AllocAlign;        // "gnu::alloc_align"
    2168             :       case 'c':  // 1 string to match.
    2169           0 :         if (memcmp(Name.data()+6, "onstructor", 10) != 0)
    2170             :           break;
    2171           0 :         return ParsedAttr::AT_Constructor;       // "gnu::constructor"
    2172             :       case 'n':  // 1 string to match.
    2173           0 :         if (memcmp(Name.data()+6, "omicromips", 10) != 0)
    2174             :           break;
    2175           0 :         return ParsedAttr::AT_NoMicroMips;       // "gnu::nomicromips"
    2176             :       case 'v':  // 1 string to match.
    2177           3 :         if (memcmp(Name.data()+6, "ector_size", 10) != 0)
    2178             :           break;
    2179           3 :         return ParsedAttr::AT_VectorSize;        // "gnu::vector_size"
    2180             :       case 'w':  // 1 string to match.
    2181           0 :         if (memcmp(Name.data()+6, "arn_unused", 10) != 0)
    2182             :           break;
    2183           0 :         return ParsedAttr::AT_WarnUnused;        // "gnu::warn_unused"
    2184             :       }
    2185             :       break;
    2186             :     }
    2187             :     break;
    2188             :   case 17:       // 5 strings to match.
    2189          42 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    2190             :       break;
    2191             :     switch (Name[7]) {
    2192             :     default: break;
    2193           0 :     case 'c':    // 3 strings to match.
    2194             :       switch (Name[8]) {
    2195             :       default: break;
    2196             :       case 'a':  // 1 string to match.
    2197           0 :         if (memcmp(Name.data()+9, "pability", 8) != 0)
    2198             :           break;
    2199           0 :         return ParsedAttr::AT_Capability;        // "clang::capability"
    2200           0 :       case 'o':  // 2 strings to match.
    2201           0 :         if (Name[9] != 'n')
    2202             :           break;
    2203             :         switch (Name[10]) {
    2204             :         default: break;
    2205             :         case 's':        // 1 string to match.
    2206           0 :           if (memcmp(Name.data()+11, "umable", 6) != 0)
    2207             :             break;
    2208           0 :           return ParsedAttr::AT_Consumable;      // "clang::consumable"
    2209             :         case 'v':        // 1 string to match.
    2210           0 :           if (memcmp(Name.data()+11, "ergent", 6) != 0)
    2211             :             break;
    2212           0 :           return ParsedAttr::AT_Convergent;      // "clang::convergent"
    2213             :         }
    2214             :         break;
    2215             :       }
    2216             :       break;
    2217             :     case 'n':    // 1 string to match.
    2218          42 :       if (memcmp(Name.data()+8, "o_destroy", 9) != 0)
    2219             :         break;
    2220          42 :       return ParsedAttr::AT_NoDestroy;   // "clang::no_destroy"
    2221             :     case 'v':    // 1 string to match.
    2222           0 :       if (memcmp(Name.data()+8, "ectorcall", 9) != 0)
    2223             :         break;
    2224           0 :       return ParsedAttr::AT_VectorCall;  // "clang::vectorcall"
    2225             :     }
    2226             :     break;
    2227         110 :   case 18:       // 13 strings to match.
    2228             :     switch (Name[0]) {
    2229             :     default: break;
    2230             :     case 'c':    // 10 strings to match.
    2231         108 :       if (memcmp(Name.data()+1, "lang::", 6) != 0)
    2232             :         break;
    2233             :       switch (Name[7]) {
    2234             :       default: break;
    2235             :       case 'c':  // 1 string to match.
    2236           0 :         if (memcmp(Name.data()+8, "f_consumed", 10) != 0)
    2237             :           break;
    2238           0 :         return ParsedAttr::AT_CFConsumed;        // "clang::cf_consumed"
    2239             :       case 'f':  // 1 string to match.
    2240          76 :         if (memcmp(Name.data()+8, "allthrough", 10) != 0)
    2241             :           break;
    2242          76 :         return ParsedAttr::AT_FallThrough;       // "clang::fallthrough"
    2243             :       case 'g':  // 1 string to match.
    2244           0 :         if (memcmp(Name.data()+8, "uarded_var", 10) != 0)
    2245             :           break;
    2246           0 :         return ParsedAttr::AT_GuardedVar;        // "clang::guarded_var"
    2247          28 :       case 'n':  // 3 strings to match.
    2248             :         switch (Name[8]) {
    2249             :         default: break;
    2250          28 :         case 'o':        // 2 strings to match.
    2251             :           switch (Name[9]) {
    2252             :           default: break;
    2253             :           case '_':      // 1 string to match.
    2254          24 :             if (memcmp(Name.data()+10, "sanitize", 8) != 0)
    2255             :               break;
    2256          24 :             return ParsedAttr::AT_NoSanitize;    // "clang::no_sanitize"
    2257             :           case 'd':      // 1 string to match.
    2258           4 :             if (memcmp(Name.data()+10, "uplicate", 8) != 0)
    2259             :               break;
    2260           4 :             return ParsedAttr::AT_NoDuplicate;   // "clang::noduplicate"
    2261             :           }
    2262             :           break;
    2263             :         case 's':        // 1 string to match.
    2264           0 :           if (memcmp(Name.data()+9, "_consumed", 9) != 0)
    2265             :             break;
    2266           0 :           return ParsedAttr::AT_NSConsumed;      // "clang::ns_consumed"
    2267             :         }
    2268             :         break;
    2269             :       case 'o':  // 1 string to match.
    2270           0 :         if (memcmp(Name.data()+8, "bjc_bridge", 10) != 0)
    2271             :           break;
    2272           0 :         return ParsedAttr::AT_ObjCBridge;        // "clang::objc_bridge"
    2273             :       case 't':  // 1 string to match.
    2274           2 :         if (memcmp(Name.data()+8, "rivial_abi", 10) != 0)
    2275             :           break;
    2276           2 :         return ParsedAttr::AT_TrivialABI;        // "clang::trivial_abi"
    2277             :       case 'u':  // 1 string to match.
    2278           2 :         if (memcmp(Name.data()+8, "navailable", 10) != 0)
    2279             :           break;
    2280           2 :         return ParsedAttr::AT_Unavailable;       // "clang::unavailable"
    2281             :       case 'w':  // 1 string to match.
    2282           0 :         if (memcmp(Name.data()+8, "eak_import", 10) != 0)
    2283             :           break;
    2284           0 :         return ParsedAttr::AT_WeakImport;        // "clang::weak_import"
    2285             :       }
    2286             :       break;
    2287             :     case 'g':    // 3 strings to match.
    2288           2 :       if (memcmp(Name.data()+1, "nu::", 4) != 0)
    2289             :         break;
    2290             :       switch (Name[5]) {
    2291             :       default: break;
    2292             :       case 'a':  // 1 string to match.
    2293           2 :         if (memcmp(Name.data()+6, "lways_inline", 12) != 0)
    2294             :           break;
    2295           2 :         return ParsedAttr::AT_AlwaysInline;      // "gnu::always_inline"
    2296             :       case 'i':  // 1 string to match.
    2297           0 :         if (memcmp(Name.data()+6, "nit_priority", 12) != 0)
    2298             :           break;
    2299           0 :         return ParsedAttr::AT_InitPriority;      // "gnu::init_priority"
    2300             :       case 'r':  // 1 string to match.
    2301           0 :         if (memcmp(Name.data()+6, "eturns_twice", 12) != 0)
    2302             :           break;
    2303           0 :         return ParsedAttr::AT_ReturnsTwice;      // "gnu::returns_twice"
    2304             :       }
    2305             :       break;
    2306             :     }
    2307             :     break;
    2308          81 :   case 19:       // 8 strings to match.
    2309             :     switch (Name[0]) {
    2310             :     default: break;
    2311             :     case 'c':    // 6 strings to match.
    2312          23 :       if (memcmp(Name.data()+1, "lang::", 6) != 0)
    2313             :         break;
    2314             :       switch (Name[7]) {
    2315             :       default: break;
    2316             :       case 'a':  // 1 string to match.
    2317          14 :         if (memcmp(Name.data()+8, "vailability", 11) != 0)
    2318             :           break;
    2319          14 :         return ParsedAttr::AT_Availability;      // "clang::availability"
    2320             :       case 'c':  // 2 strings to match.
    2321           5 :         if (memcmp(Name.data()+8, "pu_", 3) != 0)
    2322             :           break;
    2323             :         switch (Name[11]) {
    2324             :         default: break;
    2325             :         case 'd':        // 1 string to match.
    2326           0 :           if (memcmp(Name.data()+12, "ispatch", 7) != 0)
    2327             :             break;
    2328           0 :           return ParsedAttr::AT_CPUDispatch;     // "clang::cpu_dispatch"
    2329             :         case 's':        // 1 string to match.
    2330           5 :           if (memcmp(Name.data()+12, "pecific", 7) != 0)
    2331             :             break;
    2332           5 :           return ParsedAttr::AT_CPUSpecific;     // "clang::cpu_specific"
    2333             :         }
    2334             :         break;
    2335           2 :       case 'o':  // 2 strings to match.
    2336             :         switch (Name[8]) {
    2337             :         default: break;
    2338             :         case 'b':        // 1 string to match.
    2339           0 :           if (memcmp(Name.data()+9, "jc_boxable", 10) != 0)
    2340             :             break;
    2341           0 :           return ParsedAttr::AT_ObjCBoxable;     // "clang::objc_boxable"
    2342             :         case 'v':        // 1 string to match.
    2343           2 :           if (memcmp(Name.data()+9, "erloadable", 10) != 0)
    2344             :             break;
    2345           2 :           return ParsedAttr::AT_Overloadable;    // "clang::overloadable"
    2346             :         }
    2347             :         break;
    2348             :       case 'p':  // 1 string to match.
    2349           0 :         if (memcmp(Name.data()+8, "reserve_all", 11) != 0)
    2350             :           break;
    2351           0 :         return ParsedAttr::AT_PreserveAll;       // "clang::preserve_all"
    2352             :       }
    2353             :       break;
    2354             :     case 'g':    // 2 strings to match.
    2355          25 :       if (memcmp(Name.data()+1, "nu::", 4) != 0)
    2356             :         break;
    2357             :       switch (Name[5]) {
    2358             :       default: break;
    2359             :       case 'a':  // 1 string to match.
    2360           0 :         if (memcmp(Name.data()+6, "ssume_aligned", 13) != 0)
    2361             :           break;
    2362           0 :         return ParsedAttr::AT_AssumeAligned;     // "gnu::assume_aligned"
    2363             :       case 'n':  // 1 string to match.
    2364          25 :         if (memcmp(Name.data()+6, "o_split_stack", 13) != 0)
    2365             :           break;
    2366          25 :         return ParsedAttr::AT_NoSplitStack;      // "gnu::no_split_stack"
    2367             :       }
    2368             :       break;
    2369             :     }
    2370             :     break;
    2371         209 :   case 20:       // 10 strings to match.
    2372             :     switch (Name[0]) {
    2373             :     default: break;
    2374             :     case ':':    // 1 string to match.
    2375         103 :       if (memcmp(Name.data()+1, ":carries_dependency", 19) != 0)
    2376             :         break;
    2377         101 :       return ParsedAttr::AT_CarriesDependency;   // "::carries_dependency"
    2378             :     case 'c':    // 8 strings to match.
    2379         106 :       if (memcmp(Name.data()+1, "lang::", 6) != 0)
    2380             :         break;
    2381             :       switch (Name[7]) {
    2382             :       default: break;
    2383             :       case 'a':  // 1 string to match.
    2384           2 :         if (memcmp(Name.data()+8, "ddress_space", 12) != 0)
    2385             :           break;
    2386           2 :         return ParsedAttr::AT_AddressSpace;      // "clang::address_space"
    2387             :       case 'c':  // 1 string to match.
    2388           0 :         if (memcmp(Name.data()+8, "allable_when", 12) != 0)
    2389             :           break;
    2390           0 :         return ParsedAttr::AT_CallableWhen;      // "clang::callable_when"
    2391             :       case 'l':  // 1 string to match.
    2392          44 :         if (memcmp(Name.data()+8, "ifetimebound", 12) != 0)
    2393             :           break;
    2394          44 :         return ParsedAttr::AT_LifetimeBound;     // "clang::lifetimebound"
    2395             :       case 'p':  // 1 string to match.
    2396           0 :         if (memcmp(Name.data()+8, "reserve_most", 12) != 0)
    2397             :           break;
    2398           0 :         return ParsedAttr::AT_PreserveMost;      // "clang::preserve_most"
    2399             :       case 'r':  // 1 string to match.
    2400          18 :         if (memcmp(Name.data()+8, "einitializes", 12) != 0)
    2401             :           break;
    2402          18 :         return ParsedAttr::AT_Reinitializes;     // "clang::reinitializes"
    2403           2 :       case 's':  // 2 strings to match.
    2404             :         switch (Name[8]) {
    2405             :         default: break;
    2406             :         case 'e':        // 1 string to match.
    2407           0 :           if (memcmp(Name.data()+9, "t_typestate", 11) != 0)
    2408             :             break;
    2409           0 :           return ParsedAttr::AT_SetTypestate;    // "clang::set_typestate"
    2410             :         case 'w':        // 1 string to match.
    2411           2 :           if (memcmp(Name.data()+9, "ift_context", 11) != 0)
    2412             :             break;
    2413           2 :           return ParsedAttr::AT_SwiftContext;    // "clang::swift_context"
    2414             :         }
    2415             :         break;
    2416             :       case 'x':  // 1 string to match.
    2417          40 :         if (memcmp(Name.data()+8, "ray_log_args", 12) != 0)
    2418             :           break;
    2419          40 :         return ParsedAttr::AT_XRayLogArgs;       // "clang::xray_log_args"
    2420             :       }
    2421             :       break;
    2422             :     case 'g':    // 1 string to match.
    2423           0 :       if (memcmp(Name.data()+1, "nu::returns_nonnull", 19) != 0)
    2424             :         break;
    2425           0 :       return ParsedAttr::AT_ReturnsNonNull;      // "gnu::returns_nonnull"
    2426             :     }
    2427             :     break;
    2428             :   case 21:       // 6 strings to match.
    2429          54 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    2430             :       break;
    2431             :     switch (Name[7]) {
    2432             :     default: break;
    2433             :     case 'a':    // 1 string to match.
    2434          48 :       if (memcmp(Name.data()+8, "lways_destroy", 13) != 0)
    2435             :         break;
    2436          48 :       return ParsedAttr::AT_AlwaysDestroy;       // "clang::always_destroy"
    2437             :     case 'i':    // 1 string to match.
    2438           0 :       if (memcmp(Name.data()+8, "ntel_ocl_bicc", 13) != 0)
    2439             :         break;
    2440           0 :       return ParsedAttr::AT_IntelOclBicc;        // "clang::intel_ocl_bicc"
    2441             :     case 'o':    // 2 strings to match.
    2442           2 :       if (memcmp(Name.data()+8, "bjc_", 4) != 0)
    2443             :         break;
    2444             :       switch (Name[12]) {
    2445             :       default: break;
    2446             :       case 'e':  // 1 string to match.
    2447           2 :         if (memcmp(Name.data()+13, "xception", 8) != 0)
    2448             :           break;
    2449           2 :         return ParsedAttr::AT_ObjCException;     // "clang::objc_exception"
    2450             :       case 'o':  // 1 string to match.
    2451           0 :         if (memcmp(Name.data()+13, "wnership", 8) != 0)
    2452             :           break;
    2453           0 :         return ParsedAttr::AT_ObjCOwnership;     // "clang::objc_ownership"
    2454             :       }
    2455             :       break;
    2456             :     case 'p':    // 1 string to match.
    2457           0 :       if (memcmp(Name.data()+8, "t_guarded_var", 13) != 0)
    2458             :         break;
    2459           0 :       return ParsedAttr::AT_PtGuardedVar;        // "clang::pt_guarded_var"
    2460             :     case 't':    // 1 string to match.
    2461           0 :       if (memcmp(Name.data()+8, "est_typestate", 13) != 0)
    2462             :         break;
    2463           0 :       return ParsedAttr::AT_TestTypestate;       // "clang::test_typestate"
    2464             :     }
    2465             :     break;
    2466          10 :   case 22:       // 11 strings to match.
    2467             :     switch (Name[0]) {
    2468             :     default: break;
    2469             :     case 'c':    // 10 strings to match.
    2470          10 :       if (memcmp(Name.data()+1, "lang::", 6) != 0)
    2471             :         break;
    2472             :       switch (Name[7]) {
    2473             :       default: break;
    2474             :       case 'a':  // 2 strings to match.
    2475           0 :         if (memcmp(Name.data()+8, "mdgpu_num_", 10) != 0)
    2476             :           break;
    2477             :         switch (Name[18]) {
    2478             :         default: break;
    2479             :         case 's':        // 1 string to match.
    2480           0 :           if (memcmp(Name.data()+19, "gpr", 3) != 0)
    2481             :             break;
    2482           0 :           return ParsedAttr::AT_AMDGPUNumSGPR;   // "clang::amdgpu_num_sgpr"
    2483             :         case 'v':        // 1 string to match.
    2484           0 :           if (memcmp(Name.data()+19, "gpr", 3) != 0)
    2485             :             break;
    2486           0 :           return ParsedAttr::AT_AMDGPUNumVGPR;   // "clang::amdgpu_num_vgpr"
    2487             :         }
    2488             :         break;
    2489             :       case 'n':  // 1 string to match.
    2490          10 :         if (memcmp(Name.data()+8, "ot_tail_called", 14) != 0)
    2491             :           break;
    2492          10 :         return ParsedAttr::AT_NotTailCalled;     // "clang::not_tail_called"
    2493           0 :       case 'o':  // 3 strings to match.
    2494             :         switch (Name[8]) {
    2495             :         default: break;
    2496             :         case 'b':        // 1 string to match.
    2497           0 :           if (memcmp(Name.data()+9, "jc_root_class", 13) != 0)
    2498             :             break;
    2499           0 :           return ParsedAttr::AT_ObjCRootClass;   // "clang::objc_root_class"
    2500             :         case 'w':        // 2 strings to match.
    2501           0 :           if (memcmp(Name.data()+9, "nership_", 8) != 0)
    2502             :             break;
    2503             :           switch (Name[17]) {
    2504             :           default: break;
    2505             :           case 'h':      // 1 string to match.
    2506           0 :             if (memcmp(Name.data()+18, "olds", 4) != 0)
    2507             :               break;
    2508           0 :             return ParsedAttr::AT_Ownership;     // "clang::ownership_holds"
    2509             :           case 't':      // 1 string to match.
    2510           0 :             if (memcmp(Name.data()+18, "akes", 4) != 0)
    2511             :               break;
    2512           0 :             return ParsedAttr::AT_Ownership;     // "clang::ownership_takes"
    2513             :           }
    2514             :           break;
    2515             :         }
    2516             :         break;
    2517             :       case 'p':  // 1 string to match.
    2518           0 :         if (memcmp(Name.data()+8, "aram_typestate", 14) != 0)
    2519             :           break;
    2520           0 :         return ParsedAttr::AT_ParamTypestate;    // "clang::param_typestate"
    2521             :       case 's':  // 1 string to match.
    2522           0 :         if (memcmp(Name.data()+8, "coped_lockable", 14) != 0)
    2523             :           break;
    2524           0 :         return ParsedAttr::AT_ScopedLockable;    // "clang::scoped_lockable"
    2525             :       case 't':  // 1 string to match.
    2526           0 :         if (memcmp(Name.data()+8, "ype_visibility", 14) != 0)
    2527             :           break;
    2528           0 :         return ParsedAttr::AT_TypeVisibility;    // "clang::type_visibility"
    2529             :       case 'u':  // 1 string to match.
    2530           0 :         if (memcmp(Name.data()+8, "nlock_function", 14) != 0)
    2531             :           break;
    2532           0 :         return ParsedAttr::AT_ReleaseCapability;         // "clang::unlock_function"
    2533             :       }
    2534             :       break;
    2535             :     case 'g':    // 1 string to match.
    2536           0 :       if (memcmp(Name.data()+1, "nu::transparent_union", 21) != 0)
    2537             :         break;
    2538           0 :       return ParsedAttr::AT_TransparentUnion;    // "gnu::transparent_union"
    2539             :     }
    2540             :     break;
    2541          23 :   case 23:       // 8 strings to match.
    2542             :     switch (Name[0]) {
    2543             :     default: break;
    2544             :     case 'c':    // 6 strings to match.
    2545          19 :       if (memcmp(Name.data()+1, "lang::", 6) != 0)
    2546             :         break;
    2547             :       switch (Name[7]) {
    2548             :       default: break;
    2549             :       case 'i':  // 1 string to match.
    2550          13 :         if (memcmp(Name.data()+8, "nternal_linkage", 15) != 0)
    2551             :           break;
    2552          13 :         return ParsedAttr::AT_InternalLinkage;   // "clang::internal_linkage"
    2553             :       case 'm':  // 1 string to match.
    2554           0 :         if (memcmp(Name.data()+8, "in_vector_width", 15) != 0)
    2555             :           break;
    2556           0 :         return ParsedAttr::AT_MinVectorWidth;    // "clang::min_vector_width"
    2557           6 :       case 'n':  // 2 strings to match.
    2558             :         switch (Name[8]) {
    2559             :         default: break;
    2560             :         case 'e':        // 1 string to match.
    2561           0 :           if (memcmp(Name.data()+9, "on_vector_type", 14) != 0)
    2562             :             break;
    2563           0 :           return ParsedAttr::AT_NeonVectorType;  // "clang::neon_vector_type"
    2564             :         case 's':        // 1 string to match.
    2565           6 :           if (memcmp(Name.data()+9, "_consumes_self", 14) != 0)
    2566             :             break;
    2567           6 :           return ParsedAttr::AT_NSConsumesSelf;  // "clang::ns_consumes_self"
    2568             :         }
    2569             :         break;
    2570             :       case 'p':  // 1 string to match.
    2571           0 :         if (memcmp(Name.data()+8, "ass_object_size", 15) != 0)
    2572             :           break;
    2573           0 :         return ParsedAttr::AT_PassObjectSize;    // "clang::pass_object_size"
    2574             :       case 'r':  // 1 string to match.
    2575           0 :         if (memcmp(Name.data()+8, "eturn_typestate", 15) != 0)
    2576             :           break;
    2577           0 :         return ParsedAttr::AT_ReturnTypestate;   // "clang::return_typestate"
    2578             :       }
    2579             :       break;
    2580             :     case 'g':    // 2 strings to match.
    2581           2 :       if (memcmp(Name.data()+1, "nu::", 4) != 0)
    2582             :         break;
    2583             :       switch (Name[5]) {
    2584             :       default: break;
    2585             :       case 'n':  // 1 string to match.
    2586           0 :         if (memcmp(Name.data()+6, "o_sanitize_thread", 17) != 0)
    2587             :           break;
    2588           0 :         return ParsedAttr::AT_NoSanitizeSpecific;        // "gnu::no_sanitize_thread"
    2589             :       case 'w':  // 1 string to match.
    2590           2 :         if (memcmp(Name.data()+6, "arn_unused_result", 17) != 0)
    2591             :           break;
    2592           2 :         return ParsedAttr::AT_WarnUnusedResult;  // "gnu::warn_unused_result"
    2593             :       }
    2594             :       break;
    2595             :     }
    2596             :     break;
    2597          28 :   case 24:       // 5 strings to match.
    2598             :     switch (Name[0]) {
    2599             :     default: break;
    2600             :     case 'c':    // 4 strings to match.
    2601           8 :       if (memcmp(Name.data()+1, "lang::", 6) != 0)
    2602             :         break;
    2603             :       switch (Name[7]) {
    2604             :       default: break;
    2605             :       case 'a':  // 1 string to match.
    2606           0 :         if (memcmp(Name.data()+8, "ssert_capability", 16) != 0)
    2607             :           break;
    2608           0 :         return ParsedAttr::AT_AssertCapability;  // "clang::assert_capability"
    2609           8 :       case 'o':  // 2 strings to match.
    2610             :         switch (Name[8]) {
    2611             :         default: break;
    2612             :         case 'b':        // 1 string to match.
    2613           4 :           if (memcmp(Name.data()+9, "jc_runtime_name", 15) != 0)
    2614             :             break;
    2615           4 :           return ParsedAttr::AT_ObjCRuntimeName;         // "clang::objc_runtime_name"
    2616             :         case 'w':        // 1 string to match.
    2617           4 :           if (memcmp(Name.data()+9, "nership_returns", 15) != 0)
    2618             :             break;
    2619           4 :           return ParsedAttr::AT_Ownership;       // "clang::ownership_returns"
    2620             :         }
    2621             :         break;
    2622             :       case 's':  // 1 string to match.
    2623           0 :         if (memcmp(Name.data()+8, "hared_capability", 16) != 0)
    2624             :           break;
    2625           0 :         return ParsedAttr::AT_Capability;        // "clang::shared_capability"
    2626             :       }
    2627             :       break;
    2628             :     case 'g':    // 1 string to match.
    2629          18 :       if (memcmp(Name.data()+1, "nu::no_sanitize_address", 23) != 0)
    2630             :         break;
    2631          18 :       return ParsedAttr::AT_NoSanitizeSpecific;  // "gnu::no_sanitize_address"
    2632             :     }
    2633             :     break;
    2634             :   case 25:       // 10 strings to match.
    2635          39 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    2636             :       break;
    2637             :     switch (Name[7]) {
    2638             :     default: break;
    2639             :     case 'a':    // 1 string to match.
    2640           0 :       if (memcmp(Name.data()+8, "cquire_capability", 17) != 0)
    2641             :         break;
    2642           0 :       return ParsedAttr::AT_AcquireCapability;   // "clang::acquire_capability"
    2643             :     case 'd':    // 1 string to match.
    2644          18 :       if (memcmp(Name.data()+8, "isable_tail_calls", 17) != 0)
    2645             :         break;
    2646          18 :       return ParsedAttr::AT_DisableTailCalls;    // "clang::disable_tail_calls"
    2647             :     case 'e':    // 1 string to match.
    2648           7 :       if (memcmp(Name.data()+8, "num_extensibility", 17) != 0)
    2649             :         break;
    2650           7 :       return ParsedAttr::AT_EnumExtensibility;   // "clang::enum_extensibility"
    2651             :     case 'i':    // 1 string to match.
    2652           0 :       if (memcmp(Name.data()+8, "boutletcollection", 17) != 0)
    2653             :         break;
    2654           0 :       return ParsedAttr::AT_IBOutletCollection;  // "clang::iboutletcollection"
    2655             :     case 'n':    // 2 strings to match.
    2656           0 :       if (memcmp(Name.data()+8, "o_s", 3) != 0)
    2657             :         break;
    2658             :       switch (Name[11]) {
    2659             :       default: break;
    2660             :       case 'a':  // 1 string to match.
    2661           0 :         if (memcmp(Name.data()+12, "nitize_memory", 13) != 0)
    2662             :           break;
    2663           0 :         return ParsedAttr::AT_NoSanitizeSpecific;        // "clang::no_sanitize_memory"
    2664             :       case 't':  // 1 string to match.
    2665           0 :         if (memcmp(Name.data()+12, "ack_protector", 13) != 0)
    2666             :           break;
    2667           0 :         return ParsedAttr::AT_NoStackProtector;  // "clang::no_stack_protector"
    2668             :       }
    2669             :       break;
    2670             :     case 'o':    // 1 string to match.
    2671           0 :       if (memcmp(Name.data()+8, "bjc_method_family", 17) != 0)
    2672             :         break;
    2673           0 :       return ParsedAttr::AT_ObjCMethodFamily;    // "clang::objc_method_family"
    2674             :     case 'r':    // 1 string to match.
    2675           0 :       if (memcmp(Name.data()+8, "elease_capability", 17) != 0)
    2676             :         break;
    2677           0 :       return ParsedAttr::AT_ReleaseCapability;   // "clang::release_capability"
    2678             :     case 's':    // 1 string to match.
    2679           0 :       if (memcmp(Name.data()+8, "wift_error_result", 17) != 0)
    2680             :         break;
    2681           0 :       return ParsedAttr::AT_SwiftErrorResult;    // "clang::swift_error_result"
    2682             :     case 'w':    // 1 string to match.
    2683          14 :       if (memcmp(Name.data()+8, "arn_unused_result", 17) != 0)
    2684             :         break;
    2685          14 :       return ParsedAttr::AT_WarnUnusedResult;    // "clang::warn_unused_result"
    2686             :     }
    2687             :     break;
    2688             :   case 26:       // 9 strings to match.
    2689           6 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    2690             :       break;
    2691             :     switch (Name[7]) {
    2692             :     default: break;
    2693             :     case 'a':    // 1 string to match.
    2694           0 :       if (memcmp(Name.data()+8, "mdgpu_waves_per_eu", 18) != 0)
    2695             :         break;
    2696           0 :       return ParsedAttr::AT_AMDGPUWavesPerEU;    // "clang::amdgpu_waves_per_eu"
    2697             :     case 'c':    // 3 strings to match.
    2698           0 :       if (memcmp(Name.data()+8, "f_", 2) != 0)
    2699             :         break;
    2700             :       switch (Name[10]) {
    2701             :       default: break;
    2702             :       case 'a':  // 1 string to match.
    2703           0 :         if (memcmp(Name.data()+11, "udited_transfer", 15) != 0)
    2704             :           break;
    2705           0 :         return ParsedAttr::AT_CFAuditedTransfer;         // "clang::cf_audited_transfer"
    2706             :       case 'r':  // 1 string to match.
    2707           0 :         if (memcmp(Name.data()+11, "eturns_retained", 15) != 0)
    2708             :           break;
    2709           0 :         return ParsedAttr::AT_CFReturnsRetained;         // "clang::cf_returns_retained"
    2710             :       case 'u':  // 1 string to match.
    2711           0 :         if (memcmp(Name.data()+11, "nknown_transfer", 15) != 0)
    2712             :           break;
    2713           0 :         return ParsedAttr::AT_CFUnknownTransfer;         // "clang::cf_unknown_transfer"
    2714             :       }
    2715             :       break;
    2716             :     case 'n':    // 1 string to match.
    2717           0 :       if (memcmp(Name.data()+8, "s_returns_retained", 18) != 0)
    2718             :         break;
    2719           0 :       return ParsedAttr::AT_NSReturnsRetained;   // "clang::ns_returns_retained"
    2720             :     case 'o':    // 3 strings to match.
    2721           6 :       if (memcmp(Name.data()+8, "bjc_", 4) != 0)
    2722             :         break;
    2723             :       switch (Name[12]) {
    2724             :       default: break;
    2725             :       case 'b':  // 2 strings to match.
    2726           6 :         if (memcmp(Name.data()+13, "ridge_", 6) != 0)
    2727             :           break;
    2728             :         switch (Name[19]) {
    2729             :         default: break;
    2730             :         case 'm':        // 1 string to match.
    2731           0 :           if (memcmp(Name.data()+20, "utable", 6) != 0)
    2732             :             break;
    2733           0 :           return ParsedAttr::AT_ObjCBridgeMutable;       // "clang::objc_bridge_mutable"
    2734             :         case 'r':        // 1 string to match.
    2735           6 :           if (memcmp(Name.data()+20, "elated", 6) != 0)
    2736             :             break;
    2737           6 :           return ParsedAttr::AT_ObjCBridgeRelated;       // "clang::objc_bridge_related"
    2738             :         }
    2739             :         break;
    2740             :       case 'r':  // 1 string to match.
    2741           0 :         if (memcmp(Name.data()+13, "equires_super", 13) != 0)
    2742             :           break;
    2743           0 :         return ParsedAttr::AT_ObjCRequiresSuper;         // "clang::objc_requires_super"
    2744             :       }
    2745             :       break;
    2746             :     case 'r':    // 1 string to match.
    2747           0 :       if (memcmp(Name.data()+8, "equires_capability", 18) != 0)
    2748             :         break;
    2749           0 :       return ParsedAttr::AT_RequiresCapability;  // "clang::requires_capability"
    2750             :     }
    2751             :     break;
    2752           6 :   case 27:       // 3 strings to match.
    2753             :     switch (Name[0]) {
    2754             :     default: break;
    2755             :     case 'c':    // 2 strings to match.
    2756           0 :       if (memcmp(Name.data()+1, "lang::", 6) != 0)
    2757             :         break;
    2758             :       switch (Name[7]) {
    2759             :       default: break;
    2760             :       case 'n':  // 1 string to match.
    2761           0 :         if (memcmp(Name.data()+8, "eon_polyvector_type", 19) != 0)
    2762             :           break;
    2763           0 :         return ParsedAttr::AT_NeonPolyVectorType;        // "clang::neon_polyvector_type"
    2764             :       case 'o':  // 1 string to match.
    2765           0 :         if (memcmp(Name.data()+8, "bjc_runtime_visible", 19) != 0)
    2766             :           break;
    2767           0 :         return ParsedAttr::AT_ObjCRuntimeVisible;        // "clang::objc_runtime_visible"
    2768             :       }
    2769             :       break;
    2770             :     case 'g':    // 1 string to match.
    2771           0 :       if (memcmp(Name.data()+1, "nu::no_instrument_function", 26) != 0)
    2772             :         break;
    2773           0 :       return ParsedAttr::AT_NoInstrumentFunction;        // "gnu::no_instrument_function"
    2774             :     }
    2775             :     break;
    2776          99 :   case 28:       // 8 strings to match.
    2777             :     switch (Name[0]) {
    2778             :     default: break;
    2779             :     case 'c':    // 7 strings to match.
    2780          99 :       if (memcmp(Name.data()+1, "lang::", 6) != 0)
    2781             :         break;
    2782             :       switch (Name[7]) {
    2783             :       default: break;
    2784             :       case 'l':  // 1 string to match.
    2785          26 :         if (memcmp(Name.data()+8, "to_visibility_public", 20) != 0)
    2786             :           break;
    2787          26 :         return ParsedAttr::AT_LTOVisibilityPublic;       // "clang::lto_visibility_public"
    2788             :       case 'o':  // 1 string to match.
    2789           0 :         if (memcmp(Name.data()+8, "bjc_precise_lifetime", 20) != 0)
    2790             :           break;
    2791           0 :         return ParsedAttr::AT_ObjCPreciseLifetime;       // "clang::objc_precise_lifetime"
    2792             :       case 'p':  // 1 string to match.
    2793          15 :         if (memcmp(Name.data()+8, "ointer_with_type_tag", 20) != 0)
    2794             :           break;
    2795          15 :         return ParsedAttr::AT_ArgumentWithTypeTag;       // "clang::pointer_with_type_tag"
    2796           0 :       case 's':  // 2 strings to match.
    2797             :         switch (Name[8]) {
    2798             :         default: break;
    2799             :         case 'h':        // 1 string to match.
    2800           0 :           if (memcmp(Name.data()+9, "ared_locks_required", 19) != 0)
    2801             :             break;
    2802           0 :           return ParsedAttr::AT_RequiresCapability;      // "clang::shared_locks_required"
    2803             :         case 'w':        // 1 string to match.
    2804           0 :           if (memcmp(Name.data()+9, "ift_indirect_result", 19) != 0)
    2805             :             break;
    2806           0 :           return ParsedAttr::AT_SwiftIndirectResult;     // "clang::swift_indirect_result"
    2807             :         }
    2808             :         break;
    2809             :       case 't':  // 1 string to match.
    2810          14 :         if (memcmp(Name.data()+8, "ype_tag_for_datatype", 20) != 0)
    2811             :           break;
    2812          14 :         return ParsedAttr::AT_TypeTagForDatatype;        // "clang::type_tag_for_datatype"
    2813             :       case 'x':  // 1 string to match.
    2814          44 :         if (memcmp(Name.data()+8, "ray_never_instrument", 20) != 0)
    2815             :           break;
    2816          44 :         return ParsedAttr::AT_XRayInstrument;    // "clang::xray_never_instrument"
    2817             :       }
    2818             :       break;
    2819             :     case 'g':    // 1 string to match.
    2820           0 :       if (memcmp(Name.data()+1, "nu::force_align_arg_pointer", 27) != 0)
    2821             :         break;
    2822           0 :       return ParsedAttr::AT_X86ForceAlignArgPointer;     // "gnu::force_align_arg_pointer"
    2823             :     }
    2824             :     break;
    2825             :   case 29:       // 5 strings to match.
    2826          86 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    2827             :       break;
    2828             :     switch (Name[7]) {
    2829             :     default: break;
    2830             :     case 'a':    // 1 string to match.
    2831           0 :       if (memcmp(Name.data()+8, "rgument_with_type_tag", 21) != 0)
    2832             :         break;
    2833           0 :       return ParsedAttr::AT_ArgumentWithTypeTag;         // "clang::argument_with_type_tag"
    2834             :     case 'e':    // 1 string to match.
    2835          12 :       if (memcmp(Name.data()+8, "xternal_source_symbol", 21) != 0)
    2836             :         break;
    2837          12 :       return ParsedAttr::AT_ExternalSourceSymbol;        // "clang::external_source_symbol"
    2838             :     case 'o':    // 1 string to match.
    2839           0 :       if (memcmp(Name.data()+8, "bjc_independent_class", 21) != 0)
    2840             :         break;
    2841           0 :       return ParsedAttr::AT_ObjCIndependentClass;        // "clang::objc_independent_class"
    2842             :     case 't':    // 1 string to match.
    2843           0 :       if (memcmp(Name.data()+8, "ry_acquire_capability", 21) != 0)
    2844             :         break;
    2845           0 :       return ParsedAttr::AT_TryAcquireCapability;        // "clang::try_acquire_capability"
    2846             :     case 'x':    // 1 string to match.
    2847          74 :       if (memcmp(Name.data()+8, "ray_always_instrument", 21) != 0)
    2848             :         break;
    2849          74 :       return ParsedAttr::AT_XRayInstrument;      // "clang::xray_always_instrument"
    2850             :     }
    2851             :     break;
    2852           4 :   case 30:       // 4 strings to match.
    2853             :     switch (Name[0]) {
    2854             :     default: break;
    2855             :     case 'c':    // 3 strings to match.
    2856           0 :       if (memcmp(Name.data()+1, "lang::", 6) != 0)
    2857             :         break;
    2858             :       switch (Name[7]) {
    2859             :       default: break;
    2860             :       case 'c':  // 1 string to match.
    2861           0 :         if (memcmp(Name.data()+8, "f_returns_not_retained", 22) != 0)
    2862             :           break;
    2863           0 :         return ParsedAttr::AT_CFReturnsNotRetained;      // "clang::cf_returns_not_retained"
    2864             :       case 'n':  // 2 strings to match.
    2865           0 :         if (memcmp(Name.data()+8, "s_returns_", 10) != 0)
    2866             :           break;
    2867             :         switch (Name[18]) {
    2868             :         default: break;
    2869             :         case 'a':        // 1 string to match.
    2870           0 :           if (memcmp(Name.data()+19, "utoreleased", 11) != 0)
    2871             :             break;
    2872           0 :           return ParsedAttr::AT_NSReturnsAutoreleased;   // "clang::ns_returns_autoreleased"
    2873             :         case 'n':        // 1 string to match.
    2874           0 :           if (memcmp(Name.data()+19, "ot_retained", 11) != 0)
    2875             :             break;
    2876           0 :           return ParsedAttr::AT_NSReturnsNotRetained;    // "clang::ns_returns_not_retained"
    2877             :         }
    2878             :         break;
    2879             :       }
    2880             :       break;
    2881             :     case 'g':    // 1 string to match.
    2882           4 :       if (memcmp(Name.data()+1, "nu::no_caller_saved_registers", 29) != 0)
    2883             :         break;
    2884           4 :       return ParsedAttr::AT_AnyX86NoCallerSavedRegisters;        // "gnu::no_caller_saved_registers"
    2885             :     }
    2886             :     break;
    2887           2 :   case 31:       // 3 strings to match.
    2888             :     switch (Name[0]) {
    2889             :     default: break;
    2890             :     case 'c':    // 2 strings to match.
    2891           0 :       if (memcmp(Name.data()+1, "lang::", 6) != 0)
    2892             :         break;
    2893             :       switch (Name[7]) {
    2894             :       default: break;
    2895             :       case 'a':  // 1 string to match.
    2896           0 :         if (memcmp(Name.data()+8, "ssert_shared_capability", 23) != 0)
    2897             :           break;
    2898           0 :         return ParsedAttr::AT_AssertCapability;  // "clang::assert_shared_capability"
    2899             :       case 'e':  // 1 string to match.
    2900           0 :         if (memcmp(Name.data()+8, "xclusive_locks_required", 23) != 0)
    2901             :           break;
    2902           0 :         return ParsedAttr::AT_RequiresCapability;        // "clang::exclusive_locks_required"
    2903             :       }
    2904             :       break;
    2905             :     case 'g':    // 1 string to match.
    2906           2 :       if (memcmp(Name.data()+1, "nu::no_address_safety_analysis", 30) != 0)
    2907             :         break;
    2908           2 :       return ParsedAttr::AT_NoSanitizeSpecific;  // "gnu::no_address_safety_analysis"
    2909             :     }
    2910             :     break;
    2911             :   case 32:       // 3 strings to match.
    2912           0 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    2913             :       break;
    2914             :     switch (Name[7]) {
    2915             :     default: break;
    2916             :     case 'a':    // 1 string to match.
    2917           0 :       if (memcmp(Name.data()+8, "cquire_shared_capability", 24) != 0)
    2918             :         break;
    2919           0 :       return ParsedAttr::AT_AcquireCapability;   // "clang::acquire_shared_capability"
    2920             :     case 'n':    // 1 string to match.
    2921           0 :       if (memcmp(Name.data()+8, "o_thread_safety_analysis", 24) != 0)
    2922             :         break;
    2923           0 :       return ParsedAttr::AT_NoThreadSafetyAnalysis;      // "clang::no_thread_safety_analysis"
    2924             :     case 'r':    // 1 string to match.
    2925           0 :       if (memcmp(Name.data()+8, "elease_shared_capability", 24) != 0)
    2926             :         break;
    2927           0 :       return ParsedAttr::AT_ReleaseCapability;   // "clang::release_shared_capability"
    2928             :     }
    2929             :     break;
    2930             :   case 33:       // 4 strings to match.
    2931           2 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    2932             :       break;
    2933             :     switch (Name[7]) {
    2934             :     default: break;
    2935             :     case 'c':    // 1 string to match.
    2936           0 :       if (memcmp(Name.data()+8, "onsumable_auto_cast_state", 25) != 0)
    2937             :         break;
    2938           0 :       return ParsedAttr::AT_ConsumableAutoCast;  // "clang::consumable_auto_cast_state"
    2939             :     case 'o':    // 1 string to match.
    2940           2 :       if (memcmp(Name.data()+8, "bjc_returns_inner_pointer", 25) != 0)
    2941             :         break;
    2942           2 :       return ParsedAttr::AT_ObjCReturnsInnerPointer;     // "clang::objc_returns_inner_pointer"
    2943           0 :     case 'r':    // 2 strings to match.
    2944           0 :       if (Name[8] != 'e')
    2945             :         break;
    2946             :       switch (Name[9]) {
    2947             :       default: break;
    2948             :       case 'l':  // 1 string to match.
    2949           0 :         if (memcmp(Name.data()+10, "ease_generic_capability", 23) != 0)
    2950             :           break;
    2951           0 :         return ParsedAttr::AT_ReleaseCapability;         // "clang::release_generic_capability"
    2952             :       case 'q':  // 1 string to match.
    2953           0 :         if (memcmp(Name.data()+10, "uires_shared_capability", 23) != 0)
    2954             :           break;
    2955           0 :         return ParsedAttr::AT_RequiresCapability;        // "clang::requires_shared_capability"
    2956             :       }
    2957             :       break;
    2958             :     }
    2959             :     break;
    2960             :   case 34:       // 3 strings to match.
    2961           2 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    2962             :       break;
    2963             :     switch (Name[7]) {
    2964             :     default: break;
    2965             :     case 'a':    // 1 string to match.
    2966           0 :       if (memcmp(Name.data()+8, "mdgpu_flat_work_group_size", 26) != 0)
    2967             :         break;
    2968           0 :       return ParsedAttr::AT_AMDGPUFlatWorkGroupSize;     // "clang::amdgpu_flat_work_group_size"
    2969             :     case 'o':    // 2 strings to match.
    2970           0 :       if (memcmp(Name.data()+8, "bjc_", 4) != 0)
    2971             :         break;
    2972             :       switch (Name[12]) {
    2973             :       default: break;
    2974             :       case 'd':  // 1 string to match.
    2975           0 :         if (memcmp(Name.data()+13, "esignated_initializer", 21) != 0)
    2976             :           break;
    2977           0 :         return ParsedAttr::AT_ObjCDesignatedInitializer;         // "clang::objc_designated_initializer"
    2978             :       case 's':  // 1 string to match.
    2979           0 :         if (memcmp(Name.data()+13, "ubclassing_restricted", 21) != 0)
    2980             :           break;
    2981           0 :         return ParsedAttr::AT_ObjCSubclassingRestricted;         // "clang::objc_subclassing_restricted"
    2982             :       }
    2983             :       break;
    2984             :     }
    2985             :     break;
    2986             :   case 35:       // 1 string to match.
    2987           0 :     if (memcmp(Name.data()+0, "clang::consumable_set_state_on_read", 35) != 0)
    2988             :       break;
    2989           0 :     return ParsedAttr::AT_ConsumableSetOnRead;   // "clang::consumable_set_state_on_read"
    2990             :   case 36:       // 1 string to match.
    2991           0 :     if (memcmp(Name.data()+0, "clang::try_acquire_shared_capability", 36) != 0)
    2992             :       break;
    2993           0 :     return ParsedAttr::AT_TryAcquireCapability;  // "clang::try_acquire_shared_capability"
    2994             :   case 38:       // 1 string to match.
    2995           0 :     if (memcmp(Name.data()+0, "clang::require_constant_initialization", 38) != 0)
    2996             :       break;
    2997           0 :     return ParsedAttr::AT_RequireConstantInit;   // "clang::require_constant_initialization"
    2998             :   case 41:       // 1 string to match.
    2999           0 :     if (memcmp(Name.data()+0, "clang::objc_requires_property_definitions", 41) != 0)
    3000             :       break;
    3001           0 :     return ParsedAttr::AT_ObjCRequiresPropertyDefs;      // "clang::objc_requires_property_definitions"
    3002             :   case 42:       // 1 string to match.
    3003           0 :     if (memcmp(Name.data()+0, "clang::objc_arc_weak_reference_unavailable", 42) != 0)
    3004             :       break;
    3005           0 :     return ParsedAttr::AT_ArcWeakrefUnavailable;         // "clang::objc_arc_weak_reference_unavailable"
    3006             :   case 53:       // 1 string to match.
    3007           2 :     if (memcmp(Name.data()+0, "clang::objc_protocol_requires_explicit_implementation", 53) != 0)
    3008             :       break;
    3009           2 :     return ParsedAttr::AT_ObjCExplicitProtocolImpl;      // "clang::objc_protocol_requires_explicit_implementation"
    3010             :   }
    3011      117318 :   } else if (ParsedAttr::AS_C2x == Syntax) {
    3012         187 :   switch (Name.size()) {
    3013             :   default: break;
    3014             :   case 11:       // 1 string to match.
    3015          11 :     if (memcmp(Name.data()+0, "::nodiscard", 11) != 0)
    3016             :       break;
    3017          11 :     return ParsedAttr::AT_WarnUnusedResult;      // "::nodiscard"
    3018             :   case 12:       // 1 string to match.
    3019          21 :     if (memcmp(Name.data()+0, "::deprecated", 12) != 0)
    3020             :       break;
    3021          20 :     return ParsedAttr::AT_Deprecated;    // "::deprecated"
    3022          21 :   case 13:       // 3 strings to match.
    3023             :     switch (Name[0]) {
    3024             :     default: break;
    3025             :     case ':':    // 1 string to match.
    3026          21 :       if (memcmp(Name.data()+1, ":fallthrough", 12) != 0)
    3027             :         break;
    3028          21 :       return ParsedAttr::AT_FallThrough;         // "::fallthrough"
    3029             :     case 'c':    // 2 strings to match.
    3030           0 :       if (memcmp(Name.data()+1, "lang::", 6) != 0)
    3031             :         break;
    3032             :       switch (Name[7]) {
    3033             :       default: break;
    3034             :       case 'b':  // 1 string to match.
    3035           0 :         if (memcmp(Name.data()+8, "locks", 5) != 0)
    3036             :           break;
    3037           0 :         return ParsedAttr::AT_Blocks;    // "clang::blocks"
    3038             :       case 'p':  // 1 string to match.
    3039           0 :         if (memcmp(Name.data()+8, "ascal", 5) != 0)
    3040             :           break;
    3041           0 :         return ParsedAttr::AT_Pascal;    // "clang::pascal"
    3042             :       }
    3043             :       break;
    3044             :     }
    3045             :     break;
    3046          16 :   case 14:       // 4 strings to match.
    3047             :     switch (Name[0]) {
    3048             :     default: break;
    3049             :     case ':':    // 1 string to match.
    3050          16 :       if (memcmp(Name.data()+1, ":maybe_unused", 13) != 0)
    3051             :         break;
    3052          16 :       return ParsedAttr::AT_Unused;      // "::maybe_unused"
    3053             :     case 'c':    // 3 strings to match.
    3054           0 :       if (memcmp(Name.data()+1, "lang::", 6) != 0)
    3055             :         break;
    3056             :       switch (Name[7]) {
    3057             :       default: break;
    3058             :       case 'm':  // 1 string to match.
    3059           0 :         if (memcmp(Name.data()+8, "insize", 6) != 0)
    3060             :           break;
    3061           0 :         return ParsedAttr::AT_MinSize;   // "clang::minsize"
    3062           0 :       case 'o':  // 2 strings to match.
    3063             :         switch (Name[8]) {
    3064             :         default: break;
    3065             :         case 'b':        // 1 string to match.
    3066           0 :           if (memcmp(Name.data()+9, "jc_gc", 5) != 0)
    3067             :             break;
    3068           0 :           return ParsedAttr::AT_ObjCGC;  // "clang::objc_gc"
    3069             :         case 'p':        // 1 string to match.
    3070           0 :           if (memcmp(Name.data()+9, "tnone", 5) != 0)
    3071             :             break;
    3072           0 :           return ParsedAttr::AT_OptimizeNone;    // "clang::optnone"
    3073             :         }
    3074             :         break;
    3075             :       }
    3076             :       break;
    3077             :     }
    3078             :     break;
    3079             :   case 15:       // 5 strings to match.
    3080          11 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    3081             :       break;
    3082             :     switch (Name[7]) {
    3083             :     default: break;
    3084             :     case 'N':    // 1 string to match.
    3085           0 :       if (memcmp(Name.data()+8, "SObject", 7) != 0)
    3086             :         break;
    3087           0 :       return ParsedAttr::AT_ObjCNSObject;        // "clang::NSObject"
    3088             :     case 'a':    // 1 string to match.
    3089           6 :       if (memcmp(Name.data()+8, "nnotate", 7) != 0)
    3090             :         break;
    3091           6 :       return ParsedAttr::AT_Annotate;    // "clang::annotate"
    3092           4 :     case 'i':    // 2 strings to match.
    3093           4 :       if (Name[8] != 'b')
    3094             :         break;
    3095             :       switch (Name[9]) {
    3096             :       default: break;
    3097             :       case 'a':  // 1 string to match.
    3098           0 :         if (memcmp(Name.data()+10, "ction", 5) != 0)
    3099             :           break;
    3100           0 :         return ParsedAttr::AT_IBAction;  // "clang::ibaction"
    3101             :       case 'o':  // 1 string to match.
    3102           4 :         if (memcmp(Name.data()+10, "utlet", 5) != 0)
    3103             :           break;
    3104           4 :         return ParsedAttr::AT_IBOutlet;  // "clang::iboutlet"
    3105             :       }
    3106             :       break;
    3107             :     case 'n':    // 1 string to match.
    3108           1 :       if (memcmp(Name.data()+8, "oescape", 7) != 0)
    3109             :         break;
    3110           1 :       return ParsedAttr::AT_NoEscape;    // "clang::noescape"
    3111             :     }
    3112             :     break;
    3113             :   case 16:       // 2 strings to match.
    3114           3 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    3115             :       break;
    3116             :     switch (Name[7]) {
    3117             :     default: break;
    3118             :     case 'f':    // 1 string to match.
    3119           1 :       if (memcmp(Name.data()+8, "lag_enum", 8) != 0)
    3120             :         break;
    3121           1 :       return ParsedAttr::AT_FlagEnum;    // "clang::flag_enum"
    3122             :     case 's':    // 1 string to match.
    3123           2 :       if (memcmp(Name.data()+8, "wiftcall", 8) != 0)
    3124             :         break;
    3125           2 :       return ParsedAttr::AT_SwiftCall;   // "clang::swiftcall"
    3126             :     }
    3127             :     break;
    3128             :   case 17:       // 2 strings to match.
    3129           0 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    3130             :       break;
    3131             :     switch (Name[7]) {
    3132             :     default: break;
    3133             :     case 'c':    // 1 string to match.
    3134           0 :       if (memcmp(Name.data()+8, "onvergent", 9) != 0)
    3135             :         break;
    3136           0 :       return ParsedAttr::AT_Convergent;  // "clang::convergent"
    3137             :     case 'v':    // 1 string to match.
    3138           0 :       if (memcmp(Name.data()+8, "ectorcall", 9) != 0)
    3139             :         break;
    3140           0 :       return ParsedAttr::AT_VectorCall;  // "clang::vectorcall"
    3141             :     }
    3142             :     break;
    3143             :   case 18:       // 7 strings to match.
    3144           2 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    3145             :       break;
    3146             :     switch (Name[7]) {
    3147             :     default: break;
    3148             :     case 'c':    // 1 string to match.
    3149           0 :       if (memcmp(Name.data()+8, "f_consumed", 10) != 0)
    3150             :         break;
    3151           0 :       return ParsedAttr::AT_CFConsumed;  // "clang::cf_consumed"
    3152           0 :     case 'n':    // 3 strings to match.
    3153             :       switch (Name[8]) {
    3154             :       default: break;
    3155           0 :       case 'o':  // 2 strings to match.
    3156             :         switch (Name[9]) {
    3157             :         default: break;
    3158             :         case '_':        // 1 string to match.
    3159           0 :           if (memcmp(Name.data()+10, "sanitize", 8) != 0)
    3160             :             break;
    3161           0 :           return ParsedAttr::AT_NoSanitize;      // "clang::no_sanitize"
    3162             :         case 'd':        // 1 string to match.
    3163           0 :           if (memcmp(Name.data()+10, "uplicate", 8) != 0)
    3164             :             break;
    3165           0 :           return ParsedAttr::AT_NoDuplicate;     // "clang::noduplicate"
    3166             :         }
    3167             :         break;
    3168             :       case 's':  // 1 string to match.
    3169           0 :         if (memcmp(Name.data()+9, "_consumed", 9) != 0)
    3170             :           break;
    3171           0 :         return ParsedAttr::AT_NSConsumed;        // "clang::ns_consumed"
    3172             :       }
    3173             :       break;
    3174             :     case 'o':    // 1 string to match.
    3175           0 :       if (memcmp(Name.data()+8, "bjc_bridge", 10) != 0)
    3176             :         break;
    3177           0 :       return ParsedAttr::AT_ObjCBridge;  // "clang::objc_bridge"
    3178             :     case 'u':    // 1 string to match.
    3179           2 :       if (memcmp(Name.data()+8, "navailable", 10) != 0)
    3180             :         break;
    3181           2 :       return ParsedAttr::AT_Unavailable;         // "clang::unavailable"
    3182             :     case 'w':    // 1 string to match.
    3183           0 :       if (memcmp(Name.data()+8, "eak_import", 10) != 0)
    3184             :         break;
    3185           0 :       return ParsedAttr::AT_WeakImport;  // "clang::weak_import"
    3186             :     }
    3187             :     break;
    3188             :   case 19:       // 6 strings to match.
    3189          17 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    3190             :       break;
    3191             :     switch (Name[7]) {
    3192             :     default: break;
    3193             :     case 'a':    // 1 string to match.
    3194          14 :       if (memcmp(Name.data()+8, "vailability", 11) != 0)
    3195             :         break;
    3196          14 :       return ParsedAttr::AT_Availability;        // "clang::availability"
    3197             :     case 'c':    // 2 strings to match.
    3198           0 :       if (memcmp(Name.data()+8, "pu_", 3) != 0)
    3199             :         break;
    3200             :       switch (Name[11]) {
    3201             :       default: break;
    3202             :       case 'd':  // 1 string to match.
    3203           0 :         if (memcmp(Name.data()+12, "ispatch", 7) != 0)
    3204             :           break;
    3205           0 :         return ParsedAttr::AT_CPUDispatch;       // "clang::cpu_dispatch"
    3206             :       case 's':  // 1 string to match.
    3207           0 :         if (memcmp(Name.data()+12, "pecific", 7) != 0)
    3208             :           break;
    3209           0 :         return ParsedAttr::AT_CPUSpecific;       // "clang::cpu_specific"
    3210             :       }
    3211             :       break;
    3212           2 :     case 'o':    // 2 strings to match.
    3213             :       switch (Name[8]) {
    3214             :       default: break;
    3215             :       case 'b':  // 1 string to match.
    3216           0 :         if (memcmp(Name.data()+9, "jc_boxable", 10) != 0)
    3217             :           break;
    3218           0 :         return ParsedAttr::AT_ObjCBoxable;       // "clang::objc_boxable"
    3219             :       case 'v':  // 1 string to match.
    3220           2 :         if (memcmp(Name.data()+9, "erloadable", 10) != 0)
    3221             :           break;
    3222           2 :         return ParsedAttr::AT_Overloadable;      // "clang::overloadable"
    3223             :       }
    3224             :       break;
    3225             :     case 'p':    // 1 string to match.
    3226           0 :       if (memcmp(Name.data()+8, "reserve_all", 11) != 0)
    3227             :         break;
    3228           0 :       return ParsedAttr::AT_PreserveAll;         // "clang::preserve_all"
    3229             :     }
    3230             :     break;
    3231             :   case 20:       // 4 strings to match.
    3232           4 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    3233             :       break;
    3234             :     switch (Name[7]) {
    3235             :     default: break;
    3236             :     case 'a':    // 1 string to match.
    3237           2 :       if (memcmp(Name.data()+8, "ddress_space", 12) != 0)
    3238             :         break;
    3239           2 :       return ParsedAttr::AT_AddressSpace;        // "clang::address_space"
    3240             :     case 'p':    // 1 string to match.
    3241           0 :       if (memcmp(Name.data()+8, "reserve_most", 12) != 0)
    3242             :         break;
    3243           0 :       return ParsedAttr::AT_PreserveMost;        // "clang::preserve_most"
    3244             :     case 's':    // 1 string to match.
    3245           2 :       if (memcmp(Name.data()+8, "wift_context", 12) != 0)
    3246             :         break;
    3247           2 :       return ParsedAttr::AT_SwiftContext;        // "clang::swift_context"
    3248             :     case 'x':    // 1 string to match.
    3249           0 :       if (memcmp(Name.data()+8, "ray_log_args", 12) != 0)
    3250             :         break;
    3251           0 :       return ParsedAttr::AT_XRayLogArgs;         // "clang::xray_log_args"
    3252             :     }
    3253             :     break;
    3254             :   case 21:       // 2 strings to match.
    3255           2 :     if (memcmp(Name.data()+0, "clang::objc_", 12) != 0)
    3256             :       break;
    3257             :     switch (Name[12]) {
    3258             :     default: break;
    3259             :     case 'e':    // 1 string to match.
    3260           2 :       if (memcmp(Name.data()+13, "xception", 8) != 0)
    3261             :         break;
    3262           2 :       return ParsedAttr::AT_ObjCException;       // "clang::objc_exception"
    3263             :     case 'o':    // 1 string to match.
    3264           0 :       if (memcmp(Name.data()+13, "wnership", 8) != 0)
    3265             :         break;
    3266           0 :       return ParsedAttr::AT_ObjCOwnership;       // "clang::objc_ownership"
    3267             :     }
    3268             :     break;
    3269             :   case 22:       // 5 strings to match.
    3270           0 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    3271             :       break;
    3272             :     switch (Name[7]) {
    3273             :     default: break;
    3274             :     case 'n':    // 1 string to match.
    3275           0 :       if (memcmp(Name.data()+8, "ot_tail_called", 14) != 0)
    3276             :         break;
    3277           0 :       return ParsedAttr::AT_NotTailCalled;       // "clang::not_tail_called"
    3278           0 :     case 'o':    // 3 strings to match.
    3279             :       switch (Name[8]) {
    3280             :       default: break;
    3281             :       case 'b':  // 1 string to match.
    3282           0 :         if (memcmp(Name.data()+9, "jc_root_class", 13) != 0)
    3283             :           break;
    3284           0 :         return ParsedAttr::AT_ObjCRootClass;     // "clang::objc_root_class"
    3285             :       case 'w':  // 2 strings to match.
    3286           0 :         if (memcmp(Name.data()+9, "nership_", 8) != 0)
    3287             :           break;
    3288             :         switch (Name[17]) {
    3289             :         default: break;
    3290             :         case 'h':        // 1 string to match.
    3291           0 :           if (memcmp(Name.data()+18, "olds", 4) != 0)
    3292             :             break;
    3293           0 :           return ParsedAttr::AT_Ownership;       // "clang::ownership_holds"
    3294             :         case 't':        // 1 string to match.
    3295           0 :           if (memcmp(Name.data()+18, "akes", 4) != 0)
    3296             :             break;
    3297           0 :           return ParsedAttr::AT_Ownership;       // "clang::ownership_takes"
    3298             :         }
    3299             :         break;
    3300             :       }
    3301             :       break;
    3302             :     case 't':    // 1 string to match.
    3303           0 :       if (memcmp(Name.data()+8, "ype_visibility", 14) != 0)
    3304             :         break;
    3305           0 :       return ParsedAttr::AT_TypeVisibility;      // "clang::type_visibility"
    3306             :     }
    3307             :     break;
    3308             :   case 23:       // 5 strings to match.
    3309           9 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    3310             :       break;
    3311             :     switch (Name[7]) {
    3312             :     default: break;
    3313             :     case 'i':    // 1 string to match.
    3314           3 :       if (memcmp(Name.data()+8, "nternal_linkage", 15) != 0)
    3315             :         break;
    3316           3 :       return ParsedAttr::AT_InternalLinkage;     // "clang::internal_linkage"
    3317             :     case 'm':    // 1 string to match.
    3318           0 :       if (memcmp(Name.data()+8, "in_vector_width", 15) != 0)
    3319             :         break;
    3320           0 :       return ParsedAttr::AT_MinVectorWidth;      // "clang::min_vector_width"
    3321           6 :     case 'n':    // 2 strings to match.
    3322             :       switch (Name[8]) {
    3323             :       default: break;
    3324             :       case 'e':  // 1 string to match.
    3325           0 :         if (memcmp(Name.data()+9, "on_vector_type", 14) != 0)
    3326             :           break;
    3327           0 :         return ParsedAttr::AT_NeonVectorType;    // "clang::neon_vector_type"
    3328             :       case 's':  // 1 string to match.
    3329           6 :         if (memcmp(Name.data()+9, "_consumes_self", 14) != 0)
    3330             :           break;
    3331           6 :         return ParsedAttr::AT_NSConsumesSelf;    // "clang::ns_consumes_self"
    3332             :       }
    3333             :       break;
    3334             :     case 'p':    // 1 string to match.
    3335           0 :       if (memcmp(Name.data()+8, "ass_object_size", 15) != 0)
    3336             :         break;
    3337           0 :       return ParsedAttr::AT_PassObjectSize;      // "clang::pass_object_size"
    3338             :     }
    3339             :     break;
    3340             :   case 24:       // 2 strings to match.
    3341          10 :     if (memcmp(Name.data()+0, "clang::o", 8) != 0)
    3342             :       break;
    3343             :     switch (Name[8]) {
    3344             :     default: break;
    3345             :     case 'b':    // 1 string to match.
    3346           4 :       if (memcmp(Name.data()+9, "jc_runtime_name", 15) != 0)
    3347             :         break;
    3348           4 :       return ParsedAttr::AT_ObjCRuntimeName;     // "clang::objc_runtime_name"
    3349             :     case 'w':    // 1 string to match.
    3350           6 :       if (memcmp(Name.data()+9, "nership_returns", 15) != 0)
    3351             :         break;
    3352           6 :       return ParsedAttr::AT_Ownership;   // "clang::ownership_returns"
    3353             :     }
    3354             :     break;
    3355             :   case 25:       // 7 strings to match.
    3356           3 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    3357             :       break;
    3358             :     switch (Name[7]) {
    3359             :     default: break;
    3360             :     case 'd':    // 1 string to match.
    3361           0 :       if (memcmp(Name.data()+8, "isable_tail_calls", 17) != 0)
    3362             :         break;
    3363           0 :       return ParsedAttr::AT_DisableTailCalls;    // "clang::disable_tail_calls"
    3364             :     case 'e':    // 1 string to match.
    3365           3 :       if (memcmp(Name.data()+8, "num_extensibility", 17) != 0)
    3366             :         break;
    3367           3 :       return ParsedAttr::AT_EnumExtensibility;   // "clang::enum_extensibility"
    3368             :     case 'i':    // 1 string to match.
    3369           0 :       if (memcmp(Name.data()+8, "boutletcollection", 17) != 0)
    3370             :         break;
    3371           0 :       return ParsedAttr::AT_IBOutletCollection;  // "clang::iboutletcollection"
    3372             :     case 'n':    // 2 strings to match.
    3373           0 :       if (memcmp(Name.data()+8, "o_s", 3) != 0)
    3374             :         break;
    3375             :       switch (Name[11]) {
    3376             :       default: break;
    3377             :       case 'a':  // 1 string to match.
    3378           0 :         if (memcmp(Name.data()+12, "nitize_memory", 13) != 0)
    3379             :           break;
    3380           0 :         return ParsedAttr::AT_NoSanitizeSpecific;        // "clang::no_sanitize_memory"
    3381             :       case 't':  // 1 string to match.
    3382           0 :         if (memcmp(Name.data()+12, "ack_protector", 13) != 0)
    3383             :           break;
    3384           0 :         return ParsedAttr::AT_NoStackProtector;  // "clang::no_stack_protector"
    3385             :       }
    3386             :       break;
    3387             :     case 'o':    // 1 string to match.
    3388           0 :       if (memcmp(Name.data()+8, "bjc_method_family", 17) != 0)
    3389             :         break;
    3390           0 :       return ParsedAttr::AT_ObjCMethodFamily;    // "clang::objc_method_family"
    3391             :     case 's':    // 1 string to match.
    3392           0 :       if (memcmp(Name.data()+8, "wift_error_result", 17) != 0)
    3393             :         break;
    3394           0 :       return ParsedAttr::AT_SwiftErrorResult;    // "clang::swift_error_result"
    3395             :     }
    3396             :     break;
    3397             :   case 26:       // 7 strings to match.
    3398           6 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    3399             :       break;
    3400             :     switch (Name[7]) {
    3401             :     default: break;
    3402             :     case 'c':    // 3 strings to match.
    3403           0 :       if (memcmp(Name.data()+8, "f_", 2) != 0)
    3404             :         break;
    3405             :       switch (Name[10]) {
    3406             :       default: break;
    3407             :       case 'a':  // 1 string to match.
    3408           0 :         if (memcmp(Name.data()+11, "udited_transfer", 15) != 0)
    3409             :           break;
    3410           0 :         return ParsedAttr::AT_CFAuditedTransfer;         // "clang::cf_audited_transfer"
    3411             :       case 'r':  // 1 string to match.
    3412           0 :         if (memcmp(Name.data()+11, "eturns_retained", 15) != 0)
    3413             :           break;
    3414           0 :         return ParsedAttr::AT_CFReturnsRetained;         // "clang::cf_returns_retained"
    3415             :       case 'u':  // 1 string to match.
    3416           0 :         if (memcmp(Name.data()+11, "nknown_transfer", 15) != 0)
    3417             :           break;
    3418           0 :         return ParsedAttr::AT_CFUnknownTransfer;         // "clang::cf_unknown_transfer"
    3419             :       }
    3420             :       break;
    3421             :     case 'n':    // 1 string to match.
    3422           0 :       if (memcmp(Name.data()+8, "s_returns_retained", 18) != 0)
    3423             :         break;
    3424           0 :       return ParsedAttr::AT_NSReturnsRetained;   // "clang::ns_returns_retained"
    3425             :     case 'o':    // 3 strings to match.
    3426           6 :       if (memcmp(Name.data()+8, "bjc_", 4) != 0)
    3427             :         break;
    3428             :       switch (Name[12]) {
    3429             :       default: break;
    3430             :       case 'b':  // 2 strings to match.
    3431           6 :         if (memcmp(Name.data()+13, "ridge_", 6) != 0)
    3432             :           break;
    3433             :         switch (Name[19]) {
    3434             :         default: break;
    3435             :         case 'm':        // 1 string to match.
    3436           0 :           if (memcmp(Name.data()+20, "utable", 6) != 0)
    3437             :             break;
    3438           0 :           return ParsedAttr::AT_ObjCBridgeMutable;       // "clang::objc_bridge_mutable"
    3439             :         case 'r':        // 1 string to match.
    3440           6 :           if (memcmp(Name.data()+20, "elated", 6) != 0)
    3441             :             break;
    3442           6 :           return ParsedAttr::AT_ObjCBridgeRelated;       // "clang::objc_bridge_related"
    3443             :         }
    3444             :         break;
    3445             :       case 'r':  // 1 string to match.
    3446           0 :         if (memcmp(Name.data()+13, "equires_super", 13) != 0)
    3447             :           break;
    3448           0 :         return ParsedAttr::AT_ObjCRequiresSuper;         // "clang::objc_requires_super"
    3449             :       }
    3450             :       break;
    3451             :     }
    3452             :     break;
    3453             :   case 27:       // 2 strings to match.
    3454           0 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    3455             :       break;
    3456             :     switch (Name[7]) {
    3457             :     default: break;
    3458             :     case 'n':    // 1 string to match.
    3459           0 :       if (memcmp(Name.data()+8, "eon_polyvector_type", 19) != 0)
    3460             :         break;
    3461           0 :       return ParsedAttr::AT_NeonPolyVectorType;  // "clang::neon_polyvector_type"
    3462             :     case 'o':    // 1 string to match.
    3463           0 :       if (memcmp(Name.data()+8, "bjc_runtime_visible", 19) != 0)
    3464             :         break;
    3465           0 :       return ParsedAttr::AT_ObjCRuntimeVisible;  // "clang::objc_runtime_visible"
    3466             :     }
    3467             :     break;
    3468             :   case 28:       // 6 strings to match.
    3469          36 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    3470             :       break;
    3471             :     switch (Name[7]) {
    3472             :     default: break;
    3473             :     case 'l':    // 1 string to match.
    3474           0 :       if (memcmp(Name.data()+8, "to_visibility_public", 20) != 0)
    3475             :         break;
    3476           0 :       return ParsedAttr::AT_LTOVisibilityPublic;         // "clang::lto_visibility_public"
    3477             :     case 'o':    // 1 string to match.
    3478           0 :       if (memcmp(Name.data()+8, "bjc_precise_lifetime", 20) != 0)
    3479             :         break;
    3480           0 :       return ParsedAttr::AT_ObjCPreciseLifetime;         // "clang::objc_precise_lifetime"
    3481             :     case 'p':    // 1 string to match.
    3482          22 :       if (memcmp(Name.data()+8, "ointer_with_type_tag", 20) != 0)
    3483             :         break;
    3484          22 :       return ParsedAttr::AT_ArgumentWithTypeTag;         // "clang::pointer_with_type_tag"
    3485             :     case 's':    // 1 string to match.
    3486           0 :       if (memcmp(Name.data()+8, "wift_indirect_result", 20) != 0)
    3487             :         break;
    3488           0 :       return ParsedAttr::AT_SwiftIndirectResult;         // "clang::swift_indirect_result"
    3489             :     case 't':    // 1 string to match.
    3490          14 :       if (memcmp(Name.data()+8, "ype_tag_for_datatype", 20) != 0)
    3491             :         break;
    3492          14 :       return ParsedAttr::AT_TypeTagForDatatype;  // "clang::type_tag_for_datatype"
    3493             :     case 'x':    // 1 string to match.
    3494           0 :       if (memcmp(Name.data()+8, "ray_never_instrument", 20) != 0)
    3495             :         break;
    3496           0 :       return ParsedAttr::AT_XRayInstrument;      // "clang::xray_never_instrument"
    3497             :     }
    3498             :     break;
    3499             :   case 29:       // 4 strings to match.
    3500           8 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    3501             :       break;
    3502             :     switch (Name[7]) {
    3503             :     default: break;
    3504             :     case 'a':    // 1 string to match.
    3505           0 :       if (memcmp(Name.data()+8, "rgument_with_type_tag", 21) != 0)
    3506             :         break;
    3507           0 :       return ParsedAttr::AT_ArgumentWithTypeTag;         // "clang::argument_with_type_tag"
    3508             :     case 'e':    // 1 string to match.
    3509           8 :       if (memcmp(Name.data()+8, "xternal_source_symbol", 21) != 0)
    3510             :         break;
    3511           8 :       return ParsedAttr::AT_ExternalSourceSymbol;        // "clang::external_source_symbol"
    3512             :     case 'o':    // 1 string to match.
    3513           0 :       if (memcmp(Name.data()+8, "bjc_independent_class", 21) != 0)
    3514             :         break;
    3515           0 :       return ParsedAttr::AT_ObjCIndependentClass;        // "clang::objc_independent_class"
    3516             :     case 'x':    // 1 string to match.
    3517           0 :       if (memcmp(Name.data()+8, "ray_always_instrument", 21) != 0)
    3518             :         break;
    3519           0 :       return ParsedAttr::AT_XRayInstrument;      // "clang::xray_always_instrument"
    3520             :     }
    3521             :     break;
    3522             :   case 30:       // 3 strings to match.
    3523           0 :     if (memcmp(Name.data()+0, "clang::", 7) != 0)
    3524             :       break;
    3525             :     switch (Name[7]) {
    3526             :     default: break;
    3527             :     case 'c':    // 1 string to match.
    3528           0 :       if (memcmp(Name.data()+8, "f_returns_not_retained", 22) != 0)
    3529             :         break;
    3530           0 :       return ParsedAttr::AT_CFReturnsNotRetained;        // "clang::cf_returns_not_retained"
    3531             :     case 'n':    // 2 strings to match.
    3532           0 :       if (memcmp(Name.data()+8, "s_returns_", 10) != 0)
    3533             :         break;
    3534             :       switch (Name[18]) {
    3535             :       default: break;
    3536             :       case 'a':  // 1 string to match.
    3537           0 :         if (memcmp(Name.data()+19, "utoreleased", 11) != 0)
    3538             :           break;
    3539           0 :         return ParsedAttr::AT_NSReturnsAutoreleased;     // "clang::ns_returns_autoreleased"
    3540             :       case 'n':  // 1 string to match.
    3541           0 :         if (memcmp(Name.data()+19, "ot_retained", 11) != 0)
    3542             :           break;
    3543           0 :         return ParsedAttr::AT_NSReturnsNotRetained;      // "clang::ns_returns_not_retained"
    3544             :       }
    3545             :       break;
    3546             :     }
    3547             :     break;
    3548             :   case 32:       // 1 string to match.
    3549           0 :     if (memcmp(Name.data()+0, "clang::no_thread_safety_analysis", 32) != 0)
    3550             :       break;
    3551           0 :     return ParsedAttr::AT_NoThreadSafetyAnalysis;        // "clang::no_thread_safety_analysis"
    3552             :   case 33:       // 1 string to match.
    3553           2 :     if (memcmp(Name.data()+0, "clang::objc_returns_inner_pointer", 33) != 0)
    3554             :       break;
    3555           2 :     return ParsedAttr::AT_ObjCReturnsInnerPointer;       // "clang::objc_returns_inner_pointer"
    3556             :   case 34:       // 2 strings to match.
    3557           0 :     if (memcmp(Name.data()+0, "clang::objc_", 12) != 0)
    3558             :       break;
    3559             :     switch (Name[12]) {
    3560             :     default: break;
    3561             :     case 'd':    // 1 string to match.
    3562           0 :       if (memcmp(Name.data()+13, "esignated_initializer", 21) != 0)
    3563             :         break;
    3564           0 :       return ParsedAttr::AT_ObjCDesignatedInitializer;   // "clang::objc_designated_initializer"
    3565             :     case 's':    // 1 string to match.
    3566           0 :       if (memcmp(Name.data()+13, "ubclassing_restricted", 21) != 0)
    3567             :         break;
    3568           0 :       return ParsedAttr::AT_ObjCSubclassingRestricted;   // "clang::objc_subclassing_restricted"
    3569             :     }
    3570             :     break;
    3571             :   case 41:       // 1 string to match.
    3572           0 :     if (memcmp(Name.data()+0, "clang::objc_requires_property_definitions", 41) != 0)
    3573             :       break;
    3574           0 :     return ParsedAttr::AT_ObjCRequiresPropertyDefs;      // "clang::objc_requires_property_definitions"
    3575             :   case 42:       // 1 string to match.
    3576           0 :     if (memcmp(Name.data()+0, "clang::objc_arc_weak_reference_unavailable", 42) != 0)
    3577             :       break;
    3578           0 :     return ParsedAttr::AT_ArcWeakrefUnavailable;         // "clang::objc_arc_weak_reference_unavailable"
    3579             :   case 53:       // 1 string to match.
    3580           2 :     if (memcmp(Name.data()+0, "clang::objc_protocol_requires_explicit_implementation", 53) != 0)
    3581             :       break;
    3582           2 :     return ParsedAttr::AT_ObjCExplicitProtocolImpl;      // "clang::objc_protocol_requires_explicit_implementation"
    3583             :   }
    3584      117131 :   } else if (ParsedAttr::AS_Keyword == Syntax || ParsedAttr::AS_ContextSensitiveKeyword == Syntax) {
    3585      116908 :   switch (Name.size()) {
    3586             :   default: break;
    3587         704 :   case 5:        // 2 strings to match.
    3588             :     switch (Name[0]) {
    3589             :     default: break;
    3590             :     case '_':    // 1 string to match.
    3591           1 :       if (memcmp(Name.data()+1, "_w64", 4) != 0)
    3592             :         break;
    3593           1 :       return ParsedAttr::IgnoredAttribute;       // "__w64"
    3594             :     case 'l':    // 1 string to match.
    3595         703 :       if (memcmp(Name.data()+1, "ocal", 4) != 0)
    3596             :         break;
    3597         703 :       return ParsedAttr::AT_OpenCLLocalAddressSpace;     // "local"
    3598             :     }
    3599             :     break;
    3600        1113 :   case 6:        // 5 strings to match.
    3601             :     switch (Name[0]) {
    3602             :     default: break;
    3603          26 :     case '_':    // 3 strings to match.
    3604             :       switch (Name[1]) {
    3605             :       default: break;
    3606          24 :       case '_':  // 2 strings to match.
    3607             :         switch (Name[2]) {
    3608             :         default: break;
    3609             :         case 's':        // 1 string to match.
    3610          16 :           if (memcmp(Name.data()+3, "ptr", 3) != 0)
    3611             :             break;
    3612          16 :           return ParsedAttr::AT_SPtr;    // "__sptr"
    3613             :         case 'u':        // 1 string to match.
    3614           8 :           if (memcmp(Name.data()+3, "ptr", 3) != 0)
    3615             :             break;
    3616           8 :           return ParsedAttr::AT_UPtr;    // "__uptr"
    3617             :         }
    3618             :         break;
    3619             :       case 'c':  // 1 string to match.
    3620           2 :         if (memcmp(Name.data()+2, "decl", 4) != 0)
    3621             :           break;
    3622           2 :         return ParsedAttr::AT_CDecl;     // "_cdecl"
    3623             :       }
    3624             :       break;
    3625             :     case 'g':    // 1 string to match.
    3626         576 :       if (memcmp(Name.data()+1, "lobal", 5) != 0)
    3627             :         break;
    3628         576 :       return ParsedAttr::AT_OpenCLGlobalAddressSpace;    // "global"
    3629             :     case 'k':    // 1 string to match.
    3630         511 :       if (memcmp(Name.data()+1, "ernel", 5) != 0)
    3631             :         break;
    3632         511 :       return ParsedAttr::AT_OpenCLKernel;        // "kernel"
    3633             :     }
    3634             :     break;
    3635       92180 :   case 7:        // 8 strings to match.
    3636             :     switch (Name[0]) {
    3637             :     default: break;
    3638        8771 :     case '_':    // 5 strings to match.
    3639             :       switch (Name[1]) {
    3640             :       default: break;
    3641        8769 :       case '_':  // 4 strings to match.
    3642             :         switch (Name[2]) {
    3643             :         default: break;
    3644             :         case 'c':        // 1 string to match.
    3645         276 :           if (memcmp(Name.data()+3, "decl", 4) != 0)
    3646             :             break;
    3647         276 :           return ParsedAttr::AT_CDecl;   // "__cdecl"
    3648             :         case 'l':        // 1 string to match.
    3649        8463 :           if (memcmp(Name.data()+3, "ocal", 4) != 0)
    3650             :             break;
    3651        8463 :           return ParsedAttr::AT_OpenCLLocalAddressSpace;         // "__local"
    3652             :         case 'p':        // 2 strings to match.
    3653          30 :           if (memcmp(Name.data()+3, "tr", 2) != 0)
    3654             :             break;
    3655             :           switch (Name[5]) {
    3656             :           default: break;
    3657          22 :           case '3':      // 1 string to match.
    3658          22 :             if (Name[6] != '2')
    3659             :               break;
    3660          22 :             return ParsedAttr::AT_Ptr32;         // "__ptr32"
    3661           8 :           case '6':      // 1 string to match.
    3662           8 :             if (Name[6] != '4')
    3663             :               break;
    3664           8 :             return ParsedAttr::AT_Ptr64;         // "__ptr64"
    3665             :           }
    3666             :           break;
    3667             :         }
    3668             :         break;
    3669             :       case 'p':  // 1 string to match.
    3670           2 :         if (memcmp(Name.data()+2, "ascal", 5) != 0)
    3671             :           break;
    3672           2 :         return ParsedAttr::AT_Pascal;    // "_pascal"
    3673             :       }
    3674             :       break;
    3675             :     case 'a':    // 1 string to match.
    3676       82708 :       if (memcmp(Name.data()+1, "lignas", 6) != 0)
    3677             :         break;
    3678       82708 :       return ParsedAttr::AT_Aligned;     // "alignas"
    3679             :     case 'g':    // 1 string to match.
    3680         295 :       if (memcmp(Name.data()+1, "eneric", 6) != 0)
    3681             :         break;
    3682         295 :       return ParsedAttr::AT_OpenCLGenericAddressSpace;   // "generic"
    3683             :     case 'p':    // 1 string to match.
    3684         406 :       if (memcmp(Name.data()+1, "rivate", 6) != 0)
    3685             :         break;
    3686         406 :       return ParsedAttr::AT_OpenCLPrivateAddressSpace;   // "private"
    3687             :     }
    3688             :     break;
    3689       11445 :   case 8:        // 8 strings to match.
    3690             :     switch (Name[0]) {
    3691             :     default: break;
    3692       11110 :     case '_':    // 7 strings to match.
    3693             :       switch (Name[1]) {
    3694             :       default: break;
    3695             :       case 'A':  // 1 string to match.
    3696          40 :         if (memcmp(Name.data()+2, "lignas", 6) != 0)
    3697             :           break;
    3698          40 :         return ParsedAttr::AT_Aligned;   // "_Alignas"
    3699             :       case 'N':  // 1 string to match.
    3700        1130 :         if (memcmp(Name.data()+2, "onnull", 6) != 0)
    3701             :           break;
    3702        1130 :         return ParsedAttr::AT_TypeNonNull;       // "_Nonnull"
    3703        9938 :       case '_':  // 4 strings to match.
    3704             :         switch (Name[2]) {
    3705             :         default: break;
    3706             :         case 'g':        // 1 string to match.
    3707        9773 :           if (memcmp(Name.data()+3, "lobal", 5) != 0)
    3708             :             break;
    3709        9773 :           return ParsedAttr::AT_OpenCLGlobalAddressSpace;        // "__global"
    3710         150 :         case 'k':        // 2 strings to match.
    3711             :           switch (Name[3]) {
    3712             :           default: break;
    3713             :           case 'e':      // 1 string to match.
    3714          82 :             if (memcmp(Name.data()+4, "rnel", 4) != 0)
    3715             :               break;
    3716          82 :             return ParsedAttr::AT_OpenCLKernel;  // "__kernel"
    3717             :           case 'i':      // 1 string to match.
    3718          68 :             if (memcmp(Name.data()+4, "ndof", 4) != 0)
    3719             :               break;
    3720          68 :             return ParsedAttr::AT_ObjCKindOf;    // "__kindof"
    3721             :           }
    3722             :           break;
    3723             :         case 'p':        // 1 string to match.
    3724          15 :           if (memcmp(Name.data()+3, "ascal", 5) != 0)
    3725             :             break;
    3726          15 :           return ParsedAttr::AT_Pascal;  // "__pascal"
    3727             :         }
    3728             :         break;
    3729             :       case 's':  // 1 string to match.
    3730           2 :         if (memcmp(Name.data()+2, "tdcall", 6) != 0)
    3731             :           break;
    3732           2 :         return ParsedAttr::AT_StdCall;   // "_stdcall"
    3733             :       }
    3734             :       break;
    3735             :     case 'c':    // 1 string to match.
    3736         335 :       if (memcmp(Name.data()+1, "onstant", 7) != 0)
    3737             :         break;
    3738         335 :       return ParsedAttr::AT_OpenCLConstantAddressSpace;  // "constant"
    3739             :     }
    3740             :     break;
    3741        6253 :   case 9:        // 8 strings to match.
    3742             :     switch (Name[0]) {
    3743             :     default: break;
    3744        3485 :     case '_':    // 7 strings to match.
    3745             :       switch (Name[1]) {
    3746             :       default: break;
    3747             :       case 'N':  // 1 string to match.
    3748         712 :         if (memcmp(Name.data()+2, "ullable", 7) != 0)
    3749             :           break;
    3750         712 :         return ParsedAttr::AT_TypeNullable;      // "_Nullable"
    3751        2771 :       case '_':  // 4 strings to match.
    3752             :         switch (Name[2]) {
    3753             :         default: break;
    3754             :         case 'g':        // 1 string to match.
    3755           6 :           if (memcmp(Name.data()+3, "eneric", 6) != 0)
    3756             :             break;
    3757           6 :           return ParsedAttr::AT_OpenCLGenericAddressSpace;       // "__generic"
    3758             :         case 'p':        // 1 string to match.
    3759        2518 :           if (memcmp(Name.data()+3, "rivate", 6) != 0)
    3760             :             break;
    3761        2518 :           return ParsedAttr::AT_OpenCLPrivateAddressSpace;       // "__private"
    3762             :         case 'r':        // 1 string to match.
    3763          96 :           if (memcmp(Name.data()+3, "egcall", 6) != 0)
    3764             :             break;
    3765          96 :           return ParsedAttr::AT_RegCall;         // "__regcall"
    3766             :         case 's':        // 1 string to match.
    3767         151 :           if (memcmp(Name.data()+3, "tdcall", 6) != 0)
    3768             :             break;
    3769         151 :           return ParsedAttr::AT_StdCall;         // "__stdcall"
    3770             :         }
    3771             :         break;
    3772             :       case 'f':  // 1 string to match.
    3773           2 :         if (memcmp(Name.data()+2, "astcall", 7) != 0)
    3774             :           break;
    3775           2 :         return ParsedAttr::AT_FastCall;  // "_fastcall"
    3776             :       case 't':  // 1 string to match.
    3777           0 :         if (memcmp(Name.data()+2, "hiscall", 7) != 0)
    3778             :           break;
    3779           0 :         return ParsedAttr::AT_ThisCall;  // "_thiscall"
    3780             :       }
    3781             :       break;
    3782             :     case 'r':    // 1 string to match.
    3783        2768 :       if (memcmp(Name.data()+1, "ead_only", 8) != 0)
    3784             :         break;
    3785        2768 :       return ParsedAttr::AT_OpenCLAccess;        // "read_only"
    3786             :     }
    3787             :     break;
    3788        4991 :   case 10:       // 5 strings to match.
    3789             :     switch (Name[0]) {
    3790             :     default: break;
    3791        1429 :     case '_':    // 3 strings to match.
    3792        1429 :       if (Name[1] != '_')
    3793             :         break;
    3794             :       switch (Name[2]) {
    3795             :       default: break;
    3796             :       case 'c':  // 1 string to match.
    3797        1290 :         if (memcmp(Name.data()+3, "onstant", 7) != 0)
    3798             :           break;
    3799        1290 :         return ParsedAttr::AT_OpenCLConstantAddressSpace;        // "__constant"
    3800             :       case 'f':  // 1 string to match.
    3801          94 :         if (memcmp(Name.data()+3, "astcall", 7) != 0)
    3802             :           break;
    3803          94 :         return ParsedAttr::AT_FastCall;  // "__fastcall"
    3804             :       case 't':  // 1 string to match.
    3805          45 :         if (memcmp(Name.data()+3, "hiscall", 7) != 0)
    3806             :           break;
    3807          45 :         return ParsedAttr::AT_ThisCall;  // "__thiscall"
    3808             :       }
    3809             :       break;
    3810             :     case 'r':    // 1 string to match.
    3811        2022 :       if (memcmp(Name.data()+1, "ead_write", 9) != 0)
    3812             :         break;
    3813        2022 :       return ParsedAttr::AT_OpenCLAccess;        // "read_write"
    3814             :     case 'w':    // 1 string to match.
    3815        1540 :       if (memcmp(Name.data()+1, "rite_only", 9) != 0)
    3816             :         break;
    3817        1540 :       return ParsedAttr::AT_OpenCLAccess;        // "write_only"
    3818             :     }
    3819             :     break;
    3820           5 :   case 11:       // 2 strings to match.
    3821           5 :     if (Name[0] != '_')
    3822             :       break;
    3823             :     switch (Name[1]) {
    3824             :     default: break;
    3825             :     case '_':    // 1 string to match.
    3826           5 :       if (memcmp(Name.data()+2, "read_only", 9) != 0)
    3827             :         break;
    3828           5 :       return ParsedAttr::AT_OpenCLAccess;        // "__read_only"
    3829             :     case 'v':    // 1 string to match.
    3830           0 :       if (memcmp(Name.data()+2, "ectorcall", 9) != 0)
    3831             :         break;
    3832           0 :       return ParsedAttr::AT_VectorCall;  // "_vectorcall"
    3833             :     }
    3834             :     break;
    3835             :   case 12:       // 3 strings to match.
    3836         113 :     if (memcmp(Name.data()+0, "__", 2) != 0)
    3837             :       break;
    3838             :     switch (Name[2]) {
    3839             :     default: break;
    3840             :     case 'r':    // 1 string to match.
    3841           3 :       if (memcmp(Name.data()+3, "ead_write", 9) != 0)
    3842             :         break;
    3843           3 :       return ParsedAttr::AT_OpenCLAccess;        // "__read_write"
    3844             :     case 'v':    // 1 string to match.
    3845         105 :       if (memcmp(Name.data()+3, "ectorcall", 9) != 0)
    3846             :         break;
    3847         105 :       return ParsedAttr::AT_VectorCall;  // "__vectorcall"
    3848             :     case 'w':    // 1 string to match.
    3849           5 :       if (memcmp(Name.data()+3, "rite_only", 9) != 0)
    3850             :         break;
    3851           5 :       return ParsedAttr::AT_OpenCLAccess;        // "__write_only"
    3852             :     }
    3853             :     break;
    3854             :   case 13:       // 1 string to match.
    3855          14 :     if (memcmp(Name.data()+0, "__forceinline", 13) != 0)
    3856             :       break;
    3857          14 :     return ParsedAttr::AT_AlwaysInline;  // "__forceinline"
    3858             :   case 17:       // 1 string to match.
    3859          32 :     if (memcmp(Name.data()+0, "_Null_unspecified", 17) != 0)
    3860             :       break;
    3861          32 :     return ParsedAttr::AT_TypeNullUnspecified;   // "_Null_unspecified"
    3862             :   case 19:       // 1 string to match.
    3863           0 :     if (memcmp(Name.data()+0, "__unsafe_unretained", 19) != 0)
    3864             :       break;
    3865           0 :     return ParsedAttr::AT_ObjCInertUnsafeUnretained;     // "__unsafe_unretained"
    3866             :   case 20:       // 1 string to match.
    3867          25 :     if (memcmp(Name.data()+0, "__single_inheritance", 20) != 0)
    3868             :       break;
    3869          25 :     return ParsedAttr::AT_MSInheritance;         // "__single_inheritance"
    3870             :   case 21:       // 1 string to match.
    3871          13 :     if (memcmp(Name.data()+0, "__virtual_inheritance", 21) != 0)
    3872             :       break;
    3873          13 :     return ParsedAttr::AT_MSInheritance;         // "__virtual_inheritance"
    3874             :   case 22:       // 1 string to match.
    3875          20 :     if (memcmp(Name.data()+0, "__multiple_inheritance", 22) != 0)
    3876             :       break;
    3877          20 :     return ParsedAttr::AT_MSInheritance;         // "__multiple_inheritance"
    3878             :   case 25:       // 1 string to match.
    3879           0 :     if (memcmp(Name.data()+0, "__unspecified_inheritance", 25) != 0)
    3880             :       break;
    3881           0 :     return ParsedAttr::AT_MSInheritance;         // "__unspecified_inheritance"
    3882             :   }
    3883         223 :   } else if (ParsedAttr::AS_Pragma == Syntax) {
    3884         223 :   switch (Name.size()) {
    3885             :   default: break;
    3886             :   case 4:        // 1 string to match.
    3887         168 :     if (memcmp(Name.data()+0, "loop", 4) != 0)
    3888             :       break;
    3889         168 :     return ParsedAttr::AT_LoopHint;      // "loop"
    3890             :   case 6:        // 1 string to match.
    3891          32 :     if (memcmp(Name.data()+0, "unroll", 6) != 0)
    3892             :       break;
    3893          32 :     return ParsedAttr::AT_LoopHint;      // "unroll"
    3894             :   case 8:        // 1 string to match.
    3895           8 :     if (memcmp(Name.data()+0, "nounroll", 8) != 0)
    3896             :       break;
    3897           8 :     return ParsedAttr::AT_LoopHint;      // "nounroll"
    3898             :   case 14:       // 1 string to match.
    3899           9 :     if (memcmp(Name.data()+0, "unroll_and_jam", 14) != 0)
    3900             :       break;
    3901           9 :     return ParsedAttr::AT_LoopHint;      // "unroll_and_jam"
    3902             :   case 16:       // 1 string to match.
    3903           6 :     if (memcmp(Name.data()+0, "nounroll_and_jam", 16) != 0)
    3904             :       break;
    3905           6 :     return ParsedAttr::AT_LoopHint;      // "nounroll_and_jam"
    3906             :   }
    3907             :   }
    3908             :   return ParsedAttr::UnknownAttribute;
    3909             : }

Generated by: LCOV version 1.13