This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB 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: [RFA] Fix cygwin32 failure introduced by [patch] windows-nat.c: Fix offset problem in signal string handling


> From: "Pierre Muller" <pierre.muller@ics-cnrs.unistra.fr>
> Cc: <brobecker@adacore.com>, <gdb-patches@sourceware.org>,        <vinschen@redhat.com>
> Date: Wed, 27 Mar 2013 09:54:23 +0100
> 
> ../../src/gdb/windows-nat.c: In function 'handle_output_debug_string':
> ../../src/gdb/windows-nat.c:993:16: erreur: assignment makes pointer from integer without a cast

Right.  But IMO the casts here are dubious to begin with.  strtoull
produces a 64-bit value; casting it to a 32-bit uintptr_t might shut
up the compiler, but it doesn't solve the fundamental problem, which
is that a 64-bit value is being stuffed into a 32-bit wide pointer.

A cleaner way would be something like

  sscanf (p, "%p", &x);

If that doesn't satisfy the compiler, either, then the following code,
which explicitly resets should be better than the double casts, IMO:

  unsigned long xul;
  ...
  xul = strtoull (p, NULL, 0) & ~((DWORD_PTR)0);
  x = (LPCVOID) xul;

P.S.  Yes, I hate casts, because they tend to conceal subtle bugs.


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