diff --git a/.gitignore b/.gitignore index c0fa8f7..0bb1d47 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ fastjar-0.97.tar.gz gcc-4.5.0-20100716.tar.bz2 +gcc-4.5.0-20100730.tar.bz2 diff --git a/gcc.spec b/gcc.spec index 8c7a42a..f04313b 100644 --- a/gcc.spec +++ b/gcc.spec @@ -1,9 +1,9 @@ -%global DATE 20100716 -%global SVNREV 162258 +%global DATE 20100730 +%global SVNREV 162712 %global gcc_version 4.5.0 # Note, gcc_release must be integer, if you want to add suffixes to # %{release}, append them after %{gcc_release} on Release: line. -%global gcc_release 3 +%global gcc_release 4 %global _unpackaged_files_terminate_build 0 %global multilib_64_archs sparc64 ppc64 s390x x86_64 %ifarch %{ix86} x86_64 ia64 ppc ppc64 alpha @@ -143,7 +143,6 @@ Requires(preun): /sbin/install-info AutoReq: true Patch0: gcc45-hack.patch -Patch1: gcc45-build-id.patch Patch2: gcc45-c++-builtin-redecl.patch Patch4: gcc45-java-nomulti.patch Patch5: gcc45-ppc32-retaddr.patch @@ -157,8 +156,7 @@ Patch12: gcc45-cloog-dl.patch Patch14: gcc45-pr38757.patch Patch15: gcc45-libstdc++-docs.patch Patch17: gcc45-no-add-needed.patch -Patch18: gcc45-pr44542.patch -Patch19: gcc45-pr44942.patch +Patch18: gcc45-pr45055.patch Patch1000: fastjar-0.97-segfault.patch Patch1001: fastjar-0.97-len1.patch @@ -471,7 +469,6 @@ GNAT is a GNU Ada 95 front-end to GCC. This package includes static libraries. %prep %setup -q -n gcc-%{version}-%{DATE} %patch0 -p0 -b .hack~ -%patch1 -p0 -b .build-id~ %patch2 -p0 -b .c++-builtin-redecl~ %patch4 -p0 -b .java-nomulti~ %patch5 -p0 -b .ppc32-retaddr~ @@ -489,8 +486,7 @@ GNAT is a GNU Ada 95 front-end to GCC. This package includes static libraries. %patch15 -p0 -b .libstdc++-docs~ %endif %patch17 -p0 -b .no-add-needed~ -%patch18 -p0 -b .pr44542~ -%patch19 -p0 -b .pr44942~ +%patch18 -p0 -b .pr45055~ # This testcase doesn't compile. rm libjava/testsuite/libjava.lang/PR35020* @@ -512,7 +508,7 @@ echo 'Red Hat %{version}-%{gcc_release}' > gcc/DEV-PHASE # Default to -gdwarf-3 rather than -gdwarf-2 sed -i '/UInteger Var(dwarf_version)/s/Init(2)/Init(3)/' gcc/common.opt -sed -i 's/\(may be either 2 or 3; the default version is \)2\./\13./' gcc/doc/invoke.texi +sed -i 's/\(may be either 2, 3 or 4; the default version is \)2\./\13./' gcc/doc/invoke.texi cp -a libstdc++-v3/config/cpu/i{4,3}86/atomicity.h @@ -632,7 +628,7 @@ CC="$CC" CFLAGS="$OPT_FLAGS" CXXFLAGS="`echo $OPT_FLAGS | sed 's/ -Wall / /g'`" --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap \ --enable-shared --enable-threads=posix --enable-checking=release \ --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions \ - --enable-gnu-unique-object \ + --enable-gnu-unique-object --enable-linker-build-id \ %if !%{build_ada} --enable-languages=c,c++,objc,obj-c++,java,fortran,lto \ %else @@ -1962,6 +1958,18 @@ fi %endif %changelog +* Fri Jul 30 2010 Jakub Jelinek 4.5.0-4 +- update from gcc-4_5-branch + - PRs c++/43016, c++/44996, c++/45008, c/45079, debug/45015, fortran/30668, + fortran/31346, fortran/34260, fortran/40011, testsuite/38946, + tree-optimization/44900, tree-optimization/44977 + - fix vectorizer ICE (#6617492, PR tree-optimization/45047) +- use --enable-linker-build-id in configury instead of patching + --build-id support in +- VTA backports + - PRs debug/45055, rtl-optimization/45137, debug/45003, + debug/45006, bootstrap/45028 + * Fri Jul 16 2010 Jakub Jelinek 4.5.0-3 - update from gcc-4_5-branch - PRs ada/43731, fortran/44773, pch/14940, testsuite/44325 diff --git a/gcc45-build-id.patch b/gcc45-build-id.patch deleted file mode 100644 index f76f939..0000000 --- a/gcc45-build-id.patch +++ /dev/null @@ -1,52 +0,0 @@ -2007-07-22 Roland McGrath - - * config/rs6000/sysv4.h (LINK_EH_SPEC): Add --build-id for - non-relocatable link. - * config/linux.h (LINK_EH_SPEC): Likewise. - * config/alpha/elf.h (LINK_EH_SPEC): Likewise. - * config/ia64/linux.h (LINK_EH_SPEC): Likewise. - ---- gcc/config/rs6000/sysv4.h.~1~ -+++ gcc/config/rs6000/sysv4.h -@@ -906,7 +906,7 @@ extern int fixuplabelno; - %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER "}}}" - - #if defined(HAVE_LD_EH_FRAME_HDR) --# define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " -+# define LINK_EH_SPEC "%{!static:--eh-frame-hdr} %{!r:--build-id} " - #endif - - #define CPP_OS_LINUX_SPEC "-D__unix__ -D__gnu_linux__ -D__linux__ \ ---- gcc/config/linux.h.~1~ -+++ gcc/config/linux.h -@@ -85,7 +85,7 @@ Boston, MA 02110-1301, USA. */ - } while (0) - - #if defined(HAVE_LD_EH_FRAME_HDR) --#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " -+#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} %{!r:--build-id} " - #endif - - /* Define this so we can compile MS code for use with WINE. */ ---- gcc/config/alpha/elf.h.~1~ -+++ gcc/config/alpha/elf.h -@@ -421,7 +421,7 @@ extern int alpha_this_gpdisp_sequence_nu - I imagine that other systems will catch up. In the meantime, it - doesn't harm to make sure that the data exists to be used later. */ - #if defined(HAVE_LD_EH_FRAME_HDR) --#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " -+#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} %{!r:--build-id} " - #endif - - /* A C statement (sans semicolon) to output to the stdio stream STREAM ---- gcc/config/ia64/linux.h.~1~ -+++ gcc/config/ia64/linux.h -@@ -56,7 +56,7 @@ do { \ - Signalize that because we have fde-glibc, we don't need all C shared libs - linked against -lgcc_s. */ - #undef LINK_EH_SPEC --#define LINK_EH_SPEC "" -+#define LINK_EH_SPEC "%{!r:--build-id} " - - #define MD_UNWIND_SUPPORT "config/ia64/linux-unwind.h" - diff --git a/gcc45-pr44542.patch b/gcc45-pr44542.patch deleted file mode 100644 index 340fb44..0000000 --- a/gcc45-pr44542.patch +++ /dev/null @@ -1,49 +0,0 @@ -2010-06-17 Jakub Jelinek - - PR target/44542 - * cfgexpand.c (expand_one_stack_var_at): Limit align to maximum - of max_used_stack_slot_alignment and PREFERRED_STACK_BOUNDARY - instead of MAX_SUPPORTED_STACK_ALIGNMENT. - (expand_one_var): Don't consider DECL_ALIGN for variables for - which expand_one_stack_var_at has been already called. - ---- gcc/cfgexpand.c.jj 2010-06-17 17:01:11.964198458 +0200 -+++ gcc/cfgexpand.c 2010-06-17 18:25:18.940335757 +0200 -@@ -705,7 +705,7 @@ static void - expand_one_stack_var_at (tree decl, HOST_WIDE_INT offset) - { - /* Alignment is unsigned. */ -- unsigned HOST_WIDE_INT align; -+ unsigned HOST_WIDE_INT align, max_align; - rtx x; - - /* If this fails, we've overflowed the stack frame. Error nicely? */ -@@ -722,10 +722,10 @@ expand_one_stack_var_at (tree decl, HOST - offset -= frame_phase; - align = offset & -offset; - align *= BITS_PER_UNIT; -- if (align == 0) -- align = STACK_BOUNDARY; -- else if (align > MAX_SUPPORTED_STACK_ALIGNMENT) -- align = MAX_SUPPORTED_STACK_ALIGNMENT; -+ max_align = MAX (crtl->max_used_stack_slot_alignment, -+ PREFERRED_STACK_BOUNDARY); -+ if (align == 0 || align > max_align) -+ align = max_align; - - DECL_ALIGN (decl) = align; - DECL_USER_ALIGN (decl) = 0; -@@ -930,6 +930,13 @@ expand_one_var (tree var, bool toplevel, - align = MINIMUM_ALIGNMENT (TREE_TYPE (var), - TYPE_MODE (TREE_TYPE (var)), - TYPE_ALIGN (TREE_TYPE (var))); -+ else if (DECL_HAS_VALUE_EXPR_P (var) -+ || (DECL_RTL_SET_P (var) && MEM_P (DECL_RTL (var)))) -+ /* Don't consider debug only variables with DECL_HAS_VALUE_EXPR_P set -+ or variables which were assigned a stack slot already by -+ expand_one_stack_var_at - in the latter case DECL_ALIGN has been -+ changed from the offset chosen to it. */ -+ align = crtl->stack_alignment_estimated; - else - align = MINIMUM_ALIGNMENT (var, DECL_MODE (var), DECL_ALIGN (var)); - diff --git a/gcc45-pr44942.patch b/gcc45-pr44942.patch deleted file mode 100644 index 4d50cdc..0000000 --- a/gcc45-pr44942.patch +++ /dev/null @@ -1,192 +0,0 @@ -2010-07-16 Jakub Jelinek - - PR target/44942 - * config/i386/i386-protos.h (ix86_function_arg_boundary): Change second - argument to const_tree. - * config/i386/i386.c (function_arg_advance): If padding needs to be - inserted before argument, increment cum->words by number of padding - words as well. - (contains_aligned_value_p): Change argument to const_tree. - (ix86_function_arg_boundary): Change second argument to const_tree. - - * gcc.c-torture/execute/pr44942.c: New test. - * gcc.target/i386/pr44942.c: New test. - ---- gcc/config/i386/i386-protos.h.jj 2010-07-13 15:56:31.000000000 +0200 -+++ gcc/config/i386/i386-protos.h 2010-07-15 12:45:01.000000000 +0200 -@@ -137,8 +137,8 @@ extern enum machine_mode ix86_fp_compare - extern rtx ix86_libcall_value (enum machine_mode); - extern bool ix86_function_value_regno_p (int); - extern bool ix86_function_arg_regno_p (int); --extern int ix86_function_arg_boundary (enum machine_mode, tree); --extern bool ix86_solaris_return_in_memory (const_tree,const_tree); -+extern int ix86_function_arg_boundary (enum machine_mode, const_tree); -+extern bool ix86_solaris_return_in_memory (const_tree, const_tree); - extern rtx ix86_force_to_memory (enum machine_mode, rtx); - extern void ix86_free_from_memory (enum machine_mode); - extern enum calling_abi ix86_cfun_abi (void); ---- gcc/config/i386/i386.c.jj 2010-07-13 15:56:31.000000000 +0200 -+++ gcc/config/i386/i386.c 2010-07-15 12:44:31.000000000 +0200 -@@ -6157,9 +6157,8 @@ function_arg_advance_64 (CUMULATIVE_ARGS - if (!named && VALID_AVX256_REG_MODE (mode)) - return; - -- if (!examine_argument (mode, type, 0, &int_nregs, &sse_nregs)) -- cum->words += words; -- else if (sse_nregs <= cum->sse_nregs && int_nregs <= cum->nregs) -+ if (examine_argument (mode, type, 0, &int_nregs, &sse_nregs) -+ && sse_nregs <= cum->sse_nregs && int_nregs <= cum->nregs) - { - cum->nregs -= int_nregs; - cum->sse_nregs -= sse_nregs; -@@ -6167,7 +6166,11 @@ function_arg_advance_64 (CUMULATIVE_ARGS - cum->sse_regno += sse_nregs; - } - else -- cum->words += words; -+ { -+ int align = ix86_function_arg_boundary (mode, type) / BITS_PER_WORD; -+ cum->words = (cum->words + align - 1) & ~(align - 1); -+ cum->words += words; -+ } - } - - static void -@@ -6508,7 +6511,7 @@ ix86_pass_by_reference (CUMULATIVE_ARGS - /* Return true when TYPE should be 128bit aligned for 32bit argument passing - ABI. */ - static bool --contains_aligned_value_p (tree type) -+contains_aligned_value_p (const_tree type) - { - enum machine_mode mode = TYPE_MODE (type); - if (((TARGET_SSE && SSE_REG_MODE_P (mode)) -@@ -6558,7 +6561,7 @@ contains_aligned_value_p (tree type) - specified mode and type. */ - - int --ix86_function_arg_boundary (enum machine_mode mode, tree type) -+ix86_function_arg_boundary (enum machine_mode mode, const_tree type) - { - int align; - if (type) ---- gcc/testsuite/gcc.c-torture/execute/pr44942.c.jj 2010-07-15 13:41:28.000000000 +0200 -+++ gcc/testsuite/gcc.c-torture/execute/pr44942.c 2010-07-15 13:46:40.000000000 +0200 -@@ -0,0 +1,70 @@ -+/* PR target/44942 */ -+ -+#include -+ -+void -+test1 (int a, int b, int c, int d, int e, int f, int g, long double h, ...) -+{ -+ int i; -+ va_list ap; -+ -+ va_start (ap, h); -+ i = va_arg (ap, int); -+ if (i != 1234) -+ __builtin_abort (); -+ va_end (ap); -+} -+ -+void -+test2 (int a, int b, int c, int d, int e, int f, int g, long double h, int i, -+ long double j, int k, long double l, int m, long double n, ...) -+{ -+ int o; -+ va_list ap; -+ -+ va_start (ap, n); -+ o = va_arg (ap, int); -+ if (o != 1234) -+ __builtin_abort (); -+ va_end (ap); -+} -+ -+void -+test3 (double a, double b, double c, double d, double e, double f, -+ double g, long double h, ...) -+{ -+ double i; -+ va_list ap; -+ -+ va_start (ap, h); -+ i = va_arg (ap, double); -+ if (i != 1234.0) -+ __builtin_abort (); -+ va_end (ap); -+} -+ -+void -+test4 (double a, double b, double c, double d, double e, double f, double g, -+ long double h, double i, long double j, double k, long double l, -+ double m, long double n, ...) -+{ -+ double o; -+ va_list ap; -+ -+ va_start (ap, n); -+ o = va_arg (ap, double); -+ if (o != 1234.0) -+ __builtin_abort (); -+ va_end (ap); -+} -+ -+int -+main () -+{ -+ test1 (0, 0, 0, 0, 0, 0, 0, 0.0L, 1234); -+ test2 (0, 0, 0, 0, 0, 0, 0, 0.0L, 0, 0.0L, 0, 0.0L, 0, 0.0L, 1234); -+ test3 (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0L, 1234.0); -+ test4 (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0L, 0.0, 0.0L, -+ 0.0, 0.0L, 0.0, 0.0L, 1234.0); -+ return 0; -+} ---- gcc/testsuite/gcc.target/i386/pr44942.c.jj 2010-07-15 13:52:37.000000000 +0200 -+++ gcc/testsuite/gcc.target/i386/pr44942.c 2010-07-15 13:53:24.000000000 +0200 -@@ -0,0 +1,44 @@ -+/* PR target/44942 */ -+/* { dg-do run { target lp64 } } */ -+ -+#include -+#include -+ -+void -+test1 (double a, double b, double c, double d, double e, double f, -+ double g, __m128d h, ...) -+{ -+ double i; -+ va_list ap; -+ -+ va_start (ap, h); -+ i = va_arg (ap, double); -+ if (i != 1234.0) -+ __builtin_abort (); -+ va_end (ap); -+} -+ -+void -+test2 (double a, double b, double c, double d, double e, double f, double g, -+ __m128d h, double i, __m128d j, double k, __m128d l, -+ double m, __m128d n, ...) -+{ -+ double o; -+ va_list ap; -+ -+ va_start (ap, n); -+ o = va_arg (ap, double); -+ if (o != 1234.0) -+ __builtin_abort (); -+ va_end (ap); -+} -+ -+int -+main () -+{ -+ __m128d m = _mm_set1_pd (7.0); -+ test1 (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, m, 1234.0); -+ test2 (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, m, 0.0, m, -+ 0.0, m, 0.0, m, 1234.0); -+ return 0; -+} diff --git a/gcc45-pr45055.patch b/gcc45-pr45055.patch new file mode 100644 index 0000000..8465ccb --- /dev/null +++ b/gcc45-pr45055.patch @@ -0,0 +1,248 @@ +2010-07-30 Jakub Jelinek + + PR debug/45055 + PR rtl-optimization/45137 + * rtl.h (prev_nonnote_nondebug_insn, next_nonnote_nondebug_insn): New + prototypes. + * emit-rtl.c (prev_nonnote_nondebug_insn, next_nonnote_nondebug_insn): + New functions. + * combine.c (next_nonnote_nondebug_insn): Removed. + * ifcvt.c (noce_process_if_block): Use prev_nonnote_nondebug_insn. + * haifa-sched.c (queue_to_ready): Use next_nonnote_nondebug_insn. + * sched-deps.c (sched_analyze_insn): Likewise. + (fixup_sched_groups, deps_start_bb): Use prev_nonnote_nondebug_insn. + * rtlanal.c (canonicalize_condition): Likewise. + * postreload.c (reload_combine): Likewise. + (reload_cse_move2add): Use next_nonnote_nondebug_insn. + + * gcc.dg/pr45055.c: New test. + +--- gcc/rtl.h.jj 2010-06-11 11:06:01.167282688 +0200 ++++ gcc/rtl.h 2010-07-30 16:33:28.722450824 +0200 +@@ -1709,6 +1709,8 @@ extern rtx next_nonnote_insn (rtx); + extern rtx next_nonnote_insn_bb (rtx); + extern rtx prev_nondebug_insn (rtx); + extern rtx next_nondebug_insn (rtx); ++extern rtx prev_nonnote_nondebug_insn (rtx); ++extern rtx next_nonnote_nondebug_insn (rtx); + extern rtx prev_real_insn (rtx); + extern rtx next_real_insn (rtx); + extern rtx prev_active_insn (rtx); +--- gcc/emit-rtl.c.jj 2010-06-11 11:06:01.104409599 +0200 ++++ gcc/emit-rtl.c 2010-07-30 16:33:28.733479816 +0200 +@@ -3162,6 +3162,38 @@ prev_nondebug_insn (rtx insn) + return insn; + } + ++/* Return the next insn after INSN that is not a NOTE nor DEBUG_INSN. ++ This routine does not look inside SEQUENCEs. */ ++ ++rtx ++next_nonnote_nondebug_insn (rtx insn) ++{ ++ while (insn) ++ { ++ insn = NEXT_INSN (insn); ++ if (insn == 0 || (!NOTE_P (insn) && !DEBUG_INSN_P (insn))) ++ break; ++ } ++ ++ return insn; ++} ++ ++/* Return the previous insn before INSN that is not a NOTE nor DEBUG_INSN. ++ This routine does not look inside SEQUENCEs. */ ++ ++rtx ++prev_nonnote_nondebug_insn (rtx insn) ++{ ++ while (insn) ++ { ++ insn = PREV_INSN (insn); ++ if (insn == 0 || (!NOTE_P (insn) && !DEBUG_INSN_P (insn))) ++ break; ++ } ++ ++ return insn; ++} ++ + /* Return the next INSN, CALL_INSN or JUMP_INSN after INSN; + or 0, if there is none. This routine does not look inside + SEQUENCEs. */ +--- gcc/combine.c.jj 2010-06-11 11:06:01.175282562 +0200 ++++ gcc/combine.c 2010-07-30 16:33:28.754479788 +0200 +@@ -12680,29 +12680,6 @@ reg_bitfield_target_p (rtx x, rtx body) + + return 0; + } +- +-/* Return the next insn after INSN that is neither a NOTE nor a +- DEBUG_INSN. This routine does not look inside SEQUENCEs. */ +- +-static rtx +-next_nonnote_nondebug_insn (rtx insn) +-{ +- while (insn) +- { +- insn = NEXT_INSN (insn); +- if (insn == 0) +- break; +- if (NOTE_P (insn)) +- continue; +- if (DEBUG_INSN_P (insn)) +- continue; +- break; +- } +- +- return insn; +-} +- +- + + /* Given a chain of REG_NOTES originally from FROM_INSN, try to place them + as appropriate. I3 and I2 are the insns resulting from the combination +--- gcc/ifcvt.c.jj 2010-06-11 11:06:00.939658763 +0200 ++++ gcc/ifcvt.c 2010-07-30 16:33:28.768458909 +0200 +@@ -2285,9 +2285,7 @@ noce_process_if_block (struct noce_if_in + } + else + { +- insn_b = prev_nonnote_insn (if_info->cond_earliest); +- while (insn_b && DEBUG_INSN_P (insn_b)) +- insn_b = prev_nonnote_insn (insn_b); ++ insn_b = prev_nonnote_nondebug_insn (if_info->cond_earliest); + /* We're going to be moving the evaluation of B down from above + COND_EARLIEST to JUMP. Make sure the relevant data is still + intact. */ +--- gcc/haifa-sched.c.jj 2010-06-30 16:53:00.807292319 +0200 ++++ gcc/haifa-sched.c 2010-07-30 16:33:28.785485355 +0200 +@@ -1997,13 +1997,9 @@ queue_to_ready (struct ready_list *ready + q_ptr = NEXT_Q (q_ptr); + + if (dbg_cnt (sched_insn) == false) +- { +- /* If debug counter is activated do not requeue insn next after +- last_scheduled_insn. */ +- skip_insn = next_nonnote_insn (last_scheduled_insn); +- while (skip_insn && DEBUG_INSN_P (skip_insn)) +- skip_insn = next_nonnote_insn (skip_insn); +- } ++ /* If debug counter is activated do not requeue insn next after ++ last_scheduled_insn. */ ++ skip_insn = next_nonnote_nondebug_insn (last_scheduled_insn); + else + skip_insn = NULL_RTX; + +--- gcc/sched-deps.c.jj 2010-06-11 11:06:01.160283802 +0200 ++++ gcc/sched-deps.c 2010-07-30 16:33:28.799486427 +0200 +@@ -1517,9 +1517,7 @@ fixup_sched_groups (rtx insn) + + delete_all_dependences (insn); + +- prev_nonnote = prev_nonnote_insn (insn); +- while (DEBUG_INSN_P (prev_nonnote)) +- prev_nonnote = prev_nonnote_insn (prev_nonnote); ++ prev_nonnote = prev_nonnote_nondebug_insn (insn); + if (BLOCK_FOR_INSN (insn) == BLOCK_FOR_INSN (prev_nonnote) + && ! sched_insns_conditions_mutex_p (insn, prev_nonnote)) + add_dependence (insn, prev_nonnote, REG_DEP_ANTI); +@@ -2695,9 +2693,7 @@ sched_analyze_insn (struct deps_desc *de + if (JUMP_P (insn)) + { + rtx next; +- next = next_nonnote_insn (insn); +- while (next && DEBUG_INSN_P (next)) +- next = next_nonnote_insn (next); ++ next = next_nonnote_nondebug_insn (insn); + if (next && BARRIER_P (next)) + reg_pending_barrier = MOVE_BARRIER; + else +@@ -3366,10 +3362,8 @@ deps_start_bb (struct deps_desc *deps, r + hard registers correct. */ + if (! reload_completed && !LABEL_P (head)) + { +- rtx insn = prev_nonnote_insn (head); ++ rtx insn = prev_nonnote_nondebug_insn (head); + +- while (insn && DEBUG_INSN_P (insn)) +- insn = prev_nonnote_insn (insn); + if (insn && CALL_P (insn)) + deps->in_post_call_group_p = post_call_initial; + } +--- gcc/postreload.c.jj 2010-06-11 11:06:00.856659196 +0200 ++++ gcc/postreload.c 2010-07-30 16:34:14.703335670 +0200 +@@ -810,7 +810,7 @@ reload_combine (void) + rtx reg = SET_DEST (set); + rtx plus = SET_SRC (set); + rtx base = XEXP (plus, 1); +- rtx prev = prev_nonnote_insn (insn); ++ rtx prev = prev_nonnote_nondebug_insn (insn); + rtx prev_set = prev ? single_set (prev) : NULL_RTX; + unsigned int regno = REGNO (reg); + rtx index_reg = NULL_RTX; +@@ -1323,7 +1323,7 @@ reload_cse_move2add (rtx first) + && MODES_OK_FOR_MOVE2ADD (GET_MODE (reg), + reg_mode[REGNO (src)])) + { +- rtx next = next_nonnote_insn (insn); ++ rtx next = next_nonnote_nondebug_insn (insn); + rtx set = NULL_RTX; + if (next) + set = single_set (next); +--- gcc/rtlanal.c.jj 2010-06-11 11:06:00.867421367 +0200 ++++ gcc/rtlanal.c 2010-07-30 16:33:28.820478800 +0200 +@@ -4755,9 +4755,7 @@ canonicalize_condition (rtx insn, rtx co + stop if it isn't a single set or if it has a REG_INC note because + we don't want to bother dealing with it. */ + +- do +- prev = prev_nonnote_insn (prev); +- while (prev && DEBUG_INSN_P (prev)); ++ prev = prev_nonnote_nondebug_insn (prev); + + if (prev == 0 + || !NONJUMP_INSN_P (prev) +--- gcc/testsuite/gcc.dg/pr45055.c.jj 2010-07-30 16:33:28.821480043 +0200 ++++ gcc/testsuite/gcc.dg/pr45055.c 2010-07-30 16:33:28.822479707 +0200 +@@ -0,0 +1,41 @@ ++/* PR debug/45055 */ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -ftracer -fsched-pressure -funroll-loops -fschedule-insns -fcompare-debug" } */ ++ ++int colormap[10]; ++ ++extern int bar (); ++ ++void ++foo (int *img, int fp, int y, int *ptr, int depth, int c, int t, int xm) ++{ ++ int x, color, count; ++ for (; y; y--) ++ { ++ if (depth) ++ { ++ count = bar (); ++ for (x = xm; x; x--) ++ { ++ if (c != 1) ++ count = color = -1; ++ if (count == 0) ++ color = count = bar (); ++ if (color) ++ t = bar (fp); ++ *ptr++ = colormap[t]; ++ } ++ } ++ switch (*img) ++ { ++ case 1: ++ bar (); ++ case 3: ++ case -1: ++ case -3: ++ bar (); ++ case -4: ++ bar (); ++ } ++ } ++} diff --git a/sources b/sources index ded46f1..7d22e9b 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ 2659f09c2e43ef8b7d4406321753f1b2 fastjar-0.97.tar.gz -dc1cae2fe66fc33f29edae7aca29da65 gcc-4.5.0-20100716.tar.bz2 +70ea3784e66a23f1e3761cd8e58a7e76 gcc-4.5.0-20100730.tar.bz2