blob: fd298f96c5ce37da39117374a97941da27f30cce [file] [log] [blame]
/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
|* *|
|*Attribute name matcher *|
|* *|
|* Automatically generated file, do not edit! *|
|* *|
\*===----------------------------------------------------------------------===*/
static AttributeList::Kind getAttrKind(StringRef Name, AttributeList::Syntax Syntax) {
if (AttributeList::AS_GNU == Syntax) {
switch (Name.size()) {
default: break;
case 3: // 2 strings to match.
switch (Name[0]) {
default: break;
case 'h': // 1 string to match.
if (memcmp(Name.data()+1, "ot", 2))
break;
return AttributeList::AT_Hot; // "hot"
case 'p': // 1 string to match.
if (memcmp(Name.data()+1, "cs", 2))
break;
return AttributeList::AT_Pcs; // "pcs"
}
break;
case 4: // 6 strings to match.
switch (Name[0]) {
default: break;
case 'c': // 1 string to match.
if (memcmp(Name.data()+1, "old", 3))
break;
return AttributeList::AT_Cold; // "cold"
case 'h': // 1 string to match.
if (memcmp(Name.data()+1, "ost", 3))
break;
return AttributeList::AT_CUDAHost; // "host"
case 'm': // 1 string to match.
if (memcmp(Name.data()+1, "ode", 3))
break;
return AttributeList::AT_Mode; // "mode"
case 'p': // 1 string to match.
if (memcmp(Name.data()+1, "ure", 3))
break;
return AttributeList::AT_Pure; // "pure"
case 'u': // 1 string to match.
if (memcmp(Name.data()+1, "sed", 3))
break;
return AttributeList::AT_Used; // "used"
case 'w': // 1 string to match.
if (memcmp(Name.data()+1, "eak", 3))
break;
return AttributeList::AT_Weak; // "weak"
}
break;
case 5: // 4 strings to match.
switch (Name[0]) {
default: break;
case 'a': // 1 string to match.
if (memcmp(Name.data()+1, "lias", 4))
break;
return AttributeList::AT_Alias; // "alias"
case 'c': // 2 strings to match.
switch (Name[1]) {
default: break;
case 'd': // 1 string to match.
if (memcmp(Name.data()+2, "ecl", 3))
break;
return AttributeList::AT_CDecl; // "cdecl"
case 'o': // 1 string to match.
if (memcmp(Name.data()+2, "nst", 3))
break;
return AttributeList::AT_Const; // "const"
}
break;
case 'n': // 1 string to match.
if (memcmp(Name.data()+1, "aked", 4))
break;
return AttributeList::AT_Naked; // "naked"
}
break;
case 6: // 12 strings to match.
switch (Name[0]) {
default: break;
case 'b': // 1 string to match.
if (memcmp(Name.data()+1, "locks", 5))
break;
return AttributeList::AT_Blocks; // "blocks"
case 'c': // 1 string to match.
if (memcmp(Name.data()+1, "ommon", 5))
break;
return AttributeList::AT_Common; // "common"
case 'd': // 1 string to match.
if (memcmp(Name.data()+1, "evice", 5))
break;
return AttributeList::AT_CUDADevice; // "device"
case 'f': // 1 string to match.
if (memcmp(Name.data()+1, "ormat", 5))
break;
return AttributeList::AT_Format; // "format"
case 'g': // 1 string to match.
if (memcmp(Name.data()+1, "lobal", 5))
break;
return AttributeList::AT_CUDAGlobal; // "global"
case 'm': // 3 strings to match.
switch (Name[1]) {
default: break;
case 'a': // 1 string to match.
if (memcmp(Name.data()+2, "lloc", 4))
break;
return AttributeList::AT_Malloc; // "malloc"
case 'i': // 1 string to match.
if (memcmp(Name.data()+2, "ps16", 4))
break;
return AttributeList::AT_Mips16; // "mips16"
case 's': // 1 string to match.
if (memcmp(Name.data()+2, "_abi", 4))
break;
return AttributeList::AT_MSABI; // "ms_abi"
}
break;
case 'p': // 2 strings to match.
if (Name[1] != 'a')
break;
switch (Name[2]) {
default: break;
case 'c': // 1 string to match.
if (memcmp(Name.data()+3, "ked", 3))
break;
return AttributeList::AT_Packed; // "packed"
case 's': // 1 string to match.
if (memcmp(Name.data()+3, "cal", 3))
break;
return AttributeList::AT_Pascal; // "pascal"
}
break;
case 's': // 1 string to match.
if (memcmp(Name.data()+1, "hared", 5))
break;
return AttributeList::AT_CUDAShared; // "shared"
case 'u': // 1 string to match.
if (memcmp(Name.data()+1, "nused", 5))
break;
return AttributeList::AT_Unused; // "unused"
}
break;
case 7: // 15 strings to match.
switch (Name[0]) {
default: break;
case '_': // 1 string to match.
if (memcmp(Name.data()+1, "_const", 6))
break;
return AttributeList::AT_Const; // "__const"
case 'a': // 1 string to match.
if (memcmp(Name.data()+1, "ligned", 6))
break;
return AttributeList::AT_Aligned; // "aligned"
case 'b': // 1 string to match.
if (memcmp(Name.data()+1, "ounded", 6))
break;
return AttributeList::IgnoredAttribute; // "bounded"
case 'c': // 1 string to match.
if (memcmp(Name.data()+1, "leanup", 6))
break;
return AttributeList::AT_Cleanup; // "cleanup"
case 'f': // 1 string to match.
if (memcmp(Name.data()+1, "latten", 6))
break;
return AttributeList::AT_Flatten; // "flatten"
case 'm': // 1 string to match.
if (memcmp(Name.data()+1, "insize", 6))
break;
return AttributeList::AT_MinSize; // "minsize"
case 'n': // 3 strings to match.
if (Name[1] != 'o')
break;
switch (Name[2]) {
default: break;
case 'd': // 1 string to match.
if (memcmp(Name.data()+3, "ebug", 4))
break;
return AttributeList::AT_NoDebug; // "nodebug"
case 'n': // 1 string to match.
if (memcmp(Name.data()+3, "null", 4))
break;
return AttributeList::AT_NonNull; // "nonnull"
case 't': // 1 string to match.
if (memcmp(Name.data()+3, "hrow", 4))
break;
return AttributeList::AT_NoThrow; // "nothrow"
}
break;
case 'o': // 2 strings to match.
switch (Name[1]) {
default: break;
case 'b': // 1 string to match.
if (memcmp(Name.data()+2, "jc_gc", 5))
break;
return AttributeList::AT_ObjCGC; // "objc_gc"
case 'p': // 1 string to match.
if (memcmp(Name.data()+2, "tnone", 5))
break;
return AttributeList::AT_OptimizeNone; // "optnone"
}
break;
case 'r': // 1 string to match.
if (memcmp(Name.data()+1, "egparm", 6))
break;
return AttributeList::AT_Regparm; // "regparm"
case 's': // 2 strings to match.
switch (Name[1]) {
default: break;
case 'e': // 1 string to match.
if (memcmp(Name.data()+2, "ction", 5))
break;
return AttributeList::AT_Section; // "section"
case 't': // 1 string to match.
if (memcmp(Name.data()+2, "dcall", 5))
break;
return AttributeList::AT_StdCall; // "stdcall"
}
break;
case 'w': // 1 string to match.
if (memcmp(Name.data()+1, "eakref", 6))
break;
return AttributeList::AT_WeakRef; // "weakref"
}
break;
case 8: // 14 strings to match.
switch (Name[0]) {
default: break;
case 'N': // 1 string to match.
if (memcmp(Name.data()+1, "SObject", 7))
break;
return AttributeList::AT_ObjCNSObject; // "NSObject"
case 'a': // 1 string to match.
if (memcmp(Name.data()+1, "nnotate", 7))
break;
return AttributeList::AT_Annotate; // "annotate"
case 'c': // 1 string to match.
if (memcmp(Name.data()+1, "onstant", 7))
break;
return AttributeList::AT_CUDAConstant; // "constant"
case 'f': // 1 string to match.
if (memcmp(Name.data()+1, "astcall", 7))
break;
return AttributeList::AT_FastCall; // "fastcall"
case 'i': // 2 strings to match.
if (Name[1] != 'b')
break;
switch (Name[2]) {
default: break;
case 'a': // 1 string to match.
if (memcmp(Name.data()+3, "ction", 5))
break;
return AttributeList::AT_IBAction; // "ibaction"
case 'o': // 1 string to match.
if (memcmp(Name.data()+3, "utlet", 5))
break;
return AttributeList::AT_IBOutlet; // "iboutlet"
}
break;
case 'l': // 1 string to match.
if (memcmp(Name.data()+1, "ockable", 7))
break;
return AttributeList::AT_Lockable; // "lockable"
case 'n': // 4 strings to match.
if (Name[1] != 'o')
break;
switch (Name[2]) {
default: break;
case 'c': // 1 string to match.
if (memcmp(Name.data()+3, "ommon", 5))
break;
return AttributeList::AT_NoCommon; // "nocommon"
case 'i': // 1 string to match.
if (memcmp(Name.data()+3, "nline", 5))
break;
return AttributeList::AT_NoInline; // "noinline"
case 'm': // 1 string to match.
if (memcmp(Name.data()+3, "ips16", 5))
break;
return AttributeList::AT_NoMips16; // "nomips16"
case 'r': // 1 string to match.
if (memcmp(Name.data()+3, "eturn", 5))
break;
return AttributeList::AT_NoReturn; // "noreturn"
}
break;
case 's': // 2 strings to match.
switch (Name[1]) {
default: break;
case 'e': // 1 string to match.
if (memcmp(Name.data()+2, "ntinel", 6))
break;
return AttributeList::AT_Sentinel; // "sentinel"
case 'y': // 1 string to match.
if (memcmp(Name.data()+2, "sv_abi", 6))
break;
return AttributeList::AT_SysVABI; // "sysv_abi"
}
break;
case 't': // 1 string to match.
if (memcmp(Name.data()+1, "hiscall", 7))
break;
return AttributeList::AT_ThisCall; // "thiscall"
}
break;
case 9: // 9 strings to match.
switch (Name[0]) {
default: break;
case 'd': // 2 strings to match.
if (memcmp(Name.data()+1, "ll", 2))
break;
switch (Name[3]) {
default: break;
case 'e': // 1 string to match.
if (memcmp(Name.data()+4, "xport", 5))
break;
return AttributeList::AT_DLLExport; // "dllexport"
case 'i': // 1 string to match.
if (memcmp(Name.data()+4, "mport", 5))
break;
return AttributeList::AT_DLLImport; // "dllimport"
}
break;
case 'e': // 1 string to match.
if (memcmp(Name.data()+1, "nable_if", 8))
break;
return AttributeList::AT_EnableIf; // "enable_if"
case 'i': // 1 string to match.
if (memcmp(Name.data()+1, "nterrupt", 8))
break;
return AttributeList::AT_Interrupt; // "interrupt"
case 'm': // 2 strings to match.
switch (Name[1]) {
default: break;
case 'a': // 1 string to match.
if (memcmp(Name.data()+2, "y_alias", 7))
break;
return AttributeList::AT_MayAlias; // "may_alias"
case 's': // 1 string to match.
if (memcmp(Name.data()+2, "_struct", 7))
break;
return AttributeList::AT_MsStruct; // "ms_struct"
}
break;
case 'p': // 1 string to match.
if (memcmp(Name.data()+1, "naclcall", 8))
break;
return AttributeList::AT_PnaclCall; // "pnaclcall"
case 't': // 1 string to match.
if (memcmp(Name.data()+1, "ls_model", 8))
break;
return AttributeList::AT_TLSModel; // "tls_model"
case 'v': // 1 string to match.
if (memcmp(Name.data()+1, "ecreturn", 8))
break;
return AttributeList::AT_VecReturn; // "vecreturn"
}
break;
case 10: // 8 strings to match.
switch (Name[0]) {
default: break;
case 'c': // 2 strings to match.
switch (Name[1]) {
default: break;
case 'a': // 1 string to match.
if (memcmp(Name.data()+2, "pability", 8))
break;
return AttributeList::AT_Capability; // "capability"
case 'o': // 1 string to match.
if (memcmp(Name.data()+2, "nsumable", 8))
break;
return AttributeList::AT_Consumable; // "consumable"
}
break;
case 'd': // 2 strings to match.
if (Name[1] != 'e')
break;
switch (Name[2]) {
default: break;
case 'p': // 1 string to match.
if (memcmp(Name.data()+3, "recated", 7))
break;
return AttributeList::AT_Deprecated; // "deprecated"
case 's': // 1 string to match.
if (memcmp(Name.data()+3, "tructor", 7))
break;
return AttributeList::AT_Destructor; // "destructor"
}
break;
case 'f': // 1 string to match.
if (memcmp(Name.data()+1, "ormat_arg", 9))
break;
return AttributeList::AT_FormatArg; // "format_arg"
case 'g': // 2 strings to match.
switch (Name[1]) {
default: break;
case 'n': // 1 string to match.
if (memcmp(Name.data()+2, "u_inline", 8))
break;
return AttributeList::AT_GNUInline; // "gnu_inline"
case 'u': // 1 string to match.
if (memcmp(Name.data()+2, "arded_by", 8))
break;
return AttributeList::AT_GuardedBy; // "guarded_by"
}
break;
case 'v': // 1 string to match.
if (memcmp(Name.data()+1, "isibility", 9))
break;
return AttributeList::AT_Visibility; // "visibility"
}
break;
case 11: // 10 strings to match.
switch (Name[0]) {
default: break;
case 'c': // 2 strings to match.
switch (Name[1]) {
default: break;
case 'f': // 1 string to match.
if (memcmp(Name.data()+2, "_consumed", 9))
break;
return AttributeList::AT_CFConsumed; // "cf_consumed"
case 'o': // 1 string to match.
if (memcmp(Name.data()+2, "nstructor", 9))
break;
return AttributeList::AT_Constructor; // "constructor"
}
break;
case 'g': // 1 string to match.
if (memcmp(Name.data()+1, "uarded_var", 10))
break;
return AttributeList::AT_GuardedVar; // "guarded_var"
case 'n': // 2 strings to match.
switch (Name[1]) {
default: break;
case 'o': // 1 string to match.
if (memcmp(Name.data()+2, "duplicate", 9))
break;
return AttributeList::AT_NoDuplicate; // "noduplicate"
case 's': // 1 string to match.
if (memcmp(Name.data()+2, "_consumed", 9))
break;
return AttributeList::AT_NSConsumed; // "ns_consumed"
}
break;
case 'o': // 1 string to match.
if (memcmp(Name.data()+1, "bjc_bridge", 10))
break;
return AttributeList::AT_ObjCBridge; // "objc_bridge"
case 'u': // 1 string to match.
if (memcmp(Name.data()+1, "navailable", 10))
break;
return AttributeList::AT_Unavailable; // "unavailable"
case 'v': // 1 string to match.
if (memcmp(Name.data()+1, "ector_size", 10))
break;
return AttributeList::AT_VectorSize; // "vector_size"
case 'w': // 2 strings to match.
switch (Name[1]) {
default: break;
case 'a': // 1 string to match.
if (memcmp(Name.data()+2, "rn_unused", 9))
break;
return AttributeList::AT_WarnUnused; // "warn_unused"
case 'e': // 1 string to match.
if (memcmp(Name.data()+2, "ak_import", 9))
break;
return AttributeList::AT_WeakImport; // "weak_import"
}
break;
}
break;
case 12: // 2 strings to match.
switch (Name[0]) {
default: break;
case 'a': // 1 string to match.
if (memcmp(Name.data()+1, "vailability", 11))
break;
return AttributeList::AT_Availability; // "availability"
case 'o': // 1 string to match.
if (memcmp(Name.data()+1, "verloadable", 11))
break;
return AttributeList::AT_Overloadable; // "overloadable"
}
break;
case 13: // 10 strings to match.
switch (Name[0]) {
default: break;
case 'a': // 2 strings to match.
switch (Name[1]) {
default: break;
case 'd': // 1 string to match.
if (memcmp(Name.data()+2, "dress_space", 11))
break;
return AttributeList::AT_AddressSpace; // "address_space"
case 'l': // 1 string to match.
if (memcmp(Name.data()+2, "ways_inline", 11))
break;
return AttributeList::AT_AlwaysInline; // "always_inline"
}
break;
case 'c': // 1 string to match.
if (memcmp(Name.data()+1, "allable_when", 12))
break;
return AttributeList::AT_CallableWhen; // "callable_when"
case 'i': // 1 string to match.
if (memcmp(Name.data()+1, "nit_priority", 12))
break;
return AttributeList::AT_InitPriority; // "init_priority"
case 'l': // 2 strings to match.
switch (Name[1]) {
default: break;
case 'a': // 1 string to match.
if (memcmp(Name.data()+2, "unch_bounds", 11))
break;
return AttributeList::AT_CUDALaunchBounds; // "launch_bounds"
case 'o': // 1 string to match.
if (memcmp(Name.data()+2, "ck_returned", 11))
break;
return AttributeList::AT_LockReturned; // "lock_returned"
}
break;
case 'p': // 1 string to match.
if (memcmp(Name.data()+1, "t_guarded_by", 12))
break;
return AttributeList::AT_PtGuardedBy; // "pt_guarded_by"
case 'r': // 1 string to match.
if (memcmp(Name.data()+1, "eturns_twice", 12))
break;
return AttributeList::AT_ReturnsTwice; // "returns_twice"
case 's': // 1 string to match.
if (memcmp(Name.data()+1, "et_typestate", 12))
break;
return AttributeList::AT_SetTypestate; // "set_typestate"
case 'v': // 1 string to match.
if (memcmp(Name.data()+1, "ec_type_hint", 12))
break;
return AttributeList::AT_VecTypeHint; // "vec_type_hint"
}
break;
case 14: // 8 strings to match.
switch (Name[0]) {
default: break;
case 'a': // 1 string to match.
if (memcmp(Name.data()+1, "cquired_after", 13))
break;
return AttributeList::AT_AcquiredAfter; // "acquired_after"
case 'i': // 1 string to match.
if (memcmp(Name.data()+1, "ntel_ocl_bicc", 13))
break;
return AttributeList::AT_IntelOclBicc; // "intel_ocl_bicc"
case 'l': // 1 string to match.
if (memcmp(Name.data()+1, "ocks_excluded", 13))
break;
return AttributeList::AT_LocksExcluded; // "locks_excluded"
case 'n': // 1 string to match.
if (memcmp(Name.data()+1, "o_split_stack", 13))
break;
return AttributeList::AT_NoSplitStack; // "no_split_stack"
case 'o': // 2 strings to match.
if (memcmp(Name.data()+1, "bjc_", 4))
break;
switch (Name[5]) {
default: break;
case 'e': // 1 string to match.
if (memcmp(Name.data()+6, "xception", 8))
break;
return AttributeList::AT_ObjCException; // "objc_exception"
case 'o': // 1 string to match.
if (memcmp(Name.data()+6, "wnership", 8))
break;
return AttributeList::AT_ObjCOwnership; // "objc_ownership"
}
break;
case 'p': // 1 string to match.
if (memcmp(Name.data()+1, "t_guarded_var", 13))
break;
return AttributeList::AT_PtGuardedVar; // "pt_guarded_var"
case 't': // 1 string to match.
if (memcmp(Name.data()+1, "est_typestate", 13))
break;
return AttributeList::AT_TestTypestate; // "test_typestate"
}
break;
case 15: // 10 strings to match.
switch (Name[0]) {
default: break;
case 'a': // 1 string to match.
if (memcmp(Name.data()+1, "cquired_before", 14))
break;
return AttributeList::AT_AcquiredBefore; // "acquired_before"
case 'e': // 1 string to match.
if (memcmp(Name.data()+1, "xt_vector_type", 14))
break;
return AttributeList::AT_ExtVectorType; // "ext_vector_type"
case 'o': // 3 strings to match.
switch (Name[1]) {
default: break;
case 'b': // 1 string to match.
if (memcmp(Name.data()+2, "jc_root_class", 13))
break;
return AttributeList::AT_ObjCRootClass; // "objc_root_class"
case 'w': // 2 strings to match.
if (memcmp(Name.data()+2, "nership_", 8))
break;
switch (Name[10]) {
default: break;
case 'h': // 1 string to match.
if (memcmp(Name.data()+11, "olds", 4))
break;
return AttributeList::AT_Ownership; // "ownership_holds"
case 't': // 1 string to match.
if (memcmp(Name.data()+11, "akes", 4))
break;
return AttributeList::AT_Ownership; // "ownership_takes"
}
break;
}
break;
case 'p': // 1 string to match.
if (memcmp(Name.data()+1, "aram_typestate", 14))
break;
return AttributeList::AT_ParamTypestate; // "param_typestate"
case 'r': // 1 string to match.
if (memcmp(Name.data()+1, "eturns_nonnull", 14))
break;
return AttributeList::AT_ReturnsNonNull; // "returns_nonnull"
case 's': // 1 string to match.
if (memcmp(Name.data()+1, "coped_lockable", 14))
break;
return AttributeList::AT_ScopedLockable; // "scoped_lockable"
case 't': // 1 string to match.
if (memcmp(Name.data()+1, "ype_visibility", 14))
break;
return AttributeList::AT_TypeVisibility; // "type_visibility"
case 'u': // 1 string to match.
if (memcmp(Name.data()+1, "nlock_function", 14))
break;
return AttributeList::AT_ReleaseCapability; // "unlock_function"
}
break;
case 16: // 3 strings to match.
switch (Name[0]) {
default: break;
case 'n': // 2 strings to match.
switch (Name[1]) {
default: break;
case 'e': // 1 string to match.
if (memcmp(Name.data()+2, "on_vector_type", 14))
break;
return AttributeList::AT_NeonVectorType; // "neon_vector_type"
case 's': // 1 string to match.
if (memcmp(Name.data()+2, "_consumes_self", 14))
break;
return AttributeList::AT_NSConsumesSelf; // "ns_consumes_self"
}
break;
case 'r': // 1 string to match.
if (memcmp(Name.data()+1, "eturn_typestate", 15))
break;
return AttributeList::AT_ReturnTypestate; // "return_typestate"
}
break;
case 17: // 6 strings to match.
switch (Name[0]) {
default: break;
case 'a': // 2 strings to match.
switch (Name[1]) {
default: break;
case 'n': // 1 string to match.
if (memcmp(Name.data()+2, "alyzer_noreturn", 15))
break;
return AttributeList::AT_AnalyzerNoReturn; // "analyzer_noreturn"
case 's': // 1 string to match.
if (memcmp(Name.data()+2, "sert_capability", 15))
break;
return AttributeList::AT_AssertCapability; // "assert_capability"
}
break;
case 'o': // 2 strings to match.
switch (Name[1]) {
default: break;
case 'b': // 1 string to match.
if (memcmp(Name.data()+2, "jc_runtime_name", 15))
break;
return AttributeList::AT_ObjCRuntimeName; // "objc_runtime_name"
case 'w': // 1 string to match.
if (memcmp(Name.data()+2, "nership_returns", 15))
break;
return AttributeList::AT_Ownership; // "ownership_returns"
}
break;
case 's': // 1 string to match.
if (memcmp(Name.data()+1, "hared_capability", 16))
break;
return AttributeList::AT_Capability; // "shared_capability"
case 't': // 1 string to match.
if (memcmp(Name.data()+1, "ransparent_union", 16))
break;
return AttributeList::AT_TransparentUnion; // "transparent_union"
}
break;
case 18: // 9 strings to match.
switch (Name[0]) {
default: break;
case 'a': // 2 strings to match.
switch (Name[1]) {
default: break;
case 'c': // 1 string to match.
if (memcmp(Name.data()+2, "quire_capability", 16))
break;
return AttributeList::AT_AcquireCapability; // "acquire_capability"
case 's': // 1 string to match.
if (memcmp(Name.data()+2, "sert_shared_lock", 16))
break;
return AttributeList::AT_AssertSharedLock; // "assert_shared_lock"
}
break;
case 'c': // 1 string to match.
if (memcmp(Name.data()+1, "arries_dependency", 17))
break;
return AttributeList::AT_CarriesDependency; // "carries_dependency"
case 'i': // 1 string to match.
if (memcmp(Name.data()+1, "boutletcollection", 17))
break;
return AttributeList::AT_IBOutletCollection; // "iboutletcollection"
case 'n': // 2 strings to match.
if (memcmp(Name.data()+1, "o_sanitize_", 11))
break;
switch (Name[12]) {
default: break;
case 'm': // 1 string to match.
if (memcmp(Name.data()+13, "emory", 5))
break;
return AttributeList::AT_NoSanitizeMemory; // "no_sanitize_memory"
case 't': // 1 string to match.
if (memcmp(Name.data()+13, "hread", 5))
break;
return AttributeList::AT_NoSanitizeThread; // "no_sanitize_thread"
}
break;
case 'o': // 1 string to match.
if (memcmp(Name.data()+1, "bjc_method_family", 17))
break;
return AttributeList::AT_ObjCMethodFamily; // "objc_method_family"
case 'r': // 1 string to match.
if (memcmp(Name.data()+1, "elease_capability", 17))
break;
return AttributeList::AT_ReleaseCapability; // "release_capability"
case 'w': // 1 string to match.
if (memcmp(Name.data()+1, "arn_unused_result", 17))
break;
return AttributeList::AT_WarnUnusedResult; // "warn_unused_result"
}
break;
case 19: // 9 strings to match.
switch (Name[0]) {
default: break;
case 'c': // 3 strings to match.
if (memcmp(Name.data()+1, "f_", 2))
break;
switch (Name[3]) {
default: break;
case 'a': // 1 string to match.
if (memcmp(Name.data()+4, "udited_transfer", 15))
break;
return AttributeList::AT_CFAuditedTransfer; // "cf_audited_transfer"
case 'r': // 1 string to match.
if (memcmp(Name.data()+4, "eturns_retained", 15))
break;
return AttributeList::AT_CFReturnsRetained; // "cf_returns_retained"
case 'u': // 1 string to match.
if (memcmp(Name.data()+4, "nknown_transfer", 15))
break;
return AttributeList::AT_CFUnknownTransfer; // "cf_unknown_transfer"
}
break;
case 'n': // 2 strings to match.
switch (Name[1]) {
default: break;
case 'o': // 1 string to match.
if (memcmp(Name.data()+2, "_sanitize_address", 17))
break;
return AttributeList::AT_NoSanitizeAddress; // "no_sanitize_address"
case 's': // 1 string to match.
if (memcmp(Name.data()+2, "_returns_retained", 17))
break;
return AttributeList::AT_NSReturnsRetained; // "ns_returns_retained"
}
break;
case 'o': // 3 strings to match.
if (memcmp(Name.data()+1, "bjc_", 4))
break;
switch (Name[5]) {
default: break;
case 'b': // 2 strings to match.
if (memcmp(Name.data()+6, "ridge_", 6))
break;
switch (Name[12]) {
default: break;
case 'm': // 1 string to match.
if (memcmp(Name.data()+13, "utable", 6))
break;
return AttributeList::AT_ObjCBridgeMutable; // "objc_bridge_mutable"
case 'r': // 1 string to match.
if (memcmp(Name.data()+13, "elated", 6))
break;
return AttributeList::AT_ObjCBridgeRelated; // "objc_bridge_related"
}
break;
case 'r': // 1 string to match.
if (memcmp(Name.data()+6, "equires_super", 13))
break;
return AttributeList::AT_ObjCRequiresSuper; // "objc_requires_super"
}
break;
case 'r': // 1 string to match.
if (memcmp(Name.data()+1, "equires_capability", 18))
break;
return AttributeList::AT_RequiresCapability; // "requires_capability"
}
break;
case 20: // 4 strings to match.
switch (Name[0]) {
default: break;
case 'n': // 1 string to match.
if (memcmp(Name.data()+1, "eon_polyvector_type", 19))
break;
return AttributeList::AT_NeonPolyVectorType; // "neon_polyvector_type"
case 'r': // 1 string to match.
if (memcmp(Name.data()+1, "eqd_work_group_size", 19))
break;
return AttributeList::AT_ReqdWorkGroupSize; // "reqd_work_group_size"
case 's': // 1 string to match.
if (memcmp(Name.data()+1, "hared_lock_function", 19))
break;
return AttributeList::AT_AcquireCapability; // "shared_lock_function"
case 'w': // 1 string to match.
if (memcmp(Name.data()+1, "ork_group_size_hint", 19))
break;
return AttributeList::AT_WorkGroupSizeHint; // "work_group_size_hint"
}
break;
case 21: // 5 strings to match.
switch (Name[0]) {
default: break;
case 'a': // 1 string to match.
if (memcmp(Name.data()+1, "ssert_exclusive_lock", 20))
break;
return AttributeList::AT_AssertExclusiveLock; // "assert_exclusive_lock"
case 'o': // 1 string to match.
if (memcmp(Name.data()+1, "bjc_precise_lifetime", 20))
break;
return AttributeList::AT_ObjCPreciseLifetime; // "objc_precise_lifetime"
case 'p': // 1 string to match.
if (memcmp(Name.data()+1, "ointer_with_type_tag", 20))
break;
return AttributeList::AT_ArgumentWithTypeTag; // "pointer_with_type_tag"
case 's': // 1 string to match.
if (memcmp(Name.data()+1, "hared_locks_required", 20))
break;
return AttributeList::AT_RequiresCapability; // "shared_locks_required"
case 't': // 1 string to match.
if (memcmp(Name.data()+1, "ype_tag_for_datatype", 20))
break;
return AttributeList::AT_TypeTagForDatatype; // "type_tag_for_datatype"
}
break;
case 22: // 3 strings to match.
switch (Name[0]) {
default: break;
case 'a': // 1 string to match.
if (memcmp(Name.data()+1, "rgument_with_type_tag", 21))
break;
return AttributeList::AT_ArgumentWithTypeTag; // "argument_with_type_tag"
case 'n': // 1 string to match.
if (memcmp(Name.data()+1, "o_instrument_function", 21))
break;
return AttributeList::AT_NoInstrumentFunction; // "no_instrument_function"
case 't': // 1 string to match.
if (memcmp(Name.data()+1, "ry_acquire_capability", 21))
break;
return AttributeList::AT_TryAcquireCapability; // "try_acquire_capability"
}
break;
case 23: // 6 strings to match.
switch (Name[0]) {
default: break;
case 'c': // 1 string to match.
if (memcmp(Name.data()+1, "f_returns_not_retained", 22))
break;
return AttributeList::AT_CFReturnsNotRetained; // "cf_returns_not_retained"
case 'e': // 1 string to match.
if (memcmp(Name.data()+1, "xclusive_lock_function", 22))
break;
return AttributeList::AT_AcquireCapability; // "exclusive_lock_function"
case 'f': // 1 string to match.
if (memcmp(Name.data()+1, "orce_align_arg_pointer", 22))
break;
return AttributeList::AT_X86ForceAlignArgPointer; // "force_align_arg_pointer"
case 'n': // 2 strings to match.
if (memcmp(Name.data()+1, "s_returns_", 10))
break;
switch (Name[11]) {
default: break;
case 'a': // 1 string to match.
if (memcmp(Name.data()+12, "utoreleased", 11))
break;
return AttributeList::AT_NSReturnsAutoreleased; // "ns_returns_autoreleased"
case 'n': // 1 string to match.
if (memcmp(Name.data()+12, "ot_retained", 11))
break;
return AttributeList::AT_NSReturnsNotRetained; // "ns_returns_not_retained"
}
break;
case 's': // 1 string to match.
if (memcmp(Name.data()+1, "hared_trylock_function", 22))
break;
return AttributeList::AT_SharedTrylockFunction; // "shared_trylock_function"
}
break;
case 24: // 2 strings to match.
switch (Name[0]) {
default: break;
case 'a': // 1 string to match.
if (memcmp(Name.data()+1, "ssert_shared_capability", 23))
break;
return AttributeList::AT_AssertCapability; // "assert_shared_capability"
case 'e': // 1 string to match.
if (memcmp(Name.data()+1, "xclusive_locks_required", 23))
break;
return AttributeList::AT_RequiresCapability; // "exclusive_locks_required"
}
break;
case 25: // 3 strings to match.
switch (Name[0]) {
default: break;
case 'a': // 1 string to match.
if (memcmp(Name.data()+1, "cquire_shared_capability", 24))
break;
return AttributeList::AT_AcquireCapability; // "acquire_shared_capability"
case 'n': // 1 string to match.
if (memcmp(Name.data()+1, "o_thread_safety_analysis", 24))
break;
return AttributeList::AT_NoThreadSafetyAnalysis; // "no_thread_safety_analysis"
case 'r': // 1 string to match.
if (memcmp(Name.data()+1, "elease_shared_capability", 24))
break;
return AttributeList::AT_ReleaseCapability; // "release_shared_capability"
}
break;
case 26: // 6 strings to match.
switch (Name[0]) {
default: break;
case 'c': // 1 string to match.
if (memcmp(Name.data()+1, "onsumable_auto_cast_state", 25))
break;
return AttributeList::AT_ConsumableAutoCast; // "consumable_auto_cast_state"
case 'e': // 1 string to match.
if (memcmp(Name.data()+1, "xclusive_trylock_function", 25))
break;
return AttributeList::AT_ExclusiveTrylockFunction; // "exclusive_trylock_function"
case 'n': // 1 string to match.
if (memcmp(Name.data()+1, "o_address_safety_analysis", 25))
break;
return AttributeList::AT_NoSanitizeAddress; // "no_address_safety_analysis"
case 'o': // 1 string to match.
if (memcmp(Name.data()+1, "bjc_returns_inner_pointer", 25))
break;
return AttributeList::AT_ObjCReturnsInnerPointer; // "objc_returns_inner_pointer"
case 'r': // 2 strings to match.
if (Name[1] != 'e')
break;
switch (Name[2]) {
default: break;
case 'l': // 1 string to match.
if (memcmp(Name.data()+3, "ease_generic_capability", 23))
break;
return AttributeList::AT_ReleaseCapability; // "release_generic_capability"
case 'q': // 1 string to match.
if (memcmp(Name.data()+3, "uires_shared_capability", 23))
break;
return AttributeList::AT_RequiresCapability; // "requires_shared_capability"
}
break;
}
break;
case 27: // 1 string to match.
if (memcmp(Name.data()+0, "objc_designated_initializer", 27))
break;
return AttributeList::AT_ObjCDesignatedInitializer; // "objc_designated_initializer"
case 28: // 1 string to match.
if (memcmp(Name.data()+0, "consumable_set_state_on_read", 28))
break;
return AttributeList::AT_ConsumableSetOnRead; // "consumable_set_state_on_read"
case 29: // 1 string to match.
if (memcmp(Name.data()+0, "try_acquire_shared_capability", 29))
break;
return AttributeList::AT_TryAcquireCapability; // "try_acquire_shared_capability"
case 34: // 1 string to match.
if (memcmp(Name.data()+0, "objc_requires_property_definitions", 34))
break;
return AttributeList::AT_ObjCRequiresPropertyDefs; // "objc_requires_property_definitions"
case 35: // 1 string to match.
if (memcmp(Name.data()+0, "objc_arc_weak_reference_unavailable", 35))
break;
return AttributeList::AT_ArcWeakrefUnavailable; // "objc_arc_weak_reference_unavailable"
case 46: // 1 string to match.
if (memcmp(Name.data()+0, "objc_protocol_requires_explicit_implementation", 46))
break;
return AttributeList::AT_ObjCExplicitProtocolImpl; // "objc_protocol_requires_explicit_implementation"
}
} else if (AttributeList::AS_Declspec == Syntax) {
switch (Name.size()) {
default: break;
case 4: // 1 string to match.
if (memcmp(Name.data()+0, "uuid", 4))
break;
return AttributeList::AT_Uuid; // "uuid"
case 5: // 2 strings to match.
switch (Name[0]) {
default: break;
case 'a': // 1 string to match.
if (memcmp(Name.data()+1, "lign", 4))
break;
return AttributeList::AT_Aligned; // "align"
case 'n': // 1 string to match.
if (memcmp(Name.data()+1, "aked", 4))
break;
return AttributeList::AT_Naked; // "naked"
}
break;
case 6: // 1 string to match.
if (memcmp(Name.data()+0, "thread", 6))
break;
return AttributeList::AT_Thread; // "thread"
case 7: // 1 string to match.
if (memcmp(Name.data()+0, "nothrow", 7))
break;
return AttributeList::AT_NoThrow; // "nothrow"
case 8: // 4 strings to match.
switch (Name[0]) {
default: break;
case 'a': // 1 string to match.
if (memcmp(Name.data()+1, "llocate", 7))
break;
return AttributeList::AT_Section; // "allocate"
case 'n': // 2 strings to match.
if (Name[1] != 'o')
break;
switch (Name[2]) {
default: break;
case 'i': // 1 string to match.
if (memcmp(Name.data()+3, "nline", 5))
break;
return AttributeList::AT_NoInline; // "noinline"
case 'r': // 1 string to match.
if (memcmp(Name.data()+3, "eturn", 5))
break;
return AttributeList::AT_NoReturn; // "noreturn"
}
break;
case 'p': // 1 string to match.
if (memcmp(Name.data()+1, "roperty", 7))
break;
return AttributeList::IgnoredAttribute; // "property"
}
break;
case 9: // 3 strings to match.
switch (Name[0]) {
default: break;
case 'd': // 2 strings to match.
if (memcmp(Name.data()+1, "ll", 2))
break;
switch (Name[3]) {
default: break;
case 'e': // 1 string to match.
if (memcmp(Name.data()+4, "xport", 5))
break;
return AttributeList::AT_DLLExport; // "dllexport"
case 'i': // 1 string to match.
if (memcmp(Name.data()+4, "mport", 5))
break;
return AttributeList::AT_DLLImport; // "dllimport"
}
break;
case 's': // 1 string to match.
if (memcmp(Name.data()+1, "electany", 8))
break;
return AttributeList::AT_SelectAny; // "selectany"
}
break;
case 10: // 1 string to match.
if (memcmp(Name.data()+0, "deprecated", 10))
break;
return AttributeList::AT_Deprecated; // "deprecated"
}
} else if (AttributeList::AS_CXX11 == Syntax) {
switch (Name.size()) {
default: break;
case 8: // 2 strings to match.
if (memcmp(Name.data()+0, "gnu::", 5))
break;
switch (Name[5]) {
default: break;
case 'h': // 1 string to match.
if (memcmp(Name.data()+6, "ot", 2))
break;
return AttributeList::AT_Hot; // "gnu::hot"
case 'p': // 1 string to match.
if (memcmp(Name.data()+6, "cs", 2))
break;
return AttributeList::AT_Pcs; // "gnu::pcs"
}
break;
case 9: // 5 strings to match.
if (memcmp(Name.data()+0, "gnu::", 5))
break;
switch (Name[5]) {
default: break;
case 'c': // 1 string to match.
if (memcmp(Name.data()+6, "old", 3))
break;
return AttributeList::AT_Cold; // "gnu::cold"
case 'm': // 1 string to match.
if (memcmp(Name.data()+6, "ode", 3))
break;
return AttributeList::AT_Mode; // "gnu::mode"
case 'p': // 1 string to match.
if (memcmp(Name.data()+6, "ure", 3))
break;
return AttributeList::AT_Pure; // "gnu::pure"
case 'u': // 1 string to match.
if (memcmp(Name.data()+6, "sed", 3))
break;
return AttributeList::AT_Used; // "gnu::used"
case 'w': // 1 string to match.
if (memcmp(Name.data()+6, "eak", 3))
break;
return AttributeList::AT_Weak; // "gnu::weak"
}
break;
case 10: // 5 strings to match.
switch (Name[0]) {
default: break;
case ':': // 1 string to match.
if (memcmp(Name.data()+1, ":noreturn", 9))
break;
return AttributeList::AT_CXX11NoReturn; // "::noreturn"
case 'g': // 4 strings to match.
if (memcmp(Name.data()+1, "nu::", 4))
break;
switch (Name[5]) {
default: break;
case 'a': // 1 string to match.
if (memcmp(Name.data()+6, "lias", 4))
break;
return AttributeList::AT_Alias; // "gnu::alias"
case 'c': // 2 strings to match.
switch (Name[6]) {
default: break;
case 'd': // 1 string to match.
if (memcmp(Name.data()+7, "ecl", 3))
break;
return AttributeList::AT_CDecl; // "gnu::cdecl"
case 'o': // 1 string to match.
if (memcmp(Name.data()+7, "nst", 3))
break;
return AttributeList::AT_Const; // "gnu::const"
}
break;
case 'n': // 1 string to match.
if (memcmp(Name.data()+6, "aked", 4))
break;
return AttributeList::AT_Naked; // "gnu::naked"
}
break;
}
break;
case 11: // 7 strings to match.
if (memcmp(Name.data()+0, "gnu::", 5))
break;
switch (Name[5]) {
default: break;
case 'c': // 1 string to match.
if (memcmp(Name.data()+6, "ommon", 5))
break;
return AttributeList::AT_Common; // "gnu::common"
case 'f': // 1 string to match.
if (memcmp(Name.data()+6, "ormat", 5))
break;
return AttributeList::AT_Format; // "gnu::format"
case 'm': // 3 strings to match.
switch (Name[6]) {
default: break;
case 'a': // 1 string to match.
if (memcmp(Name.data()+7, "lloc", 4))
break;
return AttributeList::AT_Malloc; // "gnu::malloc"
case 'i': // 1 string to match.
if (memcmp(Name.data()+7, "ps16", 4))
break;
return AttributeList::AT_Mips16; // "gnu::mips16"
case 's': // 1 string to match.
if (memcmp(Name.data()+7, "_abi", 4))
break;
return AttributeList::AT_MSABI; // "gnu::ms_abi"
}
break;
case 'p': // 1 string to match.
if (memcmp(Name.data()+6, "acked", 5))
break;
return AttributeList::AT_Packed; // "gnu::packed"
case 'u': // 1 string to match.
if (memcmp(Name.data()+6, "nused", 5))
break;
return AttributeList::AT_Unused; // "gnu::unused"
}
break;
case 12: // 11 strings to match.
switch (Name[0]) {
default: break;
case ':': // 1 string to match.
if (memcmp(Name.data()+1, ":deprecated", 11))
break;
return AttributeList::AT_Deprecated; // "::deprecated"
case 'g': // 10 strings to match.
if (memcmp(Name.data()+1, "nu::", 4))
break;
switch (Name[5]) {
default: break;
case '_': // 1 string to match.
if (memcmp(Name.data()+6, "_const", 6))
break;
return AttributeList::AT_Const; // "gnu::__const"
case 'a': // 1 string to match.
if (memcmp(Name.data()+6, "ligned", 6))
break;
return AttributeList::AT_Aligned; // "gnu::aligned"
case 'c': // 1 string to match.
if (memcmp(Name.data()+6, "leanup", 6))
break;
return AttributeList::AT_Cleanup; // "gnu::cleanup"
case 'f': // 1 string to match.
if (memcmp(Name.data()+6, "latten", 6))
break;
return AttributeList::AT_Flatten; // "gnu::flatten"
case 'n': // 2 strings to match.
if (Name[6] != 'o')
break;
switch (Name[7]) {
default: break;
case 'n': // 1 string to match.
if (memcmp(Name.data()+8, "null", 4))
break;
return AttributeList::AT_NonNull; // "gnu::nonnull"
case 't': // 1 string to match.
if (memcmp(Name.data()+8, "hrow", 4))
break;
return AttributeList::AT_NoThrow; // "gnu::nothrow"
}
break;
case 'r': // 1 string to match.
if (memcmp(Name.data()+6, "egparm", 6))
break;
return AttributeList::AT_Regparm; // "gnu::regparm"
case 's': // 2 strings to match.
switch (Name[6]) {
default: break;
case 'e': // 1 string to match.
if (memcmp(Name.data()+7, "ction", 5))
break;
return AttributeList::AT_Section; // "gnu::section"
case 't': // 1 string to match.
if (memcmp(Name.data()+7, "dcall", 5))
break;
return AttributeList::AT_StdCall; // "gnu::stdcall"
}
break;
case 'w': // 1 string to match.
if (memcmp(Name.data()+6, "eakref", 6))
break;
return AttributeList::AT_WeakRef; // "gnu::weakref"
}
break;
}
break;
case 13: // 8 strings to match.
if (memcmp(Name.data()+0, "gnu::", 5))
break;
switch (Name[5]) {
default: break;
case 'f': // 1 string to match.
if (memcmp(Name.data()+6, "astcall", 7))
break;
return AttributeList::AT_FastCall; // "gnu::fastcall"
case 'n': // 4 strings to match.
if (Name[6] != 'o')
break;
switch (Name[7]) {
default: break;
case 'c': // 1 string to match.
if (memcmp(Name.data()+8, "ommon", 5))
break;
return AttributeList::AT_NoCommon; // "gnu::nocommon"
case 'i': // 1 string to match.
if (memcmp(Name.data()+8, "nline", 5))
break;
return AttributeList::AT_NoInline; // "gnu::noinline"
case 'm': // 1 string to match.
if (memcmp(Name.data()+8, "ips16", 5))
break;
return AttributeList::AT_NoMips16; // "gnu::nomips16"
case 'r': // 1 string to match.
if (memcmp(Name.data()+8, "eturn", 5))
break;
return AttributeList::AT_NoReturn; // "gnu::noreturn"
}
break;
case 's': // 2 strings to match.
switch (Name[6]) {
default: break;
case 'e': // 1 string to match.
if (memcmp(Name.data()+7, "ntinel", 6))
break;
return AttributeList::AT_Sentinel; // "gnu::sentinel"
case 'y': // 1 string to match.
if (memcmp(Name.data()+7, "sv_abi", 6))
break;
return AttributeList::AT_SysVABI; // "gnu::sysv_abi"
}
break;
case 't': // 1 string to match.
if (memcmp(Name.data()+6, "hiscall", 7))
break;
return AttributeList::AT_ThisCall; // "gnu::thiscall"
}
break;
case 14: // 6 strings to match.
switch (Name[0]) {
default: break;
case 'c': // 1 string to match.
if (memcmp(Name.data()+1, "lang::optnone", 13))
break;
return AttributeList::AT_OptimizeNone; // "clang::optnone"
case 'g': // 5 strings to match.
if (memcmp(Name.data()+1, "nu::", 4))
break;
switch (Name[5]) {
default: break;
case 'd': // 2 strings to match.
if (memcmp(Name.data()+6, "ll", 2))
break;
switch (Name[8]) {
default: break;
case 'e': // 1 string to match.
if (memcmp(Name.data()+9, "xport", 5))
break;
return AttributeList::AT_DLLExport; // "gnu::dllexport"
case 'i': // 1 string to match.
if (memcmp(Name.data()+9, "mport", 5))
break;
return AttributeList::AT_DLLImport; // "gnu::dllimport"
}
break;
case 'm': // 2 strings to match.
switch (Name[6]) {
default: break;
case 'a': // 1 string to match.
if (memcmp(Name.data()+7, "y_alias", 7))
break;
return AttributeList::AT_MayAlias; // "gnu::may_alias"
case 's': // 1 string to match.
if (memcmp(Name.data()+7, "_struct", 7))
break;
return AttributeList::AT_MsStruct; // "gnu::ms_struct"
}
break;
case 't': // 1 string to match.
if (memcmp(Name.data()+6, "ls_model", 8))
break;
return AttributeList::AT_TLSModel; // "gnu::tls_model"
}
break;
}
break;
case 15: // 5 strings to match.
if (memcmp(Name.data()+0, "gnu::", 5))
break;
switch (Name[5]) {
default: break;
case 'd': // 2 strings to match.
if (Name[6] != 'e')
break;
switch (Name[7]) {
default: break;
case 'p': // 1 string to match.
if (memcmp(Name.data()+8, "recated", 7))
break;
return AttributeList::AT_Deprecated; // "gnu::deprecated"
case 's': // 1 string to match.
if (memcmp(Name.data()+8, "tructor", 7))
break;
return AttributeList::AT_Destructor; // "gnu::destructor"
}
break;
case 'f': // 1 string to match.
if (memcmp(Name.data()+6, "ormat_arg", 9))
break;
return AttributeList::AT_FormatArg; // "gnu::format_arg"
case 'g': // 1 string to match.
if (memcmp(Name.data()+6, "nu_inline", 9))
break;
return AttributeList::AT_GNUInline; // "gnu::gnu_inline"
case 'v': // 1 string to match.
if (memcmp(Name.data()+6, "isibility", 9))
break;
return AttributeList::AT_Visibility; // "gnu::visibility"
}
break;
case 16: // 2 strings to match.
if (memcmp(Name.data()+0, "gnu::", 5))
break;
switch (Name[5]) {
default: break;
case 'c': // 1 string to match.
if (memcmp(Name.data()+6, "onstructor", 10))
break;
return AttributeList::AT_Constructor; // "gnu::constructor"
case 'v': // 1 string to match.
if (memcmp(Name.data()+6, "ector_size", 10))
break;
return AttributeList::AT_VectorSize; // "gnu::vector_size"
}
break;
case 17: // 1 string to match.
if (memcmp(Name.data()+0, "clang::capability", 17))
break;
return AttributeList::AT_Capability; // "clang::capability"
case 18: // 4 strings to match.
switch (Name[0]) {
default: break;
case 'c': // 2 strings to match.
if (memcmp(Name.data()+1, "lang::", 6))
break;
switch (Name[7]) {
default: break;
case 'f': // 1 string to match.
if (memcmp(Name.data()+8, "allthrough", 10))
break;
return AttributeList::AT_FallThrough; // "clang::fallthrough"
case 'n': // 1 string to match.
if (memcmp(Name.data()+8, "oduplicate", 10))
break;
return AttributeList::AT_NoDuplicate; // "clang::noduplicate"
}
break;
case 'g': // 2 strings to match.
if (memcmp(Name.data()+1, "nu::", 4))
break;
switch (Name[5]) {
default: break;
case 'a': // 1 string to match.
if (memcmp(Name.data()+6, "lways_inline", 12))
break;
return AttributeList::AT_AlwaysInline; // "gnu::always_inline"
case 'r': // 1 string to match.
if (memcmp(Name.data()+6, "eturns_twice", 12))
break;
return AttributeList::AT_ReturnsTwice; // "gnu::returns_twice"
}
break;
}
break;
case 19: // 1 string to match.
if (memcmp(Name.data()+0, "gnu::no_split_stack", 19))
break;
return AttributeList::AT_NoSplitStack; // "gnu::no_split_stack"
case 20: // 2 strings to match.
switch (Name[0]) {
default: break;
case ':': // 1 string to match.
if (memcmp(Name.data()+1, ":carries_dependency", 19))
break;
return AttributeList::AT_CarriesDependency; // "::carries_dependency"
case 'g': // 1 string to match.
if (memcmp(Name.data()+1, "nu::returns_nonnull", 19))
break;
return AttributeList::AT_ReturnsNonNull; // "gnu::returns_nonnull"
}
break;
case 22: // 2 strings to match.
switch (Name[0]) {
default: break;
case 'c': // 1 string to match.
if (memcmp(Name.data()+1, "lang::type_visibility", 21))
break;
return AttributeList::AT_TypeVisibility; // "clang::type_visibility"
case 'g': // 1 string to match.
if (memcmp(Name.data()+1, "nu::transparent_union", 21))
break;
return AttributeList::AT_TransparentUnion; // "gnu::transparent_union"
}
break;
case 23: // 1 string to match.
if (memcmp(Name.data()+0, "gnu::warn_unused_result", 23))
break;
return AttributeList::AT_WarnUnusedResult; // "gnu::warn_unused_result"
case 24: // 3 strings to match.
switch (Name[0]) {
default: break;
case 'c': // 2 strings to match.
if (memcmp(Name.data()+1, "lang::", 6))
break;
switch (Name[7]) {
default: break;
case 'a': // 1 string to match.
if (memcmp(Name.data()+8, "ssert_capability", 16))
break;
return AttributeList::AT_AssertCapability; // "clang::assert_capability"
case 's': // 1 string to match.
if (memcmp(Name.data()+8, "hared_capability", 16))
break;
return AttributeList::AT_Capability; // "clang::shared_capability"
}
break;
case 'g': // 1 string to match.
if (memcmp(Name.data()+1, "nu::no_sanitize_address", 23))
break;
return AttributeList::AT_NoSanitizeAddress; // "gnu::no_sanitize_address"
}
break;
case 25: // 3 strings to match.
if (memcmp(Name.data()+0, "clang::", 7))
break;
switch (Name[7]) {
default: break;
case 'a': // 1 string to match.
if (memcmp(Name.data()+8, "cquire_capability", 17))
break;
return AttributeList::AT_AcquireCapability; // "clang::acquire_capability"
case 'r': // 1 string to match.
if (memcmp(Name.data()+8, "elease_capability", 17))
break;
return AttributeList::AT_ReleaseCapability; // "clang::release_capability"
case 'w': // 1 string to match.
if (memcmp(Name.data()+8, "arn_unused_result", 17))
break;
return AttributeList::AT_WarnUnusedResult; // "clang::warn_unused_result"
}
break;
case 26: // 1 string to match.
if (memcmp(Name.data()+0, "clang::requires_capability", 26))
break;
return AttributeList::AT_RequiresCapability; // "clang::requires_capability"
case 27: // 1 string to match.
if (memcmp(Name.data()+0, "gnu::no_instrument_function", 27))
break;
return AttributeList::AT_NoInstrumentFunction; // "gnu::no_instrument_function"
case 29: // 1 string to match.
if (memcmp(Name.data()+0, "clang::try_acquire_capability", 29))
break;
return AttributeList::AT_TryAcquireCapability; // "clang::try_acquire_capability"
case 31: // 2 strings to match.
switch (Name[0]) {
default: break;
case 'c': // 1 string to match.
if (memcmp(Name.data()+1, "lang::assert_shared_capability", 30))
break;
return AttributeList::AT_AssertCapability; // "clang::assert_shared_capability"
case 'g': // 1 string to match.
if (memcmp(Name.data()+1, "nu::no_address_safety_analysis", 30))
break;
return AttributeList::AT_NoSanitizeAddress; // "gnu::no_address_safety_analysis"
}
break;
case 32: // 2 strings to match.
if (memcmp(Name.data()+0, "clang::", 7))
break;
switch (Name[7]) {
default: break;
case 'a': // 1 string to match.
if (memcmp(Name.data()+8, "cquire_shared_capability", 24))
break;
return AttributeList::AT_AcquireCapability; // "clang::acquire_shared_capability"
case 'r': // 1 string to match.
if (memcmp(Name.data()+8, "elease_shared_capability", 24))
break;
return AttributeList::AT_ReleaseCapability; // "clang::release_shared_capability"
}
break;
case 33: // 2 strings to match.
if (memcmp(Name.data()+0, "clang::re", 9))
break;
switch (Name[9]) {
default: break;
case 'l': // 1 string to match.
if (memcmp(Name.data()+10, "ease_generic_capability", 23))
break;
return AttributeList::AT_ReleaseCapability; // "clang::release_generic_capability"
case 'q': // 1 string to match.
if (memcmp(Name.data()+10, "uires_shared_capability", 23))
break;
return AttributeList::AT_RequiresCapability; // "clang::requires_shared_capability"
}
break;
case 36: // 1 string to match.
if (memcmp(Name.data()+0, "clang::try_acquire_shared_capability", 36))
break;
return AttributeList::AT_TryAcquireCapability; // "clang::try_acquire_shared_capability"
}
} else if (AttributeList::AS_Keyword == Syntax) {
switch (Name.size()) {
default: break;
case 5: // 2 strings to match.
switch (Name[0]) {
default: break;
case '_': // 1 string to match.
if (memcmp(Name.data()+1, "_w64", 4))
break;
return AttributeList::IgnoredAttribute; // "__w64"
case 'l': // 1 string to match.
if (memcmp(Name.data()+1, "ocal", 4))
break;
return AttributeList::AT_OpenCLLocalAddressSpace; // "local"
}
break;
case 6: // 5 strings to match.
switch (Name[0]) {
default: break;
case '_': // 3 strings to match.
switch (Name[1]) {
default: break;
case '_': // 2 strings to match.
switch (Name[2]) {
default: break;
case 's': // 1 string to match.
if (memcmp(Name.data()+3, "ptr", 3))
break;
return AttributeList::AT_SPtr; // "__sptr"
case 'u': // 1 string to match.
if (memcmp(Name.data()+3, "ptr", 3))
break;
return AttributeList::AT_UPtr; // "__uptr"
}
break;
case 'c': // 1 string to match.
if (memcmp(Name.data()+2, "decl", 4))
break;
return AttributeList::AT_CDecl; // "_cdecl"
}
break;
case 'g': // 1 string to match.
if (memcmp(Name.data()+1, "lobal", 5))
break;
return AttributeList::AT_OpenCLGlobalAddressSpace; // "global"
case 'k': // 1 string to match.
if (memcmp(Name.data()+1, "ernel", 5))
break;
return AttributeList::AT_OpenCLKernel; // "kernel"
}
break;
case 7: // 7 strings to match.
switch (Name[0]) {
default: break;
case '_': // 5 strings to match.
switch (Name[1]) {
default: break;
case '_': // 4 strings to match.
switch (Name[2]) {
default: break;
case 'c': // 1 string to match.
if (memcmp(Name.data()+3, "decl", 4))
break;
return AttributeList::AT_CDecl; // "__cdecl"
case 'l': // 1 string to match.
if (memcmp(Name.data()+3, "ocal", 4))
break;
return AttributeList::AT_OpenCLLocalAddressSpace; // "__local"
case 'p': // 2 strings to match.
if (memcmp(Name.data()+3, "tr", 2))
break;
switch (Name[5]) {
default: break;
case '3': // 1 string to match.
if (Name[6] != '2')
break;
return AttributeList::AT_Ptr32; // "__ptr32"
case '6': // 1 string to match.
if (Name[6] != '4')
break;
return AttributeList::AT_Ptr64; // "__ptr64"
}
break;
}
break;
case 'p': // 1 string to match.
if (memcmp(Name.data()+2, "ascal", 5))
break;
return AttributeList::AT_Pascal; // "_pascal"
}
break;
case 'a': // 1 string to match.
if (memcmp(Name.data()+1, "lignas", 6))
break;
return AttributeList::AT_Aligned; // "alignas"
case 'p': // 1 string to match.
if (memcmp(Name.data()+1, "rivate", 6))
break;
return AttributeList::AT_OpenCLPrivateAddressSpace; // "private"
}
break;
case 8: // 6 strings to match.
switch (Name[0]) {
default: break;
case '_': // 5 strings to match.
switch (Name[1]) {
default: break;
case 'A': // 1 string to match.
if (memcmp(Name.data()+2, "lignas", 6))
break;
return AttributeList::AT_Aligned; // "_Alignas"
case '_': // 3 strings to match.
switch (Name[2]) {
default: break;
case 'g': // 1 string to match.
if (memcmp(Name.data()+3, "lobal", 5))
break;
return AttributeList::AT_OpenCLGlobalAddressSpace; // "__global"
case 'k': // 1 string to match.
if (memcmp(Name.data()+3, "ernel", 5))
break;
return AttributeList::AT_OpenCLKernel; // "__kernel"
case 'p': // 1 string to match.
if (memcmp(Name.data()+3, "ascal", 5))
break;
return AttributeList::AT_Pascal; // "__pascal"
}
break;
case 's': // 1 string to match.
if (memcmp(Name.data()+2, "tdcall", 6))
break;
return AttributeList::AT_StdCall; // "_stdcall"
}
break;
case 'c': // 1 string to match.
if (memcmp(Name.data()+1, "onstant", 7))
break;
return AttributeList::AT_OpenCLConstantAddressSpace; // "constant"
}
break;
case 9: // 5 strings to match.
switch (Name[0]) {
default: break;
case '_': // 4 strings to match.
switch (Name[1]) {
default: break;
case '_': // 2 strings to match.
switch (Name[2]) {
default: break;
case 'p': // 1 string to match.
if (memcmp(Name.data()+3, "rivate", 6))
break;
return AttributeList::AT_OpenCLPrivateAddressSpace; // "__private"
case 's': // 1 string to match.
if (memcmp(Name.data()+3, "tdcall", 6))
break;
return AttributeList::AT_StdCall; // "__stdcall"
}
break;
case 'f': // 1 string to match.
if (memcmp(Name.data()+2, "astcall", 7))
break;
return AttributeList::AT_FastCall; // "_fastcall"
case 't': // 1 string to match.
if (memcmp(Name.data()+2, "hiscall", 7))
break;
return AttributeList::AT_ThisCall; // "_thiscall"
}
break;
case 'r': // 1 string to match.
if (memcmp(Name.data()+1, "ead_only", 8))
break;
return AttributeList::AT_OpenCLImageAccess; // "read_only"
}
break;
case 10: // 5 strings to match.
switch (Name[0]) {
default: break;
case '_': // 3 strings to match.
if (Name[1] != '_')
break;
switch (Name[2]) {
default: break;
case 'c': // 1 string to match.
if (memcmp(Name.data()+3, "onstant", 7))
break;
return AttributeList::AT_OpenCLConstantAddressSpace; // "__constant"
case 'f': // 1 string to match.
if (memcmp(Name.data()+3, "astcall", 7))
break;
return AttributeList::AT_FastCall; // "__fastcall"
case 't': // 1 string to match.
if (memcmp(Name.data()+3, "hiscall", 7))
break;
return AttributeList::AT_ThisCall; // "__thiscall"
}
break;
case 'r': // 1 string to match.
if (memcmp(Name.data()+1, "ead_write", 9))
break;
return AttributeList::AT_OpenCLImageAccess; // "read_write"
case 'w': // 1 string to match.
if (memcmp(Name.data()+1, "rite_only", 9))
break;
return AttributeList::AT_OpenCLImageAccess; // "write_only"
}
break;
case 11: // 2 strings to match.
if (memcmp(Name.data()+0, "__", 2))
break;
switch (Name[2]) {
default: break;
case 'r': // 1 string to match.
if (memcmp(Name.data()+3, "ead_only", 8))
break;
return AttributeList::AT_OpenCLImageAccess; // "__read_only"
case 'u': // 1 string to match.
if (memcmp(Name.data()+3, "naligned", 8))
break;
return AttributeList::IgnoredAttribute; // "__unaligned"
}
break;
case 12: // 2 strings to match.
if (memcmp(Name.data()+0, "__", 2))
break;
switch (Name[2]) {
default: break;
case 'r': // 1 string to match.
if (memcmp(Name.data()+3, "ead_write", 9))
break;
return AttributeList::AT_OpenCLImageAccess; // "__read_write"
case 'w': // 1 string to match.
if (memcmp(Name.data()+3, "rite_only", 9))
break;
return AttributeList::AT_OpenCLImageAccess; // "__write_only"
}
break;
case 13: // 1 string to match.
if (memcmp(Name.data()+0, "__forceinline", 13))
break;
return AttributeList::AT_AlwaysInline; // "__forceinline"
case 20: // 1 string to match.
if (memcmp(Name.data()+0, "__single_inheritance", 20))
break;
return AttributeList::AT_MSInheritance; // "__single_inheritance"
case 21: // 1 string to match.
if (memcmp(Name.data()+0, "__virtual_inheritance", 21))
break;
return AttributeList::AT_MSInheritance; // "__virtual_inheritance"
case 22: // 1 string to match.
if (memcmp(Name.data()+0, "__multiple_inheritance", 22))
break;
return AttributeList::AT_MSInheritance; // "__multiple_inheritance"
case 25: // 1 string to match.
if (memcmp(Name.data()+0, "__unspecified_inheritance", 25))
break;
return AttributeList::AT_MSInheritance; // "__unspecified_inheritance"
}
} else if (AttributeList::AS_Pragma == Syntax) {
switch (Name.size()) {
default: break;
case 4: // 1 string to match.
if (memcmp(Name.data()+0, "loop", 4))
break;
return AttributeList::AT_LoopHint; // "loop"
case 6: // 1 string to match.
if (memcmp(Name.data()+0, "unroll", 6))
break;
return AttributeList::AT_LoopHint; // "unroll"
}
}
return AttributeList::UnknownAttribute;
}