Commit Graph

187713 Commits

Author SHA1 Message Date
Jeff Law 165446a1e8 Call reduce_vector_comparison_to_scalar_comparison earlier
As noted in the PR, we can get an ICE after the introduction of code to reduce a vector comparison to a scalar.  The problem is we left the operand cache in an inconsistent state because we called the new function too late.   This is trivially fixed by making the transformation before we call update_stmt_if_modified.

The irony here is the whole point of calling reduce_vector_comparison_to_scalar_comparison when we did was to expose these kinds of secondary opportunities.  In this particular case we collapsed the test to a comparison of constants (thus no SSA operands).

Anyway, this fixes the problem in the obvious way.  This may all end up being moot if I can twiddle Richi's match.pd pattern to work.  It doesn't work as-written due to a couple issues that I haven't worked totally through yet.

Installed on the trunk after bootstrap & regression testing on x86 and verifying it addresses the aarch64 issue.

gcc/
	PR tree-optimization/102152
	* tree-ssa-dom.c (dom_opt_dom_walker::optimize_stmt): Reduce a vector
	comparison to a scalar comparison before calling
	update_stmt_if_modified.

gcc/testsuite/
	PR tree-optimization/102152
	* gcc.dg/pr102152.c: New test
2021-09-01 19:13:58 -04:00
Andrew Pinski a45786e9a3 Fix target/101934: aarch64 memset code creates unaligned stores for -mstrict-align
The problem here is the aarch64_expand_setmem code did not check
STRICT_ALIGNMENT if it is creating an overlapping store.
This patch adds that check and the testcase works.

gcc/ChangeLog:

	PR target/101934
	* config/aarch64/aarch64.c (aarch64_expand_setmem):
	Check STRICT_ALIGNMENT before creating an overlapping
	store.

gcc/testsuite/ChangeLog:

	PR target/101934
	* gcc.target/aarch64/memset-strict-align-1.c: New test.
2021-09-01 20:58:00 +00:00
Jakub Jelinek c4d6dcacfc libcpp: Implement C++23 P1949R7 - C++ Identifier Syntax using Unicode Standard Annex 31
The following patch implements the
P1949R7 - C++ Identifier Syntax using Unicode Standard Annex 31
paper.  We already allow UTF-8 characters in the source, so that part
is already implemented, so IMHO all we need to do is pedwarn instead of
just warn for the (default) -Wnormalize=nfc (or for -Wnormalize={id,nkfc})
if the character is not in NFC and to use the unicode XID_Start and
XID_Continue derived code properties to find out what characters are allowed
(the standard actually adds U+005F to XID_Start, but we are handling the
ASCII compatible characters differently already and they aren't allowed
in UCNs in identifiers).  Instead of hardcoding the large tables
in ucnid.tab, this patch makes makeucnid.c read them from the Unicode
tables (13.0.0 version at this point).

For non-pedantic mode, we accept as 2nd+ char in identifiers a union
of valid characters in all supported modes, but for the 1st char it
was actually pedantically requiring that it is not any of the characters
that may not appear in the currently chosen standard as the first character.
This patch changes it such that also what is allowed at the start of an
identifier is a union of characters valid at the start of an identifier
in any of the pedantic modes.

2021-09-01  Jakub Jelinek  <jakub@redhat.com>

	PR c++/100977
libcpp/
	* include/cpplib.h (struct cpp_options): Add cxx23_identifiers.
	* charset.c (CXX23, NXX23): New enumerators.
	(CID, NFC, NKC, CTX): Renumber.
	(ucn_valid_in_identifier): Implement P1949R7 - use CXX23 and
	NXX23 flags for cxx23_identifiers.  For start character in
	non-pedantic mode, allow characters that are allowed as start
	characters in any of the supported language modes, rather than
	disallowing characters allowed only as non-start characters in
	current mode but for characters from other language modes allowing
	them even if they are never allowed at start.
	* init.c (struct lang_flags): Add cxx23_identifiers.
	(lang_defaults): Add cxx23_identifiers column.
	(cpp_set_lang): Initialize CPP_OPTION (pfile, cxx23_identifiers).
	* lex.c (warn_about_normalization): If cxx23_identifiers, use
	cpp_pedwarning_with_line instead of cpp_warning_with_line for
	"is not in NFC" diagnostics.
	* makeucnid.c: Adjust usage comment.
	(CXX23, NXX23): New enumerators.
	(all_languages): Add CXX23.
	(not_NFC, not_NFKC, maybe_not_NFC): Renumber.
	(read_derivedcore): New function.
	(write_table): Print also CXX23 and NXX23 columns.
	(main): Require 5 arguments instead of 4, call read_derivedcore.
	* ucnid.h: Regenerated using Unicode 13.0.0 files.
gcc/testsuite/
	* g++.dg/cpp23/normalize1.C: New test.
	* g++.dg/cpp23/normalize2.C: New test.
	* g++.dg/cpp23/normalize3.C: New test.
	* g++.dg/cpp23/normalize4.C: New test.
	* g++.dg/cpp23/normalize5.C: New test.
	* g++.dg/cpp23/normalize6.C: New test.
	* g++.dg/cpp23/normalize7.C: New test.
	* g++.dg/cpp23/ucnid-1-utf8.C: New test.
	* g++.dg/cpp23/ucnid-2-utf8.C: New test.
	* gcc.dg/cpp/ucnid-4.c: Don't expect
	"not valid at the start of an identifier" errors.
	* gcc.dg/cpp/ucnid-4-utf8.c: Likewise.
	* gcc.dg/cpp/ucnid-5-utf8.c: New test.
