ChangeLog gcc/
authorKai Tietz <ktietz@redhat.com>
Mon, 21 Mar 2011 08:29:36 +0000 (09:29 +0100)
committerKai Tietz <ktietz@gcc.gnu.org>
Mon, 21 Mar 2011 08:29:36 +0000 (09:29 +0100)
2011-03-21  Kai Tietz  <ktietz@redhat.com>

PR target/12171
* doc/plugins.texi: Adjust documentation
for plugin register_callback.
* tree.h (attribute_spec): Add new member
affects_type_identity.
- Zitierten Text anzeigen -
* attribs.c (empty_attribute_table): Adjust
attribute_spec initializers.
* config/alpha/alpha.c: Likewise.
* config/arc/arc.c: Likewise.
* config/arm/arm.c: Likewise.
* config/avr/avr.c: Likewise.
* config/bfin/bfin.c: Likewise.
* config/crx/crx.c: Likewise.
* config/darwin.h: Likewise.
* config/h8300/h8300.c: Likewise.
* config/i386/cygming.h: Likewise.
* config/i386/i386.c: Likewise.
* config/ia64/ia64.c: Likewise.
* config/m32c/m32c.c: Likewise.
* config/m32r/m32r.c: Likewise.
* config/m68hc11/m68hc11.c: Likewise.
* config/m68k/m68k.c: Likewise.
* config/mcore/mcore.c: Likewise.
* config/mep/mep.c: Likewise.
* config/microblaze/microblaze.c: Likewise.
* config/mips/mips.c: Likewise.
* config/rs6000/rs6000.c: Likewise.
* config/rx/rx.c: Likewise.
* config/sh/sh.c: Likewise.
* config/sol2.h: Likewise.
* config/sparc/sparc.c: Likewise.
* config/spu/spu.c: Likewise.
* config/stormy16/stormy16.c: Likewise.
* config/v850/v850.c: Likewise.

ChangeLog gcc/cp

2011-03-21  Kai Tietz  <ktietz@redhat.com>

PR target/12171
* tree.c (cxx_attribute_table): Adjust table.

ChangeLog gcc/testsuite

2011-03-21  Kai Tietz  <ktietz@redhat.com>

PR target/12171
* g++.dg/plugin/attribute_plugin.c: Adjust test.

ChangeLog gcc/java

2011-03-21  Kai Tietz  <ktietz@redhat.com>

PR target/12171
* lang.c (java_attribute_table): Adjust table.

ChangeLog gcc/lto

2011-03-21  Kai Tietz  <ktietz@redhat.com>

PR target/12171
* lto-lang.c (lto_attribute_table): Adjust table.

ChangeLog gcc/ada

2011-03-21  Kai Tietz  <ktietz@redhat.com>

PR target/12171
* gcc-interface/utils.c (gnat_internal_attribute_table):
Add new element.

ChangeLog gcc/c-family

2011-03-17  Kai Tietz

PR target/12171
* c-common.c (c_common_attribute_table):
Add new element.
(c_common_format_attribute_table): Likewise.

From-SVN: r171209

43 files changed:
gcc/ChangeLog
gcc/ada/ChangeLog
gcc/ada/gcc-interface/utils.c
gcc/attribs.c
gcc/c-family/ChangeLog
gcc/c-family/c-common.c
gcc/config/alpha/alpha.c
gcc/config/arc/arc.c
gcc/config/arm/arm.c
gcc/config/avr/avr.c
gcc/config/bfin/bfin.c
gcc/config/crx/crx.c
gcc/config/darwin.h
gcc/config/h8300/h8300.c
gcc/config/i386/cygming.h
gcc/config/i386/i386.c
gcc/config/ia64/ia64.c
gcc/config/m32c/m32c.c
gcc/config/m32r/m32r.c
gcc/config/m68hc11/m68hc11.c
gcc/config/m68k/m68k.c
gcc/config/mcore/mcore.c
gcc/config/mep/mep.c
gcc/config/microblaze/microblaze.c
gcc/config/mips/mips.c
gcc/config/rs6000/rs6000.c
gcc/config/rx/rx.c
gcc/config/sh/sh.c
gcc/config/sol2.h
gcc/config/sparc/sparc.c
gcc/config/spu/spu.c
gcc/config/stormy16/stormy16.c
gcc/config/v850/v850.c
gcc/cp/ChangeLog
gcc/cp/tree.c
gcc/doc/plugins.texi
gcc/java/ChangeLog
gcc/java/lang.c
gcc/lto/ChangeLog
gcc/lto/lto-lang.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/plugin/attribute_plugin.c
gcc/tree.h

index 7d3878107effc36680fcd5e8ff4aa82ca94c4055..14f4cad74ef933c4c4a0b45cf2e548c9e863d8e3 100644 (file)
@@ -1,3 +1,41 @@
+2011-03-21  Kai Tietz  <ktietz@redhat.com>
+
+       PR target/12171
+       * doc/plugins.texi: Adjust documentation
+       for plugin register_callback.
+       * tree.h (attribute_spec): Add new member
+       affects_type_identity.
+       - Zitierten Text anzeigen -
+       * attribs.c (empty_attribute_table): Adjust
+       attribute_spec initializers.
+       * config/alpha/alpha.c: Likewise.
+       * config/arc/arc.c: Likewise.
+       * config/arm/arm.c: Likewise.
+       * config/avr/avr.c: Likewise.
+       * config/bfin/bfin.c: Likewise.
+       * config/crx/crx.c: Likewise.
+       * config/darwin.h: Likewise.
+       * config/h8300/h8300.c: Likewise.
+       * config/i386/cygming.h: Likewise.
+       * config/i386/i386.c: Likewise.
+       * config/ia64/ia64.c: Likewise.
+       * config/m32c/m32c.c: Likewise.
+       * config/m32r/m32r.c: Likewise.
+       * config/m68hc11/m68hc11.c: Likewise.
+       * config/m68k/m68k.c: Likewise.
+       * config/mcore/mcore.c: Likewise.
+       * config/mep/mep.c: Likewise.
+       * config/microblaze/microblaze.c: Likewise.
+       * config/mips/mips.c: Likewise.
+       * config/rs6000/rs6000.c: Likewise.
+       * config/rx/rx.c: Likewise.
+       * config/sh/sh.c: Likewise.
+       * config/sol2.h: Likewise.
+       * config/sparc/sparc.c: Likewise.
+       * config/spu/spu.c: Likewise.
+       * config/stormy16/stormy16.c: Likewise.
+       * config/v850/v850.c: Likewise.
+
 2011-03-21  Chung-Lin Tang  <cltang@codesourcery.com>
 
        * simplify-rtx.c (simplify_binary_operation_1): Handle
index fc87a82cb7da3375056e4e77b111ebec216651fa..46e4e22f2c9922b41a060d05965390292ff83e26 100644 (file)
@@ -1,3 +1,9 @@
+2011-03-21  Kai Tietz  <ktietz@redhat.com>
+
+       PR target/12171
+       * gcc-interface/utils.c (gnat_internal_attribute_table):
+       Add new element.
+
 2011-03-17  Eric Botcazou  <ebotcazou@adacore.com>
 
        * gcc-interface/decl.c (elaborate_expression_1): Try harder to find
