platform/upstream/gcc.git
4 years agolibstdc++: Fix new tests that fail for ILP32 targets
Jonathan Wakely [Tue, 18 Feb 2020 18:56:30 +0000 (18:56 +0000)]
libstdc++: Fix new tests that fail for ILP32 targets

* testsuite/20_util/integer_comparisons/equal.cc: Fix invalid
assumption that long is wider than int.
* testsuite/20_util/integer_comparisons/greater_equal.cc: Likewise.
* testsuite/20_util/integer_comparisons/less.cc: Likewise.
* testsuite/20_util/integer_comparisons/less_equal.cc: Likewise.
* testsuite/20_util/integer_comparisons/not_equal.cc: Likewise.

4 years agoUse au->lock exclusively for locking in async I/O.
Thomas König [Thu, 13 Feb 2020 21:22:04 +0000 (22:22 +0100)]
Use au->lock exclusively for locking in async I/O.

2020-02-18  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/93599
* io/async.c (destroy_adv_cond): Do not destroy lock.
(async_io): Make sure au->lock is locked for finishing of thread.
Do not lock/unlock around signalling emptysignal. Unlock au->lock
before return.
(init_adv_cond): Do not initialize lock.
(enqueue_transfer): Unlock after signal.
(enqueue_done_id): Likewise.
(enqueue_done): Likewise.
(enqueue_close): Likewise.
(enqueue_data_transfer): Likewise.
(async_wait_id): Do not lock/unlock around signalling au->work.
(async_wait): Unlock after signal.
* io/async.h (SIGNAL): Add comment about needed au->lock.
Remove locking/unlocking of advcond->lock.
(WAIT_SIGNAL_MUTEX): Add comment. Remove locking/unlocking of
advcond->lock.  Unlock mutex only at the end.  Loop on
__ghread_cond_wait returning zero.
(REVOKE_SIGNAL): Add comment. Remove locking/unlocking of
advcond->lock.
(struct adv_cond): Remove mutex from struct.

asdf

4 years agolibstdc++: P1976R2 Fixed-size span construction from dynamic range
Jonathan Wakely [Tue, 18 Feb 2020 15:51:27 +0000 (15:51 +0000)]
libstdc++: P1976R2 Fixed-size span construction from dynamic range

This includes fixes for first, last, as_bytes and as_writable_bytes
which were missing from the paper.

* include/std/span (__cpp_lib_span): Update value.
(span(It, size_type), span(It, End)): Make conditionally explicit. Add
assertion.
(span(R&&), span(const span<OType, OExtent>&)): Likewise and relax
constraints.
(span::first<Count>(), span::last<Count>()): Use explicit type in
return statement.
(as_bytes, as_writable_bytes): Likewise.
* include/std/version (__cpp_lib_span): Update value.
* testsuite/23_containers/span/1.cc: Check new value.
* testsuite/23_containers/span/2.cc: Check new value.
* testsuite/23_containers/span/explicit.cc: New test.

4 years agolibstdc++: Fix and simplify constraints on std::span constructors
Jonathan Wakely [Tue, 18 Feb 2020 13:12:44 +0000 (13:12 +0000)]
libstdc++: Fix and simplify constraints on std::span constructors

This makes the constraints consistent with the pre-Prague working paper.

