1.1 --- a/patches/gcc/4.0.0/130-pr20973-fix.patch Wed Oct 28 12:03:38 2009 +0100
1.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
1.3 @@ -1,80 +0,0 @@
1.4 -http://gcc.gnu.org/PR20973
1.5 -
1.6 -"gcc 4 (about RC1) miscompiles khtml, in fact something in CSS, which basically
1.7 -leads to all websites being misrendered. I can't easily reduce the testcase,
1.8 -but have applied the whole preprocessed source of css/cssstyleselector.ii.
1.9 -
1.10 -It is to be compiled with g++ -O2 -fPIC -march=i586 -mtune=i686
1.11 --fno-exceptions. A more detailed analysis will follow, as we've found out
1.12 -some things already."
1.13 -
1.14 ----
1.15 -
1.16 -Subject: Bug 20973
1.17 -
1.18 -CVSROOT: /cvs/gcc
1.19 -Module name: gcc
1.20 -Branch: gcc-4_0-branch
1.21 -Changes by: matz@gcc.gnu.org 2005-04-22 17:30:21
1.22 -
1.23 -Modified files:
1.24 - gcc : ChangeLog reload.c
1.25 -
1.26 -Log message:
1.27 - PR middle-end/20973
1.28 - * reload.c (push_reload, find_dummy_reload): Check for uninitialized
1.29 - pseudos.
1.30 -
1.31 -Patches:
1.32 -http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=2.7592.2.177&r2=2.7592.2.178
1.33 -http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/reload.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.268&r2=1.268.2.1
1.34 -
1.35 ----
1.36 -
1.37 -===================================================================
1.38 -RCS file: /cvs/gcc/gcc/gcc/reload.c,v
1.39 -retrieving revision 1.268
1.40 -retrieving revision 1.268.2.1
1.41 -diff -u -r1.268 -r1.268.2.1
1.42 ---- gcc/gcc/reload.c 2005/02/24 22:06:06 1.268
1.43 -+++ gcc/gcc/reload.c 2005/04/22 17:30:15 1.268.2.1
1.44 -@@ -1520,7 +1520,7 @@
1.45 - But if there is no spilling in this block, that is OK.
1.46 - An explicitly used hard reg cannot be a spill reg. */
1.47 -
1.48 -- if (rld[i].reg_rtx == 0 && in != 0)
1.49 -+ if (rld[i].reg_rtx == 0 && in != 0 && hard_regs_live_known)
1.50 - {
1.51 - rtx note;
1.52 - int regno;
1.53 -@@ -1534,6 +1534,11 @@
1.54 - && REG_P (XEXP (note, 0))
1.55 - && (regno = REGNO (XEXP (note, 0))) < FIRST_PSEUDO_REGISTER
1.56 - && reg_mentioned_p (XEXP (note, 0), in)
1.57 -+ /* Check that we don't use a hardreg for an uninitialized
1.58 -+ pseudo. See also find_dummy_reload(). */
1.59 -+ && (ORIGINAL_REGNO (XEXP (note, 0)) < FIRST_PSEUDO_REGISTER
1.60 -+ || ! bitmap_bit_p (ENTRY_BLOCK_PTR->global_live_at_end,
1.61 -+ ORIGINAL_REGNO (XEXP (note, 0))))
1.62 - && ! refers_to_regno_for_reload_p (regno,
1.63 - (regno
1.64 - + hard_regno_nregs[regno]
1.65 -@@ -1997,7 +2002,17 @@
1.66 - is a subreg, and in that case, out
1.67 - has a real mode. */
1.68 - (GET_MODE (out) != VOIDmode
1.69 -- ? GET_MODE (out) : outmode)))
1.70 -+ ? GET_MODE (out) : outmode))
1.71 -+ /* But only do all this if we can be sure, that this input
1.72 -+ operand doesn't correspond with an uninitialized pseudoreg.
1.73 -+ global can assign some hardreg to it, which is the same as
1.74 -+ a different pseudo also currently live (as it can ignore the
1.75 -+ conflict). So we never must introduce writes to such hardregs,
1.76 -+ as they would clobber the other live pseudo using the same.
1.77 -+ See also PR20973. */
1.78 -+ && (ORIGINAL_REGNO (in) < FIRST_PSEUDO_REGISTER
1.79 -+ || ! bitmap_bit_p (ENTRY_BLOCK_PTR->global_live_at_end,
1.80 -+ ORIGINAL_REGNO (in))))
1.81 - {
1.82 - unsigned int regno = REGNO (in) + in_offset;
1.83 - unsigned int nwords = hard_regno_nregs[regno][inmode];