From 22fa975b2a133e2d7a4aa8b3e7040c598af83d11 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Oct 08 2009 08:41:15 +0000 Subject: 4.4.1-20 --- diff --git a/.cvsignore b/.cvsignore index 99c819c..a1dcbef 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1,2 +1,2 @@ fastjar-0.97.tar.gz -gcc-4.4.1-20091005.tar.bz2 +gcc-4.4.1-20091008.tar.bz2 diff --git a/gcc.spec b/gcc.spec index 76c7430..91bb163 100644 --- a/gcc.spec +++ b/gcc.spec @@ -1,9 +1,9 @@ -%global DATE 20091005 -%global SVNREV 152471 +%global DATE 20091008 +%global SVNREV 152555 %global gcc_version 4.4.1 # 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 19 +%global gcc_release 20 %global _unpackaged_files_terminate_build 0 %global multilib_64_archs sparc64 ppc64 s390x x86_64 %global include_gappletviewer 1 @@ -161,7 +161,8 @@ Patch17: gcc44-pr38757.patch Patch18: gcc44-libstdc++-docs.patch Patch19: gcc44-ppc64-aixdesc.patch Patch20: gcc44-vta-rh521991.patch -Patch21: gcc44-pr41317.patch +Patch21: gcc44-vta-rh521991-2.patch +Patch22: gcc44-vta-pr41353-c9.patch Patch1000: fastjar-0.97-segfault.patch @@ -469,7 +470,8 @@ which are required to compile with the GNAT. %endif %patch19 -p0 -b .ppc64-aixdesc~ %patch20 -p0 -b .vta-rh521991~ -%patch21 -p0 -b .pr41317~ +%patch21 -p0 -b .vta-rh521991-2~ +%patch22 -p0 -b .vta-pr41353-c9~ # This testcase doesn't compile. rm libjava/testsuite/libjava.lang/PR35020* @@ -1839,6 +1841,13 @@ fi %doc rpm.doc/changelogs/libmudflap/ChangeLog* %changelog +* Thu Oct 8 2009 Jakub Jelinek 4.4.1-20 +- update from gcc-4_4-branch + - PRs c++/39863, c++/41038 +- avoid redundant DW_AT_const_value when abstract origin already has one + (#527430) +- another VTA debug stmt renaming bugfix (#521991) + * Mon Oct 5 2009 Jakub Jelinek 4.4.1-19 - update from gcc-4_4-branch - PRs fortran/41479, fortran/41515 diff --git a/gcc44-pr41317.patch b/gcc44-pr41317.patch deleted file mode 100644 index 2ac9c3b..0000000 --- a/gcc44-pr41317.patch +++ /dev/null @@ -1,198 +0,0 @@ -2009-09-09 Richard Guenther - - PR middle-end/41317 - * tree-ssa-ccp.c (maybe_fold_offset_to_component_ref): Remove - code dealing with plain pointer bases. - (maybe_fold_offset_to_reference): Likewise. - (maybe_fold_stmt_addition): Adjust. - - * gcc.c-torture/execute/pr41317.c: New testcase. - ---- gcc/tree-ssa-ccp.c.jj 2009-04-22 23:58:31.000000000 +0200 -+++ gcc/tree-ssa-ccp.c 2009-10-05 16:50:00.000000000 +0200 -@@ -1727,7 +1727,7 @@ maybe_fold_offset_to_array_ref (tree bas - - static tree - maybe_fold_offset_to_component_ref (tree record_type, tree base, tree offset, -- tree orig_type, bool base_is_ptr) -+ tree orig_type) - { - tree f, t, field_type, tail_array_field, field_offset; - tree ret; -@@ -1779,8 +1779,6 @@ maybe_fold_offset_to_component_ref (tree - if (cmp == 0 - && useless_type_conversion_p (orig_type, field_type)) - { -- if (base_is_ptr) -- base = build1 (INDIRECT_REF, record_type, base); - t = build3 (COMPONENT_REF, field_type, base, f, NULL_TREE); - return t; - } -@@ -1805,11 +1803,7 @@ maybe_fold_offset_to_component_ref (tree - - /* If we matched, then set offset to the displacement into - this field. */ -- if (base_is_ptr) -- new_base = build1 (INDIRECT_REF, record_type, base); -- else -- new_base = base; -- new_base = build3 (COMPONENT_REF, field_type, new_base, f, NULL_TREE); -+ new_base = build3 (COMPONENT_REF, field_type, base, f, NULL_TREE); - - /* Recurse to possibly find the match. */ - ret = maybe_fold_offset_to_array_ref (new_base, t, orig_type, -@@ -1817,7 +1811,7 @@ maybe_fold_offset_to_component_ref (tree - if (ret) - return ret; - ret = maybe_fold_offset_to_component_ref (field_type, new_base, t, -- orig_type, false); -+ orig_type); - if (ret) - return ret; - } -@@ -1831,8 +1825,6 @@ maybe_fold_offset_to_component_ref (tree - - /* If we get here, we've got an aggregate field, and a possibly - nonzero offset into them. Recurse and hope for a valid match. */ -- if (base_is_ptr) -- base = build1 (INDIRECT_REF, record_type, base); - base = build3 (COMPONENT_REF, field_type, base, f, NULL_TREE); - - t = maybe_fold_offset_to_array_ref (base, offset, orig_type, -@@ -1840,7 +1832,7 @@ maybe_fold_offset_to_component_ref (tree - if (t) - return t; - return maybe_fold_offset_to_component_ref (field_type, base, offset, -- orig_type, false); -+ orig_type); - } - - /* Attempt to express (ORIG_TYPE)BASE+OFFSET as BASE->field_of_orig_type -@@ -1854,57 +1846,44 @@ maybe_fold_offset_to_reference (tree bas - { - tree ret; - tree type; -- bool base_is_ptr = true; - - STRIP_NOPS (base); -- if (TREE_CODE (base) == ADDR_EXPR) -- { -- base_is_ptr = false; -+ if (TREE_CODE (base) != ADDR_EXPR) -+ return NULL_TREE; - -- base = TREE_OPERAND (base, 0); -+ base = TREE_OPERAND (base, 0); - -- /* Handle case where existing COMPONENT_REF pick e.g. wrong field of union, -- so it needs to be removed and new COMPONENT_REF constructed. -- The wrong COMPONENT_REF are often constructed by folding the -- (type *)&object within the expression (type *)&object+offset */ -- if (handled_component_p (base)) -+ /* Handle case where existing COMPONENT_REF pick e.g. wrong field of union, -+ so it needs to be removed and new COMPONENT_REF constructed. -+ The wrong COMPONENT_REF are often constructed by folding the -+ (type *)&object within the expression (type *)&object+offset */ -+ if (handled_component_p (base)) -+ { -+ HOST_WIDE_INT sub_offset, size, maxsize; -+ tree newbase; -+ newbase = get_ref_base_and_extent (base, &sub_offset, -+ &size, &maxsize); -+ gcc_assert (newbase); -+ if (size == maxsize -+ && size != -1 -+ && !(sub_offset & (BITS_PER_UNIT - 1))) - { -- HOST_WIDE_INT sub_offset, size, maxsize; -- tree newbase; -- newbase = get_ref_base_and_extent (base, &sub_offset, -- &size, &maxsize); -- gcc_assert (newbase); -- if (size == maxsize -- && size != -1 -- && !(sub_offset & (BITS_PER_UNIT - 1))) -- { -- base = newbase; -- if (sub_offset) -- offset = int_const_binop (PLUS_EXPR, offset, -- build_int_cst (TREE_TYPE (offset), -- sub_offset / BITS_PER_UNIT), 1); -- } -+ base = newbase; -+ if (sub_offset) -+ offset = int_const_binop (PLUS_EXPR, offset, -+ build_int_cst (TREE_TYPE (offset), -+ sub_offset / BITS_PER_UNIT), 1); - } -- if (useless_type_conversion_p (orig_type, TREE_TYPE (base)) -- && integer_zerop (offset)) -- return base; -- type = TREE_TYPE (base); - } -- else -- { -- base_is_ptr = true; -- if (!POINTER_TYPE_P (TREE_TYPE (base))) -- return NULL_TREE; -- type = TREE_TYPE (TREE_TYPE (base)); -- } -- ret = maybe_fold_offset_to_component_ref (type, base, offset, -- orig_type, base_is_ptr); -+ if (useless_type_conversion_p (orig_type, TREE_TYPE (base)) -+ && integer_zerop (offset)) -+ return base; -+ type = TREE_TYPE (base); -+ -+ ret = maybe_fold_offset_to_component_ref (type, base, offset, orig_type); - if (!ret) -- { -- if (base_is_ptr) -- base = build1 (INDIRECT_REF, type, base); -- ret = maybe_fold_offset_to_array_ref (base, offset, orig_type, true); -- } -+ ret = maybe_fold_offset_to_array_ref (base, offset, orig_type, true); -+ - return ret; - } - -@@ -2143,7 +2122,7 @@ maybe_fold_stmt_addition (tree res_type, - t = maybe_fold_offset_to_array_ref (op0, op1, ptd_type, true); - if (!t) - t = maybe_fold_offset_to_component_ref (TREE_TYPE (op0), op0, op1, -- ptd_type, false); -+ ptd_type); - if (t) - t = build1 (ADDR_EXPR, res_type, t); - ---- gcc/testsuite/gcc.c-torture/execute/pr41317.c.jj 2009-10-05 16:18:54.000000000 +0200 -+++ gcc/testsuite/gcc.c-torture/execute/pr41317.c 2009-10-05 16:18:54.000000000 +0200 -@@ -0,0 +1,28 @@ -+extern void abort (void); -+ -+struct A -+{ -+ int i; -+}; -+struct B -+{ -+ struct A a; -+ int j; -+}; -+ -+static void -+foo (struct B *p) -+{ -+ ((struct A *)p)->i = 1; -+} -+ -+int main() -+{ -+ struct A a; -+ a.i = 0; -+ foo ((struct B *)&a); -+ if (a.i != 1) -+ abort (); -+ return 0; -+} -+ diff --git a/gcc44-vta-pr41353-c9.patch b/gcc44-vta-pr41353-c9.patch new file mode 100644 index 0000000..e580114 --- /dev/null +++ b/gcc44-vta-pr41353-c9.patch @@ -0,0 +1,46 @@ +2009-10-07 Alexandre Oliva + + PR debug/41353 + * regmove.c (regmove_backward_pass): Replace src with dst in the + debug insn, and check for dst before rather than after. + +--- gcc/regmove.c.orig 2009-10-06 03:51:43.000000000 -0300 ++++ gcc/regmove.c 2009-10-07 02:35:36.000000000 -0300 +@@ -1117,23 +1117,28 @@ regmove_backward_pass (void) + break; + } + +- /* We can't make this change if SRC is read or ++ /* We can't make this change if DST is mentioned at ++ all in P, since we are going to change its value. ++ We can't make this change if SRC is read or + partially written in P, since we are going to +- eliminate SRC. We can't make this change +- if DST is mentioned at all in P, +- since we are going to change its value. */ +- if (reg_overlap_mentioned_p (src, PATTERN (p))) ++ eliminate SRC. However, if it's a debug insn, we ++ can't refrain from making the change, for this ++ would cause codegen differences, so instead we ++ invalidate debug expressions that reference DST, ++ and adjust references to SRC in them so that they ++ become references to DST. */ ++ if (reg_mentioned_p (dst, PATTERN (p))) + { + if (DEBUG_INSN_P (p)) +- validate_replace_rtx_group (dst, src, insn); ++ validate_change (p, &INSN_VAR_LOCATION_LOC (p), ++ gen_rtx_UNKNOWN_VAR_LOC (), 1); + else + break; + } +- if (reg_mentioned_p (dst, PATTERN (p))) ++ if (reg_overlap_mentioned_p (src, PATTERN (p))) + { + if (DEBUG_INSN_P (p)) +- validate_change (p, &INSN_VAR_LOCATION_LOC (p), +- gen_rtx_UNKNOWN_VAR_LOC (), 1); ++ validate_replace_rtx_group (src, dst, p); + else + break; + } diff --git a/gcc44-vta-rh521991-2.patch b/gcc44-vta-rh521991-2.patch new file mode 100644 index 0000000..daaf0ab --- /dev/null +++ b/gcc44-vta-rh521991-2.patch @@ -0,0 +1,52 @@ +2009-10-08 Jakub Jelinek + + * tree-ssa-operands.c (pop_stmt_changes): In DEBUG stmts, if + an SSA operand is DECL_P and referenced, mark it for renaming. + + * gcc.dg/debug/vta-2.c: New test. + +--- gcc/tree-ssa-operands.c.jj 2009-10-08 01:08:23.000000000 +0200 ++++ gcc/tree-ssa-operands.c 2009-10-08 08:57:45.000000000 +0200 +@@ -2715,12 +2715,16 @@ pop_stmt_changes (gimple *stmt_p) + if (gimple_debug_bind_p (stmt)) + { + FOR_EACH_SSA_TREE_OPERAND (op, stmt, iter, SSA_OP_DEF|SSA_OP_USE) +- if (DECL_P (op) && !referenced_var_p (op)) ++ if (!DECL_P (op)) ++ continue; ++ else if (!referenced_var_p (op)) + { + gimple_debug_bind_reset_value (stmt); + update_stmt (stmt); + break; + } ++ else ++ mark_sym_for_renaming (op); + } + else + { +--- gcc/testsuite/gcc.dg/debug/vta-2.c.jj 2009-10-08 09:55:36.000000000 +0200 ++++ gcc/testsuite/gcc.dg/debug/vta-2.c 2009-10-08 09:55:49.000000000 +0200 +@@ -0,0 +1,22 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -g" } */ ++ ++static int ++bar (void *a, unsigned int b, int n) ++{ ++ int c = *(unsigned long *) a % b; ++ *(unsigned long *) a = (int) (*(unsigned long *) a) / b; ++ return c; ++} ++ ++int ++foo (unsigned long x, int *y, int z) ++{ ++ int level; ++ for (level = 0; level < *y; level++) ++ { ++ bar (&x, z, sizeof (x)); ++ if (x) ++ return *y - 1; ++ } ++} diff --git a/sources b/sources index ca8151d..053e804 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ 2659f09c2e43ef8b7d4406321753f1b2 fastjar-0.97.tar.gz -c89041d608f2c9f1711384305660a6ec gcc-4.4.1-20091005.tar.bz2 +c4c9ad868e890c2a8de2f96496e74b12 gcc-4.4.1-20091008.tar.bz2