Commit Graph

177536 Commits

Author SHA1 Message Date
Iain Sandoe a9eec9625e coroutines: Make call argument handling more robust [PR95440]
build_new_method_call is supposed to be able to handle a null
arguments list pointer (when the method has no parms).  There
were a couple of places where uses of the argument list pointer
were not defended against NULL.

gcc/cp/ChangeLog:

	PR c++/95440
	* call.c (add_candidates): Use vec_safe_length() for
	testing the arguments list.
	(build_new_method_call_1): Use vec_safe_is_empty() when
	checking for an empty args list.

gcc/testsuite/ChangeLog:

	PR c++/95440
	* g++.dg/coroutines/pr95440.C: New test.
2020-06-10 20:02:45 +01:00
Martin Sebor a2c2cee92e PR middle-end/95353 - spurious -Wstringop-overflow writing to a trailing array plus offset
Also resolves:
PR middle-end/92939 - missing -Wstringop-overflow on negative index from the end of array

gcc/ChangeLog:

	PR middle-end/95353
	PR middle-end/92939
	* builtins.c (inform_access): New function.
	(check_access): Call it.  Add argument.
	(addr_decl_size): Remove.
	(get_range): New function.
	(compute_objsize): New overload.  Only use compute_builtin_object_size
	with raw memory function.
	(check_memop_access): Pass new argument to compute_objsize and
	check_access.
	(expand_builtin_memchr, expand_builtin_strcat): Same.
	(expand_builtin_strcpy, expand_builtin_stpcpy_1): Same.
	(expand_builtin_stpncpy, check_strncat_sizes): Same.
	(expand_builtin_strncat, expand_builtin_strncpy): Same.
	(expand_builtin_memcmp): Same.
	* builtins.h (check_nul_terminated_array): Declare extern.
	(check_access): Add argument.
	(struct access_ref, struct access_data): New structs.
	* gimple-ssa-warn-restrict.c (clamp_offset): New helper.
	(builtin_access::overlap): Call it.
	* tree-object-size.c (decl_init_size): Declare extern.
	(addr_object_size): Correct offset computation.
	* tree-object-size.h (decl_init_size): Declare.
	* tree-ssa-strlen.c (handle_integral_assign): Remove a call
	to maybe_warn_overflow when assigning to an SSA_NAME.

gcc/testsuite/ChangeLog:

	PR middle-end/95353
	PR middle-end/92939
	* c-c++-common/Wstringop-truncation.c: Remove an xfail.
	* gcc.dg/Warray-bounds-46.c: Remove a bogus warning.
	* gcc.dg/Wrestrict-9.c: Disable -Wstringop-overflow.
	* gcc.dg/Wstringop-overflow-12.c: Remove xfails.
	* gcc.dg/Wstringop-overflow-28.c: Same.
	* gcc.dg/builtin-stringop-chk-4.c: Same.
	* gcc.dg/builtin-stringop-chk-5.c: Same.
	* gcc.dg/builtin-stringop-chk-8.c: Same.
	* gcc.dg/strlenopt-74.c: Avoid buffer overflow.
	* gcc.dg/Wstringop-overflow-34.c: New test.
	* gcc.dg/Wstringop-overflow-35.c: New test.
	* gcc.dg/Wstringop-overflow-36.c: New test.
	* gcc.dg/Wstringop-overflow-37.c: New test.
	* gcc.dg/Wstringop-overflow-38.c: New test.
2020-06-10 12:02:12 -06:00
François Dumont 3a391adf7a libstdc++: Extend memcmp optimization in std::lexicographical_compare
Make the memcmp optimization work for std::deque iterators and safe
iterators.

Co-authored-by: Jonathan Wakely  <jwakely@redhat.com>

libstdc++-v3/ChangeLog:

2020-06-08  François Dumont  <fdumont@gcc.gnu.org>
	    Jonathan Wakely  <jwakely@redhat.com>

	* include/bits/deque.tcc (__lex_cmp_dit): New.
	(__lexicographical_compare_aux1): Define overloads for deque
	iterators.
	* include/bits/stl_algobase.h (__lexicographical_compare::__3way):
	New static member function.
	(__lexicographical_compare<true>::__3way): Likewise.
	(__lexicographical_compare<true>::__lc): Use __3way.
	(__lexicographical_compare_aux): Rename to
	__lexicographical_compare_aux1 and declare overloads for deque
	iterators.
	(__lexicographical_compare_aux): Define new forwarding function
	that calls __lexicographical_compare_aux1 and declare new overloads
	for safe iterators.
	(lexicographical_compare): Do not use __niter_base on
	parameters.
	* include/debug/safe_iterator.tcc
	(__lexicographical_compare_aux): Define overloads for safe
	iterators.
	* testsuite/25_algorithms/lexicographical_compare/1.cc: Add
	checks with random access iterators.
	* testsuite/25_algorithms/lexicographical_compare/deque_iterators/1.cc:
	New test.