* include/std/span (span::__is_compatible_array): Simplify alias
template by using requires-clause.
(span::__is_compatible_ref): New alias template for constraining
constructors.
(span::__is_compatible_iterator, span::__is_compatible_range): Remove.
(span(It, size_type), span(It, End)): Use __is_compatible_ref.
(span(T(&)[N], span(array<T, N>&), span(const array<T, N>&)): Remove
redundant parentheses.
(span(R&&)): Add missing constraints.

4 years agolibstdc++: Reorder declarations of std::span members
Jonathan Wakely [Tue, 18 Feb 2020 12:33:07 +0000 (12:33 +0000)]
libstdc++: Reorder declarations of std::span members

I find it easier to work with this class when the declarations match the
order in the C++2a working paper.

There's no need to use long, descriptive template parameter names like
_ContiguousIterator when the parameter is already constrained by the
std::contiguous_iterator concept. This is also consistent with the
naming conventions in the working paper.

* include/std/span (span): Reorder members and rename template
parameters to match declarations in the C++2a working paper.

4 years agolibstdc++: P2116R0 Remove tuple-like protocol support from fixed-extent span
Jonathan Wakely [Tue, 18 Feb 2020 12:29:29 +0000 (12:29 +0000)]
libstdc++: P2116R0 Remove tuple-like protocol support from fixed-extent span

Following this change it's no longer possible to use std::span with
structured bindings or with the tuple-like API. It will probably come
back for C++23 though.

P2116R0 Remove tuple-like protocol support from fixed-extent span
* include/std/span (get, tuple_size, tuple_element): Remove.
* testsuite/23_containers/span/everything.cc: Remove checks for
tuple-like API.
* testsuite/23_containers/span/get_neg.cc: Remove.
* testsuite/23_containers/span/tuple_element_dynamic_neg.cc: Remove.
* testsuite/23_containers/span/tuple_element_oob_neg.cc: Remove.
* testsuite/23_containers/span/tuple_size_neg.cc: Remove.

4 years agolibstdc++: P2106R0 Alternative wording for GB315 and GB316
Patrick Palka [Mon, 17 Feb 2020 21:13:28 +0000 (16:13 -0500)]
libstdc++: P2106R0 Alternative wording for GB315 and GB316

libstdc++-v3/ChangeLog:

P2106R0 Alternative wording for GB315 and GB316
* include/bits/ranges_algo.h (in_fun_result): New.
(for_each_result, for_each_n_result): Change into an alias of
in_fun_result.
(in_in_result): New.
(mismatch_result): Change into an alias of in_in_result.
(copy_if_result): Change into an alias of in_out_result.
(swap_ranges_result): Change into an alias of in_in_result.
(unary_transform_result): Change into an alias of in_out_result.
(in_in_out_result): New.
(binary_transform_result): Change into an alias of in_in_out_result.
(replace_copy_result, replace_copy_if_result, remove_copy_if_result,
remove_copy_result, unique_copy_result, reverse_copy_result,
rotate_copy_result, partial_sort_copy_result): Change into an alias of
in_out_result.
(in_out_out_result): New.
(partition_copy_result, merge_result): Change into an alias of
in_out_out_result.
(set_union_result, set_intersection_result): Change into an alias of
in_in_out_result.
(set_difference_result): Change into an alias of in_out_result.
(set_symmetric_difference): Change into an alias of in_in_out_result.
(min_max_result): New.
(minmax_result, minmax_element_result): Change into an alias of
min_max_result.
(in_found_result): New.
(next_permutation_result, prev_permutation_result): Change into an alias
of in_found_result.
(__next_permutation_fn::operator(), __prev_permutation_fn::operator()):
Adjust following changes to next_permutation_result and
prev_permutation_result.
* include/bits/ranges_algobase.h (in_out_result): New.
(copy_result, move_result, move_backward_result, copy_backward_result,
copy_n_result): Change into an alias of in_out_result.
* include/bits/ranges_uninitialized.h (uninitialized_copy_result,
uninitialized_copy_n_result, uninitialized_move_result,
uninitialized_move_n_result): Likewise.
* testsuite/25_algorithms/next_permutation/constrained.cc: Adjust uses of
structured bindings.
* testsuite/25_algorithms/prev_permutation/constrained.cc: Likewise.

4 years agolibstdc++: P1243R4 Rangify new algorithms
Patrick Palka [Mon, 17 Feb 2020 16:50:29 +0000 (11:50 -0500)]
libstdc++: P1243R4 Rangify new algorithms

This adds rangified overloads for for_each_n, sample and clamp as per P1243R4.

libstdc++-v3/ChangeLog:

P1243R4 Rangify new algorithms
* include/bits/ranges_algo.h (for_each_n_result, __for_each_n_fn,
for_each_n, __sample_fn, sample, __clamp_fn, clamp): New.
* testsuite/25_algorithms/clamp/constrained.cc: New test.
* testsuite/25_algorithms/for_each/constrained.cc: Augment test.
* testsuite/25_algorithms/sample/constrained.cc: New test.

4 years ago[fortran] ICE assign character pointer to non target PR93714
Mark Eggleston [Tue, 18 Feb 2020 15:54:13 +0000 (15:54 +0000)]
[fortran] ICE assign character pointer to non target PR93714

An ICE occurred if an attempt was made to assign a pointer to a
character variable that has an length incorrectly specified using
a real constant and does not have the target attribute.

gcc/fortran/ChangeLog

PR fortran/93714
* expr.c (gfc_check_pointer_assign): Move check for
matching character length to after checking the lvalue
attributes for target or pointer.

gcc/testsuite/ChangeLog

PR fortran/93714
* gfortran.dg/char_pointer_assign_6.f90: Look for no target
message instead of length mismatch.
* gfortran.dg/pr93714_1.f90
* gfortran.dg/pr93714_2.f90

4 years agoRestore LTO PGO bootstrap after ea0b12523d0d9a9059b5.
Martin Liska [Tue, 18 Feb 2020 15:33:44 +0000 (16:33 +0100)]
Restore LTO PGO bootstrap after ea0b12523d0d9a9059b5.

* value-prof.c (stream_out_histogram_value): Restore LTO PGO
bootstrap by missing removal of invalid sanity check.

4 years ago[Fortran] ICE: Invalid expression in gfc_element_size PR93601
Mark Eggleston [Tue, 18 Feb 2020 14:15:41 +0000 (14:15 +0000)]
[Fortran] ICE: Invalid expression in gfc_element_size PR93601

ICE occurs when assigning a BOZ constant to an class(*) variable
with the allocatable attribute. Use of BOZ constants outside
data statements and int/real/dble/cmplx intrinsics is not allowed.

Original patch provided by Steven G. Kargl  <kargl@gcc.gnu.org>.

gcc/fortran/ChangeLog

PR fortran/93601
* match.c (gfc_match_assignment) : Reject assignment if
the lhs stype is BT_CLASS and the rhs type is BT_BOZ.

gcc/testsuite/ChangeLog

PR fortran/93601
* gfortran.dg/pr93601.f90 : New test.

4 years agoAlways compare types of LHS for gimple_assign in ICF.
Martin Liska [Tue, 18 Feb 2020 14:07:06 +0000 (15:07 +0100)]
Always compare types of LHS for gimple_assign in ICF.

PR ipa/92518
* ipa-icf-gimple.c (func_checker::compare_gimple_assign):
Always compare LHS of gimple_assign.

4 years agoDrop MALLOC attribute for void functions.
Martin Liska [Tue, 18 Feb 2020 13:39:41 +0000 (14:39 +0100)]
Drop MALLOC attribute for void functions.

PR ipa/93583
* cgraph.c (cgraph_node::verify_node): Verify MALLOC attribute
and return type of functions.
* ipa-param-manipulation.c (ipa_param_adjustments::adjust_decl):
Drop MALLOC attribute for void functions.
* ipa-pure-const.c (funct_state_summary_t::duplicate): Drop
malloc_state for a new VOID clone.
PR ipa/93583
* gcc.dg/ipa/pr93583.c: New test.

4 years agoIntroduce -fprofile-reproducibility and support it with TOP N.
Martin Liska [Tue, 18 Feb 2020 13:28:22 +0000 (14:28 +0100)]
Introduce -fprofile-reproducibility and support it with TOP N.

PR ipa/92924
* common.opt: Add -fprofile-reproducibility.
* doc/invoke.texi: Document it.
* value-prof.c (dump_histogram_value):
Document and support behavior for counters[0]
being a negative value.
(get_nth_most_common_value): Handle negative
counters[0] in respect to flag_profile_reproducible.
PR ipa/92924
* libgcov-merge.c (merge_topn_values_set): Record
when a TOP N counter becomes invalid.  When merging
remove a smallest value if the space is needed.

4 years agoanalyzer.opt: rewrite description of -fdump-analyzer-callgraph [PR 93692]
David Malcolm [Tue, 18 Feb 2020 11:06:31 +0000 (06:06 -0500)]
analyzer.opt: rewrite description of -fdump-analyzer-callgraph [PR 93692]

gcc/analyzer/ChangeLog:
PR analyzer/93692
* analyzer.opt (fdump-analyzer-callgraph): Rewrite description.

4 years agoanalyzer: fix ICE on failed casts [PR 93777]
David Malcolm [Mon, 17 Feb 2020 22:37:52 +0000 (17:37 -0500)]
analyzer: fix ICE on failed casts [PR 93777]

PR analyzer/93777 reports ICEs in a Fortran and C++ case involving
a cast of a NULL pointer to a REFERENCE_TYPE.

In both cases the call to build_cast fails and returns a NULL type, but
region_model::maybe_cast_1 asserts that a non-NULL type was returned.

This patch fixes the ICEs by converting the assertion to a conditional.

gcc/analyzer/ChangeLog:
PR analyzer/93777
* region-model.cc (region_model::maybe_cast_1): Replace assertion
that build_cast returns non-NULL with a conditional, falling
through to the logic which returns a new unknown value of the
desired type if it fails.

gcc/testsuite/ChangeLog:
PR analyzer/93777
* g++.dg/analyzer/pr93777.C: New test.
* gfortran.dg/analyzer/pr93777.f90: New test.

4 years agoanalyzer: fix ICE on COMPONENT_REF of ARRAY_TYPE [PR 93778]
David Malcolm [Mon, 17 Feb 2020 21:43:46 +0000 (16:43 -0500)]
analyzer: fix ICE on COMPONENT_REF of ARRAY_TYPE [PR 93778]

PR analyzer/93778 reports an ICE with -fanalyzer on a gfortran test case
at this gimple stmt:

  _gfortran_st_set_nml_var (&dt_parm.0, &ro.xi.jq, &"ro%xi%jq"[1]{lb: 1 sz: 1}, 4, 0, D.3913);

where ro.xi.jq is a COMPONENT_REF, but ro.xi is of type "struct bl[3]".

The analyzer's handling of COMPONENT_REF assumes that the type of the
1st argument is a RECORD_TYPE or UNION_TYPE, whereas in this case it's
an ARRAY_TYPE, leading to a failed as_a inside
region_model::get_field_region.

This patch fixes the ICE by generalizing the "give up on this tree code"
logic from r10-6667-gf76a88ebf089871dcce215aa0cb1956ccc060895 for
PR analyzer/93388, so that the analyzer gives up when it needs to get an
lvalue for a COMPONENT_REF on something other than a RECORD_TYPE or
UNION_TYPE.

gcc/analyzer/ChangeLog:
PR analyzer/93778
* engine.cc (impl_region_model_context::on_unknown_tree_code):
Rename to...
(impl_region_model_context::on_unexpected_tree_code): ...this and
convert first argument from path_var to tree.
(exploded_node::on_stmt): Pass ctxt to purge_for_unknown_fncall.
* exploded-graph.h (region_model_context::on_unknown_tree_code):
Rename to...
(region_model_context::on_unexpected_tree_code): ...this and
convert first argument from path_var to tree.
* program-state.cc (sm_state_map::purge_for_unknown_fncall): Add
ctxt param and pass on to calls to get_rvalue.
* program-state.h (sm_state_map::purge_for_unknown_fncall): Add
ctxt param.
* region-model.cc (region_model::handle_unrecognized_call): Pass
ctxt on to call to get_rvalue.
(region_model::get_lvalue_1): Move body of default case to
region_model::make_region_for_unexpected_tree_code and call it.
Within COMPONENT_REF case, reject attempts to handle types other
than RECORD_TYPE and UNION_TYPE.
(region_model::make_region_for_unexpected_tree_code): New
function, based on default case of region_model::get_lvalue_1.
* region-model.h
(region_model::make_region_for_unexpected_tree_code): New decl.
(region_model::on_unknown_tree_code): Rename to...
(region_model::on_unexpected_tree_code): ...this and convert first
argument from path_var to tree.
(class test_region_model_context): Update vfunc implementation for
above change.

gcc/testsuite/ChangeLog:
PR analyzer/93778
* gfortran.dg/analyzer/pr93778.f90: New test.

4 years agoanalyzer: fix ICE on pointer arithmetic with incomplete types [PR 93774]
David Malcolm [Mon, 17 Feb 2020 14:18:39 +0000 (09:18 -0500)]
analyzer: fix ICE on pointer arithmetic with incomplete types [PR 93774]

PR analyzer/93774 reports an ICE in gfortran with -fanalyzer within
region_model::convert_byte_offset_to_array_index on a pointer of
incomplete type ("character(kind=1)[0:][1:0] * restrict").

This patch bulletproofs the routine against incomplete types, fixing
the ICE.

gcc/analyzer/ChangeLog:
PR analyzer/93774
* region-model.cc
(region_model::convert_byte_offset_to_array_index): Use
int_size_in_bytes before calling size_in_bytes, to gracefully fail
on incomplete types.

gcc/testsuite/ChangeLog:
PR analyzer/93774
* gfortran.dg/analyzer/deferred_character_25.f90: New test,
based on gfortran.dg/deferred_character_25.f90.

4 years agoanalyzer: add test coverage for gfortran ICE fix [PR 93779]
David Malcolm [Mon, 17 Feb 2020 08:28:08 +0000 (03:28 -0500)]
analyzer: add test coverage for gfortran ICE fix [PR 93779]

PR analyzer/93779 reports an ICE in gfortran with -fanalyzer
that was fixed for GCC 10 by a workaround in
f76a88ebf089871dcce215aa0cb1956ccc060895; the tree code in
question is a FUNCTION_DECL.

Given that I want to rework the above patch at some point, it seems
prudent to add test coverage to ensure the ICE doesn't come back,
which this patch does.

gcc/testsuite/ChangeLog:
PR analyzer/93779
* gfortran.dg/analyzer/pr88304-2.f90: New test, adapted from
gfortran.fortran-torture/compile/pr88304-2.f90

4 years ago[Fortran] ICE in gfc_typenode_for_spec PR93603
Mark Eggleston [Tue, 18 Feb 2020 12:23:20 +0000 (12:23 +0000)]
[Fortran] ICE in gfc_typenode_for_spec PR93603

Associating a symbol with a BOZ constant caused an ICE.  Output
an error message as an association target cannot be a BOZ
constant.

Original patch provided by Steven G. Kargl  <kargl@gcc.gnu.org>.

gcc/fortran/ChangeLog

PR fortran/93603
* match.c (gfc_match_associate) : If target expression
has the type BT_BOZ output an error and goto
assocListError.

gcc/testsuite/ChangeLog

PR fortran/93603
* gfortran.dg/pr93603.f90 : New test.

4 years ago[fortran] ICE in gfc_validate_kind(): Got bad kind [PR93580]
Mark Eggleston [Tue, 18 Feb 2020 10:00:50 +0000 (10:00 +0000)]
[fortran] ICE in gfc_validate_kind(): Got bad kind [PR93580]

Caused by using invalid part_refs in kind specifications,
e.g. %re or %im on non-complex expressions and %len on
non character expressions.

Check whether %re, %im and %len are valid when checking
kind specification.

The original patch from Steven G. Kargl  <kargl@gcc.gnu.org> only
checked for %re and %im.

gcc/fortran/ChangeLog:

PR fortran/93580
* primary.c (gfc_match_varspec): If the symbol following %
is re or im and the primary expression type is not BT_COMPLEX
issue an error. If the symbol is len and the primary
expression type is not BT_CHARACTER is an error.

gcc/testsuite/ChangeLog:

PR fortran/93580
* gfortran.dg/dg/pr93580.f90: New test.

4 years agoipa: Various diagnostic fixes [PR93797]
Jakub Jelinek [Tue, 18 Feb 2020 08:54:17 +0000 (09:54 +0100)]
ipa: Various diagnostic fixes [PR93797]

As the patch shows, various messages didn't match the field names they are
talking about.

2020-02-18  Jakub Jelinek  <jakub@redhat.com>

PR ipa/93797
* cgraph.c (verify_speculative_call): Use speculative_id instead of
speculative_uid in messages.  Remove trailing whitespace from error
message.  Use num_speculative_call_targets instead of
num_speculative_targets in a message.
(cgraph_node::verify_node): Use call_stmt instead of cal_stmt in
edge messages and stmt instead of cal_stmt in reference message.

4 years agotree-ssa: Fix ICE in build_vector_type [PR93780]
Jakub Jelinek [Tue, 18 Feb 2020 08:07:15 +0000 (09:07 +0100)]
tree-ssa: Fix ICE in build_vector_type [PR93780]

The following testcase ICEs, because execute_update_addresses_taken attempts
to create a VECTOR_TYPE with non-power of 2 number of elts.
Fixed by guarding it with the corresponding predicate.

2020-02-18  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/93780
* tree-ssa.c (non_rewritable_lvalue_p): Check valid_vector_subparts_p
before calling build_vector_type.
(execute_update_addresses_taken): Likewise.

* gcc.dg/pr93780.c: New test.

4 years agoTypo fixes - functoin -> function [PR93796]
Jakub Jelinek [Tue, 18 Feb 2020 07:54:52 +0000 (08:54 +0100)]
Typo fixes - functoin -> function [PR93796]

2020-02-18  Jakub Jelinek  <jakub@redhat.com>

PR driver/93796
* params.opt (-param=ipa-max-switch-predicate-bounds=): Fix help
typo, functoin -> function.
* tree.c (free_lang_data_in_decl): Fix comment typo,
functoin -> function.
* ipa-visibility.c (cgraph_externally_visible_p): Likewise.

4 years agodiagnostics: don't generate URLs that won't be used
David Malcolm [Tue, 4 Feb 2020 00:58:54 +0000 (19:58 -0500)]
diagnostics: don't generate URLs that won't be used

The two places in diagnostics.c where URLs are printed both do
non-trivial work to generate the URL strings (including malloc/free), so
don't do this work if URL-printing is disabled.

gcc/ChangeLog:
* diagnostic.c (print_any_cwe): Don't call get_cwe_url if URLs
won't be printed.
(print_option_information): Don't call get_option_url if URLs
won't be printed.

4 years agoanalyzer: fix ICE on function pointer casts [PR 93775]
David Malcolm [Mon, 17 Feb 2020 08:06:14 +0000 (03:06 -0500)]
analyzer: fix ICE on function pointer casts [PR 93775]

PR analyzer/93775 reports an ICE in cgraph_node::get when -fanalyzer is
used on code that calls a function pointer that was generated via a cast
from a non-function.

This patch fixes it by bulletproofing region_model::get_fndecl_for_call
for the case where the code_region's get_tree_for_child_region returns
NULL.

gcc/analyzer/ChangeLog:
PR analyzer/93775
* region-model.cc (region_model::get_fndecl_for_call): Handle the
case where the code_region's get_tree_for_child_region returns
NULL.

gcc/testsuite/ChangeLog:
PR analyzer/93775
* gcc.dg/analyzer/20020129-1.c: New test.

4 years agoDaily bump.
GCC Administrator [Tue, 18 Feb 2020 00:16:45 +0000 (00:16 +0000)]
Daily bump.

4 years agoUpdate cpplib sv.po.
Joseph Myers [Mon, 17 Feb 2020 21:25:05 +0000 (21:25 +0000)]
Update cpplib sv.po.

* sv.po: Update.

4 years agoDo not call null register_common in emutls
Alexandre Oliva [Mon, 17 Feb 2020 20:08:11 +0000 (17:08 -0300)]
Do not call null register_common in emutls

Thread-local variables with DECL_COMMON trigger an internal compiler
error on targets that use emulated TLS without register_common, when
we attempt to expand a call to the NULL register_common, with
testcases as simple as gcc.dg/tls/emutls-2.c.

The documentation states that, on such targets, common variables would
fall back to explicitly initialized.  This patch rearranges the code
that deals with initialization of common and non-common variables,
complementing code that is already in place to detect
register_common-less targets.

for  gcc/ChangeLog

* tree-emutls.c (new_emutls_decl, emutls_common_1): Complete
handling of register_common-less targets.

for  gcc/testsuite/ChangeLog

* gcc.dg/tls/emutls-3.c: New, combining emutls-2.c and
thr-init-2.c into an execution test with explicitly common
variables.

4 years ago[AArch64] Fix PR93565 testcase for ILP32.
Wilco Dijkstra [Mon, 17 Feb 2020 19:09:40 +0000 (19:09 +0000)]
[AArch64] Fix PR93565 testcase for ILP32.

Fix PR93565 testcase for ILP32.

testsuite/
* gcc.target/aarch64/pr93565.c: Fix test for ilp32.

4 years agolibstdc++: P1964R2 Wording for boolean-testable
Jonathan Wakely [Mon, 17 Feb 2020 18:15:00 +0000 (18:15 +0000)]
libstdc++: P1964R2 Wording for boolean-testable

This removes the complicated std::boolean concept, as agreed in Prague.

* include/bits/ranges_algo.h (__find_fn, __find_first_of_fn)
(__adjacent_find_fn): Cast result of predicate to bool.
* include/std/concepts (__boolean): Remove.
(__detail::__boolean_testable_impl, __detail::__boolean_testable): Add
new helper concepts.
(__detail::__weakly_eq_cmp_with, totally_ordered, totally_ordered_with)
(predicate): Use __boolean_testable instead of boolean.
* libsupc++/compare (__detail::__partially_ordered, _Synth3way):
Likewise.

4 years agolibstdc++: P1970R2 Consistency for size() functions: Add ranges::ssize
Jonathan Wakely [Mon, 17 Feb 2020 17:58:09 +0000 (17:58 +0000)]
libstdc++: P1970R2 Consistency for size() functions: Add ranges::ssize

This defines ranges::ssize as approved in Prague. It's unclear what is
supposed to happen for types for which range_difference_t is not a valid
type. I've assumed they are not meant to be usable with ranges::ssize,
despite being usable with ranges::size.

* include/bits/range_access.h (_SSize, ssize): Define for C++20.
* testsuite/std/ranges/access/ssize.cc: New test.

4 years agolibstdc++ P1956R1 On the names of low-level bit manipulation functions
Jonathan Wakely [Mon, 17 Feb 2020 16:03:48 +0000 (16:03 +0000)]
libstdc++ P1956R1 On the names of low-level bit manipulation functions

Implement this change for C++20 that was just approved in Prague.

P1956R1 On the names of low-level bit manipulation functions
* include/bits/hashtable_policy.h: Update comment.
* include/std/bit (__ispow2, __ceil2, __floor2, __log2p1): Rename.
(ispow2, ceil2, floor2, log2p1): Likewise.
(__cpp_lib_int_pow2): Add feature test macro.
* include/std/charconv (__to_chars_len_2): Adjust use of __log2p1.
* include/std/memory (assume_aligned): Adjust use of ispow2.
* include/std/version (__cpp_lib_int_pow2): Add.
* libsupc++/new_opa.cc: Adjust use of __ispow2.
* src/c++17/memory_resource.cc: Likewise, and for __ceil2 and __log2p1.
* testsuite/17_intro/freestanding.cc: Adjust use of ispow2.
* testsuite/26_numerics/bit/bit.pow.two/ceil2.cc: Rename to ...
* testsuite/26_numerics/bit/bit.pow.two/bit_ceil.cc: ... here.
* testsuite/26_numerics/bit/bit.pow.two/ceil2_neg.cc: Rename to ...
* testsuite/26_numerics/bit/bit.pow.two/bit_ceil_neg.cc: ... here.
* testsuite/26_numerics/bit/bit.pow.two/floor2.cc: Rename to ...
* testsuite/26_numerics/bit/bit.pow.two/bit_floor.cc: ... here.
* testsuite/26_numerics/bit/bit.pow.two/log2p1.cc: Rename to ...
* testsuite/26_numerics/bit/bit.pow.two/bit_width.cc: ... here.
* testsuite/26_numerics/bit/bit.pow.two/ispow2.cc: Rename to ...
* testsuite/26_numerics/bit/bit.pow.two/has_single_bit.cc: ... here.

4 years agoFix existing fold-vec-extract-longlong.p8.c testcase
Will Schmidt [Mon, 17 Feb 2020 16:22:38 +0000 (10:22 -0600)]
Fix existing fold-vec-extract-longlong.p8.c testcase

    The code generated by this test changed shortly after
    this test was committed, and we didn't get back to
    updating the scan-assembler statements to match.
    Until now.

[testsuite]
    * gcc.target/powerpc/fold-vec-extract-longlong.p8.c: Correct
    number of expected insns.

4 years agolibstdc++: Add comment to <charconv> explaining C++14 status
Jonathan Wakely [Mon, 17 Feb 2020 15:44:03 +0000 (15:44 +0000)]
libstdc++: Add comment to <charconv> explaining C++14 status

This header is intentionally valid in C++14 mode, because no conforming
C++14 program will try to include <charconv> and so it's OK to add new
(non-reserved in C++14) names to namespace std. However, other headers
must not include <charconv> transitively prior to C++17, so that we
don't add those non-reserved names without the user requesting it.

This adds a comment to the header explaining that.

* include/std/charconv: Add comment.

4 years agolibstdc++: Reduce header dependencies for C++20 (PR 92546)
Jonathan Wakely [Mon, 17 Feb 2020 15:25:33 +0000 (15:25 +0000)]
libstdc++: Reduce header dependencies for C++20 (PR 92546)

In C++20 <memory> depends on <bits/ranges_unitialized.h> which
depends on <bits/random.h> just for a single concept. Including
<bits/random.h> also requires including <cmath>, which is huge due to
the C++17 special functions.

This change moves the concept to the <bits/uniform_int_dist.h> internal
header that exists so that <bits/stl_algobase.h> doesn't need to include
<bits/random.h>.

PR libstdc++/92546 (partial)
* include/bits/random.h (uniform_random_bit_generator): Move definition
to <bits/uniform_int_dist.h>.
* include/bits/ranges_algo.h: Include <bits/uniform_int_dist.h> instead
of <bits/random.h>.
* include/bits/ranges_algobase.h: Do not include <cmath>.
* include/bits/uniform_int_dist.h (uniform_random_bit_generator):
Move here.
* include/std/ranges: Do not include <limits>.
* testsuite/26_numerics/random/pr60037-neg.cc: Adjust dg-error lineno.

4 years agolibstdc++: Add lightweight replacement for std::numeric_limits (PR 92546)
Jonathan Wakely [Mon, 17 Feb 2020 14:30:02 +0000 (14:30 +0000)]
libstdc++: Add lightweight replacement for std::numeric_limits (PR 92546)

Many uses of std::numeric_limits in C++17 and C++20 features only really
need the min(), max() and digits constants for integral types. By adding
__detail::__int_limits we can avoid including the whole <limits> header.

The <limits> header isn't especially large, but avoiding it still gives
small savings in compilation time and memory usage for the compiler.

There are also C++11 features that could benefit from this change (e.g.
<bits/hashtable_policy.h> and <bits/uniform_int_dist.h>) but I won't
change those until stage 1.

The implementation of __int_limits assumes two's complement integers,
which is true for all targets supported by GCC.

PR libstdc++/92546 (partial)
* include/Makefile.am: Add new header.
* include/Makefile.in: Regenerate.
* include/bits/int_limits.h: New header.
* include/bits/parse_numbers.h (__select_int::_Select_int): Replace
numeric_limits with __detail::__int_limits.
* include/std/bit (__rotl, __rotr, __countl_zero, __countl_one)
(__countr_zero, __countr_one, __popcount, __ceil2, __floor2, __log2p1):
Likewise.
* include/std/charconv (__to_chars_8, __from_chars_binary)
(__from_chars_alpha_to_num, from_chars): Likewise.
* include/std/memory_resource (polymorphic_allocator::allocate)
(polymorphic_allocator::allocate_object): Likewise.
* include/std/string_view (basic_string_view::_S_compare): Likewise.
* include/std/utility (in_range): Likewise.
* testsuite/20_util/integer_comparisons/in_range_neg.cc: Adjust for
extra error about incomplete type __int_limits<bool>.
* testsuite/26_numerics/bit/bit.count/countl_one.cc: Include <limits>.
* testsuite/26_numerics/bit/bit.count/countl_zero.cc: Likewise.
* testsuite/26_numerics/bit/bit.count/countr_one.cc: Likewise.
* testsuite/26_numerics/bit/bit.count/countr_zero.cc: Likewise.
* testsuite/26_numerics/bit/bit.count/popcount.cc: Likewise.
* testsuite/26_numerics/bit/bit.pow.two/ceil2_neg.cc: Likewise.
* testsuite/26_numerics/bit/bit.pow.two/ceil2.cc: Likewise.
* testsuite/26_numerics/bit/bit.pow.two/floor2.cc: Likewise.
* testsuite/26_numerics/bit/bit.pow.two/ispow2.cc: Likewise.
* testsuite/26_numerics/bit/bit.pow.two/log2p1.cc: Likewise.
* testsuite/26_numerics/bit/bit.rotate/rotl.cc: Likewise.
* testsuite/26_numerics/bit/bit.rotate/rotr.cc: Likewise.

4 years agolibstdc++: Fix regression in libstdc++-prettyprinters/cxx20.cc
Jonathan Wakely [Mon, 17 Feb 2020 13:20:57 +0000 (13:20 +0000)]
libstdc++: Fix regression in libstdc++-prettyprinters/cxx20.cc

* python/libstdcxx/v6/printers.py (StdCmpCatPrinter.to_string): Update
value for partial_ordering::unordered.

4 years agolibstdc++: Make "implicit expression variants" more explicit (P2102R0)
Jonathan Wakely [Mon, 17 Feb 2020 13:20:57 +0000 (13:20 +0000)]
libstdc++: Make "implicit expression variants" more explicit (P2102R0)

* include/bits/iterator_concepts.h (indirectly_copyable_storable): Add
const-qualified expression variations.
* include/std/concepts (copyable): Likewise.

4 years agolibstdc++: Implement "Safe Integral Comparisons" (P0586R2)
Jonathan Wakely [Mon, 17 Feb 2020 13:20:57 +0000 (13:20 +0000)]
libstdc++: Implement "Safe Integral Comparisons" (P0586R2)

* include/std/type_traits (__is_standard_integer): New helper trait.
* include/std/utility (cmp_equal, cmp_not_equal, cmp_less, cmp_greater)
(cmp_less_equal, cmp_greater_equal, in_range): Define for C++20.
* include/std/version (__cpp_lib_integer_comparison_functions): Define.
* testsuite/20_util/integer_comparisons/1.cc: New test.
* testsuite/20_util/integer_comparisons/2.cc: New test.
* testsuite/20_util/integer_comparisons/equal.cc: New test.
* testsuite/20_util/integer_comparisons/equal_neg.cc: New test.
* testsuite/20_util/integer_comparisons/greater_equal.cc: New test.
* testsuite/20_util/integer_comparisons/greater_equal_neg.cc: New test.
* testsuite/20_util/integer_comparisons/greater_neg.cc: New test.
* testsuite/20_util/integer_comparisons/in_range.cc: New test.
* testsuite/20_util/integer_comparisons/in_range_neg.cc: New test.
* testsuite/20_util/integer_comparisons/less.cc: New test.
* testsuite/20_util/integer_comparisons/less_equal.cc: New test.
* testsuite/20_util/integer_comparisons/less_equal_neg.cc: New test.
* testsuite/20_util/integer_comparisons/less_neg.cc: New test.
* testsuite/20_util/integer_comparisons/not_equal.cc: New test.
* testsuite/20_util/integer_comparisons/not_equal_neg.cc: New test.

4 years agoFix grammar in error message.
Martin Liska [Mon, 17 Feb 2020 12:21:34 +0000 (13:21 +0100)]
Fix grammar in error message.

PR ipa/93760
* ipa-devirt.c (odr_types_equivalent_p): Fix grammar.
PR ipa/93760
* g++.dg/lto/odr-8_1.C: Fix grammar.

4 years agoFix double quoting.
Martin Liska [Mon, 17 Feb 2020 12:21:00 +0000 (13:21 +0100)]
Fix double quoting.

PR translation/93755
* config/rs6000/rs6000.c (rs6000_option_override_internal):
Fix double quotes.

4 years agoFix a typo.
Martin Liska [Mon, 17 Feb 2020 12:20:06 +0000 (13:20 +0100)]
Fix a typo.

PR other/93756
* config/rx/elf.opt: Fix typo.
PR other/93756
* src/std/algorithm/iteration.d: Fix typo.

4 years agoc/86134 avoid errors for unrecognized -Wno- options
Richard Biener [Mon, 17 Feb 2020 08:32:44 +0000 (09:32 +0100)]
c/86134 avoid errors for unrecognized -Wno- options

This makes sure to not promote diagnostics about unrecognized -Wno-
options to errors and make the intent of the diagnostic clearer.

2020-02-17  Richard Biener  <rguenther@suse.de>

PR c/86134
* opts-global.c (print_ignored_options): Use inform and
amend message.

* gcc.dg/pr86134.c: New testcase.
* gcc.dg/pr28322-2.c: Adjust.

4 years agoanalyzer: fix ICEs in region_model::get_lvalue_1 [PR 93388]
David Malcolm [Fri, 14 Feb 2020 02:17:11 +0000 (21:17 -0500)]
analyzer: fix ICEs in region_model::get_lvalue_1 [PR 93388]

There have been various ICEs with -fanalyzer involving unhandled tree
codes in region_model::get_lvalue_1; PR analyzer/93388 reports various
others e.g. for IMAGPART_EXPR, REALPART_EXPR, and VIEW_CONVERT_EXPR seen
when running the testsuite with -fanalyzer forcibly enabled.

Whilst we could implement lvalue-handling in the region model for every
tree code, for some of these we're straying far from my primary goal for
GCC 10 of implementing a double-free checker for C.

This patch implements a fallback for unimplemented tree codes: create a
dummy region, but mark the new state as being invalid, and stop
exploring state along this path.  It also implements VIEW_CONVERT_EXPR.

Doing so fixes the ICEs, whilst effectively turning off the analyzer
along code paths that use such tree codes.  Hopefully this compromise
is sensible for GCC 10.

gcc/analyzer/ChangeLog:
PR analyzer/93388
* engine.cc (impl_region_model_context::on_unknown_tree_code):
New.
(exploded_graph::get_or_create_node): Reject invalid states.
* exploded-graph.h
(impl_region_model_context::on_unknown_tree_code): New decl.
(point_and_state::point_and_state): Assert that the state is
valid.
* program-state.cc (program_state::program_state): Initialize
m_valid to true.
(program_state::operator=): Copy m_valid.
(program_state::program_state): Likewise for move constructor.
(program_state::print): Print m_valid.
(program_state::dump_to_pp): Likewise.
* program-state.h (program_state::m_valid): New field.
* region-model.cc (region_model::get_lvalue_1): Implement the
default case by returning a new symbolic region and calling
the context's on_unknown_tree_code, rather than issuing an
internal_error.  Implement VIEW_CONVERT_EXPR.
* region-model.h (region_model_context::on_unknown_tree_code): New
vfunc.
(test_region_model_context::on_unknown_tree_code): New.

gcc/testsuite/ChangeLog:
PR analyzer/93388
* gcc.dg/analyzer/torture/20060625-1.c: New test.
* gcc.dg/analyzer/torture/pr51628-30.c: New test.
* gcc.dg/analyzer/torture/pr59037.c: New test.

4 years agoanalyzer: fix wording for assignment from NULL
David Malcolm [Wed, 12 Feb 2020 15:56:28 +0000 (10:56 -0500)]
analyzer: fix wording for assignment from NULL

This patch improves the wording of the state-transition event (1) in
the -Wanalyzer-null-dereference diagnostic for:

void test (void)
{
  int *p = NULL;
  *p = 1;
}

taking the path description from:

  ‘test’: events 1-2
    |
    |    5 |   int *p = NULL;
    |      |        ^
    |      |        |
    |      |        (1) assuming ‘p’ is NULL
    |    6 |   *p = 1;
    |      |   ~~~~~~
    |      |      |
    |      |      (2) dereference of NULL ‘p’
    |

to:

  ‘test’: events 1-2
    |
    |    5 |   int *p = NULL;
    |      |        ^
    |      |        |
    |      |        (1) ‘p’ is NULL
    |    6 |   *p = 1;
    |      |   ~~~~~~
    |      |      |
    |      |      (2) dereference of NULL ‘p’
    |

since the "assuming" at (1) only makes sense for state transitions
due to comparisons, not for assignments.

gcc/analyzer/ChangeLog:
* sm-malloc.cc (malloc_diagnostic::describe_state_change): For
transition to the "null" state, only say "assuming" when
transitioning from the "unchecked" state.

gcc/testsuite/ChangeLog:
* gcc.dg/analyzer/malloc-1.c (test_48): New.

4 years agoanalyzer: add diagnostics to output of -fdump-analyzer-exploded-graph
David Malcolm [Tue, 11 Feb 2020 22:13:44 +0000 (17:13 -0500)]
analyzer: add diagnostics to output of -fdump-analyzer-exploded-graph

gcc/analyzer/ChangeLog:
* diagnostic-manager.h (diagnostic_manager::get_saved_diagnostic):
Add const overload.
* engine.cc (exploded_node::dump_dot): Dump saved_diagnostics.
* exploded-graph.h (exploded_graph::get_diagnostic_manager): Add
const overload.

4 years agors6000: mark clobber for registers changed by untpyed_call
Jiufu Guo [Mon, 17 Feb 2020 02:48:39 +0000 (10:48 +0800)]
rs6000: mark clobber for registers changed by untpyed_call

As PR93047 said, __builtin_apply/__builtin_return does not work well with
-frename-registers.  This is caused by return register(e.g. r3) is used to
rename another register, before return register is stored to stack.
This patch fix this issue by emitting clobber for those egisters which
maybe changed by untyped call.

gcc/
2020-02-17  Jiufu Guo  <guojiufu@linux.ibm.com>

PR target/93047
* config/rs6000/rs6000.md (untyped_call): Add emit_clobber.

gcc/testsuite
2020-02-17  Jiufu Guo  <guojiufu@linux.ibm.com>

PR target/93047
* gcc.dg/torture/stackalign/builtin-return-2.c: New test case.

4 years agoDaily bump.
GCC Administrator [Mon, 17 Feb 2020 00:16:51 +0000 (00:16 +0000)]
Daily bump.

4 years agoi386: Fix atan2l argument order [PR93743]
Uros Bizjak [Sun, 16 Feb 2020 20:38:39 +0000 (21:38 +0100)]
i386: Fix atan2l argument order [PR93743]

PR target/93743
* config/i386/i386.md (atan2xf3): Swap operands 1 and 2.
(atan2<mode>3): Update operand order in the call to gen_atan2xf3.

testsuite/ChangeLog:

PR target/93743
* gcc.target/i386/pr93743.c : New test.

4 years agolibgo: install internal/reflectlite.gox
Ian Lance Taylor [Sat, 15 Feb 2020 23:57:29 +0000 (15:57 -0800)]
libgo: install internal/reflectlite.gox

This makes it possible to use gccgo to bootstrap Go 1.14.
If we don't install this, gccgo can't compile the sort package.

Fixes GCC PR go/93679

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/219617

4 years agolibbacktrace: update to current libgo test file
Ian Lance Taylor [Sun, 16 Feb 2020 02:24:35 +0000 (18:24 -0800)]
libbacktrace: update to current libgo test file

* ztest.c (test_large): Update file to current libgo test file.

4 years agolibstdc++: Move code after an early exit constexpr if to under an else branch
Patrick Palka [Sat, 15 Feb 2020 15:59:36 +0000 (10:59 -0500)]
libstdc++: Move code after an early exit constexpr if to under an else branch

This avoids instantiating dead code when the true branch of the constexpr if is
taken.

libstdc++-v3/ChangeLog:

* include/bits/ranges_algo.h (__lexicographical_compare_fn::operator()):
Move code after an early exit constexpr if to under an else branch.
* include/bits/ranges_algobase.h (__equal_fn::operator()): Likewise.

4 years agoDaily bump.
GCC Administrator [Sun, 16 Feb 2020 00:16:39 +0000 (00:16 +0000)]
Daily bump.

4 years agoc++: Fix poor diagnostic for array initializer [PR93710]
Marek Polacek [Wed, 12 Feb 2020 19:00:51 +0000 (14:00 -0500)]
c++: Fix poor diagnostic for array initializer [PR93710]

A small improvement for an error in build_user_type_conversion_1:
instead of

array-init1.C:11:1: error: conversion from ‘long int’ to ‘A’ is ambiguous
   11 | };
      | ^

