[PATCH 5/3] C++ bits to improve detection of attribute conflicts (PR 81544)

Jakub Jelinek jakub@redhat.com
Fri Dec 8 11:31:00 GMT 2017


On Fri, Dec 08, 2017 at 11:32:54AM +0100, Rainer Orth wrote:
> Jakub Jelinek <jakub@redhat.com> writes:
> 
> > On Fri, Dec 08, 2017 at 10:43:58AM +0100, Rainer Orth wrote:
> >> The line numbers are completely misleading, unfortunately.  Hadn't
> >> SUBTARGET_ATTRIBUTE_TABLE been used at the end of the (very short)
> >> sparc_attribute_table, I wouldn't have seen what was wrong.
> >> 
> >> The following patch fixes the problem, installed on mainline after
> >> i386-pc-solaris2.11 and sparc-sun-solaris2.11 bootstraps completed
> >> without regressions.
> >> 
> >> However, there are two more SUBTARGET_ATTRIBUTE_TABLE defines:
> >> 
> >> gcc/config/darwin.h:#define SUBTARGET_ATTRIBUTE_TABLE \
> >> gcc/config/i386/cygming.h:#define SUBTARGET_ATTRIBUTE_TABLE \
> >
> > I'll deal with this.
> 
> This is what I'm currently testing with an  x86_64-apple-darwin11.4.2
> bootstrap.  Ok if it passes?

I've committed this instead, while only darwin.h and cygming.h were left
broken, the comments haven't been adjusted in many more cases.

BTW, we should swap handler and affects_type_identity fields at some point,
3 bools, then pointer, then bool, then pointer needs quite a lot of padding.

2017-12-08  Jakub Jelinek  <jakub@redhat.com>

	* config/arc/arc.c (arc_attribute_table): Add exclusions to
	the comment.
	* config/avr/avr.c (avr_attribute_table): Likewise.
	* config/msp430/msp430.c (msp430_attribute_table): Likewise.
	* config/rl78/rl78.c (rl78_attribute_table): Likewise.
	* config/nds32/nds32.c (nds32_attribute_table): Likewise.
	* config/darwin.h (SUBTARGET_ATTRIBUTE_TABLE): Initialize new member
	of struct attribute_spec.
	* config/i386/cygming.h (SUBTARGET_ATTRIBUTE_TABLE): Likewise.
ada/
	* gcc-interface/utils.c (gnat_internal_attribute_table): Add
	exclusions to the comment.
brig/
	* brig-lang.c (brig_attribute_table): Fix up comment.

--- gcc/config/arc/arc.c.jj	2017-12-07 18:05:03.000000000 +0100
+++ gcc/config/arc/arc.c	2017-12-08 11:20:24.605501619 +0100
@@ -218,7 +218,7 @@ static tree arc_handle_fndecl_attribute
 const struct attribute_spec arc_attribute_table[] =
 {
  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
-      affects_type_identity } */
+      affects_type_identity, exclusions } */
   { "interrupt", 1, 1, true, false, false, arc_handle_interrupt_attribute,
       true, NULL },
   /* Function calls made to this symbol must be done indirectly, because
--- gcc/config/avr/avr.c.jj	2017-12-07 18:05:02.000000000 +0100
+++ gcc/config/avr/avr.c	2017-12-08 11:24:32.270391537 +0100
@@ -9875,7 +9875,7 @@ 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, NULL },
   { "signal",    0, 0, true,  false, false,  avr_handle_fndecl_attribute,
--- gcc/config/darwin.h.jj	2017-11-28 12:11:41.000000000 +0100
+++ gcc/config/darwin.h	2017-12-08 11:18:05.866243854 +0100
@@ -741,11 +741,11 @@ extern GTY(()) section * darwin_sections
 /* Extra attributes for Darwin.  */
 #define SUBTARGET_ATTRIBUTE_TABLE					     \
   /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,     \
