PR exp/15364:

* eval.c (evaluate_subexp_standard) <STRUCTOP_STRUCT,
	STRUCTOP_PTR>: Return a not_lval value for
	EVAL_AVOID_SIDE_EFFECTS.
	* opencl-lang.c (evaluate_subexp_opencl): Return a not_lval value
	for EVAL_AVOID_SIDE_EFFECTS.
gdb/testsuite
	* gdb.base/exprs.exp (test_expr): Add regression test.
	* gdb.base/exprs.c (null_t_struct): New global.
This commit is contained in:
Tom Tromey 2013-05-13 16:51:52 +00:00
parent fd7b2a545d
commit ac1ca910d7
6 changed files with 34 additions and 8 deletions

View File

@ -1,3 +1,12 @@
2013-05-13 Tom Tromey <tromey@redhat.com>
PR exp/15364:
* eval.c (evaluate_subexp_standard) <STRUCTOP_STRUCT,
STRUCTOP_PTR>: Return a not_lval value for
EVAL_AVOID_SIDE_EFFECTS.
* opencl-lang.c (evaluate_subexp_opencl): Return a not_lval value
for EVAL_AVOID_SIDE_EFFECTS.
2013-05-13 Joel Brobecker <brobecker@adacore.com>
* rs6000-aix-tdep.c (rs6000_push_dummy_call): Convert

View File

@ -1847,9 +1847,11 @@ evaluate_subexp_standard (struct type *expect_type,
arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
if (noside == EVAL_SKIP)
goto nosideret;
/* Also handle EVAL_AVOID_SIDE_EFFECTS. */
return value_struct_elt (&arg1, NULL, &exp->elts[pc + 2].string,
arg3 = value_struct_elt (&arg1, NULL, &exp->elts[pc + 2].string,
NULL, "structure");
if (noside == EVAL_AVOID_SIDE_EFFECTS)
arg3 = value_zero (value_type (arg3), not_lval);
return arg3;
case STRUCTOP_PTR:
tem = longest_to_int (exp->elts[pc + 1].longconst);
@ -1899,9 +1901,11 @@ evaluate_subexp_standard (struct type *expect_type,
}
}
/* Also handle EVAL_AVOID_SIDE_EFFECTS. */
return value_struct_elt (&arg1, NULL, &exp->elts[pc + 2].string,
arg3 = value_struct_elt (&arg1, NULL, &exp->elts[pc + 2].string,
NULL, "structure pointer");
if (noside == EVAL_AVOID_SIDE_EFFECTS)
arg3 = value_zero (value_type (arg3), not_lval);
return arg3;
case STRUCTOP_MEMBER:
case STRUCTOP_MPTR:

View File

@ -1035,10 +1035,13 @@ Cannot perform conditional operation on vectors with different sizes"));
}
else
{
/* Also handle EVAL_AVOID_SIDE_EFFECTS. */
return value_struct_elt (&arg1, NULL,
&exp->elts[pc + 2].string, NULL,
"structure");
struct value *v = value_struct_elt (&arg1, NULL,
&exp->elts[pc + 2].string, NULL,
"structure");
if (noside == EVAL_AVOID_SIDE_EFFECTS)
v = value_zero (value_type (v), not_lval);
return v;
}
}
default:

View File

@ -1,3 +1,8 @@
2013-05-13 Tom Tromey <tromey@redhat.com>
* gdb.base/exprs.exp (test_expr): Add regression test.
* gdb.base/exprs.c (null_t_struct): New global.
2013-05-13 Muhammad Bilal <mbilal@codesourcery.com>
* gdb.base/default.exp: Disable history saving.

View File

@ -185,6 +185,7 @@ union tu_link {
enum colors {red, green, blue} color;
enum cars {chevy, ford, porsche} clunker;
struct t_struct *null_t_struct;
void dummy()
{

View File

@ -273,3 +273,7 @@ gdb_test "print {short} v_short_array" "$decimal = 42"
# Regression tests for cast to void.
gdb_test "print (void) v_int_pointer" " = void"
gdb_test "print & (void) v_char" "value not located in memory."
# Regression test for "&&".
gdb_test "print null_t_struct && null_t_struct->v_int_member == 0" \
" = 0"