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

PR target/12171
* c-pretty-print.c (pp_c_specifier_qualifier_list):
Display allowed attributes for function pointer types.
(pp_c_attributes_display): New function to display
attributes having affects_type_identity flag set to true.
* c-pretty-print.h (pp_c_attributes_display): New prototype.

ChangeLog gcc/cp

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

PR target/12171
* cxx-pretty-print.c (pp_cxx_ptr_operator):
Display allowed attributes for function pointer types.
* error.c (dump_type_prefix): Likewise.

From-SVN: r171210

gcc/c-family/ChangeLog
gcc/c-family/c-pretty-print.c
gcc/c-family/c-pretty-print.h
gcc/cp/ChangeLog
gcc/cp/cxx-pretty-print.c
gcc/cp/error.c

index ad2da89cb216c105b0c0b9b514fe701284557394..5ac57926a6758e8c7ee0c78e5e660e664fa0cef3 100644 (file)
@@ -1,6 +1,12 @@
 2011-03-17  Kai Tietz
 
        PR target/12171
+       * c-pretty-print.c (pp_c_specifier_qualifier_list):
+       Display allowed attributes for function pointer types.
+       (pp_c_attributes_display): New function to display
+       attributes having affects_type_identity flag set to true.
+       * c-pretty-print.h (pp_c_attributes_display): New prototype.
+
        * c-common.c (c_common_attribute_table):
        Add new element.
        (c_common_format_attribute_table): Likewise.
index 843e7a4224e10011911e5c33749296ded0bcbb3a..e41890370a1756818e5bc8778b6809a62a7fa6ad 100644 (file)
@@ -460,6 +460,7 @@ pp_c_specifier_qualifier_list (c_pretty_printer *pp, tree t)
          {
            pp_c_whitespace (pp);
            pp_c_left_paren (pp);
+           pp_c_attributes_display (pp, TYPE_ATTRIBUTES (pointee));
          }
        else if (!c_dialect_cxx ())
          pp_c_whitespace (pp);
@@ -790,6 +791,47 @@ pp_c_attributes (c_pretty_printer *pp, tree attributes)
   pp_c_right_paren (pp);
 }
 
+/* Pretty-print ATTRIBUTES using GNU C extension syntax for attributes
+   marked to be displayed on disgnostic.  */
+
+void
+pp_c_attributes_display (c_pretty_printer *pp, tree a)
+{
+  bool is_first = true;
+
+  if (a == NULL_TREE)
+    return;
+
+  for (; a != NULL_TREE; a = TREE_CHAIN (a))
+    {
+      const struct attribute_spec *as;
+      as = lookup_attribute_spec (TREE_PURPOSE (a));
+      if (!as || as->affects_type_identity == false)
+        continue;
+      if (is_first)
+       {
+         pp_c_ws_string (pp, "__attribute__");
+         pp_c_left_paren (pp);
+         pp_c_left_paren (pp);
+         is_first = false;
+       }
+      else
+       {
+         pp_separate_with (pp, ',');
+       }
+      pp_tree_identifier (pp, TREE_PURPOSE (a));
+      if (TREE_VALUE (a))
+       pp_c_call_argument_list (pp, TREE_VALUE (a));
+    }
+
+  if (!is_first)
+    {
+      pp_c_right_paren (pp);
+      pp_c_right_paren (pp);
+      pp_c_whitespace (pp);
+    }
+}
+
 /* function-definition:
       declaration-specifiers declarator compound-statement  */
 
index f0daa4aef3e7b8b483514c6f85167112e4c369f0..b41e8ed8d2ef6f74d280197ce727a38d3555ef33 100644 (file)
@@ -177,6 +177,7 @@ void pp_c_space_for_pointer_operator (c_pretty_printer *, tree);
 void pp_c_tree_decl_identifier (c_pretty_printer *, tree);
 void pp_c_function_definition (c_pretty_printer *, tree);
 void pp_c_attributes (c_pretty_printer *, tree);
+void pp_c_attributes_display (c_pretty_printer *, tree);
 void pp_c_cv_qualifiers (c_pretty_printer *pp, int qualifiers, bool func_type);
 void pp_c_type_qualifier_list (c_pretty_printer *, tree);
 void pp_c_parameter_type_list (c_pretty_printer *, tree);
index 37124b43c2510e03023bedb827920fbdc3008572..b8069a81ce759f1b49e8b9b0c441cfaff955f993 100644 (file)
@@ -1,6 +1,10 @@
 2011-03-21  Kai Tietz  <ktietz@redhat.com>
 
        PR target/12171
+       * cxx-pretty-print.c (pp_cxx_ptr_operator):
+       Display allowed attributes for function pointer types.
+       * error.c (dump_type_prefix): Likewise.
+
        * tree.c (cxx_attribute_table): Adjust table.
 
 2011-03-18  Jason Merrill  <jason@redhat.com>
index a3e91462d06ebdc090b07c7d8fae671eb41155db..d8bf9126e5b721aef7ea7bd8c47e22365d973e49 100644 (file)
@@ -1323,6 +1323,8 @@ pp_cxx_ptr_operator (cxx_pretty_printer *pp, tree t)
       if (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE
          || TYPE_PTR_TO_MEMBER_P (TREE_TYPE (t)))
        pp_cxx_ptr_operator (pp, TREE_TYPE (t));
+      pp_c_attributes_display (pp_c_base (pp),
+                              TYPE_ATTRIBUTES (TREE_TYPE (t)));
       if (TREE_CODE (t) == POINTER_TYPE)
        {
          pp_star (pp);
index 28305d222446f69d4a55e1226c9533942500cd30..ec9b9fe85afa778d2507d0258dc9f71247458a76 100644 (file)
@@ -661,6 +661,8 @@ dump_type_prefix (tree t, int flags)
          {
            pp_cxx_whitespace (cxx_pp);
            pp_cxx_left_paren (cxx_pp);
+           pp_c_attributes_display (pp_c_base (cxx_pp),
+                                    TYPE_ATTRIBUTES (sub));
          }
        if (TREE_CODE (t) == POINTER_TYPE)
          pp_character(cxx_pp, '*');