[gcc-7] 195/354: * Update to SVN 20170519 (r248295) from the gcc-7-branch.
Ximin Luo
infinity0 at debian.org
Thu Nov 23 15:50:52 UTC 2017
This is an automated email from the git hooks/post-receive script.
infinity0 pushed a commit to branch master
in repository gcc-7.
commit a93e977b422a026fe9dd7391fbc2a55b388fe8aa
Author: doko <doko at 6ca36cf4-e1d1-0310-8c6f-e303bb2178ca>
Date: Fri May 19 16:25:12 2017 +0000
* Update to SVN 20170519 (r248295) from the gcc-7-branch.
git-svn-id: svn+ssh://svn.debian.org/svn/gcccvs/branches/sid/gcc-7@9489 6ca36cf4-e1d1-0310-8c6f-e303bb2178ca
---
debian/changelog | 6 +-
debian/patches/svn-updates.diff | 1745 ++++++++++++++++++++++++++++++++++++++-
2 files changed, 1728 insertions(+), 23 deletions(-)
diff --git a/debian/changelog b/debian/changelog
index f101efe..4c16519 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,12 +1,16 @@
gcc-7 (7.1.0-6) UNRELEASED; urgency=medium
+ * Update to SVN 20170519 (r248295) from the gcc-7-branch.
+ - Fix PR libstdc++/80796, PR libstdc++/80478, PR libstdc++/80761,
+ PR target/80799 (x86), PR ada/80784, PR fortran/78659, PR fortran/80752,
+ PR libgfortran/80727.
* Re-add unwind support on kfreebsd-amd64 (James Clarke).
* Work around #814977 (gnat calling gcc-7-7) by providing a gcc-7-7
symlink.
* Fix gnat build dependencies on x32.
* Build gnat on mips64 and powerpcspe.
- -- Matthias Klose <doko at debian.org> Mon, 15 May 2017 16:22:37 -0700
+ -- Matthias Klose <doko at debian.org> Fri, 19 May 2017 09:20:41 -0700
gcc-7 (7.1.0-5) experimental; urgency=medium
diff --git a/debian/patches/svn-updates.diff b/debian/patches/svn-updates.diff
index dbc6705..1dc3d9d 100644
--- a/debian/patches/svn-updates.diff
+++ b/debian/patches/svn-updates.diff
@@ -1,10 +1,10 @@
-# DP: updates from the 7 branch upto 20170514 (r248033).
+# DP: updates from the 7 branch upto 20170519 (r248295).
last_update()
{
cat > ${dir}LAST_UPDATED <EOF
-Sun May 14 08:46:43 PDT 2017
-Sun May 14 15:46:43 UTC 2017 (revision 248033)
+Fri May 19 09:11:27 PDT 2017
+Fri May 19 16:11:27 UTC 2017 (revision 248295)
EOF
}
@@ -12,6 +12,137 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/tags/gcc_7_1_0_release svn://gcc.gnu.o
| sed -r 's,^--- (\S+)\t(\S+)(.*)$,--- a/src/\1\t\2,;s,^\+\+\+ (\S+)\t(\S+)(.*)$,+++ b/src/\1\t\2,' \
| awk '/^Index:.*\.(class|texi)/ {skip=1; next} /^Index:/ { skip=0 } skip==0'
+Index: libstdc++-v3/doc/xml/manual/abi.xml
+===================================================================
+--- a/src/libstdc++-v3/doc/xml/manual/abi.xml (.../tags/gcc_7_1_0_release)
++++ b/src/libstdc++-v3/doc/xml/manual/abi.xml (.../branches/gcc-7-branch)
+@@ -264,6 +264,8 @@
+ <listitem><para>GCC 4.8.3: libstdc++.so.6.0.19</para></listitem>
+ <listitem><para>GCC 4.9.0: libstdc++.so.6.0.20</para></listitem>
+ <listitem><para>GCC 5.1.0: libstdc++.so.6.0.21</para></listitem>
++ <listitem><para>GCC 6.1.0: libstdc++.so.6.0.22</para></listitem>
++ <listitem><para>GCC 7.1.0: libstdc++.so.6.0.23</para></listitem>
+ </itemizedlist>
+ <para>
+ Note 1: Error should be libstdc++.so.3.0.3.
+@@ -331,6 +333,7 @@
+ <listitem><para>GCC 4.9.0: GLIBCXX_3.4.20, CXXABI_1.3.8</para></listitem>
+ <listitem><para>GCC 5.1.0: GLIBCXX_3.4.21, CXXABI_1.3.9</para></listitem>
+ <listitem><para>GCC 6.1.0: GLIBCXX_3.4.22, CXXABI_1.3.10</para></listitem>
++ <listitem><para>GCC 7.1.0: GLIBCXX_3.4.23, CXXABI_1.3.11</para></listitem>
+ </itemizedlist>
+ </listitem>
+
+Index: libstdc++-v3/doc/xml/manual/build_hacking.xml
+===================================================================
+--- a/src/libstdc++-v3/doc/xml/manual/build_hacking.xml (.../tags/gcc_7_1_0_release)
++++ b/src/libstdc++-v3/doc/xml/manual/build_hacking.xml (.../branches/gcc-7-branch)
+@@ -474,6 +474,14 @@
+ <varname>latestp</varname> variable).
+ </para>
+ </listitem>
++<listitem><para>
++Add the library (<filename class="library">libstdc++.so.6.0.X</filename>)
++and symbols versions
++(<literal>GLIBCXX_3.4.X</literal> and <literal>CXXABI_1.3.Y</literal>)
++to the <link linkend="abi.versioning.history">History</link> section in
++<filename>doc/xml/manual/abi.xml</filename> at the relevant places.
++</para>
++</listitem>
+ </itemizedlist>
+
+ <para>
+Index: libstdc++-v3/doc/xml/manual/test_policy_data_structures.xml
+===================================================================
+--- a/src/libstdc++-v3/doc/xml/manual/test_policy_data_structures.xml (.../tags/gcc_7_1_0_release)
++++ b/src/libstdc++-v3/doc/xml/manual/test_policy_data_structures.xml (.../branches/gcc-7-branch)
+@@ -89,7 +89,7 @@
+ </title></info>
+
+ <para>The graphic below show the results for the native
+- and collision-chaining hash types the the function
++ and collision-chaining hash types the function
+ applied being a text find timing test using
+ <function>find</function>.
+ </para>
+Index: libstdc++-v3/doc/xml/manual/policy_data_structures.xml
+===================================================================
+--- a/src/libstdc++-v3/doc/xml/manual/policy_data_structures.xml (.../tags/gcc_7_1_0_release)
++++ b/src/libstdc++-v3/doc/xml/manual/policy_data_structures.xml (.../branches/gcc-7-branch)
+@@ -169,7 +169,7 @@
+ <code>push</code> and <code>pop</code> operations, differs from the
+ others in terms of its invalidation guarantees. Other design
+ decisions also impact the cost and placement of the overhead, at the
+- expense of more difference in the the kinds of operations that the
++ expense of more difference in the kinds of operations that the
+ underlying data structure can support. These differences pose a
+ challenge when creating a uniform interface for priority queues.
+ </para>
+Index: libstdc++-v3/doc/html/manual/policy_data_structures.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/policy_data_structures.html (.../tags/gcc_7_1_0_release)
++++ b/src/libstdc++-v3/doc/html/manual/policy_data_structures.html (.../branches/gcc-7-branch)
+@@ -172,7 +172,7 @@
+ <code class="code">push</code> and <code class="code">pop</code> operations, differs from the
+ others in terms of its invalidation guarantees. Other design
+ decisions also impact the cost and placement of the overhead, at the
+- expense of more difference in the the kinds of operations that the
++ expense of more difference in the kinds of operations that the
+ underlying data structure can support. These differences pose a
+ challenge when creating a uniform interface for priority queues.
+ </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.intro.motivation"></a>Goals</h3></div></div></div><p>
+Index: libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html (.../tags/gcc_7_1_0_release)
++++ b/src/libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html (.../branches/gcc-7-branch)
+@@ -43,7 +43,7 @@
+ </p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash.text_find.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic below show the results for the native
+- and collision-chaining hash types the the function
++ and collision-chaining hash types the function
+ applied being a text find timing test using
+ <code class="function">find</code>.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_hash_text_find.png" align="middle" /></div></div><p>
+Index: libstdc++-v3/doc/html/manual/abi.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/abi.html (.../tags/gcc_7_1_0_release)
++++ b/src/libstdc++-v3/doc/html/manual/abi.html (.../branches/gcc-7-branch)
+@@ -110,7 +110,7 @@
+ has the same filename and <code class="constant">DT_SONAME</code> as the
+ preceding release.
+ </p><p>It is versioned as follows:
+- </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>GCC 3.0.0: libstdc++.so.3.0.0</p></li><li class="listitem"><p>GCC 3.0.1: libstdc++.so.3.0.1</p></li><li class="listitem"><p>GCC 3.0.2: libstdc++.so.3.0.2</p></li><li class="listitem"><p>GCC 3.0.3: libstdc++.so.3.0.2 (See Note 1)</p></li><li class="listitem"><p>GCC 3.0.4: libstdc++.so.3.0.4</p></li><li class="listitem"><p>GCC 3.1.0: libstdc++.so.4.0.0 <span class="emphasis"> [...]
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>GCC 3.0.0: libstdc++.so.3.0.0</p></li><li class="listitem"><p>GCC 3.0.1: libstdc++.so.3.0.1</p></li><li class="listitem"><p>GCC 3.0.2: libstdc++.so.3.0.2</p></li><li class="listitem"><p>GCC 3.0.3: libstdc++.so.3.0.2 (See Note 1)</p></li><li class="listitem"><p>GCC 3.0.4: libstdc++.so.3.0.4</p></li><li class="listitem"><p>GCC 3.1.0: libstdc++.so.4.0.0 <span class="emphasis"> [...]
+ Note 1: Error should be libstdc++.so.3.0.3.
+ </p><p>
+ Note 2: Not strictly required.
+@@ -128,7 +128,7 @@
+ GLIBCPP_3.2 for symbols that were introduced in the GCC 3.2.0
+ release.) If a particular release is not listed, it has the same
+ version labels as the preceding release.
+- </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>GCC 3.0.0: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.1: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.2: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.3: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.4: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.1.0: GLIBCPP_3.1, CXXABI_1</p></li><li cl [...]
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>GCC 3.0.0: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.1: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.2: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.3: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.4: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.1.0: GLIBCPP_3.1, CXXABI_1</p></li><li cl [...]
+ __GXX_ABI_VERSION. This macro is defined as the version of the
+ compiler v3 ABI, with g++ 3.0 being version 100. This macro will
+ be automatically defined whenever g++ is used (the curious can
+Index: libstdc++-v3/doc/html/manual/appendix_porting.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/appendix_porting.html (.../tags/gcc_7_1_0_release)
++++ b/src/libstdc++-v3/doc/html/manual/appendix_porting.html (.../branches/gcc-7-branch)
+@@ -329,6 +329,12 @@
+ file to add the new versions to the <code class="varname">known_versions</code> list,
+ and update the checks for the latest versions that set the
+ <code class="varname">latestp</code> variable).
++</p></li><li class="listitem"><p>
++Add the library (<code class="filename">libstdc++.so.6.0.X</code>)
++and symbols versions
++(<code class="literal">GLIBCXX_3.4.X</code> and <code class="literal">CXXABI_1.3.Y</code>)
++to the <a class="link" href="abi.html#abi.versioning.history" title="History">History</a> section in
++<code class="filename">doc/xml/manual/abi.xml</code> at the relevant places.
+ </p></li></ul></div><p>
+ Once the new symbol version has been added you can add the names of your new
+ symbols in the new version node:
Index: libstdc++-v3/include/std/utility
===================================================================
--- a/src/libstdc++-v3/include/std/utility (.../tags/gcc_7_1_0_release)
@@ -52,11 +183,141 @@ Index: libstdc++-v3/include/std/utility
/// Gives the type of the ith element of a given tuple type.
template<std::size_t __i, typename _Tp>
struct tuple_element;
+Index: libstdc++-v3/include/std/functional
+===================================================================
+--- a/src/libstdc++-v3/include/std/functional (.../tags/gcc_7_1_0_release)
++++ b/src/libstdc++-v3/include/std/functional (.../branches/gcc-7-branch)
+@@ -135,6 +135,12 @@
+ _GLIBCXX_MEM_FN_TRAITS(&, true_type, false_type)
+ _GLIBCXX_MEM_FN_TRAITS(&&, false_type, true_type)
+
++#if __cplusplus > 201402L
++_GLIBCXX_MEM_FN_TRAITS(noexcept, true_type, true_type)
++_GLIBCXX_MEM_FN_TRAITS(& noexcept, true_type, false_type)
++_GLIBCXX_MEM_FN_TRAITS(&& noexcept, false_type, true_type)
++#endif
++
+ #undef _GLIBCXX_MEM_FN_TRAITS
+ #undef _GLIBCXX_MEM_FN_TRAITS2
+
+Index: libstdc++-v3/include/bits/node_handle.h
+===================================================================
+--- a/src/libstdc++-v3/include/bits/node_handle.h (.../tags/gcc_7_1_0_release)
++++ b/src/libstdc++-v3/include/bits/node_handle.h (.../branches/gcc-7-branch)
+@@ -280,8 +280,8 @@
+ template<typename _Iterator, typename _NodeHandle>
+ struct _Node_insert_return
+ {
++ _Iterator position = _Iterator();
+ bool inserted = false;
+- _Iterator position = _Iterator();
+ _NodeHandle node;
+
+ template<size_t _Idx>
+@@ -305,22 +305,6 @@
+ }
+ };
+
+- template<typename _Iterator, typename _NodeHandle>
+- struct tuple_size<_Node_insert_return<_Iterator, _NodeHandle>>
+- : integral_constant<size_t, 3> { };
+-
+- template<typename _Iterator, typename _NodeHandle>
+- struct tuple_element<0, _Node_insert_return<_Iterator, _NodeHandle>>
+- { using type = bool; };
+-
+- template<typename _Iterator, typename _NodeHandle>
+- struct tuple_element<1, _Node_insert_return<_Iterator, _NodeHandle>>
+- { using type = _Iterator; };
+-
+- template<typename _Iterator, typename _NodeHandle>
+- struct tuple_element<2, _Node_insert_return<_Iterator, _NodeHandle>>
+- { using type = _NodeHandle; };
+-
+ _GLIBCXX_END_NAMESPACE_VERSION
+ } // namespace std
+
+Index: libstdc++-v3/include/bits/stl_algo.h
+===================================================================
+--- a/src/libstdc++-v3/include/bits/stl_algo.h (.../tags/gcc_7_1_0_release)
++++ b/src/libstdc++-v3/include/bits/stl_algo.h (.../branches/gcc-7-branch)
+@@ -4258,6 +4258,20 @@
+ __gnu_cxx::__ops::__iter_comp_val(__binary_pred, __val));
+ }
+
++#if __cplusplus > 201402L
++ /** @brief Search a sequence using a Searcher object.
++ *
++ * @param __first A forward iterator.
++ * @param __last A forward iterator.
++ * @param __searcher A callable object.
++ * @return @p __searcher(__first,__last).first
++ */
++ template<typename _ForwardIterator, typename _Searcher>
++ inline _ForwardIterator
++ search(_ForwardIterator __first, _ForwardIterator __last,
++ const _Searcher& __searcher)
++ { return __searcher(__first, __last).first; }
++#endif
+
+ /**
+ * @brief Perform an operation on a sequence.
+Index: libstdc++-v3/include/bits/stl_tree.h
+===================================================================
+--- a/src/libstdc++-v3/include/bits/stl_tree.h (.../tags/gcc_7_1_0_release)
++++ b/src/libstdc++-v3/include/bits/stl_tree.h (.../branches/gcc-7-branch)
+@@ -808,7 +808,9 @@
+
+ #if __cplusplus > 201402L
+ using node_type = _Node_handle<_Key, _Val, _Node_allocator>;
+- using insert_return_type = _Node_insert_return<iterator, node_type>;
++ using insert_return_type = _Node_insert_return<
++ conditional_t<is_same_v<_Key, _Val>, const_iterator, iterator>,
++ node_type>;
+ #endif
+
+ pair<_Base_ptr, _Base_ptr>
Index: libstdc++-v3/ChangeLog
===================================================================
--- a/src/libstdc++-v3/ChangeLog (.../tags/gcc_7_1_0_release)
+++ b/src/libstdc++-v3/ChangeLog (.../branches/gcc-7-branch)
-@@ -1,3 +1,11 @@
+@@ -1,3 +1,47 @@
++2017-05-19 Jonathan Wakely <jwakely at redhat.com>
++
++ PR libstdc++/80796
++ * include/bits/stl_algo.h (search): Add new overload for C++17.
++ * testsuite/25_algorithms/search/searcher.cc: New.
++
++2017-05-18 Jonathan Wakely <jwakely at redhat.com>
++
++ PR libstdc++/80478
++ * include/std/functional (_Mem_fn_traits_base): Add specializations
++ for noexcept member function types.
++ * testsuite/20_util/function_objects/mem_fn/80478.cc: New test.
++
++2017-05-18 Jonathan Wakely <jwakely at redhat.com>
++
++ * doc/xml/manual/policy_data_structures.xml: Fix typo.
++ * doc/xml/manual/test_policy_data_structures.xml: Likewise.
++ * doc/html/*: Regenerate.
++
++ * doc/xml/manual/abi.xml: Document latest library versions.
++ * doc/xml/manual/build_hacking.xml: Document requirement to update
++ abi.xml when bumping library versions.
++ * doc/html/*: Regenerate.
++
++2017-05-15 Jonathan Wakely <jwakely at redhat.com>
++
++ PR libstdc++/80761
++ * include/bits/node_handle.h (_Node_insert_return): Reorder members.
++ (tuple_size, tuple_element): Remove partial specializations.
++ * include/bits/stl_tree.h (_Rb_tree::insert_return_type): Use
++ const_iterator for std::set.
++ * testsuite/23_containers/map/modifiers/extract.cc: New.
++ * testsuite/23_containers/set/modifiers/extract.cc: New.
++ * testsuite/23_containers/unordered_map/modifiers/extract.cc: New.
++ * testsuite/23_containers/unordered_set/modifiers/extract.cc: New.
++
+2017-05-12 Jonathan Wakely <jwakely at redhat.com>
+
+ PR libstdc++/78939
@@ -68,6 +329,178 @@ Index: libstdc++-v3/ChangeLog
2017-05-02 Release Manager
* GCC 7.1.0 released.
+Index: libstdc++-v3/testsuite/25_algorithms/search/searcher.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/25_algorithms/search/searcher.cc (.../tags/gcc_7_1_0_release)
++++ b/src/libstdc++-v3/testsuite/25_algorithms/search/searcher.cc (.../branches/gcc-7-branch)
+@@ -0,0 +1,47 @@
++// 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-options "-std=gnu++17" }
++// { dg-do run { target c++1z } }
++
++#include <algorithm>
++#include <testsuite_hooks.h>
++
++struct nocopy
++{
++ nocopy() = default;
++ nocopy(const nocopy&) = delete;
++ nocopy& operator=(const nocopy&) = delete;
++
++ struct P { int* first; };
++
++ P operator()(int* f, int* l) const { return {f}; }
++};
++
++void
++test01()
++{
++ int i[] = { 1, 2 };
++ auto res = std::search(i, i + 2, nocopy{});
++ VERIFY( res == i );
++}
++
++int
++main()
++{
++ test01();
++}
+Index: libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/extract.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/extract.cc (.../tags/gcc_7_1_0_release)
++++ b/src/libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/extract.cc (.../branches/gcc-7-branch)
+@@ -136,6 +136,17 @@
+ static_assert( is_same_v<test_type::node_type, compat_type3::node_type> );
+ }
+
++void
++test04()
++{
++ // Check order of members in insert_return_type
++ auto [pos, ins, node] = test_type::insert_return_type{};
++ using std::is_same_v;
++ static_assert( is_same_v<test_type::iterator, decltype(pos)> );
++ static_assert( is_same_v<bool, decltype(ins)> );
++ static_assert( is_same_v<test_type::node_type, decltype(node)> );
++}
++
+ int
+ main()
+ {
+Index: libstdc++-v3/testsuite/23_containers/set/modifiers/extract.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/23_containers/set/modifiers/extract.cc (.../tags/gcc_7_1_0_release)
++++ b/src/libstdc++-v3/testsuite/23_containers/set/modifiers/extract.cc (.../branches/gcc-7-branch)
+@@ -126,6 +126,17 @@
+ static_assert( is_same_v<test_type::node_type, compat_type3::node_type> );
+ }
+
++void
++test04()
++{
++ // Check order of members in insert_return_type
++ auto [pos, ins, node] = test_type::insert_return_type{};
++ using std::is_same_v;
++ static_assert( is_same_v<test_type::iterator, decltype(pos)> );
++ static_assert( is_same_v<bool, decltype(ins)> );
++ static_assert( is_same_v<test_type::node_type, decltype(node)> );
++}
++
+ int
+ main()
+ {
+Index: libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/extract.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/extract.cc (.../tags/gcc_7_1_0_release)
++++ b/src/libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/extract.cc (.../branches/gcc-7-branch)
+@@ -128,6 +128,17 @@
+ static_assert( is_same_v<test_type::node_type, compat_type3::node_type> );
+ }
+
++void
++test04()
++{
++ // Check order of members in insert_return_type
++ auto [pos, ins, node] = test_type::insert_return_type{};
++ using std::is_same_v;
++ static_assert( is_same_v<test_type::iterator, decltype(pos)> );
++ static_assert( is_same_v<bool, decltype(ins)> );
++ static_assert( is_same_v<test_type::node_type, decltype(node)> );
++}
++
+ int
+ main()
+ {
+Index: libstdc++-v3/testsuite/23_containers/map/modifiers/extract.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/23_containers/map/modifiers/extract.cc (.../tags/gcc_7_1_0_release)
++++ b/src/libstdc++-v3/testsuite/23_containers/map/modifiers/extract.cc (.../branches/gcc-7-branch)
+@@ -135,6 +135,17 @@
+ static_assert( is_same_v<test_type::node_type, compat_type3::node_type> );
+ }
+
++void
++test04()
++{
++ // Check order of members in insert_return_type
++ auto [pos, ins, node] = test_type::insert_return_type{};
++ using std::is_same_v;
++ static_assert( is_same_v<test_type::iterator, decltype(pos)> );
++ static_assert( is_same_v<bool, decltype(ins)> );
++ static_assert( is_same_v<test_type::node_type, decltype(node)> );
++}
++
+ int
+ main()
+ {
+Index: libstdc++-v3/testsuite/20_util/function_objects/mem_fn/80478.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/20_util/function_objects/mem_fn/80478.cc (.../tags/gcc_7_1_0_release)
++++ b/src/libstdc++-v3/testsuite/20_util/function_objects/mem_fn/80478.cc (.../branches/gcc-7-branch)
+@@ -0,0 +1,27 @@
++// 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-options "-std=gnu++17" }
++// { dg-do compile { target c++1z } }
++
++#include <functional>
++
++struct X {
++ void f() noexcept { }
++};
++
++auto f = std::mem_fn(&X::f);
Index: libstdc++-v3/testsuite/20_util/tuple/78939.cc
===================================================================
--- a/src/libstdc++-v3/testsuite/20_util/tuple/78939.cc (.../tags/gcc_7_1_0_release)
@@ -122,6 +555,172 @@ Index: libstdc++-v3/testsuite/20_util/tuple/78939.cc
+ const volatile auto [i, j] = a;
+ return i + j;
+}
+Index: maintainer-scripts/ChangeLog
+===================================================================
+--- a/src/maintainer-scripts/ChangeLog (.../tags/gcc_7_1_0_release)
++++ b/src/maintainer-scripts/ChangeLog (.../branches/gcc-7-branch)
+@@ -1,3 +1,14 @@
++2017-05-18 Matthias Klose <doko at ubuntu.com>
++
++ * gcc_release (build_gzip): Build xz tarball instead of bz2 tarball.
++ (build_diffs): Handle building diffs from either bz2 or xz tarballs,
++ compress diffs using xz instead of bz2.
++ (build_diff): Likewise.
++ (upload_files): Check for *.xz files instead of *.bz2 files.
++ (announce_snapshot): Announce xz tarball instead of bz2 tarball.
++ (XZ): New definition.
++ (<toplevel>): Look for both bz2 and xz compressed old tarballs.
++
+ 2017-05-02 Release Manager
+
+ * GCC 7.1.0 released.
+@@ -19,7 +30,7 @@
+
+ 2016-09-04 Gerald Pfeifer <gerald at pfeifer.com>
+
+- PR documentation/50642
++ PR documentation/50642
+ * update_web_docs_svn (CSS): Introduce.
+ Have generated files refer to it.
+
+Index: maintainer-scripts/gcc_release
+===================================================================
+--- a/src/maintainer-scripts/gcc_release (.../tags/gcc_7_1_0_release)
++++ b/src/maintainer-scripts/gcc_release (.../branches/gcc-7-branch)
+@@ -221,7 +221,7 @@
+ # Create a "MD5SUMS" file to use for checking the validity of the release.
+ echo \
+ "# This file contains the MD5 checksums of the files in the
+-# gcc-"${RELEASE}".tar.bz2 tarball.
++# gcc-"${RELEASE}".tar.xz tarball.
+ #
+ # Besides verifying that all files in the tarball were correctly expanded,
+ # it also can be used to determine if any files have changed since the
+@@ -244,11 +244,11 @@
+
+ build_tarfile() {
+ # Get the name of the destination tar file.
+- TARFILE="$1.tar.bz2"
++ TARFILE="$1.tar.xz"
+ shift
+
+ # Build the tar file itself.
+- (${TAR} cf - "$@" | ${BZIP2} > ${TARFILE}) || \
++ (${TAR} cf - "$@" | ${XZ} > ${TARFILE}) || \
+ error "Could not build tarfile"
+ FILE_LIST="${FILE_LIST} ${TARFILE}"
+ }
+@@ -273,8 +273,8 @@
+ # Build .gz files.
+ build_gzip() {
+ for f in ${FILE_LIST}; do
+- target=${f%.bz2}.gz
+- (${BZIP2} -d -c $f | ${GZIP} > ${target}) || error "Could not create ${target}"
++ target=${f%.xz}.gz
++ (${XZ} -d -c $f | ${GZIP} > ${target}) || error "Could not create ${target}"
+ done
+ }
+
+@@ -282,12 +282,19 @@
+ build_diffs() {
+ old_dir=${1%/*}
+ old_file=${1##*/}
+- old_vers=${old_file%.tar.bz2}
++ case "$old_file" in
++ *.tar.xz) old_vers=${old_file%.tar.xz};;
++ *) old_vers=${old_file%.tar.bz2};;
++ esac
+ old_vers=${old_vers#gcc-}
+ inform "Building diffs against version $old_vers"
+ for f in gcc; do
+- old_tar=${old_dir}/${f}-${old_vers}.tar.bz2
+- new_tar=${WORKING_DIRECTORY}/${f}-${RELEASE}.tar.bz2
++ if [ -e ${old_dir}/${f}-${old_vers}.tar.xz ]; then
++ old_tar=${old_dir}/${f}-${old_vers}.tar.xz
++ else
++ old_tar=${old_dir}/${f}-${old_vers}.tar.bz2
++ fi
++ new_tar=${WORKING_DIRECTORY}/${f}-${RELEASE}.tar.xz
+ if [ ! -e $old_tar ]; then
+ inform "$old_tar not found; not generating diff file"
+ elif [ ! -e $new_tar ]; then
+@@ -294,7 +301,7 @@
+ inform "$new_tar not found; not generating diff file"
+ else
+ build_diff $old_tar gcc-${old_vers} $new_tar gcc-${RELEASE} \
+- ${f}-${old_vers}-${RELEASE}.diff.bz2
++ ${f}-${old_vers}-${RELEASE}.diff.xz
+ fi
+ done
+ }
+@@ -305,13 +312,20 @@
+ tmpdir=gccdiff.$$
+ mkdir $tmpdir || error "Could not create directory $tmpdir"
+ changedir $tmpdir
+- (${BZIP2} -d -c $1 | ${TAR} xf - ) || error "Could not unpack $1 for diffs"
+- (${BZIP2} -d -c $3 | ${TAR} xf - ) || error "Could not unpack $3 for diffs"
+- ${DIFF} $2 $4 > ../${5%.bz2}
++ case "$1" in
++ *.tar.bz2)
++ (${BZIP2} -d -c $1 | ${TAR} xf - ) || error "Could not unpack $1 for diffs"
++ ;;
++ *.tar.xz)
++ (${XZ} -d -c $1 | ${TAR} xf - ) || error "Could not unpack $1 for diffs"
++ ;;
++ esac
++ (${XZ} -d -c $3 | ${TAR} xf - ) || error "Could not unpack $3 for diffs"
++ ${DIFF} $2 $4 > ../${5%.xz}
+ if [ $? -eq 2 ]; then
+ error "Trouble making diffs from $1 to $3"
+ fi
+- ${BZIP2} ../${5%.bz2} || error "Could not generate ../$5"
++ ${XZ} ../${5%.xz} || error "Could not generate ../$5"
+ changedir ..
+ rm -rf $tmpdir
+ FILE_LIST="${FILE_LIST} $5"
+@@ -335,7 +349,7 @@
+ fi
+
+ # Then copy files to their respective (sub)directories.
+- for x in gcc*.gz gcc*.bz2; do
++ for x in gcc*.gz gcc*.xz; do
+ if [ -e ${x} ]; then
+ # Make sure the file will be readable on the server.
+ chmod a+r ${x}
+@@ -410,7 +424,7 @@
+
+ <table>" > ${SNAPSHOT_INDEX}
+
+- snapshot_print gcc-${RELEASE}.tar.bz2 "Complete GCC"
++ snapshot_print gcc-${RELEASE}.tar.xz "Complete GCC"
+
+ echo \
+ "Diffs from "${BRANCH}"-"${LAST_DATE}" are available in the diffs/ subdirectory.
+@@ -528,12 +542,13 @@
+ MODE_TARFILES=0
+ MODE_UPLOAD=0
+
+-# List of archive files generated; used to create .gz files from .bz2.
++# List of archive files generated; used to create .gz files from .xz.
+ FILE_LIST=""
+
+ # Programs we use.
+
+ BZIP2="${BZIP2:-bzip2}"
++XZ="${XZ:-xz}"
+ CVS="${CVS:-cvs -f -Q -z9}"
+ DIFF="${DIFF:-diff -Nrcpad}"
+ ENV="${ENV:-env}"
+@@ -644,6 +659,9 @@
+ if [ $MODE_DIFFS -ne 0 ] && [ $LOCAL -ne 0 ] && [ -z "${OLD_TARS}" ]; then
+ LAST_DATE=`cat ~/.snapshot_date-${BRANCH}`
+ OLD_TARS=${SNAPSHOTS_DIR}/${BRANCH}-${LAST_DATE}/gcc-${BRANCH}-${LAST_DATE}.tar.bz2
++ if [ ! -e $OLD_TARS ]; then
++ OLD_TARS=${SNAPSHOTS_DIR}/${BRANCH}-${LAST_DATE}/gcc-${BRANCH}-${LAST_DATE}.tar.xz
++ fi
+ fi
+ fi
+
Index: libgcc/config.host
===================================================================
--- a/src/libgcc/config.host (.../tags/gcc_7_1_0_release)
@@ -139,7 +738,12 @@ Index: libgcc/ChangeLog
===================================================================
--- a/src/libgcc/ChangeLog (.../tags/gcc_7_1_0_release)
+++ b/src/libgcc/ChangeLog (.../branches/gcc-7-branch)
-@@ -1,3 +1,11 @@
+@@ -1,3 +1,16 @@
++2017-05-15 Adhemerval Zanella <adhemerval.zanella at linaro.org>
++
++ * config/sparc/lb1spc.S [__ELF__ && __linux__]: Emit .note.GNU-stack
++ section for a non-executable stack.
++
+2017-05-10 Andreas Tobler <andreast at gcc.gnu.org>
+
+ Backport from mainline
@@ -151,6 +755,23 @@ Index: libgcc/ChangeLog
2017-05-02 Release Manager
* GCC 7.1.0 released.
+Index: libgcc/config/sparc/lb1spc.S
+===================================================================
+--- a/src/libgcc/config/sparc/lb1spc.S (.../tags/gcc_7_1_0_release)
++++ b/src/libgcc/config/sparc/lb1spc.S (.../branches/gcc-7-branch)
+@@ -5,6 +5,12 @@
+ slightly edited to match the desired calling convention, and also to
+ optimize them for our purposes. */
+
++/* An executable stack is *not* required for these functions. */
++#if defined(__ELF__) && defined(__linux__)
++.section .note.GNU-stack,"",%progbits
++.previous
++#endif
++
+ #ifdef L_mulsi3
+ .text
+ .align 4
Index: gcc/c/ChangeLog
===================================================================
--- a/src/gcc/c/ChangeLog (.../tags/gcc_7_1_0_release)
@@ -194,7 +815,7 @@ Index: gcc/DATESTAMP
+++ b/src/gcc/DATESTAMP (.../branches/gcc-7-branch)
@@ -1 +1 @@
-20170502
-+20170514
++20170519
Index: gcc/tree-chrec.c
===================================================================
--- a/src/gcc/tree-chrec.c (.../tags/gcc_7_1_0_release)
@@ -323,7 +944,19 @@ Index: gcc/ChangeLog
===================================================================
--- a/src/gcc/ChangeLog (.../tags/gcc_7_1_0_release)
+++ b/src/gcc/ChangeLog (.../branches/gcc-7-branch)
-@@ -1,3 +1,134 @@
+@@ -1,3 +1,146 @@
++2017-05-19 Uros Bizjak <ubizjak at gmail.com>
++
++ Backport from mainline
++ 2017-05-18 Uros Bizjak <ubizjak at gmail.com>
++
++ PR target/80799
++ * config/i386/mmx.md (*mov<mode>_internal): Enable
++ alternatives 11, 12, 13 and 14 also for 32bit targets.
++ Remove alternatives 15, 16, 17 and 18.
++ * config/i386/sse.md (vec_concatv2di): Change
++ alternative (!x, *y) to (x, ?!*Yn).
++
+2017-05-14 Uros Bizjak <ubizjak at gmail.com>
+
+ Backport from mainline
@@ -712,6 +1345,91 @@ Index: gcc/testsuite/gcc.target/i386/pr80706.c
+ __builtin_abort ();
+ return 0;
+}
+Index: gcc/testsuite/gfortran.dg/pr80752.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/pr80752.f90 (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/testsuite/gfortran.dg/pr80752.f90 (.../branches/gcc-7-branch)
+@@ -0,0 +1,20 @@
++! { dg-do compile }
++! PR fortran/80752
++module exchange_utils
++
++ implicit none
++
++ integer, parameter, public :: knd = 8
++
++ type, private :: a
++ logical :: add_vs98 = 0.0_knd ! { dg-error "Can't convert" }
++ end type a
++
++ type, private :: x_param_t
++ type(a) :: m05_m06
++ end type x_param_t
++
++ type(x_param_t), public, save :: x_param
++
++end module exchange_utils
++
+Index: gcc/testsuite/gfortran.dg/read_3.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/read_3.f90 (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/testsuite/gfortran.dg/read_3.f90 (.../branches/gcc-7-branch)
+@@ -0,0 +1,13 @@
++! { dg-do run }
++! PR80727 Crash of runtime gfortran library during integer transformation
++! Note: before the patch this was giving an incorrect EOR error on READ.
++program gfortran_710_io_bug
++ character str*4
++ integer(4) :: i4
++ str =''
++ i = 256
++ write(str,fmt='(a)') i
++ i = 0
++ read ( unit=str(1:4), fmt='(a)' ) i4
++ if (i4.ne.256) call abort
++end program gfortran_710_io_bug
+Index: gcc/testsuite/gfortran.dg/namelist_93.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/namelist_93.f90 (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/testsuite/gfortran.dg/namelist_93.f90 (.../branches/gcc-7-branch)
+@@ -0,0 +1,16 @@
++! { dg-do compile }
++! PR78659 Spurious "requires DTIO" reported against namelist statement
++MODULE ma
++ IMPLICIT NONE
++ TYPE :: ta
++ INTEGER, allocatable :: array(:)
++ END TYPE ta
++END MODULE ma
++
++PROGRAM p
++ USE ma
++ class(ta), allocatable :: x
++ NAMELIST /nml/ x
++ WRITE (*, nml)! { dg-error "is polymorphic and requires a defined input/output procedure" }
++ READ (*, nml) ! { dg-error "is polymorphic and requires a defined input/output procedure" }
++END PROGRAM p
+Index: gcc/testsuite/gfortran.dg/namelist_92.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/namelist_92.f90 (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/testsuite/gfortran.dg/namelist_92.f90 (.../branches/gcc-7-branch)
+@@ -0,0 +1,16 @@
++! { dg-do compile }
++! PR78659 Spurious "requires DTIO" reported against namelist statement
++MODULE ma
++ IMPLICIT NONE
++ TYPE :: ta
++ INTEGER, allocatable :: array(:)
++ END TYPE ta
++END MODULE ma
++
++PROGRAM p
++ USE ma
++ type(ta):: x
++ NAMELIST /nml/ x
++ WRITE (*, nml) ! { dg-error "has ALLOCATABLE or POINTER components and thus requires a defined input/output" }
++ READ (*, nml) ! { dg-error "has ALLOCATABLE or POINTER components and thus requires a defined input/output" }
++END PROGRAM p
Index: gcc/testsuite/gfortran.dg/proc_ptr_comp_49.f90
===================================================================
--- a/src/gcc/testsuite/gfortran.dg/proc_ptr_comp_49.f90 (.../tags/gcc_7_1_0_release)
@@ -738,6 +1456,20 @@ Index: gcc/testsuite/gfortran.dg/proc_ptr_comp_49.f90
+ end function
+
+end module
+Index: gcc/testsuite/gfortran.dg/namelist_91.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/namelist_91.f90 (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/testsuite/gfortran.dg/namelist_91.f90 (.../branches/gcc-7-branch)
+@@ -0,0 +1,9 @@
++! { dg-do compile }
++! PR78659 Spurious "requires DTIO" reported against namelist statement
++program p
++ type t
++ integer :: k
++ end type
++ class(t), allocatable :: x
++ namelist /nml/ x
++end
Index: gcc/testsuite/gfortran.dg/intent_out_9.f90
===================================================================
--- a/src/gcc/testsuite/gfortran.dg/intent_out_9.f90 (.../tags/gcc_7_1_0_release)
@@ -822,6 +1554,43 @@ Index: gcc/testsuite/gfortran.dg/dtio_29.f03
+ B_type(wage), B_type(wage)
+ print *, trim(iom)
+end program test
+Index: gcc/testsuite/gfortran.dg/namelist_94.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/namelist_94.f90 (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/testsuite/gfortran.dg/namelist_94.f90 (.../branches/gcc-7-branch)
+@@ -0,0 +1,32 @@
++! { dg-do compile }
++! PR78659 Spurious "requires DTIO" reported against namelist statement
++MODULE m
++ IMPLICIT NONE
++ TYPE :: t
++ CHARACTER :: c
++ CONTAINS
++ PROCEDURE :: write_formatted
++ GENERIC :: WRITE(FORMATTED) => write_formatted
++ END TYPE
++CONTAINS
++ SUBROUTINE write_formatted(dtv, unit, iotype, v_list, iostat, iomsg)
++ CLASS(t), INTENT(IN) :: dtv
++ INTEGER, INTENT(IN) :: unit
++ CHARACTER(*), INTENT(IN) :: iotype
++ INTEGER, INTENT(IN) :: v_list(:)
++ INTEGER, INTENT(OUT) :: iostat
++ CHARACTER(*), INTENT(INOUT) :: iomsg
++ WRITE (unit, "(A)", IOSTAT=iostat, IOMSG=iomsg) dtv%c
++ print *, "what"
++ END SUBROUTINE
++END MODULE
++
++PROGRAM p
++ USE m
++ IMPLICIT NONE
++ class(t), allocatable :: x
++ NAMELIST /nml/ x
++ x = t('a')
++ WRITE (*, nml)
++ READ (*, nml) ! { dg-error "is polymorphic and requires a defined input/output procedure" }
++END
Index: gcc/testsuite/gcc.dg/pr80468.c
===================================================================
--- a/src/gcc/testsuite/gcc.dg/pr80468.c (.../tags/gcc_7_1_0_release)
@@ -893,7 +1662,35 @@ Index: gcc/testsuite/ChangeLog
===================================================================
--- a/src/gcc/testsuite/ChangeLog (.../tags/gcc_7_1_0_release)
+++ b/src/gcc/testsuite/ChangeLog (.../branches/gcc-7-branch)
-@@ -1,3 +1,81 @@
+@@ -1,3 +1,109 @@
++2017-05-19 Uros Bizjak <ubizjak at gmail.com>
++
++ Backport from mainline
++ 2017-05-18 Uros Bizjak <ubizjak at gmail.com>
++
++ PR target/80799
++ * g++.dg/other/i386-11.C: New test.
++
++2017-05-17 Jerry DeLisle <jvdelisle at gcc.gnu.org>
++
++ Backport from trunk
++ PR libgfortran/80727
++ * gfortran.dg/read_3.f90: New test.
++
++2017-05-17 Jerry DeLisle <jvdelisle at gcc.gnu.org>
++
++ Backport from trunk
++ PR fortran/78659
++ * gfortran.dg/namelist_91.f90: New test.
++ * gfortran.dg/namelist_92.f90: New test.
++ * gfortran.dg/namelist_93.f90: New test.
++ * gfortran.dg/namelist_94.f90: New test.
++
++2017-05-15 Steven G. Kargl <kargl at gcc.gnu.org>
++
++ PR fortran/80752
++ gfortran.dg/pr80752.f90: New test.
++
+2017-05-14 Uros Bizjak <ubizjak at gmail.com>
+
+ Backport from mainline
@@ -975,6 +1772,68 @@ Index: gcc/testsuite/ChangeLog
2017-05-02 Release Manager
* GCC 7.1.0 released.
+Index: gcc/testsuite/g++.dg/other/i386-11.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/other/i386-11.C (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/testsuite/g++.dg/other/i386-11.C (.../branches/gcc-7-branch)
+@@ -0,0 +1,57 @@
++// PR target/80799
++// { dg-do compile { target i?86-*-* x86_64-*-* } }
++// { dg-require-effective-target c++11 }
++// { dg-options "-O2 -msse2" }
++
++#include <xmmintrin.h>
++#include <emmintrin.h>
++
++class alignas(16) GSVector4i
++{
++public:
++ __m128i m;
++
++ explicit GSVector4i(__m128i m)
++ {
++ this->m = m;
++ }
++
++ static void storel(void* p, const GSVector4i& v)
++ {
++ _mm_storel_epi64((__m128i*)p, v.m);
++ }
++
++ static GSVector4i loadl(const void* p)
++ {
++ return GSVector4i(_mm_loadl_epi64((__m128i*)p));
++ }
++
++ bool eq(const GSVector4i& v) const
++ {
++ return _mm_movemask_epi8(_mm_cmpeq_epi32(m, v.m)) == 0xffff;
++ }
++};
++
++
++union GIFRegTRXPOS
++{
++ unsigned long long u64;
++ void operator = (const GSVector4i& v) {GSVector4i::storel(this, v);}
++ bool operator != (const union GIFRegTRXPOS& r) const {return !((GSVector4i)r).eq(*this);}
++ operator GSVector4i() const {return GSVector4i::loadl(this);}
++};
++
++extern void dummy_call();
++extern GIFRegTRXPOS TRXPOS;
++
++void GIFRegHandlerTRXPOS(const GIFRegTRXPOS& p)
++{
++ if(p != TRXPOS)
++ {
++ dummy_call();
++ }
++
++ TRXPOS = (GSVector4i)p;
++}
++
++// { dg-final { scan-assembler-not "%mm" } }
Index: gcc/expr.c
===================================================================
--- a/src/gcc/expr.c (.../tags/gcc_7_1_0_release)
@@ -1131,6 +1990,367 @@ Index: gcc/go/ChangeLog
2017-05-02 Release Manager
* GCC 7.1.0 released.
+Index: gcc/go/gofrontend/types.h
+===================================================================
+--- a/src/gcc/go/gofrontend/types.h (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/go/gofrontend/types.h (.../branches/gcc-7-branch)
+@@ -590,6 +590,22 @@
+ are_identical(const Type* lhs, const Type* rhs, bool errors_are_identical,
+ std::string* reason);
+
++ // An argument to are_identical_cmp_tags, indicating whether or not
++ // to compare struct field tags.
++ enum Cmp_tags {
++ COMPARE_TAGS,
++ IGNORE_TAGS
++ };
++
++ // Return true if two types are identical. This is like the
++ // are_identical function, but also takes a CMP_TAGS argument
++ // indicating whether to compare struct tags. Otherwise the
++ // parameters are as for are_identical.
++ static bool
++ are_identical_cmp_tags(const Type* lhs, const Type* rhs,
++ Cmp_tags, bool errors_are_identical,
++ std::string* reason);
++
+ // Return true if two types are compatible for use in a binary
+ // operation, other than a shift, comparison, or channel send. This
+ // is an equivalence relation.
+@@ -1922,7 +1938,7 @@
+ // Whether this type is the same as T.
+ bool
+ is_identical(const Function_type* t, bool ignore_receiver,
+- bool errors_are_identical, std::string*) const;
++ Cmp_tags, bool errors_are_identical, std::string*) const;
+
+ // Record that this is a varargs function.
+ void
+@@ -2322,7 +2338,8 @@
+
+ // Whether this type is identical with T.
+ bool
+- is_identical(const Struct_type* t, bool errors_are_identical) const;
++ is_identical(const Struct_type* t, Cmp_tags,
++ bool errors_are_identical) const;
+
+ // Return whether NAME is a local field which is not exported. This
+ // is only used for better error reporting.
+@@ -2521,7 +2538,8 @@
+
+ // Whether this type is identical with T.
+ bool
+- is_identical(const Array_type* t, bool errors_are_identical) const;
++ is_identical(const Array_type* t, Cmp_tags,
++ bool errors_are_identical) const;
+
+ // Return an expression for the pointer to the values in an array.
+ Expression*
+@@ -2694,7 +2712,8 @@
+
+ // Whether this type is identical with T.
+ bool
+- is_identical(const Map_type* t, bool errors_are_identical) const;
++ is_identical(const Map_type* t, Cmp_tags,
++ bool errors_are_identical) const;
+
+ // Import a map type.
+ static Map_type*
+@@ -2814,7 +2833,8 @@
+
+ // Whether this type is identical with T.
+ bool
+- is_identical(const Channel_type* t, bool errors_are_identical) const;
++ is_identical(const Channel_type* t, Cmp_tags,
++ bool errors_are_identical) const;
+
+ // Import a channel type.
+ static Channel_type*
+@@ -2927,7 +2947,8 @@
+ // Whether this type is identical with T. REASON is as in
+ // implements_interface.
+ bool
+- is_identical(const Interface_type* t, bool errors_are_identical) const;
++ is_identical(const Interface_type* t, Cmp_tags,
++ bool errors_are_identical) const;
+
+ // Whether we can assign T to this type. is_identical is known to
+ // be false.
+Index: gcc/go/gofrontend/types.cc
+===================================================================
+--- a/src/gcc/go/gofrontend/types.cc (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/go/gofrontend/types.cc (.../branches/gcc-7-branch)
+@@ -317,6 +317,16 @@
+ Type::are_identical(const Type* t1, const Type* t2, bool errors_are_identical,
+ std::string* reason)
+ {
++ return Type::are_identical_cmp_tags(t1, t2, COMPARE_TAGS,
++ errors_are_identical, reason);
++}
++
++// Like are_identical, but with a CMP_TAGS parameter.
++
++bool
++Type::are_identical_cmp_tags(const Type* t1, const Type* t2, Cmp_tags cmp_tags,
++ bool errors_are_identical, std::string* reason)
++{
+ if (t1 == NULL || t2 == NULL)
+ {
+ // Something is wrong.
+@@ -387,31 +397,33 @@
+ case TYPE_FUNCTION:
+ return t1->function_type()->is_identical(t2->function_type(),
+ false,
++ cmp_tags,
+ errors_are_identical,
+ reason);
+
+ case TYPE_POINTER:
+- return Type::are_identical(t1->points_to(), t2->points_to(),
+- errors_are_identical, reason);
++ return Type::are_identical_cmp_tags(t1->points_to(), t2->points_to(),
++ cmp_tags, errors_are_identical,
++ reason);
+
+ case TYPE_STRUCT:
+- return t1->struct_type()->is_identical(t2->struct_type(),
++ return t1->struct_type()->is_identical(t2->struct_type(), cmp_tags,
+ errors_are_identical);
+
+ case TYPE_ARRAY:
+- return t1->array_type()->is_identical(t2->array_type(),
++ return t1->array_type()->is_identical(t2->array_type(), cmp_tags,
+ errors_are_identical);
+
+ case TYPE_MAP:
+- return t1->map_type()->is_identical(t2->map_type(),
++ return t1->map_type()->is_identical(t2->map_type(), cmp_tags,
+ errors_are_identical);
+
+ case TYPE_CHANNEL:
+- return t1->channel_type()->is_identical(t2->channel_type(),
++ return t1->channel_type()->is_identical(t2->channel_type(), cmp_tags,
+ errors_are_identical);
+
+ case TYPE_INTERFACE:
+- return t1->interface_type()->is_identical(t2->interface_type(),
++ return t1->interface_type()->is_identical(t2->interface_type(), cmp_tags,
+ errors_are_identical);
+
+ case TYPE_CALL_MULTIPLE_RESULT:
+@@ -735,13 +747,15 @@
+ return true;
+
+ // The types are convertible if they have identical underlying
+- // types.
++ // types, ignoring struct field tags.
+ if ((lhs->named_type() != NULL || rhs->named_type() != NULL)
+- && Type::are_identical(lhs->base(), rhs->base(), true, reason))
++ && Type::are_identical_cmp_tags(lhs->base(), rhs->base(), IGNORE_TAGS,
++ true, reason))
+ return true;
+
+ // The types are convertible if they are both unnamed pointer types
+- // and their pointer base types have identical underlying types.
++ // and their pointer base types have identical underlying types,
++ // ignoring struct field tags.
+ if (lhs->named_type() == NULL
+ && rhs->named_type() == NULL
+ && lhs->points_to() != NULL
+@@ -748,10 +762,11 @@
+ && rhs->points_to() != NULL
+ && (lhs->points_to()->named_type() != NULL
+ || rhs->points_to()->named_type() != NULL)
+- && Type::are_identical(lhs->points_to()->base(),
+- rhs->points_to()->base(),
+- true,
+- reason))
++ && Type::are_identical_cmp_tags(lhs->points_to()->base(),
++ rhs->points_to()->base(),
++ IGNORE_TAGS,
++ true,
++ reason))
+ return true;
+
+ // Integer and floating point types are convertible to each other.
+@@ -3758,7 +3773,7 @@
+ Function_type::is_valid_redeclaration(const Function_type* t,
+ std::string* reason) const
+ {
+- if (!this->is_identical(t, false, true, reason))
++ if (!this->is_identical(t, false, COMPARE_TAGS, true, reason))
+ return false;
+
+ // A redeclaration of a function is required to use the same names
+@@ -3836,7 +3851,7 @@
+
+ bool
+ Function_type::is_identical(const Function_type* t, bool ignore_receiver,
+- bool errors_are_identical,
++ Cmp_tags cmp_tags, bool errors_are_identical,
+ std::string* reason) const
+ {
+ if (!ignore_receiver)
+@@ -3851,8 +3866,8 @@
+ }
+ if (r1 != NULL)
+ {
+- if (!Type::are_identical(r1->type(), r2->type(), errors_are_identical,
+- reason))
++ if (!Type::are_identical_cmp_tags(r1->type(), r2->type(), cmp_tags,
++ errors_are_identical, reason))
+ {
+ if (reason != NULL && !reason->empty())
+ *reason = "receiver: " + *reason;
+@@ -3883,8 +3898,8 @@
+ return false;
+ }
+
+- if (!Type::are_identical(p1->type(), p2->type(),
+- errors_are_identical, NULL))
++ if (!Type::are_identical_cmp_tags(p1->type(), p2->type(), cmp_tags,
++ errors_are_identical, NULL))
+ {
+ if (reason != NULL)
+ *reason = _("different parameter types");
+@@ -3928,8 +3943,9 @@
+ return false;
+ }
+
+- if (!Type::are_identical(res1->type(), res2->type(),
+- errors_are_identical, NULL))
++ if (!Type::are_identical_cmp_tags(res1->type(), res2->type(),
++ cmp_tags, errors_are_identical,
++ NULL))
+ {
+ if (reason != NULL)
+ *reason = _("different result types");
+@@ -5103,7 +5119,7 @@
+ // Whether this type is identical to T.
+
+ bool
+-Struct_type::is_identical(const Struct_type* t,
++Struct_type::is_identical(const Struct_type* t, Cmp_tags cmp_tags,
+ bool errors_are_identical) const
+ {
+ if (this->is_struct_incomparable_ != t->is_struct_incomparable_)
+@@ -5122,21 +5138,24 @@
+ if (pf1->field_name() != pf2->field_name())
+ return false;
+ if (pf1->is_anonymous() != pf2->is_anonymous()
+- || !Type::are_identical(pf1->type(), pf2->type(),
+- errors_are_identical, NULL))
++ || !Type::are_identical_cmp_tags(pf1->type(), pf2->type(), cmp_tags,
++ errors_are_identical, NULL))
+ return false;
+- if (!pf1->has_tag())
++ if (cmp_tags == COMPARE_TAGS)
+ {
+- if (pf2->has_tag())
+- return false;
++ if (!pf1->has_tag())
++ {
++ if (pf2->has_tag())
++ return false;
++ }
++ else
++ {
++ if (!pf2->has_tag())
++ return false;
++ if (pf1->tag() != pf2->tag())
++ return false;
++ }
+ }
+- else
+- {
+- if (!pf2->has_tag())
+- return false;
+- if (pf1->tag() != pf2->tag())
+- return false;
+- }
+ }
+ if (pf2 != fields2->end())
+ return false;
+@@ -6363,10 +6382,11 @@
+ // Whether two array types are identical.
+
+ bool
+-Array_type::is_identical(const Array_type* t, bool errors_are_identical) const
++Array_type::is_identical(const Array_type* t, Cmp_tags cmp_tags,
++ bool errors_are_identical) const
+ {
+- if (!Type::are_identical(this->element_type(), t->element_type(),
+- errors_are_identical, NULL))
++ if (!Type::are_identical_cmp_tags(this->element_type(), t->element_type(),
++ cmp_tags, errors_are_identical, NULL))
+ return false;
+
+ if (this->is_array_incomparable_ != t->is_array_incomparable_)
+@@ -7370,12 +7390,14 @@
+ // Whether two map types are identical.
+
+ bool
+-Map_type::is_identical(const Map_type* t, bool errors_are_identical) const
++Map_type::is_identical(const Map_type* t, Cmp_tags cmp_tags,
++ bool errors_are_identical) const
+ {
+- return (Type::are_identical(this->key_type(), t->key_type(),
+- errors_are_identical, NULL)
+- && Type::are_identical(this->val_type(), t->val_type(),
+- errors_are_identical, NULL));
++ return (Type::are_identical_cmp_tags(this->key_type(), t->key_type(),
++ cmp_tags, errors_are_identical, NULL)
++ && Type::are_identical_cmp_tags(this->val_type(), t->val_type(),
++ cmp_tags, errors_are_identical,
++ NULL));
+ }
+
+ // Hash code.
+@@ -7909,11 +7931,11 @@
+ // Whether this type is the same as T.
+
+ bool
+-Channel_type::is_identical(const Channel_type* t,
++Channel_type::is_identical(const Channel_type* t, Cmp_tags cmp_tags,
+ bool errors_are_identical) const
+ {
+- if (!Type::are_identical(this->element_type(), t->element_type(),
+- errors_are_identical, NULL))
++ if (!Type::are_identical_cmp_tags(this->element_type(), t->element_type(),
++ cmp_tags, errors_are_identical, NULL))
+ return false;
+ return (this->may_send_ == t->may_send_
+ && this->may_receive_ == t->may_receive_);
+@@ -8341,7 +8363,7 @@
+ // Whether this type is identical with T.
+
+ bool
+-Interface_type::is_identical(const Interface_type* t,
++Interface_type::is_identical(const Interface_type* t, Cmp_tags cmp_tags,
+ bool errors_are_identical) const
+ {
+ // If methods have not been finalized, then we are asking whether
+@@ -8372,8 +8394,8 @@
+ if (p1 == this->all_methods_->end())
+ break;
+ if (p1->name() != p2->name()
+- || !Type::are_identical(p1->type(), p2->type(),
+- errors_are_identical, NULL))
++ || !Type::are_identical_cmp_tags(p1->type(), p2->type(), cmp_tags,
++ errors_are_identical, NULL))
+ break;
+ }
+
+@@ -8571,7 +8593,8 @@
+ Function_type* m_fn_type = m->type()->function_type();
+ go_assert(p_fn_type != NULL && m_fn_type != NULL);
+ std::string subreason;
+- if (!p_fn_type->is_identical(m_fn_type, true, true, &subreason))
++ if (!p_fn_type->is_identical(m_fn_type, true, COMPARE_TAGS, true,
++ &subreason))
+ {
+ if (reason != NULL)
+ {
Index: gcc/ada/system-linux-aarch64-ilp32.ads
===================================================================
--- a/src/gcc/ada/system-linux-aarch64-ilp32.ads (.../tags/gcc_7_1_0_release)
@@ -1297,7 +2517,20 @@ Index: gcc/ada/ChangeLog
===================================================================
--- a/src/gcc/ada/ChangeLog (.../tags/gcc_7_1_0_release)
+++ b/src/gcc/ada/ChangeLog (.../branches/gcc-7-branch)
-@@ -1,3 +1,29 @@
+@@ -1,3 +1,42 @@
++2017-05-17 Eric Botcazou <ebotcazou at adacore.com>
++
++ PR ada/80784
++ Backport from mainline
++
++ 2017-05-02 Ed Schonberg <schonberg at adacore.com>
++
++ * exp_ch3.adb (Freeze_Type): Do not generate an invariant
++ procedure body for a local (sub)type declaration within a
++ predicate function. Invariant checks do not apply to these, and
++ the expansion of the procedure will happen in the wrong scope,
++ leading to misplaced freeze nodes.
++
+2017-05-12 Eric Botcazou <ebotcazou at adacore.com>
+
+ * system-linux-arm.ads (Memory_Size): Use Long_Integer'Size
@@ -1390,6 +2623,31 @@ Index: gcc/ada/system-linux-arm.ads
-- Address comparison
+Index: gcc/ada/exp_ch3.adb
+===================================================================
+--- a/src/gcc/ada/exp_ch3.adb (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/ada/exp_ch3.adb (.../branches/gcc-7-branch)
+@@ -7518,8 +7518,19 @@
+ -- class-wide invariants from parent types or interfaces, and invariants
+ -- on array elements or record components.
+
++ -- Do not generate invariant procedure within other assertion
++ -- subprograms, which may involve local declarations of local
++ -- subtypes to which these checks don't apply.
++
+ if Has_Invariants (Def_Id) then
+- Build_Invariant_Procedure_Body (Def_Id);
++ if Within_Internal_Subprogram
++ or else (Ekind (Current_Scope) = E_Function
++ and then Is_Predicate_Function (Current_Scope))
++ then
++ null;
++ else
++ Build_Invariant_Procedure_Body (Def_Id);
++ end if;
+ end if;
+
+ if Mode_Set then
Index: gcc/fortran/trans-expr.c
===================================================================
--- a/src/gcc/fortran/trans-expr.c (.../tags/gcc_7_1_0_release)
@@ -1415,7 +2673,25 @@ Index: gcc/fortran/ChangeLog
===================================================================
--- a/src/gcc/fortran/ChangeLog (.../tags/gcc_7_1_0_release)
+++ b/src/gcc/fortran/ChangeLog (.../branches/gcc-7-branch)
-@@ -1,3 +1,26 @@
+@@ -1,3 +1,44 @@
++2017-05-17 Jerry DeLisle <jvdelisle at gcc.gnu.org>
++
++ Backport from trunk
++ PR fortran/78659
++ * io.c (dtio_procs_present): Add new function to check for DTIO
++ procedures relative to I/O statement READ or WRITE.
++ (gfc_resolve_dt): Add namelist checks using the new function.
++ * resolve.c (dtio_procs_present): Remove function and related
++ namelist checks. (resolve_fl_namelist): Add check specific to
++ Fortran 95 restriction on namelist objects.
++
++2017-05-15 Steven G. Kargl <kargl at gcc.gnu.org>
++
++ Backport from trunk
++ PR fortran/80752
++ * expr.c (gfc_generate_initializer): If type conversion fails,
++ check for error and return NULL.
++
+2017-05-05 Janus Weil <janus at gcc.gnu.org>
+
+ Backport from trunk
@@ -1442,6 +2718,24 @@ Index: gcc/fortran/ChangeLog
2017-05-02 Release Manager
* GCC 7.1.0 released.
+Index: gcc/fortran/expr.c
+===================================================================
+--- a/src/gcc/fortran/expr.c (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/fortran/expr.c (.../branches/gcc-7-branch)
+@@ -4395,7 +4395,12 @@
+ if ((comp->ts.type != tmp->ts.type
+ || comp->ts.kind != tmp->ts.kind)
+ && !comp->attr.pointer && !comp->attr.proc_pointer)
+- gfc_convert_type_warn (ctor->expr, &comp->ts, 2, false);
++ {
++ bool val;
++ val = gfc_convert_type_warn (ctor->expr, &comp->ts, 1, false);
++ if (val == false)
++ return NULL;
++ }
+ }
+
+ if (comp->attr.allocatable
Index: gcc/fortran/module.c
===================================================================
--- a/src/gcc/fortran/module.c (.../tags/gcc_7_1_0_release)
@@ -1617,6 +2911,194 @@ Index: gcc/fortran/io.c
case FMT_F:
t = format_lex ();
if (t == FMT_ERROR)
+@@ -2956,7 +2966,31 @@
+ return MATCH_ERROR;
+ }
+
++/* Check for formatted read and write DTIO procedures. */
+
++static bool
++dtio_procs_present (gfc_symbol *sym, io_kind k)
++{
++ gfc_symbol *derived;
++
++ if (sym && sym->ts.u.derived)
++ {
++ if (sym->ts.type == BT_CLASS && CLASS_DATA (sym))
++ derived = CLASS_DATA (sym)->ts.u.derived;
++ else if (sym->ts.type == BT_DERIVED)
++ derived = sym->ts.u.derived;
++ else
++ return false;
++ if ((k == M_WRITE || k == M_PRINT) &&
++ (gfc_find_specific_dtio_proc (derived, true, true) != NULL))
++ return true;
++ if ((k == M_READ) &&
++ (gfc_find_specific_dtio_proc (derived, false, true) != NULL))
++ return true;
++ }
++ return false;
++}
++
+ /* Traverse a namelist that is part of a READ statement to make sure
+ that none of the variables in the namelist are INTENT(IN). Returns
+ nonzero if we find such a variable. */
+@@ -3234,7 +3268,7 @@
+
+ /* If we are reading and have a namelist, check that all namelist symbols
+ can appear in a variable definition context. */
+- if (k == M_READ && dt->namelist)
++ if (dt->namelist)
+ {
+ gfc_namelist* n;
+ for (n = dt->namelist->namelist; n; n = n->next)
+@@ -3242,18 +3276,51 @@
+ gfc_expr* e;
+ bool t;
+
+- e = gfc_get_variable_expr (gfc_find_sym_in_symtree (n->sym));
+- t = gfc_check_vardef_context (e, false, false, false, NULL);
+- gfc_free_expr (e);
++ if (k == M_READ)
++ {
++ e = gfc_get_variable_expr (gfc_find_sym_in_symtree (n->sym));
++ t = gfc_check_vardef_context (e, false, false, false, NULL);
++ gfc_free_expr (e);
++
++ if (!t)
++ {
++ gfc_error ("NAMELIST %qs in READ statement at %L contains"
++ " the symbol %qs which may not appear in a"
++ " variable definition context",
++ dt->namelist->name, loc, n->sym->name);
++ return false;
++ }
++ }
+
+- if (!t)
++ t = dtio_procs_present (n->sym, k);
++
++ if (n->sym->ts.type == BT_CLASS && !t)
+ {
+- gfc_error ("NAMELIST %qs in READ statement at %L contains"
+- " the symbol %qs which may not appear in a"
+- " variable definition context",
+- dt->namelist->name, loc, n->sym->name);
+- return false;
++ gfc_error ("NAMELIST object %qs in namelist %qs at %L is "
++ "polymorphic and requires a defined input/output "
++ "procedure", n->sym->name, dt->namelist->name, loc);
++ return 1;
+ }
++
++ if ((n->sym->ts.type == BT_DERIVED)
++ && (n->sym->ts.u.derived->attr.alloc_comp
++ || n->sym->ts.u.derived->attr.pointer_comp))
++ {
++ if (!gfc_notify_std (GFC_STD_F2003, "NAMELIST object %qs in "
++ "namelist %qs at %L with ALLOCATABLE "
++ "or POINTER components", n->sym->name,
++ dt->namelist->name, loc))
++ return 1;
++
++ if (!t)
++ {
++ gfc_error ("NAMELIST object %qs in namelist %qs at %L has "
++ "ALLOCATABLE or POINTER components and thus requires "
++ "a defined input/output procedure", n->sym->name,
++ dt->namelist->name, loc);
++ return 1;
++ }
++ }
+ }
+ }
+
+Index: gcc/fortran/resolve.c
+===================================================================
+--- a/src/gcc/fortran/resolve.c (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/fortran/resolve.c (.../branches/gcc-7-branch)
+@@ -13849,31 +13849,11 @@
+ }
+
+
+-/* Check for formatted read and write DTIO procedures. */
+-
+ static bool
+-dtio_procs_present (gfc_symbol *sym)
+-{
+- gfc_symbol *derived;
+-
+- if (sym->ts.type == BT_CLASS)
+- derived = CLASS_DATA (sym)->ts.u.derived;
+- else if (sym->ts.type == BT_DERIVED)
+- derived = sym->ts.u.derived;
+- else
+- return false;
+-
+- return gfc_find_specific_dtio_proc (derived, true, true) != NULL
+- && gfc_find_specific_dtio_proc (derived, false, true) != NULL;
+-}
+-
+-
+-static bool
+ resolve_fl_namelist (gfc_symbol *sym)
+ {
+ gfc_namelist *nl;
+ gfc_symbol *nlsym;
+- bool dtio;
+
+ for (nl = sym->namelist; nl; nl = nl->next)
+ {
+@@ -13907,27 +13887,6 @@
+ sym->name, &sym->declared_at))
+ return false;
+
+- dtio = dtio_procs_present (nl->sym);
+-
+- if (nl->sym->ts.type == BT_CLASS && !dtio)
+- {
+- gfc_error ("NAMELIST object %qs in namelist %qs at %L is "
+- "polymorphic and requires a defined input/output "
+- "procedure", nl->sym->name, sym->name, &sym->declared_at);
+- return false;
+- }
+-
+- if (nl->sym->ts.type == BT_DERIVED
+- && (nl->sym->ts.u.derived->attr.alloc_comp
+- || nl->sym->ts.u.derived->attr.pointer_comp))
+- {
+- if (!gfc_notify_std (GFC_STD_F2003, "NAMELIST object %qs in "
+- "namelist %qs at %L with ALLOCATABLE "
+- "or POINTER components", nl->sym->name,
+- sym->name, &sym->declared_at))
+- return false;
+- return true;
+- }
+ }
+
+ /* Reject PRIVATE objects in a PUBLIC namelist. */
+@@ -13945,10 +13904,17 @@
+ return false;
+ }
+
+- /* If the derived type has specific DTIO procedures for both read and
+- write then namelist objects with private components are OK. */
+- if (dtio_procs_present (nl->sym))
+- continue;
++ if (nl->sym->ts.type == BT_DERIVED
++ && (nl->sym->ts.u.derived->attr.alloc_comp
++ || nl->sym->ts.u.derived->attr.pointer_comp))
++ {
++ if (!gfc_notify_std (GFC_STD_F2003, "NAMELIST object %qs in "
++ "namelist %qs at %L with ALLOCATABLE "
++ "or POINTER components", nl->sym->name,
++ sym->name, &sym->declared_at))
++ return false;
++ return true;
++ }
+
+ /* Types with private components that came here by USE-association. */
+ if (nl->sym->ts.type == BT_DERIVED
Index: gcc/alias.c
===================================================================
--- a/src/gcc/alias.c (.../tags/gcc_7_1_0_release)
@@ -11648,7 +13130,11 @@ Index: gcc/po/ChangeLog
===================================================================
--- a/src/gcc/po/ChangeLog (.../tags/gcc_7_1_0_release)
+++ b/src/gcc/po/ChangeLog (.../branches/gcc-7-branch)
-@@ -1,3 +1,28 @@
+@@ -1,3 +1,32 @@
++2017-05-15 Joseph Myers <joseph at codesourcery.com>
++
++ * sv.po: Update.
++
+2017-05-12 Joseph Myers <joseph at codesourcery.com>
+
+ * sv.po: Update.
@@ -27077,7 +28563,7 @@ Index: gcc/po/sv.po
-"POT-Creation-Date: 2017-04-24 20:38+0000\n"
-"PO-Revision-Date: 2017-03-09 22:05+0100\n"
+"POT-Creation-Date: 2017-05-01 22:24+0000\n"
-+"PO-Revision-Date: 2017-05-12 21:49+0200\n"
++"PO-Revision-Date: 2017-05-15 14:41+0200\n"
"Last-Translator: Göran Uddeborg <goeran at uddeborg.se>\n"
"Language-Team: Swedish <tp-sv at listor.tp-sv.se>\n"
"Language: sv\n"
@@ -27467,7 +28953,7 @@ Index: gcc/po/sv.po
-#| msgid "-Walloca-larger-than=<number> Warn on unbounded uses of alloca, and on bounded uses of alloca whose bound can be larger than <number> bytes."
msgid "-Walloca-larger-than=<number>\tWarn on unbounded uses of alloca, and on bounded uses of alloca whose bound can be larger than <number> bytes."
-msgstr "-Walloca-larger-than=<antal> Varna vid obegränsade användningar av alloca, och vid begränsade användningar av alloca vars gränser kan bara större än <antal> byte."
-+msgstr "-Walloca-larger-than=<antal>\tVarna vid obegränsade användningar av alloca, och vid begränsade användningar av alloca vars gränser kan bara större än <antal> byte."
++msgstr "-Walloca-larger-than=<antal>\tVarna vid obegränsade användningar av alloca, och vid begränsade användningar av alloca vars gränser kan vara större än <antal> byte."
#: c-family/c.opt:331
msgid "Warn whenever an Objective-C assignment is being intercepted by the garbage collector."
@@ -27703,7 +29189,7 @@ Index: gcc/po/sv.po
#: config/nvptx/nvptx.opt:42
msgid "Specify size of .local memory used for stack when the exact amount is not known."
-msgstr ""
-+msgstr "Ange storlekn på .local-minne använt till stack när den exakta mängden inte är känd."
++msgstr "Ange storleken på .local-minne använt till stack när den exakta mängden inte är känd."
#: config/nvptx/nvptx.opt:46
msgid "Generate code that can keep local state uniform across all lanes."
@@ -27904,7 +29390,7 @@ Index: gcc/po/sv.po
+#, gcc-internal-format, gfc-internal-format
msgid "cannot open profile file %s"
-msgstr "Kan inte öppna profileringssfilen %s."
-+msgstr "kan inte öppna profileringssfilen %s"
++msgstr "kan inte öppna profileringsfilen %s"
#: auto-profile.c:926
-#, fuzzy, gcc-internal-format
@@ -28817,7 +30303,7 @@ Index: gcc/po/sv.po
+#, gcc-internal-format
msgid "%<l1-cache-size%> parameter is not a power of two %d"
-msgstr "-falign-new=%d är inte en exponent av två"
-+msgstr "%<l1-cache-size%>-parametern är inte en exponent av %d"
++msgstr "%<l1-cache-size%>-parametern är inte en potens av två %d"
#: tree-ssa-operands.c:975
#, gcc-internal-format
@@ -30860,7 +32346,7 @@ Index: gcc/po/sv.po
+#, gcc-internal-format
msgid "pure virtual %q#D called from destructor"
-msgstr "pure virtual %q#D anropad från initierare av ickestatisk datamedlem"
-+msgstr "pure virtual %q#D anropad från en konstruerare"
++msgstr "pure virtual %q#D anropad från en destruerare"
#: cp/call.c:8801
#, gcc-internal-format
@@ -31097,7 +32583,7 @@ Index: gcc/po/sv.po
#, gcc-internal-format
msgid "%qD was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation"
-msgstr ""
-+msgstr "%qD deklarerades inte i detta definitionsområde, och inga deklarationer hittades av en argumentberoende uppslagning vid instantieringspunkten"
++msgstr "%qD deklarerades inte i detta definitionsområde, och inga deklarationer hittades av en argumentberoende uppslagning vid instansieringspunkten"
#: cp/pt.c:17265
#, gcc-internal-format
@@ -31310,7 +32796,7 @@ Index: gcc/po/sv.po
+#, gcc-internal-format
msgid "Too few dummy arguments in DTIO procedure %qs at %L"
-msgstr "För få argument i DTIO-proceduren ”%s” vid %L"
-+msgstr "För få argument i DTIO-proceduren %qs vid %L"
++msgstr "För få attrappargument i DTIO-proceduren %qs vid %L"
#: fortran/interface.c:4713
-#, fuzzy, gcc-internal-format
@@ -31452,7 +32938,7 @@ Index: gcc/po/sv.po
+#, gcc-internal-format, gfc-internal-format
msgid "SUBMODULE declaration at %C cannot appear within another scoping unit"
-msgstr "ENTRY-sats vid %C kan inte förekomma inuti ett inneslutet underprogram"
-+msgstr "SUBMODULE-deklarationen vid %C får inte förekomma en annan räckviddsenhet"
++msgstr "SUBMODULE-deklarationen vid %C får inte förekomma i en annan räckviddsenhet"
#: fortran/module.c:821
#, gcc-internal-format, gfc-internal-format
@@ -31619,8 +33105,12 @@ Index: gcc/po/sv.po
#: fortran/parse.c:2783
#, gcc-internal-format, gfc-internal-format
-@@ -55093,10 +54936,9 @@
- msgstr "CRITICAL-block i unuti OpenACC-region vid %C"
+@@ -55090,13 +54933,12 @@
+ #: fortran/parse.c:4347
+ #, gcc-internal-format, gfc-internal-format
+ msgid "CRITICAL block inside of OpenACC region at %C"
+-msgstr "CRITICAL-block i unuti OpenACC-region vid %C"
++msgstr "CRITICAL-block inuti OpenACC-region vid %C"
#: fortran/parse.c:4348
-#, fuzzy, gcc-internal-format, gfc-internal-format
@@ -47169,6 +48659,67 @@ Index: gcc/Makefile.in
$(AWK) -f $(srcdir)/opt-gather.awk $(ALL_OPT_FILES) > tmp-optionlist
$(SHELL) $(srcdir)/../move-if-change tmp-optionlist optionlist
$(STAMP) s-options
+Index: gcc/config/i386/mmx.md
+===================================================================
+--- a/src/gcc/config/i386/mmx.md (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/config/i386/mmx.md (.../branches/gcc-7-branch)
+@@ -78,9 +78,9 @@
+
+ (define_insn "*mov<mode>_internal"
+ [(set (match_operand:MMXMODE 0 "nonimmediate_operand"
+- "=r ,o ,r,r ,m ,?!y,!y,?!y,m ,r ,?!Ym,v,v,v,m,*x,*x,*x,m ,r ,Yi,!Ym,*Yi")
++ "=r ,o ,r,r ,m ,?!y,!y,?!y,m ,r ,?!Ym,v,v,v,m,r ,Yi,!Ym,*Yi")
+ (match_operand:MMXMODE 1 "vector_move_operand"
+- "rCo,rC,C,rm,rC,C ,!y,m ,?!y,?!Yn,r ,C,v,m,v,C ,*x,m ,*x,Yj,r ,*Yj,!Yn"))]
++ "rCo,rC,C,rm,rC,C ,!y,m ,?!y,?!Yn,r ,C,v,m,v,Yj,r ,*Yj,!Yn"))]
+ "TARGET_MMX
+ && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
+ {
+@@ -146,7 +146,7 @@
+ [(set (attr "isa")
+ (cond [(eq_attr "alternative" "0,1")
+ (const_string "nox64")
+- (eq_attr "alternative" "2,3,4,9,10,11,12,13,14,19,20")
++ (eq_attr "alternative" "2,3,4,9,10,15,16")
+ (const_string "x64")
+ ]
+ (const_string "*")))
+@@ -159,14 +159,14 @@
+ (const_string "mmx")
+ (eq_attr "alternative" "6,7,8,9,10")
+ (const_string "mmxmov")
+- (eq_attr "alternative" "11,15")
++ (eq_attr "alternative" "11")
+ (const_string "sselog1")
+- (eq_attr "alternative" "21,22")
++ (eq_attr "alternative" "17,18")
+ (const_string "ssecvt")
+ ]
+ (const_string "ssemov")))
+ (set (attr "prefix_rex")
+- (if_then_else (eq_attr "alternative" "9,10,19,20")
++ (if_then_else (eq_attr "alternative" "9,10,15,16")
+ (const_string "1")
+ (const_string "*")))
+ (set (attr "prefix")
+@@ -181,7 +181,7 @@
+ (set (attr "mode")
+ (cond [(eq_attr "alternative" "2")
+ (const_string "SI")
+- (eq_attr "alternative" "11,12,15,16")
++ (eq_attr "alternative" "11,12")
+ (cond [(ior (match_operand 0 "ext_sse_reg_operand")
+ (match_operand 1 "ext_sse_reg_operand"))
+ (const_string "XI")
+@@ -197,7 +197,7 @@
+ ]
+ (const_string "TI"))
+
+- (and (eq_attr "alternative" "13,14,17,18")
++ (and (eq_attr "alternative" "13,14")
+ (ior (match_test "<MODE>mode == V2SFmode")
+ (not (match_test "TARGET_SSE2"))))
+ (const_string "V2SF")
Index: gcc/config/i386/cpuid.h
===================================================================
--- a/src/gcc/config/i386/cpuid.h (.../tags/gcc_7_1_0_release)
@@ -47199,6 +48750,19 @@ Index: gcc/config/i386/sse.md
===================================================================
--- a/src/gcc/config/i386/sse.md (.../tags/gcc_7_1_0_release)
+++ b/src/gcc/config/i386/sse.md (.../branches/gcc-7-branch)
+@@ -13842,10 +13842,10 @@
+ ;; movd instead of movq is required to handle broken assemblers.
+ (define_insn "vec_concatv2di"
+ [(set (match_operand:V2DI 0 "register_operand"
+- "=Yr,*x,x ,v ,Yi,v ,!x,x,v ,x,x,v")
++ "=Yr,*x,x ,v ,Yi,v ,x ,x,v ,x,x,v")
+ (vec_concat:V2DI
+ (match_operand:DI 1 "nonimmediate_operand"
+- " 0, 0,x ,Yv,r ,vm,*y,0,Yv,0,0,v")
++ " 0, 0,x ,Yv,r ,vm,?!*Yn,0,Yv,0,0,v")
+ (match_operand:DI 2 "vector_move_operand"
+ "*rm,rm,rm,rm,C ,C ,C ,x,Yv,x,m,m")))]
+ "TARGET_SSE"
@@ -17105,12 +17105,12 @@
(set_attr "mode" "TI")])
@@ -47660,3 +49224,140 @@ Index: gcc/config/pa/pa.c
if (MAYBE_FP_REG_CLASS_P (rclass))
return true;
+Index: libgo/Makefile.in
+===================================================================
+--- a/src/libgo/Makefile.in (.../tags/gcc_7_1_0_release)
++++ b/src/libgo/Makefile.in (.../branches/gcc-7-branch)
+@@ -1075,7 +1075,7 @@
+ BUILDPACKAGE = \
+ $(MKDIR_P) $(@D); \
+ files=`echo $^ | sed -e 's/[^ ]*\.gox//g' -e 's/[^ ]*\.dep//'`; \
+- $(LTGOCOMPILE) -I . -c -fgo-pkgpath=`echo $@ | sed -e 's/.lo$$//'` $($(subst -,_,$(subst .,_,$(subst /,_,$@)))_GOCFLAGS) -o $@ $$files
++ $(LTGOCOMPILE) -I . -c -fgo-pkgpath=`echo $@ | sed -e 's/.lo$$//' -e 's|golang_org|vendor/golang_org|'` $($(subst -,_,$(subst .,_,$(subst /,_,$@)))_GOCFLAGS) -o $@ $$files
+
+
+ # How to build a .gox file from a .lo file.
+Index: libgo/Makefile.am
+===================================================================
+--- a/src/libgo/Makefile.am (.../tags/gcc_7_1_0_release)
++++ b/src/libgo/Makefile.am (.../branches/gcc-7-branch)
+@@ -920,7 +920,7 @@
+ BUILDPACKAGE = \
+ $(MKDIR_P) $(@D); \
+ files=`echo $^ | sed -e 's/[^ ]*\.gox//g' -e 's/[^ ]*\.dep//'`; \
+- $(LTGOCOMPILE) -I . -c -fgo-pkgpath=`echo $@ | sed -e 's/.lo$$//'` $($(subst -,_,$(subst .,_,$(subst /,_,$@)))_GOCFLAGS) -o $@ $$files
++ $(LTGOCOMPILE) -I . -c -fgo-pkgpath=`echo $@ | sed -e 's/.lo$$//' -e 's|golang_org|vendor/golang_org|'` $($(subst -,_,$(subst .,_,$(subst /,_,$@)))_GOCFLAGS) -o $@ $$files
+
+ # How to build a .gox file from a .lo file.
+ BUILDGOX = \
+Index: libgfortran/runtime/environ.c
+===================================================================
+--- a/src/libgfortran/runtime/environ.c (.../tags/gcc_7_1_0_release)
++++ b/src/libgfortran/runtime/environ.c (.../branches/gcc-7-branch)
+@@ -37,9 +37,20 @@
+ provided. */
+
+ #ifdef FALLBACK_SECURE_GETENV
++
++#if SUPPORTS_WEAKREF && defined(HAVE___SECURE_GETENV)
++static char* weak_secure_getenv (const char*)
++ __attribute__((__weakref__("__secure_getenv")));
++#endif
++
+ char *
+ secure_getenv (const char *name)
+ {
++#if SUPPORTS_WEAKREF && defined(HAVE___SECURE_GETENV)
++ if (weak_secure_getenv)
++ return weak_secure_getenv (name);
++#endif
++
+ if ((getuid () == geteuid ()) && (getgid () == getegid ()))
+ return getenv (name);
+ else
+Index: libgfortran/ChangeLog
+===================================================================
+--- a/src/libgfortran/ChangeLog (.../tags/gcc_7_1_0_release)
++++ b/src/libgfortran/ChangeLog (.../branches/gcc-7-branch)
+@@ -1,3 +1,19 @@
++2017-05-19 Janne Blomqvist <jb at gcc.gnu.org>
++
++ Backport from trunk
++ * libgfortran.h: HAVE_SECURE_GETENV: Don't check
++ HAVE___SECURE_GETENV.
++ * environ/runtime.c (secure_getenv): Use __secure_getenv via a
++ weak reference.
++
++2017-05-17 Jerry DeLisle <jvdelisle at gcc.gnu.org>
++
++ Backport from trunk
++ PR libgfortran/80727
++ * transfer.c (read_sf_internal): Remove bogus code to detect EOR.
++ (read_block_form): For internal units, generate EOR if no more
++ bytes left in unit and we are trying to read with ADVANCE='NO'.
++
+ 2017-05-02 Release Manager
+
+ * GCC 7.1.0 released.
+Index: libgfortran/libgfortran.h
+===================================================================
+--- a/src/libgfortran/libgfortran.h (.../tags/gcc_7_1_0_release)
++++ b/src/libgfortran/libgfortran.h (.../branches/gcc-7-branch)
+@@ -808,9 +808,7 @@
+
+ /* Secure getenv() which returns NULL if running as SUID/SGID. */
+ #ifndef HAVE_SECURE_GETENV
+-#ifdef HAVE___SECURE_GETENV
+-#define secure_getenv __secure_getenv
+-#elif defined(HAVE_GETUID) && defined(HAVE_GETEUID) \
++#if defined(HAVE_GETUID) && defined(HAVE_GETEUID) \
+ && defined(HAVE_GETGID) && defined(HAVE_GETEGID)
+ #define FALLBACK_SECURE_GETENV
+ extern char *secure_getenv (const char *);
+Index: libgfortran/io/transfer.c
+===================================================================
+--- a/src/libgfortran/io/transfer.c (.../tags/gcc_7_1_0_release)
++++ b/src/libgfortran/io/transfer.c (.../branches/gcc-7-branch)
+@@ -272,12 +272,6 @@
+ return NULL;
+ }
+
+- if (base && *base == 0)
+- {
+- generate_error (&dtp->common, LIBERROR_EOR, NULL);
+- return NULL;
+- }
+-
+ dtp->u.p.current_unit->bytes_left -= *length;
+
+ if (((dtp->common.flags & IOPARM_DT_HAS_SIZE) != 0) ||
+@@ -470,12 +464,25 @@
+ }
+ }
+
+- if (unlikely (dtp->u.p.current_unit->bytes_left == 0
+- && !is_internal_unit(dtp)))
++ if (is_internal_unit(dtp))
+ {
+- hit_eof (dtp);
+- return NULL;
++ if (*nbytes > 0 && dtp->u.p.current_unit->bytes_left == 0)
++ {
++ if (dtp->u.p.advance_status == ADVANCE_NO)
++ {
++ generate_error (&dtp->common, LIBERROR_EOR, NULL);
++ return NULL;
++ }
++ }
+ }
++ else
++ {
++ if (unlikely (dtp->u.p.current_unit->bytes_left == 0))
++ {
++ hit_eof (dtp);
++ return NULL;
++ }
++ }
+
+ *nbytes = dtp->u.p.current_unit->bytes_left;
+ }
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/reproducible/gcc-7.git
More information about the Reproducible-commits
mailing list