1. 02 Mar, 2020 23 commits
    • coroutines: Update lambda capture handling to n4849. · cd14f288
      In the absence of specific comment on the handling of closures I'd
      implemented something more than was intended (extending the lifetime
      of lambda capture-by-copy vars to the duration of the coro).
      
      After discussion at WG21 in February and by email, the correct handling
      is to treat the closure "this" pointer the same way as for a regular one,
      and thus it is the user's responsibility to ensure that the lambda capture
      object has suitable lifetime for the coroutine.  It is noted that users
      frequently get this wrong, so it would be a good thing to revisit for C++23.
      
      This patch removes the additional copying behaviour for lambda capture-by-
      copy vars.
      
      gcc/cp/ChangeLog:
      
      2020-03-02  Iain Sandoe  <iain@sandoe.co.uk>
      
      	* coroutines.cc (struct local_var_info): Adjust to remove the
      	reference to the captured var, and just to note that this is a
      	lambda capture proxy.
      	(transform_local_var_uses): Handle lambda captures specially.
      	(struct param_frame_data): Add a visited set.
      	(register_param_uses): Also check for param uses in lambda
      	capture proxies.
      	(struct local_vars_frame_data): Remove captures list.
      	(register_local_var_uses): Handle lambda capture proxies by
      	noting and bypassing them.
      	(morph_fn_to_coro): Update to remove lifetime extension of
      	lambda capture-by-copy vars.
      
      gcc/testsuite/ChangeLog:
      
      2020-03-02  Iain Sandoe  <iain@sandoe.co.uk>
      	    Jun Ma <JunMa@linux.alibaba.com>
      
      	* g++.dg/coroutines/torture/class-05-lambda-capture-copy-local.C:
      	* g++.dg/coroutines/torture/lambda-09-init-captures.C: New test.
      	* g++.dg/coroutines/torture/lambda-10-mutable.C: New test.
      Iain Sandoe committed
    • i386: Allow only registers with VALID_INT_MODE_P modes in movstrict<mode> [PR93997] · b80cbe2d
      *movstrict<mode>_1 insn pattern allows only general registers,
      so we have to reject modes not suitable for general regs in
      corresponding movstrict<mode> expander.
      
      	PR target/93997
      	* config/i386/i386.md (movstrict<mode>): Allow only
      	registers with VALID_INT_MODE_P modes.
      
      testsuite/ChangeLog:
      
      	PR target/93997
      	* gcc.target/i386/pr93997.c: New test.
      Uros Bizjak committed
    • Add new test for PR tree-optimization/92982. · f26688fb
      gcc/testsuite/ChangeLog:
      	PR tree-optimization/92982
      	* gcc.dg/strlenopt-94.c: New test.
      Martin Sebor committed
    • c++: Add -std=gnu++20 option [PR93958] · e78e50d5
      One missing bit from r10-6656.  The docs and target-supports.exp
      already handle -std=gnu++20.
      
      2020-03-02  Marek Polacek  <polacek@redhat.com>
      
      	PR c++/93958 - add missing -std=gnu++20.
      	* c.opt: Add -std=gnu++20.
      Marek Polacek committed
    • Ensure sufficient size of variables used for module+submodule names. · f3c276ae
              PR fortran/93486
              * module.c: Increase size of variables used to read module names
              when loading interfaces from module files to permit cases where
              the name is the concatenation of a module and submodule name.
              * gfortran.dg/pr93486.f90: New test.
      Andrew Benson committed
    • libstdc++: Fix std::lexicographic_compare for unsigned char (PR 93972) · d112e173
      The new 25_algorithms/lexicographical_compare/93972.cc test fails on
      targets where char is unsigned, revealing an existing regression with
      the std::__memcmp helper that had gone unnoticed in
      std::lexicographical_compare. When comparing char and unsigned char, the
      memcmp optimisation is enabled, but the new std::__memcmp function fails
      to compile for mismatched types.
      
      	PR libstdc++/93972
      	* include/bits/stl_algobase.h (__memcmp): Allow pointer types to
      	differ.
      	* testsuite/25_algorithms/lexicographical_compare/uchar.cc: New test.
      Jonathan Wakely committed
    • libstdc++: Rename __detail::__maybe_empty_t alias template · 4c391563
      The key property of this alias is not that it may be an empty type, but
      that the type argument may not be used. The fact it's replaced by an
      empty type is just an implementation detail.  The name was also
      backwards with respect to the bool argument.
      
      This patch changes the name to better reflect its purpose.
      
      	* include/std/ranges (__detail::__maybe_empty_t): Rename to
      	__maybe_present_t.
      	(__adaptor::_RangeAdaptor, join_view, split_view): Use new name.
      Jonathan Wakely committed
    • coroutines: Don't make duplicate frame copies of awaitables. · 005530eb
      In general, we need to manage the lifetime of compiler-
      generated awaitable instances in the coroutine frame, since
      these must persist across suspension points.
      
      However, it is quite possible that the user might provide the
      awaitable instances, either as function params or as a local
      variable.  We will already generate a frame entry for these as
      required.
      
      At present, under this circumstance, we are duplicating these,
      awaitable, initialising a second frame copy for them (which we
      then subsequently destroy manually after the suspension point).
      That's not efficient - so an undesirable thinko in the first place.
      However, there is also an actual bug; if the compiler elects to
      elide the copy (which is perfectly legal), it does not have visibility
      of the manual management of the post-suspend destruction
      - this subsequently leads to double-free errors.
      
      The solution is not to make the second copy (as noted, params
      and local vars already have frame copies with managed lifetimes).
      
      gcc/cp/ChangeLog:
      
      2020-03-02  Iain Sandoe  <iain@sandoe.co.uk>
      
      	* coroutines.cc (build_co_await): Do not build frame
      	proxy vars when the co_await expression is a function
      	parameter or local var.
      	(co_await_expander): Do not initialise a frame var with
      	itself.
      	(transform_await_expr): Only substitute the awaitable
      	frame var if it's needed.
      	(register_awaits): Do not make frame copies for param
      	or local vars that are awaitables.
      
      gcc/testsuite/ChangeLog:
      
      2020-03-02  Iain Sandoe  <iain@sandoe.co.uk>
      
      	* g++.dg/coroutines/torture/func-params-09-awaitable-parms.C: New test.
      	* g++.dg/coroutines/torture/local-var-5-awaitable.C: New test.
      Iain Sandoe committed
    • amdgcn: Extend reductions to all types · a5879399
      Add support for V64DFmode addition, and V64DImode min, max.  There's no
      direct hardware support for these, so we use regular vector instructions
      and separate lane shift instructions.
      
      Also add support for V64QI and V64HI reductions. Some of these require
      additional extends and truncates, because AMD GCN has 32-bit vector lanes.
      
      2020-03-02  Andrew Stubbs  <ams@codesourcery.com>
      
      	gcc/
      	* config/gcn/gcn-valu.md (dpp_move<mode>): New.
      	(reduc_insn): Use 'U' and 'B' operand codes.
      	(reduc_<reduc_op>_scal_<mode>): Allow all types.
      	(reduc_<reduc_op>_scal_v64di): Delete.
      	(*<reduc_op>_dpp_shr_<mode>): Allow all 1reg types.
      	(*plus_carry_dpp_shr_v64si): Change to ...
      	(*plus_carry_dpp_shr_<mode>): ... this and allow all 1reg int types.
      	(mov_from_lane63_v64di): Change to ...
      	(mov_from_lane63_<mode>): ... this, and allow all 64-bit modes.
      	* config/gcn/gcn.c (gcn_expand_dpp_shr_insn): Increase buffer size.
      	Support UNSPEC_MOV_DPP_SHR output formats.
      	(gcn_expand_reduc_scalar): Add "use_moves" reductions.
      	Add "use_extends" reductions.
      	(print_operand_address): Add 'I' and 'U' codes.
      	* config/gcn/gcn.md (unspec): Add UNSPEC_MOV_DPP_SHR.
      Andrew Stubbs committed
    • Fix testsuite regression due to recent IRA changes. · 0ce38183
      	* gcc.target/arm/fuse-caller-save.c: Update expected output.
      Jeff Law committed
    • Fix changelog typo · ac3148a3
      Segher Boessenkool committed
    • libstdc++: Add 'typename' to fix compilation with Clang · 5fad0003
      	* include/bits/ranges_algo.h (shift_right): Add 'typename' to
      	dependent type.
      Jonathan Wakely committed
    • Update comment to reflect optimization. · c9d92a57
      	* gcc.dg/vect/bb-slp-19.c: The comment
      	does not align with fact that we started
      	to SLP the testcase.
      Martin Liska committed
    • Remove duplicate declaration. · 8dd5d8f3
      	* libgcov-interface.c: Remove duplicate
      	declaration of __gcov_flush_mx.
      Martin Liska committed
    • Fix a libiberty testsuite failure · 3bb6abbf
      	* testsuite/demangle-expected: Update expected demangling of
      	enable_if pattern.
      Nick Clifton committed
    • lto: Also copy .note.gnu.property section · 57735060
      When generating the separate file with LTO debug sections, we should
      also copy .note.gnu.property section.
      
      	PR lto/93966
      	* simple-object.c (handle_lto_debug_sections): Also copy
      	.note.gnu.property section.
      H.J. Lu committed
    • Fix typo in C++ standard version. · 917e56a9
      	* lto-wrapper.c: Fix typo in comment about
      	C++ standard version.
      Martin Liska committed
    • [testsuites] Update several scev/IVOPTs cases · 778a7735
      Several scev/IVOPTs cases aim to check some array references are sceved and
      later marked as REFERENCE ADDRESS IV groups. With IV group type dumping
      improving, these check strings can be improved. Otherwise, they become fragile
      with dumping changes.
      
      This patch is to keep check strings concise, meanwhile recover the coverage of
      case scev-8.c.
      
      gcc/testsuite/ChangeLog
      
      2020-03-02  Kewen Lin  <linkw@gcc.gnu.org>
      
        * gcc.dg/tree-ssa/scev-8.c: Revise check string.
        * gcc.dg/tree-ssa/scev-9.c: Ditto.
        * gcc.dg/tree-ssa/scev-10.c: Ditto.
        * gcc.dg/tree-ssa/scev-11.c: Ditto.
        * gcc.dg/tree-ssa/scev-12.c: Ditto.
      Kewen Lin committed
    • PR middle-end/92721 - checking ICE on attribute access redeclaration · 649e1741
      gcc/c-family/ChangeLog:
      
      	PR c++/92721
      	* c-attribs.c (append_access_attrs): Correctly handle attribute.
      	(handle_access_attribute): Same.
      
      gcc/ChangeLog:
      
      	PR c++/92721
      	* calls.c (init_attr_rdwr_indices): Correctly handle attribute.
      
      gcc/testsuite/ChangeLog:
      
      	PR c++/92721
      	g++.dg/ext/attr-access.C: New test.
      Martin Sebor committed
    • PR middle-end/93926 - ICE on a built-in redeclaration returning an integer instead of a pointer · 726e292d
      gcc/c/ChangeLog:
      
      	PR middle-end/93926
      	* c-decl.c (types_close_enough_to_match): New function.
      	(match_builtin_function_types):
      	(diagnose_mismatched_decls): Add missing inform call to a warning.
      
      gcc/testsuite/ChangeLog:
      
      	PR middle-end/93926
      	* gcc.dg/Wbuiltin-declaration-mismatch-13.c: New test.
      Martin Sebor committed
    • PR c/93812 - ICE on redeclaration of an attribute format function without protoype · a499c2f8
      gcc/c/ChangeLog:
      
      	PR c/93812
      	* c-typeck.c (build_functype_attribute_variant): New function.
      	(composite_type): Call it.
      
      gcc/testsuite/ChangeLog:
      
      	PR c/93812
      	* gcc.dg/format/proto.c: New test.
      Martin Sebor committed
    • PR middle-end/93829 - bogus -Wstringop-overflow on memcpy of a struct with a… · 1e9369c5
      PR middle-end/93829 - bogus -Wstringop-overflow on memcpy of a struct with a pointer member from another with a long string
      
      gcc/testsuite/ChangeLog:
      
      	PR middle-end/93829
      	* gcc.dg/Wstringop-overflow-32.c: New test.
      
      gcc/ChangeLog:
      
      	PR middle-end/93829
      	* tree-ssa-strlen.c (count_nonzero_bytes): Set the size to that
      	  of a pointer in the outermost ADDR_EXPRs.
      Martin Sebor committed
    • Daily bump. · 750d061d
      GCC Administrator committed
  2. 01 Mar, 2020 10 commits
  3. 29 Feb, 2020 7 commits