index 4d40f86744753213094c2db2042ecddfbae14f7b..6db63751e154421b3ed73055114f6e2420edc35e 100644 (file)
@@ -104,29 +104,42 @@ static tree fake_attribute_handler      (tree *, tree, tree, int, bool *);
    this minimal set of attributes to accommodate the needs of builtins.  */
 const struct attribute_spec gnat_internal_attribute_table[] =
 {
-  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
-  { "const",        0, 0,  true,  false, false, handle_const_attribute   },
-  { "nothrow",      0, 0,  true,  false, false, handle_nothrow_attribute },
-  { "pure",         0, 0,  true,  false, false, handle_pure_attribute },
-  { "no vops",      0, 0,  true,  false, false, handle_novops_attribute },
-  { "nonnull",      0, -1, false, true,  true,  handle_nonnull_attribute },
-  { "sentinel",     0, 1,  false, true,  true,  handle_sentinel_attribute },
-  { "noreturn",     0, 0,  true,  false, false, handle_noreturn_attribute },
-  { "leaf",         0, 0,  true,  false, false, handle_leaf_attribute },
-  { "malloc",       0, 0,  true,  false, false, handle_malloc_attribute },
-  { "type generic", 0, 0,  false, true, true, handle_type_generic_attribute },
-
-  { "vector_size",  1, 1,  false, true, false,  handle_vector_size_attribute },
-  { "vector_type",  0, 0,  false, true, false,  handle_vector_type_attribute },
-  { "may_alias",    0, 0, false, true, false, NULL },
+  /* { 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 },
+  { "nothrow",      0, 0,  true,  false, false, handle_nothrow_attribute,
+    false },
+  { "pure",         0, 0,  true,  false, false, handle_pure_attribute,
+    false },
+  { "no vops",      0, 0,  true,  false, false, handle_novops_attribute,
+    false },
+  { "nonnull",      0, -1, false, true,  true,  handle_nonnull_attribute,
+    false },
+  { "sentinel",     0, 1,  false, true,  true,  handle_sentinel_attribute,
+    false },
+  { "noreturn",     0, 0,  true,  false, false, handle_noreturn_attribute,
+    false },
+  { "leaf",         0, 0,  true,  false, false, handle_leaf_attribute,
+    false },
+  { "malloc",       0, 0,  true,  false, false, handle_malloc_attribute,
+    false },
+  { "type generic", 0, 0,  false, true, true, handle_type_generic_attribute,
+    false },
+
+  { "vector_size",  1, 1,  false, true, false,  handle_vector_size_attribute,
+    false },
+  { "vector_type",  0, 0,  false, true, false,  handle_vector_type_attribute,
+    false },
+  { "may_alias",    0, 0, false, true, false, NULL, false },
 
   /* ??? 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 },
-  { "format_arg", 1, 1,  false, true,  true,  fake_attribute_handler },
+  { "format",     3, 3,  false, true,  true,  fake_attribute_handler, false },
+  { "format_arg", 1, 1,  false, true,  true,  fake_attribute_handler, false },
 
-  { NULL,         0, 0, false, false, false, NULL }
+  { NULL,         0, 0, false, false, false, NULL, false }
 };
 
 /* Associates a GNAT tree node to a GCC tree node. It is used in
index fee149955d84ec216d6d24eddae4d7b263e6045d..ce977d4a3371c31b1b1dc8f39e8564c6c386cbef 100644 (file)
@@ -57,7 +57,7 @@ static bool attributes_initialized = false;
 
 static const struct attribute_spec empty_attribute_table[] =
 {
-  { NULL, 0, 0, false, false, false, NULL }
+  { NULL, 0, 0, false, false, false, NULL, false }
 };
 
 /* Return base name of the attribute.  Ie '__attr__' is turned into 'attr'.
index a97a04eb28788f3962570ac76be885be052a8849..ad2da89cb216c105b0c0b9b514fe701284557394 100644 (file)
@@ -1,3 +1,10 @@
+2011-03-17  Kai Tietz
+
+       PR target/12171
+       * c-common.c (c_common_attribute_table):
+       Add new element.
+       (c_common_format_attribute_table): Likewise.
+
 2011-03-18  Jason Merrill  <jason@redhat.com>
 
        * c.opt (fconstexpr-depth): Add Var(max_constexpr_depth).
index f8d0c7e10746defb116fe9b56ccbebbdfc9f3dc7..3f1b964401f721ca317ff1c726ba623f98e40f74 100644 (file)
@@ -583,123 +583,125 @@ const unsigned int num_c_common_reswords =
 /* Table of machine-independent attributes common to all C-like languages.  */
 const struct attribute_spec c_common_attribute_table[] =
 {
-  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
+  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
+       affects_type_identity } */
   { "packed",                 0, 0, false, false, false,
-                             handle_packed_attribute },
+                             handle_packed_attribute , false},
   { "nocommon",               0, 0, true,  false, false,
-                             handle_nocommon_attribute },
+                             handle_nocommon_attribute, false},
   { "common",                 0, 0, true,  false, false,
-                             handle_common_attribute },
+                             handle_common_attribute, false },
   /* FIXME: logically, noreturn attributes should be listed as
      "false, true, true" and apply to function types.  But implementing this
      would require all the places in the compiler that use TREE_THIS_VOLATILE
      on a decl to identify non-returning functions to be located and fixed
      to check the function type instead.  */
   { "noreturn",               0, 0, true,  false, false,
-                             handle_noreturn_attribute },
+                             handle_noreturn_attribute, false },
   { "volatile",               0, 0, true,  false, false,
-                             handle_noreturn_attribute },
+                             handle_noreturn_attribute, false },
   { "noinline",               0, 0, true,  false, false,
-                             handle_noinline_attribute },
+                             handle_noinline_attribute, false },
   { "noclone",                0, 0, true,  false, false,
-                             handle_noclone_attribute },
+                             handle_noclone_attribute, false },
   { "leaf",                   0, 0, true,  false, false,
-                             handle_leaf_attribute },
+                             handle_leaf_attribute, false },
   { "always_inline",          0, 0, true,  false, false,
-                             handle_always_inline_attribute },
+                             handle_always_inline_attribute, false },
   { "gnu_inline",             0, 0, true,  false, false,
-                             handle_gnu_inline_attribute },
+                             handle_gnu_inline_attribute, false },
   { "artificial",             0, 0, true,  false, false,
-                             handle_artificial_attribute },
+                             handle_artificial_attribute, false },
   { "flatten",                0, 0, true,  false, false,
-                             handle_flatten_attribute },
+                             handle_flatten_attribute, false },
   { "used",                   0, 0, true,  false, false,
-                             handle_used_attribute },
+                             handle_used_attribute, false },
   { "unused",                 0, 0, false, false, false,
-                             handle_unused_attribute },
+                             handle_unused_attribute, false },
   { "externally_visible",     0, 0, true,  false, false,
-                             handle_externally_visible_attribute },
+                             handle_externally_visible_attribute, false },
   /* The same comments as for noreturn attributes apply to const ones.  */
   { "const",                  0, 0, true,  false, false,
-                             handle_const_attribute },
+                             handle_const_attribute, false },
   { "transparent_union",      0, 0, false, false, false,
-                             handle_transparent_union_attribute },
+                             handle_transparent_union_attribute, false },
   { "constructor",            0, 1, true,  false, false,
-                             handle_constructor_attribute },
+                             handle_constructor_attribute, false },
   { "destructor",             0, 1, true,  false, false,
-                             handle_destructor_attribute },
+                             handle_destructor_attribute, false },
   { "mode",                   1, 1, false,  true, false,
-                             handle_mode_attribute },
+                             handle_mode_attribute, false },
   { "section",                1, 1, true,  false, false,
-                             handle_section_attribute },
+                             handle_section_attribute, false },
   { "aligned",                0, 1, false, false, false,
-                             handle_aligned_attribute },
+                             handle_aligned_attribute, false },
   { "weak",                   0, 0, true,  false, false,
-                             handle_weak_attribute },
+                             handle_weak_attribute, false },
   { "ifunc",                  1, 1, true,  false, false,
-                             handle_ifunc_attribute },
+                             handle_ifunc_attribute, false },
   { "alias",                  1, 1, true,  false, false,
-                             handle_alias_attribute },
+                             handle_alias_attribute, false },
   { "weakref",                0, 1, true,  false, false,
-                             handle_weakref_attribute },
+                             handle_weakref_attribute, false },
   { "no_instrument_function", 0, 0, true,  false, false,
-                             handle_no_instrument_function_attribute },
+                             handle_no_instrument_function_attribute,
+                             false },
   { "malloc",                 0, 0, true,  false, false,
-                             handle_malloc_attribute },
+                             handle_malloc_attribute, false },
   { "returns_twice",          0, 0, true,  false, false,
-                             handle_returns_twice_attribute },
+                             handle_returns_twice_attribute, false },
   { "no_stack_limit",         0, 0, true,  false, false,
-                             handle_no_limit_stack_attribute },
+                             handle_no_limit_stack_attribute, false },
   { "pure",                   0, 0, true,  false, false,
-                             handle_pure_attribute },
+                             handle_pure_attribute, false },
   /* For internal use (marking of builtins) only.  The name contains space
      to prevent its usage in source code.  */
   { "no vops",                0, 0, true,  false, false,
-                             handle_novops_attribute },
+                             handle_novops_attribute, false },
   { "deprecated",             0, 1, false, false, false,
-                             handle_deprecated_attribute },
+                             handle_deprecated_attribute, false },
   { "vector_size",           1, 1, false, true, false,
-                             handle_vector_size_attribute },
+                             handle_vector_size_attribute, false },
   { "visibility",            1, 1, false, false, false,
-                             handle_visibility_attribute },
+                             handle_visibility_attribute, false },
   { "tls_model",             1, 1, true,  false, false,
-                             handle_tls_model_attribute },
+                             handle_tls_model_attribute, false },
   { "nonnull",                0, -1, false, true, true,
-                             handle_nonnull_attribute },
+                             handle_nonnull_attribute, false },
   { "nothrow",                0, 0, true,  false, false,
-                             handle_nothrow_attribute },
-  { "may_alias",             0, 0, false, true, false, NULL },
+                             handle_nothrow_attribute, false },
+  { "may_alias",             0, 0, false, true, false, NULL, false },
   { "cleanup",               1, 1, true, false, false,
-                             handle_cleanup_attribute },
+                             handle_cleanup_attribute, false },
   { "warn_unused_result",     0, 0, false, true, true,
-                             handle_warn_unused_result_attribute },
+                             handle_warn_unused_result_attribute, false },
   { "sentinel",               0, 1, false, true, true,
-                             handle_sentinel_attribute },
+                             handle_sentinel_attribute, false },
   /* For internal use (marking of builtins) only.  The name contains space
      to prevent its usage in source code.  */
   { "type generic",           0, 0, false, true, true,
-                             handle_type_generic_attribute },
+                             handle_type_generic_attribute, false },
   { "alloc_size",            1, 2, false, true, true,
-                             handle_alloc_size_attribute },
+                             handle_alloc_size_attribute, false },
   { "cold",                   0, 0, true,  false, false,
-                             handle_cold_attribute },
+                             handle_cold_attribute, false },
   { "hot",                    0, 0, true,  false, false,
-                             handle_hot_attribute },
+                             handle_hot_attribute, false },
   { "warning",               1, 1, true,  false, false,
-                             handle_error_attribute },
+                             handle_error_attribute, false },
   { "error",                 1, 1, true,  false, false,
-                             handle_error_attribute },
+                             handle_error_attribute, false },
   { "target",                 1, -1, true, false, false,
-                             handle_target_attribute },
+                             handle_target_attribute, false },
   { "optimize",               1, -1, true, false, false,
-                             handle_optimize_attribute },
+                             handle_optimize_attribute, false },
   { "no_split_stack",        0, 0, true,  false, false,
-                             handle_no_split_stack_attribute },
+                             handle_no_split_stack_attribute, false },
   /* For internal use (marking of builtins and runtime functions) only.
      The name contains space to prevent its usage in source code.  */
   { "fn spec",               1, 1, false, true, true,
-                             handle_fnspec_attribute },
-  { NULL,                     0, 0, false, false, false, NULL }
+                             handle_fnspec_attribute, false },
+  { NULL,                     0, 0, false, false, false, NULL, false }
 };
 
 /* Give the specifications for the format attributes, used by C and all
@@ -707,12 +709,13 @@ const struct attribute_spec c_common_attribute_table[] =
 
 const struct attribute_spec c_common_format_attribute_table[] =
 {
-  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
+  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
+       affects_type_identity } */
   { "format",                 3, 3, false, true,  true,
-                             handle_format_attribute },
+                             handle_format_attribute, false },
   { "format_arg",             1, 1, false, true,  true,
-                             handle_format_arg_attribute },
-  { NULL,                     0, 0, false, false, false, NULL }
+                             handle_format_arg_attribute, false },
+  { NULL,                     0, 0, false, false, false, NULL, false }
 };
 
 /* Return identifier for address space AS.  */
