This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: fixes for type-punning warnings in GCC 4.1
- From: Daniel Jacobowitz <drow at false dot org>
- To: Alexandre Oliva <aoliva at redhat dot com>
- Cc: Eli Zaretskii <eliz at gnu dot org>, gdb-patches at sources dot redhat dot com
- Date: Sun, 22 Jan 2006 15:33:23 -0500
- Subject: Re: fixes for type-punning warnings in GCC 4.1
- References: <ork6e0nban.fsf@livre.oliva.athome.lsd.ic.unicamp.br> <ufyoog2mf.fsf@gnu.org> <20051219221830.GA32448@nevyn.them.org> <or1wz8gham.fsf@livre.oliva.athome.lsd.ic.unicamp.br>
On Mon, Jan 16, 2006 at 04:26:57PM -0200, Alexandre Oliva wrote:
> On Dec 19, 2005, Daniel Jacobowitz <drow@false.org> wrote:
>
> >> > From: Alexandre Oliva <aoliva@redhat.com>
> >> > Date: Mon, 19 Dec 2005 17:20:48 -0200
>
> >> > - num = sscanf (p, "%g%s", (float *) &putithere->typed_val_float.dval,s);
> >> > + num = sscanf (p, "%g%s", (float *) (void *) &putithere->typed_val_float.dval,s);
>
> > We should fix it properly, in any case. The right solution here is
> > pretty apparent: delete the "float" case, and #define appropriate
> > format characters for DOUBLEST in doublest.h, in the same place we
> > typedef DOUBLEST. Just like GCC's HOST_WIDE_INT_PRINT.
>
> We can't quite do that because we may have to issue more complex
> command patterns than simply a plain sscanf into the output location.
> I've come up with this macro that defers to a static inline function
> in the complex case. Is this change acceptable? Tested on
> amd64-linux-gnu.
>
> Another alternative that I found uglier would be to define a
> DOUBLEST_SCAN macro and a DOUBLEST_SCAN_TYPE typedef, and always
> declare a variable of DOUBLEST_SCAN_TYPE, scan into it, and then copy
> the scanned value to the given output variable. This enables people
> to construct more complex scan patterns, but is it worth the ugliness
> and extra copying for the sake of the uncommon `has long double but
> can't scanf it' case?
The output is always a DOUBLEST. I don't know of any reason why we
should enable HAVE_LONG_DOUBLE if we can't printf and scanf them; would
this be simpler in that case? Don't make DOUBLEST something we can't
scan or print.
--
Daniel Jacobowitz
CodeSourcery