Commit graph

185677 commits

Author SHA1 Message Date
Andrew MacLeod
9858cd1a68 Implement a sparse bitmap representation for Rangers on-entry cache.
Use a sparse representation for the on entry cache, and utilize it when
the number of basic blocks in the function exceeds param_evrp_sparse_threshold.

	PR tree-optimization/PR100299
	* gimple-range-cache.cc (class sbr_sparse_bitmap): New.
	(sbr_sparse_bitmap::sbr_sparse_bitmap): New.
	(sbr_sparse_bitmap::bitmap_set_quad): New.
	(sbr_sparse_bitmap::bitmap_get_quad): New.
	(sbr_sparse_bitmap::set_bb_range): New.
	(sbr_sparse_bitmap::get_bb_range): New.
	(sbr_sparse_bitmap::bb_range_p): New.
	(block_range_cache::block_range_cache): initialize bitmap obstack.
	(block_range_cache::~block_range_cache): Destruct obstack.
	(block_range_cache::set_bb_range): Decide when to utilze the
	sparse on entry cache.
	* gimple-range-cache.h (block_range_cache): Add bitmap obstack.
	* params.opt (-param=evrp-sparse-threshold): New.
2021-06-07 17:31:01 -04:00
Andrew MacLeod
5ad089a3c9 Implement multi-bit aligned accessors for sparse bitmap.
Provide set/get routines to allow sparse bitmaps to be treated as an array
of multiple bit values. Only chunk sizes that are powers of 2 are supported.

	* bitmap.c (bitmap_set_aligned_chunk): New.
	(bitmap_get_aligned_chunk): New.
	(test_aligned_chunk): New.
	(bitmap_c_tests): Call test_aligned_chunk.
	* bitmap.h (bitmap_set_aligned_chunk, bitmap_get_aligned_chunk): New.
2021-06-07 17:31:01 -04:00
Uros Bizjak
64735dc923 i386: Add init pattern for V4QI vectors [PR100637]
2021-06-07  Uroš Bizjak  <ubizjak@gmail.com>

gcc/
	PR target/100637
	* config/i386/i386-expand.c (ix86_expand_vector_init_duplicate):
	Handle V4QI mode.
	(ix86_expand_vector_init_one_nonzero): Ditto.
	(ix86_expand_vector_init_one_var): Ditto.
	(ix86_expand_vector_init_general): Ditto.
	* config/i386/mmx.md (vec_initv4qiqi): New expander.

gcc/testsuite/

	PR target/100637
	* gcc.target/i386/pr100637-5b.c: New test.
	* gcc.target/i386/pr100637-5w.c: Ditto.
2021-06-07 23:00:14 +02:00
H.J. Lu
e89759fdfc x86: Don't compile pr82735-[345].c for x32
Since -mabi=ms isn't compatible with x32, skip pr82735-[345].c for x32.

	PR target/82735
	* gcc.target/i386/pr82735-3.c: Don't compile for x32.
	* gcc.target/i386/pr82735-4.c: Likewise.
	* gcc.target/i386/pr82735-5.c: Likewise.
2021-06-07 12:05:15 -07:00
Eric Botcazou
97d83259b9 Fix old thinko in warning on pointer for storage order purposes
gcc/c
	PR c/100920
	* c-typeck.c (convert_for_assignment): Test fndecl_built_in_p to
	spot built-in functions.
gcc/testsuite/
	* gcc.dg/sso-14.c: Adjust.
