aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2010-09-24 11:13:08 -0400
committerJason Merrill <jason@gcc.gnu.org>2010-09-24 11:13:08 -0400
commit75d980abcc4dbd2bcb3d06c3f12ef9312ccac856 (patch)
tree8efc3a34511bdfb3668ce18abfd09a592bd99821 /gcc
parent32990d5bc27147c3f6e53324b37089b104c864cc (diff)
downloadgcc-75d980abcc4dbd2bcb3d06c3f12ef9312ccac856.zip
gcc-75d980abcc4dbd2bcb3d06c3f12ef9312ccac856.tar.gz
gcc-75d980abcc4dbd2bcb3d06c3f12ef9312ccac856.tar.bz2
error.c (dump_expr): Print conversion between reference and pointer to the same type as "*" or "&".
* error.c (dump_expr) [CASE_CONVERT]: Print conversion between reference and pointer to the same type as "*" or "&". From-SVN: r164597
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/error.c17
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/g++.dg/other/error10.C2
4 files changed, 25 insertions, 3 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 95613b0..f457d0c 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2010-09-24 Jason Merrill <jason@redhat.com>
+
+ * error.c (dump_expr) [CASE_CONVERT]: Print conversion between
+ reference and pointer to the same type as "*" or "&".
+
2010-09-24 Nicola Pero <nicola.pero@meta-innovation.com>
* typeck.c (warn_args_num): Use warning 'too many arguments to
diff --git a/gcc/cp/error.c b/gcc/cp/error.c
index 981b71f..be3dd2c 100644
--- a/gcc/cp/error.c
+++ b/gcc/cp/error.c
@@ -1949,8 +1949,21 @@ dump_expr (tree t, int flags)
case VIEW_CONVERT_EXPR:
{
tree op = TREE_OPERAND (t, 0);
-
- if (!same_type_p (TREE_TYPE (op), TREE_TYPE (t)))
+ tree ttype = TREE_TYPE (t);
+ tree optype = TREE_TYPE (op);
+
+ if (TREE_CODE (ttype) != TREE_CODE (optype)
+ && POINTER_TYPE_P (ttype)
+ && POINTER_TYPE_P (optype)
+ && same_type_p (TREE_TYPE (optype),
+ TREE_TYPE (ttype)))
+ {
+ if (TREE_CODE (ttype) == REFERENCE_TYPE)
+ dump_unary_op ("*", t, flags);
+ else
+ dump_unary_op ("&", t, flags);
+ }
+ else if (!same_type_p (TREE_TYPE (op), TREE_TYPE (t)))
{
/* It is a cast, but we cannot tell whether it is a
reinterpret or static cast. Use the C style notation. */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 1917147..659dab2 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2010-09-24 Jason Merrill <jason@redhat.com>
+
+ * g++.dg/other/error10.C: Adjust expected output.
+
2010-09-24 Jakub Jelinek <jakub@redhat.com>
PR middle-end/45234
diff --git a/gcc/testsuite/g++.dg/other/error10.C b/gcc/testsuite/g++.dg/other/error10.C
index 9e6da65..26f7ca5 100644
--- a/gcc/testsuite/g++.dg/other/error10.C
+++ b/gcc/testsuite/g++.dg/other/error10.C
@@ -6,7 +6,7 @@ template<int> struct A {};
template<int N>
void foo(const A<N> &a)
-{ -A<N>(a); } // { dg-error "\\(\\(const A<0>\\*\\)a\\)" "" }
+{ -A<N>(a); } // { dg-error "\\(\\* & a\\)" "" }
void bar()
{