2020-06-10 17:48:56 +01:00
Richard Biener 371cc68337 avoid stmt-info allocation for debug stmts
The following avoids allocating stmt info structs for debug stmts.

2020-06-10  Richard Biener  <rguenther@suse.de>

	* tree-vect-loop.c (vect_determine_vectorization_factor):
	Skip debug stmts.
	(_loop_vec_info::_loop_vec_info): Likewise.
	(vect_update_vf_for_slp): Likewise.
	(vect_analyze_loop_operations): Likewise.
	(update_epilogue_loop_vinfo): Likewise.
	* tree-vect-patterns.c (vect_determine_precisions): Likewise.
	(vect_pattern_recog): Likewise.
	* tree-vect-slp.c (vect_detect_hybrid_slp): Likewise.
	(_bb_vec_info::_bb_vec_info): Likewise.
	* tree-vect-stmts.c (vect_mark_stmts_to_be_vectorized):
	Likewise.
2020-06-10 18:08:29 +02:00
Richard Biener 36e95a9e53 tree-optimization/95576 - fix compare-debug issue with SLP vectorization
The following avoids leading debug stmts in BB vectorizer regions.

2020-06-10  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/95576
	* tree-vect-slp.c (vect_slp_bb): Skip leading debug stmts.

	* g++.dg/vect/pr95576.cc: New testcase.
2020-06-10 18:06:41 +02:00
z00219097 b5cebc9ab7 aarch64: Fix an ICE in register_tuple_type [PR95523]
When registering the tuple type in register_tuple_type, the
TYPE_ALIGN (tuple_type) will be changed by -fpack-struct=n. We need to
maintain natural alignment in handle_arm_sve_h.

2020-06-10  Haijian Zhang  <z.zhanghaijian@huawei.com>

gcc/
	PR target/95523
	* config/aarch64/aarch64-sve-builtins.h
	(sve_switcher::m_old_maximum_field_alignment): New member.
	* config/aarch64/aarch64-sve-builtins.cc
	(sve_switcher::sve_switcher): Save maximum_field_alignment in
	m_old_maximum_field_alignment and clear maximum_field_alignment.
	(sve_switcher::~sve_switcher): Restore maximum_field_alignment.

gcc/testsuite/
	PR target/95523
	* gcc.target/aarch64/sve/pr95523.c: New test.
2020-06-10 16:58:51 +01:00
Arnaud Charlet 73266be246 [Ada] AI12-0364 Add a modular atomic arithmetic package
2020-06-10  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

	* libgnat/s-aomoar.ads, libgnat/s-aomoar.adb: New files.
	* libgnat/s-atopar.ads: Move...
	* libgnat/s-aoinar.ads: Here.
	* libgnat/s-atopar.adb: Move...
	* libgnat/s-aoinar.adb: Here.
	* impunit.adb: Update list of runtime files.
	* Makefile.rtl (GNATRTL_NONTASKING_OBJS=): Adjust.
2020-06-10 10:30:57 -04:00
Martin Liska 50ff02b534
gcc-changelog: fix parse_git_name_status for renames.
Renamed files are listed in the following format:

M	gcc/ada/Makefile.rtl
M	gcc/ada/impunit.adb
R097	gcc/ada/libgnat/s-atopar.adb	gcc/ada/libgnat/s-aoinar.adb
R095	gcc/ada/libgnat/s-atopar.ads	gcc/ada/libgnat/s-aoinar.ads
A	gcc/ada/libgnat/s-aomoar.adb
A	gcc/ada/libgnat/s-aomoar.ads

So 'R' is followed by a percentage number.

contrib/ChangeLog:

	* gcc-changelog/git_commit.py: Fix renamed files in
	parse_git_name_status.
	* gcc-changelog/test_email.py: Add test for it.
2020-06-10 16:07:10 +02:00
Marek Polacek 4fed5d5dd8 c++: Fix ICE with delayed parsing of noexcept-specifier [PR95562]
Here we ICE because a DEFERRED_PARSE expression leaked to tsubst_copy.
We create these expressions for deferred noexcept-specifiers in
cp_parser_save_noexcept; they are supposed to be re-parsed in
cp_parser_late_noexcept_specifier.  In this case we never got around
to re-parsing it because the noexcept-specifier was attached to a
pointer to a function, not to a function declaration.  But we should
not have delayed the parsing here in the first place; we already
avoid delaying the parsing for alias-decls, typedefs, and friend
function declarations.  (Clang++ also doesn't delay the parsing
for pointers to function.)