2021-09-01 22:33:06 +02:00
Andrew Pinski 852fdc23a2 Add MIPS Linux support to gcc.misc-tests/linkage.c (testsuite/51748)
This adds MIPS Linux support to gcc.misc-tests/linkage.exp.  Basically
copying what was done for MIPS IRIX and changing the options to be correct.

OK?

gcc/testsuite/ChangeLog:

	PR testsuite/51748
	* gcc.misc-tests/linkage.exp: Add mips*-linux-* support.
2021-09-01 19:48:17 +00:00
Martin Sebor ece28da924 Enable ranger and caching in pass_waccess.
gcc/ChangeLog:

	* gimple-ssa-warn-access.cc (get_size_range): Add argument.
	(check_access): Pass additional argument.
	(check_memop_access): Remove template and make a member function.
	(maybe_check_dealloc_call): Make a pass_waccess member function.
	(class pass_waccess): Add, rename, and remove members.
	(pass_waccess::pass_waccess): Adjust to name change.
	(pass_waccess::~pass_waccess): Same.
	(check_alloca): Make a member function.
	(check_alloc_size_call): Same.
	(check_strcat): Same.
	(check_strncat): Same.
	(check_stxcpy): Same.
	(check_stxncpy): Same.
	(check_strncmp): Same.
	(maybe_warn_rdwr_sizes): Rename...
	(pass_waccess::maybe_check_access_sizes): ...to this.
	(pass_waccess::check_call): Adjust to name changes.
	(pass_waccess::maybe_check_dealloc_call): Make a pass_waccess member
	function.
	(pass_waccess::execute): Adjust to name changes.
	* gimple-ssa-warn-access.h (check_memop_access): Remove.
	* pointer-query.cc (access_ref::phi): Handle null pointer.
	(access_ref::inform_access): Same.
	(pointer_query::put_ref): Modify a cached value, not a copy of it.
	(pointer_query::dump): New function.
	(compute_objsize_r): Avoid overwriting access_ref::bndrng.  Cache
	more results.
	* pointer-query.h (pointer_query::dump): Declare.
	* tree-ssa-strlen.c (get_range): Simplify.  Use function query.
	(dump_strlen_info): Use function query.
	(printf_strlen_execute): Factor code out into pointer_query::put_ref.

gcc/testsuite/ChangeLog:

	* gcc.dg/Wstringop-overflow-11.c: Remove xfails.
	* gcc.dg/Wstringop-overflow-12.c: Same.
	* gcc.dg/Wstringop-overflow-43.c: Add xfails.
	* gcc.dg/Wstringop-overflow-73.c: New test.
2021-09-01 13:46:19 -06:00
Jason Merrill ac6e77aacf libcpp: __VA_OPT__ tweak
> We want to remove the latter <placemarker> but not the former one, and
> the patch adds the vaopt_padding_tokens counter for it to control
> how many placemarkers are removed on vaopt_state::END.
> As can be seen in #c1 and #c2 of the PR, I've tried various approaches,
> but neither worked out for all the cases except the posted one.

I notice that the second placemarker you mention is avoid_paste, which seems
relevant.  This seems to also work, at least it doesn't seem to break any of
the va_opt tests.

2021-09-01  Jason Merrill  <jason@redhat.com>

	* macro.c (replace_args): When __VA_OPT__ is on the LHS of ##,
	remove trailing avoid_paste tokens.
2021-09-01 21:33:30 +02:00
Jakub Jelinek e928cf47f3 libcpp: __VA_OPT__ p1042r1 placemarker changes [PR101488]
So, besides missing #__VA_OPT__ patch for which I've posted patch last week,
P1042R1 introduced some placemarker changes for __VA_OPT__, most notably
the addition of before "removal of placemarker tokens," rescanning ...
and the
 #define H4(X, ...) __VA_OPT__(a X ## X) ## b
H4(, 1)  // replaced by a b
example mentioned there where we replace it currently with ab

The following patch are the minimum changes (except for the
__builtin_expect) that achieve the same preprocessing between current
clang++ and patched gcc on all the testcases I've tried (i.e. gcc __VA_OPT__
testsuite in c-c++-common/cpp/va-opt* including the new test and the clang
clang/test/Preprocessor/macro_va_opt* testcases).

At one point I was trying to implement the __VA_OPT__(args) case as if
for non-empty __VA_ARGS__ it expanded as if __VA_OPT__( and ) were missing,
but from the tests it seems that is not how it should work, in particular
if after (or before) we have some macro argument and it is not followed
(or preceded) by ##, then it should be macro expanded even when __VA_OPT__
is after ## or ) is followed by ##.  And it seems that not removing any
padding tokens isn't possible either, because the expansion of the arguments
typically has a padding token at the start and end and those at least
according to the testsuite need to go.  It is unclear if it would be enough
to remove just one or if all padding tokens should be removed.
Anyway, e.g. the previous removal of all padding tokens at the end of
__VA_OPT__ is undesirable, as it e.g. eats also the padding tokens needed
for the H4 example from the paper.

2021-09-01  Jakub Jelinek  <jakub@redhat.com>

	PR preprocessor/101488
	* macro.c (replace_args): Fix up handling of CPP_PADDING tokens at the
	start or end of __VA_OPT__ arguments when preceeded or followed by ##.

	* c-c++-common/cpp/va-opt-3.c: Adjust expected output.
	* c-c++-common/cpp/va-opt-7.c: New test.
2021-09-01 21:31:25 +02:00
Marek Polacek 7c5003c687 c++: Add test for fixed PR [PR101592]
Fixed by my c++/99701 patch.

	PR c++/101592

gcc/testsuite/ChangeLog:

	* g++.dg/warn/Wlogical-op-3.C: New test.
