summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordoko <doko@6ca36cf4-e1d1-0310-8c6f-e303bb2178ca>2014-07-01 09:23:49 +0000
committerdoko <doko@6ca36cf4-e1d1-0310-8c6f-e303bb2178ca>2014-07-01 09:23:49 +0000
commita02ed62ac9f8bd81bf60ff0064ec5b2319beaf3f (patch)
tree9bc9d10666764a0f8eb63f64561e59314ddc9f85
parent887fb7b727be8118c79700f1280b4a3628eea426 (diff)
downloadgcc-48-a02ed62ac9f8bd81bf60ff0064ec5b2319beaf3f.tar.gz
* Update to SVN 20140701 (r212193) from the gcc-4_8-branch.
git-svn-id: svn://svn.debian.org/svn/gcccvs/branches/sid/gcc-4.8@7489 6ca36cf4-e1d1-0310-8c6f-e303bb2178ca
-rw-r--r--debian/changelog4
-rw-r--r--debian/patches/svn-updates.diff595
2 files changed, 590 insertions, 9 deletions
diff --git a/debian/changelog b/debian/changelog
index 2ccab49..88cdb9b 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,8 +1,8 @@
gcc-4.8 (4.8.3-5) UNRELEASED; urgency=medium
- * Update to SVN 20140626 (r212051) from the gcc-4_8-branch.
+ * Update to SVN 20140701 (r212193) from the gcc-4_8-branch.
- -- Matthias Klose <doko@debian.org> Thu, 26 Jun 2014 21:26:54 +0200
+ -- Matthias Klose <doko@debian.org> Tue, 01 Jul 2014 11:21:36 +0200
gcc-4.8 (4.8.3-4) unstable; urgency=medium
diff --git a/debian/patches/svn-updates.diff b/debian/patches/svn-updates.diff
index 797f4ab..9c95d00 100644
--- a/debian/patches/svn-updates.diff
+++ b/debian/patches/svn-updates.diff
@@ -1,10 +1,10 @@
-# DP: updates from the 4.8 branch upto 20140626 (r212051).
+# DP: updates from the 4.8 branch upto 20140701 (r212193).
last_updated()
{
cat > ${dir}LAST_UPDATED <<EOF
-Thu Jun 26 21:21:56 CEST 2014
-Thu Jun 26 19:21:56 UTC 2014 (revision 212051)
+Tue Jul 1 11:02:40 CEST 2014
+Tue Jul 1 09:02:40 UTC 2014 (revision 212193)
EOF
}
@@ -284,7 +284,7 @@ Index: gcc/DATESTAMP
+++ b/src/gcc/DATESTAMP (.../branches/gcc-4_8-branch)
@@ -1 +1 @@
-20140522
-+20140626
++20140701
Index: gcc/ipa-cp.c
===================================================================
--- a/src/gcc/ipa-cp.c (.../tags/gcc_4_8_3_release)
@@ -302,7 +302,32 @@ Index: gcc/ChangeLog
===================================================================
--- a/src/gcc/ChangeLog (.../tags/gcc_4_8_3_release)
+++ b/src/gcc/ChangeLog (.../branches/gcc-4_8-branch)
-@@ -1,3 +1,230 @@
+@@ -1,3 +1,255 @@
++2014-06-30 Thomas Preud'homme <thomas.preudhomme@arm.com>
++
++ Backport from Mainline
++ 2014-06-20 Jakub Jelinek <jakub@redhat.com>
++ 2014-06-11 Thomas Preud'homme <thomas.preudhomme@arm.com>
++
++ PR tree-optimization/61306
++ * tree-ssa-math-opts.c (struct symbolic_number): Store type of
++ expression instead of its size.
++ (do_shift_rotate): Adapt to change in struct symbolic_number. Return
++ false to prevent optimization when the result is unpredictable due to
++ arithmetic right shift of signed type with highest byte is set.
++ (verify_symbolic_number_p): Adapt to change in struct symbolic_number.
++ (find_bswap_1): Likewise. Return NULL to prevent optimization when the
++ result is unpredictable due to sign extension.
++ (find_bswap): Adapt to change in struct symbolic_number.
++
++2014-06-27 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2014-06-26 Uros Bizjak <ubizjak@gmail.com>
++
++ PR target/61586
++ * config/alpha/alpha.c (alpha_handle_trap_shadows): Handle BARRIER RTX.
++
+2014-06-26 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ PR target/61542
@@ -576,6 +601,21 @@ Index: gcc/testsuite/gcc.target/powerpc/htm-ttest.c
+{
+ return _HTM_STATE(__builtin_ttest());
+}
+Index: gcc/testsuite/gcc.target/alpha/pr61586.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/alpha/pr61586.c (.../tags/gcc_4_8_3_release)
++++ b/src/gcc/testsuite/gcc.target/alpha/pr61586.c (.../branches/gcc-4_8-branch)
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 -mieee" } */
++
++void foo (int *dimensions, double **params, int hh)
++{
++ if (params[hh])
++ ;
++ else if (dimensions[hh] > 0)
++ params[hh][0] = 1.0f;
++}
Index: gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-14.c
===================================================================
--- a/src/gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-14.c (.../tags/gcc_4_8_3_release)
@@ -1021,6 +1061,127 @@ Index: gcc/testsuite/gfortran.dg/cray_pointers_10.f90
+ a = 42
+ if (z /= 42) call abort
+end program test
+Index: gcc/testsuite/gfortran.dg/nint_2.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/nint_2.f90 (.../tags/gcc_4_8_3_release)
++++ b/src/gcc/testsuite/gfortran.dg/nint_2.f90 (.../branches/gcc-4_8-branch)
+@@ -4,7 +4,8 @@
+ ! http://gcc.gnu.org/ml/fortran/2005-04/msg00139.html
+ !
+ ! { dg-do run }
+-! { dg-xfail-run-if "PR 33271, math library bug" { powerpc-ibm-aix powerpc*-*-linux* *-*-mingw* } { "-O0" } { "" } }
++! { dg-xfail-run-if "PR 33271, math library bug" { powerpc-ibm-aix powerpc-*-linux* powerpc64-*-linux* *-*-mingw* } { "-O0" } { "" } }
++! Note that this doesn't fail on powerpc64le-*-linux*.
+ real(kind=8) :: a
+ integer(kind=8) :: i1, i2
+ real :: b
+Index: gcc/testsuite/gcc.c-torture/execute/pr61306-1.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.c-torture/execute/pr61306-1.c (.../tags/gcc_4_8_3_release)
++++ b/src/gcc/testsuite/gcc.c-torture/execute/pr61306-1.c (.../branches/gcc-4_8-branch)
+@@ -0,0 +1,39 @@
++#ifdef __INT32_TYPE__
++typedef __INT32_TYPE__ int32_t;
++#else
++typedef int int32_t;
++#endif
++
++#ifdef __UINT32_TYPE__
++typedef __UINT32_TYPE__ uint32_t;
++#else
++typedef unsigned uint32_t;
++#endif
++
++#define __fake_const_swab32(x) ((uint32_t)( \
++ (((uint32_t)(x) & (uint32_t)0x000000ffUL) << 24) | \
++ (((uint32_t)(x) & (uint32_t)0x0000ff00UL) << 8) | \
++ (((uint32_t)(x) & (uint32_t)0x00ff0000UL) >> 8) | \
++ (( (int32_t)(x) & (int32_t)0xff000000UL) >> 24)))
++
++/* Previous version of bswap optimization failed to consider sign extension
++ and as a result would replace an expression *not* doing a bswap by a
++ bswap. */
++
++__attribute__ ((noinline, noclone)) uint32_t
++fake_bswap32 (uint32_t in)
++{
++ return __fake_const_swab32 (in);
++}
++
++int
++main(void)
++{
++ if (sizeof (int32_t) * __CHAR_BIT__ != 32)
++ return 0;
++ if (sizeof (uint32_t) * __CHAR_BIT__ != 32)
++ return 0;
++ if (fake_bswap32 (0x87654321) != 0xffffff87)
++ __builtin_abort ();
++ return 0;
++}
+Index: gcc/testsuite/gcc.c-torture/execute/pr61306-3.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.c-torture/execute/pr61306-3.c (.../tags/gcc_4_8_3_release)
++++ b/src/gcc/testsuite/gcc.c-torture/execute/pr61306-3.c (.../branches/gcc-4_8-branch)
+@@ -0,0 +1,13 @@
++short a = -1;
++int b;
++char c;
++
++int
++main ()
++{
++ c = a;
++ b = a | c;
++ if (b != -1)
++ __builtin_abort ();
++ return 0;
++}
+Index: gcc/testsuite/gcc.c-torture/execute/pr61306-2.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.c-torture/execute/pr61306-2.c (.../tags/gcc_4_8_3_release)
++++ b/src/gcc/testsuite/gcc.c-torture/execute/pr61306-2.c (.../branches/gcc-4_8-branch)
+@@ -0,0 +1,40 @@
++#ifdef __INT16_TYPE__
++typedef __INT16_TYPE__ int16_t;
++#else
++typedef short int16_t;
++#endif
++
++#ifdef __UINT32_TYPE__
++typedef __UINT32_TYPE__ uint32_t;
++#else
++typedef unsigned uint32_t;
++#endif
++
++#define __fake_const_swab32(x) ((uint32_t)( \
++ (((uint32_t) (x) & (uint32_t)0x000000ffUL) << 24) | \
++ (((uint32_t)(int16_t)(x) & (uint32_t)0x00ffff00UL) << 8) | \
++ (((uint32_t) (x) & (uint32_t)0x00ff0000UL) >> 8) | \
++ (((uint32_t) (x) & (uint32_t)0xff000000UL) >> 24)))
++
++
++/* Previous version of bswap optimization failed to consider sign extension
++ and as a result would replace an expression *not* doing a bswap by a
++ bswap. */
++
++__attribute__ ((noinline, noclone)) uint32_t
++fake_bswap32 (uint32_t in)
++{
++ return __fake_const_swab32 (in);
++}
++
++int
++main(void)
++{
++ if (sizeof (uint32_t) * __CHAR_BIT__ != 32)
++ return 0;
++ if (sizeof (int16_t) * __CHAR_BIT__ != 16)
++ return 0;
++ if (fake_bswap32 (0x81828384) != 0xff838281)
++ __builtin_abort ();
++ return 0;
++}
Index: gcc/testsuite/gnat.dg/overflow_fixed.adb
===================================================================
--- a/src/gcc/testsuite/gnat.dg/overflow_fixed.adb (.../tags/gcc_4_8_3_release)
@@ -1123,7 +1284,29 @@ Index: gcc/testsuite/ChangeLog
===================================================================
--- a/src/gcc/testsuite/ChangeLog (.../tags/gcc_4_8_3_release)
+++ b/src/gcc/testsuite/ChangeLog (.../branches/gcc-4_8-branch)
-@@ -1,3 +1,95 @@
+@@ -1,3 +1,117 @@
++2014-06-30 Thomas Preud'homme <thomas.preudhomme@arm.com>
++
++ Backport from mainline
++ 2014-06-11 Thomas Preud'homme <thomas.preudhomme@arm.com>
++
++ PR tree-optimization/61306
++ * gcc.c-torture/execute/pr61306-1.c: New test.
++ * gcc.c-torture/execute/pr61306-2.c: Likewise.
++ * gcc.c-torture/execute/pr61306-3.c: Likewise.
++
++2014-06-27 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
++
++ * gfortran.dg/nint_2.f90: Don't XFAIL for powerpc64le-*-linux*.
++
++2014-06-27 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2014-06-26 Uros Bizjak <ubizjak@gmail.com>
++
++ PR target/61586
++ * gcc.target/alpha/pr61586.c: New test.
++
+2014-06-25 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * gfortran.dg/default_format_denormal_2.f90: Remove xfail for
@@ -1248,6 +1431,60 @@ Index: gcc/testsuite/g++.dg/cpp0x/variadic158.C
+{
+ CreateMetric<int, const char*>("abcd", "def", Base());
+}
+Index: gcc/testsuite/g++.dg/cpp0x/variadic160.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/cpp0x/variadic160.C (.../tags/gcc_4_8_3_release)
++++ b/src/gcc/testsuite/g++.dg/cpp0x/variadic160.C (.../branches/gcc-4_8-branch)
+@@ -0,0 +1,49 @@
++// PR c++/61539
++// { dg-do compile { target c++11 } }
++
++template <typename _CharT> class A;
++template <typename> class B;
++template <class charT> class C;
++template <> class C<char>
++{
++ virtual void xparse (int &, const B<A<char> > &) const;
++};
++template <class T, class charT = char> class G : C<charT>
++{
++public:
++ G (void *) {}
++ void default_value (const T &);
++ void xparse (int &, const B<A<charT> > &) const;
++};
++template <class T, class charT>
++void validate (int &, const B<A<charT> > &, T *, int);
++template <class T, class charT>
++void G<T, charT>::xparse (int &p1, const B<A<charT> > &p2) const
++{
++ validate (p1, p2, (T *)0, 0);
++}
++template <class T> G<T> *value (T *) { return new G<T>(0); }
++namespace Eigen
++{
++template <typename T> struct D;
++template <typename, int, int, int = 0, int = 0, int = 0 > class F;
++template <typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows,
++ int _MaxCols>
++struct D<F<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> >
++{
++ typedef _Scalar Scalar;
++};
++template <typename, int, int, int, int, int _MaxCols> class F
++{
++public:
++ typedef typename Eigen::D<F>::Scalar Scalar;
++ F (const Scalar &, const Scalar &, const Scalar &);
++};
++template <class... T>
++void validate (int &, const B<A<char> > &, Eigen::F<T...> *);
++}
++int main (int, char *[])
++{
++ Eigen::F<double, 3, 1> a (0, 0, 0);
++ value (&a)->default_value (Eigen::F<double, 3, 1>(0, 0, 0));
++}
Index: gcc/testsuite/g++.dg/template/local-fn1.C
===================================================================
--- a/src/gcc/testsuite/g++.dg/template/local-fn1.C (.../tags/gcc_4_8_3_release)
@@ -1261,11 +1498,106 @@ Index: gcc/testsuite/g++.dg/template/local-fn1.C
+ void bug();
+ }
+};
+Index: gcc/testsuite/g++.dg/template/conv14.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/template/conv14.C (.../tags/gcc_4_8_3_release)
++++ b/src/gcc/testsuite/g++.dg/template/conv14.C (.../branches/gcc-4_8-branch)
+@@ -0,0 +1,30 @@
++// PR c++/61647
++
++class XX;
++
++template<typename Container, typename Key>
++struct Accessor;
++
++template<typename Container, typename Key, typename KeyStore = Key>
++class Variant {
++protected:
++ KeyStore index;
++ Container state;
++public:
++ Variant(Container st, const Key& i) : index(i), state(st) {}
++
++ template<typename T>
++ operator T() const {
++ return Accessor<Container, KeyStore>::template get<T>(state, index);
++ }
++};
++
++class AutoCleanVariant : public Variant<XX*, int> {
++public:
++ AutoCleanVariant(XX* st, int i) : Variant<XX*,int>(st,i) {}
++
++ template<typename T>
++ operator T() const {
++ return Variant<XX*, int>::operator T();
++ }
++};
+Index: gcc/testsuite/g++.dg/template/ptrmem27.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/template/ptrmem27.C (.../tags/gcc_4_8_3_release)
++++ b/src/gcc/testsuite/g++.dg/template/ptrmem27.C (.../branches/gcc-4_8-branch)
+@@ -0,0 +1,22 @@
++// PR c++/61500
++
++struct X {
++ int i;
++ int j;
++
++ int foo(int X::* ptr);
++
++ template <int X::* ptr>
++ int bar();
++};
++
++int X::foo(int X::* ptr) {
++ int* p = &(this->*ptr); // OK.
++ return *p;
++}
++
++template <int X::* ptr>
++int X::bar() {
++ int* p = &(this->*ptr); // gcc 4.9.0: OK in C++98 mode, fails in C++11 mode.
++ return *p;
++}
+Index: gcc/cp/tree.c
+===================================================================
+--- a/src/gcc/cp/tree.c (.../tags/gcc_4_8_3_release)
++++ b/src/gcc/cp/tree.c (.../branches/gcc-4_8-branch)
+@@ -97,6 +97,16 @@
+ case IMAGPART_EXPR:
+ return lvalue_kind (TREE_OPERAND (ref, 0));
+
++ case MEMBER_REF:
++ case DOTSTAR_EXPR:
++ if (TREE_CODE (ref) == MEMBER_REF)
++ op1_lvalue_kind = clk_ordinary;
++ else
++ op1_lvalue_kind = lvalue_kind (TREE_OPERAND (ref, 0));
++ if (TYPE_PTRMEMFUNC_P (TREE_TYPE (TREE_OPERAND (ref, 1))))
++ op1_lvalue_kind = clk_none;
++ return op1_lvalue_kind;
++
+ case COMPONENT_REF:
+ op1_lvalue_kind = lvalue_kind (TREE_OPERAND (ref, 0));
+ /* Look at the member designator. */
Index: gcc/cp/ChangeLog
===================================================================
--- a/src/gcc/cp/ChangeLog (.../tags/gcc_4_8_3_release)
+++ b/src/gcc/cp/ChangeLog (.../branches/gcc-4_8-branch)
-@@ -1,3 +1,13 @@
+@@ -1,3 +1,25 @@
++2014-06-30 Jason Merrill <jason@redhat.com>
++
++ PR c++/61647
++ * pt.c (type_dependent_expression_p): Check BASELINK_OPTYPE.
++
++ PR c++/61539
++ * pt.c (unify_one_argument): Type/expression mismatch just causes
++ deduction failure.
++
++ PR c++/61500
++ * tree.c (lvalue_kind): Handle MEMBER_REF and DOTSTAR_EXPR.
++
+2014-06-17 Jason Merrill <jason@redhat.com>
+
+ PR c++/60605
@@ -1302,6 +1634,32 @@ Index: gcc/cp/pt.c
{
/* The template parameter pack is used in a function parameter
pack. If this is the end of the parameter list, the
+@@ -15502,8 +15503,9 @@
+ maybe_adjust_types_for_deduction (strict, &parm, &arg, arg_expr);
+ }
+ else
+- gcc_assert ((TYPE_P (parm) || TREE_CODE (parm) == TEMPLATE_DECL)
+- == (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL));
++ if ((TYPE_P (parm) || TREE_CODE (parm) == TEMPLATE_DECL)
++ != (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL))
++ return unify_template_argument_mismatch (explain_p, parm, arg);
+
+ /* For deduction from an init-list we need the actual list. */
+ if (arg_expr && BRACE_ENCLOSED_INITIALIZER_P (arg_expr))
+@@ -20009,7 +20011,12 @@
+ return true;
+
+ if (BASELINK_P (expression))
+- expression = BASELINK_FUNCTIONS (expression);
++ {
++ if (BASELINK_OPTYPE (expression)
++ && dependent_type_p (BASELINK_OPTYPE (expression)))
++ return true;
++ expression = BASELINK_FUNCTIONS (expression);
++ }
+
+ if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
+ {
Index: gcc/double-int.c
===================================================================
--- a/src/gcc/double-int.c (.../tags/gcc_4_8_3_release)
@@ -1315,6 +1673,205 @@ Index: gcc/double-int.c
/* quo = quo - 1; */
add_double (*lquo, *hquo,
(HOST_WIDE_INT) -1, (HOST_WIDE_INT) -1, lquo, hquo);
+Index: gcc/tree-ssa-math-opts.c
+===================================================================
+--- a/src/gcc/tree-ssa-math-opts.c (.../tags/gcc_4_8_3_release)
++++ b/src/gcc/tree-ssa-math-opts.c (.../branches/gcc-4_8-branch)
+@@ -1537,7 +1537,7 @@
+
+ struct symbolic_number {
+ unsigned HOST_WIDEST_INT n;
+- int size;
++ tree type;
+ };
+
+ /* Perform a SHIFT or ROTATE operation by COUNT bits on symbolic
+@@ -1549,13 +1549,15 @@
+ struct symbolic_number *n,
+ int count)
+ {
++ int bitsize = TYPE_PRECISION (n->type);
++
+ if (count % 8 != 0)
+ return false;
+
+ /* Zero out the extra bits of N in order to avoid them being shifted
+ into the significant bits. */
+- if (n->size < (int)sizeof (HOST_WIDEST_INT))
+- n->n &= ((unsigned HOST_WIDEST_INT)1 << (n->size * BITS_PER_UNIT)) - 1;
++ if (bitsize < 8 * (int)sizeof (HOST_WIDEST_INT))
++ n->n &= ((unsigned HOST_WIDEST_INT)1 << bitsize) - 1;
+
+ switch (code)
+ {
+@@ -1563,20 +1565,24 @@
+ n->n <<= count;
+ break;
+ case RSHIFT_EXPR:
++ /* Arithmetic shift of signed type: result is dependent on the value. */
++ if (!TYPE_UNSIGNED (n->type)
++ && (n->n & ((unsigned HOST_WIDEST_INT) 0xff << (bitsize - 8))))
++ return false;
+ n->n >>= count;
+ break;
+ case LROTATE_EXPR:
+- n->n = (n->n << count) | (n->n >> ((n->size * BITS_PER_UNIT) - count));
++ n->n = (n->n << count) | (n->n >> (bitsize - count));
+ break;
+ case RROTATE_EXPR:
+- n->n = (n->n >> count) | (n->n << ((n->size * BITS_PER_UNIT) - count));
++ n->n = (n->n >> count) | (n->n << (bitsize - count));
+ break;
+ default:
+ return false;
+ }
+ /* Zero unused bits for size. */
+- if (n->size < (int)sizeof (HOST_WIDEST_INT))
+- n->n &= ((unsigned HOST_WIDEST_INT)1 << (n->size * BITS_PER_UNIT)) - 1;
++ if (bitsize < 8 * (int)sizeof (HOST_WIDEST_INT))
++ n->n &= ((unsigned HOST_WIDEST_INT)1 << bitsize) - 1;
+ return true;
+ }
+
+@@ -1593,7 +1599,7 @@
+ if (TREE_CODE (lhs_type) != INTEGER_TYPE)
+ return false;
+
+- if (TYPE_PRECISION (lhs_type) != n->size * BITS_PER_UNIT)
++ if (TYPE_PRECISION (lhs_type) != TYPE_PRECISION (n->type))
+ return false;
+
+ return true;
+@@ -1650,20 +1656,23 @@
+ to initialize the symbolic number. */
+ if (!source_expr1)
+ {
++ int size;
++
+ /* Set up the symbolic number N by setting each byte to a
+ value between 1 and the byte size of rhs1. The highest
+ order byte is set to n->size and the lowest order
+ byte to 1. */
+- n->size = TYPE_PRECISION (TREE_TYPE (rhs1));
+- if (n->size % BITS_PER_UNIT != 0)
++ n->type = TREE_TYPE (rhs1);
++ size = TYPE_PRECISION (n->type);
++ if (size % BITS_PER_UNIT != 0)
+ return NULL_TREE;
+- n->size /= BITS_PER_UNIT;
++ size /= BITS_PER_UNIT;
+ n->n = (sizeof (HOST_WIDEST_INT) < 8 ? 0 :
+ (unsigned HOST_WIDEST_INT)0x08070605 << 32 | 0x04030201);
+
+- if (n->size < (int)sizeof (HOST_WIDEST_INT))
++ if (size < (int)sizeof (HOST_WIDEST_INT))
+ n->n &= ((unsigned HOST_WIDEST_INT)1 <<
+- (n->size * BITS_PER_UNIT)) - 1;
++ (size * BITS_PER_UNIT)) - 1;
+
+ source_expr1 = rhs1;
+ }
+@@ -1672,12 +1681,12 @@
+ {
+ case BIT_AND_EXPR:
+ {
+- int i;
++ int i, size = TYPE_PRECISION (n->type) / BITS_PER_UNIT;
+ unsigned HOST_WIDEST_INT val = widest_int_cst_value (rhs2);
+ unsigned HOST_WIDEST_INT tmp = val;
+
+ /* Only constants masking full bytes are allowed. */
+- for (i = 0; i < n->size; i++, tmp >>= BITS_PER_UNIT)
++ for (i = 0; i < size; i++, tmp >>= BITS_PER_UNIT)
+ if ((tmp & 0xff) != 0 && (tmp & 0xff) != 0xff)
+ return NULL_TREE;
+
+@@ -1693,12 +1702,22 @@
+ break;
+ CASE_CONVERT:
+ {
+- int type_size;
++ int type_size, old_type_size;
++ tree type;
+
+- type_size = TYPE_PRECISION (gimple_expr_type (stmt));
++ type = gimple_expr_type (stmt);
++ type_size = TYPE_PRECISION (type);
+ if (type_size % BITS_PER_UNIT != 0)
+ return NULL_TREE;
+
++ /* Sign extension: result is dependent on the value. */
++ old_type_size = TYPE_PRECISION (n->type);
++ if (!TYPE_UNSIGNED (n->type)
++ && type_size > old_type_size
++ && n->n &
++ ((unsigned HOST_WIDEST_INT) 0xff << (old_type_size - 8)))
++ return NULL_TREE;
++
+ if (type_size / BITS_PER_UNIT < (int)(sizeof (HOST_WIDEST_INT)))
+ {
+ /* If STMT casts to a smaller type mask out the bits not
+@@ -1705,7 +1724,7 @@
+ belonging to the target type. */
+ n->n &= ((unsigned HOST_WIDEST_INT)1 << type_size) - 1;
+ }
+- n->size = type_size / BITS_PER_UNIT;
++ n->type = type;
+ }
+ break;
+ default:
+@@ -1718,7 +1737,7 @@
+
+ if (rhs_class == GIMPLE_BINARY_RHS)
+ {
+- int i;
++ int i, size;
+ struct symbolic_number n1, n2;
+ unsigned HOST_WIDEST_INT mask;
+ tree source_expr2;
+@@ -1742,11 +1761,12 @@
+ source_expr2 = find_bswap_1 (rhs2_stmt, &n2, limit - 1);
+
+ if (source_expr1 != source_expr2
+- || n1.size != n2.size)
++ || TYPE_PRECISION (n1.type) != TYPE_PRECISION (n2.type))
+ return NULL_TREE;
+
+- n->size = n1.size;
+- for (i = 0, mask = 0xff; i < n->size; i++, mask <<= BITS_PER_UNIT)
++ n->type = n1.type;
++ size = TYPE_PRECISION (n->type) / BITS_PER_UNIT;
++ for (i = 0, mask = 0xff; i < size; i++, mask <<= BITS_PER_UNIT)
+ {
+ unsigned HOST_WIDEST_INT masked1, masked2;
+
+@@ -1785,7 +1805,7 @@
+
+ struct symbolic_number n;
+ tree source_expr;
+- int limit;
++ int limit, bitsize;
+
+ /* The last parameter determines the depth search limit. It usually
+ correlates directly to the number of bytes to be touched. We
+@@ -1800,13 +1820,14 @@
+ return NULL_TREE;
+
+ /* Zero out the extra bits of N and CMP. */
+- if (n.size < (int)sizeof (HOST_WIDEST_INT))
++ bitsize = TYPE_PRECISION (n.type);
++ if (bitsize < 8 * (int)sizeof (HOST_WIDEST_INT))
+ {
+ unsigned HOST_WIDEST_INT mask =
+- ((unsigned HOST_WIDEST_INT)1 << (n.size * BITS_PER_UNIT)) - 1;
++ ((unsigned HOST_WIDEST_INT)1 << bitsize) - 1;
+
+ n.n &= mask;
+- cmp >>= (sizeof (HOST_WIDEST_INT) - n.size) * BITS_PER_UNIT;
++ cmp >>= sizeof (HOST_WIDEST_INT) * BITS_PER_UNIT - bitsize;
+ }
+
+ /* A complete byte swap should make the symbolic number to start
Index: gcc/tree-ssa-ifcombine.c
===================================================================
--- a/src/gcc/tree-ssa-ifcombine.c (.../tags/gcc_4_8_3_release)
@@ -1586,6 +2143,30 @@ Index: gcc/common.opt
floop-flatten
Common Ignore
Does nothing. Preserved for backward compatibility.
+Index: gcc/config/alpha/alpha.c
+===================================================================
+--- a/src/gcc/config/alpha/alpha.c (.../tags/gcc_4_8_3_release)
++++ b/src/gcc/config/alpha/alpha.c (.../branches/gcc-4_8-branch)
+@@ -8658,6 +8658,11 @@
+ }
+ break;
+
++ case BARRIER:
++ /* __builtin_unreachable can expand to no code at all,
++ leaving (barrier) RTXes in the instruction stream. */
++ goto close_shadow_notrapb;
++
+ case JUMP_INSN:
+ case CALL_INSN:
+ case CODE_LABEL:
+@@ -8673,6 +8678,7 @@
+ n = emit_insn_before (gen_trapb (), i);
+ PUT_MODE (n, TImode);
+ PUT_MODE (i, TImode);
++ close_shadow_notrapb:
+ trap_pending = 0;
+ shadow.used.i = 0;
+ shadow.used.fp = 0;
Index: gcc/config/elfos.h
===================================================================
--- a/src/gcc/config/elfos.h (.../tags/gcc_4_8_3_release)