]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Fix bug in Ada number lexing
authorTom Tromey <tromey@adacore.com>
Fri, 8 Apr 2022 16:11:58 +0000 (10:11 -0600)
committerTom Tromey <tromey@adacore.com>
Tue, 12 Apr 2022 19:02:00 +0000 (13:02 -0600)
On irc, Pedro pointed out that Ada couldn't properly handle
0xffffffffffffffff.  This used to work, but is a regression due to
some patches I wrote in the Ada lexer.  This patch fixes the bug.

gdb/ada-lex.l
gdb/testsuite/gdb.ada/literals.exp

index 27470a75653228d6e112ef0898875d279f0e6ad6..3900a839a8e1522db567ca3819c7d716cb2e4e9a 100644 (file)
@@ -434,11 +434,11 @@ processInt (struct parser_state *par_state, const char *base0,
       return FLOAT;
     }
 
-  gdb_mpz maxval (ULONGEST_MAX / base);
+  gdb_mpz maxval (ULONGEST_MAX);
   if (mpz_cmp (result.val, maxval.val) > 0)
     error (_("Integer literal out of range"));
 
-  LONGEST value = result.as_integer<LONGEST> ();
+  ULONGEST value = result.as_integer<ULONGEST> ();
   if ((value >> (gdbarch_int_bit (par_state->gdbarch ())-1)) == 0)
     yylval.typed_val.type = type_int (par_state);
   else if ((value >> (gdbarch_long_bit (par_state->gdbarch ())-1)) == 0)
index 92a9a1954fc7ada7d56dd9d3d1093604b8b69d5c..a6ac89b540fdb5eace0c06ffa72fb18529fd5b7a 100644 (file)
@@ -34,3 +34,6 @@ gdb_test "print 2e1000" "Integer literal out of range"
 gdb_test "print 16#ffff#" " = 65535"
 gdb_test "print 16#f#e1" " = 240"
 gdb_test "print 16#1#e10" " = 1099511627776"
+
+gdb_test "print/x 16#7fffffffffffffff#" " = 0x7fffffffffffffff"
+gdb_test "print 16#ffffffffffffffff#" " = -1"