[gcc-6] 365/401: * Update to SVN 20170202 (r245115) from the gcc-6-branch.

Ximin Luo infinity0 at debian.org
Wed Apr 5 15:50:39 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 ae172161950a7ae5a8296c52eb70ae76831b130b
Author: doko <doko at 6ca36cf4-e1d1-0310-8c6f-e303bb2178ca>
Date:   Thu Feb 2 12:53:55 2017 +0000

      * Update to SVN 20170202 (r245115) from the gcc-6-branch.
    
    
    git-svn-id: svn://anonscm.debian.org/gcccvs/branches/sid/gcc-6@9272 6ca36cf4-e1d1-0310-8c6f-e303bb2178ca
---
 debian/changelog                |   11 +-
 debian/patches/gccgo-m68k.diff  |   84 --
 debian/patches/svn-updates.diff | 2872 ++++++++++++++++++++++++++++++++++++++-
 debian/rules.patch              |    1 -
 4 files changed, 2852 insertions(+), 116 deletions(-)

diff --git a/debian/changelog b/debian/changelog
index 76206fe..38be457 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,12 +1,19 @@
 gcc-6 (6.3.0-6) UNRELEASED; urgency=medium
 
+  * Update to SVN 20170202 (r245115) from the gcc-6-branch.
+    - Fix PR libstdc++/78346, PR libstdc++/79195, PR libstdc++/79254,
+      PR target/78478, PR target/79268 (PPC), PR tree-optimization/79034,
+      PR middle-end/78742, PR target/77439 (ARM32), PR c++/79176,
+      PR fortran/70697, PR fortran/70696, PR fortran/79305, PR go/79037,
+      PR go/79281 (closes: #853223).
+      
   [ Aurelien Jarno ]
   * Don't use disable madd4 on MIPS big-endian.
   * Disable lxc1/sxc1 instruction on mips and mipsel.
 
-  * Update the gccgo-m68k patch (Adrian Glaubitz). Closes: #853223.
+  [ Matthias Klose ]
 
- -- Matthias Klose <doko at debian.org>  Wed, 01 Feb 2017 13:21:10 +0100
+ -- Matthias Klose <doko at debian.org>  Thu, 02 Feb 2017 09:44:06 +0100
 
 gcc-6 (6.3.0-5) unstable; urgency=medium
 
diff --git a/debian/patches/gccgo-m68k.diff b/debian/patches/gccgo-m68k.diff
deleted file mode 100644
index aa5339b..0000000
--- a/debian/patches/gccgo-m68k.diff
+++ /dev/null
@@ -1,84 +0,0 @@
-# DP: Fix PR go/79037, proposed golang patch.
-
---- a/src/gcc/go/gofrontend/types.cc.orig	2016-02-03 07:54:41.000000000 +0100
-+++ b/src/gcc/go/gofrontend/types.cc	2017-01-20 17:54:46.460409688 +0100
-@@ -2175,11 +2175,25 @@
-       is_common = true;
-     }
- 
-+  // The current garbage collector requires that the GC symbol be
-+  // aligned to at least a four byte boundary.  See the use of PRECISE
-+  // and LOOP in libgo/runtime/mgc0.c.
-+  int64_t align;
-+  if (!sym_init->type()->backend_type_align(gogo, &align))
-+    go_assert(saw_errors());
-+  if (align < 4)
-+    align = 4;
-+  else
-+    {
-+      // Use default alignment.
-+      align = 0;
-+    }
-+
-   // Since we are building the GC symbol in this package, we must create the
-   // variable before converting the initializer to its backend representation
-   // because the initializer may refer to the GC symbol for this type.
-   this->gc_symbol_var_ =
--    gogo->backend()->implicit_variable(sym_name, sym_btype, false, true, is_common, 0);
-+    gogo->backend()->implicit_variable(sym_name, sym_btype, false, true, is_common, align);
-   if (phash != NULL)
-     *phash = this->gc_symbol_var_;
- 
---- a/src/libgo/runtime/go-unsafe-pointer.c.orig	2015-10-29 19:14:50.000000000 +0100
-+++ b/src/libgo/runtime/go-unsafe-pointer.c	2017-01-20 17:57:12.227392567 +0100
-@@ -36,7 +36,8 @@
-   sizeof REFLECTION - 1
- };
- 
--const uintptr unsafe_Pointer_gc[] = {sizeof(void*), GC_APTR, 0, GC_END};
-+const uintptr unsafe_Pointer_gc[] __attribute__((aligned(4))) =
-+  {sizeof(void*), GC_APTR, 0, GC_END};
- 
- const struct __go_type_descriptor unsafe_Pointer =
- {
---- a/src/libgo/runtime/parfor.c.orig	2015-10-31 01:59:47.000000000 +0100
-+++ b/src/libgo/runtime/parfor.c	2017-01-20 17:58:47.154729980 +0100
-@@ -10,7 +10,7 @@
- struct ParForThread
- {
- 	// the thread's iteration space [32lsb, 32msb)
--	uint64 pos;
-+	uint64 pos __attribute__((aligned(8)));
- 	// stats
- 	uint64 nsteal;
- 	uint64 nstealcnt;
---- a/src/libgo/runtime/runtime.h.orig	2016-02-12 23:10:09.000000000 +0100
-+++ b/src/libgo/runtime/runtime.h	2017-01-21 00:58:07.386595035 +0100
-@@ -431,7 +431,7 @@
- 					// otherwise parfor may return while other threads are still working
- 	ParForThread *thr;		// array of thread descriptors
- 	// stats
--	uint64 nsteal;
-+	uint64 nsteal  __attribute__((aligned(8))); // force alignment for m68k
- 	uint64 nstealcnt;
- 	uint64 nprocyield;
- 	uint64 nosyield;
---- a/src/libgo/runtime/runtime.h.orig	2016-02-12 23:10:09.000000000 +0100
-+++ b/src/libgo/runtime/runtime.h	2017-01-30 18:30:14.188171787 +0100
-@@ -154,14 +154,14 @@
- 	// Futex-based impl treats it as uint32 key,
- 	// while sema-based impl as M* waitm.
- 	// Used to be a union, but unions break precise GC.
--	uintptr	key;
-+	uintptr	key __attribute__((aligned(4)));
- };
- struct	Note
- {
- 	// Futex-based impl treats it as uint32 key,
- 	// while sema-based impl as M* waitm.
- 	// Used to be a union, but unions break precise GC.
--	uintptr	key;
-+	uintptr	key __attribute__((aligned(4)));
- };
- struct String
- {
diff --git a/debian/patches/svn-updates.diff b/debian/patches/svn-updates.diff
index 77939ff..065f66c 100644
--- a/debian/patches/svn-updates.diff
+++ b/debian/patches/svn-updates.diff
@@ -1,10 +1,10 @@
-# DP: updates from the 6 branch upto 20170124 (r244868).
+# DP: updates from the 6 branch upto 20170202 (r245115).
 
 last_update()
 {
 	cat > ${dir}LAST_UPDATED <EOF
-Tue Jan 24 14:43:58 CET 2017
-Tue Jan 24 13:43:58 UTC 2017 (revision 244868)
+Thu Feb  2 09:29:13 CET 2017
+Thu Feb  2 08:29:13 UTC 2017 (revision 245115)
 EOF
 }
 
@@ -147,10 +147,94 @@ Index: libstdc++-v3/include/std/thread
  
      thread(thread&& __t) noexcept
      { swap(__t); }
+Index: libstdc++-v3/include/experimental/array
+===================================================================
+--- a/src/libstdc++-v3/include/experimental/array	(.../tags/gcc_6_3_0_release)
++++ b/src/libstdc++-v3/include/experimental/array	(.../branches/gcc-6-branch)
+@@ -69,9 +69,9 @@
+ template <typename _Dest = void, typename... _Types>
+   constexpr auto
+   make_array(_Types&&... __t)
+-    -> array<conditional_t<is_void_v<_Dest>,
+-                           common_type_t<_Types...>,
+-                           _Dest>,
++    -> array<typename conditional_t<is_void_v<_Dest>,
++				    common_type<_Types...>,
++				    common_type<_Dest>>::type,
+              sizeof...(_Types)>
+   {
+     static_assert(__or_<
+@@ -80,13 +80,12 @@
+                   ::value,
+                   "make_array cannot be used without an explicit target type "
+                   "if any of the types given is a reference_wrapper");
+-    return {{forward<_Types>(__t)...}};
++    return {{ std::forward<_Types>(__t)... }};
+   }
+ 
+ template <typename _Tp, size_t _Nm, size_t... _Idx>
+   constexpr array<remove_cv_t<_Tp>, _Nm>
+-  __to_array(_Tp (&__a)[_Nm],
+-             index_sequence<_Idx...>)
++  __to_array(_Tp (&__a)[_Nm], index_sequence<_Idx...>)
+   {
+     return {{__a[_Idx]...}};
+   }
+@@ -94,6 +93,7 @@
+ template <typename _Tp, size_t _Nm>
+   constexpr array<remove_cv_t<_Tp>, _Nm>
+   to_array(_Tp (&__a)[_Nm])
++  noexcept(is_nothrow_constructible<remove_cv_t<_Tp>, _Tp&>::value)
+   {
+     return __to_array(__a, make_index_sequence<_Nm>{});
+   }
+Index: libstdc++-v3/include/bits/basic_string.h
+===================================================================
+--- a/src/libstdc++-v3/include/bits/basic_string.h	(.../tags/gcc_6_3_0_release)
++++ b/src/libstdc++-v3/include/bits/basic_string.h	(.../branches/gcc-6-branch)
+@@ -570,10 +570,25 @@
+ 	    if (!_Alloc_traits::_S_always_equal() && !_M_is_local()
+ 		&& _M_get_allocator() != __str._M_get_allocator())
+ 	      {
+-		// replacement allocator cannot free existing storage
+-		_M_destroy(_M_allocated_capacity);
+-		_M_data(_M_local_data());
+-		_M_set_length(0);
++		// Propagating allocator cannot free existing storage so must
++		// deallocate it before replacing current allocator.
++		if (__str.size() <= _S_local_capacity)
++		  {
++		    _M_destroy(_M_allocated_capacity);
++		    _M_data(_M_local_data());
++		    _M_set_length(0);
++		  }
++		else
++		  {
++		    const auto __len = __str.size();
++		    auto __alloc = __str._M_get_allocator();
++		    // If this allocation throws there are no effects:
++		    auto __ptr = _Alloc_traits::allocate(__alloc, __len + 1);
++		    _M_destroy(_M_allocated_capacity);
++		    _M_data(__ptr);
++		    _M_capacity(__len);
++		    _M_set_length(__len);
++		  }
+ 	      }
+ 	    std::__alloc_on_copy(_M_get_allocator(), __str._M_get_allocator());
+ 	  }
 Index: libstdc++-v3/include/bits/predefined_ops.h
 ===================================================================
 --- a/src/libstdc++-v3/include/bits/predefined_ops.h	(.../tags/gcc_6_3_0_release)
 +++ b/src/libstdc++-v3/include/bits/predefined_ops.h	(.../branches/gcc-6-branch)
+@@ -24,7 +24,7 @@
+ 
+ /** @file predefined_ops.h
+  *  This is an internal header file, included by other library headers.
+- *  You should not attempt to use it directly.
++ *  You should not attempt to use it directly. @headername{algorithm}
+  */
+ 
+ #ifndef _GLIBCXX_PREDEFINED_OPS_H
 @@ -42,6 +42,7 @@
        operator()(_Iterator1 __it1, _Iterator2 __it2) const
        { return *__it1 < *__it2; }
@@ -229,14 +313,27 @@ Index: libstdc++-v3/include/bits/predefined_ops.h
        _Iter_equals_val(_Value& __value)
  	: _M_value(__value)
        { }
-@@ -204,6 +209,7 @@
+@@ -202,16 +207,17 @@
+   template<typename _Iterator1>
+     struct _Iter_equals_iter
      {
-       typename std::iterator_traits<_Iterator1>::reference _M_ref;
+-      typename std::iterator_traits<_Iterator1>::reference _M_ref;
++      _Iterator1 _M_it1;
  
 +      explicit
        _Iter_equals_iter(_Iterator1 __it1)
- 	: _M_ref(*__it1)
+-	: _M_ref(*__it1)
++	: _M_it1(__it1)
        { }
+ 
+       template<typename _Iterator2>
+ 	bool
+ 	operator()(_Iterator2 __it2)
+-	{ return *__it2 == _M_ref; }
++	{ return *__it2 == *_M_it1; }
+     };
+ 
+   template<typename _Iterator>
 @@ -224,6 +230,7 @@
      {
        _Predicate _M_pred;
@@ -245,6 +342,26 @@ Index: libstdc++-v3/include/bits/predefined_ops.h
        _Iter_pred(_Predicate __pred)
  	: _M_pred(__pred)
        { }
+@@ -264,16 +271,16 @@
+     struct _Iter_comp_to_iter
+     {
+       _Compare _M_comp;
+-      typename std::iterator_traits<_Iterator1>::reference _M_ref;
++      _Iterator1 _M_it1;
+ 
+       _Iter_comp_to_iter(_Compare __comp, _Iterator1 __it1)
+-	: _M_comp(__comp), _M_ref(*__it1)
++	: _M_comp(__comp), _M_it1(__it1)
+       { }
+ 
+       template<typename _Iterator2>
+ 	bool
+ 	operator()(_Iterator2 __it2)
+-	{ return bool(_M_comp(*__it2, _M_ref)); }
++	{ return bool(_M_comp(*__it2, *_M_it1)); }
+     };
+ 
+   template<typename _Compare, typename _Iterator>
 @@ -286,6 +293,7 @@
      {
        _Predicate _M_pred;
@@ -357,7 +474,35 @@ Index: libstdc++-v3/ChangeLog
 ===================================================================
 --- a/src/libstdc++-v3/ChangeLog	(.../tags/gcc_6_3_0_release)
 +++ b/src/libstdc++-v3/ChangeLog	(.../branches/gcc-6-branch)
-@@ -1,3 +1,61 @@
+@@ -1,3 +1,89 @@
++2017-02-01  Jonathan Wakely  <jwakely at redhat.com>
++
++	PR libstdc++/78346
++	* include/bits/predefined_ops.h (_Iter_equals_iter): Store iterator
++	not its referent.
++	(_Iter_comp_to_iter): Likewise.
++	* testsuite/25_algorithms/search/78346.cc: New test.
++
++	PR libstdc++/79195
++	* include/experimental/array (make_array): Use common_type<_Dest>
++	and delay instantiation of common_type until after conditional_t.
++	Qualify std::forward call.
++	(to_array): Add exception specification.
++	* testsuite/experimental/array/make_array.cc: Test argument types
++	without a common type.
++
++	PR libstdc++/79254
++	* include/bits/basic_string.h [_GLIBCXX_USE_CXX11_ABI]
++	(basic_string::operator=(const basic_string&)): If source object is
++	small just deallocate, otherwise perform new allocation before
++	making any changes.
++	* testsuite/21_strings/basic_string/allocator/wchar_t/copy_assign.cc:
++	Test exception-safety of copy assignment when allocator propagates.
++	* testsuite/21_strings/basic_string/allocator/char/copy_assign.cc:
++	Likewise.
++	* testsuite/util/testsuite_allocator.h (uneq_allocator::swap): Make
++	std::swap visible.
++
 +2017-01-22  Gerald Pfeifer  <gerald at pfeifer.com>
 +
 +	Backport from mainline
@@ -419,6 +564,129 @@ Index: libstdc++-v3/ChangeLog
  2016-12-21  Release Manager
  
  	* GCC 6.3.0 released.
+Index: libstdc++-v3/testsuite/25_algorithms/search/78346.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/25_algorithms/search/78346.cc	(.../tags/gcc_6_3_0_release)
++++ b/src/libstdc++-v3/testsuite/25_algorithms/search/78346.cc	(.../branches/gcc-6-branch)
+@@ -0,0 +1,118 @@
++// Copyright (C) 2017 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/>.
++
++// { dg-do run { target c++11 } }
++
++#include <algorithm>
++#include <testsuite_hooks.h>
++
++bool values[100];
++
++unsigned next_id()
++{
++  static unsigned counter = 0;
++  VERIFY(counter < 100);
++  return counter++;
++}
++
++struct value
++{
++  int val;
++  const unsigned id;
++
++  value(int i = 0) : val(i), id(next_id()) { values[id] = true; }
++  value(const value& v) : val(v.val), id(next_id()) { values[id] = true; }
++  value& operator=(const value& v) { val = v.val; return *this; }
++  ~value() { values[id] = false; }
++};
++
++bool operator<(const value& lhs, const value& rhs)
++{
++  if (!values[lhs.id])
++    throw lhs.id;
++  if (!values[rhs.id])
++    throw rhs.id;
++  return lhs.val < rhs.val;
++}
++
++bool operator==(const value& lhs, const value& rhs)
++{
++  if (!values[lhs.id])
++    throw lhs.id;
++  if (!values[rhs.id])
++    throw rhs.id;
++  return lhs.val == rhs.val;
++}
++
++// A forward iterator that fails to meet the requirement that for any
++// two dereferenceable forward iterators, a == b implies &*a == &*b
++struct stashing_iterator
++{
++  typedef std::forward_iterator_tag iterator_category;
++  typedef value value_type;
++  typedef value_type const* pointer;
++  typedef value_type const& reference;
++  typedef std::ptrdiff_t difference_type;
++
++  stashing_iterator() : ptr(), stashed() { }
++  stashing_iterator(pointer p) : ptr(p), stashed() { stash(); }
++  stashing_iterator(const stashing_iterator&) = default;
++  stashing_iterator& operator=(const stashing_iterator&) = default;
++
++  stashing_iterator& operator++()
++  {
++    ++ptr;
++    stash();
++    return *this;
++  }
++
++  stashing_iterator operator++(int)
++  {
++    stashing_iterator i = *this;
++    ++*this;
++    return i;
++  }
++
++  reference operator*() const { return stashed; }
++  pointer operator->() const { return &**this; }
++
++  bool operator==(const stashing_iterator& i) const { return ptr == i.ptr; }
++  bool operator!=(const stashing_iterator& i) const { return !(*this == i); }
++
++private:
++  void stash()
++  {
++    if (ptr)
++      stashed = *ptr;
++  }
++
++  pointer ptr;
++  value_type stashed;
++};
++
++void
++test01()
++{
++  value s[] = { 0, 1, 2, 3, 4, 5 };
++  std::search(s, s+6, stashing_iterator(s), stashing_iterator(s+4));
++}
++
++int
++main()
++{
++  test01();
++}
 Index: libstdc++-v3/testsuite/25_algorithms/sort/78991.cc
 ===================================================================
 --- a/src/libstdc++-v3/testsuite/25_algorithms/sort/78991.cc	(.../tags/gcc_6_3_0_release)
@@ -577,6 +845,190 @@ Index: libstdc++-v3/testsuite/23_containers/list/operations/78389.cc
 +    VERIFY(ax.size() == std::distance(ax.begin(), ax.end()) &&
 +	   bx.size() == std::distance(bx.begin(), bx.end()));
 +}
+Index: libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/copy_assign.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/copy_assign.cc	(.../tags/gcc_6_3_0_release)
++++ b/src/libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/copy_assign.cc	(.../branches/gcc-6-branch)
+@@ -1,4 +1,4 @@
+-// Copyright (C) 2015-2016 Free Software Foundation, Inc.
++// Copyright (C) 2015-2017 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
+@@ -20,6 +20,7 @@
+ #include <string>
+ #include <testsuite_hooks.h>
+ #include <testsuite_allocator.h>
++#include <ext/throw_allocator.h>
+  
+ #if _GLIBCXX_USE_CXX11_ABI
+ using C = wchar_t;
+@@ -100,10 +101,44 @@
+   VERIFY(1 == v5.get_allocator().get_personality());
+ }
+ 
++void test03()
++{
++  // PR libstdc++/79254
++  using throw_alloc = __gnu_cxx::throw_allocator_limit<C>;
++  typedef propagating_allocator<C, true, throw_alloc> alloc_type;
++  typedef std::basic_string<C, traits, alloc_type> test_type;
++  alloc_type a1(1), a2(2);
++  throw_alloc::set_limit(2); // Throw on third allocation (during assignment).
++  const C* s1 = L"a string that is longer than a small string";
++  const C* s2 = L"another string that is longer than a small string";
++  test_type v1(s1, a1);
++  test_type v2(s2, a2);
++  bool caught = false;
++  try {
++    v1 = v2;
++  } catch (__gnu_cxx::forced_error&) {
++    caught = true;
++  }
++  VERIFY( caught );
++  VERIFY( v1 == s1 );
++  VERIFY( v1.get_allocator() == a1 );
++
++  throw_alloc::set_limit(1); // Allow one more allocation (and no more).
++  test_type v3(s1, a1);
++  // No allocation when allocators are equal and capacity is sufficient:
++  VERIFY( v1.capacity() >= v3.size() );
++  v1 = v3;
++  // No allocation when the contents fit in the small-string buffer:
++  v2 = L"sso";
++  v1 = v2;
++  VERIFY( v1.get_allocator() == a2 );
++}
++
+ int main()
+ {
+   test01();
+   test02();
++  test03();
+   return 0;
+ }
+ #else
+Index: libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/copy_assign.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/copy_assign.cc	(.../tags/gcc_6_3_0_release)
++++ b/src/libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/copy_assign.cc	(.../branches/gcc-6-branch)
+@@ -1,4 +1,4 @@
+-// Copyright (C) 2015-2016 Free Software Foundation, Inc.
++// Copyright (C) 2015-2017 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
+@@ -20,6 +20,7 @@
+ #include <string>
+ #include <testsuite_hooks.h>
+ #include <testsuite_allocator.h>
++#include <ext/throw_allocator.h>
+  
+ #if _GLIBCXX_USE_CXX11_ABI
+ using C = char;
+@@ -100,10 +101,44 @@
+   VERIFY(1 == v5.get_allocator().get_personality());
+ }
+ 
++void test03()
++{
++  // PR libstdc++/79254
++  using throw_alloc = __gnu_cxx::throw_allocator_limit<C>;
++  typedef propagating_allocator<C, true, throw_alloc> alloc_type;
++  typedef std::basic_string<C, traits, alloc_type> test_type;
++  alloc_type a1(1), a2(2);
++  throw_alloc::set_limit(2); // Throw on third allocation (during assignment).
++  const C* s1 = "a string that is longer than a small string";
++  const C* s2 = "another string that is longer than a small string";
++  test_type v1(s1, a1);
++  test_type v2(s2, a2);
++  bool caught = false;
++  try {
++    v1 = v2;
++  } catch (__gnu_cxx::forced_error&) {
++    caught = true;
++  }
++  VERIFY( caught );
++  VERIFY( v1 == s1 );
++  VERIFY( v1.get_allocator() == a1 );
++
++  throw_alloc::set_limit(1); // Allow one more allocation (and no more).
++  test_type v3(s1, a1);
++  // No allocation when allocators are equal and capacity is sufficient:
++  VERIFY( v1.capacity() >= v3.size() );
++  v1 = v3;
++  // No allocation when the contents fit in the small-string buffer:
++  v2 = "sso";
++  v1 = v2;
++  VERIFY( v1.get_allocator() == a2 );
++}
++
+ int main()
+ {
+   test01();
+   test02();
++  test03();
+   return 0;
+ }
+ #else
+Index: libstdc++-v3/testsuite/experimental/array/make_array.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/experimental/array/make_array.cc	(.../tags/gcc_6_3_0_release)
++++ b/src/libstdc++-v3/testsuite/experimental/array/make_array.cc	(.../branches/gcc-6-branch)
+@@ -1,7 +1,6 @@
+-// { dg-options "-std=gnu++14" }
+-// { dg-do compile }
++// { dg-do compile { target c++14 } }
+ 
+-// Copyright (C) 2015-2016 Free Software Foundation, Inc.
++// Copyright (C) 2015-2017 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
+@@ -19,6 +18,7 @@
+ // <http://www.gnu.org/licenses/>.
+ 
+ #include <experimental/array>
++#include <functional> // for std::ref and std::reference_wrapper
+ 
+ struct MoveOnly
+ {
+@@ -27,7 +27,7 @@
+   MoveOnly& operator=(MoveOnly&&) = default;
+ };
+ 
+-int main()
++void test01()
+ {
+   char x[42];
+   std::array<char, 42> y = std::experimental::to_array(x);
+@@ -45,3 +45,13 @@
+     = std::experimental::make_array(1,2L, 3);
+   constexpr std::array<MoveOnly, 1> zzz2 = std::experimental::make_array(MoveOnly{});
+ }
++
++void test02()
++{
++  // PR libstdc++/79195
++  struct A {};
++  struct B : A {};
++  struct C : A {};
++  auto arr = std::experimental::make_array<A>(B{}, C{});
++  static_assert(std::is_same<decltype(arr), std::array<A, 2>>::value, "");
++}
+Index: libstdc++-v3/testsuite/util/testsuite_allocator.h
+===================================================================
+--- a/src/libstdc++-v3/testsuite/util/testsuite_allocator.h	(.../tags/gcc_6_3_0_release)
++++ b/src/libstdc++-v3/testsuite/util/testsuite_allocator.h	(.../branches/gcc-6-branch)
+@@ -287,7 +287,7 @@
+ 
+       Alloc& base() { return *this; }
+       const Alloc& base() const  { return *this; }
+-      void swap_base(Alloc& b) { swap(b, this->base()); }
++      void swap_base(Alloc& b) { using std::swap; swap(b, this->base()); }
+ 
+     public:
+       typedef typename check_consistent_alloc_value_type<Tp, Alloc>::value_type
 Index: libstdc++-v3/testsuite/20_util/tuple/cons/allocator_with_any.cc
 ===================================================================
 --- a/src/libstdc++-v3/testsuite/20_util/tuple/cons/allocator_with_any.cc	(.../tags/gcc_6_3_0_release)
