[gcc-6] 216/401: * Update to SVN 20160927 (r240553, 6.2.1) from the gcc-6-branch.

Ximin Luo infinity0 at debian.org
Wed Apr 5 15:49:34 UTC 2017


This is an automated email from the git hooks/post-receive script.

infinity0 pushed a commit to branch pu/reproducible_builds
in repository gcc-6.

commit c70f9dd8128f97b8491a6189e37b5d72d20c4460
Author: doko <doko at 6ca36cf4-e1d1-0310-8c6f-e303bb2178ca>
Date:   Tue Sep 27 19:38:57 2016 +0000

      * Update to SVN 20160927 (r240553, 6.2.1) from the gcc-6-branch.
    
    
    git-svn-id: svn://anonscm.debian.org/gcccvs/branches/sid/gcc-6@8985 6ca36cf4-e1d1-0310-8c6f-e303bb2178ca
---
 debian/changelog                |    9 +-
 debian/patches/svn-updates.diff | 1347 ++++++++++++++++++++++++++++++++++++++-
 2 files changed, 1330 insertions(+), 26 deletions(-)

diff --git a/debian/changelog b/debian/changelog
index 75cd176..a92d1a8 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,13 +1,16 @@
 gcc-6 (6.2.0-5) UNRELEASED; urgency=medium
 
-  * Update to SVN 20160922 (r240342, 6.2.1) from the gcc-6-branch.
+  * Update to SVN 20160927 (r240553, 6.2.1) from the gcc-6-branch.
     - Fix PR sanitizer/77396, PR libstdc++/77645, PR libstdc++/77645,
       PR target/77326 (AVR), PR target/77349 (PPC), PR middle-end/77594,
       PR sanitizer/68260, PR fortran/77516, PR target/69255 (x86),
-      PR c++/77553, PR c++/77539, PR fortran/77500.
+      PR c++/77553, PR c++/77539, PR fortran/77500, PR c/77450,
+      PR middle-end/77436, PR tree-optimization/77514, PR middle-end/77544,
+      PR tree-optimization/77514, PR middle-end/77605, PR middle-end/77679,
+      PR tree-optimization/77621, PR target/77621 (x86), PR c++/71979.
   * Fix gij installation on hppa. Closes: #838111.
 
- -- Matthias Klose <doko at debian.org>  Thu, 22 Sep 2016 10:21:49 +0200
+ -- Matthias Klose <doko at debian.org>  Tue, 27 Sep 2016 21:34:59 +0200
 
 gcc-6 (6.2.0-4) unstable; urgency=medium
 
diff --git a/debian/patches/svn-updates.diff b/debian/patches/svn-updates.diff
index 32ba079..83b57a7 100644
--- a/debian/patches/svn-updates.diff
+++ b/debian/patches/svn-updates.diff
@@ -1,10 +1,10 @@
-# DP: updates from the 6 branch upto 20160922 (r240342).
+# DP: updates from the 6 branch upto 20160922 (r240553).
 
 last_update()
 {
 	cat > ${dir}LAST_UPDATED <EOF
-Thu Sep 22 10:23:00 CEST 2016
-Thu Sep 22 08:23:00 UTC 2016 (revision 240342)
+Tue Sep 27 20:06:22 CEST 2016
+Tue Sep 27 18:06:22 UTC 2016 (revision 240553)
 EOF
 }
 
@@ -96,6 +96,53 @@ Index: libsanitizer/ChangeLog
  2016-08-22  Release Manager
  
  	* GCC 6.2.0 released.
+Index: libstdc++-v3/configure
+===================================================================
+--- a/src/libstdc++-v3/configure	(.../tags/gcc_6_2_0_release)
++++ b/src/libstdc++-v3/configure	(.../branches/gcc-6-branch)
+@@ -15538,10 +15538,12 @@
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ 
+ 
+-  # Set atomicity_dir to builtins if all but the long long test above passes.
+-  if test "$glibcxx_cv_atomic_bool" = yes \
++  # Set atomicity_dir to builtins if all but the long long test above passes,
++  # or if the builtins were already chosen (e.g. by configure.host).
++  if { test "$glibcxx_cv_atomic_bool" = yes \
+      && test "$glibcxx_cv_atomic_short" = yes \
+-     && test "$glibcxx_cv_atomic_int" = yes; then
++     && test "$glibcxx_cv_atomic_int" = yes; } \
++     || test "$atomicity_dir" = "cpu/generic/atomicity_builtins"; then
+ 
+ $as_echo "#define _GLIBCXX_ATOMIC_BUILTINS 1" >>confdefs.h
+ 
+@@ -15573,7 +15575,7 @@
+   # unnecessary for this test.
+ 
+     cat > conftest.$ac_ext << EOF
+-#line 15576 "configure"
++#line 15578 "configure"
+ int main()
+ {
+   _Decimal32 d1;
+@@ -15615,7 +15617,7 @@
+   # unnecessary for this test.
+ 
+     cat > conftest.$ac_ext << EOF
+-#line 15618 "configure"
++#line 15620 "configure"
+ template<typename T1, typename T2>
+   struct same
+   { typedef T2 type; };
+@@ -15649,7 +15651,7 @@
+     rm -f conftest*
+ 
+     cat > conftest.$ac_ext << EOF
+-#line 15652 "configure"
++#line 15654 "configure"
+ template<typename T1, typename T2>
+   struct same
+   { typedef T2 type; };
 Index: libstdc++-v3/python/libstdcxx/v6/xmethods.py
 ===================================================================
 --- a/src/libstdc++-v3/python/libstdcxx/v6/xmethods.py	(.../tags/gcc_6_2_0_release)
@@ -179,6 +226,21 @@ Index: libstdc++-v3/scripts/testsuite_flags.in
        CXXFLAGS_config="@SECTION_FLAGS@ @EXTRA_CXX_FLAGS@"
        echo ${CXXFLAGS_default} ${CXXFLAGS_config} 
        ;;
+Index: libstdc++-v3/configure.host
+===================================================================
+--- a/src/libstdc++-v3/configure.host	(.../tags/gcc_6_2_0_release)
++++ b/src/libstdc++-v3/configure.host	(.../branches/gcc-6-branch)
+@@ -300,6 +300,10 @@
+     os_include_dir="os/qnx/qnx6.1"
+     c_model=c
+     ;;
++  rtems*)
++    # Use libatomic if necessary and avoid libstdc++ specific atomicity support
++    atomicity_dir="cpu/generic/atomicity_builtins"
++    ;;
+   solaris2)
+     # This too-vague configuration does not provide enough information
+     # to select a ctype include, and thus os_include_dir is a crap shoot.
 Index: libstdc++-v3/doc/xml/api.xml
 ===================================================================
 --- a/src/libstdc++-v3/doc/xml/api.xml	(.../tags/gcc_6_2_0_release)
@@ -325,11 +387,38 @@ Index: libstdc++-v3/doc/html/api.html
    The rendered HTML, as above, is also available for download on the
    gcc.gnu.org site in a directory located at
     <code class="literal"><URL:ftp://gcc.gnu.org/pub/gcc/libstdc++/doxygen/></code>.
+Index: libstdc++-v3/include/debug/safe_iterator.h
+===================================================================
+--- a/src/libstdc++-v3/include/debug/safe_iterator.h	(.../tags/gcc_6_2_0_release)
++++ b/src/libstdc++-v3/include/debug/safe_iterator.h	(.../branches/gcc-6-branch)
+@@ -296,7 +296,7 @@
+ 	_GLIBCXX_DEBUG_VERIFY(this->_M_incrementable(),
+ 			      _M_message(__msg_bad_inc)
+ 			      ._M_iterator(*this, "this"));
+-	__gnu_cxx::__scoped_lock(this->_M_get_mutex());
++	__gnu_cxx::__scoped_lock __l(this->_M_get_mutex());
+ 	++base();
+ 	return *this;
+       }
 Index: libstdc++-v3/include/std/type_traits
 ===================================================================
 --- a/src/libstdc++-v3/include/std/type_traits	(.../tags/gcc_6_2_0_release)
 +++ b/src/libstdc++-v3/include/std/type_traits	(.../branches/gcc-6-branch)
-@@ -994,6 +994,9 @@
+@@ -154,6 +154,13 @@
+     : public integral_constant<bool, !_Pp::value>
+     { };
+ 
++  struct __nonesuch {
++    __nonesuch() = delete;
++    ~__nonesuch() = delete;
++    __nonesuch(__nonesuch const&) = delete;
++    void operator=(__nonesuch const&) = delete;
++  };
++
+ #if __cplusplus > 201402L
+ 
+ #define __cpp_lib_logical_traits 201510
+@@ -994,6 +1001,9 @@
                            is_function<_From>>>::value>
      struct __is_base_to_derived_ref;
  
@@ -339,7 +428,7 @@ Index: libstdc++-v3/include/std/type_traits
    // Detect whether we have a downcast situation during
    // reference binding.
    template<typename _From, typename _To>
-@@ -1004,7 +1007,8 @@
+@@ -1004,7 +1014,8 @@
        typedef typename remove_cv<typename remove_reference<_To
          >::type>::type __dst_t;
        typedef __and_<__not_<is_same<__src_t, __dst_t>>,
@@ -349,6 +438,362 @@ Index: libstdc++-v3/include/std/type_traits
        static constexpr bool value = type::value;
      };
  