-       affects_type_identity } */						     \
+       affects_type_identity, exclusions } */				     \
   { "apple_kext_compatibility", 0, 0, false, true, false,		     \
-    darwin_handle_kext_attribute, false },				     \
+    darwin_handle_kext_attribute, false, NULL },			     \
   { "weak_import", 0, 0, true, false, false,				     \
-    darwin_handle_weak_import_attribute, false }
+    darwin_handle_weak_import_attribute, false, NULL }
 
 /* Make local constant labels linker-visible, so that if one follows a
    weak_global constant, ld64 will be able to separate the atoms.  */
--- gcc/config/i386/cygming.h.jj	2017-10-30 12:02:35.000000000 +0100
+++ gcc/config/i386/cygming.h	2017-12-08 11:25:12.372887945 +0100
@@ -448,9 +448,9 @@ do {						\
 
 #define SUBTARGET_ATTRIBUTE_TABLE \
   { "selectany", 0, 0, true, false, false, ix86_handle_selectany_attribute, \
-    false }
+    false, NULL }
   /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
-       affects_type_identity } */
+       affects_type_identity, exclusions } */
 
 /*  mcount() does not need a counter variable.  */
 #undef NO_PROFILE_COUNTERS
--- gcc/config/msp430/msp430.c.jj	2017-12-07 18:05:03.000000000 +0100
+++ gcc/config/msp430/msp430.c	2017-12-08 11:26:47.634691684 +0100
@@ -2050,7 +2050,7 @@ msp430_data_attr (tree * node,
 const struct attribute_spec msp430_attribute_table[] =
 {
   /* Name        min_num_args     type_req,             affects_type_identity
-                      max_num_args,     fn_type_req
+		      max_num_args,     fn_type_req		exclusions
                           decl_req               handler.  */
   { ATTR_INTR,        0, 1, true,  false, false, msp430_attr, false, NULL },
   { ATTR_NAKED,       0, 0, true,  false, false, msp430_attr, false, NULL },
--- gcc/config/rl78/rl78.c.jj	2017-12-07 18:05:03.000000000 +0100
+++ gcc/config/rl78/rl78.c	2017-12-08 11:27:25.024222160 +0100
@@ -858,7 +858,7 @@ rl78_handle_saddr_attribute (tree * node
 const struct attribute_spec rl78_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, rl78_handle_func_attribute,
     false, NULL },
   { "brk_interrupt",  0, 0, true, false, false, rl78_handle_func_attribute,
--- gcc/config/nds32/nds32.c.jj	2017-12-07 18:05:02.000000000 +0100
+++ gcc/config/nds32/nds32.c	2017-12-08 11:27:54.160856273 +0100
@@ -83,7 +83,8 @@ static const char * const nds32_intrinsi
 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, NULL },
--- gcc/ada/gcc-interface/utils.c.jj	2017-12-07 18:04:59.000000000 +0100
+++ gcc/ada/gcc-interface/utils.c	2017-12-08 11:29:11.796881349 +0100
@@ -108,7 +108,7 @@ static tree fake_attribute_handler (tree
 const struct attribute_spec gnat_internal_attribute_table[] =
 {
   /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
-       affects_type_identity } */
+       affects_type_identity, exclusions } */
   { "const",        0, 0,  true,  false, false, handle_const_attribute,
     false, NULL },
   { "nothrow",      0, 0,  true,  false, false, handle_nothrow_attribute,
--- gcc/brig/brig-lang.c.jj	2017-12-07 18:04:55.000000000 +0100
+++ gcc/brig/brig-lang.c	2017-12-08 12:20:40.475998143 +0100
@@ -448,7 +448,7 @@ brig_localize_identifier (const char *id
 const struct attribute_spec brig_attribute_table[] =
 {
   /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
-       do_diagnostic } */
+       affects_type_identity, exclusions } */
   { "leaf",		      0, 0, true,  false, false,
 			      handle_leaf_attribute, false, NULL },
   { "const",                  0, 0, true,  false, false,


	Jakub



More information about the Gcc-patches mailing list