Jason Merrill [Tue, 26 Mar 2019 16:02:19 +0000 (12:02 -0400)]
PR c++/86429 - constexpr variable in lambda.
When we refer to a captured variable from a constant-expression context
inside a lambda, the closure (like any function parameter) is not constant
because we aren't in a call, so we don't have an argument. So the capture
is non-constant. But if the captured variable is constant, we might be able
to use it directly in constexpr evaluation.
PR c++/82643
PR c++/87327
* constexpr.c (cxx_eval_constant_expression): In a lambda function,
try evaluating the captured variable directly.
Jonathan Wakely [Tue, 26 Mar 2019 15:28:48 +0000 (15:28 +0000)]
PR libstdc++/85965 delay static assertions until types are complete
The static assertions added for PR libstdc++/48101 were at class scope
and so were evaluated too eagerly, when it might not be possible to
determine whether the function objects are invocable with the key types.
The problematic cases are where the key type is not known to be
convertible to the argument type(s) of the function object until later,
after a type has been completed. Specifically, if the key type is a
pointer to a derived class and the function object's argument type is a
pointer to a base class, then the derived-to-base conversion is only
valid once the derived type is complete.
By moving the static assertions to the destructor they will only be
evaluated when the destructor is instantiated, at which point whether
the key type can be passed to the function object should be knowable.
The ideal place to do the checks would be only when the function objects
are actually invoked, but that would mean adding the checks in numerous
places, so the destructor is used instead.
The tests need to be adjusted because the "required from here" line is
now the location of the destructor, not the point of instantiation in
the test file. For the map and multimap tests which check two
specializations, the dg-error matching the assertion text matches both
cases. Also check the diagnostic output for the template arguments, to
ensure both specializations trigger the assertion.
PR libstdc++/85965
* include/bits/hashtable.h (_Hashtable): Move static assertions to
destructor so they are not evaluated until the _Key type is complete.
* include/bits/stl_tree.h (_Rb_tree): Likewise.
* testsuite/23_containers/set/85965.cc: New test.
* testsuite/23_containers/unordered_set/85965.cc: New test.
* testsuite/23_containers/map/48101_neg.cc: Replace "here" errors
with regexp matching the corresponding _Rb_tree specialization.
* testsuite/23_containers/multimap/48101_neg.cc: Likewise.
* testsuite/23_containers/multiset/48101_neg.cc: Remove "here" error.
* testsuite/23_containers/set/48101_neg.cc: Likewise.
* testsuite/23_containers/unordered_map/48101_neg.cc: Likewise.
* testsuite/23_containers/unordered_multimap/48101_neg.cc: Likewise.
* testsuite/23_containers/unordered_multiset/48101_neg.cc: Likewise.
* testsuite/23_containers/unordered_set/48101_neg.cc: Likewise.
re PR libstdc++/89825 (Jump table for variant visitation could be shortened for never empty variants)
PR libstdc++/89825
Fix based on a suggestion by Antony Polukhin.
* include/std/variant (_Extra_visit_slot_needed): New.
(_Multi_array): Use it.
(_S_apply_all_alts): Likewise.
Jakub Jelinek [Tue, 26 Mar 2019 13:40:43 +0000 (14:40 +0100)]
hash-table.h (hash_table::m_gather_mem_stats): If GATHER_STATISTICS is constant 0...
* hash-table.h (hash_table::m_gather_mem_stats): If GATHER_STATISTICS
is constant 0, turn into static const data member initialized to false.
(hash_table::hash_table): Only initialize m_gather_mem_stats #if
GATHER_STATISTICS. Add ATTRIBUTE_UNUSED to gather_mem_stats param.
re PR libstdc++/89824 (Variant jump table reserves space for __variant_cookie twice)
PR libstdc++/89824
Fix based on a suggestion by Antony Polukhin.
* include/std/variant (__gen_vtable): Don't reserve an
additional table slot, _Multi_array already does that.
re PR libstdc++/89816 (std::variant move construction regressed since GCC 8.3)
PR libstdc++/89816
Fix based on a suggestion by Antony Polukhin.
* include/std/variant (__variant_construct): Capture a pointer
to the storage and visit just one variant.
Bin Cheng [Tue, 26 Mar 2019 11:12:37 +0000 (11:12 +0000)]
re PR tree-optimization/81740 (wrong code at -O3 in both 32-bit and 64-bit modes on x86_64-linux-gnu)
2019-03-26 Bin Cheng <bin.cheng@linux.alibaba.com>
PR tree-optimization/81740
* tree-vect-data-refs.c (vect_analyze_data_ref_dependence):
In case of outer loop vectorization, check for backward dependence
at the inner loop if outer loop dependence is reversed.
* gcc.dg/vect/pr81740-1.c: New testcase.
* gcc.dg/vect/pr81740-2.c: Likewise.
Jeff Law [Mon, 25 Mar 2019 23:33:36 +0000 (17:33 -0600)]
re PR rtl-optimization/88347 (ICE in begin_move_insn, at sched-ebb.c:175)
PR rtl-optimization/88347
PR rtl-optimization/88423
* sched-deps.c (sched_analyze_insn): Take into account that for
tablejumps the barrier appears after a label and a jump_table_data.
* gcc.c-torture/compile/pr88347.c: New test.
* gcc.c-torture/compile/pr88423.c: New test.
Martin Sebor [Mon, 25 Mar 2019 22:56:40 +0000 (22:56 +0000)]
PR c/89812 - incorrect maximum in error: requested alignment '536870912' exceeds maximum 2147483648
gcc/c-family/ChangeLog:
PR c/89812
* c-common.c (check_user_alignment): Rename local. Correct maximum
alignment in diagnostic. Avoid assuming argument fits in SHWI,
convert it to UHWI when it fits.
Johan Karlsson [Mon, 25 Mar 2019 21:19:09 +0000 (21:19 +0000)]
re PR debug/86964 (Too many debug symbols included, especially for extern globals)
PR debug/86964
* dwarf2out.c (premark_used_variables): New function.
(prune_unused_types_walk): Do not mark not premarked external
variables.
(prune_unused_types): Call premark_used_variables.
Vladimir Makarov [Mon, 25 Mar 2019 21:14:40 +0000 (21:14 +0000)]
re PR rtl-optimization/89676 (Redundant moves for long long shift on 32bit x86)
2019-03-25 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/89676
* lra-constraints.c (curr_insn_transform): Do match reload for
early clobbers when the match was successful only for different
registers.
Jason Merrill [Mon, 25 Mar 2019 18:27:08 +0000 (14:27 -0400)]
PR c++/87748 - substitution failure error with decltype.
This issue is similar to PR 87480; in both cases we were doing non-dependent
substitution with processing_template_decl set, leading to member access
expressions seeming still instantiation-dependent, and therefore decltype
not being simplified to its actual type. And as in that PR, the fix is to
clear processing_template_decl while substituting a default template
argument.
Martin Sebor [Mon, 25 Mar 2019 17:23:31 +0000 (17:23 +0000)]
extend.texi (Common Type Attributes): Document vector_size.
gcc/ChangeLog:
* doc/extend.texi (Common Type Attributes): Document vector_size.
(Common Variable Attributes): Mention size constraint. Correct
quoting and typos.
(Vector Extensions): Use @dfn when defining bas type. Clarify
base type and size constraints.
Thomas Otto [Mon, 25 Mar 2019 13:50:46 +0000 (13:50 +0000)]
dwarf2out.c (comp_dir_string): cached_wd could be set to both a heap string and a gc string...
2019-03-25 Thomas Otto <thomas.otto@pdv-fs.de>
* dwarf2out.c (comp_dir_string): cached_wd could be set to both a
heap string and a gc string, but since this variable is unknown to
ggc the gc string might get reused and corrupted. Fixed by always
using a heap string.
Richard Biener [Mon, 25 Mar 2019 12:18:38 +0000 (12:18 +0000)]
re PR middle-end/89779 (internal compiler error: tree check: expected class ‘type’, have ‘exceptional’ (error_mark) in tree_nop_conversion_p, at tree.c:12798)
2019-03-25 Richard Biener <rguenther@suse.de>
PR tree-optimization/89779
* tree-ssa-loop-ivopts.c (remove_unused_ivs): Return
to remove IV defs, delay actual removal.
(tree_ssa_iv_optimize_loop): Likewise. Avoid SCEV reset.
(tree_ssa_iv_optimize): Remove eliminated IV defs at the
very end, properly also reset loop control IV information.
Kyrylo Tkachov [Mon, 25 Mar 2019 09:25:07 +0000 (09:25 +0000)]
[doc] Fix typos in MINLOC, MAXLOC documentation
I think there's a typo in the documentation of the MINLOC and MAXLOC intrinsics.
It implies that when the BACK argument is true it returns the first occurrence of the min/max value,
but my understanding is that it should return the last occurrence.
This patch fixes the documentation.
* intrinsic.texi (MINLOC): Fix typo in BACK argument documentation.
(MAXLOC): Likewise.
rs6000: Make CSE'ing __tls_get_addr calls possible
CSE does not consider calls, not even const calls. This patch puts a
REG_EQUAL note on the pseudo we assign the __tls_get_addr result to,
so that those pseudos can be CSE'd and the extra calls deleted as dead
code.
CSE should really handle const calls directly, but it is stage 4.
* config/rs6000/rs6000.c (rs6000_legitimize_tls_address): Add REG_EQUAL
notes for the result of the __tls_get_addr calls.
* config/rs6000/rs6000.md (unspec UNSPEC_TLS_GET_ADDR): New.
Jeff Law [Sun, 24 Mar 2019 15:20:52 +0000 (09:20 -0600)]
re PR rtl-optimization/87761 ([MIPS] New FAIL: gcc.target/mips/fix-r4000-10.c -O1 start with r265398)
PR rtl-optimization/87761
* regcprop.c (copyprop_hardreg_forward_1): Check may_trap_p on SET,
not INSN. Also check RTX_FRAME_RELATED_P. Queue insns for DF rescan
as needed.
(pass_cprop_hardreg::execute): Add df note problem and defer insn
rescans. Reprocess blocks as needed, calling df_analyze before
reprocessing. Always call df_analyze before fixing up debug bind
insns.
Thomas Koenig [Sun, 24 Mar 2019 12:51:19 +0000 (12:51 +0000)]
re PR fortran/78865 (ICE in create_tmp_var, at gimple-expr.c:473)
2019-03-24 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/78865
* interface.c (compare_actual_formal): Change errors about
missing or extra to gfc_error_now to make sure they are issued.
Change "spec" to "specifier" in message.
* resolve.c (resolve_global_procedure): Also check for mismatching
interface with global symbols if the namespace has already been
resolved.
2019-03-24 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/78865
* gfortran.dg/altreturn_10.f90: New test.
* gfortran.dg/whole_file_3.f90: Change dg-warning to dg-error.
Jeff Law [Fri, 22 Mar 2019 18:14:56 +0000 (12:14 -0600)]
re PR rtl-optimization/87761 ([MIPS] New FAIL: gcc.target/mips/fix-r4000-10.c -O1 start with r265398)
PR rtl-optimization/87761
* config/mips/mips-protos.h (mips_split_move): Add new argument.
(mips_emit_move_or_split): Pass NULL for INSN into mips_split_move.
(mips_split_move): Accept new INSN argument. Try to forward SRC
into the next instruction.
(mips_split_move_insn): Pass INSN through to mips_split_move.
Jakub Jelinek [Fri, 22 Mar 2019 14:42:57 +0000 (15:42 +0100)]
re PR c++/60702 (thread_local initialization)
PR c++/60702
* cp-tree.h (get_tls_wrapper_fn): Remove declaration.
(maybe_get_tls_wrapper_call): Declare.
* decl2.c (get_tls_wrapper_fn): Make static.
(maybe_get_tls_wrapper_call): New function.
* typeck.c (build_class_member_access_expr): Handle accesses to TLS
variables.
* semantics.c (finish_qualified_id_expr): Likewise.
(finish_id_expression_1): Use maybe_get_tls_wrapper_call.
* pt.c (tsubst_copy_and_build): Likewise.
* g++.dg/tls/thread_local11.C: New test.
* g++.dg/tls/thread_local11.h: New test.
* g++.dg/tls/thread_local12a.C: New test.
* g++.dg/tls/thread_local12b.C: New test.
* g++.dg/tls/thread_local12c.C: New test.
* g++.dg/tls/thread_local12d.C: New test.
* g++.dg/tls/thread_local12e.C: New test.
* g++.dg/tls/thread_local12f.C: New test.
* g++.dg/tls/thread_local12g.C: New test.
* g++.dg/tls/thread_local12h.C: New test.
* g++.dg/tls/thread_local12i.C: New test.
* g++.dg/tls/thread_local12j.C: New test.
* g++.dg/tls/thread_local12k.C: New test.
* g++.dg/tls/thread_local12l.C: New test.
* constexpr.c (struct constexpr_ctx): Add constexpr_ops_count member.
(cxx_eval_constant_expression): When not skipping, not constant class
or location wrapper, increment *ctx->constexpr_ops_count and if it is
above constexpr_loop_nest_limit, diagnose failure.
(cxx_eval_outermost_constant_expr): Add constexpr_ops_count and
initialize ctx.constexpr_ops_count to its address.
(is_sub_constant_expr): Likewise.
The support for IPv6 that was added since last release triggered
regressions on various platforms. The size of structures passed to low
level routines was not correct anymore: it should depend on the address
family, now.
PR ada/89583
* libgnat/g-socket.adb (Bind_Socket, Connect_Socket,
Send_Socket): Fix the computation of structure lengths passed to
low level routines.
(Is_IPv6_Address): Fix the number of expected colons.
<avx512>_fmsub_<mode>_mask3<round_name>,
<avx512>_fnmadd_<mode>_mask3<round_name>,
<avx512>_fnmsub_<mode>_mask3<round_name>,
avx512f_vmfmadd_<mode>_mask3<round_name>,
avx512f_vmfmsub_<mode>_mask3<round_name>,
*avx512f_vmfnmadd_<mode>_mask3<round_name>): Use <round_nimm_predicate>
instead of register_operand and %v instead of v for match_operand 1.
(avx512f_vmfnmsub_<mode>_mask3<round_name>): Rename to ...
(*avx512f_vmfnmsub_<mode>_mask3<round_name>): ... this. Use
<round_nimm_predicate> instead of register_operand and %v instead of v
for match_operand 1.
Jakub Jelinek [Fri, 22 Mar 2019 10:12:18 +0000 (11:12 +0100)]
sse.md (<avx512>_fmadd_<mode>_mask<round_name>, [...]): Use <round_nimm_predicate> instead of nonimmediate_operand.
* config/i386/sse.md (<avx512>_fmadd_<mode>_mask<round_name>,
<avx512>_fmadd_<mode>_mask3<round_name>,
<avx512>_fmsub_<mode>_mask<round_name>,
<avx512>_fmsub_<mode>_mask3<round_name>,
<avx512>_fnmadd_<mode>_mask<round_name>,
<avx512>_fnmadd_<mode>_mask3<round_name>,
<avx512>_fnmsub_<mode>_mask<round_name>,
<avx512>_fnmsub_<mode>_mask3<round_name>,
<avx512>_fmaddsub_<mode>_mask<round_name>,
<avx512>_fmaddsub_<mode>_mask3<round_name>,
<avx512>_fmsubadd_<mode>_mask<round_name>,
<avx512>_fmsubadd_<mode>_mask3<round_name>): Use
<round_nimm_predicate> instead of nonimmediate_operand.
(fmai_vmfmadd_<mode><round_name>, fmai_vmfmsub_<mode><round_name>,
fmai_vmfnmadd_<mode><round_name>, fmai_vmfnmsub_<mode><round_name>):
Use register_operand instead of <round_nimm_predicate> for the
operand that needs to match output.
(*fmai_fmadd_<mode>, *fmai_fmsub_<mode>,
*fmai_fnmadd_<mode><round_name>, *fmai_fnmsub_<mode><round_name>):
Likewise. Formatting fixes.
Martin Sebor [Fri, 22 Mar 2019 02:58:27 +0000 (02:58 +0000)]
PR tree-optimization/89350 - Wrong -Wstringop-overflow= warning since r261518
gcc/ChangeLog:
PR tree-optimization/89350
* builtins.c (compute_objsize): Also ignore offsets whose upper
bound is negative.
* gimple-ssa-warn-restrict.c (builtin_memref): Add new member.
(builtin_memref::builtin_memref): Initialize new member.
Allow EXPR to be null.
(builtin_memref::extend_offset_range): Replace local with a member.
Avoid assuming pointer offsets are unsigned.
(builtin_memref::set_base_and_offset): Determine base object
before computing offset range.
(builtin_access::builtin_access): Handle memset.
(builtin_access::generic_overlap): Replace local with a member.
(builtin_access::strcat_overlap): Same.
(builtin_access::overlap): Same.
(maybe_diag_overlap): Same.
(maybe_diag_access_bounds): Same.
(wrestrict_dom_walker::check_call): Handle memset.
(check_bounds_or_overlap): Same.
Thomas Rodgers [Thu, 21 Mar 2019 23:48:49 +0000 (23:48 +0000)]
Integrate C++17 parallel algorithms
This is the Intel implementation of the C++17 parallel
algorithms, which has been donated to both GCC and LLVM. The upstream
project is at -
https://reviews.llvm.org/source/pstl/
The new files in the include/pstl sub-directory are covered by the
LICENSE.txt in that sub-directory, as are the tests in
testsuite/**/pstl/*
* include/Makefile.am (std_header): Add ${std_srcdir}/execution.
(pstl_srcdir, pstl_builddir, pstl_headers): New variables.
(allstamped): Add stamp-pstl.
(install-headers): Add ptsl_builddir.
* include/Makefile.in: Regenerate.
* include/bits/c++config: Add pstl configuration.
* include/pstl/LICENSE.txt: New file.
* include/pstl/algorithm_fwd.h: New file.
* include/pstl/algorithm_impl.h: New file.
* include/pstl/execution_defs.h: New file.
* include/pstl/execution_impl.h: New file.
* include/pstl/glue_algorithm_defs.h: New file.
* include/pstl/glue_algorithm_impl.h: New file.
* include/pstl/glue_execution_defs.h: New file.
* include/pstl/glue_memory_defs.h: New file.
* include/pstl/glue_memory_impl.h: New file.
* include/pstl/glue_numeric_defs.h: New file.
* include/pstl/glue_numeric_impl.h: New file.
* include/pstl/memory_impl.h: New file.
* include/pstl/numeric_fwd.h: New file.
* include/pstl/numeric_impl.h: New file.
* include/pstl/parallel_backend.h: New file.
* include/pstl/parallel_backend_tbb.h: New file.
* include/pstl/parallel_backend_utils.h: New file.
* include/pstl/parallel_impl.h: New file.
* include/pstl/pstl_config.h: New file.
* include/pstl/unseq_backend_simd.h: New file.
* include/pstl/utils.h: New file.
* include/std/algorithm: Include parallel algorithm implementations.
* include/std/execution: New file.
* include/std/memory: Include parallel algorithm implementations.
* include/std/numeric: Include parallel algorithm implementations.
* include/std/version: Add parallel algorithms feature test macro.
* testsuite/util/pstl/pstl_test_config.h: New file.
* testsuite/util/pstl/test_utils.h: New file.
* testsuite/20_util/specialized_algorithms/pstl/uninitialized_construct.cc: New file.
* testsuite/20_util/specialized_algorithms/pstl/uninitialized_copy_move.cc: New file.
* testsuite/20_util/specialized_algorithms/pstl/uninitialized_fill_destroy.cc: New file.
* testsuite/25_algorithms/pstl/alg_merge/inplace_merge.cc: New file.
* testsuite/25_algorithms/pstl/alg_merge/merge.cc: New file.
* testsuite/25_algorithms/pstl/alg_modifying_operations/copy_if.cc: New file.
* testsuite/25_algorithms/pstl/alg_modifying_operations/copy_move.cc: New file.
* testsuite/25_algorithms/pstl/alg_modifying_operations/fill.cc: New file.
* testsuite/25_algorithms/pstl/alg_modifying_operations/generate.cc: New file.
* testsuite/25_algorithms/pstl/alg_modifying_operations/is_partitioned.cc: New file.
* testsuite/25_algorithms/pstl/alg_modifying_operations/partition.cc: New file.
* testsuite/25_algorithms/pstl/alg_modifying_operations/partition_copy.cc: New file.
* testsuite/25_algorithms/pstl/alg_modifying_operations/remove.cc: New file.
* testsuite/25_algorithms/pstl/alg_modifying_operations/remove_copy.cc: New file.
* testsuite/25_algorithms/pstl/alg_modifying_operations/replace.cc: New file.
* testsuite/25_algorithms/pstl/alg_modifying_operations/replace_copy.cc: New file.
* testsuite/25_algorithms/pstl/alg_modifying_operations/rotate.cc: New file.
* testsuite/25_algorithms/pstl/alg_modifying_operations/rotate_copy.cc: New file.
* testsuite/25_algorithms/pstl/alg_modifying_operations/swap_ranges.cc: New file.
* testsuite/25_algorithms/pstl/alg_modifying_operations/transform_binary.cc: New file.
* testsuite/25_algorithms/pstl/alg_modifying_operations/transform_unary.cc: New file.
* testsuite/25_algorithms/pstl/alg_modifying_operations/unique.cc: New file.
* testsuite/25_algorithms/pstl/alg_modifying_operations/unique_copy_equal.cc: New file.
* testsuite/25_algorithms/pstl/alg_nonmodifying/adjacent_find.cc: New file.
* testsuite/25_algorithms/pstl/alg_nonmodifying/all_of.cc: New file.
* testsuite/25_algorithms/pstl/alg_nonmodifying/any_of.cc: New file.
* testsuite/25_algorithms/pstl/alg_nonmodifying/count.cc: New file.
* testsuite/25_algorithms/pstl/alg_nonmodifying/equal.cc: New file.
* testsuite/25_algorithms/pstl/alg_nonmodifying/find.cc: New file.
* testsuite/25_algorithms/pstl/alg_nonmodifying/find_end.cc: New file.
* testsuite/25_algorithms/pstl/alg_nonmodifying/find_first_of.cc: New file.
* testsuite/25_algorithms/pstl/alg_nonmodifying/find_if.cc: New file.
* testsuite/25_algorithms/pstl/alg_nonmodifying/for_each.cc: New file.
* testsuite/25_algorithms/pstl/alg_nonmodifying/mismatch.cc: New file.
* testsuite/25_algorithms/pstl/alg_nonmodifying/none_of.cc: New file.
* testsuite/25_algorithms/pstl/alg_nonmodifying/nth_element.cc: New file.
* testsuite/25_algorithms/pstl/alg_nonmodifying/reverse.cc: New file.
* testsuite/25_algorithms/pstl/alg_nonmodifying/reverse_copy.cc: New file.
* testsuite/25_algorithms/pstl/alg_nonmodifying/search_n.cc: New file.
* testsuite/25_algorithms/pstl/alg_sorting/includes.cc: New file.
* testsuite/25_algorithms/pstl/alg_sorting/is_heap.cc: New file.
* testsuite/25_algorithms/pstl/alg_sorting/is_sorted.cc: New file.
* testsuite/25_algorithms/pstl/alg_sorting/lexicographical_compare.cc: New file.
* testsuite/25_algorithms/pstl/alg_sorting/minmax_element.cc: New file.
* testsuite/25_algorithms/pstl/alg_sorting/partial_sort.cc: New file.
* testsuite/25_algorithms/pstl/alg_sorting/partial_sort_copy.cc: New file.
* testsuite/25_algorithms/pstl/alg_sorting/set.cc: New file.
* testsuite/25_algorithms/pstl/alg_sorting/sort.cc: New file.
* testsuite/26_numerics/pstl/numeric_ops/adjacent_difference.cc: New file.
* testsuite/26_numerics/pstl/numeric_ops/reduce.cc: New file.
* testsuite/26_numerics/pstl/numeric_ops/scan.cc: New file.
* testsuite/26_numerics/pstl/numeric_ops/transform_reduce.cc: New file.
* testsuite/26_numerics/pstl/numeric_ops/transform_scan.cc: New file.
* testsuite/testsuite/20_util/specialized_algorithms/pstl/uninitialized_construct.cc: New file.
* testsuite/testsuite/20_util/specialized_algorithms/pstl/uninitialized_copy_move.cc: New file.
* testsuite/testsuite/20_util/specialized_algorithms/pstl/uninitialized_fill_destroy.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_merge/inplace_merge.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_merge/merge.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_modifying_operations/copy_if.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_modifying_operations/copy_move.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_modifying_operations/fill.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_modifying_operations/generate.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_modifying_operations/is_partitioned.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_modifying_operations/partition.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_modifying_operations/partition_copy.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_modifying_operations/remove.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_modifying_operations/remove_copy.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_modifying_operations/replace.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_modifying_operations/replace_copy.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_modifying_operations/rotate.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_modifying_operations/rotate_copy.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_modifying_operations/swap_ranges.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_modifying_operations/transform_binary.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_modifying_operations/transform_unary.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_modifying_operations/unique.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_modifying_operations/unique_copy_equal.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_nonmodifying/adjacent_find.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_nonmodifying/all_of.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_nonmodifying/any_of.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_nonmodifying/count.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_nonmodifying/equal.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_nonmodifying/find.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_nonmodifying/find_end.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_nonmodifying/find_first_of.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_nonmodifying/find_if.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_nonmodifying/for_each.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_nonmodifying/mismatch.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_nonmodifying/none_of.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_nonmodifying/nth_element.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_nonmodifying/reverse.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_nonmodifying/reverse_copy.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_nonmodifying/search_n.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_sorting/includes.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_sorting/is_heap.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_sorting/is_sorted.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_sorting/lexicographical_compare.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_sorting/minmax_element.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_sorting/partial_sort.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_sorting/partial_sort_copy.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_sorting/set.cc: New file.
* testsuite/testsuite/25_algorithms/pstl/alg_sorting/sort.cc: New file.
* testsuite/testsuite/26_numerics/pstl/numeric_ops/adjacent_difference.cc: New file.
* testsuite/testsuite/26_numerics/pstl/numeric_ops/reduce.cc: New file.
* testsuite/testsuite/26_numerics/pstl/numeric_ops/scan.cc: New file.
* testsuite/testsuite/26_numerics/pstl/numeric_ops/transform_reduce.cc: New file.
* testsuite/testsuite/26_numerics/pstl/numeric_ops/transform_scan.cc: New file.
Jakub Jelinek [Thu, 21 Mar 2019 22:01:02 +0000 (23:01 +0100)]
re PR c++/89767 (ICE with tuple and optimization)
PR c++/89767
* parser.c (cp_parser_lambda_introducer): Add ids and first_capture_id
variables, check for duplicates in this function.
* lambda.c (add_capture): Don't check for duplicates nor use
IDENTIFIER_MARKED.
(register_capture_members): Don't clear IDENTIFIER_MARKED here.
* g++.dg/cpp1y/lambda-init18.C: New test.
* g++.dg/cpp1y/lambda-init19.C: New test.
* g++.dg/cpp1y/pr89767.C: New test.
Jakub Jelinek [Thu, 21 Mar 2019 22:00:04 +0000 (23:00 +0100)]
hash-table.h (hash_table): Add Lazy template parameter defaulted to false...
* hash-table.h (hash_table): Add Lazy template parameter defaulted
to false, if true, don't alloc_entries during construction, but defer
it to the first method that needs m_entries allocated.
(hash_table::hash_table, hash_table::~hash_table,
hash_table::alloc_entries, hash_table::find_empty_slot_for_expand,
hash_table::too_empty_p, hash_table::expand, hash_table::empty_slow,
hash_table::clear_slot, hash_table::traverse_noresize,
hash_table::traverse, hash_table::iterator::slide): Adjust all methods.
* hash-set.h (hash_set): Add Lazy template parameter defaulted to
false.
(hash_set::contains): If Lazy is true, use find_slot_with_hash with
NO_INSERT instead of find_with_hash.
(hash_set::traverse, hash_set::iterator, hash_set::iterator::m_iter,
hash_set::m_table): Add Lazy to template params of hash_table.
(gt_ggc_mx, gt_pch_nx): Use false as Lazy in hash_set template param.
* attribs.c (test_attribute_exclusions): Likewise.
* hash-set-tests.c (test_set_of_strings): Add iterator tests for
hash_set. Add tests for hash_set with Lazy = true.
c-family/
* c-common.c (per_file_includes_t): Use false as Lazy in hash_set
template param.
jit/
* jit-recording.c (reproducer::m_set_identifiers): Use false as Lazy
in hash_set template param.
Thomas Schwinge [Thu, 21 Mar 2019 20:13:44 +0000 (21:13 +0100)]
[PR72741] Properly handle clauses specifying the level of parallelism for 'external' Fortran OpenACC routines
..., so as to also for these enable the generic middle end OMP code to verify
proper nesting of loops/routines regarding their levels of parallelism.
gcc/fortran/
PR fortran/72741
* openmp.c (gfc_match_oacc_routine): Set the level of parallelism
for all variants.
(gfc_resolve_oacc_routines): Call gfc_add_omp_declare_target.
gcc/testsuite/
PR fortran/72741
* c-c++-common/goacc/routine-3-extern.c: New file.
* c-c++-common/goacc/routine-3.c: Adjust.
* c-c++-common/goacc/routine-4-extern.c: New file.
* c-c++-common/goacc/routine-4.c: Adjust.
* gfortran.dg/goacc/routine-module-3.f90: New file.
* gfortran.dg/goacc/routine-external-level-of-parallelism-1.f: New
file.
* gfortran.dg/goacc/routine-external-level-of-parallelism-2.f:
Likewise.
Co-Authored-By: Cesar Philippidis <cesar@codesourcery.com>
From-SVN: r269858
If 'use'ing with an old GCC a new module file (with OpenACC 'routine'
directive's level of parallelism encoded), then that expectedly fails as
follows:
f951: Fatal Error: Reading module 'routine_module_mod_1' at line 27 column 21: find_enum(): Enum not found
If 'use'ing with a new GCC an old module file (without OpenACC 'routine'
directive's level of parallelism encoded), then that (silently) continues to
accept the module file, and will proceed with the previous, erroneous behavior.
These seem to be acceptable compromises, instead of incrementing 'MOD_VERSION'.
Thomas Schwinge [Thu, 21 Mar 2019 18:54:50 +0000 (19:54 +0100)]
[testsuite, Fortran] Consistently set 'DEFAULT_FFLAGS'
In the same 'runtest' instance, 'global' variables persist from one '*.exp'
file to another.
All other '*.exp' files are using " -pedantic-errors" instead of the empty
string as the default for 'DEFAULT_FFLAGS'. Thus this setting of
'DEFAULT_FFLAGS' is not idempotent, depends on whether
'gfortran.dg/ieee/ieee.exp', or an other defining '*.exp' file is executed
first.
gcc/testsuite/
PR fortran/29383
* gfortran.dg/ieee/ieee.exp (DEFAULT_FFLAGS): Set the same as in
other '*.exp' files.
Richard Biener [Thu, 21 Mar 2019 14:27:32 +0000 (14:27 +0000)]
re PR middle-end/89779 (internal compiler error: tree check: expected class ‘type’, have ‘exceptional’ (error_mark) in tree_nop_conversion_p, at tree.c:12798)
2019-03-21 Richard Biener <rguenther@suse.de>
PR tree-optimization/89779
* tree.c (tree_nop_conversion): Consolidate and fix defensive
checks with respect to released SSA names now having error_mark_node
type.
* fold-const.c (operand_equal_p): Likewise.
Jonathan Wakely [Thu, 21 Mar 2019 14:03:56 +0000 (14:03 +0000)]
In C++17 <math.h> should not put special functions in global namespace
IS 29124 8.2 [sf.mathh] says that <math.h> should add the names of the
special functions to the global namespace. However, C++17 Annex D
[depr.c.headers] excludes those functions explicitly, so they should not
be placed in the global namespace unconditionally for C++17.
Only add them to the global namespace when IS 29124 is explicitly
requested via the __STDCPP_WANT_MATH_SPEC_FUNCS__ macro.
* include/c_compatibility/math.h [!__STDCPP_WANT_MATH_SPEC_FUNCS__]
(assoc_laguerre, assoc_laguerref, assoc_laguerrel, assoc_legendre)
(assoc_legendref, assoc_legendrel, beta, betaf, betal, comp_ellint_1)
(comp_ellint_1f, comp_ellint_1l, comp_ellint_2, comp_ellint_2f)
(comp_ellint_2l, comp_ellint_3, comp_ellint_3f, comp_ellint_3l)
(cyl_bessel_i, cyl_bessel_if, cyl_bessel_il, cyl_bessel_j)
(cyl_bessel_jf, cyl_bessel_jl, cyl_bessel_k, cyl_bessel_kf)
(cyl_bessel_kl, cyl_neumann, cyl_neumannf, cyl_neumannl, ellint_1)
(ellint_1f, ellint_1l, ellint_2, ellint_2f, ellint_2l, ellint_3)
(ellint_3f, ellint_3l, expint, expintf, expintl, hermite, hermitef)
(hermitel, laguerre, laguerref, laguerrel, legendre, legendref)
(legendrel, riemann_zeta, riemann_zetaf, riemann_zetal, sph_bessel)
(sph_besself, sph_bessell, sph_legendre, sph_legendref, sph_legendrel)
(sph_neumann, sph_neumannf, sph_neumannl): Only add using-declarations
when the special functions IS is enabled, not for C++17.
* testsuite/26_numerics/headers/cmath/functions_global_c++17.cc:
Replace with ...
* testsuite/26_numerics/headers/cmath/functions_global.cc: New test,
without checks for special functions in C++17.
* testsuite/26_numerics/headers/cmath/special_functions_global.cc:
New test.
Iain Buclaw [Wed, 20 Mar 2019 23:52:48 +0000 (23:52 +0000)]
d: Fix ICE force_type_die, at dwarf2out.c using nested types
In functions whose return type is instantiated from a nested template,
make sure that all members of the instance are emitted before finishing
the outer function, otherwise they will be removed during the
prune_unused_types pass.
gcc/d/ChangeLog:
2019-03-21 Iain Buclaw <ibuclaw@gdcproject.org>
PR d/89017
* d-codegen.cc (d_decl_context): Skip over template instances when
finding the context.
* decl.cc (DeclVisitor::visit(TemplateDeclaration)): New override.
(build_type_decl): Include parameters in name of template types.
Jason Merrill [Wed, 20 Mar 2019 20:31:40 +0000 (16:31 -0400)]
PR c++/87480 - decltype of member access in default template arg
The issue here is that declval<T>().d is considered instantiation-dependent
within a template, as the access to 'd' might depend on the particular
specialization. But when we're deducing template arguments for a call, we
know that the call and the arguments are non-dependent, so we can do the
substitution as though we aren't in a template. Which strictly speaking we
aren't, since the default argument is considered a separate definition.
* pt.c (type_unification_real): Accept a dependent result in
template context.
Even if a global register is being clobbered in a function we usually
do not save and restore it. However, we still have to do this if it is
a special register. Most of the places in the backend handle this
correctly but not the prologue/epilogue optimization.
gcc/ChangeLog:
2019-03-20 Andreas Krebbel <krebbel@linux.ibm.com>
PR target/89775
* config/s390/s390.c (global_not_special_regno_p): Move to make it
available to ...
(s390_optimize_register_info): Use global_not_special_regno_p to
check for global regs.
2019-03-20 Jakub Jelinek <jakub@redhat.com>
PR target/89775
* gcc.target/s390/pr89775-1.c: New test.
* gcc.target/s390/pr89775-2.c: New test.
Jim Wilson [Tue, 19 Mar 2019 22:33:34 +0000 (22:33 +0000)]
RISC-V: Fix %lo overflow with BLKmode references.
gcc/
PR target/89411
* config/riscv/riscv.c (riscv_valid_lo_sum_p): New arg x. New locals
align, size, offset. Use them to handle a BLKmode reference. Update
comment.
(riscv_classify_address): Pass info->offset to riscv_valid_lo_sum_p.
gcc/testsuite/
PR target/89411
* gcc.target/riscv/losum-overflow.c: New test.
Ian Lance Taylor [Tue, 19 Mar 2019 18:42:43 +0000 (18:42 +0000)]
compiler,runtime: pass old slice's ptr/len/cap by value to growslice
In the C calling convention, on AMD64, and probably a number of
other architectures, a 3-word struct argument is passed on stack.
This is less efficient than passing in three registers. Further,
this may affect the code generation in other part of the program,
even if the function is not actually called.
Slices are common in Go and append is a common slice operation,
which calls growslice in the growing path. To improve the code
generation, pass the slice header's three fields as separate
values, instead of a struct, to growslice.
The drawback is that this makes the runtime implementation
slightly diverges from the gc runtime.