+Index: libstdc++-v3/include/bits/stl_pair.h
+===================================================================
+--- a/src/libstdc++-v3/include/bits/stl_pair.h	(.../tags/gcc_6_2_0_release)
++++ b/src/libstdc++-v3/include/bits/stl_pair.h	(.../branches/gcc-6-branch)
+@@ -88,53 +88,96 @@
+   // Concept utility functions, reused in conditionally-explicit
+   // constructors.
+   // See PR 70437, don't look at is_constructible or
+-  // is_convertible if the decayed types are the same to
++  // is_convertible if the types are the same to
+   // avoid querying those properties for incomplete types.
+-  template <typename _T1, typename _T2, typename _U1, typename _U2>
+-  constexpr bool _ConstructiblePair()
+-  {
+-    return __and_<__or_<is_same<typename decay<_T1>::type,
+-				typename decay<_U1>::type>,
+-			is_constructible<_T1, const _U1&>>,
+-		  __or_<is_same<typename decay<_T2>::type,
+-				typename decay<_U2>::type>,
+-			is_constructible<_T2, const _U2&>>>::value;
+-  }
++  template <bool, typename _T1, typename _T2>
++    struct _PCC
++    {
++      template <typename _U1, typename _U2>
++      static constexpr bool _ConstructiblePair()
++      {
++	return __and_<is_constructible<_T1, const _U1&>,
++		      is_constructible<_T2, const _U2&>>::value;
++      }
+ 
+-  template <typename _T1, typename _T2, typename _U1, typename _U2>
+-  constexpr bool _ImplicitlyConvertiblePair()
+-  {
+-    return __and_<__or_<is_same<typename decay<_T1>::type,
+-				typename decay<_U1>::type>,
+-			is_convertible<const _U1&, _T1>>,
+-		  __or_<is_same<typename decay<_T2>::type,
+-				typename decay<_U2>::type>,
+-		       is_convertible<const _U2&, _T2>>>::value;
+-  }
++      template <typename _U1, typename _U2>
++      static constexpr bool _ImplicitlyConvertiblePair()
++      {
++	return __and_<is_convertible<const _U1&, _T1>,
++		      is_convertible<const _U2&, _T2>>::value;
++      }
+ 
+-  template <typename _T1, typename _T2, typename _U1, typename _U2>
+-  constexpr bool _MoveConstructiblePair()
+-  {
+-    return __and_<__or_<is_same<typename decay<_T1>::type,
+-				typename decay<_U1>::type>,
+-			is_constructible<_T1, _U1&&>>,
+-		  __or_<is_same<typename decay<_T2>::type,
+-				typename decay<_U2>::type>,
+-			is_constructible<_T2, _U2&&>>>::value;
+-  }
++      template <typename _U1, typename _U2>
++      static constexpr bool _MoveConstructiblePair()
++      {
++	return __and_<is_constructible<_T1, _U1&&>,
++		      is_constructible<_T2, _U2&&>>::value;
++      }
+ 
+-  template <typename _T1, typename _T2, typename _U1, typename _U2>
+-  constexpr bool _ImplicitlyMoveConvertiblePair()
+-  {
+-    return __and_<__or_<is_same<typename decay<_T1>::type,
+-				typename decay<_U1>::type>,
+-			is_convertible<_U1&&, _T1>>,
+-		  __or_<is_same<typename decay<_T2>::type,
+-				typename decay<_U2>::type>,
+-		       is_convertible<_U2&&, _T2>>>::value;
+-  }
++      template <typename _U1, typename _U2>
++      static constexpr bool _ImplicitlyMoveConvertiblePair()
++      {
++	return __and_<is_convertible<_U1&&, _T1>,
++		      is_convertible<_U2&&, _T2>>::value;
++      }
+ 
++      template <bool __implicit, typename _U1, typename _U2>
++      static constexpr bool _CopyMovePair()
++      {
++	using __do_converts = __and_<is_convertible<const _U1&, _T1>,
++				  is_convertible<_U2&&, _T2>>;
++	using __converts = typename conditional<__implicit,
++				       __do_converts,
++				       __not_<__do_converts>>::type;
++	return __and_<is_constructible<_T1, const _U1&>,
++		      is_constructible<_T2, _U2&&>,
++		      __converts
++		      >::value;
++      }
+ 
++      template <bool __implicit, typename _U1, typename _U2>
++      static constexpr bool _MoveCopyPair()
++      {
++	using __do_converts = __and_<is_convertible<_U1&&, _T1>,
++				  is_convertible<const _U2&, _T2>>;
++	using __converts = typename conditional<__implicit,
++				       __do_converts,
++				       __not_<__do_converts>>::type;
++	return __and_<is_constructible<_T1, _U1&&>,
++		      is_constructible<_T2, const _U2&&>,
++		      __converts
++		      >::value;
++      }
++  };
++
++  template <typename _T1, typename _T2>
++    struct _PCC<false, _T1, _T2>
++    {
++      template <typename _U1, typename _U2>
++      static constexpr bool _ConstructiblePair()
++      {
++	return false;
++      }
++
++      template <typename _U1, typename _U2>
++      static constexpr bool _ImplicitlyConvertiblePair()
++      {
++	return false;
++      }
++
++      template <typename _U1, typename _U2>
++      static constexpr bool _MoveConstructiblePair()
++      {
++	return false;
++      }
++
++      template <typename _U1, typename _U2>
++      static constexpr bool _ImplicitlyMoveConvertiblePair()
++      {
++	return false;
++      }
++  };
++
+ #endif
+ 
+  /**
+@@ -186,16 +229,23 @@
+       pair(const _T1& __a, const _T2& __b)
+       : first(__a), second(__b) { }
+ #else
++      // Shortcut for constraining the templates that don't take pairs.
++      using _PCCP = _PCC<true, _T1, _T2>;
++
+       template<typename _U1 = _T1, typename _U2=_T2, typename
+-                enable_if<_ConstructiblePair<_T1, _T2, _U1, _U2>()
+-                         && _ImplicitlyConvertiblePair<_T1, _T2, _U1, _U2>(),
++	       enable_if<_PCCP::template
++			   _ConstructiblePair<_U1, _U2>()
++	                 && _PCCP::template
++			   _ImplicitlyConvertiblePair<_U1, _U2>(),
+                          bool>::type=true>
+       constexpr pair(const _T1& __a, const _T2& __b)
+       : first(__a), second(__b) { }
+ 
+        template<typename _U1 = _T1, typename _U2=_T2, typename
+-	       enable_if<_ConstructiblePair<_T1, _T2, _U1, _U2>()
+-                         && !_ImplicitlyConvertiblePair<_T1, _T2, _U1, _U2>(),
++		enable_if<_PCCP::template
++			    _ConstructiblePair<_U1, _U2>()
++	                  && !_PCCP::template
++			    _ImplicitlyConvertiblePair<_U1, _U2>(),
+                          bool>::type=false>
+       explicit constexpr pair(const _T1& __a, const _T2& __b)
+       : first(__a), second(__b) { }
+@@ -207,16 +257,26 @@
+ 	pair(const pair<_U1, _U2>& __p)
+ 	: first(__p.first), second(__p.second) { }
+ #else
++      // Shortcut for constraining the templates that take pairs.
++      template <typename _U1, typename _U2>
++        using _PCCFP = _PCC<!is_same<_T1, _U1>::value
++			    || !is_same<_T2, _U2>::value,
++			    _T1, _T2>;
++
+       template<typename _U1, typename _U2, typename
+-	       enable_if<_ConstructiblePair<_T1, _T2, _U1, _U2>()
+-                         && _ImplicitlyConvertiblePair<_T1, _T2, _U1, _U2>(),
+-                         bool>::type=true>
++	       enable_if<_PCCFP<_U1, _U2>::template
++			   _ConstructiblePair<_U1, _U2>()
++	                 && _PCCFP<_U1, _U2>::template
++			   _ImplicitlyConvertiblePair<_U1, _U2>(),
++			  bool>::type=true>
+         constexpr pair(const pair<_U1, _U2>& __p)
+         : first(__p.first), second(__p.second) { }
+ 
+       template<typename _U1, typename _U2, typename
+-               enable_if<_ConstructiblePair<_T1, _T2, _U1, _U2>()
+-                         && !_ImplicitlyConvertiblePair<_T1, _T2, _U1, _U2>(),
++	       enable_if<_PCCFP<_U1, _U2>::template
++			   _ConstructiblePair<_U1, _U2>()
++			 && !_PCCFP<_U1, _U2>::template
++			   _ImplicitlyConvertiblePair<_U1, _U2>(),
+                          bool>::type=false>
+ 	explicit constexpr pair(const pair<_U1, _U2>& __p)
+ 	: first(__p.first), second(__p.second) { }
+@@ -226,57 +286,47 @@
+ 
+       // DR 811.
+       template<typename _U1, typename
+-               enable_if<_ConstructiblePair<_T2, _T2, _T2, _T2>()
+-                         && _MoveConstructiblePair<_T1, _T2, _U1, _T2>()
+-                         && _ImplicitlyConvertiblePair<_T2, _T2, _T2, _T2>()
+-                         && _ImplicitlyMoveConvertiblePair<_T1, _T2,
+-							  _U1, _T2>(),
++	       enable_if<_PCCP::template
++			   _MoveCopyPair<true, _U1, _T2>(),
+                          bool>::type=true>
+        constexpr pair(_U1&& __x, const _T2& __y)
+        : first(std::forward<_U1>(__x)), second(__y) { }
+ 
+       template<typename _U1, typename
+-               enable_if<_ConstructiblePair<_T2, _T2, _T2, _T2>()
+-                         && _MoveConstructiblePair<_T1, _T2, _U1, _T2>()
+-                         && (!_ImplicitlyConvertiblePair<_T2, _T2, _T2, _T2>()
+-                             || !_ImplicitlyMoveConvertiblePair<_T1, _T2,
+-                                                                _U1, _T2>()),
++	       enable_if<_PCCP::template
++			   _MoveCopyPair<false, _U1, _T2>(),
+                          bool>::type=false>
+        explicit constexpr pair(_U1&& __x, const _T2& __y)
+        : first(std::forward<_U1>(__x)), second(__y) { }
+ 
+       template<typename _U2, typename
+-               enable_if<_ConstructiblePair<_T1, _T1, _T1, _T1>()
+-                         && _MoveConstructiblePair<_T1, _T2, _T1, _U2>()
+-                         && _ImplicitlyConvertiblePair<_T1, _T1, _T1, _T1>()
+-                         && _ImplicitlyMoveConvertiblePair<_T1, _T2,
+-                                                           _T1, _U2>(),
++	       enable_if<_PCCP::template
++			   _CopyMovePair<true, _T1, _U2>(),
+                          bool>::type=true>
+        constexpr pair(const _T1& __x, _U2&& __y)
+        : first(__x), second(std::forward<_U2>(__y)) { }
+ 
+       template<typename _U2, typename
+-               enable_if<_ConstructiblePair<_T1, _T1, _T1, _T1>()
+-                         && _MoveConstructiblePair<_T1, _T2, _T1, _U2>()
+-                         && (!_ImplicitlyConvertiblePair<_T1, _T1, _T1, _T1>()
+-                             || !_ImplicitlyMoveConvertiblePair<_T1, _T2,
+-                                                                _T1, _U2>()),
++	       enable_if<_PCCP::template
++			   _CopyMovePair<false, _T1, _U2>(),
+                          bool>::type=false>
+        explicit pair(const _T1& __x, _U2&& __y)
+        : first(__x), second(std::forward<_U2>(__y)) { }
+ 
+       template<typename _U1, typename _U2, typename
+-	       enable_if<_MoveConstructiblePair<_T1, _T2, _U1, _U2>()
+-                         && _ImplicitlyMoveConvertiblePair<_T1, _T2,
+-							   _U1, _U2>(),
++	       enable_if<_PCCP::template
++			   _MoveConstructiblePair<_U1, _U2>()
++			  && _PCCP::template
++			   _ImplicitlyMoveConvertiblePair<_U1, _U2>(),
+                          bool>::type=true>
+ 	constexpr pair(_U1&& __x, _U2&& __y)
+ 	: first(std::forward<_U1>(__x)), second(std::forward<_U2>(__y)) { }
+ 
+       template<typename _U1, typename _U2, typename
+-	       enable_if<_MoveConstructiblePair<_T1, _T2, _U1, _U2>()
+-                         && !_ImplicitlyMoveConvertiblePair<_T1, _T2,
+-							    _U1, _U2>(),
++	       enable_if<_PCCP::template
++			   _MoveConstructiblePair<_U1, _U2>()
++			  && !_PCCP::template
++			   _ImplicitlyMoveConvertiblePair<_U1, _U2>(),
+                          bool>::type=false>
+ 	explicit constexpr pair(_U1&& __x, _U2&& __y)
+ 	: first(std::forward<_U1>(__x)), second(std::forward<_U2>(__y)) { }
+@@ -283,9 +333,10 @@
+ 
+ 
+       template<typename _U1, typename _U2, typename
+-	       enable_if<_MoveConstructiblePair<_T1, _T2, _U1, _U2>()
+-                         && _ImplicitlyMoveConvertiblePair<_T1, _T2,
+-							   _U1, _U2>(),
++	       enable_if<_PCCFP<_U1, _U2>::template
++			   _MoveConstructiblePair<_U1, _U2>()
++			  && _PCCFP<_U1, _U2>::template
++			   _ImplicitlyMoveConvertiblePair<_U1, _U2>(),
+                          bool>::type=true>
+ 	constexpr pair(pair<_U1, _U2>&& __p)
+ 	: first(std::forward<_U1>(__p.first)),
+@@ -292,9 +343,10 @@
+ 	  second(std::forward<_U2>(__p.second)) { }
+ 
+       template<typename _U1, typename _U2, typename
+-	       enable_if<_MoveConstructiblePair<_T1, _T2, _U1, _U2>()
+-                         && !_ImplicitlyMoveConvertiblePair<_T1, _T2,
+-							   _U1, _U2>(),
++	       enable_if<_PCCFP<_U1, _U2>::template
++			   _MoveConstructiblePair<_U1, _U2>()
++			  && !_PCCFP<_U1, _U2>::template
++			   _ImplicitlyMoveConvertiblePair<_U1, _U2>(),
+                          bool>::type=false>
+ 	explicit constexpr pair(pair<_U1, _U2>&& __p)
+ 	: first(std::forward<_U1>(__p.first)),
+@@ -304,7 +356,10 @@
+         pair(piecewise_construct_t, tuple<_Args1...>, tuple<_Args2...>);
+ 
+       pair&
+-      operator=(const pair& __p)
++      operator=(typename conditional<
++		__and_<is_copy_assignable<_T1>,
++		       is_copy_assignable<_T2>>::value,
++		const pair&, const __nonesuch&>::type __p)
+       {
+ 	first = __p.first;
+ 	second = __p.second;
+@@ -312,7 +367,16 @@
+       }
+ 
+       pair&
+-      operator=(pair&& __p)
++      operator=(typename conditional<
++		__not_<__and_<is_copy_assignable<_T1>,
++		              is_copy_assignable<_T2>>>::value,
++		const pair&, const __nonesuch&>::type __p) = delete;
++
++      pair&
++      operator=(typename conditional<
++		__and_<is_move_assignable<_T1>,
++		       is_move_assignable<_T2>>::value,
++		pair&&, __nonesuch&&>::type __p)
+       noexcept(__and_<is_nothrow_move_assignable<_T1>,
+ 	              is_nothrow_move_assignable<_T2>>::value)
+       {
+@@ -322,7 +386,9 @@
+       }
+ 
+       template<typename _U1, typename _U2>
+-	pair&
++      typename enable_if<__and_<is_assignable<_T1&, const _U1&>,
++				is_assignable<_T2&, const _U2&>>::value,
++			 pair&>::type
+ 	operator=(const pair<_U1, _U2>& __p)
+ 	{
+ 	  first = __p.first;
+@@ -331,7 +397,9 @@
+ 	}
+ 
+       template<typename _U1, typename _U2>
+-	pair&
++      typename enable_if<__and_<is_assignable<_T1&, _U1&&>,
++				is_assignable<_T2&, _U2&&>>::value,
++			 pair&>::type
+ 	operator=(pair<_U1, _U2>&& __p)
+ 	{
+ 	  first = std::forward<_U1>(__p.first);
 Index: libstdc++-v3/include/bits/stl_iterator.h
 ===================================================================
 --- a/src/libstdc++-v3/include/bits/stl_iterator.h	(.../tags/gcc_6_2_0_release)
@@ -459,7 +904,48 @@ Index: libstdc++-v3/ChangeLog
 ===================================================================
 --- a/src/libstdc++-v3/ChangeLog	(.../tags/gcc_6_2_0_release)
 +++ b/src/libstdc++-v3/ChangeLog	(.../branches/gcc-6-branch)
-@@ -1,3 +1,65 @@
+@@ -1,3 +1,106 @@
++2016-09-27  Jonathan Wakely  <jwakely at redhat.com>
++
++	* include/debug/safe_iterator.h (_Safe_iterator::operator++()): Fix
++	lifetime of lock.
++
++2015-09-27  Sebastian Huber  <sebastian.huber at embedded-brains.de>
++
++	Backport from mainline
++	2015-09-23  Sebastian Huber  <sebastian.huber at embedded-brains.de>
++
++	* config/cpu/m68k/atomicity.h: Adjust comment.
++	* acinclude.m4 (GLIBCXX_ENABLE_ATOMIC_BUILTINS): Honor
++	explicit atomicity_dir setup via configure.host.
++	* configure.host (rtems-*): Set atomicity_dir.
++	* configure: Regenerate.
++
++2016-09-26  Ville Voutilainen  <ville.voutilainen at gmail.com>
++
++	Backport from mainline
++	2016-09-21  Ville Voutilainen  <ville.voutilainen at gmail.com>
++
++	Implement LWG 2729 for pair.
++	* include/bits/stl_pair.h (_PCC): New.
++	(_ConstructiblePair, _ImplicitlyConvertiblePair):
++	Turn into static member functions of _PCC.
++	(_MoveConstructiblePair, _ImplicitlyMoveConvertiblePair): Likewise.
++	(_PCCP): New.
++	(pair(const _T1&, const _T2&)): Adjust.
++	(_PCCFP): New.
++	(pair(const pair<_U1, _U2>&)): Adjust.
++	(pair(_U1&&, const _T2&)): Likewise.
++	(pair(const _T1&, _U2&&)): Likewise.
++	(pair(_U1&&, _U2&&)): Likewise.
++	(pair(pair<_U1, _U2>&&)): Likewise.
++	(operator=(const pair&)): Make conditionally deleted.
++	(operator=(pair&&)): Make conditionally suppressed.
++	(operator=(const pair<_U1, _U2>&)): Constrain.
++	(operator=(pair<_U1, _U2>&&): Likewise.
++	* include/std/type_traits (__nonesuch): New.
++	* testsuite/20_util/pair/traits.cc: New.
++
 +2016-09-20  Jonathan Wakely  <jwakely at redhat.com>
 +
 +	* python/libstdcxx/v6/xmethods.py (DequeWorkerBase.__init__)
@@ -607,6 +1093,88 @@ Index: libstdc++-v3/testsuite/23_containers/map/77334.cc
 +   std::map<int, A> m1, m2;
 +   m2 = std::move(m1);
 +}
+Index: libstdc++-v3/testsuite/20_util/pair/traits.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/20_util/pair/traits.cc	(.../tags/gcc_6_2_0_release)
++++ b/src/libstdc++-v3/testsuite/20_util/pair/traits.cc	(.../branches/gcc-6-branch)
+@@ -0,0 +1,77 @@
++// { dg-do compile }
++// { dg-options "-std=gnu++11" }
++
++// Copyright (C) 2016 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++//
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++//
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3.  If not see
++// <http://www.gnu.org/licenses/>.
++
++#include <utility>
++
++#include <type_traits>
++#include <memory>
++
++using namespace std;
++
++struct Poison
++{
++	Poison(Poison&&) = delete;
++};
++
++struct ThrowingCopy
++{
++  ThrowingCopy(const ThrowingCopy&) {}
++  ThrowingCopy& operator=(const ThrowingCopy&) {}
++};
++
++int main()
++{
++	static_assert(!is_copy_constructible<Poison>::value, "");
++	static_assert(!is_move_constructible<Poison>::value, "");
++	static_assert(!is_copy_assignable<Poison>::value, "");
++	static_assert(!is_move_assignable<Poison>::value, "");
++	static_assert(!is_copy_constructible<std::pair<int, Poison>>::value,
++		      "");
++	static_assert(!is_move_constructible<std::pair<int, Poison>>::value,
++		      "");
++	static_assert(!is_copy_assignable<std::pair<int, Poison>>::value, "");
++	static_assert(!is_move_assignable<std::pair<int, Poison>>::value, "");
++	static_assert(!is_constructible<std::pair<int, Poison>&,
++		      std::pair<char, Poison>&>::value, "");
++	static_assert(!is_assignable<std::pair<int, Poison>&,
++		      std::pair<char, Poison>&>::value, "");
++	static_assert(!is_constructible<std::pair<int, Poison>&,
++		      std::pair<char, Poison>>::value, "");
++	static_assert(!is_assignable<std::pair<int, Poison>&,
++		      std::pair<char, Poison>>::value, "");
++	static_assert(!is_copy_constructible<std::pair<ThrowingCopy,
++		      std::unique_ptr<int>>>::value,
++		      "");
++	static_assert(is_move_constructible<std::pair<ThrowingCopy,
++		      std::unique_ptr<int>>>::value,
++		      "");
++	static_assert(!is_nothrow_move_constructible<std::pair<ThrowingCopy,
++		      std::unique_ptr<int>>>::value,
++		      "");
++	static_assert(!is_copy_assignable<std::pair<ThrowingCopy,
++		      std::unique_ptr<int>>>::value,
++		      "");
++	static_assert(is_move_assignable<std::pair<ThrowingCopy,
++		      std::unique_ptr<int>>>::value,
++		      "");
++	static_assert(!is_nothrow_move_assignable<std::pair<ThrowingCopy,
++		      std::unique_ptr<int>>>::value,
++		      "");
++}
 Index: libstdc++-v3/testsuite/20_util/tuple/77395.cc
 ===================================================================
 --- a/src/libstdc++-v3/testsuite/20_util/tuple/77395.cc	(.../tags/gcc_6_2_0_release)
@@ -668,7 +1236,7 @@ Index: libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs_neg.cc
  // { dg-error "required from here" "" { target *-*-* } 42 }
  
 -// { dg-error "invalid use of incomplete type" "" { target *-*-* } 1924 }
-+// { dg-error "invalid use of incomplete type" "" { target *-*-* } 1928 }
++// { dg-error "invalid use of incomplete type" "" { target *-*-* } 1935 }
 Index: libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc
 ===================================================================
 --- a/src/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc	(.../tags/gcc_6_2_0_release)
@@ -679,8 +1247,8 @@ Index: libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc
  
 -// { dg-error "invalid use of incomplete type" "" { target *-*-* } 1820 }
 -// { dg-error "declaration of" "" { target *-*-* } 1777 }
-+// { dg-error "invalid use of incomplete type" "" { target *-*-* } 1824 }
-+// { dg-error "declaration of" "" { target *-*-* } 1781 }
++// { dg-error "invalid use of incomplete type" "" { target *-*-* } 1831 }
++// { dg-error "declaration of" "" { target *-*-* } 1788 }
 Index: libstdc++-v3/testsuite/20_util/declval/requirements/1_neg.cc
 ===================================================================
 --- a/src/libstdc++-v3/testsuite/20_util/declval/requirements/1_neg.cc	(.../tags/gcc_6_2_0_release)
@@ -690,7 +1258,7 @@ Index: libstdc++-v3/testsuite/20_util/declval/requirements/1_neg.cc
  // <http://www.gnu.org/licenses/>.
  
 -// { dg-error "static assertion failed" "" { target *-*-* } 2259 }
-+// { dg-error "static assertion failed" "" { target *-*-* } 2263 }
++// { dg-error "static assertion failed" "" { target *-*-* } 2270 }
  
  #include <utility>
  
@@ -769,6 +1337,40 @@ Index: libstdc++-v3/testsuite/20_util/is_constructible/77395.cc
 +  derived&& d2(std::move(b));
 +  static_assert(std::is_constructible<derived&&, base&&>::value, "");
 +}
+Index: libstdc++-v3/config/cpu/m68k/atomicity.h
+===================================================================
+--- a/src/libstdc++-v3/config/cpu/m68k/atomicity.h	(.../tags/gcc_6_2_0_release)
++++ b/src/libstdc++-v3/config/cpu/m68k/atomicity.h	(.../branches/gcc-6-branch)
+@@ -48,6 +48,9 @@
+   }
+ 
+ #elif defined(__rtems__)
++  // This code is only provided for reference.  RTEMS uses now the atomic
++  // builtins and libatomic.  See configure.host.
++  //
+   // TAS/JBNE is unsafe on systems with strict priority-based scheduling.
+   // Disable interrupts, which we can do only from supervisor mode.
+   _Atomic_word
+Index: libstdc++-v3/acinclude.m4
+===================================================================
+--- a/src/libstdc++-v3/acinclude.m4	(.../tags/gcc_6_2_0_release)
++++ b/src/libstdc++-v3/acinclude.m4	(.../branches/gcc-6-branch)
+@@ -3489,10 +3489,12 @@
+   CXXFLAGS="$old_CXXFLAGS"
+   AC_LANG_RESTORE
+ 
+-  # Set atomicity_dir to builtins if all but the long long test above passes.
+-  if test "$glibcxx_cv_atomic_bool" = yes \
++  # Set atomicity_dir to builtins if all but the long long test above passes,
++  # or if the builtins were already chosen (e.g. by configure.host).
++  if { test "$glibcxx_cv_atomic_bool" = yes \
+      && test "$glibcxx_cv_atomic_short" = yes \
+-     && test "$glibcxx_cv_atomic_int" = yes; then
++     && test "$glibcxx_cv_atomic_int" = yes; } \
++     || test "$atomicity_dir" = "cpu/generic/atomicity_builtins"; then
+     AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS, 1,
+     [Define if the compiler supports C++11 atomics.])
+     atomicity_dir=cpu/generic/atomicity_builtins
 Index: ChangeLog
 ===================================================================
 --- a/src/ChangeLog	(.../tags/gcc_6_2_0_release)
@@ -895,7 +1497,16 @@ Index: gcc/c-family/ChangeLog
 ===================================================================
 --- a/src/gcc/c-family/ChangeLog	(.../tags/gcc_6_2_0_release)
 +++ b/src/gcc/c-family/ChangeLog	(.../branches/gcc-6-branch)
-@@ -1,3 +1,12 @@
+@@ -1,3 +1,21 @@
++2016-09-27  Richard Biener  <rguenther at suse.de>
++
++	Backport from mainline
++	2016-09-06  Richard Biener  <rguenther at suse.de>
++
++	PR c/77450
++	* c-common.c (c_common_mark_addressable_vec): Handle
++	COMPOUND_LITERAL_EXPR.
++
 +2016-09-13  Tom de Vries  <tom at codesourcery.com>
 +
 +	backport from trunk:
@@ -912,7 +1523,18 @@ Index: gcc/c-family/c-common.c
 ===================================================================
 --- a/src/gcc/c-family/c-common.c	(.../tags/gcc_6_2_0_release)
 +++ b/src/gcc/c-family/c-common.c	(.../branches/gcc-6-branch)
-@@ -12011,7 +12011,7 @@
+@@ -10679,7 +10679,9 @@
+ {   
+   while (handled_component_p (t))
+     t = TREE_OPERAND (t, 0);
+-  if (!VAR_P (t) && TREE_CODE (t) != PARM_DECL)
++  if (!VAR_P (t)
++      && TREE_CODE (t) != PARM_DECL
++      && TREE_CODE (t) != COMPOUND_LITERAL_EXPR)
+     return;
+   TREE_ADDRESSABLE (t) = 1;
+ }
+@@ -12011,7 +12013,7 @@
  {
    if (x == error_mark_node)
      return;
@@ -921,13 +1543,83 @@ Index: gcc/c-family/c-common.c
      {
        if (TYPE_NAME (TREE_TYPE (x)) == 0)
  	TYPE_NAME (TREE_TYPE (x)) = x;
+Index: gcc/java/class.c
+===================================================================
+--- a/src/gcc/java/class.c	(.../tags/gcc_6_2_0_release)
++++ b/src/gcc/java/class.c	(.../branches/gcc-6-branch)
+@@ -2365,6 +2365,7 @@
+   base_decl = build_decl (input_location,
+ 			  FIELD_DECL, NULL_TREE, super_class);
+   DECL_IGNORED_P (base_decl) = 1;
++  DECL_CONTEXT (base_decl) = this_class;
+   DECL_CHAIN (base_decl) = TYPE_FIELDS (this_class);
+   TYPE_FIELDS (this_class) = base_decl;
+   DECL_SIZE (base_decl) = TYPE_SIZE (super_class);
+Index: gcc/java/mangle.c
+===================================================================
+--- a/src/gcc/java/mangle.c	(.../tags/gcc_6_2_0_release)
++++ b/src/gcc/java/mangle.c	(.../branches/gcc-6-branch)
+@@ -74,15 +74,23 @@
+ void
+ java_mangle_decl (tree decl)
+ {
+-  /* A copy of the check from the beginning of lhd_set_decl_assembler_name.
+-     Only FUNCTION_DECLs and VAR_DECLs for variables with static storage
+-     duration need a real DECL_ASSEMBLER_NAME.  */
++  /* A copy of the check from the beginning of lhd_set_decl_assembler_name.  */
++
++  /* set_decl_assembler_name may be called on TYPE_DECL to record ODR
++     name for C++ types.  By default types have no ODR names.  */
++  if (TREE_CODE (decl) == TYPE_DECL)
++    return;
++
++  /* The language-independent code should never use the
++     DECL_ASSEMBLER_NAME for lots of DECLs.  Only FUNCTION_DECLs and
++     VAR_DECLs for variables with static storage duration need a real
++     DECL_ASSEMBLER_NAME.  */
+   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
+ 	      || (TREE_CODE (decl) == VAR_DECL
+ 		  && (TREE_STATIC (decl)
+ 		      || DECL_EXTERNAL (decl)
+ 		      || TREE_PUBLIC (decl))));
+-  
++
+   /* Mangling only applies to class members.  */
+   if (DECL_CONTEXT (decl) && TYPE_P (DECL_CONTEXT (decl)))
+     {
+Index: gcc/java/ChangeLog
+===================================================================
+--- a/src/gcc/java/ChangeLog	(.../tags/gcc_6_2_0_release)
++++ b/src/gcc/java/ChangeLog	(.../branches/gcc-6-branch)
+@@ -1,3 +1,8 @@
++2016-09-22  Richard Biener  <rguenther at suse.de>
++
++	* class.c (push_super_field): Set DECL_CONTEXT.
++	* mangle.c (java_mangle_decl): Re-sync with lhd_set_decl_assembler_name.
++
+ 2016-08-22  Release Manager
+ 
+ 	* GCC 6.2.0 released.
 Index: gcc/DATESTAMP
 ===================================================================
 --- a/src/gcc/DATESTAMP	(.../tags/gcc_6_2_0_release)
 +++ b/src/gcc/DATESTAMP	(.../branches/gcc-6-branch)
 @@ -1 +1 @@
 -20160822
-+20160922
++20160927
+Index: gcc/configure
+===================================================================
+--- a/src/gcc/configure	(.../tags/gcc_6_2_0_release)
++++ b/src/gcc/configure	(.../branches/gcc-6-branch)
+@@ -26743,7 +26743,7 @@
+   elif test x$gcc_cv_as != x; then
+     $as_echo '	.dwsect 0xA0000
+ 	Lframe..0:
+-		.vbyte 4,Lframe..0:
++		.vbyte 4,Lframe..0
+ 	  ' > conftest.s
+     if { ac_try='$gcc_cv_as $gcc_cv_as_flags  -o conftest.o conftest.s >&5'
+   { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
 Index: gcc/internal-fn.c
 ===================================================================
 --- a/src/gcc/internal-fn.c	(.../tags/gcc_6_2_0_release)
@@ -948,7 +1640,27 @@ Index: gcc/fold-const.c
 ===================================================================
 --- a/src/gcc/fold-const.c	(.../tags/gcc_6_2_0_release)
 +++ b/src/gcc/fold-const.c	(.../branches/gcc-6-branch)
-@@ -14093,7 +14093,6 @@
+@@ -837,15 +837,16 @@
+ 	  var = negate_expr (var);
+ 	}
+     }
++  else if (TREE_CONSTANT (in))
++    *conp = in;
+   else if (TREE_CODE (in) == BIT_NOT_EXPR
+ 	   && code == PLUS_EXPR)
+     {
+-      /* -X - 1 is folded to ~X, undo that here.  */
++      /* -X - 1 is folded to ~X, undo that here.  Do _not_ do this
++         when IN is constant.  */
+       *minus_litp = build_one_cst (TREE_TYPE (in));
+       var = negate_expr (TREE_OPERAND (in, 0));
+     }
+-  else if (TREE_CONSTANT (in))
+-    *conp = in;
+   else
+     var = in;
+ 
+@@ -14093,7 +14094,6 @@
        if (!VECTOR_TYPE_P (type))
  	{
  	  /* Have vector comparison with scalar boolean result.  */
@@ -956,7 +1668,7 @@ Index: gcc/fold-const.c
  	  gcc_assert ((code == EQ_EXPR || code == NE_EXPR)
  		      && VECTOR_CST_NELTS (op0) == VECTOR_CST_NELTS (op1));
  	  for (unsigned i = 0; i < VECTOR_CST_NELTS (op0); i++)
-@@ -14101,11 +14100,12 @@
+@@ -14101,11 +14101,12 @@
  	      tree elem0 = VECTOR_CST_ELT (op0, i);
  	      tree elem1 = VECTOR_CST_ELT (op1, i);
  	      tree tmp = fold_relational_const (code, type, elem0, elem1);
@@ -988,11 +1700,139 @@ Index: gcc/omp-low.c
  	    max_vf = 1;
  	  else if (c && compare_tree_int (OMP_CLAUSE_SAFELEN_EXPR (c),
  					  max_vf) == -1)
+Index: gcc/tree-chrec.c
+===================================================================
+--- a/src/gcc/tree-chrec.c	(.../tags/gcc_6_2_0_release)
++++ b/src/gcc/tree-chrec.c	(.../branches/gcc-6-branch)
+@@ -484,7 +484,6 @@
+ {
+   bool overflow;
+   unsigned int i;
+-  tree res;
+ 
+   /* Handle the most frequent cases.  */
+   if (k == 0)
+@@ -492,18 +491,20 @@
+   if (k == 1)
+     return fold_convert (type, n);
+ 
++  widest_int num = wi::to_widest (n);
++
+   /* Check that k <= n.  */
+-  if (wi::ltu_p (n, k))
++  if (wi::ltu_p (num, k))
+     return NULL_TREE;
+ 
+   /* Denominator = 2.  */
+-  wide_int denom = wi::two (TYPE_PRECISION (TREE_TYPE (n)));
++  widest_int denom = 2;
+ 
+   /* Index = Numerator-1.  */
+-  wide_int idx = wi::sub (n, 1);
++  widest_int idx = num - 1;
+ 
+   /* Numerator = Numerator*Index = n*(n-1).  */
+-  wide_int num = wi::smul (n, idx, &overflow);
++  num = wi::smul (num, idx, &overflow);
+   if (overflow)
+     return NULL_TREE;
+ 
+@@ -522,9 +523,10 @@
+     }
+ 
+   /* Result = Numerator / Denominator.  */
+-  wide_int di_res = wi::udiv_trunc (num, denom);
+-  res = wide_int_to_tree (type, di_res);
+-  return int_fits_type_p (res, type) ? res : NULL_TREE;
++  num = wi::udiv_trunc (num, denom);
++  if (! wi::fits_to_tree_p (num, type))
++    return NULL_TREE;
++  return wide_int_to_tree (type, num);
+ }
+ 
+ /* Helper function.  Use the Newton's interpolating formula for
 Index: gcc/ChangeLog
 ===================================================================
 --- a/src/gcc/ChangeLog	(.../tags/gcc_6_2_0_release)
 +++ b/src/gcc/ChangeLog	(.../branches/gcc-6-branch)
-@@ -1,3 +1,303 @@
+@@ -1,3 +1,380 @@
++2016-09-27  David Edelsohn  <dje.gcc at gmail.com>
++
++	Backport from mainline
++	2016-09-27  David Edelsohn  <dje.gcc at gmail.com>
++
++	* config/rs6000/rs6000.c (rs6000_output_symbol): Don't modify
++	VAR_DECL string.
++
++	2016-09-24  David Edelsohn  <dje.gcc at gmail.com>
++
++	* configure.ac (gcc_cv_as_aix_dwloc): Fix typo in assembly fragment.
++	* configure: Regenerate.
++	
++2016-09-27  Richard Biener  <rguenther at suse.de>
++
++	Backport from mainline
++	2016-09-01  Richard Biener  <rguenther at suse.de>
++
++	PR middle-end/77436
++	* tree-chrec.c (tree_fold_binomial): Use widest_int, properly
++	check whether the result fits the desired result type.
++
++	2016-09-19  Richard Biener  <rguenther at suse.de>
++
++	PR tree-optimization/77514
++	* tree-ssa-pre.c (create_expression_by_pieces): Optimize
++	search for folded stmt.
++
++	2016-09-15  Richard Biener  <rguenther at suse.de>
++
++	PR tree-optimization/77514
++	* tree-ssa-pre.c (create_expression_by_pieces): Handle garbage
++	only forced_stmts sequence.
++
++	2016-09-15  Richard Biener  <rguenther at suse.de>
++
++	PR middle-end/77544
++	* fold-const.c (split_tree): Do not split constant ~X.
++
++	2016-09-19  Richard Biener  <rguenther at suse.de>
++
++	PR middle-end/77605
++	* tree-data-ref.c (analyze_subscript_affine_affine): Use the
++	proper niter to bound the loops.
++
++	2016-09-22  Richard Biener  <rguenther at suse.de>
++ 
++	PR middle-end/77679
++	* gimple-fold.c (fold_array_ctor_reference): Turn asserts into
++	fold fails.
++
++2016-09-25  Uros Bizjak  <ubizjak at gmail.com>
++
++	Backport from mainline
++	2016-09-21  Richard Biener  <rguenther at suse.de>
++		    Jakub Jelinek  <jakub at redhat.com>
++
++	PR tree-optimization/77621
++	* tree-vect-data-refs.c (vect_analyze_data_ref_accesses): Split
++	group at non-vectorizable stmts.
++
++	Backport from mainline
++	2016-09-20  Uros Bizjak  <ubizjak at gmail.com>
++
++	PR target/77621
++	* config/i386/i386.c (ix86_preferred_simd_mode) <case DFmode>:
++	Don't return word_mode for !TARGET_VECTORIZE_DOUBLE.
++	(ix86_add_stmt_cost): Penalize DFmode vector operations
++	for !TARGET_VECTORIZE_DOUBLE.
++
++2016-09-22  Senthil Kumar Selvaraj  <senthil_kumar.selvaraj at atmel.com>
++
++	Backport from 2016-09-22 trunk r240388.
++
++	* config/avr/avr.c (avr_rtx_costs_1): Handle DImode MULT.
++	(avr_address_cost): Replace 61 with MAX_LD_OFFSET(mode).
++
 +2016-09-21  Segher Boessenkool  <segher at kernel.crashing.org>
 +
 +	* doc/rtl.texi (JUMP_LABEL): Document RETURN and SIMPLE_RETURN values.
@@ -1296,7 +2136,7 @@ Index: gcc/ChangeLog
  2016-08-22  Release Manager
  
  	* GCC 6.2.0 released.
-@@ -205,9 +509,9 @@
+@@ -205,9 +586,9 @@
  
  2016-08-09  Martin Jambor  <mjambor at suse.cz>
  
@@ -1372,6 +2212,16 @@ Index: gcc/testsuite/gcc.target/avr/torture/pr77326.c
 +  __builtin_exit (0);
 +  return 0;
 +}
+Index: gcc/testsuite/gcc.target/i386/vect-double-2.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/i386/vect-double-2.c	(.../tags/gcc_6_2_0_release)
++++ b/src/gcc/testsuite/gcc.target/i386/vect-double-2.c	(.../branches/gcc-6-branch)
+@@ -31,4 +31,4 @@
+     }
+ }
+ 
+-/* { dg-final { scan-tree-dump-not "vectorized 1 loops" "vect" } } */
++/* { dg-final { scan-tree-dump-times "Vectorized loops: 1" 1 "vect" } } */
 Index: gcc/testsuite/gcc.target/i386/pr71077.c
 ===================================================================
 --- a/src/gcc/testsuite/gcc.target/i386/pr71077.c	(.../tags/gcc_6_2_0_release)
@@ -1551,6 +2401,23 @@ Index: gcc/testsuite/gcc.target/i386/pr77403.c
 +{
 +  v ^= (V){1};
 +}
+Index: gcc/testsuite/gcc.target/i386/pr77621.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/i386/pr77621.c	(.../tags/gcc_6_2_0_release)
++++ b/src/gcc/testsuite/gcc.target/i386/pr77621.c	(.../branches/gcc-6-branch)
+@@ -0,0 +1,12 @@
++/* { dg-do compile } */
++/* { dg-options "-O3 -mtune=atom -msse2 -mno-avx -fdump-tree-vect-stats" } */
++
++void
++foo (double *x, int *y)
++{
++  int i;
++  for (i = 0; i < 8; i++)
++    x[i] -= y[i] * x[i + 1];
++}
++
++/* { dg-final { scan-tree-dump-not "Vectorized loops: 1" "vect" } } */
 Index: gcc/testsuite/gcc.target/i386/pr77594.c
 ===================================================================
 --- a/src/gcc/testsuite/gcc.target/i386/pr77594.c	(.../tags/gcc_6_2_0_release)
@@ -1863,6 +2730,37 @@ Index: gcc/testsuite/gcc.c-torture/unsorted/dump-noaddr.x
 -verbose result
 +dump_compare $src $options
  return 1
+Index: gcc/testsuite/gcc.dg/pr77450.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/pr77450.c	(.../tags/gcc_6_2_0_release)
++++ b/src/gcc/testsuite/gcc.dg/pr77450.c	(.../branches/gcc-6-branch)
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-options "-std=gnu90" } */
++
++typedef int V __attribute__((vector_size(4)));
++
++void
++foo(void)
++{
++  (V){ 0 }[0] = 0;
++}
+Index: gcc/testsuite/gcc.dg/pr77621.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/pr77621.c	(.../tags/gcc_6_2_0_release)
++++ b/src/gcc/testsuite/gcc.dg/pr77621.c	(.../branches/gcc-6-branch)
+@@ -0,0 +1,11 @@
++/* { dg-do compile } */
++/* { dg-options "-O3" } */
++/* { dg-additional-options "-mtune=atom -msse2" { target i?86-*-* x86_64-*-* } } */
++
++void
++foo (double *x, int *y)
++{
++  int i;
++  for (i = 0; i < 8; i++)
++    x[i] -= y[i] * x[i + 1];
++}
 Index: gcc/testsuite/gcc.dg/pr76783.c
 ===================================================================
 --- a/src/gcc/testsuite/gcc.dg/pr76783.c	(.../tags/gcc_6_2_0_release)
@@ -1989,6 +2887,33 @@ Index: gcc/testsuite/gcc.dg/lto/pr70955_1.c
 +  __builtin_ms_va_end (ap);
 +  return sum;
 +}
+Index: gcc/testsuite/gcc.dg/torture/pr77478.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/torture/pr77478.c	(.../tags/gcc_6_2_0_release)
++++ b/src/gcc/testsuite/gcc.dg/torture/pr77478.c	(.../branches/gcc-6-branch)
+@@ -0,0 +1,22 @@
++/* { dg-do run } */
++/* { dg-additional-options "-ffast-math" } */
++
++static const float A[10] = {1};
++
++float
++foo(float *f, int n)
++{
++  int i, j;
++  float a = 0, b = 0;
++  for (i = n/2; i < n; i++)
++    a += f[i]*.1f;
++  for (i = n/2, j = 0; i < n; i++, j++)
++    b += f[i]*A[j]+a*A[j];
++  return b;
++}
++
++int main()
++{
++  float a[21] = {0};
++  return foo(a+1, 20) + foo(a, 20);
++}
 Index: gcc/testsuite/gcc.dg/torture/pr72851.c
 ===================================================================
 --- a/src/gcc/testsuite/gcc.dg/torture/pr72851.c	(.../tags/gcc_6_2_0_release)
@@ -2024,6 +2949,68 @@ Index: gcc/testsuite/gcc.dg/torture/pr72851.c
 +  for (i = 0; i < 16; i++)
 +    K[i] = shuffle(CDn, PC2_shuffle, sizeof(PC2_shuffle));
 +}
+Index: gcc/testsuite/gcc.dg/torture/pr77514.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/torture/pr77514.c	(.../tags/gcc_6_2_0_release)
++++ b/src/gcc/testsuite/gcc.dg/torture/pr77514.c	(.../branches/gcc-6-branch)
+@@ -0,0 +1,21 @@
++/* { dg-do compile } */
++
++void
++m1 (char l0, char e8, int hw)
++{
++  char *rs = &l0;
++
++yu:
++  l0 = 1;
++  while (l0 != 0)
++    {
++      l0 = -l0;
++      l0 += (*rs ^ (l0 &= 1));
++    }
++  for (;;)
++    {
++      if (hw != 0)
++	goto yu;
++      rs = &e8;
++    }
++}
+Index: gcc/testsuite/gcc.dg/torture/pr77605.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/torture/pr77605.c	(.../tags/gcc_6_2_0_release)
++++ b/src/gcc/testsuite/gcc.dg/torture/pr77605.c	(.../branches/gcc-6-branch)
+@@ -0,0 +1,15 @@
++/* { dg-do run } */
++
++int a, b, c[2][8];
++
++int main ()
++{
++  for (a = 0; a < 8; a++)
++    for (b = 0; b < 2; b++)
++      c[b][a] = c[b][b + 6] ^ 1;
++
++  if (c[0][7] != 0) 
++    __builtin_abort ();
++
++  return 0; 
++}
+Index: gcc/testsuite/gcc.dg/torture/pr77436.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/torture/pr77436.c	(.../tags/gcc_6_2_0_release)
++++ b/src/gcc/testsuite/gcc.dg/torture/pr77436.c	(.../branches/gcc-6-branch)
+@@ -0,0 +1,11 @@
++/* { dg-do run } */
++
++int main()
++{
++  unsigned short sum = 0;
++  for (short x = -(__SHRT_MAX__ -1); x <= (__SHRT_MAX__ -1); x++)
++    sum += x;
++  if (sum != 0)
++    __builtin_abort ();
++  return 0;
++}
 Index: gcc/testsuite/gcc.dg/tree-ssa/update-unroll-1.c
 ===================================================================
 --- a/src/gcc/testsuite/gcc.dg/tree-ssa/update-unroll-1.c	(.../tags/gcc_6_2_0_release)
@@ -2241,7 +3228,71 @@ Index: gcc/testsuite/ChangeLog
 ===================================================================
 --- a/src/gcc/testsuite/ChangeLog	(.../tags/gcc_6_2_0_release)
 +++ b/src/gcc/testsuite/ChangeLog	(.../branches/gcc-6-branch)
-@@ -1,3 +1,235 @@
+@@ -1,3 +1,299 @@
++2016-09-27  Richard Biener  <rguenther at suse.de>
++
++	PR tree-optimization/77478
++	* gcc.dg/torture/pr77478.c: New testcase.
++
++2016-09-27  Richard Biener  <rguenther at suse.de>
++
++	Backport from mainline
++	2016-09-01  Richard Biener  <rguenther at suse.de>
++
++	PR middle-end/77436
++	* gcc.dg/torture/pr77436.c: New testcase.
++
++	2016-09-06  Richard Biener  <rguenther at suse.de>
++
++	PR c/77450
++	* gcc.dg/pr77450.c: New testcase.
++
++	2016-09-15  Richard Biener  <rguenther at suse.de>
++
++	PR tree-optimization/77514
++	* gcc.dg/torture/pr77514.c: New testcase.
++
++	2016-09-15  Richard Biener  <rguenther at suse.de>
++
++	PR middle-end/77544
++	* c-c++-common/torture/pr77544.c: New testcase.
++
++	2016-09-19  Richard Biener  <rguenther at suse.de>
++
++	PR middle-end/77605
++	* gcc.dg/torture/pr77605.c: New testcase.
++
++2016-09-25  Uros Bizjak  <ubizjak at gmail.com>
++
++	Backport from mainline
++	2016-09-21  Richard Biener  <rguenther at suse.de>
++		    Jakub Jelinek  <jakub at redhat.com>
++
++	PR tree-optimization/77621
++	* gcc.dg/pr77621.c: New testcase.
++
++	Backport from mainline
++	2016-09-20  Uros Bizjak  <ubizjak at gmail.com>
++
++	PR target/77621
++	* gcc.target/i386/pr77621.c: New test.
++	* gcc.target/i386/vect-double-2.c: Update scan-tree-dump-times
++	pattern, loop should vectorize with -mtune=atom.
++
++2016-09-25  Bernd Edlinger  <bernd.edlinger at hotmail.de>
++
++	backport from mainline
++	2016-09-23  Bernd Edlinger  <bernd.edlinger at hotmail.de>
++		    Tom de Vries  <tom at codesourcery.com>
++
++	PR testsuite/77411
++	* c-c++-common/ubsan/object-size-9.c: Call __builtin_exit in C++.
++
++2016-09-22  Paolo Carlini  <paolo.carlini at oracle.com>
++
++	PR c++/71979
++	* g++.dg/cpp0x/pr71979.C: New.
++
 +2016-09-21  Uros Bizjak  <ubizjak at gmail.com>
 +
 +	* gcc.c-torture/unsorted/dump-noaddr.x: Remove debug statements.
@@ -2477,7 +3528,7 @@ Index: gcc/testsuite/ChangeLog
  2016-08-22  Release Manager
  
  	* GCC 6.2.0 released.
-@@ -150,8 +382,8 @@
+@@ -150,8 +446,8 @@
  
  2016-08-09  Martin Jambor  <mjambor at suse.cz>
  
@@ -2488,7 +3539,7 @@ Index: gcc/testsuite/ChangeLog
  
  2016-08-09  Richard Biener  <rguenther at suse.de>
  
-@@ -276,8 +508,8 @@
+@@ -276,8 +572,8 @@
  
  2016-07-20  Martin Jambor  <mjambor at suse.cz>
  
@@ -2499,7 +3550,7 @@ Index: gcc/testsuite/ChangeLog
  
  2016-07-19  Jakub Jelinek  <jakub at redhat.com>
  
-@@ -418,7 +650,7 @@
+@@ -418,7 +714,7 @@
  	2016-07-06  Yuri Rumyantsev  <ysrumyan at gmail.com>
  
  	PR tree-optimization/71518
@@ -2613,6 +3664,26 @@ Index: gcc/testsuite/g++.dg/cpp0x/constexpr-recursion3.C
 +static int e = Foo (4);
 +static int g = Foo (6);
 +static int f = Foo (5);
+Index: gcc/testsuite/g++.dg/cpp0x/pr71979.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/cpp0x/pr71979.C	(.../tags/gcc_6_2_0_release)
++++ b/src/gcc/testsuite/g++.dg/cpp0x/pr71979.C	(.../branches/gcc-6-branch)
+@@ -0,0 +1,15 @@
++// PR c++/71979
++// { dg-do compile { target c++11 } }
++
++struct A
++{ 
++  A & operator= (A &);
++};
++
++struct B : A {};   // { dg-error "invalid initialization" }
++
++void foo ()
++{ 
++  B b;
++  b = B ();  // { dg-error "use of deleted" }
++}
 Index: gcc/testsuite/g++.dg/ipa/devirt-52.C
 ===================================================================
 --- a/src/gcc/testsuite/g++.dg/ipa/devirt-52.C	(.../tags/gcc_6_2_0_release)
@@ -2834,6 +3905,52 @@ Index: gcc/testsuite/c-c++-common/tsan/pr68260.c
 +  pthread_join (thr, 0);
 +  return 0;
 +}
+Index: gcc/testsuite/c-c++-common/ubsan/object-size-9.c
+===================================================================
+--- a/src/gcc/testsuite/c-c++-common/ubsan/object-size-9.c	(.../tags/gcc_6_2_0_release)
++++ b/src/gcc/testsuite/c-c++-common/ubsan/object-size-9.c	(.../branches/gcc-6-branch)
+@@ -93,5 +93,9 @@
+ #endif
+   f4 (12);
+   f5 (12);
++#ifdef __cplusplus
++  /* Stack may be smashed by f2/f3 above.  */
++  __builtin_exit (0);
++#endif
+   return 0;
+ }
+Index: gcc/testsuite/c-c++-common/torture/pr77544.c
+===================================================================
+--- a/src/gcc/testsuite/c-c++-common/torture/pr77544.c	(.../tags/gcc_6_2_0_release)
++++ b/src/gcc/testsuite/c-c++-common/torture/pr77544.c	(.../branches/gcc-6-branch)
+@@ -0,0 +1,7 @@
++/* { dg-do compile } */
++
++struct {
++  long a : 17;
++} b;
++int c, d;
++void e() { b.a = d + c + ~(long)(302806U >> 0); }
+Index: gcc/cp/class.c
+===================================================================
+--- a/src/gcc/cp/class.c	(.../tags/gcc_6_2_0_release)
++++ b/src/gcc/cp/class.c	(.../branches/gcc-6-branch)
+@@ -296,12 +296,13 @@
+       /* This can happen when adjust_result_of_qualified_name_lookup can't
+ 	 find a unique base binfo in a call to a member function.  We
+ 	 couldn't give the diagnostic then since we might have been calling
+-	 a static member function, so we do it now.  */
++	 a static member function, so we do it now.  In other cases, eg.
++	 during error recovery (c++/71979), we may not have a base at all.  */
+       if (complain & tf_error)
+ 	{
+ 	  tree base = lookup_base (probe, BINFO_TYPE (d_binfo),
+ 				   ba_unique, NULL, complain);
+-	  gcc_assert (base == error_mark_node);
++	  gcc_assert (base == error_mark_node || !base);
+ 	}
+       return error_mark_node;
+     }
 Index: gcc/cp/constexpr.c
 ===================================================================
 --- a/src/gcc/cp/constexpr.c	(.../tags/gcc_6_2_0_release)
@@ -3052,7 +4169,13 @@ Index: gcc/cp/ChangeLog
 ===================================================================
 --- a/src/gcc/cp/ChangeLog	(.../tags/gcc_6_2_0_release)
 +++ b/src/gcc/cp/ChangeLog	(.../branches/gcc-6-branch)
-@@ -1,3 +1,22 @@
+@@ -1,3 +1,28 @@
++2016-09-22  Paolo Carlini  <paolo.carlini at oracle.com>
++
++	PR c++/71979
++	* class.c (build_base_path): Allow for lookup_base returning
++	NULL_TREE.
++
 +2016-09-16  Jakub Jelinek  <jakub at redhat.com>
 +
 +	Backported from mainline
@@ -3977,6 +5100,62 @@ Index: gcc/fortran/parse.c
    count = 1 + ((cp->ext.omp_atomic & GFC_OMP_ATOMIC_MASK)
  	       == GFC_OMP_ATOMIC_CAPTURE);
  
+Index: gcc/configure.ac
+===================================================================
+--- a/src/gcc/configure.ac	(.../tags/gcc_6_2_0_release)
++++ b/src/gcc/configure.ac	(.../branches/gcc-6-branch)
+@@ -4437,7 +4437,7 @@
+ 	  gcc_cv_as_aix_dwloc, [2,21,0],,
+ 	  [	.dwsect 0xA0000
+ 	Lframe..0:
+-		.vbyte 4,Lframe..0:
++		.vbyte 4,Lframe..0
+ 	  ],,
+ 	  [AC_DEFINE(HAVE_XCOFF_DWARF_EXTRAS, 1,
+ 	    [Define if your assembler supports AIX debug frame section label reference.])])
+Index: gcc/tree-data-ref.c
+===================================================================
+--- a/src/gcc/tree-data-ref.c	(.../tags/gcc_6_2_0_release)
++++ b/src/gcc/tree-data-ref.c	(.../branches/gcc-6-branch)
+@@ -2680,13 +2680,13 @@
+ 
+ 	      if (niter > 0)
+ 		{
+-		  HOST_WIDE_INT tau2 = MIN (FLOOR_DIV (niter - i0, i1),
+-					    FLOOR_DIV (niter - j0, j1));
++		  HOST_WIDE_INT tau2 = MIN (FLOOR_DIV (niter_a - i0, i1),
++					    FLOOR_DIV (niter_b - j0, j1));
+ 		  HOST_WIDE_INT last_conflict = tau2 - (x1 - i0)/i1;
+ 
+ 		  /* If the overlap occurs outside of the bounds of the
+ 		     loop, there is no dependence.  */
+-		  if (x1 >= niter || y1 >= niter)
++		  if (x1 >= niter_a || y1 >= niter_b)
+ 		    {
+ 		      *overlaps_a = conflict_fn_no_dependence ();
+ 		      *overlaps_b = conflict_fn_no_dependence ();
+Index: gcc/tree-vect-data-refs.c
+===================================================================
+--- a/src/gcc/tree-vect-data-refs.c	(.../tags/gcc_6_2_0_release)
++++ b/src/gcc/tree-vect-data-refs.c	(.../branches/gcc-6-branch)
+@@ -2703,10 +2703,17 @@
+       data_reference_p dra = datarefs_copy[i];
+       stmt_vec_info stmtinfo_a = vinfo_for_stmt (DR_STMT (dra));
+       stmt_vec_info lastinfo = NULL;
++      if (! STMT_VINFO_VECTORIZABLE (stmtinfo_a))
++	{
++	  ++i;
++	  continue;
++	}
+       for (i = i + 1; i < datarefs_copy.length (); ++i)
+ 	{
+ 	  data_reference_p drb = datarefs_copy[i];
+ 	  stmt_vec_info stmtinfo_b = vinfo_for_stmt (DR_STMT (drb));
++	  if (! STMT_VINFO_VECTORIZABLE (stmtinfo_b))
++	    break;
+ 
+ 	  /* ???  Imperfect sorting (non-compatible types, non-modulo
+ 	     accesses, same accesses) can lead to a group to be artificially
 Index: gcc/lra-constraints.c
 ===================================================================
 --- a/src/gcc/lra-constraints.c	(.../tags/gcc_6_2_0_release)
@@ -4108,6 +5287,29 @@ Index: gcc/lra-constraints.c
        if (optional_p)
  	{
  	  lra_assert (REG_P (op));
+Index: gcc/gimple-fold.c
+===================================================================
+--- a/src/gcc/gimple-fold.c	(.../tags/gcc_6_2_0_release)
++++ b/src/gcc/gimple-fold.c	(.../branches/gcc-6-branch)
+@@ -5381,14 +5381,15 @@
+   if (domain_type && TYPE_MIN_VALUE (domain_type))
+     {
+       /* Static constructors for variably sized objects makes no sense.  */
+-      gcc_assert (TREE_CODE (TYPE_MIN_VALUE (domain_type)) == INTEGER_CST);
++      if (TREE_CODE (TYPE_MIN_VALUE (domain_type)) != INTEGER_CST)
++	return NULL_TREE;
+       low_bound = wi::to_offset (TYPE_MIN_VALUE (domain_type));
+     }
+   else
+     low_bound = 0;
+   /* Static constructors for variably sized objects makes no sense.  */
+-  gcc_assert (TREE_CODE (TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (ctor))))
+-	      == INTEGER_CST);
++  if (TREE_CODE (TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (ctor)))) != INTEGER_CST)
++    return NULL_TREE;
+   elt_size = wi::to_offset (TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (ctor))));
+ 
+   /* We can handle only constantly sized accesses that are known to not
 Index: gcc/tree-cfgcleanup.c
 ===================================================================
 --- a/src/gcc/tree-cfgcleanup.c	(.../tags/gcc_6_2_0_release)
@@ -4158,7 +5360,33 @@ Index: gcc/tree-ssa-pre.c
 ===================================================================
 --- a/src/gcc/tree-ssa-pre.c	(.../tags/gcc_6_2_0_release)
 +++ b/src/gcc/tree-ssa-pre.c	(.../branches/gcc-6-branch)
-@@ -4335,6 +4335,15 @@
+@@ -2896,7 +2896,24 @@
+       gimple_seq_discard (forced_stmts);
+       return folded;
+     }
+-
++  /* Likewise if we simplified to sth not queued for insertion.  */
++  bool found = false;
++  gsi = gsi_last (forced_stmts);
++  for (; !gsi_end_p (gsi); gsi_prev (&gsi))
++    {
++      gimple *stmt = gsi_stmt (gsi);
++      tree forcedname = gimple_get_lhs (stmt);
++      if (forcedname == folded)
++	{
++	  found = true;
++	  break;
++	}
++    }
++  if (! found)
++    {
++      gimple_seq_discard (forced_stmts);
++      return folded;
++    }
+   gcc_assert (TREE_CODE (folded) == SSA_NAME);
+ 
+   /* If we have any intermediate expressions to the value sets, add them
+@@ -4335,6 +4352,15 @@
  				       lang_hooks.decl_printable_name (fn, 2));
  		    }
  		  gimple_call_set_fndecl (call_stmt, fn);
@@ -570338,6 +571566,33 @@ Index: gcc/config/i386/i386.c
    return std_canonical_va_list_type (type);
  }
  
+@@ -53662,9 +53642,7 @@
+ 	return V4SFmode;
+ 
+     case DFmode:
+-      if (!TARGET_VECTORIZE_DOUBLE)
+-	return word_mode;
+-      else if (TARGET_AVX512F)
++      if (TARGET_AVX512F)
+ 	return V8DFmode;
+       else if (TARGET_AVX && !TARGET_PREFER_AVX128)
+ 	return V4DFmode;
+@@ -53749,9 +53727,14 @@
+   tree vectype = stmt_info ? stmt_vectype (stmt_info) : NULL_TREE;
+   int stmt_cost = ix86_builtin_vectorization_cost (kind, vectype, misalign);
+ 
++  /* Penalize DFmode vector operations for !TARGET_VECTORIZE_DOUBLE.  */
++  if (kind == vector_stmt && !TARGET_VECTORIZE_DOUBLE
++      && vectype && GET_MODE_INNER (TYPE_MODE (vectype)) == DFmode)
++    stmt_cost *= 5;  /* FIXME: The value here is arbitrary.  */
++
+   /* Statements in an inner loop relative to the loop being
+      vectorized are weighted more heavily.  The value here is
+-      arbitrary and could potentially be improved with analysis.  */
++     arbitrary and could potentially be improved with analysis.  */
+   if (where == vect_body && stmt_info && stmt_in_inner_loop_p (stmt_info))
+     count *= 50;  /* FIXME.  */
+ 
 Index: gcc/config/avr/avr.c
 ===================================================================
 --- a/src/gcc/config/avr/avr.c	(.../tags/gcc_6_2_0_release)
@@ -570390,6 +571645,36 @@ Index: gcc/config/avr/avr.c
      case CC_SET_N:
        CC_STATUS_INIT;
        break;
+@@ -10120,6 +10156,7 @@
+           break;
+ 
+ 	case SImode:
++	case DImode:
+ 	  if (AVR_HAVE_MUL)
+             {
+               if (!speed)
+@@ -10145,8 +10182,11 @@
+                 *total = COSTS_N_INSNS (AVR_HAVE_JMP_CALL ? 5 : 4);
+             }
+ 
+-          return true;
++	   if (mode == DImode)
++	     *total *= 2;
+ 
++	   return true;
++
+ 	default:
+ 	  return false;
+ 	}
+@@ -10726,7 +10766,7 @@
+       && (REG_P (XEXP (x, 0))
+           || GET_CODE (XEXP (x, 0)) == SUBREG))
+     {
+-      if (INTVAL (XEXP (x, 1)) >= 61)
++      if (INTVAL (XEXP (x, 1)) > MAX_LD_OFFSET(mode))
+         cost = 18;
+     }
+   else if (CONSTANT_ADDRESS_P (x))
 Index: gcc/config/rs6000/xcoff.h
 ===================================================================
 --- a/src/gcc/config/rs6000/xcoff.h	(.../tags/gcc_6_2_0_release)
@@ -570404,6 +571689,22 @@ Index: gcc/config/rs6000/xcoff.h
  #define ASM_OUTPUT_DWARF_PCREL(FILE,SIZE,LABEL) \
    rs6000_asm_output_dwarf_pcrel ((FILE), (SIZE), (LABEL));
  
+Index: gcc/config/rs6000/rs6000.c
+===================================================================
+--- a/src/gcc/config/rs6000/rs6000.c	(.../tags/gcc_6_2_0_release)
++++ b/src/gcc/config/rs6000/rs6000.c	(.../branches/gcc-6-branch)
+@@ -29217,7 +29217,10 @@
+ 		     (TREE_CODE (decl) == FUNCTION_DECL
+ 		      ? "[DS]" : "[UA]"),
+ 		     NULL);
+-      XSTR (x, 0) = name;
++
++      /* Don't modify name in extern VAR_DECL to include mapping class.  */
++      if (TREE_CODE (decl) == FUNCTION_DECL)
++	XSTR (x, 0) = name;
+     }
+ 
+   if (VTABLE_NAME_P (name))
 Index: gcc/config/rs6000/vsx.md
 ===================================================================
 --- a/src/gcc/config/rs6000/vsx.md	(.../tags/gcc_6_2_0_release)

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/reproducible/gcc-6.git



More information about the Reproducible-commits mailing list