2021-09-01 15:17:28 -04:00
Iain Sandoe fbb334a6ac libiberty, configure, Darwin: Avoid detecting deprecated sbrk.
Darwin provides an implementation of sbrk, which is detected by
the configuration process.  However, it is deprecated which leads
to build warnings.  The malloc-based implementation is more
suitable.  This patch removes sbrk from the functions searched
for Darwin.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>

libiberty/ChangeLog:

	* configure: Regenerate.
	* configure.ac: Do not search for sbrk on Darwin.
	* xmalloc.c: Do not declare sbrk unless it has been found
	by configure.
2021-09-01 19:34:07 +01:00
Harald Anlauf a88280cff3 Fortran - improve wording of error message
gcc/fortran/ChangeLog:

	PR fortran/56985
	* resolve.c (resolve_common_vars): Fix grammar and improve wording
	of error message rejecting an unlimited polymorphic in COMMON.
2021-09-01 19:05:47 +02:00
Sebastian Huber 7a6f40d045 Fix arm target build with inhibit_libc
Do not declare abort in "libgcc/unwind-arm-common.inc" since it is already
provided by "tsystem.h".  It fixes the following build error:

In file included from libgcc/config/arm/unwind-arm.c:144:
libgcc/unwind-arm-common.inc:55:24: error: macro "abort" passed 1 arguments, but takes just 0
   55 | extern void abort (void);

libgcc/

	* unwind-arm-common.inc (abort): Remove.
2021-09-01 17:50:00 +02:00
Thomas Schwinge 424e460157 Simplify 'gcc/tree.c:walk_tree_1' handling of 'OMP_CLAUSE'
No behavioral change, other than that for a few clauses, operands are now
walked in a different order, and 'OMP_CLAUSE_ERROR' now no longer runs into
'default: gcc_unreachable ();' here (but instead will at some later stage).

Follow-up for r110243 (commit aaf46ef979)
"Fix PR 25886.  Convert OMP_CLAUSE_* into sub-codes".

	gcc/
	* tree.c (walk_tree_1) <OMP_CLAUSE>: Simplify.
2021-09-01 17:39:14 +02:00
Iain Sandoe 1cef3039b8 Objective-C, NeXT: Fix messenging non-aggregate return-in-memory.
When a method returns a type that the platform ABI says should be
returned in memory, and that is done by a hidden 'sret' parameter,
the message send calls must be adjusted to inform the runtime that
the sret parameter is present.  As reported in the PR, this is not
working for non-aggregate types that use this mechanism.  The fix
here is to adjust the logic such that all return values that flag
'in memory' are considered to use the mechanism *unless* they
provide a struct_value_rtx *and* the return object is an aggregate.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>

PR objc/101718 - Objective-C frontend emits wrong code to call methods returning scalar types returned in memory

	PR objc/101718

gcc/objc/ChangeLog:

	* objc-next-runtime-abi-02.c (build_v2_build_objc_method_call):
	Revise for cases where scalar objects use an sret parameter.
	(next_runtime_abi_02_build_objc_method_call): Likwise.
2021-09-01 15:23:05 +01:00
Iain Sandoe 8433baadec C-family: Add attribute 'unavailable'.
If an interface is marked 'deprecated' then, presumably, at some point it
will be withdrawn and no longer available.  The 'unavailable' attribute
makes it possible to mark up interfaces to indicate this status.  It is used
quite extensively in some codebases where a single set of headers can be used
to permit code generation for multiple system versions.

From a configuration perspective, it also allows a compile test to determine
that an interface is missing - rather than requiring a link test.

The implementation follows the pattern of attribute deprecated, but produces
an error (where deprecation produces a warning).

This attribute has been implemented in clang for some years.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>

gcc/c-family/ChangeLog:

	* c-attribs.c (handle_unavailable_attribute): New.

gcc/c/ChangeLog:

	* c-decl.c (enum deprecated_states): Add unavailable state.
	(merge_decls): Copy unavailability.
	(quals_from_declspecs): Handle unavailable case.
	(start_decl): Amend the logic handling suppression of nested
	deprecation states to include unavailability.
	(smallest_type_quals_location): Amend comment.
	(grokdeclarator): Handle the unavailable deprecation state.
	(declspecs_add_type): Set TREE_UNAVAILABLE from the decl specs.
	* c-tree.h (struct c_declspecs): Add unavailable_p.
	* c-typeck.c (build_component_ref): Handle unavailability.
	(build_external_ref): Likewise.

gcc/cp/ChangeLog:

	* call.c (build_over_call): Handle unavailable state in addition to
	deprecation.
	* class.c (type_build_ctor_call): Likewise.
	(type_build_dtor_call): Likewise.
	* cp-tree.h: Rename cp_warn_deprecated_use to
	cp_handle_deprecated_or_unavailable.
	* decl.c (duplicate_decls): Merge unavailability.
	(grokdeclarator): Handle unavailability in addition to deprecation.
	(type_is_unavailable): New.
	(grokparms): Handle unavailability in addition to deprecation.
	* decl.h (enum deprecated_states): Add
	UNAVAILABLE_DEPRECATED_SUPPRESS.
	* decl2.c (cplus_decl_attributes): Propagate unavailability to
	templates.
	(cp_warn_deprecated_use): Rename to ...
	(cp_handle_deprecated_or_unavailable): ... this and amend to handle
	the unavailable case. It remains a warning in the case of deprecation
	but becomes an error in the case of unavailability.
	(cp_warn_deprecated_use_scopes): Handle unavailability.
	(mark_used): Likewise.
	* parser.c (cp_parser_template_name): Likewise.
	(cp_parser_template_argument): Likewise.
	(cp_parser_parameter_declaration_list): Likewise.
	* typeck.c (build_class_member_access_expr): Likewise.
	(finish_class_member_access_expr): Likewise.
	* typeck2.c (build_functional_cast_1): Likewise.

