* ada-lang.c (ada_evaluate_subexp) [BINOP_ASSIGN]: Do not force
authorJoel Brobecker <brobecker@gnat.com>
Fri, 9 May 2008 23:50:41 +0000 (23:50 +0000)
committerJoel Brobecker <brobecker@gnat.com>
Fri, 9 May 2008 23:50:41 +0000 (23:50 +0000)
        the type of the right hand side of the assignment to the type
        of the left hand side if the left hand side is a convenience
        variable.

gdb/ChangeLog
gdb/ada-lang.c

index 5b61464..8acf37a 100644 (file)
@@ -1,3 +1,10 @@
+2008-05-09  Joel Brobecker  <brobecker@adacore.com>
+
+       * ada-lang.c (ada_evaluate_subexp) [BINOP_ASSIGN]: Do not force
+       the type of the right hand side of the assignment to the type
+       of the left hand side if the left hand side is a convenience
+       variable.
+
 2008-05-09  Ulrich Weigand  <uweigand@de.ibm.com>
 
        * NEWS: Mention gdbserver bi-arch capability.
index 8206f94..8f710f4 100644 (file)
@@ -8558,7 +8558,14 @@ ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
            return arg1;
          return ada_value_assign (arg1, arg1);
        }
-      arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
+      /* Force the evaluation of the rhs ARG2 to the type of the lhs ARG1,
+         except if the lhs of our assignment is a convenience variable.
+         In the case of assigning to a convenience variable, the lhs
+         should be exactly the result of the evaluation of the rhs.  */
+      type = value_type (arg1);
+      if (VALUE_LVAL (arg1) == lval_internalvar)
+         type = NULL;
+      arg2 = evaluate_subexp (type, exp, pos, noside);
       if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
         return arg1;
       if (ada_is_fixed_point_type (value_type (arg1)))