aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2009-09-03 18:33:27 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2009-09-03 18:33:27 +0200
commit7d4507cb3051f5c256ffe567951744a53bd7f2d7 (patch)
treec6086d53d5f1440bbe0cee53b9ebebe355588bda
parent08ab0acf19e1447657e3f49f665b5b292dcc39db (diff)
downloadgcc-7d4507cb3051f5c256ffe567951744a53bd7f2d7.zip
gcc-7d4507cb3051f5c256ffe567951744a53bd7f2d7.tar.gz
gcc-7d4507cb3051f5c256ffe567951744a53bd7f2d7.tar.bz2
re PR debug/41236 (RTL checking failure compiling libgcc)
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. From-SVN: r151385
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/dwarf2out.c12
2 files changed, 12 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a4e3758..0f5face 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
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.
+
PR debug/41238
* function.c (assign_parm_find_stack_rtl): Don't set mem attributes on
the stack slot if it is passed by invisible reference.
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 453e5e9..62459e2 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -11671,21 +11671,23 @@ loc_descriptor (rtx rtl, enum machine_mode mode,
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);