This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] Fix RTL checking bootstrap on i?86/x86_64-linux
- From: Jakub Jelinek <jakub at redhat dot com>
- To: gcc-patches at gcc dot gnu dot org, Alexandre Oliva <aoliva at redhat dot com>
- Date: Thu, 3 Sep 2009 17:59:05 +0200
- Subject: [PATCH] Fix RTL checking bootstrap on i?86/x86_64-linux
- Reply-to: Jakub Jelinek <jakub at redhat dot com>
Hi!
--enable-checking=yes,rtl bootstraps were ICEing, because loc_descriptor
used SUBREG_REG macro on SIGN_EXTEND or ZERO_EXTEND, and after fixing that
up it was ICEing because those don't necessarily contain a REG inside, could
have a MEM etc.
Fixed thusly, bootstrapped/regtested on x86_64-linux and i686-linux with
--enable-checking=yes,rtl, ok for trunk?
2009-09-03 Jakub Jelinek <jakub@redhat.com>
PR debug/41236
* dwarf2out.c (loc_descriptor): Don't use SUBREG_REG macro on
SIGN_EXTEND or ZERO_EXTEND. Don't assume there is a REG inside of
it or SUBREG.
--- gcc/dwarf2out.c.jj 2009-09-03 14:02:04.000000000 +0200
+++ gcc/dwarf2out.c 2009-09-03 14:58:45.000000000 +0200
@@ -11671,21 +11671,23 @@ loc_descriptor (rtx rtl, enum machine_mo
switch (GET_CODE (rtl))
{
case SUBREG:
- case SIGN_EXTEND:
- case ZERO_EXTEND:
/* The case of a subreg may arise when we have a local (register)
variable or a formal (register) parameter which doesn't quite fill
up an entire register. For now, just assume that it is
legitimate to make the Dwarf info refer to the whole register which
contains the given subreg. */
- rtl = SUBREG_REG (rtl);
-
- /* ... fall through ... */
+ loc_result = loc_descriptor (SUBREG_REG (rtl), mode, initialized);
+ break;
case REG:
loc_result = reg_loc_descriptor (rtl, initialized);
break;
+ case SIGN_EXTEND:
+ case ZERO_EXTEND:
+ loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized);
+ break;
+
case MEM:
loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl),
initialized);
Jakub