we will print

array-init1.C:8:3: error: conversion from ‘long int’ to ‘A’ is ambiguous
    8 |   0L,
      |   ^~

2020-02-12  Marek Polacek  <polacek@redhat.com>

PR c++/93710 - poor diagnostic for array initializer.
* call.c (build_user_type_conversion_1): Use cp_expr_loc_or_input_loc
for an error call.

* g++.dg/diagnostic/array-init1.C: New test.

4 years agoc++: Add -std=c++20.
Jason Merrill [Sat, 15 Feb 2020 15:20:46 +0000 (16:20 +0100)]
c++: Add -std=c++20.

It's probably past time for this, but definitely now that we're done with
the final committee meeting of C++20.  This patch only adds the option and
adjusts the testsuite to recognize it; more extensive changes can wait for
the published standard.

gcc/ChangeLog
2020-02-15  Jason Merrill  <jason@redhat.com>

* doc/invoke.texi (C Dialect Options): Add -std=c++20.

gcc/c-family/ChangeLog
2020-02-15  Jason Merrill  <jason@redhat.com>

* c.opt: Add -std=c++20.

gcc/testsuite/ChangeLog
2020-02-15  Jason Merrill  <jason@redhat.com>

* lib/target-supports.exp (check_effective_target_c++2a_only): Also
look for -std=*++20.
(check_effective_target_concepts): Use check_effective_target_c++2a.

