This is the mail archive of the mailing list for the binutils project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] gdb/microblaze-tdep.c: Check whether less than zero in conditional expression

On 07/23/14 18:58, Chen Gang wrote:

On 07/24/2014 06:20 AM, Chen Gang wrote:
On 07/24/2014 06:17 AM, Michael Eager wrote:
On 07/23/14 15:06, Chen Gang wrote:
On 07/24/2014 04:04 AM, Michael Eager wrote:
On 07/20/14 07:03, Chen Gang wrote:
Use typecast 'size_t' on 'reg', not only avoid the related warning, but
also check whether less than zero -- for 'reg' is type 'int', and sizeof
(dwarf2_to_reg_map) is less than 0x7fff.

It is quoted in gdb_assert(), so need check 'reg' whether less than zero.
And the related warning (with '-W'):

     ../../binutils-gdb/gdb/microblaze-tdep.c:667:3: error: comparison between signed and unsigned integer expressions [-Werror=sign-compare]


    * microblaze-tdep.c (microblaze_dwarf2_reg_to_regnum): Check whether
    less tha zero in conditional expression.

Signed-off-by: Chen Gang <>
    gdb/microblaze-tdep.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gdb/microblaze-tdep.c b/gdb/microblaze-tdep.c
index 7e89241..9bec260 100644
--- a/gdb/microblaze-tdep.c
+++ b/gdb/microblaze-tdep.c
@@ -664,7 +664,7 @@ static int dwarf2_to_reg_map[78] =
    static int
    microblaze_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int reg)
-  gdb_assert (reg < sizeof (dwarf2_to_reg_map));
+  gdb_assert ((size_t) reg < sizeof (dwarf2_to_reg_map));
      return dwarf2_to_reg_map[reg];

I don't see anything in the patch which does what you describe,
checking whether reg is less than zero.  Converting a signed
integer to an unsigned integer is not a way to check whether
it is less than zero.  This is better:

+ gdb_assert (reg >= 0 && (size_t) reg < sizeof (dwarf2_to_reg_map));

Yeah, it is common statement. It is also OK to me, although after type
cast, 'reg >=0' can be omited (it can let code simpler, but let code
not quit easy understanding).

No, if you want to verify that the value is greater than zero,
this cannot be omitted.  A negative value would converted to
a positive value by the cast.  There no reason to believe that
this would cause the other half of the test to fail.

When an 'int' negative value converted to a positive value, it will be
larger than 0x7fff which must be larget than 'sizeof (dwarf2_to_reg_map)'.

If what I said is correct, your idea/suggestions is still OK to me: easy
understanding has higher priority than keeping source code simple.

Yes, you are correct.  Took me a moment to think through.

I left your patch as is.

Committed a52b4d3e2.

Michael Eager
1960 Park Blvd., Palo Alto, CA 94306  650-325-8077

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]