gcc/ChangeLog:

	* doc/extend.texi: Document unavailable attribute.
	* print-tree.c (print_node): Handle unavailable attribute.
	* tree-core.h (struct tree_base): Add a bit to carry unavailability.
	* tree.c (error_unavailable_use): New.
	* tree.h (TREE_UNAVAILABLE): New.
	(error_unavailable_use): New.

gcc/objc/ChangeLog:

	* objc-act.c (objc_add_property_declaration): Register unavailable
	attribute.
	(maybe_make_artificial_property_decl): Set available.
	(objc_maybe_build_component_ref): Generalise to the method prototype
	to count availability.
	(objc_build_class_component_ref): Likewise.
	(build_private_template): Likewise.
	(objc_decl_method_attributes): Handle unavailable attribute.
	(lookup_method_in_hash_lists): Amend comments.
	(objc_finish_message_expr): Handle unavailability in addition to
	deprecation.
	(start_class): Likewise.
	(finish_class): Likewise.
	(lookup_protocol): Likewise.
	(objc_declare_protocol): Likewise.
	(start_protocol): Register unavailable attribute.
	(really_start_method): Likewise.
	(objc_gimplify_property_ref): Emit error on encountering an
	unavailable entity (and a warning for a deprecated one).

gcc/testsuite/ChangeLog:

	* g++.dg/ext/attr-unavailable-1.C: New test.
	* g++.dg/ext/attr-unavailable-2.C: New test.
	* g++.dg/ext/attr-unavailable-3.C: New test.
	* g++.dg/ext/attr-unavailable-4.C: New test.
	* g++.dg/ext/attr-unavailable-5.C: New test.
	* g++.dg/ext/attr-unavailable-6.C: New test.
	* g++.dg/ext/attr-unavailable-7.C: New test.
	* g++.dg/ext/attr-unavailable-8.C: New test.
	* g++.dg/ext/attr-unavailable-9.C: New test.
	* gcc.dg/attr-unavailable-1.c: New test.
	* gcc.dg/attr-unavailable-2.c: New test.
	* gcc.dg/attr-unavailable-3.c: New test.
	* gcc.dg/attr-unavailable-4.c: New test.
	* gcc.dg/attr-unavailable-5.c: New test.
	* gcc.dg/attr-unavailable-6.c: New test.
	* obj-c++.dg/attributes/method-unavailable-1.mm: New test.
	* obj-c++.dg/attributes/method-unavailable-2.mm: New test.
	* obj-c++.dg/attributes/method-unavailable-3.mm: New test.
	* obj-c++.dg/property/at-property-unavailable-1.mm: New test.
	* obj-c++.dg/property/at-property-unavailable-2.mm: New test.
	* obj-c++.dg/property/dotsyntax-unavailable-1.mm: New test.
	* objc.dg/attributes/method-unavailable-1.m: New test.
	* objc.dg/attributes/method-unavailable-2.m: New test.
	* objc.dg/attributes/method-unavailable-3.m: New test.
	* objc.dg/property/at-property-unavailable-1.m: New test.
	* objc.dg/property/at-property-unavailable-2.m: New test.
	* objc.dg/property/dotsyntax-unavailable-1.m: New test.
2021-09-01 15:09:38 +01:00
Iain Sandoe 21b4d0ef54 coroutines : Add a missed begin/finish else clause to the codegen.
Minor code-gen correction.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>

gcc/cp/ChangeLog:

	* coroutines.cc (build_actor_fn): Add begin/finish clauses
	to the initial test in the actor function.
2021-09-01 14:26:03 +01:00
Iain Sandoe 8406ed9af2 coroutines: No cleanups on goto statements.
Minor cleanup, this is statement not an expression, we do not
need to use finish_expr_stmt here.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>

gcc/cp/ChangeLog:

	* coroutines.cc (await_statement_walker): Use build_stmt and
	add_stmt instead of build1 and finish_expr_stmt.
2021-09-01 14:23:16 +01:00
Iain Buclaw fcc0c84cf5 libphobos: Update comment for DRUNTIME_OS_SOURCES
libphobos/ChangeLog:

	* m4/druntime/os.m4: Update comment for DRUNTIME_OS_SOURCES.
2021-09-01 14:19:35 +02:00
Iain Buclaw 53cfed5cc9 libphobos: Don't add zlib when ENABLE_LIBDRUNTIME_ONLY
The D run-time library does not depend on zlib, so only include it in
the library when Phobos is being built as well.

libphobos/ChangeLog:

	* src/Makefile.am: Don't add zlib when ENABLE_LIBDRUNTIME_ONLY.
	* src/Makefile.in: Regenerate.
2021-09-01 14:19:35 +02:00
Jakub Jelinek bea07159d1 vectorizer: Fix up vectorization using WIDEN_MINUS_EXPR [PR102124]
The following testcase is miscompiled on aarch64-linux at -O3 since the
introduction of WIDEN_MINUS_EXPR.
The problem is if the inner type (half_type) is unsigned and the result
type in which the subtraction is performed (type) has precision more than
twice as larger as the inner type's precision.
For other widening operations like WIDEN_{PLUS,MULT}_EXPR, if half_type
is unsigned, the addition/multiplication result in itype is also unsigned
and needs to be zero-extended to type.
But subtraction is special, even when half_type is unsigned, the subtraction
behaves as signed (also regardless of whether the result type is signed or
unsigned), 0xfeU - 0xffU is -1 or 0xffffffffU, not 0x0000ffff.

I think it is better not to use mixed signedness of types in
WIDEN_MINUS_EXPR (have unsigned vector of operands and signed result
vector), so this patch instead adds another cast to make sure we always
sign-extend the result from itype to type if type is wider than itype.

