+Tue Feb 6 11:58:57 2001 David Taylor <taylor@redhat.com>
+
+ * valops.c (value_cast): If casting a scalar to a pointer, do not
+ issue a message about truncation unless it exceeds the length of
+ an address, not the length of a pointer. This is because what the
+ user gives us is an address, not a pointer, and we will ultimately
+ convert it (via ADDRESS_TO_POINTER) to a pointer, not truncate it
+ to a pointer. This allows things like "print *(int *)0x01000234"
+ to work without generating a misleading message on a target having
+ two byte pointers and four byte addresses.
+
2001-02-05 Christopher Faylor <cgf@cygnus.com>
* win32-nat.c: Change PTR to void * throughout.
code2 == TYPE_CODE_ENUM ||
code2 == TYPE_CODE_RANGE))
{
- int ptr_bit = HOST_CHAR_BIT * TYPE_LENGTH (type);
+ /* TYPE_LENGTH (type) is the length of a pointer, but we really
+ want the length of an address! -- we are really dealing with
+ addresses (i.e., gdb representations) not pointers (i.e.,
+ target representations) here.
+
+ This allows things like "print *(int *)0x01000234" to work
+ without printing a misleading message -- which would
+ otherwise occur when dealing with a target having two byte
+ pointers and four byte addresses. */
+
+ int addr_bit = TARGET_ADDR_BIT;
+
LONGEST longest = value_as_long (arg2);
- if (ptr_bit < sizeof (LONGEST) * HOST_CHAR_BIT)
+ if (addr_bit < sizeof (LONGEST) * HOST_CHAR_BIT)
{
- if (longest >= ((LONGEST) 1 << ptr_bit)
- || longest <= -((LONGEST) 1 << ptr_bit))
+ if (longest >= ((LONGEST) 1 << addr_bit)
+ || longest <= -((LONGEST) 1 << addr_bit))
warning ("value truncated");
}
return value_from_longest (type, longest);