185640 Commits

Author SHA1 Message Date
Jeff Law
f31729d794 * MAINTAINERS: Add myself to DCO section with both email addresses. 2021-06-05 01:35:02 -04:00
Jeff Law
549d7f4310 Fix split conditions in H8/300 port
gcc/

	* config/h8300/addsub.md: Fix split condition in define_insn_and_split
	patterns.
	* config/h8300/bitfield.md: Likewise.
	* config/h8300/combiner.md: Likewise.
	* config/h8300/divmod.md: Likewise.
	* config/h8300/extensions.md: Likewise.
	* config/h8300/jumpcall.md: Likewise.
	* config/h8300/movepush.md: Likewise.
	* config/h8300/multiply.md: Likewise.
	* config/h8300/other.md: Likewise.
	* config/h8300/shiftrotate.md: Likewise.
	* config/h8300/logical.md: Likewise.  Fix split pattern to use
	code iterator that somehow slipped through.
2021-06-05 01:27:02 -04:00
GCC Administrator
600f90cbbb Daily bump. 2021-06-05 00:16:29 +00:00
Jonathan Wakely
621ea10ca0 libstdc++: Implement LWG 3403 for std::ranges::ssize
I already changed the constraints for ranges::ssize to use ranges::size,
this implements the rest of LWG 3403, so that the returned type is the
signed type corresponding to the result of ranges::size.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>

libstdc++-v3/ChangeLog:

	* include/bits/ranges_base.h (_SSize): Return the result of
	ranges::size converted to the wider of make-signed-like-t<S> and
	ptrdiff_t, rather than the ranges different type.
	* testsuite/std/ranges/access/ssize.cc: Adjust expected result
	for an iota_view that uses an integer class type for its
	difference_type.
2021-06-04 21:33:59 +01:00
Jonathan Wakely
3e5f2425f8 libstdc++: Fix helper concept for ranges::data [PR 100824]
We need to decay the result of t.data() before checking if it's a
pointer.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>

libstdc++-v3/ChangeLog:

	PR libstdc++/100824
	* include/bits/ranges_base.h (__member_data): Use __decay_copy.
	* testsuite/std/ranges/access/data.cc: Add testcase from PR.
2021-06-04 21:33:53 +01:00
Tobias Burnus
c7070b31e1 OpenMP: Handle bind clause in tree-nested.c [PR100905]
PR middle-end/100905

gcc/ChangeLog:

	* tree-nested.c (convert_nonlocal_omp_clauses,
	convert_local_omp_clauses): Handle OMP_CLAUSE_BIND.

gcc/testsuite/ChangeLog:

	* gfortran.dg/gomp/loop-3.f90: New test.