@@ -642,12 +1094,7 @@ Index: ChangeLog
 ===================================================================
 --- a/src/ChangeLog	(.../tags/gcc_6_3_0_release)
 +++ b/src/ChangeLog	(.../branches/gcc-6-branch)
-@@ -1,3 +1,16 @@
-+2017-01-24  Uros Bizjak  <ubizjak at gmail.com>
-+
-+	PR target/78478
-+	* config/ax_check_define.m4: New file.
-+
+@@ -1,3 +1,11 @@
 +2017-01-09  Andreas Tobler  <andreast at gcc.gnu.org>
 +
 +	Backport from mainline
@@ -756,6 +1203,19 @@ Index: config/ax_check_define.m4
 +AS_IF([test AS_VAR_GET(ac_var) = yes], [$3], [$4])dnl
 +AS_VAR_POPDEF([ac_var])dnl
 +])# AC_CHECK_FUNC
+Index: config/ChangeLog
+===================================================================
+--- a/src/config/ChangeLog	(.../tags/gcc_6_3_0_release)
++++ b/src/config/ChangeLog	(.../branches/gcc-6-branch)
+@@ -1,3 +1,8 @@
++2017-01-24  Uros Bizjak  <ubizjak at gmail.com>
++
++	PR target/78478
++	* ax_check_define.m4: New file.
++
+ 2016-12-21  Release Manager
+ 
+ 	* GCC 6.3.0 released.
 Index: configure
 ===================================================================
 --- a/src/configure	(.../tags/gcc_6_3_0_release)
@@ -801,6 +1261,30 @@ Index: libgcc/ChangeLog
  2016-12-21  Release Manager
  
  	* GCC 6.3.0 released.
+Index: gcc/tree-vrp.c
+===================================================================
+--- a/src/gcc/tree-vrp.c	(.../tags/gcc_6_3_0_release)
++++ b/src/gcc/tree-vrp.c	(.../branches/gcc-6-branch)
+@@ -7057,8 +7057,7 @@
+ static enum ssa_prop_result
+ vrp_visit_assignment_or_call (gimple *stmt, tree *output_p)
+ {
+-  tree def, lhs;
+-  ssa_op_iter iter;
++  tree lhs;
+   enum gimple_code code = gimple_code (stmt);
+   lhs = gimple_get_lhs (stmt);
+ 
+@@ -7175,8 +7174,7 @@
+       }
+ 
+   /* Every other statement produces no useful ranges.  */
+-  FOR_EACH_SSA_TREE_OPERAND (def, stmt, iter, SSA_OP_DEF)
+-    set_value_range_to_varying (get_value_range (def));
++  set_defs_to_varying (stmt);
+ 
+   return SSA_PROP_VARYING;
+ }
 Index: gcc/c-family/c-opts.c
 ===================================================================
 --- a/src/gcc/c-family/c-opts.c	(.../tags/gcc_6_3_0_release)
@@ -909,7 +1393,7 @@ Index: gcc/DATESTAMP
 +++ b/src/gcc/DATESTAMP	(.../branches/gcc-6-branch)
 @@ -1 +1 @@
 -20161221
-+20170124
++20170202
 Index: gcc/postreload.c
 ===================================================================
 --- a/src/gcc/postreload.c	(.../tags/gcc_6_3_0_release)
@@ -940,6 +1424,26 @@ Index: gcc/tree-ssa-strlen.c
    gcc_assert (get_stridx (lhs) == 0);
    int idx = new_stridx (lhs);
    tree length = NULL_TREE;
+Index: gcc/tree.c
+===================================================================
+--- a/src/gcc/tree.c	(.../tags/gcc_6_3_0_release)
++++ b/src/gcc/tree.c	(.../branches/gcc-6-branch)
+@@ -1675,13 +1675,8 @@
+ bool
+ cst_and_fits_in_hwi (const_tree x)
+ {
+-  if (TREE_CODE (x) != INTEGER_CST)
+-    return false;
+-
+-  if (TYPE_PRECISION (TREE_TYPE (x)) > HOST_BITS_PER_WIDE_INT)
+-    return false;
+-
+-  return TREE_INT_CST_NUNITS (x) == 1;
++  return (TREE_CODE (x) == INTEGER_CST
++	  && (tree_fits_shwi_p (x) || tree_fits_uhwi_p (x)));
+ }
+ 
+ /* Build a newly constructed VECTOR_CST node of length LEN.  */
 Index: gcc/gcc.c
 ===================================================================
 --- a/src/gcc/gcc.c	(.../tags/gcc_6_3_0_release)
@@ -1133,7 +1637,64 @@ Index: gcc/ChangeLog
 ===================================================================
 --- a/src/gcc/ChangeLog	(.../tags/gcc_6_3_0_release)
 +++ b/src/gcc/ChangeLog	(.../branches/gcc-6-branch)
-@@ -1,3 +1,343 @@
+@@ -1,3 +1,400 @@
++2017-01-31  Bill Schmidt  <wschmidt at linux.vnet.ibm.com>
++
++	Backport from mainline
++	2017-01-29  Bill Schmidt  <wschmidt at linux.vnet.ibm.com>
++
++	PR target/79268
++	* config/rs6000/altivec.h (vec_xl): Revise #define.
++	(vec_xst): Likewise.
++
++2017-01-26  Eric Botcazou  <ebotcazou at adacore.com>
++
++	Backport from mainline
++	2017-01-10  Eric Botcazou  <ebotcazou at adacore.com>
++
++	* expr.c (store_field): In the bitfield case, fetch the return value
++	from the registers before applying a single big-endian adjustment.
++	Always do a final load for a BLKmode value not larger than a word.
++
++	2017-01-09  Eric Botcazou  <ebotcazou at adacore.com>
++
++	* expr.c (store_field): In the bitfield case, if the value comes from
++	a function call and is of an aggregate type returned in registers, do
++	not modify the field mode; extract the value in all cases if the mode
++	is BLKmode and the size is not larger than a word.
++
++2017-01-26  Richard Biener  <rguenther at suse.de>
++
++	* tree-vrp.c (vrp_visit_assignment_or_call): Use set_defs_to_varying.
++
++	Backport from mainline
++	2016-01-10  Richard Biener  <rguenther at suse.de>
++
++	PR tree-optimization/79034
++	* tree-call-cdce.c (shrink_wrap_one_built_in_call_with_conds):
++	Propagate out degenerate PHIs in the joiner.
++
++	2016-12-13  Richard Biener  <rguenther at suse.de>
++
++	PR middle-end/78742
++	* tree.c (cst_and_fits_in_hwi): Look if the actual value fits.
++	* tree-object-size.c (compute_builtin_object_size): Use
++	tree_fits_shwi_p.
++	* tree-data-ref.c (initialize_matrix_A): Remove excess assert.
++
++2017-01-26  Richard Biener  <rguenther at suse.de>
++
++	Backport from mainline
++	2016-09-03  Kirill Yukhin  <kirill.yukhin at intel.com>
++
++	* ubsan.c (ubsan_use_new_style_p): Fix check for empty string.
++
++2017-01-24  Eric Botcazou  <ebotcazou at adacore.com>
++
++	PR target/77439
++	* config/arm/arm.c (arm_function_ok_for_sibcall): Add back restriction
++	for long calls with APCS frame and VFP.
++
 +2017-01-24  Uros Bizjak  <ubizjak at gmail.com>
 +
 +	PR target/78478
@@ -1477,6 +2038,800 @@ Index: gcc/ChangeLog
  2016-12-21  Release Manager
  
  	* GCC 6.3.0 released.
+Index: gcc/testsuite/gcc.target/powerpc/vsx-elemrev-4.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/powerpc/vsx-elemrev-4.c	(.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/gcc.target/powerpc/vsx-elemrev-4.c	(.../branches/gcc-6-branch)
+@@ -1,230 +0,0 @@
+-/* { dg-do compile { target { powerpc64-*-* } } } */
+-/* { dg-skip-if "do not override mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
+-/* { dg-options "-mcpu=power9 -O0" } */
+-/* { dg-require-effective-target powerpc_p9vector_ok } */
+-/* { dg-skip-if "" { powerpc*-*-aix* } { "*" } { "" } } */
+-/* { dg-final { scan-assembler-times "lxvx" 40 } } */
+-/* { dg-final { scan-assembler-times "stxvx" 40 } } */
+-
+-#include <altivec.h>
+-
+-extern vector double vd, *vdp;
+-extern vector signed long long vsll, *vsllp;
+-extern vector unsigned long long vull, *vullp;
+-extern vector float vf, *vfp;
+-extern vector signed int vsi, *vsip;
+-extern vector unsigned int vui, *vuip;
+-extern vector signed short vss, *vssp;
+-extern vector unsigned short vus, *vusp;
+-extern vector signed char vsc, *vscp;
+-extern vector unsigned char vuc, *vucp;
+-extern double *dp;
+-extern signed long long *sllp;
+-extern unsigned long long *ullp;
+-extern float *fp;
+-extern signed int *sip;
+-extern unsigned int *uip;
+-extern signed short *ssp;
+-extern unsigned short *usp;
+-extern signed char *scp;
+-extern unsigned char *ucp;
+-
+-void foo0 (void)
+-{
+-  vd = vec_xl (0, vdp);
+-}
+-
+-void foo1 (void)
+-{
+-  vsll = vec_xl (0, vsllp);
+-}
+-
+-void foo2 (void)
+-{
+-  vull = vec_xl (0, vullp);
+-}
+-
+-void foo3 (void)
+-{
+-  vf = vec_xl (0, vfp);
+-}
+-
+-void foo4 (void)
+-{
+-  vsi = vec_xl (0, vsip);
+-}
+-
+-void foo5 (void)
+-{
+-  vui = vec_xl (0, vuip);
+-}
+-
+-void foo6 (void)
+-{
+-  vss = vec_xl (0, vssp);
+-}
+-
+-void foo7 (void)
+-{
+-  vus = vec_xl (0, vusp);
+-}
+-
+-void foo8 (void)
+-{
+-  vsc = vec_xl (0, vscp);
+-}
+-
+-void foo9 (void)
+-{
+-  vuc = vec_xl (0, vucp);
+-}
+-
+-void foo10 (void)
+-{
+-  vec_xst (vd, 0, vdp);
+-}
+-
+-void foo11 (void)
+-{
+-  vec_xst (vsll, 0, vsllp);
+-}
+-
+-void foo12 (void)
+-{
+-  vec_xst (vull, 0, vullp);
+-}
+-
+-void foo13 (void)
+-{
+-  vec_xst (vf, 0, vfp);
+-}
+-
+-void foo14 (void)
+-{
+-  vec_xst (vsi, 0, vsip);
+-}
+-
+-void foo15 (void)
+-{
+-  vec_xst (vui, 0, vuip);
+-}
+-
+-void foo16 (void)
+-{
+-  vec_xst (vss, 0, vssp);
+-}
+-
+-void foo17 (void)
+-{
+-  vec_xst (vus, 0, vusp);
+-}
+-
+-void foo18 (void)
+-{
+-  vec_xst (vsc, 0, vscp);
+-}
+-
+-void foo19 (void)
+-{
+-  vec_xst (vuc, 0, vucp);
+-}
+-
+-void foo20 (void)
+-{
+-  vd = vec_xl (0, dp);
+-}
+-
+-void foo21 (void)
+-{
+-  vsll = vec_xl (0, sllp);
+-}
+-
+-void foo22 (void)
+-{
+-  vull = vec_xl (0, ullp);
+-}
+-
+-void foo23 (void)
+-{
+-  vf = vec_xl (0, fp);
+-}
+-
+-void foo24 (void)
+-{
+-  vsi = vec_xl (0, sip);
+-}
+-
+-void foo25 (void)
+-{
+-  vui = vec_xl (0, uip);
+-}
+-
+-void foo26 (void)
+-{
+-  vss = vec_xl (0, ssp);
+-}
+-
+-void foo27 (void)
+-{
+-  vus = vec_xl (0, usp);
+-}
+-
+-void foo28 (void)
+-{
+-  vsc = vec_xl (0, scp);
+-}
+-
+-void foo29 (void)
+-{
+-  vuc = vec_xl (0, ucp);
+-}
+-
+-void foo30 (void)
+-{
+-  vec_xst (vd, 0, dp);
+-}
+-
+-void foo31 (void)
+-{
+-  vec_xst (vsll, 0, sllp);
+-}
+-
+-void foo32 (void)
+-{
+-  vec_xst (vull, 0, ullp);
+-}
+-
+-void foo33 (void)
+-{
+-  vec_xst (vf, 0, fp);
+-}
+-
+-void foo34 (void)
+-{
+-  vec_xst (vsi, 0, sip);
+-}
+-
+-void foo35 (void)
+-{
+-  vec_xst (vui, 0, uip);
+-}
+-
+-void foo36 (void)
+-{
+-  vec_xst (vss, 0, ssp);
+-}
+-
+-void foo37 (void)
+-{
+-  vec_xst (vus, 0, usp);
+-}
+-
+-void foo38 (void)
+-{
+-  vec_xst (vsc, 0, scp);
+-}
+-
+-void foo39 (void)
+-{
+-  vec_xst (vuc, 0, ucp);
+-}
+Index: gcc/testsuite/gcc.target/powerpc/vsx-elemrev-1.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/powerpc/vsx-elemrev-1.c	(.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/gcc.target/powerpc/vsx-elemrev-1.c	(.../branches/gcc-6-branch)
+@@ -1,143 +0,0 @@
+-/* { dg-do compile { target { powerpc64le*-*-* } } } */
+-/* { dg-skip-if "do not override mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
+-/* { dg-options "-mcpu=power8 -O0" } */
+-/* { dg-final { scan-assembler-times "lxvd2x" 18 } } */
+-/* { dg-final { scan-assembler-times "lxvw4x" 6 } } */
+-/* { dg-final { scan-assembler-times "stxvd2x" 18 } } */
+-/* { dg-final { scan-assembler-times "stxvw4x" 6 } } */
+-/* { dg-final { scan-assembler-times "xxpermdi" 24 } } */
+-
+-#include <altivec.h>
+-
+-extern vector double vd, *vdp;
+-extern vector signed long long vsll, *vsllp;
+-extern vector unsigned long long vull, *vullp;
+-extern vector float vf, *vfp;
+-extern vector signed int vsi, *vsip;
+-extern vector unsigned int vui, *vuip;
+-extern double *dp;
+-extern signed long long *sllp;
+-extern unsigned long long *ullp;
+-extern float *fp;
+-extern signed int *sip;
+-extern unsigned int *uip;
+-
+-void foo0 (void)
+-{
+-  vd = vec_xl (0, vdp);
+-}
+-
+-void foo1 (void)
+-{
+-  vsll = vec_xl (0, vsllp);
+-}
+-
+-void foo2 (void)
+-{
+-  vull = vec_xl (0, vullp);
+-}
+-
+-void foo3 (void)
+-{
+-  vf = vec_xl (0, vfp);
+-}
+-
+-void foo4 (void)
+-{
+-  vsi = vec_xl (0, vsip);
+-}
+-
+-void foo5 (void)
+-{
+-  vui = vec_xl (0, vuip);
+-}
+-
+-void foo6 (void)
+-{
+-  vec_xst (vd, 0, vdp);
+-}
+-
+-void foo7 (void)
+-{
+-  vec_xst (vsll, 0, vsllp);
+-}
+-
+-void foo8 (void)
+-{
+-  vec_xst (vull, 0, vullp);
+-}
+-
+-void foo9 (void)
+-{
+-  vec_xst (vf, 0, vfp);
+-}
+-
+-void foo10 (void)
+-{
+-  vec_xst (vsi, 0, vsip);
+-}
+-
+-void foo11 (void)
+-{
+-  vec_xst (vui, 0, vuip);
+-}
+-
+-void foo20 (void)
+-{
+-  vd = vec_xl (0, dp);
+-}
+-
+-void foo21 (void)
+-{
+-  vsll = vec_xl (0, sllp);
+-}
+-
+-void foo22 (void)
+-{
+-  vull = vec_xl (0, ullp);
+-}
+-
+-void foo23 (void)
+-{
+-  vf = vec_xl (0, fp);
+-}
+-
+-void foo24 (void)
+-{
+-  vsi = vec_xl (0, sip);
+-}
+-
+-void foo25 (void)
+-{
+-  vui = vec_xl (0, uip);
+-}
+-
+-void foo26 (void)
+-{
+-  vec_xst (vd, 0, dp);
+-}
+-
+-void foo27 (void)
+-{
+-  vec_xst (vsll, 0, sllp);
+-}
+-
+-void foo28 (void)
+-{
+-  vec_xst (vull, 0, ullp);
+-}
+-
+-void foo29 (void)
+-{
+-  vec_xst (vf, 0, fp);
+-}
+-
+-void foo30 (void)
+-{
+-  vec_xst (vsi, 0, sip);
+-}
+-
+-void foo31 (void)
+-{
+-  vec_xst (vui, 0, uip);
+-}
+Index: gcc/testsuite/gcc.target/powerpc/vsx-elemrev-2.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/powerpc/vsx-elemrev-2.c	(.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/gcc.target/powerpc/vsx-elemrev-2.c	(.../branches/gcc-6-branch)
+@@ -1,236 +0,0 @@
+-/* { dg-do compile { target { powerpc64le*-*-* } } } */
+-/* { dg-skip-if "do not override mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
+-/* { dg-options "-mcpu=power9 -O0" } */
+-/* { dg-require-effective-target powerpc_p9vector_ok } */
+-/* { dg-skip-if "" { powerpc*-*-aix* } { "*" } { "" } } */
+-/* { dg-final { scan-assembler-times "lxvd2x" 6 } } */
+-/* { dg-final { scan-assembler-times "lxvw4x" 6 } } */
+-/* { dg-final { scan-assembler-times "lxvh8x" 4 } } */
+-/* { dg-final { scan-assembler-times "lxvb16x" 4 } } */
+-/* { dg-final { scan-assembler-times "stxvd2x" 6 } } */
+-/* { dg-final { scan-assembler-times "stxvw4x" 6 } } */
+-/* { dg-final { scan-assembler-times "stxvh8x" 4 } } */
+-/* { dg-final { scan-assembler-times "stxvb16x" 4 } } */
+-
+-#include <altivec.h>
+-
+-extern vector double vd, *vdp;
+-extern vector signed long long vsll, *vsllp;
+-extern vector unsigned long long vull, *vullp;
+-extern vector float vf, *vfp;
+-extern vector signed int vsi, *vsip;
+-extern vector unsigned int vui, *vuip;
+-extern vector signed short vss, *vssp;
+-extern vector unsigned short vus, *vusp;
+-extern vector signed char vsc, *vscp;
+-extern vector unsigned char vuc, *vucp;
+-extern double *dp;
+-extern signed long long *sllp;
+-extern unsigned long long *ullp;
+-extern float *fp;
+-extern signed int *sip;
+-extern unsigned int *uip;
+-extern signed short *ssp;
+-extern unsigned short *usp;
+-extern signed char *scp;
+-extern unsigned char *ucp;
+-
+-void foo0 (void)
+-{
+-  vd = vec_xl (0, vdp);
+-}
+-
+-void foo1 (void)
+-{
+-  vsll = vec_xl (0, vsllp);
+-}
+-
+-void foo2 (void)
+-{
+-  vull = vec_xl (0, vullp);
+-}
+-
+-void foo3 (void)
+-{
+-  vf = vec_xl (0, vfp);
+-}
+-
+-void foo4 (void)
+-{
+-  vsi = vec_xl (0, vsip);
+-}
+-
+-void foo5 (void)
+-{
+-  vui = vec_xl (0, vuip);
+-}
+-
+-void foo6 (void)
+-{
+-  vss = vec_xl (0, vssp);
+-}
+-
+-void foo7 (void)
+-{
+-  vus = vec_xl (0, vusp);
+-}
+-
+-void foo8 (void)
+-{
+-  vsc = vec_xl (0, vscp);
+-}
+-
+-void foo9 (void)
+-{
+-  vuc = vec_xl (0, vucp);
+-}
+-
+-void foo10 (void)
+-{
+-  vec_xst (vd, 0, vdp);
+-}
+-
+-void foo11 (void)
+-{
+-  vec_xst (vsll, 0, vsllp);
+-}
+-
+-void foo12 (void)
+-{
+-  vec_xst (vull, 0, vullp);
+-}
+-
+-void foo13 (void)
+-{
+-  vec_xst (vf, 0, vfp);
+-}
+-
+-void foo14 (void)
+-{
+-  vec_xst (vsi, 0, vsip);
+-}
+-
+-void foo15 (void)
+-{
+-  vec_xst (vui, 0, vuip);
+-}
+-
+-void foo16 (void)
+-{
+-  vec_xst (vss, 0, vssp);
+-}
+-
+-void foo17 (void)
+-{
+-  vec_xst (vus, 0, vusp);
+-}
+-
+-void foo18 (void)
+-{
+-  vec_xst (vsc, 0, vscp);
+-}
+-
+-void foo19 (void)
+-{
+-  vec_xst (vuc, 0, vucp);
+-}
+-
+-void foo20 (void)
+-{
+-  vd = vec_xl (0, dp);
+-}
+-
+-void foo21 (void)
+-{
+-  vsll = vec_xl (0, sllp);
+-}
+-
+-void foo22 (void)
+-{
+-  vull = vec_xl (0, ullp);
+-}
+-
+-void foo23 (void)
+-{
+-  vf = vec_xl (0, fp);
+-}
+-
+-void foo24 (void)
+-{
+-  vsi = vec_xl (0, sip);
+-}
+-
+-void foo25 (void)
+-{
+-  vui = vec_xl (0, uip);
+-}
+-
+-void foo26 (void)
+-{
+-  vss = vec_xl (0, ssp);
+-}
+-
+-void foo27 (void)
+-{
+-  vus = vec_xl (0, usp);
+-}
+-
+-void foo28 (void)
+-{
+-  vsc = vec_xl (0, scp);
+-}
+-
+-void foo29 (void)
+-{
+-  vuc = vec_xl (0, ucp);
+-}
+-
+-void foo30 (void)
+-{
+-  vec_xst (vd, 0, dp);
+-}
+-
+-void foo31 (void)
+-{
+-  vec_xst (vsll, 0, sllp);
+-}
+-
+-void foo32 (void)
+-{
+-  vec_xst (vull, 0, ullp);
+-}
+-
+-void foo33 (void)
+-{
+-  vec_xst (vf, 0, fp);
+-}
+-
+-void foo34 (void)
+-{
+-  vec_xst (vsi, 0, sip);
+-}
+-
+-void foo35 (void)
+-{
+-  vec_xst (vui, 0, uip);
+-}
+-
+-void foo36 (void)
+-{
+-  vec_xst (vss, 0, ssp);
+-}
+-
+-void foo37 (void)
+-{
+-  vec_xst (vus, 0, usp);
+-}
+-
+-void foo38 (void)
+-{
+-  vec_xst (vsc, 0, scp);
+-}
+-
+-void foo39 (void)
+-{
+-  vec_xst (vuc, 0, ucp);
+-}
+Index: gcc/testsuite/gcc.target/powerpc/vsx-elemrev-3.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/powerpc/vsx-elemrev-3.c	(.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/gcc.target/powerpc/vsx-elemrev-3.c	(.../branches/gcc-6-branch)
+@@ -1,142 +0,0 @@
+-/* { dg-do compile { target { powerpc64-*-* } } } */
+-/* { dg-skip-if "do not override mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
+-/* { dg-options "-mcpu=power8 -O0" } */
+-/* { dg-final { scan-assembler-times "lxvd2x" 16 } } */
+-/* { dg-final { scan-assembler-times "lxvw4x" 8 } } */
+-/* { dg-final { scan-assembler-times "stxvd2x" 16 } } */
+-/* { dg-final { scan-assembler-times "stxvw4x" 8 } } */
+-
+-#include <altivec.h>
+-
+-extern vector double vd, *vdp;
+-extern vector signed long long vsll, *vsllp;
+-extern vector unsigned long long vull, *vullp;
+-extern vector float vf, *vfp;
+-extern vector signed int vsi, *vsip;
+-extern vector unsigned int vui, *vuip;
+-extern double *dp;
+-extern signed long long *sllp;
+-extern unsigned long long *ullp;
+-extern float *fp;
+-extern signed int *sip;
+-extern unsigned int *uip;
+-
+-void foo0 (void)
+-{
+-  vd = vec_xl (0, vdp);
+-}
+-
+-void foo1 (void)
+-{
+-  vsll = vec_xl (0, vsllp);
+-}
+-
+-void foo2 (void)
+-{
+-  vull = vec_xl (0, vullp);
+-}
+-
+-void foo3 (void)
+-{
+-  vf = vec_xl (0, vfp);
+-}
+-
+-void foo4 (void)
+-{
+-  vsi = vec_xl (0, vsip);
+-}
+-
+-void foo5 (void)
+-{
+-  vui = vec_xl (0, vuip);
+-}
+-
+-void foo6 (void)
+-{
+-  vec_xst (vd, 0, vdp);
+-}
+-
+-void foo7 (void)
+-{
+-  vec_xst (vsll, 0, vsllp);
+-}
+-
+-void foo8 (void)
+-{
+-  vec_xst (vull, 0, vullp);
+-}
+-
+-void foo9 (void)
+-{
+-  vec_xst (vf, 0, vfp);
+-}
+-
+-void foo10 (void)
+-{
+-  vec_xst (vsi, 0, vsip);
+-}
+-
+-void foo11 (void)
+-{
+-  vec_xst (vui, 0, vuip);
+-}
+-
+-void foo20 (void)
+-{
+-  vd = vec_xl (0, dp);
+-}
+-
+-void foo21 (void)
+-{
+-  vsll = vec_xl (0, sllp);
+-}
+-
+-void foo22 (void)
+-{
+-  vull = vec_xl (0, ullp);
+-}
+-
+-void foo23 (void)
+-{
+-  vf = vec_xl (0, fp);
+-}
+-
+-void foo24 (void)
+-{
+-  vsi = vec_xl (0, sip);
+-}
+-
+-void foo25 (void)
+-{
+-  vui = vec_xl (0, uip);
+-}
+-
+-void foo26 (void)
+-{
+-  vec_xst (vd, 0, dp);
+-}
+-
+-void foo27 (void)
+-{
+-  vec_xst (vsll, 0, sllp);
+-}
+-
+-void foo28 (void)
+-{
+-  vec_xst (vull, 0, ullp);
+-}
+-
+-void foo29 (void)
+-{
+-  vec_xst (vf, 0, fp);
+-}
+-
+-void foo30 (void)
+-{
+-  vec_xst (vsi, 0, sip);
+-}
+-
+-void foo31 (void)
+-{
+-  vec_xst (vui, 0, uip);
+-}
+Index: gcc/testsuite/gcc.target/powerpc/pr79268.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/powerpc/pr79268.c	(.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/gcc.target/powerpc/pr79268.c	(.../branches/gcc-6-branch)
+@@ -0,0 +1,18 @@
++/* { dg-do compile { target { powerpc64le-*-* } } } */
++/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
++/* { dg-options "-mcpu=power8 -O3 " } */
++
++/* Verify that vec_xl and vec_xst accept vector pixel parameters.  */
++
++/* Test case to resolve PR79268.  */
++
++#include <altivec.h>
++
++vector pixel a;
++
++vector pixel
++pr79268 (vector pixel *x)
++{
++  vec_xst (a, 0, x);
++  return vec_xl (0, x);
++}
 Index: gcc/testsuite/gcc.target/powerpc/swaps-p8-26.c
 ===================================================================
 --- a/src/gcc/testsuite/gcc.target/powerpc/swaps-p8-26.c	(.../tags/gcc_6_3_0_release)
@@ -1606,6 +2961,43 @@ Index: gcc/testsuite/gcc.target/arm/pr78255-1.c
 +
 +  return 0;
 +}
+Index: gcc/testsuite/gcc.target/arm/vfp-longcall-apcs.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/arm/vfp-longcall-apcs.c	(.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/gcc.target/arm/vfp-longcall-apcs.c	(.../branches/gcc-6-branch)
+@@ -0,0 +1,32 @@
++/* { dg-do run } */
++/* { dg-options "-mapcs-frame -O -foptimize-sibling-calls -ffunction-sections" } */
++
++extern void abort (void);
++
++static __attribute__((noclone, noinline, long_call))
++int foo (int a, int b, int c, int d, double i)
++{
++  return a;
++}
++
++static __attribute__((noclone, noinline))
++double baz (double i)
++{
++  return i;
++}
++
++static __attribute__((noclone, noinline))
++int bar (int a, int b, int c, int d, double i, double j)
++{
++  double l = baz (i) * j;
++  return foo (a, b, c, d, l);
++}
++
++int
++main (void)
++{
++  if (bar (0, 0, 0, 0, 0.0, 0.0) != 0)
++    abort ();
++
++  return 0;
++}
 Index: gcc/testsuite/gcc.target/arm/pr78255-2.c
 ===================================================================
 --- a/src/gcc/testsuite/gcc.target/arm/pr78255-2.c	(.../tags/gcc_6_3_0_release)
@@ -1779,6 +3171,36 @@ Index: gcc/testsuite/gcc.target/aarch64/eh_return.c
 +    exit (1);
 +  exit (0);
 +}
+Index: gcc/testsuite/g++.old-deja/g++.abi/vtable2.C
+===================================================================
+--- a/src/gcc/testsuite/g++.old-deja/g++.abi/vtable2.C	(.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/g++.old-deja/g++.abi/vtable2.C	(.../branches/gcc-6-branch)
+@@ -142,10 +142,24 @@
+ #define INC_VDATA(A,N)	((A) += 2*(N))
+ #endif
+ #else
++// HPPA uses function pointers but they point to function descriptors.
++#if defined __hppa__
++#ifdef __hpux__
++#ifdef _LP64
++#define CMP_VPTR(A, B)	(*(unsigned long *)(*(A)+16) == *(unsigned long *)((unsigned long)(B)+16))
++#else
+ #define CMP_VPTR(A, B)	(*(A) == (ptrdiff_t)(B))
++#endif /* _LP64 */
++#else
++extern "C" { unsigned int __canonicalize_funcptr_for_compare (void*); }
++#define CMP_VPTR(A, B) (__canonicalize_funcptr_for_compare(*(void **)A) == __canonicalize_funcptr_for_compare((void *)B))
++#endif /* __hpux__ */
++#else
++#define CMP_VPTR(A, B)	(*(A) == (ptrdiff_t)(B))
++#endif /* __hppa__ */
+ #define INC_VPTR(A)	((A) += 1)
+ #define INC_VDATA(A,N)	((A) += (N))
+-#endif
++#endif /* __ia64__ */
+ 
+ int main ()
+ {
 Index: gcc/testsuite/gfortran.dg/gomp/pr78866-1.f90
 ===================================================================
 --- a/src/gcc/testsuite/gfortran.dg/gomp/pr78866-1.f90	(.../tags/gcc_6_3_0_release)
@@ -1830,6 +3252,26 @@ Index: gcc/testsuite/gfortran.dg/gomp/map-1.f90
    !$omp end target
  
    !$omp target map(aas(5:7))
+Index: gcc/testsuite/gfortran.dg/coarray_event_1.f08
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/coarray_event_1.f08	(.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/gfortran.dg/coarray_event_1.f08	(.../branches/gcc-6-branch)
+@@ -0,0 +1,15 @@
++! { dg-do compile }
++! { dg-options "-fcoarray=lib -lcaf_single" }
++
++! Check that pr70696 is really fixed.
++
++  use iso_fortran_env
++  type(event_type) :: x[*]
++
++  ! exchange must not be called or the link problem before the patch
++  ! does not occur.
++contains
++  subroutine exchange
++    event post (x[1])
++  end subroutine
++end 
 Index: gcc/testsuite/gfortran.dg/fimplicit_none_2.f90
 ===================================================================
 --- a/src/gcc/testsuite/gfortran.dg/fimplicit_none_2.f90	(.../tags/gcc_6_3_0_release)
@@ -1841,6 +3283,24 @@ Index: gcc/testsuite/gfortran.dg/fimplicit_none_2.f90
 +program p
 +   character(*), parameter :: z(2) = [character(n) :: 'x', 'y'] ! { dg-error "Scalar INTEGER expression expected" }
 +end
+Index: gcc/testsuite/gfortran.dg/coarray_43.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/coarray_43.f90	(.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/gfortran.dg/coarray_43.f90	(.../branches/gcc-6-branch)
+@@ -0,0 +1,13 @@
++! { dg-do link }
++! { dg-options "-fcoarray=lib -lcaf_single" }
++
++program coarray_43
++  implicit none
++  integer, parameter :: STR_LEN = 50
++  character(len=STR_LEN) :: str[*]
++  integer :: pos
++  write(str,"(2(a,i2))") "Greetings from image ",this_image()," of ",num_images()
++  block
++    pos = scan(str[5], set="123456789")
++  end block
++end program
 Index: gcc/testsuite/gfortran.dg/fimplicit_none_1.f90
 ===================================================================
 --- a/src/gcc/testsuite/gfortran.dg/fimplicit_none_1.f90	(.../tags/gcc_6_3_0_release)
@@ -1852,6 +3312,48 @@ Index: gcc/testsuite/gfortran.dg/fimplicit_none_1.f90
 +   character(n) :: c  ! { dg-error "Scalar INTEGER expression expected" }
 +   c = 'c' ! { dg-error "has no IMPLICIT type" }
 +end
+Index: gcc/testsuite/gfortran.dg/coarray/event_3.f08
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/coarray/event_3.f08	(.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/gfortran.dg/coarray/event_3.f08	(.../branches/gcc-6-branch)
+@@ -0,0 +1,20 @@
++! { dg-do run }
++!
++! Check PR fortran/70696 is fixed.
++
++program global_event
++  use iso_fortran_env , only : event_type
++  implicit none
++  type(event_type) :: x[*]
++  
++  call exchange
++  contains
++    subroutine exchange
++      integer :: cnt
++      event post(x[1])
++      event post(x[1])
++      call event_query(x, cnt)
++      if (cnt /= 2) error stop 1
++      event wait(x, until_count=2)
++    end subroutine
++end 
+Index: gcc/testsuite/gfortran.dg/coarray/event_4.f08
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/coarray/event_4.f08	(.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/gfortran.dg/coarray/event_4.f08	(.../branches/gcc-6-branch)
+@@ -0,0 +1,12 @@
++! { dg-do run }
++!
++! Check that pr 70697 is fixed.
++
++program event_4
++  use iso_fortran_env
++  integer :: nc(1)
++  type(event_type) done[*]
++  nc(1) = 1
++  event post(done[1])
++  event wait(done,until_count=nc(1))
++end
 Index: gcc/testsuite/gcc.c-torture/execute/pr79121.c
 ===================================================================
 --- a/src/gcc/testsuite/gcc.c-torture/execute/pr79121.c	(.../tags/gcc_6_3_0_release)
@@ -1968,6 +3470,165 @@ Index: gcc/testsuite/gcc.c-torture/execute/pr78617.c
 +    __builtin_abort ();
 +  return 0;
 +}
+Index: gcc/testsuite/gnat.dg/array28.adb
+===================================================================
+--- a/src/gcc/testsuite/gnat.dg/array28.adb	(.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/gnat.dg/array28.adb	(.../branches/gcc-6-branch)
+@@ -0,0 +1,22 @@
++-- { dg-do run }
++-- { dg-options "-O" }
++
++with Array28_Pkg; use Array28_Pkg;
++
++procedure Array28 is
++
++  function Get return Outer_type is
++    Ret : Outer_Type;
++  begin
++    Ret (Inner_Type'Range) := F;
++    return Ret;
++  end;
++
++  A : Outer_Type := Get;
++  B : Inner_Type := A (Inner_Type'Range);
++
++begin
++  if B /= "12345" then
++    raise Program_Error;
++  end if;
++end;
+Index: gcc/testsuite/gnat.dg/array26_pkg.adb
+===================================================================
+--- a/src/gcc/testsuite/gnat.dg/array26_pkg.adb	(.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/gnat.dg/array26_pkg.adb	(.../branches/gcc-6-branch)
+@@ -0,0 +1,8 @@
++package body Array26_Pkg is
++
++  function F return Inner_Type is
++  begin
++    return "123";
++  end;
++
++end Array26_Pkg;
+Index: gcc/testsuite/gnat.dg/array26_pkg.ads
+===================================================================
+--- a/src/gcc/testsuite/gnat.dg/array26_pkg.ads	(.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/gnat.dg/array26_pkg.ads	(.../branches/gcc-6-branch)
+@@ -0,0 +1,8 @@
++package Array26_Pkg is
++
++  subtype Outer_Type is String (1 .. 4);
++  subtype Inner_Type is String (1 .. 3);
++
++  function F return Inner_Type;
++
++end Array26_Pkg;
+Index: gcc/testsuite/gnat.dg/array27_pkg.adb
+===================================================================
+--- a/src/gcc/testsuite/gnat.dg/array27_pkg.adb	(.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/gnat.dg/array27_pkg.adb	(.../branches/gcc-6-branch)
+@@ -0,0 +1,8 @@
++package body Array27_Pkg is
++
++  function F return Inner_Type is
++  begin
++    return "123";
++  end;
++
++end Array27_Pkg;
+Index: gcc/testsuite/gnat.dg/array27_pkg.ads
+===================================================================
+--- a/src/gcc/testsuite/gnat.dg/array27_pkg.ads	(.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/gnat.dg/array27_pkg.ads	(.../branches/gcc-6-branch)
+@@ -0,0 +1,8 @@
++package Array27_Pkg is
++
++  subtype Outer_Type is String (1 .. 8);
++  subtype Inner_Type is String (1 .. 3);
++
++  function F return Inner_Type;
++
++end Array27_Pkg;
+Index: gcc/testsuite/gnat.dg/array26.adb
+===================================================================
+--- a/src/gcc/testsuite/gnat.dg/array26.adb	(.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/gnat.dg/array26.adb	(.../branches/gcc-6-branch)
+@@ -0,0 +1,22 @@
++-- { dg-do run }
++-- { dg-options "-O" }
++
++with Array26_Pkg; use Array26_Pkg;
++
++procedure Array26 is
++
++  function Get return Outer_type is
++    Ret : Outer_Type;
++  begin
++    Ret (Inner_Type'Range) := F;
++    return Ret;
++  end;
++
++  A : Outer_Type := Get;
++  B : Inner_Type := A (Inner_Type'Range);
++
++begin
++  if B /= "123" then
++    raise Program_Error;
++  end if;
++end;
+Index: gcc/testsuite/gnat.dg/array27.adb
+===================================================================
+--- a/src/gcc/testsuite/gnat.dg/array27.adb	(.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/gnat.dg/array27.adb	(.../branches/gcc-6-branch)
+@@ -0,0 +1,22 @@
++-- { dg-do run }
++-- { dg-options "-O" }
++
++with Array27_Pkg; use Array27_Pkg;
++
++procedure Array27 is
++
++  function Get return Outer_type is
++    Ret : Outer_Type;
++  begin
++    Ret (Inner_Type'Range) := F;
++    return Ret;
++  end;
++
++  A : Outer_Type := Get;
++  B : Inner_Type := A (Inner_Type'Range);
++
++begin
++    if B /= "123" then
++    raise Program_Error;
++  end if;
++end;
+Index: gcc/testsuite/gnat.dg/array28_pkg.adb
+===================================================================
+--- a/src/gcc/testsuite/gnat.dg/array28_pkg.adb	(.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/gnat.dg/array28_pkg.adb	(.../branches/gcc-6-branch)
+@@ -0,0 +1,8 @@
++package body Array28_Pkg is
++
++  function F return Inner_Type is
++  begin
++    return "12345";
++  end;
++
++end Array28_Pkg;
+Index: gcc/testsuite/gnat.dg/array28_pkg.ads
+===================================================================
+--- a/src/gcc/testsuite/gnat.dg/array28_pkg.ads	(.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/gnat.dg/array28_pkg.ads	(.../branches/gcc-6-branch)
+@@ -0,0 +1,8 @@
++package Array28_Pkg is
++
++  subtype Outer_Type is String (1 .. 8);
++  subtype Inner_Type is String (1 .. 5);
++
++  function F return Inner_Type;
++
++end Array28_Pkg;
 Index: gcc/testsuite/gcc.dg/goacc/loop-processing-1.c
 ===================================================================
 --- a/src/gcc/testsuite/gcc.dg/goacc/loop-processing-1.c	(.../tags/gcc_6_3_0_release)
@@ -2074,6 +3735,31 @@ Index: gcc/testsuite/gcc.dg/torture/pr71055.c
 +  foo (&u);
 +  return 0;
 +}
+Index: gcc/testsuite/gcc.dg/torture/pr78742.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/torture/pr78742.c	(.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/gcc.dg/torture/pr78742.c	(.../branches/gcc-6-branch)
+@@ -0,0 +1,20 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target int128 } */
++
++void foo();
++
++void func()
++{
++  int m;
++
++  int tab[m];
++
++  __int128 j;
++  for(; j; j++)
++    {
++      tab[j] = 0;
++      tab[j+1] = 0;
++    }
++
++  foo();
++}
 Index: gcc/testsuite/gcc.dg/tree-ssa/pr78886.c
 ===================================================================
 --- a/src/gcc/testsuite/gcc.dg/tree-ssa/pr78886.c	(.../tags/gcc_6_3_0_release)
@@ -2125,7 +3811,80 @@ Index: gcc/testsuite/ChangeLog
 ===================================================================
 --- a/src/gcc/testsuite/ChangeLog	(.../tags/gcc_6_3_0_release)
 +++ b/src/gcc/testsuite/ChangeLog	(.../branches/gcc-6-branch)
-@@ -1,3 +1,207 @@
+@@ -1,3 +1,280 @@
++2017-01-31  Bill Schmidt  <wschmidt at linux.vnet.ibm.com>
++
++	Backport from mainline
++	2017-01-29  Bill Schmidt  <wschmidt at linux.vnet.ibm.com>
++
++	PR target/79268
++	* gcc.target/powerpc/pr79268.c: New file.
++	* gcc.target/powerpc/vsx-elemrev-1.c: Delete file.
++	* gcc.target/powerpc/vsx-elemrev-2.c: Likewise.
++	* gcc.target/powerpc/vsx-elemrev-3.c: Likewise.
++	* gcc.target/powerpc/vsx-elemrev-4.c: Likewise.
++
++2017-01-29  Andre Vehreschild  <vehre at gcc.gnu.org>
++
++	Backport from trunk
++	2017-01-13  Andre Vehreschild  <vehre at gcc.gnu.org>
++
++	PR fortran/70697
++	* gfortran.dg/coarray/event_4.f08: New test.
++
++2017-01-29  Andre Vehreschild  <vehre at gcc.gnu.org>
++
++	Backport from trunk
++	2017-01-19  Andre Vehreschild  <vehre at gcc.gnu.org>
++
++	PR fortran/70696
++	* gfortran.dg/coarray_43.f90: New test.
++
++	2017-01-18  Andre Vehreschild  <vehre at gcc.gnu.org>
++
++	PR fortran/70696
++	* gfortran.dg/coarray_event_1.f08: New test.
++
++	2017-01-13  Andre Vehreschild  <vehre at gcc.gnu.org>
++
++	PR fortran/70696
++	* gfortran.dg/coarray/event_3.f08: New test.
++
++2017-01-28  John David Anglin  <danglin at gcc.gnu.org>
++
++	PR testsuite/70583
++	* g++.old-deja/g++.abi/vtable2.C: Adjust CMP_VPTR define on hppa.
++
++2017-01-26  Eric Botcazou  <ebotcazou at adacore.com>
++
++	2017-01-09  Eric Botcazou  <ebotcazou at adacore.com>
++
++	* g++.dg/opt/call2.C: New test.
++	* g++.dg/opt/call3.C: Likewise.
++	* gnat.dg/array26.adb: New test.
++	* gnat.dg/array26_pkg.ad[sb]: New helper.
++	* gnat.dg/array27.adb: New test.
++	* gnat.dg/array27_pkg.ad[sb]: New helper.
++	* gnat.dg/array28.adb: New test.
++	* gnat.dg/array28_pkg.ad[sb]: New helper.
++
++2017-01-26  Richard Biener  <rguenther at suse.de>
++
++	Backport from mainline
++	2016-01-10  Richard Biener  <rguenther at suse.de>
++
++	PR tree-optimization/79034
++	* g++.dg/torture/pr79034.C: New testcase.
++
++	2016-12-13  Richard Biener  <rguenther at suse.de>
++
++	PR middle-end/78742
++	* gcc.dg/torture/pr78742.c: New testcase.
++
++2017-01-24  Eric Botcazou  <ebotcazou at adacore.com>
++
++	* gcc.target/arm/vfp-longcall-apcs.c: New test.
++
 +2017-01-23  Martin Liska  <mliska at suse.cz>
 +
 +	Backport from mainline
@@ -2333,6 +4092,104 @@ Index: gcc/testsuite/ChangeLog
  2016-12-21  Release Manager
  
  	* GCC 6.3.0 released.
+Index: gcc/testsuite/g++.dg/opt/call3.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/opt/call3.C	(.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/g++.dg/opt/call3.C	(.../branches/gcc-6-branch)
+@@ -0,0 +1,33 @@
++// { dg-do run }
++// { dg-options "-O" }
++
++struct Foo
++{
++  Foo() : a(1), c('a') {}
++  short int a;
++  char c;
++};
++
++static Foo copy_foo(Foo) __attribute__((noinline, noclone));
++
++static Foo copy_foo(Foo A)
++{
++  return A;
++}
++
++struct Bar : Foo
++{
++  Bar(Foo t) : Foo(copy_foo(t)) {}
++};
++
++Foo F;
++
++int main (void)
++{
++  Bar B (F);
++
++  if (B.a != 1 || B.c != 'a')
++    __builtin_abort ();
++
++  return 0;
++}
+Index: gcc/testsuite/g++.dg/opt/declone3.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/opt/declone3.C	(.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/g++.dg/opt/declone3.C	(.../branches/gcc-6-branch)
+@@ -0,0 +1,16 @@
++// PR c++/79176
++// { dg-do compile { target c++11 } }
++// { dg-options "-flto -Os" }
++
++struct A {};
++struct Object {
++  virtual bool m_fn1();
++  virtual ~Object();
++};
++struct Item : Object, virtual A {
++  ~Item() {
++    [] {};
++  }
++  bool m_fn1();
++};
++bool Item::m_fn1() {}
+Index: gcc/testsuite/g++.dg/opt/call2.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/opt/call2.C	(.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/g++.dg/opt/call2.C	(.../branches/gcc-6-branch)
+@@ -0,0 +1,34 @@
++// { dg-do run }
++// { dg-options "-O" }
++
++struct Foo
++{
++  Foo() : a(1), b(1), c('a') {}
++  int a;
++  int b;
++  char c;
++};
++
++static Foo copy_foo(Foo) __attribute__((noinline, noclone));
++
++static Foo copy_foo(Foo A)
++{
++  return A;
++}
++
++struct Bar : Foo
++{
++  Bar(Foo t) : Foo(copy_foo(t)) {}
++};
++
++Foo F;
++
++int main (void)
++{
++  Bar B (F);
++
++  if (B.a != 1 || B.b != 1 || B.c != 'a')
++    __builtin_abort ();
++
++  return 0;
++}
 Index: gcc/testsuite/g++.dg/pr77812.C
 ===================================================================
 --- a/src/gcc/testsuite/g++.dg/pr77812.C	(.../tags/gcc_6_3_0_release)
@@ -2458,6 +4315,63 @@ Index: gcc/testsuite/g++.dg/cpp0x/range-for33.C
 +{
 +  for (A a : { v }) {};
 +}
+Index: gcc/testsuite/g++.dg/torture/pr79034.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/torture/pr79034.C	(.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/g++.dg/torture/pr79034.C	(.../branches/gcc-6-branch)
+@@ -0,0 +1,52 @@
++/* { dg-do compile } */
++
++extern "C" {
++    float sqrtf(float);
++}
++
++class T {
++public:
++    float floats[1];
++
++    inline float length() const {
++	return sqrtf(floats[0]);
++    }
++};
++
++void destruct(void *);
++
++class Container {
++
++    T Ts[1];
++
++public:
++    ~Container() {
++	destruct((void *)Ts);
++    }
++
++    T& operator[](int n) {
++	return Ts[0];
++    }
++};
++
++void fill(Container&);
++
++void doit()
++{
++  Container data;
++  float max = 10;
++
++  int i, j, k;
++
++  for (i = 0; i < 10; i++) {
++      for (j = 1; j < 10; j++) {
++	  if (max < 5)
++	    break;
++	  fill( data);
++	  max = data[0].length();
++	  for (k = 1; k < j; k++) {
++	      max = 5;
++	  }
++      }
++  }
++}
 Index: gcc/testsuite/g++.dg/ipa/pr77905.C
 ===================================================================
 --- a/src/gcc/testsuite/g++.dg/ipa/pr77905.C	(.../tags/gcc_6_3_0_release)
@@ -2576,11 +4490,36 @@ Index: gcc/cp/constexpr.c
      case EMPTY_CLASS_EXPR:
        return false;
  
+Index: gcc/cp/tree.c
+===================================================================
+--- a/src/gcc/cp/tree.c	(.../tags/gcc_6_3_0_release)
++++ b/src/gcc/cp/tree.c	(.../branches/gcc-6-branch)
+@@ -4146,6 +4146,14 @@
+   if (TREE_PUBLIC (decl))
+     return lk_external;
+ 
++  /* maybe_thunk_body clears TREE_PUBLIC on the maybe-in-charge 'tor variants,
++     check one of the "clones" for the real linkage.  */
++  if ((DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl)
++       || DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl))
++      && DECL_CHAIN (decl)
++      && DECL_CLONED_FUNCTION (DECL_CHAIN (decl)))
++    return decl_linkage (DECL_CHAIN (decl));
++
+   if (TREE_CODE (decl) == NAMESPACE_DECL)
+     return lk_external;
+ 
 Index: gcc/cp/ChangeLog
 ===================================================================
 --- a/src/gcc/cp/ChangeLog	(.../tags/gcc_6_3_0_release)
 +++ b/src/gcc/cp/ChangeLog	(.../branches/gcc-6-branch)
-@@ -1,3 +1,41 @@
+@@ -1,3 +1,47 @@
++2017-01-26  Jason Merrill  <jason at redhat.com>
++
++	PR c++/79176 - lambda ICE with -flto -Os
++	* decl2.c (vague_linkage_p): Handle decloned 'tors.
++	* tree.c (decl_linkage): Likewise.
++
 +2017-01-20  Marek Polacek  <polacek at redhat.com>
 +	
 +	Backported from mainline
@@ -2622,6 +4561,25 @@ Index: gcc/cp/ChangeLog
  2016-12-21  Release Manager
  
  	* GCC 6.3.0 released.
+Index: gcc/cp/decl2.c
+===================================================================
+--- a/src/gcc/cp/decl2.c	(.../tags/gcc_6_3_0_release)
++++ b/src/gcc/cp/decl2.c	(.../branches/gcc-6-branch)
+@@ -1875,6 +1875,14 @@
+ {
+   if (!TREE_PUBLIC (decl))
+     {
++      /* maybe_thunk_body clears TREE_PUBLIC on the maybe-in-charge 'tor
++	 variants, check one of the "clones" for the real linkage.  */
++      if ((DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl)
++	   || DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl))
++	  && DECL_CHAIN (decl)
++	  && DECL_CLONED_FUNCTION (DECL_CHAIN (decl)))
++	return vague_linkage_p (DECL_CHAIN (decl));
++
+       gcc_checking_assert (!DECL_COMDAT (decl));
+       return false;
+     }
 Index: gcc/cp/parser.c
 ===================================================================
 --- a/src/gcc/cp/parser.c	(.../tags/gcc_6_3_0_release)
@@ -2700,6 +4658,30 @@ Index: gcc/lto-cgraph.c
    node->need_bounds_init = bp_unpack_value (&bp, 1);
    group = read_identifier (ib);
    if (group)
+Index: gcc/tree-call-cdce.c
+===================================================================
+--- a/src/gcc/tree-call-cdce.c	(.../tags/gcc_6_3_0_release)
++++ b/src/gcc/tree-call-cdce.c	(.../branches/gcc-6-branch)
+@@ -805,7 +805,18 @@
+       if (EDGE_COUNT (join_tgt_in_edge_from_call->dest->preds) > 1)
+ 	join_tgt_bb = split_edge (join_tgt_in_edge_from_call);
+       else
+-	join_tgt_bb = join_tgt_in_edge_from_call->dest;
++	{
++	  join_tgt_bb = join_tgt_in_edge_from_call->dest;
++	  /* We may have degenerate PHIs in the destination.  Propagate
++	     those out.  */
++	  for (gphi_iterator i = gsi_start_phis (join_tgt_bb); !gsi_end_p (i);)
++	    {
++	      gphi *phi = i.phi ();
++	      replace_uses_by (gimple_phi_result (phi),
++			       gimple_phi_arg_def (phi, 0));
++	      remove_phi_node (&i, true);
++	    }
++	}
+     }
+   else
+     {
 Index: gcc/ipa-pure-const.c
 ===================================================================
 --- a/src/gcc/ipa-pure-const.c	(.../tags/gcc_6_3_0_release)
@@ -2961,7 +4943,124 @@ Index: gcc/expr.c
  					 value, cleared, alias, reverse);
  	      }
  	  }
-@@ -8941,9 +8929,9 @@
+@@ -6700,13 +6688,36 @@
+ 
+       temp = expand_normal (exp);
+ 
+-      /* If the value has a record type and an integral mode then, if BITSIZE
+-	 is narrower than this mode and this is for big-endian data, we must
+-	 first put the value into the low-order bits.  Moreover, the field may
+-	 be not aligned on a byte boundary; in this case, if it has reverse
+-	 storage order, it needs to be accessed as a scalar field with reverse
+-	 storage order and we must first put the value into target order.  */
+-      if (TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE
++      /* Handle calls that return values in multiple non-contiguous locations.
++	 The Irix 6 ABI has examples of this.  */
++      if (GET_CODE (temp) == PARALLEL)
++	{
++	  HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (exp));
++	  machine_mode temp_mode
++	    = smallest_mode_for_size (size * BITS_PER_UNIT, MODE_INT);
++	  rtx temp_target = gen_reg_rtx (temp_mode);
++	  emit_group_store (temp_target, temp, TREE_TYPE (exp), size);
++	  temp = temp_target;
++	}
++
++      /* Handle calls that return BLKmode values in registers.  */
++      else if (mode == BLKmode && REG_P (temp) && TREE_CODE (exp) == CALL_EXPR)
++	{
++	  rtx temp_target = gen_reg_rtx (GET_MODE (temp));
++	  copy_blkmode_from_reg (temp_target, temp, TREE_TYPE (exp));
++	  temp = temp_target;
++	}
++
++      /* If the value has aggregate type and an integral mode then, if BITSIZE
++	 is narrower than this mode and this is for big-endian data, we first
++	 need to put the value into the low-order bits for store_bit_field,
++	 except when MODE is BLKmode and BITSIZE larger than the word size
++	 (see the handling of fields larger than a word in store_bit_field).
++	 Moreover, the field may be not aligned on a byte boundary; in this
++	 case, if it has reverse storage order, it needs to be accessed as a
++	 scalar field with reverse storage order and we must first put the
++	 value into target order.  */
++      if (AGGREGATE_TYPE_P (TREE_TYPE (exp))
+ 	  && GET_MODE_CLASS (GET_MODE (temp)) == MODE_INT)
+ 	{
+ 	  HOST_WIDE_INT size = GET_MODE_BITSIZE (GET_MODE (temp));
+@@ -6717,7 +6728,8 @@
+ 	    temp = flip_storage_order (GET_MODE (temp), temp);
+ 
+ 	  if (bitsize < size
+-	      && reverse ? !BYTES_BIG_ENDIAN : BYTES_BIG_ENDIAN)
++	      && reverse ? !BYTES_BIG_ENDIAN : BYTES_BIG_ENDIAN
++	      && !(mode == BLKmode && bitsize > BITS_PER_WORD))
+ 	    temp = expand_shift (RSHIFT_EXPR, GET_MODE (temp), temp,
+ 				 size - bitsize, NULL_RTX, 1);
+ 	}
+@@ -6727,12 +6739,10 @@
+ 	  && mode != TYPE_MODE (TREE_TYPE (exp)))
+ 	temp = convert_modes (mode, TYPE_MODE (TREE_TYPE (exp)), temp, 1);
+ 
+-      /* If TEMP is not a PARALLEL (see below) and its mode and that of TARGET
+-	 are both BLKmode, both must be in memory and BITPOS must be aligned
+-	 on a byte boundary.  If so, we simply do a block copy.  Likewise for
+-	 a BLKmode-like TARGET.  */
+-      if (GET_CODE (temp) != PARALLEL
+-	  && GET_MODE (temp) == BLKmode
++      /* If the mode of TEMP and TARGET is BLKmode, both must be in memory
++	 and BITPOS must be aligned on a byte boundary.  If so, we simply do
++	 a block copy.  Likewise for a BLKmode-like TARGET.  */
++      if (GET_MODE (temp) == BLKmode
+ 	  && (GET_MODE (target) == BLKmode
+ 	      || (MEM_P (target)
+ 		  && GET_MODE_CLASS (GET_MODE (target)) == MODE_INT
+@@ -6751,39 +6761,14 @@
+ 	  return const0_rtx;
+ 	}
+ 
+-      /* Handle calls that return values in multiple non-contiguous locations.
+-	 The Irix 6 ABI has examples of this.  */
+-      if (GET_CODE (temp) == PARALLEL)
++      /* If the mode of TEMP is still BLKmode and BITSIZE not larger than the
++	 word size, we need to load the value (see again store_bit_field).  */
++      if (GET_MODE (temp) == BLKmode && bitsize <= BITS_PER_WORD)
+ 	{
+-	  HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (exp));
+-	  rtx temp_target;
+-	  if (mode == BLKmode || mode == VOIDmode)
+-	    mode = smallest_mode_for_size (size * BITS_PER_UNIT, MODE_INT);
+-	  temp_target = gen_reg_rtx (mode);
+-	  emit_group_store (temp_target, temp, TREE_TYPE (exp), size);
+-	  temp = temp_target;
++	  machine_mode temp_mode = smallest_mode_for_size (bitsize, MODE_INT);
++	  temp = extract_bit_field (temp, bitsize, 0, 1, NULL_RTX, temp_mode,
++				    temp_mode, false);
+ 	}
+-      else if (mode == BLKmode)
+-	{
+-	  /* Handle calls that return BLKmode values in registers.  */
+-	  if (REG_P (temp) && TREE_CODE (exp) == CALL_EXPR)
+-	    {
+-	      rtx temp_target = gen_reg_rtx (GET_MODE (temp));
+-	      copy_blkmode_from_reg (temp_target, temp, TREE_TYPE (exp));
+-	      temp = temp_target;
+-	    }
+-	  else
+-	    {
+-	      HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (exp));
+-	      rtx temp_target;
+-	      mode = smallest_mode_for_size (size * BITS_PER_UNIT, MODE_INT);
+-	      temp_target = gen_reg_rtx (mode);
+-	      temp_target
+-	        = extract_bit_field (temp, size * BITS_PER_UNIT, 0, 1,
+-				     temp_target, mode, mode, false);
+-	      temp = temp_target;
+-	    }
+-	}
+ 
+       /* Store the value in the bitfield.  */
+       store_bit_field (target, bitsize, bitpos,
+@@ -8941,9 +8926,9 @@
  
  	/* Left shift optimization when shifting across word_size boundary.
  
@@ -2974,7 +5073,7 @@ Index: gcc/expr.c
  
  	    Type A = (Type) B  << C
  
-@@ -8952,10 +8940,11 @@
+@@ -8952,10 +8937,11 @@
  
  			 | word_size |
  
@@ -2990,7 +5089,7 @@ Index: gcc/expr.c
  
  	   1. Initialize dest_low to B.
  	   2. Initialize every bit of dest_high to the sign bit of B.
-@@ -8965,20 +8954,30 @@
+@@ -8965,20 +8951,30 @@
  	   5. Logic right shift D by (word_size - C).
  	   6. Or the result of 4 and 5 to finalize dest_high.
  
@@ -3026,7 +5125,7 @@ Index: gcc/expr.c
  	    && mode == GET_MODE_WIDER_MODE (word_mode)
  	    && GET_MODE_SIZE (mode) == 2 * GET_MODE_SIZE (word_mode)
  	    && TREE_CONSTANT (treeop1)
-@@ -8999,6 +8998,8 @@
+@@ -8999,6 +8995,8 @@
  		    rtx_insn *seq, *seq_old;
  		    unsigned int high_off = subreg_highpart_offset (word_mode,
  								    mode);
@@ -3035,7 +5134,7 @@ Index: gcc/expr.c
  		    rtx low = lowpart_subreg (word_mode, op0, mode);
  		    rtx dest_low = lowpart_subreg (word_mode, target, mode);
  		    rtx dest_high = simplify_gen_subreg (word_mode, target,
-@@ -9010,7 +9011,8 @@
+@@ -9010,7 +9008,8 @@
  		    start_sequence ();
  		    /* dest_high = src_low >> (word_size - C).  */
  		    temp = expand_variable_shift (RSHIFT_EXPR, word_mode, low,
@@ -3077,6 +5176,38 @@ Index: gcc/go/gofrontend/expressions.h
  
    // Compare constants LEFT_NC and RIGHT_NC according to OP, setting
    // *RESULT.  Return true if this could be done, false if not.  Issue
+Index: gcc/go/gofrontend/types.cc
+===================================================================
+--- a/src/gcc/go/gofrontend/types.cc	(.../tags/gcc_6_3_0_release)
++++ b/src/gcc/go/gofrontend/types.cc	(.../branches/gcc-6-branch)
+@@ -2175,11 +2175,26 @@
+       is_common = true;
+     }
+ 
++  // The current garbage collector requires that the GC symbol be
++  // aligned to at least a four byte boundary.  See the use of PRECISE
++  // and LOOP in libgo/runtime/mgc0.c.
++  int64_t align;
++  if (!sym_init->type()->backend_type_align(gogo, &align))
++    go_assert(saw_errors());
++  if (align < 4)
++    align = 4;
++  else
++    {
++      // Use default alignment.
++      align = 0;
++    }
++
+   // Since we are building the GC symbol in this package, we must create the
+   // variable before converting the initializer to its backend representation
+   // because the initializer may refer to the GC symbol for this type.
+   this->gc_symbol_var_ =
+-    gogo->backend()->implicit_variable(sym_name, sym_btype, false, true, is_common, 0);
++    gogo->backend()->implicit_variable(sym_name, sym_btype, false, true,
++                                       is_common, align);
+   if (phash != NULL)
+     *phash = this->gc_symbol_var_;
+ 
 Index: gcc/go/gofrontend/expressions.cc
 ===================================================================
 --- a/src/gcc/go/gofrontend/expressions.cc	(.../tags/gcc_6_3_0_release)
@@ -3283,6 +5414,24 @@ Index: gcc/fortran/openmp.c
  	      }
  
  	    if (list != OMP_LIST_DEPEND)
+Index: gcc/fortran/trans-expr.c
+===================================================================
+--- a/src/gcc/fortran/trans-expr.c	(.../tags/gcc_6_3_0_release)
++++ b/src/gcc/fortran/trans-expr.c	(.../branches/gcc-6-branch)
+@@ -1898,8 +1898,11 @@
+ 		     &expr->where);
+     }
+ 
+-  caf_decl = expr->symtree->n.sym->backend_decl;
+-  gcc_assert (caf_decl);
++  /* Make sure the backend_decl is present before accessing it.  */
++  caf_decl = expr->symtree->n.sym->backend_decl == NULL_TREE
++      ? gfc_get_symbol_decl (expr->symtree->n.sym)
++      : expr->symtree->n.sym->backend_decl;
++
+   if (expr->symtree->n.sym->ts.type == BT_CLASS)
+     caf_decl = gfc_class_data_get (caf_decl);
+   if (expr->symtree->n.sym->attr.codimension)
 Index: gcc/fortran/decl.c
 ===================================================================
 --- a/src/gcc/fortran/decl.c	(.../tags/gcc_6_3_0_release)
@@ -3339,7 +5488,26 @@ Index: gcc/fortran/ChangeLog
 ===================================================================
 --- a/src/gcc/fortran/ChangeLog	(.../tags/gcc_6_3_0_release)
 +++ b/src/gcc/fortran/ChangeLog	(.../branches/gcc-6-branch)
-@@ -1,3 +1,23 @@
+@@ -1,3 +1,42 @@
++2017-01-29  Andre Vehreschild  <vehre at gcc.gnu.org>
++
++	Backported from trunk
++	2017-01-13  Andre Vehreschild  <vehre at gcc.gnu.org>
++
++	PR fortran/70697
++	* resolve.c (resolve_lock_unlock_event): Resolve the expression for
++	event's until_count.
++
++2017-01-29  Andre Vehreschild  <vehre at gcc.gnu.org>
++
++	Backport from trunk
++	PR fortran/70696
++	* trans-expr.c (gfc_get_tree_for_caf_expr): Ensure the backend_decl
++	is valid before accessing it.  Remove unnecessary assert.
++	* trans-decl.c (gfc_build_qualified_array): Add static tokens to the
++	parent function's scope only, when the decl-context is not the
++	translation unit.
++
 +2017-01-17  Jakub Jelinek  <jakub at redhat.com>
 +
 +	Backported from mainline
@@ -3363,6 +5531,43 @@ Index: gcc/fortran/ChangeLog
  2016-12-21  Release Manager
  
  	* GCC 6.3.0 released.
+Index: gcc/fortran/resolve.c
+===================================================================
+--- a/src/gcc/fortran/resolve.c	(.../tags/gcc_6_3_0_release)
++++ b/src/gcc/fortran/resolve.c	(.../branches/gcc-6-branch)
+@@ -8840,10 +8840,13 @@
+     return;
+ 
+   /* Check for EVENT WAIT the UNTIL_COUNT.  */
+-  if (code->op == EXEC_EVENT_WAIT && code->expr4
+-      && (code->expr4->ts.type != BT_INTEGER || code->expr4->rank != 0))
+-    gfc_error ("UNTIL_COUNT= argument at %L must be a scalar INTEGER "
+-	       "expression", &code->expr4->where);
++  if (code->op == EXEC_EVENT_WAIT && code->expr4)
++    {
++      if (!gfc_resolve_expr (code->expr4) || code->expr4->ts.type != BT_INTEGER
++	  || code->expr4->rank != 0)
++	gfc_error ("UNTIL_COUNT= argument at %L must be a scalar INTEGER "
++		   "expression", &code->expr4->where);
++    }
+ }
+ 
+ 
+Index: gcc/fortran/trans-decl.c
+===================================================================
+--- a/src/gcc/fortran/trans-decl.c	(.../tags/gcc_6_3_0_release)
++++ b/src/gcc/fortran/trans-decl.c	(.../branches/gcc-6-branch)
+@@ -887,6 +887,10 @@
+ 	  DECL_CONTEXT (token) = sym->ns->proc_name->backend_decl;
+ 	  gfc_module_add_decl (cur_module, token);
+ 	}
++      else if (sym->attr.host_assoc
++	       && TREE_CODE (DECL_CONTEXT (current_function_decl))
++	       != TRANSLATION_UNIT_DECL)
++	gfc_add_decl_to_parent_function (token);
+       else
+ 	gfc_add_decl_to_function (token);
+     }
 Index: gcc/function.c
 ===================================================================
 --- a/src/gcc/function.c	(.../tags/gcc_6_3_0_release)
@@ -3392,6 +5597,32 @@ Index: gcc/function.h
  extern void push_cfun (struct function *new_cfun);
  extern void pop_cfun (void);
  
+Index: gcc/tree-data-ref.c
+===================================================================
+--- a/src/gcc/tree-data-ref.c	(.../tags/gcc_6_3_0_release)
++++ b/src/gcc/tree-data-ref.c	(.../branches/gcc-6-branch)
+@@ -2112,8 +2112,6 @@
+   switch (TREE_CODE (chrec))
+     {
+     case POLYNOMIAL_CHREC:
+-      gcc_assert (TREE_CODE (CHREC_RIGHT (chrec)) == INTEGER_CST);
+-
+       A[index][0] = mult * int_cst_value (CHREC_RIGHT (chrec));
+       return initialize_matrix_A (A, CHREC_LEFT (chrec), index + 1, mult);
+ 
+Index: gcc/ubsan.c
+===================================================================
+--- a/src/gcc/ubsan.c	(.../tags/gcc_6_3_0_release)
++++ b/src/gcc/ubsan.c	(.../branches/gcc-6-branch)
+@@ -1471,7 +1471,7 @@
+ 
+   expanded_location xloc = expand_location (loc);
+   if (xloc.file == NULL || strncmp (xloc.file, "\1", 2) == 0
+-      || xloc.file == '\0' || xloc.file[0] == '\xff'
++      || xloc.file[0] == '\0' || xloc.file[0] == '\xff'
+       || xloc.file[1] == '\xff')
+     return false;
+ 
 Index: gcc/lto/ChangeLog
 ===================================================================
 --- a/src/gcc/lto/ChangeLog	(.../tags/gcc_6_3_0_release)
@@ -45576,11 +47807,41 @@ Index: gcc/config/rs6000/rs6000.md
  		    (const_int 0)]
  		   UNSPEC_SIGNBIT))]
    "TARGET_POWERPC64 && TARGET_DIRECT_MOVE"
+Index: gcc/config/rs6000/altivec.h
+===================================================================
+--- a/src/gcc/config/rs6000/altivec.h	(.../tags/gcc_6_3_0_release)
++++ b/src/gcc/config/rs6000/altivec.h	(.../branches/gcc-6-branch)
+@@ -327,8 +327,8 @@
+ #define vec_sqrt __builtin_vec_sqrt
+ #define vec_vsx_ld __builtin_vec_vsx_ld
+ #define vec_vsx_st __builtin_vec_vsx_st
+-#define vec_xl __builtin_vec_xl
+-#define vec_xst __builtin_vec_xst
++#define vec_xl __builtin_vec_vsx_ld
++#define vec_xst __builtin_vec_vsx_st
+ 
+ /* Note, xxsldi and xxpermdi were added as __builtin_vsx_<xxx> functions
+    instead of __builtin_vec_<xxx>  */
 Index: gcc/config/arm/arm.c
 ===================================================================
 --- a/src/gcc/config/arm/arm.c	(.../tags/gcc_6_3_0_release)
 +++ b/src/gcc/config/arm/arm.c	(.../branches/gcc-6-branch)
-@@ -6859,9 +6859,13 @@
+@@ -6707,6 +6707,14 @@
+   if (TARGET_VXWORKS_RTP && flag_pic && decl && !targetm.binds_local_p (decl))
+     return false;
+ 
++  /* ??? Cannot tail-call to long calls with APCS frame and VFP, because IP
++     may be used both as target of the call and base register for restoring
++     the VFP registers  */
++  if (TARGET_APCS_FRAME && TARGET_ARM
++      && TARGET_HARD_FLOAT && TARGET_VFP
++      && decl && arm_is_long_call_p (decl))
++    return false;
++
+   /* If we are interworking and the function is not declared static
+      then we can't tail-call it unless we know that it exists in this
+      compilation unit (since it might be a Thumb routine).  */
+@@ -6859,9 +6867,13 @@
  	 same segment as the GOT.  Unfortunately, the flexibility of linker
  	 scripts means that we can't be sure of that in general, so assume
  	 that GOTOFF is never valid on VxWorks.  */
@@ -45596,7 +47857,7 @@ Index: gcc/config/arm/arm.c
  	  && NEED_GOT_RELOC
  	  && arm_pic_data_is_text_relative)
  	insn = arm_pic_static_addr (orig, reg);
-@@ -22687,8 +22691,14 @@
+@@ -22687,8 +22699,14 @@
  	{
  	  /* See legitimize_pic_address for an explanation of the
  	     TARGET_VXWORKS_RTP check.  */
@@ -45729,6 +47990,64 @@ ___________________________________________________________________
 Modified: svn:mergeinfo
 ## -0,0 +0,1 ##
    Merged /trunk/gcc:r243962
+Index: libgo/runtime/go-unsafe-pointer.c
+===================================================================
+--- a/src/libgo/runtime/go-unsafe-pointer.c	(.../tags/gcc_6_3_0_release)
++++ b/src/libgo/runtime/go-unsafe-pointer.c	(.../branches/gcc-6-branch)
+@@ -36,7 +36,8 @@
+   sizeof REFLECTION - 1
+ };
+ 
+-const uintptr unsafe_Pointer_gc[] = {sizeof(void*), GC_APTR, 0, GC_END};
++const uintptr unsafe_Pointer_gc[] __attribute__((aligned(4))) =
++  {sizeof(void*), GC_APTR, 0, GC_END};
+ 
+ const struct __go_type_descriptor unsafe_Pointer =
+ {
+Index: libgo/runtime/runtime.h
+===================================================================
+--- a/src/libgo/runtime/runtime.h	(.../tags/gcc_6_3_0_release)
++++ b/src/libgo/runtime/runtime.h	(.../branches/gcc-6-branch)
+@@ -154,7 +154,7 @@
+ 	// Futex-based impl treats it as uint32 key,
+ 	// while sema-based impl as M* waitm.
+ 	// Used to be a union, but unions break precise GC.
+-	uintptr	key;
++	uintptr	key __attribute__((aligned(4)));
+ };
+ struct	Note
+ {
+@@ -161,7 +161,7 @@
+ 	// Futex-based impl treats it as uint32 key,
+ 	// while sema-based impl as M* waitm.
+ 	// Used to be a union, but unions break precise GC.
+-	uintptr	key;
++	uintptr	key __attribute__((aligned(4)));
+ };
+ struct String
+ {
+@@ -431,7 +431,7 @@
+ 					// otherwise parfor may return while other threads are still working
+ 	ParForThread *thr;		// array of thread descriptors
+ 	// stats
+-	uint64 nsteal;
++	uint64 nsteal __attribute__((aligned(8))); // force alignment for m68k
+ 	uint64 nstealcnt;
+ 	uint64 nprocyield;
+ 	uint64 nosyield;
+Index: libgo/runtime/parfor.c
+===================================================================
+--- a/src/libgo/runtime/parfor.c	(.../tags/gcc_6_3_0_release)
++++ b/src/libgo/runtime/parfor.c	(.../branches/gcc-6-branch)
+@@ -10,7 +10,7 @@
+ struct ParForThread
+ {
+ 	// the thread's iteration space [32lsb, 32msb)
+-	uint64 pos;
++	uint64 pos __attribute__((aligned(8)));
+ 	// stats
+ 	uint64 nsteal;
+ 	uint64 nstealcnt;
 Index: libgfortran/configure
 ===================================================================
 --- a/src/libgfortran/configure	(.../tags/gcc_6_3_0_release)
@@ -45795,6 +48114,39 @@ Index: libgfortran/configure
  # Runs configure.host to set up necessary host-dependent shell variables.
  # We then display a message about it, and propagate them through the
  # build chain.
+Index: libgfortran/intrinsics/c99_functions.c
+===================================================================
+--- a/src/libgfortran/intrinsics/c99_functions.c	(.../tags/gcc_6_3_0_release)
++++ b/src/libgfortran/intrinsics/c99_functions.c	(.../branches/gcc-6-branch)
+@@ -913,7 +913,7 @@
+ }
+ #endif
+ 
+-#if !defined(HAVE_CEXPL) && defined(HAVE_COSL) && defined(HAVE_SINL) && defined(EXPL)
++#if !defined(HAVE_CEXPL) && defined(HAVE_COSL) && defined(HAVE_SINL) && defined(HAVE_EXPL)
+ #define HAVE_CEXPL 1
+ long double complex cexpl (long double complex z);
+ 
+Index: libgfortran/caf/single.c
+===================================================================
+--- a/src/libgfortran/caf/single.c	(.../tags/gcc_6_3_0_release)
++++ b/src/libgfortran/caf/single.c	(.../branches/gcc-6-branch)
+@@ -101,9 +101,12 @@
+   void *local;
+ 
+   if (type == CAF_REGTYPE_LOCK_STATIC || type == CAF_REGTYPE_LOCK_ALLOC
+-      || type == CAF_REGTYPE_CRITICAL || type == CAF_REGTYPE_EVENT_STATIC
+-      || type == CAF_REGTYPE_EVENT_ALLOC)
+-    local = calloc (size, sizeof (bool));
++      || type == CAF_REGTYPE_CRITICAL)
++     local = calloc (size, sizeof (bool));
++  else if (type == CAF_REGTYPE_EVENT_STATIC || type == CAF_REGTYPE_EVENT_ALLOC)
++    /* In the event_(wait|post) function the counter for events is a uint32,
++       so better allocate enough memory here.  */
++    local = calloc (size, sizeof (uint32_t));
+   else
+     local = malloc (size);
+   *token = malloc (sizeof (single_token_t));
 Index: libgfortran/configure.host
 ===================================================================
 --- a/src/libgfortran/configure.host	(.../tags/gcc_6_3_0_release)
@@ -45830,7 +48182,13 @@ Index: libgfortran/ChangeLog
 ===================================================================
 --- a/src/libgfortran/ChangeLog	(.../tags/gcc_6_3_0_release)
 +++ b/src/libgfortran/ChangeLog	(.../branches/gcc-6-branch)
-@@ -1,3 +1,12 @@
+@@ -1,3 +1,18 @@
++2017-01-31  Steven G. Kargl  <kargl at gcc.gnu.org>
++
++	PR fortran/79305
++	* c99_protos.h: Spell HAVE_EXPL correctly.
++	* intrinsics/c99_functions.c: Ditto.
++
 +2017-01-24  Uros Bizjak  <ubizjak at gmail.com>
 +
 +	PR target/78478
@@ -45843,7 +48201,7 @@ Index: libgfortran/ChangeLog
  2016-12-21  Release Manager
  
  	* GCC 6.3.0 released.
-@@ -13,7 +22,7 @@
+@@ -13,7 +28,7 @@
  
  	Backport from trunk
  	PR libgfortran/77707
@@ -45852,7 +48210,7 @@ Index: libgfortran/ChangeLog
  	Correctly calculate.
  
  2016-09-28  Steven G. Kargl  <kargl at gcc.gnu.org>
-@@ -20,7 +29,7 @@
+@@ -20,7 +35,7 @@
  
  	Backport from trunk
  	PR fortran/77507
@@ -45861,7 +48219,7 @@ Index: libgfortran/ChangeLog
  	IEEE_VALUE_16):  Use correct keyword.
  
  2016-08-22  Release Manager
-@@ -82,9 +91,10 @@
+@@ -82,9 +97,10 @@
  	(read_logical): If '!' bang encountered when not in namelist mode got
  	bad_logical to give an error. (read_integer): Likewise reject '!'.
  	(read_character): Remove condition testing c = '!' which is now inside
@@ -45875,6 +48233,19 @@ Index: libgfortran/ChangeLog
  
  2016-02-12  Jerry DeLisle  <jvdelisle at gcc.gnu.org>
  
+Index: libgfortran/c99_protos.h
+===================================================================
+--- a/src/libgfortran/c99_protos.h	(.../tags/gcc_6_3_0_release)
++++ b/src/libgfortran/c99_protos.h	(.../branches/gcc-6-branch)
+@@ -332,7 +332,7 @@
+ extern double complex cexp (double complex);
+ #endif
+ 
+-#if !defined(HAVE_CEXPL) && defined(HAVE_COSL) && defined(HAVE_SINL) && defined(EXPL)
++#if !defined(HAVE_CEXPL) && defined(HAVE_COSL) && defined(HAVE_SINL) && defined(HAVE_EXPL)
+ #define HAVE_CEXPL 1
+ extern long double complex cexpl (long double complex);
+ #endif
 Index: libgfortran/acinclude.m4
 ===================================================================
 --- a/src/libgfortran/acinclude.m4	(.../tags/gcc_6_3_0_release)
@@ -45887,6 +48258,449 @@ Index: libgfortran/acinclude.m4
  
  dnl Check that we have a working GNU Fortran compiler
  AC_DEFUN([LIBGFOR_WORKING_GFORTRAN], [
+Index: fixincludes/ChangeLog
+===================================================================
+--- a/src/fixincludes/ChangeLog	(.../tags/gcc_6_3_0_release)
++++ b/src/fixincludes/ChangeLog	(.../branches/gcc-6-branch)
+@@ -1,3 +1,16 @@
++2017-01-30  Rainer Orth  <ro at CeBiTec.Uni-Bielefeld.DE>
++
++	Backport from mainline
++	2017-01-13  Rainer Orth  <ro at CeBiTec.Uni-Bielefeld.DE>
++
++	PR libstdc++/78979
++	* inclhack.def (solaris_gets_c11, solaris_gets_cxx14)
++	(solaris_std_gets_cxx14, solaris_stdlib_noreturn): New fixes.
++	* fixincl.x: Regenerate.
++	* tests/base/iso/stdio_iso.h [SOLARIS_GETS_C11_CHECK,
++	SOLARIS_GETS_CXX14_CHECK, SOLARIS_STD_GETS_CXX14_CHECK,
++	SOLARIS_STDLIB_NORETURN_CHECK]: New tests.
++
+ 2016-12-21  Release Manager
+ 
+ 	* GCC 6.3.0 released.
+Index: fixincludes/tests/base/stdio.h
+===================================================================
+--- a/src/fixincludes/tests/base/stdio.h	(.../tags/gcc_6_3_0_release)
++++ b/src/fixincludes/tests/base/stdio.h	(.../branches/gcc-6-branch)
+@@ -90,6 +90,13 @@
+ #endif  /* SOLARIS_STD___FILBUF_CHECK */
+ 
+ 
++#if defined( SOLARIS_STD_GETS_CXX14_CHECK )
++#if __cplusplus < 201402L
++using std::gets;
++#endif
++#endif  /* SOLARIS_STD_GETS_CXX14_CHECK */
++
++
+ #if defined( STDIO_STDARG_H_CHECK )
+ 
+ #endif  /* STDIO_STDARG_H_CHECK */
+Index: fixincludes/tests/base/iso/stdio_iso.h
+===================================================================
+--- a/src/fixincludes/tests/base/iso/stdio_iso.h	(.../tags/gcc_6_3_0_release)
++++ b/src/fixincludes/tests/base/iso/stdio_iso.h	(.../branches/gcc-6-branch)
+@@ -12,3 +12,16 @@
+ #if defined( SOLARIS_GETC_STRICT_STDC_CHECK )
+ #if	!defined(_REENTRANT) && !defined(_LP64) && (!defined(_STRICT_STDC) || (__cplusplus >= 199711L))
+ #endif  /* SOLARIS_GETC_STRICT_STDC_CHECK */
++
++
++#if defined( SOLARIS_GETS_C11_CHECK )
++#if __STDC_VERSION__ < 201112L && __cplusplus < 201402L
++extern char	*gets(char *) __attribute__((__deprecated__));
++#endif
++#endif  /* SOLARIS_GETS_C11_CHECK */
++
++
++#if defined( SOLARIS_GETS_CXX14_CHECK )
++#if __STDC_VERSION__ < 201112L && __cplusplus < 201402L
++extern char	*gets(char *) __ATTR_DEPRECATED;
++#endif  /* SOLARIS_GETS_CXX14_CHECK */
+Index: fixincludes/tests/base/iso/stdlib_c99.h
+===================================================================
+--- a/src/fixincludes/tests/base/iso/stdlib_c99.h	(.../tags/gcc_6_3_0_release)
++++ b/src/fixincludes/tests/base/iso/stdlib_c99.h	(.../branches/gcc-6-branch)
+@@ -0,0 +1,14 @@
++/*  DO NOT EDIT THIS FILE.
++
++    It has been auto-edited by fixincludes from:
++
++	"fixinc/tests/inc/iso/stdlib_c99.h"
++
++    This had to be done to correct non-standard usages in the
++    original, manufacturer supplied header file.  */
++
++
++
++#if defined( SOLARIS_STDLIB_NORETURN_CHECK )
++extern void quick_exit(int) __attribute__((__noreturn__));
++#endif  /* SOLARIS_STDLIB_NORETURN_CHECK */
+Index: fixincludes/fixincl.x
+===================================================================
+--- a/src/fixincludes/fixincl.x	(.../tags/gcc_6_3_0_release)
++++ b/src/fixincludes/fixincl.x	(.../branches/gcc-6-branch)
+@@ -2,11 +2,11 @@
+  * 
+  * DO NOT EDIT THIS FILE   (fixincl.x)
+  * 
+- * It has been AutoGen-ed  November 18, 2016 at 12:35:01 PM by AutoGen 5.16.2
++ * It has been AutoGen-ed  January  5, 2017 at 06:03:22 PM by AutoGen 5.16.2
+  * From the definitions    inclhack.def
+  * and the template file   fixincl
+  */
+-/* DO NOT SVN-MERGE THIS FILE, EITHER Fri Nov 18 12:35:01  2016
++/* DO NOT SVN-MERGE THIS FILE, EITHER Thu Jan  5 18:03:22 CET 2017
+  *
+  * You must regenerate it.  Use the ./genfixes script.
+  *
+@@ -15,7 +15,7 @@
+  * certain ANSI-incompatible system header files which are fixed to work
+  * correctly with ANSI C and placed in a directory that GNU C will search.
+  *
+- * This file contains 236 fixup descriptions.
++ * This file contains 240 fixup descriptions.
+  *
+  * See README for more information.
+  *
+@@ -6824,6 +6824,84 @@
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
++ *  Description of Solaris_Gets_C11 fix
++ */
++tSCC zSolaris_Gets_C11Name[] =
++     "solaris_gets_c11";
++
++/*
++ *  File name selection pattern
++ */
++tSCC zSolaris_Gets_C11List[] =
++  "iso/stdio_iso.h\0";
++/*
++ *  Machine/OS name selection pattern
++ */
++tSCC* apzSolaris_Gets_C11Machs[] = {
++        "*-*-solaris2*",
++        (const char*)NULL };
++
++/*
++ *  content selection pattern - do fix if pattern found
++ */
++tSCC zSolaris_Gets_C11Select0[] =
++       "(extern char[ \t]*\\*gets\\(char \\*\\));";
++
++#define    SOLARIS_GETS_C11_TEST_CT  1
++static tTestDesc aSolaris_Gets_C11Tests[] = {
++  { TT_EGREP,    zSolaris_Gets_C11Select0, (regex_t*)NULL }, };
++
++/*
++ *  Fix Command Arguments for Solaris_Gets_C11
++ */
++static const char* apzSolaris_Gets_C11Patch[] = {
++    "format",
++    "#if __STDC_VERSION__ < 201112L && __cplusplus < 201402L\n\
++%1 __attribute__((__deprecated__));\n\
++#endif",
++    (char*)NULL };
++
++/* * * * * * * * * * * * * * * * * * * * * * * * * *
++ *
++ *  Description of Solaris_Gets_Cxx14 fix
++ */
++tSCC zSolaris_Gets_Cxx14Name[] =
++     "solaris_gets_cxx14";
++
++/*
++ *  File name selection pattern
++ */
++tSCC zSolaris_Gets_Cxx14List[] =
++  "iso/stdio_iso.h\0";
++/*
++ *  Machine/OS name selection pattern
++ */
++tSCC* apzSolaris_Gets_Cxx14Machs[] = {
++        "*-*-solaris2*",
++        (const char*)NULL };
++
++/*
++ *  content selection pattern - do fix if pattern found
++ */
++tSCC zSolaris_Gets_Cxx14Select0[] =
++       "(#if __STDC_VERSION__ < 201112L)\n\
++(extern char\t\\*gets\\(char \\*\\) __ATTR_DEPRECATED;)";
++
++#define    SOLARIS_GETS_CXX14_TEST_CT  1
++static tTestDesc aSolaris_Gets_Cxx14Tests[] = {
++  { TT_EGREP,    zSolaris_Gets_Cxx14Select0, (regex_t*)NULL }, };
++
++/*
++ *  Fix Command Arguments for Solaris_Gets_Cxx14
++ */
++static const char* apzSolaris_Gets_Cxx14Patch[] = {
++    "format",
++    "%1 && __cplusplus < 201402L\n\
++%2",
++    (char*)NULL };
++
++/* * * * * * * * * * * * * * * * * * * * * * * * * *
++ *
+  *  Description of Solaris_Int_Const fix
+  */
+ tSCC zSolaris_Int_ConstName[] =
+@@ -7576,6 +7654,45 @@
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
++ *  Description of Solaris_Std_Gets_Cxx14 fix
++ */
++tSCC zSolaris_Std_Gets_Cxx14Name[] =
++     "solaris_std_gets_cxx14";
++
++/*
++ *  File name selection pattern
++ */
++tSCC zSolaris_Std_Gets_Cxx14List[] =
++  "stdio.h\0";
++/*
++ *  Machine/OS name selection pattern
++ */
++tSCC* apzSolaris_Std_Gets_Cxx14Machs[] = {
++        "*-*-solaris2*",
++        (const char*)NULL };
++
++/*
++ *  content selection pattern - do fix if pattern found
++ */
++tSCC zSolaris_Std_Gets_Cxx14Select0[] =
++       "using std::gets;";
++
++#define    SOLARIS_STD_GETS_CXX14_TEST_CT  1
++static tTestDesc aSolaris_Std_Gets_Cxx14Tests[] = {
++  { TT_EGREP,    zSolaris_Std_Gets_Cxx14Select0, (regex_t*)NULL }, };
++
++/*
++ *  Fix Command Arguments for Solaris_Std_Gets_Cxx14
++ */
++static const char* apzSolaris_Std_Gets_Cxx14Patch[] = {
++    "format",
++    "#if __cplusplus < 201402L\n\
++%0\n\
++#endif",
++    (char*)NULL };
++
++/* * * * * * * * * * * * * * * * * * * * * * * * * *
++ *
+  *  Description of Solaris_Stdio_Tag fix
+  */
+ tSCC zSolaris_Stdio_TagName[] =
+@@ -7617,6 +7734,43 @@
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
++ *  Description of Solaris_Stdlib_Noreturn fix
++ */
++tSCC zSolaris_Stdlib_NoreturnName[] =
++     "solaris_stdlib_noreturn";
++
++/*
++ *  File name selection pattern
++ */
++tSCC zSolaris_Stdlib_NoreturnList[] =
++  "iso/stdlib_c99.h\0";
++/*
++ *  Machine/OS name selection pattern
++ */
++tSCC* apzSolaris_Stdlib_NoreturnMachs[] = {
++        "*-*-solaris2*",
++        (const char*)NULL };
++
++/*
++ *  content selection pattern - do fix if pattern found
++ */
++tSCC zSolaris_Stdlib_NoreturnSelect0[] =
++       "(extern) _Noreturn (void quick_exit\\(int\\));";
++
++#define    SOLARIS_STDLIB_NORETURN_TEST_CT  1
++static tTestDesc aSolaris_Stdlib_NoreturnTests[] = {
++  { TT_EGREP,    zSolaris_Stdlib_NoreturnSelect0, (regex_t*)NULL }, };
++
++/*
++ *  Fix Command Arguments for Solaris_Stdlib_Noreturn
++ */
++static const char* apzSolaris_Stdlib_NoreturnPatch[] = {
++    "format",
++    "%1 %2 __attribute__((__noreturn__));",
++    (char*)NULL };
++
++/* * * * * * * * * * * * * * * * * * * * * * * * * *
++ *
+  *  Description of Statsswtch fix
+  */
+ tSCC zStatsswtchName[] =
+@@ -9664,9 +9818,9 @@
+  *
+  *  List of all fixes
+  */
+-#define REGEX_COUNT          272
++#define REGEX_COUNT          276
+ #define MACH_LIST_SIZE_LIMIT 187
+-#define FIX_COUNT            236
++#define FIX_COUNT            240
+ 
+ /*
+  *  Enumerate the fixes
+@@ -9837,6 +9991,8 @@
+     SOLARIS_COMPLEX_CXX_FIXIDX,
+     SOLARIS_CXX_LINKAGE_FIXIDX,
+     SOLARIS_GETC_STRICT_STDC_FIXIDX,
++    SOLARIS_GETS_C11_FIXIDX,
++    SOLARIS_GETS_CXX14_FIXIDX,
+     SOLARIS_INT_CONST_FIXIDX,
+     SOLARIS_INT_LIMITS_1_FIXIDX,
+     SOLARIS_INT_LIMITS_2_FIXIDX,
+@@ -9855,7 +10011,9 @@
+     SOLARIS_POW_INT_OVERLOAD_FIXIDX,
+     SOLARIS_RWLOCK_INIT_1_FIXIDX,
+     SOLARIS_STD___FILBUF_FIXIDX,
++    SOLARIS_STD_GETS_CXX14_FIXIDX,
+     SOLARIS_STDIO_TAG_FIXIDX,
++    SOLARIS_STDLIB_NORETURN_FIXIDX,
+     STATSSWTCH_FIXIDX,
+     STDIO_STDARG_H_FIXIDX,
+     STDIO_VA_LIST_FIXIDX,
+@@ -10736,6 +10894,16 @@
+      SOLARIS_GETC_STRICT_STDC_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aSolaris_Getc_Strict_StdcTests,   apzSolaris_Getc_Strict_StdcPatch, 0 },
+ 
++  {  zSolaris_Gets_C11Name,    zSolaris_Gets_C11List,
++     apzSolaris_Gets_C11Machs,
++     SOLARIS_GETS_C11_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
++     aSolaris_Gets_C11Tests,   apzSolaris_Gets_C11Patch, 0 },
++
++  {  zSolaris_Gets_Cxx14Name,    zSolaris_Gets_Cxx14List,
++     apzSolaris_Gets_Cxx14Machs,
++     SOLARIS_GETS_CXX14_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
++     aSolaris_Gets_Cxx14Tests,   apzSolaris_Gets_Cxx14Patch, 0 },
++
+   {  zSolaris_Int_ConstName,    zSolaris_Int_ConstList,
+      apzSolaris_Int_ConstMachs,
+      SOLARIS_INT_CONST_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+@@ -10826,11 +10994,21 @@
+      SOLARIS_STD___FILBUF_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aSolaris_Std___FilbufTests,   apzSolaris_Std___FilbufPatch, 0 },
+ 
++  {  zSolaris_Std_Gets_Cxx14Name,    zSolaris_Std_Gets_Cxx14List,
++     apzSolaris_Std_Gets_Cxx14Machs,
++     SOLARIS_STD_GETS_CXX14_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
++     aSolaris_Std_Gets_Cxx14Tests,   apzSolaris_Std_Gets_Cxx14Patch, 0 },
++
+   {  zSolaris_Stdio_TagName,    zSolaris_Stdio_TagList,
+      apzSolaris_Stdio_TagMachs,
+      SOLARIS_STDIO_TAG_TEST_CT, FD_MACH_ONLY,
+      aSolaris_Stdio_TagTests,   apzSolaris_Stdio_TagPatch, 0 },
+ 
++  {  zSolaris_Stdlib_NoreturnName,    zSolaris_Stdlib_NoreturnList,
++     apzSolaris_Stdlib_NoreturnMachs,
++     SOLARIS_STDLIB_NORETURN_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
++     aSolaris_Stdlib_NoreturnTests,   apzSolaris_Stdlib_NoreturnPatch, 0 },
++
+   {  zStatsswtchName,    zStatsswtchList,
+      apzStatsswtchMachs,
+      STATSSWTCH_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+Index: fixincludes/inclhack.def
+===================================================================
+--- a/src/fixincludes/inclhack.def	(.../tags/gcc_6_3_0_release)
++++ b/src/fixincludes/inclhack.def	(.../branches/gcc-6-branch)
+@@ -3482,6 +3482,43 @@
+ };
+ 
+ /*
++ *  Solaris <iso/stdio_iso.h> should deprecate gets before C11.
++ */
++fix = {
++    hackname  = solaris_gets_c11;
++    mach      = "*-*-solaris2*";
++    files     = "iso/stdio_iso.h";
++    select    = "(extern char[ \t]*\\*gets\\(char \\*\\));";
++
++    c_fix     = format;
++    c_fix_arg = "#if __STDC_VERSION__ < 201112L && __cplusplus < 201402L\n"
++    		"%1 __attribute__((__deprecated__));\n"
++		"#endif";
++
++    test_text = "extern char	*gets(char *);";
++};
++
++/*
++ *  Solaris <iso/stdio_iso.h> shouldn't declare gets for C++14.
++ */
++fix = {
++    hackname  = solaris_gets_cxx14;
++    mach      = "*-*-solaris2*";
++    files     = "iso/stdio_iso.h";
++    select    = <<- _EOSelect_
++(#if __STDC_VERSION__ < 201112L)
++(extern char	\*gets\(char \*\) __ATTR_DEPRECATED;)
++_EOSelect_;
++    c_fix     = format;
++    c_fix_arg = "%1 && __cplusplus < 201402L\n%2";
++
++    test_text = <<- _EOText_
++#if __STDC_VERSION__ < 201112L
++extern char	*gets(char *) __ATTR_DEPRECATED;
++_EOText_;
++};
++
++/*
+  * Sun Solaris 2 has a version of sys/int_const.h that defines
+  * UINT8_C and UINT16_C to unsigned constants.
+  */
+@@ -3871,6 +3908,21 @@
+ };
+ 
+ /*
++ *  Solaris <stdio.h> shouldn't use std::gets for C++14.
++ */
++fix = {
++    hackname  = solaris_std_gets_cxx14;
++    mach      = "*-*-solaris2*";
++    files     = "stdio.h";
++    select    = "using std::gets;";
++
++    c_fix     = format;
++    c_fix_arg = "#if __cplusplus < 201402L\n%0\n#endif";
++
++    test_text = "using std::gets;";
++};
++
++/*
+  * Sun Solaris 8 has what appears to be some gross workaround for
+  * some old version of their c++ compiler.  G++ doesn't want it
+  * either, but doesn't want to be tied to SunPRO version numbers.
+@@ -3889,6 +3941,21 @@
+ };
+ 
+ /*
++ *  Solaris <stdlib.h> shouldn't use _Noreturn, breaks with C++.
++ */
++fix = {
++    hackname  = solaris_stdlib_noreturn;
++    mach      = "*-*-solaris2*";
++    files     = "iso/stdlib_c99.h";
++    select    = "(extern) _Noreturn (void quick_exit\\(int\\));";
++
++    c_fix     = format;
++    c_fix_arg = "%1 %2 __attribute__((__noreturn__));";
++
++    test_text = "extern _Noreturn void quick_exit(int);";
++};
++
++/*
+  *  a missing semi-colon at the end of the statsswtch structure definition.
+  */
+ fix = {
 Index: .
 ===================================================================
 --- a/src/.	(.../tags/gcc_6_3_0_release)
diff --git a/debian/rules.patch b/debian/rules.patch
index 1219ca3..7a9282b 100644
--- a/debian/rules.patch
+++ b/debian/rules.patch
@@ -385,7 +385,6 @@ ifeq ($(DEB_TARGET_ARCH),m68k)
   ifeq ($(with_ada),yes)
     debian_patches += m68k-revert-pr45144
   endif
-  debian_patches += gccgo-m68k
 endif
 
 # don't remove, this is regularly overwritten, see PR sanitizer/63958.

-- 
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