commit 913dab69ab98eaf30e5f409db4a88feeb1281d87
Author: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Fri Sep 24 15:13:08 2010 +0000
* error.c (dump_expr) [CASE_CONVERT]: Print conversion between
reference and pointer to the same type as "*" or "&".
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@164597 138bc75d-0d04-0410-961f-82ee72b054a4
@@ -1949,8 +1949,21 @@ dump_expr (tree t, int flags)
case VIEW_CONVERT_EXPR:
{
tree op = TREE_OPERAND (t, 0);
+ tree ttype = TREE_TYPE (t);
+ tree optype = TREE_TYPE (op);
- if (!same_type_p (TREE_TYPE (op), TREE_TYPE (t)))
+ 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. */
@@ -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()
{