PR c/81544 - attribute noreturn and warn_unused_result on the same function accepted
gcc/ChangeLog:
PR c/81544
* config/alpha/alpha.c (vms_attribute_table): Initialize new member
of struct attribute_spec.
* config/arm/arm.c (arm_attribute_table): Same.
* config/avr/avr.c ( avr_attribute_table): Same.
* config/bfin/bfin.c (bfin_attribute_table): Same.
* config/cr16/cr16.c (cr16_attribute_table): Same.
* config/epiphany/epiphany.c (epiphany_attribute_table): Same.
* config/h8300/h8300.c (h8300_attribute_table): Same.
* config/i386/i386.c (ix86_attribute_table): Same.
* config/ia64/ia64.c (ia64_attribute_table): Same.
* config/m32c/m32c.c (m32c_attribute_table): Same.
* config/m32r/m32r.c (m32r_attribute_table): Same.
* config/m68k/m68k.c (m68k_attribute_table): Same.
* config/mcore/mcore.c (mcore_attribute_table): Same.
* config/mips/mips.c (mips_attribute_table): Same.
* config/nds32/nds32.c (nds32_attribute_table): Same.
* config/nvptx/nvptx.c (nvptx_attribute_table): Same.
* config/powerpcspe/powerpcspe.c (rs6000_attribute_table): Same.
* config/rs6000/rs6000.c (rs6000_attribute_table): Same.
* config/s390/s390.c (s390_handle_vectorbool_attribute): Same.
* config/sh/sh.c (sh_attribute_table): Same.
* config/sparc/sparc.c (sparc_attribute_table): Same.
* config/spu/spu.c (spu_attribute_table): Same.
* config/stormy16/stormy16.c (xstormy16_attribute_table): Same.
* config/v850/v850.c (v850_attribute_table): Same.
* config/visium/visium.c (visium_attribute_table): Same.
gcc/ada/ChangeLog:
PR c/81544
* gcc-interface/utils.c (gnat_internal_attribute_table): Initialize
new member of struct attribute_spec.
gcc/fortran/ChangeLog:
PR c/81544
* f95-lang.c (gfc_attribute_table): Initialize new member of struct
attribute_spec.
gcc/lto/ChangeLog:
PR c/81544
* lto-lang.c (lto_attribute_table): Initialize new member of struct
attribute_spec.
@@ -7488,9 +7488,10 @@ common_object_handler (tree *node, tree name ATTRIBUTE_UNUSED,
static const struct attribute_spec vms_attribute_table[] =
{
/* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
- affects_type_identity } */
- { COMMON_OBJECT, 0, 1, true, false, false, common_object_handler, false },
- { NULL, 0, 0, false, false, false, NULL, false }
+ affects_type_identity, exclusions } */
+ { COMMON_OBJECT, 0, 1, true, false, false, common_object_handler, false,
+ NULL },
+ { NULL, 0, 0, false, false, false, NULL, false, NULL }
};
void
@@ -317,24 +317,24 @@ static machine_mode arm_floatn_mode (int, bool);
static const struct attribute_spec arm_attribute_table[] =
{
/* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
- affects_type_identity } */
+ affects_type_identity, exclusions } */
/* Function calls made to this symbol must be done indirectly, because
it may lie outside of the 26 bit addressing range of a normal function
call. */
- { "long_call", 0, 0, false, true, true, NULL, false },
+ { "long_call", 0, 0, false, true, true, NULL, false, NULL },
/* Whereas these functions are always known to reside within the 26 bit
addressing range. */
- { "short_call", 0, 0, false, true, true, NULL, false },
+ { "short_call", 0, 0, false, true, true, NULL, false, NULL },
/* Specify the procedure call conventions for a function. */
{ "pcs", 1, 1, false, true, true, arm_handle_pcs_attribute,
- false },
+ false, NULL },
/* Interrupt Service Routines have special prologue and epilogue requirements. */
{ "isr", 0, 1, false, false, false, arm_handle_isr_attribute,
- false },
+ false, NULL },
{ "interrupt", 0, 1, false, false, false, arm_handle_isr_attribute,
- false },
+ false, NULL },
{ "naked", 0, 0, true, false, false, arm_handle_fndecl_attribute,
- false },
+ false, NULL },
#ifdef ARM_PE
/* ARM/PE has three new attributes:
interfacearm - ?
@@ -345,22 +345,24 @@ static const struct attribute_spec arm_attribute_table[] =
them with spaces. We do NOT support this. Instead, use __declspec
multiple times.
*/
- { "dllimport", 0, 0, true, false, false, NULL, false },
- { "dllexport", 0, 0, true, false, false, NULL, false },
+ { "dllimport", 0, 0, true, false, false, NULL, false, NULL },
+ { "dllexport", 0, 0, true, false, false, NULL, false, NULL },
{ "interfacearm", 0, 0, true, false, false, arm_handle_fndecl_attribute,
- false },
+ false, NULL },
#elif TARGET_DLLIMPORT_DECL_ATTRIBUTES
- { "dllimport", 0, 0, false, false, false, handle_dll_attribute, false },
- { "dllexport", 0, 0, false, false, false, handle_dll_attribute, false },
+ { "dllimport", 0, 0, false, false, false, handle_dll_attribute, false,
+ NULL },
+ { "dllexport", 0, 0, false, false, false, handle_dll_attribute, false,
+ NULL },
{ "notshared", 0, 0, false, true, false, arm_handle_notshared_attribute,
- false },
+ false, NULL },
#endif
/* ARMv8-M Security Extensions support. */
{ "cmse_nonsecure_entry", 0, 0, true, false, false,
- arm_handle_cmse_nonsecure_entry, false },
+ arm_handle_cmse_nonsecure_entry, false, NULL },
{ "cmse_nonsecure_call", 0, 0, true, false, false,
- arm_handle_cmse_nonsecure_call, true },
- { NULL, 0, 0, false, false, false, NULL, false }
+ arm_handle_cmse_nonsecure_call, true, NULL },
+ { NULL, 0, 0, false, false, false, NULL, false, NULL }
};
/* Initialize the GCC target structure. */
@@ -9869,30 +9869,30 @@ static const struct attribute_spec
avr_attribute_table[] =
{
/* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
- affects_type_identity } */
+ affects_type_identity, exclusions } */
{ "progmem", 0, 0, false, false, false, avr_handle_progmem_attribute,
- false },
+ false, NULL },
{ "signal", 0, 0, true, false, false, avr_handle_fndecl_attribute,
- false },
+ false, NULL },
{ "interrupt", 0, 0, true, false, false, avr_handle_fndecl_attribute,
- false },
+ false, NULL },
{ "no_gccisr", 0, 0, true, false, false, avr_handle_fndecl_attribute,
- false },
+ false, NULL },
{ "naked", 0, 0, false, true, true, avr_handle_fntype_attribute,
- false },
+ false, NULL },
{ "OS_task", 0, 0, false, true, true, avr_handle_fntype_attribute,
- false },
+ false, NULL },
{ "OS_main", 0, 0, false, true, true, avr_handle_fntype_attribute,
- false },
+ false, NULL },
{ "io", 0, 1, false, false, false, avr_handle_addr_attribute,
- false },
+ false, NULL },
{ "io_low", 0, 1, false, false, false, avr_handle_addr_attribute,
- false },
+ false, NULL },
{ "address", 1, 1, false, false, false, avr_handle_addr_attribute,
- false },
+ false, NULL },
{ "absdata", 0, 0, true, false, false, avr_handle_absdata_attribute,
- false },
- { NULL, 0, 0, false, false, false, NULL, false }
+ false, NULL },
+ { NULL, 0, 0, false, false, false, NULL, false, NULL }
};
@@ -4875,29 +4875,30 @@ bfin_handle_l2_attribute (tree *node, tree ARG_UNUSED (name),
static const struct attribute_spec bfin_attribute_table[] =
{
/* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
- affects_type_identity } */
+ affects_type_identity, exclusions } */
{ "interrupt_handler", 0, 0, false, true, true, handle_int_attribute,
- false },
+ false, NULL },
{ "exception_handler", 0, 0, false, true, true, handle_int_attribute,
- false },
- { "nmi_handler", 0, 0, false, true, true, handle_int_attribute, false },
- { "nesting", 0, 0, false, true, true, NULL, false },
- { "kspisusp", 0, 0, false, true, true, NULL, false },
- { "saveall", 0, 0, false, true, true, NULL, false },
+ false, NULL },
+ { "nmi_handler", 0, 0, false, true, true, handle_int_attribute, false,
+ NULL },
+ { "nesting", 0, 0, false, true, true, NULL, false, NULL },
+ { "kspisusp", 0, 0, false, true, true, NULL, false, NULL },
+ { "saveall", 0, 0, false, true, true, NULL, false, NULL },
{ "longcall", 0, 0, false, true, true, bfin_handle_longcall_attribute,
- false },
+ false, NULL },
{ "shortcall", 0, 0, false, true, true, bfin_handle_longcall_attribute,
- false },
+ false, NULL },
{ "l1_text", 0, 0, true, false, false, bfin_handle_l1_text_attribute,
- false },
+ false, NULL },
{ "l1_data", 0, 0, true, false, false, bfin_handle_l1_data_attribute,
- false },
+ false, NULL },
{ "l1_data_A", 0, 0, true, false, false, bfin_handle_l1_data_attribute,
- false },
+ false, NULL },
{ "l1_data_B", 0, 0, true, false, false, bfin_handle_l1_data_attribute,
- false },
- { "l2", 0, 0, true, false, false, bfin_handle_l2_attribute, false },
- { NULL, 0, 0, false, false, false, NULL, false }
+ false, NULL },
+ { "l2", 0, 0, true, false, false, bfin_handle_l2_attribute, false, NULL },
+ { NULL, 0, 0, false, false, false, NULL, false, NULL }
};
/* Implementation of TARGET_ASM_INTEGER. When using FD-PIC, we need to
@@ -202,9 +202,9 @@ static void cr16_print_operand_address (FILE *, machine_mode, rtx);
static const struct attribute_spec cr16_attribute_table[] = {
/* ISRs have special prologue and epilogue requirements. */
/* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
- affects_type_identity }. */
- {"interrupt", 0, 0, false, true, true, NULL, false},
- {NULL, 0, 0, false, false, false, NULL, false}
+ affects_type_identity, exclusions }. */
+ {"interrupt", 0, 0, false, true, true, NULL, false, NULL},
+ {NULL, 0, 0, false, false, false, NULL, false, NULL}
};
/* TARGET_ASM_UNALIGNED_xx_OP generates .?byte directive
@@ -449,13 +449,14 @@ epiphany_init_reg_tables (void)
static const struct attribute_spec epiphany_attribute_table[] =
{
- /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
- { "interrupt", 0, 9, true, false, false, epiphany_handle_interrupt_attribute, true },
- { "forwarder_section", 1, 1, true, false, false, epiphany_handle_forwarder_attribute, false },
- { "long_call", 0, 0, false, true, true, NULL, false },
- { "short_call", 0, 0, false, true, true, NULL, false },
- { "disinterrupt", 0, 0, false, true, true, NULL, true },
- { NULL, 0, 0, false, false, false, NULL, false }
+ /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
+ affects_type_identity, exclusions } */
+ { "interrupt", 0, 9, true, false, false, epiphany_handle_interrupt_attribute, true, NULL },
+ { "forwarder_section", 1, 1, true, false, false, epiphany_handle_forwarder_attribute, false, NULL },
+ { "long_call", 0, 0, false, true, true, NULL, false, NULL },
+ { "short_call", 0, 0, false, true, true, NULL, false, NULL },
+ { "disinterrupt", 0, 0, false, true, true, NULL, true, NULL },
+ { NULL, 0, 0, false, false, false, NULL, false, NULL }
};
/* Handle an "interrupt" attribute; arguments as in
@@ -5424,22 +5424,22 @@ h8300_insert_attributes (tree node, tree *attributes)
static const struct attribute_spec h8300_attribute_table[] =
{
/* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
- affects_type_identity } */
+ affects_type_identity, exclusions } */
{ "interrupt_handler", 0, 0, true, false, false,
- h8300_handle_fndecl_attribute, false },
+ h8300_handle_fndecl_attribute, false, NULL },
{ "saveall", 0, 0, true, false, false,
- h8300_handle_fndecl_attribute, false },
+ h8300_handle_fndecl_attribute, false, NULL },
{ "OS_Task", 0, 0, true, false, false,
- h8300_handle_fndecl_attribute, false },
+ h8300_handle_fndecl_attribute, false, NULL },
{ "monitor", 0, 0, true, false, false,
- h8300_handle_fndecl_attribute, false },
+ h8300_handle_fndecl_attribute, false, NULL },
{ "function_vector", 0, 0, true, false, false,
- h8300_handle_fndecl_attribute, false },
+ h8300_handle_fndecl_attribute, false, NULL },
{ "eightbit_data", 0, 0, true, false, false,
- h8300_handle_eightbit_data_attribute, false },
+ h8300_handle_eightbit_data_attribute, false, NULL },
{ "tiny_data", 0, 0, true, false, false,
- h8300_handle_tiny_data_attribute, false },
- { NULL, 0, 0, false, false, false, NULL, false }
+ h8300_handle_tiny_data_attribute, false, NULL },
+ { NULL, 0, 0, false, false, false, NULL, false, NULL }
};
@@ -46495,69 +46495,71 @@ ix86_expand_round_sse4 (rtx op0, rtx op1)
static const struct attribute_spec ix86_attribute_table[] =
{
/* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
- affects_type_identity } */
+ affects_type_identity, exclusions } */
/* Stdcall attribute says callee is responsible for popping arguments
if they are not variable. */
{ "stdcall", 0, 0, false, true, true, ix86_handle_cconv_attribute,
- true },
+ true, NULL },
/* Fastcall attribute says callee is responsible for popping arguments
if they are not variable. */
{ "fastcall", 0, 0, false, true, true, ix86_handle_cconv_attribute,
- true },
+ true, NULL },
/* Thiscall attribute says callee is responsible for popping arguments
if they are not variable. */
{ "thiscall", 0, 0, false, true, true, ix86_handle_cconv_attribute,
- true },
+ true, NULL },
/* Cdecl attribute says the callee is a normal C declaration */
{ "cdecl", 0, 0, false, true, true, ix86_handle_cconv_attribute,
- true },
+ true, NULL },
/* Regparm attribute specifies how many integer arguments are to be
passed in registers. */
{ "regparm", 1, 1, false, true, true, ix86_handle_cconv_attribute,
- true },
+ true, NULL },
/* Sseregparm attribute says we are using x86_64 calling conventions
for FP arguments. */
{ "sseregparm", 0, 0, false, true, true, ix86_handle_cconv_attribute,
- true },
+ true, NULL },
/* The transactional memory builtins are implicitly regparm or fastcall
depending on the ABI. Override the generic do-nothing attribute that
these builtins were declared with. */
{ "*tm regparm", 0, 0, false, true, true, ix86_handle_tm_regparm_attribute,
- true },
+ true, NULL },
/* force_align_arg_pointer says this function realigns the stack at entry. */
{ (const char *)&ix86_force_align_arg_pointer_string, 0, 0,
- false, true, true, ix86_handle_force_align_arg_pointer_attribute, false },
+ false, true, true, ix86_handle_force_align_arg_pointer_attribute, false,
+ NULL },
#if TARGET_DLLIMPORT_DECL_ATTRIBUTES
- { "dllimport", 0, 0, false, false, false, handle_dll_attribute, false },
- { "dllexport", 0, 0, false, false, false, handle_dll_attribute, false },
+ { "dllimport", 0, 0, false, false, false, handle_dll_attribute, false, NULL },
+ { "dllexport", 0, 0, false, false, false, handle_dll_attribute, false, NULL },
{ "shared", 0, 0, true, false, false, ix86_handle_shared_attribute,
- false },
+ false, NULL },
#endif
{ "ms_struct", 0, 0, false, false, false, ix86_handle_struct_attribute,
- false },
+ false, NULL },
{ "gcc_struct", 0, 0, false, false, false, ix86_handle_struct_attribute,
- false },
+ false, NULL },
#ifdef SUBTARGET_ATTRIBUTE_TABLE
SUBTARGET_ATTRIBUTE_TABLE,
#endif
/* ms_abi and sysv_abi calling convention function attributes. */
- { "ms_abi", 0, 0, false, true, true, ix86_handle_abi_attribute, true },
- { "sysv_abi", 0, 0, false, true, true, ix86_handle_abi_attribute, true },
- { "ms_abi va_list", 0, 0, false, false, false, NULL, false },
- { "sysv_abi va_list", 0, 0, false, false, false, NULL, false },
+ { "ms_abi", 0, 0, false, true, true, ix86_handle_abi_attribute, true, NULL },
+ { "sysv_abi", 0, 0, false, true, true, ix86_handle_abi_attribute, true,
+ NULL },
+ { "ms_abi va_list", 0, 0, false, false, false, NULL, false, NULL },
+ { "sysv_abi va_list", 0, 0, false, false, false, NULL, false, NULL },
{ "ms_hook_prologue", 0, 0, true, false, false, ix86_handle_fndecl_attribute,
- false },
+ false, NULL },
{ "callee_pop_aggregate_return", 1, 1, false, true, true,
- ix86_handle_callee_pop_aggregate_return, true },
+ ix86_handle_callee_pop_aggregate_return, true, NULL },
{ "interrupt", 0, 0, false, true, true,
- ix86_handle_interrupt_attribute, false },
+ ix86_handle_interrupt_attribute, false, NULL },
{ "no_caller_saved_registers", 0, 0, false, true, true,
- ix86_handle_no_caller_saved_registers_attribute, false },
+ ix86_handle_no_caller_saved_registers_attribute, false, NULL },
{ "naked", 0, 0, true, false, false,
- ix86_handle_fndecl_attribute, false },
+ ix86_handle_fndecl_attribute, false, NULL },
/* End element. */
- { NULL, 0, 0, false, false, false, NULL, false }
+ { NULL, 0, 0, false, false, false, NULL, false, NULL }
};
/* Implement targetm.vectorize.builtin_vectorization_cost. */
@@ -353,17 +353,17 @@ static bool ia64_expand_vec_perm_const_1 (struct expand_vec_perm_d *d);
static const struct attribute_spec ia64_attribute_table[] =
{
/* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
- affects_type_identity } */
- { "syscall_linkage", 0, 0, false, true, true, NULL, false },
+ affects_type_identity, exclusions } */
+ { "syscall_linkage", 0, 0, false, true, true, NULL, false, NULL },
{ "model", 1, 1, true, false, false, ia64_handle_model_attribute,
- false },
+ false, NULL },
#if TARGET_ABI_OPEN_VMS
{ "common_object", 1, 1, true, false, false,
- ia64_vms_common_object_attribute, false },
+ ia64_vms_common_object_attribute, false, NULL },
#endif
{ "version_id", 1, 1, true, false, false,
- ia64_handle_version_id_attribute, false },
- { NULL, 0, 0, false, false, false, NULL, false }
+ ia64_handle_version_id_attribute, false, NULL },
+ { NULL, 0, 0, false, false, false, NULL, false, NULL }
};
/* Initialize the GCC target structure. */
@@ -2998,12 +2998,14 @@ current_function_special_page_vector (rtx x)
#undef TARGET_ATTRIBUTE_TABLE
#define TARGET_ATTRIBUTE_TABLE m32c_attribute_table
static const struct attribute_spec m32c_attribute_table[] = {
- {"interrupt", 0, 0, false, false, false, interrupt_handler, false},
- {"bank_switch", 0, 0, false, false, false, interrupt_handler, false},
- {"fast_interrupt", 0, 0, false, false, false, interrupt_handler, false},
+ /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
+ affects_type_identity, exclusions } */
+ {"interrupt", 0, 0, false, false, false, interrupt_handler, false, NULL},
+ {"bank_switch", 0, 0, false, false, false, interrupt_handler, false, NULL},
+ {"fast_interrupt", 0, 0, false, false, false, interrupt_handler, false, NULL},
{"function_vector", 1, 1, true, false, false, function_vector_handler,
- false},
- {0, 0, 0, 0, 0, 0, 0, false}
+ false, NULL},
+ {0, 0, 0, 0, 0, 0, 0, false, NULL}
};
#undef TARGET_COMP_TYPE_ATTRIBUTES
@@ -107,11 +107,11 @@ static bool m32r_attribute_identifier (const_tree);
static const struct attribute_spec m32r_attribute_table[] =
{
/* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
- affects_type_identity } */
- { "interrupt", 0, 0, true, false, false, NULL, false },
+ affects_type_identity, exclusions } */
+ { "interrupt", 0, 0, true, false, false, NULL, false, NULL },
{ "model", 1, 1, true, false, false, m32r_handle_model_attribute,
- false },
- { NULL, 0, 0, false, false, false, NULL, false }
+ false, NULL },
+ { NULL, 0, 0, false, false, false, NULL, false, NULL }
};
/* Initialize the GCC target structure. */
@@ -335,14 +335,14 @@ m68k_excess_precision (enum excess_precision_type);
static const struct attribute_spec m68k_attribute_table[] =
{
/* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
- affects_type_identity } */
+ affects_type_identity, exclusions } */
{ "interrupt", 0, 0, true, false, false, m68k_handle_fndecl_attribute,
false },
{ "interrupt_handler", 0, 0, true, false, false,
- m68k_handle_fndecl_attribute, false },
+ m68k_handle_fndecl_attribute, false, NULL },
{ "interrupt_thread", 0, 0, true, false, false,
- m68k_handle_fndecl_attribute, false },
- { NULL, 0, 0, false, false, false, NULL, false }
+ m68k_handle_fndecl_attribute, false, NULL },
+ { NULL, 0, 0, false, false, false, NULL, false, NULL }
};
struct gcc_target targetm = TARGET_INITIALIZER;
@@ -149,12 +149,12 @@ static bool mcore_legitimate_address_p (machine_mode, rtx, bool,
static const struct attribute_spec mcore_attribute_table[] =
{
/* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
- affects_type_identity } */
- { "dllexport", 0, 0, true, false, false, NULL, false },
- { "dllimport", 0, 0, true, false, false, NULL, false },
+ affects_type_identity, exclusions } */
+ { "dllexport", 0, 0, true, false, false, NULL, false, NULL },
+ { "dllimport", 0, 0, true, false, false, NULL, false, NULL },
{ "naked", 0, 0, true, false, false, mcore_handle_naked_attribute,
- false },
- { NULL, 0, 0, false, false, false, NULL, false }
+ false, NULL },
+ { NULL, 0, 0, false, false, false, NULL, false, NULL }
};
/* Initialize the GCC target structure. */
@@ -596,27 +596,27 @@ static tree mips_handle_use_shadow_register_set_attr (tree *, tree, tree, int,
/* The value of TARGET_ATTRIBUTE_TABLE. */
static const struct attribute_spec mips_attribute_table[] = {
/* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
- om_diagnostic } */
- { "long_call", 0, 0, false, true, true, NULL, false },
- { "far", 0, 0, false, true, true, NULL, false },
- { "near", 0, 0, false, true, true, NULL, false },
+ om_diagnostic, exclusions } */
+ { "long_call", 0, 0, false, true, true, NULL, false, NULL },
+ { "far", 0, 0, false, true, true, NULL, false, NULL },
+ { "near", 0, 0, false, true, true, NULL, false, NULL },
/* We would really like to treat "mips16" and "nomips16" as type
attributes, but GCC doesn't provide the hooks we need to support
the right conversion rules. As declaration attributes, they affect
code generation but don't carry other semantics. */
- { "mips16", 0, 0, true, false, false, NULL, false },
- { "nomips16", 0, 0, true, false, false, NULL, false },
- { "micromips", 0, 0, true, false, false, NULL, false },
- { "nomicromips", 0, 0, true, false, false, NULL, false },
- { "nocompression", 0, 0, true, false, false, NULL, false },
+ { "mips16", 0, 0, true, false, false, NULL, false, NULL },
+ { "nomips16", 0, 0, true, false, false, NULL, false, NULL },
+ { "micromips", 0, 0, true, false, false, NULL, false, NULL },
+ { "nomicromips", 0, 0, true, false, false, NULL, false, NULL },
+ { "nocompression", 0, 0, true, false, false, NULL, false, NULL },
/* Allow functions to be specified as interrupt handlers */
{ "interrupt", 0, 1, false, true, true, mips_handle_interrupt_attr,
- false },
+ false, NULL },
{ "use_shadow_register_set", 0, 1, false, true, true,
- mips_handle_use_shadow_register_set_attr, false },
- { "keep_interrupts_masked", 0, 0, false, true, true, NULL, false },
- { "use_debug_exception_return", 0, 0, false, true, true, NULL, false },
- { NULL, 0, 0, false, false, false, NULL, false }
+ mips_handle_use_shadow_register_set_attr, false, NULL },
+ { "keep_interrupts_masked", 0, 0, false, true, true, NULL, false, NULL },
+ { "use_debug_exception_return", 0, 0, false, true, true, NULL, false, NULL },
+ { NULL, 0, 0, false, false, false, NULL, false, NULL }
};
/* A table describing all the processors GCC knows about; see
@@ -81,33 +81,34 @@ static const char * const nds32_intrinsic_register_names[] =
static const struct attribute_spec nds32_attribute_table[] =
{
/* Syntax: { name, min_len, max_len, decl_required, type_required,
- function_type_required, handler, affects_type_identity } */
+ function_type_required, handler, affects_type_identity,
+ exclusions } */
/* The interrupt vid: [0-63]+ (actual vector number starts from 9 to 72). */
- { "interrupt", 1, 64, false, false, false, NULL, false },
+ { "interrupt", 1, 64, false, false, false, NULL, false, NULL },
/* The exception vid: [1-8]+ (actual vector number starts from 1 to 8). */
- { "exception", 1, 8, false, false, false, NULL, false },
+ { "exception", 1, 8, false, false, false, NULL, false, NULL },
/* Argument is user's interrupt numbers. The vector number is always 0. */
- { "reset", 1, 1, false, false, false, NULL, false },
+ { "reset", 1, 1, false, false, false, NULL, false, NULL },
/* The attributes describing isr nested type. */
- { "nested", 0, 0, false, false, false, NULL, false },
- { "not_nested", 0, 0, false, false, false, NULL, false },
- { "nested_ready", 0, 0, false, false, false, NULL, false },
+ { "nested", 0, 0, false, false, false, NULL, false, NULL },
+ { "not_nested", 0, 0, false, false, false, NULL, false, NULL },
+ { "nested_ready", 0, 0, false, false, false, NULL, false, NULL },
/* The attributes describing isr register save scheme. */
- { "save_all", 0, 0, false, false, false, NULL, false },
- { "partial_save", 0, 0, false, false, false, NULL, false },
+ { "save_all", 0, 0, false, false, false, NULL, false, NULL },
+ { "partial_save", 0, 0, false, false, false, NULL, false, NULL },
/* The attributes used by reset attribute. */
- { "nmi", 1, 1, false, false, false, NULL, false },
- { "warm", 1, 1, false, false, false, NULL, false },
+ { "nmi", 1, 1, false, false, false, NULL, false, NULL },
+ { "warm", 1, 1, false, false, false, NULL, false, NULL },
/* The attribute telling no prologue/epilogue. */
- { "naked", 0, 0, false, false, false, NULL, false },
+ { "naked", 0, 0, false, false, false, NULL, false, NULL },
/* The last attribute spec is set to be NULL. */
- { NULL, 0, 0, false, false, false, NULL, false }
+ { NULL, 0, 0, false, false, false, NULL, false, NULL }
};
@@ -4465,10 +4465,12 @@ nvptx_handle_shared_attribute (tree *node, tree name, tree ARG_UNUSED (args),
static const struct attribute_spec nvptx_attribute_table[] =
{
/* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
- affects_type_identity } */
- { "kernel", 0, 0, true, false, false, nvptx_handle_kernel_attribute, false },
- { "shared", 0, 0, true, false, false, nvptx_handle_shared_attribute, false },
- { NULL, 0, 0, false, false, false, NULL, false }
+ affects_type_identity, exclusions } */
+ { "kernel", 0, 0, true, false, false, nvptx_handle_kernel_attribute, false,
+ NULL },
+ { "shared", 0, 0, true, false, false, nvptx_handle_shared_attribute, false,
+ NULL },
+ { NULL, 0, 0, false, false, false, NULL, false, NULL }
};
/* Limit vector alignments to BIGGEST_ALIGNMENT. */
@@ -1545,21 +1545,21 @@ static const char alt_reg_names[][8] =
static const struct attribute_spec rs6000_attribute_table[] =
{
/* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
- affects_type_identity } */
+ affects_type_identity, exclusions } */
{ "altivec", 1, 1, false, true, false, rs6000_handle_altivec_attribute,
- false },
+ false, NULL },
{ "longcall", 0, 0, false, true, true, rs6000_handle_longcall_attribute,
- false },
+ false, NULL },
{ "shortcall", 0, 0, false, true, true, rs6000_handle_longcall_attribute,
- false },
+ false, NULL },
{ "ms_struct", 0, 0, false, false, false, rs6000_handle_struct_attribute,
- false },
+ false, NULL },
{ "gcc_struct", 0, 0, false, false, false, rs6000_handle_struct_attribute,
- false },
+ false, NULL },
#ifdef SUBTARGET_ATTRIBUTE_TABLE
SUBTARGET_ATTRIBUTE_TABLE,
#endif
- { NULL, 0, 0, false, false, false, NULL, false }
+ { NULL, 0, 0, false, false, false, NULL, false, NULL }
};
#ifndef TARGET_PROFILE_KERNEL
@@ -1537,21 +1537,21 @@ static const char alt_reg_names[][8] =
static const struct attribute_spec rs6000_attribute_table[] =
{
/* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
- affects_type_identity } */
+ affects_type_identity, exclusions } */
{ "altivec", 1, 1, false, true, false, rs6000_handle_altivec_attribute,
- false },
+ false, NULL },
{ "longcall", 0, 0, false, true, true, rs6000_handle_longcall_attribute,
- false },
+ false, NULL },
{ "shortcall", 0, 0, false, true, true, rs6000_handle_longcall_attribute,
- false },
+ false, NULL },
{ "ms_struct", 0, 0, false, false, false, rs6000_handle_struct_attribute,
- false },
+ false, NULL },
{ "gcc_struct", 0, 0, false, false, false, rs6000_handle_struct_attribute,
- false },
+ false, NULL },
#ifdef SUBTARGET_ATTRIBUTE_TABLE
SUBTARGET_ATTRIBUTE_TABLE,
#endif
- { NULL, 0, 0, false, false, false, NULL, false }
+ { NULL, 0, 0, false, false, false, NULL, false, NULL }
};
#ifndef TARGET_PROFILE_KERNEL
@@ -1149,10 +1149,12 @@ s390_handle_vectorbool_attribute (tree *node, tree name ATTRIBUTE_UNUSED,
}
static const struct attribute_spec s390_attribute_table[] = {
- { "hotpatch", 2, 2, true, false, false, s390_handle_hotpatch_attribute, false },
- { "s390_vector_bool", 0, 0, false, true, false, s390_handle_vectorbool_attribute, true },
+ { "hotpatch", 2, 2, true, false, false,
+ s390_handle_hotpatch_attribute, false, NULL },
+ { "s390_vector_bool", 0, 0, false, true, false,
+ s390_handle_vectorbool_attribute, true, NULL },
/* End element. */
- { NULL, 0, 0, false, false, false, NULL, false }
+ { NULL, 0, 0, false, false, false, NULL, false, NULL }
};
/* Return the alignment for LABEL. We default to the -falign-labels
@@ -325,24 +325,24 @@ static void sh_init_sync_libfuncs (void) ATTRIBUTE_UNUSED;
static const struct attribute_spec sh_attribute_table[] =
{
/* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
- affects_type_identity } */
+ affects_type_identity, exclusions } */
{ "interrupt_handler", 0, 0, true, false, false,
- sh_handle_interrupt_handler_attribute, false },
+ sh_handle_interrupt_handler_attribute, false, NULL },
{ "sp_switch", 1, 1, true, false, false,
- sh_handle_sp_switch_attribute, false },
+ sh_handle_sp_switch_attribute, false, NULL },
{ "trap_exit", 1, 1, true, false, false,
- sh_handle_trap_exit_attribute, false },
+ sh_handle_trap_exit_attribute, false, NULL },
{ "renesas", 0, 0, false, true, false,
- sh_handle_renesas_attribute, false },
+ sh_handle_renesas_attribute, false, NULL },
{ "trapa_handler", 0, 0, true, false, false,
- sh_handle_interrupt_handler_attribute, false },
+ sh_handle_interrupt_handler_attribute, false, NULL },
{ "nosave_low_regs", 0, 0, true, false, false,
- sh_handle_interrupt_handler_attribute, false },
+ sh_handle_interrupt_handler_attribute, false, NULL },
{ "resbank", 0, 0, true, false, false,
- sh_handle_resbank_handler_attribute, false },
+ sh_handle_resbank_handler_attribute, false, NULL },
{ "function_vector", 1, 1, true, false, false,
- sh2a_handle_function_vector_handler_attribute, false },
- { NULL, 0, 0, false, false, false, NULL, false }
+ sh2a_handle_function_vector_handler_attribute, false, NULL },
+ { NULL, 0, 0, false, false, false, NULL, false, NULL }
};
/* Initialize the GCC target structure. */
@@ -680,9 +680,9 @@ static unsigned int sparc_min_arithmetic_precision (void);
static const struct attribute_spec sparc_attribute_table[] =
{
/* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
- do_diagnostic } */
+ do_diagnostic, exclusions } */
SUBTARGET_ATTRIBUTE_TABLE,
- { NULL, 0, 0, false, false, false, NULL, false }
+ { NULL, 0, 0, false, false, false, NULL, false, NULL }
};
#endif
@@ -7145,12 +7145,12 @@ spu_expand_atomic_op (enum rtx_code code, rtx mem, rtx val,
static const struct attribute_spec spu_attribute_table[] =
{
/* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
- affects_type_identity } */
+ affects_type_identity, exclusions } */
{ "naked", 0, 0, true, false, false, spu_handle_fndecl_attribute,
- false },
+ false, NULL },
{ "spu_vector", 0, 0, false, true, false, spu_handle_vector_attribute,
- false },
- { NULL, 0, 0, false, false, false, NULL, false }
+ false, NULL },
+ { NULL, 0, 0, false, false, false, NULL, false, NULL }
};
/* TARGET overrides. */
@@ -2188,14 +2188,14 @@ static tree xstormy16_handle_below100_attribute
static const struct attribute_spec xstormy16_attribute_table[] =
{
/* name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
- affects_type_identity. */
+ affects_type_identity, exclusions. */
{ "interrupt", 0, 0, false, true, true,
- xstormy16_handle_interrupt_attribute , false },
+ xstormy16_handle_interrupt_attribute , false, NULL },
{ "BELOW100", 0, 0, false, false, false,
- xstormy16_handle_below100_attribute, false },
+ xstormy16_handle_below100_attribute, false, NULL },
{ "below100", 0, 0, false, false, false,
- xstormy16_handle_below100_attribute, false },
- { NULL, 0, 0, false, false, false, NULL, false }
+ xstormy16_handle_below100_attribute, false, NULL },
+ { NULL, 0, 0, false, false, false, NULL, false, NULL }
};
/* Handle an "interrupt" attribute;
@@ -3189,18 +3189,18 @@ v850_adjust_insn_length (rtx_insn *insn, int length)
static const struct attribute_spec v850_attribute_table[] =
{
/* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
- affects_type_identity } */
+ affects_type_identity, exclusions } */
{ "interrupt_handler", 0, 0, true, false, false,
- v850_handle_interrupt_attribute, false },
+ v850_handle_interrupt_attribute, false, NULL },
{ "interrupt", 0, 0, true, false, false,
- v850_handle_interrupt_attribute, false },
+ v850_handle_interrupt_attribute, false, NULL },
{ "sda", 0, 0, true, false, false,
- v850_handle_data_area_attribute, false },
+ v850_handle_data_area_attribute, false, NULL },
{ "tda", 0, 0, true, false, false,
- v850_handle_data_area_attribute, false },
+ v850_handle_data_area_attribute, false, NULL },
{ "zda", 0, 0, true, false, false,
- v850_handle_data_area_attribute, false },
- { NULL, 0, 0, false, false, false, NULL, false }
+ v850_handle_data_area_attribute, false, NULL },
+ { NULL, 0, 0, false, false, false, NULL, false, NULL }
};
static void
@@ -145,9 +145,10 @@ static inline bool current_function_has_lr_slot (void);
static const struct attribute_spec visium_attribute_table[] =
{
/* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
- affects_type_identity } */
- {"interrupt", 0, 0, true, false, false, visium_handle_interrupt_attr, false},
- {NULL, 0, 0, false, false, false, NULL, false}
+ affects_type_identity, exclusions } */
+ {"interrupt", 0, 0, true, false, false, visium_handle_interrupt_attr, false,
+ NULL},
+ {NULL, 0, 0, false, false, false, NULL, false, NULL},
};
static struct machine_function *visium_init_machine_status (void);
@@ -110,45 +110,47 @@ const struct attribute_spec gnat_internal_attribute_table[] =
/* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
affects_type_identity } */
{ "const", 0, 0, true, false, false, handle_const_attribute,
- false },
+ false, NULL },
{ "nothrow", 0, 0, true, false, false, handle_nothrow_attribute,
- false },
+ false, NULL },
{ "pure", 0, 0, true, false, false, handle_pure_attribute,
- false },
+ false, NULL },
{ "no vops", 0, 0, true, false, false, handle_novops_attribute,
- false },
+ false, NULL },
{ "nonnull", 0, -1, false, true, true, handle_nonnull_attribute,
- false },
+ false, NULL },
{ "sentinel", 0, 1, false, true, true, handle_sentinel_attribute,
- false },
+ false, NULL },
{ "noreturn", 0, 0, true, false, false, handle_noreturn_attribute,
- false },
+ false, NULL },
{ "noinline", 0, 0, true, false, false, handle_noinline_attribute,
- false },
+ false, NULL },
{ "noclone", 0, 0, true, false, false, handle_noclone_attribute,
- false },
+ false, NULL },
{ "leaf", 0, 0, true, false, false, handle_leaf_attribute,
- false },
+ false, NULL },
{ "always_inline",0, 0, true, false, false, handle_always_inline_attribute,
- false },
+ false, NULL },
{ "malloc", 0, 0, true, false, false, handle_malloc_attribute,
- false },
+ false, NULL },
{ "type generic", 0, 0, false, true, true, handle_type_generic_attribute,
- false },
+ false, NULL },
{ "vector_size", 1, 1, false, true, false, handle_vector_size_attribute,
- false },
+ false, NULL },
{ "vector_type", 0, 0, false, true, false, handle_vector_type_attribute,
- false },
- { "may_alias", 0, 0, false, true, false, NULL, false },
+ false, NULL },
+ { "may_alias", 0, 0, false, true, false, NULL, false, NULL },
/* ??? format and format_arg are heavy and not supported, which actually
prevents support for stdio builtins, which we however declare as part
of the common builtins.def contents. */
- { "format", 3, 3, false, true, true, fake_attribute_handler, false },
- { "format_arg", 1, 1, false, true, true, fake_attribute_handler, false },
+ { "format", 3, 3, false, true, true, fake_attribute_handler, false,
+ NULL },
+ { "format_arg", 1, 1, false, true, true, fake_attribute_handler, false,
+ NULL },
- { NULL, 0, 0, false, false, false, NULL, false }
+ { NULL, 0, 0, false, false, false, NULL, false, NULL }
};
@@ -92,12 +92,12 @@ static const struct attribute_spec gfc_attribute_table[] =
/* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
affects_type_identity } */
{ "omp declare target", 0, 0, true, false, false,
- gfc_handle_omp_declare_target_attribute, false },
+ gfc_handle_omp_declare_target_attribute, false, NULL },
{ "omp declare target link", 0, 0, true, false, false,
- gfc_handle_omp_declare_target_attribute, false },
+ gfc_handle_omp_declare_target_attribute, false, NULL },
{ "oacc function", 0, -1, true, false, false,
- gfc_handle_omp_declare_target_attribute, false },
- { NULL, 0, 0, false, false, false, NULL, false }
+ gfc_handle_omp_declare_target_attribute, false, NULL },
+ { NULL, 0, 0, false, false, false, NULL, false, NULL }
};
#undef LANG_HOOKS_NAME
@@ -60,42 +60,42 @@ static tree handle_format_arg_attribute (tree *, tree, tree, int, bool *);
const struct attribute_spec lto_attribute_table[] =
{
/* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
- do_diagnostic } */
+ do_diagnostic, exclusions } */
{ "noreturn", 0, 0, true, false, false,
- handle_noreturn_attribute, false },
+ handle_noreturn_attribute, false, NULL },
{ "leaf", 0, 0, true, false, false,
- handle_leaf_attribute, false },
+ handle_leaf_attribute, false, NULL },
/* The same comments as for noreturn attributes apply to const ones. */
{ "const", 0, 0, true, false, false,
- handle_const_attribute, false },
+ handle_const_attribute, false, NULL },
{ "malloc", 0, 0, true, false, false,
- handle_malloc_attribute, false },
+ handle_malloc_attribute, false, NULL },
{ "pure", 0, 0, true, false, false,
- handle_pure_attribute, false },
+ handle_pure_attribute, false, NULL },
{ "no vops", 0, 0, true, false, false,
- handle_novops_attribute, false },
+ handle_novops_attribute, false, NULL },
{ "nonnull", 0, -1, false, true, true,
- handle_nonnull_attribute, false },
+ handle_nonnull_attribute, false, NULL },
{ "nothrow", 0, 0, true, false, false,
- handle_nothrow_attribute, false },
+ handle_nothrow_attribute, false, NULL },
{ "patchable_function_entry", 1, 2, true, false, false,
handle_patchable_function_entry_attribute,
- false },
+ false, NULL },
{ "returns_twice", 0, 0, true, false, false,
- handle_returns_twice_attribute, false },
+ handle_returns_twice_attribute, false, NULL },
{ "sentinel", 0, 1, false, true, true,
- handle_sentinel_attribute, false },
+ handle_sentinel_attribute, false, NULL },
{ "type generic", 0, 0, false, true, true,
- handle_type_generic_attribute, false },
+ handle_type_generic_attribute, false, NULL },
{ "fn spec", 1, 1, false, true, true,
- handle_fnspec_attribute, false },
+ handle_fnspec_attribute, false, NULL },
{ "transaction_pure", 0, 0, false, true, true,
- handle_transaction_pure_attribute, false },
+ handle_transaction_pure_attribute, false, NULL },
/* For internal use only. The leading '*' both prevents its usage in
source code and signals that it may be overridden by machine tables. */
{ "*tm regparm", 0, 0, false, true, true,
- ignore_attribute, false },
- { NULL, 0, 0, false, false, false, NULL, false }
+ ignore_attribute, false, NULL },
+ { NULL, 0, 0, false, false, false, NULL, false, NULL }
};
/* Give the specifications for the format attributes, used by C and all
@@ -104,12 +104,12 @@ const struct attribute_spec lto_attribute_table[] =
const struct attribute_spec lto_format_attribute_table[] =
{
/* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
- affects_type_identity } */
+ affects_type_identity, exclusions } */
{ "format", 3, 3, false, true, true,
- handle_format_attribute, false },
+ handle_format_attribute, false, NULL },
{ "format_arg", 1, 1, false, true, true,
- handle_format_arg_attribute, false },
- { NULL, 0, 0, false, false, false, NULL, false }
+ handle_format_arg_attribute, false, NULL },
+ { NULL, 0, 0, false, false, false, NULL, false, NULL }
};
enum built_in_attribute