gcc/cp/ChangeLog:

	PR c++/95562
	* parser.c (cp_parser_direct_declarator): Clear
	CP_PARSER_FLAGS_DELAY_NOEXCEPT if the declarator kind is not
	cdk_id.

gcc/testsuite/ChangeLog:

	PR c++/95562
	* g++.dg/cpp0x/noexcept60.C: New test.
2020-06-10 09:36:02 -04:00
Arnaud Charlet 2db262f29a [Ada] AI12-0311 New checks for language-defined units
2020-06-10  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

	* snames.ads-tmpl (Name_Characters_Assertion_Check,
	Name_Containers_Assertion_Check,
	Name_Interfaces_Assertion_Check, Name_IO_Assertion_Check,
	Name_Numerics_Assertion_Check, Name_Strings_Assertion_Check,
	Name_System_Assertion_Check): New constants.
	* types.ads (Characters_Assertion_Check,
	Containers_Assertion_Check, Interfaces_Assertion_Check,
	IO_Assertion_Check, Numerics_Assertion_Check,
	Strings_Assertion_Check, System_Assertion_Check): New constants.
	(All_Checks): Update accordingly.
2020-06-10 09:35:02 -04:00
Ghjuvan Lacambre 8439cae845 [Ada] Don't build equivalent record aggregate if type has predicates
2020-06-10  Ghjuvan Lacambre  <lacambre@adacore.com>

gcc/ada/

	* exp_ch3.adb (Build_Equivalent_Record_Aggregate): Return Empty
	if Etype of record component has predicates.
2020-06-10 09:35:02 -04:00
Arnaud Charlet 76e0721abb [Ada] Ada 202x AI12-0192 "requires late initialization"
2020-06-10  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

	* exp_ch3.adb (Build_Init_Statements): Implement the notion of
	"require late initialization".
2020-06-10 09:35:02 -04:00
Eric Botcazou 5c0c89cb16 [Ada] Add missing Sloc on new explicit dereferences
2020-06-10  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* sem_util.adb (Copy_And_Maybe_Dereference): Temporarily copy
	the parent node of the original tree when dereferencing.
2020-06-10 09:35:01 -04:00
Ed Schonberg f95fb9d019 [Ada] Additional warnings on overlapping actuals of composite types
2020-06-10  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* sem_warn.adb (Warn_On_Overlapping_Actuals): Add a warning when
	two actuals in a call overlap, both are composite types that may
	be passed by reference, and only one of them is writable.
2020-06-10 09:35:01 -04:00
Eric Botcazou 67a44a4c10 [Ada] Implement AI12-0162 Memberships and Unchecked_Unions
2020-06-10  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* exp_ch4.adb (Expand_N_In): Use an expression with actions to
	insert the PE raise statement for the Unchecked_Union case.
2020-06-10 09:35:01 -04:00
Eric Botcazou e156631a27 [Ada] Remove obsolete code in Resolve_Call
2020-06-10  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* sem_ch4.adb (Analyze_Call): Use idiomatic condition.
	* sem_res.adb (Resolve_Call): Remove obsolete code.
2020-06-10 09:35:01 -04:00
Eric Botcazou 2378f3eb81 [Ada] Insert explicit dereferences when building actual subtype
2020-06-10  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* sem_util.adb (Copy_And_Maybe_Dereference): New function.
	(Build_Access_Record_Constraint): Use it to copy the prefix.
	(Build_Actual_Array_Constraint): Likewise.
	(Build_Actual_Record_Constraint): Likewise.
2020-06-10 09:35:00 -04:00
Bob Duff b9daf13c93 [Ada] Disable unwanted warnings in Assertion_Policy(Ignore) mode
2020-06-10  Bob Duff  <duff@adacore.com>

gcc/ada/

	* sem_prag.adb (Invariant): Remove the pragma removing code.  It
	doesn't work to remove the pragma, because various flags are set
	during Build_Invariant_Procedure_Declaration and
	Build_Invariant_Procedure_Body that need to be set to avoid the
	spurious warnings.
	* exp_util.adb (Make_Invariant_Call): Avoid calling the
	invariant-checking procedure if the body is empty. This is an
	optimization.
2020-06-10 09:35:00 -04:00
Vasiliy Fofanov 9c62140e82 [Ada] Fix gnatmetric switches description
2020-06-10  Vasiliy Fofanov  <fofanov@adacore.com>

gcc/ada/

	* doc/gnat_ugn/gnat_utility_programs.rst: Fix gnatmetric
	switches description.
2020-06-10 09:35:00 -04:00
Arnaud Charlet 536c271ca7 [Ada] Update headers
2020-06-10  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

	* repinfo-input.ads, repinfo-input.adb, repinfo.adb,
	repinfo.ads: Update header.
