-Werror,-Wtautological-overlap-compare error in h8300-tdep.c

Simon Marchi simon.marchi@polymtl.ca
Sun May 17 15:01:02 GMT 2020


On 2020-05-17 9:54 a.m., Yoshinori Sato wrote:
> On Sat, 16 May 2020 06:05:44 +0900,
> Simon Marchi wrote:
>>
>> When building with clang 11, we get:
>>
>>   CXX    h8300-tdep.o
>> /home/smarchi/src/binutils-gdb/gdb/h8300-tdep.c:225:21: error: overlapping comparisons always evaluate to false [-Werror,-Wtautological-overlap-compare]
>>               if (disp < 0 && disp > 0xffffff)
>>                   ~~~~~~~~~^~~~~~~~~~~~~~~~~~
>> /home/smarchi/src/binutils-gdb/gdb/h8300-tdep.c:203:17: error: overlapping comparisons always evaluate to false [-Werror,-Wtautological-overlap-compare]
>>           if (disp < 0 && disp > 0xffffff)
>>               ~~~~~~~~~^~~~~~~~~~~~~~~~~~
>> /home/smarchi/src/binutils-gdb/gdb/h8300-tdep.c:184:17: error: overlapping comparisons always evaluate to false [-Werror,-Wtautological-overlap-compare]
>>           if (disp < 0 && disp > 0xffffff)
>>               ~~~~~~~~~^~~~~~~~~~~~~~~~~~
>>
>> Indeed, disp (of type LONGEST) can't be less than 0 and greater than 0xffffff.
>>
>> The closest thing I could find to an instruction set reference was this:
>>
>>   https://www.renesas.com/cn/en/doc/products/mpumcu/001/e602025_h8300.pdf
>>
>> ... but it didn't really help me decode this code.  I'm reporting it in hope that
>> somebody that knows what they are doing would know how to fix it.
>>
>> Yoshinori, I CCed you because you happen to be the last person who did a meaningful commit
>> in h8300-tdep.c, so maybe you have an idea.
>>
>> Simon
> 
> This instruction enhanced on h8300h.
> https://www.renesas.com/us/en/doc/products/mpumcu/001/rej09b0213_h8300h.pdf
> 
> disp have 24bit value.
> So always 0 in upper byte.
> 
> I think it's good to check like this.

Thank you for providing the patch and providing the link to the relevant
documentation.

Could you please explain to me what this macro does?

#define IS_MOVB_EXT(x)		((x) == 0x7860)

If I understand correctly, the relevant encoding is described at page 125
of the document you linked.

It says that in the first byte, we should have 0x78 (we do).  In the second
byte, we should have `erd`, a register number, in the upper nibble.  The macro
above checks for a constant value, so does that mean it checks for a particulier
register number?

Simon


More information about the Gdb-patches mailing list