4 years agolibgo: update to Go1.14rc1 release
Ian Lance Taylor [Wed, 5 Feb 2020 22:33:27 +0000 (14:33 -0800)]
libgo: update to Go1.14rc1 release

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/218017

4 years agoruntime: on 32-bit systems, limit default GOMAXPROCS to 32
Ian Lance Taylor [Thu, 13 Feb 2020 04:35:50 +0000 (20:35 -0800)]
runtime: on 32-bit systems, limit default GOMAXPROCS to 32

Otherwise we can easily run out of stack space for threads.

The user can still override by setting GOMAXPROCS.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/219278

4 years agolibstdc++: Whitespace and formatting adjustments
Patrick Palka [Thu, 13 Feb 2020 20:03:50 +0000 (15:03 -0500)]
libstdc++: Whitespace and formatting adjustments

libstdc++-v3/ChangeLog:

* include/bits/ranges_algo.h: Adjust whitespace and formatting.
* include/bits/ranges_algobase.h: Likewise.
* include/bits/ranges_uninitialized.h: Likewise.

4 years agolibstdc++: Convert the ranges algorithm entities into function objects
Patrick Palka [Thu, 13 Feb 2020 17:17:01 +0000 (12:17 -0500)]
libstdc++: Convert the ranges algorithm entities into function objects

