* value.h (value_non_lval): Declare.
	* value.c (value_non_lval): New function.
	* eval.c (evaluate_subexp_standard) <UNOP_POSTINCREMENT,
	UNOP_POSTDECREMENT>: Call value_non_lval to ensure to return a
	non-lvalue.

gdb/testsuite:
	* gdb.base/exprs.exp: Add tests for pre-/post- in-/decrement operators.
This commit is contained in:
Ken Werner
2010-11-03 13:49:38 +00:00
parent 2ebf396434
commit c37f7098e9
6 changed files with 49 additions and 2 deletions

View File

@@ -2782,6 +2782,8 @@ evaluate_subexp_standard (struct type *expect_type,
}
else
{
arg3 = value_non_lval (arg1);
if (ptrmath_type_p (exp->language_defn, value_type (arg1)))
arg2 = value_ptradd (arg1, 1);
else
@@ -2794,7 +2796,7 @@ evaluate_subexp_standard (struct type *expect_type,
}
value_assign (arg1, arg2);
return arg1;
return arg3;
}
case UNOP_POSTDECREMENT:
@@ -2807,6 +2809,8 @@ evaluate_subexp_standard (struct type *expect_type,
}
else
{
arg3 = value_non_lval (arg1);
if (ptrmath_type_p (exp->language_defn, value_type (arg1)))
arg2 = value_ptradd (arg1, -1);
else
@@ -2819,7 +2823,7 @@ evaluate_subexp_standard (struct type *expect_type,
}
value_assign (arg1, arg2);
return arg1;
return arg3;
}
case OP_THIS: