From 32ce9847fcf66d14c8b4bd33dc493a1f4ec74f3e Mon Sep 17 00:00:00 2001 From: gdr Date: Sun, 27 Jun 2004 21:36:00 +0000 Subject: [PATCH] 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@83748 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/ChangeLog | 9 +++++++++ gcc/cp/cxx-pretty-print.c | 2 ++ gcc/cp/error.c | 4 ++++ gcc/testsuite/g++.dg/other/ptrmem5.C | 12 ++++++++++++ 4 files changed, 27 insertions(+) create mode 100644 gcc/testsuite/g++.dg/other/ptrmem5.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 9dabcca1ee7..aaf1956488e 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,12 @@ +2004-06-27 Gabriel Dos Reis + + 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 PR c++/16193 diff --git a/gcc/cp/cxx-pretty-print.c b/gcc/cp/cxx-pretty-print.c index c1337a925ea..ff377d36fc7 100644 --- a/gcc/cp/cxx-pretty-print.c +++ b/gcc/cp/cxx-pretty-print.c @@ -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); diff --git a/gcc/cp/error.c b/gcc/cp/error.c index 81bba562c9d..2c34e667838 100644 --- a/gcc/cp/error.c +++ b/gcc/cp/error.c @@ -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 index 00000000000..75a78b2f17b --- /dev/null +++ b/gcc/testsuite/g++.dg/other/ptrmem5.C @@ -0,0 +1,12 @@ +// PR 14123 + +struct a +{ + int x[8]; +}; + +int main() +{ + int a::*n[8]; + n = &a::x; // { dg-error "int \\(a::\\*\\)" } +} -- 2.11.4.GIT