1. 23 Aug, 2018 5 commits
  2. 22 Aug, 2018 31 commits
    • tree-ssa-dse.c (compute_trims): Avoid folding away undefined behaviour. · 36d2d101
      	* tree-ssa-dse.c (compute_trims): Avoid folding away undefined
      	behaviour.
      
      From-SVN: r263793
      Bernd Edlinger committed
    • Fix tests that fail in C++98 mode · f73a5316
      	* testsuite/23_containers/deque/capacity/max_size.cc: Fix test for
      	C++98 mode.
      	* testsuite/23_containers/deque/modifiers/assign/1.cc: Likewise.
      	* testsuite/23_containers/list/modifiers/assign/1.cc: Likewise.
      	* testsuite/23_containers/vector/bool/modifiers/assign/1.cc: Likewise.
      	* testsuite/23_containers/vector/capacity/max_size.cc: Likewise.
      	* testsuite/23_containers/vector/modifiers/assign/1.cc: Likewise.
      
      From-SVN: r263792
      Jonathan Wakely committed
    • PR libstdc++/87061 remove pmr type aliases for COW strings · 1bc7a28f
      The pmr aliases for basic_string and match_results are incompatible with
      the gcc4-compatible ABI because the Copy-On-Write basic_string class
      doesn't support C++11 allocators.
      
      	PR libstdc++/87061
      	* include/experimental/regex [!_GLIBCXX_USE_CXX11_ABI]
      	(experimental::pmr::match_results, experimental::pmr::cmatch)
      	(experimental::pmr::smatch, experimental::pmr::wcmatch)
      	(experimental::pmr::wsmatch): Do not declare for gcc4-compatible ABI,
      	because COW strings don't support C++11 allocator model.
      	* include/experimental/string [!_GLIBCXX_USE_CXX11_ABI]
      	(experimental::pmr::basic_string, experimental::pmr::string)
      	(experimental::pmr::u16string, experimental::pmr::u32string)
      	(experimental::pmr::wstring): Likewise.
      	* include/std/regex [!_GLIBCXX_USE_CXX11_ABI] (pmr::match_results)
      	(pmr::cmatch, pmr::smatch, pmr::wcmatch, pmr::wsmatch): Likewise.
      	* include/std/string [!_GLIBCXX_USE_CXX11_ABI] (pmr::basic_string)
      	(pmr::string, pmr::u16string, pmr::u32string, pmr::wstring): Likewise.
      	* testsuite/21_strings/basic_string/types/pmr_typedefs.cc: Require
      	cxx11-abi.
      	* testsuite/28_regex/match_results/pmr_typedefs.cc: Likewise.
      
      From-SVN: r263791
      Jonathan Wakely committed
    • PR libstdc++/78448 limit vector::max_size and deque::max_size · af55b3af
      The container requirements imply that max_size() can't exceed the
      maximum value of the container's difference_type. Enforce this for
      std::vector and std::deque, and add checks to ensure the container
      doesn't grow larger than that.
      
      	PR libstdc++/78448
      	* include/bits/deque.tcc (deque::_M_range_initialize): Use
      	_S_check_init_len to check size.
      	(deque::_M_push_back_aux, deque::_M_push_front_aux): Throw length
      	error if size would exceed max_size().
      	* include/bits/stl_deque.h (_Deque_base::size_type): Remove typedef.
      	(_Deque_base(_Deque_base&&, const allocator_type&, size_t)): Use
      	size_t instead of size_type.
      	(deq(size_type, const allocator_type&)
      	(deq(size_type, const value_type&, const allocator_type&)
      	(deque::_M_initialize_dispatch): Use _S_check_init_len to check size.
      	(deque::max_size): Call _S_max_size.
      	(deque::_S_check_init_len, deque::_S_max_size): New functions.
      	* include/bits/stl_vector.h (vector(size_type, const allocator_type&))
      	(vector(size_type, const value_type&, const allocator_type&))
      	(vector::_M_initialize_dispatch, vector::_M_range_initialize): Use
      	_S_check_init_len to check size.
      	(vector::max_size): Call _S_max_size.
      	(vector::_M_check_len): Prevent max from being expanded as a
      	function-like macro.
      	(vector::_S_check_init_len, vector::_S_max_size): New functions.
      	* include/bits/vector.tcc (vector::_M_assign_aux): Use
      	_S_check_init_len to check size.
      	* testsuite/23_containers/deque/capacity/max_size.cc: New test.
      	* testsuite/23_containers/vector/capacity/max_size.cc: New test.
      
      From-SVN: r263789
      Jonathan Wakely committed
    • gfortran.texi: Mention that asynchronous I/O does not work on systems which lack condition... · 2532f0f5
      2018-08-22  Thomas Koenig  <tkoenig@gcc.gnu.org>
      
      	* gfortran.texi: Mention that asynchronous I/O does
      	not work on systems which lack condition variables, such
      	as AIX.
      
      2018-08-22  Thomas Koenig  <tkoenig@gcc.gnu.org>
      
      	* async.h: Set ASYNC_IO to zero if _AIX is defined.
      	(struct adv_cond): If ASYNC_IO is zero, the struct has no members.
      	(async_unit): If ASYNC_IO is zero, remove unneeded members.
      
      From-SVN: r263788
      Thomas Koenig committed
    • re PR fortran/86935 (Bad locus in ASSOCIATE statement) · bcddf743
      fix PR 86935
      
      2018-08-22  Janus Weil  <janus@gcc.gnu.org>
      
      	PR fortran/86935
      	* match.c (gfc_match_associate): Improve diagnostics for the ASSOCIATE
      	statement.
      
      2018-08-22  Janus Weil  <janus@gcc.gnu.org>
      
      	PR fortran/86935
      	* gfortran.dg/associate_3.f90: Update error message.
      	* gfortran.dg/associate_39.f90: New test case.
      
      From-SVN: r263787
      Janus Weil committed
    • re PR libstdc++/68222 (_Safe_iterator provides operators the wrapped iterator… · e9afbed0
      re PR libstdc++/68222 (_Safe_iterator provides operators the wrapped iterator can't actually support)
      
      2018-08-22  François Dumont  <fdumont@gcc.gnu.org>
      
      	PR libstdc++/68222
      	* include/debug/safe_iterator.h
      	(_Safe_iterator<_It, _Sq, _Cat>): Add category template parameter.
      	(_Safe_iterator<>::_Const_iterator): Remove.
      	(_Safe_iterator<>::_IsConstant): New.
      	(_Safe_iterator<>::_OtherIterator): New.
      	(_Safe_iterator<_It, _Sq, _Cat>::_Safe_iterator<_MutIte>(
      	const _Safe_iterator<_MutIte, _Sq, _Cat>&)): Add _IsConstant::__value in
      	__gnu_cxx::__enable_if condition.
      	(_Safe_iterator<_It, _Sq, _Cat>::_M_get_distance_to): New.
      	(_Safe_iterator<_It, _Sq, _Cat>::_M_get_distance_from_begin): New.
      	(_Safe_iterator<_It, _Sq, _Cat>::_M_get_distance_to_end): New.
      	(_Safe_iterator<_It, _Sq, std::bidirectional_iterator_tag>): New.
      	(_Safe_iterator<_It, _Sq, _Cat>::operator--()): Move...
      	(_Safe_iterator<_It, _Sq, std::bidirectional_iterator_tag>
      	::operator--()): ...here.
      	(_Safe_iterator<_It, _Sq, _Cat>::operator--(int)): Move...
      	(_Safe_iterator<_It, _Sq, std::bidirectional_iterator_tag>
      	::operator--(int)): ...here.
      	(_Safe_iterator<_It, _Sq, _Cat>::_M_decrementable()): Move...
      	(_Safe_iterator<_It, _Sq, std::bidirectional_iterator_tag>
      	::_M_decrementable()): ...here.
      	(_Safe_iterator<_It, _Sq, std::random_access_iterator_tag>): New.
      	(_Safe_iterator<_It, _Sq, _Cat>::operator[](const difference_type&)):
      	Move...
      	(_Safe_iterator<_It, _Sq, std::random_access_iterator_tag>
      	::operator[](const difference_type&)): ...here.
      	(_Safe_iterator<_It, _Sq, _Cat>::operator+=(const difference_type&)):
      	Move...
      	(_Safe_iterator<_It, _Sq, std::random_access_iterator_tag>
      	::operator+=(const difference_type&)): ...here.
      	(_Safe_iterator<_It, _Sq, _Cat>::operator+(const difference_type&)):
      	Move...
      	(_Safe_iterator<_It, _Sq, std::random_access_iterator_tag>
      	::operator+(const difference_type&)): ...here.
      	(_Safe_iterator<_It, _Sq, _Cat>::operator-=(const difference_type&)):
      	Move...
      	(_Safe_iterator<_It, _Sq, std::random_access_iterator_tag>
      	::operator-=(const difference_type&)): ...here.
      	(_Safe_iterator<_It, _Sq, _Cat>::operator-(const difference_type&)):
      	Move...
      	(_Safe_iterator<_It, _Sq, std::random_access_iterator_tag>
      	::operator-(const difference_type&)): ...here.
      	(operator<(const _Safe_iterator<>&, const _Safe_iterator<>&)):
      	Constraint to random access iterators.
      	(operator<=(const _Safe_iterator<>&, const _Safe_iterator<>&)):
      	Likewise.
      	(operator>(const _Safe_iterator<>&, const _Safe_iterator<>&)): Likewise.
      	(operator>=(const _Safe_iterator<>&, const _Safe_iterator<>&)):
      	Likewise.
      	(operator-(const _Safe_iterator<>&, const _Safe_iterator<>&)): Likewise.
      	(operator+(const difference_type&, const _Safe_iterator<>&)): Likewise.
      	(__check_dereferenceable(const _Safe_iterator<>&)): Remove.
      	(__get_distance): Remove.
      	(__get_distance_from_begin): Remove.
      	(__get_distance_to_end): Remove.
      	(struct __is_safe_random_iterator<_Safe_iterator<>>): Remove partial
      	specialization.
      	(__base(const _Safe_iterator<>&, std::input_iterator_tag)): Remove.
      	(__base(const _Safe_iterator<>&, std::random_access_iterator_tag)): Remove.
      	(__base(const _Safe_iterator<>&)): Constraint to random access iterator.
      	* include/debug/safe_iterator.tcc
      	(_Safe_iterator<>::_M_get_distance_from_begin()): New.
      	(_Safe_iterator<>::_M_get_distance_to_end()): New.
      	(_Safe_iterator<>::_M_get_distance_to(const _Safe_iterator<>&)): New.
      	(_Safe_iterator<_It, _Seq, std::random_access_iterator_tag>
      	::_M_valid_range): New.
      	* include/debug/safe_local_iterator.h
      	(_Safe_local_iterator<>::_Const_local_iterator): Remove.
      	(_Safe_local_iterator<>::_IsConstant): New.
      	(_Safe_local_iterator<>::_OtherIterator): New.
      	(_Safe_local_iterator<_It, _Cont>::_Safe_local_iterator<_MutIte, _Cont>(
      	const _Safe_local_iterator<_MutIte, _Seq>&)): Add _IsConstant::__value
      	in __gnu_cxx::__enable_if condition. If singular compare base iterator
      	with _MutIte rather than _It.
      	(_Safe_local_iterator<>::_S_constant): Make constexpr.
      	(_Safe_local_iterator<>::_M_get_distance_to): New.
      	(__check_dereferenceable(const _Safe_local_iterator<>&)): Remove.
      	(__get_distance(const _Safe_local_iterator<>&,
      	const _Safe_local_iterator<>&, std::input_iterator_tag)): Remove.
      	(__valid_range(const _Safe_local_iterator<>&,
      	const _Safe_local_iterator<>&)): New.
      	* include/debug/safe_local_iterator.tcc
      	(_Safe_local_iterator<>::_M_get_distance_to): New.
      	* include/debug/deque (std::__debug::deque<>): Add
      	::__gnu_debug::_Safe_iterator<> friend declaration.
      	* include/debug/forward_list (std::__debug::forward_list<>): Likewise.
      	* include/debug/list (std::__debug::list<>): Likewise.
      	* include/debug/map.h (std::__debug::map<>): Likewise.
      	* include/debug/multimap.h (std::__debug::multimap<>): Likewise.
      	* include/debug/set.h (std::__debug::set<>): Likewise.
      	* include/debug/multiset.h (std::__debug::multiset<>): Likewise.
      	* include/debug/string (std::__debug::basic_string<>): Likewise.
      	* include/debug/unordered_map (std::__debug::unordered_map<>): Likewise
      	and add ::__gnu_debug::_Safe_local_iterator<> friend declaration.
      	(std::__debug::unordered_multimap<>): Likewise.
      	* include/debug/unordered_set (std::__debug::unordered_set<>): Likewise.
      	(std::__debug::unordered_multiset<>): Likewise.
      	* include/debug/formatter.h: Adapt.
      	* include/debug/helper_functions.h
      	(__gnu_debug::_Safe_local_iterator<>): Add declaration.
      	(__get_distance<_Ite>(_Ite, _Ite, std::random_access_iterator_tag):
      	Pass parameter by copy.
      	(__get_distance<_Ite>(_Ite, _Ite, std::input_iterator_tag): Likewise.
      	(__get_distance<_Ite>(_Ite, _Ite): Likewise.
      	(__valid_range_aux<_Integral>): Pass _Integral by copy.
      	(__valid_range<_InputIterator>): Pass _InputIterator by copy.
      	(__valid_range<>(const _Safe_iterator<>&,
      	const _Safe_iterator<>&, typename _Distance_traits<>::__type&)):
      	Declare.
      	(__valid_range(const _Safe_local_iterator<>&,
      	const _Safe_local_iterator<>&, typename _Distance_traits<>::__type&)):
      	Declare.
      	(__valid_range<>(const _Safe_iterator<>&, const _Safe_iterator<>&)):
      	Declare.
      	(__valid_range(const _Safe_local_iterator<>&, const _Safe_local_iterator<>&)):
      	Declare.
      	(__can_advance): Adapt.
      	(struct __is_safe_random_iterator<>): Remove.
      	(struct _SIter_base<>): Remove.
      	* include/debug/functions.h: Include <bits/stl_iterator.h>.
      	(__check_dereferenceable): Remove.
      	(__foreign_iterator_aux4, __foreign_iterator_aux3): Adapt.
      	(__foreign_iterator_aux2, __foreign_iterator_aux): Adapt.
      	(__foreign_iterator): Adapt.
      	* include/debug/stl_iterator.h
      	(__is_safe_random_iterator<std::reverse_iterator<>>): Remove.
      	(__base(const std::reverse_iterator<_Safe_iterator<_It, _Sq>)):
      	Constraint for random access iterators.
      	(__niter_base): Adapt.
      	* testsuite/util/testsuite_containers.h:
      	Include <bits/boost_concept_check.h>.
      	(iterator_concept_checks<_It, _Mutable, _Category>): New.
      	(citerator<_Cont>::forward_members::forward_members()): Instantiate
      	latter for container iterator and const_iterator.
      	* testsuite/23_containers/list/68222_neg.cc: New.
      	* testsuite/23_containers/vector/cons/destructible_debug_neg.cc: Adapt
      	line number.
      	* testsuite/23_containers/unordered_set/debug/debug_functions.cc:
      	(test01): Remove.
      	* testsuite/23_containers/vector/debug/debug_functions.cc (test01):
      	Remove.
      
      From-SVN: r263786
      François Dumont committed
    • module.c (load_generic_interfaces): Move call to find_symbol() so that only… · 66f32b0e
      module.c (load_generic_interfaces): Move call to find_symbol() so that only occurs if actually needed.
      
      2018-08-22  Andrew Benson  <abensonca@gmail.com>
      
              * module.c (load_generic_interfaces): Move call to find_symbol()
              so that only occurs if actually needed.
      
      From-SVN: r263784
      Andrew Benson committed
    • Update write after approval list · fe26fd66
      2018-08-22  Andrew Benson  <abensonca@gmail.com>
      
              * MAINTAINERS: Add self to write after approval list.
      
      From-SVN: r263783
      Andrew Benson committed
    • re PR fortran/86888 ([F08] allocatable components of indirectly recursive type) · 00cad178
      fix PR 86888
      
      2018-08-22  Janus Weil  <janus@gcc.gnu.org>
      
      	PR fortran/86888
      	* decl.c (gfc_match_data_decl): Allow allocatable components of
      	indirectly recursive type.
      	* resolve.c (resolve_component): Remove two errors messages ...
      	(resolve_fl_derived): ... and replace them by a new one.
      
      2018-08-22  Janus Weil  <janus@gcc.gnu.org>
      
      	PR fortran/86888
      	* gfortran.dg/alloc_comp_basics_6.f90: Update an error message and add
      	an additional case.
      	* gfortran.dg/alloc_comp_basics_7.f90: New test case.
      	* gfortran.dg/class_17.f03: Update error message.
      	* gfortran.dg/class_55.f90: Ditto.
      	* gfortran.dg/dtio_11.f90: Update error messages.
      	* gfortran.dg/implicit_actual.f90: Add an error message.
      	* gfortran.dg/typebound_proc_12.f90: Update error message.
      
      From-SVN: r263782
      Janus Weil committed
    • PR middle-end/87052 - STRING_CST printing incomplete in Gimple dumps · b56b0763
      gcc/testsuite/ChangeLog:
      
      	PR middle-end/87052
      	* gcc.dg/pr87052.c: New test.
      	* gcc.dg/tree-ssa/dump-3.c: Adjust.
      
      gcc/ChangeLog:
      
      	PR middle-end/87052
      	* tree-pretty-print.c (pretty_print_string): Add argument.
      	(dump_generic_node): Call to pretty_print_string with string size.
      
      From-SVN: r263781
      Martin Sebor committed
    • [ fix changelog ] · ecc643a8
      2018-08-22  Segher Boessenkool  <segher@kernel.crashing.org>
      
      	PR rtl-optimization/86771
      	* combine.c (try_combine): Do not allow splitting a resulting PARALLEL
      	of two SETs into those two SETs, one to be placed at i2, if that SETs
      	destination is modified between i2 and i3.
      
      From-SVN: r263780
      Segher Boessenkool committed
    • Change AArch64 specific FMAX/FMIN tests into generic MAX_EXPR/MIN_EXPR tests · 3543c89f
      gfortran now always uses MAX_EXPR/MIN_EXPR for MAX/MIN intrinsics, so the
      AArch64 specific FMAX/FMIN tests are no longer valid.
      
      2018-08-22  Szabolcs Nagy  <szabolcs.nagy@arm.com>
      
      	* gfortran.dg/max_fmax_aarch64.f90: Rename to...
      	* gfortran.dg/max_expr.f90: ...this.
      	* gfortran.dg/min_fmin_aarch64.f90: Rename to...
      	* gfortran.dg/min_expr.f90: ...this.
      
      From-SVN: r263778
      Szabolcs Nagy committed
    • combine: Do another check before splitting a parallel (PR86771) · 90cb08ca
      When combine splits a resulting parallel into its two SETs, it has to
      place one at i2, and the other stays at i3.  This does not work if the
      destination of the SET that will be placed at i2 is modified between
      i2 and i3.  This patch fixes it.
      
      
      	* combine.c (try_combine): Do not allow splitting a resulting PARALLEL
      	of two SETs into those two SETs, one to be placed at i2, if that SETs
      	destination is modified between i2 and i3.
      
      From-SVN: r263776
      Segher Boessenkool committed
    • [2/2] Fix bogus inner induction (PR 86725) · 18bc19a7
      This patch is the second part of the fix for PR 86725.  The problem
      in the original test is that for:
      
        outer1:
          x_1 = PHI <x_4(outer2), ...>;
          ...
      
        inner:
          x_2 = PHI <x_1(outer1), x_3(...)>;
          ...
          x_3 = ...;
          ...
      
        outer2:
          x_4 = PHI <x_3(inner)>;
          ...
      
      there are corner cases in which it is possible to classify the
      inner phi as an induction but not the outer phi.  The -4.c test
      is a more direct example.
      
      After failing to classify x_1 as an induction, we go on to
      classify it as a double reduction (which is basically true).
      But we still classified the inner phi as an induction rather
      than as part of a reduction, leading to an ICE when trying
      to vectorise the outer phi.
      
      We analyse the phis for outer loops first, so the simplest
      fix is not to classify the phi as an induction if outer loop
      analysis said that it should be a reduction.
      
      The -2.c test is from the original PR.  The -3.c test is a
      version in which "wo" really is used a reduction; this was
      already correctly rejected, but for the wrong reason ("inner-loop
      induction only used outside of the outer vectorized loop").
      The -4.c test is another way of tickling the original problem
      without relying on the undefinedness of signed overflow.
      The -5.c test shows an (uninteresting) example in which the
      patch prevents a spurious failure to vectorise the outer loop.
      
      2018-08-22  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	PR tree-optimization/86725
      	* tree-vect-loop.c (vect_inner_phi_in_double_reduction_p): New
      	function.
      	(vect_analyze_scalar_cycles_1): Check it.
      
      gcc/testsuite/
      	PR tree-optimization/86725
      	* gcc.dg/vect/no-scevccp-pr86725-2.c: New test.
      	* gcc.dg/vect/no-scevccp-pr86725-3.c: Likewise.
      	* gcc.dg/vect/no-scevccp-pr86725-4.c: Likewise.
      	* gcc.dg/vect/no-scevccp-pr86725-5.c: Likewise.
      
      From-SVN: r263774
      Richard Sandiford committed
    • [1/2] Fix bogus double reduction (PR 86725) · 3a4da266
      This patch is the first part of the fix for PR 86725.  We would
      treat x_1 in:
      
          outer1:
            x_1 = PHI <x_4(outer2), ...>;
            ...
      
          inner:
            x_2 = ...x_1...;
            ...
            x_3 = ...;
            ...
      
          outer2:
            x_4 = PHI <x_3(inner)>;
            ...
      
      as a double reduction without checking what kind of statement x_2 is.
      In practice it has to be a phi, since for other x_2, x_1 would simply
      be a loop invariant that gets used for every inner loop iteration.
      
      The idea with doing this patch first is that, by checking x_2 really
      is a phi, we can hand off the validation of the rest of the reduction
      to the phi analysis in the inner loop.
      
      The test case is a variant of the one in the PR.
      
      2018-08-22  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	PR tree-optimization/86725
      	* tree-vect-loop.c (vect_is_simple_reduction): When treating
      	an outer loop phi as a double reduction, make sure that the
      	single user of the phi result is an inner loop phi.
      
      gcc/testsuite/
      	PR tree-optimization/86725
      	* gcc.dg/vect/no-scevccp-pr86725-1.c: New test.
      
      From-SVN: r263773
      Richard Sandiford committed
    • Make the vectoriser drop to strided accesses for stores with gaps · 203942b8
      We could vectorise:
      
           for (...)
             {
               a[0] = ...;
               a[1] = ...;
               a[2] = ...;
               a[3] = ...;
               a += stride;
             }
      
      (including the case when stride == 8) but not:
      
           for (...)
             {
               a[0] = ...;
               a[1] = ...;
               a[2] = ...;
               a[3] = ...;
               a += 8;
             }
      
      (where the stride is always 8).  The former was treated as a "grouped
      and strided" store, while the latter was treated as a grouped store
      with gaps, which we don't support.
      
      This patch makes us treat groups of stores with gaps at the end as
      strided groups too.  I tried to go through all uses of STMT_VINFO_STRIDED_P
      and all vector uses of DR_STEP to see whether there were any hard-baked
      assumptions, but couldn't see any.  I wondered whether we should relax:
      
        /* We do not have to consider dependences between accesses that belong
           to the same group, unless the stride could be smaller than the
           group size.  */
        if (DR_GROUP_FIRST_ELEMENT (stmtinfo_a)
            && (DR_GROUP_FIRST_ELEMENT (stmtinfo_a)
                == DR_GROUP_FIRST_ELEMENT (stmtinfo_b))
            && !STMT_VINFO_STRIDED_P (stmtinfo_a))
          return false;
      
      for cases in which the step is constant and the absolute step is known
      to be greater than the group size, but data dependence analysis should
      already return chrec_known for those cases.
      
      The new test is a version of vect-avg-15.c with the variable step
      replaced by a constant one.
      
      A natural follow-on would be to do the same for groups with gaps in
      the middle:
      
                /* Check that the distance between two accesses is equal to the type
                   size. Otherwise, we have gaps.  */
                diff = (TREE_INT_CST_LOW (DR_INIT (data_ref))
                        - TREE_INT_CST_LOW (prev_init)) / type_size;
                if (diff != 1)
                  {
                    [...]
                    if (DR_IS_WRITE (data_ref))
                      {
                        if (dump_enabled_p ())
                          dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
                                           "interleaved store with gaps\n");
                        return false;
                      }
      
      But I think we should do that separately and see what the fallout
      from this change is first.
      
      2018-08-22  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* tree-vect-data-refs.c (vect_analyze_group_access_1): Convert
      	grouped stores with gaps to a strided group.
      
      gcc/testsuite/
      	* gcc.dg/vect/vect-avg-16.c: New test.
      	* gcc.dg/vect/slp-37.c: Expect the loop to be vectorized.
      	* gcc.dg/vect/vect-strided-u8-i8-gap4.c,
      	* gcc.dg/vect/vect-strided-u8-i8-gap4-big-array.c: Likewise for
      	the second loop in main1.
      
      From-SVN: r263772
      Richard Sandiford committed
    • Only test STMT_VINFO_STRIDED_P for the first statement in a group · 3ad3b3ac
      get_load_store_type & co were testing STMT_VINFO_STRIDED_P on individual
      statements in a group instead of the first.  This has no effect on
      its own, but is needed by a later patch.
      
      2018-08-22  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* tree-vect-stmts.c (get_group_load_store_type)
      	(get_load_store_type): Only test STMT_VINFO_STRIDED_P for the
      	first statement in a group.
      
      From-SVN: r263771
      Richard Sandiford committed
    • Udate Darwin's LTO specs to match what's in gcc/gcc.c · 257d10b5
      gcc/
      	* config/darwin.h (LINK_COMMAND_SPEC_A): Sync LTO options with
      	the sequence used in gcc/gcc.c.
      
      From-SVN: r263770
      Iain Sandoe committed
    • stringify __USER_LABEL_PREFIX__ in pr85248 testcase. · f0dbdef3
      gcc/testsuite
      
      	* gcc.dg/lto/pr85248_0.c (test_alias):
      	Stringify __USER_LABEL_PREFIX__.
      	(test_noreturn): Likewise.
      
      From-SVN: r263769
      Iain Sandoe committed
    • Make the gcc-ar,nm, strip tools respond correctly to --help and --version · 26e0e97b
      when there's no plugin built.
      
      gcc/
      
      	PR other/704
      	* gcc-ar.c (main): Don’t try to invoke the plug-in if we’re not
      	building it.
      
      From-SVN: r263768
      Iain Sandoe committed
    • PR libstdc++/77854 document size_type for containers · 7c1dcf50
      	PR libstdc++/77854
      	* doc/xml/manual/status_cxx1998.xml: Document size_type and
      	difference_type for containers.
      	* doc/html/*: Regenerate.
      
      From-SVN: r263767
      Jonathan Wakely committed
    • commit missed change from r263764 · 88350fd9
      From-SVN: r263766
      Iain Sandoe committed
    • Move Darwin10 unwinder fix to a crt shim. · a49c064e
      gcc/
      	* config/darwin10.h (LINK_GCC_C_SEQUENCE_SPEC): Adjust to use the
      	Darwin10-specific unwinder-shim.
      	* config/darwin12.h (LINK_GCC_C_SEQUENCE_SPEC): Remove.
      	* config/rs6000/darwin.h (DARWIN_CRT1_SPEC, DARWIN_DYLIB1_SPEC): 
      	New to cater for Darwin10 Rosetta.
      
      libgcc/
      	* config/unwind-dw2-fde-darwin.c
      	(_darwin10_Unwind_FindEnclosingFunction): move from here ...
      	* config/darwin10-unwind-find-enc-func.c: … to here.
      	* config/t-darwin: Build Darwin10 unwinder shim crt.
      	* libgcc/config.host: Add the Darwin10 unwinder shim.
      
      From-SVN: r263765
      Iain Sandoe committed
    • Allw for Darwin to operate with an assembler supporting gotoff in data. · 36bd86fa
      gcc/
      
      	* config/i386/i386.c (ix86_output_addr_diff_elt): Move the MACH-O
      	specific test before the one for HAVE_AS_GOTOFF_IN_DATA.
      
      From-SVN: r263764
      Iain Sandoe committed
    • Fix FDE labels for Darwin · 333a29f9
      gcc/
      
      	PR bootstrap/81033
      	PR target/81733
      	PR target/52795
      	* gcc/dwarf2out.c (FUNC_SECOND_SECT_LABEL): New.
      	(dwarf2out_switch_text_section): Generate a local label for the second
      	function sub-section and apply it as the second FDE start label.
      	* gcc/final.c (final_scan_insn_1): Emit second FDE label after the second
      	sub-section start.
      
      From-SVN: r263763
      Iain Sandoe committed
    • re PR tree-optimization/86988 (ICE: tree check: expected integer_cst, have… · acc25807
      re PR tree-optimization/86988 (ICE: tree check: expected integer_cst, have var_decl in get_len, at tree.h:5563)
      
      2018-08-22  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/86988
      	* tree-vrp.c (vrp_prop::check_mem_ref): Bail out on VLAs.
      
      	* g++.dg/pr86988.C: New testcase.
      
      From-SVN: r263762
      Richard Biener committed
    • re PR tree-optimization/86945 (BUG with optimisation of select case statement in gfortran) · 66c4f4d8
      2018-08-22  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/86945
      	* tree-cfg.c (generate_range_test): Use unsigned arithmetic.
      
      	* gcc.dg/torture/pr86945.c: New testcase.
      
      From-SVN: r263761
      Richard Biener committed
    • rs6000 small data: add note on sdata2/r2 · 30379cbf
      for  gcc/ChangeLog
      
      	* config/rs6000/rs6000.c (SMALL_DATA_RELOC, SMALL_DATA_REG): Add
      	a comment about how uses of r2 for .sdata2 come about.
      
      From-SVN: r263760
      Alexandre Oliva committed
    • fix reassoc cut&pasto · 141f2b50
      for  gcc/ChangeLog
      
      	* tree-ssa-reassoc.c (is_reassociable_op): Fix cut&pasto.
      
      From-SVN: r263759
      Alexandre Oliva committed
    • Daily bump. · ecd06383
      From-SVN: r263758
      GCC Administrator committed
  3. 21 Aug, 2018 4 commits
    • P0646R1 Improving the Return Value of Erase-Like Algorithms I · f7191a37
      2018-08-21  François Dumont  <fdumont@gcc.gnu.org>
      
      	P0646R1 Improving the Return Value of Erase-Like Algorithms I
      	* include/debug/forward_list (forward_list::__remove_return_type):
      	Define typedef as size_type or void, according to __cplusplus value.
      	(_GLIBCXX_FWDLIST_REMOVE_RETURN_TYPE_TAG): Define macro as abi-tag or
      	empty, according to __cplusplus value.
      	(_GLIBCXX20_ONLY): Define macro.
      	(forward_list::remove, forward_list::unique): Use typedef and macro
      	to change return type and add abi-tag for C++2a. Return number of
      	removed elements for C++2a.
      	(forward_list::remove_if<Pred>, forward_list::unique<BinPred>): Use
      	typedef to change return type for C++2a. Return number of removed
      	elements for C++2a.
      	* include/debug/list (list::__remove_return_type): Define typedef as
      	size_type or void, according to __cplusplus value.
      	(_GLIBCXX_LIST_REMOVE_RETURN_TYPE_TAG): Define macro as abi-tag or
      	empty, according to __cplusplus value.
      	(_GLIBCXX20_ONLY): Define macro.
      	(list::remove, list::unique): Use typedef and macro to change return
      	type and add abi-tag for C++2a. Return number of removed elements for
      	C++2a.
      	(list::remove_if<Predicate>, list::unique<BinaryPredicate>): Use typedef
      	to change return type for C++2a. Return number of removed elements for
      	C++2a.
      
      From-SVN: r263752
      François Dumont committed
    • Unconditionally use MAX_EXPR/MIN_EXPR for MAX/MIN intrinsics · fa3d2d38
      For floating point types, the question is what MAX(a, NaN) or MIN(a,
      NaN) should return (where "a" is a normal number).  There are valid
      usecases for returning either one, but the Fortran standard doesn't
      specify which one should be chosen.  Also, there is no consensus among
      other tested compilers.  In short, it's a mess.  So lets just do
      whatever is fastest, which is using MAX_EXPR/MIN_EXPR which are not
      defined to do anything in particular if one of the operands is a NaN.
      
      gcc/fortran/ChangeLog:
      
      2018-08-21  Janne Blomqvist  <jb@gcc.gnu.org>
      
      	* trans-intrinsic.c (gfc_conv_intrinsic_minmax): Use
      	MAX_EXPR/MIN_EXPR unconditionally for real arguments.
      	* gfortran.texi (Compiler Characteristics): Document MAX/MIN
      	behavior wrt NaN.
      
      gcc/testsuite/ChangeLog:
      
      2018-08-21  Janne Blomqvist  <jb@gcc.gnu.org>
      
      	* gfortran.dg/nan_1.f90: Remove tests that test MAX/MIN with NaNs.
      
      From-SVN: r263751
      Janne Blomqvist committed
    • re PR fortran/25829 ([F03] Asynchronous IO support) · 2b4c9065
      2018-08-21  Nicolas Koenig  <koenigni@gcc.gnu.org>
      	Thomas Koenig <tkoenig@gcc.gnu.org>
      
      	PR fortran/25829
      	* gfortran.texi: Add description of asynchronous I/O.
      	* trans-decl.c (gfc_finish_var_decl): Treat asynchronous variables
      	as volatile.
      	* trans-io.c (gfc_build_io_library_fndecls): Rename st_wait to
      	st_wait_async and change argument spec from ".X" to ".w".
      	(gfc_trans_wait): Pass ID argument via reference.
      
      2018-08-21  Nicolas Koenig  <koenigni@gcc.gnu.org>
      	Thomas Koenig <tkoenig@gcc.gnu.org>
      
      	PR fortran/25829
      	* gfortran.dg/f2003_inquire_1.f03: Add write statement.
      	* gfortran.dg/f2003_io_1.f03: Add wait statement.
      
      2018-08-21  Nicolas Koenig  <koenigni@gcc.gnu.org>
      	Thomas Koenig <tkoenig@gcc.gnu.org>
      
      	PR fortran/25829
      	* Makefile.am: Add async.c to gfor_io_src.
      	Add async.h to gfor_io_headers.
      	* Makefile.in: Regenerated.
      	* gfortran.map: Add _gfortran_st_wait_async.
      	* io/async.c: New file.
      	* io/async.h: New file.
      	* io/close.c: Include async.h.
      	(st_close): Call async_wait for an asynchronous unit.
      	* io/file_pos.c (st_backspace): Likewise.
      	(st_endfile): Likewise.
      	(st_rewind): Likewise.
      	(st_flush): Likewise.
      	* io/inquire.c: Add handling for asynchronous PENDING
      	and ID arguments.
      	* io/io.h (st_parameter_dt): Add async bit.
      	(st_parameter_wait): Correct.
      	(gfc_unit): Add au pointer.
      	(st_wait_async): Add prototype.
      	(transfer_array_inner): Likewise.
      	(st_write_done_worker): Likewise.
      	* io/open.c: Include async.h.
      	(new_unit): Initialize asynchronous unit.
      	* io/transfer.c (async_opt): New struct.
      	(wrap_scalar_transfer): New function.
      	(transfer_integer): Call wrap_scalar_transfer to do the work.
      	(transfer_real): Likewise.
      	(transfer_real_write): Likewise.
      	(transfer_character): Likewise.
      	(transfer_character_wide): Likewise.
      	(transfer_complex): Likewise.
      	(transfer_array_inner): New function.
      	(transfer_array): Call transfer_array_inner.
      	(transfer_derived): Call wrap_scalar_transfer.
      	(data_transfer_init): Check for asynchronous I/O.
      	Perform a wait operation on any pending asynchronous I/O
      	if the data transfer is synchronous. Copy PDT and enqueue
      	thread for data transfer.
      	(st_read_done_worker): New function.
      	(st_read_done): Enqueue transfer or call st_read_done_worker.
      	(st_write_done_worker): New function.
      	(st_write_done): Enqueue transfer or call st_read_done_worker.
      	(st_wait): Document as no-op for compatibility reasons.
      	(st_wait_async): New function.
      	* io/unit.c (insert_unit): Use macros LOCK, UNLOCK and TRYLOCK;
      	add NOTE where necessary.
      	(get_gfc_unit): Likewise.
      	(init_units): Likewise.
      	(close_unit_1): Likewise. Call async_close if asynchronous.
      	(close_unit): Use macros LOCK and UNLOCK.
      	(finish_last_advance_record): Likewise.
      	(newunit_alloc): Likewise.
      	* io/unix.c (find_file): Likewise.
      	(flush_all_units_1): Likewise.
      	(flush_all_units): Likewise.
      	* libgfortran.h (generate_error_common): Add prototype.
      	* runtime/error.c: Include io.h and async.h.
      	(generate_error_common): New function.
      
      2018-08-21  Nicolas Koenig  <koenigni@gcc.gnu.org>
      	Thomas Koenig <tkoenig@gcc.gnu.org>
      
      	PR fortran/25829
      	* testsuite/libgomp.fortran/async_io_1.f90: New test.
      	* testsuite/libgomp.fortran/async_io_2.f90: New test.
      	* testsuite/libgomp.fortran/async_io_3.f90: New test.
      	* testsuite/libgomp.fortran/async_io_4.f90: New test.
      	* testsuite/libgomp.fortran/async_io_5.f90: New test.
      	* testsuite/libgomp.fortran/async_io_6.f90: New test.
      	* testsuite/libgomp.fortran/async_io_7.f90: New test.
      
      
      Co-Authored-By: Thomas Koenig <tkoenig@gcc.gnu.org>
      
      From-SVN: r263750
      Nicolas Koenig committed
    • re PR c++/86499 (lambda-expressions with capture-default are allowed at namespace scope) · 774fb6c4
      	PR c++/86499
      	* parser.c (cp_parser_lambda_introducer): Give error if a non-local
      	lambda has a capture-default.
      
      	* g++.dg/cpp0x/lambda/lambda-non-local.C: New test.
      	* g++.dg/cpp0x/lambda/lambda-this10.C: Adjust dg-error.
      
      From-SVN: r263749
      Marek Polacek committed