[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, &reg_obstack);
+   bitmap_initialize (&active_cands, &reg_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