OSDN Git Service

PR c++/14123
authorgdr <gdr@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 27 Jun 2004 21:36:00 +0000 (21:36 +0000)
committergdr <gdr@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 27 Jun 2004 21:36:00 +0000 (21:36 +0000)
* cxx-pretty-print.c (pp_cxx_ptr_operator): Properly put
paranthesis in case of pointers to array members.
* error.c (dump_type_prefix): Likewise.
(dump_type_suffix): Maybe issue a whitespace when printing
ARRAY_TYPE.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@83748 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/cxx-pretty-print.c
gcc/cp/error.c
gcc/testsuite/g++.dg/other/ptrmem5.C [new file with mode: 0644]

index 9dabcca..aaf1956 100644 (file)
@@ -1,3 +1,12 @@
+2004-06-27  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+
+       PR c++/14123    
+       * cxx-pretty-print.c (pp_cxx_ptr_operator): Properly put
+       paranthesis in case of pointers to array members.
+       * error.c (dump_type_prefix): Likewise.
+       (dump_type_suffix): Maybe issue a whitespace when printing
+       ARRAY_TYPE. 
+
 2004-06-27  Mark Mitchell  <mark@codesourcery.com>
 
        PR c++/16193
index c1337a9..ff377d3 100644 (file)
@@ -1100,6 +1100,8 @@ pp_cxx_ptr_operator (cxx_pretty_printer *pp, tree t)
     case OFFSET_TYPE:
       if (TYPE_PTR_TO_MEMBER_P (t))
         {
+          if (TREE_CODE (TREE_TYPE (t)) == ARRAY_TYPE)
+            pp_cxx_left_paren (pp);
           pp_cxx_nested_name_specifier (pp, TYPE_PTRMEM_CLASS_TYPE (t));
           pp_star (pp);
           pp_cxx_cv_qualifier_seq (pp, t);
index 81bba56..2c34e66 100644 (file)
@@ -512,11 +512,14 @@ dump_type_prefix (tree t, int flags)
       if (TREE_CODE (t) == OFFSET_TYPE)        /* pmfs deal with this in d_t_p */
        {
           pp_maybe_space (cxx_pp);
+          if (TREE_CODE (TREE_TYPE (t)) == ARRAY_TYPE)
+             pp_cxx_left_paren (cxx_pp);
          dump_type (TYPE_OFFSET_BASETYPE (t), flags);
          pp_cxx_colon_colon (cxx_pp);
        }
       pp_cxx_star (cxx_pp);
       pp_cxx_cv_qualifier_seq (cxx_pp, t);
+      pp_base (cxx_pp)->padding = pp_before;
       break;
 
       /* Can only be reached through function pointer -- this would not be
@@ -613,6 +616,7 @@ dump_type_suffix (tree t, int flags)
       }
 
     case ARRAY_TYPE:
+      pp_maybe_space (cxx_pp);
       pp_cxx_left_bracket (cxx_pp);
       if (TYPE_DOMAIN (t))
        {
diff --git a/gcc/testsuite/g++.dg/other/ptrmem5.C b/gcc/testsuite/g++.dg/other/ptrmem5.C
new file mode 100644 (file)
index 0000000..75a78b2
--- /dev/null
@@ -0,0 +1,12 @@
+// PR 14123
+
+struct a
+{
+  int x[8];
+};
+
+int main()
+{
+  int a::*n[8];
+  n = &a::x;                    // { dg-error "int \\(a::\\*\\)" }
+}