[gcc-6] 347/401: * Update to SVN 20170118 (r244586) from the gcc-6-branch.
Ximin Luo
infinity0 at debian.org
Wed Apr 5 15:50:37 UTC 2017
This is an automated email from the git hooks/post-receive script.
infinity0 pushed a commit to branch pu/reproducible_builds
in repository gcc-6.
commit 19305a2c1852d3b4198be98f58dca6b0e775eed6
Author: doko <doko at 6ca36cf4-e1d1-0310-8c6f-e303bb2178ca>
Date: Wed Jan 18 19:03:06 2017 +0000
* Update to SVN 20170118 (r244586) from the gcc-6-branch.
git-svn-id: svn://anonscm.debian.org/gcccvs/branches/sid/gcc-6@9228 6ca36cf4-e1d1-0310-8c6f-e303bb2178ca
---
debian/changelog | 9 +-
debian/patches/pr72813.diff | 60 ---
debian/patches/pr79044.diff | 71 ---
debian/patches/svn-updates.diff | 967 +++++++++++++++++++++++++++++++++++++++-
debian/rules.conf | 8 +-
debian/rules.patch | 2 -
6 files changed, 967 insertions(+), 150 deletions(-)
diff --git a/debian/changelog b/debian/changelog
index fb7f20f..fc1320a 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,12 +1,15 @@
gcc-6 (6.3.0-3) UNRELEASED; urgency=medium
- * Update to SVN 20170112 (r244350) from the gcc-6-branch.
+ * Update to SVN 20170118 (r244586) from the gcc-6-branch.
- Fix PR tree-optimization/71055 (closes: #849032), PR driver/78863,
PR translation/78745, PR tree-optimization/78886,
PR tree-optimization/78428, PR libstdc++/78956, PR libstdc++/78991,
PR rtl-optimization/78255, PR target/78041 (ARM), PR pch/78970,
PR lto/79042, PR target/78900 (PPC), PR tree-optimization/78024,
- PR sanitizer/65479 (PPC), PR c++/77812.
+ PR sanitizer/65479 (PPC), PR c++/77812, PR libstdc++/78389,
+ PR libstdc++/78389, PR debug/78839, PR rtl-optimization/78617,
+ PR target/78253 (ARM), PR target/79044 (PPC), PR c++/78341, PR c++/78949,
+ PR c++/78693, PR c++/71182, PR fortran/78866, PR middle-end/50199.
* Always configure sparc builds --with-cpu-32=ultrasparc (James Clark).
Closes: #850250.
* Enable gccgo on m68k (John Paul Adrian Glaubitz). Closes: #850749.
@@ -22,7 +25,7 @@ gcc-6 (6.3.0-3) UNRELEASED; urgency=medium
* Install the unprefixed man pages for gcc-ar, -nm and ranlib.
Closes: #851698.
- -- Matthias Klose <doko at debian.org> Thu, 12 Jan 2017 13:04:12 +0100
+ -- Matthias Klose <doko at debian.org> Wed, 18 Jan 2017 20:02:20 +0100
gcc-6 (6.3.0-2) unstable; urgency=medium
diff --git a/debian/patches/pr72813.diff b/debian/patches/pr72813.diff
deleted file mode 100644
index 5549f6a..0000000
--- a/debian/patches/pr72813.diff
+++ /dev/null
@@ -1,60 +0,0 @@
-# DP: Fix PR c++/72813, taken from the trunk.
-
-gcc/c/
-
-2017-01-11 Jakub Jelinek <jakub at redhat.com>
-
- PR c++/72813
- * c-decl.c (pop_file_scope): Set flag_syntax_only to 1 after writing
- PCH file.
-
-gcc/
-
-2017-01-11 Jakub Jelinek <jakub at redhat.com>
-
- PR c++/72813
- * gcc.c (default_compilers): Don't add -o %g.s for -S -save-temps
- of c-header.
-
-gcc/cp/
-
-2017-01-11 Jakub Jelinek <jakub at redhat.com>
-
- PR c++/72813
- * decl2.c (c_parse_final_cleanups): Set flag_syntax_only to 1 after
- writing PCH file.
-
-
---- a/src/gcc/c/c-decl.c
-+++ b/src/gcc/c/c-decl.c
-@@ -1420,6 +1420,8 @@
- if (pch_file)
- {
- c_common_write_pch ();
-+ /* Ensure even the callers don't try to finalize the CU. */
-+ flag_syntax_only = 1;
- return;
- }
-
---- a/src/gcc/gcc.c
-+++ b/src/gcc/gcc.c
-@@ -1328,7 +1328,7 @@
- %(cpp_options) -o %{save-temps*:%b.i} %{!save-temps*:%g.i} \n\
- cc1 -fpreprocessed %{save-temps*:%b.i} %{!save-temps*:%g.i} \
- %(cc1_options)\
-- %{!fsyntax-only:-o %g.s \
-+ %{!fsyntax-only:%{!S:-o %g.s} \
- %{!fdump-ada-spec*:%{!o*:--output-pch=%i.gch}\
- %W{o*:--output-pch=%*}}%V}}\
- %{!save-temps*:%{!traditional-cpp:%{!no-integrated-cpp:\
---- a/src/gcc/cp/decl2.c
-+++ b/src/gcc/cp/decl2.c
-@@ -4461,6 +4461,8 @@
- DECL_ASSEMBLER_NAME (node->decl);
- c_common_write_pch ();
- dump_tu ();
-+ /* Ensure even the callers don't try to finalize the CU. */
-+ flag_syntax_only = 1;
- return;
- }
-
diff --git a/debian/patches/pr79044.diff b/debian/patches/pr79044.diff
deleted file mode 100644
index 1e8b235..0000000
--- a/debian/patches/pr79044.diff
+++ /dev/null
@@ -1,71 +0,0 @@
-# DP: Fix PR target/79044 (ICE in swap optimization).
-
-gcc/
-
-2017-01-10 Bill Schmidt <wschmidt at linux.vnet.ibm.com>
-
- PR target/79044
- * config/rs6000/rs6000.c (insn_is_swappable_p): Mark
- element-reversing loads and stores as not swappable.
-
-gcc/testsuite/
-
-2017-01-10 Bill Schmidt <wschmidt at linux.vnet.ibm.com>
-
- PR target/79044
- * gcc.target/powerpc/swaps-p8-26.c: New.
-
-
---- a/src/gcc/config/rs6000/rs6000.c
-+++ b/src/gcc/config/rs6000/rs6000.c
-@@ -38657,6 +38657,12 @@ insn_is_swappable_p (swap_web_entry *insn_entry, r
- {
- if (GET_CODE (body) == SET)
- {
-+ rtx rhs = SET_SRC (body);
-+ /* Even without a swap, the RHS might be a vec_select for, say,
-+ a byte-reversing load. */
-+ if (GET_CODE (rhs) != MEM)
-+ return 0;
-+
- *special = SH_NOSWAP_LD;
- return 1;
- }
-@@ -38668,6 +38674,12 @@ insn_is_swappable_p (swap_web_entry *insn_entry, r
- {
- if (GET_CODE (body) == SET && GET_CODE (SET_SRC (body)) != UNSPEC)
- {
-+ rtx lhs = SET_DEST (body);
-+ /* Even without a swap, the LHS might be a vec_select for, say,
-+ a byte-reversing store. */
-+ if (GET_CODE (lhs) != MEM)
-+ return 0;
-+
- *special = SH_NOSWAP_ST;
- return 1;
- }
---- a/src/gcc/testsuite/gcc.target/powerpc/swaps-p8-26.c
-+++ b/src/gcc/testsuite/gcc.target/powerpc/swaps-p8-26.c
-@@ -0,0 +1,21 @@
-+/* { dg-do compile { target { powerpc64le-*-* } } } */
-+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
-+/* { dg-options "-mcpu=power8 -O3 " } */
-+/* { dg-final { scan-assembler-times "lxvw4x" 2 } } */
-+/* { dg-final { scan-assembler "stxvw4x" } } */
-+/* { dg-final { scan-assembler-not "xxpermdi" } } */
-+
-+/* Verify that swap optimization does not interfere with element-reversing
-+ loads and stores. */
-+
-+/* Test case to resolve PR79044. */
-+
-+#include <altivec.h>
-+
-+void pr79044 (float *x, float *y, float *z)
-+{
-+ vector float a = __builtin_vec_xl (0, x);
-+ vector float b = __builtin_vec_xl (0, y);
-+ vector float c = __builtin_vec_mul (a, b);
-+ __builtin_vec_xst (c, 0, z);
-+}
-
diff --git a/debian/patches/svn-updates.diff b/debian/patches/svn-updates.diff
index 4285db3..c786d78 100644
--- a/debian/patches/svn-updates.diff
+++ b/debian/patches/svn-updates.diff
@@ -1,10 +1,10 @@
-# DP: updates from the 6 branch upto 20170112 (r244350).
+# DP: updates from the 6 branch upto 20170118 (r244586).
last_update()
{
cat > ${dir}LAST_UPDATED <EOF
-Thu Jan 12 12:40:08 CET 2017
-Thu Jan 12 11:40:08 UTC 2017 (revision 244350)
+Wed Jan 18 19:34:31 CET 2017
+Wed Jan 18 18:34:31 UTC 2017 (revision 244586)
EOF
}
@@ -65,6 +65,32 @@ Index: libgomp/testsuite/libgomp.oacc-c-c++-common/crash-1.c
+
+ return 0;
+}
+Index: libstdc++-v3/include/std/tuple
+===================================================================
+--- a/src/libstdc++-v3/include/std/tuple (.../tags/gcc_6_3_0_release)
++++ b/src/libstdc++-v3/include/std/tuple (.../branches/gcc-6-branch)
+@@ -923,7 +923,9 @@
+ enable_if<_TMC::template
+ _MoveConstructibleTuple<_U1, _U2>()
+ && _TMC::template
+- _ImplicitlyMoveConvertibleTuple<_U1, _U2>(),
++ _ImplicitlyMoveConvertibleTuple<_U1, _U2>()
++ && !is_same<typename decay<_U1>::type,
++ allocator_arg_t>::value,
+ bool>::type = true>
+ constexpr tuple(_U1&& __a1, _U2&& __a2)
+ : _Inherited(std::forward<_U1>(__a1), std::forward<_U2>(__a2)) { }
+@@ -932,7 +934,9 @@
+ enable_if<_TMC::template
+ _MoveConstructibleTuple<_U1, _U2>()
+ && !_TMC::template
+- _ImplicitlyMoveConvertibleTuple<_U1, _U2>(),
++ _ImplicitlyMoveConvertibleTuple<_U1, _U2>()
++ && !is_same<typename decay<_U1>::type,
++ allocator_arg_t>::value,
+ bool>::type = false>
+ explicit constexpr tuple(_U1&& __a1, _U2&& __a2)
+ : _Inherited(std::forward<_U1>(__a1), std::forward<_U2>(__a2)) { }
Index: libstdc++-v3/include/std/thread
===================================================================
--- a/src/libstdc++-v3/include/std/thread (.../tags/gcc_6_3_0_release)
@@ -183,11 +209,143 @@ Index: libstdc++-v3/include/bits/predefined_ops.h
_Iter_negate(_Predicate __pred)
: _M_pred(__pred)
{ }
+Index: libstdc++-v3/include/bits/list.tcc
+===================================================================
+--- a/src/libstdc++-v3/include/bits/list.tcc (.../tags/gcc_6_3_0_release)
++++ b/src/libstdc++-v3/include/bits/list.tcc (.../branches/gcc-6-branch)
+@@ -380,26 +380,36 @@
+ // 300. list::merge() specification incomplete
+ if (this != std::__addressof(__x))
+ {
+- _M_check_equal_allocators(__x);
++ _M_check_equal_allocators(__x);
+
+ iterator __first1 = begin();
+ iterator __last1 = end();
+ iterator __first2 = __x.begin();
+ iterator __last2 = __x.end();
+- while (__first1 != __last1 && __first2 != __last2)
+- if (*__first2 < *__first1)
+- {
+- iterator __next = __first2;
+- _M_transfer(__first1, __first2, ++__next);
+- __first2 = __next;
+- }
+- else
+- ++__first1;
+- if (__first2 != __last2)
+- _M_transfer(__last1, __first2, __last2);
++ size_t __orig_size = __x.size();
++ __try {
++ while (__first1 != __last1 && __first2 != __last2)
++ if (*__first2 < *__first1)
++ {
++ iterator __next = __first2;
++ _M_transfer(__first1, __first2, ++__next);
++ __first2 = __next;
++ }
++ else
++ ++__first1;
++ if (__first2 != __last2)
++ _M_transfer(__last1, __first2, __last2);
+
+- this->_M_inc_size(__x._M_get_size());
+- __x._M_set_size(0);
++ this->_M_inc_size(__x._M_get_size());
++ __x._M_set_size(0);
++ }
++ __catch(...)
++ {
++ size_t __dist = distance(__first2, __last2);
++ this->_M_inc_size(__orig_size - __dist);
++ __x._M_set_size(__dist);
++ __throw_exception_again;
++ }
+ }
+ }
+
+@@ -423,20 +433,31 @@
+ iterator __last1 = end();
+ iterator __first2 = __x.begin();
+ iterator __last2 = __x.end();
+- while (__first1 != __last1 && __first2 != __last2)
+- if (__comp(*__first2, *__first1))
+- {
+- iterator __next = __first2;
+- _M_transfer(__first1, __first2, ++__next);
+- __first2 = __next;
+- }
+- else
+- ++__first1;
+- if (__first2 != __last2)
+- _M_transfer(__last1, __first2, __last2);
++ size_t __orig_size = __x.size();
++ __try
++ {
++ while (__first1 != __last1 && __first2 != __last2)
++ if (__comp(*__first2, *__first1))
++ {
++ iterator __next = __first2;
++ _M_transfer(__first1, __first2, ++__next);
++ __first2 = __next;
++ }
++ else
++ ++__first1;
++ if (__first2 != __last2)
++ _M_transfer(__last1, __first2, __last2);
+
+- this->_M_inc_size(__x._M_get_size());
+- __x._M_set_size(0);
++ this->_M_inc_size(__x._M_get_size());
++ __x._M_set_size(0);
++ }
++ __catch(...)
++ {
++ size_t __dist = distance(__first2, __last2);
++ this->_M_inc_size(__orig_size - __dist);
++ __x._M_set_size(__dist);
++ __throw_exception_again;
++ }
+ }
+ }
+
Index: libstdc++-v3/ChangeLog
===================================================================
--- a/src/libstdc++-v3/ChangeLog (.../tags/gcc_6_3_0_release)
+++ b/src/libstdc++-v3/ChangeLog (.../branches/gcc-6-branch)
-@@ -1,3 +1,21 @@
+@@ -1,3 +1,53 @@
++2017-01-16 Ville Voutilainen <ville.voutilainen at gmail.com>
++
++ Backport from mainline
++ 2017-01-16 Ville Voutilainen <ville.voutilainen at gmail.com>
++
++ PR libstdc++/78389
++ * include/bits/list.tcc (merge(list&&)): Fix backwards size adjustments.
++ (merge(list&&, _StrictWeakOrdering)): Likewise.
++ * testsuite/23_containers/list/operations/78389.cc: Add
++ better test for the sizes.
++
++2017-01-15 Ville Voutilainen <ville.voutilainen at gmail.com>
++
++ Backport from mainline
++ 2017-01-13 Ville Voutilainen <ville.voutilainen at gmail.com>
++
++ PR libstdc++/78389
++ * include/bits/list.tcc (merge(list&&)):
++ Adjust list sizes if the comparator throws.
++ (merge(list&&, _StrictWeakOrdering)): Likewise.
++ * testsuite/23_containers/list/operations/78389.cc: New.
++
++2017-01-15 Ville Voutilainen <ville.voutilainen at gmail.com>
++
++ Backport from mainline
++ 2016-12-19 Ville Voutilainen <ville.voutilainen at gmail.com>
++
++ Make the perfect-forwarding constructor of a two-element tuple
++ sfinae away when the first argument is an allocator_arg.
++ * include/std/tuple (tuple(_U1&&, _U2&&)): Constrain.
++ * testsuite/20_util/tuple/cons/allocator_with_any.cc: New.
++
+2017-01-06 Jonathan Wakely <jwakely at redhat.com>
+
+ Backport from mainline
@@ -288,6 +446,132 @@ Index: libstdc++-v3/testsuite/30_threads/thread/cons/lwg2097.cc
+static_assert( !is_constructible<thread, thread&>::value, "" );
+static_assert( !is_constructible<thread, const thread&>::value, "" );
+static_assert( !is_constructible<thread, const thread>::value, "" );
+Index: libstdc++-v3/testsuite/23_containers/list/operations/78389.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/23_containers/list/operations/78389.cc (.../tags/gcc_6_3_0_release)
++++ b/src/libstdc++-v3/testsuite/23_containers/list/operations/78389.cc (.../branches/gcc-6-branch)
+@@ -0,0 +1,74 @@
++// { dg-do run { target c++11 } }
++
++// 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/>.
++
++// 23.2.2.4 list operations [lib.list.ops]
++
++#include <testsuite_hooks.h>
++
++#include <list>
++
++struct ThrowingComparator
++{
++ unsigned int throw_after = 0;
++ unsigned int count = 0;
++ bool operator()(int, int) {
++ if (++count >= throw_after) {
++ throw 666;
++ }
++ return true;
++ }
++};
++
++struct X
++{
++ X() = default;
++ X(int) {}
++};
++
++unsigned int throw_after_X = 0;
++unsigned int count_X = 0;
++
++bool operator<(const X&, const X&) {
++ if (++count_X >= throw_after_X) {
++ throw 666;
++ }
++ return true;
++}
++
++
++int main()
++{
++ std::list<int> a{1, 2, 3, 4};
++ std::list<int> b{5, 6, 7, 8, 9, 10, 11, 12};
++ try {
++ a.merge(b, ThrowingComparator{4});
++ } catch (...) {
++ }
++ VERIFY(a.size() == std::distance(a.begin(), a.end()) &&
++ b.size() == std::distance(b.begin(), b.end()));
++ std::list<X> ax{1, 2, 3, 4};
++ std::list<X> bx{5, 6, 7, 8, 9, 10, 11, 12};
++ throw_after_X = 4;
++ try {
++ ax.merge(bx);
++ } catch (...) {
++ }
++ VERIFY(ax.size() == std::distance(ax.begin(), ax.end()) &&
++ bx.size() == std::distance(bx.begin(), bx.end()));
++}
+Index: libstdc++-v3/testsuite/20_util/tuple/cons/allocator_with_any.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/20_util/tuple/cons/allocator_with_any.cc (.../tags/gcc_6_3_0_release)
++++ b/src/libstdc++-v3/testsuite/20_util/tuple/cons/allocator_with_any.cc (.../branches/gcc-6-branch)
+@@ -0,0 +1,42 @@
++// { dg-do run { target c++14 } }
++
++// Copyright (C) 2016 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/>.
++
++
++// NOTE: This makes use of the fact that we know how moveable
++// is implemented on tuple. If the implementation changed
++// this test may begin to fail.
++
++#include <tuple>
++#include <experimental/any>
++#include <testsuite_hooks.h>
++
++using std::experimental::any;
++
++void test01()
++{
++ std::tuple<any, any> t(std::allocator_arg,
++ std::allocator<any>{});
++ VERIFY(std::get<0>(t).empty());
++ VERIFY(std::get<1>(t).empty());
++}
++
++int main()
++{
++ test01();
++}
Index: configure.ac
===================================================================
--- a/src/configure.ac (.../tags/gcc_6_3_0_release)
@@ -447,7 +731,7 @@ Index: gcc/DATESTAMP
+++ b/src/gcc/DATESTAMP (.../branches/gcc-6-branch)
@@ -1 +1 @@
-20161221
-+20170112
++20170118
Index: gcc/postreload.c
===================================================================
--- a/src/gcc/postreload.c (.../tags/gcc_6_3_0_release)
@@ -636,7 +920,44 @@ Index: gcc/ChangeLog
===================================================================
--- a/src/gcc/ChangeLog (.../tags/gcc_6_3_0_release)
+++ b/src/gcc/ChangeLog (.../branches/gcc-6-branch)
-@@ -1,3 +1,219 @@
+@@ -1,3 +1,256 @@
++2017-01-17 Jakub Jelinek <jakub at redhat.com>
++
++ PR debug/78839
++ * dwarf2out.c (field_byte_offset): Restore the
++ PCC_BITFIELD_TYPE_MATTERS behavior for INTEGER_CST DECL_FIELD_OFFSET
++ and DECL_FIELD_BIT_OFFSET. Use fold_build2 instead of build2 + fold.
++ (analyze_variants_discr, gen_variant_part): Use fold_build2 instead
++ of build2 + fold.
++
++2017-01-17 Thomas Preud'homme <thomas.preudhomme at arm.com>
++
++ Backport from mainline
++ 2016-12-07 Thomas Preud'homme <thomas.preudhomme at arm.com>
++
++ PR rtl-optimization/78617
++ * lra-remat.c (do_remat): Initialize live_hard_regs from live in
++ registers, also setting hard registers mapped to pseudo registers.
++
++2017-01-13 Christophe Lyon <christophe.lyon at linaro.org>
++
++ Backport from mainline r244320.
++ 2017-01-11 Christophe Lyon <christophe.lyon at linaro.org>
++
++ PR target/78253
++ * config/arm/arm.c (legitimize_pic_address): Handle reference to
++ weak symbol.
++ (arm_assemble_integer): Likewise.
++
++2017-01-12 Bill Schmidt <wschmidt at linux.vnet.ibm.com>
++
++ Backport from mainline
++ 2017-01-12 Bill Schmidt <wschmidt at linux.vnet.ibm.com>
++
++ PR target/79044
++ * config/rs6000/rs6000.c (insn_is_swappable_p): Mark
++ element-reversing loads and stores as not swappable.
++
+2017-01-11 Uros Bizjak <ubizjak at gmail.com>
+
+ * config/i386/i386.c (memory_address_length): Increase len
@@ -856,6 +1177,32 @@ Index: gcc/ChangeLog
2016-12-21 Release Manager
* GCC 6.3.0 released.
+Index: gcc/testsuite/gcc.target/powerpc/swaps-p8-26.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/powerpc/swaps-p8-26.c (.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/gcc.target/powerpc/swaps-p8-26.c (.../branches/gcc-6-branch)
+@@ -0,0 +1,21 @@
++/* { dg-do compile { target { powerpc64le-*-* } } } */
++/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
++/* { dg-options "-mcpu=power8 -O3 " } */
++/* { dg-final { scan-assembler-times "lxvw4x" 2 } } */
++/* { dg-final { scan-assembler "stxvw4x" } } */
++/* { dg-final { scan-assembler-not "xxpermdi" } } */
++
++/* Verify that swap optimization does not interfere with element-reversing
++ loads and stores. */
++
++/* Test case to resolve PR79044. */
++
++#include <altivec.h>
++
++void pr79044 (float *x, float *y, float *z)
++{
++ vector float a = __builtin_vec_xl (0, x);
++ vector float b = __builtin_vec_xl (0, y);
++ vector float c = __builtin_vec_mul (a, b);
++ __builtin_vec_xst (c, 0, z);
++}
Index: gcc/testsuite/gcc.target/arm/pr78255-1.c
===================================================================
--- a/src/gcc/testsuite/gcc.target/arm/pr78255-1.c (.../tags/gcc_6_3_0_release)
@@ -1004,6 +1351,57 @@ Index: gcc/testsuite/gcc.target/aarch64/pr78255.c
+}
+
+/* { dg-final { scan-assembler "b\\s+bar" } } */
+Index: gcc/testsuite/gfortran.dg/gomp/pr78866-1.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/gomp/pr78866-1.f90 (.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/gfortran.dg/gomp/pr78866-1.f90 (.../branches/gcc-6-branch)
+@@ -0,0 +1,19 @@
++! PR fortran/78866
++! { dg-do compile }
++
++subroutine pr78866(x)
++ integer :: x(*)
++!$omp target map(x) ! { dg-error "Assumed size array" }
++ x(1) = 1
++!$omp end target
++!$omp target data map(tofrom: x) ! { dg-error "Assumed size array" }
++!$omp target update to(x) ! { dg-error "Assumed size array" }
++!$omp target update from(x) ! { dg-error "Assumed size array" }
++!$omp end target data
++!$omp target map(x(:23)) ! { dg-bogus "Assumed size array" }
++ x(1) = 1
++!$omp end target
++!$omp target map(x(:)) ! { dg-error "upper bound of assumed size array section" }
++ x(1) = 1 ! { dg-error "not a proper array section" "" { target *-*-* } .-1 }
++!$omp end target
++end
+Index: gcc/testsuite/gfortran.dg/gomp/pr78866-2.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/gomp/pr78866-2.f90 (.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/gfortran.dg/gomp/pr78866-2.f90 (.../branches/gcc-6-branch)
+@@ -0,0 +1,9 @@
++! PR fortran/78866
++! { dg-do compile }
++
++subroutine pr78866(x)
++ integer :: x(*)
++!$omp target ! { dg-error "implicit mapping of assumed size array" }
++ x(1) = 1
++!$omp end target
++end
+Index: gcc/testsuite/gfortran.dg/gomp/map-1.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/gomp/map-1.f90 (.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/gfortran.dg/gomp/map-1.f90 (.../branches/gcc-6-branch)
+@@ -70,7 +70,7 @@
+ ! { dg-error "Rightmost upper bound of assumed size array section not specified" "" { target *-*-* } 68 }
+ ! { dg-error "'aas' in MAP clause at \\\(1\\\) is not a proper array section" "" { target *-*-* } 68 }
+
+- !$omp target map(aas) ! { dg-error "The upper bound in the last dimension must appear" "" { xfail *-*-* } }
++ !$omp target map(aas) ! { dg-error "Assumed size array" }
+ !$omp end target
+
+ !$omp target map(aas(5:7))
Index: gcc/testsuite/gfortran.dg/fimplicit_none_2.f90
===================================================================
--- a/src/gcc/testsuite/gfortran.dg/fimplicit_none_2.f90 (.../tags/gcc_6_3_0_release)
@@ -1047,6 +1445,36 @@ Index: gcc/testsuite/gcc.c-torture/execute/pr77767.c
+ foo (1, e, 1, e);
+ return 0;
+}
+Index: gcc/testsuite/gcc.c-torture/execute/pr78617.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.c-torture/execute/pr78617.c (.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/gcc.c-torture/execute/pr78617.c (.../branches/gcc-6-branch)
+@@ -0,0 +1,25 @@
++int a = 0;
++int d = 1;
++int f = 1;
++
++int fn1() {
++ return a || 1 >> a;
++}
++
++int fn2(int p1, int p2) {
++ return p2 >= 2 ? p1 : p1 >> 1;
++}
++
++int fn3(int p1) {
++ return d ^ p1;
++}
++
++int fn4(int p1, int p2) {
++ return fn3(!d > fn2((f = fn1() - 1000) || p2, p1));
++}
++
++int main() {
++ if (fn4(0, 0) != 1)
++ __builtin_abort ();
++ return 0;
++}
Index: gcc/testsuite/gcc.dg/goacc/loop-processing-1.c
===================================================================
--- a/src/gcc/testsuite/gcc.dg/goacc/loop-processing-1.c (.../tags/gcc_6_3_0_release)
@@ -1080,6 +1508,28 @@ Index: gcc/testsuite/gcc.dg/spellcheck-options-13.c
+/* { dg-do compile } */
+/* { dg-options "-fsanitize" } */
+/* { dg-error "unrecognized command line option .-fsanitize..$" "" { target *-*-* } 0 } */
+Index: gcc/testsuite/gcc.dg/lto/pr50199_0.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/lto/pr50199_0.c (.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/gcc.dg/lto/pr50199_0.c (.../branches/gcc-6-branch)
+@@ -0,0 +1,17 @@
++/* PR middle-end/50199 */
++/* { dg-lto-options {{-O2 -flto -fno-merge-constants --param=lto-min-partition=1}} } */
++
++__attribute__ ((noinline)) const char *
++foo (const char *x)
++{
++ return x;
++}
++
++int
++main ()
++{
++ const char *a = "ab";
++ if (a != foo (a))
++ __builtin_abort ();
++ return 0;
++}
Index: gcc/testsuite/gcc.dg/torture/pr71055.c
===================================================================
--- a/src/gcc/testsuite/gcc.dg/torture/pr71055.c (.../tags/gcc_6_3_0_release)
@@ -1154,7 +1604,52 @@ Index: gcc/testsuite/ChangeLog
===================================================================
--- a/src/gcc/testsuite/ChangeLog (.../tags/gcc_6_3_0_release)
+++ b/src/gcc/testsuite/ChangeLog (.../branches/gcc-6-branch)
-@@ -1,3 +1,99 @@
+@@ -1,3 +1,144 @@
++2017-01-17 Jakub Jelinek <jakub at redhat.com>
++
++ Backported from mainline
++ 2017-01-11 Jakub Jelinek <jakub at redhat.com>
++
++ PR c++/78341
++ * g++.dg/cpp0x/pr78341.C: New test.
++
++ PR middle-end/50199
++ * gcc.dg/lto/pr50199_0.c: New test.
++
++ 2017-01-04 Jakub Jelinek <jakub at redhat.com>
++
++ PR c++/78949
++ * c-c++-common/Wunused-var-16.c: New test.
++
++ PR c++/78693
++ * g++.dg/cpp0x/pr78693.C: New test.
++
++ PR c++/71182
++ * g++.dg/cpp0x/pr71182.C: New test.
++
++ 2016-12-21 Jakub Jelinek <jakub at redhat.com>
++
++ PR fortran/78866
++ * gfortran.dg/gomp/map-1.f90: Add expected error.
++ * gfortran.dg/gomp/pr78866-1.f90: New test.
++ * gfortran.dg/gomp/pr78866-2.f90: New test.
++
++2017-01-17 Thomas Preud'homme <thomas.preudhomme at arm.com>
++
++ Backport from mainline
++ 2016-12-07 Thomas Preud'homme <thomas.preudhomme at arm.com>
++
++ PR rtl-optimization/78617
++ * gcc.c-torture/execute/pr78617.c: New test.
++
++2017-01-12 Bill Schmidt <wschmidt at linux.vnet.ibm.com>
++
++ Backport from mainline
++ 2017-01-12 Bill Schmidt <wschmidt at linux.vnet.ibm.com>
++
++ PR target/79044
++ * gcc.target/powerpc/swaps-p8-26.c: New.
++
+2017-01-11 Nathan Sidwell <nathan at acm.org>
+
+ PR c++/77812
@@ -1277,6 +1772,68 @@ Index: gcc/testsuite/g++.dg/pr77812.C
+{
+}
+struct g G;
+Index: gcc/testsuite/g++.dg/cpp0x/pr78693.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/cpp0x/pr78693.C (.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/g++.dg/cpp0x/pr78693.C (.../branches/gcc-6-branch)
+@@ -0,0 +1,31 @@
++// PR c++/78693
++// { dg-do compile { target c++11 } }
++
++template <class T>
++void
++foo (T t)
++{
++ auto i = t, j = 1; // { dg-bogus "inconsistent deduction" }
++}
++
++template <class T>
++void
++bar (T t)
++{
++ auto i = 1, j = t, k = 2; // { dg-bogus "inconsistent deduction" }
++}
++
++template <class T, class U>
++void
++foo (T t, U u)
++{
++ auto i = t, j = u; // { dg-bogus "inconsistent deduction" }
++}
++
++void
++foo ()
++{
++ foo (0);
++ bar (0);
++ foo (1, 2);
++}
+Index: gcc/testsuite/g++.dg/cpp0x/pr78341.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/cpp0x/pr78341.C (.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/g++.dg/cpp0x/pr78341.C (.../branches/gcc-6-branch)
+@@ -0,0 +1,4 @@
++// PR c++/78341
++// { dg-do compile { target c++11 } }
++
++alignas (alignas double // { dg-error "" }
+Index: gcc/testsuite/g++.dg/cpp0x/pr71182.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/cpp0x/pr71182.C (.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/g++.dg/cpp0x/pr71182.C (.../branches/gcc-6-branch)
+@@ -0,0 +1,12 @@
++// PR c++/71182
++// { dg-do compile { target c++11 } }
++
++class A {
++ template <typename> void As();
++};
++template <typename T> class B : A {
++ void f() {
++ A *g ;
++ g ? g->As<T>() : nullptr;
++ }
++};
Index: gcc/testsuite/g++.dg/ipa/pr77905.C
===================================================================
--- a/src/gcc/testsuite/g++.dg/ipa/pr77905.C (.../tags/gcc_6_3_0_release)
@@ -1303,11 +1860,67 @@ Index: gcc/testsuite/g++.dg/ipa/pr77905.C
+B::B() : A(1) {}
+
+C::C(int) : A(1) {}
+Index: gcc/testsuite/c-c++-common/Wunused-var-16.c
+===================================================================
+--- a/src/gcc/testsuite/c-c++-common/Wunused-var-16.c (.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/c-c++-common/Wunused-var-16.c (.../branches/gcc-6-branch)
+@@ -0,0 +1,15 @@
++/* PR c++/78949 */
++/* { dg-do compile } */
++/* { dg-options "-Wunused" } */
++
++typedef unsigned char V __attribute__((vector_size(16)));
++V v;
++
++void
++foo ()
++{
++ V y = {};
++ V x = {}; // { dg-bogus "set but not used" }
++ y &= ~x;
++ v = y;
++}
+Index: gcc/cp/typeck.c
+===================================================================
+--- a/src/gcc/cp/typeck.c (.../tags/gcc_6_3_0_release)
++++ b/src/gcc/cp/typeck.c (.../branches/gcc-6-branch)
+@@ -5848,6 +5848,8 @@
+ errstring = _("wrong type argument to bit-complement");
+ else if (!noconvert && CP_INTEGRAL_TYPE_P (TREE_TYPE (arg)))
+ arg = cp_perform_integral_promotions (arg, complain);
++ else if (!noconvert && VECTOR_TYPE_P (TREE_TYPE (arg)))
++ arg = mark_rvalue_use (arg);
+ break;
+
+ case ABS_EXPR:
Index: gcc/cp/ChangeLog
===================================================================
--- a/src/gcc/cp/ChangeLog (.../tags/gcc_6_3_0_release)
+++ b/src/gcc/cp/ChangeLog (.../branches/gcc-6-branch)
-@@ -1,3 +1,9 @@
+@@ -1,3 +1,32 @@
++2017-01-17 Jakub Jelinek <jakub at redhat.com>
++
++ Backported from mainline
++ 2017-01-11 Jakub Jelinek <jakub at redhat.com>
++
++ PR c++/78341
++ * parser.c (cp_parser_std_attribute_spec): Remove over-eager
++ assertion. Formatting fix.
++
++ 2017-01-04 Jakub Jelinek <jakub at redhat.com>
++
++ PR c++/78949
++ * typeck.c (cp_build_unary_op): Call mark_rvalue_use on arg if it has
++ vector type.
++
++ PR c++/78693
++ * parser.c (cp_parser_simple_declaration): Only complain about
++ inconsistent auto deduction if auto_result doesn't use auto.
++
++ PR c++/71182
++ * parser.c (cp_lexer_previous_token): Use vec_safe_address in the
++ assertion, as lexer->buffer may be NULL.
++
+2017-01-11 Nathan Sidwell <nathan at acm.org>
+
+ PR c++/77812
@@ -1317,6 +1930,46 @@ Index: gcc/cp/ChangeLog
2016-12-21 Release Manager
* GCC 6.3.0 released.
+Index: gcc/cp/parser.c
+===================================================================
+--- a/src/gcc/cp/parser.c (.../tags/gcc_6_3_0_release)
++++ b/src/gcc/cp/parser.c (.../branches/gcc-6-branch)
+@@ -762,7 +762,7 @@
+ /* Skip past purged tokens. */
+ while (tp->purged_p)
+ {
+- gcc_assert (tp != lexer->buffer->address ());
++ gcc_assert (tp != vec_safe_address (lexer->buffer));
+ tp--;
+ }
+
+@@ -12406,9 +12406,11 @@
+ if (cp_parser_error_occurred (parser))
+ goto done;
+
+- if (auto_result)
++ if (auto_result
++ && (!processing_template_decl || !type_uses_auto (auto_result)))
+ {
+- if (last_type && last_type != error_mark_node
++ if (last_type
++ && last_type != error_mark_node
+ && !same_type_p (auto_result, last_type))
+ {
+ /* If the list of declarators contains more than one declarator,
+@@ -24140,11 +24142,7 @@
+
+ if (!cp_parser_parse_definitely (parser))
+ {
+- gcc_assert (alignas_expr == error_mark_node
+- || alignas_expr == NULL_TREE);
+-
+- alignas_expr =
+- cp_parser_assignment_expression (parser);
++ alignas_expr = cp_parser_assignment_expression (parser);
+ if (alignas_expr == error_mark_node)
+ cp_parser_skip_to_end_of_statement (parser);
+ if (alignas_expr == NULL_TREE
Index: gcc/cp/name-lookup.c
===================================================================
--- a/src/gcc/cp/name-lookup.c (.../tags/gcc_6_3_0_release)
@@ -1373,7 +2026,103 @@ Index: gcc/dwarf2out.c
===================================================================
--- a/src/gcc/dwarf2out.c (.../tags/gcc_6_3_0_release)
+++ b/src/gcc/dwarf2out.c (.../branches/gcc-6-branch)
-@@ -23752,7 +23752,16 @@
+@@ -16615,10 +16615,6 @@
+ field_byte_offset (const_tree decl, struct vlr_context *ctx,
+ HOST_WIDE_INT *cst_offset)
+ {
+- offset_int object_offset_in_bits;
+- offset_int object_offset_in_bytes;
+- offset_int bitpos_int;
+- bool is_byte_offset_cst, is_bit_offset_cst;
+ tree tree_result;
+ dw_loc_list_ref loc_result;
+
+@@ -16629,12 +16625,9 @@
+ else
+ gcc_assert (TREE_CODE (decl) == FIELD_DECL);
+
+- is_bit_offset_cst = TREE_CODE (DECL_FIELD_BIT_OFFSET (decl)) != INTEGER_CST;
+- is_byte_offset_cst = TREE_CODE (DECL_FIELD_OFFSET (decl)) != INTEGER_CST;
+-
+ /* We cannot handle variable bit offsets at the moment, so abort if it's the
+ case. */
+- if (is_bit_offset_cst)
++ if (TREE_CODE (DECL_FIELD_BIT_OFFSET (decl)) != INTEGER_CST)
+ return NULL;
+
+ #ifdef PCC_BITFIELD_TYPE_MATTERS
+@@ -16641,8 +16634,12 @@
+ /* We used to handle only constant offsets in all cases. Now, we handle
+ properly dynamic byte offsets only when PCC bitfield type doesn't
+ matter. */
+- if (PCC_BITFIELD_TYPE_MATTERS && is_byte_offset_cst && is_bit_offset_cst)
++ if (PCC_BITFIELD_TYPE_MATTERS
++ && TREE_CODE (DECL_FIELD_OFFSET (decl)) == INTEGER_CST)
+ {
++ offset_int object_offset_in_bits;
++ offset_int object_offset_in_bytes;
++ offset_int bitpos_int;
+ tree type;
+ tree field_size_tree;
+ offset_int deepest_bitpos;
+@@ -16737,13 +16734,23 @@
+ object_offset_in_bits
+ = round_up_to_align (object_offset_in_bits, decl_align_in_bits);
+ }
++
++ object_offset_in_bytes
++ = wi::lrshift (object_offset_in_bits, LOG2_BITS_PER_UNIT);
++ if (ctx->variant_part_offset == NULL_TREE)
++ {
++ *cst_offset = object_offset_in_bytes.to_shwi ();
++ return NULL;
++ }
++ tree_result = wide_int_to_tree (sizetype, object_offset_in_bytes);
+ }
++ else
+ #endif /* PCC_BITFIELD_TYPE_MATTERS */
++ tree_result = byte_position (decl);
+
+- tree_result = byte_position (decl);
+ if (ctx->variant_part_offset != NULL_TREE)
+- tree_result = fold (build2 (PLUS_EXPR, TREE_TYPE (tree_result),
+- ctx->variant_part_offset, tree_result));
++ tree_result = fold_build2 (PLUS_EXPR, TREE_TYPE (tree_result),
++ ctx->variant_part_offset, tree_result);
+
+ /* If the byte offset is a constant, it's simplier to handle a native
+ constant rather than a DWARF expression. */
+@@ -22221,14 +22228,12 @@
+
+ if (!lower_cst_included)
+ lower_cst
+- = fold (build2 (PLUS_EXPR, TREE_TYPE (lower_cst),
+- lower_cst,
+- build_int_cst (TREE_TYPE (lower_cst), 1)));
++ = fold_build2 (PLUS_EXPR, TREE_TYPE (lower_cst), lower_cst,
++ build_int_cst (TREE_TYPE (lower_cst), 1));
+ if (!upper_cst_included)
+ upper_cst
+- = fold (build2 (MINUS_EXPR, TREE_TYPE (upper_cst),
+- upper_cst,
+- build_int_cst (TREE_TYPE (upper_cst), 1)));
++ = fold_build2 (MINUS_EXPR, TREE_TYPE (upper_cst), upper_cst,
++ build_int_cst (TREE_TYPE (upper_cst), 1));
+
+ if (!get_discr_value (lower_cst,
+ &new_node->dw_discr_lower_bound)
+@@ -22397,8 +22402,8 @@
+ we recurse. */
+
+ vlr_sub_ctx.variant_part_offset
+- = fold (build2 (PLUS_EXPR, TREE_TYPE (variant_part_offset),
+- variant_part_offset, byte_position (member)));
++ = fold_build2 (PLUS_EXPR, TREE_TYPE (variant_part_offset),
++ variant_part_offset, byte_position (member));
+ gen_variant_part (member, &vlr_sub_ctx, variant_die);
+ }
+ else
+@@ -23752,7 +23757,16 @@
{
dw_die_ref die = lookup_decl_die (decl);
if (die)
@@ -1520,6 +2269,57 @@ Index: gcc/expr.c
value, cleared, alias, reverse);
}
}
+Index: gcc/lra-remat.c
+===================================================================
+--- a/src/gcc/lra-remat.c (.../tags/gcc_6_3_0_release)
++++ b/src/gcc/lra-remat.c (.../branches/gcc-6-branch)
+@@ -1116,6 +1116,7 @@
+ static bool
+ do_remat (void)
+ {
++ unsigned regno;
+ rtx_insn *insn;
+ basic_block bb;
+ bitmap_head avail_cands;
+@@ -1123,12 +1124,21 @@
+ bool changed_p = false;
+ /* Living hard regs and hard registers of living pseudos. */
+ HARD_REG_SET live_hard_regs;
++ bitmap_iterator bi;
+
+ bitmap_initialize (&avail_cands, ®_obstack);
+ bitmap_initialize (&active_cands, ®_obstack);
+ FOR_EACH_BB_FN (bb, cfun)
+ {
+- REG_SET_TO_HARD_REG_SET (live_hard_regs, df_get_live_out (bb));
++ CLEAR_HARD_REG_SET (live_hard_regs);
++ EXECUTE_IF_SET_IN_BITMAP (df_get_live_in (bb), 0, regno, bi)
++ {
++ int hard_regno = regno < FIRST_PSEUDO_REGISTER
++ ? regno
++ : reg_renumber[regno];
++ if (hard_regno >= 0)
++ SET_HARD_REG_BIT (live_hard_regs, hard_regno);
++ }
+ bitmap_and (&avail_cands, &get_remat_bb_data (bb)->avin_cands,
+ &get_remat_bb_data (bb)->livein_cands);
+ /* Activating insns are always in the same block as their corresponding
+Index: gcc/fortran/openmp.c
+===================================================================
+--- a/src/gcc/fortran/openmp.c (.../tags/gcc_6_3_0_release)
++++ b/src/gcc/fortran/openmp.c (.../branches/gcc-6-branch)
+@@ -3530,6 +3530,11 @@
+ else
+ resolve_oacc_data_clauses (n->sym, n->where, name);
+ }
++ else if (list != OMP_CLAUSE_DEPEND
++ && n->sym->as
++ && n->sym->as->type == AS_ASSUMED_SIZE)
++ gfc_error ("Assumed size array %qs in %s clause at %L",
++ n->sym->name, name, &n->where);
+ }
+
+ if (list != OMP_LIST_DEPEND)
Index: gcc/fortran/decl.c
===================================================================
--- a/src/gcc/fortran/decl.c (.../tags/gcc_6_3_0_release)
@@ -1534,11 +2334,62 @@ Index: gcc/fortran/decl.c
|| e->symtree->n.sym->ns->parent->seen_implicit_none == 1))
{
gfc_free_expr (e);
+Index: gcc/fortran/trans-openmp.c
+===================================================================
+--- a/src/gcc/fortran/trans-openmp.c (.../tags/gcc_6_3_0_release)
++++ b/src/gcc/fortran/trans-openmp.c (.../branches/gcc-6-branch)
+@@ -37,6 +37,11 @@
+ #include "arith.h"
+ #include "omp-low.h"
+ #include "gomp-constants.h"
++#undef GCC_DIAG_STYLE
++#define GCC_DIAG_STYLE __gcc_tdiag__
++#include "diagnostic-core.h"
++#undef GCC_DIAG_STYLE
++#define GCC_DIAG_STYLE __gcc_gfc__
+
+ int ompws_flags;
+
+@@ -1028,6 +1033,21 @@
+ return;
+
+ tree decl = OMP_CLAUSE_DECL (c);
++
++ /* Assumed-size arrays can't be mapped implicitly, they have to be
++ mapped explicitly using array sections. */
++ if (TREE_CODE (decl) == PARM_DECL
++ && GFC_ARRAY_TYPE_P (TREE_TYPE (decl))
++ && GFC_TYPE_ARRAY_AKIND (TREE_TYPE (decl)) == GFC_ARRAY_UNKNOWN
++ && GFC_TYPE_ARRAY_UBOUND (TREE_TYPE (decl),
++ GFC_TYPE_ARRAY_RANK (TREE_TYPE (decl)) - 1)
++ == NULL)
++ {
++ error_at (OMP_CLAUSE_LOCATION (c),
++ "implicit mapping of assumed size array %qD", decl);
++ return;
++ }
++
+ tree c2 = NULL_TREE, c3 = NULL_TREE, c4 = NULL_TREE;
+ if (POINTER_TYPE_P (TREE_TYPE (decl)))
+ {
Index: gcc/fortran/ChangeLog
===================================================================
--- a/src/gcc/fortran/ChangeLog (.../tags/gcc_6_3_0_release)
+++ b/src/gcc/fortran/ChangeLog (.../branches/gcc-6-branch)
-@@ -1,3 +1,10 @@
+@@ -1,3 +1,23 @@
++2017-01-17 Jakub Jelinek <jakub at redhat.com>
++
++ Backported from mainline
++ 2016-12-21 Jakub Jelinek <jakub at redhat.com>
++
++ PR fortran/78866
++ * openmp.c (resolve_omp_clauses): Diagnose assumed size arrays in
++ OpenMP map, to and from clauses.
++ * trans-openmp.c: Include diagnostic-core.h, temporarily redefining
++ GCC_DIAG_STYLE to __gcc_tdiag__.
++ (gfc_omp_finish_clause): Diagnose implicitly mapped assumed size
++ arrays.
++
+2016-12-22 Thomas Koenig <tkoenig at gcc.gnu.org>
+
+ Backport from trunk
@@ -1549,6 +2400,40 @@ Index: gcc/fortran/ChangeLog
2016-12-21 Release Manager
* GCC 6.3.0 released.
+Index: gcc/lto/ChangeLog
+===================================================================
+--- a/src/gcc/lto/ChangeLog (.../tags/gcc_6_3_0_release)
++++ b/src/gcc/lto/ChangeLog (.../branches/gcc-6-branch)
+@@ -1,3 +1,12 @@
++2017-01-17 Jakub Jelinek <jakub at redhat.com>
++
++ Backported from mainline
++ 2017-01-11 Jakub Jelinek <jakub at redhat.com>
++
++ PR middle-end/50199
++ * lto-lang.c (lto_post_options): Force flag_merge_constants = 1
++ if it was 0.
++
+ 2016-12-21 Release Manager
+
+ * GCC 6.3.0 released.
+Index: gcc/lto/lto-lang.c
+===================================================================
+--- a/src/gcc/lto/lto-lang.c (.../tags/gcc_6_3_0_release)
++++ b/src/gcc/lto/lto-lang.c (.../branches/gcc-6-branch)
+@@ -852,6 +852,12 @@
+ support. */
+ flag_excess_precision_cmdline = EXCESS_PRECISION_FAST;
+
++ /* When partitioning, we can tear appart STRING_CSTs uses from the same
++ TU into multiple partitions. Without constant merging the constants
++ might not be equal at runtime. See PR50199. */
++ if (!flag_merge_constants)
++ flag_merge_constants = 1;
++
+ /* Initialize the compiler back end. */
+ return false;
+ }
Index: gcc/po/exgettext
===================================================================
--- a/src/gcc/po/exgettext (.../tags/gcc_6_3_0_release)
@@ -43385,6 +44270,32 @@ Index: gcc/config/rs6000/rs6000.c
}
emit_insn (gen_lshrdi3 (dest_di, shift_reg, GEN_INT (63)));
+@@ -38634,6 +38658,12 @@
+ {
+ if (GET_CODE (body) == SET)
+ {
++ rtx rhs = SET_SRC (body);
++ /* Even without a swap, the RHS might be a vec_select for, say,
++ a byte-reversing load. */
++ if (GET_CODE (rhs) != MEM)
++ return 0;
++
+ *special = SH_NOSWAP_LD;
+ return 1;
+ }
+@@ -38645,6 +38675,12 @@
+ {
+ if (GET_CODE (body) == SET && GET_CODE (SET_SRC (body)) != UNSPEC)
+ {
++ rtx lhs = SET_DEST (body);
++ /* Even without a swap, the LHS might be a vec_select for, say,
++ a byte-reversing store. */
++ if (GET_CODE (lhs) != MEM)
++ return 0;
++
+ *special = SH_NOSWAP_ST;
+ return 1;
+ }
Index: gcc/config/rs6000/rs6000.h
===================================================================
--- a/src/gcc/config/rs6000/rs6000.h (.../tags/gcc_6_3_0_release)
@@ -43464,6 +44375,42 @@ Index: gcc/config/rs6000/rs6000.md
(const_int 0)]
UNSPEC_SIGNBIT))]
"TARGET_POWERPC64 && TARGET_DIRECT_MOVE"
+Index: gcc/config/arm/arm.c
+===================================================================
+--- a/src/gcc/config/arm/arm.c (.../tags/gcc_6_3_0_release)
++++ b/src/gcc/config/arm/arm.c (.../branches/gcc-6-branch)
+@@ -6859,9 +6859,13 @@
+ same segment as the GOT. Unfortunately, the flexibility of linker
+ scripts means that we can't be sure of that in general, so assume
+ that GOTOFF is never valid on VxWorks. */
++ /* References to weak symbols cannot be resolved locally: they
++ may be overridden by a non-weak definition at link time. */
+ if ((GET_CODE (orig) == LABEL_REF
+- || (GET_CODE (orig) == SYMBOL_REF &&
+- SYMBOL_REF_LOCAL_P (orig)))
++ || (GET_CODE (orig) == SYMBOL_REF
++ && SYMBOL_REF_LOCAL_P (orig)
++ && (SYMBOL_REF_DECL (orig)
++ ? !DECL_WEAK (SYMBOL_REF_DECL (orig)) : 1)))
+ && NEED_GOT_RELOC
+ && arm_pic_data_is_text_relative)
+ insn = arm_pic_static_addr (orig, reg);
+@@ -22687,8 +22691,14 @@
+ {
+ /* See legitimize_pic_address for an explanation of the
+ TARGET_VXWORKS_RTP check. */
++ /* References to weak symbols cannot be resolved locally:
++ they may be overridden by a non-weak definition at link
++ time. */
+ if (!arm_pic_data_is_text_relative
+- || (GET_CODE (x) == SYMBOL_REF && !SYMBOL_REF_LOCAL_P (x)))
++ || (GET_CODE (x) == SYMBOL_REF
++ && (!SYMBOL_REF_LOCAL_P (x)
++ || (SYMBOL_REF_DECL (x)
++ ? DECL_WEAK (SYMBOL_REF_DECL (x)) : 0))))
+ fputs ("(GOT)", asm_out_file);
+ else
+ fputs ("(GOTOFF)", asm_out_file);
Index: gcc/config/arm/neon.md
===================================================================
--- a/src/gcc/config/arm/neon.md (.../tags/gcc_6_3_0_release)
diff --git a/debian/rules.conf b/debian/rules.conf
index 182c66d..a970fc8 100644
--- a/debian/rules.conf
+++ b/debian/rules.conf
@@ -392,7 +392,7 @@ else
endif
ISL_BUILD_DEP = libisl-dev,
-ifneq (,$(filter $(distrelease),jessie sid experimental))
+ifneq (,$(filter $(distrelease),jessie stretch sid experimental))
ISL_BUILD_DEP = libisl-dev (>= 0.14),
endif
@@ -633,9 +633,9 @@ NEXT_GCC_VERSION := $(shell echo $(GCC_VERSION) | \
awk -F. '{OFS="."; if (NF==2) $$3=1; else $$NF += 1; print}')
# first version with a new path component in gcc_lib_dir (i.e. GCC_VERSION
# or TARGET_ALIAS changes), or last version available for all architectures
-DEB_GCC_SOFT_VERSION := 6.1.1-2
-DEB_GCJ_SOFT_VERSION := 6.1.1-2
-DEB_GNAT_SOFT_VERSION := 6.1.1-2
+DEB_GCC_SOFT_VERSION := 6.3.0-1
+DEB_GCJ_SOFT_VERSION := 6.3.0-1
+DEB_GNAT_SOFT_VERSION := 6.3.0-1
ifeq ($(with_d),yes)
GDC_VERSION := $(BASE_VERSION)
diff --git a/debian/rules.patch b/debian/rules.patch
index d015d69..0ee63ef 100644
--- a/debian/rules.patch
+++ b/debian/rules.patch
@@ -106,8 +106,6 @@ debian_patches += \
CVE-2016-9841 \
CVE-2016-9842 \
CVE-2016-9843 \
- pr72813 \
- pr79044 \
libcc1-compiler-name \
ifeq ($(libstdcxx_abi),new)
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/reproducible/gcc-6.git
More information about the Reproducible-commits
mailing list