index 76ab31aea730ad976e21f0aba71b02b04f5cbd5e..78b4d1789e6f4baa8a48a3ee91cce0e83baac4e8 100644 (file)
@@ -7582,9 +7582,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 } */
-  { COMMON_OBJECT,   0, 1, true,  false, false, common_object_handler },
-  { NULL,            0, 0, false, false, false, NULL }
+  /* { 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 }
 };
 
 void
index f1afda20f97463f7e71b9df2470df12df6d3404a..fa92ccf7479b2a3e0979856d3bda6d271e2ebc8d 100644 (file)
@@ -107,9 +107,11 @@ static void arc_conditional_register_usage (void);
 
 static const struct attribute_spec arc_attribute_table[] =
 {
-  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
-  { "interrupt", 1, 1, true,  false, false, arc_handle_interrupt_attribute },
-  { NULL,        0, 0, false, false, false, NULL }
+  /* { 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,
+    false },
+  { NULL,        0, 0, false, false, false, NULL, false }
 };
 \f
 /* Initialize the GCC target structure.  */
index 4784939b47f295d2a8bad269c6773cb3e11bca1e..e863e8c19689882f303204d1e8ac3c3d680f598e 100644 (file)
@@ -255,20 +255,25 @@ static reg_class_t arm_preferred_rename_class (reg_class_t rclass);
 /* Table of machine attributes.  */
 static const struct attribute_spec arm_attribute_table[] =
 {
-  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
+  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
+       affects_type_identity } */
   /* 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 },
+  { "long_call",    0, 0, false, true,  true,  NULL, false },
   /* Whereas these functions are always known to reside within the 26 bit
      addressing range.  */
-  { "short_call",   0, 0, false, true,  true,  NULL },
+  { "short_call",   0, 0, false, true,  true,  NULL, false },
   /* Specify the procedure call conventions for a function.  */
-  { "pcs",          1, 1, false, true,  true,  arm_handle_pcs_attribute },
+  { "pcs",          1, 1, false, true,  true,  arm_handle_pcs_attribute,
+    false },
   /* Interrupt Service Routines have special prologue and epilogue requirements.  */
-  { "isr",          0, 1, false, false, false, arm_handle_isr_attribute },
-  { "interrupt",    0, 1, false, false, false, arm_handle_isr_attribute },
-  { "naked",        0, 0, true,  false, false, arm_handle_fndecl_attribute },
+  { "isr",          0, 1, false, false, false, arm_handle_isr_attribute,
+    false },
+  { "interrupt",    0, 1, false, false, false, arm_handle_isr_attribute,
+    false },
+  { "naked",        0, 0, true,  false, false, arm_handle_fndecl_attribute,
+    false },
 #ifdef ARM_PE
   /* ARM/PE has three new attributes:
      interfacearm - ?
@@ -279,15 +284,17 @@ 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 },
-  { "dllexport",    0, 0, true,  false, false, NULL },
-  { "interfacearm", 0, 0, true,  false, false, arm_handle_fndecl_attribute },
+  { "dllimport",    0, 0, true,  false, false, NULL, false },
+  { "dllexport",    0, 0, true,  false, false, NULL, false },
+  { "interfacearm", 0, 0, true,  false, false, arm_handle_fndecl_attribute,
+    false },
 #elif TARGET_DLLIMPORT_DECL_ATTRIBUTES
-  { "dllimport",    0, 0, false, false, false, handle_dll_attribute },
-  { "dllexport",    0, 0, false, false, false, handle_dll_attribute },
-  { "notshared",    0, 0, false, true, false, arm_handle_notshared_attribute },
+  { "dllimport",    0, 0, false, false, false, handle_dll_attribute, false },
+  { "dllexport",    0, 0, false, false, false, handle_dll_attribute, false },
+  { "notshared",    0, 0, false, true, false, arm_handle_notshared_attribute,
+    false },
 #endif
-  { NULL,           0, 0, false, false, false, NULL }
+  { NULL,           0, 0, false, false, false, NULL, false }
 };
 
 /* Set default optimization options.  */
