From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2126) id 580713858C55; Tue, 12 Apr 2022 19:01:05 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 580713858C55 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Tom Tromey To: gdb-cvs@sourceware.org Subject: [binutils-gdb] Fix bug in Ada number lexing X-Act-Checkin: binutils-gdb X-Git-Author: Tom Tromey X-Git-Refname: refs/heads/master X-Git-Oldrev: a8b7a1391135b63de73c1bf0e0a2f8f5dc8c6ba6 X-Git-Newrev: 36baf73637c4bd7fdaa9c6318c4c8071d82ac616 Message-Id: <20220412190105.580713858C55@sourceware.org> Date: Tue, 12 Apr 2022 19:01:05 +0000 (GMT) X-BeenThere: gdb-cvs@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 12 Apr 2022 19:01:05 -0000 https://sourceware.org/git/gitweb.cgi?p=3Dbinutils-gdb.git;h=3D36baf73637c4= bd7fdaa9c6318c4c8071d82ac616 commit 36baf73637c4bd7fdaa9c6318c4c8071d82ac616 Author: Tom Tromey Date: Fri Apr 8 10:11:58 2022 -0600 Fix bug in Ada number lexing =20 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. Diff: --- gdb/ada-lex.l | 4 ++-- gdb/testsuite/gdb.ada/literals.exp | 3 +++ gdb/testsuite/gdb.base/parse_number.exp | 3 ++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/gdb/ada-lex.l b/gdb/ada-lex.l index 3980889f5ab..33a08eaa93b 100644 --- a/gdb/ada-lex.l +++ b/gdb/ada-lex.l @@ -462,11 +462,11 @@ processInt (struct parser_state *par_state, const cha= r *base0, return FLOAT; } =20 - 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")); =20 - LONGEST value =3D result.as_integer (); + ULONGEST value =3D result.as_integer (); if ((value >> (gdbarch_int_bit (par_state->gdbarch ())-1)) =3D=3D 0) yylval.typed_val.type =3D type_int (par_state); else if ((value >> (gdbarch_long_bit (par_state->gdbarch ())-1)) =3D=3D = 0) diff --git a/gdb/testsuite/gdb.ada/literals.exp b/gdb/testsuite/gdb.ada/lit= erals.exp index 92a9a1954fc..a6ac89b540f 100644 --- a/gdb/testsuite/gdb.ada/literals.exp +++ b/gdb/testsuite/gdb.ada/literals.exp @@ -34,3 +34,6 @@ gdb_test "print 2e1000" "Integer literal out of range" gdb_test "print 16#ffff#" " =3D 65535" gdb_test "print 16#f#e1" " =3D 240" gdb_test "print 16#1#e10" " =3D 1099511627776" + +gdb_test "print/x 16#7fffffffffffffff#" " =3D 0x7fffffffffffffff" +gdb_test "print 16#ffffffffffffffff#" " =3D -1" diff --git a/gdb/testsuite/gdb.base/parse_number.exp b/gdb/testsuite/gdb.ba= se/parse_number.exp index 8849c99a3f9..dc6d358ca48 100644 --- a/gdb/testsuite/gdb.base/parse_number.exp +++ b/gdb/testsuite/gdb.base/parse_number.exp @@ -28,7 +28,8 @@ proc test_parse_numbers {} { =20 set val "0xffffffffffffffff" if {$lang =3D=3D "ada"} { - gdb_test "p/x $val" "Integer literal out of range" + gdb_test "p/x $val" " =3D 0xffffffffffffffff" + gdb_test "ptype $val" " =3D <8-byte integer>" } elseif {$lang =3D=3D "fortran"} { gdb_test "p/x $val" " =3D 0xffffffff" gdb_test "ptype $val" " =3D unsigned int"