2021-09-01  Jakub Jelinek  <jakub@redhat.com>

	PR tree-optimization/102124
	* tree-vect-patterns.c (vect_recog_widen_op_pattern): For ORIG_CODE
	MINUS_EXPR, if itype is unsigned with smaller precision than type,
	add an extra cast to signed variant of itype to ensure sign-extension.

	* gcc.dg/torture/pr102124.c: New test.
2021-09-01 13:40:43 +02:00
Martin Liska a61623d9b3 graph output: use better colors for edges
gcc/ChangeLog:

	* graph.c (draw_cfg_node_succ_edges): Do not color fallthru
	  edges and rather use colors for TRUE and FALSE edges.
2021-09-01 13:33:04 +02:00
Richard Biener 13a43a90ae tree-optimization/93491 - avoid PRE of trapping calls across exits
This makes us avoid PREing calls that could trap across other
calls that might not return.  The PR88087 testcase has exactly
such case so I've refactored the testcase to contain a valid PRE.
I've also adjusted PRE to not consider pure calls possibly
not returning in line with what we do elsewhere.

Note we don't have a good idea whether a function always returns
normally or whether its body is known to never trap.  That's
something IPA could compute.

2021-09-01  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/93491
	* tree-ssa-pre.c (compute_avail): Set BB_MAY_NOTRETURN
	after processing the stmt itself.  Do not consider
	pure functions possibly not returning.  Properly avoid
	adding possibly trapping calls to EXP_GEN when there's
	a preceeding possibly not returning call.
	* tree-ssa-sccvn.c (vn_reference_may_trap): Conservatively
	not handle calls.

	* gcc.dg/torture/pr93491.c: New testcase.
	* gcc.dg/tree-ssa/pr88087.c: Change to valid PRE opportunity.
2021-09-01 12:56:13 +02:00
Richard Biener 153766ec83 tree-optimization/102139 - fix SLP DR base alignment
When doing whole-function SLP we have to make sure the recorded
base alignments we compute as the maximum alignment seen for a
base anywhere in the function is actually valid at the point
we want to make use of it.

To make this work we now record the stmt the alignment was derived
from in addition to the DRs innermost behavior and we use a
dominance check to verify the recorded info is valid when doing
BB vectorization.  For this to work for groups inside a BB that are
separate by a call that might not return we now store the DR
analysis group-id permanently and use that for an additional check
when the DRs are in the same BB.

2021-08-31  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/102139
	* tree-vectorizer.h (vec_base_alignments): Adjust hash-map
	type to record a std::pair of the stmt-info and the innermost
	loop behavior.
	(dr_vec_info::group): New member.
	* tree-vect-data-refs.c (vect_record_base_alignment): Adjust.
	(vect_compute_data_ref_alignment): Verify the recorded
	base alignment can be used.
	(data_ref_pair): Remove.
	(dr_group_sort_cmp): Adjust.
	(vect_analyze_data_ref_accesses): Store the group-ID in the
	dr_vec_info and operate on a vector of dr_vec_infos.

	* gcc.dg/torture/pr102139.c: New testcase.
2021-09-01 12:54:14 +02:00
YunQiang Su ea1a16420c MAINTAINERS: Add YunQiang Su for write after approval
ChangeLog:
	* MAINTAINERS: Add myself for write after approval.
2021-09-01 18:19:12 +08:00
YunQiang Su 7c922606b7 md/define_c_enum: support value assignation
Currently, the enums from define_c_enum and define_enum can only
has values one by one from 0.

In fact we can support the behaviour just like C, aka like
  (define_enum "mips_isa" [(mips1 1) mips2 (mips32 32) mips32r2]),
then we can get
  enum mips_isa {
    MIPS_ISA_MIPS1 = 1,
    MIPS_ISA_MIPS2 = 2,
    MIPS_ISA_MIPS32 = 32,
    MIPS_ISA_MIPS32R2 = 33
  };

gcc/ChangeLog:
	* read-md.c (md_reader::handle_enum): support value assignation.
	* doc/md.texi: record define_c_enum value assignation support.
2021-09-01 18:12:17 +08:00
Jakub Jelinek 45ff12512e bswap: Fix up bswap_view_convert handling [PR102141]
bswap_view_convert is used twice in spots where gsi_insert_before is the
right thing, but in the last one it wants to insert preparation stmts
for the VIEW_CONVERT_EXPR emitted with gsi_insert_after, where at the
gsi we still need to insert bswap_stmt and maybe mask_stmt whose lhs
the preparation stmts will use.
So, this patch adds a BEFORE argument to the function and emits the
preparation statements before or after depending on that.

2021-09-01  Jakub Jelinek  <jakub@redhat.com>

	PR tree-optimization/102141
	* gimple-ssa-store-merging.c (bswap_view_convert): Add BEFORE
	argument.  If false, emit stmts after gsi instead of before, and
	with GSI_NEW_STMT.
	(bswap_replace): Adjust callers.  When converting output of bswap,
	emit VIEW_CONVERT prepratation stmts after a copy of gsi instead
	of before it.

	* gcc.dg/pr102141.c: New test.
2021-09-01 12:06:25 +02:00
Richard Biener e6bd9c42b0 tree-optimization/102149 - add testcase for fixed bug
This adds the testcase from the PR.

2021-09-01  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/102149
	* gcc.dg/torture/pr102149.c: New testcase.
2021-09-01 09:50:59 +02:00
Roger Sayle 823685221d C: PR c/79412: Poison decls with error_mark_node after type mismatch
This patch fixes an ICE during error-recovery regression in the C front-end.
The symptom is that the middle-end's sanity checking assertions fail during
gimplification when being asked to increment an array, which is non-sense.
The issue is that the C-front end has detected the type mismatch and
reported an error to the user, but hasn't provided any indication of this
to the middle-end, simply passing bogus trees that the optimizers recognize
as invalid.

