+public:
+ enum AttrVal {
+ None = 0, ///< No attributes have been set
+ ZExt = 1, ///< Zero extended before/after call
+ SExt = 2, ///< Sign extended before/after call
+ NoReturn = 3, ///< Mark the function as not returning
+ InReg = 4, ///< Force argument to be passed in register
+ StructRet = 5, ///< Hidden pointer to structure to return
+ NoUnwind = 6, ///< Function doesn't unwind stack
+ NoAlias = 7, ///< Considered to not alias after call
+ ByVal = 8, ///< Pass structure by value
+ Nest = 9, ///< Nested function static chain
+ ReadNone = 10, ///< Function does not access memory
+ ReadOnly = 11, ///< Function only reads from memory
+ NoInline = 12, ///< inline=never
+ AlwaysInline = 13, ///< inline=always
+ OptimizeForSize = 14, ///< opt_size
+ StackProtect = 15, ///< Stack protection.
+ StackProtectReq = 16, ///< Stack protection required.
+ Alignment = 17, ///< Alignment of parameter (5 bits)
+ ///< stored as log2 of alignment with +1 bias
+ ///< 0 means unaligned different from align 1
+ NoCapture = 18, ///< Function creates no aliases of pointer
+ NoRedZone = 19, ///< Disable redzone
+ NoImplicitFloat = 20, ///< Disable implicit floating point insts
+ Naked = 21, ///< Naked function
+ InlineHint = 22, ///< Source said inlining was desirable
+ StackAlignment = 23, ///< Alignment of stack for function (3 bits)
+ ///< stored as log2 of alignment with +1 bias 0
+ ///< means unaligned (different from
+ ///< alignstack={1))
+ ReturnsTwice = 24, ///< Function can return twice
+ UWTable = 25, ///< Function must be in a unwind table
+ NonLazyBind = 26, ///< Function is called early and/or
+ ///< often, so lazy binding isn't worthwhile
+ AddressSafety = 27 ///< Address safety checking is on.
+ };
+private: