gcc.git
6 years agotree-vect-data-refs.c (vect_grouped_store_supported): Fix typo "permutaion".
Prathamesh Kulkarni [Thu, 23 Aug 2018 18:22:10 +0000 (18:22 +0000)]
tree-vect-data-refs.c (vect_grouped_store_supported): Fix typo "permutaion".

2018-08-23  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>

* tree-vect-data-refs.c (vect_grouped_store_supported): Fix typo
"permutaion".

From-SVN: r263819

6 years agoFix typo 'exapnded' to 'expanded'
Giuliano Belinassi [Thu, 23 Aug 2018 17:01:09 +0000 (17:01 +0000)]
Fix typo 'exapnded' to 'expanded'

2018-08-23  Giuliano Belinassi  <giuliano.belinassi@usp.br>

gcc/
* genmatch.c (parser::parse_operation): Fix typo 'exapnded'
to 'expanded'.

gcc/ada/
* exp_unst.ads: Fix typo 'exapnded' to 'expanded'.

From-SVN: r263818

6 years agoscev: dump final value replacement expressions
Alexander Monakov [Thu, 23 Aug 2018 16:01:12 +0000 (19:01 +0300)]
scev: dump final value replacement expressions

* tree-scalar-evolution.c (final_value_replacement_loop): Dump
full GENERIC expression used for replacement.

From-SVN: r263817

6 years agoDefine debug mode function for C++98
Jonathan Wakely [Thu, 23 Aug 2018 15:23:31 +0000 (16:23 +0100)]
Define debug mode function for C++98

This function is declared unconditionally but was only defined for C++11
and later, leading to linker errors when the testsuite was run with
-std=gnu++98 -D_GLIBCXX_DEBUG added to the flags.

* include/debug/vector (__niter_base): Define for C++98.

From-SVN: r263816

6 years agoFix C++98 tests to not use C++11 features.
Jonathan Wakely [Thu, 23 Aug 2018 15:10:45 +0000 (16:10 +0100)]
Fix C++98 tests to not use C++11 features.

* testsuite/25_algorithms/partial_sort_copy/debug/irreflexive_neg.cc:
Fix C++98 test to not use C++11 features.
* testsuite/25_algorithms/fill_n/2.cc: Likewise.

From-SVN: r263815

6 years agoFix comments in testsuite script
Jonathan Wakely [Thu, 23 Aug 2018 15:10:35 +0000 (16:10 +0100)]
Fix comments in testsuite script

* scripts/check_compile: Fix comments.

From-SVN: r263814

6 years agotree-vrp.c (abs_extent_range): Remove.
Aldy Hernandez [Thu, 23 Aug 2018 13:25:36 +0000 (13:25 +0000)]
tree-vrp.c (abs_extent_range): Remove.

* tree-vrp.c (abs_extent_range): Remove.
(extract_range_into_wide_ints): Pass wide ints by reference.
(extract_range_from_binary_expr_1): Rewrite the *DIV_EXPR code.
Pass wide ints by reference in all calls to
extract_range_into_wide_ints.
* wide-int-range.cc (wide_int_range_div): New.
* wide-int-range.h (wide_int_range_div): New.
(wide_int_range_includes_zero_p): New.
(wide_int_range_zero_p): New.

From-SVN: r263813

6 years ago[AARCH64] use "arch_enabled" attribute for aarch64.
Matthew Malcomson [Thu, 23 Aug 2018 12:43:17 +0000 (12:43 +0000)]
[AARCH64] use "arch_enabled" attribute for aarch64.

arm.md has some attributes "arch" and "arch_enabled" to aid enabling
and disabling insn alternatives based on the architecture being
targeted.  This patch introduces a similar attribute in the aarch64
backend.  The new attribute will be used to enable a new alternative
for the atomic_store insn in a future patch, but is an atomic change
in itself.

The new attribute has values "any", "fp", "fp16", "simd", and "sve".
These attribute values have been taken from the pre-existing
attributes "fp", "fp16", "simd", and "sve".

