Index: gdb/eval.c =================================================================== RCS file: /cvs/src/src/gdb/eval.c,v retrieving revision 1.80 diff -u -p -r1.80 eval.c --- gdb/eval.c 4 Feb 2008 00:23:04 -0000 1.80 +++ gdb/eval.c 27 Feb 2008 19:02:41 -0000 @@ -1985,8 +1985,18 @@ evaluate_subexp_standard (struct type *e arg1 = evaluate_subexp (type, exp, pos, noside); if (noside == EVAL_SKIP) goto nosideret; - if (type != value_type (arg1)) - arg1 = value_cast (type, arg1); + if (type != value_type (arg1)) + { + if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_REF + && TYPE_CODE (type) == TYPE_CODE_REF) + arg1 = value_cast_pointers (type, arg1); + else if (TYPE_CODE (value_type (arg1)) != TYPE_CODE_REF + && TYPE_CODE (type) != TYPE_CODE_REF) + arg1 = value_cast (type, arg1); + else /* We can not do much here. */ + error (_("Attempt to cast to reference type from non-reference "\ + "type or vice versa.")); + } return arg1; case UNOP_MEMVAL: Index: gdb/value.c =================================================================== RCS file: /cvs/src/src/gdb/value.c,v retrieving revision 1.57 diff -u -p -r1.57 value.c --- gdb/value.c 18 Jan 2008 17:07:40 -0000 1.57 +++ gdb/value.c 27 Feb 2008 19:02:44 -0000 @@ -1039,7 +1039,8 @@ value_as_address (struct value *val) || TYPE_CODE (value_type (val)) == TYPE_CODE_METHOD) return VALUE_ADDRESS (val); - val = coerce_array (val); + if (TYPE_CODE (value_type (val)) == TYPE_CODE_ARRAY) + val = coerce_array (val); /* Some architectures (e.g. Harvard), map instruction and data addresses onto a single large unified address space. For