* valops.c (value_ind): No longer allow dereferencing an
authorUlrich Weigand <uweigand@de.ibm.com>
Thu, 11 Sep 2008 14:17:58 +0000 (14:17 +0000)
committerUlrich Weigand <uweigand@de.ibm.com>
Thu, 11 Sep 2008 14:17:58 +0000 (14:17 +0000)
integer type.
* eval.c (evaluate_subexp_standard): Handle deferencing an
integer type here.
* ada-lang.c (ada_evaluate_subexp): Likewise.

gdb/ChangeLog
gdb/ada-lang.c
gdb/eval.c
gdb/valops.c

index 4249f7f..aedacce 100644 (file)
@@ -1,5 +1,13 @@
 2008-09-11  Ulrich Weigand  <uweigand@de.ibm.com>
 
+       * valops.c (value_ind): No longer allow dereferencing an
+       integer type.
+       * eval.c (evaluate_subexp_standard): Handle deferencing an
+       integer type here.
+       * ada-lang.c (ada_evaluate_subexp): Likewise.
+
+2008-09-11  Ulrich Weigand  <uweigand@de.ibm.com>
+
        * ada-valprint.c (ada_val_print_1): When implicitly dereferencing
        a reference type, pass the reference type directly to unpack_pointer.
        * c-valprint.c (c_val_print): Likewise.
index 15310ef..75a9828 100644 (file)
@@ -9155,7 +9155,8 @@ ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
             }
           else if (TYPE_CODE (type) == TYPE_CODE_INT)
             /* GDB allows dereferencing an int.  */
-            return value_zero (builtin_type_int, lval_memory);
+            return value_zero (builtin_type (exp->gdbarch)->builtin_int,
+                              lval_memory);
           else
             error (_("Attempt to take contents of a non-pointer value."));
         }
@@ -9165,6 +9166,10 @@ ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
       if (ada_is_array_descriptor_type (type))
         /* GDB allows dereferencing GNAT array descriptors.  */
         return ada_coerce_to_simple_array (arg1);
+      else if (TYPE_CODE (type) == TYPE_CODE_INT)
+       /* GDB allows dereferencing an int.  */
+       return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
+                             (CORE_ADDR) value_as_address (arg1));
       else
         return ada_value_ind (arg1);
 
index 6a43e94..f4ae539 100644 (file)
@@ -2288,10 +2288,19 @@ evaluate_subexp_standard (struct type *expect_type,
                               lval_memory);
          else if (TYPE_CODE (type) == TYPE_CODE_INT)
            /* GDB allows dereferencing an int.  */
-           return value_zero (builtin_type_int, lval_memory);
+           return value_zero (builtin_type (exp->gdbarch)->builtin_int,
+                              lval_memory);
          else
            error (_("Attempt to take contents of a non-pointer value."));
        }
+
+      /* Allow * on an integer so we can cast it to whatever we want.
+        This returns an int, which seems like the most C-like thing to
+        do.  "long long" variables are rare enough that
+        BUILTIN_TYPE_LONGEST would seem to be a mistake.  */
+      if (TYPE_CODE (type) == TYPE_CODE_INT)
+       return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
+                             (CORE_ADDR) value_as_address (arg1));
       return value_ind (arg1);
 
     case UNOP_ADDR:
index 0d1ffdf..f14c2f5 100644 (file)
@@ -1172,14 +1172,7 @@ value_ind (struct value *arg1)
 
   base_type = check_typedef (value_type (arg1));
 
-  /* Allow * on an integer so we can cast it to whatever we want.
-     This returns an int, which seems like the most C-like thing to
-     do.  "long long" variables are rare enough that
-     BUILTIN_TYPE_LONGEST would seem to be a mistake.  */
-  if (TYPE_CODE (base_type) == TYPE_CODE_INT)
-    return value_at_lazy (builtin_type_int,
-                         (CORE_ADDR) value_as_address (arg1));
-  else if (TYPE_CODE (base_type) == TYPE_CODE_PTR)
+  if (TYPE_CODE (base_type) == TYPE_CODE_PTR)
     {
       struct type *enc_type;
       /* We may be pointing to something embedded in a larger object.