This appears to be a frequently reported ICE with 94730, 94731, 101036
and 101365 all marked as duplicates.

I believe the correct (polite) fix is to mark the mismatched types as
problematic/dubious in the front-end, when the error is spotted, so that
the middle-end has a heads-up and can be a little more forgiving.  This
patch to c-decl.c's duplicate_decls sets (both) mismatched types to
error_mark_node if they are significantly different, and we've issued
an error message.  Alas, this is too punitive for FUNCTION_DECLs where
we store return types, parameter lists, parameter types and attributes
in the type, but fortunately the middle-end is already more cautious
about trusting possibly suspect function types.

This fix required one minor change to the testsuite, typedef-var-2.c
where after conflicting type definitions, we now no longer assume that
the (first or) second definition is the correct one.  This change only
affects the behaviour after seen_error(), so should be relatively safe.

2021-09-01  Roger Sayle  <roger@nextmovesoftware.com>
	    Joseph Myers  <joseph@codesourcery.com>

gcc/c/ChangeLog
	PR c/79412
	* c-decl.c (duplicate_decls): On significant mismatches, mark the
	types of both (non-function) decls as error_mark_node, so that the
	middle-end can see the code is malformed.
	(free_attr_access_data): Don't process if the type has been set to
	error_mark_node.

gcc/testsuite/ChangeLog
	PR c/79412
	* gcc.dg/pr79412.c: New test case.
	* gcc.dg/typedef-var-2.c: Update expeted errors.
2021-09-01 08:38:39 +01:00
liuhongt d2874d9056 Get rid of all float-int special cases in validate_subreg.
gcc/ChangeLog:

	* emit-rtl.c (validate_subreg): Get rid of all float-int
	special cases.
2021-09-01 09:08:00 +08:00
liuhongt 508fa61b63 Revert "Make sure we're playing with integral modes before call extract_integral_bit_field."
This reverts commit 7218c2ec36.

     PR middle-end/102133
2021-09-01 09:07:58 +08:00
GCC Administrator 6d51ee4321 Daily bump. 2021-09-01 00:16:58 +00:00
Jason Merrill 9c6344c10d c++: Various small fixes
A copy-paste error, a couple of missed checks to guard undefined accesses,
and we don't need to use type_uses_auto to extract the auto node we just
built.

gcc/cp/ChangeLog:

	* coroutines.cc (flatten_await_stmt): Fix copyo.
	* decl.c (reshape_init_class): Simplify.
	* module.cc (module_state::read_language): Add null check.
	* parser.c (build_range_temp): Avoid type_uses_auto.
	(cp_parser_class_specifier_1): Add null check.
2021-08-31 15:54:25 -04:00
Harald Anlauf e4cb3bb9ac Fortran - extend set of substring expressions handled in length simplification
gcc/fortran/ChangeLog:

	PR fortran/100950
	* simplify.c (substring_has_constant_len): Minimize checks for
	substring expressions being allowed.

gcc/testsuite/ChangeLog:

	PR fortran/100950
	* gfortran.dg/pr100950.f90: Extend coverage.
2021-08-31 21:00:53 +02:00
Jonathan Wakely ef7becc9c8 libstdc++: Add valid range checks to std::span constructors [PR98421]
Signed-off-by: Jonathan Wakely <jwakely@redhat.com>

libstdc++-v3/ChangeLog:

	PR libstdc++/98421
	* include/std/span (span(Iter, size_type), span(Iter, Iter)):
	Add valid range checks.
	* testsuite/23_containers/span/cons_1_assert_neg.cc: New test.
	* testsuite/23_containers/span/cons_2_assert_neg.cc: New test.
2021-08-31 19:13:55 +01:00
Patrick Palka f1e7319956 c++: check arity before deduction w/ explicit targs [PR12672]
During overload resolution, when the arity of a function template
clearly disagrees with the arity of the call, no specialization of the
function template could yield a viable candidate.  The deduction routine
type_unification_real already notices this situation, but not before
it substitutes explicit template arguments into the template, a step
which could induce a hard error.  Although it's necessary to perform
this substitution first in order to check arity perfectly (since the
substitution can e.g. expand a non-trailing parameter pack), in most
cases we can determine ahead of time whether there's an arity
disagreement without needing to perform deduction at all.

To that end, this patch implements an (approximate) arity check in
add_template_candidate_real that guards actual deduction.  It's enabled
only when there are explicit template arguments since that's when
deduction can force otherwise avoidable template instantiations.  (I
experimented with enabling it unconditionally as an optimization, and
observed some improvements to compile time of about 5% but also some
slowdowns of about the same magnitude, so kept it conditional.)

In passing, this adds a least_p parameter to arity_rejection for sake
of consistent diagnostics with unify_arity.

A couple of testcases needed to be adjusted so that deduction continues
to occur as intended after this change.  Except in unify6.C, where we
were expecting foo<void ()> to be ill-formed due to substitution
forming a function type with an added 'const', but ISTM this is
permitted by [dcl.fct]/7, so I changed the test accordingly.

	PR c++/12672

gcc/cp/ChangeLog:

	* call.c (rejection_reason::call_varargs_p): Rename this
	previously unused member to ...
	(rejection_reason::least_p): ... this.
	(arity_rejection): Add least_p parameter.
	(add_template_candidate_real): When there are explicit
	template arguments, check that the arity of the call agrees with
	the arity of the function before attempting deduction.
	(print_arity_information): Add least_p parameter.
	(print_z_candidate): Adjust call to print_arity_information.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp0x/decltype29.C: Adjust.
	* g++.dg/template/error56.C: Adjust.
	* g++.old-deja/g++.pt/unify6.C: Adjust.
	* g++.dg/template/explicit-args7.C: New test.
