[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