diff options
author | 2010-09-23 22:50:01 +0000 | |
---|---|---|
committer | 2010-09-23 22:50:01 +0000 | |
commit | e8688e7a390f18bdf54eb307233af219399d8e83 (patch) | |
tree | 08f9bd71118790d043c77d0e3b8af6b144652034 /4.4.3 | |
parent | Release 4.5.1 p1.1. (diff) | |
download | gcc-patches-e8688e7a390f18bdf54eb307233af219399d8e83.tar.gz gcc-patches-e8688e7a390f18bdf54eb307233af219399d8e83.tar.bz2 gcc-patches-e8688e7a390f18bdf54eb307233af219399d8e83.zip |
Backport 4.4.4 patches
Diffstat (limited to '4.4.3')
-rw-r--r-- | 4.4.3/gentoo/62_all_ia64-pr41551.patch | 21 | ||||
-rw-r--r-- | 4.4.3/gentoo/70_all_gcc44-pr45070-arm_-Os.patch | 184 | ||||
-rw-r--r-- | 4.4.3/gentoo/README.history | 4 |
3 files changed, 209 insertions, 0 deletions
diff --git a/4.4.3/gentoo/62_all_ia64-pr41551.patch b/4.4.3/gentoo/62_all_ia64-pr41551.patch new file mode 100644 index 0000000..40f99cd --- /dev/null +++ b/4.4.3/gentoo/62_all_ia64-pr41551.patch @@ -0,0 +1,21 @@ +[4.4 Regression] ia64: ICE: in instantiate_virtual_regs_in_insn, at function.c:1630 +http://gcc.gnu.org/PR41551 +https://bugs.gentoo.org/331825 + +--- branches/gcc-4_4-branch/gcc/function.c ++++ branches/gcc-4_4-branch/gcc/function.c +@@ -1601,7 +1601,13 @@ + if (!safe_insn_predicate (insn_code, i, x)) + { + start_sequence (); +- x = force_reg (insn_data[insn_code].operand[i].mode, x); ++ if (REG_P (x)) ++ { ++ gcc_assert (REGNO (x) <= LAST_VIRTUAL_REGISTER); ++ x = copy_to_reg (x); ++ } ++ else ++ x = force_reg (insn_data[insn_code].operand[i].mode, x); + seq = get_insns (); + end_sequence (); + if (seq) diff --git a/4.4.3/gentoo/70_all_gcc44-pr45070-arm_-Os.patch b/4.4.3/gentoo/70_all_gcc44-pr45070-arm_-Os.patch new file mode 100644 index 0000000..e0f2a16 --- /dev/null +++ b/4.4.3/gentoo/70_all_gcc44-pr45070-arm_-Os.patch @@ -0,0 +1,184 @@ +Miscompiled c++ class with packed attribute on ARM with -Os optimizations + +http://gcc.gnu.org/PR45070 +https://bugs.gentoo.org/331641 + +--- a/gcc/Makefile.in ++++ b/gcc/Makefile.in +@@ -2749,7 +2749,7 @@ tree-switch-conversion.o : tree-switch-conversion.c $(CONFIG_H) $(SYSTEM_H) \ + $(TREE_H) $(TM_P_H) $(TREE_FLOW_H) $(DIAGNOSTIC_H) $(TREE_INLINE_H) \ + $(TIMEVAR_H) $(TM_H) coretypes.h $(TREE_DUMP_H) $(GIMPLE_H) \ + tree-pass.h $(FLAGS_H) $(EXPR_H) $(BASIC_BLOCK_H) output.h \ +- $(GGC_H) $(OBSTACK_H) $(PARAMS_H) $(CPPLIB_H) $(PARAMS_H) ++ $(GGC_H) $(OBSTACK_H) $(PARAMS_H) $(CPPLIB_H) $(PARAMS_H) langhooks.h + tree-complex.o : tree-complex.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TREE_H) \ + $(TM_H) $(RTL_H) $(REAL_H) $(FLAGS_H) $(TREE_FLOW_H) $(GIMPLE_H) \ + tree-iterator.h tree-pass.h tree-ssa-propagate.h $(DIAGNOSTIC_H) +--- a/gcc/config/arm/arm.c ++++ b/gcc/config/arm/arm.c +@@ -12150,7 +12150,8 @@ arm_output_epilogue (rtx sibling) + && !crtl->tail_call_emit) + { + unsigned long mask; +- mask = (1 << (arm_size_return_regs() / 4)) - 1; ++ /* Preserve return values, of any size. */ ++ mask = (1 << ((arm_size_return_regs() + 3) / 4)) - 1; + mask ^= 0xf; + mask &= ~saved_regs_mask; + reg = 0; +--- a/gcc/config/arm/linux-atomic.c ++++ b/gcc/config/arm/linux-atomic.c +@@ -56,7 +56,7 @@ typedef void (__kernel_dmb_t) (void); + \ + do { \ + tmp = *ptr; \ +- failure = __kernel_cmpxchg (tmp, PFX_OP tmp INF_OP val, ptr); \ ++ failure = __kernel_cmpxchg (tmp, PFX_OP (tmp INF_OP val), ptr); \ + } while (failure != 0); \ + \ + return tmp; \ +@@ -88,8 +88,8 @@ FETCH_AND_OP_WORD (nand, ~, &) + \ + do { \ + oldval = *wordptr; \ +- newval = ((PFX_OP ((oldval & mask) >> shift) \ +- INF_OP (unsigned int) val) << shift) & mask; \ ++ newval = ((PFX_OP (((oldval & mask) >> shift) \ ++ INF_OP (unsigned int) val)) << shift) & mask; \ + newval |= oldval & ~mask; \ + failure = __kernel_cmpxchg (oldval, newval, wordptr); \ + } while (failure != 0); \ +@@ -97,19 +97,19 @@ FETCH_AND_OP_WORD (nand, ~, &) + return (RETURN & mask) >> shift; \ + } + +-SUBWORD_SYNC_OP (add, , +, short, 2, oldval) +-SUBWORD_SYNC_OP (sub, , -, short, 2, oldval) +-SUBWORD_SYNC_OP (or, , |, short, 2, oldval) +-SUBWORD_SYNC_OP (and, , &, short, 2, oldval) +-SUBWORD_SYNC_OP (xor, , ^, short, 2, oldval) +-SUBWORD_SYNC_OP (nand, ~, &, short, 2, oldval) ++SUBWORD_SYNC_OP (add, , +, unsigned short, 2, oldval) ++SUBWORD_SYNC_OP (sub, , -, unsigned short, 2, oldval) ++SUBWORD_SYNC_OP (or, , |, unsigned short, 2, oldval) ++SUBWORD_SYNC_OP (and, , &, unsigned short, 2, oldval) ++SUBWORD_SYNC_OP (xor, , ^, unsigned short, 2, oldval) ++SUBWORD_SYNC_OP (nand, ~, &, unsigned short, 2, oldval) + +-SUBWORD_SYNC_OP (add, , +, char, 1, oldval) +-SUBWORD_SYNC_OP (sub, , -, char, 1, oldval) +-SUBWORD_SYNC_OP (or, , |, char, 1, oldval) +-SUBWORD_SYNC_OP (and, , &, char, 1, oldval) +-SUBWORD_SYNC_OP (xor, , ^, char, 1, oldval) +-SUBWORD_SYNC_OP (nand, ~, &, char, 1, oldval) ++SUBWORD_SYNC_OP (add, , +, unsigned char, 1, oldval) ++SUBWORD_SYNC_OP (sub, , -, unsigned char, 1, oldval) ++SUBWORD_SYNC_OP (or, , |, unsigned char, 1, oldval) ++SUBWORD_SYNC_OP (and, , &, unsigned char, 1, oldval) ++SUBWORD_SYNC_OP (xor, , ^, unsigned char, 1, oldval) ++SUBWORD_SYNC_OP (nand, ~, &, unsigned char, 1, oldval) + + #define OP_AND_FETCH_WORD(OP, PFX_OP, INF_OP) \ + int HIDDEN \ +@@ -119,10 +119,10 @@ SUBWORD_SYNC_OP (nand, ~, &, char, 1, oldval) + \ + do { \ + tmp = *ptr; \ +- failure = __kernel_cmpxchg (tmp, PFX_OP tmp INF_OP val, ptr); \ ++ failure = __kernel_cmpxchg (tmp, PFX_OP (tmp INF_OP val), ptr); \ + } while (failure != 0); \ + \ +- return PFX_OP tmp INF_OP val; \ ++ return PFX_OP (tmp INF_OP val); \ + } + + OP_AND_FETCH_WORD (add, , +) +@@ -132,19 +132,19 @@ OP_AND_FETCH_WORD (and, , &) + OP_AND_FETCH_WORD (xor, , ^) + OP_AND_FETCH_WORD (nand, ~, &) + +-SUBWORD_SYNC_OP (add, , +, short, 2, newval) +-SUBWORD_SYNC_OP (sub, , -, short, 2, newval) +-SUBWORD_SYNC_OP (or, , |, short, 2, newval) +-SUBWORD_SYNC_OP (and, , &, short, 2, newval) +-SUBWORD_SYNC_OP (xor, , ^, short, 2, newval) +-SUBWORD_SYNC_OP (nand, ~, &, short, 2, newval) ++SUBWORD_SYNC_OP (add, , +, unsigned short, 2, newval) ++SUBWORD_SYNC_OP (sub, , -, unsigned short, 2, newval) ++SUBWORD_SYNC_OP (or, , |, unsigned short, 2, newval) ++SUBWORD_SYNC_OP (and, , &, unsigned short, 2, newval) ++SUBWORD_SYNC_OP (xor, , ^, unsigned short, 2, newval) ++SUBWORD_SYNC_OP (nand, ~, &, unsigned short, 2, newval) + +-SUBWORD_SYNC_OP (add, , +, char, 1, newval) +-SUBWORD_SYNC_OP (sub, , -, char, 1, newval) +-SUBWORD_SYNC_OP (or, , |, char, 1, newval) +-SUBWORD_SYNC_OP (and, , &, char, 1, newval) +-SUBWORD_SYNC_OP (xor, , ^, char, 1, newval) +-SUBWORD_SYNC_OP (nand, ~, &, char, 1, newval) ++SUBWORD_SYNC_OP (add, , +, unsigned char, 1, newval) ++SUBWORD_SYNC_OP (sub, , -, unsigned char, 1, newval) ++SUBWORD_SYNC_OP (or, , |, unsigned char, 1, newval) ++SUBWORD_SYNC_OP (and, , &, unsigned char, 1, newval) ++SUBWORD_SYNC_OP (xor, , ^, unsigned char, 1, newval) ++SUBWORD_SYNC_OP (nand, ~, &, unsigned char, 1, newval) + + int HIDDEN + __sync_val_compare_and_swap_4 (int *ptr, int oldval, int newval) +@@ -194,8 +194,8 @@ __sync_val_compare_and_swap_4 (int *ptr, int oldval, int newval) + } \ + } + +-SUBWORD_VAL_CAS (short, 2) +-SUBWORD_VAL_CAS (char, 1) ++SUBWORD_VAL_CAS (unsigned short, 2) ++SUBWORD_VAL_CAS (unsigned char, 1) + + typedef unsigned char bool; + +@@ -216,8 +216,8 @@ __sync_bool_compare_and_swap_4 (int *ptr, int oldval, int newval) + return (oldval == actual_oldval); \ + } + +-SUBWORD_BOOL_CAS (short, 2) +-SUBWORD_BOOL_CAS (char, 1) ++SUBWORD_BOOL_CAS (unsigned short, 2) ++SUBWORD_BOOL_CAS (unsigned char, 1) + + void HIDDEN + __sync_synchronize (void) +@@ -259,8 +259,8 @@ __sync_lock_test_and_set_4 (int *ptr, int val) + return (oldval & mask) >> shift; \ + } + +-SUBWORD_TEST_AND_SET (short, 2) +-SUBWORD_TEST_AND_SET (char, 1) ++SUBWORD_TEST_AND_SET (unsigned short, 2) ++SUBWORD_TEST_AND_SET (unsigned char, 1) + + #define SYNC_LOCK_RELEASE(TYPE, WIDTH) \ + void HIDDEN \ +--- a/gcc/tree-switch-conversion.c ++++ b/gcc/tree-switch-conversion.c +@@ -96,6 +96,7 @@ eight) times the number of the actual switch branches. */ + #include "diagnostic.h" + #include "tree-dump.h" + #include "timevar.h" ++#include "langhooks.h" + + /* The main structure of the pass. */ + struct switch_conv_info +@@ -658,9 +659,11 @@ gen_inbound_check (gimple swtch) + + /* Make sure we do not generate arithmetics in a subrange. */ + if (TREE_TYPE (TREE_TYPE (info.index_expr))) +- utype = unsigned_type_for (TREE_TYPE (TREE_TYPE (info.index_expr))); ++ utype = lang_hooks.types.type_for_mode ++ (TYPE_MODE (TREE_TYPE (TREE_TYPE (info.index_expr))), 1); + else +- utype = unsigned_type_for (TREE_TYPE (info.index_expr)); ++ utype = lang_hooks.types.type_for_mode ++ (TYPE_MODE (TREE_TYPE (info.index_expr)), 1); + + /* (end of) block 0 */ + gsi = gsi_for_stmt (info.arr_ref_first); diff --git a/4.4.3/gentoo/README.history b/4.4.3/gentoo/README.history index 38689ed..c44852b 100644 --- a/4.4.3/gentoo/README.history +++ b/4.4.3/gentoo/README.history @@ -1,3 +1,7 @@ +1.4 + 23.09.2010 + + 62_all_ia64-pr41551.patch + + 70_all_gcc44-pr45070-arm_-Os.patch 1.3 01.08.2010 + 94_all_sh-pr42481.patch + 95_all_sh-pr43744.patch |