2021-08-31 13:31:10 -04:00
Thomas Schwinge 92dc5d844a Fix 'OMP_CLAUSE_TILE' operands handling in 'gcc/tree.c:walk_tree_1'
In r245300 (commit 02889d23ee)
"OpenACC tile clause support" that one had changed to three operands,
similar to 'OMP_CLAUSE_COLLAPSE'.

There is no (existing) test case where this seems to matter (likewise
for 'OMP_CLAUSE_COLLAPSE'), but it's good to be consistent.

	gcc/
	* tree.c (walk_tree_1) <OMP_CLAUSE_TILE>: Handle three operands.
2021-08-31 19:28:54 +02:00
Thomas Schwinge 22e6b32700 [OMP] Standardize on 'omp_privatize_by_reference'
... instead of 'omp_is_reference' vs.
'lang_hooks.decls.omp_privatize_by_reference'.

	gcc/
	* omp-general.h (omp_is_reference): Rename to...
	(omp_privatize_by_reference): ... this.  Adjust all users...
	* omp-general.c: ... here, ...
	* gimplify.c: ... here, ...
	* omp-expand.c: ... here, ...
	* omp-low.c: ... here.
2021-08-31 19:28:31 +02:00
Martin Sebor b3aa3288a9 Avoid valid Coverity warning for comparing array to zero.
* gimple-ssa-warn-access.cc (maybe_warn_alloc_args_overflow): Test
	pointer element for equality to zero, not that of the cotaining
	array.
2021-08-31 11:16:37 -06:00
Martin Sebor e4d2305adf Disable gcc_rich_location copying and assignment.
gcc/cp/ChangeLog:

	* parser.c (cp_parser_selection_statement): Use direct initialization
	instead of copy.

gcc/ChangeLog:

	* gcc-rich-location.h (gcc_rich_location): Make ctor explicit.

libcpp/ChangeLog:

	* include/line-map.h (class rich_location): Disable copying and
	assignment.
2021-08-31 11:15:21 -06:00
Martin Sebor e45d5b6bf1 Add attribute returns nonnull to get_range_query.
gcc/ChangeLog:
	* function.h (function): Add comments.
	(get_range_query): Same.  Add attribute returns nonnull.
2021-08-31 11:13:29 -06:00
Jonathan Wakely 1cacdef0d1 libstdc++: Fix broken autoconf check for O_NONBLOCK
Signed-off-by: Jonathan Wakely <jwakely@redhat.com>

libstdc++-v3/ChangeLog:

	* configure.ac: Fix checks for F_GETFL, F_SETFL and O_NONBLOCK.
	* configure: Regenerate.
2021-08-31 17:38:27 +01:00
Jonathan Wakely f63e86f797 libstdc++: Remove redundant noexcept-specifier on definitions
These destructors are noexcept anyway. I removed the redundant noexcept
from the error_category destructor's declaration in r0-123475, but
didn't remove it from the defaulted definition in system_error.cc. That
causes warnings if the library is built with Clang.

This removes the redundant noexcept from ~error_category and
~system_error and adds tests to ensure they really are noexcept.

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

libstdc++-v3/ChangeLog:

	* src/c++11/system_error.cc (error_category::~error_category()):
	Remove noexcept-specifier.
	(system_error::~system_error()): Likewise.
	* testsuite/19_diagnostics/error_category/noexcept.cc: New test.
	* testsuite/19_diagnostics/system_error/noexcept.cc: New test.
2021-08-31 17:36:12 +01:00
Jonathan Wakely 763eb1f192 libstdc++: Add missing return for atomic timed wait [PR102074]
This adds a missing return statement to the non-futex wait-until
operation.

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

libstdc++-v3/ChangeLog:

	PR libstdc++/102074
	* include/bits/atomic_timed_wait.h (__timed_waiter_pool)
	[!_GLIBCXX_HAVE_PLATFORM_TIMED_WAIT]: Add missing return.
2021-08-31 17:36:12 +01:00
Jonathan Wakely feec7ef667 libstdc++: Improve error handling in Net TS name resolution
Signed-off-by: Jonathan Wakely <jwakely@redhat.com>

libstdc++-v3/ChangeLog:

	* include/experimental/internet (__make_resolver_error_code):
	Handle EAI_SYSTEM errors.
	(basic_resolver_results): Use __make_resolver_error_code. Use
	Glibc NI_MAXHOST and NI_MAXSERV values for buffer sizes.
2021-08-31 17:36:11 +01:00
Jonathan Wakely 48b20d46f9 libstdc++: Fix ip::tcp::resolver test failure on Solaris
Solaris 11 does not have "http" in /etc/services, which causes this test
to fail. Try some other services until we find one that works.

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

libstdc++-v3/ChangeLog:

	* testsuite/experimental/net/internet/resolver/ops/lookup.cc:
	Try other service if "http" fails.
2021-08-31 17:36:11 +01:00
Roger Sayle 863d6524f3 [Committed] Fix subreg_promoted_mode breakage on various platforms.
My apologies for the inconvenience.  My recent patch to preserve
SUBREG_PROMOTED_VAR_P on (extend:HI (subreg/s:QI (reg:SI))), and other
places in the middle-end, has broken the build on several targets.

The change to convert_modes inadvertently used the same
subreg_promoted_mode idiom for retrieving the mode of a SUBREG_REG
as the existing code just a few lines earlier.  Alas in the meantime,
the original SUBREG gets replaced by one without SUBREG_PROMOTED_VAR_P,
the whole raison-d'etre for my patch, and I'd not realized/noticed
that subreg_promoted_mode asserts for this.  Alas neither the bootstrap
and regression test on x86_64-pc-linux-gnu nor my testing on nvptx-none
must have hit this particular case.  The logic of this transformation
is sound, it's the implementation that's bitten me.

