1. 24 Apr, 2020 4 commits
  2. 23 Apr, 2020 31 commits
    • libstdc++: Fix constructor constraints for std::any (PR 90415) · d1462b07
      This removes a non-standard extension to std::any which causes errors
      for valid code, due to recursive instantiation of a trait that isn't
      supposed to be in the constraints.
      
      It also removes some incorrect constraints on the in_place_type<T>
      constructors and emplace members, which were preventing creating a
      std::any object with another std::any as the contained value.
      
      2020-04-24  Kamlesh Kumar  <kamleshbhalui@gmail.com>
      	    Jonathan Wakely  <jwakely@redhat.com>
      
      	PR libstdc++/90415
      	PR libstdc++/92156
      	* include/std/any (any): Rename template parameters for consistency
      	with the standard.
      	(any::_Decay): Rename to _Decay_if_not_any.
      	(any::any(T&&):: Remove is_constructible from constraints. Remove
      	non-standard overload.
      	(any::any(in_place_type_t<T>, Args&&...))
      	(any::any(in_place_type_t<T>, initializer_list<U>, Args&&...))
      	(any::emplace(Args&&...))
      	(any::emplace(initializer_list<U>, Args&&...)):
      	Use decay_t instead of _Decay.
      	* testsuite/20_util/any/cons/90415.cc: New test.
      	* testsuite/20_util/any/cons/92156.cc: New Test.
      	* testsuite/20_util/any/misc/any_cast_neg.cc: Make dg-error directives
      	more robust.
      	* testsuite/20_util/any/modifiers/92156.cc: New test.
      Jonathan Wakely committed
    • PR driver/90983 - manual documents `-Wno-stack-usage` flag but it is unrecognized · ae962e57
      gcc/ChangeLog:
      
      	PR driver/90983
      	* common.opt (-Wno-frame-larger-than): New option.
      	(-Wno-larger-than, -Wno-stack-usage): Same.
      
      gcc/testsuite/ChangeLog:
      
      	PR driver/90983
      	* gcc.dg/Wframe-larger-than-3.c: New test.
      	* gcc.dg/Wlarger-than4.c: New test.
      	* gcc.dg/Wstack-usage.c: New test.
      Martin Sebor committed
    • c++: zero_init_expr_p of dependent expression · 9a453da5
      This fixes an ICE coming from mangle.c:write_expression when building the
      testsuite of range-v3; the added testcase is a reduced reproducer for the ICE.
      
      gcc/cp/ChangeLog:
      
      	* tree.c (zero_init_expr_p): Use uses_template_parms instead of
      	dependent_type_p.
      
      gcc/testsuite/ChangeLog:
      
      	* g++.dg/cpp0x/dependent3.C: New test.
      Patrick Palka committed
    • c++: Lambda in friend of constrained class [PR94645] · f9f16625
      In the testcase below, when grokfndecl processes the operator() decl for the
      lambda inside the friend function foo, processing_template_decl is rightly 1,
      but template_class_depth on the lambda's closure type incorrectly returns 0
      instead of 1.
      
      Since processing_template_decl > template_class_depth, this makes grokfndecl
      think that the operator() has its own set of template arguments, and so we
      attach the innermost set of constraints -- those belonging to struct l -- to the
      operator() decl.  We then get confused when checking constraints_satisfied_p on
      the operator() because it doesn't have template information and yet has
      constraints associated with it.
      
      This patch fixes template_class_depth to return the correct template nesting
      level in cases like these, in that when it hits a friend function it walks into
      the DECL_FRIEND_CONTEXT of the friend rather than into the CP_DECL_CONTEXT.
      
      gcc/cp/ChangeLog:
      
      	PR c++/94645
      	* pt.c (template_class_depth): Walk into the DECL_FRIEND_CONTEXT of a
      	friend declaration rather than into its CP_DECL_CONTEXT.
      
      gcc/testsuite/ChangeLog:
      
      	PR c++/94645
      	* g++.dg/cpp2a/concepts-lambda6.C: New test.
      Patrick Palka committed
    • amdgcn: Swap mov<mode>_exec operands · b7886845
      Every other *_exec insn has the exec operand last.  This being the other way
      around is a cause of bugs, and prevents use in macro templates.
      
      2020-04-23  Andrew Stubbs  <ams@codesourcery.com>
      
      	gcc/
      	* config/gcn/gcn-valu.md (mov<mode>_exec): Swap the numbers on operands
      	2 and 3.
      	(mov<mode>_exec): Likewise.
      	(trunc<vndi><mode>2_exec): Swap parameters to gen_mov<mode>_exec.
      	(<convop><mode><vndi>2_exec): Likewise.
      Andrew Stubbs committed
    • libstdc++: Mark experimental::net::system_context ctor deleted · 8c9d69ba
                 * include/experimental/net/executor (system_context): Mark
                 system_context::system_context() = delete.
                 * testsuite/experimental/net/executor/1.cc: Add new
                 test to check system_context is not default constructible.
      Thomas Rodgers committed
    • libstdc++: Update C++20 library status docs · be0363c8
      This reorganises the C++20 status table, grouping the proposals by
      category. It also adds more proposals, and documents all the feature
      test macros for C++20 library changes.
      
      	* doc/xml/manual/status_cxx2020.xml: Update C++20 status table.
      	* doc/html/*: Regenerate.
      Jonathan Wakely committed
    • libstdc++: Change __cpp_lib_array_constexpr for C++17 again · 40541efe
      This partially reverts my previous change related to this macro. The
      C++20 constexpr iterator requirements are always met by array:iterator,
      because it's just a pointer. So the macro can be set to 201803 even in
      C++17 mode.
      
      	* include/bits/stl_iterator.h (__cpp_lib_array_constexpr): Revert
      	value for C++17 to 201803L because P0858R0 is supported for C++17.
      	* include/std/version (__cpp_lib_array_constexpr): Likewise.
      	* testsuite/23_containers/array/element_access/constexpr_c++17.cc:
      	Check for value corresponding to P0031R0 features being tested.
      	* testsuite/23_containers/array/requirements/constexpr_iter.cc:
      	Check for value corresponding to P0858R0 features being tested.
      Jonathan Wakely committed
    • libstdc++: Define __cpp_lib_three_way_comparison for freestanding · a2dcb56c
      The <compare> header is always supported, not only for hosted configs.
      
      	* include/std/version (__cpp_lib_three_way_comparison): Define for
      	freestanding builds.
      Jonathan Wakely committed
    • Fix segfault with -O2 -fnon-call-exceptions -ftracer · cb76fcd7
      The GIMPLE SSA store merging pass blows up when it is rewriting the
      stores because it didn't realize that they don't belong to the same
      EH region.  Fixed by refusing to merge them.
      
      	PR tree-optimization/94717
      	* gimple-ssa-store-merging.c (try_coalesce_bswap): Return false if
      	one of the stores doesn't have the same landing pad number as the
      	first.
      	(coalesce_immediate_stores): Do not try to coalesce the store using
      	bswap if it doesn't have the same landing pad number as the first.
      Eric Botcazou committed
    • rs6000: Replace outdated link to ELFv2 ABI · 431ee358
      A user reported that we are still referring to a public review
      draft of the ELFv2 ABI specification.  Replace that by a permalink.
      
      2020-04-24  Bill Schmidt  <wschmidt@linux.ibm.com>
      
      	* gcc/doc/extend.texi (PowerPC AltiVec/VSX Built-in Functions):
      	Replace outdated link to ELFv2 ABI.
      Bill Schmidt committed
    • Shortcut identity VEC_PERM expansion [PR94710] · f51be2fb
      This PR is about the rs6000 backend emitting wrong assembly
      for whole vector shift by 0, and while I think it is desirable
      to fix the backend, I don't see a point why the expander should
      try to emit that, whole vector shift by 0 is identity, we can just
      return the operand.
      
      2020-04-23  Jakub Jelinek  <jakub@redhat.com>
      
      	PR target/94710
      	* optabs.c (expand_vec_perm_const): For shift_amt const0_rtx
      	just return v2.
      Jakub Jelinek committed
    • coroutines: Fix handling of conditional statements [PR94288] · 3dbc7721
      Normally, when we find a statement containing an await expression
      this will be expanded to a statement list implementing the control
      flow implied.  The expansion process successively replaces each
      await expression in a statement with the result of its await_resume().
      
      In the case of conditional statements (if, while, do, switch) the
      expansion of the condition (or expression in the case of do-while)
      cannot take place 'inline', leading to the PR.
      
      The solution is to evaluate the expression separately, and to
      transform while and do-while loops into endless loops with a break
      on the required condition.
      
      In fixing this, I realised that I'd also made a thinko in the case
      of expanding truth-and/or-if expressions, where one arm of the
      expression might need to be short-circuited.  The mechanism for
      expanding via the tree walk will not work correctly in this case and
      we need to pre-expand any truth-and/or-if with an await expression
      on its conditionally-taken arm.  This applies to any statement with
      truth-and/or-if expressions, so can be handled generically.
      
      gcc/cp/ChangeLog:
      
      2020-04-23  Iain Sandoe  <iain@sandoe.co.uk>
      
      	PR c++/94288
      	* coroutines.cc (await_statement_expander): Simplify cases.
      	(struct susp_frame_data): Add fields for truth and/or if
      	cases, rename one field.
      	(analyze_expression_awaits): New.
      	(expand_one_truth_if): New.
      	(add_var_to_bind): New helper.
      	(coro_build_add_if_not_cond_break): New helper.
      	(await_statement_walker): Handle conditional expressions,
      	handle expansion of truth-and/or-if cases.
      	(bind_expr_find_in_subtree): New, checking-only.
      	(coro_body_contains_bind_expr_p): New, checking-only.
      	(morph_fn_to_coro): Ensure that we have a top level bind
      	expression.
      
      gcc/testsuite/ChangeLog:
      
      2020-04-23  Iain Sandoe  <iain@sandoe.co.uk>
      
      	PR c++/94288
      	* g++.dg/coroutines/torture/co-await-18-if-cond.C: New test.
      	* g++.dg/coroutines/torture/co-await-19-while-cond.C: New test.
      	* g++.dg/coroutines/torture/co-await-20-do-while-cond.C: New test.
      	* g++.dg/coroutines/torture/co-await-21-switch-value.C: New test.
      	* g++.dg/coroutines/torture/co-await-22-truth-and-of-if.C: New test.
      	* g++.dg/coroutines/torture/co-ret-16-simple-control-flow.C: New test.
      Iain Sandoe committed
    • c-family: Fix ICE on attribute with -fgnu-tm [PR94733] · 7291b2ed
      find_tm_attribute was using TREE_PURPOSE to get the attribute name,
      which is breaking now that we preserve the C++11-style attribute
      format past decl_attributes.  So use get_attribute_name which can
      handle both formats of attributes.
      
      	PR c++/94733
      	* c-attribs.c (find_tm_attribute): Use get_attribute_name instead of
      	TREE_PURPOSE.
      
      	* g++.dg/tm/attrib-5.C: New test.
      Marek Polacek committed
    • tree: Fix up get_narrower [PR94724] · bca558de
      In the recent get_narrower change, I wanted it to be efficient and avoid
      recursion if there are many nested COMPOUND_EXPRs.  That builds the
      COMPOUND_EXPR nest with the right arguments, but as build2_loc computes some
      flags like TREE_SIDE_EFFECTS, TREE_CONSTANT and TREE_READONLY, when it
      is called with something that will not be the argument in the end, those
      flags are computed incorrectly.
      So, this patch instead uses an auto_vec and builds them in the reverse order
      so when they are built, they are built with the correct operands.
      
      2020-04-23  Jakub Jelinek  <jakub@redhat.com>
      
      	PR middle-end/94724
      	* tree.c (get_narrower): Instead of creating COMPOUND_EXPRs
      	temporarily with non-final second operand and updating it later,
      	push COMPOUND_EXPRs into a vector and process it in reverse,
      	creating COMPOUND_EXPRs with the final operands.
      
      	* gcc.c-torture/execute/pr94724.c: New test.
      Jakub Jelinek committed
    • Fix PR 93956, wrong pointer when returned via function. · 06eca1ac
      This one took a bit of detective work.  When array pointers point
      to components of derived types, we currently set the span field
      and then create an array temporary when we pass the array
      pointer to a procedure as a non-pointer or non-target argument.
      (This is inefficient, but that's for another release).
      
      Now, the compiler detected this case when there was a direct assignment
      like p => a%b, but not when p was returned either as a function result
      or via an argument.  This patch fixes that.
      
      2020-04-23  Thomas Koenig  <tkoenig@gcc.gnu.org>
      
      	PR fortran/93956
      	* expr.c (gfc_check_pointer_assign): Also set subref_array_pointer
      	when a function returns a pointer.
      	* interface.c (gfc_set_subref_array_pointer_arg): New function.
      	(gfc_procedure_use): Call it.
      
      2020-04-23  Thomas Koenig  <tkoenig@gcc.gnu.org>
      
      	PR fortran/93956
      	* gfortran.dg/pointer_assign_13.f90: New test.
      Thomas König committed
    • coroutines, libstdc++-v3: Update to n4861 C++20 DIS. · dcf69ac5
      Update the inline namespace to __n4861.
      Add '__cpp_lib_coroutine' defined to 201902L per n4861.
      
      libstdc++-v3/ChangeLog:
      
      2020-04-23  Iain Sandoe  <iain@sandoe.co.uk>
      
      	* include/std/coroutine: Update the inline namespace to __n4861.
      	Add the __cpp_lib_coroutine define, set to 201902L.
      	* include/std/version: Add __cpp_lib_coroutine, set to 201902L.
      
      gcc/testsuite/ChangeLog:
      
      2020-04-23  Iain Sandoe  <iain@sandoe.co.uk>
      
      	* g++.dg/coroutines/coro-bad-alloc-00-bad-op-new.C: Adjust for
      	changed inline namespace.
      	* g++.dg/coroutines/coro-bad-alloc-01-bad-op-del.C: Likewise.
      	* g++.dg/coroutines/coro-bad-alloc-02-no-op-new-nt.C: Likewise
      	* g++.dg/coroutines/coro.h: Likewise
      Iain Sandoe committed
    • aarch64: ensure bti c is emitted at function start [PR94697] · f7e4641a
      The bti pass currently first emits bti c at function start
      if there is no paciasp (which also acts as indirect call
      landing pad), then bti j is emitted at jump labels, however
      if there is a label right before paciasp then the function
      start can end up like
      
        foo:
        label:
          bti j
          paciasp
          ...
      
      This patch is a minimal fix that just moves the bti c handling
      after the bti j handling so we end up with
      
        foo:
          bti c
        label:
          bti j
          paciasp
          ...
      
      This could be improved by emitting bti jc in this case, or by
      detecting that the label is not in fact an indirect jump target
      and then this situation would be much less common.
      
      Needs to be backported to gcc-9 branch.
      
      gcc/ChangeLog:
      
      	PR target/94697
      	* config/aarch64/aarch64-bti-insert.c (rest_of_insert_bti): Swap
      	bti c and bti j handling.
      
      gcc/testsuite/ChangeLog:
      
      	PR target/94697
      	* gcc.target/aarch64/pr94697.c: New test.
      Szabolcs Nagy committed
    • testsuite: Add extra aarch64 predefine tests · 857d1fa3
      Add extra testing in the following two tests to make sure CPP predefines
      redefinitions on #pragma works as expected when -mgeneral-regs-only
      option is specified (See PR94678):
      gcc.target/aarch64/pragma_cpp_predefs_2.c
      gcc.target/aarch64/pragma_cpp_predefs_3.c
      
      2020-04-23  Felix Yang  <felix.yang@huawei.com>
      
      gcc/testsuite/
      	PR target/94678
      	* gcc.target/aarch64/pragma_cpp_predefs_2.c: Fix typos, pop_pragma ->
      	pop_options. Add tests for general-regs-only.
      	* gcc.target/aarch64/pragma_cpp_predefs_3.c: Add tests for
      	general-regs-only.
      Fei Yang committed
    • OpenACC: Avoid ICE in type-cast 'async', 'wait' clauses · ee9fcee3
      2020-04-23  Andrew Stubbs  <ams@codesourcery.com>
      	    Thomas Schwinge  <thomas@codesourcery.com>
      
      	PR middle-end/93488
      
      	gcc/
      	* omp-expand.c (expand_omp_target): Use force_gimple_operand_gsi on
      	t_async and the wait arguments.
      
      	gcc/testsuite/
      	* c-c++-common/goacc/pr93488.c: New file.
      
      Reviewed-by: Thomas Schwinge <thomas@codesourcery.com>
      Andrew Stubbs committed
    • vect: Fix comparisons between invariant booleans [PR94727] · 901f5289
      This PR was caused by mismatched expectations between
      vectorizable_comparison and SLP.  We had a "<" comparison
      between two booleans that were leaves of the SLP tree, so
      vectorizable_comparison fell back on:
      
        /* Invariant comparison.  */
        if (!vectype)
          {
            vectype = get_vectype_for_scalar_type (vinfo, TREE_TYPE (rhs1),
                                                   slp_node);
            if (maybe_ne (TYPE_VECTOR_SUBPARTS (vectype), nunits))
              return false;
          }
      
      rhs1 and rhs2 were *unsigned* boolean types, so we got back a vector
      of unsigned integers.  This in itself was OK, and meant that "<"
      worked as expected without the need for the boolean fix-ups:
      
        /* Boolean values may have another representation in vectors
           and therefore we prefer bit operations over comparison for
           them (which also works for scalar masks).  We store opcodes
           to use in bitop1 and bitop2.  Statement is vectorized as
             BITOP2 (rhs1 BITOP1 rhs2) or
             rhs1 BITOP2 (BITOP1 rhs2)
           depending on bitop1 and bitop2 arity.  */
        bool swap_p = false;
        if (VECTOR_BOOLEAN_TYPE_P (vectype))
          {
      
      However, vectorizable_comparison then used vect_get_slp_defs to get
      the actual operands.  The request went to vect_get_constant_vectors,
      which also has logic to calculate the vector type.  The problem was
      that this type was different from the one chosen above:
      
        if (VECT_SCALAR_BOOLEAN_TYPE_P (TREE_TYPE (op))
            && vect_mask_constant_operand_p (stmt_vinfo))
          vector_type = truth_type_for (stmt_vectype);
        else
          vector_type = get_vectype_for_scalar_type (vinfo, TREE_TYPE (op), op_node);
      
      So the function gave back a vector of mask types, which here are vectors
      of *signed* booleans.  This meant that "<" gave:
      
        true (-1) < false (0)
      
      and so the boolean fixup above was needed after all.
      
      Fixed by making vectorizable_comparison also pick a mask type in
      this case.
      
      2020-04-23  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	PR tree-optimization/94727
      	* tree-vect-stmts.c (vectorizable_comparison): Use mask_type when
      	comparing invariant scalar booleans.
      
      gcc/testsuite/
      	PR tree-optimization/94727
      	* gcc.dg/vect/pr94727.c: New test.
      Richard Sandiford committed
    • [AArch64] (PR94383) Avoid C++17 empty base field checking for HVA/HFA · e73a32d6
      In C++17, an empty class deriving from an empty base is not an
      aggregate, while in C++14 it is.  In order to implement this, GCC adds
      an artificial field to such classes.
      
      This artificial field has no mapping to Fundamental Data Types in the
      AArch64 PCS ABI and hence should not count towards determining whether an
      object can be passed using the vector registers as per section
      "6.4.2 Parameter Passing Rules" in the AArch64 PCS.
      https://github.com/ARM-software/abi-aa/blob/master/aapcs64/aapcs64.rst#the-base-procedure-call-standard
      
      This patch avoids counting this artificial field in
      aapcs_vfp_sub_candidate, and hence calculates whether such objects
      should be passed in vector registers in the same manner as C++14 (where
      the artificial field does not exist).
      
      Before this change, the test below would pass the arguments to `f` in
      general registers.  After this change, the test passes the arguments to
      `f` using the vector registers.
      
      The new behaviour matches the behaviour of `armclang`, and also matches
      the behaviour when run with `-std=gnu++14`.
      
      > gcc -std=gnu++17 test.cpp
      
      ``` test.cpp
      struct base {};
      
      struct pair : base
      {
        float first;
        float second;
        pair (float f, float s) : first(f), second(s) {}
      };
      
      void f (pair);
      int main()
      {
        f({3.14, 666});
        return 1;
      }
      ```
      
      We add a `-Wpsabi` warning to catch cases where this fix has changed the ABI for
      some functions.  Unfortunately this warning is not emitted twice for multiple
      calls to the same function, but I feel this is not much of a problem and can be
      fixed later if needs be.
      
      (i.e. if `main` called `f` twice in a row we only emit a diagnostic for the
      first).
      
      Testing:
          Bootstrap and regression test on aarch64-linux.
          All struct-layout-1 tests now pass.
      
      gcc/ChangeLog:
      
      2020-04-23  Matthew Malcomson  <matthew.malcomson@arm.com>
      	    Jakub Jelinek  <jakub@redhat.com>
      
      	PR target/94383
      	* config/aarch64/aarch64.c (aapcs_vfp_sub_candidate): Account for C++17
      	empty base class artificial fields.
      	(aarch64_vfp_is_call_or_return_candidate): Warn when ABI PCS decision is
      	different after this fix.
      Matthew Malcomson committed
    • Protect the trigd functions in libgfortran from unavailable math functions. · e8eecc2a
      libgfortran/ChangeLog:
      
      2020-04-22  Fritz Reese  <foreese@gcc.gnu.org>
      
      	PR libfortran/94694
      	PR libfortran/94586
      	* intrinsics/trigd.c, intrinsics/trigd_lib.inc, intrinsics/trigd.inc:
      	Guard against unavailable math functions.
      	Use suffixes from kinds.h based on the REAL kind.
      
      gcc/fortran/ChangeLog:
      
      2020-04-22  Fritz Reese  <foreese@gcc.gnu.org>
      
      	* trigd_fe.inc: Use mpfr to compute cosd(30) rather than a host-
      	precision floating point literal based on an invalid macro.
      Fritz Reese committed
    • amdgcn: Check HSA return codes [PR94629] · 966de09b
      Ensure that the returned status values are not ignored.  The old code was
      not broken, but this is both safer and satisfies static analysis.
      
      2020-04-23  Andrew Stubbs  <ams@codesourcery.com>
      
      	PR other/94629
      
      	libgomp/
      	* plugin/plugin-gcn.c (init_hsa_context): Check return value from
      	hsa_iterate_agents.
      	(GOMP_OFFLOAD_init_device): Check return values from both calls to
      	hsa_agent_iterate_regions.
      Andrew Stubbs committed
    • aarch64: disable tests on ilp32 [PR94514] · 744b3e44
      branch-protection=pac-ret is only supported with lp64 abi.
      
      gcc/testsuite/ChangeLog:
      
      	PR target/94514
      	* g++.target/aarch64/pr94514.C: Require lp64.
      	* gcc.target/aarch64/pr94514.c: Likewise.
      Szabolcs Nagy committed
    • rs6000: Small improvement to the C++17 ABI fix [PR94707] · 239cfd92
      Anyway, based on IRC discussion with Richard Sandiford on IRC, we should
      probably test type uids instead of type pointers because type uids aren't
      reused, but type pointers in a very bad luck case could be, and having the
      static var at filescope and GTY((deletable)) is an overkill (and with costs
      during GC time).
      
      2020-04-23  Jakub Jelinek  <jakub@redhat.com>
      
      	PR target/94707
      	* config/rs6000/rs6000-call.c (rs6000_discover_homogeneous_aggregate):
      	Use TYPE_UID (TYPE_MAIN_VARIANT (type)) instead of type to check
      	if the same type has been diagnosed most recently already.
      Jakub Jelinek committed
    • Modify the MVE polymorphic variant arguments to match the MVE intrinsic definition. · c6ffc89f
      When MVE intrinsic's are called, few implicit typecasting are done on the formal arguments to match the intrinsic parameters.
      But when same intrinsics are called through MVE polymorphic variants, _Generic feature used here does strict type checking and fails to match the exact intrinsic.
      This patch corrects the behaviour of polymorphic variants and match the expected intrinsic by explicitly typecasting the polymorphic variant's arguments.
      
      Please refer to M-profile Vector Extension (MVE) intrinsics [1]  for more details.
      [1] https://developer.arm.com/architectures/instruction-sets/simd-isas/helium/mve-intrinsics
      
      Regression tested on arm-none-eabi and found no regressions.
      
      Ok for trunk?
      
      Thanks,
      Srinath.
      
      gcc/ChangeLog:
      
      2020-04-23  Srinath Parvathaneni  <srinath.parvathaneni@arm.com>
      
      	* config/arm/arm_mve.h (__arm_vbicq_n_u16): Modify function parameter's
      	datatype.
      	(__arm_vbicq_n_s16): Likewise.
      	(__arm_vbicq_n_u32): Likewise.
      	(__arm_vbicq_n_s32): Likewise.
      	(__arm_vbicq): Likewise.
      	(__arm_vbicq_n_s16): Modify MVE polymorphic variant argument's datatype.
      	(__arm_vbicq_n_s32): Likewise.
      	(__arm_vbicq_n_u16): Likewise.
      	(__arm_vbicq_n_u32): Likewise.
      	(__arm_vdupq_m_n_s8): Likewise.
      	(__arm_vdupq_m_n_s16): Likewise.
      	(__arm_vdupq_m_n_s32): Likewise.
      	(__arm_vdupq_m_n_u8): Likewise.
      	(__arm_vdupq_m_n_u16): Likewise.
      	(__arm_vdupq_m_n_u32): Likewise.
      	(__arm_vdupq_m_n_f16): Likewise.
      	(__arm_vdupq_m_n_f32): Likewise.
      	(__arm_vldrhq_gather_offset_s16): Likewise.
      	(__arm_vldrhq_gather_offset_s32): Likewise.
      	(__arm_vldrhq_gather_offset_u16): Likewise.
      	(__arm_vldrhq_gather_offset_u32): Likewise.
      	(__arm_vldrhq_gather_offset_f16): Likewise.
      	(__arm_vldrhq_gather_offset_z_s16): Likewise.
      	(__arm_vldrhq_gather_offset_z_s32): Likewise.
      	(__arm_vldrhq_gather_offset_z_u16): Likewise.
      	(__arm_vldrhq_gather_offset_z_u32): Likewise.
      	(__arm_vldrhq_gather_offset_z_f16): Likewise.
      	(__arm_vldrhq_gather_shifted_offset_s16): Likewise.
      	(__arm_vldrhq_gather_shifted_offset_s32): Likewise.
      	(__arm_vldrhq_gather_shifted_offset_u16): Likewise.
      	(__arm_vldrhq_gather_shifted_offset_u32): Likewise.
      	(__arm_vldrhq_gather_shifted_offset_f16): Likewise.
      	(__arm_vldrhq_gather_shifted_offset_z_s16): Likewise.
      	(__arm_vldrhq_gather_shifted_offset_z_s32): Likewise.
      	(__arm_vldrhq_gather_shifted_offset_z_u16): Likewise.
      	(__arm_vldrhq_gather_shifted_offset_z_u32): Likewise.
      	(__arm_vldrhq_gather_shifted_offset_z_f16): Likewise.
      	(__arm_vldrwq_gather_offset_s32): Likewise.
      	(__arm_vldrwq_gather_offset_u32): Likewise.
      	(__arm_vldrwq_gather_offset_f32): Likewise.
      	(__arm_vldrwq_gather_offset_z_s32): Likewise.
      	(__arm_vldrwq_gather_offset_z_u32): Likewise.
      	(__arm_vldrwq_gather_offset_z_f32): Likewise.
      	(__arm_vldrwq_gather_shifted_offset_s32): Likewise.
      	(__arm_vldrwq_gather_shifted_offset_u32): Likewise.
      	(__arm_vldrwq_gather_shifted_offset_f32): Likewise.
      	(__arm_vldrwq_gather_shifted_offset_z_s32): Likewise.
      	(__arm_vldrwq_gather_shifted_offset_z_u32): Likewise.
      	(__arm_vldrwq_gather_shifted_offset_z_f32): Likewise.
      	(__arm_vdwdupq_x_n_u8): Likewise.
      	(__arm_vdwdupq_x_n_u16): Likewise.
      	(__arm_vdwdupq_x_n_u32): Likewise.
      	(__arm_viwdupq_x_n_u8): Likewise.
      	(__arm_viwdupq_x_n_u16): Likewise.
      	(__arm_viwdupq_x_n_u32): Likewise.
      	(__arm_vidupq_x_n_u8): Likewise.
      	(__arm_vddupq_x_n_u8): Likewise.
      	(__arm_vidupq_x_n_u16): Likewise.
      	(__arm_vddupq_x_n_u16): Likewise.
      	(__arm_vidupq_x_n_u32): Likewise.
      	(__arm_vddupq_x_n_u32): Likewise.
      	(__arm_vldrdq_gather_offset_s64): Likewise.
      	(__arm_vldrdq_gather_offset_u64): Likewise.
      	(__arm_vldrdq_gather_offset_z_s64): Likewise.
      	(__arm_vldrdq_gather_offset_z_u64): Likewise.
      	(__arm_vldrdq_gather_shifted_offset_s64): Likewise.
      	(__arm_vldrdq_gather_shifted_offset_u64): Likewise.
      	(__arm_vldrdq_gather_shifted_offset_z_s64): Likewise.
      	(__arm_vldrdq_gather_shifted_offset_z_u64): Likewise.
      	(__arm_vidupq_m_n_u8): Likewise.
      	(__arm_vidupq_m_n_u16): Likewise.
      	(__arm_vidupq_m_n_u32): Likewise.
      	(__arm_vddupq_m_n_u8): Likewise.
      	(__arm_vddupq_m_n_u16): Likewise.
      	(__arm_vddupq_m_n_u32): Likewise.
      	(__arm_vidupq_n_u16): Likewise.
      	(__arm_vidupq_n_u32): Likewise.
      	(__arm_vidupq_n_u8): Likewise.
      	(__arm_vddupq_n_u16): Likewise.
      	(__arm_vddupq_n_u32): Likewise.
      	(__arm_vddupq_n_u8): Likewise.
      
      gcc/testsuite/ChangeLog:
      
      2020-04-23  Srinath Parvathaneni  <srinath.parvathaneni@arm.com>
      
      	* gcc.target/arm/mve/intrinsics/mve_vddupq_m_n_u16.c: New test.
      	* gcc.target/arm/mve/intrinsics/mve_vddupq_m_n_u32.c: Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vddupq_m_n_u8.c: Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vddupq_n_u16.c: Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vddupq_n_u32.c: Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vddupq_n_u8.c: Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vddupq_x_n_u16.c: Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vddupq_x_n_u32.c: Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vddupq_x_n_u8.c: Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vdwdupq_x_n_u16.c: Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vdwdupq_x_n_u32.c: Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vdwdupq_x_n_u8.c: Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vidupq_m_n_u16.c: Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vidupq_m_n_u32.c: Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vidupq_m_n_u8.c: Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vidupq_n_u16.c: Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vidupq_n_u32.c: Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vidupq_n_u8.c: Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vidupq_x_n_u16.c: Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vidupq_x_n_u32.c: Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vidupq_x_n_u8.c: Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_viwdupq_x_n_u16.c: Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_viwdupq_x_n_u32.c: Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_viwdupq_x_n_u8.c: Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vldrdq_gather_offset_s64.c:
      	Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vldrdq_gather_offset_u64.c:
      	Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vldrdq_gather_offset_z_s64.c:
      	Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vldrdq_gather_offset_z_u64.c:
      	Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vldrdq_gather_shifted_offset_s64.c:
      	Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vldrdq_gather_shifted_offset_u64.c:
      	Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vldrdq_gather_shifted_offset_z_s64.c
      	: Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vldrdq_gather_shifted_offset_z_u64.c
      	: Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vldrhq_gather_offset_f16.c:
      	Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vldrhq_gather_offset_s16.c:
      	Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vldrhq_gather_offset_s32.c:
      	Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vldrhq_gather_offset_u16.c:
      	Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vldrhq_gather_offset_u32.c:
      	Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vldrhq_gather_offset_z_f16.c:
      	Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vldrhq_gather_offset_z_s16.c:
      	Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vldrhq_gather_offset_z_s32.c:
      	Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vldrhq_gather_offset_z_u16.c:
      	Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vldrhq_gather_offset_z_u32.c:
      	Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vldrhq_gather_shifted_offset_f16.c:
      	Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vldrhq_gather_shifted_offset_s16.c:
      	Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vldrhq_gather_shifted_offset_s32.c:
      	Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vldrhq_gather_shifted_offset_u16.c:
      	Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vldrhq_gather_shifted_offset_u32.c:
      	Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vldrhq_gather_shifted_offset_z_f16.c
      	: Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vldrhq_gather_shifted_offset_z_s16.c
      	: Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vldrhq_gather_shifted_offset_z_s32.c
      	: Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vldrhq_gather_shifted_offset_z_u16.c
      	: Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vldrhq_gather_shifted_offset_z_u32.c
      	: Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vldrwq_gather_offset_f32.c:
      	Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vldrwq_gather_offset_s32.c:
      	Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vldrwq_gather_offset_u32.c:
      	Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vldrwq_gather_offset_z_f32.c:
      	Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vldrwq_gather_offset_z_s32.c:
      	Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vldrwq_gather_offset_z_u32.c:
      	Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vldrwq_gather_shifted_offset_f32.c:
      	Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vldrwq_gather_shifted_offset_s32.c:
      	Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vldrwq_gather_shifted_offset_u32.c:
      	Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vldrwq_gather_shifted_offset_z_f32.c
      	: Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vldrwq_gather_shifted_offset_z_s32.c
      	: Likewise.
      	* gcc.target/arm/mve/intrinsics/mve_vldrwq_gather_shifted_offset_z_u32.c
      	: Likewise.
      Srinath Parvathaneni committed
    • doc: Document all D-specific configuration options. · 66c22737
      gcc/ChangeLog:
      
      	* doc/install.texi (D-Specific Options): Document
      	--enable-libphobos-checking and --with-libphobos-druntime-only.
      Iain Buclaw committed
    • rs6000: Fix C++14 vs. C++17 ABI bug on powerpc64le [PR94707] · a39ed81b
      As mentioned in the PR and on IRC, the recently added struct-layout-1.exp
      new tests FAIL on powerpc64le-linux (among other targets).
      FAIL: tmpdir-g++.dg-struct-layout-1/t032 cp_compat_x_tst.o-cp_compat_y_tst.o execute
      FAIL: tmpdir-g++.dg-struct-layout-1/t058 cp_compat_x_tst.o-cp_compat_y_tst.o execute
      FAIL: tmpdir-g++.dg-struct-layout-1/t059 cp_compat_x_tst.o-cp_compat_y_tst.o execute
      in particular.  The problem is that the presence or absence of the C++17
      artificial empty base fields, which have non-zero TYPE_SIZE, but zero
      DECL_SIZE, change the ABI decisions, if it is present (-std=c++17), the type
      might not be considered homogeneous, while if it is absent (-std=c++14), it
      can be.
      
      The following patch fixes that and emits a -Wpsabi inform; perhaps more
      often than it could, because the fact that rs6000_discover_homogeneous_aggregate
      returns true when it didn't in in GCC 7/8/9 with -std=c++17 doesn't still
      mean it will make a different ABI decision, but the warning triggered only
      on the test I've changed (the struct-layout-1.exp tests use -w -Wno-psabi
      already).
      
      2020-04-23  Jakub Jelinek  <jakub@redhat.com>
      
      	PR target/94707
      	* config/rs6000/rs6000-call.c (rs6000_aggregate_candidate): Add
      	cxx17_empty_base_seen argument.  Pass it to recursive calls.
      	Ignore cxx17_empty_base_field_p fields after setting
      	*cxx17_empty_base_seen to true.
      	(rs6000_discover_homogeneous_aggregate): Adjust
      	rs6000_aggregate_candidate caller.  With -Wpsabi, diagnose homogeneous
      	aggregates with C++17 empty base fields.
      
      	* g++.dg/tree-ssa/pr27830.C: Use -Wpsabi -w for -std=c++17 and higher.
      Jakub Jelinek committed
    • attribs: Don't diagnose attribute exclusions during error recovery [PR94705] · e2a71816
      On the following testcase GCC ICEs, because last_decl is error_mark_node,
      and diag_attr_exclusions assumes that if it is not NULL, it must be a decl.
      
      The following patch just doesn't diagnose attribute exclusions if the
      other decl is erroneous (and thus we've already reported errors for it).
      
      2020-04-23  Jakub Jelinek  <jakub@redhat.com>
      
      	PR c/94705
      	* attribs.c (decl_attribute): Don't diagnose attribute exclusions
      	if last_decl is error_mark_node or has such a TREE_TYPE.
      
      	* gcc.dg/pr94705.c: New test.
      Jakub Jelinek committed
    • Daily bump. · 49fc9f36
      GCC Administrator committed
  3. 22 Apr, 2020 5 commits
    • c++: Change -Weffc++ diagnostic to use "declare" (PR 94698) · cf88e25a
      Change the wording again, for the reasons given by Jason in
      https://gcc.gnu.org/pipermail/gcc-patches/2020-April/544362.html
      
      	PR translation/94698
      	* class.c (check_field_decls): Change "define" to "declare" in
      	-Weffc++ diagnostics.
      Jonathan Wakely committed
    • libstdc++: Define __cpp_lib_execution feature test macro · aac39307
      This macro has never been defined by libstdc++, despite supporting the
      parallel algorithms. It should have a different value for C++17 and
      C++20, because P1001R2 should not be supported in C++17, but
      unsequenced_policy is defined for C++17 (see PR p4702).
      
      	* include/std/execution (__cpp_lib_execution): Define to indicate
      	support for P0024R2 and P1001R2.
      	* include/std/version (__cpp_lib_execution): Define.
      	* testsuite/25_algorithms/pstl/feature_test.cc: Only test macro
      	defined by <algorithm>, move other tests to new tests ...
      	* testsuite/25_algorithms/pstl/feature_test-2.cc: New test.
      	* testsuite/25_algorithms/pstl/feature_test-3.cc: New test.
      	* testsuite/25_algorithms/pstl/feature_test-4.cc: New test.
      	* testsuite/25_algorithms/pstl/feature_test-5.cc: New test.
      Jonathan Wakely committed
    • libstdc++: Update (and revert) value of __cpp_lib_array_constexpr · e851aa17
      This macro should have been updated to 201811 when the last C++20
      changes were implemented. However those changes are not enabled for
      C++17 mode, so the macro should only have the new value in C++20 mode.
      
      This change ensures that the macro is defined to 201603 for C++17 and
      201811 for C++20.
      
      	* include/bits/stl_iterator.h (__cpp_lib_array_constexpr): Define
      	different values for C++17 and C++20, to indicate different feature
      	sets. Update value for C++20 to indicate P1032R1 support.
      	* include/std/version (__cpp_lib_array_constexpr): Likewise.
      	* testsuite/23_containers/array/comparison_operators/constexpr.cc:
      	Check feature test macro.
      	* testsuite/23_containers/array/element_access/constexpr_c++17.cc:
      	New test.
      	* testsuite/23_containers/array/requirements/constexpr_fill.cc: Check
      	feature test macro.
      	* testsuite/23_containers/array/requirements/constexpr_iter.cc: Test
      	in C++17 mode and check feature test macro.
      Jonathan Wakely committed
    • libstdc++: Do not define __cpp_lib_constexpr_algorithms in <utility> · 2025db69
      The C++20 draft and SD-6 both say this should only be in <version> and
      <algorithm>, not in <utility>.
      
      	* include/std/utility (__cpp_lib_constexpr_algorithms): Do not define
      	here.
      	* testsuite/20_util/exchange/constexpr.cc: Do not expect macro to be
      	defined by <utility>.
      Jonathan Wakely committed
    • libstdc++: Update __cpp_lib_concepts value · c9313582
      	* include/std/functional (__cpp_lib_concepts): Update macro value to
      	indicate P1964R2 support.
      	* include/std/version (__cpp_lib_concepts): Likewise.
      	* testsuite/std/concepts/1.cc: Adjust expected value.
      	* testsuite/std/concepts/2.cc: Likewise.
      Jonathan Wakely committed