4.4.1-20
This commit is contained in:
parent
fd4bc79df7
commit
22fa975b2a
@ -1,2 +1,2 @@
|
||||
fastjar-0.97.tar.gz
|
||||
gcc-4.4.1-20091005.tar.bz2
|
||||
gcc-4.4.1-20091008.tar.bz2
|
||||
|
19
gcc.spec
19
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 <jakub@redhat.com> 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 <jakub@redhat.com> 4.4.1-19
|
||||
- update from gcc-4_4-branch
|
||||
- PRs fortran/41479, fortran/41515
|
||||
|
@ -1,198 +0,0 @@
|
||||
2009-09-09 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
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;
|
||||
+}
|
||||
+
|
46
gcc44-vta-pr41353-c9.patch
Normal file
46
gcc44-vta-pr41353-c9.patch
Normal file
@ -0,0 +1,46 @@
|
||||
2009-10-07 Alexandre Oliva <aoliva@redhat.com>
|
||||
|
||||
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;
|
||||
}
|
52
gcc44-vta-rh521991-2.patch
Normal file
52
gcc44-vta-rh521991-2.patch
Normal file
@ -0,0 +1,52 @@
|
||||
2009-10-08 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* 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;
|
||||
+ }
|
||||
+}
|
Loading…
Reference in New Issue
Block a user