From: Daniel Jacobowitz <drow@false.org>
To: Ralf Corsepius <ralf.corsepius@rtems.org>
Cc: GDB Patches <gdb-patches@sources.redhat.com>
Subject: Re: [PATCH,sim/sh] lvalue casts
Date: Fri, 17 Jun 2005 03:13:00 -0000 [thread overview]
Message-ID: <20050617031255.GE17013@nevyn.them.org> (raw)
In-Reply-To: <1115047102.24385.376.camel@mccallum.corsepiu.local>
On Mon, May 02, 2005 at 05:18:22PM +0200, Ralf Corsepius wrote:
> Hi,
>
> gcc-4.0.0 chokes on with an "invalid lvalue" error on the code generated
> by sh/gencode.c (gdb-CVS mainline).
>
> The patch below seems to fix this issue for me.
>
> AFAIS, the "(unsigned int) R[]" cast are just superfluous.
Sorry about the delay.
> 2005-05-02 Ralf Corsepius <ralf.corsepius@rtems.org>
>
> * gencode.c (divu R0,<REG_N>): Remove lvalue casts to please gcc4.
>
>
> Index: gencode.c
> ===================================================================
> RCS file: /cvs/src/src/sim/sh/gencode.c,v
> retrieving revision 1.31
> diff -u -r1.31 gencode.c
> --- gencode.c 14 Apr 2005 20:16:06 -0000 1.31
> +++ gencode.c 2 May 2005 15:10:03 -0000
> @@ -215,7 +215,7 @@
> "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",
> "if (R0 == 0)",
> " R[n] = 0xffffffff;",
> - "else (unsigned int) R[n] = (unsigned int) R[n] / (unsigned int) R0;",
> + "else R[n] = R[n] / (unsigned int) R0;",
> "L (n);",
> },
The second cast definitely can go; int will be promoted to unsigned int
automatically, and that's a well defined conversion. However, the
other half is dodgier:
[#3] Otherwise, the new type is signed and the value cannot
be represented in it; either the result is implementation-
defined or an implementation-defined signal is raised.
So for 0xffffffff / 1u, the result is implementation-defined.
Unfortunate. We'll just have to propogate the assumption that
the implementation uses the sensible definition... I've committed the
below. Now I can build GDB for sh-elf using gcc 4.0, though not with
-Werror yet.
--
Daniel Jacobowitz
CodeSourcery, LLC
2005-06-16 Daniel Jacobowitz <dan@codesourcery.com>
* gencode.c (tab): Avoid lvalue casts. Suggested by
Ralf Corsepius <ralf.corsepius@rtems.org>.
Index: gencode.c
===================================================================
RCS file: /cvs/src/src/sim/sh/gencode.c,v
retrieving revision 1.31
diff -u -p -r1.31 gencode.c
--- gencode.c 14 Apr 2005 20:16:06 -0000 1.31
+++ gencode.c 17 Jun 2005 03:06:38 -0000
@@ -215,7 +215,9 @@ op tab[] =
"RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",
"if (R0 == 0)",
" R[n] = 0xffffffff;",
- "else (unsigned int) R[n] = (unsigned int) R[n] / (unsigned int) R0;",
+ "/* FIXME: The result may be implementation-defined if it is outside */",
+ "/* the range of signed int (i.e. if R[n] was negative and R0 == 1). */",
+ "else R[n] = R[n] / (unsigned int) R0;",
"L (n);",
},
{ "n", "0n", "mulr R0,<REG_N>", "0100nnnn10000000",
prev parent reply other threads:[~2005-06-17 3:13 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-05-02 15:18 Ralf Corsepius
2005-06-17 3:13 ` Daniel Jacobowitz [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20050617031255.GE17013@nevyn.them.org \
--to=drow@false.org \
--cc=gdb-patches@sources.redhat.com \
--cc=ralf.corsepius@rtems.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox