aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog7
-rw-r--r--gdb/ch-exp.c6
-rw-r--r--gdb/gdbtypes.c8
3 files changed, 16 insertions, 5 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 0833cf2..c9f5407 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,10 @@
+Mon Dec 11 00:36:01 1995 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * valops.c (value_cast): Handle casts to and from TYPE_CODE_CHAR.
+ * ch-exp.c (match_integer_literal): Fix long long support.
+ * gdbtypes.c (get_discrete_bounds): Make TYPE_LENGTH (type) ==
+ sizeof (LONGEST) case work OK.
+
Fri Dec 8 21:02:24 1995 Fred Fish <fnf@cygnus.com>
* coffread.c, dbxread.c, dstread.c, objfiles.c, os9kread.c,
diff --git a/gdb/ch-exp.c b/gdb/ch-exp.c
index 6c2471f..31c92b5 100644
--- a/gdb/ch-exp.c
+++ b/gdb/ch-exp.c
@@ -597,7 +597,7 @@ parse_primval ()
case CHARACTER_LITERAL:
write_exp_elt_opcode (OP_LONG);
write_exp_elt_type (PEEK_LVAL ().typed_val.type);
- write_exp_elt_longcst ((LONGEST) (PEEK_LVAL ().typed_val.val));
+ write_exp_elt_longcst (PEEK_LVAL ().typed_val.val);
write_exp_elt_opcode (OP_LONG);
FORWARD_TOKEN ();
break;
@@ -1544,8 +1544,8 @@ match_integer_literal ()
else
{
yylval.typed_val.val = ival;
-#ifdef CC_HAS_LONG_LONG
- if (ival > 2147483647 || ival < -2147483648)
+#if defined(CC_HAS_LONG_LONG) && defined(__STDC__)
+ if (ival > (LONGEST)2147483647U || ival < -(LONGEST)2147483648U)
yylval.typed_val.type = builtin_type_long_long;
else
#endif
diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c
index 3cde087..99c7c57 100644
--- a/gdb/gdbtypes.c
+++ b/gdb/gdbtypes.c
@@ -369,7 +369,7 @@ get_discrete_bounds (type, lowp, highp)
*highp = 1;
return 0;
case TYPE_CODE_INT:
- if (TYPE_LENGTH (type) >= sizeof (LONGEST)) /* Too big */
+ if (TYPE_LENGTH (type) > sizeof (LONGEST)) /* Too big */
return -1;
if (!TYPE_UNSIGNED (type))
{
@@ -380,7 +380,11 @@ get_discrete_bounds (type, lowp, highp)
/* ... fall through for unsigned ints ... */
case TYPE_CODE_CHAR:
*lowp = 0;
- *highp = (1 << (TYPE_LENGTH (type) * TARGET_CHAR_BIT)) - 1;
+ /* This round-about calculation is to avoid shifting by
+ TYPE_LENGTH (type) * TARGET_CHAR_BIT, which will not work
+ if TYPE_LENGTH (type) == sizeof (LONGEST). */
+ *highp = 1 << (TYPE_LENGTH (type) * TARGET_CHAR_BIT - 1);
+ *highp = (*highp - 1) | *highp;
return 0;
default:
return -1;