This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [PATCH] gdb/i387-tdep.c: Avoid warning for "-Werror=strict-overflow"
- From: Walfred Tedeschi <walfred dot tedeschi at intel dot com>
- To: michael dot sturm at intel 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, binutils at sourceware dot org, gdb-patches at sourceware dot org
- Date: Thu, 09 Oct 2014 12:05:53 +0200
- 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>
Am 10/3/2014 7:49 PM, schrieb Pedro Alves:
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' ...
}
Thanks,
Pedro Alves
Later on we have introduced the _END macros, as can be seen on i387-tdep.h.
Creating one or two of them migh be a good idea to homogeinize the way
we handle the registers.
This will finally also join together all ideas presented before in only one.
Using the end will then make
for (i = I387_ST0_REGNUM (tdep); i < I387_XMM0_REGNUM (tdep); i++)
to be
for (i = I387_ST0_REGNUM (tdep); i < I387_STEND_REGNUM (tdep); i++)
We also define the number of regs for every technology in that file.
Thanks and regards,
-Fred and Michael
Intel GmbH
Dornacher Strasse 1
85622 Feldkirchen/Muenchen, Deutschland
Sitz der Gesellschaft: Feldkirchen bei Muenchen
Geschaeftsfuehrer: Christian Lamprechter, Hannes Schwaderer, Douglas Lusk
Registergericht: Muenchen HRB 47456
Ust.-IdNr./VAT Registration No.: DE129385895
Citibank Frankfurt a.M. (BLZ 502 109 00) 600119052