2020-06-10 09:34:59 -04:00
Eric Botcazou e67df677b4 [Ada] Improve code generated for dynamic discriminated aggregate
2020-06-10  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* exp_aggr.adb (In_Place_Assign_OK): Do not necessarily return
	false for a type with discriminants.
	(Convert_To_Assignments): Use Parent_Node and Parent_Kind more
	consistently.  In the in-place assignment case, first apply a
	discriminant check if need be, and be prepared for a rewritten
	aggregate as a result.
2020-06-10 09:34:59 -04:00
Arnaud Charlet 3aeb5ebe95 [Ada] Remove more references to ASIS
2020-06-10  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

	* atree.adb, contracts.adb, debug.adb, freeze.adb,
	repinfo-input.adb, repinfo.adb, sem_attr.adb, sem_ch10.adb,
	sem_ch13.adb, sem_ch3.adb, sem_ch5.adb, sem_ch6.adb,
	sem_ch8.adb, sem_ch9.adb, sem_disp.adb, sem_eval.adb,
	sem_prag.adb: Remove more references to ASIS.
2020-06-10 09:34:59 -04:00
Arnaud Charlet a53b03b5a7 [Ada] Fix typo in exception message
2020-06-10  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

	* libgnat/s-secsta.adb (Round_Up): Fix typo in exception
	message.
2020-06-10 09:34:59 -04:00
Piotr Trojanek 9c4b4975bb [Ada] Fix minor typo in comment of membership choice parsing
2020-06-10  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

	* par-ch4.adb (P_Membership_Test): Fix typo in a grammar rule.
2020-06-10 09:34:58 -04:00
Piotr Trojanek 8ecc34842c [Ada] Revert workaround for expansion of Enum_Rep in GNATprove mode
2020-06-10  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

	* exp_spark.adb (Expand_SPARK_N_Attribute_Reference): Remove
	expansion of First and Last attributes.
2020-06-10 09:34:58 -04:00
Piotr Trojanek c64ac479d3 [Ada] Fold Enum_Rep attribute in evaluation and not in expansion
2020-06-10  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

	* exp_attr.adb (Expand_N_Attribute_Reference): Remove folding
	for Enum_Rep attribute.
	* exp_spark.adb (Expand_SPARK_N_Attribute_Reference): Remove
	duplicated code for folding Enum_Rep attribute.
	* sem_attr.adb (Eval_Attribute): Relax condition for folding
	Enum_Rep attribute; previously dead code is now executed when
	the attribute prefix is an enumeration literal; refine type in
	processing of Enum_Val.
2020-06-10 09:34:58 -04:00
Javier Miranda 4322f3d99b [Ada] Classwide controlled obj not dispatching
2020-06-10  Javier Miranda  <miranda@adacore.com>

gcc/ada/

	* sem_ch3.adb (Analyze_Declarations): Adjust the machinery that
	takes care of late body overriding of initialize, adjust,
	finalize.  Remove ASIS mode code.
2020-06-10 09:34:58 -04:00
Ed Schonberg dc419b9f8d [Ada] Ada_2020 AI12-0220: Pre/Postconditions on Access_To_Subprogram types
2020-06-10  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* einfo.ads (Access_Subprogram_Wrapper): New attribute of
	Subprogram_Type entities. Denotes subprogram constructed for
	Access_To_Subprogram types that include pre- and postconditions.
	* einfo.adb: Subprogram bodies for Access_Subprogram_Wrapper.
	* exp_ch6.adb (Expand_Call): An indirect call through an
	Access_To_subprogram that includes contracts is rewritten as a
	call to the corresponding Access_ ubprogram_Wrapper. Handle
	derived types that inherit contract from parent.
	* sem_prag.adb (Build_Access_Subprogram_Wrapper): Build
	subprogram declaration for subprogram that incorporates the
	contracts of an Access_To_Subprogram type declaration. Build
	corresponding body and attach it to freeze actions for type.
	* sem_util.ads, sem_util.adb (Is_Access_Subprogram_Wrapper):
	Utility that uses signature of the subprogram to determine
	whether it is a generated wrapper for an Access_To_Subprogram
	type.
2020-06-10 09:34:57 -04:00
Ghjuvan Lacambre 057548bc5f [Ada] Fix assertion failure on functions with contracts
2020-06-10  Ghjuvan Lacambre  <lacambre@adacore.com>

gcc/ada/

	* par-ch6.adb (P_Subprogram): Make sure the specification
	belongs to a procedure.
2020-06-10 09:34:57 -04:00
Piotr Trojanek 3ea9566495 [Ada] Simplify detection of static membership choices
2020-06-10  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

	* sem_ch13.adb (All_Membership_Choices_Static): Assert an AST
	property documented in sinfo.ads and simplify an excessive
	condition.
