This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH] gdb/i387-tdep.c: Avoid warning for "-Werror=strict-overflow"
- From: Chen Gang <gang dot chen dot 5i5j at gmail dot com>
- To: Pedro Alves <palves at redhat dot com>, Joel Brobecker <brobecker at adacore dot com>
- Cc: Mark Kettenis <mark dot kettenis at xs4all dot nl>, amodra at gmail dot com, gbenson at redhat dot com, michael dot sturm at intel dot com, walfred dot tedeschi at intel dot com, binutils at sourceware dot org, gdb-patches at sourceware dot org
- Date: Sat, 04 Oct 2014 13:18:21 +0800
- Subject: Re: [PATCH] gdb/i387-tdep.c: Avoid warning for "-Werror=strict-overflow"
- Authentication-results: sourceware.org; auth=none
- References: <542EC11C dot 3020406 at gmail dot com> <201410031546 dot s93FknOM002165 at glazunov dot sibelius dot xs4all dot nl> <542EC9FC dot 8050107 at gmail dot com> <20141003164420 dot GK6927 at adacore dot com> <542EE1BF dot 7060203 at redhat dot com>
On 10/4/14 1:49, Pedro Alves wrote:
> On 10/03/2014 05:44 PM, Joel Brobecker wrote:
>>>> Sorry, but obfuscating code to make compilers happy is *not* the way to go.
>>>>
>>>
>>> OK, I can understand, but for me, these is no other better ways for it,
>>> except let gdb give up "-Werror" (if always need "--disable-werror"
>>> during "configure").
>>
>> I have to agree with Mark on this one, the proposed solution looks
>> awful. There has to be another way. Maybe declaring a local constant
>> whose value is I387_XMM0_REGNUM (tdep)?
>
> Likely, after transformations and intra-procedural analyses, gcc would
> end up with the same.
>
> This:
>
> for (i = I387_ST0_REGNUM (tdep); i < I387_XMM0_REGNUM (tdep); i++)
>
> always iterates exactly 16 times, because I387_XMM0_REGNUM
> is defined like:
>
> #define I387_XMM0_REGNUM(tdep) (I387_ST0_REGNUM (tdep) + 16)
>
> An alternative I think might work would be to give that magic
> 16 constant a name, say:
>
> #define I387_NUM_ST_REGS 16
>
> and then do:
>
> for (i = 0; i < i < I387_NUM_ST_REGS; i++)
> {
> int r = I387_ST0_REGNUM (tdep) + i;
>
> ... use 'r' instead of 'i' ...
> }
>
OK, thanks. It is really one way, it is a little better than my original
way. But for me, it is still not a good idea: it introduces a new macro
and a new variable for each area (originally, it is only one statement).
For me, "-Werror" need always be optional, but not mandatory.
Compiler is our helper, but we are in charge of the final code. So we
should notice about all compiler's 'advice'. Commonly, 'advice' is
always valuable, but may not always be suitable for oneself.
Thanks.
--
Chen Gang
Open, share, and attitude like air, water, and life which God blessed