diff --git a/.cvsignore b/.cvsignore index 20d471f..241fa39 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1,2 +1,2 @@ fastjar-0.97.tar.gz -gcc-4.4.1-20090925.tar.bz2 +gcc-4.4.1-20091001.tar.bz2 diff --git a/gcc.spec b/gcc.spec index 774a47c..5ad8e5b 100644 --- a/gcc.spec +++ b/gcc.spec @@ -1,9 +1,9 @@ -%global DATE 20090925 -%global SVNREV 152158 +%global DATE 20091001 +%global SVNREV 152364 %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 17 +%global gcc_release 18 %global _unpackaged_files_terminate_build 0 %global multilib_64_archs sparc64 ppc64 s390x x86_64 %global include_gappletviewer 1 @@ -160,6 +160,7 @@ Patch16: gcc44-unwind-debug-hook.patch Patch17: gcc44-pr38757.patch Patch18: gcc44-libstdc++-docs.patch Patch19: gcc44-ppc64-aixdesc.patch +Patch20: gcc44-vta-rh521991.patch Patch1000: fastjar-0.97-segfault.patch @@ -466,6 +467,7 @@ which are required to compile with the GNAT. %patch18 -p0 -b .libstdc++-docs~ %endif %patch19 -p0 -b .ppc64-aixdesc~ +%patch20 -p0 -b .vta-rh521991~ # This testcase doesn't compile. rm libjava/testsuite/libjava.lang/PR35020* @@ -1185,55 +1187,65 @@ rm -rf testlogs-%{_target_platform}-%{version}-%{release} rm -rf %{buildroot} %post -/sbin/install-info \ - --info-dir=%{_infodir} %{_infodir}/gcc.info.gz || : +if [ -f %{_infodir}/gcc.info.gz ]; then + /sbin/install-info \ + --info-dir=%{_infodir} %{_infodir}/gcc.info.gz || : +fi %preun -if [ $1 = 0 ]; then +if [ $1 = 0 -a -f %{_infodir}/gcc.info.gz ]; then /sbin/install-info --delete \ --info-dir=%{_infodir} %{_infodir}/gcc.info.gz || : fi %post -n cpp -/sbin/install-info \ - --info-dir=%{_infodir} %{_infodir}/cpp.info.gz || : +if [ -f %{_infodir}/cpp.info.gz ]; then + /sbin/install-info \ + --info-dir=%{_infodir} %{_infodir}/cpp.info.gz || : +fi %preun -n cpp -if [ $1 = 0 ]; then +if [ $1 = 0 -a -f %{_infodir}/cpp.info.gz ]; then /sbin/install-info --delete \ --info-dir=%{_infodir} %{_infodir}/cpp.info.gz || : fi %post gfortran -/sbin/install-info \ - --info-dir=%{_infodir} %{_infodir}/gfortran.info.gz || : +if [ -f %{_infodir}/gfortran.info.gz ]; then + /sbin/install-info \ + --info-dir=%{_infodir} %{_infodir}/gfortran.info.gz || : +fi %preun gfortran -if [ $1 = 0 ]; then +if [ $1 = 0 -a -f %{_infodir}/gfortran.info.gz ]; then /sbin/install-info --delete \ --info-dir=%{_infodir} %{_infodir}/gfortran.info.gz || : fi %post java +if [ -f %{_infodir}/gcj.info.gz ]; then /sbin/install-info \ --info-dir=%{_infodir} %{_infodir}/gcj.info.gz || : +fi %preun java -if [ $1 = 0 ]; then +if [ $1 = 0 -a -f %{_infodir}/gcj.info.gz ]; then /sbin/install-info --delete \ --info-dir=%{_infodir} %{_infodir}/gcj.info.gz || : fi %post gnat -/sbin/install-info \ - --info-dir=%{_infodir} %{_infodir}/gnat_rm.info.gz || : -/sbin/install-info \ - --info-dir=%{_infodir} %{_infodir}/gnat_ugn.info.gz || : -/sbin/install-info \ - --info-dir=%{_infodir} %{_infodir}/gnat-style.info.gz || : +if [ -f %{_infodir}/gnat_rm.info.gz ]; then + /sbin/install-info \ + --info-dir=%{_infodir} %{_infodir}/gnat_rm.info.gz || : + /sbin/install-info \ + --info-dir=%{_infodir} %{_infodir}/gnat_ugn.info.gz || : + /sbin/install-info \ + --info-dir=%{_infodir} %{_infodir}/gnat-style.info.gz || : +fi %preun gnat -if [ $1 = 0 ]; then +if [ $1 = 0 -a -f %{_infodir}/gnat_rm.info.gz ]; then /sbin/install-info --delete \ --info-dir=%{_infodir} %{_infodir}/gnat_rm.info.gz || : /sbin/install-info --delete \ @@ -1257,13 +1269,15 @@ fi %post -n libgcj /sbin/ldconfig -/sbin/install-info \ - --info-dir=%{_infodir} %{_infodir}/cp-tools.info.gz || : -/sbin/install-info \ - --info-dir=%{_infodir} %{_infodir}/fastjar.info.gz || : +if [ -f %{_infodir}/cp-tools.info.gz ]; then + /sbin/install-info \ + --info-dir=%{_infodir} %{_infodir}/cp-tools.info.gz || : + /sbin/install-info \ + --info-dir=%{_infodir} %{_infodir}/fastjar.info.gz || : +fi %preun -n libgcj -if [ $1 = 0 ]; then +if [ $1 = 0 -a -f %{_infodir}/cp-tools.info.gz ]; then /sbin/install-info --delete \ --info-dir=%{_infodir} %{_infodir}/cp-tools.info.gz || : /sbin/install-info --delete \ @@ -1282,11 +1296,13 @@ fi %post -n libgomp /sbin/ldconfig -/sbin/install-info \ - --info-dir=%{_infodir} %{_infodir}/libgomp.info.gz || : +if [ -f %{_infodir}/libgomp.info.gz ]; then + /sbin/install-info \ + --info-dir=%{_infodir} %{_infodir}/libgomp.info.gz || : +fi %preun -n libgomp -if [ $1 = 0 ]; then +if [ $1 = 0 -a -f %{_infodir}/libgomp.info.gz ]; then /sbin/install-info --delete \ --info-dir=%{_infodir} %{_infodir}/libgomp.info.gz || : fi @@ -1354,7 +1370,7 @@ fi %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/immintrin.h %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/avxintrin.h %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/x86intrin.h -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/mmintrin-common.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/fma4intrin.h %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/mm_malloc.h %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/mm3dnow.h %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/cpuid.h @@ -1821,6 +1837,16 @@ fi %doc rpm.doc/changelogs/libmudflap/ChangeLog* %changelog +* Thu Oct 1 2009 Jakub Jelinek 4.4.1-18 +- update from gcc-4_4-branch + - PRs ada/41100, target/22093 +- VTA backports + - PRs debug/41438, debug/41474, target/41279, testsuite/41444 +- fix VTA ICE on Linux kernel (#521991) +- AMD Orochi -mfma4 support +- don't run install-info if info files are missing because of --excludedocs + (#515921, #515960, #515962, #515965, #516000, #516008, #516014) + * Fri Sep 25 2009 Jakub Jelinek 4.4.1-17 - update from gcc-4_4-branch - fix vectorizer for power7 (#463846) diff --git a/gcc44-vta-rh521991.patch b/gcc44-vta-rh521991.patch new file mode 100644 index 0000000..c126ad1 --- /dev/null +++ b/gcc44-vta-rh521991.patch @@ -0,0 +1,181 @@ +2009-09-30 Alexandre Oliva + + * tree-dfa.c (referenced_var_p): New. + (remove_referenced_var): Clear renaming mark. + * tree-flow.h (referenced_var_p): Declare. + (sym_marked_for_renaming, clear_mark_for_renaming): Declare. + * tree-into-ssa.c (clear_mark_for_renaming): New. + (sym_marked_for_renaming): New. + * tree-ssa-operands.c (pop_stmt_changes): Reset debug stmts + that reference otherwise-unreferenced variables. + + * gcc.dg/debug/vta-1.c: New. + +--- gcc/tree-dfa.c.orig 2009-09-30 04:00:45.000000000 -0300 ++++ gcc/tree-dfa.c 2009-09-30 04:01:21.000000000 -0300 +@@ -639,6 +639,23 @@ set_default_def (tree var, tree def) + SSA_NAME_IS_DEFAULT_DEF (def) = true; + } + ++/* Return TRUE if VAR is in the set of referenced variables. */ ++ ++bool ++referenced_var_p (tree var) ++{ ++ struct tree_decl_minimal in; ++ ++ gcc_assert (DECL_P (var)); ++ ++ if (!gimple_referenced_vars (cfun)) ++ return false; ++ ++ in.uid = DECL_UID (var); ++ return htab_find_with_hash (gimple_referenced_vars (cfun), &in, in.uid) ++ != NULL; ++} ++ + /* Add VAR to the list of referenced variables if it isn't already there. */ + + bool +@@ -686,6 +703,15 @@ remove_referenced_var (tree var) + void **loc; + unsigned int uid = DECL_UID (var); + ++ /* Symbols that decayed from addressable to gimple registers, but ++ that are referenced only in debug stmts, may be marked for ++ renaming, but renaming them would fail once they're no longer ++ referenced. Let them rest in peace. */ ++ if (TREE_CODE (var) != SSA_NAME ++ && is_gimple_reg (var) ++ && sym_marked_for_renaming (var)) ++ clear_mark_for_renaming (var); ++ + clear_call_clobbered (var); + bitmap_clear_bit (gimple_call_used_vars (cfun), uid); + if ((v_ann = var_ann (var))) +--- gcc/tree-flow.h.orig 2009-09-30 04:00:46.000000000 -0300 ++++ gcc/tree-flow.h 2009-09-30 04:01:21.000000000 -0300 +@@ -773,6 +773,7 @@ extern void dump_referenced_vars (FILE * + extern void dump_variable (FILE *, tree); + extern void debug_variable (tree); + extern tree get_virtual_var (tree); ++extern bool referenced_var_p (tree); + extern bool add_referenced_var (tree); + extern void remove_referenced_var (tree); + extern void mark_symbols_for_renaming (gimple); +@@ -889,7 +890,9 @@ bool name_registered_for_update_p (tree) + bitmap ssa_names_to_replace (void); + void release_ssa_name_after_update_ssa (tree); + void compute_global_livein (bitmap, bitmap); ++bool sym_marked_for_renaming (tree); + void mark_sym_for_renaming (tree); ++void clear_mark_for_renaming (tree); + void mark_set_for_renaming (bitmap); + tree get_current_def (tree); + void set_current_def (tree, tree); +--- gcc/tree-into-ssa.c.orig 2009-09-30 04:00:45.000000000 -0300 ++++ gcc/tree-into-ssa.c 2009-09-30 04:01:21.000000000 -0300 +@@ -2874,6 +2874,37 @@ mark_sym_for_renaming (tree sym) + } + } + ++/* Unregister symbol SYM to be renamed by update_ssa. SYM must be a ++ gimple register. */ ++ ++void ++clear_mark_for_renaming (tree sym) ++{ ++ if (need_to_initialize_update_ssa_p) ++ return; ++ ++ gcc_assert (is_gimple_reg (sym)); ++ ++ bitmap_clear_bit (syms_to_rename, DECL_UID (sym)); ++ ++ if (bitmap_empty_p (syms_to_rename)) ++ BITMAP_FREE (syms_to_rename); ++} ++ ++/* Return true if a symbol is marked for renaming. This is an ++ exported interface for symbol_marked_for_renaming. */ ++ ++bool ++sym_marked_for_renaming (tree sym) ++{ ++ if (need_to_initialize_update_ssa_p) ++ return false; ++ ++ if (!syms_to_rename) ++ return false; ++ ++ return symbol_marked_for_renaming (sym); ++} + + /* Register all the symbols in SET to be renamed by update_ssa. */ + +--- gcc/tree-ssa-operands.c.orig 2009-09-30 04:00:45.000000000 -0300 ++++ gcc/tree-ssa-operands.c 2009-09-30 04:01:21.000000000 -0300 +@@ -2716,9 +2716,22 @@ pop_stmt_changes (gimple *stmt_p) + mark_difference_for_renaming (stores, buf->stores); + + /* Mark all the naked GIMPLE register operands for renaming. */ +- FOR_EACH_SSA_TREE_OPERAND (op, stmt, iter, SSA_OP_DEF|SSA_OP_USE) +- if (DECL_P (op)) +- mark_sym_for_renaming (op); ++ 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)) ++ { ++ gimple_debug_bind_reset_value (stmt); ++ update_stmt (stmt); ++ break; ++ } ++ } ++ else ++ { ++ FOR_EACH_SSA_TREE_OPERAND (op, stmt, iter, SSA_OP_DEF|SSA_OP_USE) ++ if (DECL_P (op)) ++ mark_sym_for_renaming (op); ++ } + + /* FIXME, need to add more finalizers here. Cleanup EH info, + recompute invariants for address expressions, add +--- gcc/testsuite/gcc.dg/debug/vta-1.c 1970-01-01 00:00:00.000000000 +0000 ++++ gcc/testsuite/gcc.dg/debug/vta-1.c 2009-09-30 04:01:21.000000000 -0300 +@@ -0,0 +1,35 @@ ++/* https://bugzilla.redhat.com/show_bug.cgi?id=521991#c5 ++ ++ Distilled from Linux XFS source code. foo, inlined into bar, ends ++ up with debug stmts referencing the addressable variable b. ++ Optimization made it non-addressable, and then completely optimized ++ away, before we got a chance to rename (and discard) the occurrence ++ in the debug stmt. When we did, we crashed, attempting to rename ++ an unreference variable. */ ++ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -g" } */ ++ ++static inline int ++foo (void *x, unsigned y) ++{ ++ unsigned z = *(unsigned long *) x % y; ++ *(unsigned long *) x = *(unsigned long *) x / y; ++ return z; ++} ++ ++struct S ++{ ++ unsigned t; ++}; ++ ++void ++bar (struct S *x, int *y) ++{ ++ int a = 0; ++ unsigned long b = x->t; ++ foo (&b, x->t); ++ for (;; a++) ++ if (b) ++ *y = 1; ++} diff --git a/sources b/sources index 8ee9c77..82ebc5e 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ 2659f09c2e43ef8b7d4406321753f1b2 fastjar-0.97.tar.gz -fe01be0d467f7de14e7e8e169e52cf72 gcc-4.4.1-20090925.tar.bz2 +18fe22db9e055b13b9cc290f6cbbf1fa gcc-4.4.1-20091001.tar.bz2