This is the standard way to inhibit ADL for these entities, which is required as
per [algorithms.requirements] p2 and [specialized.algorithms] p4.  The
conversion was done mostly mechanically with a custom Vim macro.

libstdc++-v3/ChangeLog:

* include/bits/ranges_algo.h: (adjacent_find, all_of, any_of,
binary_search, copy_if, count, count_if, equal_range, find, find_end,
find_first_of, find_if, find_if_not, for_each, generate, generate_n,
includes, inplace_merge, is_heap, is_heap_until, is_partitioned,
is_permutation, is_sorted, is_sorted_until, lexicographical_compare,
lower_bound, make_heap, max, max_element, merge, min, min_element,
minmax, minmax_element, mismatch, next_permutation, none_of,
nth_element, partial_sort, partial_sort_copy, partition, partition_copy,
partition_point, pop_heap, prev_permutation, push_heap, remove,
remove_copy, remove_copy_if, remove_if, replace, replace_copy,
replace_copy_if, replace_if, reverse, reverse_copy, rotate, rotate_copy,
search, search_n, set_difference, set_intersection,
set_symmetric_difference, set_union, shuffle, sort, sort_heap,
stable_partition, stable_sort, swap_ranges, transform, unique,
unique_copy, upper_bound): Convert into function objects.
* include/bits/ranges_algobase.h: (equal, copy, move, copy_n, fill_n,
fill, move_backward, copy_backward): Likewise.
* include/bits/ranges_uninitialized.h (uninitialized_default_construct,
uninitialized_default_construct_n, uninitialized_value_construct,
uninitialized_value_construct_n, uninitialized_copy,
uninitialized_copy_n, uninitialized_move, uninitialized_move_n,
uninitialized_fill, uninitialized_fill_n, construct_at, destroy_at,
destroy, destroy_n): Likewise.

4 years agolibstdc++: Fold some ranges algo subroutines into their only caller
Patrick Palka [Thu, 13 Feb 2020 15:55:10 +0000 (10:55 -0500)]
libstdc++: Fold some ranges algo subroutines into their only caller

These subroutines have only a single call site, so it might be best and simplest
to eliminate them before we convert the algos into function objects.

libstdc++-v3/ChangeLog:

* include/bits/ranges_algo.h (ranges::__find_end): Fold into ...
(ranges::find_end): ... here.
(ranges::__lexicographical_compare): Fold into ...
(ranges::lexicographical_compare): ... here.
* include/bits/ranges_algobase.h (ranges::__equal): Fold into ...
(ranges::equal): ... here.

4 years agoc++: Add test for PR 68061.
Jason Merrill [Sat, 15 Feb 2020 14:11:01 +0000 (15:11 +0100)]
c++: Add test for PR 68061.

PR c++/68061
* g++.dg/concepts/attrib1.C: New.

4 years agoc++: Fix lambda in atomic constraint.
Jason Merrill [Sat, 15 Feb 2020 13:48:08 +0000 (14:48 +0100)]
c++: Fix lambda in atomic constraint.

find_template_parameters needs to find the mention of T in the lambda.
Fixing that leaves this as a hard error, which may be surprising but is
consistent with lambdas in other SFINAE contexts like template argument
deduction.

gcc/cp/ChangeLog
2020-02-15  Jason Merrill  <jason@redhat.com>

PR c++/92556
* pt.c (any_template_parm_r): Look into lambda body.

4 years agoc++: Remove more dead code.
Jason Merrill [Sat, 15 Feb 2020 13:48:08 +0000 (14:48 +0100)]
c++: Remove more dead code.

gcc/cp/ChangeLog
2020-02-15  Jason Merrill  <jason@redhat.com>

PR c++/92583
* pt.c (any_template_parm_r): Remove CONSTRUCTOR handling.

4 years agoc++: Add testcase for PR 90764.
Jason Merrill [Sat, 15 Feb 2020 13:48:08 +0000 (14:48 +0100)]
c++: Add testcase for PR 90764.

     PR c++/90764
     * g++.dg/cpp1z/class-deduction69.C: New.

4 years agomatch.pd: Disallow side-effects in GENERIC for non-COND_EXPR to COND_EXPR simplificat...
Jakub Jelinek [Sat, 15 Feb 2020 11:53:44 +0000 (12:53 +0100)]
match.pd: Disallow side-effects in GENERIC for non-COND_EXPR to COND_EXPR simplifications [PR93744]

As the following testcases show (the first one reported, last two
found by code inspection), we need to disallow side-effects
in simplifications that turn some unconditional expression into conditional
one.  From my little understanding of genmatch.c, it is able to
automatically disallow side effects if the same operand is used multiple
times in the match pattern, maybe if it is used multiple times in the
replacement pattern, and if it is used in conditional contexts in the match
pattern, could it be taught to handle this case too?  If yes, perhaps
just the first hunk could be usable for 8/9 backports (+ the testcases).