2021-06-07 18:22:29 +02:00
Patrick Palka
6cb35b606c c++: access of dtor named by qualified template-id [PR100918]
Here, when resolving the destructor named by Inner<int>::~Inner<int>
(which is valid until C++20) we end up in cp_parser_lookup_name called
indirectly from cp_parser_template_id to look up the name Inner from
the scope Inner<int>.  The lookup naturally finds the injected-class-name,
and because the flag is_template is true, we adjust this lookup result
to the TEMPLATE_DECL Inner.  We then check access of this adjusted
lookup result.  But this access check fails because the lookup scope is
Inner<int> and the context_for_name_lookup for the TEMPLATE_DECL is
Outer (whereas for the injected-class-name it's also Inner<int>).

The simplest fix seems to be to check access of the original lookup
result (the injected-class-name) instead of the adjusted result (the
TEMPLATE_DECL).  So this patch moves the access check in
cp_parser_lookup_name to before the injected-class-name adjustment.

	PR c++/100918

gcc/cp/ChangeLog:

	* parser.c (cp_parser_lookup_name): Check access of the lookup
	result before we potentially adjust an injected-class-name to
	its TEMPLATE_DECL.

gcc/testsuite/ChangeLog:

	* g++.dg/template/access38.C: New test.
2021-06-07 12:02:08 -04:00
Avi Kivity
5e2e15f212 libstdc++: add missing typename for dependent type in ranges::elements_view [PR100900]
Clang complains about the missing typename. I believe it's not required
in a more complete implementation of C++, but it's nicer to support
less complete implementations.

	PR libstdc++/100900

libstdc++-v3/ChangeLog:

	* include/std/ranges (elements_view::__iter_cat::_S_iter_cat):
	Add missing typename.
2021-06-07 11:19:05 -04:00
H.J. Lu
52730540e8 x86: Update g++.target/i386/pr100885.C
Since long is 32 bits for x32, update g++.target/i386/pr100885.C to cast
__m64 to long long for x32.

	PR target/100885
	* g++.target/i386/pr100885.C (_mm_set_epi64): Cast __m64 to long
	long.
2021-06-07 07:49:41 -07:00
Jonathan Wakely
adec148117 libstdc++: Constrain three-way comparison for std::optional [PR 98842]
The operator<=>(const optional<T>&, const U&) operator is supposed to be
constrained with three_way_comparable_with<U, T> so that it can only be
used when T and U are weakly-equality-comparable and also three-way
comparable.

Adding that constrain completely breaks std::optional comparisons,
because it causes constraint recursion. To avoid that, an additional
check that U is not a specialization of std::optional is needed. That
appears to be a defect in the standard and should be reported to LWG.

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

libstdc++-v3/ChangeLog:

	PR libstdc++/98842
	* include/std/optional (operator<=>(const optional<T>& const U&)):
	Add missing constraint and add workaround for template
	recursion.
	* testsuite/20_util/optional/relops/three_way.cc: Check that
	type without equality comparison cannot be compared when wrapped
	in std::optional.
2021-06-07 15:45:14 +01:00
Jeff Law
f0d1a675e0 Use moves to eliminate redundant test/compare instructions
gcc/

	* config/h8300/movepush.md: Change most _clobber_flags
	patterns to instead use <cczn> subst.
	(movsi_cczn): New pattern with usable CC cases split out.
	(movsi_h8sx_cczn): Likewise.
2021-06-07 10:43:17 -04:00
Martin Liska
4d3907c222 Reformat target.def for better parsing.
gcc/c-family/ChangeLog:

	* c-target.def: Split long lines and replace them
	with '\n\'.

gcc/ChangeLog:

	* common/common-target.def: Split long lines and replace them
	with '\n\'.
	* target.def: Likewise.
	* doc/tm.texi: Re-generated.
2021-06-07 15:31:51 +02:00
Bernd Edlinger
3e00f8ddb7 For obj-c stage-final re-use the checksum from the previous stage
This silences the stage compare.

gcc/objc:
2021-06-07  Bernd Edlinger  <bernd.edlinger@softing.com>

	* Make-lang.in (cc1obj-checksum.c): For stage-final re-use
	the checksum from the previous stage.

gcc/objcp:
2021-06-07  Bernd Edlinger  <bernd.edlinger@softing.com>

	* Make-lang.in (cc1objplus-checksum.c): For stage-final re-use
	the checksum from the previous stage.
2021-06-07 13:47:12 +02:00
Jakub Jelinek
e1521b170b fold-const: Fix up fold_read_from_vector [PR100887]
The callers of fold_read_from_vector expect that the index they pass is
an index of an element in the vector and the function does that most of the
time.  But we allow CONSTRUCTORs with VECTOR_TYPE to have VECTOR_TYPE
elements and in that case every CONSTRUCTOR element represents not just one
index (with the exception of V1 vectors), but multiple.
So returning zero vector if i >= CONSTRUCTOR_NELTS or returning some
CONSTRUCTOR_ELT's value might not be what the callers expect.

Fixed by punting if the first element has vector type.
Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

In theory we could instead recurse (and assert that for CONSTRUCTORs of
vector elements we have always all elements specified like tree-cfg.c
verifies?) after adjusting the index appropriately.

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

	PR target/100887
	* fold-const.c (fold_read_from_vector): Return NULL if trying to
	read from a CONSTRUCTOR with vector type elements.

	* gcc.dg/pr100887.c: New test.
2021-06-07 09:28:31 +02:00
Jakub Jelinek
d66a703c8b tree-inline: Fix up __builtin_va_arg_pack handling [PR100898]
The following testcase ICEs, because gimple_call_arg_ptr (..., 0)
asserts that there is at least one argument, while we were using
it even if we didn't copy anything just to get a pointer from/to which
the zero arguments should be copied.

Fixed by guarding the memcpy calls.  Also, the code was calling
gimple_call_num_args too many times - 5 times instead of 2, so the patch
adds two temporaries for those.

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

	PR middle-end/100898
	* tree-inline.c (copy_bb): Only use gimple_call_arg_ptr if memcpy
	should copy any arguments.  Don't call gimple_call_num_args
	on id->call_stmt or call_stmt more than once.

	* g++.dg/ext/va-arg-pack-3.C: New test.
2021-06-07 09:25:37 +02:00
liuhongt
be5efe9c12 Fix ICE of insn does not satisfy its constraints.
evex encoding vpmovzxbx needs both AVX512BW and AVX512VL which means
constraint "Yw" should be used instead of constraint "v".

gcc/ChangeLog:

	PR target/100885
	* config/i386/sse.md (*sse4_1_zero_extendv8qiv8hi2_3): Refine
	constraints.
	(<insn>v4siv4di2): Delete constraints for define_expand.

gcc/testsuite/ChangeLog:

	PR target/100885
	* g++.target/i386/pr100885.C: New test.
2021-06-07 11:27:45 +08:00
liuhongt
9a90b311f2 Fix _mm256_zeroupper by representing the instructions as call_insns in which the call has a special vzeroupper ABI.
When __builtin_ia32_vzeroupper is called explicitly, the corresponding
vzeroupper pattern does not carry any CLOBBERS or SETs before LRA,
which leads to incorrect optimization in pass_reload. In order to
solve this problem, this patch refine instructions as call_insns in
which the call has a special vzeroupper ABI.

gcc/ChangeLog:

	PR target/82735
	* config/i386/i386-expand.c (ix86_expand_builtin): Remove
	assignment of cfun->machine->has_explicit_vzeroupper.
	* config/i386/i386-features.c
	(ix86_add_reg_usage_to_vzerouppers): Delete.
	(ix86_add_reg_usage_to_vzeroupper): Ditto.
	(rest_of_handle_insert_vzeroupper): Remove
	ix86_add_reg_usage_to_vzerouppers, add df_analyze at the end
	of the function.
	(gate): Remove cfun->machine->has_explicit_vzeroupper.
	* config/i386/i386-protos.h (ix86_expand_avx_vzeroupper):
	Declared.
	* config/i386/i386.c (ix86_insn_callee_abi): New function.
	(ix86_initialize_callee_abi): Ditto.
	(ix86_expand_avx_vzeroupper): Ditto.
	(ix86_hard_regno_call_part_clobbered): Adjust for vzeroupper
	ABI.
	(TARGET_INSN_CALLEE_ABI): Define as ix86_insn_callee_abi.
	(ix86_emit_mode_set): Call ix86_expand_avx_vzeroupper
	directly.
	* config/i386/i386.h (struct GTY(()) machine_function): Delete
	has_explicit_vzeroupper.
	* config/i386/i386.md (enum unspec): New member
	UNSPEC_CALLEE_ABI.
	(ABI_DEFAULT,ABI_VZEROUPPER,ABI_UNKNOWN): New
	define_constants for insn callee abi index.
	* config/i386/predicates.md (vzeroupper_pattern): Adjust.
	* config/i386/sse.md (UNSPECV_VZEROUPPER): Deleted.
	(avx_vzeroupper): Call ix86_expand_avx_vzeroupper.
	(*avx_vzeroupper): Rename to ..
	(avx_vzeroupper_callee_abi): .. this, and adjust pattern as
	call_insn which has a special vzeroupper ABI.
	(*avx_vzeroupper_1): Deleted.

gcc/testsuite/ChangeLog:

	PR target/82735
	* gcc.target/i386/pr82735-1.c: New test.
	* gcc.target/i386/pr82735-2.c: New test.
	* gcc.target/i386/pr82735-3.c: New test.
	* gcc.target/i386/pr82735-4.c: New test.
	* gcc.target/i386/pr82735-5.c: New test.
2021-06-07 10:25:07 +08:00
liuhongt
16465ceb06 CALL_INSN may not be a real function call.
Use "used" flag for CALL_INSN to indicate it's a fake call. If it's a
fake call, it won't have its own function stack.

gcc/ChangeLog

	PR target/82735
	* df-scan.c (df_get_call_refs): When call_insn is a fake call,
	it won't use stack pointer reg.
	* final.c (leaf_function_p): When call_insn is a fake call, it
	won't affect caller as a leaf function.
	* reg-stack.c (callee_clobbers_any_stack_reg): New.
	(subst_stack_regs): When call_insn doesn't clobber any stack
	reg, don't clear the arguments.
	* rtl.c (shallow_copy_rtx): Don't clear flag used when orig is
	a insn.
	* shrink-wrap.c (requires_stack_frame_p): No need for stack
	frame for a fake call.
	* rtl.h (FAKE_CALL_P): New macro.
2021-06-07 10:25:03 +08:00
GCC Administrator
7d6987e90d Daily bump. 2021-06-07 00:16:23 +00:00
Eric Botcazou
fed94fc9e7 Reimplement LEAF_REG_REMAP macro for the SPARC
The current implementation as an array of chars is indeed a bit awkward
so this reimplements it as a function taking and returning an int.

gcc/
	* config/sparc/sparc-protos.h (order_regs_for_local_alloc): Rename
	to...
	(sparc_order_regs_for_local_alloc): ...this.
	(sparc_leaf_reg_remap): Declare.
	* config/sparc/sparc.h (ADJUST_REG_ALLOC_ORDER): Adjust.
	(LEAF_REG_REMAP): Reimplement as call to sparc_leaf_reg_remap.
	* config/sparc/sparc.c (leaf_reg_remap): Delete.
	(order_regs_for_local_alloc): Rename to...
	(sparc_order_regs_for_local_alloc): ...this.
	(sparc_leaf_reg_remap): New function.
	(sparc_conditional_register_usage): Do not modify leaf_reg_remap.
2021-06-06 23:57:39 +02:00
David Edelsohn
03d921abe6 aix: Use assemble_name to output BSS section name.
The code to emit BSS CSECT needs to support user assembler name.

	* config/rs6000/rs6000.c (rs6000_xcoff_asm_output_aligned_decl_common):
	Use assemble_name to output BSS section name.
2021-06-06 16:40:02 -04:00
Uros Bizjak
09bf5279e8 i386: Clean up constraints.md
No functional changes.

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

gcc/
	* config/i386/constraints.md (Bs):
	Remove boolean operators from match_test RTX.
	(Bw): Ditto.
	(L): Ditto.
	(M): Use "mode" variable instead of GET_MODE (op) in match_test RTX.
	(Wz): Ditto.
2021-06-06 22:09:51 +02:00
Jakub Jelinek
cb4b99be48 openmp: Add testcase for scan directive with nested functions
> In convert_nonlocal_omp_clauses, the following clauses are
> missing: OMP_CLAUSE_AFFINITY, OMP_CLAUSE_DEVICE_TYPE,
> OMP_CLAUSE_EXCLUSIVE, OMP_CLAUSE_INCLUSIVE.

OMP_CLAUSE_{EXCLUSIVE,INCLUSIVE} isn't needed, because we don't
walk the clauses at all for GIMPLE_OMP_SCAN.  It would be a bug
if we used the exclusive/inclusive operands after gimplification,
but we apparently don't do that, all we check is whether the
OMP_CLAUSE_KIND of the first clause (all should be the same) is
OMP_CLAUSE_EXCLUSIVE or OMP_CLAUSE_INCLUSIVE, nothing else.

That said, I think we should have a testcase.

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

	* gcc.dg/gomp/scan-1.c: New test.
2021-06-06 19:39:50 +02:00
Jakub Jelinek
7fa4db39b6 openmp: Call c_omp_adjust_map_clauses even for combined target [PR100902]
When looking at in_reduction support for target, I've noticed that
c_omp_adjust_map_clauses is not called for the combined target case.

The following patch fixes it.

Unfortunately, there are other issues.

One is (also mentioned in the PR) that currently the pointer attachment
stuff seems to be clause ordering dependent (the standard says that clause
ordering on the same construct does not matter), the baz and qux cases
in the PR are rejected while when swapped it is accepted.
Note, the order of clauses in GCC really is treated as insignificant
initially and only later on the compiler can adjust the ordering (e.g. when
we sort map clauses based on what they refer to etc.) and in particular,
clauses from parsing is reverse of the order in user code, while
c_omp_split_clauses performed for combined/composite constructs typically
reverses that ordering, i.e. makes it follow the user code ordering.

And another one is I'm slightly afraid c_omp_adjust_map_clauses might
misbehave in templates, though haven't tried to verify it with testcases.
When processing_template_decl, the non-dependent clauses will be handled
usually the same as when not in a template, but dependent clauses aren't
processed or only limited processing is done there, and rest is deferred
till later.  From quick skimming of c_omp_adjust_map_clauses, it seems
it might not be very happy about non-processed map clauses that might
still have the TREE_LIST representation of array sections, or might
not have finalized decls or base decls etc.
So, for this I wonder if cp_parser_omp_target (and other cp/parser.c
callers of c_omp_adjust_map_clauses) shouldn't call it only
if (!processing_template_decl) - perhaps you could add
cp_omp_adjust_map_clauses wrapper that would be
if (!processing_template_decl)
  c_omp_adjust_map_clauses (...);
- and call c_omp_adjust_map_clauses from within pt.c after the clauses
are tsubsted and finish_omp_clauses is called again.

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

	PR c/100902
	* c-parser.c (c_parser_omp_target): Call c_omp_adjust_map_clauses
	even when target is combined with other constructs.

	* parser.c (cp_parser_omp_target): Call c_omp_adjust_map_clauses
	even when target is combined with other constructs.

	* c-c++-common/gomp/pr100902-1.c: New test.
2021-06-06 19:37:06 +02:00
Martin Liska
fcbbf786ae docs: Add missing @headitem for tables.
gcc/ChangeLog:

	* doc/extend.texi: Add missing @headitem.
	* doc/invoke.texi: Likewise.
	* doc/objc.texi: Likewise.
2021-06-06 19:05:51 +02:00
Martin Liska
0bc0e6173f genhooks: remove dead code
gcc/ChangeLog:

	* genhooks.c (emit_findices): Remove unused function.
	(emit_documentation): Do not call emit_findices
	and do not search for @Fcode directives.
2021-06-06 19:05:46 +02:00
Martin Liska
4e65bf5ace docs: remove extra character.
gcc/ChangeLog:

	* doc/invoke.texi: Remove extra character.
2021-06-06 16:56:18 +02:00
Eric Botcazou
a589877a00 Fix thinko in new warning on type punning for storage order purposes
In C, unlike in Ada, the storage order of arrays is that of their component
type, so you need to look at it when deciding to warn.  And the PR complains
about a bogus warning on the assignment of a pointer returned by alloca or
malloc, so this also fixes that.

gcc/c
	PR c/100920
	* c-decl.c (finish_struct): Fix thinko in previous change.
	* c-typeck.c (convert_for_assignment): Do not warn on pointer
	assignment and initialization for storage order purposes if the
	RHS is a call to a DECL_IS_MALLOC function.
gcc/testsuite/
	* gcc.dg/sso-14.c: New test.
2021-06-06 11:41:30 +02:00
GCC Administrator
28c6247505 Daily bump. 2021-06-06 00:16:22 +00:00
John David Anglin
a0864ce866 Use libiberty snprintf and vsnprintf on hppa*-*-hpux*.
libiberty/ChangeLog:

	PR target/100734
	* configure.ac: Use libiberty snprintf and vsnprintf on
	hppa*-*-hpux*.
	* configure: Regenerate.
2021-06-05 15:48:04 +00:00
Jeff Law
416904a2b6 Fix maintainers-verify.sh
* MAINTAINERS: Adjust my entry in the DCO section so that it does
	not trigger testsuite failures.
2021-06-05 09:55:33 -04:00
Kewen Lin
081c9dfb67 sh: Update unexpected empty split condition
gcc/ChangeLog:

	* config/sh/sh.md (doloop_end_split): Fix empty split condition.
2021-06-05 06:41:29 -05:00
Kewen Lin
10f36fe50c sparc: Update unexpected empty split condition
gcc/ChangeLog:

	* config/sparc/sparc.md (*snedi<W:mode>_zero_vis3,
	*neg_snedi<W:mode>_zero_subxc, *plus_snedi<W:mode>_zero,
	*plus_plus_snedi<W:mode>_zero, *minus_snedi<W:mode>_zero,
	*minus_minus_snedi<W:mode>_zero): Fix empty split condition.
2021-06-05 06:28:13 -05:00
Kewen Lin
8afd2e8229 or1k: Update unexpected empty split condition
gcc/ChangeLog:

	* config/or1k/or1k.md (*movdi): Fix empty split condition.
2021-06-05 06:28:03 -05:00
Kewen Lin
bdce6760c2 mips: Update unexpected empty split condition
gcc/ChangeLog:

	* config/mips/mips.md (<anonymous>, bswapsi2, bswapdi2): Fix empty
	split condition.
2021-06-05 06:27:47 -05:00
Kewen Lin
9147affc04 m68k: Update unexpected empty split condition
gcc/ChangeLog:

	* config/m68k/m68k.md (*zero_extend_inc, *zero_extend_dec,
	*zero_extendsidi2): Fix empty split condition.
2021-06-05 06:26:07 -05:00
José Rui Faustino de Sousa
d514626ee2 Fortran: Fix some issues with pointers to character.
gcc/fortran/ChangeLog:

	PR fortran/100120
	PR fortran/100816
	PR fortran/100818
	PR fortran/100819
	PR fortran/100821
	* trans-array.c (gfc_get_array_span): rework the way character
	array "span" was calculated.
	(gfc_conv_expr_descriptor): improve handling of character sections
	and unlimited polymorphic objects.
	* trans-expr.c (gfc_get_character_len): new function to calculate
	character string length.
	(gfc_get_character_len_in_bytes): new function to calculate
	character string length in bytes.
	(gfc_conv_scalar_to_descriptor): add call to set the "span".
	(gfc_trans_pointer_assignment): set "_len" and antecipate the
	initialization of the deferred character length hidden argument.
	* trans-intrinsic.c (gfc_conv_associated): set "force_no_tmp" to
	avoid the creation of a temporary.
	* trans-types.c (gfc_get_dtype_rank_type): rework type detection
	so that unlimited polymorphic objects get proper type infomation,
	also important for bind(c).
	(gfc_get_dtype): add argument to pass the rank if necessary.
	(gfc_get_array_type_bounds): cosmetic change to have character
	arrays called character instead of unknown.
	* trans-types.h (gfc_get_dtype): modify prototype.
	* trans.c (get_array_span): rework the way character array "span"
	was calculated.
	* trans.h (gfc_get_character_len): new prototype.
	(gfc_get_character_len_in_bytes): new prototype.
	Add "unlimited_polymorphic" flag to "gfc_se" type to signal when
	expression carries an unlimited polymorphic object.

libgfortran/ChangeLog:

	PR fortran/100120
	* intrinsics/associated.c (associated): have associated verify if
	the "span" matches insted of the "elem_len".
	* libgfortran.h (GFC_DESCRIPTOR_SPAN): add macro to retrive the
	descriptor "span".

gcc/testsuite/ChangeLog:

	PR fortran/100120
	* gfortran.dg/PR100120.f90: New test.
	PR fortran/100816
	PR fortran/100818
	PR fortran/100819
	PR fortran/100821
	* gfortran.dg/character_workout_1.f90: New test.
	* gfortran.dg/character_workout_4.f90: New test.
2021-06-05 11:12:50 +00:00
Jonathan Wakely
96963713f6 libstdc++: Fix return type of ranges::ssize for 128-bit integer [PR 100824]
Signed-off-by: Jonathan Wakely <jwakely@redhat.com>

libstdc++-v3/ChangeLog:

	PR libstdc++/100824
	* include/bits/ranges_base.h (_SSize): Return signed type.
	* testsuite/std/ranges/access/ssize.cc: Check with __int128.
2021-06-05 11:44:51 +01:00
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