2020-06-10 09:34:57 -04:00
Piotr Trojanek 414e7520e6 [Ada] Minor fix style and typos in comments
2020-06-10  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

	* exp_attr.adb (Expand_N_Attribute_Reference): Fix a copy-paste
	mistake in comment.
	* sem_res.adb (Flag_Effectively_Volatile_Objects): Fix a type in
	the SPARK RM rule number.
	* exp_ch4.adb, sem_util.adb: Fix style in single line comments.
2020-06-10 09:34:56 -04:00
Piotr Trojanek bbfd4f21c0 [Ada] Remove unreferenced GNATprove utility routine Get_Low_Bound
2020-06-10  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

	* sem_aux.ads, sem_aux.adb (Get_Low_Bound): Remove.
2020-06-10 09:34:56 -04:00
Arnaud Charlet 640ef7149e [Ada] Remove Determine_License
2020-06-10  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

	* scn.adb (Determine_License): Remove.
2020-06-10 09:34:56 -04:00
Justin Squirek 948590aa28 [Ada] Incorrect accessibility checks on functions calls
2020-06-10  Justin Squirek  <squirek@adacore.com>

gcc/ada/

	* exp_ch3.adb (Expand_N_Object_Declaration): Add condition to
	handle processing of objects initialized by a call to a function
	return an anonymous access type.
	* exp_ch6.adb, exp_ch6.ads
	(Has_Unconstrained_Access_Discriminants): Moved to sem_util.adb
	(Needs_Result_Accessibility_Level): Moved to sem_util.adb
	* sem_util.adb, sem_util.ads
	(Has_Unconstrained_Access_Discriminants): Moved from exp_ch6.adb
	(Needs_Result_Accessibility_Level): Moved from exp_ch6.adb
	* sem_res.adb (Valid_Conversion): Add condition for the special
	case where the operand of a conversion is the result of an
	anonymous access type
2020-06-10 09:34:56 -04:00
Ghjuvan Lacambre 71c4a2b356 [Ada] Reject illegal bodies for null procedures
2020-06-10  Ghjuvan Lacambre  <lacambre@adacore.com>

gcc/ada/

	* par-ch6.adb (P_Subprogram): Reject duplicate subprogram
	declarations.
2020-06-10 09:34:55 -04:00
Eric Botcazou 895cf059f0 [Ada] Fix incorrect insertion of post-call actions in if-expression
2020-06-10  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* exp_ch6.adb (Insert_Post_Call_Actions): Deal with the context
	of an if-expression and with a call written in prefixed notation.
2020-06-10 09:34:55 -04:00
Gary Dismukes c392a00149 [Ada] Minor reformatting and some typo fixes
2020-06-10  Gary Dismukes  <dismukes@adacore.com>

gcc/ada/

	* einfo.ads: Minor reformatting of a comment.
	* exp_aggr.adb: Minor reformatting and a grammar correction.
	* exp_attr.adb: Minor reformatting and a typo fix in some
	comments.
	* sem_ch12.adb: Fix three typos in comments.
2020-06-10 09:34:55 -04:00
Richard Biener f25161bdcc Make {SLP_TREE,STMT_VINFO}_VEC_STMTS a vector of gimple *
This makes {SLP_TREE,STMT_VINFO}_VEC_STMTS a vector of gimple * and
not allocate a stmt_vec_info for vectorizer generated stmts since
this is now possible after removing the only use which was chaining
of vector stmts via STMT_VINFO_RELATED_STMT.

This also removes all stmt_vec_info allocations done for vector
stmts, the remaining ones are for stmts in the scalar IL and for
patterns which are not part of the IL.  Thus after this the stmt
UIDs inside a basic-block are suitable for dominance checking
if you ignore (or lazy-fill) UIDs of zero of the vector stmts
inserted during transform.  This property is ensured by a new
flag set when pattern analysis is complete.

