summaryrefslogtreecommitdiff
path: root/gcc/config
diff options
context:
space:
mode:
authormsebor <msebor@138bc75d-0d04-0410-961f-82ee72b054a4>2017-12-07 16:32:03 +0000
committermsebor <msebor@138bc75d-0d04-0410-961f-82ee72b054a4>2017-12-07 16:32:03 +0000
commitdab0e385e3d445022e5be724290b00a384bc4bff (patch)
treea586e44e1f5c41fd8ae4cb8fd80446c763cc595d /gcc/config
parent865ea74800b9099f5eead817cc8fcfff005c43c5 (diff)
downloadgcc-dab0e385e3d445022e5be724290b00a384bc4bff.tar.gz
PR c/81544 - attribute noreturn and warn_unused_result on the same function accepted
PR c/81566 - invalid attribute aligned accepted on functions gcc/ada/ChangeLog: PR c/81544 * gcc-interface/utils.c (gnat_internal_attribute_table): Initialize new member of struct attribute_spec. gcc/c/ChangeLog: PR c/81544 * c-decl.c (c_decl_attributes): Look up existing declaration and pass it to decl_attributes. gcc/c-family/ChangeLog: PR c/81544 PR c/81566 * c-attribs.c (attr_aligned_exclusions): New array. (attr_alloc_exclusions, attr_cold_hot_exclusions): Same. (attr_common_exclusions, attr_const_pure_exclusions): Same. (attr_gnu_inline_exclusions, attr_inline_exclusions): Same. (attr_noreturn_exclusions, attr_returns_twice_exclusions): Same. (attr_warn_unused_result_exclusions): Same. (handle_hot_attribute, handle_cold_attribute): Simplify. (handle_const_attribute): Warn on function returning void. (handle_pure_attribute): Same. (handle_aligned_attribute): Diagnose conflicting attribute specifications. * c-warn.c (diagnose_mismatched_attributes): Simplify. gcc/cp/ChangeLog: PR c/81544 * cp-tree.h (decls_match): Add default argument. * decl.c (decls_match): Avoid calling into the target back end and triggering an error. * decl2.c (cplus_decl_attributes): Look up existing declaration and pass it to decl_attributes. * tree.c (cxx_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. gcc/ChangeLog: PR c/81544 * attribs.c (empty_attribute_table): Initialize new member of struct attribute_spec. (decl_attributes): Add argument. Handle mutually exclusive combinations of attributes. (selftests::test_attribute_exclusions): New function. (selftests::attribute_c_tests): Ditto. * attribs.h (decl_attributes): Add default argument. * selftest.h (attribute_c_tests): Declare. * selftest-run-tests.c (selftest::run_tests): Call attribute_c_tests. * tree-core.h (attribute_spec::exclusions, exclude): New type and member. * doc/extend.texi (Common Function Attributes): Update const and pure. gcc/testsuite/ChangeLog: PR c/81544 * c-c++-common/Wattributes-2.c: New test. * c-c++-common/Wattributes.c: New test. * c-c++-common/attributes-3.c: Adjust. * gcc.dg/Wattributes-6.c: New test. * gcc.dg/Wattributes-7.c: New test. * gcc.dg/attr-noinline.c * gcc.dg/pr44964.c: Same. * gcc.dg/torture/pr42363.c: Same. * gcc.dg/tree-ssa/ssa-ccp-2.c: Same. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255469 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config')
-rw-r--r--gcc/config/alpha/alpha.c7
-rw-r--r--gcc/config/arc/arc.c14
-rw-r--r--gcc/config/arm/arm.c34
-rw-r--r--gcc/config/avr/avr.c24
-rw-r--r--gcc/config/bfin/bfin.c31
-rw-r--r--gcc/config/cr16/cr16.c6
-rw-r--r--gcc/config/epiphany/epiphany.c15
-rw-r--r--gcc/config/h8300/h8300.c18
-rw-r--r--gcc/config/i386/i386.c50
-rw-r--r--gcc/config/ia64/ia64.c12
-rw-r--r--gcc/config/m32c/m32c.c12
-rw-r--r--gcc/config/m32r/m32r.c8
-rw-r--r--gcc/config/m68k/m68k.c8
-rw-r--r--gcc/config/mcore/mcore.c10
-rw-r--r--gcc/config/microblaze/microblaze.c12
-rw-r--r--gcc/config/mips/mips.c28
-rw-r--r--gcc/config/msp430/msp430.c33
-rw-r--r--gcc/config/nds32/nds32.c24
-rw-r--r--gcc/config/nvptx/nvptx.c10
-rw-r--r--gcc/config/powerpcspe/powerpcspe.c14
-rw-r--r--gcc/config/rl78/rl78.c10
-rw-r--r--gcc/config/rs6000/rs6000.c14
-rw-r--r--gcc/config/rx/rx.c12
-rw-r--r--gcc/config/s390/s390.c8
-rw-r--r--gcc/config/sh/sh.c20
-rw-r--r--gcc/config/sparc/sparc.c4
-rw-r--r--gcc/config/spu/spu.c8
-rw-r--r--gcc/config/stormy16/stormy16.c10
-rw-r--r--gcc/config/v850/v850.c14
-rw-r--r--gcc/config/visium/visium.c7
30 files changed, 249 insertions, 228 deletions
diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c
index ece8879cb22..edf9cb4af59 100644
--- a/gcc/config/alpha/alpha.c
+++ b/gcc/config/alpha/alpha.c
@@ -7506,9 +7506,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
diff --git a/gcc/config/arc/arc.c b/gcc/config/arc/arc.c
index 6b6bf8224e6..aaefc300a9f 100644
--- a/gcc/config/arc/arc.c
+++ b/gcc/config/arc/arc.c
@@ -219,21 +219,23 @@ const struct attribute_spec arc_attribute_table[] =
{
/* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
affects_type_identity } */
- { "interrupt", 1, 1, true, false, false, arc_handle_interrupt_attribute, true },
+ { "interrupt", 1, 1, true, false, false, arc_handle_interrupt_attribute,
+ true, NULL },
/* Function calls made to this symbol must be done indirectly, because
it may lie outside of the 21/25 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 25 bit
addressing range of unconditionalized bl. */
- { "medium_call", 0, 0, false, true, true, NULL, false },
+ { "medium_call", 0, 0, false, true, true, NULL, false, NULL },
/* And these functions are always known to reside within the 21 bit
addressing range of blcc. */
- { "short_call", 0, 0, false, true, true, NULL, false },
+ { "short_call", 0, 0, false, true, true, NULL, false, NULL },
/* Function which are not having the prologue and epilogue generated
by the compiler. */
- { "naked", 0, 0, true, false, false, arc_handle_fndecl_attribute, false },
- { NULL, 0, 0, false, false, false, NULL, false }
+ { "naked", 0, 0, true, false, false, arc_handle_fndecl_attribute, false,
+ NULL },
+ { NULL, 0, 0, false, false, false, NULL, false, NULL }
};
static int arc_comp_type_attributes (const_tree, const_tree);
static void arc_file_start (void);
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index b98637714ab..f34b6e0d933 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -323,24 +323,24 @@ static HOST_WIDE_INT arm_constant_alignment (const_tree, HOST_WIDE_INT);
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 - ?
@@ -351,22 +351,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. */
diff --git a/gcc/config/avr/avr.c b/gcc/config/avr/avr.c
index b1d8a84d154..7b654a62086 100644
--- a/gcc/config/avr/avr.c
+++ b/gcc/config/avr/avr.c
@@ -9877,28 +9877,28 @@ avr_attribute_table[] =
/* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
affects_type_identity } */
{ "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, true, false, false, avr_handle_addr_attribute,
- false },
+ false, NULL },
{ "io_low", 0, 1, true, false, false, avr_handle_addr_attribute,
- false },
+ false, NULL },
{ "address", 1, 1, true, 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 }
};
diff --git a/gcc/config/bfin/bfin.c b/gcc/config/bfin/bfin.c
index c95f82dc3ae..a5947435f3e 100644
--- a/gcc/config/bfin/bfin.c
+++ b/gcc/config/bfin/bfin.c
@@ -4906,29 +4906,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
diff --git a/gcc/config/cr16/cr16.c b/gcc/config/cr16/cr16.c
index 55e0965ad2f..bd4e028f328 100644
--- a/gcc/config/cr16/cr16.c
+++ b/gcc/config/cr16/cr16.c
@@ -207,9 +207,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
diff --git a/gcc/config/epiphany/epiphany.c b/gcc/config/epiphany/epiphany.c
index 26b0f3cca74..dece119cdb8 100644
--- a/gcc/config/epiphany/epiphany.c
+++ b/gcc/config/epiphany/epiphany.c
@@ -460,13 +460,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
diff --git a/gcc/config/h8300/h8300.c b/gcc/config/h8300/h8300.c
index bf1160130e4..d4e8c461c80 100644
--- a/gcc/config/h8300/h8300.c
+++ b/gcc/config/h8300/h8300.c
@@ -5425,22 +5425,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 }
};
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 850ad4011a3..5d77f28dfa3 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -44693,69 +44693,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. */
diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c
index 84a5b5678a7..ad4bb17d1ad 100644
--- a/gcc/config/ia64/ia64.c
+++ b/gcc/config/ia64/ia64.c
@@ -360,17 +360,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. */
diff --git a/gcc/config/m32c/m32c.c b/gcc/config/m32c/m32c.c
index 5987513e97d..281b54ca31c 100644
--- a/gcc/config/m32c/m32c.c
+++ b/gcc/config/m32c/m32c.c
@@ -3000,12 +3000,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
diff --git a/gcc/config/m32r/m32r.c b/gcc/config/m32r/m32r.c
index f1044575550..bcca103aa2a 100644
--- a/gcc/config/m32r/m32r.c
+++ b/gcc/config/m32r/m32r.c
@@ -111,11 +111,11 @@ static HOST_WIDE_INT m32r_starting_frame_offset (void);
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. */
diff --git a/gcc/config/m68k/m68k.c b/gcc/config/m68k/m68k.c
index cd2e15e2f6c..c5b034a615d 100644
--- a/gcc/config/m68k/m68k.c
+++ b/gcc/config/m68k/m68k.c
@@ -348,14 +348,14 @@ static bool m68k_modes_tieable_p (machine_mode, machine_mode);
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;
diff --git a/gcc/config/mcore/mcore.c b/gcc/config/mcore/mcore.c
index 04dfb9d085a..af36ebeb36f 100644
--- a/gcc/config/mcore/mcore.c
+++ b/gcc/config/mcore/mcore.c
@@ -152,12 +152,12 @@ static bool mcore_modes_tieable_p (machine_mode, machine_mode);
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. */
diff --git a/gcc/config/microblaze/microblaze.c b/gcc/config/microblaze/microblaze.c
index 74875238774..acdff6c655d 100644
--- a/gcc/config/microblaze/microblaze.c
+++ b/gcc/config/microblaze/microblaze.c
@@ -216,17 +216,17 @@ int save_volatiles;
const struct attribute_spec microblaze_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, NULL,
- false },
+ false, NULL },
{"break_handler", 0, 0, true, false, false, NULL,
- false },
+ false, NULL },
{"fast_interrupt", 0, 0, true, false, false, NULL,
- false },
+ false, NULL },
{"save_volatiles" , 0, 0, true, false, false, NULL,
- false },
+ false, NULL },
{ NULL, 0, 0, false, false, false, NULL,
- false }
+ false, NULL }
};
static int microblaze_interrupt_function_p (tree);
diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c
index 7dde705bae7..4e70a9b2572 100644
--- a/gcc/config/mips/mips.c
+++ b/gcc/config/mips/mips.c
@@ -597,27 +597,27 @@ static tree mips_handle_use_shadow_register_set_attr (tree *, tree, tree, int,
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 },
- { "short_call", 0, 0, false, true, true, NULL, false },
- { "far", 0, 0, false, true, true, NULL, false },
- { "near", 0, 0, false, true, true, NULL, false },
+ { "long_call", 0, 0, false, true, true, NULL, false, NULL },
+ { "short_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
diff --git a/gcc/config/msp430/msp430.c b/gcc/config/msp430/msp430.c
index 0ee0b6c2dbc..3d33f7caba8 100644
--- a/gcc/config/msp430/msp430.c
+++ b/gcc/config/msp430/msp430.c
@@ -2052,20 +2052,25 @@ const struct attribute_spec msp430_attribute_table[] =
/* Name min_num_args type_req, affects_type_identity
max_num_args, fn_type_req
decl_req handler. */
- { ATTR_INTR, 0, 1, true, false, false, msp430_attr, false },
- { ATTR_NAKED, 0, 0, true, false, false, msp430_attr, false },
- { ATTR_REENT, 0, 0, true, false, false, msp430_attr, false },
- { ATTR_CRIT, 0, 0, true, false, false, msp430_attr, false },
- { ATTR_WAKEUP, 0, 0, true, false, false, msp430_attr, false },
-
- { ATTR_LOWER, 0, 0, true, false, false, msp430_section_attr, false },
- { ATTR_UPPER, 0, 0, true, false, false, msp430_section_attr, false },
- { ATTR_EITHER, 0, 0, true, false, false, msp430_section_attr, false },
-
- { ATTR_NOINIT, 0, 0, true, false, false, msp430_data_attr, false },
- { ATTR_PERSIST, 0, 0, true, false, false, msp430_data_attr, false },
-
- { NULL, 0, 0, false, false, false, NULL, false }
+ { ATTR_INTR, 0, 1, true, false, false, msp430_attr, false, NULL },
+ { ATTR_NAKED, 0, 0, true, false, false, msp430_attr, false, NULL },
+ { ATTR_REENT, 0, 0, true, false, false, msp430_attr, false, NULL },
+ { ATTR_CRIT, 0, 0, true, false, false, msp430_attr, false, NULL },
+ { ATTR_WAKEUP, 0, 0, true, false, false, msp430_attr, false, NULL },
+
+ { ATTR_LOWER, 0, 0, true, false, false, msp430_section_attr, false,
+ NULL },
+ { ATTR_UPPER, 0, 0, true, false, false, msp430_section_attr, false,
+ NULL },
+ { ATTR_EITHER, 0, 0, true, false, false, msp430_section_attr, false,
+ NULL },
+
+ { ATTR_NOINIT, 0, 0, true, false, false, msp430_data_attr, false,
+ NULL },
+ { ATTR_PERSIST, 0, 0, true, false, false, msp430_data_attr, false,
+ NULL },
+
+ { NULL, 0, 0, false, false, false, NULL, false, NULL }
};
#undef TARGET_ASM_FUNCTION_PROLOGUE
diff --git a/gcc/config/nds32/nds32.c b/gcc/config/nds32/nds32.c
index 5f2e6673000..8c3702c148b 100644
--- a/gcc/config/nds32/nds32.c
+++ b/gcc/config/nds32/nds32.c
@@ -86,30 +86,30 @@ static const struct attribute_spec nds32_attribute_table[] =
function_type_required, handler, affects_type_identity } */
/* 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 }
};
diff --git a/gcc/config/nvptx/nvptx.c b/gcc/config/nvptx/nvptx.c
index 634f66038fa..16ff370bb32 100644
--- a/gcc/config/nvptx/nvptx.c
+++ b/gcc/config/nvptx/nvptx.c
@@ -4458,10 +4458,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. */
diff --git a/gcc/config/powerpcspe/powerpcspe.c b/gcc/config/powerpcspe/powerpcspe.c
index b5fc656a8f1..44165802be4 100644
--- a/gcc/config/powerpcspe/powerpcspe.c
+++ b/gcc/config/powerpcspe/powerpcspe.c
@@ -1534,21 +1534,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
diff --git a/gcc/config/rl78/rl78.c b/gcc/config/rl78/rl78.c
index 7b381b1f78a..58c8fe8ed1c 100644
--- a/gcc/config/rl78/rl78.c
+++ b/gcc/config/rl78/rl78.c
@@ -860,14 +860,14 @@ const struct attribute_spec rl78_attribute_table[] =
/* Name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
affects_type_identity. */
{ "interrupt", 0, 0, true, false, false, rl78_handle_func_attribute,
- false },
+ false, NULL },
{ "brk_interrupt", 0, 0, true, false, false, rl78_handle_func_attribute,
- false },
+ false, NULL },
{ "naked", 0, 0, true, false, false, rl78_handle_naked_attribute,
- false },
+ false, NULL },
{ "saddr", 0, 0, true, false, false, rl78_handle_saddr_attribute,
- false },
- { NULL, 0, 0, false, false, false, NULL, false }
+ false, NULL },
+ { NULL, 0, 0, false, false, false, NULL, false, NULL }
};
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 83aa428c32c..155ea6e9d99 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -1518,21 +1518,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
diff --git a/gcc/config/rx/rx.c b/gcc/config/rx/rx.c
index 021cf5c8aa7..84032b70d38 100644
--- a/gcc/config/rx/rx.c
+++ b/gcc/config/rx/rx.c
@@ -2732,16 +2732,16 @@ rx_handle_vector_attribute (tree * node,
const struct attribute_spec rx_attribute_table[] =
{
/* Name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
- affects_type_identity. */
+ affects_type_identity, exclusions. */
{ "fast_interrupt", 0, 0, true, false, false, rx_handle_func_attribute,
- false },
+ false, NULL },
{ "interrupt", 0, -1, true, false, false, rx_handle_func_attribute,
- false },
+ false, NULL },
{ "naked", 0, 0, true, false, false, rx_handle_func_attribute,
- false },
+ false, NULL },
{ "vector", 1, -1, true, false, false, rx_handle_vector_attribute,
- false },
- { NULL, 0, 0, false, false, false, NULL, false }
+ false, NULL },
+ { NULL, 0, 0, false, false, false, NULL, false, NULL }
};
/* Implement TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE. */
diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c
index 4e089557e10..c87f44db29a 100644
--- a/gcc/config/s390/s390.c
+++ b/gcc/config/s390/s390.c
@@ -1178,10 +1178,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
diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c
index 3c6d525eb0c..0d7d7bc53ca 100644
--- a/gcc/config/sh/sh.c
+++ b/gcc/config/sh/sh.c
@@ -330,24 +330,24 @@ static bool sh_can_change_mode_class (machine_mode, machine_mode, reg_class_t);
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. */
diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c
index 9124ce9cf71..54e7a0e161a 100644
--- a/gcc/config/sparc/sparc.c
+++ b/gcc/config/sparc/sparc.c
@@ -691,9 +691,9 @@ static HOST_WIDE_INT sparc_constant_alignment (const_tree, HOST_WIDE_INT);
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
diff --git a/gcc/config/spu/spu.c b/gcc/config/spu/spu.c
index 78252101ef5..dc9e13356ba 100644
--- a/gcc/config/spu/spu.c
+++ b/gcc/config/spu/spu.c
@@ -7215,12 +7215,12 @@ spu_constant_alignment (const_tree, HOST_WIDE_INT align)
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. */
diff --git a/gcc/config/stormy16/stormy16.c b/gcc/config/stormy16/stormy16.c
index d0bd4335073..3a21260fda7 100644
--- a/gcc/config/stormy16/stormy16.c
+++ b/gcc/config/stormy16/stormy16.c
@@ -2190,14 +2190,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;
diff --git a/gcc/config/v850/v850.c b/gcc/config/v850/v850.c
index 32c6a036eb3..3d0bbf55e24 100644
--- a/gcc/config/v850/v850.c
+++ b/gcc/config/v850/v850.c
@@ -3188,18 +3188,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
diff --git a/gcc/config/visium/visium.c b/gcc/config/visium/visium.c
index 3311dd2a349..a8b90019aa9 100644
--- a/gcc/config/visium/visium.c
+++ b/gcc/config/visium/visium.c
@@ -146,9 +146,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);