index 6709c365ce95e3f5e8ef3b1f30ef7e11e97d08e3..f9211886be5898f4d7e0eaadb2ec70cee3232e68 100644 (file)
@@ -129,14 +129,21 @@ section *progmem_section;
 /* AVR attributes.  */
 static const struct attribute_spec avr_attribute_table[] =
 {
-  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
-  { "progmem",   0, 0, false, false, false,  avr_handle_progmem_attribute },
-  { "signal",    0, 0, true,  false, false,  avr_handle_fndecl_attribute },
-  { "interrupt", 0, 0, true,  false, false,  avr_handle_fndecl_attribute },
-  { "naked",     0, 0, false, true,  true,   avr_handle_fntype_attribute },
-  { "OS_task",   0, 0, false, true,  true,   avr_handle_fntype_attribute },
-  { "OS_main",   0, 0, false, true,  true,   avr_handle_fntype_attribute },
-  { NULL,        0, 0, false, false, false, NULL }
+  /* { 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 },
+  { "signal",    0, 0, true,  false, false,  avr_handle_fndecl_attribute,
+    false },
+  { "interrupt", 0, 0, true,  false, false,  avr_handle_fndecl_attribute,
+    false },
+  { "naked",     0, 0, false, true,  true,   avr_handle_fntype_attribute,
+    false },
+  { "OS_task",   0, 0, false, true,  true,   avr_handle_fntype_attribute,
+    false },
+  { "OS_main",   0, 0, false, true,  true,   avr_handle_fntype_attribute,
+    false },
+  { NULL,        0, 0, false, false, false, NULL, false }
 };
 
 /* Implement TARGET_OPTION_OPTIMIZATION_TABLE.  */
index a6f2a38a06ecef3d8158715a072afa6100777990..0e05e724788e76dd90a7d2e11d461c784c4bbe04 100644 (file)
@@ -5765,21 +5765,30 @@ bfin_handle_l2_attribute (tree *node, tree ARG_UNUSED (name),
 /* Table of valid machine attributes.  */
 static const struct attribute_spec bfin_attribute_table[] =
 {
-  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
-  { "interrupt_handler", 0, 0, false, true,  true, handle_int_attribute },
-  { "exception_handler", 0, 0, false, true,  true, handle_int_attribute },
-  { "nmi_handler", 0, 0, false, true,  true, handle_int_attribute },
-  { "nesting", 0, 0, false, true,  true, NULL },
-  { "kspisusp", 0, 0, false, true,  true, NULL },
-  { "saveall", 0, 0, false, true,  true, NULL },
-  { "longcall",  0, 0, false, true,  true,  bfin_handle_longcall_attribute },
-  { "shortcall", 0, 0, false, true,  true,  bfin_handle_longcall_attribute },
-  { "l1_text", 0, 0, true, false, false,  bfin_handle_l1_text_attribute },
-  { "l1_data", 0, 0, true, false, false,  bfin_handle_l1_data_attribute },
-  { "l1_data_A", 0, 0, true, false, false, bfin_handle_l1_data_attribute },
-  { "l1_data_B", 0, 0, true, false, false,  bfin_handle_l1_data_attribute },
-  { "l2", 0, 0, true, false, false,  bfin_handle_l2_attribute },
-  { NULL, 0, 0, false, false, false, NULL }
+  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
+       affects_type_identity } */
+  { "interrupt_handler", 0, 0, false, true,  true, handle_int_attribute,
+    false },
+  { "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 },
+  { "longcall",  0, 0, false, true,  true,  bfin_handle_longcall_attribute,
+    false },
+  { "shortcall", 0, 0, false, true,  true,  bfin_handle_longcall_attribute,
+    false },
+  { "l1_text", 0, 0, true, false, false,  bfin_handle_l1_text_attribute,
+    false },
+  { "l1_data", 0, 0, true, false, false,  bfin_handle_l1_data_attribute,
+    false },
+  { "l1_data_A", 0, 0, true, false, false, bfin_handle_l1_data_attribute,
+    false },
+  { "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 }
 };
 \f
 /* Implementation of TARGET_ASM_INTEGER.  When using FD-PIC, we need to
index 79d341c472e33adff06a2d9cf0fdc31fdf41a623..8f635d5a171e1516727d1f5c9155835c39dd0c7d 100644 (file)
@@ -183,8 +183,8 @@ static void crx_function_arg_advance (CUMULATIVE_ARGS *, enum machine_mode,
 
 static const struct attribute_spec crx_attribute_table[] = {
   /* ISRs have special prologue and epilogue requirements. */
-  {"interrupt", 0, 0, false, true, true, NULL},
-  {NULL, 0, 0, false, false, false, NULL}
+  {"interrupt", 0, 0, false, true, true, NULL, false},
+  {NULL, 0, 0, false, false, false, NULL, false}
 };
 
 /* Option handling.  */
index 0526d851fc3887be5312bac2802b2569dd05ee52..e3f69601d9b8e4af2c194f89b3e33a374a2deb7e 100644 (file)
@@ -726,11 +726,12 @@ extern GTY(()) section * darwin_sections[NUM_DARWIN_SECTIONS];
 
 /* Extra attributes for Darwin.  */
 #define SUBTARGET_ATTRIBUTE_TABLE                                           \
-  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */ \
+  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,     \
+       affects_type_identity } */                                                   \
   { "apple_kext_compatibility", 0, 0, false, true, false,                   \
-    darwin_handle_kext_attribute },                                         \
+    darwin_handle_kext_attribute, false },                                  \
   { "weak_import", 0, 0, true, false, false,                                \
-    darwin_handle_weak_import_attribute }
+    darwin_handle_weak_import_attribute, false }
 
 #undef ASM_GENERATE_INTERNAL_LABEL
 #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM)  \
index 834fc992fc1fe7e0166175629875023d8010694b..774863cbea733fd154b30e675314586abac6c3ea 100644 (file)
@@ -5367,15 +5367,23 @@ 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 } */
-  { "interrupt_handler", 0, 0, true,  false, false, h8300_handle_fndecl_attribute },
-  { "saveall",           0, 0, true,  false, false, h8300_handle_fndecl_attribute },
-  { "OS_Task",           0, 0, true,  false, false, h8300_handle_fndecl_attribute },
-  { "monitor",           0, 0, true,  false, false, h8300_handle_fndecl_attribute },
-  { "function_vector",   0, 0, true,  false, false, h8300_handle_fndecl_attribute },
-  { "eightbit_data",     0, 0, true,  false, false, h8300_handle_eightbit_data_attribute },
-  { "tiny_data",         0, 0, true,  false, false, h8300_handle_tiny_data_attribute },
-  { NULL,                0, 0, false, false, false, NULL }
+  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
+       affects_type_identity } */
+  { "interrupt_handler", 0, 0, true,  false, false,
+    h8300_handle_fndecl_attribute, false },
+  { "saveall",           0, 0, true,  false, false,
+    h8300_handle_fndecl_attribute, false },
+  { "OS_Task",           0, 0, true,  false, false,
+    h8300_handle_fndecl_attribute, false },
+  { "monitor",           0, 0, true,  false, false,
+    h8300_handle_fndecl_attribute, false },
+  { "function_vector",   0, 0, true,  false, false,
+    h8300_handle_fndecl_attribute, false },
+  { "eightbit_data",     0, 0, true,  false, false,
+    h8300_handle_eightbit_data_attribute, false },
+  { "tiny_data",         0, 0, true,  false, false,
+    h8300_handle_tiny_data_attribute, false },
+  { NULL,                0, 0, false, false, false, NULL, false }
 };
 
 
index 9c32dda2e96521965a6e1ba1a77a6596256c7478..41ca7992411d7a65ceb8a2794c26ff6acf2f9cb7 100644 (file)
@@ -454,8 +454,10 @@ do {                                               \
 #define TARGET_USE_LOCAL_THUNK_ALIAS_P(DECL) (!DECL_ONE_ONLY (DECL))
 
 #define SUBTARGET_ATTRIBUTE_TABLE \
-  { "selectany", 0, 0, true, false, false, ix86_handle_selectany_attribute }
-  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
+  { "selectany", 0, 0, true, false, false, ix86_handle_selectany_attribute, \
+    false }
+  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
+       affects_type_identity } */
 
 /*  mcount() does not need a counter variable.  */
 #undef NO_PROFILE_COUNTERS
index a25ff7ed45bc550bfe744c43937833aaeb02a56e..d158969eef341290e74d4b7a526d2e9dcb56f3aa 100644 (file)
@@ -32723,45 +32723,56 @@ ix86_expand_round (rtx operand0, rtx operand1)
 /* Table of valid machine attributes.  */
 static const struct attribute_spec ix86_attribute_table[] =
 {
-  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
+  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
+       affects_type_identity } */
   /* Stdcall attribute says callee is responsible for popping arguments
      if they are not variable.  */
-  { "stdcall",   0, 0, false, true,  true,  ix86_handle_cconv_attribute },
+  { "stdcall",   0, 0, false, true,  true,  ix86_handle_cconv_attribute,
+    true },
   /* Fastcall attribute says callee is responsible for popping arguments
      if they are not variable.  */
