[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