The standalone "fp" attribute has been reintroduced in terms of the
"arch" attribute as it's needed for the xgene1.md scheduling file --
the use in this file can't be changed to check for `(eq_attr "arch"
"fp")` as the file is reused by the arm.md machine description whose
'arch' attribute doesn't have an 'fp' value.

2018-08-23  Matthew Malcomson  <matthew.malcomson@arm.com>

* config/aarch64/aarch64.md (arches): New enum.
(arch): New enum attr.
(arch_enabled): New attr.
(enabled): Now uses arch_enabled only.
(simd, sve, fp16): Removed attribute.
(fp): Attr now defined in terms of 'arch'.
(*mov<mode>_aarch64, *movsi_aarch64, *movdi_aarch64, *movti_aarch64,
*movhf_aarch64, <optab><fcvt_target><GPF:mode>2,
<FCVT_F2FIXED:fcvt_fixed_insn><GPF:mode>3,
<FCVT_FIXED2F:fcvt_fixed_insn><GPI:mode>3): Merge 'fp' and 'simd'
attributes into 'arch'.
(*movsf_aarch64, *movdf_aarch64, *movtf_aarch64, *add<mode>3_aarch64,
subdi3, neg<mode>2, <optab><mode>3, one_cmpl<mode>2,
*<NLOGICAL:optab>_one_cmpl<mode>3, *xor_one_cmpl<mode>3,
*aarch64_ashl_sisd_or_int_<mode>3, *aarch64_lshr_sisd_or_int_<mode>3,
*aarch64_ashr_sisd_or_int_<mode>3, *aarch64_sisd_ushl): Convert use of
'simd' attribute into 'arch'.
(load_pair_sw_<SX:mode><SX2:mode>, load_pair_dw_<DX:mode><DX2:mode>,
store_pair_sw_<SX:mode><SX2:mode>, store_pair_dw_<DX:mode><DX2:mode>):
Convert use of 'fp' attribute to 'arch'.
* config/aarch64/aarch64-simd.md (move_lo_quad_internal_<mode>,
move_lo_quad_internal_<mode>): (different modes) Merge 'fp' and 'simd'
into 'arch'.
(move_lo_quad_internal_be_<mode>, move_lo_quad_internal_be_<mode>):
(different modes) Merge 'fp' and 'simd' into 'arch'.
(*aarch64_combinez<mode>, *aarch64_combinez_be<mode>): Merge 'fp' and
'simd' into 'arch'.

From-SVN: r263811

6 years agoFix recent bug in canonicalize_comparison (PR87026)
Segher Boessenkool [Thu, 23 Aug 2018 12:40:14 +0000 (14:40 +0200)]
Fix recent bug in canonicalize_comparison (PR87026)

The new code testing which way a comparison is best expressed creates
a pseudoregister (by hand) and creates some insns with that.  Such
insns will no longer recog() when pseudo-registers are no longer
aloowed (after reload).  But we have an ifcvt pass after reload (ce3).

This patch simply returns if we cannot create pseudos.

PR rtl-optimization/87026
* expmed.c (canonicalize_comparison): If we can no longer create
pseudoregisters, don't.

From-SVN: r263810

6 years agoFix C++11-ism in C++98 member function
Jonathan Wakely [Thu, 23 Aug 2018 11:21:17 +0000 (12:21 +0100)]
Fix C++11-ism in C++98 member function

* include/debug/string (insert(__const_iterator, _InIter, _InIter)):
[!_GLIBCXX_USE_CXX11_ABI]: Replace use of C++11-only cbegin() with
begin(), for C++98 compatibility.

From-SVN: r263809

6 years agoFix testsuite failures for __gnu_debug::string with old ABI
Jonathan Wakely [Thu, 23 Aug 2018 10:51:52 +0000 (11:51 +0100)]
Fix testsuite failures for __gnu_debug::string with old ABI

The __gnu_debug string (mostly) implements the C++11 API, but when it
wraps the old COW string many of the member functions in the base class
have the wrong parameter types or return types. This makes the
__gnu_debug::string type adapt itself to the base class API. This
actually makes the debug string slightly more conforming than the
underlying string type when using the old ABI.

* include/bits/basic_string.h [_GLIBCXX_USE_CXX11_ABI]
(basic_string::__const_iterator): Change access to protected.
[!_GLIBCXX_USE_CXX11_ABI] (basic_string::__const_iterator): Define
as typedef for iterator.
* include/debug/string (__const_iterator): Use typedef from base.
(insert(const_iterator, _CharT))
(replace(const_iterator, const_iterator, const basic_string&))
(replace(const_iterator, const_iterator, const _CharT*, size_type))
(replace(const_iterator, const_iterator, const CharT*))
(replace(const_iterator, const_iterator, size_type, _CharT))
(replace(const_iterator, const_iterator, _InputIter, _InputIter))
(replace(const_iterator, const_iterator, initializer_list<_CharT>)):
Change const_iterator parameters to __const_iterator.
(insert(iterator, size_type, _CharT)): Add C++98 overload.
(insert(const_iterator, _InputIterator, _InputIterator)): Change
const_iterator parameter to __const_iterator.
[!_GLIBCXX_USE_CXX11_ABI]: Add workaround for incorrect return type
of base's member function.
(insert(const_iterator, size_type, _CharT)) [!_GLIBCXX_USE_CXX11_ABI]:
Likewise.
(insert(const_iterator, initializer_list<_CharT>))
[!_GLIBCXX_USE_CXX11_ABI]: Likewise.
* testsuite/21_strings/basic_string/init-list.cc: Remove effective
target directive.

From-SVN: r263808

6 years ago[libiberty patch] Fix PGO bootstrap
Nathan Sidwell [Thu, 23 Aug 2018 10:21:21 +0000 (10:21 +0000)]
[libiberty patch] Fix PGO bootstrap

https://gcc.gnu.org/ml/gcc-patches/2018-08/msg01386.html
PR driver/87056
* pex-unix.c (pex_unix_exec_child): Duplicate bad_fn into local
scopes to avoid potential clobber.

Co-Authored-By: Martin Liska <mliska@suse.cz>
From-SVN: r263807

6 years agoPR target/86951 arm - Handle speculation barriers on pre-armv7 CPUs
Richard Earnshaw [Thu, 23 Aug 2018 09:47:34 +0000 (09:47 +0000)]
PR target/86951 arm - Handle speculation barriers on pre-armv7 CPUs

The AArch32 instruction sets prior to Armv7 do not define the ISB and
DSB instructions that are needed to form a speculation barrier.  While
I do not know of any instances of cores based on those instruction
sets being vulnerable to speculative side channel attacks it is
possible to run code built for those ISAs on more recent hardware
where they would become vulnerable.

This patch works around this by using a library call added to libgcc.
That code can then take any platform-specific actions necessary to
ensure safety.

For the moment I've only handled two cases: the library code being
built for armv7 or later anyway and running on Linux.

On Linux we can handle this by calling the kernel function that will
flush a small amount of cache.  Such a sequence ends with a ISB+DSB
sequence if running on an Armv7 or later CPU.

gcc:

PR target/86951
* config/arm/arm-protos.h (arm_emit_speculation_barrier): New
prototype.
* config/arm/arm.c (speculation_barrier_libfunc): New static
variable.
(arm_init_libfuncs): Initialize it.
(arm_emit_speculation_barrier): New function.
* config/arm/arm.md (speculation_barrier): Call
arm_emit_speculation_barrier for architectures that do not have
DSB or ISB.
(speculation_barrier_insn): Only match on Armv7 or later.

libgcc:

PR target/86951
* config/arm/lib1funcs.asm (speculation_barrier): New function.
* config/arm/t-arm (LIB1ASMFUNCS): Add it to list of functions
to build.

From-SVN: r263806

6 years agore PR ipa/87024 (ICE in fold_stmt_1)
Richard Biener [Thu, 23 Aug 2018 09:29:45 +0000 (09:29 +0000)]
re PR ipa/87024 (ICE in fold_stmt_1)

2018-08-23  Richard Biener  <rguenther@suse.de>

PR middle-end/87024
* tree-inline.c (copy_bb): Drop unused __builtin_va_arg_pack_len
calls.

* gcc.dg/pr87024.c: New testcase.

From-SVN: r263805

6 years ago[AArch64] Improve SVE handling of single-vector permutes
Richard Sandiford [Thu, 23 Aug 2018 08:57:17 +0000 (08:57 +0000)]
[AArch64] Improve SVE handling of single-vector permutes

aarch64_vectorize_vec_perm_const was failing to set one_vector_p
if the permute had only a single input.  This in turn was hiding
a problem in the SVE TBL handling: it accepted single-vector
variable-length permutes, but sent them through the general
two-vector aarch64_expand_sve_vec_perm, which is only set up
to handle constant-length permutes.

2018-08-23  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* config/aarch64/aarch64.c (aarch64_evpc_sve_tbl): Fix handling
of single-vector TBLs.
(aarch64_vectorize_vec_perm_const): Set one_vector_p when only
one input is given.

gcc/testsuite/
* gcc.dg/vect/no-vfa-vect-depend-2.c: Remove XFAIL.
* gcc.dg/vect/no-vfa-vect-depend-3.c: Likewise.
* gcc.dg/vect/pr65947-13.c: Update for vect_fold_extract_last.
* gcc.dg/vect/pr80631-2.c: Likewise.

From-SVN: r263804

6 years agoFix aarch64_evpc_tbl guard (PR 85910)
Richard Sandiford [Thu, 23 Aug 2018 08:51:38 +0000 (08:51 +0000)]
Fix aarch64_evpc_tbl guard (PR 85910)

This patch fixes a typo in aarch64_expand_vec_perm_const_1 that I
introduced as part of the SVE changes.  I don't know of any cases in
which it has any practical effect, since we'll eventually try to use
TBL as a variable permute instead.  Having the code is still an
important part of defining the interface properly and so we shouldn't
simply drop it.

2018-08-23  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
PR target/85910
* config/aarch64/aarch64.c (aarch64_expand_vec_perm_const_1): Fix
aarch64_evpc_tbl guard.

From-SVN: r263803

6 years agoSigned zero for {max,min}val intrinsics
Janne Blomqvist [Thu, 23 Aug 2018 08:35:17 +0000 (11:35 +0300)]
Signed zero for {max,min}val intrinsics

The Fortran standard specifies (e.g. F2018 7.4.3.2) that intrinsic
procedures shall treat positive and negative real zero as equivalent,
unless it is explicitly specified otherwise.  For {max,min}val there
is no such explicit mention.  Thus, remove code to handle signed
zeros.

2018-08-23  Janne Blomqvist  <blomqvist.janne@gmail.com>

* trans-intrinsic.c (gfc_conv_intrinsic_minmaxval): Delete
HONOR_SIGNED_ZEROS checks.

From-SVN: r263802

6 years agoRemove C++14-isms from C++11 tests
Jonathan Wakely [Thu, 23 Aug 2018 08:26:22 +0000 (09:26 +0100)]
Remove C++14-isms from C++11 tests

* testsuite/20_util/reference_wrapper/lwg2993.cc: Fix C++11 test to
not use C++14 feature.
* testsuite/23_containers/list/68222_neg.cc: Likewise.

From-SVN: r263801

6 years agoSkip tests that depend on the cxx11 std::string
Jonathan Wakely [Thu, 23 Aug 2018 08:26:16 +0000 (09:26 +0100)]
Skip tests that depend on the cxx11 std::string

* testsuite/21_strings/basic_string/init-list.cc:
Require cxx11-abi.
* testsuite/experimental/polymorphic_allocator/pmr_typedefs_match.cc:
Likewise.
* testsuite/experimental/polymorphic_allocator/pmr_typedefs_string.cc:
Likewise.

From-SVN: r263800

6 years agore PR fortran/86863 ([OOP][F2008] type-bound module procedure name not recognized)
Paul Thomas [Thu, 23 Aug 2018 06:27:54 +0000 (06:27 +0000)]
re PR fortran/86863 ([OOP][F2008] type-bound module procedure name not recognized)

2017-08-23  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/86863
* resolve.c (resolve_typebound_call): If the TBP is not marked
as a subroutine, check the specific symbol.

2017-08-23  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/86863
* gfortran.dg/submodule_32.f08: New test.

From-SVN: r263799

6 years agoDaily bump.
GCC Administrator [Thu, 23 Aug 2018 00:17:18 +0000 (00:17 +0000)]
Daily bump.

From-SVN: r263798

6 years agotree-ssa-dse.c (compute_trims): Avoid folding away undefined behaviour.
Bernd Edlinger [Wed, 22 Aug 2018 23:43:44 +0000 (23:43 +0000)]
tree-ssa-dse.c (compute_trims): Avoid folding away undefined behaviour.

* tree-ssa-dse.c (compute_trims): Avoid folding away undefined
behaviour.

From-SVN: r263793

6 years agoFix tests that fail in C++98 mode
Jonathan Wakely [Wed, 22 Aug 2018 23:43:43 +0000 (00:43 +0100)]
Fix tests that fail in C++98 mode

* 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

6 years agoPR libstdc++/87061 remove pmr type aliases for COW strings
Jonathan Wakely [Wed, 22 Aug 2018 22:54:33 +0000 (23:54 +0100)]
PR libstdc++/87061 remove pmr type aliases for COW strings

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

6 years agoPR libstdc++/78448 limit vector::max_size and deque::max_size
Jonathan Wakely [Wed, 22 Aug 2018 22:22:40 +0000 (23:22 +0100)]
PR libstdc++/78448 limit vector::max_size and deque::max_size

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

6 years agogfortran.texi: Mention that asynchronous I/O does not work on systems which lack...
Thomas Koenig [Wed, 22 Aug 2018 21:29:49 +0000 (21:29 +0000)]
gfortran.texi: Mention that asynchronous I/O does not work on systems which lack condition...

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

6 years agore PR fortran/86935 (Bad locus in ASSOCIATE statement)
Janus Weil [Wed, 22 Aug 2018 19:31:40 +0000 (21:31 +0200)]
re PR fortran/86935 (Bad locus in ASSOCIATE statement)

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

6 years agore PR libstdc++/68222 (_Safe_iterator provides operators the wrapped iterator can...
François Dumont [Wed, 22 Aug 2018 18:51:25 +0000 (18:51 +0000)]
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

6 years agomodule.c (load_generic_interfaces): Move call to find_symbol() so that only occurs...
Andrew Benson [Wed, 22 Aug 2018 17:47:53 +0000 (17:47 +0000)]
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

6 years agoUpdate write after approval list
Andrew Benson [Wed, 22 Aug 2018 17:40:55 +0000 (17:40 +0000)]
Update write after approval list

2018-08-22  Andrew Benson  <abensonca@gmail.com>

        * MAINTAINERS: Add self to write after approval list.

From-SVN: r263783

6 years agore PR fortran/86888 ([F08] allocatable components of indirectly recursive type)
Janus Weil [Wed, 22 Aug 2018 17:10:00 +0000 (19:10 +0200)]
re PR fortran/86888 ([F08] allocatable components of indirectly recursive type)

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

6 years agoPR middle-end/87052 - STRING_CST printing incomplete in Gimple dumps
Martin Sebor [Wed, 22 Aug 2018 16:42:56 +0000 (16:42 +0000)]
PR middle-end/87052 - STRING_CST printing incomplete in Gimple dumps

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

6 years ago[ fix changelog ]
Segher Boessenkool [Wed, 22 Aug 2018 16:04:09 +0000 (18:04 +0200)]
[ fix changelog ]

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

6 years agoChange AArch64 specific FMAX/FMIN tests into generic MAX_EXPR/MIN_EXPR tests
Szabolcs Nagy [Wed, 22 Aug 2018 15:12:05 +0000 (15:12 +0000)]
Change AArch64 specific FMAX/FMIN tests into generic MAX_EXPR/MIN_EXPR tests

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

6 years agocombine: Do another check before splitting a parallel (PR86771)
Segher Boessenkool [Wed, 22 Aug 2018 13:41:05 +0000 (15:41 +0200)]
combine: Do another check before splitting a parallel (PR86771)

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

6 years ago[2/2] Fix bogus inner induction (PR 86725)
Richard Sandiford [Wed, 22 Aug 2018 13:02:48 +0000 (13:02 +0000)]
[2/2] Fix bogus inner induction (PR 86725)

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

6 years ago[1/2] Fix bogus double reduction (PR 86725)
Richard Sandiford [Wed, 22 Aug 2018 13:02:39 +0000 (13:02 +0000)]
[1/2] Fix bogus double reduction (PR 86725)

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

6 years agoMake the vectoriser drop to strided accesses for stores with gaps
Richard Sandiford [Wed, 22 Aug 2018 12:59:08 +0000 (12:59 +0000)]
Make the vectoriser drop to strided accesses for stores with gaps

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

6 years agoOnly test STMT_VINFO_STRIDED_P for the first statement in a group
Richard Sandiford [Wed, 22 Aug 2018 12:58:53 +0000 (12:58 +0000)]
Only test STMT_VINFO_STRIDED_P for the first statement in a group

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

6 years agoUdate Darwin's LTO specs to match what's in gcc/gcc.c
Iain Sandoe [Wed, 22 Aug 2018 12:31:23 +0000 (12:31 +0000)]
Udate Darwin's LTO specs to match what's in gcc/gcc.c

gcc/
* config/darwin.h (LINK_COMMAND_SPEC_A): Sync LTO options with
the sequence used in gcc/gcc.c.

From-SVN: r263770

6 years agostringify __USER_LABEL_PREFIX__ in pr85248 testcase.
Iain Sandoe [Wed, 22 Aug 2018 12:22:07 +0000 (12:22 +0000)]
stringify __USER_LABEL_PREFIX__ in pr85248 testcase.

gcc/testsuite

* gcc.dg/lto/pr85248_0.c (test_alias):
Stringify __USER_LABEL_PREFIX__.
(test_noreturn): Likewise.

From-SVN: r263769

6 years agoMake the gcc-ar,nm, strip tools respond correctly to --help and --version
Iain Sandoe [Wed, 22 Aug 2018 12:12:46 +0000 (12:12 +0000)]
Make the gcc-ar,nm, strip tools respond correctly to --help and --version
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

6 years agoPR libstdc++/77854 document size_type for containers
Jonathan Wakely [Wed, 22 Aug 2018 12:11:17 +0000 (13:11 +0100)]
PR libstdc++/77854 document size_type for containers

PR libstdc++/77854
* doc/xml/manual/status_cxx1998.xml: Document size_type and
difference_type for containers.
* doc/html/*: Regenerate.

From-SVN: r263767

6 years agocommit missed change from r263764
Iain Sandoe [Wed, 22 Aug 2018 12:05:45 +0000 (12:05 +0000)]
commit missed change from r263764

From-SVN: r263766

6 years agoMove Darwin10 unwinder fix to a crt shim.
Iain Sandoe [Wed, 22 Aug 2018 11:58:43 +0000 (11:58 +0000)]
Move Darwin10 unwinder fix to a crt shim.

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

6 years agoAllw for Darwin to operate with an assembler supporting gotoff in data.
Iain Sandoe [Wed, 22 Aug 2018 11:42:53 +0000 (11:42 +0000)]
Allw for Darwin to operate with an assembler supporting gotoff in data.

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

6 years agoFix FDE labels for Darwin
Iain Sandoe [Wed, 22 Aug 2018 11:37:02 +0000 (11:37 +0000)]
Fix FDE labels for Darwin

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

6 years agore PR tree-optimization/86988 (ICE: tree check: expected integer_cst, have var_decl...
Richard Biener [Wed, 22 Aug 2018 11:01:58 +0000 (11:01 +0000)]
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

6 years agore PR tree-optimization/86945 (BUG with optimisation of select case statement in...
Richard Biener [Wed, 22 Aug 2018 08:07:36 +0000 (08:07 +0000)]
re PR tree-optimization/86945 (BUG with optimisation of select case statement in gfortran)

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

6 years agors6000 small data: add note on sdata2/r2
Alexandre Oliva [Wed, 22 Aug 2018 03:48:00 +0000 (03:48 +0000)]
rs6000 small data: add note on sdata2/r2

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

6 years agofix reassoc cut&pasto
Alexandre Oliva [Wed, 22 Aug 2018 03:47:48 +0000 (03:47 +0000)]
fix reassoc cut&pasto

for  gcc/ChangeLog

* tree-ssa-reassoc.c (is_reassociable_op): Fix cut&pasto.

From-SVN: r263759

6 years agoDaily bump.
GCC Administrator [Wed, 22 Aug 2018 00:16:29 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r263758

6 years agoP0646R1 Improving the Return Value of Erase-Like Algorithms I
François Dumont [Tue, 21 Aug 2018 19:44:41 +0000 (19:44 +0000)]
P0646R1 Improving the Return Value of Erase-Like Algorithms I

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

6 years agoUnconditionally use MAX_EXPR/MIN_EXPR for MAX/MIN intrinsics
Janne Blomqvist [Tue, 21 Aug 2018 19:36:13 +0000 (22:36 +0300)]
Unconditionally use MAX_EXPR/MIN_EXPR for MAX/MIN intrinsics

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

6 years agore PR fortran/25829 ([F03] Asynchronous IO support)
Nicolas Koenig [Tue, 21 Aug 2018 18:48:59 +0000 (18:48 +0000)]
re PR fortran/25829 ([F03] Asynchronous IO support)

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

6 years agore PR c++/86499 (lambda-expressions with capture-default are allowed at namespace...
Marek Polacek [Tue, 21 Aug 2018 18:37:23 +0000 (18:37 +0000)]
re PR c++/86499 (lambda-expressions with capture-default are allowed at namespace scope)

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

6 years agodecl.c (check_static_variable_definition): Change to return void.
Paolo Carlini [Tue, 21 Aug 2018 15:49:58 +0000 (15:49 +0000)]
decl.c (check_static_variable_definition): Change to return void.

2018-08-21  Paolo Carlini  <paolo.carlini@oracle.com>

* decl.c (check_static_variable_definition): Change to return void.

From-SVN: r263742

6 years agoPR c++/86981, Implement -Wpessimizing-move.
Marek Polacek [Tue, 21 Aug 2018 15:38:36 +0000 (15:38 +0000)]
PR c++/86981, Implement -Wpessimizing-move.

* c.opt (Wpessimizing-move): New option.

* typeck.c (decl_in_std_namespace_p): New.
(is_std_move_p): New.
(maybe_warn_pessimizing_move): New.
(can_do_nrvo_p): New, factored out of ...
(check_return_expr): ... here.  Warn about potentially harmful
std::move in a return statement.

* doc/invoke.texi: Document -Wpessimizing-move.

* g++.dg/cpp0x/Wpessimizing-move1.C: New test.
* g++.dg/cpp0x/Wpessimizing-move2.C: New test.
* g++.dg/cpp0x/Wpessimizing-move3.C: New test.
* g++.dg/cpp0x/Wpessimizing-move4.C: New test.
* g++.dg/cpp1z/Wpessimizing-move1.C: New test.

From-SVN: r263741

6 years agore PR c++/65043 (Expected narrowing conversion during list initialization of bool...
Marek Polacek [Tue, 21 Aug 2018 15:25:17 +0000 (15:25 +0000)]
re PR c++/65043 (Expected narrowing conversion during list initialization of bool from double)

PR c++/65043
* call.c (standard_conversion): Set check_narrowing.
* typeck2.c (check_narrowing): Use CP_INTEGRAL_TYPE_P rather
than comparing with INTEGER_TYPE.

* g++.dg/concepts/pr67595.C: Add dg-warning.
* g++.dg/cpp0x/Wnarrowing11.C: New test.
* g++.dg/cpp0x/Wnarrowing12.C: New test.
* g++.dg/cpp0x/rv-cast5.C: Add static_cast.

From-SVN: r263739

6 years ago* cp-tree.h: Fix typo.
Marek Polacek [Tue, 21 Aug 2018 15:10:51 +0000 (15:10 +0000)]
* cp-tree.h: Fix typo.

From-SVN: r263738

6 years ago[Ada] Minor reformattings
Hristian Kirtchev [Tue, 21 Aug 2018 14:50:03 +0000 (14:50 +0000)]
[Ada] Minor reformattings

2018-08-21  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* checks.adb, contracts.adb, exp_aggr.adb, exp_attr.adb,
exp_ch6.adb, exp_ch7.adb, exp_ch9.adb, exp_unst.adb,
exp_util.adb, freeze.adb, gnatlink.adb, layout.adb,
lib-writ.adb, lib-xref-spark_specific.adb, sem_ch13.adb,
sem_ch3.adb, sem_ch6.adb, sem_res.adb, sem_util.adb, sinfo.ads,
sprint.adb: Minor reformatting.

From-SVN: r263737

6 years ago[Ada] Add a new gnat tool vxlink
Jerome Lambourg [Tue, 21 Aug 2018 14:49:49 +0000 (14:49 +0000)]
[Ada] Add a new gnat tool vxlink

VxLink is a helper tool used as a wrapper around g++/gcc to build
VxWorks DKM (Downloadable Kernel Modules).

Such DKM is a partially linked object that includes entry points for
constructors and destructors.

This tool thus uses g++ to generate an intermediate partially linked
object, retrieves the list of constructors and destructors in it and
produces a C file that lists those ctors/dtors in a way that is
understood be VxWorks kernel. It then links this file with the
intermediate object to produce a valid DKM.

2018-08-21  Jerome Lambourg  <lambourg@adacore.com>

gcc/ada/

* vxlink-bind.adb, vxlink-bind.ads, vxlink-link.adb,
vxlink-link.ads, vxlink-main.adb, vxlink.adb, vxlink.ads: Add a
new tool vxlink to handle VxWorks constructors in DKMs.
* gcc-interface/Makefile.in: add rules to build vxlink

From-SVN: r263736

6 years ago[Ada] Crash on expression function and tagged types
Ed Schonberg [Tue, 21 Aug 2018 14:49:42 +0000 (14:49 +0000)]
[Ada] Crash on expression function and tagged types

This patch fixes a compiler abort on an expression function whose
expression includes tagged types that have not been frozen before the
generated body of the function is analyzed, even though that body is
inserted at the end of the current declarative part.

2018-08-21  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* sem_ch6.adb (Analyze_Subprogram_Body_Helper, Mask_Type):
Refine the handling of freezing types for expression functions
that are not completions, when analyzing the generated body for
the function: the body is inserted at the end of the enclosing
declarative part, and its analysis may freeze types declared in
the same scope that have not been frozen yet.

gcc/testsuite/

* gnat.dg/expr_func7.adb, gnat.dg/expr_func7.ads: New testcase.

From-SVN: r263735

6 years ago[Ada] Spurious crash on expression function as completion with contracts
Ed Schonberg [Tue, 21 Aug 2018 14:49:34 +0000 (14:49 +0000)]
[Ada] Spurious crash on expression function as completion with contracts

This patch fixes a compiler abort on an expression function that is a
completion of a subprogram with preconditions. The problem is caused by
the presence of types in the precondition that are not frozen when the
subprogram body constructed for the expression function receives the
code that enforces the precondition. These types must be frozen before
the contract is expanded, so the freeze nodes for these types appear in
the proper scope. This is analogous to what is done with type references
that appear in the original expression of the expression function.

2018-08-21  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* sem_ch6.adb: Remove Freeze_Expr_Types.
* freeze.ads, freeze.adb (Freeze_Expr_Types): Moved from
sem_ch6.adb, and extended to handle other expressions that may
contain unfrozen types that must be frozen in their proper
scopes.
* contracts.adb (Analyze_Entry_Or_Subprogram_Contract): If the
contract is for the generated body of an expression function
that is a completion, traverse the expressions for pre- and
postconditions to freeze all types before adding the contract
code within the subprogram body.

gcc/testsuite/

* gnat.dg/expr_func6.adb, gnat.dg/expr_func6.ads: New testcase.

From-SVN: r263734

6 years ago[Ada] Retention of with clauses for ignored Ghost units
Hristian Kirtchev [Tue, 21 Aug 2018 14:49:26 +0000 (14:49 +0000)]
[Ada] Retention of with clauses for ignored Ghost units

This patch ensures that with clauses that mention ignored Ghost units are
retained in the tree. The retention is necessary for several reasons:

   * The with clauses allow the new elaboration order mechanism to
     produce the same library edges regardless of whether the Ghost unit
     is checked or ignored. This ensures that the elaboration order
     remains consistent.

   * The with clauses allow the unnesting mechanism to properly
     recognize that all units have been examined for unnesing purposes.

No observable impact, no test needed.

2018-08-21  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* sem_ch10.adb: Remove the with and use clause for unit Ghost.
(Analyze_With_Clause): Do not mark a with clause which mentions
an ignored Ghost code for elimination.

From-SVN: r263733

6 years ago[Ada] Crash processing SPARK annotate aspect
Javier Miranda [Tue, 21 Aug 2018 14:48:35 +0000 (14:48 +0000)]
[Ada] Crash processing SPARK annotate aspect

The compiler blows up writing the ALI file of a package that has a ghost
subprogram with an annotate contract.

2018-08-21  Javier Miranda  <miranda@adacore.com>

gcc/ada/

* lib-writ.adb (Write_Unit_Information): Handle pragmas removed
by the expander.

gcc/testsuite/

* gnat.dg/spark2.adb, gnat.dg/spark2.ads: New testcase.

From-SVN: r263732

6 years ago[Ada] Spurious error on overriding protected function in instance
Ed Schonberg [Tue, 21 Aug 2018 14:48:03 +0000 (14:48 +0000)]
[Ada] Spurious error on overriding protected function in instance

The conformance between an overriding protected operation with
progenitors and the overridden interface operation requires subtype
conformance; requiring equality of return types in the case of a
function is too restrictive and leads to spurious errors when the return
type is a generic actual.

2018-08-21  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* sem_ch6.adb (Check_Synchronized_Overriding): The conformance
between an overriding protected operation and the overridden
abstract progenitor operation requires subtype conformance;
requiring equality of return types in the case of a function is
too restrictive and leads to spurious errors when the return
type is a generic actual.

gcc/testsuite/

* gnat.dg/prot6.adb, gnat.dg/prot6.ads: New testcase.

From-SVN: r263731

6 years ago[Ada] Properly set scope of artificial entities in blocks
Ed Schonberg [Tue, 21 Aug 2018 14:47:56 +0000 (14:47 +0000)]
[Ada] Properly set scope of artificial entities in blocks

2018-08-21  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* exp_ch9.adb (Expand_N_Timed_Entry_Call,
Expand_Conditional_Entry_Call): Use Reset_Scopes_Of to set
properly the scope of all entities created in blocks generated
by the expansion of these constructs.

From-SVN: r263730

6 years ago[Ada] Fix scope computation for loop statements
Ed Schonberg [Tue, 21 Aug 2018 14:47:50 +0000 (14:47 +0000)]
[Ada] Fix scope computation for loop statements

2018-08-21  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* sem_ch13.adb (Build_Predicate_Functioss): Apply
Reset_Quantified_Variables_Scope after predicate function has
been analyzed, so that the scope can be reset on the generated
loop statements that have replaced the quantified expressions.

From-SVN: r263729

6 years ago[Ada] Einfo: remove obsolete code
Bob Duff [Tue, 21 Aug 2018 14:47:44 +0000 (14:47 +0000)]
[Ada] Einfo: remove obsolete code

2018-08-21  Bob Duff  <duff@adacore.com>

gcc/ada

* einfo.ads, einfo.adb (Private_View, Shadow_Entities): Remove
obsolete code.

From-SVN: r263728

6 years ago[Ada] Update for Ownership rules for access types according to AI12-0240
Maroua Maalej [Tue, 21 Aug 2018 14:47:38 +0000 (14:47 +0000)]
[Ada] Update for Ownership rules for access types according to AI12-0240

The implementation of these Ownership rules for safe pointers and
automatic memory management is still a prototype at an experimental
stage.

To activate the checks, the code should be compiled with the debug flag
-gnatdF and the flag -gnatd.F for setting the context for formal
verification of SPARK.

These changes do not affect compilation.

2018-08-21  Maroua Maalej  <maalej@adacore.com>

gcc/ada/

* sem_spark.adb (Check_Call_Statement): Check global and formal
parameter permissions at call sites.
(Check_Callable_Body): Assume permissions on globals and
parameters depending on their modes then analyse the body
operations.
(Check_Declaration): Consider both deep (including elementary
access) object declarations and normal variables. First check
whether the deep object is of Ownership Aspec True or not, then,
depending on its initialization, assign the appropriate state.
Check related to non access type variables deal with
initialization value permissions.
(Check_Expression): Check nodes used in the expression being
analyzed.
(Check_Globals): Call by Check_Call_Statement to perform the
check on globals.
(Check_List): Call Check_Node on each element of the list.
(Check_Loop_Statement): Check the Iteration_Scheme and loop
statements.
(Check_Node): Main traversal procedure to check safe pointer usage.
(Check_Package_Body): Check subprogram's body.
(Check_Param_In): Take a formal and an actual parameter and
Check the permission of every in-mode parameter.
(Check_Param_Out): Take a formal and an actual parameter and
check the state of out-mode and in out-mode parameters.
(Check_Statement): Check statements other than procedure call.
(Get_Perm, Get_Perm_Or_Tree, Get_Perm_Tree): Find out the state
related to the given name.
(Is_Deep): Return True if an object is of access type or has
subfields of access type.
(Perm_Error, Perm_Error_Subprogram_End): Add an error message
whenever the found state on the given name is different from the
one expected (in the statement being analyzed).
(Process_Path): Given an operation and a current state, call
Perm_Error if there is any mismatch.
(Return_Declarations, Return_Globals, Return_The_Global): Check
the state of a given name at the end of the subprogram. These
procedures may change depending on how we shall finally deal
with globals and the rhs state in a move operation.
(Set_Perm_Extensions, Set_Perm_Prefixes_Borrow,
Set_Perm_Prefixes, Setup_Globals, Setup_Parameter_Or_Global,
Setup_Parameters): Set up the new states to the given node and
up and down the tree after an operation.
(Has_Ownership_Aspect_True): This function may disappear later
when the Ownership Aspect will be implemented in the FE.

From-SVN: r263727

6 years ago[Ada] Spurious ambiguity error on call returning an access type
Ed Schonberg [Tue, 21 Aug 2018 14:47:32 +0000 (14:47 +0000)]
[Ada] Spurious ambiguity error on call returning an access type

If F is a function with a single defaulted parameter that returns an
access_to_array type, then F (I) may designate either the return type or
an indexing of the result of the call, after implicit dereferencing.  If
the component type C of the array type AR is accces AR this is ambiguous
in a context whose expected type is C. If F is parameterless the call is
not ambiguous.

2018-08-21  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* sem_res.adb (Resolve_Call): Resolve correctly a parameterless
call that returns an access type whose designated type is the
component type of an array, when the function has no defaulted
parameters.

gcc/testsuite/

* gnat.dg/access5.adb, gnat.dg/access5.ads: New testcase.

From-SVN: r263726

6 years ago[Ada] Document entries of the target parametrization file
Yannick Moy [Tue, 21 Aug 2018 14:47:25 +0000 (14:47 +0000)]
[Ada] Document entries of the target parametrization file

2018-08-21  Yannick Moy  <moy@adacore.com>

gcc/ada/

* doc/gnat_ugn/building_executable_programs_with_gnat.rst:
Document entries of the target parametrization file.
* gnat_ugn.texi: Regenerate.

From-SVN: r263725

6 years ago[Ada] Set scope of elaboration flag for 'Access
Ed Schonberg [Tue, 21 Aug 2018 14:47:18 +0000 (14:47 +0000)]
[Ada] Set scope of elaboration flag for 'Access

2018-08-21  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* sem_attr.adb: Set scope of elaboration flag for 'Access.

From-SVN: r263724

6 years ago[Ada] Sprint: add guard on printing aspects
Ed Schonberg [Tue, 21 Aug 2018 14:47:12 +0000 (14:47 +0000)]
[Ada] Sprint: add guard on printing aspects

2018-08-21  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* sprint.adb: Add guard on printing aspects.

From-SVN: r263723

6 years ago[Ada] Crash compiling SPARK ghost functions with callgraph info
Javier Miranda [Tue, 21 Aug 2018 14:47:05 +0000 (14:47 +0000)]
[Ada] Crash compiling SPARK ghost functions with callgraph info

The compiler blows up generating the callgraph output of SPARK ghost
subprograms whose contracts invoke ghost functions.

2018-08-21  Javier Miranda  <miranda@adacore.com>

gcc/ada/

* exp_cg.adb (Generate_CG_Output): Handle calls removed by the
expander.

From-SVN: r263722

6 years ago[Ada] Unnesting: do not set size of access subprograms
Ed Schonberg [Tue, 21 Aug 2018 14:46:59 +0000 (14:46 +0000)]
[Ada] Unnesting: do not set size of access subprograms

2018-08-21  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* layout.adb: Do not set size of access subprogram if unnesting.

From-SVN: r263721

6 years ago[Ada] Unnesting: do not emit warnings for access to subprograms
Ed Schonberg [Tue, 21 Aug 2018 14:46:54 +0000 (14:46 +0000)]
[Ada] Unnesting: do not emit warnings for access to subprograms

2018-08-21  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* freeze.adb: Remove warnings for access to subprograms when
unnesting is active.

From-SVN: r263720

6 years ago[Ada] Improper copying of limited arrays with default initialization
Ed Schonberg [Tue, 21 Aug 2018 14:46:49 +0000 (14:46 +0000)]
[Ada] Improper copying of limited arrays with default initialization

This patch fixes an improper expansion of aggregates for limited array
types in an object declaration. Prior to this patch, The presence of the
aggregate (which can only consist of box initializations) would create a
temporary that was then assigned to the object in the declaration.
Apart from a violation of the semantics of build-in-place limited
objects, this can also lead to out-of-scope access in LLVM.

Executing the following;

   gcc -c -gnatDG nocopy.adb
   grep quintet nocopy.adb.dg | wc -l

must yield:

   5

----
procedure NoCopy is

  --  Task used in this example to test that the limited component
  --  is properly initialized.

  task type T_Task (Disc : Natural);

  task body T_Task is
  begin
     null;
  end T_Task;

  type My_Rec (D : Natural := 9999) is record

     --  Components initialized by means of the current value
     --  of the record discriminant

     T : T_Task (D);
  end record;

  type TR is array (1 .. 5) of My_Rec;
  Quintet : TR := (others => (others => <>));
begin
   null;
end NoCopy;

2018-08-21  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* exp_aggr.adb (Expand_Array_Aggregate): If the component type
is limited, the array must be constructed in place, so set flag
In_Place_Assign_OK_For_Declaration accordingly. This prevents
improper copying of an array of tasks during initialization.

From-SVN: r263719

6 years ago[Ada] Fix spurious error on unchecked conversion on VFA record type
Eric Botcazou [Tue, 21 Aug 2018 14:46:45 +0000 (14:46 +0000)]
[Ada] Fix spurious error on unchecked conversion on VFA record type

2018-08-21  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* gcc-interface/trans.c (Call_to_gnu): Always suppress an
unchecked conversion around the actual for an In parameter
passed by copy.

From-SVN: r263718

6 years ago[Ada] Fix internal error on extension of record with representation clause
Eric Botcazou [Tue, 21 Aug 2018 14:46:40 +0000 (14:46 +0000)]
[Ada] Fix internal error on extension of record with representation clause

This fixes a long-standing issue present for extensions of tagged record
types with a representation clause: the clause is correctly inherited
for components inherited in the extension but the position and size are
not, which fools the logic of Is_Possibly_Unaligned_Object.

This can result in an attempt to take the address of a component not
aligned on a byte boundary, which is then flagged as an internal error.

2018-08-21  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* exp_util.adb (Is_Possibly_Unaligned_Object): For the case of a
selected component inherited in a record extension and subject
to a representation clause, retrieve the position and size from
the original record component.

gcc/testsuite/

* gnat.dg/rep_clause7.adb: New testcase.

From-SVN: r263717

6 years ago[Ada] Spurious "Duplicated symbol" error with discriminated tasks
Ed Schonberg [Tue, 21 Aug 2018 14:46:34 +0000 (14:46 +0000)]
[Ada] Spurious "Duplicated symbol" error with discriminated tasks

This patch fixes a spurious error in a program that contains a
discriminated task type and several of its subtype in the same
declarative part, when the corresponding discriminant constraints are
expressions.

2018-08-21  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* sem_util.ads, sem_util.adb (New_External_Entity): Type of
Suffix_Index must be Int, not Nat, so that a negative value can
be used to generate a unique name for an external object, as
specified in Tbuild.New_External_Name.
(Scope_Within): Handle private type whose completion is a
synchronized type (For unnesting).
* itypes.ads, itypes.adb (Create_Itype): Ditto
* sem_ch3.adb (Constrain_Corresponding_Record): Generate a
unique name for the created subtype, because there may be
several discriminated tasks present in the same scope, and each
needs its distinct corresponding record subtype.

gcc/testsuite/

* gnat.dg/task1.adb, gnat.dg/task1.ads, gnat.dg/task1_pkg.adb,
gnat.dg/task1_pkg.ads: New testcase.

From-SVN: r263716

6 years ago[Ada] Define versions of dimension system for Float and Long_Float
Yannick Moy [Tue, 21 Aug 2018 14:46:07 +0000 (14:46 +0000)]
[Ada] Define versions of dimension system for Float and Long_Float

The dimension system in System.Dim.Mks is based on Long_Long_Float,
which may not be convenient to people who want to use Float or
Long_Float as basis. These new files provide units that define the
dimension system based on Float in System.Dim.Float_Mks and on
Long_Float in System.Dim.Long_Mks.

Child packages Other_Prefixes and Mks_IO are also defined appropriately,
with new instantiations for the various sizes of floating-point types.

2018-08-21  Yannick Moy  <moy@adacore.com>

gcc/ada/

* doc/gnat_ugn/gnat_and_program_execution.rst: Update
documentation of dimensionality analysis.
* gnat_ugn.texi: Regenerate.
* Makefile.rtl, impunit.adb: Consider the new units.
* libgnat/s-dfmkio.ads, libgnat/s-dfmopr.ads,
libgnat/s-diflmk.ads: New units based on Float.
* libgnat/s-dilomk.ads, libgnat/s-dlmkio.ads,
libgnat/s-dlmopr.ads: New units based on Long_Float.
* libgnat/s-dmotpr.ads: Rename to libgnat/s-dgmgop.ads and turn
into an instance of
System.Dim.Generic_Mks.Generic_Other_Prefixes.
* libgnat/s-dimmks.ads: Rename to libgnat/s-digemk.ads and turn
into an instance of System.Dim.Generic_Mks.

From-SVN: r263715

6 years ago[Ada] General purpose doubly linked list for compiler and tool use
Hristian Kirtchev [Tue, 21 Aug 2018 14:45:49 +0000 (14:45 +0000)]
[Ada] General purpose doubly linked list for compiler and tool use

This patch adds unit GNAT.Lists which currently contains the
implementation of a general purpose doubly linked list intended for use
by the compiler and the tools around it.

2018-08-21  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* impunit.adb: Add g-lists to the set of non-implementation
units.
* libgnat/g-lists.adb, libgnat/g-lists.ads: New unit.
* Makefile.rtl: Add g-lists to the set of non-tasking units.
* gcc-interface/Make-lang.in: Add g-lists to the set of files
used by gnat1.

gcc/testsuite/

* gnat.dg/linkedlist.adb: New testcase.

From-SVN: r263714

6 years ago[Ada] Fix scope computation for entry bodies and accept alternatives
Ed Schonberg [Tue, 21 Aug 2018 14:45:04 +0000 (14:45 +0000)]
[Ada] Fix scope computation for entry bodies and accept alternatives

2018-08-21  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* exp_ch9.adb (Reset_Scopes): Do not recurse into type
declarations when resetting the scope of entities declared the
procedures generated for entry bodies and accept alternatives.
Use the entity of the procedure declaration, not its body, as
the new scope.

From-SVN: r263713

6 years ago[Ada] Crash on entry in generic with dynamic elaboration checks
Hristian Kirtchev [Tue, 21 Aug 2018 14:44:56 +0000 (14:44 +0000)]
[Ada] Crash on entry in generic with dynamic elaboration checks

This patch modifies the set of attributes that applies to entries and
entry families to include elaboration entities used by the
access-before-elaboration mechanism.

2018-08-21  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* einfo.adb (Elaboration_Entity): Include entries and entry
families in the set of legal entities.
(Elaboration_Entity_Required): Include entries and entry
families in the set of legal entities.
(Set_Elaboration_Entity): Include entries and entry families in
the set of legal entities.
(Set_Elaboration_Entity_Required): Include entries and entry
families in the set of legal entities.
(Write_Field13_Name): Update the output of attribute
Elaboration_Entity.
* einfo.ads: Attributes Elaboration_Entity and
Elaboration_Entity_Required now apply to entries and entry
families.

gcc/testsuite/

* gnat.dg/elab6.adb, gnat.dg/elab6.ads, gnat.dg/elab6_pkg.adb,
gnat.dg/elab6_pkg.ads: New testcase.

From-SVN: r263712

6 years ago[Ada] Set_Targ: add a CodePeer annotation
Arnaud Charlet [Tue, 21 Aug 2018 14:44:51 +0000 (14:44 +0000)]
[Ada] Set_Targ: add a CodePeer annotation

2018-08-21  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

* set_targ.adb: Mark some CodePeer message as Intentional.

From-SVN: r263711

6 years ago[Ada] Compiler abort on call to expr. function for default discriminant
Ed Schonberg [Tue, 21 Aug 2018 14:44:46 +0000 (14:44 +0000)]
[Ada] Compiler abort on call to expr. function for default discriminant

If a discriminant specification has a default that is a call to an
expression function, that function has to be frozen at the point of a
call to the initialization procedure for an object of the record type,
even though the call does not appear to come from source.

2018-08-21  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* sem_res.adb (Resolve_Call): Force the freezing of an
expression function that is called to provide a default value
for a defaulted discriminant in an object initialization.

gcc/testsuite/

* gnat.dg/expr_func5.adb: New testcase.

From-SVN: r263710

6 years ago[Ada] Dynamically resizable, load factor-based hash table
Hristian Kirtchev [Tue, 21 Aug 2018 14:44:41 +0000 (14:44 +0000)]
[Ada] Dynamically resizable, load factor-based hash table

This patch introduces a dynamically resizable, load factor-based hash
table in unit GNAT.Dynamic_HTables.

2018-08-21  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* libgnat/g-dynhta.adb, libgnat/g-dynhta.ads: New package
Dynamic_HTable.

gcc/testsuite/

* gnat.dg/dynhash.adb: New testcase.

From-SVN: r263709

6 years ago[Ada] Enumeration types with non-standard representation
Javier Miranda [Tue, 21 Aug 2018 14:44:35 +0000 (14:44 +0000)]
[Ada] Enumeration types with non-standard representation

The compiler may report errors on enumeration types with non-standard
representation (i.e. at least one literal has a representation value
different from its 'Pos value) processing attribute 'Enum_Rep.

It may also generate wrong code for the evaluation of 'Enum_Rep raising
Constraint_Error at runtime.

2018-08-21  Javier Miranda  <miranda@adacore.com>

gcc/ada/

* checks.ads (Determine_Range): Adding documentation.
* checks.adb (Determine_Range): Don't deal with enumerated types
with non-standard representation.
(Convert_And_Check_Range): For conversion of enumeration types
with non standard representation to an integer type perform a
direct conversion to the target integer type.

gcc/testsuite/

* gnat.dg/enum4.adb: New testcase.

From-SVN: r263708

6 years ago[Ada] Handle pragmas that come from aspects for GNATprove
Piotr Trojanek [Tue, 21 Aug 2018 14:44:30 +0000 (14:44 +0000)]
[Ada] Handle pragmas that come from aspects for GNATprove

In GNATprove we appear to abuse a routine related to cross-references and
expect it to deliver exact results, which is not what it was designed for.

This patch is a temporary solution to avoid crashes in GNATprove; it doesn't
affect the frontend or other backends, because this code is used exclusively
by GNATprove (it is located in the frontend for technical reasons). No tests
provided.

2018-08-21  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

* lib-xref.ads, lib-xref-spark_specific.adb
(Enclosing_Subprogram_Or_Library_Package): Now roughtly works
for pragmas that come from aspect specifications.

From-SVN: r263707

6 years ago[Ada] Add sa_messages.ad[sb] for SPARK 2014
Pierre-Marie de Rodat [Tue, 21 Aug 2018 14:44:25 +0000 (14:44 +0000)]
[Ada] Add sa_messages.ad[sb] for SPARK 2014

These new source files will make it possible to build SPARK 2014 from
a snapshot of GCC FSF sources.

2018-08-21  Pierre-Marie de Rodat  <derodat@adacore.com>

gcc/ada/

* sa_messages.ads, sa_messages.adb: New source files.

From-SVN: r263706

6 years ago* testsuite/18_support/new_nothrow.cc: XFAIL on AIX.
David Edelsohn [Tue, 21 Aug 2018 14:03:16 +0000 (14:03 +0000)]
* testsuite/18_support/new_nothrow.cc: XFAIL on AIX.

From-SVN: r263703

6 years agoUpdate global reviewers list
Richard Sandiford [Tue, 21 Aug 2018 13:49:30 +0000 (13:49 +0000)]
Update global reviewers list

2018-08-21  Richard Sandiford  <richard.sandiford@arm.com>

* MAINTAINERS: Add self to global reviewers list.

From-SVN: r263702

6 years agotree.c (find_decls_types_r): Do not check for redundant typedefs.
Jan Hubicka [Tue, 21 Aug 2018 12:32:53 +0000 (14:32 +0200)]
tree.c (find_decls_types_r): Do not check for redundant typedefs.

* tree.c (find_decls_types_r): Do not check for redundant typedefs.
* tree.h (is_redundant_typedef): Remove.
* dwarf2out.c (is_redundant_typedef): Turn into static function.

From-SVN: r263699

6 years ago[Ada] Bump copyright notices to 2018
Pierre-Marie de Rodat [Tue, 21 Aug 2018 11:59:28 +0000 (11:59 +0000)]
[Ada] Bump copyright notices to 2018

2018-08-21  Pierre-Marie de Rodat  <derodat@adacore.com>

gcc/ada/

* libgnarl/a-intnam__dragonfly.ads,
libgnarl/s-osinte__dragonfly.adb,
libgnarl/s-osinte__dragonfly.ads, libgnarl/s-osinte__gnu.adb,
libgnarl/s-osinte__gnu.ads, libgnarl/s-osinte__hpux-dce.adb,
libgnarl/s-osinte__hpux-dce.ads,
libgnarl/s-taprop__hpux-dce.adb,
libgnarl/s-taspri__hpux-dce.ads: Bump copyright notices to 2018.

From-SVN: r263698

6 years agotree.c (free_lang_data_in_decl): Remove types from DECL_CONTEXT when possible.
Jan Hubicka [Tue, 21 Aug 2018 10:36:37 +0000 (12:36 +0200)]
tree.c (free_lang_data_in_decl): Remove types from DECL_CONTEXT when possible.

* tree.c (free_lang_data_in_decl): Remove types from DECL_CONTEXT
when possible.

From-SVN: r263697

6 years agoFix DSE big-endian subreg crash on AArch64.
Tamar Christina [Tue, 21 Aug 2018 09:55:07 +0000 (09:55 +0000)]
Fix DSE big-endian subreg crash on AArch64.

This patch fixes an ICE that would happen when extract_low_bits
is called with modes for which you can't extract a valid subreg.
e.g. taking a 32 bytes subreg from a 48 byte mode.

The ICE happens because convert_modes which eventually calls
simplify_gen_subreg does not expect the convertion to fail.

The assert in gen_lowpart_general would then be hit.  The patch
changes it to validate the subreg before trying to convert the
modes.  If the subreg is not possible we return NULL_RTX and bail
out early.

gcc/ChangeLog:

2018-08-21  Tamar Christina  <tamar.christina@arm.com>

* expmed.c (extract_low_bits): Reject invalid subregs early.

gcc/testsuite/ChangeLog:

2018-08-21  Tamar Christina  <tamar.christina@arm.com>

* gcc.target/aarch64/large_struct_copy.c: New test.

From-SVN: r263696

6 years agoRemove redundant { dg-do run } directives in tests
Jonathan Wakely [Tue, 21 Aug 2018 09:34:26 +0000 (10:34 +0100)]
Remove redundant { dg-do run } directives in tests

These tests accidentally had two dg-do directives. Only the second one
is needed.

* testsuite/26_numerics/bit/bitops.count/countl_one.cc: Remove
redundant dg-do directive.
* testsuite/26_numerics/bit/bitops.count/countl_zero.cc: Likewise.
* testsuite/26_numerics/bit/bitops.count/countr_one.cc: Likewise.
* testsuite/26_numerics/bit/bitops.count/countr_zero.cc: Likewise.
* testsuite/26_numerics/bit/bitops.count/popcount.cc: Likewise.

From-SVN: r263695

6 years agoRestrict the pr86763 test to *-*-linux* targets
Szabolcs Nagy [Tue, 21 Aug 2018 09:22:14 +0000 (09:22 +0000)]
Restrict the pr86763 test to *-*-linux* targets

clock_gettime is not available on some baremetal targets
and may require -lrt on some non-linux targets.

gcc/testsuite/ChangeLog:

* g++.dg/torture/pr86763.C: Restrict to *-*-linux*.

From-SVN: r263694