1. 18 Feb, 2020 21 commits
    • 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 19 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
    • Fix double quoting. · c83a55d8
      	PR translation/93755
      	* config/rs6000/rs6000.c (rs6000_option_override_internal):
      	Fix double quotes.
      Martin Liska committed
    • Fix a typo. · 1db97918
      	PR other/93756
      	* config/rx/elf.opt: Fix typo.
      	PR other/93756
      	* src/std/algorithm/iteration.d: Fix typo.
      Martin Liska committed
    • c/86134 avoid errors for unrecognized -Wno- options · abe13e18
      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.
      Richard Biener committed
    • analyzer: fix ICEs in region_model::get_lvalue_1 [PR 93388] · f76a88eb
      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.
      David Malcolm committed
    • analyzer: fix wording for assignment from NULL · 0993ad65
      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.
      David Malcolm committed