2020-06-10  Richard Biener  <rguenther@suse.de>

	* tree-vectorizer.h (_slp_tree::vec_stmts): Make it a vector
	of gimple * stmts.
	(_stmt_vec_info::vec_stmts): Likewise.
	(vec_info::stmt_vec_info_ro): New flag.
	(vect_finish_replace_stmt): Adjust declaration.
	(vect_finish_stmt_generation): Likewise.
	(vectorizable_induction): Likewise.
	(vect_transform_reduction): Likewise.
	(vectorizable_lc_phi): Likewise.
	* tree-vect-data-refs.c (vect_create_data_ref_ptr): Do not
	allocate stmt infos for increments.
	(vect_record_grouped_load_vectors): Adjust.
	* tree-vect-loop.c (vect_create_epilog_for_reduction): Likewise.
	(vectorize_fold_left_reduction): Likewise.
	(vect_transform_reduction): Likewise.
	(vect_transform_cycle_phi): Likewise.
	(vectorizable_lc_phi): Likewise.
	(vectorizable_induction): Likewise.
	(vectorizable_live_operation): Likewise.
	(vect_transform_loop): Likewise.
	* tree-vect-patterns.c (vect_pattern_recog): Set stmt_vec_info_ro.
	* tree-vect-slp.c (vect_get_slp_vect_def): Adjust.
	(vect_get_slp_defs): Likewise.
	(vect_transform_slp_perm_load): Likewise.
	(vect_schedule_slp_instance): Likewise.
	(vectorize_slp_instance_root_stmt): Likewise.
	* tree-vect-stmts.c (vect_get_vec_defs_for_operand): Likewise.
	(vect_finish_stmt_generation_1): Do not allocate a stmt info.
	(vect_finish_replace_stmt): Do not return anything.
	(vect_finish_stmt_generation): Likewise.
	(vect_build_gather_load_calls): Adjust.
	(vectorizable_bswap): Likewise.
	(vectorizable_call): Likewise.
	(vectorizable_simd_clone_call): Likewise.
	(vect_create_vectorized_demotion_stmts): Likewise.
	(vectorizable_conversion): Likewise.
	(vectorizable_assignment): Likewise.
	(vectorizable_shift): Likewise.
	(vectorizable_operation): Likewise.
	(vectorizable_scan_store): Likewise.
	(vectorizable_store): Likewise.
	(vectorizable_load): Likewise.
	(vectorizable_condition): Likewise.
	(vectorizable_comparison): Likewise.
	(vect_transform_stmt): Likewise.
	* tree-vectorizer.c (vec_info::vec_info): Initialize
	stmt_vec_info_ro.
	(vec_info::replace_stmt): Copy over stmt UID rather than
	unsetting/setting a stmt info allocating a new UID.
	(vec_info::set_vinfo_for_stmt): Assert !stmt_vec_info_ro.
2020-06-10 15:13:06 +02:00
Aldy Hernandez 1396fa5b91 Merge evrp uses of substitute_and_fold_engine into the engine itself.
This patch merges the evrp uses of the substitute and fold engine into
the engine itself, at least the parts that can be re-used by other
engine uses.  It also adds a context parameter to get_value() for
further use.

gcc/
	* gimple-loop-versioning.cc (loop_versioning::name_prop::get_value):
	Add stmt parameter.
	* gimple-ssa-evrp.c (class evrp_folder): New.
	(class evrp_dom_walker): Remove.
	(execute_early_vrp): Use evrp_folder instead of evrp_dom_walker.
	* tree-ssa-ccp.c (ccp_folder::get_value): Add stmt parameter.
	* tree-ssa-copy.c (copy_folder::get_value): Same.
	* tree-ssa-propagate.c (substitute_and_fold_engine::replace_uses_in):
	Pass stmt to get_value.
	(substitute_and_fold_engine::replace_phi_args_in): Same.
	(substitute_and_fold_dom_walker::after_dom_children): Call
	post_fold_bb.
	(substitute_and_fold_dom_walker::foreach_new_stmt_in_bb): New.
	(substitute_and_fold_dom_walker::propagate_into_phi_args): New.
	(substitute_and_fold_dom_walker::before_dom_children): Adjust to
	call virtual functions for folding, pre_folding, and post folding.
	Call get_value with PHI.  Tweak dump.
	* tree-ssa-propagate.h (class substitute_and_fold_engine):
	New argument to get_value.
	New virtual function pre_fold_bb.
	New virtual function post_fold_bb.
	New virtual function pre_fold_stmt.
	New virtual function post_new_stmt.
	New function propagate_into_phi_args.
	* tree-vrp.c (vrp_folder::get_value): Add stmt argument.
	* vr-values.c (vr_values::extract_range_from_stmt): Adjust dump
	output.
	(vr_values::fold_cond): New.
	(vr_values::simplify_cond_using_ranges_1): Call fold_cond.
	* vr-values.h (class vr_values): Add
	simplify_cond_using_ranges_when_edge_is_known.
gcc/testsuite/
	* gcc.dg/tree-ssa/ssa-dse-30.c: Adjust test for folding of
	memmove happening later.
2020-06-10 15:09:37 +02:00
Martin Liska 8b6731e674
Add missing store in emission of asan_stack_free.
gcc/ChangeLog:

2020-05-19  Martin Liska  <mliska@suse.cz>

	PR sanitizer/94910
	* asan.c (asan_emit_stack_protection): Emit
	also **SavedFlagPtr(FakeStack, class_id) = 0 in order to release
	a stack frame.
