Skip to content
Snippets Groups Projects
  1. Apr 09, 2021
    • Martin Liska's avatar
      branch_changer: fix usage of Version class. · a7ce23ce
      Martin Liska authored
      maintainer-scripts/ChangeLog:
      
      	* branch_changer.py: Fix usage of Version class.
      a7ce23ce
    • Martin Liska's avatar
      branch_changer.py: use new versioning scheme. · 34bf3250
      Martin Liska authored
      maintainer-scripts/ChangeLog:
      
      	* branch_changer.py: Use new version scheme in --help output.
      34bf3250
    • Tobias Burnus's avatar
      Fortran: Fix fndecl with -fcoarray=lib [PR99817] · d31f485d
      Tobias Burnus authored
      gcc/fortran/ChangeLog:
      
      	PR fortran/99817
      	* trans-types.c (gfc_get_function_type): Also generate hidden
      	coarray argument for character arguments.
      
      gcc/testsuite/ChangeLog:
      
      	PR fortran/99817
      	* gfortran.dg/coarray/dummy_2.f90: New test.
      d31f485d
    • Jakub Jelinek's avatar
      libgomp: Silence false positive -Wmaybe-uninitialized warning [PR99984] · 8cc863ca
      Jakub Jelinek authored
      pthread_setspecific second argument is const void *, so that one can
      call it even with pointers to const, but the function only stores the
      pointer and does nothing else, so the new assumption of -Wmaybe-uninitialized
      that functions taking such pointers will read from what those pointers
      will point to is wrong.  Maybe it would be useful to have some whitelist
      of functions that surely don't do that.
      
      Anyway, in this case it is easy to workaround the warning by moving the
      pthread_setspecific call after the initialization without slowing anything
      down.
      
      2021-04-09  Jakub Jelinek  <jakub@redhat.com>
      
      	PR libgomp/99984
      	* team.c (gomp_thread_start): Call pthread_setspecific for
      	!(defined HAVE_TLS || defined USE_EMUTLS) only after local_thr
      	has been initialized to avoid false positive warning.
      8cc863ca
    • GCC Administrator's avatar
      Daily bump. · 019a9220
      GCC Administrator authored
      019a9220
  2. Apr 08, 2021
    • Jonathan Wakely's avatar
      libstdc++: Remove spurious line break in doxygen comment · 96292c3e
      Jonathan Wakely authored
      libstdc++-v3/ChangeLog:
      
      	* include/bits/basic_string.h: Tweak doxygen comment.
      96292c3e
    • David Edelsohn's avatar
      aix: revert TLS common change · 5f7c2d20
      David Edelsohn authored
      GCC uses TLS common for both public common / BSS and local common / BSS.
      This patch reverts to use .comm directive to allocate TLS
      common / BSS.  This also changes the priority of section selection
      to use BSS before data section.
      
      gcc/ChangeLog:
      
      	* config/rs6000/rs6000.c (rs6000_xcoff_select_section): Select
      	TLS BSS before TLS data.
      	* config/rs6000/xcoff.h (ASM_OUTPUT_TLS_COMMON): Use .comm.
      
      gcc/testsuite/ChangeLog:
      
      	* g++.dg/gomp/tls-5.C: Expect tbss failure on AIX.
      5f7c2d20
    • Patrick Palka's avatar
      libstdc++: Fix split_view::_OuterIter::operator++ [LWG 3505] · b5242b28
      Patrick Palka authored
      libstdc++-v3/ChangeLog:
      
      	* include/std/ranges (__detail::find): Define.
      	(split_view::_OuterIter::operator++): Apply proposed resolution
      	of LWG 3505.
      	* testsuite/std/ranges/adaptors/split.cc (test10): New test.
      b5242b28
    • Patrick Palka's avatar
      libstdc++: Simplify copy-pasted algorithms in <ranges> · c1ce418a
      Patrick Palka authored
      The <ranges> header currently copies some simple algorithms from
      <bits/ranges_algo.h>, which was originally done in order to avoid a
      circular dependency with the header.  This is no longer an issue since
      the latter header now includes <bits/ranges_util.h> instead of all of
      <ranges>.
      
      This means we could now just include <bits/ranges_algo.h> and remove the
      copied algorithms, but that'd increase the size of <ranges> by ~10%.
      And we can't use the corresponding STL-style algorithms here because
      they assume input iterators are copyable.  So this patch instead
      simplifies these copied algorithms, removing their constraints and
      unused parameters, and keeps them around.  In a subsequent patch we're
      going to copy (a simplified version of) ranges::find into <ranges> as
      well.
      
      libstdc++-v3/ChangeLog:
      
      	* include/std/ranges (__detail::find_if): Simplify.
      	(__detail::find_if_not): Likewise.
      	(__detail::min): Remove.
      	(__detail::mismatch): Simplify.
      	(take_view::size): Use std::min instead of __detail::min.
      c1ce418a
    • Patrick Palka's avatar
      libstdc++: Fix elements_view::operator* and operator[] [LWG 3502] · c7fe68f3
      Patrick Palka authored
      While we're modifying elements_view, this also implements the one-line
      resolution of LWG 3492.
      
      libstdc++-v3/ChangeLog:
      
      	* include/std/ranges (__detail::__returnable_element): New
      	concept.
      	(elements_view): Use this concept in its constraints.  Add
      	missing private access specifier.
      	(elements_view::_S_get_element): Define as per LWG 3502.
      	(elements_view::operator*, elements_view::operator[]): Use
      	_S_get_element.
      	(elements_view::operator++): Remove unnecessary constraint
      	as per LWG 3492.
      	* testsuite/std/ranges/adaptors/elements.cc (test05): New test.
      c7fe68f3
    • Jonathan Wakely's avatar
      libstdc++: Improve error reporting if PDF generation fails · be8d5f99
      Jonathan Wakely authored
      If pdflatex runs out of memory the build fails with no hint what's
      wrong. This adds another grep command to the makefile so that an
      out-of-memory error will result in more information being shown.
      
      As suggested in https://bugzilla.redhat.com/show_bug.cgi?id=1841056
      using lualatex can be used as a workaround.
      
      libstdc++-v3/ChangeLog:
      
      	* doc/Makefile.am (stamp-pdf-doxygen): Also grep for
      	out-of-memory error in log file.
      	* doc/Makefile.in: Regenerate.
      be8d5f99
    • Jonathan Wakely's avatar
      libstdc++: Regenerate configure script · e41e3566
      Jonathan Wakely authored
      This seems to be a missing piece of r11-6492.
      
      libstdc++-v3/ChangeLog:
      
      	* configure: Regenerate.
      e41e3566
    • Jonathan Wakely's avatar
      libstdc++: Fix more doxygen markup for group close commands · 014b6dbc
      Jonathan Wakely authored
      Similar to r11-8009 but for /* @} */ comments this time, which should
      be /** @} */ for Doxygen to recognize them.
      
      libstdc++-v3/ChangeLog:
      
      	* include/bits/random.h: Fix doxygen group commands.
      	* include/bits/regex_constants.h: Likewise.
      	* include/tr1/random.h: Likewise.
      014b6dbc
    • Patrick Palka's avatar
      c++: Don't substitute into constraints on lambdas [PR99874] · 123b3e03
      Patrick Palka authored
      We currently substitute through a lambda's constraints whenever we
      regenerate it via tsubst_lambda_expr.  This is the wrong approach
      because it can lead to hard errors due to constraints being evaluated
      out of order (as in the testcase concepts-lambda17.C below), and because
      it doesn't mesh well with the recently added REQUIRES_EXPR_EXTRA_ARGS
      mechanism for delaying substitution into requires-expressions, which is
      the cause of this PR.
      
      But in order to avoid substituting through a lambda's constraints during
      regeneration, we need to be able to get at all in-scope template
      parameters and corresponding template arguments during constraint
      checking of a lambda's op().  And this information is not easily
      available when we need it, it seems.
      
      To that end, the approach that this patch takes is to add two new fields
      to LAMBDA_EXPR (and remove one): LAMBDA_EXPR_REGENERATED_FROM
      (replacing LAMBDA_EXPR_INSTANTIATED), and LAMBDA_EXPR_REGENERATING_TARGS.
      The former allows us to obtain the complete set of template parameters
      that are in-scope for a lambda's op(), and the latter gives us all outer
      template arguments that were used to regenerate the lambda (analogous to
      the TI_TEMPLATE and TI_ARGS of a TEMPLATE_INFO, respectively).
      
      LAMBDA_EXPR_REGENERATING_TARGS is not strictly necessary -- in an
      earlier prototype, I walked LAMBDA_EXPR_EXTRA_SCOPE to build up this set
      of outer template arguments on demand, but it seems cleaner to do it this
      way.  (We'd need to walk LAMBDA_EXPR_EXTRA_SCOPE and not DECL/TYPE_CONTEXT
      because the latter skips over variable template scopes.)
      
      This patch also renames the predicate instantiated_lambda_fn_p to
      regenerated_lambda_fn_p, for sake of consistency with the rest of the
      patch which uses "regenerated" instead of "instantiated".
      
      gcc/cp/ChangeLog:
      
      	PR c++/99874
      	* constraint.cc (get_normalized_constraints_from_decl): Handle
      	regenerated lambdas.
      	(satisfy_declaration_constraints): Likewise.  Check for
      	dependent args later.
      	* cp-tree.h (LAMBDA_EXPR_INSTANTIATED): Replace with ...
      	(LAMBDA_EXPR_REGENERATED_FROM): ... this.
      	(LAMBDA_EXPR_REGENERATING_TARGS): New.
      	(tree_lambda_expr::regenerated_from): New data member.
      	(tree_lambda_expr::regenerating_targs): New data member.
      	(add_to_template_args): Declare.
      	(regenerated_lambda_fn_p): Likewise.
      	(most_general_lambda): Likewise.
      	* lambda.c (build_lambda_expr): Set LAMBDA_EXPR_REGENERATED_FROM
      	and LAMBDA_EXPR_REGENERATING_TARGS.
      	* pt.c (add_to_template_args): No longer static.
      	(tsubst_function_decl): Unconditionally propagate constraints on
      	the substituted function decl.
      	(instantiated_lambda_fn_p): Rename to ...
      	(regenerated_lambda_fn_p): ... this.  Check
      	LAMBDA_EXPR_REGENERATED_FROM instead of
      	LAMBDA_EXPR_INSTANTIATED.
      	(most_general_lambda): Define.
      	(enclosing_instantiation_of): Adjust after renaming
      	instantiated_lambda_fn_p.
      	(tsubst_lambda_expr): Don't set LAMBDA_EXPR_INSTANTIATED.  Set
      	LAMBDA_EXPR_REGENERATED_FROM and LAMBDA_EXPR_REGENERATING_TARGS.
      	Don't substitute or set constraints on the regenerated lambda.
      
      gcc/testsuite/ChangeLog:
      
      	PR c++/99874
      	* g++.dg/cpp2a/concepts-lambda16.C: New test.
      	* g++.dg/cpp2a/concepts-lambda17.C: New test.
      123b3e03
    • Patrick Palka's avatar
      c++: constrained CTAD for nested class template [PR97679] · 05708d6e
      Patrick Palka authored
      In the testcase below, we're crashing during constraint checking of the
      implicitly generated deduction guides for the nested class template A::B
      because we never substitute the outer template arguments (for A) into
      the constraint, neither ahead of time nor as part of satisfaction.
      
      Ideally we'd like to avoid substituting into a constraint ahead of
      time, but the "flattening" vector 'tsubst_args' is constructed under the
      assumption that all outer template arguments are already substituted in,
      and eliminating this assumption to yield a flattening vector that
      includes outer (generic) template arguments suitable for substituting
      into the constraint would be tricky and error-prone.  So this patch
      takes the approximate approach of substituting the outer arguments into
      the constraint ahead of time, so that the subsequent substitution of
      'tsubst_args' is coherent and so later satisfaction just works.
      
      gcc/cp/ChangeLog:
      
      	PR c++/97679
      	* pt.c (build_deduction_guide): Document OUTER_ARGS.  Substitute
      	them into the propagated constraints.
      
      gcc/testsuite/ChangeLog:
      
      	PR c++/97679
      	* g++.dg/cpp2a/concepts-ctad3.C: New test.
      05708d6e
    • Jakub Jelinek's avatar
      c-family: Fix various comment typos in c-warn.c · 05679982
      Jakub Jelinek authored
      When looking into PR99420, I have noticed several comment typos.
      
      2021-04-08  Jakub Jelinek  <jakub@redhat.com>
      
      	* c-warn.c (do_warn_double_promotion): Fix comment typo,
      	occured -> occurred.
      	(check_alignment_of_packed_member): Fix a comment typo,
      	memeber -> member.
      	(warn_parm_ptrarray_mismatch): Fix comment typos, os -> of
      	and onless -> unless.
      	(warn_parm_array_mismatch): Fix comment typos, declaratation
      	-> declaration and woud -> would.  Fix up comment indentation.
      05679982
    • Jonathan Wakely's avatar
      libstdc++: Simplify noexcept-specifiers for move constructors · 1cbba49e
      Jonathan Wakely authored
      This puts the logic for the noexcept-specifier in one place, and then
      reuses it elsewhere. This means checking whether the move constructor
      can throw doesn't need to do overload resolution and then check whether
      some other constructor can throw, we just get the answer directly.
      
      libstdc++-v3/ChangeLog:
      
      	* include/bits/hashtable.h (_Hashtable::_S_nothrow_move()):
      	New function to determine noexcept-specifier for move
      	constructors.
      	(_Hashtable): Use _S_nothrow_move() on move constructors.
      	* testsuite/23_containers/unordered_map/cons/noexcept_move_construct.cc:
      	Correct static assertion message.
      	* testsuite/23_containers/unordered_multimap/cons/noexcept_move_construct.cc:
      	Likewise.
      	* testsuite/23_containers/unordered_multiset/cons/noexcept_move_construct.cc:
      	Likewise.
      	* testsuite/23_containers/unordered_set/cons/noexcept_move_construct.cc:
      	Likewise.
      1cbba49e
    • Richard Sandiford's avatar
      testsuite: Update scan-lto-assembler · 59d09f9f
      Richard Sandiford authored
      scan-lto-assembler was looking for the old dump names instead of
      the new ones.  There are only two uses of this:
      
          gcc.target/nios2/custom-fp-lto.c
          gcc.target/aarch64/pr70044.c
      
      Both of them use single source files, so I think they both want
      the same behaviour.
      
      gcc/testsuite/
      	* lib/scanasm.exp (scan-lto-assembler): Update expected name
      	of dump file.
      59d09f9f
    • Richard Sandiford's avatar
      testsuite: Add -mbig-endian stdint.h requirement · 09ef422f
      Richard Sandiford authored
      Some AArch64 tests force -mbig-endian and indirectly include stdint.h.
      However, not all OSes support both endiannesses, leading to:
      
      FAIL: gcc.target/aarch64/advsimd-intrinsics/bf16_get-be.c   -O0  (test for excess errors)
      UNRESOLVED: gcc.target/aarch64/advsimd-intrinsics/bf16_get-be.c   -O1   check-function-bodies test_vget_high_bf16
      UNRESOLVED: gcc.target/aarch64/advsimd-intrinsics/bf16_get-be.c   -O1   check-function-bodies test_vget_low_bf16
      
      etc.  This patch adds an (admittedly special-purpose) target
      selector for this.
      
      gcc/
      	* doc/sourcebuild.texi (stdint_types_mbig_endian): Document.
      
      gcc/testsuite/
      	* lib/target-supports.exp
      	(check_effective_target_stdint_types_mbig_endian): New proc.
      	* gcc.target/aarch64/advsimd-intrinsics/bf16_get-be.c: Require
      	stdint_types_mbig_endian.
      	* gcc.target/aarch64/advsimd-intrinsics/bfdot-2.c: Likewise.
      	* gcc.target/aarch64/advsimd-intrinsics/vdot-3-2.c: Likewise.
      09ef422f
    • Richard Sandiford's avatar
      match.pd: Fix sve/vcond_3.c · 5240c5ca
      Richard Sandiford authored
      The sve/vcond_3.c tests had started to fail after PR97690/99305,
      because we were generating:
      
        a = VEC_COND_EXPR <cond, { 0, ... }, { 1, ... }>;
        b = a << 15;
      
      instead of:
      
        a = VEC_COND_EXPR <cond, { 0, ... }, { 1<<15, ... }>;
      
      We already have a match.pd rule to handle this kind of thing,
      but it didn't handle shifts.
      
      gcc/
      	* match.pd: Extend vec_cond folds to handle shifts.
      5240c5ca
    • Jason Merrill's avatar
      c++: improve reference binding diagnostic [PR91849] · 9f74f9cf
      Jason Merrill authored
      Here we were complaining about binding the lvalue reference to the rvalue
      result of converting from float to int, but didn't mention that conversion.
      Talk about the type of the initializer instead.
      
      gcc/cp/ChangeLog:
      
      	PR c++/91849
      	* call.c (convert_like_internal): Improve reference diagnostic.
      
      gcc/testsuite/ChangeLog:
      
      	PR c++/91849
      	* g++.dg/conversion/pr66211.C: Adjust diagnostic.
      	* g++.dg/conversion/ref7.C: New test.
      9f74f9cf
    • Maciej W. Rozycki's avatar
      VAX: Fix comment for `*bit<mode>' pattern's peephole · 94279aac
      Maciej W. Rozycki authored
      The comment for a peephole provided for the `*bit<mode>' pattern to be
      produced in comparison elimination from a sequence involving a bitwise
      complement operation of one input operand followed by a bitwise AND
      operation between a bitwise complement of said intermediate result and
      the other input operand (which corresponds to a sequence of MCOM and BIC
      machine instructions) incorrectly refers to the first operation as MNEG
      (which is the machine instruction for arithmetic negation) rather than
      MCOM as it is supposed to.  Fix it.
      
      	gcc/
      	* config/vax/vax.md: Fix comment for `*bit<mode>' pattern's
      	peephole.
      94279aac
    • Jakub Jelinek's avatar
      c++: Don't cache constexpr functions which are passed pointers to heap or... · 559d2f1e
      Jakub Jelinek authored
      c++: Don't cache constexpr functions which are passed pointers to heap or static vars being constructed [PR99859]
      
      When cxx_bind_parameters_in_call is called e.g. on a method on an automatic
      variable, we evaluate the argument and because ADDR_EXPR of an automatic
      decl is not TREE_CONSTANT, we set *non_constant_args and don't cache it.
      But when it is called on an object located on the heap (allocated using
      C++20 constexpr new) where we represent it as TREE_STATIC artificial
      var, or when it is called on a static var that is currently being
      constructed, such ADDR_EXPRs are TREE_CONSTANT and we happily cache
      such calls, but they can in those cases have side-effects in the heap
      or static var objects and so caching them means such side-effects will
      happen only once and not as many times as that method or function is called.
      Furthermore, as Patrick mentioned in the PR, the argument doesn't need to be
      just ADDR_EXPR of the heap or static var or its components, but it could be
      a CONSTRUCTOR that has the ADDR_EXPR embedded anywhere.
      And the incorrectly cached function doesn't need to modify the pointed vars
      or their components, but some caller could be changing them in between the
      call that was cached and the call that used the cached result.
      
      The following patch fixes it by setting *non_constant_args also when
      the argument contains somewhere such an ADDR_EXPR, either of a heap
      artificial var or component thereof, or of a static var currently being
      constructed (where for that it uses the same check as
      cxx_eval_store_expression, ctx->global->values.get (...); addresses of
      other static variables would be rejected by cxx_eval_store_expression
      and therefore it is ok to cache such calls).
      
      2021-04-08  Jakub Jelinek  <jakub@redhat.com>
      
      	PR c++/99859
      	* constexpr.c (addr_of_non_const_var): New function.
      	(cxx_bind_parameters_in_call): Set *non_constant_args to true
      	even if cp_walk_tree on arg with addr_of_non_const_var callback
      	returns true.
      
      	* g++.dg/cpp1y/constexpr-99859-1.C: New test.
      	* g++.dg/cpp1y/constexpr-99859-2.C: New test.
      	* g++.dg/cpp2a/constexpr-new18.C: New test.
      	* g++.dg/cpp2a/constexpr-new19.C: New test.
      559d2f1e
    • Patrick Palka's avatar
      libstdc++: Address remaining to_chars/long_double.cc FAILs [PR98384] · ca4641a3
      Patrick Palka authored
      This works around the remaining reported execution FAILs of this test on
      AIX, Solaris and Darwin.  Eventually we should rewrite this test to be
      less fragile, but there's not enough time to do that for GCC 11.
      
      libstdc++-v3/ChangeLog:
      
      	PR libstdc++/98384
      	* testsuite/20_util/to_chars/long_double.cc: Don't run the test
      	on targets without a large long double.  XFAIL the execution on
      	targets with a non-conforming printf.
      ca4641a3
    • Martin Sebor's avatar
      PR middle-end/99883 - A couple of minor misspellings · d6cc745c
      Martin Sebor authored
      gcc/c-family/ChangeLog:
      
      	PR middle-end/99883
      	* c.opt (Wmismatched-new-delete): Correct spelling.
      
      gcc/lto/ChangeLog:
      
      	PR middle-end/99883
      	* lto-lang.c (lto_post_options): Correct spelling.
      d6cc745c
    • Patrick Palka's avatar
      libstdc++: Reimplement range adaptors [PR99433] · a25321ca
      Patrick Palka authored
      This rewrites our range adaptor implementation for more comprehensible
      error messages, improved SFINAE behavior and conformance to P2281.
      
      The diagnostic improvements mostly come from using appropriately named
      functors instead of lambdas in the generic implementation of partial
      application and composition of range adaptors, and in the definition of
      each of the standard range adaptors.  This makes their pretty printed
      types much shorter and more self-descriptive.
      
      The improved SFINAE behavior comes from constraining the range adaptors'
      member functions appropriately.  This improvement fixes PR99433, and is
      also necessary in order to implement the wording changes of P2281.
      
      Finally, P2281 clarified that partial application and composition of
      range adaptors behaves like a perfect forwarding call wrapper.  This
      patch implements this, except that we don't bother adding overloads for
      forwarding captured state entities as non-const lvalues, since it seems
      sufficient to handle the const lvalue and non-const rvalue cases for now,
      given the current set of standard range adaptors.  But such overloads
      can be easily added if they turn out to be needed.
      
      libstdc++-v3/ChangeLog:
      
      	PR libstdc++/99433
      	* include/std/ranges (__adaptor::__maybe_refwrap): Remove.
      	(__adaptor::__adaptor_invocable): New concept.
      	(__adaptor::__adaptor_partial_app_viable): New concept.
      	(__adaptor::_RangeAdaptorClosure): Rewrite, turning it into a
      	non-template base class.
      	(__adaptor::_RangeAdaptor): Rewrite, turning it into a CRTP base
      	class template.
      	(__adaptor::_Partial): New class template that represents
      	partial application of a range adaptor non-closure.
      	(__adaptor::__pipe_invocable): New concept.
      	(__adaptor::_Pipe): New class template.
      	(__detail::__can_ref_view): New concept.
      	(__detail::__can_subrange): New concept.
      	(all): Replace the lambda here with ...
      	(_All): ... this functor.  Add appropriate constraints.
      	(__detail::__can_filter_view): New concept.
      	(filter, _Filter): As in all/_All.
      	(__detail::__can_transform): New concept.
      	(transform, _Transform): As in all/_All.
      	(__detail::__can_take_view): New concept.
      	(take, _Take): As in all/_All.
      	(__detail::__can_take_while_view): New concept.
      	(take_while, _TakeWhile): As in all/_All.
      	(__detail::__can_drop_view): New concept.
      	(drop, _Drop): As in all/_All.
      	(__detail::__can_drop_while_view): New concept.
      	(drop_while, _DropWhile): As in all/_All.
      	(__detail::__can_join_view): New concept.
      	(join, _Join): As in all/_All.
      	(__detail::__can_split_view): New concept.
      	(split, _Split): As in all/_All.  Rename template parameter
      	_Fp to _Pattern.
      	(__detail::__already_common): New concept.
      	(__detail::__can_common_view): New concept.
      	(common, _Common): As in all/_All.
      	(__detail::__can_reverse_view): New concept.
      	(reverse, _Reverse): As in all/_All.
      	(__detail::__can_elements_view): New concept.
      	(elements, _Elements): As in all/_All.
      	(keys, values): Adjust.
      	* testsuite/std/ranges/adaptors/99433.cc: New test.
      	* testsuite/std/ranges/adaptors/all.cc: No longer expect that
      	adding empty range adaptor closure objects to a pipeline doesn't
      	increase the size of the pipeline.
      	(test05): New test.
      	* testsuite/std/ranges/adaptors/common.cc (test03): New test.
      	* testsuite/std/ranges/adaptors/drop.cc (test09): New test.
      	* testsuite/std/ranges/adaptors/drop_while.cc (test04): New test.
      	* testsuite/std/ranges/adaptors/elements.cc (test04): New test.
      	* testsuite/std/ranges/adaptors/filter.cc (test06): New test.
      	* testsuite/std/ranges/adaptors/join.cc (test09): New test.
      	* testsuite/std/ranges/adaptors/p2281.cc: New test.
      	* testsuite/std/ranges/adaptors/reverse.cc (test07): New test.
      	* testsuite/std/ranges/adaptors/split.cc (test01, test04):
      	Adjust.
      	(test09): New test.
      	* testsuite/std/ranges/adaptors/split_neg.cc (test01): Adjust
      	expected error message.
      	(test02): Likewise.  Extend test.
      	* testsuite/std/ranges/adaptors/take.cc (test06): New test.
      	* testsuite/std/ranges/adaptors/take_while.cc (test05): New test.
      	* testsuite/std/ranges/adaptors/transform.cc (test07, test08):
      	New test.
      a25321ca
    • Richard Sandiford's avatar
      testsuite: Fix gcc.dg/vect/pr99102.c · 860c5caf
      Richard Sandiford authored
      pr99102.c needs to override the default options to exercise the original
      problem, but that means that it also needs to respecify the dump flags.
      
      gcc/testsuite/
      	* gcc.dg/vect/pr99102.c: Add -fdump-tree-vect-details.
      860c5caf
    • Richard Sandiford's avatar
      testsuite: Update error messages in sve/acle/general-c · cc6c1572
      Richard Sandiford authored
      The “previous definition of 'x'” notes now include the type
      of the original definition before “was here”.  There's not really
      any need to hard-code that much of the message in the ACLE tests,
      so this patch just removes the “was here” from the match string.
      
      gcc/testsuite/
      
      	* gcc.target/aarch64/sve/acle/general-c/func_redef_1.c: Remove
      	"was here" from error message.
      	* gcc.target/aarch64/sve/acle/general-c/func_redef_2.c: Likewise.
      	* gcc.target/aarch64/sve/acle/general-c/func_redef_3.c: Likewise.
      	* gcc.target/aarch64/sve/acle/general-c/func_redef_6.c: Likewise.
      	* gcc.target/aarch64/sve/acle/general-c/type_redef_1.c: Likewise.
      	* gcc.target/aarch64/sve/acle/general-c/type_redef_2.c: Likewise.
      	* gcc.target/aarch64/sve/acle/general-c/type_redef_3.c: Likewise.
      	* gcc.target/aarch64/sve/acle/general-c/type_redef_4.c: Likewise.
      	* gcc.target/aarch64/sve/acle/general-c/type_redef_5.c: Likewise.
      	* gcc.target/aarch64/sve/acle/general-c/type_redef_6.c: Likewise.
      	* gcc.target/aarch64/sve/acle/general-c/type_redef_8.c: Likewise.
      	* gcc.target/aarch64/sve/acle/general-c/type_redef_9.c: Likewise.
      	* gcc.target/aarch64/sve/acle/general-c/type_redef_10.c: Likewise.
      	* gcc.target/aarch64/sve/acle/general-c/type_redef_13.c: Likewise.
      cc6c1572
    • Richard Sandiford's avatar
      testsuite: Fix Advanced SIMD failures for SVE · a45fe621
      Richard Sandiford authored
      This patch just adds some missing +nosve directives to Advanced
      SIMD vectorisation tests.
      
      gcc/testsuite/
      	* gcc.target/aarch64/asimd-mull-elem.c: Add +nosve.
      	* gcc.target/aarch64/pr98772.c: Likewise.
      	* gcc.target/aarch64/simd/vect_su_add_sub.c: Likewise.
      a45fe621
    • Richard Sandiford's avatar
      testsuite: Fix sve/mul_2.c failures · d3f78917
      Richard Sandiford authored
      Some sve/mul_2.c tests were failing because we'd (reasonably)
      decided to use shifts and adds instead of MULs for some simple
      negative constants.  We'd already needed to avoid that when
      picking positive constants, so this patch does the same thing
      for the negative ones.
      
      gcc/testsuite/
      	* gcc.target/aarch64/sve/mul_2.c: Adjust negative constants to avoid
      	conversion to shifts and adds.
      d3f78917
    • Jonathan Wakely's avatar
      maintainer-scripts: Disable multilib when generating libstdc++ docs · acbbb82e
      Jonathan Wakely authored
      This allows the docs to be generated on hosts without the necessary
      files present for multilib support.
      
      maintainer-scripts/ChangeLog:
      
      	* generate_libstdcxx_web_docs: Add --disable-multilib to
      	configure command.
      acbbb82e
    • Jonathan Wakely's avatar
      libstdc++: Fix Doxygen warning about ambiguous file name · 2c1557ac
      Jonathan Wakely authored
      libstdc++-v3/ChangeLog:
      
      	* include/std/string_view: Adjust Doxygen @file comment.
      2c1557ac
    • David Malcolm's avatar
      analyzer: fix leak false +ves due to maybe-clobbered regions [PR99042,PR99774] · 3a66c289
      David Malcolm authored
      Prior to this patch, program_state::detect_leaks worked by finding all
      live svalues in the old state and in the new state, and calling
      on_svalue_leak for each svalue that has changed from being live to
      not being live.
      
      PR analyzer/99042 and PR analyzer/99774 both describe false leak
      diagnostics from -fanalyzer (a false FILE * leak in git, and a false
      malloc leak in qemu, respectively).
      
      In both cases the root cause of the false leak diagnostic relates to
      svalues no longer being explicitly bound in the store due to regions
      being conservatively clobbered, due to an unknown function being
      called, or due to a write through a pointer that could alias the
      region, respectively.
      
      We have a transition from an svalue being explicitly live to not
      being explicitly live - but only because the store is being
      conservative, clobbering the binding.  The leak detection is looking
      for transitions from "definitely live" to "not definitely live",
      when it should be looking for transitions from "definitely live"
      to "definitely not live".
      
      This patch introduces a new class to temporarily capture information
      about svalues that were explicitly live, but for which a region bound
      to them got clobbered for conservative reasons.  This new
      "uncertainty_t" class is passed around to capture the data long enough
      for use in program_state::detect_leaks, where it is used to only
      complain about svalues that were definitely live and are now both
      not definitely live *or* possibly-live i.e. definitely not-live.
      
      The class also captures for which svalues we can't meaningfully track
      sm-state anymore, and resets the svalues back to the "start" state.
      
      Together, these changes fix the false leak reports.
      
      gcc/analyzer/ChangeLog:
      	PR analyzer/99042
      	PR analyzer/99774
      	* engine.cc
      	(impl_region_model_context::impl_region_model_context): Add
      	uncertainty param and use it to initialize m_uncertainty.
      	(impl_region_model_context::get_uncertainty): New.
      	(impl_sm_context::get_fndecl_for_call): Add NULL for new
      	uncertainty param when constructing impl_region_model_context.
      	(impl_sm_context::get_state): Likewise.
      	(impl_sm_context::set_next_state): Likewise.
      	(impl_sm_context::warn): Likewise.
      	(exploded_node::on_stmt): Add uncertainty param
      	and use it when constructing impl_region_model_context.
      	(exploded_node::on_edge): Add uncertainty param and pass
      	to on_edge call.
      	(exploded_node::detect_leaks): Create uncertainty_t and pass to
      	impl_region_model_context.
      	(exploded_graph::get_or_create_node): Create uncertainty_t and
      	pass to prune_for_point.
      	(maybe_process_run_of_before_supernode_enodes): Create
      	uncertainty_t and pass to impl_region_model_context.
      	(exploded_graph::process_node): Create uncertainty_t instances and
      	pass around as needed.
      	* exploded-graph.h
      	(impl_region_model_context::impl_region_model_context): Add
      	uncertainty param.
      	(impl_region_model_context::get_uncertainty): New decl.
      	(impl_region_model_context::m_uncertainty): New field.
      	(exploded_node::on_stmt): Add uncertainty param.
      	(exploded_node::on_edge): Likewise.
      	* program-state.cc (sm_state_map::on_liveness_change): Get
      	uncertainty from context and use it to unset sm-state from
      	svalues as appropriate.
      	(program_state::on_edge): Add uncertainty param and use it when
      	constructing impl_region_model_context.  Fix indentation.
      	(program_state::prune_for_point): Add uncertainty param and use it
      	when constructing impl_region_model_context.
      	(program_state::detect_leaks): Get any uncertainty from ctxt and
      	use it to get maybe-live svalues for dest_state, rather than
      	definitely-live ones; use this when determining which svalues
      	have leaked.
      	(selftest::test_program_state_merging): Create uncertainty_t and
      	pass to impl_region_model_context.
      	* program-state.h (program_state::on_edge): Add uncertainty param.
      	(program_state::prune_for_point): Likewise.
      	* region-model-impl-calls.cc (call_details::get_uncertainty): New.
      	(region_model::impl_call_memcpy): Pass uncertainty to
      	mark_region_as_unknown call.
      	(region_model::impl_call_memset): Likewise.
      	(region_model::impl_call_strcpy): Likewise.
      	* region-model-reachability.cc (reachable_regions::handle_sval):
      	Also add sval to m_mutable_svals.
      	* region-model.cc (region_model::on_assignment): Pass any
      	uncertainty from ctxt to the store::set_value call.
      	(region_model::handle_unrecognized_call): Get any uncertainty from
      	ctxt and use it to record mutable svalues at the unknown call.
      	(region_model::get_reachable_svalues): Add uncertainty param and
      	use it to mark any maybe-bound svalues as being reachable.
      	(region_model::set_value): Pass any uncertainty from ctxt to the
      	store::set_value call.
      	(region_model::mark_region_as_unknown): Add uncertainty param and
      	pass it on to the store::mark_region_as_unknown call.
      	(region_model::update_for_call_summary): Add uncertainty param and
      	pass it on to the region_model::mark_region_as_unknown call.
      	* region-model.h (call_details::get_uncertainty): New decl.
      	(region_model::get_reachable_svalues): Add uncertainty param.
      	(region_model::mark_region_as_unknown): Add uncertainty param.
      	(region_model_context::get_uncertainty): New vfunc.
      	(noop_region_model_context::get_uncertainty): New vfunc
      	implementation.
      	* store.cc (dump_svalue_set): New.
      	(uncertainty_t::dump_to_pp): New.
      	(uncertainty_t::dump): New.
      	(binding_cluster::clobber_region): Pass NULL for uncertainty to
      	remove_overlapping_bindings.
      	(binding_cluster::mark_region_as_unknown): Add uncertainty param
      	and pass it to remove_overlapping_bindings.
      	(binding_cluster::remove_overlapping_bindings): Add uncertainty param.
      	Use it to record any svalues that were in clobbered bindings.
      	(store::set_value): Add uncertainty param.  Pass it to
      	binding_cluster::mark_region_as_unknown when handling symbolic
      	regions.
      	(store::mark_region_as_unknown): Add uncertainty param and pass it
      	to binding_cluster::mark_region_as_unknown.
      	(store::remove_overlapping_bindings): Add uncertainty param and
      	pass it to binding_cluster::remove_overlapping_bindings.
      	* store.h (binding_cluster::mark_region_as_unknown): Add
      	uncertainty param.
      	(binding_cluster::remove_overlapping_bindings): Likewise.
      	(store::set_value): Likewise.
      	(store::mark_region_as_unknown): Likewise.
      
      gcc/testsuite/ChangeLog:
      	PR analyzer/99042
      	PR analyzer/99774
      	* gcc.dg/analyzer/pr99042.c: New test.
      	* gcc.dg/analyzer/pr99774-1.c: New test.
      	* gcc.dg/analyzer/pr99774-2.c: New test.
      3a66c289
    • Iain Buclaw's avatar
      d: Update language attribute support, and implement gcc.attributes · 8e84a142
      Iain Buclaw authored
      D attribute support has been updated to have a baseline parity with the
      LLVM D compiler's own `ldc.attributes'.
      
      The handler that extracts GCC attributes from a list of UDAs has been
      improved to take care of some mistakes that could have been warnings.
      UDAs attached to field variables are also now processed for any GCC
      attributes attached to them.
      
      The following new attributes have been added to the D front-end:
      
       - @attribute("alloc_size")
       - @attribute("used")
       - @attribute("optimize")
       - @attribute("restrict")
       - @attribute("cold")
       - @attribute("noplt")
       - @attribute("target_clones")
       - @attribute("no_icf")
       - @attribute("noipa")
       - @attribute("symver")
      
      With convenience aliases in a new `gcc.attributes' module to match
      the same naming convention as `ldc.attributes':
      
       - @allocSize()
       - @assumeUsed
       - @fastmath
       - @naked
       - @restrict
       - @cold
       - @noplt
       - @optStrategy()
       - @polly
       - @section()
       - @target()
       - @weak
      
      The old gcc.attribute module has been deprecated, along with the removal
      of the following attribute handlers:
      
       - @attribute("alias"): Has been superseded by `pragma(mangle)'.
       - @attribute("forceinline"): Renamed to always_inline.
      
      gcc/d/ChangeLog:
      
      	* d-attribs.cc: Include fold-const.h and opts.h.
      	(attr_noreturn_exclusions): Add alloc_size.
      	(attr_const_pure_exclusions): Likewise.
      	(attr_inline_exclusions): Add target_clones.
      	(attr_noinline_exclusions): Rename forceinline to always_inline.
      	(attr_target_exclusions): New array.
      	(attr_target_clones_exclusions): New array.
      	(attr_alloc_exclusions): New array.
      	(attr_cold_hot_exclusions): New array.
      	(d_langhook_common_attribute_table): Add new D attribute handlers.
      	(build_attributes): Update to look for gcc.attributes.  Issue warning
      	if not given a struct literal.  Handle void initialized arguments.
      	(handle_always_inline_attribute): Remove function.
      	(d_handle_noinline_attribute): Don't extract TYPE_LANG_FRONTEND.
      	(d_handle_forceinline_attribute): Rename to...
      	(d_handle_always_inline_attribute): ...this.  Remove special handling.
      	(d_handle_flatten_attribute): Don't extract TYPE_LANG_FRONTEND.
      	(d_handle_target_attribute): Likewise.  Warn about empty arguments.
      	(d_handle_target_clones_attribute): New function.
      	(optimize_args): New static variable.
      	(parse_optimize_options): New function.
      	(d_handle_optimize_attribute): New function.
      	(d_handle_noclone_attribute): Don't extract TYPE_LANG_FRONTEND.
      	(d_handle_alias_attribute): Remove function.
      	(d_handle_noicf_attribute): New function.
      	(d_handle_noipa_attribute): New function.
      	(d_handle_section_attribute): Call the handle_generic_attribute target
      	hook after performing target independent processing.
      	(d_handle_symver_attribute): New function.
      	(d_handle_noplt_attribute): New function.
      	(positional_argument): New function.
      	(d_handle_alloc_size_attribute): New function.
      	(d_handle_cold_attribute): New function.
      	(d_handle_restrict_attribute): New function.
      	(d_handle_used_attribute): New function.
      	* decl.cc (gcc_attribute_p): Update to look for gcc.attributes.
      	(get_symbol_decl): Update decl source location of old prototypes to
      	the new declaration being merged.
      	* types.cc (layout_aggregate_members): Apply user defined attributes
      	on fields.
      
      libphobos/ChangeLog:
      
      	* libdruntime/Makefile.am (DRUNTIME_DSOURCES): Add
      	  gcc/attributes.d.
      	* libdruntime/Makefile.in: Regenerate.
      	* libdruntime/gcc/attribute.d: Deprecate module, publicly import
      	gcc.attributes.
      	* libdruntime/gcc/deh.d: Update imports.
      	* libdruntime/gcc/attributes.d: New file.
      
      gcc/testsuite/ChangeLog:
      
      	* gdc.dg/gdc108.d: Update test.
      	* gdc.dg/gdc142.d: Likewise.
      	* gdc.dg/pr90136a.d: Likewise.
      	* gdc.dg/pr90136b.d: Likewise.
      	* gdc.dg/pr90136c.d: Likewise.
      	* gdc.dg/pr95173.d: Likewise.
      	* gdc.dg/attr_allocsize1.d: New test.
      	* gdc.dg/attr_allocsize2.d: New test.
      	* gdc.dg/attr_alwaysinline1.d: New test.
      	* gdc.dg/attr_cold1.d: New test.
      	* gdc.dg/attr_exclusions1.d: New test.
      	* gdc.dg/attr_exclusions2.d: New test.
      	* gdc.dg/attr_flatten1.d: New test.
      	* gdc.dg/attr_module.d: New test.
      	* gdc.dg/attr_noclone1.d: New test.
      	* gdc.dg/attr_noicf1.d: New test.
      	* gdc.dg/attr_noinline1.d: New test.
      	* gdc.dg/attr_noipa1.d: New test.
      	* gdc.dg/attr_noplt1.d: New test.
      	* gdc.dg/attr_optimize1.d: New test.
      	* gdc.dg/attr_optimize2.d: New test.
      	* gdc.dg/attr_optimize3.d: New test.
      	* gdc.dg/attr_optimize4.d: New test.
      	* gdc.dg/attr_restrict1.d: New test.
      	* gdc.dg/attr_section1.d: New test.
      	* gdc.dg/attr_symver1.d: New test.
      	* gdc.dg/attr_target1.d: New test.
      	* gdc.dg/attr_targetclones1.d: New test.
      	* gdc.dg/attr_used1.d: New test.
      	* gdc.dg/attr_used2.d: New test.
      	* gdc.dg/attr_weak1.d: New test.
      	* gdc.dg/imports/attributes.d: New test.
      8e84a142
    • Martin Liska's avatar
      Fix wrong assert in branch_changer.py. · 855ce475
      Martin Liska authored
      maintainer-scripts/ChangeLog:
      
      	* branch_changer.py: Fix wrongly converted assert.
      855ce475
    • Martin Liska's avatar
      Modernize branch_changer.py script. · 9e07b0bf
      Martin Liska authored
      maintainer-scripts/ChangeLog:
      
      	* branch_changer.py: Modernize and fix flake8 issues.
      	* setup.cfg: New file.
      9e07b0bf
    • Jason Merrill's avatar
      c++: improve specialization mismatch diagnostic [PR94529] · ac24fa46
      Jason Merrill authored
      We were telling users they needed more template<> to specialize a member
      template in a testcase with no member templates.  Only produce that message
      if we actually see a member template, and also always print the candidates.
      
      gcc/cp/ChangeLog:
      
      	PR c++/94529
      	* pt.c (determine_specialization): Improve diagnostic.
      
      gcc/testsuite/ChangeLog:
      
      	PR c++/94529
      	* g++.dg/template/mem-spec2.C: New test.
      ac24fa46
    • Marek Polacek's avatar
      c++: Fix ICE with unexpanded parameter pack [PR99844] · 2cd5333d
      Marek Polacek authored
      In explicit17.C, we weren't detecting an unexpanded parameter pack in
      explicit(bool), so we crashed on a TEMPLATE_PARM_INDEX in constexpr.
      
      I noticed the same is true for noexcept(), but only since my patch to
      implement delayed parsing of noexcept.  Previously, we would detect the
      unexpanded pack in push_template_decl but now the noexcept expression
      has not yet been parsed, so we need to do it a bit later.
      
      gcc/cp/ChangeLog:
      
      	PR c++/99844
      	* decl.c (build_explicit_specifier): Call
      	check_for_bare_parameter_packs.
      	* except.c (build_noexcept_spec): Likewise.
      
      gcc/testsuite/ChangeLog:
      
      	PR c++/99844
      	* g++.dg/cpp2a/explicit16.C: Use c++20.
      	* g++.dg/cpp0x/noexcept66.C: New test.
      	* g++.dg/cpp2a/explicit17.C: New test.
      2cd5333d
    • Jonathan Wakely's avatar
      libstdc++: Remove bogus ChangeLog entry · e34f88c9
      Jonathan Wakely authored
      e34f88c9
    • Jonathan Wakely's avatar
      libstdc++: Make std::is_scoped_enum work with incomplete types · 43ab1dc2
      Jonathan Wakely authored
      Tim Song pointed out that using __underlying_type is ill-formed for
      incomplete enumeration types, and is_scoped_enum doesn't require a
      complete type. This changes the trait to check for conversion to int
      instead of to the underlying type.
      
      In order to give the correct result when the trait is used in the
      enumerator-list of an incomplete type the partial specialization for
      enums has an additional check that fails for incomplete types. This
      assumes that an incompelte enumeration type must be an unscoped
      enumeration, and so the primary template (with a std::false_type base
      characteristic) can be used. This isn't necessarily true, but it is not
      currently possible to refer to a scoped enumeration type before its type
      is complete (PR c++/89025).
      
      It should be possible to use requires(remove_cv_t<_Tp> __t) in the
      partial specialization's assignablility check, but that currently gives
      an ICE (PR c++/99968) so there is an extra partial specialization of
      is_scoped_enum<const _Tp> to handle const types.
      
      libstdc++-v3/ChangeLog:
      
      	* include/std/type_traits (is_scoped_enum<T>): Constrain partial
      	specialization to not match incomplete enum types. Use a
      	requires-expression instead of instantiating is_convertible.
      	(is_scoped_enum<const T>): Add as workaround for PR c++/99968.
      	* testsuite/20_util/is_scoped_enum/value.cc: Check with
      	incomplete types and opaque-enum-declarations.
      43ab1dc2
Loading