re PR c++/14123 (odd number of parentheses in error message)
authorGabriel Dos Reis <gdr@integrable-solutions.net>
Sun, 27 Jun 2004 21:36:00 +0000 (21:36 +0000)
committerGabriel Dos Reis <gdr@gcc.gnu.org>
Sun, 27 Jun 2004 21:36:00 +0000 (21:36 +0000)
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.

From-SVN: r83748

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 9dabcca1ee7df621e9b156bb4987d5836a3ec59e..aaf1956488eb46fcdd570531a40d63feff9ba13d 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 c1337a925eabb3b0475c92277ad166947fbb3938..ff377d36fc765e1aae0ba13bd3a2919d1b3f0d5f 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 81bba562c9d562295bb848d770441612b322be8b..2c34e6678386f3399b1a25a5cef2a52a0bda03ca 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::\\*\\)" }
+}