2020-06-10 13:19:08 +02:00
Tamar Christina df81764ba1 AArch64: Adjust costing of by element MUL to be the same as SAME3 MUL.
The cost model is currently treating multiplication by element as being more
expensive than 3 same multiplication.  This means that if the value is on the
SIMD side we add an unneeded DUP.  If the value is on the genreg side we use the
more expensive DUP instead of fmov.

This patch corrects the costs such that the two multiplies are costed the same
which allows us to generate

        fmul    v3.4s, v3.4s, v0.s[0]

instead of

        dup     v0.4s, v0.s[0]
        fmul    v3.4s, v3.4s, v0.4s

gcc/ChangeLog:

	* config/aarch64/aarch64.c (aarch64_rtx_mult_cost): Adjust costs for mul.

gcc/testsuite/ChangeLog:

	* gcc.target/aarch64/asimd-mull-elem.c: New test.
2020-06-10 11:55:46 +01:00
Richard Biener b05d5563f4 Introduce STMT_VINFO_VEC_STMTS
This gets rid of the linked list of STMT_VINFO_VECT_STMT and
STMT_VINFO_RELATED_STMT in preparation for vectorized stmts no
longer needing a stmt_vec_info (just for this chaining).  This
has ripple-down effects in all places we gather vectorized
defs.  For this new interfaces are introduced and used
throughout vectorization, simplifying code in a lot of places
and merging it with the SLP way of gathering vectorized
operands.  There is vect_get_vec_defs as the new recommended
unified interface and vect_get_vec_defs_for_operand as one
for non-SLP operation.  I've resorted to keep the structure
of the code the same where using vect_get_vec_defs would have
been too disruptive for this already large patch.

2020-06-10  Richard Biener  <rguenther@suse.de>

	* tree-vect-data-refs.c (vect_vfa_access_size): Adjust.
	(vect_record_grouped_load_vectors): Likewise.
	* tree-vect-loop.c (vect_create_epilog_for_reduction): Likewise.
	(vectorize_fold_left_reduction): Likewise.
	(vect_transform_reduction): Likewise.
	(vect_transform_cycle_phi): Likewise.
	(vectorizable_lc_phi): Likewise.
	(vectorizable_induction): Likewise.
	(vectorizable_live_operation): Likewise.
	(vect_transform_loop): Likewise.
	* tree-vect-slp.c (vect_get_slp_defs): New function, split out
	from overload.
	* tree-vect-stmts.c (vect_get_vec_def_for_operand_1): Remove.
	(vect_get_vec_def_for_operand): Likewise.
	(vect_get_vec_def_for_stmt_copy): Likewise.
	(vect_get_vec_defs_for_stmt_copy): Likewise.
	(vect_get_vec_defs_for_operand): New function.
	(vect_get_vec_defs): Likewise.
	(vect_build_gather_load_calls): Adjust.
	(vect_get_gather_scatter_ops): Likewise.
	(vectorizable_bswap): Likewise.
	(vectorizable_call): Likewise.
	(vectorizable_simd_clone_call): Likewise.
	(vect_get_loop_based_defs): Remove.
	(vect_create_vectorized_demotion_stmts): Adjust.
	(vectorizable_conversion): Likewise.
	(vectorizable_assignment): Likewise.
	(vectorizable_shift): Likewise.
	(vectorizable_operation): Likewise.
	(vectorizable_scan_store): Likewise.
	(vectorizable_store): Likewise.
	(vectorizable_load): Likewise.
	(vectorizable_condition): Likewise.
	(vectorizable_comparison): Likewise.
	(vect_transform_stmt): Adjust and remove no longer applicable
	sanity checks.
	* tree-vectorizer.c (vec_info::new_stmt_vec_info): Initialize
	STMT_VINFO_VEC_STMTS.
	(vec_info::free_stmt_vec_info): Relase it.
	* tree-vectorizer.h (_stmt_vec_info::vectorized_stmt): Remove.
	(_stmt_vec_info::vec_stmts): Add.
	(STMT_VINFO_VEC_STMT): Remove.
	(STMT_VINFO_VEC_STMTS): New.
	(vect_get_vec_def_for_operand_1): Remove.
	(vect_get_vec_def_for_operand): Likewise.
	(vect_get_vec_defs_for_stmt_copy): Likewise.
	(vect_get_vec_def_for_stmt_copy): Likewise.
	(vect_get_vec_defs): New overloads.
	(vect_get_vec_defs_for_operand): New.
	(vect_get_slp_defs): Declare.
2020-06-10 12:05:36 +02:00
Qian Chao 6d9ef0621f
tmmark: verify_ssa failed [PR95569]
This patch fixes a latent bug exposed by eb72dc663e.
See the discussion on the bug for details.

