Created
May 6, 2011 18:24
-
-
Save ngabel/959484 to your computer and use it in GitHub Desktop.
snippets from GCC; reserved and keyword definitions
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
void | |
c_stddef_cpp_builtins(void) | |
{ | |
builtin_define_with_value ("__SIZE_TYPE__", SIZE_TYPE, 0); | |
builtin_define_with_value ("__PTRDIFF_TYPE__", PTRDIFF_TYPE, 0); | |
builtin_define_with_value ("__WCHAR_TYPE__", MODIFIED_WCHAR_TYPE, 0); | |
builtin_define_with_value ("__WINT_TYPE__", WINT_TYPE, 0); | |
builtin_define_with_value ("__INTMAX_TYPE__", INTMAX_TYPE, 0); | |
builtin_define_with_value ("__UINTMAX_TYPE__", UINTMAX_TYPE, 0); | |
builtin_define_with_value ("__CHAR16_TYPE__", CHAR16_TYPE, 0); | |
builtin_define_with_value ("__CHAR32_TYPE__", CHAR32_TYPE, 0); | |
if (SIG_ATOMIC_TYPE) | |
builtin_define_with_value ("__SIG_ATOMIC_TYPE__", SIG_ATOMIC_TYPE, 0); | |
if (INT8_TYPE) | |
builtin_define_with_value ("__INT8_TYPE__", INT8_TYPE, 0); | |
if (INT16_TYPE) | |
builtin_define_with_value ("__INT16_TYPE__", INT16_TYPE, 0); | |
if (INT32_TYPE) | |
builtin_define_with_value ("__INT32_TYPE__", INT32_TYPE, 0); | |
if (INT64_TYPE) | |
builtin_define_with_value ("__INT64_TYPE__", INT64_TYPE, 0); | |
if (UINT8_TYPE) | |
builtin_define_with_value ("__UINT8_TYPE__", UINT8_TYPE, 0); | |
if (UINT16_TYPE) | |
builtin_define_with_value ("__UINT16_TYPE__", UINT16_TYPE, 0); | |
if (UINT32_TYPE) | |
builtin_define_with_value ("__UINT32_TYPE__", UINT32_TYPE, 0); | |
if (UINT64_TYPE) | |
builtin_define_with_value ("__UINT64_TYPE__", UINT64_TYPE, 0); | |
if (INT_LEAST8_TYPE) | |
builtin_define_with_value ("__INT_LEAST8_TYPE__", INT_LEAST8_TYPE, 0); | |
if (INT_LEAST16_TYPE) | |
builtin_define_with_value ("__INT_LEAST16_TYPE__", INT_LEAST16_TYPE, 0); | |
if (INT_LEAST32_TYPE) | |
builtin_define_with_value ("__INT_LEAST32_TYPE__", INT_LEAST32_TYPE, 0); | |
if (INT_LEAST64_TYPE) | |
builtin_define_with_value ("__INT_LEAST64_TYPE__", INT_LEAST64_TYPE, 0); | |
if (UINT_LEAST8_TYPE) | |
builtin_define_with_value ("__UINT_LEAST8_TYPE__", UINT_LEAST8_TYPE, 0); | |
if (UINT_LEAST16_TYPE) | |
builtin_define_with_value ("__UINT_LEAST16_TYPE__", UINT_LEAST16_TYPE, 0); | |
if (UINT_LEAST32_TYPE) | |
builtin_define_with_value ("__UINT_LEAST32_TYPE__", UINT_LEAST32_TYPE, 0); | |
if (UINT_LEAST64_TYPE) | |
builtin_define_with_value ("__UINT_LEAST64_TYPE__", UINT_LEAST64_TYPE, 0); | |
if (INT_FAST8_TYPE) | |
builtin_define_with_value ("__INT_FAST8_TYPE__", INT_FAST8_TYPE, 0); | |
if (INT_FAST16_TYPE) | |
builtin_define_with_value ("__INT_FAST16_TYPE__", INT_FAST16_TYPE, 0); | |
if (INT_FAST32_TYPE) | |
builtin_define_with_value ("__INT_FAST32_TYPE__", INT_FAST32_TYPE, 0); | |
if (INT_FAST64_TYPE) | |
builtin_define_with_value ("__INT_FAST64_TYPE__", INT_FAST64_TYPE, 0); | |
if (UINT_FAST8_TYPE) | |
builtin_define_with_value ("__UINT_FAST8_TYPE__", UINT_FAST8_TYPE, 0); | |
if (UINT_FAST16_TYPE) | |
builtin_define_with_value ("__UINT_FAST16_TYPE__", UINT_FAST16_TYPE, 0); | |
if (UINT_FAST32_TYPE) | |
builtin_define_with_value ("__UINT_FAST32_TYPE__", UINT_FAST32_TYPE, 0); | |
if (UINT_FAST64_TYPE) | |
builtin_define_with_value ("__UINT_FAST64_TYPE__", UINT_FAST64_TYPE, 0); | |
if (INTPTR_TYPE) | |
builtin_define_with_value ("__INTPTR_TYPE__", INTPTR_TYPE, 0); | |
if (UINTPTR_TYPE) | |
builtin_define_with_value ("__UINTPTR_TYPE__", UINTPTR_TYPE, 0); | |
} | |
/* Reserved words. The third field is a mask: keywords are disabled | |
if they match the mask. | |
Masks for languages: | |
C --std=c89: D_C99 | D_CXXONLY | D_OBJC | D_CXX_OBJC | |
C --std=c99: D_CXXONLY | D_OBJC | |
ObjC is like C except that D_OBJC and D_CXX_OBJC are not set | |
C++ --std=c98: D_CONLY | D_CXXOX | D_OBJC | |
C++ --std=c0x: D_CONLY | D_OBJC | |
ObjC++ is like C++ except that D_OBJC is not set | |
If -fno-asm is used, D_ASM is added to the mask. If | |
-fno-gnu-keywords is used, D_EXT is added. If -fno-asm and C in | |
C89 mode, D_EXT89 is added for both -fno-asm and -fno-gnu-keywords. | |
In C with -Wc++-compat, we warn if D_CXXWARN is set. | |
Note the complication of the D_CXX_OBJC keywords. These are | |
reserved words such as 'class'. In C++, 'class' is a reserved | |
word. In Objective-C++ it is too. In Objective-C, it is a | |
reserved word too, but only if it follows an '@' sign. | |
*/ | |
const struct c_common_resword c_common_reswords[] = | |
{ | |
{ "_Bool", RID_BOOL, D_CONLY }, | |
{ "_Complex", RID_COMPLEX, 0 }, | |
{ "_Imaginary", RID_IMAGINARY, D_CONLY }, | |
{ "_Decimal32", RID_DFLOAT32, D_CONLY | D_EXT }, | |
{ "_Decimal64", RID_DFLOAT64, D_CONLY | D_EXT }, | |
{ "_Decimal128", RID_DFLOAT128, D_CONLY | D_EXT }, | |
{ "_Fract", RID_FRACT, D_CONLY | D_EXT }, | |
{ "_Accum", RID_ACCUM, D_CONLY | D_EXT }, | |
{ "_Sat", RID_SAT, D_CONLY | D_EXT }, | |
{ "_Static_assert", RID_STATIC_ASSERT, D_CONLY }, | |
{ "__FUNCTION__", RID_FUNCTION_NAME, 0 }, | |
{ "__PRETTY_FUNCTION__", RID_PRETTY_FUNCTION_NAME, 0 }, | |
{ "__alignof", RID_ALIGNOF, 0 }, | |
{ "__alignof__", RID_ALIGNOF, 0 }, | |
{ "__asm", RID_ASM, 0 }, | |
{ "__asm__", RID_ASM, 0 }, | |
{ "__attribute", RID_ATTRIBUTE, 0 }, | |
{ "__attribute__", RID_ATTRIBUTE, 0 }, | |
{ "__builtin_choose_expr", RID_CHOOSE_EXPR, D_CONLY }, | |
{ "__builtin_offsetof", RID_OFFSETOF, 0 }, | |
{ "__builtin_types_compatible_p", RID_TYPES_COMPATIBLE_P, D_CONLY }, | |
{ "__builtin_va_arg", RID_VA_ARG, 0 }, | |
{ "__complex", RID_COMPLEX, 0 }, | |
{ "__complex__", RID_COMPLEX, 0 }, | |
{ "__const", RID_CONST, 0 }, | |
{ "__const__", RID_CONST, 0 }, | |
{ "__decltype", RID_DECLTYPE, D_CXXONLY }, | |
{ "__extension__", RID_EXTENSION, 0 }, | |
{ "__func__", RID_C99_FUNCTION_NAME, 0 }, | |
{ "__has_nothrow_assign", RID_HAS_NOTHROW_ASSIGN, D_CXXONLY }, | |
{ "__has_nothrow_constructor", RID_HAS_NOTHROW_CONSTRUCTOR, D_CXXONLY }, | |
{ "__has_nothrow_copy", RID_HAS_NOTHROW_COPY, D_CXXONLY }, | |
{ "__has_trivial_assign", RID_HAS_TRIVIAL_ASSIGN, D_CXXONLY }, | |
{ "__has_trivial_constructor", RID_HAS_TRIVIAL_CONSTRUCTOR, D_CXXONLY }, | |
{ "__has_trivial_copy", RID_HAS_TRIVIAL_COPY, D_CXXONLY }, | |
{ "__has_trivial_destructor", RID_HAS_TRIVIAL_DESTRUCTOR, D_CXXONLY }, | |
{ "__has_virtual_destructor", RID_HAS_VIRTUAL_DESTRUCTOR, D_CXXONLY }, | |
{ "__int128", RID_INT128, 0 }, | |
{ "__is_abstract", RID_IS_ABSTRACT, D_CXXONLY }, | |
{ "__is_base_of", RID_IS_BASE_OF, D_CXXONLY }, | |
{ "__is_class", RID_IS_CLASS, D_CXXONLY }, | |
{ "__is_convertible_to", RID_IS_CONVERTIBLE_TO, D_CXXONLY }, | |
{ "__is_empty", RID_IS_EMPTY, D_CXXONLY }, | |
{ "__is_enum", RID_IS_ENUM, D_CXXONLY }, | |
{ "__is_pod", RID_IS_POD, D_CXXONLY }, | |
{ "__is_polymorphic", RID_IS_POLYMORPHIC, D_CXXONLY }, | |
{ "__is_standard_layout", RID_IS_STD_LAYOUT, D_CXXONLY }, | |
{ "__is_trivial", RID_IS_TRIVIAL, D_CXXONLY }, | |
{ "__is_union", RID_IS_UNION, D_CXXONLY }, | |
{ "__is_literal_type", RID_IS_LITERAL_TYPE, D_CXXONLY }, | |
{ "__underlying_type", RID_UNDERLYING_TYPE, D_CXXONLY }, | |
{ "__imag", RID_IMAGPART, 0 }, | |
{ "__imag__", RID_IMAGPART, 0 }, | |
{ "__inline", RID_INLINE, 0 }, | |
{ "__inline__", RID_INLINE, 0 }, | |
{ "__label__", RID_LABEL, 0 }, | |
{ "__null", RID_NULL, 0 }, | |
{ "__real", RID_REALPART, 0 }, | |
{ "__real__", RID_REALPART, 0 }, | |
{ "__restrict", RID_RESTRICT, 0 }, | |
{ "__restrict__", RID_RESTRICT, 0 }, | |
{ "__signed", RID_SIGNED, 0 }, | |
{ "__signed__", RID_SIGNED, 0 }, | |
{ "__thread", RID_THREAD, 0 }, | |
{ "__typeof", RID_TYPEOF, 0 }, | |
{ "__typeof__", RID_TYPEOF, 0 }, | |
{ "__volatile", RID_VOLATILE, 0 }, | |
{ "__volatile__", RID_VOLATILE, 0 }, | |
{ "alignof", RID_ALIGNOF, D_CXXONLY | D_CXX0X | D_CXXWARN }, | |
{ "asm", RID_ASM, D_ASM }, | |
{ "auto", RID_AUTO, 0 }, | |
{ "bool", RID_BOOL, D_CXXONLY | D_CXXWARN }, | |
{ "break", RID_BREAK, 0 }, | |
{ "case", RID_CASE, 0 }, | |
{ "catch", RID_CATCH, D_CXX_OBJC | D_CXXWARN }, | |
{ "char", RID_CHAR, 0 }, | |
{ "char16_t", RID_CHAR16, D_CXXONLY | D_CXX0X | D_CXXWARN }, | |
{ "char32_t", RID_CHAR32, D_CXXONLY | D_CXX0X | D_CXXWARN }, | |
{ "class", RID_CLASS, D_CXX_OBJC | D_CXXWARN }, | |
{ "const", RID_CONST, 0 }, | |
{ "constexpr", RID_CONSTEXPR, D_CXXONLY | D_CXX0X | D_CXXWARN }, | |
{ "const_cast", RID_CONSTCAST, D_CXXONLY | D_CXXWARN }, | |
{ "continue", RID_CONTINUE, 0 }, | |
{ "decltype", RID_DECLTYPE, D_CXXONLY | D_CXX0X | D_CXXWARN }, | |
{ "default", RID_DEFAULT, 0 }, | |
{ "delete", RID_DELETE, D_CXXONLY | D_CXXWARN }, | |
{ "do", RID_DO, 0 }, | |
{ "double", RID_DOUBLE, 0 }, | |
{ "dynamic_cast", RID_DYNCAST, D_CXXONLY | D_CXXWARN }, | |
{ "else", RID_ELSE, 0 }, | |
{ "enum", RID_ENUM, 0 }, | |
{ "explicit", RID_EXPLICIT, D_CXXONLY | D_CXXWARN }, | |
{ "export", RID_EXPORT, D_CXXONLY | D_CXXWARN }, | |
{ "extern", RID_EXTERN, 0 }, | |
{ "false", RID_FALSE, D_CXXONLY | D_CXXWARN }, | |
{ "float", RID_FLOAT, 0 }, | |
{ "for", RID_FOR, 0 }, | |
{ "friend", RID_FRIEND, D_CXXONLY | D_CXXWARN }, | |
{ "goto", RID_GOTO, 0 }, | |
{ "if", RID_IF, 0 }, | |
{ "inline", RID_INLINE, D_EXT89 }, | |
{ "int", RID_INT, 0 }, | |
{ "long", RID_LONG, 0 }, | |
{ "mutable", RID_MUTABLE, D_CXXONLY | D_CXXWARN }, | |
{ "namespace", RID_NAMESPACE, D_CXXONLY | D_CXXWARN }, | |
{ "new", RID_NEW, D_CXXONLY | D_CXXWARN }, | |
{ "noexcept", RID_NOEXCEPT, D_CXXONLY | D_CXX0X | D_CXXWARN }, | |
{ "nullptr", RID_NULLPTR, D_CXXONLY | D_CXX0X | D_CXXWARN }, | |
{ "operator", RID_OPERATOR, D_CXXONLY | D_CXXWARN }, | |
{ "private", RID_PRIVATE, D_CXX_OBJC | D_CXXWARN }, | |
{ "protected", RID_PROTECTED, D_CXX_OBJC | D_CXXWARN }, | |
{ "public", RID_PUBLIC, D_CXX_OBJC | D_CXXWARN }, | |
{ "register", RID_REGISTER, 0 }, | |
{ "reinterpret_cast", RID_REINTCAST, D_CXXONLY | D_CXXWARN }, | |
{ "restrict", RID_RESTRICT, D_CONLY | D_C99 }, | |
{ "return", RID_RETURN, 0 }, | |
{ "short", RID_SHORT, 0 }, | |
{ "signed", RID_SIGNED, 0 }, | |
{ "sizeof", RID_SIZEOF, 0 }, | |
{ "static", RID_STATIC, 0 }, | |
{ "static_assert", RID_STATIC_ASSERT, D_CXXONLY | D_CXX0X | D_CXXWARN }, | |
{ "static_cast", RID_STATCAST, D_CXXONLY | D_CXXWARN }, | |
{ "struct", RID_STRUCT, 0 }, | |
{ "switch", RID_SWITCH, 0 }, | |
{ "template", RID_TEMPLATE, D_CXXONLY | D_CXXWARN }, | |
{ "this", RID_THIS, D_CXXONLY | D_CXXWARN }, | |
{ "throw", RID_THROW, D_CXX_OBJC | D_CXXWARN }, | |
{ "true", RID_TRUE, D_CXXONLY | D_CXXWARN }, | |
{ "try", RID_TRY, D_CXX_OBJC | D_CXXWARN }, | |
{ "typedef", RID_TYPEDEF, 0 }, | |
{ "typename", RID_TYPENAME, D_CXXONLY | D_CXXWARN }, | |
{ "typeid", RID_TYPEID, D_CXXONLY | D_CXXWARN }, | |
{ "typeof", RID_TYPEOF, D_ASM | D_EXT }, | |
{ "union", RID_UNION, 0 }, | |
{ "unsigned", RID_UNSIGNED, 0 }, | |
{ "using", RID_USING, D_CXXONLY | D_CXXWARN }, | |
{ "virtual", RID_VIRTUAL, D_CXXONLY | D_CXXWARN }, | |
{ "void", RID_VOID, 0 }, | |
{ "volatile", RID_VOLATILE, 0 }, | |
{ "wchar_t", RID_WCHAR, D_CXXONLY }, | |
{ "while", RID_WHILE, 0 }, | |
/* These Objective-C keywords are recognized only immediately after | |
an '@'. */ | |
{ "compatibility_alias", RID_AT_ALIAS, D_OBJC }, | |
{ "defs", RID_AT_DEFS, D_OBJC }, | |
{ "encode", RID_AT_ENCODE, D_OBJC }, | |
{ "end", RID_AT_END, D_OBJC }, | |
{ "implementation", RID_AT_IMPLEMENTATION, D_OBJC }, | |
{ "interface", RID_AT_INTERFACE, D_OBJC }, | |
{ "protocol", RID_AT_PROTOCOL, D_OBJC }, | |
{ "selector", RID_AT_SELECTOR, D_OBJC }, | |
{ "finally", RID_AT_FINALLY, D_OBJC }, | |
{ "synchronized", RID_AT_SYNCHRONIZED, D_OBJC }, | |
{ "optional", RID_AT_OPTIONAL, D_OBJC }, | |
{ "required", RID_AT_REQUIRED, D_OBJC }, | |
{ "property", RID_AT_PROPERTY, D_OBJC }, | |
{ "package", RID_AT_PACKAGE, D_OBJC }, | |
{ "synthesize", RID_AT_SYNTHESIZE, D_OBJC }, | |
{ "dynamic", RID_AT_DYNAMIC, D_OBJC }, | |
/* These are recognized only in protocol-qualifier context | |
(see above) */ | |
{ "bycopy", RID_BYCOPY, D_OBJC }, | |
{ "byref", RID_BYREF, D_OBJC }, | |
{ "in", RID_IN, D_OBJC }, | |
{ "inout", RID_INOUT, D_OBJC }, | |
{ "oneway", RID_ONEWAY, D_OBJC }, | |
{ "out", RID_OUT, D_OBJC }, | |
/* These are recognized inside a property attribute list */ | |
{ "assign", RID_ASSIGN, D_OBJC }, | |
{ "copy", RID_COPY, D_OBJC }, | |
{ "getter", RID_GETTER, D_OBJC }, | |
{ "nonatomic", RID_NONATOMIC, D_OBJC }, | |
{ "readonly", RID_READONLY, D_OBJC }, | |
{ "readwrite", RID_READWRITE, D_OBJC }, | |
{ "retain", RID_RETAIN, D_OBJC }, | |
{ "setter", RID_SETTER, D_OBJC }, | |
}; | |
const unsigned int num_c_common_reswords = | |
sizeof c_common_reswords / sizeof (struct c_common_resword); | |
/* Table of machine-independent attributes common to all C-like languages. */ | |
const struct attribute_spec c_common_attribute_table[] = | |
{ | |
/* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler, | |
affects_type_identity } */ | |
{ "packed", 0, 0, false, false, false, | |
handle_packed_attribute , false}, | |
{ "nocommon", 0, 0, true, false, false, | |
handle_nocommon_attribute, false}, | |
{ "common", 0, 0, true, false, false, | |
handle_common_attribute, false }, | |
/* FIXME: logically, noreturn attributes should be listed as | |
"false, true, true" and apply to function types. But implementing this | |
would require all the places in the compiler that use TREE_THIS_VOLATILE | |
on a decl to identify non-returning functions to be located and fixed | |
to check the function type instead. */ | |
{ "noreturn", 0, 0, true, false, false, | |
handle_noreturn_attribute, false }, | |
{ "volatile", 0, 0, true, false, false, | |
handle_noreturn_attribute, false }, | |
{ "noinline", 0, 0, true, false, false, | |
handle_noinline_attribute, false }, | |
{ "noclone", 0, 0, true, false, false, | |
handle_noclone_attribute, false }, | |
{ "leaf", 0, 0, true, false, false, | |
handle_leaf_attribute, false }, | |
{ "always_inline", 0, 0, true, false, false, | |
handle_always_inline_attribute, false }, | |
{ "gnu_inline", 0, 0, true, false, false, | |
handle_gnu_inline_attribute, false }, | |
{ "artificial", 0, 0, true, false, false, | |
handle_artificial_attribute, false }, | |
{ "flatten", 0, 0, true, false, false, | |
handle_flatten_attribute, false }, | |
{ "used", 0, 0, true, false, false, | |
handle_used_attribute, false }, | |
{ "unused", 0, 0, false, false, false, | |
handle_unused_attribute, false }, | |
{ "externally_visible", 0, 0, true, false, false, | |
handle_externally_visible_attribute, false }, | |
/* The same comments as for noreturn attributes apply to const ones. */ | |
{ "const", 0, 0, true, false, false, | |
handle_const_attribute, false }, | |
{ "transparent_union", 0, 0, false, false, false, | |
handle_transparent_union_attribute, false }, | |
{ "constructor", 0, 1, true, false, false, | |
handle_constructor_attribute, false }, | |
{ "destructor", 0, 1, true, false, false, | |
handle_destructor_attribute, false }, | |
{ "mode", 1, 1, false, true, false, | |
handle_mode_attribute, false }, | |
{ "section", 1, 1, true, false, false, | |
handle_section_attribute, false }, | |
{ "aligned", 0, 1, false, false, false, | |
handle_aligned_attribute, false }, | |
{ "weak", 0, 0, true, false, false, | |
handle_weak_attribute, false }, | |
{ "ifunc", 1, 1, true, false, false, | |
handle_ifunc_attribute, false }, | |
{ "alias", 1, 1, true, false, false, | |
handle_alias_attribute, false }, | |
{ "weakref", 0, 1, true, false, false, | |
handle_weakref_attribute, false }, | |
{ "no_instrument_function", 0, 0, true, false, false, | |
handle_no_instrument_function_attribute, | |
false }, | |
{ "malloc", 0, 0, true, false, false, | |
handle_malloc_attribute, false }, | |
{ "returns_twice", 0, 0, true, false, false, | |
handle_returns_twice_attribute, false }, | |
{ "no_stack_limit", 0, 0, true, false, false, | |
handle_no_limit_stack_attribute, false }, | |
{ "pure", 0, 0, true, false, false, | |
handle_pure_attribute, false }, | |
/* For internal use (marking of builtins) only. The name contains space | |
to prevent its usage in source code. */ | |
{ "no vops", 0, 0, true, false, false, | |
handle_novops_attribute, false }, | |
{ "deprecated", 0, 1, false, false, false, | |
handle_deprecated_attribute, false }, | |
{ "vector_size", 1, 1, false, true, false, | |
handle_vector_size_attribute, false }, | |
{ "visibility", 1, 1, false, false, false, | |
handle_visibility_attribute, false }, | |
{ "tls_model", 1, 1, true, false, false, | |
handle_tls_model_attribute, false }, | |
{ "nonnull", 0, -1, false, true, true, | |
handle_nonnull_attribute, false }, | |
{ "nothrow", 0, 0, true, false, false, | |
handle_nothrow_attribute, false }, | |
{ "may_alias", 0, 0, false, true, false, NULL, false }, | |
{ "cleanup", 1, 1, true, false, false, | |
handle_cleanup_attribute, false }, | |
{ "warn_unused_result", 0, 0, false, true, true, | |
handle_warn_unused_result_attribute, false }, | |
{ "sentinel", 0, 1, false, true, true, | |
handle_sentinel_attribute, false }, | |
/* For internal use (marking of builtins) only. The name contains space | |
to prevent its usage in source code. */ | |
{ "type generic", 0, 0, false, true, true, | |
handle_type_generic_attribute, false }, | |
{ "alloc_size", 1, 2, false, true, true, | |
handle_alloc_size_attribute, false }, | |
{ "cold", 0, 0, true, false, false, | |
handle_cold_attribute, false }, | |
{ "hot", 0, 0, true, false, false, | |
handle_hot_attribute, false }, | |
{ "warning", 1, 1, true, false, false, | |
handle_error_attribute, false }, | |
{ "error", 1, 1, true, false, false, | |
handle_error_attribute, false }, | |
{ "target", 1, -1, true, false, false, | |
handle_target_attribute, false }, | |
{ "optimize", 1, -1, true, false, false, | |
handle_optimize_attribute, false }, | |
{ "no_split_stack", 0, 0, true, false, false, | |
handle_no_split_stack_attribute, false }, | |
/* For internal use (marking of builtins and runtime functions) only. | |
The name contains space to prevent its usage in source code. */ | |
{ "fn spec", 1, 1, false, true, true, | |
handle_fnspec_attribute, false }, | |
{ NULL, 0, 0, false, false, false, NULL, false } | |
}; | |
/* Give the specifications for the format attributes, used by C and all | |
descendants. */ | |
const struct attribute_spec c_common_format_attribute_table[] = | |
{ | |
/* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler, | |
affects_type_identity } */ | |
{ "format", 3, 3, false, true, true, | |
handle_format_attribute, false }, | |
{ "format_arg", 1, 1, false, true, true, | |
handle_format_arg_attribute, false }, | |
{ NULL, 0, 0, false, false, false, NULL, false } | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment