[gcc-7] 233/354: * Update to SVN 20170628 (r249732) from the gcc-7-branch.
Ximin Luo
infinity0 at debian.org
Thu Nov 23 15:50:59 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 d69c080c19e7cd4e27476937385c2a123937cfc1
Author: doko <doko at 6ca36cf4-e1d1-0310-8c6f-e303bb2178ca>
Date: Wed Jun 28 11:25:44 2017 +0000
* Update to SVN 20170628 (r249732) from the gcc-7-branch.
git-svn-id: svn+ssh://svn.debian.org/svn/gcccvs/branches/sid/gcc-7@9550 6ca36cf4-e1d1-0310-8c6f-e303bb2178ca
---
debian/changelog | 3 +-
debian/patches/svn-updates.diff | 3357 ++++++++++++++++++++++++++++++++++++++-
2 files changed, 3294 insertions(+), 66 deletions(-)
diff --git a/debian/changelog b/debian/changelog
index 0b849ca..917c2e9 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,5 +1,7 @@
gcc-7 (7.1.0-7ubuntu1) UNRELEASED; urgency=medium
+ * Update to SVN 20170628 (r249732) from the gcc-7-branch.
+
[ Matthias Klose ]
* Move the liblto_plugin from the cpp to the gcc package.
* libstdc++6: Add more Breaks to smoothen upgrades from jessie to stretch.
@@ -18,7 +20,6 @@ gcc-7 (7.1.0-7) unstable; urgency=medium
* Update to SVN 20170618 (r249347) from the gcc-7-branch.
[ Matthias Klose ]
- * Update to SVN 20170524 (r248432) from the gcc-7-branch.
* Don't build libada with -O3 (ftbfs on ppc64el).
* Update sanitizer symbol files (Helmut Grohne). Closes: #864835.
diff --git a/debian/patches/svn-updates.diff b/debian/patches/svn-updates.diff
index 4aca072..16c7405 100644
--- a/debian/patches/svn-updates.diff
+++ b/debian/patches/svn-updates.diff
@@ -1,10 +1,10 @@
-# DP: updates from the 7 branch upto 20170618 (r249347).
+# DP: updates from the 7 branch upto 20170628 (r249732).
last_update()
{
cat > ${dir}LAST_UPDATED <EOF
-Sun Jun 18 15:29:05 CEST 2017
-Sun Jun 18 13:29:05 UTC 2017 (revision 249347)
+Wed Jun 28 12:26:11 CEST 2017
+Wed Jun 28 10:26:11 UTC 2017 (revision 249732)
EOF
}
@@ -16,7 +16,12 @@ Index: libgomp/ChangeLog
===================================================================
--- a/src/libgomp/ChangeLog (.../tags/gcc_7_1_0_release)
+++ b/src/libgomp/ChangeLog (.../branches/gcc-7-branch)
-@@ -1,3 +1,29 @@
+@@ -1,3 +1,34 @@
++2017-06-21 Jakub Jelinek <jakub at redhat.com>
++
++ PR c++/81130
++ * testsuite/libgomp.c++/pr81130.C: New test.
++
+2017-06-02 Jakub Jelinek <jakub at redhat.com>
+
+ Backported from mainline
@@ -46,6 +51,52 @@ Index: libgomp/ChangeLog
2017-05-02 Release Manager
* GCC 7.1.0 released.
+Index: libgomp/testsuite/libgomp.c++/pr81130.C
+===================================================================
+--- a/src/libgomp/testsuite/libgomp.c++/pr81130.C (.../tags/gcc_7_1_0_release)
++++ b/src/libgomp/testsuite/libgomp.c++/pr81130.C (.../branches/gcc-7-branch)
+@@ -0,0 +1,41 @@
++// PR c++/81130
++// { dg-do run }
++
++struct A
++{
++ A ();
++ ~A ();
++ int a;
++};
++
++A::A ()
++{
++ a = 0;
++}
++
++A::~A ()
++{
++}
++
++struct B
++{
++ A b;
++ int c;
++ B () : c (1)
++ {
++#pragma omp parallel shared (b, c) num_threads (2)
++#pragma omp master
++ {
++ b.a++;
++ c += 2;
++ }
++ }
++};
++
++int
++main ()
++{
++ B v;
++ if (v.b.a != 1 || v.c != 3)
++ __builtin_abort ();
++}
Index: libgomp/testsuite/libgomp.c/pr80809-1.c
===================================================================
--- a/src/libgomp/testsuite/libgomp.c/pr80809-1.c (.../tags/gcc_7_1_0_release)
@@ -397,6 +448,19 @@ Index: libgomp/config/linux/affinity.c
}
void
+Index: libstdc++-v3/configure
+===================================================================
+--- a/src/libstdc++-v3/configure (.../tags/gcc_7_1_0_release)
++++ b/src/libstdc++-v3/configure (.../branches/gcc-7-branch)
+@@ -79268,7 +79268,7 @@
+ fi
+
+ # For libtool versioning info, format is CURRENT:REVISION:AGE
+-libtool_VERSION=6:23:0
++libtool_VERSION=6:24:0
+
+ # Everything parsed; figure out what files and settings to use.
+ case $enable_symvers in
Index: libstdc++-v3/doc/xml/manual/mt_allocator.xml
===================================================================
--- a/src/libstdc++-v3/doc/xml/manual/mt_allocator.xml (.../tags/gcc_7_1_0_release)
@@ -776,6 +840,180 @@ Index: libstdc++-v3/include/std/functional
#undef _GLIBCXX_MEM_FN_TRAITS
#undef _GLIBCXX_MEM_FN_TRAITS2
+Index: libstdc++-v3/include/std/istream
+===================================================================
+--- a/src/libstdc++-v3/include/std/istream (.../tags/gcc_7_1_0_release)
++++ b/src/libstdc++-v3/include/std/istream (.../branches/gcc-7-branch)
+@@ -908,20 +908,39 @@
+ ws(basic_istream<_CharT, _Traits>& __is);
+
+ #if __cplusplus >= 201103L
++ template<typename _Ch, typename _Up>
++ basic_istream<_Ch, _Up>&
++ __is_convertible_to_basic_istream_test(basic_istream<_Ch, _Up>*);
+
++ template<typename _Tp, typename = void>
++ struct __is_convertible_to_basic_istream_impl
++ {
++ using __istream_type = void;
++ };
++
+ template<typename _Tp>
++ using __do_is_convertible_to_basic_istream_impl =
++ decltype(__is_convertible_to_basic_istream_test
++ (declval<typename remove_reference<_Tp>::type*>()));
++
++ template<typename _Tp>
++ struct __is_convertible_to_basic_istream_impl
++ <_Tp,
++ __void_t<__do_is_convertible_to_basic_istream_impl<_Tp>>>
++ {
++ using __istream_type =
++ __do_is_convertible_to_basic_istream_impl<_Tp>;
++ };
++
++ template<typename _Tp>
+ struct __is_convertible_to_basic_istream
++ : __is_convertible_to_basic_istream_impl<_Tp>
+ {
+- template<typename _Ch, typename _Up>
+- static basic_istream<_Ch, _Up>& __check(basic_istream<_Ch, _Up>*);
+-
+- static void __check(...);
+ public:
+- using istream_type =
+- decltype(__check(declval<typename remove_reference<_Tp>::type*>()));
+- using type = __not_<is_same<istream_type, void>>;
++ using type = __not_<is_void<
++ typename __is_convertible_to_basic_istream_impl<_Tp>::__istream_type>>;
+ constexpr static bool value = type::value;
+- };
++ };
+
+ template<typename _Istream, typename _Tp, typename = void>
+ struct __is_extractable : false_type {};
+@@ -932,6 +951,11 @@
+ >> declval<_Tp>())>>
+ : true_type {};
+
++ template<typename _Istream>
++ using __rvalue_istream_type =
++ typename __is_convertible_to_basic_istream<
++ _Istream>::__istream_type;
++
+ // [27.7.1.6] Rvalue stream extraction
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 2328. Rvalue stream extraction should use perfect forwarding
+@@ -949,13 +973,15 @@
+ inline
+ typename enable_if<__and_<__not_<is_lvalue_reference<_Istream>>,
+ __is_convertible_to_basic_istream<_Istream>,
+- __is_extractable<_Istream&, _Tp&&>>::value,
+- typename __is_convertible_to_basic_istream<
+- _Istream>::istream_type>::type
++ __is_extractable<
++ __rvalue_istream_type<_Istream>,
++ _Tp&&>>::value,
++ __rvalue_istream_type<_Istream>>::type
+ operator>>(_Istream&& __is, _Tp&& __x)
+ {
+- __is >> std::forward<_Tp>(__x);
+- return __is;
++ __rvalue_istream_type<_Istream> __ret_is = __is;
++ __ret_is >> std::forward<_Tp>(__x);
++ return __ret_is;
+ }
+ #endif // C++11
+
+Index: libstdc++-v3/include/std/ostream
+===================================================================
+--- a/src/libstdc++-v3/include/std/ostream (.../tags/gcc_7_1_0_release)
++++ b/src/libstdc++-v3/include/std/ostream (.../branches/gcc-7-branch)
+@@ -613,20 +613,40 @@
+ { return __os.flush(); }
+
+ #if __cplusplus >= 201103L
++ template<typename _Ch, typename _Up>
++ basic_ostream<_Ch, _Up>&
++ __is_convertible_to_basic_ostream_test(basic_ostream<_Ch, _Up>*);
++
++ template<typename _Tp, typename = void>
++ struct __is_convertible_to_basic_ostream_impl
++ {
++ using __ostream_type = void;
++ };
++
+ template<typename _Tp>
++ using __do_is_convertible_to_basic_ostream_impl =
++ decltype(__is_convertible_to_basic_ostream_test
++ (declval<typename remove_reference<_Tp>::type*>()));
++
++ template<typename _Tp>
++ struct __is_convertible_to_basic_ostream_impl
++ <_Tp,
++ __void_t<__do_is_convertible_to_basic_ostream_impl<_Tp>>>
++ {
++ using __ostream_type =
++ __do_is_convertible_to_basic_ostream_impl<_Tp>;
++ };
++
++ template<typename _Tp>
+ struct __is_convertible_to_basic_ostream
+- {
+- template<typename _Ch, typename _Up>
+- static basic_ostream<_Ch, _Up>& __check(basic_ostream<_Ch, _Up>*);
++ : __is_convertible_to_basic_ostream_impl<_Tp>
++ {
++ public:
++ using type = __not_<is_void<
++ typename __is_convertible_to_basic_ostream_impl<_Tp>::__ostream_type>>;
++ constexpr static bool value = type::value;
++ };
+
+- static void __check(...);
+- public:
+- using ostream_type =
+- decltype(__check(declval<typename remove_reference<_Tp>::type*>()));
+- using type = __not_<is_same<ostream_type, void>>;
+- constexpr static bool value = type::value;
+- };
+-
+ template<typename _Ostream, typename _Tp, typename = void>
+ struct __is_insertable : false_type {};
+
+@@ -636,6 +656,11 @@
+ << declval<const _Tp&>())>>
+ : true_type {};
+
++ template<typename _Ostream>
++ using __rvalue_ostream_type =
++ typename __is_convertible_to_basic_ostream<
++ _Ostream>::__ostream_type;
++
+ /**
+ * @brief Generic inserter for rvalue stream
+ * @param __os An input stream.
+@@ -650,13 +675,15 @@
+ inline
+ typename enable_if<__and_<__not_<is_lvalue_reference<_Ostream>>,
+ __is_convertible_to_basic_ostream<_Ostream>,
+- __is_insertable<_Ostream&, const _Tp&>>::value,
+- typename __is_convertible_to_basic_ostream<
+- _Ostream>::ostream_type>::type
++ __is_insertable<
++ __rvalue_ostream_type<_Ostream>,
++ const _Tp&>>::value,
++ __rvalue_ostream_type<_Ostream>>::type
+ operator<<(_Ostream&& __os, const _Tp& __x)
+ {
+- __os << __x;
+- return __os;
++ __rvalue_ostream_type<_Ostream> __ret_os = __os;
++ __ret_os << __x;
++ return __ret_os;
+ }
+ #endif // C++11
+
Index: libstdc++-v3/include/bits/regex_compiler.h
===================================================================
--- a/src/libstdc++-v3/include/bits/regex_compiler.h (.../tags/gcc_7_1_0_release)
@@ -877,6 +1115,18 @@ Index: libstdc++-v3/include/bits/stl_algo.h
/**
* @brief Perform an operation on a sequence.
+@@ -5809,8 +5823,9 @@
+ "sample size must be an integer type");
+
+ typename iterator_traits<_PopulationIterator>::difference_type __d = __n;
+- return std::__sample(__first, __last, __pop_cat{}, __out, __samp_cat{},
+- __d, std::forward<_UniformRandomBitGenerator>(__g));
++ return _GLIBCXX_STD_A::
++ __sample(__first, __last, __pop_cat{}, __out, __samp_cat{}, __d,
++ std::forward<_UniformRandomBitGenerator>(__g));
+ }
+ #endif // C++17
+ #endif // C++14
Index: libstdc++-v3/include/bits/stl_tree.h
===================================================================
--- a/src/libstdc++-v3/include/bits/stl_tree.h (.../tags/gcc_7_1_0_release)
@@ -896,7 +1146,68 @@ 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,99 @@
+@@ -1,3 +1,160 @@
++2017-06-27 Jonathan Wakely <jwakely at redhat.com>
++
++ PR libstdc++/81221
++ * include/bits/stl_algo.h (sample): Qualify with _GLIBCXX_STD_A not
++ std.
++ * testsuite/25_algorithms/sample/81221.cc: New.
++
++2017-06-21 Ville Voutilainen <ville.voutilainen at gmail.com>
++
++ Backport from mainline
++ 2017-06-21 Ville Voutilainen <ville.voutilainen at gmail.com>
++
++ PR libstdc++/80675
++ PR libstdc++/80940
++ * include/std/istream:
++ (__is_convertible_to_basic_istream_test(basic_istream<_Ch, _Up>*)): New.
++ (__do_is_convertible_to_basic_istream_impl): Likewise.
++ (__is_convertible_to_basic_istream_impl): Likewise.
++ (__is_convertible_to_basic_istream): Use the new base.
++ (__rvalue_istream_type): New.
++ (operator>>(_Istream&&, _Tp&&)): Use the new helper alias
++ for the SFINAE check, convert to the helper alias type before
++ doing the actual extraction.
++ * include/std/ostream:
++ (__is_convertible_to_basic_ostream_test(basic_ostream<_Ch, _Up>*)): New.
++ (__do_is_convertible_to_basic_ostream_impl): Likewise.
++ (__is_convertible_to_basic_ostream_impl): Likewise.
++ (__is_convertible_to_basic_ostream): Use the new base.
++ (__rvalue_ostream_type): New.
++ (operator<<(_Ostream&&, const _Tp&)): Use the new helper alias
++ for the SFINAE check, convert to the helper alias type before
++ doing the actual insertion.
++ * testsuite/27_io/rvalue_streams-2.cc: Add new tests.
++
++2017-06-21 Uros Bizjak <ubizjak at gmail.com>
++
++ * config/abi/post/alpha-linux-gnu/baseline_symbols.txt: Update.
++
++2017-06-21 Jonathan Wakely <jwakely at redhat.com>
++
++ PR libstdc++/81092
++ * configure: Regenerate.
++
++2017-06-19 Rainer Orth <ro at CeBiTec.Uni-Bielefeld.DE>
++
++ * config/abi/post/i386-solaris2.10/baseline_symbols.txt: Regenerate.
++ * config/abi/post/i386-solaris2.10/amd64/baseline_symbols.txt: Likewise.
++ * config/abi/post/i386-solaris2.11/baseline_symbols.txt: Likewise.
++ * config/abi/post/i386-solaris2.11/amd64/baseline_symbols.txt: Likewise.
++ * config/abi/post/sparc-solaris2.10/baseline_symbols.txt: Likewise.
++ * config/abi/post/sparc-solaris2.10/sparcv9/baseline_symbols.txt:
++ Likewise.
++ * config/abi/post/sparc-solaris2.11/baseline_symbols.txt: Likewise.
++ * config/abi/post/sparc-solaris2.11/sparcv9/baseline_symbols.txt:
++ Likewise.
++
++2017-06-18 H.J. Lu <hongjiu.lu at intel.com>
++
++ PR libstdc++/81092
++ * config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt: Updated.
++
+2017-06-16 Jakub Jelinek <jakub at redhat.com>
+
+ PR libstdc++/81092
@@ -1048,6 +1359,33 @@ Index: libstdc++-v3/testsuite/25_algorithms/search/searcher.cc
+{
+ test01();
+}
+Index: libstdc++-v3/testsuite/25_algorithms/sample/81221.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/25_algorithms/sample/81221.cc (.../tags/gcc_7_1_0_release)
++++ b/src/libstdc++-v3/testsuite/25_algorithms/sample/81221.cc (.../branches/gcc-7-branch)
+@@ -0,0 +1,22 @@
++// 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 } }
++// { dg-require-parallel-mode "" }
++
++#include <algorithm>
Index: libstdc++-v3/testsuite/28_regex/basic_regex/ctors/basic/iter.cc
===================================================================
--- a/src/libstdc++-v3/testsuite/28_regex/basic_regex/ctors/basic/iter.cc (.../tags/gcc_7_1_0_release)
@@ -1249,6 +1587,76 @@ Index: libstdc++-v3/testsuite/23_containers/map/modifiers/extract.cc
int
main()
{
+Index: libstdc++-v3/testsuite/27_io/rvalue_streams-2.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/27_io/rvalue_streams-2.cc (.../tags/gcc_7_1_0_release)
++++ b/src/libstdc++-v3/testsuite/27_io/rvalue_streams-2.cc (.../branches/gcc-7-branch)
+@@ -24,7 +24,51 @@
+ void operator<<(std::ostream&, const A&) { }
+ void operator>>(std::istream&, A&) { }
+
++class MyStream : private std::ostream, private std::istream
++{
++public:
++ MyStream& operator <<(const char*)
++ {
++ return *this;
++ }
++ MyStream& operator >>(int&)
++ {
++ return *this;
++ }
++};
++
++class MyStream2
++{
++public:
++ MyStream2& operator <<(const char*)
++ {
++ return *this;
++ }
++ MyStream2& operator >>(int&)
++ {
++ return *this;
++ }
++private:
++ operator std::ostream&();
++ operator std::istream&();
++};
++
++struct X { };
++
++std::ostream& operator<<(std::ostream& os, const X&) { return os; }
++std::istream& operator>>(std::istream& is, X&&) { return is; }
++
++struct O : std::ostream { };
++
++void operator<<(O&, X) = delete;
++
++struct I : std::istream { };
++
++void operator>>(I&, X) = delete;
++
+ // PR libstdc++/65543
++// PR libstdc++/80675
++// PR libstdc++/80940
+ int main()
+ {
+ A a;
+@@ -31,4 +75,13 @@
+
+ std::ostringstream() << a;
+ std::istringstream() >> a;
++ MyStream stream{};
++ stream << "aaa";
++ int msi;
++ stream >> msi;
++ MyStream2 stream2{};
++ stream2 << "aaa";
++ stream2 >> msi;
++ O{} << X{};
++ I{} >> X{};
+ }
Index: libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/12.cc
===================================================================
--- a/src/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/12.cc (.../tags/gcc_7_1_0_release)
@@ -1497,6 +1905,319 @@ Index: libstdc++-v3/config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt
OBJECT:0:GLIBCXX_3.4.3
OBJECT:0:GLIBCXX_3.4.4
OBJECT:0:GLIBCXX_3.4.5
+Index: libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt
+===================================================================
+--- a/src/libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt (.../tags/gcc_7_1_0_release)
++++ b/src/libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt (.../branches/gcc-7-branch)
+@@ -1329,6 +1329,7 @@
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1EPKwjRKS1_@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS1_@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_@@GLIBCXX_3.4
++FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_jRKS1_@@GLIBCXX_3.4.24
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_jj@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_jjRKS1_@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ESt16initializer_listIwERKS1_@@GLIBCXX_3.4.11
+@@ -1342,6 +1343,7 @@
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2EPKwjRKS1_@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS1_@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_@@GLIBCXX_3.4
++FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_jRKS1_@@GLIBCXX_3.4.24
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_jj@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_jjRKS1_@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ESt16initializer_listIwERKS1_@@GLIBCXX_3.4.11
+@@ -4002,6 +4004,7 @@
+ OBJECT:0:GLIBCXX_3.4.21
+ OBJECT:0:GLIBCXX_3.4.22
+ OBJECT:0:GLIBCXX_3.4.23
++OBJECT:0:GLIBCXX_3.4.24
+ OBJECT:0:GLIBCXX_3.4.3
+ OBJECT:0:GLIBCXX_3.4.4
+ OBJECT:0:GLIBCXX_3.4.5
+Index: libstdc++-v3/config/abi/post/sparc-solaris2.10/sparcv9/baseline_symbols.txt
+===================================================================
+--- a/src/libstdc++-v3/config/abi/post/sparc-solaris2.10/sparcv9/baseline_symbols.txt (.../tags/gcc_7_1_0_release)
++++ b/src/libstdc++-v3/config/abi/post/sparc-solaris2.10/sparcv9/baseline_symbols.txt (.../branches/gcc-7-branch)
+@@ -3962,6 +3962,7 @@
+ OBJECT:0:GLIBCXX_3.4.21
+ OBJECT:0:GLIBCXX_3.4.22
+ OBJECT:0:GLIBCXX_3.4.23
++OBJECT:0:GLIBCXX_3.4.24
+ OBJECT:0:GLIBCXX_3.4.3
+ OBJECT:0:GLIBCXX_3.4.4
+ OBJECT:0:GLIBCXX_3.4.5
+Index: libstdc++-v3/config/abi/post/sparc-solaris2.10/baseline_symbols.txt
+===================================================================
+--- a/src/libstdc++-v3/config/abi/post/sparc-solaris2.10/baseline_symbols.txt (.../tags/gcc_7_1_0_release)
++++ b/src/libstdc++-v3/config/abi/post/sparc-solaris2.10/baseline_symbols.txt (.../branches/gcc-7-branch)
+@@ -1310,6 +1310,7 @@
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1EPKwjRKS1_@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS1_@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_@@GLIBCXX_3.4
++FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_jRKS1_@@GLIBCXX_3.4.24
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_jj@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_jjRKS1_@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ESt16initializer_listIwERKS1_@@GLIBCXX_3.4.11
+@@ -1323,6 +1324,7 @@
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2EPKwjRKS1_@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS1_@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_@@GLIBCXX_3.4
++FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_jRKS1_@@GLIBCXX_3.4.24
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_jj@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_jjRKS1_@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ESt16initializer_listIwERKS1_@@GLIBCXX_3.4.11
+@@ -3960,6 +3962,7 @@
+ OBJECT:0:GLIBCXX_3.4.21
+ OBJECT:0:GLIBCXX_3.4.22
+ OBJECT:0:GLIBCXX_3.4.23
++OBJECT:0:GLIBCXX_3.4.24
+ OBJECT:0:GLIBCXX_3.4.3
+ OBJECT:0:GLIBCXX_3.4.4
+ OBJECT:0:GLIBCXX_3.4.5
+Index: libstdc++-v3/config/abi/post/sparc-solaris2.11/sparcv9/baseline_symbols.txt
+===================================================================
+--- a/src/libstdc++-v3/config/abi/post/sparc-solaris2.11/sparcv9/baseline_symbols.txt (.../tags/gcc_7_1_0_release)
++++ b/src/libstdc++-v3/config/abi/post/sparc-solaris2.11/sparcv9/baseline_symbols.txt (.../branches/gcc-7-branch)
+@@ -3964,6 +3964,7 @@
+ OBJECT:0:GLIBCXX_3.4.21
+ OBJECT:0:GLIBCXX_3.4.22
+ OBJECT:0:GLIBCXX_3.4.23
++OBJECT:0:GLIBCXX_3.4.24
+ OBJECT:0:GLIBCXX_3.4.3
+ OBJECT:0:GLIBCXX_3.4.4
+ OBJECT:0:GLIBCXX_3.4.5
+Index: libstdc++-v3/config/abi/post/sparc-solaris2.11/baseline_symbols.txt
+===================================================================
+--- a/src/libstdc++-v3/config/abi/post/sparc-solaris2.11/baseline_symbols.txt (.../tags/gcc_7_1_0_release)
++++ b/src/libstdc++-v3/config/abi/post/sparc-solaris2.11/baseline_symbols.txt (.../branches/gcc-7-branch)
+@@ -1310,6 +1310,7 @@
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1EPKwjRKS1_@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS1_@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_@@GLIBCXX_3.4
++FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_jRKS1_@@GLIBCXX_3.4.24
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_jj@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_jjRKS1_@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ESt16initializer_listIwERKS1_@@GLIBCXX_3.4.11
+@@ -1323,6 +1324,7 @@
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2EPKwjRKS1_@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS1_@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_@@GLIBCXX_3.4
++FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_jRKS1_@@GLIBCXX_3.4.24
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_jj@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_jjRKS1_@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ESt16initializer_listIwERKS1_@@GLIBCXX_3.4.11
+@@ -3962,6 +3964,7 @@
+ OBJECT:0:GLIBCXX_3.4.21
+ OBJECT:0:GLIBCXX_3.4.22
+ OBJECT:0:GLIBCXX_3.4.23
++OBJECT:0:GLIBCXX_3.4.24
+ OBJECT:0:GLIBCXX_3.4.3
+ OBJECT:0:GLIBCXX_3.4.4
+ OBJECT:0:GLIBCXX_3.4.5
+Index: libstdc++-v3/config/abi/post/i386-solaris2.10/baseline_symbols.txt
+===================================================================
+--- a/src/libstdc++-v3/config/abi/post/i386-solaris2.10/baseline_symbols.txt (.../tags/gcc_7_1_0_release)
++++ b/src/libstdc++-v3/config/abi/post/i386-solaris2.10/baseline_symbols.txt (.../branches/gcc-7-branch)
+@@ -1310,6 +1310,7 @@
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1EPKwjRKS1_@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS1_@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_@@GLIBCXX_3.4
++FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_jRKS1_@@GLIBCXX_3.4.24
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_jj@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_jjRKS1_@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ESt16initializer_listIwERKS1_@@GLIBCXX_3.4.11
+@@ -1323,6 +1324,7 @@
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2EPKwjRKS1_@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS1_@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_@@GLIBCXX_3.4
++FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_jRKS1_@@GLIBCXX_3.4.24
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_jj@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_jjRKS1_@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ESt16initializer_listIwERKS1_@@GLIBCXX_3.4.11
+@@ -3961,6 +3963,7 @@
+ OBJECT:0:GLIBCXX_3.4.21
+ OBJECT:0:GLIBCXX_3.4.22
+ OBJECT:0:GLIBCXX_3.4.23
++OBJECT:0:GLIBCXX_3.4.24
+ OBJECT:0:GLIBCXX_3.4.3
+ OBJECT:0:GLIBCXX_3.4.4
+ OBJECT:0:GLIBCXX_3.4.5
+Index: libstdc++-v3/config/abi/post/i386-solaris2.10/amd64/baseline_symbols.txt
+===================================================================
+--- a/src/libstdc++-v3/config/abi/post/i386-solaris2.10/amd64/baseline_symbols.txt (.../tags/gcc_7_1_0_release)
++++ b/src/libstdc++-v3/config/abi/post/i386-solaris2.10/amd64/baseline_symbols.txt (.../branches/gcc-7-branch)
+@@ -3963,6 +3963,7 @@
+ OBJECT:0:GLIBCXX_3.4.21
+ OBJECT:0:GLIBCXX_3.4.22
+ OBJECT:0:GLIBCXX_3.4.23
++OBJECT:0:GLIBCXX_3.4.24
+ OBJECT:0:GLIBCXX_3.4.3
+ OBJECT:0:GLIBCXX_3.4.4
+ OBJECT:0:GLIBCXX_3.4.5
+Index: libstdc++-v3/config/abi/post/i386-solaris2.11/baseline_symbols.txt
+===================================================================
+--- a/src/libstdc++-v3/config/abi/post/i386-solaris2.11/baseline_symbols.txt (.../tags/gcc_7_1_0_release)
++++ b/src/libstdc++-v3/config/abi/post/i386-solaris2.11/baseline_symbols.txt (.../branches/gcc-7-branch)
+@@ -1310,6 +1310,7 @@
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1EPKwjRKS1_@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS1_@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_@@GLIBCXX_3.4
++FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_jRKS1_@@GLIBCXX_3.4.24
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_jj@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_jjRKS1_@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ESt16initializer_listIwERKS1_@@GLIBCXX_3.4.11
+@@ -1323,6 +1324,7 @@
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2EPKwjRKS1_@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS1_@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_@@GLIBCXX_3.4
++FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_jRKS1_@@GLIBCXX_3.4.24
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_jj@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_jjRKS1_@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ESt16initializer_listIwERKS1_@@GLIBCXX_3.4.11
+@@ -3963,6 +3965,7 @@
+ OBJECT:0:GLIBCXX_3.4.21
+ OBJECT:0:GLIBCXX_3.4.22
+ OBJECT:0:GLIBCXX_3.4.23
++OBJECT:0:GLIBCXX_3.4.24
+ OBJECT:0:GLIBCXX_3.4.3
+ OBJECT:0:GLIBCXX_3.4.4
+ OBJECT:0:GLIBCXX_3.4.5
+Index: libstdc++-v3/config/abi/post/i386-solaris2.11/amd64/baseline_symbols.txt
+===================================================================
+--- a/src/libstdc++-v3/config/abi/post/i386-solaris2.11/amd64/baseline_symbols.txt (.../tags/gcc_7_1_0_release)
++++ b/src/libstdc++-v3/config/abi/post/i386-solaris2.11/amd64/baseline_symbols.txt (.../branches/gcc-7-branch)
+@@ -3965,6 +3965,7 @@
+ OBJECT:0:GLIBCXX_3.4.21
+ OBJECT:0:GLIBCXX_3.4.22
+ OBJECT:0:GLIBCXX_3.4.23
++OBJECT:0:GLIBCXX_3.4.24
+ OBJECT:0:GLIBCXX_3.4.3
+ OBJECT:0:GLIBCXX_3.4.4
+ OBJECT:0:GLIBCXX_3.4.5
+Index: libstdc++-v3/config/abi/post/alpha-linux-gnu/baseline_symbols.txt
+===================================================================
+--- a/src/libstdc++-v3/config/abi/post/alpha-linux-gnu/baseline_symbols.txt (.../tags/gcc_7_1_0_release)
++++ b/src/libstdc++-v3/config/abi/post/alpha-linux-gnu/baseline_symbols.txt (.../branches/gcc-7-branch)
+@@ -1471,6 +1471,7 @@
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1EPKwmRKS1_@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS1_@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_@@GLIBCXX_3.4
++FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_mRKS1_@@GLIBCXX_3.4.23
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_mm@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_mmRKS1_@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ESt16initializer_listIwERKS1_@@GLIBCXX_3.4.11
+@@ -1484,6 +1485,7 @@
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2EPKwmRKS1_@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS1_@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_@@GLIBCXX_3.4
++FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_mRKS1_@@GLIBCXX_3.4.23
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_mm@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_mmRKS1_@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ESt16initializer_listIwERKS1_@@GLIBCXX_3.4.11
+@@ -1726,6 +1728,7 @@
+ FUNC:_ZNSsC1EPKcmRKSaIcE@@GLIBCXX_3.4
+ FUNC:_ZNSsC1ERKSaIcE@@GLIBCXX_3.4
+ FUNC:_ZNSsC1ERKSs@@GLIBCXX_3.4
++FUNC:_ZNSsC1ERKSsmRKSaIcE@@GLIBCXX_3.4.23
+ FUNC:_ZNSsC1ERKSsmm@@GLIBCXX_3.4
+ FUNC:_ZNSsC1ERKSsmmRKSaIcE@@GLIBCXX_3.4
+ FUNC:_ZNSsC1ESt16initializer_listIcERKSaIcE@@GLIBCXX_3.4.11
+@@ -1739,6 +1742,7 @@
+ FUNC:_ZNSsC2EPKcmRKSaIcE@@GLIBCXX_3.4
+ FUNC:_ZNSsC2ERKSaIcE@@GLIBCXX_3.4
+ FUNC:_ZNSsC2ERKSs@@GLIBCXX_3.4
++FUNC:_ZNSsC2ERKSsmRKSaIcE@@GLIBCXX_3.4.23
+ FUNC:_ZNSsC2ERKSsmm@@GLIBCXX_3.4
+ FUNC:_ZNSsC2ERKSsmmRKSaIcE@@GLIBCXX_3.4
+ FUNC:_ZNSsC2ESt16initializer_listIcERKSaIcE@@GLIBCXX_3.4.11
+@@ -2382,6 +2386,7 @@
+ FUNC:_ZNSt15_List_node_base9_M_unhookEv@@GLIBCXX_3.4.14
+ FUNC:_ZNSt15__exception_ptr13exception_ptr4swapERS0_@@CXXABI_1.3.3
+ FUNC:_ZNSt15__exception_ptr13exception_ptrC1EMS0_FvvE@@CXXABI_1.3.3
++FUNC:_ZNSt15__exception_ptr13exception_ptrC1EPv@@CXXABI_1.3.11
+ FUNC:_ZNSt15__exception_ptr13exception_ptrC1ERKS0_@@CXXABI_1.3.3
+ FUNC:_ZNSt15__exception_ptr13exception_ptrC1Ev@@CXXABI_1.3.3
+ FUNC:_ZNSt15__exception_ptr13exception_ptrC2EMS0_FvvE@@CXXABI_1.3.3
+@@ -3068,6 +3073,7 @@
+ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1ERKS3_@@GLIBCXX_3.4.21
+ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1ERKS4_@@GLIBCXX_3.4.21
+ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1ERKS4_RKS3_@@GLIBCXX_3.4.21
++FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1ERKS4_mRKS3_@@GLIBCXX_3.4.23
+ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1ERKS4_mm@@GLIBCXX_3.4.21
+ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1ERKS4_mmRKS3_@@GLIBCXX_3.4.21
+ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1ESt16initializer_listIcERKS3_@@GLIBCXX_3.4.21
+@@ -3083,6 +3089,7 @@
+ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS3_@@GLIBCXX_3.4.21
+ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_@@GLIBCXX_3.4.21
+ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_RKS3_@@GLIBCXX_3.4.21
++FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_mRKS3_@@GLIBCXX_3.4.23
+ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_mm@@GLIBCXX_3.4.21
+ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_mmRKS3_@@GLIBCXX_3.4.21
+ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ESt16initializer_listIcERKS3_@@GLIBCXX_3.4.21
+@@ -3209,6 +3216,7 @@
+ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEC1ERKS3_@@GLIBCXX_3.4.21
+ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEC1ERKS4_@@GLIBCXX_3.4.21
+ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEC1ERKS4_RKS3_@@GLIBCXX_3.4.21
++FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEC1ERKS4_mRKS3_@@GLIBCXX_3.4.23
+ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEC1ERKS4_mm@@GLIBCXX_3.4.21
+ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEC1ERKS4_mmRKS3_@@GLIBCXX_3.4.21
+ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEC1ESt16initializer_listIwERKS3_@@GLIBCXX_3.4.21
+@@ -3224,6 +3232,7 @@
+ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEC2ERKS3_@@GLIBCXX_3.4.21
+ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEC2ERKS4_@@GLIBCXX_3.4.21
+ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEC2ERKS4_RKS3_@@GLIBCXX_3.4.21
++FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEC2ERKS4_mRKS3_@@GLIBCXX_3.4.23
+ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEC2ERKS4_mm@@GLIBCXX_3.4.21
+ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEC2ERKS4_mmRKS3_@@GLIBCXX_3.4.21
+ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEC2ESt16initializer_listIwERKS3_@@GLIBCXX_3.4.21
+@@ -4114,14 +4123,24 @@
+ FUNC:_ZTv0_n24_NSt9strstreamD1Ev@@GLIBCXX_3.4
+ FUNC:_ZdaPv@@GLIBCXX_3.4
+ FUNC:_ZdaPvRKSt9nothrow_t@@GLIBCXX_3.4
++FUNC:_ZdaPvSt11align_val_t@@CXXABI_1.3.11
++FUNC:_ZdaPvSt11align_val_tRKSt9nothrow_t@@CXXABI_1.3.11
+ FUNC:_ZdaPvm@@CXXABI_1.3.9
++FUNC:_ZdaPvmSt11align_val_t@@CXXABI_1.3.11
+ FUNC:_ZdlPv@@GLIBCXX_3.4
+ FUNC:_ZdlPvRKSt9nothrow_t@@GLIBCXX_3.4
++FUNC:_ZdlPvSt11align_val_t@@CXXABI_1.3.11
++FUNC:_ZdlPvSt11align_val_tRKSt9nothrow_t@@CXXABI_1.3.11
+ FUNC:_ZdlPvm@@CXXABI_1.3.9
++FUNC:_ZdlPvmSt11align_val_t@@CXXABI_1.3.11
+ FUNC:_Znam@@GLIBCXX_3.4
+ FUNC:_ZnamRKSt9nothrow_t@@GLIBCXX_3.4
++FUNC:_ZnamSt11align_val_t@@CXXABI_1.3.11
++FUNC:_ZnamSt11align_val_tRKSt9nothrow_t@@CXXABI_1.3.11
+ FUNC:_Znwm@@GLIBCXX_3.4
+ FUNC:_ZnwmRKSt9nothrow_t@@GLIBCXX_3.4
++FUNC:_ZnwmSt11align_val_t@@CXXABI_1.3.11
++FUNC:_ZnwmSt11align_val_tRKSt9nothrow_t@@CXXABI_1.3.11
+ FUNC:__atomic_flag_for_address@@GLIBCXX_3.4.11
+ FUNC:__atomic_flag_wait_explicit@@GLIBCXX_3.4.11
+ FUNC:__cxa_allocate_dependent_exception@@CXXABI_1.3.6
+@@ -4142,6 +4161,7 @@
+ FUNC:__cxa_guard_abort@@CXXABI_1.3
+ FUNC:__cxa_guard_acquire@@CXXABI_1.3
+ FUNC:__cxa_guard_release@@CXXABI_1.3
++FUNC:__cxa_init_primary_exception@@CXXABI_1.3.11
+ FUNC:__cxa_pure_virtual@@CXXABI_1.3
+ FUNC:__cxa_rethrow@@CXXABI_1.3
+ FUNC:__cxa_thread_atexit@@CXXABI_1.3.7
+@@ -4189,6 +4209,7 @@
+ OBJECT:0:CXXABI_1.3
+ OBJECT:0:CXXABI_1.3.1
+ OBJECT:0:CXXABI_1.3.10
++OBJECT:0:CXXABI_1.3.11
+ OBJECT:0:CXXABI_1.3.2
+ OBJECT:0:CXXABI_1.3.3
+ OBJECT:0:CXXABI_1.3.4
+@@ -4216,6 +4237,7 @@
+ OBJECT:0:GLIBCXX_3.4.21
+ OBJECT:0:GLIBCXX_3.4.22
+ OBJECT:0:GLIBCXX_3.4.23
++OBJECT:0:GLIBCXX_3.4.24
+ OBJECT:0:GLIBCXX_3.4.3
+ OBJECT:0:GLIBCXX_3.4.4
+ OBJECT:0:GLIBCXX_3.4.5
Index: libstdc++-v3/config/abi/post/i386-linux-gnu/baseline_symbols.txt
===================================================================
--- a/src/libstdc++-v3/config/abi/post/i386-linux-gnu/baseline_symbols.txt (.../tags/gcc_7_1_0_release)
@@ -2148,7 +2869,38 @@ Index: gcc/DATESTAMP
+++ b/src/gcc/DATESTAMP (.../branches/gcc-7-branch)
@@ -1 +1 @@
-20170502
-+20170618
++20170628
+Index: gcc/builtins.c
+===================================================================
+--- a/src/gcc/builtins.c (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/builtins.c (.../branches/gcc-7-branch)
+@@ -5939,6 +5939,12 @@
+ gcc_assert (TREE_OPERAND (addr, 0) == fndecl);
+ TREE_OPERAND (addr, 0) = builtin_decl_explicit (ext_call);
+
++ /* If we will emit code after the call, the call can not be a tail call.
++ If it is emitted as a tail call, a barrier is emitted after it, and
++ then all trailing code is removed. */
++ if (!ignore)
++ CALL_EXPR_TAILCALL (exp) = 0;
++
+ /* Expand the call here so we can emit trailing code. */
+ ret = expand_call (exp, target, ignore);
+
+Index: gcc/gcc.c
+===================================================================
+--- a/src/gcc/gcc.c (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/gcc.c (.../branches/gcc-7-branch)
+@@ -4472,6 +4472,9 @@
+ output_file);
+ }
+
++ if (output_file != NULL && output_file[0] == '\0')
++ fatal_error (input_location, "output filename may not be empty");
++
+ /* If -save-temps=obj and -o name, create the prefix to use for %b.
+ Otherwise just make -save-temps=obj the same as -save-temps=cwd. */
+ if (save_temps_flag == SAVE_TEMPS_OBJ && save_temps_prefix != NULL)
Index: gcc/fold-const.c
===================================================================
--- a/src/gcc/fold-const.c (.../tags/gcc_7_1_0_release)
@@ -2246,6 +2998,54 @@ Index: gcc/omp-low.c
code = OMP_CLAUSE_REDUCTION_CODE (c);
/* reduction(-:var) sums up the partial results, so it acts
+Index: gcc/gcov.c
+===================================================================
+--- a/src/gcc/gcov.c (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/gcov.c (.../branches/gcc-7-branch)
+@@ -655,7 +655,6 @@
+
+ fnotice (file, "Usage: gcov [OPTION...] SOURCE|OBJ...\n\n");
+ fnotice (file, "Print code coverage information.\n\n");
+- fnotice (file, " -h, --help Print this help, then exit\n");
+ fnotice (file, " -a, --all-blocks Show information for every basic block\n");
+ fnotice (file, " -b, --branch-probabilities Include branch probabilities in output\n");
+ fnotice (file, " -c, --branch-counts Output counts of branches taken\n\
+@@ -662,6 +661,7 @@
+ rather than percentages\n");
+ fnotice (file, " -d, --display-progress Display progress information\n");
+ fnotice (file, " -f, --function-summaries Output summaries for each function\n");
++ fnotice (file, " -h, --help Print this help, then exit\n");
+ fnotice (file, " -i, --intermediate-format Output .gcov file in intermediate text format\n");
+ fnotice (file, " -l, --long-file-names Use long output file names for included\n\
+ source files\n");
+@@ -1959,6 +1959,13 @@
+ {
+ static char buffer[20];
+
++ /* Handle invalid values that would result in a misleading value. */
++ if (bottom != 0 && top > bottom && dp >= 0)
++ {
++ sprintf (buffer, "NAN %%");
++ return buffer;
++ }
++
+ if (dp >= 0)
+ {
+ float ratio = bottom ? (float)top / bottom : 0;
+Index: gcc/toplev.c
+===================================================================
+--- a/src/gcc/toplev.c (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/toplev.c (.../branches/gcc-7-branch)
+@@ -1915,6 +1915,9 @@
+ stack_usage_file = NULL;
+ }
+
++ if (seen_error ())
++ coverage_remove_note_file ();
++
+ if (!no_backend)
+ {
+ statistics_fini ();
Index: gcc/reorg.c
===================================================================
--- a/src/gcc/reorg.c (.../tags/gcc_7_1_0_release)
@@ -2311,6 +3111,26 @@ Index: gcc/tree-chrec.c
/* poly0 and poly1 are two polynomials in the same variable,
{a, +, b}_x * {c, +, d}_x -> {a*c, +, a*d + b*c + b*d, +, 2*b*d}_x. */
+Index: gcc/real.c
+===================================================================
+--- a/src/gcc/real.c (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/real.c (.../branches/gcc-7-branch)
+@@ -960,12 +960,12 @@
+ gcc_unreachable ();
+ }
+
++ if (a->decimal || b->decimal)
++ return decimal_do_compare (a, b, nan_result);
++
+ if (a->sign != b->sign)
+ return -a->sign - -b->sign;
+
+- if (a->decimal || b->decimal)
+- return decimal_do_compare (a, b, nan_result);
+-
+ if (REAL_EXP (a) > REAL_EXP (b))
+ ret = 1;
+ else if (REAL_EXP (a) < REAL_EXP (b))
Index: gcc/tree-ssa-sccvn.c
===================================================================
--- a/src/gcc/tree-ssa-sccvn.c (.../tags/gcc_7_1_0_release)
@@ -2407,7 +3227,261 @@ Index: gcc/ChangeLog
===================================================================
--- a/src/gcc/ChangeLog (.../tags/gcc_7_1_0_release)
+++ b/src/gcc/ChangeLog (.../branches/gcc-7-branch)
-@@ -1,3 +1,436 @@
+@@ -1,3 +1,690 @@
++2017-06-27 Segher Boessenkool <segher at kernel.crashing.org>
++
++ Backports from trunk:
++
++ 2017-05-17 Segher Boessenkool <segher at kernel.crashing.org>
++ PR middle-end/80692
++ * real.c (do_compare): Give decimal_do_compare preference over
++ comparing just the signs.
++
++ 2017-05-31 Segher Boessenkool <segher at kernel.crashing.org>
++ PR target/80618
++ * config/rs6000/vector.md (*vector_uneq<mode>): Write the nor in the
++ splitter result in the canonical way.
++
++ 2017-06-09 Segher Boessenkool <segher at kernel.crashing.org>
++ PR target/80966
++ * config/rs6000/rs6000.c (rs6000_emit_allocate_stack): Assert that
++ gen_add3_insn did not fail.
++ * config/rs6000/rs6000.md (add<mode>3): If asked to add a constant to
++ r0, construct that number in a temporary reg and add that reg to r0.
++ If asked to put the result in r0 as well, fail.
++
++ 2017-06-23 Segher Boessenkool <segher at kernel.crashing.org>
++ PR middle-end/80902
++ * builtins.c (expand_builtin_atomic_fetch_op): If emitting code after
++ a call, force the call to not be a tail call.
++
++2017-06-27 Jakub Jelinek <jakub at redhat.com>
++
++ PR sanitizer/81209
++ * ubsan.c (ubsan_encode_value): Initialize DECL_CONTEXT on var.
++
++ PR middle-end/81207
++ * gimple-fold.c (replace_call_with_call_and_fold): Handle
++ gimple_vuse copying separately from gimple_vdef copying.
++
++2017-06-24 Jim Wilson <jim.wilson at linaro.org>
++
++ * config/aarch64/aarch64-cost-tables.h (qdf24xx_extra_costs): Move to
++ here.
++ * config/arm/aarch-cost-tables.h (qdf24xx_extra_costs): From here.
++ * config/arm/arm-cpu-cdata.h: Regenerate.
++ * config/arm/arm-cpu-data.h, config/arm/arm-cpu.h: Likewise.
++ * config/arm/arm-tables.opt, config/arm/arm-tune.md: Likewise.
++ * config/arm/arm-cpus.in: Delete falkor and qdf24xx entries.
++ * config/arm/arm.c (arm_qdf24xx_tune): Delete.
++ * config/arm/bpabi.h (BE8_LINK_SPEC): Delete falkor and qdf24xx
++ support.
++ * config/arm/t-aprofile (MULTILIB_MATCHES): Delete falkor and qdf24xx
++ support.
++ * config/arm/t-rmprofile: Likewise.
++ * doc/invoke.texi (ARM Options): Drop falkor and qdf24xx support.
++
++2017-06-24 Marek Polacek <polacek at redhat.com>
++
++ Backport from mainline
++ 2017-05-04 Marek Polacek <polacek at redhat.com>
++
++ PR tree-optimization/80612
++ * calls.c (get_size_range): Check for INTEGRAL_TYPE_P.
++
++2017-06-23 Thomas Preud'homme <thomas.preudhomme at arm.com>
++
++ Backport from mainline
++ 2017-05-04 Prakhar Bahuguna <prakhar.bahuguna at arm.com>
++
++ * gcc/config/arm/arm-builtins.c (arm_init_builtins): Rename
++ __builtin_arm_ldfscr to __builtin_arm_get_fpscr, and rename
++ __builtin_arm_stfscr to __builtin_arm_set_fpscr.
++
++2017-06-23 Jonathan Wakely <jwakely at redhat.com>
++
++ PR c++/81187
++ * doc/invoke.texi (-Wnoexcept-type): Fix name of option, from
++ -Wnoexcept.
++
++2017-06-22 Martin Liska <mliska at suse.cz>
++
++ Backport from mainline
++ 2017-06-19 Martin Liska <mliska at suse.cz>
++
++ PR sanitizer/80879
++ * gimplify.c (gimplify_switch_expr):
++ Initialize live_switch_vars for SWITCH_BODY == STATEMENT_LIST.
++
++2017-06-22 Martin Liska <mliska at suse.cz>
++
++ Backport from mainline
++ 2017-05-31 Martin Liska <mliska at suse.cz>
++
++ PR target/79155
++ * config/i386/cpuid.h: Fix typo in a comment in cpuid.h.
++
++2017-06-22 Martin Liska <mliska at suse.cz>
++
++ Backport from mainline
++ 2017-05-30 Martin Liska <mliska at suse.cz>
++
++ PR other/80909
++ * auto-profile.c (get_function_decl_from_block): Fix
++ parenthesis.
++
++2017-06-22 Martin Liska <mliska at suse.cz>
++
++ Backport from mainline
++ 2017-05-26 Martin Liska <mliska at suse.cz>
++
++ PR ipa/80663
++ * params.def: Bound partial-inlining-entry-probability param.
++
++2017-06-22 Martin Liska <mliska at suse.cz>
++
++ Backport from mainline
++ 2017-05-16 Martin Liska <mliska at suse.cz>
++
++ PR ipa/79849.
++ PR ipa/79850.
++ * ipa-devirt.c (warn_types_mismatch): Fix typo.
++ (odr_types_equivalent_p): Likewise.
++
++2017-06-22 Martin Liska <mliska at suse.cz>
++
++ Backport from mainline
++ 2017-05-15 Martin Liska <mliska at suse.cz>
++
++ PR driver/31468
++ * gcc.c (process_command): Do not allow empty argument of -o option.
++
++2017-06-22 Martin Liska <mliska at suse.cz>
++
++ Backport from mainline
++ 2017-05-02 Martin Liska <mliska at suse.cz>
++
++ * doc/gcov.texi: Add missing preposition.
++ * gcov.c (function_info::function_info): Properly fill up
++ all member variables.
++
++2017-06-22 Martin Liska <mliska at suse.cz>
++
++ Backport from mainline
++ 2017-05-02 Martin Liska <mliska at suse.cz>
++
++ PR other/80589
++ * common.opt: Fix typo.
++ * doc/invoke.texi: Likewise.
++
++2017-06-22 Martin Liska <mliska at suse.cz>
++
++ Backport from mainline
++ 2017-04-28 Martin Liska <mliska at suse.cz>
++
++ * doc/gcov.texi: Enhance documentation of gcov.
++
++2017-06-22 Martin Liska <mliska at suse.cz>
++
++ Backport from mainline
++ 2017-04-28 Martin Liska <mliska at suse.cz>
++
++ * doc/gcov.texi: Sort options in alphabetic order.
++ * doc/gcov-dump.texi: Likewise.
++ * doc/gcov-tool.texi: Likewise.
++ * gcov.c (print_usage): Likewise.
++ * gcov-dump.c (print_usage): Likewise.
++ * gcov-tool.c (print_merge_usage_message): Likewise.
++ (print_rewrite_usage_message): Likewise.
++ (print_overlap_usage_message): Likewise.
++
++2017-06-22 Martin Liska <mliska at suse.cz>
++
++ Backport from mainline
++ 2017-04-28 Martin Liska <mliska at suse.cz>
++
++ PR gcov-profile/53915
++ * gcov.c (format_gcov): Print 'NAN %' when top > bottom.
++
++2017-06-22 Martin Liska <mliska at suse.cz>
++
++ Backport from mainline
++ 2017-04-28 Martin Liska <mliska at suse.cz>
++
++ PR driver/56469
++ * coverage.c (coverage_remove_note_file): New function.
++ * coverage.h: Declare the function.
++ * toplev.c (finalize): Clean if an error has been seen.
++
++2017-06-21 Jakub Jelinek <jakub at redhat.com>
++
++ PR target/81151
++ * config/i386/sse.md (round<mode>2): Renumber match_dup and
++ operands indexes to avoid gap between operands and match_dups.
++
++ PR c++/81130
++ * gimplify.c (omp_add_variable): Don't force GOVD_SEEN for types
++ with ctors/dtors if GOVD_SHARED is set.
++
++ Backported from mainline
++ 2017-06-20 Jakub Jelinek <jakub at redhat.com>
++
++ PR target/81121
++ * config/i386/i386.md (TARGET_USE_VECTOR_CONVERTS float si->{sf,df}
++ splitter): Require TARGET_SSE2 in the condition.
++
++ PR sanitizer/81125
++ * ubsan.h (ubsan_encode_value): Workaround buggy clang++ parser
++ by removing enum keyword.
++ (ubsan_type_descriptor): Likewise. Formatting fix.
++
++ 2017-06-19 Jakub Jelinek <jakub at redhat.com>
++
++ PR sanitizer/81125
++ * ubsan.h (enum ubsan_encode_value_phase): New.
++ (ubsan_encode_value): Change second argument to
++ enum ubsan_encode_value_phase with default value of
++ UBSAN_ENCODE_VALUE_GENERIC.
++ * ubsan.c (ubsan_encode_value): Change second argument to
++ enum ubsan_encode_value_phase PHASE from bool IN_EXPAND_P,
++ adjust uses, for UBSAN_ENCODE_VALUE_GENERIC use just
++ create_tmp_var_raw instead of create_tmp_var and use a
++ TARGET_EXPR.
++ (ubsan_expand_bounds_ifn, ubsan_build_overflow_builtin,
++ instrument_bool_enum_load, ubsan_instrument_float_cast): Adjust
++ ubsan_encode_value callers.
++
++ PR sanitizer/81111
++ * ubsan.c (ubsan_encode_value): If current_function_decl is NULL,
++ use create_tmp_var_raw instead of create_tmp_var, mark it addressable
++ just by setting TREE_ADDRESSABLE on the result and use a TARGET_EXPR.
++
++2017-06-20 James Greenhalgh <james.greenhalgh at arm.com>
++
++ Backport from Mainline
++ * config/aarch64/aarch64-option-extensions.def (fp16): Fix expected
++ feature string.
++
++2017-06-20 Andreas Schwab <schwab at suse.de>
++
++ PR target/80970
++ * config/m68k/m68k.md (bsetdreg, bchgdreg, bclrdreg): Use "=d"
++ instead of "+d".
++
++2017-06-19 James Greenhalgh <james.greenhalgh at arm.com>
++
++ Backport from mainline
++ 2017-06-19 James Greenhalgh <james.greenhalgh at arm.com>
++
++ PR target/71778
++ * config/arm/arm-builtins.c (arm_expand_builtin_args): Return TARGET
++ if given a non-constant argument for an intrinsic which requires a
++ constant.
++
++2017-06-19 Alexander Monakov <amonakov at ispras.ru>
++
++ * doc/invoke.texi (mcx16): Rewrite.
++
+2017-06-15 Eric Botcazou <ebotcazou at adacore.com>
+
+ PR rtl-optimization/80474
@@ -2844,7 +3918,7 @@ Index: gcc/ChangeLog
2017-05-02 Release Manager
* GCC 7.1.0 released.
-@@ -110,9 +547,9 @@
+@@ -110,9 +801,9 @@
Backport from mainline
2017-04-25 Andreas Krebbel <krebbel at linux.vnet.ibm.com>
@@ -2857,7 +3931,7 @@ Index: gcc/ChangeLog
2017-04-25 Andreas Krebbel <krebbel at linux.vnet.ibm.com>
-@@ -119,11 +556,11 @@
+@@ -119,11 +810,11 @@
Backport from mainline
2017-04-25 Andreas Krebbel <krebbel at linux.vnet.ibm.com>
@@ -2874,7 +3948,7 @@ Index: gcc/ChangeLog
2017-04-25 Dominik Vogt <vogt at linux.vnet.ibm.com>
-@@ -130,30 +567,30 @@
+@@ -130,30 +821,30 @@
Backport from maineline
2017-04-25 Dominik Vogt <vogt at linux.vnet.ibm.com>
@@ -2929,7 +4003,7 @@ Index: gcc/ChangeLog
2017-04-25 Dominik Vogt <vogt at linux.vnet.ibm.com>
-@@ -160,8 +597,8 @@
+@@ -160,8 +851,8 @@
Backport from mainline
2017-04-25 Dominik Vogt <vogt at linux.vnet.ibm.com>
@@ -2940,7 +4014,7 @@ Index: gcc/ChangeLog
2017-04-25 Dominik Vogt <vogt at linux.vnet.ibm.com>
-@@ -169,8 +606,8 @@
+@@ -169,8 +860,8 @@
Backport from mainline
2017-04-25 Dominik Vogt <vogt at linux.vnet.ibm.com>
@@ -2951,7 +4025,7 @@ Index: gcc/ChangeLog
2017-04-25 Jakub Jelinek <jakub at redhat.com>
-@@ -229,7 +666,7 @@
+@@ -229,7 +920,7 @@
(build_array_type): Likewise. Add typeless_storage argument.
2017-04-19 Eric Botcazou <ebotcazou at adacore.com>
@@ -2960,7 +4034,7 @@ Index: gcc/ChangeLog
PR tree-optimization/80426
* tree-vrp.c (extract_range_from_binary_expr_1): For an additive
-@@ -271,7 +708,7 @@
+@@ -271,7 +962,7 @@
are only used in debug insns.
2017-04-19 Eric Botcazou <ebotcazou at adacore.com>
@@ -3376,8 +4450,8 @@ Index: gcc/testsuite/gcc.target/powerpc/pr80510-1.c
===================================================================
--- a/src/gcc/testsuite/gcc.target/powerpc/pr80510-1.c (.../tags/gcc_7_1_0_release)
+++ b/src/gcc/testsuite/gcc.target/powerpc/pr80510-1.c (.../branches/gcc-7-branch)
-@@ -0,0 +1,211 @@
-+/* { dg-do compile { target { powerpc*-*-* } } } */
+@@ -0,0 +1,213 @@
++/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power7" } } */
@@ -3385,7 +4459,9 @@ Index: gcc/testsuite/gcc.target/powerpc/pr80510-1.c
+
+/* Make sure that STXSDX is generated for double scalars in Altivec registers
+ on power7 instead of moving the value to a FPR register and doing a X-FORM
-+ store. */
++ store.
++
++ 32-bit currently does not have support for STXSDX in the mov{df,dd} patterns. */
+
+#ifndef TYPE
+#define TYPE double
@@ -3400,7 +4476,7 @@ Index: gcc/testsuite/gcc.target/powerpc/pr80510-1.c
+#endif
+
+#ifndef ITYPE
-+#define ITYPE long
++#define ITYPE __INT64_TYPE__
+#endif
+
+#ifdef DO_CALL
@@ -3592,8 +4668,8 @@ Index: gcc/testsuite/gcc.target/powerpc/pr80510-2.c
===================================================================
--- a/src/gcc/testsuite/gcc.target/powerpc/pr80510-2.c (.../tags/gcc_7_1_0_release)
+++ b/src/gcc/testsuite/gcc.target/powerpc/pr80510-2.c (.../branches/gcc-7-branch)
-@@ -0,0 +1,212 @@
-+/* { dg-do compile { target { powerpc*-*-* } } } */
+@@ -0,0 +1,214 @@
++/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
@@ -3601,7 +4677,9 @@ Index: gcc/testsuite/gcc.target/powerpc/pr80510-2.c
+
+/* Make sure that STXSSPX is generated for float scalars in Altivec registers
+ on power7 instead of moving the value to a FPR register and doing a X-FORM
-+ store. */
++ store.
++
++ 32-bit currently does not have support for STXSSPX in the mov{sf,sd} patterns. */
+
+#ifndef TYPE
+#define TYPE float
@@ -3616,7 +4694,7 @@ Index: gcc/testsuite/gcc.target/powerpc/pr80510-2.c
+#endif
+
+#ifndef ITYPE
-+#define ITYPE long
++#define ITYPE __INT64_TYPE__
+#endif
+
+#ifdef DO_CALL
@@ -3805,6 +4883,21 @@ Index: gcc/testsuite/gcc.target/powerpc/pr80510-2.c
+/* { dg-final { scan-assembler {\mstxsspx\M} } } */
+/* { dg-final { scan-assembler-not {\mmfvsrd\M} } } */
+/* { dg-final { scan-assembler-not {\mmfvsrwz\M} } } */
+Index: gcc/testsuite/gcc.target/powerpc/stack-limit.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/powerpc/stack-limit.c (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/testsuite/gcc.target/powerpc/stack-limit.c (.../branches/gcc-7-branch)
+@@ -0,0 +1,10 @@
++/* { dg-options "-O0 -fstack-limit-register=r14" } */
++
++// PR80966
++
++int foo (int i)
++{
++ char arr[135000];
++
++ arr[i] = 0;
++}
Index: gcc/testsuite/gcc.target/powerpc/pr80718.c
===================================================================
--- a/src/gcc/testsuite/gcc.target/powerpc/pr80718.c (.../tags/gcc_7_1_0_release)
@@ -4221,6 +5314,56 @@ Index: gcc/testsuite/gcc.target/arm/thumb2-slow-flash-data-5.c
+}
+
+/* { dg-final { scan-assembler-not "#1\\.0e\\+0" } } */
+Index: gcc/testsuite/gcc.target/arm/pr71778.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/arm/pr71778.c (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/testsuite/gcc.target/arm/pr71778.c (.../branches/gcc-7-branch)
+@@ -0,0 +1,24 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_neon } */
++
++typedef __simd128_int32_t int32x4_t;
++
++__extension__ extern __inline int32x4_t
++__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
++vshrq_n_s32 (int32x4_t __a, const int __b)
++{
++ /* Errors for arm_neon.h intrinsics using constants end up on the line
++ in arm_neon.h rather than the source file line. That means we
++ need to put the dg-error up here, rather than on line 22 where we'd
++ like it. */
++ return (int32x4_t)__builtin_neon_vshrs_nv4si (__a, __b); /* { dg-error "argument 2 must be a constant immediate" } */
++}
++
++int32x4_t
++shift (int32x4_t a, int b)
++{
++ return vshrq_n_s32 (a, b);
++}
++
+Index: gcc/testsuite/gcc.target/arm/fpscr.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/arm/fpscr.c (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/testsuite/gcc.target/arm/fpscr.c (.../branches/gcc-7-branch)
+@@ -0,0 +1,16 @@
++/* Test the fpscr builtins. */
++
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_fp_ok } */
++/* { dg-skip-if "need fp instructions" { *-*-* } { "-mfloat-abi=soft" } { "" } } */
++/* { dg-add-options arm_fp } */
++
++void
++test_fpscr ()
++{
++ volatile unsigned int status = __builtin_arm_get_fpscr ();
++ __builtin_arm_set_fpscr (status);
++}
++
++/* { dg-final { scan-assembler "mrc\tp10, 7, r\[0-9\]+, cr1, cr0, 0" } } */
++/* { dg-final { scan-assembler "mcr\tp10, 7, r\[0-9\]+, cr1, cr0, 0" } } */
Index: gcc/testsuite/gcc.target/arm/tls-disable-literal-pool.c
===================================================================
--- a/src/gcc/testsuite/gcc.target/arm/tls-disable-literal-pool.c (.../tags/gcc_7_1_0_release)
@@ -4349,6 +5492,21 @@ Index: gcc/testsuite/gcc.target/sparc/niagara7-align.c
+/* { dg-options "-falign-functions -mcpu=niagara7" } */
+/* { dg-final { scan-assembler "\.align 64" } } */
+void foo(void) {}
+Index: gcc/testsuite/gcc.target/i386/pr81121.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/i386/pr81121.c (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/testsuite/gcc.target/i386/pr81121.c (.../branches/gcc-7-branch)
+@@ -0,0 +1,10 @@
++/* PR target/81121 */
++/* { dg-do compile } */
++/* { dg-options "-O0 -march=amdfam10 -mno-sse2" } */
++
++void
++foo (short *x, short *y)
++{
++ float a = 0;
++ y[0] = x[0] * a;
++}
Index: gcc/testsuite/gcc.target/i386/pr22152.c
===================================================================
--- a/src/gcc/testsuite/gcc.target/i386/pr22152.c (.../tags/gcc_7_1_0_release)
@@ -4653,6 +5811,32 @@ Index: gcc/testsuite/gfortran.dg/proc_ptr_comp_49.f90
+ end function
+
+end module
+Index: gcc/testsuite/gfortran.dg/read_5.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/read_5.f90 (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/testsuite/gfortran.dg/read_5.f90 (.../branches/gcc-7-branch)
+@@ -0,0 +1,21 @@
++! { dg-do run }
++! PR53029 Missed optimization, this test case took several seconds to
++ program internalread
++ implicit none
++ integer m
++ parameter(m=1000000)
++ character value*10
++ character(80) :: result
++ integer i,j,intvalues(m)
++ real :: start, finish
++ intvalues = 33
++ call cpu_time(start)
++ do j=1,100
++ write(value,'(i3,a5)') j," 5 69"
++ read(value,*,end=20) intvalues
++ 20 write(result,*) (intvalues(i),i=2,4)
++ if (result.ne.(' 5 69 33')) call abort
++ call cpu_time(finish)
++ if ((finish-start).gt. 0.5) call abort
++ enddo
++ end program internalread
Index: gcc/testsuite/gfortran.dg/namelist_91.f90
===================================================================
--- a/src/gcc/testsuite/gfortran.dg/namelist_91.f90 (.../tags/gcc_7_1_0_release)
@@ -4962,6 +6146,42 @@ Index: gcc/testsuite/gfortran.dg/matmul_16.f90
+ call abort
+ end if
+end program bogus_matmul
+Index: gcc/testsuite/gcc.c-torture/execute/pr80692.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.c-torture/execute/pr80692.c (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/testsuite/gcc.c-torture/execute/pr80692.c (.../branches/gcc-7-branch)
+@@ -0,0 +1,13 @@
++/* { dg-require-effective-target dfp } */
++
++int main () {
++ _Decimal64 d64 = -0.DD;
++
++ if (d64 != 0.DD)
++ __builtin_abort ();
++
++ if (d64 != -0.DD)
++ __builtin_abort ();
++
++ return 0;
++}
+Index: gcc/testsuite/gcc.c-torture/compile/pr81207.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.c-torture/compile/pr81207.c (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/testsuite/gcc.c-torture/compile/pr81207.c (.../branches/gcc-7-branch)
+@@ -0,0 +1,13 @@
++/* PR middle-end/81207 */
++
++static const char *b[2] = { "'", "" };
++
++int
++foo (const char *d)
++{
++ int e;
++ for (e = 0; b[e]; e++)
++ if (__builtin_strstr (d, b[e]))
++ return 1;
++ return 0;
++}
Index: gcc/testsuite/gnat.dg/specs/not_null1.ads
===================================================================
--- a/src/gcc/testsuite/gnat.dg/specs/not_null1.ads (.../tags/gcc_7_1_0_release)
@@ -4993,6 +6213,46 @@ Index: gcc/testsuite/gcc.dg/pr80468.c
+ __attribute__ ((__vector_size__ (4 * sizeof (unsigned)))) __int128 b; /* { dg-error "is not supported on this target" } */
+ 0 != b;
+}
+Index: gcc/testsuite/gcc.dg/asan/use-after-scope-switch-4.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/asan/use-after-scope-switch-4.c (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/testsuite/gcc.dg/asan/use-after-scope-switch-4.c (.../branches/gcc-7-branch)
+@@ -0,0 +1,35 @@
++// { dg-do run }
++// { dg-additional-options "-fdump-tree-gimple" }
++
++int *ptr;
++
++struct a
++{
++ int c;
++};
++
++int main(int argc, char **argv)
++{
++ struct a e;
++ e.c = 2;
++ int x = 0;
++
++ for (;;)
++ switch (e.c)
++ case 3:
++ {
++ int resxxx;
++ case 2:
++ ptr = &resxxx;
++ *ptr = 123;
++
++ if (x)
++ return 0;
++ else
++ x = 1;
++ }
++
++ return 1;
++}
++
++/* { dg-final { scan-tree-dump-times "ASAN_MARK \\(UNPOISON, &resxxx, \[0-9\]\\);" 2 "gimple" } } */
Index: gcc/testsuite/gcc.dg/asan/pr80659.c
===================================================================
--- a/src/gcc/testsuite/gcc.dg/asan/pr80659.c (.../tags/gcc_7_1_0_release)
@@ -5121,6 +6381,44 @@ Index: gcc/testsuite/gcc.dg/torture/pr80549.c
+ fn1(1);
+ return 0;
+}
+Index: gcc/testsuite/gcc.dg/torture/pr80970.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/torture/pr80970.c (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/testsuite/gcc.dg/torture/pr80970.c (.../branches/gcc-7-branch)
+@@ -0,0 +1,13 @@
++/* { dg-do compile } */
++
++int a, b, c, d, e;
++void f ()
++{
++ long g, h;
++ if (c)
++ e = d;
++ g = d & 31;
++ h = 1 << g;
++ a = e | h;
++ b = a;
++}
+Index: gcc/testsuite/gcc.dg/torture/pr80612.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/torture/pr80612.c (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/testsuite/gcc.dg/torture/pr80612.c (.../branches/gcc-7-branch)
+@@ -0,0 +1,15 @@
++/* PR tree-optimization/80612 */
++/* { dg-do compile } */
++
++struct obstack *a;
++struct obstack {
++ union {
++ void *plain;
++ void (*extra)();
++ } chunkfun;
++} fn1(void p4()) {
++ a->chunkfun.plain = p4;
++ a->chunkfun.extra(a);
++}
++void fn2(int) __attribute__((__alloc_size__(1)));
++void fn3() { fn1(fn2); }
Index: gcc/testsuite/gcc.dg/torture/pr80539.c
===================================================================
--- a/src/gcc/testsuite/gcc.dg/torture/pr80539.c (.../tags/gcc_7_1_0_release)
@@ -5201,6 +6499,33 @@ Index: gcc/testsuite/gcc.dg/pr80492.c
+}
+
+/* { dg-final { scan-tree-dump-times "reg = " 4 "optimized" } } */
+Index: gcc/testsuite/gcc.dg/tree-prof/val-profiler-threads-1.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/tree-prof/val-profiler-threads-1.c (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/testsuite/gcc.dg/tree-prof/val-profiler-threads-1.c (.../branches/gcc-7-branch)
+@@ -35,9 +35,9 @@
+ }
+ }
+
+- int retval;
++ void *retval;
+ for(t=0;t<NUM_THREADS;t++)
+- pthread_join (threads[t], (void**)&retval);
++ pthread_join (threads[t], &retval);
+
+ return buffer[10];
+ }
+Index: gcc/testsuite/gcc.dg/ipa/pr48195.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/ipa/pr48195.c (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/testsuite/gcc.dg/ipa/pr48195.c (.../branches/gcc-7-branch)
+@@ -1,5 +1,5 @@
+ /* { dg-do link } */
+-/* { dg-options "-O2 -flto --param partial-inlining-entry-probability=101" } */
++/* { dg-options "-O2 -flto --param partial-inlining-entry-probability=100" } */
+ /* { dg-require-effective-target lto } */
+
+ extern void abort(void);
Index: gcc/testsuite/gcc.dg/vect/bb-slp-pr80705.c
===================================================================
--- a/src/gcc/testsuite/gcc.dg/vect/bb-slp-pr80705.c (.../tags/gcc_7_1_0_release)
@@ -5275,7 +6600,119 @@ 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,307 @@
+@@ -1,3 +1,419 @@
++2017-06-28 Eric Botcazou <ebotcazou at adacore.com>
++
++ * gcc.dg/tree-prof/val-profiler-threads-1.c (main): Fix 2nd argument
++ passed to pthread_join.
++
++2017-06-27 Jerry DeLisle <jvdelisle at gcc.gnu.org>
++
++ Backport from trunk:
++ PR libgfortran/53029
++ * gfortran.dg/read_5.f90: New test.
++
++2017-06-27 Segher Boessenkool <segher at kernel.crashing.org>
++
++ Backports from trunk:
++
++ 2017-05-17 Segher Boessenkool <segher at kernel.crashing.org>
++ PR middle-end/80692
++ * gcc.c-torture/execute/pr80692.c: New testcase.
++
++ 2017-06-09 Segher Boessenkool <segher at kernel.crashing.org>
++ PR target/80966
++ * gcc.target/powerpc/stack-limit.c: New testcase.
++
++2017-06-27 Jakub Jelinek <jakub at redhat.com>
++
++ PR sanitizer/81209
++ * g++.dg/ubsan/pr81209.C: New test.
++
++ PR middle-end/81207
++ * gcc.c-torture/compile/pr81207.c: New test.
++
++2017-06-26 Eric Botcazou <ebotcazou at adacore.com>
++
++ * c-c++-common/ubsan/sanitize-recover-7.c (dg-options): Add -w.
++
++2017-06-24 Marek Polacek <polacek at redhat.com>
++
++ Backport from mainline
++ 2017-05-04 Marek Polacek <polacek at redhat.com>
++
++ PR tree-optimization/80612
++ * gcc.dg/torture/pr80612.c: New test.
++
++2017-06-23 Thomas Preud'homme <thomas.preudhomme at arm.com>
++
++ Backport from mainline
++ 2017-05-04 Prakhar Bahuguna <prakhar.bahuguna at arm.com>
++
++ * gcc.target/arm/fpscr.c: New file.
++
++2017-06-22 Martin Liska <mliska at suse.cz>
++
++ Backport from mainline
++ 2017-06-19 Martin Liska <mliska at suse.cz>
++
++ PR sanitizer/80879
++ * gcc.dg/asan/use-after-scope-switch-4.c: New test.
++
++2017-06-22 Martin Liska <mliska at suse.cz>
++
++ Backport from mainline
++ 2017-05-26 Martin Liska <mliska at suse.cz>
++
++ PR ipa/80663
++ * g++.dg/ipa/pr80212.C: Remove the test as it does not longer
++ split at the problematic spot.
++ * gcc.dg/ipa/pr48195.c: Change 101 to 100 as 101 is no longer
++ a valid value of the param.
++
++2017-06-21 Michael Meissner <meissner at linux.vnet.ibm.com>
++
++ Back port from mainline
++ PR target/80510
++ * gcc.target/powerpc/pr80510-1.c: Restrict test to 64-bit until
++ 32-bit support is added. Change ITYPE size to 64-bit integer.
++ * gcc.target/powerpc/pr80510-2.c: Likewise.
++
++2017-06-21 Jakub Jelinek <jakub at redhat.com>
++
++ PR c++/81154
++ * g++.dg/gomp/pr81154.C: New test.
++
++ Backported from mainline
++ 2017-06-20 Jakub Jelinek <jakub at redhat.com>
++
++ PR target/81121
++ * gcc.target/i386/pr81121.c: New test.
++
++ 2017-06-19 Jakub Jelinek <jakub at redhat.com>
++
++ PR sanitizer/81125
++ * g++.dg/ubsan/pr81125.C: New test.
++
++ PR sanitizer/81111
++ * g++.dg/ubsan/pr81111.C: New test.
++
++ 2017-06-13 Jakub Jelinek <jakub at redhat.com>
++
++ PR c++/80973
++ * g++.dg/ubsan/pr80973.C: New test.
++
++ PR c++/80984
++ * g++.dg/opt/nrv18.C: New test.
++
++2017-06-19 James Greenhalgh <james.greenhalgh at arm.com>
++
++ Backport from mainline
++ 2017-06-19 James Greenhalgh <james.greenhalgh at arm.com>
++
++ PR target/71778
++ * gcc.target/arm/pr71778.c: New.
++
+2017-06-14 Eric Botcazou <ebotcazou at adacore.com>
+
+ * gcc.target/sparc/overflow-4.c: Add -mno-vis3.
@@ -5583,7 +7020,7 @@ Index: gcc/testsuite/ChangeLog
2017-05-02 Release Manager
* GCC 7.1.0 released.
-@@ -52,8 +356,8 @@
+@@ -52,8 +468,8 @@
Backport from mainline
2017-04-25 Andreas Krebbel <krebbel at linux.vnet.ibm.com>
@@ -5594,7 +7031,7 @@ Index: gcc/testsuite/ChangeLog
2017-04-25 Andreas Krebbel <krebbel at linux.vnet.ibm.com>
-@@ -60,8 +364,8 @@
+@@ -60,8 +476,8 @@
Backport from mainline
2017-04-25 Andreas Krebbel <krebbel at linux.vnet.ibm.com>
@@ -5605,7 +7042,7 @@ Index: gcc/testsuite/ChangeLog
2017-04-25 Dominik Vogt <vogt at linux.vnet.ibm.com>
-@@ -68,10 +372,10 @@
+@@ -68,10 +484,10 @@
Backport from maineline
2017-04-25 Dominik Vogt <vogt at linux.vnet.ibm.com>
@@ -5620,7 +7057,7 @@ Index: gcc/testsuite/ChangeLog
2017-04-25 Jakub Jelinek <jakub at redhat.com>
-@@ -132,7 +436,7 @@
+@@ -132,7 +548,7 @@
* gcc.dg/torture/pr80341.c: Require int32plus.
2017-04-19 Eric Botcazou <ebotcazou at adacore.com>
@@ -5629,6 +7066,160 @@ Index: gcc/testsuite/ChangeLog
* gcc.c-torture/compile/20170419-1.c: New test.
+Index: gcc/testsuite/g++.dg/opt/nrv18.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/opt/nrv18.C (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/testsuite/g++.dg/opt/nrv18.C (.../branches/gcc-7-branch)
+@@ -0,0 +1,12 @@
++// PR c++/80984
++// { dg-do compile }
++
++struct A { ~A (); };
++
++A
++foo ()
++{
++ A a;
++a:
++ return a;
++}
+Index: gcc/testsuite/g++.dg/ubsan/pr81111.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/ubsan/pr81111.C (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/testsuite/g++.dg/ubsan/pr81111.C (.../branches/gcc-7-branch)
+@@ -0,0 +1,45 @@
++// PR sanitizer/81111
++// { dg-do compile }
++// { dg-options "-fsanitize=shift" }
++
++template <typename V>
++struct N
++{
++ static const V m = (((V)(-1) < 0)
++ ? (V)1 << (sizeof(V) * __CHAR_BIT__ - ((V)(-1) < 0))
++ : (V) 0);
++};
++
++template<typename V>
++const V N<V>::m;
++
++template <typename V>
++struct O
++{
++ static const V m = (V)1 << sizeof(V) * __CHAR_BIT__;
++};
++
++template<typename V>
++const V O<V>::m;
++
++void
++foo ()
++{
++ N<long long>::m;
++ N<unsigned long long>::m;
++#ifdef __SIZEOF_INT128__
++ N<__int128>::m;
++ N<unsigned __int128>::m;
++#endif
++}
++
++void
++bar ()
++{
++ O<long long>::m;
++ O<unsigned long long>::m;
++#ifdef __SIZEOF_INT128__
++ O<__int128>::m;
++ O<unsigned __int128>::m;
++#endif
++}
+Index: gcc/testsuite/g++.dg/ubsan/pr81209.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/ubsan/pr81209.C (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/testsuite/g++.dg/ubsan/pr81209.C (.../branches/gcc-7-branch)
+@@ -0,0 +1,21 @@
++// PR sanitizer/81209
++// { dg-do compile }
++// { dg-options "-fsanitize=undefined -fno-declone-ctor-dtor" }
++
++#ifdef __SIZEOF_INT128__
++typedef __int128 T;
++#else
++typedef long long int T;
++#endif
++
++struct B {};
++struct A : virtual public B
++{
++ A (long);
++ T a;
++};
++
++A::A (long c)
++{
++ long b = a % c;
++}
+Index: gcc/testsuite/g++.dg/ubsan/pr80973.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/ubsan/pr80973.C (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/testsuite/g++.dg/ubsan/pr80973.C (.../branches/gcc-7-branch)
+@@ -0,0 +1,16 @@
++// PR c++/80973
++// { dg-do compile }
++// { dg-options "-fsanitize=undefined -std=c++14" }
++
++struct A {
++ A();
++ A(const A &);
++};
++struct B {
++ B();
++ template <typename... Args> auto g(Args &&... p1) {
++ return [=] { f(p1...); };
++ }
++ void f(A, const char *);
++};
++B::B() { g(A(), ""); }
+Index: gcc/testsuite/g++.dg/ubsan/pr81125.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/ubsan/pr81125.C (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/testsuite/g++.dg/ubsan/pr81125.C (.../branches/gcc-7-branch)
+@@ -0,0 +1,20 @@
++// PR sanitizer/81125
++// { dg-do compile }
++// { dg-options "-fsanitize=undefined" }
++
++#ifdef __SIZEOF_INT128__
++typedef __int128 T;
++#else
++typedef long long int T;
++#endif
++
++struct A
++{
++ A (long);
++ T a;
++};
++
++A::A (long c)
++{
++ long b = a % c;
++}
+Index: gcc/testsuite/g++.dg/parse/template28.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/parse/template28.C (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/testsuite/g++.dg/parse/template28.C (.../branches/gcc-7-branch)
+@@ -0,0 +1,10 @@
++// PR c++/79056
++
++template<class> struct A {};
++
++template<class T> void foo(A<T>=A<T>()) {} // { dg-error "" }
++
++void bar()
++{
++ foo(A<int>()); // { dg-error "" }
++}
Index: gcc/testsuite/g++.dg/cpp0x/constexpr-diag3.C
===================================================================
--- a/src/gcc/testsuite/g++.dg/cpp0x/constexpr-diag3.C (.../tags/gcc_7_1_0_release)
@@ -5664,6 +7255,26 @@ Index: gcc/testsuite/g++.dg/cpp0x/constexpr-data1.C
private:
bool flag;
};
+Index: gcc/testsuite/g++.dg/cpp0x/constexpr-base5.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/cpp0x/constexpr-base5.C (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/testsuite/g++.dg/cpp0x/constexpr-base5.C (.../branches/gcc-7-branch)
+@@ -0,0 +1,15 @@
++// PR c++/80829
++// { dg-do compile { target c++11 } }
++
++struct A {
++ constexpr A(int a) : _a(a) {}
++ int _a;
++};
++
++struct B : public A {
++ constexpr B(int a) : A(a) {}
++};
++
++int main() {
++ constexpr A a = B(10);
++}
Index: gcc/testsuite/g++.dg/cpp0x/constexpr-neg1.C
===================================================================
--- a/src/gcc/testsuite/g++.dg/cpp0x/constexpr-neg1.C (.../tags/gcc_7_1_0_release)
@@ -5677,6 +7288,27 @@ Index: gcc/testsuite/g++.dg/cpp0x/constexpr-neg1.C
private:
bool flag;
};
+Index: gcc/testsuite/g++.dg/cpp0x/variadic-ttp7.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/cpp0x/variadic-ttp7.C (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/testsuite/g++.dg/cpp0x/variadic-ttp7.C (.../branches/gcc-7-branch)
+@@ -0,0 +1,16 @@
++// PR c++/81215
++// { dg-do compile { target c++11 } }
++
++template<typename U> struct X { };
++template<typename T, typename U = void> struct set { };
++
++template <typename V, template <typename...> class C>
++void bar (const X<C<V>>&)
++{
++}
++
++void
++foo (X<set<int>>& x)
++{
++ bar (x);
++}
Index: gcc/testsuite/g++.dg/cpp0x/inh-ctor27.C
===================================================================
--- a/src/gcc/testsuite/g++.dg/cpp0x/inh-ctor27.C (.../tags/gcc_7_1_0_release)
@@ -5729,6 +7361,29 @@ Index: gcc/testsuite/g++.dg/cpp0x/constexpr-diag1.C
template <class T>
constexpr int f (T t) { return 42; } // { dg-error "parameter" }
+Index: gcc/testsuite/g++.dg/ipa/pr80212.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/ipa/pr80212.C (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/testsuite/g++.dg/ipa/pr80212.C (.../branches/gcc-7-branch)
+@@ -1,18 +0,0 @@
+-// PR ipa/80212
+-// { dg-options "-O2 --param partial-inlining-entry-probability=403796683 -fno-early-inlining" }
+-
+-struct b
+-{
+- virtual b *c () const;
+-};
+-struct d : virtual b
+-{
+-};
+-struct e : d
+-{
+- e *
+- c () const
+- {
+- }
+-};
+-main () { e a; }
Index: gcc/testsuite/g++.dg/cpp1y/auto-fn27.C
===================================================================
--- a/src/gcc/testsuite/g++.dg/cpp1y/auto-fn27.C (.../tags/gcc_7_1_0_release)
@@ -5854,6 +7509,25 @@ Index: gcc/testsuite/g++.dg/cpp1z/noexcept-type16.C
+ // { dg-final { scan-assembler "_Z2fnIKDoFvvEEvv" } }
+ fn<void() const noexcept>();
+}
+Index: gcc/testsuite/g++.dg/cpp1z/constexpr-if12.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/cpp1z/constexpr-if12.C (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/testsuite/g++.dg/cpp1z/constexpr-if12.C (.../branches/gcc-7-branch)
+@@ -0,0 +1,14 @@
++// PR c++/80562
++// { dg-options -std=c++1z }
++
++struct T {
++ constexpr auto foo() { return false; }
++};
++
++template <class MustBeTemplate>
++constexpr auto bf(T t) {
++ if constexpr(t.foo()) {
++ return false;
++ }
++ return true;
++}
Index: gcc/testsuite/g++.dg/cpp1z/noexcept-type17.C
===================================================================
--- a/src/gcc/testsuite/g++.dg/cpp1z/noexcept-type17.C (.../tags/gcc_7_1_0_release)
@@ -5883,6 +7557,39 @@ Index: gcc/testsuite/g++.dg/ext/flexary24.C
+{
+ static const S t = { 1, { a, "b" } };
+}
+Index: gcc/testsuite/g++.dg/ext/stmtexpr19.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/ext/stmtexpr19.C (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/testsuite/g++.dg/ext/stmtexpr19.C (.../branches/gcc-7-branch)
+@@ -0,0 +1,17 @@
++// PR c++/81073
++// { dg-options "" }
++// { dg-do compile { target c++11 } }
++
++struct test { const int *addr; };
++
++const test* setup()
++{
++ static constexpr test atest =
++ {
++ ({ static const int inner = 123; &inner; }) // { dg-error "static" }
++ };
++
++ return &atest;
++}
++
++int main(){}
+Index: gcc/testsuite/g++.dg/ext/packed12.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/ext/packed12.C (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/testsuite/g++.dg/ext/packed12.C (.../branches/gcc-7-branch)
+@@ -0,0 +1,6 @@
++// PR c++/80972
++
++struct A { int i; };
++struct B { A a; } __attribute__((packed));
++
++A a = B().a;
Index: gcc/testsuite/g++.dg/ext/is_std_layout1.C
===================================================================
--- a/src/gcc/testsuite/g++.dg/ext/is_std_layout1.C (.../tags/gcc_7_1_0_release)
@@ -5935,6 +7642,68 @@ Index: gcc/testsuite/g++.dg/gomp/pr81011.C
+#pragma omp task firstprivate (a) // { dg-error "is private within this context" }
+ foo (a);
+}
+Index: gcc/testsuite/g++.dg/gomp/pr81154.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/gomp/pr81154.C (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/testsuite/g++.dg/gomp/pr81154.C (.../branches/gcc-7-branch)
+@@ -0,0 +1,57 @@
++// PR c++/81154
++// { dg-do compile }
++
++template <typename T>
++struct C
++{
++ int foo (T n) const
++ {
++#pragma omp parallel shared (foo) // { dg-error "is not a variable in clause" }
++ ;
++#pragma omp parallel private (foo) // { dg-error "is not a variable in clause" }
++ ;
++#pragma omp parallel firstprivate (foo) // { dg-error "is not a variable in clause" }
++ ;
++#pragma omp parallel for lastprivate (foo) // { dg-error "is not a variable in clause" }
++ for (T i = 0; i < n; i++)
++ ;
++#pragma omp parallel for linear (foo) // { dg-error "is not a variable in clause" }
++ for (T i = 0; i < n; i++)
++ ;
++#pragma omp parallel reduction (+:foo) // { dg-error "is not a variable in clause" }
++ ;
++ return 0;
++ }
++ int foo (int x, int y) { return x; }
++};
++
++struct D
++{
++ typedef int T;
++ int foo (T n) const
++ {
++#pragma omp parallel shared (foo) // { dg-error "is not a variable in clause" }
++ ;
++#pragma omp parallel private (foo) // { dg-error "is not a variable in clause" }
++ ;
++#pragma omp parallel firstprivate (foo) // { dg-error "is not a variable in clause" }
++ ;
++#pragma omp parallel for lastprivate (foo) // { dg-error "is not a variable in clause" }
++ for (T i = 0; i < n; i++)
++ ;
++#pragma omp parallel for linear (foo) // { dg-error "is not a variable in clause" }
++ for (T i = 0; i < n; i++)
++ ;
++#pragma omp parallel reduction (+:foo) // { dg-error "is not a variable in clause" }
++ ;
++ return 0;
++ }
++ int foo (int x, int y) { return x; }
++};
++
++int
++main ()
++{
++ C<int> ().foo (1);
++ D ().foo (1);
++}
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)
@@ -6362,6 +8131,17 @@ Index: gcc/testsuite/g++.dg/template/partial-specialization7.C
+{
+ return 0;
+}
+Index: gcc/testsuite/c-c++-common/ubsan/sanitize-recover-7.c
+===================================================================
+--- a/src/gcc/testsuite/c-c++-common/ubsan/sanitize-recover-7.c (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/testsuite/c-c++-common/ubsan/sanitize-recover-7.c (.../branches/gcc-7-branch)
+@@ -1,5 +1,5 @@
+ /* { dg-do compile } */
+-/* { dg-options "-fsanitize=address -fsanitize=thread" } */
++/* { dg-options "-fsanitize=address -fsanitize=thread -w" } */
+
+ int i;
+
Index: gcc/testsuite/c-c++-common/ubsan/pr80875.c
===================================================================
--- a/src/gcc/testsuite/c-c++-common/ubsan/pr80875.c (.../tags/gcc_7_1_0_release)
@@ -6493,7 +8273,38 @@ Index: gcc/cp/constexpr.c
}
}
else if (CLASSTYPE_VBASECLASSES (DECL_CONTEXT (fun)))
-@@ -2643,8 +2644,16 @@
+@@ -1392,6 +1393,21 @@
+ return t;
+ }
+
++/* Clean CONSTRUCTOR_NO_IMPLICIT_ZERO from CTOR and its sub-aggregates. */
++
++static void
++clear_no_implicit_zero (tree ctor)
++{
++ if (CONSTRUCTOR_NO_IMPLICIT_ZERO (ctor))
++ {
++ CONSTRUCTOR_NO_IMPLICIT_ZERO (ctor) = false;
++ tree elt; unsigned HOST_WIDE_INT idx;
++ FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), idx, elt)
++ if (TREE_CODE (elt) == CONSTRUCTOR)
++ clear_no_implicit_zero (elt);
++ }
++}
++
+ /* Subroutine of cxx_eval_constant_expression.
+ Evaluate the call expression tree T in the context of OLD_CALL expression
+ evaluation. */
+@@ -1695,7 +1711,7 @@
+
+ /* The result of a constexpr function must be completely initialized. */
+ if (TREE_CODE (result) == CONSTRUCTOR)
+- CONSTRUCTOR_NO_IMPLICIT_ZERO (result) = false;
++ clear_no_implicit_zero (result);
+
+ pop_cx_call_context ();
+ return unshare_constructor (result);
+@@ -2643,8 +2659,16 @@
/* We used to check that ctx->ctor was empty, but that isn't the case when
the object is zero-initialized before calling the constructor. */
if (ctx->object)
@@ -6512,7 +8323,21 @@ Index: gcc/cp/constexpr.c
gcc_assert (!ctx->object || !DECL_P (ctx->object)
|| *(ctx->values->get (ctx->object)) == ctx->ctor);
}
-@@ -5284,7 +5293,7 @@
+@@ -4012,6 +4036,13 @@
+ break;
+
+ case DECL_EXPR:
++ if (!potential_constant_expression (t))
++ {
++ if (!ctx->quiet)
++ require_potential_constant_expression (t);
++ *non_constant_p = true;
++ break;
++ }
+ {
+ r = DECL_EXPR_DECL (t);
+ if (AGGREGATE_TYPE_P (TREE_TYPE (r))
+@@ -5284,7 +5315,7 @@
{
tree x = TREE_OPERAND (t, 0);
STRIP_NOPS (x);
@@ -6525,7 +8350,60 @@ Index: gcc/cp/ChangeLog
===================================================================
--- a/src/gcc/cp/ChangeLog (.../tags/gcc_7_1_0_release)
+++ b/src/gcc/cp/ChangeLog (.../branches/gcc-7-branch)
-@@ -1,3 +1,95 @@
+@@ -1,3 +1,148 @@
++2017-06-26 Jason Merrill <jason at redhat.com>
++
++ PR c++/81215
++ * pt.c (unify_bound_ttp_args): Restore old logic for C++14 and down.
++
++2017-06-23 Jason Merrill <jason at redhat.com>
++
++ PR c++/79056 - C++17 ICE with invalid template syntax.
++ * parser.c (cp_parser_simple_type_specifier): Don't assume that type
++ is a TYPE_DECL.
++ (cp_parser_check_for_invalid_template_id): Handle TYPE_DECL.
++ * pt.c (template_placeholder_p): New.
++ * cp-tree.h: Declare it.
++
++2017-06-21 Jakub Jelinek <jakub at redhat.com>
++
++ PR c++/81154
++ * semantics.c (handle_omp_array_sections_1, finish_omp_clauses):
++ Complain about t not being a variable if t is OVERLOAD even
++ when processing_template_decl.
++
++ Backported from mainline
++ 2017-06-13 Jakub Jelinek <jakub at redhat.com>
++
++ PR c++/80973
++ * cp-gimplify.c (cp_genericize_r): Don't instrument MEM_REF second
++ argument even if it has REFERENCE_TYPE.
++
++ PR c++/80984
++ * cp-gimplify.c (cp_genericize): Only look for VAR_DECLs in
++ BLOCK_VARS (outer) chain.
++ (cxx_omp_const_qual_no_mutable): Likewise.
++
++2017-06-20 Jason Merrill <jason at redhat.com>
++
++ PR c++/80972 - C++17 ICE with attribute packed.
++ * call.c (build_over_call): Allow a TARGET_EXPR from reference
++ binding.
++
++2017-06-19 Jason Merrill <jason at redhat.com>
++
++ PR c++/80562 - ICE with constexpr if.
++ * semantics.c (finish_if_stmt_cond): Call
++ instantiate_non_dependent_expr.
++
++ PR c++/80829 - ICE with constexpr copy of base subobject.
++ * constexpr.c (clear_no_implicit_zero): New.
++ (cxx_eval_call_expression): Call it.
++
++ PR c++/81073 - constexpr and static var in statement-expression.
++ * constexpr.c (cxx_eval_constant_expression) [DECL_EXPR]: Check
++ potential_constant_expression.
++
+2017-06-17 Jason Merrill <jason at redhat.com>
+
+ PR c++/60063 - -Wunused-local-typedefs and templates.
@@ -6625,7 +8503,44 @@ Index: gcc/cp/cp-gimplify.c
===================================================================
--- a/src/gcc/cp/cp-gimplify.c (.../tags/gcc_7_1_0_release)
+++ b/src/gcc/cp/cp-gimplify.c (.../branches/gcc-7-branch)
-@@ -1944,7 +1944,11 @@
+@@ -1482,6 +1482,16 @@
+ *stmt_p = cplus_expand_constant (stmt);
+ *walk_subtrees = 0;
+ }
++ else if (TREE_CODE (stmt) == MEM_REF)
++ {
++ /* For MEM_REF, make sure not to sanitize the second operand even
++ if it has reference type. It is just an offset with a type
++ holding other information. There is no other processing we
++ need to do for INTEGER_CSTs, so just ignore the second argument
++ unconditionally. */
++ cp_walk_tree (&TREE_OPERAND (stmt, 0), cp_genericize_r, data, NULL);
++ *walk_subtrees = 0;
++ }
+ else if ((flag_sanitize
+ & (SANITIZE_NULL | SANITIZE_ALIGNMENT | SANITIZE_VPTR))
+ && !wtd->no_sanitize_p)
+@@ -1622,7 +1632,8 @@
+
+ if (outer)
+ for (var = BLOCK_VARS (outer); var; var = DECL_CHAIN (var))
+- if (DECL_NAME (t) == DECL_NAME (var)
++ if (VAR_P (var)
++ && DECL_NAME (t) == DECL_NAME (var)
+ && DECL_HAS_VALUE_EXPR_P (var)
+ && DECL_VALUE_EXPR (var) == t)
+ {
+@@ -1869,7 +1880,8 @@
+
+ if (outer)
+ for (var = BLOCK_VARS (outer); var; var = DECL_CHAIN (var))
+- if (DECL_NAME (decl) == DECL_NAME (var)
++ if (VAR_P (var)
++ && DECL_NAME (decl) == DECL_NAME (var)
+ && (TYPE_MAIN_VARIANT (type)
+ == TYPE_MAIN_VARIANT (TREE_TYPE (var))))
+ {
+@@ -1944,7 +1956,11 @@
make_shared = true;
if (make_shared)
@@ -6717,7 +8632,88 @@ Index: gcc/cp/pt.c
}
/* [temp.arg.nontype]/5, bullet 4
-@@ -20563,18 +20603,6 @@
+@@ -7070,27 +7110,69 @@
+ parmvec = expand_template_argument_pack (parmvec);
+ argvec = expand_template_argument_pack (argvec);
+
+- tree nparmvec = parmvec;
+ if (flag_new_ttp)
+ {
+ /* In keeping with P0522R0, adjust P's template arguments
+ to apply to A's template; then flatten it again. */
++ tree nparmvec = parmvec;
+ nparmvec = coerce_ttp_args_for_tta (arg, parmvec, tf_none);
+ nparmvec = expand_template_argument_pack (nparmvec);
++
++ if (unify (tparms, targs, nparmvec, argvec,
++ UNIFY_ALLOW_NONE, explain_p))
++ return 1;
++
++ /* If the P0522 adjustment eliminated a pack expansion, deduce
++ empty packs. */
++ if (flag_new_ttp
++ && TREE_VEC_LENGTH (nparmvec) < TREE_VEC_LENGTH (parmvec)
++ && unify_pack_expansion (tparms, targs, parmvec, argvec,
++ DEDUCE_EXACT, /*sub*/true, explain_p))
++ return 1;
+ }
++ else
++ {
++ /* Deduce arguments T, i from TT<T> or TT<i>.
++ We check each element of PARMVEC and ARGVEC individually
++ rather than the whole TREE_VEC since they can have
++ different number of elements, which is allowed under N2555. */
+
+- if (unify (tparms, targs, nparmvec, argvec,
+- UNIFY_ALLOW_NONE, explain_p))
+- return 1;
++ int len = TREE_VEC_LENGTH (parmvec);
+
+- /* If the P0522 adjustment eliminated a pack expansion, deduce
+- empty packs. */
+- if (flag_new_ttp
+- && TREE_VEC_LENGTH (nparmvec) < TREE_VEC_LENGTH (parmvec)
+- && unify_pack_expansion (tparms, targs, parmvec, argvec,
+- DEDUCE_EXACT, /*sub*/true, explain_p))
+- return 1;
++ /* Check if the parameters end in a pack, making them
++ variadic. */
++ int parm_variadic_p = 0;
++ if (len > 0
++ && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
++ parm_variadic_p = 1;
+
++ for (int i = 0; i < len - parm_variadic_p; ++i)
++ /* If the template argument list of P contains a pack
++ expansion that is not the last template argument, the
++ entire template argument list is a non-deduced
++ context. */
++ if (PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, i)))
++ return unify_success (explain_p);
++
++ if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
++ return unify_too_few_arguments (explain_p,
++ TREE_VEC_LENGTH (argvec), len);
++
++ for (int i = 0; i < len - parm_variadic_p; ++i)
++ if (unify (tparms, targs,
++ TREE_VEC_ELT (parmvec, i),
++ TREE_VEC_ELT (argvec, i),
++ UNIFY_ALLOW_NONE, explain_p))
++ return 1;
++
++ if (parm_variadic_p
++ && unify_pack_expansion (tparms, targs,
++ parmvec, argvec,
++ DEDUCE_EXACT,
++ /*subr=*/true, explain_p))
++ return 1;
++ }
++
+ return 0;
+ }
+
+@@ -20563,18 +20645,6 @@
return x;
}
@@ -6736,7 +8732,7 @@ Index: gcc/cp/pt.c
/* [temp.deduct.type] If, in the declaration of a function template
with a non-type template-parameter, the non-type
template-parameter is used in an expression in the function
-@@ -20595,7 +20623,8 @@
+@@ -20595,7 +20665,8 @@
/* Template-parameter dependent expression. Just accept it for now.
It will later be processed in convert_template_argument. */
;
@@ -6746,7 +8742,7 @@ Index: gcc/cp/pt.c
/* OK */;
else if ((strict & UNIFY_ALLOW_INTEGER)
&& CP_INTEGRAL_TYPE_P (tparm))
-@@ -20604,9 +20633,22 @@
+@@ -20604,9 +20675,22 @@
corresponding parameter. */
arg = fold (build_nop (tparm, arg));
else if (uses_template_parms (tparm))
@@ -6772,7 +8768,7 @@ Index: gcc/cp/pt.c
else
return unify_type_mismatch (explain_p, tparm, TREE_TYPE (arg));
-@@ -21598,10 +21640,12 @@
+@@ -21598,10 +21682,12 @@
`T' is `A' but unify () does not check whether `typename T::X'
is `int'. */
spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
@@ -6788,7 +8784,7 @@ Index: gcc/cp/pt.c
pop_tinst_level ();
if (spec_args == error_mark_node
-@@ -23372,6 +23416,14 @@
+@@ -23372,6 +23458,14 @@
arg_type = TREE_CHAIN (arg_type))
if (dependent_type_p (TREE_VALUE (arg_type)))
return true;
@@ -6803,7 +8799,7 @@ Index: gcc/cp/pt.c
return false;
}
/* -- an array type constructed from any dependent type or whose
-@@ -23920,18 +23972,35 @@
+@@ -23920,18 +24014,35 @@
return true;
/* A function or variable template-id is type-dependent if it has any
@@ -6848,11 +8844,38 @@ Index: gcc/cp/pt.c
/* Always dependent, on the number of arguments if nothing else. */
if (TREE_CODE (expression) == EXPR_PACK_EXPANSION)
return true;
+@@ -24697,6 +24808,14 @@
+ return t;
+ }
+
++/* True iff T is a C++17 class template deduction placeholder. */
++
++bool
++template_placeholder_p (tree t)
++{
++ return is_auto (t) && CLASS_PLACEHOLDER_TEMPLATE (t);
++}
++
+ /* Make a "constrained auto" type-specifier. This is an
+ auto type with constraints that must be associated after
+ deduction. The constraint is formed from the given
Index: gcc/cp/semantics.c
===================================================================
--- a/src/gcc/cp/semantics.c (.../tags/gcc_7_1_0_release)
+++ b/src/gcc/cp/semantics.c (.../branches/gcc-7-branch)
-@@ -2298,6 +2298,16 @@
+@@ -731,7 +731,10 @@
+ if (IF_STMT_CONSTEXPR_P (if_stmt)
+ && require_potential_rvalue_constant_expression (cond)
+ && !value_dependent_expression_p (cond))
+- cond = cxx_constant_value (cond, NULL_TREE);
++ {
++ cond = instantiate_non_dependent_expr (cond);
++ cond = cxx_constant_value (cond, NULL_TREE);
++ }
+ finish_cond (&IF_COND (if_stmt), cond);
+ add_stmt (if_stmt);
+ THEN_CLAUSE (if_stmt) = push_stmt_list ();
+@@ -2298,6 +2301,16 @@
if (processing_template_decl)
{
@@ -6869,7 +8892,7 @@ Index: gcc/cp/semantics.c
/* If the call expression is dependent, build a CALL_EXPR node
with no type; type_dependent_expression_p recognizes
expressions with no type as being dependent. */
-@@ -2304,7 +2314,7 @@
+@@ -2304,7 +2317,7 @@
if (type_dependent_expression_p (fn)
|| any_type_dependent_arguments_p (*args))
{
@@ -6878,7 +8901,16 @@ Index: gcc/cp/semantics.c
SET_EXPR_LOCATION (result, EXPR_LOC_OR_LOC (fn, input_location));
KOENIG_LOOKUP_P (result) = koenig_p;
if (cfun)
-@@ -4697,9 +4707,9 @@
+@@ -4552,7 +4565,7 @@
+ }
+ if (!VAR_P (t) && TREE_CODE (t) != PARM_DECL)
+ {
+- if (processing_template_decl)
++ if (processing_template_decl && TREE_CODE (t) != OVERLOAD)
+ return NULL_TREE;
+ if (DECL_P (t))
+ error_at (OMP_CLAUSE_LOCATION (c),
+@@ -4697,9 +4710,9 @@
&& TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (type)))
== INTEGER_CST)
{
@@ -6891,6 +8923,60 @@ Index: gcc/cp/semantics.c
if (TREE_CODE (low_bound) == INTEGER_CST)
{
if (tree_int_cst_lt (size, low_bound))
+@@ -6066,7 +6079,7 @@
+ if (!VAR_P (t) && TREE_CODE (t) != PARM_DECL
+ && (!field_ok || TREE_CODE (t) != FIELD_DECL))
+ {
+- if (processing_template_decl)
++ if (processing_template_decl && TREE_CODE (t) != OVERLOAD)
+ break;
+ if (DECL_P (t))
+ error ("%qD is not a variable in clause %qs", t,
+@@ -6138,7 +6151,7 @@
+ && ((ort & C_ORT_OMP_DECLARE_SIMD) != C_ORT_OMP
+ || TREE_CODE (t) != FIELD_DECL))
+ {
+- if (processing_template_decl)
++ if (processing_template_decl && TREE_CODE (t) != OVERLOAD)
+ break;
+ if (DECL_P (t))
+ error ("%qD is not a variable in clause %<firstprivate%>", t);
+@@ -6181,7 +6194,7 @@
+ && ((ort & C_ORT_OMP_DECLARE_SIMD) != C_ORT_OMP
+ || TREE_CODE (t) != FIELD_DECL))
+ {
+- if (processing_template_decl)
++ if (processing_template_decl && TREE_CODE (t) != OVERLOAD)
+ break;
+ if (DECL_P (t))
+ error ("%qD is not a variable in clause %<lastprivate%>", t);
+@@ -6544,7 +6557,7 @@
+ }
+ if (!VAR_P (t) && TREE_CODE (t) != PARM_DECL)
+ {
+- if (processing_template_decl)
++ if (processing_template_decl && TREE_CODE (t) != OVERLOAD)
+ break;
+ if (DECL_P (t))
+ error ("%qD is not a variable in %<aligned%> clause", t);
+@@ -6626,7 +6639,7 @@
+ remove = true;
+ else if (!VAR_P (t) && TREE_CODE (t) != PARM_DECL)
+ {
+- if (processing_template_decl)
++ if (processing_template_decl && TREE_CODE (t) != OVERLOAD)
+ break;
+ if (DECL_P (t))
+ error ("%qD is not a variable in %<depend%> clause", t);
+@@ -6757,7 +6770,7 @@
+ }
+ if (!VAR_P (t) && TREE_CODE (t) != PARM_DECL)
+ {
+- if (processing_template_decl)
++ if (processing_template_decl && TREE_CODE (t) != OVERLOAD)
+ break;
+ if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_MAP
+ && (OMP_CLAUSE_MAP_KIND (c) == GOMP_MAP_POINTER
Index: gcc/cp/decl2.c
===================================================================
--- a/src/gcc/cp/decl2.c (.../tags/gcc_7_1_0_release)
@@ -6950,7 +9036,18 @@ Index: gcc/cp/parser.c
===================================================================
--- a/src/gcc/cp/parser.c (.../tags/gcc_7_1_0_release)
+++ b/src/gcc/cp/parser.c (.../branches/gcc-7-branch)
-@@ -9447,10 +9447,14 @@
+@@ -2983,7 +2983,9 @@
+
+ if (cp_lexer_next_token_is (parser->lexer, CPP_LESS))
+ {
+- if (TYPE_P (type))
++ if (TREE_CODE (type) == TYPE_DECL)
++ type = TREE_TYPE (type);
++ if (TYPE_P (type) && !template_placeholder_p (type))
+ error_at (location, "%qT is not a template", type);
+ else if (identifier_p (type))
+ {
+@@ -9447,10 +9449,14 @@
/* Require an rvalue constant expression here; that's what our
callers expect. Reference constant expressions are handled
separately in e.g. cp_parser_template_argument. */
@@ -6967,7 +9064,16 @@ Index: gcc/cp/parser.c
}
if (allow_non_constant_p)
*non_constant_p = parser->non_integral_constant_expression_p;
-@@ -23677,7 +23681,7 @@
+@@ -16942,7 +16948,7 @@
+ /* There is no valid C++ program where a non-template type is
+ followed by a "<". That usually indicates that the user
+ thought that the type was a template. */
+- cp_parser_check_for_invalid_template_id (parser, TREE_TYPE (type),
++ cp_parser_check_for_invalid_template_id (parser, type,
+ none_type,
+ token->location);
+ }
+@@ -23677,7 +23683,7 @@
if (virtual_p && !duplicate_virtual_error_issued_p)
{
cp_parser_error (parser,
@@ -6976,7 +9082,7 @@ Index: gcc/cp/parser.c
duplicate_virtual_error_issued_p = true;
}
-@@ -23697,7 +23701,7 @@
+@@ -23697,7 +23703,7 @@
&& !duplicate_access_error_issued_p)
{
cp_parser_error (parser,
@@ -6999,6 +9105,15 @@ Index: gcc/cp/call.c
return_type = TREE_TYPE (TREE_TYPE (fn));
nargs = vec_safe_length (args);
if (first_arg == NULL_TREE)
+@@ -7990,6 +7993,8 @@
+ subobject. */
+ if (CHECKING_P && cxx_dialect >= cxx1z)
+ gcc_assert (TREE_CODE (arg) != TARGET_EXPR
++ /* It's from binding the ref parm to a packed field. */
++ || convs[0]->need_temporary_p
+ || seen_error ()
+ /* See unsafe_copy_elision_p. */
+ || DECL_BASE_CONSTRUCTOR_P (fn));
Index: gcc/cp/lambda.c
===================================================================
--- a/src/gcc/cp/lambda.c (.../tags/gcc_7_1_0_release)
@@ -7072,6 +9187,14 @@ Index: gcc/cp/cp-tree.h
};
/* Return a typed pointer version of T if it designates a
+@@ -6148,6 +6147,7 @@
+ extern tree make_auto (void);
+ extern tree make_decltype_auto (void);
+ extern tree make_template_placeholder (tree);
++extern bool template_placeholder_p (tree);
+ extern tree do_auto_deduction (tree, tree, tree);
+ extern tree do_auto_deduction (tree, tree, tree,
+ tsubst_flags_t,
Index: gcc/tree-ssa-ccp.c
===================================================================
--- a/src/gcc/tree-ssa-ccp.c (.../tags/gcc_7_1_0_release)
@@ -9938,6 +12061,41 @@ Index: gcc/fortran/trans-io.c
tmp = build_call_expr_loc (input_location,
iocall[IOCALL_SET_NML_VAL], 6,
dt_parm_addr, addr_expr, string,
+Index: gcc/ipa-devirt.c
+===================================================================
+--- a/src/gcc/ipa-devirt.c (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/ipa-devirt.c (.../branches/gcc-7-branch)
+@@ -1226,7 +1226,7 @@
+ if (types_odr_comparable (t1, t2, true)
+ && types_same_for_odr (t1, t2, true))
+ inform (loc_t1,
+- "type %qT itself violate the C++ One Definition Rule", t1);
++ "type %qT itself violates the C++ One Definition Rule", t1);
+ /* Prevent pointless warnings like "struct aa" should match "struct aa". */
+ else if (TYPE_NAME (t1) == TYPE_NAME (t2)
+ && TREE_CODE (t1) == TREE_CODE (t2) && !loc_t2_useful)
+@@ -1573,7 +1573,7 @@
+ if (DECL_ARTIFICIAL (f1))
+ break;
+ warn_odr (t1, t2, f1, f2, warn, warned,
+- G_("fields has different layout "
++ G_("fields have different layout "
+ "in another translation unit"));
+ return false;
+ }
+Index: gcc/auto-profile.c
+===================================================================
+--- a/src/gcc/auto-profile.c (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/auto-profile.c (.../branches/gcc-7-branch)
+@@ -355,7 +355,7 @@
+ {
+ tree decl;
+
+- if (LOCATION_LOCUS (BLOCK_SOURCE_LOCATION (block) == UNKNOWN_LOCATION))
++ if (LOCATION_LOCUS (BLOCK_SOURCE_LOCATION (block)) == UNKNOWN_LOCATION)
+ return NULL_TREE;
+
+ for (decl = BLOCK_ABSTRACT_ORIGIN (block);
Index: gcc/alias.c
===================================================================
--- a/src/gcc/alias.c (.../tags/gcc_7_1_0_release)
@@ -9997,7 +12155,32 @@ Index: gcc/gimplify.c
===================================================================
--- a/src/gcc/gimplify.c (.../tags/gcc_7_1_0_release)
+++ b/src/gcc/gimplify.c (.../branches/gcc-7-branch)
-@@ -6669,7 +6669,7 @@
+@@ -2276,7 +2276,8 @@
+
+ /* Do not create live_switch_vars if SWITCH_BODY is not a BIND_EXPR. */
+ saved_live_switch_vars = gimplify_ctxp->live_switch_vars;
+- if (TREE_CODE (SWITCH_BODY (switch_expr)) == BIND_EXPR)
++ tree_code body_type = TREE_CODE (SWITCH_BODY (switch_expr));
++ if (body_type == BIND_EXPR || body_type == STATEMENT_LIST)
+ gimplify_ctxp->live_switch_vars = new hash_set<tree> (4);
+ else
+ gimplify_ctxp->live_switch_vars = NULL;
+@@ -6608,9 +6609,11 @@
+ return;
+
+ /* Never elide decls whose type has TREE_ADDRESSABLE set. This means
+- there are constructors involved somewhere. */
+- if (TREE_ADDRESSABLE (TREE_TYPE (decl))
+- || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl)))
++ there are constructors involved somewhere. Exception is a shared clause,
++ there is nothing privatized in that case. */
++ if ((flags & GOVD_SHARED) == 0
++ && (TREE_ADDRESSABLE (TREE_TYPE (decl))
++ || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))))
+ flags |= GOVD_SEEN;
+
+ n = splay_tree_lookup (ctx->variables, (splay_tree_key)decl);
+@@ -6669,7 +6672,7 @@
of PRIVATE. The sharing would take place via the pointer variable
which we remapped above. */
if (flags & GOVD_SHARED)
@@ -10006,7 +12189,7 @@ Index: gcc/gimplify.c
| (flags & (GOVD_SEEN | GOVD_EXPLICIT));
/* We're going to make use of the TYPE_SIZE_UNIT at least in the
-@@ -8576,7 +8576,7 @@
+@@ -8576,7 +8579,7 @@
return 0;
if (flags & GOVD_DEBUG_PRIVATE)
{
@@ -10015,7 +12198,7 @@ Index: gcc/gimplify.c
private_debug = true;
}
else if (flags & GOVD_MAP)
-@@ -8819,7 +8819,7 @@
+@@ -8819,7 +8822,7 @@
{
gcc_assert ((n->value & GOVD_DEBUG_PRIVATE) == 0
|| ((n->value & GOVD_DATA_SHARE_CLASS)
@@ -10024,6 +12207,19 @@ Index: gcc/gimplify.c
OMP_CLAUSE_SET_CODE (c, OMP_CLAUSE_PRIVATE);
OMP_CLAUSE_PRIVATE_DEBUG (c) = 1;
}
+Index: gcc/calls.c
+===================================================================
+--- a/src/gcc/calls.c (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/calls.c (.../branches/gcc-7-branch)
+@@ -1270,7 +1270,7 @@
+
+ wide_int min, max;
+ enum value_range_type range_type
+- = (TREE_CODE (exp) == SSA_NAME
++ = ((TREE_CODE (exp) == SSA_NAME && INTEGRAL_TYPE_P (TREE_TYPE (exp)))
+ ? get_range_info (exp, &min, &max) : VR_VARYING);
+
+ if (range_type == VR_VARYING)
Index: gcc/loop-doloop.c
===================================================================
--- a/src/gcc/loop-doloop.c (.../tags/gcc_7_1_0_release)
@@ -10036,6 +12232,57 @@ Index: gcc/loop-doloop.c
end_sequence ();
/* There always is at least the jump insn in the sequence. */
+Index: gcc/coverage.c
+===================================================================
+--- a/src/gcc/coverage.c (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/coverage.c (.../branches/gcc-7-branch)
+@@ -731,6 +731,18 @@
+ }
+ }
+
++/* Remove coverage file if opened. */
++
++void
++coverage_remove_note_file (void)
++{
++ if (bbg_file_name)
++ {
++ gcov_close ();
++ unlink (bbg_file_name);
++ }
++}
++
+ /* Build a coverage variable of TYPE for function FN_DECL. If COUNTER
+ >= 0 it is a counter array, otherwise it is the function structure. */
+
+Index: gcc/gimple-fold.c
+===================================================================
+--- a/src/gcc/gimple-fold.c (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/gimple-fold.c (.../branches/gcc-7-branch)
+@@ -606,9 +606,10 @@
+ && TREE_CODE (gimple_vdef (stmt)) == SSA_NAME)
+ {
+ gimple_set_vdef (repl, gimple_vdef (stmt));
+- gimple_set_vuse (repl, gimple_vuse (stmt));
+ SSA_NAME_DEF_STMT (gimple_vdef (repl)) = repl;
+ }
++ if (gimple_vuse (stmt))
++ gimple_set_vuse (repl, gimple_vuse (stmt));
+ gsi_replace (gsi, repl, false);
+ fold_stmt (gsi);
+ }
+Index: gcc/coverage.h
+===================================================================
+--- a/src/gcc/coverage.h (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/coverage.h (.../branches/gcc-7-branch)
+@@ -24,6 +24,7 @@
+
+ extern void coverage_init (const char *);
+ extern void coverage_finish (void);
++extern void coverage_remove_note_file (void);
+
+ /* Start outputting coverage information for the current
+ function. */
Index: gcc/tree-cfgcleanup.c
===================================================================
--- a/src/gcc/tree-cfgcleanup.c (.../tags/gcc_7_1_0_release)
@@ -10117,6 +12364,48 @@ Index: gcc/tree-cfgcleanup.c
changed |= cleanup_tree_cfg_1 ();
gcc_assert (dom_info_available_p (CDI_DOMINATORS));
+Index: gcc/gcov-tool.c
+===================================================================
+--- a/src/gcc/gcov-tool.c (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/gcov-tool.c (.../branches/gcc-7-branch)
+@@ -173,8 +173,8 @@
+ FILE *file = error_p ? stderr : stdout;
+
+ fnotice (file, " merge [options] <dir1> <dir2> Merge coverage file contents\n");
++ fnotice (file, " -o, --output <dir> Output directory\n");
+ fnotice (file, " -v, --verbose Verbose mode\n");
+- fnotice (file, " -o, --output <dir> Output directory\n");
+ fnotice (file, " -w, --weight <w1,w2> Set weights (float point values)\n");
+ }
+
+@@ -267,10 +267,10 @@
+ FILE *file = error_p ? stderr : stdout;
+
+ fnotice (file, " rewrite [options] <dir> Rewrite coverage file contents\n");
+- fnotice (file, " -v, --verbose Verbose mode\n");
++ fnotice (file, " -n, --normalize <int64_t> Normalize the profile\n");
+ fnotice (file, " -o, --output <dir> Output directory\n");
+ fnotice (file, " -s, --scale <float or simple-frac> Scale the profile counters\n");
+- fnotice (file, " -n, --normalize <int64_t> Normalize the profile\n");
++ fnotice (file, " -v, --verbose Verbose mode\n");
+ }
+
+ static const struct option rewrite_options[] =
+@@ -417,12 +417,12 @@
+ FILE *file = error_p ? stderr : stdout;
+
+ fnotice (file, " overlap [options] <dir1> <dir2> Compute the overlap of two profiles\n");
+- fnotice (file, " -v, --verbose Verbose mode\n");
+- fnotice (file, " -h, --hotonly Only print info for hot objects/functions\n");
+ fnotice (file, " -f, --function Print function level info\n");
+ fnotice (file, " -F, --fullname Print full filename\n");
++ fnotice (file, " -h, --hotonly Only print info for hot objects/functions\n");
+ fnotice (file, " -o, --object Print object level info\n");
+ fnotice (file, " -t <float>, --hot_threshold <float> Set the threshold for hotness\n");
++ fnotice (file, " -v, --verbose Verbose mode\n");
+
+ }
+
Index: gcc/tree-sra.c
===================================================================
--- a/src/gcc/tree-sra.c (.../tags/gcc_7_1_0_release)
@@ -10191,6 +12480,149 @@ Index: gcc/tree-sra.c
if (dump_file && (dump_flags & TDF_DETAILS))
{
fprintf (dump_file, "Will attempt to totally scalarize ");
+Index: gcc/ubsan.c
+===================================================================
+--- a/src/gcc/ubsan.c (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/ubsan.c (.../branches/gcc-7-branch)
+@@ -114,10 +114,10 @@
+ /* Helper routine, which encodes a value in the pointer_sized_int_node.
+ Arguments with precision <= POINTER_SIZE are passed directly,
+ the rest is passed by reference. T is a value we are to encode.
+- IN_EXPAND_P is true if this function is called during expansion. */
++ PHASE determines when this function is called. */
+
+ tree
+-ubsan_encode_value (tree t, bool in_expand_p)
++ubsan_encode_value (tree t, enum ubsan_encode_value_phase phase)
+ {
+ tree type = TREE_TYPE (t);
+ const unsigned int bitsize = GET_MODE_BITSIZE (TYPE_MODE (type));
+@@ -143,11 +143,20 @@
+ {
+ /* The reason for this is that we don't want to pessimize
+ code by making vars unnecessarily addressable. */
+- tree var = create_tmp_var (type);
+- tree tem = build2 (MODIFY_EXPR, void_type_node, var, t);
+- mark_addressable (var);
+- if (in_expand_p)
++ tree var;
++ if (phase != UBSAN_ENCODE_VALUE_GENERIC)
+ {
++ var = create_tmp_var (type);
++ mark_addressable (var);
++ }
++ else
++ {
++ var = create_tmp_var_raw (type);
++ TREE_ADDRESSABLE (var) = 1;
++ DECL_CONTEXT (var) = current_function_decl;
++ }
++ if (phase == UBSAN_ENCODE_VALUE_RTL)
++ {
+ rtx mem
+ = assign_stack_temp_for_type (TYPE_MODE (type),
+ GET_MODE_SIZE (TYPE_MODE (type)),
+@@ -156,8 +165,17 @@
+ expand_assignment (var, t, false);
+ return build_fold_addr_expr (var);
+ }
+- t = build_fold_addr_expr (var);
+- return build2 (COMPOUND_EXPR, TREE_TYPE (t), tem, t);
++ if (phase != UBSAN_ENCODE_VALUE_GENERIC)
++ {
++ tree tem = build2 (MODIFY_EXPR, void_type_node, var, t);
++ t = build_fold_addr_expr (var);
++ return build2 (COMPOUND_EXPR, TREE_TYPE (t), tem, t);
++ }
++ else
++ {
++ var = build4 (TARGET_EXPR, type, var, t, NULL_TREE, NULL_TREE);
++ return build_fold_addr_expr (var);
++ }
+ }
+ else
+ return build_fold_addr_expr (t);
+@@ -708,9 +726,9 @@
+ ? BUILT_IN_UBSAN_HANDLE_OUT_OF_BOUNDS
+ : BUILT_IN_UBSAN_HANDLE_OUT_OF_BOUNDS_ABORT;
+ tree fn = builtin_decl_explicit (bcode);
+- tree val
+- = force_gimple_operand_gsi (gsi, ubsan_encode_value (orig_index), true,
+- NULL_TREE, true, GSI_SAME_STMT);
++ tree val = ubsan_encode_value (orig_index, UBSAN_ENCODE_VALUE_GIMPLE);
++ val = force_gimple_operand_gsi (gsi, val, true, NULL_TREE, true,
++ GSI_SAME_STMT);
+ g = gimple_build_call (fn, 2, data, val);
+ }
+ gimple_set_location (g, loc);
+@@ -1266,9 +1284,11 @@
+ tree fn = builtin_decl_explicit (fn_code);
+ return build_call_expr_loc (loc, fn, 2 + (code != NEGATE_EXPR),
+ build_fold_addr_expr_loc (loc, data),
+- ubsan_encode_value (op0, true),
+- op1 ? ubsan_encode_value (op1, true)
+- : NULL_TREE);
++ ubsan_encode_value (op0, UBSAN_ENCODE_VALUE_RTL),
++ op1
++ ? ubsan_encode_value (op1,
++ UBSAN_ENCODE_VALUE_RTL)
++ : NULL_TREE);
+ }
+
+ /* Perform the signed integer instrumentation. GSI is the iterator
+@@ -1458,9 +1478,9 @@
+ : BUILT_IN_UBSAN_HANDLE_LOAD_INVALID_VALUE_ABORT;
+ tree fn = builtin_decl_explicit (bcode);
+
+- tree val = force_gimple_operand_gsi (&gsi2, ubsan_encode_value (urhs),
+- true, NULL_TREE, true,
+- GSI_SAME_STMT);
++ tree val = ubsan_encode_value (urhs, UBSAN_ENCODE_VALUE_GIMPLE);
++ val = force_gimple_operand_gsi (&gsi2, val, true, NULL_TREE, true,
++ GSI_SAME_STMT);
+ g = gimple_build_call (fn, 2, data, val);
+ }
+ gimple_set_location (g, loc);
+@@ -1624,7 +1644,7 @@
+ fn = builtin_decl_explicit (bcode);
+ fn = build_call_expr_loc (loc, fn, 2,
+ build_fold_addr_expr_loc (loc, data),
+- ubsan_encode_value (expr, false));
++ ubsan_encode_value (expr));
+ }
+
+ return fold_build3 (COND_EXPR, void_type_node, t, fn, integer_zero_node);
+Index: gcc/ubsan.h
+===================================================================
+--- a/src/gcc/ubsan.h (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/ubsan.h (.../branches/gcc-7-branch)
+@@ -42,6 +42,13 @@
+ UBSAN_PRINT_ARRAY
+ };
+
++/* This controls ubsan_encode_value behavior. */
++enum ubsan_encode_value_phase {
++ UBSAN_ENCODE_VALUE_GENERIC,
++ UBSAN_ENCODE_VALUE_GIMPLE,
++ UBSAN_ENCODE_VALUE_RTL
++};
++
+ extern bool do_ubsan_in_current_function (void);
+ extern bool ubsan_expand_bounds_ifn (gimple_stmt_iterator *);
+ extern bool ubsan_expand_null_ifn (gimple_stmt_iterator *);
+@@ -49,8 +56,10 @@
+ extern bool ubsan_expand_vptr_ifn (gimple_stmt_iterator *);
+ extern bool ubsan_instrument_unreachable (gimple_stmt_iterator *);
+ extern tree ubsan_create_data (const char *, int, const location_t *, ...);
+-extern tree ubsan_type_descriptor (tree, enum ubsan_print_style = UBSAN_PRINT_NORMAL);
+-extern tree ubsan_encode_value (tree, bool = false);
++extern tree ubsan_type_descriptor (tree, ubsan_print_style
++ = UBSAN_PRINT_NORMAL);
++extern tree ubsan_encode_value (tree, ubsan_encode_value_phase
++ = UBSAN_ENCODE_VALUE_GENERIC);
+ extern bool is_ubsan_builtin_p (tree);
+ extern tree ubsan_build_overflow_builtin (tree_code, location_t, tree, tree,
+ tree, tree *);
Index: gcc/po/es.po
===================================================================
--- a/src/gcc/po/es.po (.../tags/gcc_7_1_0_release)
@@ -57699,6 +60131,19 @@ Index: gcc/po/zh_CN.po
#, fuzzy, gcc-internal-format
msgid "value %qs is not supported by attribute %<target%>"
msgstr "嵌套函数在此目标机上不受支持"
+Index: gcc/common.opt
+===================================================================
+--- a/src/gcc/common.opt (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/common.opt (.../branches/gcc-7-branch)
+@@ -2492,7 +2492,7 @@
+
+ fisolate-erroneous-paths-attribute
+ Common Report Var(flag_isolate_erroneous_paths_attribute) Optimization
+-Detect paths that trigger erroneous or undefined behavior due a null value
++Detect paths that trigger erroneous or undefined behavior due to a null value
+ being used in a way forbidden by a returns_nonnull or nonnull
+ attribute. Isolate those paths from the main control flow and turn the
+ statement with erroneous or undefined behavior into a trap.
Index: gcc/Makefile.in
===================================================================
--- a/src/gcc/Makefile.in (.../tags/gcc_7_1_0_release)
@@ -58219,7 +60664,17 @@ Index: gcc/config/i386/i386.md
(const_string "TI")
]
(const_string "SI")))])
-@@ -12730,24 +12690,6 @@
+@@ -5258,7 +5218,8 @@
+ (define_split
+ [(set (match_operand:MODEF 0 "sse_reg_operand")
+ (float:MODEF (match_operand:SI 1 "nonimmediate_operand")))]
+- "TARGET_USE_VECTOR_CONVERTS
++ "TARGET_SSE2
++ && TARGET_USE_VECTOR_CONVERTS
+ && optimize_function_for_speed_p (cfun)
+ && reload_completed
+ && (MEM_P (operands[1]) || TARGET_INTER_UNIT_MOVES_TO_VEC)
+@@ -12730,24 +12691,6 @@
(set_attr "znver1_decode" "vector")
(set_attr "mode" "<MODE>")])
@@ -58244,7 +60699,7 @@ Index: gcc/config/i386/i386.md
(define_insn_and_split "ctz<mode>2"
[(set (match_operand:SWI48 0 "register_operand" "=r")
(ctz:SWI48
-@@ -12867,24 +12809,6 @@
+@@ -12867,24 +12810,6 @@
operands[2] = GEN_INT (GET_MODE_BITSIZE (<MODE>mode)-1);
})
@@ -58334,6 +60789,15 @@ Index: gcc/config/i386/cpuid.h
===================================================================
--- a/src/gcc/config/i386/cpuid.h (.../tags/gcc_7_1_0_release)
+++ b/src/gcc/config/i386/cpuid.h (.../branches/gcc-7-branch)
+@@ -179,7 +179,7 @@
+
+
+ /* Return highest supported input value for cpuid instruction. ext can
+- be either 0x0 or 0x8000000 to return highest supported value for
++ be either 0x0 or 0x80000000 to return highest supported value for
+ basic or extended cpuid information. Function returns 0 if cpuid
+ is not supported or whatever cpuid returns in eax register. If sig
+ pointer is non-null, then first four bytes of the signature
@@ -246,8 +246,9 @@
unsigned int *__ecx, unsigned int *__edx)
{
@@ -58390,6 +60854,39 @@ Index: gcc/config/i386/sse.md
(match_operand:DI 2 "vector_move_operand"
"*rm,rm,rm,rm,C ,C ,C ,x,Yv,x,m,m")))]
"TARGET_SSE"
+@@ -15618,13 +15617,13 @@
+ (set_attr "mode" "<MODE>")])
+
+ (define_expand "round<mode>2"
+- [(set (match_dup 4)
++ [(set (match_dup 3)
+ (plus:VF
+ (match_operand:VF 1 "register_operand")
+- (match_dup 3)))
++ (match_dup 2)))
+ (set (match_operand:VF 0 "register_operand")
+ (unspec:VF
+- [(match_dup 4) (match_dup 5)]
++ [(match_dup 3) (match_dup 4)]
+ UNSPEC_ROUND))]
+ "TARGET_ROUND && !flag_trapping_math"
+ {
+@@ -15644,11 +15643,11 @@
+ vec_half = ix86_build_const_vector (<MODE>mode, true, half);
+ vec_half = force_reg (<MODE>mode, vec_half);
+
++ operands[2] = gen_reg_rtx (<MODE>mode);
++ emit_insn (gen_copysign<mode>3 (operands[2], vec_half, operands[1]));
++
+ operands[3] = gen_reg_rtx (<MODE>mode);
+- emit_insn (gen_copysign<mode>3 (operands[3], vec_half, operands[1]));
+-
+- operands[4] = gen_reg_rtx (<MODE>mode);
+- operands[5] = GEN_INT (ROUND_TRUNC);
++ operands[4] = GEN_INT (ROUND_TRUNC);
+ })
+
+ (define_expand "round<mode>2_sfix"
@@ -17105,12 +17104,12 @@
(set_attr "mode" "TI")])
@@ -58671,6 +61168,37 @@ Index: gcc/config/xtensa/xtensa.c
else
output_addr_const (file, x);
}
+Index: gcc/config/m68k/m68k.md
+===================================================================
+--- a/src/gcc/config/m68k/m68k.md (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/config/m68k/m68k.md (.../branches/gcc-7-branch)
+@@ -5337,7 +5337,7 @@
+ [(set_attr "type" "bitrw")])
+
+ (define_insn "*bsetdreg"
+- [(set (match_operand:SI 0 "register_operand" "+d")
++ [(set (match_operand:SI 0 "register_operand" "=d")
+ (ior:SI (ashift:SI (const_int 1)
+ (and:SI (match_operand:SI 1 "register_operand" "d")
+ (const_int 31)))
+@@ -5350,7 +5350,7 @@
+ [(set_attr "type" "bitrw")])
+
+ (define_insn "*bchgdreg"
+- [(set (match_operand:SI 0 "register_operand" "+d")
++ [(set (match_operand:SI 0 "register_operand" "=d")
+ (xor:SI (ashift:SI (const_int 1)
+ (and:SI (match_operand:SI 1 "register_operand" "d")
+ (const_int 31)))
+@@ -5363,7 +5363,7 @@
+ [(set_attr "type" "bitrw")])
+
+ (define_insn "*bclrdreg"
+- [(set (match_operand:SI 0 "register_operand" "+d")
++ [(set (match_operand:SI 0 "register_operand" "=d")
+ (and:SI (rotate:SI (const_int -2)
+ (and:SI (match_operand:SI 1 "register_operand" "d")
+ (const_int 31)))
Index: gcc/config/aarch64/cortex-a57-fma-steering.c
===================================================================
--- a/src/gcc/config/aarch64/cortex-a57-fma-steering.c (.../tags/gcc_7_1_0_release)
@@ -58687,6 +61215,163 @@ Index: gcc/config/aarch64/cortex-a57-fma-steering.c
}
/* Dump information about the forest FOREST. */
+Index: gcc/config/aarch64/aarch64-option-extensions.def
+===================================================================
+--- a/src/gcc/config/aarch64/aarch64-option-extensions.def (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/config/aarch64/aarch64-option-extensions.def (.../branches/gcc-7-branch)
+@@ -58,6 +58,6 @@
+
+ /* Enabling "fp16" also enables "fp".
+ Disabling "fp16" just disables "fp16". */
+-AARCH64_OPT_EXTENSION("fp16", AARCH64_FL_F16, AARCH64_FL_FP, 0, "fp16")
++AARCH64_OPT_EXTENSION("fp16", AARCH64_FL_F16, AARCH64_FL_FP, 0, "fphp asimdhp")
+
+ #undef AARCH64_OPT_EXTENSION
+Index: gcc/config/aarch64/aarch64-cost-tables.h
+===================================================================
+--- a/src/gcc/config/aarch64/aarch64-cost-tables.h (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/config/aarch64/aarch64-cost-tables.h (.../branches/gcc-7-branch)
+@@ -23,7 +23,111 @@
+
+ #include "config/arm/aarch-cost-tables.h"
+
+-/* ThunderX does not have implement AArch32. */
++/* QDF24xx does not implement AArch32. */
++const struct cpu_cost_table qdf24xx_extra_costs =
++{
++ /* ALU */
++ {
++ 0, /* arith. */
++ 0, /* logical. */
++ 0, /* shift. */
++ 0, /* shift_reg. */
++ COSTS_N_INSNS (1), /* arith_shift. */
++ COSTS_N_INSNS (1), /* arith_shift_reg. */
++ 0, /* log_shift. */
++ 0, /* log_shift_reg. */
++ 0, /* extend. */
++ 0, /* extend_arith. */
++ 0, /* bfi. */
++ 0, /* bfx. */
++ 0, /* clz. */
++ 0, /* rev. */
++ 0, /* non_exec. */
++ true /* non_exec_costs_exec. */
++ },
++ {
++ /* MULT SImode */
++ {
++ COSTS_N_INSNS (2), /* simple. */
++ COSTS_N_INSNS (2), /* flag_setting. */
++ COSTS_N_INSNS (2), /* extend. */
++ COSTS_N_INSNS (2), /* add. */
++ COSTS_N_INSNS (2), /* extend_add. */
++ COSTS_N_INSNS (4) /* idiv. */
++ },
++ /* MULT DImode */
++ {
++ COSTS_N_INSNS (3), /* simple. */
++ 0, /* flag_setting (N/A). */
++ COSTS_N_INSNS (3), /* extend. */
++ COSTS_N_INSNS (3), /* add. */
++ COSTS_N_INSNS (3), /* extend_add. */
++ COSTS_N_INSNS (9) /* idiv. */
++ }
++ },
++ /* LD/ST */
++ {
++ COSTS_N_INSNS (2), /* load. */
++ COSTS_N_INSNS (2), /* load_sign_extend. */
++ COSTS_N_INSNS (2), /* ldrd. */
++ COSTS_N_INSNS (2), /* ldm_1st. */
++ 1, /* ldm_regs_per_insn_1st. */
++ 2, /* ldm_regs_per_insn_subsequent. */
++ COSTS_N_INSNS (2), /* loadf. */
++ COSTS_N_INSNS (2), /* loadd. */
++ COSTS_N_INSNS (3), /* load_unaligned. */
++ 0, /* store. */
++ 0, /* strd. */
++ 0, /* stm_1st. */
++ 1, /* stm_regs_per_insn_1st. */
++ 2, /* stm_regs_per_insn_subsequent. */
++ 0, /* storef. */
++ 0, /* stored. */
++ COSTS_N_INSNS (1), /* store_unaligned. */
++ COSTS_N_INSNS (1), /* loadv. */
++ COSTS_N_INSNS (1) /* storev. */
++ },
++ {
++ /* FP SFmode */
++ {
++ COSTS_N_INSNS (6), /* div. */
++ COSTS_N_INSNS (5), /* mult. */
++ COSTS_N_INSNS (5), /* mult_addsub. */
++ COSTS_N_INSNS (5), /* fma. */
++ COSTS_N_INSNS (3), /* addsub. */
++ COSTS_N_INSNS (1), /* fpconst. */
++ COSTS_N_INSNS (1), /* neg. */
++ COSTS_N_INSNS (2), /* compare. */
++ COSTS_N_INSNS (4), /* widen. */
++ COSTS_N_INSNS (4), /* narrow. */
++ COSTS_N_INSNS (4), /* toint. */
++ COSTS_N_INSNS (4), /* fromint. */
++ COSTS_N_INSNS (2) /* roundint. */
++ },
++ /* FP DFmode */
++ {
++ COSTS_N_INSNS (11), /* div. */
++ COSTS_N_INSNS (6), /* mult. */
++ COSTS_N_INSNS (6), /* mult_addsub. */
++ COSTS_N_INSNS (6), /* fma. */
++ COSTS_N_INSNS (3), /* addsub. */
++ COSTS_N_INSNS (1), /* fpconst. */
++ COSTS_N_INSNS (1), /* neg. */
++ COSTS_N_INSNS (2), /* compare. */
++ COSTS_N_INSNS (4), /* widen. */
++ COSTS_N_INSNS (4), /* narrow. */
++ COSTS_N_INSNS (4), /* toint. */
++ COSTS_N_INSNS (4), /* fromint. */
++ COSTS_N_INSNS (2) /* roundint. */
++ }
++ },
++ /* Vector */
++ {
++ COSTS_N_INSNS (1) /* alu. */
++ }
++};
++
++/* ThunderX does not implement AArch32. */
+ const struct cpu_cost_table thunderx_extra_costs =
+ {
+ /* ALU */
+@@ -230,6 +334,4 @@
+ }
+ };
+
+-
+ #endif
+-
+Index: gcc/config/rs6000/vector.md
+===================================================================
+--- a/src/gcc/config/rs6000/vector.md (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/config/rs6000/vector.md (.../branches/gcc-7-branch)
+@@ -582,13 +582,12 @@
+ (gt:VEC_F (match_dup 2)
+ (match_dup 1)))
+ (set (match_dup 0)
+- (not:VEC_F (ior:VEC_F (match_dup 3)
+- (match_dup 4))))]
+- "
++ (and:VEC_F (not:VEC_F (match_dup 3))
++ (not:VEC_F (match_dup 4))))]
+ {
+ operands[3] = gen_reg_rtx (<MODE>mode);
+ operands[4] = gen_reg_rtx (<MODE>mode);
+-}")
++})
+
+ (define_insn_and_split "*vector_ltgt<mode>"
+ [(set (match_operand:VEC_F 0 "vfloat_operand" "")
Index: gcc/config/rs6000/predicates.md
===================================================================
--- a/src/gcc/config/rs6000/predicates.md (.../tags/gcc_7_1_0_release)
@@ -58791,6 +61476,21 @@ Index: gcc/config/rs6000/rs6000.c
def_builtin ("__builtin_vec_vsx_ld", opaque_ftype_long_pcvoid,
VSX_BUILTIN_VEC_LD);
+@@ -28096,9 +28134,11 @@
+ && REGNO (stack_limit_rtx) > 1
+ && REGNO (stack_limit_rtx) <= 31)
+ {
+- emit_insn (gen_add3_insn (tmp_reg, stack_limit_rtx, GEN_INT (size)));
+- emit_insn (gen_cond_trap (LTU, stack_reg, tmp_reg,
+- const0_rtx));
++ rtx_insn *insn
++ = gen_add3_insn (tmp_reg, stack_limit_rtx, GEN_INT (size));
++ gcc_assert (insn);
++ emit_insn (insn);
++ emit_insn (gen_cond_trap (LTU, stack_reg, tmp_reg, const0_rtx));
+ }
+ else if (GET_CODE (stack_limit_rtx) == SYMBOL_REF
+ && TARGET_32BIT
Index: gcc/config/rs6000/vsx.md
===================================================================
--- a/src/gcc/config/rs6000/vsx.md (.../tags/gcc_7_1_0_release)
@@ -58941,7 +61641,25 @@ Index: gcc/config/rs6000/rs6000.md
(define_insn_and_split "*extendsi<mode>2_dot"
[(set (match_operand:CC 2 "cc_reg_operand" "=x,?y")
(compare:CC (sign_extend:EXTSI (match_operand:SI 1 "gpc_reg_operand" "r,r"))
-@@ -5570,7 +5577,7 @@
+@@ -1643,6 +1650,17 @@
+ || rtx_equal_p (operands[0], operands[1]))
+ ? operands[0] : gen_reg_rtx (<MODE>mode));
+
++ /* Adding a constant to r0 is not a valid insn, so use a different
++ strategy in that case. */
++ if (REGNO (operands[1]) == 0 || REGNO (tmp) == 0)
++ {
++ if (operands[0] == operands[1])
++ FAIL;
++ rs6000_emit_move (operands[0], operands[2], <MODE>mode);
++ emit_insn (gen_add<mode>3 (operands[0], operands[1], operands[0]));
++ DONE;
++ }
++
+ HOST_WIDE_INT val = INTVAL (operands[2]);
+ HOST_WIDE_INT low = ((val & 0xffff) ^ 0x8000) - 0x8000;
+ HOST_WIDE_INT rest = trunc_int_for_mode (val - low, <MODE>mode);
+@@ -5570,7 +5588,7 @@
"TARGET_HARD_FLOAT && ((TARGET_FPRS && <TARGET_FLOAT>) || <E500_CONVERT>)"
"
{
@@ -58950,7 +61668,7 @@ Index: gcc/config/rs6000/rs6000.md
{
rtx src = force_reg (<MODE>mode, operands[1]);
-@@ -5596,7 +5603,8 @@
+@@ -5596,7 +5614,8 @@
(clobber (match_scratch:DI 2 "=d"))]
"TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT
&& (<MODE>mode != SFmode || TARGET_SINGLE_FLOAT)
@@ -58960,7 +61678,7 @@ Index: gcc/config/rs6000/rs6000.md
"#"
""
[(pc)]
-@@ -5637,7 +5645,8 @@
+@@ -5637,7 +5656,8 @@
(fix:SI (match_operand:SFDF 1 "gpc_reg_operand" "d,<rreg>")))
(clobber (match_operand:DI 2 "gpc_reg_operand" "=1,d"))
(clobber (match_operand:DI 3 "offsettable_mem_operand" "=o,o"))]
@@ -58970,7 +61688,7 @@ Index: gcc/config/rs6000/rs6000.md
"#"
""
[(pc)]
-@@ -5721,7 +5730,7 @@
+@@ -5721,7 +5741,7 @@
|| <E500_CONVERT>)"
"
{
@@ -58979,7 +61697,7 @@ Index: gcc/config/rs6000/rs6000.md
{
emit_insn (gen_fixuns_trunc<mode>si2_stfiwx (operands[0], operands[1]));
DONE;
-@@ -5733,7 +5742,8 @@
+@@ -5733,7 +5753,8 @@
(unsigned_fix:SI (match_operand:SFDF 1 "gpc_reg_operand" "d")))
(clobber (match_scratch:DI 2 "=d"))]
"TARGET_HARD_FLOAT && TARGET_FPRS && <TARGET_FLOAT> && TARGET_FCTIWUZ
@@ -58989,7 +61707,7 @@ Index: gcc/config/rs6000/rs6000.md
"#"
""
[(pc)]
-@@ -5818,13 +5828,43 @@
+@@ -5818,13 +5839,43 @@
}
DONE;
})
@@ -59038,7 +61756,7 @@ Index: gcc/config/rs6000/rs6000.md
UNSPEC_FCTIWZ))]
"TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT"
"@
-@@ -7168,40 +7208,82 @@
+@@ -7168,40 +7219,82 @@
operands[3] = gen_int_mode (l, SImode);
}")
@@ -59141,7 +61859,7 @@ Index: gcc/config/rs6000/rs6000.md
(define_insn "*mov<mode>_softfloat"
[(set (match_operand:FMOVE32 0 "nonimmediate_operand" "=r,cl,r,r,m,r,r,r,r,*h")
-@@ -13999,6 +14081,74 @@
+@@ -13999,6 +14092,74 @@
(set_attr "length" "8")])
@@ -59216,11 +61934,225 @@ Index: gcc/config/rs6000/rs6000.md
;; Miscellaneous ISA 2.06 (power7) instructions
(define_insn "addg6s"
[(set (match_operand:SI 0 "register_operand" "=r")
+Index: gcc/config/arm/aarch-cost-tables.h
+===================================================================
+--- a/src/gcc/config/arm/aarch-cost-tables.h (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/config/arm/aarch-cost-tables.h (.../branches/gcc-7-branch)
+@@ -537,107 +537,4 @@
+ }
+ };
+
+-const struct cpu_cost_table qdf24xx_extra_costs =
+-{
+- /* ALU */
+- {
+- 0, /* arith. */
+- 0, /* logical. */
+- 0, /* shift. */
+- 0, /* shift_reg. */
+- COSTS_N_INSNS (1), /* arith_shift. */
+- COSTS_N_INSNS (1), /* arith_shift_reg. */
+- 0, /* log_shift. */
+- 0, /* log_shift_reg. */
+- 0, /* extend. */
+- 0, /* extend_arith. */
+- 0, /* bfi. */
+- 0, /* bfx. */
+- 0, /* clz. */
+- 0, /* rev. */
+- 0, /* non_exec. */
+- true /* non_exec_costs_exec. */
+- },
+- {
+- /* MULT SImode */
+- {
+- COSTS_N_INSNS (2), /* simple. */
+- COSTS_N_INSNS (2), /* flag_setting. */
+- COSTS_N_INSNS (2), /* extend. */
+- COSTS_N_INSNS (2), /* add. */
+- COSTS_N_INSNS (2), /* extend_add. */
+- COSTS_N_INSNS (4) /* idiv. */
+- },
+- /* MULT DImode */
+- {
+- COSTS_N_INSNS (3), /* simple. */
+- 0, /* flag_setting (N/A). */
+- COSTS_N_INSNS (3), /* extend. */
+- COSTS_N_INSNS (3), /* add. */
+- COSTS_N_INSNS (3), /* extend_add. */
+- COSTS_N_INSNS (9) /* idiv. */
+- }
+- },
+- /* LD/ST */
+- {
+- COSTS_N_INSNS (2), /* load. */
+- COSTS_N_INSNS (2), /* load_sign_extend. */
+- COSTS_N_INSNS (2), /* ldrd. */
+- COSTS_N_INSNS (2), /* ldm_1st. */
+- 1, /* ldm_regs_per_insn_1st. */
+- 2, /* ldm_regs_per_insn_subsequent. */
+- COSTS_N_INSNS (2), /* loadf. */
+- COSTS_N_INSNS (2), /* loadd. */
+- COSTS_N_INSNS (3), /* load_unaligned. */
+- 0, /* store. */
+- 0, /* strd. */
+- 0, /* stm_1st. */
+- 1, /* stm_regs_per_insn_1st. */
+- 2, /* stm_regs_per_insn_subsequent. */
+- 0, /* storef. */
+- 0, /* stored. */
+- COSTS_N_INSNS (1), /* store_unaligned. */
+- COSTS_N_INSNS (1), /* loadv. */
+- COSTS_N_INSNS (1) /* storev. */
+- },
+- {
+- /* FP SFmode */
+- {
+- COSTS_N_INSNS (6), /* div. */
+- COSTS_N_INSNS (5), /* mult. */
+- COSTS_N_INSNS (5), /* mult_addsub. */
+- COSTS_N_INSNS (5), /* fma. */
+- COSTS_N_INSNS (3), /* addsub. */
+- COSTS_N_INSNS (1), /* fpconst. */
+- COSTS_N_INSNS (1), /* neg. */
+- COSTS_N_INSNS (2), /* compare. */
+- COSTS_N_INSNS (4), /* widen. */
+- COSTS_N_INSNS (4), /* narrow. */
+- COSTS_N_INSNS (4), /* toint. */
+- COSTS_N_INSNS (4), /* fromint. */
+- COSTS_N_INSNS (2) /* roundint. */
+- },
+- /* FP DFmode */
+- {
+- COSTS_N_INSNS (11), /* div. */
+- COSTS_N_INSNS (6), /* mult. */
+- COSTS_N_INSNS (6), /* mult_addsub. */
+- COSTS_N_INSNS (6), /* fma. */
+- COSTS_N_INSNS (3), /* addsub. */
+- COSTS_N_INSNS (1), /* fpconst. */
+- COSTS_N_INSNS (1), /* neg. */
+- COSTS_N_INSNS (2), /* compare. */
+- COSTS_N_INSNS (4), /* widen. */
+- COSTS_N_INSNS (4), /* narrow. */
+- COSTS_N_INSNS (4), /* toint. */
+- COSTS_N_INSNS (4), /* fromint. */
+- COSTS_N_INSNS (2) /* roundint. */
+- }
+- },
+- /* Vector */
+- {
+- COSTS_N_INSNS (1) /* alu. */
+- }
+-};
+-
+ #endif /* GCC_AARCH_COST_TABLES_H */
+Index: gcc/config/arm/arm-builtins.c
+===================================================================
+--- a/src/gcc/config/arm/arm-builtins.c (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/config/arm/arm-builtins.c (.../branches/gcc-7-branch)
+@@ -1893,10 +1893,10 @@
+ = build_function_type_list (unsigned_type_node, NULL);
+
+ arm_builtin_decls[ARM_BUILTIN_GET_FPSCR]
+- = add_builtin_function ("__builtin_arm_ldfscr", ftype_get_fpscr,
++ = add_builtin_function ("__builtin_arm_get_fpscr", ftype_get_fpscr,
+ ARM_BUILTIN_GET_FPSCR, BUILT_IN_MD, NULL, NULL_TREE);
+ arm_builtin_decls[ARM_BUILTIN_SET_FPSCR]
+- = add_builtin_function ("__builtin_arm_stfscr", ftype_set_fpscr,
++ = add_builtin_function ("__builtin_arm_set_fpscr", ftype_set_fpscr,
+ ARM_BUILTIN_SET_FPSCR, BUILT_IN_MD, NULL, NULL_TREE);
+ }
+
+@@ -2245,7 +2245,12 @@
+ {
+ error ("%Kargument %d must be a constant immediate",
+ exp, argc + 1);
+- return const0_rtx;
++ /* We have failed to expand the pattern, and are safely
++ in to invalid code. But the mid-end will still try to
++ build an assignment for this node while it expands,
++ before stopping for the error, just pass it back
++ TARGET to ensure a valid assignment. */
++ return target;
+ }
+ break;
+
+Index: gcc/config/arm/arm-tables.opt
+===================================================================
+--- a/src/gcc/config/arm/arm-tables.opt (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/config/arm/arm-tables.opt (.../branches/gcc-7-branch)
+@@ -328,12 +328,6 @@
+ Enum(processor_type) String(exynos-m1) Value( TARGET_CPU_exynosm1)
+
+ EnumValue
+-Enum(processor_type) String(falkor) Value( TARGET_CPU_falkor)
+-
+-EnumValue
+-Enum(processor_type) String(qdf24xx) Value( TARGET_CPU_qdf24xx)
+-
+-EnumValue
+ Enum(processor_type) String(xgene1) Value( TARGET_CPU_xgene1)
+
+ EnumValue
+Index: gcc/config/arm/arm-cpus.in
+===================================================================
+--- a/src/gcc/config/arm/arm-cpus.in (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/config/arm/arm-cpus.in (.../branches/gcc-7-branch)
+@@ -1020,20 +1020,6 @@
+ costs exynosm1
+ end cpu exynos-m1
+
+-begin cpu falkor
+- tune for cortex-a57
+- tune flags LDSCHED
+- architecture armv8-a+crc
+- costs qdf24xx
+-end cpu falkor
+-
+-begin cpu qdf24xx
+- tune for cortex-a57
+- tune flags LDSCHED
+- architecture armv8-a+crc
+- costs qdf24xx
+-end cpu qdf24xx
+-
+ begin cpu xgene1
+ tune flags LDSCHED
+ architecture armv8-a
Index: gcc/config/arm/arm.c
===================================================================
--- a/src/gcc/config/arm/arm.c (.../tags/gcc_7_1_0_release)
+++ b/src/gcc/config/arm/arm.c (.../branches/gcc-7-branch)
-@@ -8670,8 +8670,17 @@
+@@ -2090,28 +2090,6 @@
+ tune_params::SCHED_AUTOPREF_OFF
+ };
+
+-const struct tune_params arm_qdf24xx_tune =
+-{
+- &qdf24xx_extra_costs,
+- NULL, /* Scheduler cost adjustment. */
+- arm_default_branch_cost,
+- &arm_default_vec_cost, /* Vectorizer costs. */
+- 1, /* Constant limit. */
+- 2, /* Max cond insns. */
+- 8, /* Memset max inline. */
+- 4, /* Issue rate. */
+- ARM_PREFETCH_BENEFICIAL (0, -1, 64),
+- tune_params::PREF_CONST_POOL_FALSE,
+- tune_params::PREF_LDRD_TRUE,
+- tune_params::LOG_OP_NON_SHORT_CIRCUIT_TRUE, /* Thumb. */
+- tune_params::LOG_OP_NON_SHORT_CIRCUIT_TRUE, /* ARM. */
+- tune_params::DISPARAGE_FLAGS_ALL,
+- tune_params::PREF_NEON_64_FALSE,
+- tune_params::PREF_NEON_STRINGOPS_TRUE,
+- FUSE_OPS (tune_params::FUSE_MOVW_MOVT),
+- tune_params::SCHED_AUTOPREF_FULL
+-};
+-
+ /* Branches can be dual-issued on Cortex-A5, so conditional execution is
+ less appealing. Set max_insns_skipped to a low value. */
+
+@@ -8670,8 +8648,17 @@
{
const_rtx x = *iter;
if (GET_CODE (x) == SYMBOL_REF && SYMBOL_REF_TLS_MODEL (x) != 0)
@@ -59239,7 +62171,7 @@ Index: gcc/config/arm/arm.c
/* Don't recurse into UNSPEC_TLS looking for TLS symbols; these are
TLS offsets, not real symbol references. */
if (GET_CODE (x) == UNSPEC && XINT (x, 1) == UNSPEC_TLS)
-@@ -16377,6 +16386,7 @@
+@@ -16377,6 +16364,7 @@
push_minipool_fix (rtx_insn *insn, HOST_WIDE_INT address, rtx *loc,
machine_mode mode, rtx value)
{
@@ -59247,7 +62179,7 @@ Index: gcc/config/arm/arm.c
Mfix * fix = (Mfix *) obstack_alloc (&minipool_obstack, sizeof (* fix));
fix->insn = insn;
-@@ -16428,10 +16438,6 @@
+@@ -16428,10 +16416,6 @@
int
arm_max_const_double_inline_cost ()
{
@@ -59258,7 +62190,7 @@ Index: gcc/config/arm/arm.c
return ((optimize_size || arm_ld_sched) ? 3 : 4);
}
-@@ -17378,6 +17384,11 @@
+@@ -17378,6 +17362,11 @@
if (!optimize)
split_all_insns_noflow ();
@@ -59270,6 +62202,35 @@ Index: gcc/config/arm/arm.c
minipool_fix_head = minipool_fix_tail = NULL;
/* The first insn must always be a note, or the code below won't
+Index: gcc/config/arm/t-aprofile
+===================================================================
+--- a/src/gcc/config/arm/t-aprofile (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/config/arm/t-aprofile (.../branches/gcc-7-branch)
+@@ -92,8 +92,6 @@
+ MULTILIB_MATCHES += march?armv8-a=mcpu?cortex-a73.cortex-a35
+ MULTILIB_MATCHES += march?armv8-a=mcpu?cortex-a73.cortex-a53
+ MULTILIB_MATCHES += march?armv8-a=mcpu?exynos-m1
+-MULTILIB_MATCHES += march?armv8-a=mcpu?falkor
+-MULTILIB_MATCHES += march?armv8-a=mcpu?qdf24xx
+ MULTILIB_MATCHES += march?armv8-a=mcpu?xgene1
+
+ # Arch Matches
+Index: gcc/config/arm/arm-tune.md
+===================================================================
+--- a/src/gcc/config/arm/arm-tune.md (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/config/arm/arm-tune.md (.../branches/gcc-7-branch)
+@@ -54,8 +54,7 @@
+ cortexm3,marvell_pj4,cortexa15cortexa7,
+ cortexa17cortexa7,cortexa32,cortexa35,
+ cortexa53,cortexa57,cortexa72,
+- cortexa73,exynosm1,falkor,
+- qdf24xx,xgene1,cortexa57cortexa53,
+- cortexa72cortexa53,cortexa73cortexa35,cortexa73cortexa53,
+- cortexm23,cortexm33"
++ cortexa73,exynosm1,xgene1,
++ cortexa57cortexa53,cortexa72cortexa53,cortexa73cortexa35,
++ cortexa73cortexa53,cortexm23,cortexm33"
+ (const (symbol_ref "((enum attr_tune) arm_tune)")))
Index: gcc/config/arm/vfp.md
===================================================================
--- a/src/gcc/config/arm/vfp.md (.../tags/gcc_7_1_0_release)
@@ -59315,6 +62276,98 @@ Index: gcc/config/arm/vfp.md
+ operands[2] = GEN_INT ((int) buf);
+ operands[1] = gen_reg_rtx (SFmode);
+ ")
+Index: gcc/config/arm/t-rmprofile
+===================================================================
+--- a/src/gcc/config/arm/t-rmprofile (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/config/arm/t-rmprofile (.../branches/gcc-7-branch)
+@@ -131,7 +131,6 @@
+ MULTILIB_MATCHES += march?armv7=mcpu?cortex-a73.cortex-a35
+ MULTILIB_MATCHES += march?armv7=mcpu?cortex-a73.cortex-a53
+ MULTILIB_MATCHES += march?armv7=mcpu?exynos-m1
+-MULTILIB_MATCHES += march?armv7=mcpu?qdf24xx
+ MULTILIB_MATCHES += march?armv7=mcpu?xgene1
+
+ # Arch Matches
+Index: gcc/config/arm/arm-cpu-cdata.h
+===================================================================
+--- a/src/gcc/config/arm/arm-cpu-cdata.h (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/config/arm/arm-cpu-cdata.h (.../branches/gcc-7-branch)
+@@ -740,20 +740,6 @@
+ },
+ },
+ {
+- "falkor",
+- {
+- ISA_ARMv8a,isa_bit_crc32,
+- isa_nobit
+- },
+- },
+- {
+- "qdf24xx",
+- {
+- ISA_ARMv8a,isa_bit_crc32,
+- isa_nobit
+- },
+- },
+- {
+ "xgene1",
+ {
+ ISA_ARMv8a,
+Index: gcc/config/arm/arm-cpu-data.h
+===================================================================
+--- a/src/gcc/config/arm/arm-cpu-data.h (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/config/arm/arm-cpu-data.h (.../branches/gcc-7-branch)
+@@ -1144,28 +1144,6 @@
+ &arm_exynosm1_tune
+ },
+ {
+- "falkor",
+- TARGET_CPU_cortexa57,
+- (TF_LDSCHED),
+- "8A", BASE_ARCH_8A,
+- {
+- ISA_ARMv8a,isa_bit_crc32,
+- isa_nobit
+- },
+- &arm_qdf24xx_tune
+- },
+- {
+- "qdf24xx",
+- TARGET_CPU_cortexa57,
+- (TF_LDSCHED),
+- "8A", BASE_ARCH_8A,
+- {
+- ISA_ARMv8a,isa_bit_crc32,
+- isa_nobit
+- },
+- &arm_qdf24xx_tune
+- },
+- {
+ "xgene1",
+ TARGET_CPU_xgene1,
+ (TF_LDSCHED),
+Index: gcc/config/arm/bpabi.h
+===================================================================
+--- a/src/gcc/config/arm/bpabi.h (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/config/arm/bpabi.h (.../branches/gcc-7-branch)
+@@ -79,8 +79,6 @@
+ |mcpu=cortex-a73.cortex-a35 \
+ |mcpu=cortex-a73.cortex-a53 \
+ |mcpu=exynos-m1 \
+- |mcpu=falkor \
+- |mcpu=qdf24xx \
+ |mcpu=xgene1 \
+ |mcpu=cortex-m1.small-multiply \
+ |mcpu=cortex-m0.small-multiply \
+@@ -118,8 +116,6 @@
+ |mcpu=cortex-a73.cortex-a35 \
+ |mcpu=cortex-a73.cortex-a53 \
+ |mcpu=exynos-m1 \
+- |mcpu=falkor \
+- |mcpu=qdf24xx \
+ |mcpu=xgene1 \
+ |mcpu=cortex-m1.small-multiply \
+ |mcpu=cortex-m0.small-multiply \
Index: gcc/config/arm/arm.md
===================================================================
--- a/src/gcc/config/arm/arm.md (.../tags/gcc_7_1_0_release)
@@ -59342,6 +62395,19 @@ Index: gcc/config/arm/arm.md
[(const_int 0)]
"
arm_split_constant (SET, SImode, curr_insn,
+Index: gcc/config/arm/arm-cpu.h
+===================================================================
+--- a/src/gcc/config/arm/arm-cpu.h (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/config/arm/arm-cpu.h (.../branches/gcc-7-branch)
+@@ -123,8 +123,6 @@
+ TARGET_CPU_cortexa72,
+ TARGET_CPU_cortexa73,
+ TARGET_CPU_exynosm1,
+- TARGET_CPU_falkor,
+- TARGET_CPU_qdf24xx,
+ TARGET_CPU_xgene1,
+ TARGET_CPU_cortexa57cortexa53,
+ TARGET_CPU_cortexa72cortexa53,
Index: gcc/config/pa/pa.c
===================================================================
--- a/src/gcc/config/pa/pa.c (.../tags/gcc_7_1_0_release)
@@ -59421,6 +62487,34 @@ Index: gcc/config/pa/pa.c
if (MAYBE_FP_REG_CLASS_P (rclass))
return true;
+Index: gcc/params.def
+===================================================================
+--- a/src/gcc/params.def (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/params.def (.../branches/gcc-7-branch)
+@@ -126,7 +126,7 @@
+ DEFPARAM (PARAM_PARTIAL_INLINING_ENTRY_PROBABILITY,
+ "partial-inlining-entry-probability",
+ "Maximum probability of the entry BB of split region (in percent relative to entry BB of the function) to make partial inlining happen.",
+- 70, 0, 0)
++ 70, 0, 100)
+
+ /* Limit the number of expansions created by the variable expansion
+ optimization to avoid register pressure. */
+Index: gcc/gcov-dump.c
+===================================================================
+--- a/src/gcc/gcov-dump.c (.../tags/gcc_7_1_0_release)
++++ b/src/gcc/gcov-dump.c (.../branches/gcc-7-branch)
+@@ -132,9 +132,9 @@
+ printf ("Usage: gcov-dump [OPTION] ... gcovfiles\n");
+ printf ("Print coverage file contents\n");
+ printf (" -h, --help Print this help\n");
+- printf (" -v, --version Print version number\n");
+ printf (" -l, --long Dump record contents too\n");
+ printf (" -p, --positions Dump record positions\n");
++ printf (" -v, --version Print version number\n");
+ printf (" -w, --working-sets Dump working set computed from summary\n");
+ printf ("\nFor bug reporting instructions, please see:\n%s.\n",
+ bug_report_url);
Index: libgo/Makefile.in
===================================================================
--- a/src/libgo/Makefile.in (.../tags/gcc_7_1_0_release)
@@ -59434,6 +62528,19 @@ Index: libgo/Makefile.in
# How to build a .gox file from a .lo file.
+Index: libgo/go/os/wait_waitid.go
+===================================================================
+--- a/src/libgo/go/os/wait_waitid.go (.../tags/gcc_7_1_0_release)
++++ b/src/libgo/go/os/wait_waitid.go (.../branches/gcc-7-branch)
+@@ -23,7 +23,7 @@
+ // On Darwin, it requires greater than or equal to 64 bytes
+ // for darwin/{386,arm} and 104 bytes for darwin/amd64.
+ // We don't care about the values it returns.
+- var siginfo [128]byte
++ var siginfo [16]uint64
+ psig := &siginfo[0]
+ _, _, e := syscall.Syscall6(syscall.SYS_WAITID, _P_PID, uintptr(p.Pid), uintptr(unsafe.Pointer(psig)), syscall.WEXITED|syscall.WNOWAIT, 0, 0)
+ runtime.KeepAlive(p)
Index: libgo/Makefile.am
===================================================================
--- a/src/libgo/Makefile.am (.../tags/gcc_7_1_0_release)
@@ -59516,7 +62623,21 @@ Index: libgfortran/ChangeLog
===================================================================
--- a/src/libgfortran/ChangeLog (.../tags/gcc_7_1_0_release)
+++ b/src/libgfortran/ChangeLog (.../branches/gcc-7-branch)
-@@ -1,3 +1,57 @@
+@@ -1,3 +1,71 @@
++2017-06-27 Jerry DeLisle <jvdelisle at gcc.gnu.org>
++
++ Backport from trunk
++ PR libgfortran/53029
++ * io/list_read.c(list_formatted_read_scalar: Set the err return
++ value to the common.flags error values.
++
++2017-06-26 Jim Wilson <jim.wilson at r3-a15.aus-colo>
++
++ Backport from trunk
++ PR libfortran/81195
++ * io/unit.c (get_unit): Call __gthread_mutex_lock before newunit_stack
++ and newunit_tos references. Call __gthread_mutex_unlock afterward.
++
+2017-06-06 Thomas Koenig <tkoenig at gcc.gnu.org>
+
+ Backport from trunk
@@ -60990,7 +64111,24 @@ Index: libgfortran/io/list_read.c
===================================================================
--- a/src/libgfortran/io/list_read.c (.../tags/gcc_7_1_0_release)
+++ b/src/libgfortran/io/list_read.c (.../branches/gcc-7-branch)
-@@ -2871,6 +2871,7 @@
+@@ -2298,11 +2298,16 @@
+ free_saved (dtp);
+
+ cleanup:
++ /* err may have been set above from finish_separator, so if it is set
++ trigger the hit_eof. The hit_eof will set bits in common.flags. */
+ if (err == LIBERROR_END)
+ {
+ free_line (dtp);
+ hit_eof (dtp);
+ }
++ /* Now we check common.flags for any errors that could have occurred in
++ a READ elsewhere such as in read_integer. */
++ err = dtp->common.flags & IOPARM_LIBRETURN_MASK;
+ fbuf_flush_list (dtp->u.p.current_unit, LIST_READING);
+ return err;
+ }
+@@ -2871,6 +2876,7 @@
index_type m;
size_t obj_name_len;
void *pdata;
@@ -60998,7 +64136,7 @@ Index: libgfortran/io/list_read.c
/* If we have encountered a previous read error or this object has not been
touched in name parsing, just return. */
-@@ -2909,12 +2910,29 @@
+@@ -2909,12 +2915,29 @@
{
/* Update the pointer to the data, using the current index vector */
@@ -61033,7 +64171,7 @@ Index: libgfortran/io/list_read.c
/* If we are finished with the repeat count, try to read next value. */
nml_carry = 0;
-@@ -2958,6 +2976,7 @@
+@@ -2958,6 +2981,7 @@
break;
case BT_DERIVED:
@@ -61041,7 +64179,7 @@ Index: libgfortran/io/list_read.c
/* If this object has a User Defined procedure, call it. */
if (nl->dtio_sub != NULL)
{
-@@ -2970,13 +2989,11 @@
+@@ -2970,13 +2994,11 @@
int noiostat;
int *child_iostat = NULL;
gfc_array_i4 vlist;
@@ -61055,6 +64193,44 @@ Index: libgfortran/io/list_read.c
list_obj.vptr = nl->vtable;
list_obj.len = 0;
+Index: libgfortran/io/unit.c
+===================================================================
+--- a/src/libgfortran/io/unit.c (.../tags/gcc_7_1_0_release)
++++ b/src/libgfortran/io/unit.c (.../branches/gcc-7-branch)
+@@ -583,14 +583,17 @@
+ }
+ else
+ {
++ __gthread_mutex_lock (&unit_lock);
+ if (newunit_tos)
+ {
+ dtp->common.unit = newunit_stack[newunit_tos].unit_number;
+ unit = newunit_stack[newunit_tos--].unit;
++ __gthread_mutex_unlock (&unit_lock);
+ unit->fbuf->act = unit->fbuf->pos = 0;
+ }
+ else
+ {
++ __gthread_mutex_unlock (&unit_lock);
+ dtp->common.unit = newunit_alloc ();
+ unit = xcalloc (1, sizeof (gfc_unit));
+ fbuf_init (unit, 128);
+@@ -603,12 +606,15 @@
+ /* If an internal unit number is passed from the parent to the child
+ it should have been stashed on the newunit_stack ready to be used.
+ Check for it now and return the internal unit if found. */
++ __gthread_mutex_lock (&unit_lock);
+ if (newunit_tos && (dtp->common.unit <= NEWUNIT_START)
+ && (dtp->common.unit == newunit_stack[newunit_tos].unit_number))
+ {
+ unit = newunit_stack[newunit_tos--].unit;
++ __gthread_mutex_unlock (&unit_lock);
+ return unit;
+ }
++ __gthread_mutex_unlock (&unit_lock);
+
+ /* Has to be an external unit. */
+ dtp->u.p.unit_is_internal = 0;
Index: libgfortran/io/transfer.c
===================================================================
--- a/src/libgfortran/io/transfer.c (.../tags/gcc_7_1_0_release)
@@ -61192,3 +64368,54 @@ Index: libada/ChangeLog
2017-01-04 Alan Modra <amodra at gmail.com>
+Index: libcilkrts/runtime/config/sparc/os-unix-sysdep.c
+===================================================================
+--- a/src/libcilkrts/runtime/config/sparc/os-unix-sysdep.c (.../tags/gcc_7_1_0_release)
++++ b/src/libcilkrts/runtime/config/sparc/os-unix-sysdep.c (.../branches/gcc-7-branch)
+@@ -47,7 +47,7 @@
+ * for your assistance in helping us improve Cilk Plus.
+ *************************************************************************
+ *
+- * This file contains system-specific code for sparc-based systems
++ * This file contains system-specific code for SPARC-based systems
+ */
+
+ #include "os.h"
+@@ -60,7 +60,7 @@
+ COMMON_SYSDEP unsigned long long __cilkrts_getticks(void)
+ {
+ unsigned long long tick;
+-#ifdef __sparcv9
++#if defined(__sparcv9) || defined(__arch64__)
+ __asm__ volatile("rd %%tick, %0" : "=r"(tick));
+ #else
+ __asm__ volatile("rd %%tick, %L0\n"
+Index: libcilkrts/runtime/jmpbuf.h
+===================================================================
+--- a/src/libcilkrts/runtime/jmpbuf.h (.../tags/gcc_7_1_0_release)
++++ b/src/libcilkrts/runtime/jmpbuf.h (.../branches/gcc-7-branch)
+@@ -110,8 +110,8 @@
+ /**
+ * @brief Some architecture-dependent stack adjustment.
+ */
+-#if defined(__sparcv9)
+- // Subtract sparc v9 stack bias so the actual stack starts at the
++#if defined(__sparcv9) || (defined(__sparc__) && defined(__arch64__))
++ // Subtract SPARC V9 stack bias so the actual stack starts at the
+ // allocated area.
+ # define CILK_ADJUST_SP(SP) ((SP) - 2047)
+ # define CILK_UNADJUST_SP(SP) ((SP) + 2047)
+Index: libcilkrts/ChangeLog
+===================================================================
+--- a/src/libcilkrts/ChangeLog (.../tags/gcc_7_1_0_release)
++++ b/src/libcilkrts/ChangeLog (.../branches/gcc-7-branch)
+@@ -1,3 +1,9 @@
++2017-06-23 Eric Botcazou <ebotcazou at libertysurf.fr>
++
++ * runtime/config/sparc/os-unix-sysdep.c (__cilkrts_getticks): Adjust
++ preprocessor test for SPARC/Linux.
++ * runtime/jmpbuf.h (CILK_[UN]ADJUST_SP): Likewise.
++
+ 2017-05-02 Release Manager
+
+ * GCC 7.1.0 released.
--
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