-  { "fastcall",  0, 0, false, true,  true,  ix86_handle_cconv_attribute },
+  { "fastcall",  0, 0, false, true,  true,  ix86_handle_cconv_attribute,
+    true },
   /* Thiscall attribute says callee is responsible for popping arguments
      if they are not variable.  */
-  { "thiscall",  0, 0, false, true,  true,  ix86_handle_cconv_attribute },
+  { "thiscall",  0, 0, false, true,  true,  ix86_handle_cconv_attribute,
+    true },
   /* Cdecl attribute says the callee is a normal C declaration */
-  { "cdecl",     0, 0, false, true,  true,  ix86_handle_cconv_attribute },
+  { "cdecl",     0, 0, false, true,  true,  ix86_handle_cconv_attribute,
+    true },
   /* Regparm attribute specifies how many integer arguments are to be
      passed in registers.  */
-  { "regparm",   1, 1, false, true,  true,  ix86_handle_cconv_attribute },
+  { "regparm",   1, 1, false, true,  true,  ix86_handle_cconv_attribute,
+    true },
   /* Sseregparm attribute says we are using x86_64 calling conventions
      for FP arguments.  */
-  { "sseregparm", 0, 0, false, true, true, ix86_handle_cconv_attribute },
+  { "sseregparm", 0, 0, false, true, true, ix86_handle_cconv_attribute,
+    true },
   /* 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_cconv_attribute },
+    false, true,  true, ix86_handle_cconv_attribute, false },
 #if TARGET_DLLIMPORT_DECL_ATTRIBUTES
-  { "dllimport", 0, 0, false, false, false, handle_dll_attribute },
-  { "dllexport", 0, 0, false, false, false, handle_dll_attribute },
-  { "shared",    0, 0, true,  false, false, ix86_handle_shared_attribute },
+  { "dllimport", 0, 0, false, false, false, handle_dll_attribute, false },
+  { "dllexport", 0, 0, false, false, false, handle_dll_attribute, false },
+  { "shared",    0, 0, true,  false, false, ix86_handle_shared_attribute,
+    false },
 #endif
-  { "ms_struct", 0, 0, false, false,  false, ix86_handle_struct_attribute },
-  { "gcc_struct", 0, 0, false, false,  false, ix86_handle_struct_attribute },
+  { "ms_struct", 0, 0, false, false,  false, ix86_handle_struct_attribute,
+    false },
+  { "gcc_struct", 0, 0, false, false,  false, ix86_handle_struct_attribute,
+    false },
 #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 },
-  { "sysv_abi", 0, 0, false, true, true, ix86_handle_abi_attribute },
-  { "ms_hook_prologue", 0, 0, true, false, false, ix86_handle_fndecl_attribute },
+  { "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_hook_prologue", 0, 0, true, false, false, ix86_handle_fndecl_attribute,
+    false },
   { "callee_pop_aggregate_return", 1, 1, false, true, true,
-    ix86_handle_callee_pop_aggregate_return },
+    ix86_handle_callee_pop_aggregate_return, true },
   /* End element.  */
-  { NULL,        0, 0, false, false, false, NULL }
+  { NULL,        0, 0, false, false, false, NULL, false }
 };
 
 /* Implement targetm.vectorize.builtin_vectorization_cost.  */
index 1d3f8b18d347bd7db03de3d31338631ee05c9380..55a55e8a593d7b670b0f2d9735109b5dc43f5085 100644 (file)
@@ -342,15 +342,18 @@ static section * ia64_hpux_function_section (tree, enum node_frequency,
 /* Table of valid machine attributes.  */
 static const struct attribute_spec ia64_attribute_table[] =
 {
-  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
-  { "syscall_linkage", 0, 0, false, true,  true,  NULL },
-  { "model",          1, 1, true, false, false, ia64_handle_model_attribute },
+  /* { 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 },
+  { "model",          1, 1, true, false, false, ia64_handle_model_attribute,
+    false },
 #if TARGET_ABI_OPEN_VMS
-  { "common_object",   1, 1, true, false, false, ia64_vms_common_object_attribute},
+  { "common_object",   1, 1, true, false, false,
+    ia64_vms_common_object_attribute, false },
 #endif
   { "version_id",      1, 1, true, false, false,
-    ia64_handle_version_id_attribute },
-  { NULL,             0, 0, false, false, false, NULL }
+    ia64_handle_version_id_attribute, false },
+  { NULL,             0, 0, false, false, false, NULL, false }
 };
 
 /* Implement overriding of the optimization options.  */
index 83bf86c2071f1a0e2eb6bfe553b9e09721d73a57..56f9cf5ccca01d8d2efb3013cff7839d54d09d00 100644 (file)
@@ -3232,11 +3232,12 @@ 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},
-  {"bank_switch", 0, 0, false, false, false, interrupt_handler},
-  {"fast_interrupt", 0, 0, false, false, false, interrupt_handler},
-  {"function_vector", 1, 1, true,  false, false, function_vector_handler},
-  {0, 0, 0, 0, 0, 0, 0}
+  {"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},
+  {"function_vector", 1, 1, true,  false, false, function_vector_handler,
+   false},
+  {0, 0, 0, 0, 0, 0, 0, false}
 };
 
 #undef TARGET_COMP_TYPE_ATTRIBUTES
index 444f16efbbea939c58691c9d8c1165cb5a99a4ee..820aa8de1a1c1c8acb07bc0cd52432875e9b2ecf 100644 (file)
@@ -108,10 +108,12 @@ static void m32r_trampoline_init (rtx, tree, rtx);
 
 static const struct attribute_spec m32r_attribute_table[] =
 {
-  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
-  { "interrupt", 0, 0, true,  false, false, NULL },
-  { "model",     1, 1, true,  false, false, m32r_handle_model_attribute },
-  { NULL,        0, 0, false, false, false, NULL }
+  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
+       affects_type_identity } */
+  { "interrupt", 0, 0, true,  false, false, NULL, false },
+  { "model",     1, 1, true,  false, false, m32r_handle_model_attribute,
+    false },
+  { NULL,        0, 0, false, false, false, NULL, false }
 };
 
 static const struct default_options m32r_option_optimization_table[] =
index f45de3d8505be1b36c2f5b1bf8d84467ffd38328..1e414102c3f1fed985e4fb8db7954342e965190b 100644 (file)
@@ -231,13 +231,19 @@ static const struct processor_costs m6812_cost = {
 
 static const struct attribute_spec m68hc11_attribute_table[] =
 {
-  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
-  { "interrupt", 0, 0, false, true,  true,  m68hc11_handle_fntype_attribute },
-  { "trap",      0, 0, false, true,  true,  m68hc11_handle_fntype_attribute },
-  { "far",       0, 0, false, true,  true,  m68hc11_handle_fntype_attribute },
-  { "near",      0, 0, false, true,  true,  m68hc11_handle_fntype_attribute },
-  { "page0",     0, 0, false, false, false, m68hc11_handle_page0_attribute },
-  { NULL,        0, 0, false, false, false, NULL }
+  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
+       affects_type_identity } */
+  { "interrupt", 0, 0, false, true,  true,  m68hc11_handle_fntype_attribute,
+    false },
+  { "trap",      0, 0, false, true,  true,  m68hc11_handle_fntype_attribute,
+    false },
+  { "far",       0, 0, false, true,  true,  m68hc11_handle_fntype_attribute,
+    false },
+  { "near",      0, 0, false, true,  true,  m68hc11_handle_fntype_attribute,
+    false },
+  { "page0",     0, 0, false, false, false, m68hc11_handle_page0_attribute,
+    false },
+  { NULL,        0, 0, false, false, false, NULL, false }
 };
 \f
 /* Initialize the GCC target structure.  */
