From 72541ade180e1bf97b797d5b9ac646e866b3ce12 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Sat, 1 Nov 2014 09:17:01 +0100
Subject: [PATCH] 4.9.2-1
---
.gitignore | 1 +
gcc.spec | 22 ++++--
gcc49-libstdc++-docs.patch | 4 +-
gcc49-pr63659.patch | 134 +++++++++++++++++++++++++++++++++++++
sources | 2 +-
5 files changed, 155 insertions(+), 8 deletions(-)
create mode 100644 gcc49-pr63659.patch
diff --git a/.gitignore b/.gitignore
index 23eafeb..d9c5c08 100644
--- a/.gitignore
+++ b/.gitignore
@@ -26,3 +26,4 @@
/gcc-4.9.1-20140930.tar.bz2
/gcc-4.9.1-20141017.tar.bz2
/gcc-4.9.1-20141024.tar.bz2
+/gcc-4.9.2-20141101.tar.bz2
diff --git a/gcc.spec b/gcc.spec
index ced5e7f..f39355e 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,9 +1,9 @@
-%global DATE 20141024
-%global SVNREV 216625
-%global gcc_version 4.9.1
+%global DATE 20141101
+%global SVNREV 216995
+%global gcc_version 4.9.2
# 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 13
+%global gcc_release 1
%global _unpackaged_files_terminate_build 0
%global _performance_build 1
%global multilib_64_archs sparc64 ppc64 ppc64p7 s390x x86_64
@@ -200,6 +200,7 @@ Patch15: gcc49-color-auto.patch
Patch16: gcc49-libgo-p224.patch
Patch17: gcc49-aarch64-async-unw-tables.patch
Patch18: gcc49-aarch64-unwind-opt.patch
+Patch19: gcc49-pr63659.patch
Patch1100: cloog-%{cloog_version}-ppc64le-config.patch
@@ -728,6 +729,7 @@ package or when debugging this package.
rm -f libgo/go/crypto/elliptic/p224{,_test}.go
%patch17 -p0 -b .aarch64-async-unw-tables~
%patch18 -p0 -b .aarch64-unwind-opt~
+%patch19 -p0 -b .pr63659~
%if 0%{?_enable_debug_packages}
cat > split-debuginfo.sh <<\EOF
@@ -778,7 +780,7 @@ chmod 755 split-debuginfo.sh
%patch1100 -p0 -b .cloog-ppc64le-config~
-sed -i -e 's/4\.9\.2/4.9.1/' gcc/BASE-VER
+sed -i -e 's/4\.9\.3/4.9.2/' gcc/BASE-VER
echo 'Red Hat %{version}-%{gcc_release}' > gcc/DEV-PHASE
%if 0%{?fedora} >= 16 || 0%{?rhel} >= 7
@@ -2052,6 +2054,9 @@ fi
%if %{build_libcilkrts}
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/cilk
%endif
+%if %{build_libasan}
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/sanitizer
+%endif
%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/collect2
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/crt*.o
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgcc.a
@@ -2800,6 +2805,13 @@ fi
%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/plugin
%changelog
+* Sat Nov 1 2014 Jakub Jelinek 4.9.2-1
+- update from the 4.9 branch
+ - GCC 4.9.2 release
+ - PRs sanitizer/63638, sanitizer/63697, tree-optimization/63530
+- handle REG_EQ* notes in REE (PR rtl-optimization/63659)
+- include asan/lsan sanitizer/ includes
+
* Fri Oct 24 2014 Jakub Jelinek 4.9.1-13
- update from the 4.9 branch
- PRs bootstrap/63632, libfortran/63589, libstdc++/63500,
diff --git a/gcc49-libstdc++-docs.patch b/gcc49-libstdc++-docs.patch
index 2c8c2b8..ee8598a 100644
--- a/gcc49-libstdc++-docs.patch
+++ b/gcc49-libstdc++-docs.patch
@@ -4,7 +4,7 @@
FSF
-+ Release 4.9.1
++ Release 4.9.2
+
Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation
@@ -18,7 +18,7 @@
- The API documentation, rendered into HTML, can be viewed online:
+ The API documentation, rendered into HTML, can be viewed here:
-+ for the 4.9.1 release, local
++ for the 4.9.2 release, local
+
+
for the 3.4 release
diff --git a/gcc49-pr63659.patch b/gcc49-pr63659.patch
new file mode 100644
index 0000000..b4762ab
--- /dev/null
+++ b/gcc49-pr63659.patch
@@ -0,0 +1,134 @@
+2014-10-31 Jakub Jelinek
+
+ PR rtl-optimization/63659
+ * ree.c (update_reg_equal_equiv_notes): New function.
+ (combine_set_extension, transform_ifelse): Use it.
+
+ * gcc.c-torture/execute/pr63659.c: New test.
+
+--- gcc/ree.c.jj 2014-10-22 15:52:18.000000000 +0200
++++ gcc/ree.c 2014-10-27 19:18:37.287412478 +0100
+@@ -266,6 +266,50 @@ typedef struct ext_cand
+
+ static int max_insn_uid;
+
++/* Update or remove REG_EQUAL or REG_EQUIV notes for INSN. */
++
++static bool
++update_reg_equal_equiv_notes (rtx_insn *insn, enum machine_mode new_mode,
++ enum machine_mode old_mode, enum rtx_code code)
++{
++ rtx *loc = ®_NOTES (insn);
++ while (*loc)
++ {
++ enum reg_note kind = REG_NOTE_KIND (*loc);
++ if (kind == REG_EQUAL || kind == REG_EQUIV)
++ {
++ rtx orig_src = XEXP (*loc, 0);
++ /* Update equivalency constants. Recall that RTL constants are
++ sign-extended. */
++ if (GET_CODE (orig_src) == CONST_INT
++ && HOST_BITS_PER_WIDE_INT >= GET_MODE_BITSIZE (new_mode))
++ {
++ if (INTVAL (orig_src) >= 0 || code == SIGN_EXTEND)
++ /* Nothing needed. */;
++ else
++ {
++ /* Zero-extend the negative constant by masking out the
++ bits outside the source mode. */
++ rtx new_const_int
++ = gen_int_mode (INTVAL (orig_src)
++ & GET_MODE_MASK (old_mode),
++ new_mode);
++ if (!validate_change (insn, &XEXP (*loc, 0),
++ new_const_int, true))
++ return false;
++ }
++ loc = &XEXP (*loc, 1);
++ }
++ /* Drop all other notes, they assume a wrong mode. */
++ else if (!validate_change (insn, loc, XEXP (*loc, 1), true))
++ return false;
++ }
++ else
++ loc = &XEXP (*loc, 1);
++ }
++ return true;
++}
++
+ /* Given a insn (CURR_INSN), an extension candidate for removal (CAND)
+ and a pointer to the SET rtx (ORIG_SET) that needs to be modified,
+ this code modifies the SET rtx to a new SET rtx that extends the
+@@ -287,6 +331,7 @@ static bool
+ combine_set_extension (ext_cand *cand, rtx_insn *curr_insn, rtx *orig_set)
+ {
+ rtx orig_src = SET_SRC (*orig_set);
++ enum machine_mode orig_mode = GET_MODE (SET_DEST (*orig_set));
+ rtx new_set;
+ rtx cand_pat = PATTERN (cand->insn);
+
+@@ -323,9 +368,8 @@ combine_set_extension (ext_cand *cand, r
+ {
+ /* Zero-extend the negative constant by masking out the bits outside
+ the source mode. */
+- enum machine_mode src_mode = GET_MODE (SET_DEST (*orig_set));
+ rtx new_const_int
+- = gen_int_mode (INTVAL (orig_src) & GET_MODE_MASK (src_mode),
++ = gen_int_mode (INTVAL (orig_src) & GET_MODE_MASK (orig_mode),
+ GET_MODE (new_reg));
+ new_set = gen_rtx_SET (VOIDmode, new_reg, new_const_int);
+ }
+@@ -364,7 +408,9 @@ combine_set_extension (ext_cand *cand, r
+
+ /* This change is a part of a group of changes. Hence,
+ validate_change will not try to commit the change. */
+- if (validate_change (curr_insn, orig_set, new_set, true))
++ if (validate_change (curr_insn, orig_set, new_set, true)
++ && update_reg_equal_equiv_notes (curr_insn, cand->mode, orig_mode,
++ cand->code))
+ {
+ if (dump_file)
+ {
+@@ -414,7 +460,9 @@ transform_ifelse (ext_cand *cand, rtx_in
+ ifexpr = gen_rtx_IF_THEN_ELSE (cand->mode, cond, map_srcreg, map_srcreg2);
+ new_set = gen_rtx_SET (VOIDmode, map_dstreg, ifexpr);
+
+- if (validate_change (def_insn, &PATTERN (def_insn), new_set, true))
++ if (validate_change (def_insn, &PATTERN (def_insn), new_set, true)
++ && update_reg_equal_equiv_notes (def_insn, cand->mode, GET_MODE (dstreg),
++ cand->code))
+ {
+ if (dump_file)
+ {
+--- gcc/testsuite/gcc.c-torture/execute/pr63659.c.jj 2014-10-27 19:26:57.720902738 +0100
++++ gcc/testsuite/gcc.c-torture/execute/pr63659.c 2014-10-27 19:26:36.000000000 +0100
+@@ -0,0 +1,29 @@
++/* PR rtl-optimization/63659 */
++
++int a, b, c, *d = &b, g, h, i;
++unsigned char e;
++char f;
++
++int
++main ()
++{
++ while (a)
++ {
++ for (a = 0; a; a++)
++ for (; c; c++)
++ ;
++ if (i)
++ break;
++ }
++
++ char j = c, k = -1, l;
++ l = g = j >> h;
++ f = l == 0 ? k : k % l;
++ e = 0 ? 0 : f;
++ *d = e;
++
++ if (b != 255)
++ __builtin_abort ();
++
++ return 0;
++}
diff --git a/sources b/sources
index 6c52d35..1ba3b76 100644
--- a/sources
+++ b/sources
@@ -1,3 +1,3 @@
e34fca0540d840e5d0f6427e98c92252 cloog-0.18.1.tar.gz
-715eda9680ef1144dec3b44b913f3b16 gcc-4.9.1-20141024.tar.bz2
+3b5578a7f9e33fb0b6321ab5283c4cbf gcc-4.9.2-20141101.tar.bz2
e039bfcfb6c2ab039b8ee69bf883e824 isl-0.12.2.tar.bz2