This patch has been committed, after another "make bootstrap" on
x86_64-pc-linux-gnu (just in case), and confirmation/pre-approval
from Jeff Law that this indeed fixes the build failures seen on
several platforms.

My humble apologies again.

2021-08-31  Roger Sayle  <roger@nextmovesoftware.com>

gcc/ChangeLog
	* expr.c (convert_modes): Don't use subreg_promoted_mode on a
	SUBREG if it can't be guaranteed to a SUBREG_PROMOTED_VAR_P set.
	Instead use the standard (safer) is_a <scalar_int_mode> idiom.
2021-08-31 17:25:58 +01:00
Jason Merrill 17dc903ed3 c++: use iloc_sentinel in another place
Another place we can use iloc_sentinel instead of explicitly saving and
restoring input_location.

gcc/cp/ChangeLog:

	* constexpr.c (explain_invalid_constexpr_fn): Use iloc_sentinel.
2021-08-31 12:17:44 -04:00
Jason Merrill 9aeadd8c31 c++: Improve error recovery with constexpr [PR92193]
The compiler tries to limit error cascades in limit_bad_template_recursion
by avoiding triggering a new instantiation from one that has caused errors.
We were exempting constexpr functions from this because they can be needed
for constant evaluation, but as more and more functions get marked
constexpr, this becomes an over-broad category.  So as suggested on IRC,
this patch only exempts functions that are needed for mandatory constant
evaluation.

As noted in the comment, this flag doesn't particularly need to use a bit in
the FUNCTION_DECL, but there were still some free.

	PR c++/92193

gcc/cp/ChangeLog:

	* cp-tree.h (FNDECL_MANIFESTLY_CONST_EVALUATED): New.
	* constexpr.c (cxx_eval_call_expression): Set it.
	* pt.c (neglectable_inst_p): Check it.

gcc/testsuite/ChangeLog:

	* g++.dg/diagnostic/static_assert4.C: New test.
2021-08-31 12:17:19 -04:00
Jeff Law 18f0e57b9a Restore intent of data-sym-multi-pool test
gcc/testsuite
	* gcc.target/mips/mips.exp: Add tree-vrp to mips_option_group.
	* gcc.target/mips/data-sym-multi-pool.c: Add -fno-tree-vrp.
2021-08-31 11:08:50 -04:00
Jeff Law d158c3f777 More stabs removal.
gcc/

	* config.gcc (cris-*-elf, cris-*-none): Remove dbxelf.h from
	tm_file.
	(m32r-*-elf, m32rle-*-elf, m32r-*-linux): Likewise.
	(mn10300-*-*, am33_2.0-*-linux*): Likewise.
	(xtensa*-*-elf, xtensa*-*-linux, xtensa*-*-uclinux): Likewise.
	(m32c-*-elf*, m32c-*-rtems*): Likewise.
	* config/cris/cris.h (DBX_NO_XREFS): Remove.
	(DBX_CONTIN_LENGTH, DBX_CONTIN_CHAR): Likewise.
	* config/m32r/m32r.h (DBXOUT_SOURCE_LINE): Likewise.
	(DBX_DEBUGGING_INFO, DBX_CONTIN_LENGTH): Likewise.
	* config/mn10300/mn10300.h (DEFAULT_GDB_EXTENSIONS): Likewise.
	* config/mn10300/linux.h (DBX_REGISTER_NAMES): Likewise.
2021-08-31 09:54:42 -04:00
Jakub Jelinek eca730231d testsuite: Fix gcc.dg/vect/pr101145* tests [PR101145]
I'm getting:
FAIL: gcc.dg/vect/pr101145.c scan-tree-dump-times vect "vectorized 1 loops" 7
FAIL: gcc.dg/vect/pr101145_1.c scan-tree-dump-times vect "vectorized 1 loops" 2
FAIL: gcc.dg/vect/pr101145_2.c scan-tree-dump-times vect "vectorized 1 loops" 2
FAIL: gcc.dg/vect/pr101145_3.c scan-tree-dump-times vect "vectorized 1 loops" 2
FAIL: gcc.dg/vect/pr101145.c -flto -ffat-lto-objects  scan-tree-dump-times vect "vectorized 1 loops" 7
FAIL: gcc.dg/vect/pr101145_1.c -flto -ffat-lto-objects  scan-tree-dump-times vect "vectorized 1 loops" 2
FAIL: gcc.dg/vect/pr101145_2.c -flto -ffat-lto-objects  scan-tree-dump-times vect "vectorized 1 loops" 2
FAIL: gcc.dg/vect/pr101145_3.c -flto -ffat-lto-objects  scan-tree-dump-times vect "vectorized 1 loops" 2
on i686-linux (or x86_64-linux with -m32/-mno-sse).
The problem is that those tests use dg-options, which in */vect/ testsuite
throws away all the carefully added default options to enable vectorization
on each target (and which e.g. vect_int etc. effective targets rely on).
The old way would be to name those tests gcc.dg/vect/O3-pr101145*,
but we can also use dg-additional-options (which doesn't throw the default
options, just appends to them) which is IMO better so that we don't have to
rename the tests.

2021-08-31  Jakub Jelinek  <jakub@redhat.com>

	PR tree-optimization/101145
	* gcc.dg/vect/pr101145.c: Use dg-additional-options with just -O3
	instead of dg-options with -O3 -fdump-tree-vect-details.
	* gcc.dg/vect/pr101145_1.c: Likewise.
	* gcc.dg/vect/pr101145_2.c: Likewise.
	* gcc.dg/vect/pr101145_3.c: Likewise.
2021-08-31 15:26:14 +02:00