index b8e9ff26680cd889a271b5b5021d6f7ee79c53d5..5810aa43228d9daa8c5aea99e4af06c13e23dbb7 100644 (file)
@@ -298,11 +298,15 @@ const char *m68k_library_id_string = "_current_shared_library_a5_offset_";
 
 static const struct attribute_spec m68k_attribute_table[] =
 {
-  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
-  { "interrupt", 0, 0, true,  false, false, m68k_handle_fndecl_attribute },
-  { "interrupt_handler", 0, 0, true,  false, false, m68k_handle_fndecl_attribute },
-  { "interrupt_thread", 0, 0, true,  false, false, m68k_handle_fndecl_attribute },
-  { NULL,                0, 0, false, false, false, NULL }
+  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
+       affects_type_identity } */
+  { "interrupt", 0, 0, true,  false, false, m68k_handle_fndecl_attribute,
+    false },
+  { "interrupt_handler", 0, 0, true,  false, false,
+    m68k_handle_fndecl_attribute, false },
+  { "interrupt_thread", 0, 0, true,  false, false,
+    m68k_handle_fndecl_attribute, false },
+  { NULL,                0, 0, false, false, false, NULL, false }
 };
 
 struct gcc_target targetm = TARGET_INITIALIZER;
index 8118276a87bfc5c5c8c2970b26bd571a710c991f..093ac2f2de0100777d749795c2b1edfcece8e22e 100644 (file)
@@ -143,11 +143,13 @@ static void       mcore_option_override           (void);
 
 static const struct attribute_spec mcore_attribute_table[] =
 {
-  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
-  { "dllexport", 0, 0, true,  false, false, NULL },
-  { "dllimport", 0, 0, true,  false, false, NULL },
-  { "naked",     0, 0, true,  false, false, mcore_handle_naked_attribute },
-  { NULL,        0, 0, false, false, false, NULL }
+  /* { 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 },
+  { "naked",     0, 0, true,  false, false, mcore_handle_naked_attribute,
+    false },
+  { NULL,        0, 0, false, false, false, NULL, false }
 };
 
 /* What options are we going to default to specific settings when
index 913a30a7563dc4598f96379dd85816744c601f34..73bb45d6c66b2920f7d042523d09657b7006d4d6 100644 (file)
@@ -4088,17 +4088,19 @@ mep_validate_vliw (tree *node, tree name, tree args ATTRIBUTE_UNUSED,
 
 static const struct attribute_spec mep_attribute_table[11] =
 {
-  /* name         min max decl   type   func   handler */
-  { "based",        0, 0, false, false, false, mep_validate_based_tiny },
-  { "tiny",         0, 0, false, false, false, mep_validate_based_tiny },
-  { "near",         0, 0, false, false, false, mep_validate_near_far },
-  { "far",          0, 0, false, false, false, mep_validate_near_far },
-  { "disinterrupt", 0, 0, false, false, false, mep_validate_disinterrupt },
-  { "interrupt",    0, 0, false, false, false, mep_validate_interrupt },
-  { "io",           0, 1, false, false, false, mep_validate_io_cb },
-  { "cb",           0, 1, false, false, false, mep_validate_io_cb },
-  { "vliw",         0, 0, false, true,  false, mep_validate_vliw },
-  { NULL,           0, 0, false, false, false, NULL }
+  /* name         min max decl   type   func   handler
+     affects_type_identity */
+  { "based",        0, 0, false, false, false, mep_validate_based_tiny, false },
+  { "tiny",         0, 0, false, false, false, mep_validate_based_tiny, false },
+  { "near",         0, 0, false, false, false, mep_validate_near_far, false },
+  { "far",          0, 0, false, false, false, mep_validate_near_far, false },
+  { "disinterrupt", 0, 0, false, false, false, mep_validate_disinterrupt,
+    false },
+  { "interrupt",    0, 0, false, false, false, mep_validate_interrupt, false },
+  { "io",           0, 1, false, false, false, mep_validate_io_cb, false },
+  { "cb",           0, 1, false, false, false, mep_validate_io_cb, false },
+  { "vliw",         0, 0, false, true,  false, mep_validate_vliw, false },
+  { NULL,           0, 0, false, false, false, NULL, false }
 };
 
 static bool
index b50c7942e0d471fbedd72414e301a0dd3eedf01e..a38545f4a1b54a2848f654c270148ad2dab3354c 100644 (file)
@@ -195,10 +195,14 @@ int interrupt_handler;
 int save_volatiles;
 
 const struct attribute_spec microblaze_attribute_table[] = {
-  /* name         min_len, max_len, decl_req, type_req, fn_type, req_handler */
-  {"interrupt_handler", 0,       0,     true,    false,   false,        NULL},
-  {"save_volatiles"   , 0,       0,     true,    false,   false,        NULL},
-  { NULL,              0,       0,    false,    false,   false,        NULL}
+  /* name         min_len, max_len, decl_req, type_req, fn_type, req_handler,
+     affects_type_identity */
+  {"interrupt_handler", 0,       0,     true,    false,   false,        NULL,
+    false },
+  {"save_volatiles"   , 0,       0,     true,    false,   false,        NULL,
+    false },
+  { NULL,              0,       0,    false,    false,   false,        NULL,
+    false }
 };
 
 static int microblaze_interrupt_function_p (tree);
index 9de479bf5c8a3e2789732d726dbc96a9bb9e1460..11d8ff0369a32a21a043baf0bb8894aa25538577 100644 (file)
@@ -641,22 +641,23 @@ const enum reg_class mips_regno_to_class[FIRST_PSEUDO_REGISTER] = {
 
 /* 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 } */
-  { "long_call",   0, 0, false, true,  true,  NULL },
-  { "far",                0, 0, false, true,  true,  NULL },
-  { "near",        0, 0, false, true,  true,  NULL },
+  /* { 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 },
   /* 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 },
-  { "nomips16",    0, 0, true,  false, false, NULL },
+  { "mips16",     0, 0, true,  false, false, NULL, false },
+  { "nomips16",    0, 0, true,  false, false, NULL, false },
   /* Allow functions to be specified as interrupt handlers */
-  { "interrupt",   0, 0, false, true,  true, NULL },
-  { "use_shadow_register_set", 0, 0, false, true,  true, NULL },
-  { "keep_interrupts_masked",  0, 0, false, true,  true, NULL },
-  { "use_debug_exception_return", 0, 0, false, true,  true, NULL },
-  { NULL,         0, 0, false, false, false, NULL }
+  { "interrupt",   0, 0, false, true,  true, NULL, false },
+  { "use_shadow_register_set", 0, 0, false, true,  true, NULL, 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 }
 };
 \f
 /* A table describing all the processors GCC knows about.  Names are
index 0714c8fc3998734dcc8274e98b3dab0abdcb67a4..eca1b44f4ec3a5b5cc18b369be924df6ba1fa13b 100644 (file)
@@ -1303,16 +1303,22 @@ 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 } */
-  { "altivec",   1, 1, false, true,  false, rs6000_handle_altivec_attribute },
-  { "longcall",  0, 0, false, true,  true,  rs6000_handle_longcall_attribute },
-  { "shortcall", 0, 0, false, true,  true,  rs6000_handle_longcall_attribute },
-  { "ms_struct", 0, 0, false, false, false, rs6000_handle_struct_attribute },
-  { "gcc_struct", 0, 0, false, false, false, rs6000_handle_struct_attribute },
+  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
+       affects_type_identity } */
+  { "altivec",   1, 1, false, true,  false, rs6000_handle_altivec_attribute,
+    false },
+  { "longcall",  0, 0, false, true,  true,  rs6000_handle_longcall_attribute,
+    false },
+  { "shortcall", 0, 0, false, true,  true,  rs6000_handle_longcall_attribute,
+    false },
+  { "ms_struct", 0, 0, false, false, false, rs6000_handle_struct_attribute,
+    false },
+  { "gcc_struct", 0, 0, false, false, false, rs6000_handle_struct_attribute,
+    false },
 #ifdef SUBTARGET_ATTRIBUTE_TABLE
   SUBTARGET_ATTRIBUTE_TABLE,
 #endif
-  { NULL,        0, 0, false, false, false, NULL }
+  { NULL,        0, 0, false, false, false, NULL, false }
 };
 
 /* Implement TARGET_OPTION_OPTIMIZATION_TABLE.  */
