diff options
author | Tom Tromey <tromey@redhat.com> | 2013-05-13 16:51:52 +0000 |
---|---|---|
committer | Tom Tromey <tromey@redhat.com> | 2013-05-13 16:51:52 +0000 |
commit | ac1ca910d74d5bd1d2800cb190659c9e3043a904 (patch) | |
tree | a62ca0d718e74c6dd7d0f7eca45ac3c9a1a728fe /gdb/eval.c | |
parent | fd7b2a545d530118913b1aefbfd8526785d3c2cc (diff) | |
download | gdb-ac1ca910d74d5bd1d2800cb190659c9e3043a904.zip gdb-ac1ca910d74d5bd1d2800cb190659c9e3043a904.tar.gz gdb-ac1ca910d74d5bd1d2800cb190659c9e3043a904.tar.bz2 |
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.
Diffstat (limited to 'gdb/eval.c')
-rw-r--r-- | gdb/eval.c | 12 |
1 files changed, 8 insertions, 4 deletions
@@ -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: |