1. 18 Feb, 2020 26 commits
    • Use au->lock exclusively for locking in async I/O. · 3fe19105
      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
      Thomas König committed
    • libstdc++: P1976R2 Fixed-size span construction from dynamic range · 9b8e2dea
      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.
      Jonathan Wakely committed
    • libstdc++: Fix and simplify constraints on std::span constructors · d6c9e372
      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.
      Jonathan Wakely committed
    • libstdc++: Reorder declarations of std::span members · f09f3242
      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.
      Jonathan Wakely committed
    • libstdc++: P2116R0 Remove tuple-like protocol support from fixed-extent span · f5b4dc38
      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.
      Jonathan Wakely committed
    • libstdc++: P2106R0 Alternative wording for GB315 and GB316 · aa667c3f
      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.
      Patrick Palka committed
    • libstdc++: P1243R4 Rangify new algorithms · f3169941
      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.
      Patrick Palka committed
    • [fortran] ICE assign character pointer to non target PR93714 · 06119d69
      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
      Mark Eggleston committed
    • Restore LTO PGO bootstrap after ea0b1252. · fa1160f6
      	* value-prof.c (stream_out_histogram_value): Restore LTO PGO
      	bootstrap by missing removal of invalid sanity check.
      Martin Liska committed
    • [Fortran] ICE: Invalid expression in gfc_element_size PR93601 · 23d3f25c
      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.
      Mark Eggleston committed
    • Always compare types of LHS for gimple_assign in ICF. · 08afe87b
      	PR ipa/92518
      	* ipa-icf-gimple.c (func_checker::compare_gimple_assign):
      	Always compare LHS of gimple_assign.
      Martin Liska committed
    • Drop MALLOC attribute for void functions. · 33351ff9
      	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.
      Martin Liska committed
    • Introduce -fprofile-reproducibility and support it with TOP N. · ea0b1252
      	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.
      Martin Liska committed
    • analyzer.opt: rewrite description of -fdump-analyzer-callgraph [PR 93692] · 0b2b45a6
      gcc/analyzer/ChangeLog:
      	PR analyzer/93692
      	* analyzer.opt (fdump-analyzer-callgraph): Rewrite description.
      David Malcolm committed
    • analyzer: fix ICE on failed casts [PR 93777] · 4f40164a
      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.
      David Malcolm committed
    • analyzer: fix ICE on COMPONENT_REF of ARRAY_TYPE [PR 93778] · 2e623393
      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-gf76a88eb 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.
      David Malcolm committed
    • analyzer: fix ICE on pointer arithmetic with incomplete types [PR 93774] · a674c7b8
      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.
      David Malcolm committed
    • analyzer: add test coverage for gfortran ICE fix [PR 93779] · 68f9c41d
      PR analyzer/93779 reports an ICE in gfortran with -fanalyzer
      that was fixed for GCC 10 by a workaround in
      f76a88eb; 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
      David Malcolm committed
    • [Fortran] ICE in gfc_typenode_for_spec PR93603 · 8f55a0ee
      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.
      Mark Eggleston committed
    • [fortran] ICE in gfc_validate_kind(): Got bad kind [PR93580] · d4c10c9f
      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.
      Mark Eggleston committed
    • ipa: Various diagnostic fixes [PR93797] · da67227b
      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.
      Jakub Jelinek committed
    • tree-ssa: Fix ICE in build_vector_type [PR93780] · be7c145a
      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.
      Jakub Jelinek committed
    • Typo fixes - functoin -> function [PR93796] · 8def1d52
      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.
      Jakub Jelinek committed
    • diagnostics: don't generate URLs that won't be used · abb48524
      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.
      David Malcolm committed
    • analyzer: fix ICE on function pointer casts [PR 93775] · d8cde6f9
      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.
      David Malcolm committed
    • Daily bump. · 1ee98e41
      GCC Administrator committed
  2. 17 Feb, 2020 14 commits
    • Update cpplib sv.po. · c0ee9034
      	* sv.po: Update.
      Joseph Myers committed
    • Do not call null register_common in emutls · 96bae436
      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.
      Alexandre Oliva committed
    • [AArch64] Fix PR93565 testcase for ILP32. · bc0f8df1
      Fix PR93565 testcase for ILP32.
      
      testsuite/
      	* gcc.target/aarch64/pr93565.c: Fix test for ilp32.
      Wilco Dijkstra committed
    • libstdc++: P1964R2 Wording for boolean-testable · c5e1c1d3
      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.
      Jonathan Wakely committed
    • libstdc++: P1970R2 Consistency for size() functions: Add ranges::ssize · 7ab36231
      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.
      Jonathan Wakely committed
    • libstdc++ P1956R1 On the names of low-level bit manipulation functions · 9866abe3
      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.
      Jonathan Wakely committed
    • Fix existing fold-vec-extract-longlong.p8.c testcase · cd23cdb1
          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.
      Will Schmidt committed
    • libstdc++: Add comment to <charconv> explaining C++14 status · cfbc8fbb
      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.
      Jonathan Wakely committed
    • libstdc++: Reduce header dependencies for C++20 (PR 92546) · 9cd4eeef
      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.
      Jonathan Wakely committed
    • libstdc++: Add lightweight replacement for std::numeric_limits (PR 92546) · c03b53da
      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.
      Jonathan Wakely committed
    • libstdc++: Fix regression in libstdc++-prettyprinters/cxx20.cc · 4540ef78
      	* python/libstdcxx/v6/printers.py (StdCmpCatPrinter.to_string): Update
      	value for partial_ordering::unordered.
      Jonathan Wakely committed
    • libstdc++: Make "implicit expression variants" more explicit (P2102R0) · d6dfa3da
      	* include/bits/iterator_concepts.h (indirectly_copyable_storable): Add
      	const-qualified expression variations.
      	* include/std/concepts (copyable): Likewise.
      Jonathan Wakely committed
    • libstdc++: Implement "Safe Integral Comparisons" (P0586R2) · 98cf2c26
      	* 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.
      Jonathan Wakely committed
    • Fix grammar in error message. · 5e2dae50
      	PR ipa/93760
      	* ipa-devirt.c (odr_types_equivalent_p): Fix grammar.
      	PR ipa/93760
      	* g++.dg/lto/odr-8_1.C: Fix grammar.
      Martin Liska committed