PR exp/15364:
authorTom Tromey <tromey@redhat.com>
Mon, 13 May 2013 16:51:52 +0000 (16:51 +0000)
committerTom Tromey <tromey@redhat.com>
Mon, 13 May 2013 16:51:52 +0000 (16:51 +0000)
* 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.

gdb/ChangeLog
gdb/eval.c
gdb/opencl-lang.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/exprs.c
gdb/testsuite/gdb.base/exprs.exp

index e3c2c4b..deefda9 100644 (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
index f04baee..cf1fda9 100644 (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:
index d7e66c4..4720e2b 100644 (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:
index c4a6237..fc74fbb 100644 (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.
index 90c0f25..e1ad182 100644 (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()
 {
index fa3cdb4..d2e23c9 100644 (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"