From: Kaz Kojima Date: Sun, 9 Mar 2008 23:39:51 +0000 (+0000) Subject: backport: re PR target/35225 (gcc segfaults when building GTK+ code with -O2 -fPIC... X-Git-Tag: prereleases/gcc-4.2.4-rc1~88 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d6925f1b1d0d5b19c2dd3c5c8c75df1a03f3eef7;p=thirdparty%2Fgcc.git backport: re PR target/35225 (gcc segfaults when building GTK+ code with -O2 -fPIC for SH4) Backport from mainline: PR target/35225 * config/sh/sh.c (find_barrier): Don't go past 'from' argument. From-SVN: r133066 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 39b338774437..86cdf281a0bc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2008-03-09 Kaz Kojima + + Backport from mainline: + PR target/35225 + * config/sh/sh.c (find_barrier): Don't go past 'from' argument. + 2008-03-07 Joseph Myers * doc/include/texinfo.tex: Update to version 2008-03-07.10. diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c index f567afbef696..43efeb3f7446 100644 --- a/gcc/config/sh/sh.c +++ b/gcc/config/sh/sh.c @@ -3530,6 +3530,7 @@ find_barrier (int num_mova, rtx mova, rtx from) rtx barrier_before_mova = 0, found_barrier = 0, good_barrier = 0; int si_limit; int hi_limit; + rtx orig = from; /* For HImode: range is 510, add 4 because pc counts from address of second instruction after this one, subtract 2 for the jump instruction @@ -3753,7 +3754,8 @@ find_barrier (int num_mova, rtx mova, rtx from) /* If we exceeded the range, then we must back up over the last instruction we looked at. Otherwise, we just need to undo the NEXT_INSN at the end of the loop. */ - if (count_hi > hi_limit || count_si > si_limit) + if (PREV_INSN (from) != orig + && (count_hi > hi_limit || count_si > si_limit)) from = PREV_INSN (PREV_INSN (from)); else from = PREV_INSN (from);