Bootstrapped and regtested on aarch64-linux-gnu. No new fails introduced.

2020-06-10  Qian Chao  <qianchao9@huawei.com>

gcc/ChangeLog:

	PR tree-optimization/95569
	* trans-mem.c (expand_assign_tm): Ensure that rtmp is marked TREE_ADDRESSABLE.

gcc/testsuite/ChangeLog:

	PR tree-optimization/95569
	* gcc.dg/tm/pr95569.c: New test.
2020-06-10 11:05:06 +02:00
Martin Liska dc6d15eaa2
Add gcc_assert that &global_options are not dirty modified.
gcc/ChangeLog:

2020-03-20  Martin Liska  <mliska@suse.cz>

	PR tree-optimization/92860
	* optc-save-gen.awk: Generate new function cl_optimization_compare.
	* opth-gen.awk: Generate declaration of the function.

gcc/c-family/ChangeLog:

2020-03-20  Martin Liska  <mliska@suse.cz>

	PR tree-optimization/92860
	* c-attribs.c (handle_optimize_attribute):
	Save global options and compare it after parsing of function
	attribute.
	* c-pragma.c (opt_stack::saved_global_options): New field.
	(handle_pragma_push_options): Save global_options.
	(handle_pragma_pop_options): Compare them after pop.
2020-06-10 10:04:14 +02:00
Martin Liska 771e60dd07
gcc-changelog: add more Review by prefixes.
contrib/ChangeLog:

	* gcc-changelog/git_commit.py: Add more supported prefixes.
	* gcc-changelog/test_email.py: Fix one flake8 error.
	* gcc-changelog/test_patches.txt: Add tested for newly
	supported prefixes.
2020-06-10 09:58:07 +02:00
Jonathan Wakely 1ea9a0b74e
gcc-changelog: Improve git_commit.py diagnostics
This changes some error messages to be more self-consistent and to fix
some grammar.

contrib/ChangeLog:

	* gcc-changelog/git_commit.py (GitCommit.parse_changelog):
	Improve error strings.
	* gcc-changelog/test_email.py: Update expected errors.
2020-06-10 09:36:34 +02:00
GCC Administrator b952c2cfcd Daily bump. 2020-06-10 00:16:47 +00:00
Jonathan Wakely 733167f9d5 libstdc++: Define converting assignment operator for std::move_iterator
As clarified by LWG 3265, std::move_iterator is supposed to have an
assignment operator that converts from a different specialization of
std::move_iterator, which performs an assignment. That has always been
missing from libstdc++, so assigning a different type actually performs
a converting construction, then an assignment. This is non-conforming
for the (fairly contrived) case where the converting assignment is
well-formed but the converting construction is not.

	* include/bits/stl_iterator.h (move_iterator::operator=): Define.
	* testsuite/24_iterators/move_iterator/dr3265.cc: New test.
2020-06-09 22:16:24 +01:00
Jonathan Wakely d364705791 libstdc++: Define std::bad_optional_access constructor as defaulted
The standard requires that std::bad_optional_access' default
constructor has a non-throwing exception specification.

	* include/std/optional (bad_optional_access): Define default
	constructor and destructor as defaulted.
	* testsuite/20_util/optional/bad_access.cc: New test.
2020-06-09 22:14:43 +01:00
Michael Meissner d7274dbf82 PowerPC: Add future hwcap2 bits
This patch adds support for the two new HWCAP2 fields used by the
__builtin_cpu_supports function.  It adds support in the target_clones
attribute for -mcpu=future.

The two new __builtin_cpu_supports tests are:
	__builtin_cpu_supports ("isa_3_1")
	__builtin_cpu_supports ("mma")

The bits used are the bits that the Linux kernel engineers will be using for
these new features.

gcc/
2020-06-09  Michael Meissner  <meissner@linux.ibm.com>

	* config/rs6000/ppc-auxv.h (PPC_PLATFORM_FUTURE): Allocate
	'future' PowerPC platform.
	(PPC_FEATURE2_ARCH_3_1): New HWCAP2 bit for ISA 3.1.
	(PPC_FEATURE2_MMA): New HWCAP2 bit for MMA.
	* config/rs6000/rs6000-call.c (cpu_supports_info): Add ISA 3.1 and
	MMA HWCAP2 bits.
	* config/rs6000/rs6000.c (CLONE_ISA_3_1): New clone support.
	(rs6000_clone_map): Add 'future' system target_clones support.

testsuite/
2020-06-09  Michael Meissner  <meissner@linux.ibm.com>

	* gcc.target/powerpc/clone3.c: New test for using 'future' with
	the target_clones attribute.
2020-06-09 15:35:43 -05:00