Skip to content
Snippets Groups Projects
  1. Apr 08, 2021
    • 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
    • Alex Coplan's avatar
      arm: Various MVE vec_duplicate fixes [PR99647] · 67d56b27
      Alex Coplan authored
      This patch fixes various issues with vec_duplicate in the MVE patterns.
      Currently there are two patterns named *mve_mov<mode>. The second of
      these is really a vector duplicate rather than a move, so I've renamed
      it accordingly.
      
      As it stands, there are several issues with this pattern:
      1. The MVE_types iterator has an entry for TImode, but
         vec_duplicate:TI is invalid.
      2. The mode of the operand to vec_duplicate is SImode, but it should
         vary according to the vector mode iterator.
      3. The second alternative of this pattern is bogus: it allows matching
         symbol_refs (the cause of the PR) and const_ints (which means that it
         matches (vec_duplicate (const_int ...)) which is non-canonical: such
         rtxes should be const_vectors instead and handled by the main vector
         move pattern).
      
      This patch fixes all of these issues, and removes the redundant
      *mve_vec_duplicate<mode> pattern.
      
      gcc/ChangeLog:
      
      	PR target/99647
      	* config/arm/iterators.md (MVE_vecs): New.
      	(V_elem): Also handle V2DF.
      	* config/arm/mve.md (*mve_mov<mode>): Rename to ...
      	(*mve_vdup<mode>): ... this. Remove second alternative since
      	vec_duplicate of const_int is not canonical RTL, and we don't
      	want to match symbol_refs.
      	(*mve_vec_duplicate<mode>): Delete (pattern is redundant).
      
      gcc/testsuite/ChangeLog:
      
      	PR target/99647
      	* gcc.c-torture/compile/pr99647.c: New test.
      67d56b27
    • Xionghu Luo's avatar
      Improve rtx insn vec output · 0fb21ba7
      Xionghu Luo authored
      print_rtl will dump the rtx_insn from current until LAST.  But it is only
      useful to see the particular insn that called by print_rtx_insn_vec,
      Let's call print_rtl_single to display that insn in the gcse and store-motion
      pass dump.
      
      2021-04-07  Xionghu Luo  <luoxhu@linux.ibm.com>
      
      gcc/ChangeLog:
      
      	* fold-const.c (fold_single_bit_test): Fix typo.
      	* print-rtl.c (print_rtx_insn_vec): Call print_rtl_single
      	instead.
      0fb21ba7
    • GCC Administrator's avatar
      Daily bump. · 299859c2
      GCC Administrator authored
      299859c2
  2. Apr 07, 2021
    • Jason Merrill's avatar
      c++: friend with redundant qualification [PR41723] · fb5ed6d8
      Jason Merrill authored
      Different code paths were correctly choosing to look up D directly, since C
      is the current instantiation, but here we decided to try to make it a
      typename type, leading to confusion.  Fixed by using dependent_scope_p as we
      do elsewhere.
      
      gcc/cp/ChangeLog:
      
      	PR c++/41723
      	* parser.c (cp_parser_class_name): Check dependent_scope_p.
      
      gcc/testsuite/ChangeLog:
      
      	PR c++/41723
      	* g++.dg/template/friend71.C: New test.
      fb5ed6d8
    • Jason Merrill's avatar
      c++: base template friend [PR52625] · b40d45cb
      Jason Merrill authored
      Here we were mistakenly treating the injected-class-name as a partial
      specialization.
      
      gcc/cp/ChangeLog:
      
      	PR c++/52625
      	* pt.c (maybe_process_partial_specialization): Check
      	DECL_SELF_REFERENCE_P.
      
      gcc/testsuite/ChangeLog:
      
      	PR c++/52625
      	* g++.dg/template/friend70.C: New test.
      b40d45cb
    • Jason Merrill's avatar
      c++: using overloaded with local decl [PR92918] · a528594c
      Jason Merrill authored
      The problem here was that the lookup for 'impl' when parsing the template
      only found the using-declaration, not the member function declaration.
      
      This happened because when trying to add the member function declaration,
      push_class_level_binding_1 saw that the current binding was a USING_DECL and
      the new value is an overload, and decided to just return success.
      
      That 'return true' dates back to r69921.  In
      https://gcc.gnu.org/pipermail/gcc-patches/2003-July/110632.html Nathan
      mentions that we only push dependent USING_DECLs, which is no longer the
      case; now that we retain more USING_DECLs, handling this case like the other
      overloaded function cases seems like the obvious solution.
      
      gcc/cp/ChangeLog:
      
      	PR c++/92918
      	* name-lookup.c (push_class_level_binding_1): Do overload a new
      	function with a previous using-declaration.
      
      gcc/testsuite/ChangeLog:
      
      	PR c++/92918
      	* g++.dg/lookup/using66.C: New test.
      a528594c
    • Richard Sandiford's avatar
      testsuite: Fix many UNRESOLVEDs for gcc.dg/vect · 12029c04
      Richard Sandiford authored
      It turns out that, on targets that use testglue, many gcc.dg/vect
      scan-dump tests became UNRESOLVED after the change to the dump
      file naming scheme.
      
      The problem is that, when creating an executable, we normally name
      the dump file after both the executable and the source file name.
      However, as an exception, we name it after only the source file
      name if:
      
      (a) there is only one source file name and
      (b) the source file and the executable have the same basename
      
      Both (a) and (b) are normally true when building executables from
      gcc.dg/vect.  But (a) is not true when linking against testglue.
      The harness was therefore looking for a dump file based only on the
      source file name while the compiler was producing a dump file that
      contained both names.
      
      We get around this for dg-additional-sources using:
      
      	# This option restores naming of aux and dump output files
      	# after input files when multiple input files are named,
      	# instead of getting them combined with the output name.
      	lappend options "additional_flags=-dumpbase \"\""
      
      This patch does the same thing for executables that are linked
      against testglue.  This removes over 2400 UNRESOLVEDs from an
      armeb-eabi test run, but in so doing introduces FAILs for some
      tests that were previously skipped.
      
      gcc/testsuite/
      	* lib/gcc.exp (gcc_target_compile): Add -dumpbase ""
      	when building an executable with testglue.
      12029c04
    • Jonathan Wakely's avatar
      libstdc++: Fix filesystem::path construction from COW string [PR 99805] · e06d3f5d
      Jonathan Wakely authored
      Calling the non-const data() member on a COW string makes it "leaked",
      possibly resulting in reallocating the string to ensure a unique owner.
      
      The path::_M_split_cmpts() member parses its _M_pathname string using
      string_view objects and then calls _M_pathname.data() to find the offset
      of each string_view from the start of the string. However because
      _M_pathname is non-const that will cause a COW string to reallocate if
      it happens to be shared with another string object. This results in the
      offsets calculated for each component being wrong (i.e. undefined)
      because the string views no longer refer to substrings of the
      _M_pathname member. The fix is to use the parse.offset(c) member which
      gets the offset safely.
      
      The bug only happens for the path(string_type&&) constructor and only
      for COW strings. When constructed from an lvalue string the string's
      contents are copied rather than just incrementing the refcount, so
      there's no reallocation when calling the non-const data() member. The
      testsuite changes check the lvalue case anyway, because we should
      probably change the deep copying to just be a refcount increment (by
      adding a path(const string_type&) constructor or an overload for
      __effective_range(const string_type&), for COW strings only).
      
      libstdc++-v3/ChangeLog:
      
      	PR libstdc++/99805
      	* src/c++17/fs_path.cc (path::_M_split_cmpts): Do not call
      	non-const member on _M_pathname, to avoid copy-on-write.
      	* testsuite/27_io/filesystem/path/decompose/parent_path.cc:
      	Check construction from strings that might be shared.
      e06d3f5d
    • Richard Sandiford's avatar
      vect: Restore variable-length SLP permutes [PR97513] · 2f3d9104
      Richard Sandiford authored
      Many of the gcc.target/sve/slp-perm*.c tests started failing
      after the introduction of separate SLP permute nodes.
      This patch adds variable-length support using a similar
      technique to vect_transform_slp_perm_load.
      
      As there, the idea is to detect when every permute mask vector
      is the same and can be generated using a regular stepped sequence.
      We can easily handle those cases for variable-length, but still
      need to restrict the general case to constant-length.
      
      Again copying vect_transform_slp_perm_load, the idea is to distinguish
      the two cases regardless of whether the length is variable or not,
      partly to increase testing coverage and partly because it avoids
      generating redundant trees.
      
      Doing this means that we can also use SLP for the two-vector
      permute in pr88834.c, which we couldn't before VEC_PERM_EXPR
      nodes were introduced.  The patch therefore makes pr88834.c
      check that we don't regress back to not using SLP and adds
      pr88834_ld3.c to check for the original problem in the PR.
      
      gcc/
      	PR tree-optimization/97513
      	* tree-vect-slp.c (vect_add_slp_permutation): New function,
      	split out from...
      	(vectorizable_slp_permutation): ...here.  Detect cases in which
      	all VEC_PERM_EXPRs are guaranteed to have the same stepped
      	permute vector and only generate one permute vector for that case.
      	Extend that case to handle variable-length vectors.
      
      gcc/testsuite/
      	* gcc.target/aarch64/sve/pr88834.c: Expect the vectorizer to use SLP.
      	* gcc.target/aarch64/sve/pr88834_ld3.c: New test.
      2f3d9104
    • Richard Sandiford's avatar
      vect: Don't split store groups if we have IFN_STORE_LANES [PR99873] · 5c5b3197
      Richard Sandiford authored
      As noted in the PR, we were no longer using ST3 for the testcase and
      instead stored each lane individually.  This is because we'd split
      the store group during SLP and couldn't recover when SLP failed.
      
      However, we can also get better code with ST3 and ST4 even if SLP would
      have succeeded, such as for vect-complex-5.c.  I'm not sure exactly
      where the cut-off point is, but it seems reasonable to allow the split
      if either of the new groups would operate on full vectors *within*
      rather than across scalar loop iterations.
      
      E.g. on a Cortex-A57, pr99873_3.c performs better using ST4 while
      pr99873_2.c performs better with SLP.
      
      Another factor is that SLP can handle smaller iteration counts than
      IFN_STORE_LANES can, but we don't have the infrastructure to choose
      reliably based on that.
      
      gcc/
      	PR tree-optimization/99873
      	* tree-vect-slp.c (vect_slp_prefer_store_lanes_p): New function.
      	(vect_build_slp_instance): Don't split store groups that could
      	use IFN_STORE_LANES.
      
      gcc/testsuite/
      	* gcc.dg/vect/slp-21.c: Only expect 2 of the loops to use SLP
      	if IFN_STORE_LANES is available.
      	* gcc.dg/vect/vect-complex-5.c: Expect no loops to use SLP if
      	IFN_STORE_LANES is available.
      	* gcc.target/aarch64/pr99873_1.c: New test.
      	* gcc.target/aarch64/pr99873_2.c: Likewise.
      	* gcc.target/aarch64/pr99873_3.c: Likewise.
      	* gcc.target/aarch64/sve/pr99873_1.c: Likewise.
      	* gcc.target/aarch64/sve/pr99873_2.c: Likewise.
      	* gcc.target/aarch64/sve/pr99873_3.c: Likewise.
      5c5b3197
    • Jakub Jelinek's avatar
      varasm: Fix up constpool alias handling [PR99872] · b51321bc
      Jakub Jelinek authored
      Last year, I have added in r11-2944-g0106300f6c3f7bae5eb1c46dbd45aa07c94e1b15
      (aka PR54201 fix) code to find bitwise duplicates in constant pool and output
      them as aliases instead of duplicating the data.
      
      Unfortunately this broke mingw32 -m32.
      On most targets, ASM_GENERATE_INTERNAL_LABEL with "LC" emits something like
      *.LC123 and the targets don't add user label prefixes, so the aliases
      that we print should be something like
              .set    .LC5, .LC6
      or
              .set    .LC5, .LC6 + 8
      and I wasn't sure if ASM_OUTPUT_DEF can handle the * and therefore I have
      stripped it.
      But, on mingw32 -m32, ASM_GENERATE_INTERNAL_LABEL with "LC" emits
      *LC123 and the target has user label prefixes, which means what I wrote
      results in
      LC6:
              ...
              .set    _LC5, _LC6
      which results in unresolved symbols.  I went through the ASM_OUTPUT_DEF
      definitions of all targets and all of them use assemble_name twice under
      the hood (with various differences on what they print before, in between or
      after those names).  And assemble_name handles the name encoding properly,
      so if we pass it ASM_OUTPUT_DEF (..., "*.LC123", "*.LC456+16") it will
      emit .LC123 and .LC456+16 and if we pass it "*LC789", it will emit
      LC789.
      
      2021-04-07  Jakub Jelinek  <jakub@redhat.com>
      
      	PR target/99872
      	* varasm.c (output_constant_pool_contents): Don't strip name encoding
      	from XSTR (desc->sym, 0) or from label before passing those to
      	ASM_OUTPUT_DEF.
      b51321bc
    • Richard Biener's avatar
      tree-optimization/99954 - fix loop distribution memcpy classification · c01ae2ab
      Richard Biener authored
      This fixes bogus classification of a copy as memcpy.  We cannot use
      plain dependence analysis to decide between memcpy and memmove when
      it computes no dependence.  Instead we have to try harder later which
      the patch does for the gcc.dg/tree-ssa/ldist-24.c testcase by resorting
      to tree-affine to compute the difference between src and dest and
      compare against the copy size.
      
      2021-04-07  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/99954
      	* tree-loop-distribution.c: Include tree-affine.h.
      	(generate_memcpy_builtin): Try using tree-affine to prove
      	non-overlap.
      	(loop_distribution::classify_builtin_ldst): Always classify
      	as PKIND_MEMMOVE.
      
      	* gcc.dg/torture/pr99954.c: New testcase.
      c01ae2ab
    • Richard Biener's avatar
      testsuite/99955 - fix may_alias declaration of vector · 0d6ad10c
      Richard Biener authored
      This fixes the order of the type attributes to preserve may_alias
      for the vector type.
      
      2021-04-07  Richard Biener  <rguenther@suse.de>
      
      	PR testsuite/99955
      	* gcc.c-torture/execute/pr92618.c: Move may_alias attributes
      	last.
      0d6ad10c
    • Richard Biener's avatar
      tree-optimization/99947 - avoid v.safe_push (v[0]) · d11bcbe1
      Richard Biener authored
      This avoids (again) the C++ pitfall of pushing a reference to
      sth being reallocated.
      
      2021-04-07  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/99947
      	* tree-vect-loop.c (vectorizable_induction): Pre-allocate
      	steps vector to avoid pushing elements from the reallocated
      	vector.
      
      	* gcc.dg/torture/pr99947.c: New testcase.
      d11bcbe1
    • Richard Biener's avatar
      Add debug_vn_reference_ops helper · 6eaf7ac6
      Richard Biener authored
      This factors out a helper to dump VN reference operands, sth that
      proves useful in debugging VN issues.
      
      2021-04-07  Richard Biener  <rguenther@suse.de>
      
      	* tree-ssa-sccvn.h (print_vn_reference_ops): Declare.
      	* tree-ssa-pre.c (print_pre_expr): Factor out VN reference operand
      	printing...
      	* tree-ssa-sccvn.c (print_vn_reference_ops): ... into this new
      	function.
      	(debug_vn_reference_ops): New.
      6eaf7ac6
    • Bin Cheng's avatar
      tree-optimization/98736 - use programing order preserved RPO in ldist · e0bdccac
      Bin Cheng authored
      Tree loop distribution uses RPO to build reduced dependence graph,
      it's important that RPO preserves the original programing order.
      Though it usually does so, when distributing loop nest, exit BB can
      be placed before some loop BBs while after loop header.  This patch
      fixes the issue by calling rev_post_order_and_mark_dfs_back_seme.
      
      gcc/ChangeLog:
      
      	PR tree-optimization/98736
      	* tree-loop-distribution.c
      	* (loop_distribution::bb_top_order_init):
      	Compute RPO with programing order preserved by calling function
      	rev_post_order_and_mark_dfs_back_seme.
      
      gcc/testsuite/ChangeLog:
      
      	PR tree-optimization/98736
      	* gcc.c-torture/execute/pr98736.c: New test.
      e0bdccac
    • Marek Polacek's avatar
      c++: Add test for Core issue 1376 [PR52202] · a7698c0e
      Marek Polacek authored
      As Jens says in the PR, we handle this correctly.
      
      gcc/testsuite/ChangeLog:
      
      	PR c++/52202
      	* g++.dg/cpp0x/rv-life.C: New test.
      a7698c0e
    • GCC Administrator's avatar
      Daily bump. · 8cac6af6
      GCC Administrator authored
      8cac6af6
  3. Apr 06, 2021
    • Joseph Myers's avatar
      Update gcc de.po. · b29ddf93
      Joseph Myers authored
      	* de.po: Update.
      b29ddf93
    • Joseph Myers's avatar
      Update gcc sv.po. · 2a77cc17
      Joseph Myers authored
      	* sv.po: Update.
      2a77cc17
    • Jason Merrill's avatar
      c++: access checking in aggregate initialization [PR96673] · de03b82f
      Jason Merrill authored
      We were deferring access checks while parsing B<int>{}, didn't adjust that
      when we went to instantiate the default member initializer for B::c,
      deferred access checking for C::C, and then checked it after parsing
      B<int>{}, back in the main() context which has no access.  We need to do the
      access checks in the class context of the DMI.
      
      I tried fixing this in push_to/pop_from_top_level, but that caused several
      regressions.
      
      gcc/cp/ChangeLog:
      
      	PR c++/96673
      	* init.c (get_nsdmi): Don't defer access checking.
      
      gcc/testsuite/ChangeLog:
      
      	PR c++/96673
      	* g++.dg/cpp1y/nsdmi-aggr13.C: New test.
      de03b82f
Loading