index 6b179e7b9a35de1dfe358155a72165aadebcccce..592f3118ddf82b65669b2ad222b0773301508dd2 100644 (file)
@@ -2237,11 +2237,15 @@ rx_handle_func_attribute (tree * node,
 /* Table of RX specific attributes.  */
 const struct attribute_spec rx_attribute_table[] =
 {
-  /* Name, min_len, max_len, decl_req, type_req, fn_type_req, handler.  */
-  { "fast_interrupt", 0, 0, true, false, false, rx_handle_func_attribute },
-  { "interrupt",      0, 0, true, false, false, rx_handle_func_attribute },
-  { "naked",          0, 0, true, false, false, rx_handle_func_attribute },
-  { NULL,             0, 0, false, false, false, NULL }
+  /* Name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
+     affects_type_identity.  */
+  { "fast_interrupt", 0, 0, true, false, false, rx_handle_func_attribute,
+    false },
+  { "interrupt",      0, 0, true, false, false, rx_handle_func_attribute,
+    false },
+  { "naked",          0, 0, true, false, false, rx_handle_func_attribute,
+    false },
+  { NULL,             0, 0, false, false, false, NULL, false }
 };
 
 /* Extra processing for target specific command line options.  */
index fc739dd4f42de0b17c657030d7c643e01430741a..ee52c32a422c642efb00f80f67a1ba4e2d1d874e 100644 (file)
@@ -306,15 +306,24 @@ static void sh_conditional_register_usage (void);
 \f
 static const struct attribute_spec sh_attribute_table[] =
 {
-  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
-  { "interrupt_handler", 0, 0, true,  false, false, sh_handle_interrupt_handler_attribute },
-  { "sp_switch",         1, 1, true,  false, false, sh_handle_sp_switch_attribute },
-  { "trap_exit",         1, 1, true,  false, false, sh_handle_trap_exit_attribute },
-  { "renesas",           0, 0, false, true, false, sh_handle_renesas_attribute },
-  { "trapa_handler",     0, 0, true,  false, false, sh_handle_interrupt_handler_attribute },
-  { "nosave_low_regs",   0, 0, true,  false, false, sh_handle_interrupt_handler_attribute },
-  { "resbank",           0, 0, true,  false, false, sh_handle_resbank_handler_attribute },
-  { "function_vector",   1, 1, true,  false, false, sh2a_handle_function_vector_handler_attribute },
+  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
+       affects_type_identity } */
+  { "interrupt_handler", 0, 0, true,  false, false,
+    sh_handle_interrupt_handler_attribute, false },
+  { "sp_switch",         1, 1, true,  false, false,
+     sh_handle_sp_switch_attribute, false },
+  { "trap_exit",         1, 1, true,  false, false,
+    sh_handle_trap_exit_attribute, false },
+  { "renesas",           0, 0, false, true, false,
+    sh_handle_renesas_attribute, false },
+  { "trapa_handler",     0, 0, true,  false, false,
+    sh_handle_interrupt_handler_attribute, false },
+  { "nosave_low_regs",   0, 0, true,  false, false,
+    sh_handle_interrupt_handler_attribute, false },
+  { "resbank",           0, 0, true,  false, false,
+    sh_handle_resbank_handler_attribute, false },
+  { "function_vector",   1, 1, true,  false, false,
+    sh2a_handle_function_vector_handler_attribute, false },
 #ifdef SYMBIAN
   /* Symbian support adds three new attributes:
      dllexport - for exporting a function/variable that will live in a dll
@@ -323,10 +332,12 @@ static const struct attribute_spec sh_attribute_table[] =
      Microsoft allows multiple declspecs in one __declspec, separating
      them with spaces.  We do NOT support this.  Instead, use __declspec
      multiple times.  */
-  { "dllimport",         0, 0, true,  false, false, sh_symbian_handle_dll_attribute },
-  { "dllexport",         0, 0, true,  false, false, sh_symbian_handle_dll_attribute },
+  { "dllimport",         0, 0, true,  false, false,
+    sh_symbian_handle_dll_attribute, false },
+  { "dllexport",         0, 0, true,  false, false,
+    sh_symbian_handle_dll_attribute, false },
 #endif
-  { NULL,                0, 0, false, false, false, NULL }
+  { NULL,                0, 0, false, false, false, NULL, false }
 };
 
 /* Set default optimization options.  */
index d520dbf713134ce64e757a353aebeed77e67082c..7d081c6d40b39227ea71695eb8e5f220dd24475d 100644 (file)
@@ -257,8 +257,8 @@ __enable_execute_stack (void *addr)                                 \
 /* #pragma init and #pragma fini are implemented on top of init and
    fini attributes.  */
 #define SOLARIS_ATTRIBUTE_TABLE                                                \
-  { "init",      0, 0, true,  false,  false, NULL },                   \
-  { "fini",      0, 0, true,  false,  false, NULL }
+  { "init",      0, 0, true,  false,  false, NULL, false },            \
+  { "fini",      0, 0, true,  false,  false, NULL, false }
 
 /* Solaris/x86 as and gas support the common ELF .section/.pushsection
    syntax.  */
index 2060fa2eccbdbfb1ff1f1ee85c5697af7b186f63..03edae50adf70ae0c8a9dc69fab4d826c77b4fd0 100644 (file)
@@ -469,9 +469,10 @@ static enum machine_mode sparc_preferred_simd_mode (enum machine_mode);
 /* Table of valid machine attributes.  */
 static const struct attribute_spec sparc_attribute_table[] =
 {
-  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
+  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
+       do_diagnostic } */
   SUBTARGET_ATTRIBUTE_TABLE,
-  { NULL,        0, 0, false, false, false, NULL }
+  { NULL,        0, 0, false, false, false, NULL, false }
 };
 #endif
 \f
index d80d86d8cc9c21b865fe436e179a419383c78cad..46bc586c2c75dac0ebd4cb01fdf2fcaf715a5e98 100644 (file)
@@ -293,10 +293,13 @@ spu_libgcc_shift_count_mode (void);
 /*  Table of machine attributes.  */
 static const struct attribute_spec spu_attribute_table[] =
 {
-  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
-  { "naked",          0, 0, true,  false, false, spu_handle_fndecl_attribute },
-  { "spu_vector",     0, 0, false, true,  false, spu_handle_vector_attribute },
-  { NULL,             0, 0, false, false, false, NULL }
+  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
+       affects_type_identity } */
+  { "naked",          0, 0, true,  false, false, spu_handle_fndecl_attribute,
+    false },
+  { "spu_vector",     0, 0, false, true,  false, spu_handle_vector_attribute,
+    false },
+  { NULL,             0, 0, false, false, false, NULL, false }
 };
 \f
 /*  TARGET overrides.  */
index 3954d5055f317bea84ae12403089e722dd741779..052285c284afdb35d27b67258011df603dd78ef0 100644 (file)
@@ -2170,11 +2170,15 @@ 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.  */
-  { "interrupt", 0, 0, false, true,  true,  xstormy16_handle_interrupt_attribute },
-  { "BELOW100",  0, 0, false, false, false, xstormy16_handle_below100_attribute },
-  { "below100",  0, 0, false, false, false, xstormy16_handle_below100_attribute },
-  { NULL,        0, 0, false, false, false, NULL }
+  /* name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
+     affects_type_identity.  */
+  { "interrupt", 0, 0, false, true,  true,
+    xstormy16_handle_interrupt_attribute , false },
+  { "BELOW100",  0, 0, false, false, false,
+    xstormy16_handle_below100_attribute, false },
+  { "below100",  0, 0, false, false, false,
+    xstormy16_handle_below100_attribute, false },
+  { NULL,        0, 0, false, false, false, NULL, false }
 };
 
 /* Handle an "interrupt" attribute;
index 4fbdceb05c5e0770454b55ede302af03ccb1bad9..e3a19ff5e58174102b4ddf33a58a603b3f345010 100644 (file)
@@ -3118,13 +3118,19 @@ v850_issue_rate (void)
 
 static const struct attribute_spec v850_attribute_table[] =
 {
-  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
-  { "interrupt_handler", 0, 0, true,  false, false, v850_handle_interrupt_attribute },
-  { "interrupt",         0, 0, true,  false, false, v850_handle_interrupt_attribute },
-  { "sda",               0, 0, true,  false, false, v850_handle_data_area_attribute },
-  { "tda",               0, 0, true,  false, false, v850_handle_data_area_attribute },
-  { "zda",               0, 0, true,  false, false, v850_handle_data_area_attribute },
-  { NULL,                0, 0, false, false, false, NULL }
+  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
+       affects_type_identity } */
+  { "interrupt_handler", 0, 0, true,  false, false,
+    v850_handle_interrupt_attribute, false },
+  { "interrupt",         0, 0, true,  false, false,
+    v850_handle_interrupt_attribute, false },
+  { "sda",               0, 0, true,  false, false,
+    v850_handle_data_area_attribute, false },
+  { "tda",               0, 0, true,  false, false,
+    v850_handle_data_area_attribute, false },
+  { "zda",               0, 0, true,  false, false,
+    v850_handle_data_area_attribute, false },
+  { NULL,                0, 0, false, false, false, NULL, false }
 };
 \f
 /* Initialize the GCC target structure.  */