2020-02-15  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/93744
* match.pd (((m1 >/</>=/<= m2) * d -> (m1 >/</>=/<= m2) ? d : 0,
A - ((A - B) & -(C cmp D)) -> (C cmp D) ? B : A,
A + ((B - A) & -(C cmp D)) -> (C cmp D) ? B : A): For GENERIC, make
sure @2 in the first and @1 in the other patterns has no side-effects.

* gcc.c-torture/execute/pr93744-1.c: New test.
* gcc.c-torture/execute/pr93744-2.c: New test.
* gcc.c-torture/execute/pr93744-3.c: New test.

4 years agolibstdc++: Update __cpp_lib_erase_if macro (P1115R3)
Jonathan Wakely [Sat, 15 Feb 2020 09:02:30 +0000 (09:02 +0000)]
libstdc++: Update __cpp_lib_erase_if macro (P1115R3)

Now that this feature has been approved for C++20 we can define the
macro to the official value.

* include/bits/erase_if.h (__cpp_lib_erase_if): Define to 202002L.
* include/std/deque: Likewise.
* include/std/forward_list: Likewise.
* include/std/list: Likewise.
* include/std/string: Likewise.
* include/std/vector: Likewise.
* include/std/version: Likewise.
* testsuite/23_containers/deque/erasure.cc: Test for new value.
* testsuite/23_containers/forward_list/erasure.cc: Likewise.
* testsuite/23_containers/list/erasure.cc: Likewise.
* testsuite/23_containers/map/erasure.cc: Likewise.
* testsuite/23_containers/set/erasure.cc: Likewise.
* testsuite/23_containers/unordered_map/erasure.cc: Likewise.
* testsuite/23_containers/unordered_set/erasure.cc: Likewise.
* testsuite/23_containers/vector/erasure.cc: Likewise.

4 years agolibstdc++: Implement LWG 3150 for std::uniform_random_bit_generator
Jonathan Wakely [Sat, 15 Feb 2020 08:58:43 +0000 (08:58 +0000)]
libstdc++: Implement LWG 3150 for std::uniform_random_bit_generator

* include/bits/random.h (uniform_random_bit_generator): Require min()
and max() to be constant expressions and min() to be less than max().
* testsuite/26_numerics/random/concept.cc: Check additional cases.
* testsuite/26_numerics/random/pr60037-neg.cc: Adjust dg-error lineno.

4 years agoPR 87488: Add --with-diagnostics-urls configuration option
Bernd Edlinger [Wed, 29 Jan 2020 14:31:10 +0000 (15:31 +0100)]
PR 87488: Add --with-diagnostics-urls configuration option

2020-02-15  David Malcolm  <dmalcolm@redhat.com>
    Bernd Edlinger  <bernd.edlinger@hotmail.de>

PR 87488
PR other/93168
* config.in (DIAGNOSTICS_URLS_DEFAULT): New define.
* configure.ac (--with-diagnostics-urls): New configuration
option, based on --with-diagnostics-color.
(DIAGNOSTICS_URLS_DEFAULT): New define.
* config.h: Regenerate.
* configure: Regenerate.
* diagnostic.c (diagnostic_urls_init): Handle -1 for
DIAGNOSTICS_URLS_DEFAULT from configure-time
--with-diagnostics-urls=auto-if-env by querying for a GCC_URLS
and TERM_URLS environment variable.
* diagnostic-url.h (diagnostic_url_format): New enum type.
(diagnostic_urls_enabled_p): rename to...
(determine_url_format): ... this, and change return type.
* diagnostic-color.c (parse_env_vars_for_urls): New helper function.
(auto_enable_urls): Disable URLs on xfce4-terminal, gnome-terminal,
the linux console, and mingw.
(diagnostic_urls_enabled_p): rename to...
(determine_url_format): ... this, and adjust.
* pretty-print.h (pretty_printer::show_urls): rename to...
(pretty_printer::url_format): ... this, and change to enum.
* pretty-print.c (pretty_printer::pretty_printer,
pp_begin_url, pp_end_url, test_urls): Adjust.
* doc/install.texi (--with-diagnostics-urls): Document the new
configuration option.
(--with-diagnostics-color): Document the existing interaction
with GCC_COLORS better.
* doc/invoke.texi (-fdiagnostics-urls): Add GCC_URLS and TERM_URLS
vindex reference.  Update description of defaults based on the above.
(-fdiagnostics-color): Update description of how -fdiagnostics-color
interacts with GCC_COLORS.

4 years agoDocument compatibility of aliases and their targets, correct weakref example.
Martin Sebor [Sat, 15 Feb 2020 00:13:29 +0000 (17:13 -0700)]
Document compatibility of aliases and their targets, correct weakref example.

gcc/ChangeLog:

* doc/extend.texi (attribute alias): Mention type requirement.
(attribute weak): Same.
(attribute weakref): Correct invalid example.

4 years agoFix duplicates for anonymous structures with -fdump-ada-spec
Eric Botcazou [Fri, 14 Feb 2020 23:11:04 +0000 (00:11 +0100)]
Fix duplicates for anonymous structures with -fdump-ada-spec

This fixes a weakness in the way -fdump-ada-spec builds names for
anonymous structures in the C/C++ code, resulting in duplicate
identifiers under specific circumstances.

c-family/
* c-ada-spec.c: Include bitmap.h.
(dump_ada_double_name): Rename into...
(dump_anonymous_type_name): ...this.  Always use the TYPE_UID.
(dump_ada_array_type): Adjust to above renaming.  Robustify.
(dump_nested_types_1): New function copied from...  Add
dumped_types parameter and pass it down to dump_nested_type.
(dump_nested_types): ...this.  Remove parent parameter.  Just
call dump_nested_types_1 on an automatic bitmap.
(dump_nested_type): Add dumped_types parameter.
<ARRAY_TYPE>: Do not dump it if already present in dumped_types.
Adjust recursive calls and adjust to above renaming.
(dump_ada_declaration): Adjust call to dump_nested_types.
Tidy up and adjust to above renaming.
(dump_ada_specs): Initialize and release bitmap obstack.

4 years agoUpdate .po files.
Joseph Myers [Fri, 14 Feb 2020 22:00:13 +0000 (22:00 +0000)]
Update .po files.

gcc/po:
* be.po, da.po, de.po, el.po, es.po, fi.po, fr.po, hr.po, id.po,
ja.po, nl.po, ru.po, sr.po, sv.po, tr.po, uk.po, vi.po, zh_CN.po,
zh_TW.po: Update.

libcpp/po:
* be.po, ca.po, da.po, de.po, el.po, eo.po, es.po, fi.po, fr.po,
id.po, ja.po, nl.po, pt_BR.po, ru.po, sr.po, sv.po, tr.po, uk.po,
vi.po, zh_CN.po, zh_TW.po: Update.

4 years agoFix problematic TLS sequences for the Solaris linker
Eric Botcazou [Fri, 14 Feb 2020 18:21:02 +0000 (19:21 +0100)]
Fix problematic TLS sequences for the Solaris linker

This is an old thinko pertaining to the interaction between TLS
sequences and delay slot filling: the compiler knows that it cannot
put instructions with TLS relocations into delay slots with the
original Sun TLS model, but it tests TARGET_SUN_TLS in this context,
which depends only on the assembler.  So if the compiler is configured
with the GNU assembler and the Solaris linker, then TARGET_GNU_TLS is
set instead and the limitation is not enforced.

PR target/93704
* config/sparc/sparc.c (eligible_for_call_delay): Test HAVE_GNU_LD
in conjunction with TARGET_GNU_TLS in early return.

4 years agortlanal: optimize costly division in rtx_cost
Alexander Monakov [Fri, 14 Feb 2020 17:14:36 +0000 (20:14 +0300)]
rtlanal: optimize costly division in rtx_cost

There's a costly signed 64-bit division in rtx_cost on x86 as well as
any other target where UNITS_PER_WORD expands to TARGET_64BIT ?  8 : 4.
It's also evident that rtx_cost does redundant work for a SET.

Obviously the variable named 'factor' rarely exceeds 1, so in the
majority of cases it can be computed with a well-predictable branch
rather than a division.

This patch makes rtx_cost do the division only in case mode is wider
than UNITS_PER_WORD, and also moves a test for a SET up front to avoid
redundancy.
No functional change.

* rtlanal.c (rtx_cost): Handle a SET up front. Avoid division if
the mode is not wider than UNITS_PER_WORD.

4 years agoc++: Fix thinko in enum_min_precision [PR61414]
Jakub Jelinek [Fri, 14 Feb 2020 16:36:00 +0000 (17:36 +0100)]
c++: Fix thinko in enum_min_precision [PR61414]

When backporting the PR61414 fix to 8.4, I've noticed that the caching
of prec is actually broken, as it would fail to actually store the computed
precision into the hash_map's value and so next time we'd think the enum needs
0 bits.

2020-02-14  Jakub Jelinek  <jakub@redhat.com>

PR c++/61414
* class.c (enum_min_precision): Change prec type from int to int &.

* g++.dg/cpp0x/enum39.C: New test.

4 years agosra: Avoid verification failure (PR 93516)
Martin Jambor [Fri, 14 Feb 2020 14:02:35 +0000 (15:02 +0100)]
sra: Avoid verification failure (PR 93516)

get_ref_base_and_extent can return different sizes for COMPONENT_REFs
and DECLs of the same type, with the latter including (more?)  padding.
When in the IL there is an assignment between such a COMPONENT_REF and a
DECL, SRA will try to propagate the access from the former as a child of
the latter, creating an artificial reference that does not match the
access's declared size, which triggers a verifier assert.

Fixed by teaching the propagation functions about this special situation
so that they don't do it.  The condition is the same that
build_user_friendly_ref_for_offset uses so the artificial reference
causing the verifier is guaranteed not to be created.

2020-02-14  Martin Jambor  <mjambor@suse.cz>

PR tree-optimization/93516
* tree-sra.c (propagate_subaccesses_from_rhs): Do not create
access of the same type as the parent.
(propagate_subaccesses_from_lhs): Likewise.

gcc/testsuite/
* g++.dg/tree-ssa/pr93516.C: New test.

4 years agoAdd ChangeLog entries to relevant ChangeLog files for my last commit.
liuhongt [Fri, 14 Feb 2020 13:01:55 +0000 (21:01 +0800)]
Add ChangeLog entries to relevant ChangeLog files for my last commit.

4 years agoIntrinsic macro of vpshr* and vpshl* lack a closing parenthesis which would cause...
liuhongt [Wed, 12 Feb 2020 10:04:42 +0000 (18:04 +0800)]
Intrinsic macro of vpshr* and vpshl* lack a closing parenthesis which would cause failure in O0.

2020-02-14 Hongtao Liu  <hongtao.liu@intel.com>

gcc/
PR target/93724
* config/i386/avx512vbmi2intrin.h
(_mm512_shrdi_epi16, _mm512_mask_shrdi_epi16,
_mm512_maskz_shrdi_epi16, _mm512_shrdi_epi32,
_mm512_mask_shrdi_epi32, _mm512_maskz_shrdi_epi32,
_m512_shrdi_epi64, _m512_mask_shrdi_epi64,
_m512_maskz_shrdi_epi64, _mm512_shldi_epi16,
_mm512_mask_shldi_epi16, _mm512_maskz_shldi_epi16,
_mm512_shldi_epi32, _mm512_mask_shldi_epi32,
_mm512_maskz_shldi_epi32, _mm512_shldi_epi64,
_mm512_mask_shldi_epi64, _mm512_maskz_shldi_epi64): Fix typo
of lacking a closing parenthesis.
* config/i386/avx512vbmi2vlintrin.h
(_mm256_shrdi_epi16, _mm256_mask_shrdi_epi16,
_mm256_maskz_shrdi_epi16, _mm256_shrdi_epi32,
_mm256_mask_shrdi_epi32, _mm256_maskz_shrdi_epi32,
_m256_shrdi_epi64, _m256_mask_shrdi_epi64,
_m256_maskz_shrdi_epi64, _mm256_shldi_epi16,
_mm256_mask_shldi_epi16, _mm256_maskz_shldi_epi16,
_mm256_shldi_epi32, _mm256_mask_shldi_epi32,
_mm256_maskz_shldi_epi32, _mm256_shldi_epi64,
_mm256_mask_shldi_epi64, _mm256_maskz_shldi_epi64,
_mm_shrdi_epi16, _mm_mask_shrdi_epi16,
_mm_maskz_shrdi_epi16, _mm_shrdi_epi32,
_mm_mask_shrdi_epi32, _mm_maskz_shrdi_epi32,
_mm_shrdi_epi64, _mm_mask_shrdi_epi64,
_m_maskz_shrdi_epi64, _mm_shldi_epi16,
_mm_mask_shldi_epi16, _mm_maskz_shldi_epi16,
_mm_shldi_epi32, _mm_mask_shldi_epi32,
_mm_maskz_shldi_epi32, _mm_shldi_epi64,
_mm_mask_shldi_epi64, _mm_maskz_shldi_epi64): Ditto.

gcc/testsuite/
* gcc.target/i386/avx512vbmi2-vpshld-1.c: New test.
* gcc.target/i386/avx512vbmi2-vpshrd-1.c: Ditto.
* gcc.target/i386/sse-12.c: Add -mavx512vbmi2.
* gcc.target/i386/sse-13.c: Ditto.
* gcc.target/i386/sse-14.c: Add -mavx512vbmi2 and tests.
* gcc.target/i386/sse-22.c: Ditto.

4 years agoc++: Partially implement P1042R1: __VA_OPT__ wording clarifications [PR92319]
Jakub Jelinek [Fri, 14 Feb 2020 08:04:14 +0000 (09:04 +0100)]
c++: Partially implement P1042R1: __VA_OPT__ wording clarifications [PR92319]

I've noticed we claim in cxx-status.html that we implement P1042R1,
but it seems we don't implement any of the changes from there.
The following patch implements just the change that __VA_OPT__ determines
whether to expand to nothing or the enclosed tokens no longer based on
whether there were any tokens passed to __VA_ARGS__, but whether __VA_ARGS__
expands to any tokens (from testing apparently it has to be non-CPP_PADDING
tokens).

I'm afraid I'm completely lost about the padding preservation/removal
changes that are also in the paper, so haven't touched that part.

2020-02-14  Jakub Jelinek  <jakub@redhat.com>

Partially implement P1042R1: __VA_OPT__ wording clarifications
PR preprocessor/92319
* macro.c (expand_arg): Move declarations before vaopt_state
definition.
(class vaopt_state): Move enum update_type definition earlier.  Remove
m_allowed member, add m_arg and m_update members.
(vaopt_state::vaopt_state): Change last argument from bool any_args
to macro_arg *arg, initialize m_arg and m_update instead of m_allowed.
(vaopt_state::update): When bumping m_state from 1 to 2 and m_update
is ERROR, determine if __VA_ARGS__ expansion has any non-CPP_PADDING
tokens and set m_update to INCLUDE if it has any, DROP otherwise.
Return m_update instead of m_allowed ? INCLUDE : DROP in m_state >= 2.
(replace_args, create_iso_definition): Adjust last argument to
vaopt_state ctor.

* c-c++-common/cpp/va-opt-4.c: New test.

4 years agoDaily bump.
GCC Administrator [Fri, 14 Feb 2020 00:16:36 +0000 (00:16 +0000)]
Daily bump.

4 years agors6000: fixinc: Skip machine_name fix for powerpc*-*-linux*
Matheus Castanho [Thu, 13 Feb 2020 23:43:39 +0000 (23:43 +0000)]
rs6000: fixinc: Skip machine_name fix for powerpc*-*-linux*

Some system headers can be broken by the machine_name fix performed
by GCC during the fixincludes step. According to the comment in
fixincludes/fixinc.h:130 :

   On some platforms, machine_name doesn't work properly and
   breaks some of the header files.  Since everything works
   properly without it, just wipe the macro list to
   disable the fix.

So we can just skip it to avoid trouble.

fixincludes/
* fixinc.in: Skip machine_name fix on powerpc*-*-linux*.

4 years agoc++: Emit DFP typeinfos even when DFP is disabled [PR92906]
Jakub Jelinek [Thu, 13 Feb 2020 23:11:24 +0000 (00:11 +0100)]
c++: Emit DFP typeinfos even when DFP is disabled [PR92906]

Before Joseph's changes when compiling
libstdc++-v3/libsupc++/fundamental_type_info.cc
we were emitting
_ZTIPDd, _ZTIPDe, _ZTIPDf, _ZTIPKDd, _ZTIPKDe, _ZTIPKDf, _ZTIDd, _ZTIDe, _ZTIDf
symbols even when DFP wasn't usable, but now we don't and thus those 9
symbols @@CXXABI_1.3.4 are gone from libstdc++.  While nothing could
probably use it (except perhaps dlsym etc.), various tools don't really like
symbols disappearing from symbol versioned shared libraries with stable ABI.
Adding those in assembly would be possible, but would be a portability
nightmare (the PR has something Red Hat uses in libstdc++_nonshared.a, but that
can handle only a handful of linux ELF targets we care about).
So, instead this patch hacks up the FE, so that it emits those, but in a way
that won't make the DFP types available again on targets that don't support
them.

2020-02-14  Jakub Jelinek  <jakub@redhat.com>

PR libstdc++/92906
* cp-tree.h (enum cp_tree_index): Add CPTI_FALLBACK_DFLOAT32_TYPE,
CPTI_FALLBACK_DFLOAT64_TYPE and CPTI_FALLBACK_DFLOAT128_TYPE.
(fallback_dfloat32_type, fallback_dfloat64_type,
fallback_dfloat128_type): Define.
* mangle.c (write_builtin_type): Handle fallback_dfloat*_type like
dfloat*_type_node.
* rtti.c (emit_support_tinfos): Emit DFP typeinfos even when dfp
is disabled for compatibility.

4 years agoc++: Fix useless using-declaration.
Jason Merrill [Thu, 13 Feb 2020 15:56:08 +0000 (16:56 +0100)]
c++: Fix useless using-declaration.

Here reintroducing the same declarations into the global namespace via
using-declaration is useless but OK.  And a function and a function template
with the same parameters do not conflict.

gcc/cp/ChangeLog
2020-02-13  Jason Merrill  <jason@redhat.com>

PR c++/93713
* name-lookup.c (matching_fn_p): A function does not match a
template.

4 years agoc++: Fix static local vars in extern "C".
Jason Merrill [Thu, 13 Feb 2020 15:42:04 +0000 (16:42 +0100)]
c++: Fix static local vars in extern "C".

Since my patch for PR 91476 moved visibility determination sooner, a local
static in a vague linkage function now gets TREE_PUBLIC set before
retrofit_lang_decl calls set_decl_linkage, which was making decl_linkage
think that it has external linkage.  It still has no linkage according to
the standard.

gcc/cp/ChangeLog
2020-02-13  Jason Merrill  <jason@redhat.com>

PR c++/93643
PR c++/91476
* tree.c (decl_linkage): Always lk_none for locals.

4 years agolibstdc++: Implement ranges [specialized.algorithms]
Patrick Palka [Wed, 12 Feb 2020 17:54:47 +0000 (12:54 -0500)]
libstdc++: Implement ranges [specialized.algorithms]

This implements all the ranges members defined in [specialized.algorithms]:

  ranges::uninitialized_default_construct
  ranges::uninitialized_value_construct
  ranges::uninitialized_copy
  ranges::uninitialized_copy_n
  ranges::uninitialized_move
  ranges::uninitialized_move_n
  ranges::uninitialized_fill
  ranges::uninitialized_fill_n
  ranges::construct_at
  ranges::destroy_at
  ranges::destroy

It also implements (hopefully correctly) the "obvious" optimizations for these
algos, namely that if the output range has a trivial value type and if the
appropriate operation won't throw then we can dispatch to the standard ranges
version of the algorithm which will then potentially enable further
optimizations.

libstdc++-v3/ChangeLog:

* include/Makefile.am: Add <bits/ranges_uninitialized.h>.
* include/Makefile.in: Regenerate.
* include/bits/ranges_uninitialized.h: New header.
* include/std/memory: Include it.
* testsuite/20_util/specialized_algorithms/destroy/constrained.cc: New
test.
* .../uninitialized_copy/constrained.cc: New test.
* .../uninitialized_default_construct/constrained.cc: New test.
* .../uninitialized_fill/constrained.cc: New test.
* .../uninitialized_move/constrained.cc: New test.
* .../uninitialized_value_construct/constrained.cc: New test.

4 years agolibstdc++: Move some ranges algos to a new header <bits/ranges_algobase.h>
Patrick Palka [Wed, 12 Feb 2020 17:30:57 +0000 (12:30 -0500)]
libstdc++: Move some ranges algos to a new header <bits/ranges_algobase.h>

This roughly mirrors the existing split between <bits/stl_algo.h> and
<bits/stl_algobase.h>.  The ranges [specialized.algorithms] will use this new
header to avoid including all of of <bits/ranges_algo.h>.

libstdc++-v3/ChangeLog:

* include/Makefile.am: Add bits/ranges_algobase.h
* include/Makefile.in: Regenerate.
* bits/ranges_algo.h: Include <bits/ranges_algobase.h> and refactor
existing #includes.
(__detail::__is_normal_iterator, __detail::is_reverse_iterator,
__detail::__is_move_iterator, copy_result, move_result,
__equal, equal, copy_result, move_result, move_backward_result,
copy_backward_result, __copy_or_move_backward, __copy_or_move, copy,
move, copy_backward, move_backward, copy_n_result, copy_n, fill_n,
fill): Split out into ...
* bits/range_algobase.h: ... this new header.

4 years agoc: Fix ICE with cast to VLA [93576]
Jakub Jelinek [Thu, 13 Feb 2020 20:00:09 +0000 (21:00 +0100)]
c: Fix ICE with cast to VLA [93576]

The following testcase ICEs, because the PR84305 changes try to evaluate
the size earlier.  If size has side-effects, that is desirable, and the
side-effects will actually be wrapped in a SAVE_EXPR.  The problem on this
testcase is that there are no side-effects, and c_fully_fold doesn't fold
those COMPOUND_EXPRs to constant, and while before gimplification we unshare
trees found in the expressions, the unsharing doesn't involve TYPE_SIZE etc.
of used types.  Gimplification is destructive though, so when we gimplify
the two nested COMPOUND_EXPRs and then try to gimplify it the second time
for the TYPE_SIZEs, we ICE.
Now, we could use unshare_expr in what we push to *expr, SAVE_EXPRs and
their operands in there aren't unshared, but I really don't see a point of
evaluating expressions that don't have side-effects before, so instead
this just pushes there expressions that do have side-effects.

2020-02-13  Jakub Jelinek  <jakub@redhat.com>

PR c/93576
* c-decl.c (grokdeclarator): If this_size_varies, only push size into
*expr if it has side effects.

* gcc.dg/pr93576.c: New test.

4 years agoskip fixinc on vxworks7*, amend mkheaders
Alexandre Oliva [Thu, 13 Feb 2020 18:52:18 +0000 (15:52 -0300)]
skip fixinc on vxworks7*, amend mkheaders

vxworks7 headers haven't required fixes, and we've decided to avoid
running fixinc on them.

The problem with that is that, with a dummy fixinc, mkheaders wipes
out include-fixed but then multi_dir subdirs are not created again, so
we end up with a limits.h named after each multi_dir, when there are
non-default multilibs.  Oops.

This patch arranges for a dummy fixinc to be created for *-*-vxworks7*
targets, and fixes mkheaders so as to create multi_dir subdirs in
include-fixed after wiping them out, and to copy limits.h so that it
won't take the name that should be of a subdir (unless the multi_dir
is limits.h, but that's hopefully never the case ;-)

for  fixincludes/ChangeLog

* mkheaders.in: Re-create subdirs, copy limits.h into subdir.
* mkfixinc.sh: Create dummy fixinc for *-*-vxworks7*.

4 years agoAdd -fdelete-null-pointer-checks to more new C++ testcases.
Sandra Loosemore [Thu, 13 Feb 2020 18:47:55 +0000 (10:47 -0800)]
Add -fdelete-null-pointer-checks to more new C++ testcases.

2020-02-13  Sandra Loosemore  <sandra@codesourcery.com>

gcc/testsuite/
* g++.dg/cpp0x/constexpr-static13.C:
Add -fdelete-null-pointer-checks.
* g++.dg/cpp2a/constexpr-new11.C: Likewise.
* g++.dg/cpp2a/constexpr-new12.C: Likewise.

4 years agoi386: Skip ENDBR32 at the target function entry
H.J. Lu [Thu, 13 Feb 2020 13:28:38 +0000 (05:28 -0800)]
i386: Skip ENDBR32 at the target function entry

Skip ENDBR32 at the target function entry when initializing trampoline.

Tested on Linux/x86-64 CET machine with and without -m32.

gcc/

PR target/93656
* config/i386/i386.c (ix86_trampoline_init): Skip ENDBR32 at
the target function entry.

gcc/testsuite/

PR target/93656
* gcc.target/i386/pr93656.c: New test.

4 years agoarc: Don't use if-conversion when optimizing for size.
Claudiu Zissulescu [Thu, 13 Feb 2020 10:32:05 +0000 (12:32 +0200)]
arc: Don't use if-conversion when optimizing for size.

For ARC, predicated instructions are not very friendly with size
optimizations, leading to increased object size. Disable if-conversion
step when optimized for size.

gcc/
xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>

* common/config/arc/arc-common.c (arc_option_optimization_table):
Disable if-conversion step when optimized for size.

Signed-off-by: Claudiu Zissulescu <claziss@gmail.com>
4 years ago[ARC] Deprecate q-class option.
Claudiu Zissulescu [Thu, 13 Feb 2020 10:32:05 +0000 (12:32 +0200)]
[ARC] Deprecate q-class option.

This option was used to control the short instruction selection.  However,
there is no difference in cycles if we use or not a short instruction,
and always someone wants a smaller program.

gcc/
xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>

* config/arc/arc.c (arc_conditional_register_usage): R0-R3 and
R12-R15 are always in ARCOMPACT16_REGS register class.
* config/arc/arc.opt (mq-class): Deprecate.
* config/arc/constraint.md ("q"): Remove dependency on mq-class
option.
* doc/invoke.texi (mq-class): Update text.
* common/config/arc/arc-common.c (arc_option_optimization_table):
Update list.

testsuite/
xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>

* gcc.target/arc/nps400-1.c: Update test.

4 years ago[ARC] Use TARGET_INSN_COST.
Claudiu Zissulescu [Thu, 13 Feb 2020 10:32:05 +0000 (12:32 +0200)]
[ARC] Use TARGET_INSN_COST.

TARGET_INSN_COST gives us a better control over the instruction costs
than classical RTX_COSTS.  A simple cost scheme is in place for the
time being, when optimizing for size, the cost is given by the
instruction length. When optimizing for speed, the cost is 1 for any
recognized instruction, and 2 for any load/store instruction.  The
latter one can be overwritten by using cost attribute for an
instruction.  Due to this change, we need to update also a number of
instruction patterns with a new predicate to better reflect the costs.

gcc/
xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>

* config/arc/arc.c (arc_insn_cost): New function.
(TARGET_INSN_COST): Define.
* config/arc/arc.md (cost): New attribute.
(add_n): Use arc_nonmemory_operand.
(ashlsi3_insn): Likewise, also update constraints.
(ashrsi3_insn): Likewise.
(rotrsi3): Likewise.
(add_shift): Likewise.
* config/arc/predicates.md (arc_nonmemory_operand): New predicate.

testsuite/
xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>

* gcc.target/arc/or-cnst-size2.c: Update test.

4 years ago[ARC] Update mlo/mhi handling when big-endian CPU.
Claudiu Zissulescu [Thu, 13 Feb 2020 10:32:05 +0000 (12:32 +0200)]
[ARC] Update mlo/mhi handling when big-endian CPU.

gcc/
xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>

* config/arc/arc.md (mulsidi_600): Correctly select mlo/mhi
registers.
(umulsidi_600): Likewise.

testsuite/
xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>
Petro Karashchenko  <petro.karashchenko@ring.com>

* estsuite/gcc.target/arc/mul64-1.c: New test.

4 years agoi386: Fix up _mm*_mask_popcnt_epi* [PR93696]
Jakub Jelinek [Thu, 13 Feb 2020 09:43:27 +0000 (10:43 +0100)]
i386: Fix up _mm*_mask_popcnt_epi* [PR93696]

As mentioned in the PR and as
https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mask_popcnt_epi
also documents, _mm*_popcnt_epi* intrinsics are consistent with all other
unary AVX512* intrinsics regarding arguments, i.e. the
_mm*_whatever has just single argument (called a in the docs, and __A in the
GCC headers),
_mm*_mask_whatever has 3 arguments (called src, k, a in the docs and
_W, __U, __A in GCC headers) and
_mm*_maskz_whatever 2 arguments (called k, a in the docs and __U, __A in GCC
headers).  Unfortunately, whomever implemented the _mm*_popcnt_epi*
intrinsics got it wrong for the _mm*_mask_popcnt_epi* ones, calling the
args __A, __U, __B and not passing them in the canonical order to the
builtins, making it API incompatible with ICC as well as clang (tested on
godbolts clang 7/8/9/trunk and ICC 19.0.{0,1}, older clang/ICC don't
understand those, so it isn't that it used to be broken even in other
compilers and got changed afterwards).

2020-02-13  Jakub Jelinek  <jakub@redhat.com>

PR target/93696
* config/i386/avx512bitalgintrin.h (_mm512_mask_popcnt_epi8,
_mm512_mask_popcnt_epi16, _mm256_mask_popcnt_epi8,
_mm256_mask_popcnt_epi16, _mm_mask_popcnt_epi8,
_mm_mask_popcnt_epi16): Rename __B argument to __A and __A to __W,
pass __A to the builtin followed by __W instead of __A followed by
__B.
* config/i386/avx512vpopcntdqintrin.h (_mm512_mask_popcnt_epi32,
_mm512_mask_popcnt_epi64): Likewise.
* config/i386/avx512vpopcntdqvlintrin.h (_mm_mask_popcnt_epi32,
_mm256_mask_popcnt_epi32, _mm_mask_popcnt_epi64,
_mm256_mask_popcnt_epi64): Likewise.

* gcc.target/i386/pr93696-1.c: New test.
* gcc.target/i386/pr93696-2.c: New test.
* gcc.target/i386/avx512bitalg-vpopcntw-1.c (TEST): Fix argument order
of _mm*_mask_popcnt_*.
* gcc.target/i386/avx512vpopcntdq-vpopcntq-1.c (TEST): Likewise.
* gcc.target/i386/avx512vpopcntdq-vpopcntd-1.c (TEST): Likewise.
* gcc.target/i386/avx512bitalg-vpopcntb-1.c (TEST): Likewise.
* gcc.target/i386/avx512bitalg-vpopcntb.c (foo): Likewise.
* gcc.target/i386/avx512bitalg-vpopcntbvl.c (foo): Likewise.
* gcc.target/i386/avx512vpopcntdq-vpopcntd.c (foo): Likewise.
* gcc.target/i386/avx512bitalg-vpopcntwvl.c (foo): Likewise.
* gcc.target/i386/avx512bitalg-vpopcntw.c (foo): Likewise.
* gcc.target/i386/avx512vpopcntdq-vpopcntq.c (foo): Likewise.

4 years agoAdd ChangeLog entry for my last commit
Frederik Harwath [Thu, 13 Feb 2020 09:24:39 +0000 (10:24 +0100)]
Add ChangeLog entry for my last commit

4 years agoopenmp: ignore nowait if async execution is unsupported [PR93481]
Frederik Harwath [Thu, 13 Feb 2020 06:30:16 +0000 (07:30 +0100)]
openmp: ignore nowait if async execution is unsupported [PR93481]

An OpenMP "nowait" clause on a target construct currently leads to
a call to GOMP_OFFLOAD_async_run in the plugin that is used for
offloading at execution time. The nvptx plugin contains only a stub
of this function that always produces a fatal error if called.

This commit changes the "nowait" implementation to ignore the clause
if the executing device's plugin does not implement GOMP_OFFLOAD_async_run.
The stub in the nvptx plugin is removed which effectively means that
programs containing "nowait" can now be executed with nvptx offloading
as if the clause had not been used.
This behavior is consistent with the OpenMP specification which says that
"[...] execution of the target task *may* be deferred" (emphasis added),
cf. OpenMP 5.0, page 172.

libgomp/

* plugin/plugin-nvptx.c: Remove GOMP_OFFLOAD_async_run stub.
* target.c (gomp_load_plugin_for_device): Make "async_run" loading
optional.
(gomp_target_task_fn): Assert "devicep->async_run_func".
(clear_unsupported_flags): New function to remove unsupported flags
(right now only GOMP_TARGET_FLAG_NOWAIT) that can be be ignored.
(GOMP_target_ext): Apply clear_unsupported_flags to flags.
* testsuite/libgomp.c/target-33.c:
Remove xfail for offload_target_nvptx.
* testsuite/libgomp.c/target-34.c: Likewise.

4 years agosccvn: Handle bitfields in vn_reference_lookup_3 [PR93582]
Jakub Jelinek [Thu, 13 Feb 2020 09:04:11 +0000 (10:04 +0100)]
sccvn: Handle bitfields in vn_reference_lookup_3 [PR93582]

The following patch is first step towards fixing PR93582.
vn_reference_lookup_3 right now punts on anything that isn't byte aligned,
so to be able to lookup a constant bitfield store, one needs to use
the exact same COMPONENT_REF, otherwise it isn't found.

This patch lifts up that that restriction if the bits to be loaded are
covered by a single store of a constant (keeps the restriction so far
for the multiple store case, can tweak that incrementally, but I think
for bisection etc. it is worth to do it one step at a time).

2020-02-13  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/93582
* fold-const.h (shift_bytes_in_array_left,
shift_bytes_in_array_right): Declare.
* fold-const.c (shift_bytes_in_array_left,
shift_bytes_in_array_right): New function, moved from
gimple-ssa-store-merging.c, no longer static.
* gimple-ssa-store-merging.c (shift_bytes_in_array): Move
to gimple-ssa-store-merging.c and rename to shift_bytes_in_array_left.
(shift_bytes_in_array_right): Move to gimple-ssa-store-merging.c.
(encode_tree_to_bitpos): Use shift_bytes_in_array_left instead of
shift_bytes_in_array.
(verify_shift_bytes_in_array): Rename to ...
(verify_shift_bytes_in_array_left): ... this.  Use
shift_bytes_in_array_left instead of shift_bytes_in_array.
(store_merging_c_tests): Call verify_shift_bytes_in_array_left
instead of verify_shift_bytes_in_array.
* tree-ssa-sccvn.c (vn_reference_lookup_3): For native_encode_expr
/ native_interpret_expr where the store covers all needed bits,
punt on PDP-endian, otherwise allow all involved offsets and sizes
not to be byte-aligned.

* gcc.dg/tree-ssa/pr93582-1.c: New test.
* gcc.dg/tree-ssa/pr93582-2.c: New test.
* gcc.dg/tree-ssa/pr93582-3.c: New test.

4 years agotestsuite/93717 fix up gcc.dg/optimize-bswapsi-2.c for BE
Richard Biener [Thu, 13 Feb 2020 08:10:28 +0000 (09:10 +0100)]
testsuite/93717 fix up gcc.dg/optimize-bswapsi-2.c for BE

2020-02-13  Richard Biener  <rguenther@suse.de>

PR testsuite/93717
* gcc.dg/optimize-bswapsi-2.c: Add BE case.

4 years agoi386: Fix k*shift* intrinsics [PR93673]
Jakub Jelinek [Thu, 13 Feb 2020 07:17:07 +0000 (08:17 +0100)]
i386: Fix k*shift* intrinsics [PR93673]

As mentioned in the PR, the intrinsics allow counts from 0 to 255, but
we actually reject values from 128 to 255.  That is because QImode
CONST_INTs can be only -128 to 127.  Fixed by using const_0_to_255_operand
and dropping the modes for the operands with those predicates
(the IL actually contains the CONST_INT which has VOIDmode).

2020-02-13  Jakub Jelinek  <jakub@redhat.com>

PR target/93673
* config/i386/sse.md (k<code><mode>): Drop mode from last operand and
use const_0_to_255_operand predicate instead of immediate_operand.
(avx512dq_fpclass<mode><mask_scalar_merge_name>,
avx512dq_vmfpclass<mode><mask_scalar_merge_name>,
vgf2p8affineinvqb_<mode><mask_name>,
vgf2p8affineqb_<mode><mask_name>): Drop mode from
const_0_to_255_operand predicated operands.

* gcc.target/i386/avx512f-pr93673.c: New test.
* gcc.target/i386/avx512dq-pr93673.c: New test.
* gcc.target/i386/avx512bw-pr93673.c: New test.