2021-06-04 20:52:33 +02:00
Iain Buclaw
df3fbd5957 d: Fix ICE in gimplify_var_or_parm_decl, at gimplify.c:2755 (PR100882)
Constructor calls for temporaries were reusing the TARGET_EXPR_SLOT of a
TARGET_EXPR for an assignment, which later got passed to `build_assign',
which stripped away the outer TARGET_EXPR, leaving a reference to a lone
temporary with no declaration.

This stripping away of the TARGET_EXPR also discarded any cleanups that
may have been assigned to the expression as well.

So now the reuse of TARGET_EXPR_SLOT has been removed, and
`build_assign' now constructs assignments inside the TARGET_EXPR_INITIAL
slot.  This has also been extended to `return_expr', to deal with
possibility of a TARGET_EXPR being returned.

gcc/d/ChangeLog:

	PR d/100882
	* d-codegen.cc (build_assign): Construct initializations inside
	TARGET_EXPR_INITIAL.
	(compound_expr): Remove intermediate expressions that have no
	side-effects.
	(return_expr): Construct returns inside TARGET_EXPR_INITIAL.
	* expr.cc (ExprVisitor::visit (CallExp *)): Remove useless assignment
	to TARGET_EXPR_SLOT.

gcc/testsuite/ChangeLog:

	PR d/100882
	* gdc.dg/pr100882a.d: New test.
	* gdc.dg/pr100882b.d: New test.
	* gdc.dg/pr100882c.d: New test.
	* gdc.dg/torture/pr100882.d: New test.
2021-06-04 20:45:01 +02:00
Patrick Palka
6f8c969149 c++: top-level cv-quals on type of NTTP [PR100893]
Here, we're rejecting the specialization of g<T,F> with T=A, F=&f in
param4.C below due to a spurious constness mismatch between the type of
the template argument &f and the substituted type of the parm F (the
latter has a top-level const).  Note that this mismatch doesn't occur
with object pointers because in that case a call to
perform_qualification_conversions from convert_nontype_argument
implicitly adds a top-level const to the argument (via a cast) to match.

This however seems to be a manifestation of a more general conformance
issue: we're not dropping top-level cv-quals on the substituted
type of an NTTP as per [temp.param]/6 (we only do so at parse time in
process_template_parm).  So this patch makes convert_template_argument
drop top-level cv-quals accordingly.

	PR c++/100893

gcc/cp/ChangeLog:

	* pt.c (convert_template_argument): Strip top-level cv-quals
	on the substituted type of a non-type template parameter.

gcc/testsuite/ChangeLog:

	* g++.dg/template/param4.C: New test.
	* g++.dg/template/param5.C: New test.
	* g++.dg/cpp1z/nontype-auto19.C: New test.
	* g++.dg/cpp2a/concepts-decltype.C: Don't expect that the
	deduced type of a decltype(auto) NTTP has top-level cv-quals.
2021-06-04 14:08:26 -04:00
Patrick Palka
5357ab75de c++: tsubst_function_decl and excess arg levels [PR100102]
Here, when instantiating the dependent alias template
duration::__is_harmonic with args={{T,U},{int}}, we find ourselves
substituting the function decl _S_gcd.  Since we have more arg levels
than _S_gcd has parm levels, an old special case in tsubst_function_decl
causes us to unwantedly reduce args to its innermost level, yielding
args={int}, which leads to a nonsensical substitution into the decl
context and eventually a crash.

The comment for this special case refers to three examples for which we
ought to see more arg levels than parm levels here, but none of the
examples actually demonstrate this.  In the first example, when
defining S<int>::f(U) parms_depth is 2 and args_depth is 1, and
later when instantiating say S<int>::f<char> both depths are 2.  In the
second example, when substituting the template friend declaration
parms_depth is 2 and args_depth is 1, and later when instantiating f
both depths are 1.  Finally, the third example is invalid since we can't
specialize a member template of an unspecialized class template like
that.

Given that this reduction code seems no longer relevant for its
documented purpose and that it causes problems as in the PR, this patch
just removes it.  Note that as far as bootstrap/regtest is concerned,
this code is dead; the below two tests would be the first to reach it.

	PR c++/100102

gcc/cp/ChangeLog:

	* pt.c (tsubst_function_decl): Remove old code for reducing
	args when it has excess levels.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp0x/alias-decl-72.C: New test.
	* g++.dg/cpp0x/alias-decl-72a.C: New test.
2021-06-04 13:46:53 -04:00
Harald Anlauf
bee8619ad0 Fortran - ICE in inline_matmul_assign
Restrict inlining of matmul to those cases where assignment to the
result array does not need special treatment.

gcc/fortran/ChangeLog:

	PR fortran/99839
	* frontend-passes.c (inline_matmul_assign): Do not inline matmul
	if the assignment to the resulting array if it is not of canonical
	type (real/integer/complex/logical).

gcc/testsuite/ChangeLog:

	PR fortran/99839
	* gfortran.dg/inline_matmul_25.f90: New test.
2021-06-04 19:23:48 +02:00
Martin Sebor
5328cad24f PR c/100783 - ICE on -Wnonnull and erroneous type
gcc/c-family/ChangeLog:

	PR c/100783
	* c-attribs.c (positional_argument): Bail on erroneous types.

gcc/c/ChangeLog:

	PR c/100783
	* c-objc-common.c (print_type): Handle erroneous types.

gcc/testsuite/ChangeLog:

	PR c/100783
	* gcc.dg/nonnull-6.c: New test.
2021-06-04 11:22:39 -06:00
Tobias Burnus
cb6e6d5faa Fortran/OpenMP: Fix -fdump-parse-tree for 'omp loop'
gcc/fortran/ChangeLog
	* dump-parse-tree.c (show_code_node): Handle
	EXEC_OMP_(TARGET_)(,PARALLEL_,TEAMS_)LOOP.
2021-06-04 18:53:37 +02:00
Martin Sebor
9816f509db PR middle-end/100732 - ICE on sprintf %s with integer argument
gcc/ChangeLog:

	PR middle-end/100732
	* gimple-fold.c (gimple_fold_builtin_sprintf): Avoid folding calls
	with either source or destination argument of invalid type.
	* tree-ssa-uninit.c (maybe_warn_pass_by_reference): Avoid checking
	calls with arguments of invalid type.

gcc/testsuite/ChangeLog:

	PR middle-end/100732
	* gcc.dg/tree-ssa/builtin-snprintf-11.c: New test.
	* gcc.dg/tree-ssa/builtin-snprintf-12.c: New test.
	* gcc.dg/tree-ssa/builtin-sprintf-28.c: New test.
	* gcc.dg/tree-ssa/builtin-sprintf-29.c: New test.
	* gcc.dg/uninit-pr100732.c: New test.
2021-06-04 10:49:39 -06:00
Martin Sebor
c6503fa93b PR c/100719 - missing -Wvla-parameter on a mismatch in second parameter
gcc/ChangeLog:

	* attribs.c (init_attr_rdwr_indices): Use VLA bounds in the expected
	order.
	(attr_access::vla_bounds): Also handle VLA bounds.

gcc/c-family/ChangeLog:

	* c-warn.c (warn_parm_array_mismatch): Check TREE_PURPOSE to test
	for element presence.

gcc/testsuite/ChangeLog:

	* gcc.dg/Wvla-parameter-10.c: New test.
	* gcc.dg/Wvla-parameter-11.c: New test.
2021-06-04 10:36:28 -06:00
Uros Bizjak
1b51f038cf i386: Convert a couple of predicates to use match_code RTXes.
No functional changes.

2021-06-04  Uroš Bizjak  <ubizjak@gmail.com>

gcc/
	* config/i386/predicates.md (GOT_memory_operand):
	Implement using match_code RTXes.
	(GOT32_symbol_operand): Ditto.
2021-06-04 17:52:06 +02:00
Tobias Burnus
4facf2bf5b Fortran: Fix OpenMP/OpenACC continue-line parsing
gcc/fortran/ChangeLog:

	* scanner.c (skip_fixed_omp_sentinel): Set openacc_flag if
	this is not an (OpenMP) continuation line.
	(skip_fixed_oacc_sentinel): Likewise for openmp_flag and OpenACC.
	(gfc_next_char_literal): gfc_error_now to force error for mixed OMP/ACC
	continuation once per location and return '\n'.

gcc/testsuite/ChangeLog:

	* gfortran.dg/goacc/omp-fixed.f: Re-add test item changed in previous
	commit in addition - add more dg-errors and '... end ...' due to changed
	parsing.
	* gfortran.dg/goacc/omp.f95: Likewise.
	* gfortran.dg/goacc-gomp/mixed-1.f: New test.
2021-06-04 17:44:23 +02:00
Uros Bizjak
8d7dae0eb3 i386: Add init pattern for V2HI vectors [PR100637]
2021-06-03  Uroš Bizjak  <ubizjak@gmail.com>

gcc/
	PR target/100637
	* config/i386/i386-expand.c (ix86_expand_vector_init_duplicate):
	Handle V2HI mode.
	(ix86_expand_vector_init_general): Ditto.
	Use SImode instead of word_mode for logic operations
	when GET_MODE_SIZE (mode) < UNITS_PER_WORD.
	(expand_vec_perm_even_odd_1): Assert that V2HI mode should be
	implemented by expand_vec_perm_1.
	(expand_vec_perm_broadcast_1): Assert that V2HI and V4HI modes
	should be implemented using standard shuffle patterns.
	(ix86_vectorize_vec_perm_const): Handle V2HImode.  Add V4HI and
	V2HI modes to modes, implementable with shuffle for one operand.
	* config/i386/mmx.md (*punpckwd): New insn_and_split pattern.
	(*pshufw_1): New insn pattern.
	(*vec_dupv2hi): Ditto.
	(vec_initv2hihi): New expander.

gcc/testsuite/

	PR target/100637
	* gcc.dg/vect/slp-perm-9.c (dg-final): Adjust dumps for vect32 targets.
2021-06-04 17:38:36 +02:00
Jonathan Wakely
ee9548b36a libstdc++: Fix value categories used by ranges access CPOs [PR 100824]
The implementation of P2091R0 was incomplete, so that some range access
CPOs used perfect forwarding where they should not. This fixes it by
consistently operating on lvalues.

Some additional changes that are not necessary to fix the bug:

Modify the __as_const helper to simplify its usage. Instead of deducing
the value category from its argument, and requiring callers to forward
the argument as the correct category, add a non-deduced template
parameter which is used for the value category and accept the argument
as an lvalue. This means callers say __as_const<T>(t) instead of
__as_const(std::forward<T>(t)).

Always use an lvalue reference type as the template argument for the
_S_noexcept helpers, so that we only instantiate one specialization for
lvalues and rvalues of the same type.

Move some helper concepts and functions from namespace std::__detail
to ranges::__cust_access, to be consistent with the ranges::begin CPO.
This ensures that the __adl_begin concept and the _Begin::operator()
function are in the same namespace, so unqualified lookup is consistent
and the poison pills for begin are visible to both.

Simplified static assertions for arrays, because the expression a+0 is
already ill-formed for an array of incomplete type.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>

libstdc++-v3/ChangeLog:

	PR libstdc++/100824
	* include/bits/iterator_concepts.h (__detail::__decay_copy)
	(__detail::__member_begin, __detail::__adl_begin): Move to
	namespace ranges::__cust_access.
	(__detail::__ranges_begin): Likewise, and rename to __begin.
	Remove redundant static assertion.
	* include/bits/ranges_base.h (_Begin, _End, _RBegin, _REnd):
	Use lvalue in noexcept specifier.
	(__as_const): Add non-deduced parameter for value category.
	(_CBegin, _CEnd, _CRBegin, _CREnd, _CData): Adjust uses of
	__as_const.
	(__member_size, __adl_size, __member_empty, __size0_empty):
	(__eq_iter_empty, __adl_data): Use lvalue objects in
	requirements.
	(__sentinel_size): Likewise. Add check for conversion to
	unsigned-like.
	(__member_data): Allow non-lvalue types to satisfy the concept,
	but use lvalue object in requirements.
	(_Size, _SSize): Remove forwarding to always use an lvalue.
	(_Data): Likewise. Add static assertion for arrays.
	* testsuite/std/ranges/access/cdata.cc: Adjust expected
	behaviour for rvalues. Add negative tests for ill-formed
	expressions.
	* testsuite/std/ranges/access/data.cc: Likewise.
	* testsuite/std/ranges/access/empty.cc: Adjust expected
	behaviour for rvalues.
	* testsuite/std/ranges/access/size.cc: Likewise.
2021-06-04 15:59:38 +01:00
Tim Adye
f6bb145c0b libstdc++: Optimize std::any_cast by replacing indirect call
This significantly improves the performance of std::any_cast, by
avoiding an indirect call to the _S_manage function through a function
pointer. Before we make that indirect call we've already established
that the contained value has the expected type, which means we also know
the manager type, and so can call one of its members directly.

We also know the precise type in the any::emplace functions, because
we've just constructed that type, so we can use the new member there
too. That doesn't seem to affect performance, but we might as well use
the new _S_access function anyway.

Signed-off-by: Tim Adye <Tim.Adye@cern.ch>
Signed-off-by: Jonathan Wakely <jwakely@redhat.com>

libstdc++-v3/ChangeLog:

	* include/std/any (any::_Manager::_S_access): New static
	function to access the contained value.
	(any::emplace, __any_caster): Use _S_access member of the
	manager type.
2021-06-04 15:59:38 +01:00
Jonathan Wakely
f78f25f438 libstdc++: Add feature test macro for heterogeneous lookup in unordered containers
Also update the C++20 status docs.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>

libstdc++-v3/ChangeLog:

	* doc/xml/manual/status_cxx2020.xml:
	* doc/html/*: Regenerate.
	* include/bits/hashtable.h (__cpp_lib_generic_unordered_lookup):
	Define.
	* include/std/version (__cpp_lib_generic_unordered_lookup):
	Define.
	* testsuite/23_containers/unordered_map/operations/1.cc: Check
	feature test macro.
	* testsuite/23_containers/unordered_set/operations/1.cc:
	Likewise.
2021-06-04 15:59:37 +01:00
Tobias Burnus
ad3f0ad4ba gfortran.dg/gomp/pr99928-5.f90: Use proper iteration var
gcc/testsuite/ChangeLog:

	* gfortran.dg/gomp/pr99928-5.f90: Really use the
	proper iteration variable.
2021-06-04 13:26:40 +02:00
Tobias Burnus
78b622e373 gfortran.dg/gomp/pr99928-*.f90: Use implicit none, remove one xfail
gcc/testsuite/ChangeLog:

	* gfortran.dg/gomp/pr99928-1.f90: Add 'implicit none'.
	* gfortran.dg/gomp/pr99928-11.f90: Likewise.
	* gfortran.dg/gomp/pr99928-4.f90: Likewise.
	* gfortran.dg/gomp/pr99928-6.f90: Likewise.
	* gfortran.dg/gomp/pr99928-8.f90: Likewise.
	* gfortran.dg/gomp/pr99928-2.f90: Likewise. Add missing decl.
	* gfortran.dg/gomp/pr99928-5.f90: Add implicit none;
	fix loop-variable and remove xfail.
2021-06-04 13:13:02 +02:00
Kewen Lin
9651794fff arm: Update unexpected empty split condition
gcc/ChangeLog:

	* config/arm/vfp.md (no_literal_pool_df_immediate,
	no_literal_pool_sf_immediate): Fix empty split condition.
2021-06-04 06:05:33 -05:00
Kewen Lin
ed106d6544 i386: Update unexpected empty split condition
gcc/ChangeLog:

	* config/i386/i386.md (*load_tp_x32_zext, *add_tp_x32_zext,
	*tls_dynamic_gnu2_combine_32): Fix empty split condition.
	* config/i386/sse.md (*<sse2_avx2>_pmovmskb_lt,
	*<sse2_avx2>_pmovmskb_zext_lt, *sse2_pmovmskb_ext_lt,
	*<sse4_1_avx2>_pblendvb_lt): Likewise.
2021-06-04 06:05:08 -05:00
Tobias Burnus
848a36032c Fortran/OpenMP: omp loop's BIND clause - fix typo
Missed a 'git add' after fixing this typo pointed out during review.

	PR middle-end/99928

gcc/fortran/ChangeLog:

	* openmp.c (gfc_match_omp_clauses): Fix typo in error message.

gcc/testsuite/ChangeLog:

	* gfortran.dg/gomp/loop-2.f90: Update for typo fix.
2021-06-04 12:14:14 +02:00
Tobias Burnus
178191e1df Fortran/OpenMP: Add omp loop [PR99928]
PR middle-end/99928

gcc/fortran/ChangeLog:

	* dump-parse-tree.c (show_omp_clauses): Handle bind clause.
	(show_omp_node): Handle loop directive.
	* frontend-passes.c (gfc_code_walker): Likewise.
	* gfortran.h (enum gfc_statement): Add
	ST_OMP_(END_)(TARGET_)(|PARALLEL_|TEAMS_)LOOP.
	(enum gfc_omp_bind_type): New.
	(gfc_omp_clauses): Use it.
	(enum gfc_exec_op): Add EXEC_OMP_(TARGET_)(|PARALLEL_|TEAMS_)LOOP.
	* match.h (gfc_match_omp_loop, gfc_match_omp_parallel_loop,
	gfc_match_omp_target_parallel_loop, gfc_match_omp_target_teams_loop,
	gfc_match_omp_teams_loop): New.
	* openmp.c (enum omp_mask1): Add OMP_CLAUSE_BIND.
	(gfc_match_omp_clauses): Handle it.
	(OMP_LOOP_CLAUSES, gfc_match_omp_loop, gfc_match_omp_teams_loop,
	gfc_match_omp_target_teams_loop, gfc_match_omp_parallel_loop,
	gfc_match_omp_target_parallel_loop): New.
	(resolve_omp_clauses, resolve_omp_do, omp_code_to_statement,
	gfc_resolve_omp_directive): Handle omp loop.
	* parse.c (decode_omp_directive case_exec_markers, gfc_ascii_statement,
	parse_omp_do, parse_executable): Likewise.
	(parse_omp_structured_block): Remove ST_ which use parse_omp_do.
	* resolve.c (gfc_resolve_blocks): Add omp loop.
	* st.c (gfc_free_statement): Likewise.
	* trans-openmp.c (gfc_trans_omp_clauses): Handle bind clause.
	(gfc_trans_omp_do, gfc_trans_omp_parallel_do, gfc_trans_omp_distribute,
	gfc_trans_omp_teams, gfc_trans_omp_target, gfc_trans_omp_directive):
	Handle loop directive.
	(gfc_split_omp_clauses): Likewise; fix firstprivate/lastprivate
	and (in_)reduction for taskloop.
	* trans.c (trans_code): Handle omp loop directive.

gcc/testsuite/ChangeLog:

	* gfortran.dg/gomp/pr99928-3.f90: Add 'default(none)', following
	C/C++ version of the patch.
	* gfortran.dg/gomp/loop-1.f90: New test.
	* gfortran.dg/gomp/loop-2.f90: New test.
	* gfortran.dg/gomp/pr99928-1.f90: New test; based on C/C++ test.
	* gfortran.dg/gomp/pr99928-11.f90: Likewise.
	* gfortran.dg/gomp/pr99928-2.f90: Likewise.
	* gfortran.dg/gomp/pr99928-4.f90: Likewise.
	* gfortran.dg/gomp/pr99928-5.f90: Likewise.
	* gfortran.dg/gomp/pr99928-6.f90: Likewise.
	* gfortran.dg/gomp/pr99928-8.f90: Likewise.
	* gfortran.dg/goacc/omp.f95: Use 'acc kernels loops' instead
	of 'acc loops' to hide unrelated bug for now.
	* gfortran.dg/goacc/omp-fixed.f: Likewise
2021-06-04 12:08:24 +02:00
Jakub Jelinek
b7dd2e4eeb x86: Fix ix86_expand_vector_init for V*TImode [PR100887]
We have vec_initv4tiv2ti and vec_initv2titi patterns which call
ix86_expand_vector_init and assume it works for those modes.  For the
case of construction from two half-sized vectors, the code assumes it
will always succeed, but we have only insn patterns with SImode and DImode
element types.  QImode and HImode element types are already handled
by performing it with same sized vectors with SImode elements and the
following patch extends that to V*TImode vectors.

2021-06-04  Jakub Jelinek  <jakub@redhat.com>

	PR target/100887
	* config/i386/i386-expand.c (ix86_expand_vector_init): Handle
	concatenation from half-sized modes with TImode elements.

	* gcc.target/i386/pr100887.c: New test.
2021-06-04 11:20:02 +02:00
Jakub Jelinek
3011f10466 c++: Fix up attribute handling in methods in templates [PR100872]
The following testcase FAILs because a dependent (late) attribute is never
tsubsted.  While the testcase is OpenMP, I think it is a generic C++ FE problem
that could affect any other dependent attribute.

apply_late_template_attributes documents that it relies on
  /* save_template_attributes puts the dependent attributes at the beginning of
     the list; find the non-dependent ones.  */
The "operator binding" attributes that are sometimes added are added to the
head of DECL_ATTRIBUTES list though and because it doesn't have
ATTR_IS_DEPENDENT set it violates this requirement.

The following patch fixes it by adding that attribute after all
ATTR_IS_DEPENDENT attributes.  I'm not 100% sure if DECL_ATTRIBUTES can't be
shared by multiple functions (e.g. the cdtor clones), but the code uses
later remove_attribute which could break that too.

Other option would be to copy_list the ATTR_IS_DEPENDENT portion of the
DECL_ATTRIBUTES list if we need to do this, that would be the same as this
patch but replace that *ap = op_attr; at the end with
      *ap = NULL_TREE;
      DECL_ATTRIBUTES (cfn) = chainon (copy_list (DECL_ATTRIBUTES (cfn)),
                                       op_attr);
Or perhaps set ATTR_IS_DEPENDENT on the "operator bindings" attribute,
though it would need to be studied what would it try to do with the
attribute during tsubst.

2021-06-04  Jakub Jelinek  <jakub@redhat.com>

	PR c++/100872
	* name-lookup.c (maybe_save_operator_binding): Add op_attr after all
	ATTR_IS_DEPENDENT attributes in the DECL_ATTRIBUTES list rather than
	to the start.

	* g++.dg/gomp/declare-simd-8.C: New test.
2021-06-04 11:17:05 +02:00
Claudiu Zissulescu
39e5a954c1 arc: Don't allow millicode thunks with reduced register set CPUs.
The millicode thunks are not reduced register set safe.  Disable them
for CPUs having this option on.

gcc/
2021-06-04  Claudiu Zissulescu  <claziss@synopsys.com>

	* config/arc/arc.c (arc_override_options): Disable millicode
	thunks when RF16 is on.

Signed-off-by: Claudiu Zissulescu <claziss@synopsys.com>
2021-06-04 10:12:32 +03:00
Haochen Gui
9080a3bf23 rs6000: Disable mode promotion for pseudos
rs6000 has instructions that can do almost everything 32 bit
at least as efficiently as corresponding 64 bit things. The
mode promotion can be defered to when a wide mode is necessary.
So it helps a lot not promote mode for pseudos. SPECint test
shows that the overall performance improvement (by geomean) is
more than 2% with this patch.

testsuite/gcc.target/powerpc/not-promote-mode.c illustrates how
the patch eliminates the redundant extensions and do further
optimization by disabling mode promotion for pseduos.

gcc/ChangeLog

	* config/rs6000/rs6000.h (PROMOTE_MODE): Remove.

gcc/testsuite/ChangeLog:

	* gcc.target/powerpc/not-promote-mode.c: New.
2021-06-04 14:51:49 +08:00
Haochen Gui
a3f6bd7891 rs6000: Expand PROMOTE_MODE marco in rs6000_promote_function_mode
This patch prepares for the patch which disables mode
promotion of pseudos on rs6000.

gcc/ChangeLog:
	* config/rs6000/rs6000-call.c (rs6000_promote_function_mode):
	Replace PROMOTE_MODE marco with its content.
2021-06-04 11:40:24 +08:00
GCC Administrator
440c8a0a91 Daily bump. 2021-06-04 00:16:24 +00:00
Kewen Lin
47d25a0314 cris: Update unexpected empty split condition
gcc/ChangeLog:

	* config/cris/cris.md (*addi_reload): Fix empty split condition.
2021-06-04 00:31:45 +02:00
Jim Wilson
3c70b3ca1e RISC-V: Enable riscv attributes by default for all riscv targets.
These were only enabled for embedded elf originally because that was
the safe option, and linux had no obvious use for them.  But now that
we have new extensions coming like V that affect process state and ABIs,
the attributes are expected to be useful for linux, and may be required
by the psABI.  clang already emits them for all riscv targets.

	gcc/
	* config.gcc (riscv*-*-*): If --with-riscv-attribute not used,
	turn it on for all riscv targets.
2021-06-03 13:54:12 -07:00
Uros Bizjak
5883e56756 i386: Add insert and extract patterns for 4-byte vectors [PR100637]
The patch introduces insert and extract patterns for 4-byte vectors.
It effectively only emits PINSR and PEXTR instructions when available,
otherwise falls back to generic code that emulates these instructions
via inserts, extracts, logic operations and shifts in integer registers.

Please note that generic fallback produces better code than the current
approach of constructing new vector in memory (due to store forwarding stall)
so also enable QImode 8-byte vector inserts only with TARGET_SSE4_1.

2021-06-03  Uroš Bizjak  <ubizjak@gmail.com>

gcc/
	PR target/100637
	* config/i386/i386-expand.c (ix86_expand_vector_set):
	Handle V2HI and V4QI modes.
	(ix86_expand_vector_extract): Ditto.
	* config/i386/mmx.md (*pinsrw): New insn pattern.
	(*pinsrb): Ditto.
	(*pextrw): Ditto.
	(*pextrw_zext): Ditto.
	(*pextrb): Ditto.
	(*pextrb_zext): Ditto.
	(vec_setv2hi): New expander.
	(vec_extractv2hihi): Ditto.
	(vec_setv4qi): Ditto.
	(vec_extractv4qiqi): Ditto.

	(vec_setv8qi): Enable only for TARGET_SSE4_1.
	(vec_extractv8qiqi): Ditto.

gcc/testsuite/

	PR target/100637
	* gcc.target/i386/vperm-v2hi.c: New test.
	* gcc.target/i386/vperm-v4qi.c: Ditto.
2021-06-03 20:06:11 +02:00
Aaron Sawdey
52e130652a Fix operand order to subf for p10 fusion.
This certainly causes a bootstrap miscompare, and might also be
responsible for PR/100820. The operands to subf were reversed
in the logical-add/sub fusion patterns, and I screwed up my
bootstrap test which is how it ended up getting committed.

gcc/ChangeLog

	* config/rs6000/genfusion.pl (gen_logical_addsubf): Fix input
	order to subf instruction.
	* config/rs6000/fusion.md: Regenerate.
2021-06-03 11:42:15 -05:00
Patrick Palka
0614bbbe59 libstdc++: Avoid hard error in ranges::unique_copy [PR100770]
Here, in the constexpr if condition within ranges::unique_copy, when
input_iterator<_Out> isn't satisfied we must avoid substituting into
iter_value_t<_Out> because the latter isn't necessarily well-formed
then.  To that end, this patch factors out the condition into a concept
and uses it throughout.

This patch also makes the definition of our testsuite
output_iterator_wrapper more minimal by setting its value_type, pointer
and reference member types to void.  This means our existing tests for
unique_copy already exercise the fix for this bug, so we don't need
to add another test.  The only other fallout of this testsuite iterator
change appears in std/ranges/range.cc, where the use of range_value_t
on a test_output_range is now ill-formed.

libstdc++-v3/ChangeLog:

	* include/bits/ranges_algo.h (__detail::__can_reread_output):
	Factor out this concept from ...
	(__unique_copy_fn::operator()): ... here.  Use the concept
	throughout.
	* testsuite/std/ranges/range.cc: Remove now ill-formed use
	of range_value_t on an output_range.
	* testsuite/util/testsuite_iterators.h (output_iterator_wrapper):
	Define value_type, pointer and reference member types to void.
2021-06-03 12:30:29 -04:00
Eric Botcazou
cd4dd47265 Fix issue for nested record types with -fdump-ada-spec
Ada does not support anonymous record declarations nested in other record
declarations so -fdump-ada-spec needs to unnest them, and this contains a
few fixes for this machinery.

gcc/c-family/
	* c-ada-spec.c (dump_ada_macros): Minor tweaks.
	(dump_ada_decl_name): Likewise.
	(dump_anonymous_type_name): Remove parent parameter and adjust.
	(dump_sloc): Minor tweak.
	(dump_ada_array_type): Remove type parameter and adjust.
	(dump_ada_enum_type): Remove parent parameter and adjust.
	(dump_ada_node): Adjust calls to above functions.
	(dumped_anonymous_types): New global variable.
	(dump_nested_types_1): Rename into...
	(dump_nested_types): ...this.
	(dump_nested_type): Remove parent and dumped_types parameters.
	<ARRAY_TYPE>: Replace dumped_types with dumped_anonymous_types.
	Adjust calls to dump_anonymous_type_name and dump_ada_array_type.
	(dump_ada_specs): Initialize and free dumped_anonymous_types.
2021-06-03 17:56:59 +02:00
Eric Botcazou
517155ceb9 Fix issue for external subtypes with -fdump-ada-spec
This works around an irregularity of the language whereby subtypes, unlike
types, are not visible through a limited_with clause.

gcc/c-family/
	* c-ada-spec.c (pp_ada_tree_identifier): Tidy up.
	(dump_ada_node) <POINTER_TYPE>: Deal specially with external subtypes.
2021-06-03 17:56:59 +02:00
Eric Botcazou
5f2ef25b08 Fix duplicate name issues in output of -fdump-ada-spec
The namespace rules are different in the C family of languages and
in Ada, and a few adjustments are further needed in -fdump-ada-spec
because of them.

gcc/c-family/
	* c-ada-spec.c (dump_ada_enum_type): Dump a prefix for constants.
	(htable_t): New typedef.
	(overloaded_names): Use it.
	(add_name): New function.
	(init_overloaded_names): Use add_name to populate the table and add
	special cases for sigaction and stat.
	(overloaded_name_p): Rename into...
	(overloading_index): ...this.  Do not initialize overloaded_names table
	here.  Return the index or zero.
	(dump_ada_declaration): Minor tweaks.  Do not skip overloaded functions
	but add an overloading suffix instead.
	(dump_ada_specs): Initialize overloaded_names tables here.
2021-06-03 17:56:59 +02:00
Aldy Hernandez
04affb328c Replace uses of determine_value_range with range_of_expr.
The expression evaluator changes to the range_query API provide
everything determine_value_range does.  This patch replaces all uses
with calls into the range_query API.

gcc/ChangeLog:

	* calls.c (get_size_range): Use range_of_expr instead of
	determine_value_range.
	* tree-affine.c (expr_to_aff_combination): Same.
	* tree-data-ref.c (split_constant_offset): Same.
	* tree-vrp.c (determine_value_range_1): Remove.
	(determine_value_range): Remove.
	* tree-vrp.h (determine_value_range): Remove.
2021-06-03 17:47:54 +02:00
Aldy Hernandez
caa60c1271 Implement generic expression evaluator for range_query.
Right now, range_of_expr only works with constants, SSA names, and
pointers.  Anything else gets returned as VARYING.  This patch adds the
capability to deal with arbitrary expressions, inasmuch as these
tree codes are implemented in range-ops.cc.

This will give us the ability to ask for the range of any tree expression,
not just constants and SSA names, with range_of_expr().

This is a more generic implementation of determine_value_range in VRP.
A follow-up patch will remove all uses of it in favor of the
range_query API.

gcc/ChangeLog:

	* function-tests.c (test_ranges): Call gimple_range_tests.
	* gimple-range-cache.cc (ranger_cache::range_of_expr): Pass stmt
	to get_tree_range.
	* gimple-range.cc (fur_source::get_operand): Do not call
	get_tree_range or gimple_range_global.
	get_tree_range.
	(get_tree_range): Move to value-query.cc.
	Call get_arith_expr_range.
	(gimple_ranger::range_of_expr): Add argument to get_tree_range.
	Include gimple-range-tests.cc.
	* gimple-range.h (fold_range): Add argument.
	(get_tree_range): Remove.
	* selftest.h (gimple_range_tests): New.
	* value-query.cc (global_range_query::range_of_expr): Add
	stmt argument.
	(range_query::get_tree_range): Move from gimple-range.cc.
	* value-query.h (class range_query): Add get_tree_range and
	get_arith_expr_range.  Make fur_source a friend.
	* vr-values.c (vr_values::range_of_expr): Pass stmt to
	get_tree_range.
	* gimple-range-tests.cc: New file.
2021-06-03 17:47:27 +02:00
Jason Merrill
be54520ea0 MAINTAINERS: Add DCO version number.
ChangeLog:

	* MAINTAINERS: Add DCO version number.
2021-06-03 11:07:19 -04:00
Aldy Hernandez
160fe6034b Use known global ranges in export_global_ranges
This patch modifies export_global_ranges to take into account current
global ranges.  It also handles enhances said function to export pointer
global ranges as well.

gcc/ChangeLog:

	* gimple-range.cc (gimple_ranger::export_global_ranges): Call
	  update_global_range.
	* value-query.cc (update_global_range): New.
	* value-query.h (update_global_range): New.

gcc/testsuite/ChangeLog:

	* gcc.dg/pr80776-1.c: XFAIL and document the reason why.
2021-06-03 16:39:33 +02:00
David Malcolm
981d98b883 analyzer: remove unused prototypes
gcc/analyzer/ChangeLog:
	* store.h (store::get_direct_binding): Remove unused decl.
	(store::get_default_binding): Likewise.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2021-06-03 10:37:41 -04:00
David Malcolm
e84fe25f63 analyzer: show types for poisoned_svalue and compound_svalue
gcc/analyzer/ChangeLog:
	* svalue.cc (poisoned_svalue::dump_to_pp): Dump type.
	(compound_svalue::dump_to_pp): Dump any type.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2021-06-03 10:35:27 -04:00
David Malcolm
4bdc6e17c9 diagnostic-show-locus: tweak rejection logic
gcc/ChangeLog:
	* diagnostic-show-locus.c (diagnostic_show_locus): Don't reject
	printing the same location twice if there are fix-it hints,
	multiple locations, or a label.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2021-06-03 10:32:40 -04:00
Patrick Palka
57ed620ebf libstdc++: Simplify range adaptors' forwarding of bound args [PR100577]
r11-8053 rewrote the range adaptor implementation in conformance with
P2281R1, making partial application act like a SFINAE-friendly perfect
forwarding call wrapper.  Making SFINAE-friendliness coexist with
perfect forwarding here requires adding fallback deleted operator()
overloads (as described in e.g. section 5.5 of P0847R6).  But
unfortunately, as reported in PR100577, this necessary technique of
using of deleted overloads regresses diagnostics for ill-formed calls to
partially applied range adaptors in GCC.

Although GCC's diagnostics can arguably be improved here by having the
compiler explain why the other candidates weren't viable when overload
resolution selects a deleted candidate, we can also largely work around
this on the library side (and achieve more concise diagnostics than by
a frontend-side improvement alone) if we take advantage of the
observation that not all range adaptors need perfect forwarding call
wrapper semantics, in fact only views::split currently needs it, because
all other range adaptors either take no extra arguments or only
arguments that are expected to be freely/cheaply copyable, e.g. function
objects and integer-like types.  (The discussion section in P2281R1 goes
into detail about why views::split is special.)

To that end, this introduces opt-in flags for denoting a range adaptor
as having "simple" extra arguments (in the case of a range adaptor
non-closure) or having a "simple" call operator (in the case of a range
adaptor closure).  These flags are then used to conditionally simplify
the operator() for the generic _Partial and _Pipe class templates, down
from needing three overloads thereof (including one defined as deleted)
to just needing a single overload.  The end result is that diagnostic
quality is restored for all adaptors except for views::split, and
diagnostics for the adaptors are generally made more concise since
there's only a single _Partial/_Pipe overload to diagnose instead of
three of them.

libstdc++-v3/ChangeLog:

	PR libstdc++/100577
	* include/std/ranges (_RangeAdaptorClosure): Document
	_S_has_simple_call_op mechanism.
	(_RangeAdaptor): Document _S_has_simple_extra_args mechanism.
	(__closure_has_simple_call_op): New concept.
	(__adaptor_has_simple_extra_args): Likewise.
	(_Partial<_Adaptor, _Args...>): New partial specialization.
	(_Partial<_Adaptor, _Arg>): Likewise.
	(_Pipe<_Lhs, _Rhs>): Likewise.
	(views::_All::_S_has_simple_call_op): Define to true.
	(views::_Filter::_S_has_simple_extra_args): Likewise.
	(views::_Transform::_S_has_simple_extra_args): Likewise.
	(views::_Take::_S_has_simple_extra_args): Likewise.
	(views::_TakeWhile::_S_has_simple_extra_args): Likewise.
	(views::_Drop::_S_has_simple_extra_args): Likewise.
	(views::_DropWhile::_S_has_simple_extra_args): Likewise.
	(views::_Join::_S_has_simple_call_op): Likewise.
	(views::_Split): Document why we don't define
	_S_has_simple_extra_args to true for this adaptor.
	(views::_Common::_S_has_simple_call_op): Define to true.
	(views::_Reverse::_S_has_simple_call_op): Likewise.
	(views::_Elements::_S_has_simple_call_op): Likewise.
	* testsuite/std/ranges/adaptors/100577.cc: New test.
2021-06-03 09:49:30 -04:00
Patrick Palka
d999d9b7e5 c++: cv-qualified dependent name of alias tmpl [PR100592]
Here, the dependent template name in the return type of f() resolves to
an alias of int& after substitution, and we end up complaining about
qualifying this reference type with 'const' from cp_build_qualified_type
rather than just silently dropping the qualification as per [dcl.ref]/1.

The problem is ultimately that make_typename_type ignores the
tf_keep_type_decl flag when the dependent name is a template-id.  This
in turn causes the TYPE_DECL check within tsubst <case TYPENAME_TYPE>
to fail, and so we end up not passing tf_ignore_bad_quals to
cp_build_qualified_type.  This patch fixes this by making
make_typename_type respect the tf_keep_type_decl flag in this situation.

	PR c++/100592

gcc/cp/ChangeLog:

	* decl.c (make_typename_type): After calling
	lookup_template_class, adjust the result to its TYPE_NAME and
	then consider the tf_keep_type_decl flag.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp0x/alias-decl-71.C: New test.
2021-06-03 09:39:13 -04:00
Patrick Palka
69f517ac20 c++: using-enum and access specifiers [PR100862]
When copying the enumerators imported by a class-scope using-enum
declaration, we need to override current_access_specifier so that
finish_member_declaration gives the copies the same access as the
using-enum decl.  (A class-scope using-enum is processed late, so
current_access_specifier at this point is otherwise set to the last
access specifier within the class.)  To that end, this patch makes
handle_using_decl call set_current_access_from_decl accordingly.

For consistency, this patch makes build_enumerator use
set_current_access_from_decl too.

	PR c++/100862

gcc/cp/ChangeLog:

	* pt.c (set_current_access_from_decl): Move to ...
	* class.c (set_current_access_from_decl): ... here.
	(handle_using_decl): Use it to propagate the access of the
	using-enum decl to the copy of the imported enumerator.
	* cp-tree.h (set_current_access_from_decl): Declare.
	* decl.c (build_enumerator): Simplify using make_temp_override
	and set_current_access_from_decl.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp2a/using-enum-9.C: New test.
2021-06-03 09:37:11 -04:00