index e187dee223033ba993e8e99041410667a3dac845..37124b43c2510e03023bedb827920fbdc3008572 100644 (file)
@@ -1,3 +1,8 @@
+2011-03-21  Kai Tietz  <ktietz@redhat.com>
+
+       PR target/12171
+       * tree.c (cxx_attribute_table): Adjust table.
+
 2011-03-18  Jason Merrill  <jason@redhat.com>
 
        PR c++/48162
index 56639ffe836c700b1e42162f2cbd536fbd11f4b5..070ba810a49fcd3e0ba788ab9209edea0e5bbbdb 100644 (file)
@@ -2611,11 +2611,15 @@ zero_init_p (const_tree t)
 /* Table of valid C++ attributes.  */
 const struct attribute_spec cxx_attribute_table[] =
 {
-  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
-  { "java_interface", 0, 0, false, false, false, handle_java_interface_attribute },
-  { "com_interface",  0, 0, false, false, false, handle_com_interface_attribute },
-  { "init_priority",  1, 1, true,  false, false, handle_init_priority_attribute },
-  { NULL,            0, 0, false, false, false, NULL }
+  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
+       affects_type_identity } */
+  { "java_interface", 0, 0, false, false, false,
+    handle_java_interface_attribute, false },
+  { "com_interface",  0, 0, false, false, false,
+    handle_com_interface_attribute, false },
+  { "init_priority",  1, 1, true,  false, false,
+    handle_init_priority_attribute, false },
+  { NULL,            0, 0, false, false, false, NULL, false }
 };
 
 /* Handle a "java_interface" attribute; arguments as in
index 767cee8800cc73c33344dbf579e37a43e75895ee..6e878e6689598705e88bf856c17dc2a1c7cb0e83 100644 (file)
@@ -331,7 +331,7 @@ handle_user_attribute (tree *node, tree name, tree args,
 
 /* Attribute definition */
 static struct attribute_spec user_attr =
-  @{ "user", 1, 1, false,  false, false, handle_user_attribute @};
+  @{ "user", 1, 1, false,  false, false, handle_user_attribute, false @};
 
 /* Plugin callback called during attribute registration.
 Registered with register_callback (plugin_name, PLUGIN_ATTRIBUTES, register_attributes, NULL)
index 5b95565b30898bc8be5b31a1f241e3c6e534bfe3..e384294bf4630e032fa2c6e69791704cc3b24ada 100644 (file)
@@ -1,3 +1,8 @@
+2011-03-21  Kai Tietz  <ktietz@redhat.com>
+
+       PR target/12171
+       * lang.c (java_attribute_table): Adjust table.
+
 2011-02-13  Joseph Myers  <joseph@codesourcery.com>
 
        * jvspec.c (jvgenmain_spec): Remove %{a*}.
index d26f1551afe052d9cbfdcb33c8ea1ab29e84d00b..6a117d79fcceedad8c441558ce09dd0900c50770 100644 (file)
@@ -75,8 +75,8 @@ static tree java_eh_personality (void);
 const struct attribute_spec java_attribute_table[] =
 {
  { "nonnull",                0, -1, false, true, true,
-                             NULL },
-  { NULL,                     0, 0, false, false, false, NULL }
+                             NULL, false },
+  { NULL,                     0, 0, false, false, false, NULL, false }
 };
 
 /* Used to avoid printing error messages with bogus function
index b97da6f9a099c2c8b39432ceaedd29e41b213eee..124b0e75697df1bf1920b22dbac43649c3ed3890 100644 (file)
@@ -1,3 +1,8 @@
+2011-03-21  Kai Tietz  <ktietz@redhat.com>
+
+       PR target/12171
+       * lto-lang.c (lto_attribute_table): Adjust table.
+
 2011-02-18  Jakub Jelinek  <jakub@redhat.com>
 
        PR bootstrap/47807
index 5f157d6de06cb8dc23486414889215382780ba0b..aa928b6df62214865963e896d0db6afa1ff4dca1 100644 (file)
@@ -52,29 +52,30 @@ static tree handle_format_arg_attribute (tree *, tree, tree, int, bool *);
 /* Table of machine-independent attributes supported in GIMPLE.  */
 const struct attribute_spec lto_attribute_table[] =
 {
-  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
+  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
+       do_diagnostic } */
   { "noreturn",               0, 0, true,  false, false,
-                             handle_noreturn_attribute },
+                             handle_noreturn_attribute, false },
   { "leaf",                  0, 0, true,  false, false,
-                             handle_leaf_attribute },
+                             handle_leaf_attribute, false },
   /* The same comments as for noreturn attributes apply to const ones.  */
   { "const",                  0, 0, true,  false, false,
-                             handle_const_attribute },
+                             handle_const_attribute, false },
   { "malloc",                 0, 0, true,  false, false,
-                             handle_malloc_attribute },
+                             handle_malloc_attribute, false },
   { "pure",                   0, 0, true,  false, false,
-                             handle_pure_attribute },
+                             handle_pure_attribute, false },
   { "no vops",                0, 0, true,  false, false,
-                             handle_novops_attribute },
+                             handle_novops_attribute, false },
   { "nonnull",                0, -1, false, true, true,
-                             handle_nonnull_attribute },
+                             handle_nonnull_attribute, false },
   { "nothrow",                0, 0, true,  false, false,
-                             handle_nothrow_attribute },
+                             handle_nothrow_attribute, false },
   { "sentinel",               0, 1, false, true, true,
-                             handle_sentinel_attribute },
+                             handle_sentinel_attribute, false },
   { "type generic",           0, 0, false, true, true,
-                             handle_type_generic_attribute },
-  { NULL,                     0, 0, false, false, false, NULL }
+                             handle_type_generic_attribute, false },
+  { NULL,                     0, 0, false, false, false, NULL, false }
 };
 
 /* Give the specifications for the format attributes, used by C and all
@@ -82,12 +83,13 @@ 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 } */
+  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
+       affects_type_identity } */
   { "format",                 3, 3, false, true,  true,
-                             handle_format_attribute },
+                             handle_format_attribute, false },
   { "format_arg",             1, 1, false, true,  true,
-                             handle_format_arg_attribute },
-  { NULL,                     0, 0, false, false, false, NULL }
+                             handle_format_arg_attribute, false },
+  { NULL,                     0, 0, false, false, false, NULL, false }
 };
 
 enum built_in_attribute
index dbf0e213e39d82839ca3dca4e1835a1f10bde903..acb8524d9ad05aef7e81e78152dc8903ac5bc9ba 100644 (file)
@@ -1,3 +1,8 @@
+2011-03-21  Kai Tietz  <ktietz@redhat.com>
+
+       PR target/12171
+       * g++.dg/plugin/attribute_plugin.c: Adjust test.
+
 2011-03-21  Chung-Lin Tang  <cltang@codesourcery.com>
 
        * gcc.target/arm/xor-and.c: New.
index e5b0566837d44d4926f6b1401304ed0eaa52509c..8de5f44cbf8721521fc20b491a63b5c8af1b7feb 100644 (file)
@@ -26,7 +26,7 @@ handle_user_attribute (tree *node, tree name, tree args,
 /* Attribute definition */
 
 static struct attribute_spec user_attr =
-  { "user", 1, 1, false,  false, false, handle_user_attribute };
+  { "user", 1, 1, false,  false, false, handle_user_attribute, false };
 
 /* Plugin callback called during attribute registration */
 
index 2a94b3ae0d0853aaa9593d7005dcb7cdf1bb57b1..eb5e4cab96fee6c47f373f9282f99be36208d9c7 100644 (file)
@@ -4329,6 +4329,8 @@ struct attribute_spec
      by the rest of this structure.  */
   tree (*const handler) (tree *node, tree name, tree args,
                                 int flags, bool *no_add_attrs);
+  /* Specifies if attribute affects type's identity.  */
+  const bool affects_type_identity;
 };
 
 /* Flags that may be passed in the third argument of decl_attributes, and