Re: [PATCH 2/3] improve detection of attribute conflicts (PR 81544)

2017-10-02 Thread Jeff Law
On 08/08/2017 10:13 AM, Martin Sebor wrote:
> Part 2 of the series contains the mechanical changes to all
> the back ends and to front ends other than C and C++.  There
> are no functional changes here.
> 
> Martin
> 
> 
> gcc-81544-2.diff
> 
> 
> 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.
OK.
jeff


[PATCH 2/3] improve detection of attribute conflicts (PR 81544)

2017-08-08 Thread Martin Sebor

Part 2 of the series contains the mechanical changes to all
the back ends and to front ends other than C and C++.  There
are no functional changes here.

Martin

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.

diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c
index 341ec20..06147e6 100644
--- a/gcc/config/alpha/alpha.c
+++ b/gcc/config/alpha/alpha.c
@@ -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
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index 25677d1..f5d30bd 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -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,