From: Tom Tromey Date: Mon, 13 May 2013 16:51:52 +0000 (+0000) Subject: PR exp/15364: X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=ac1ca910d74d;p=binutils-gdb.git PR exp/15364: * eval.c (evaluate_subexp_standard) : 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. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index e3c2c4be846..deefda944f7 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +2013-05-13 Tom Tromey + + PR exp/15364: + * eval.c (evaluate_subexp_standard) : 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 * rs6000-aix-tdep.c (rs6000_push_dummy_call): Convert diff --git a/gdb/eval.c b/gdb/eval.c index f04baeee8e4..cf1fda96b6f 100644 --- a/gdb/eval.c +++ b/gdb/eval.c @@ -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: diff --git a/gdb/opencl-lang.c b/gdb/opencl-lang.c index d7e66c46585..4720e2b1944 100644 --- a/gdb/opencl-lang.c +++ b/gdb/opencl-lang.c @@ -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: diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index c4a62377100..fc74fbb6d5e 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-05-13 Tom Tromey + + * gdb.base/exprs.exp (test_expr): Add regression test. + * gdb.base/exprs.c (null_t_struct): New global. + 2013-05-13 Muhammad Bilal * gdb.base/default.exp: Disable history saving. diff --git a/gdb/testsuite/gdb.base/exprs.c b/gdb/testsuite/gdb.base/exprs.c index 90c0f25ead8..e1ad1828422 100644 --- a/gdb/testsuite/gdb.base/exprs.c +++ b/gdb/testsuite/gdb.base/exprs.c @@ -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() { diff --git a/gdb/testsuite/gdb.base/exprs.exp b/gdb/testsuite/gdb.base/exprs.exp index fa3cdb44957..d2e23c92319 100644 --- a/gdb/testsuite/gdb.base/exprs.exp +++ b/gdb/testsuite/gdb.base/exprs.exp @@ -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"