Commit Graph

186589 Commits

Author SHA1 Message Date
Kewen Lin
c3d1aa891c test/rs6000: Add cases to cover vector multiply
This patch is to add test cases to check if vectorizer
can exploit vector multiply instrutions on Power, some
of them are supported since Power8, the others are newly
introduced by Power10.

gcc/testsuite/ChangeLog:

	* gcc.target/powerpc/mul-vectorize-1.c: New test.
	* gcc.target/powerpc/mul-vectorize-2.c: New test.
2021-07-08 21:59:50 -05:00
GCC Administrator
fdc4d2a516 Daily bump. 2021-07-09 00:16:27 +00:00
Martin Sebor
79d3378c7d Move warning suppression to the ultimate callee.
Resolves:
PR bootstrap/101372 - -Warray-bounds in gcc/cp/module.cc causing bootstrap failure

gcc/cp/ChangeLog:

	PR bootstrap/101372
	* module.cc (identifier): Suppress warning.
	(module_state::read_macro_maps): Remove warning suppression.
	(module_state::install_macros): Ditto.
2021-07-08 16:36:15 -06:00
Martin Sebor
68b938fada testsuite: Remove an xfail.
gcc/testsuite/ChangeLog:

	* gcc.dg/Wstringop-overflow-43.c: Remove an xfail.
2021-07-08 16:22:25 -06:00
Martin Sebor
c232f07b93 Adjust expected output for LP32 [PR100451].
gcc/testsuite/ChangeLog:

	PR testsuite/100451
	* g++.dg/warn/Warray-bounds-20.C: Adjust expected output for LP32.
2021-07-08 16:08:20 -06:00
Martin Sebor
c68cac900a Avoid including <new> to make cross-compiler testing easy.
gcc/testsuite/ChangeLog:

	* g++.dg/warn/Warray-bounds-11.C: Avoid including <new>.
	* g++.dg/warn/Warray-bounds-13.C: Same.
2021-07-08 16:03:19 -06:00
Marek Polacek
dee00bf689 c++: Fix noexcept with unevaluated operand [PR101087]
It sounds plausible that this assert

  int f();
  static_assert(noexcept(sizeof(f())));

should pass: sizeof produces a std::size_t and its operand is not
evaluated, so it can't throw.  noexcept should only evaluate to
false for potentially evaluated operands.  Therefore I think that
check_noexcept_r shouldn't walk into operands of sizeof/decltype/
alignof/typeof.

	PR c++/101087

gcc/cp/ChangeLog:

	* cp-tree.h (unevaluated_p): New.
	* except.c (check_noexcept_r): Use it.  Don't walk into
	unevaluated operands.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp0x/noexcept70.C: New test.
2021-07-08 17:38:49 -04:00
Jeff Law
b14ac7b29c Further improvements to H8 variable shift patterns
gcc/

	* config/h8300/shiftrotate.md (variable shifts): Expose condition
	code handling for the test before the loop.
2021-07-08 17:09:36 -04:00
Martin Jambor
763121ccd9
ipa-sra: Fix thinko when overriding safe_to_import_accesses (PR 101066)
The "new" IPA-SRA has a more difficult job than the previous
not-truly-IPA version when identifying situations in which a parameter
passed by reference can be passed into a third function and only thee
converted to one passed by value (and possibly "split" at the same
time).

In order to allow this, two conditions must be fulfilled.  First the
call to the third function must happen before any modifications of
memory, because it could change the value passed by reference.
Second, in order to make sure we do not introduce new (invalid)
dereferences, the call must postdominate the entry BB.

The second condition is actually not necessary if the caller function
is also certain to dereference the pointer but the first one must
still hold.  Unfortunately, the code making this overriding decision
also happen to trigger when the first condition is not fulfilled.
This is fixed in the following patch.

gcc/ChangeLog:

2021-06-16  Martin Jambor  <mjambor@suse.cz>

	PR ipa/101066
	* ipa-sra.c (class isra_call_summary): New member
	m_before_any_store, initialize it in the constructor.
	(isra_call_summary::dump): Dump the new field.
	(ipa_sra_call_summaries::duplicate): Copy it.
	(process_scan_results): Set it.
	(isra_write_edge_summary): Stream it.
	(isra_read_edge_summary): Likewise.
	(param_splitting_across_edge): Only override
	safe_to_import_accesses if m_before_any_store is set.

gcc/testsuite/ChangeLog:

2021-06-16  Martin Jambor  <mjambor@suse.cz>

	PR ipa/101066
	* gcc.dg/ipa/pr101066.c: New test.
2021-07-08 19:45:16 +02:00
Martin Sebor
9bf9f27ac6 Use Object Size Type zero for -Warray-bounds [PR101374].
Resolves:
PR bootstrap/101374 - -Warray-bounds accessing a member subobject as derived

gcc/cp/ChangeLog:
	PR bootstrap/101374
	* module.cc (module_state::read_macro_maps): Temporarily disable
	-Warray-bounds.
	(module_state::install_macros): Same.

gcc/ChangeLog:
	PR bootstrap/101374
	* gimple-array-bounds.cc (array_bounds_checker::check_mem_ref):
	Use Object Size Type 0 instead of 1.

gcc/testsuite/ChangeLog:
	PR bootstrap/101374
	* c-c++-common/Warray-bounds-3.c: Xfail assertion.
	* c-c++-common/Warray-bounds-4.c: Same.
2021-07-08 11:43:47 -06:00
Christophe Lyon
1ca642d785 testsuite: Add arm_arch_v7a_ok effective-target to pr57351.c
I've noticed that overriding cpu/arch flags when running the testsuite
can cause this test to fail rather than being skipped because of
incompatible flags combination.

Since the test forces -march=armv7-a, make sure it is accepted in
combination with the current runtestflags.

2021-07-08  Christophe Lyon  <christophe.lyon@foss.st.om>

	gcc/testsuite/
	* gcc.dg/debug/pr57351.c: Require arm_arch_v7a_ok
	effective-target.
2021-07-08 13:54:10 +00:00
Piotr Trojanek
43931c9782 [Ada] Tune detection of illegal occurrences of target_name
gcc/ada/

	* sem_ch5.adb (Analyze_Assignment): Clear Current_Assignment at
	exit.
	(Analyze_Target_Name): Prevent AST climbing from going too far.
2021-07-08 13:34:24 +00:00
Ed Schonberg
d45ee636a8 [Ada] Diagnose properly illegal uses of Target_Name
gcc/ada/

	* sem_ch5.adb (Analyze_Target_Name): Properly reject a
	Target_Name when it appears outside of an assignment statement,
	or within the left-hand side of one.
2021-07-08 13:34:24 +00:00
Bob Duff
8de68eb37c [Ada] Remove Unknown_ functions
gcc/ada/

	* einfo-utils.ads, einfo-utils.adb (Unknown_Alignment,
	Unknown_Component_Bit_Offset, Unknown_Component_Size,
	Unknown_Esize, Unknown_Normalized_First_Bit,
	Unknown_Normalized_Position, Unknown_Normalized_Position_Max,
	Unknown_RM_Size): Remove these functions.
	* exp_pakd.adb, exp_util.adb, fe.h, freeze.adb, layout.adb,
	repinfo.adb, sem_ch13.adb, sem_ch3.adb, sem_util.adb: Remove
	calls to these functions; do "not Known_..." instead.
	* gcc-interface/decl.c, gcc-interface/trans.c
	(Unknown_Alignment, Unknown_Component_Size, Unknown_Esize,
	Unknown_RM_Size): Remove calls to these functions; do
	"!Known_..." instead.
2021-07-08 13:34:23 +00:00
Eric Botcazou
4d743233ad [Ada] Use encoded names only with -fgnat-encodings=all
gcc/ada/

	* exp_dbug.adb (Get_Encoded_Name): Do not encode names of discrete
	types with custom bounds, except with -fgnat-encodings=all.
	* exp_pakd.adb (Create_Packed_Array_Impl_Type): Adjust comment.
2021-07-08 13:34:23 +00:00
Bob Duff
7c092960f0 [Ada] Transient scope cleanup
gcc/ada/

	* comperr.adb (Compiler_Abort): Call Sinput.Unlock, because if
	this is called late, then Source_Dump would crash otherwise.
	* debug.adb: Correct documentation of the -gnatd.9 switch.
	* exp_ch4.adb (Expand_Allocator_Expression): Add a comment.
	* exp_ch6.adb: Minor comment fixes.  Add assertion.
	* exp_ch6.ads (Is_Build_In_Place_Result_Type): Correct comment.
	* exp_ch7.adb, checks.ads: Minor comment fixes.
2021-07-08 13:34:23 +00:00
Doug Rupp
6e8b502cb6 [Ada] Rename sigtramp-vxworks-target.inc to sigtramp-vxworks-target.h
gcc/ada/

	* sigtramp-vxworks-target.inc: Rename to...
	* sigtramp-vxworks-target.h: ... this.
	* sigtramp-vxworks.c, Makefile.rtl: Likewise.
2021-07-08 13:34:22 +00:00
Ghjuvan Lacambre
d75dde1a72 [Ada] Duplicated D lines in ali files
gcc/ada/

	* lib-writ.ads: Mention SCOs dependency as reason for duplicates.
	* lib.ads (Units): Update documentation to mention duplicated
	units.
2021-07-08 13:34:22 +00:00
Ed Schonberg
99d6c1f8c2 [Ada] Spurious style message on missing overriding indicator
gcc/ada/

	* style.adb (Missing_Overriding): Do not emit message when
	parent of subprogram is a full type declaration.
2021-07-08 13:34:22 +00:00
Arnaud Charlet
3c18e32037 [Ada] AI12-0156 Use subtype indication in generalized iterators
gcc/ada/

	* par-ch5.adb (P_Iterator_Specification): Add support for access
	definition in loop parameter.
	* sem_ch5.adb (Check_Subtype_Indication): Renamed...
	(Check_Subtype_Definition): ... into this and check for conformance
	on access definitions, and improve error messages.
	(Analyze_Iterator_Specification): Add support for access definition
	in loop parameter.
2021-07-08 13:34:21 +00:00
Arnaud Charlet
629c82d729 [Ada] Spurious warning in generic instance
gcc/ada/

	* sem_util.ads, sem_util.adb
	(Apply_Compile_Time_Constraint_Error): New parameter
	Emit_Message.
	* sem_ch4.adb (Analyze_Selected_Component): Disable warning
	within an instance.
2021-07-08 13:34:21 +00:00
Eric Botcazou
a9c3a49750 [Ada] Fix violation of No_Implicit_Loops restriction for enumeration type
gcc/ada/

	* exp_imgv.adb: Add with and use clause for Restrict and Rident.
	(Build_Enumeration_Image_Tables): Do not generate the hash function
	if the No_Implicit_Loops restriction is active.
2021-07-08 13:34:21 +00:00
Piotr Trojanek
73f841cfca [Ada] Simplify redundant checks for non-empty lists
gcc/ada/

	* sem_ch12.adb, sem_ch6.adb, sem_ch9.adb, sprint.adb: Simplify
	checks for non-empty lists.
2021-07-08 13:34:20 +00:00
Piotr Trojanek
e959418a07 [Ada] Remove redundant condition for listing compilation units
gcc/ada/

	* par-ch10.adb (Unit_Display): Remove redundant condition; fix
	whitespace.
2021-07-08 13:34:20 +00:00
Piotr Trojanek
e581fbeab6 [Ada] Restore context on failure in loading of renamed child unit
gcc/ada/

	* lib-load.adb (Load): Replace early return with goto to properly
	restore context on failure.
2021-07-08 13:34:20 +00:00
Piotr Trojanek
df0783f81c [Ada] Replace low-level condition with a high-level call
gcc/ada/

	* lib-writ.adb (Ensure_System_Dependency): Simplify condition.
2021-07-08 13:34:20 +00:00
Piotr Trojanek
3711c2e5a0 [Ada] Fix style in comments and code related to compilation units
gcc/ada/

	* lib-load.adb (Load_Unit): Fix style in comment.
	* par-load.adb (Load): Likewise.
	* scng.adb (Initialize_Scanner): Fix whitespace.
2021-07-08 13:34:19 +00:00
Piotr Trojanek
62aae315f6 [Ada] Prevent infinite recursion when there is no expected unit
gcc/ada/

	* par-load.adb (Load): Don't remove unit, but flag it as
	erroneous and return.
2021-07-08 13:34:19 +00:00
Ghjuvan Lacambre
6105ebb782 [Ada] Fix use of single question mark in error message
gcc/ada/

	* exp_prag.adb (Expand_Pragma_Inspection_Point): Fix error
	message.
2021-07-08 13:34:19 +00:00
Yannick Moy
6cb2bcba3f [Ada] Skip types in error for test to compute array size
gcc/ada/

	* layout.adb (Layout_Type): Do not call Number_Dimensions if the
	type does not have First_Index set.
2021-07-08 13:34:19 +00:00
Ghjuvan Lacambre
cd4341ef95 [Ada] Prevent crash on inspection point for unfrozen entity
gcc/ada/

	* exp_prag.adb (Expand_Pragma_Inspection_Point): After expansion
	of the Inspection_Point pragma, check if referenced entities
	that have a freeze node are already frozen. If they aren't, emit
	a warning and turn the pragma into a no-op.
2021-07-08 13:34:18 +00:00
Yannick Moy
242c0f4772 [Ada] Fix on computation of packed array size in case of error
gcc/ada/

	* layout.adb (Layout_Type): Add guard before calling Expr_Value.
2021-07-08 13:34:18 +00:00
Yannick Moy
36fcfed88c [Ada] Compute sizes when possible for packed array with Component_Size
gcc/ada/

	* layout.adb (Layout_Type): Special case when RM_Size and Esize
	can be computed for packed arrays.
2021-07-08 13:34:18 +00:00
Steve Baird
5478d8a7ae [Ada] Unsynchronized concurrent access to a Boolean variable
gcc/ada/

	* rtsfind.ads, rtsfind.adb: Add support for finding the packages
	System.Atomic_Operations and
	System.Atomic_Operations.Test_And_Set and the declarations
	within that latter package of the type Test_And_Set_Flag and the
	function Atomic_Test_And_Set.
	* exp_ch11.adb (Expand_N_Exception_Declaration): If an exception
	is declared other than at library level, then we need to call
	Register_Exception the first time (and only the first time) the
	declaration is elaborated.  In order to decide whether to
	perform this call for a given elaboration of the declaration, we
	used to unconditionally use a (library-level) Boolean variable.
	Now we instead use a variable of type
	System.Atomic_Operations.Test_And_Set.Test_And_Set_Flag unless
	either that type is unavailable or a No_Tasking restriction is
	in effect (in which case we use a Boolean variable as before).
2021-07-08 13:34:18 +00:00
Arnaud Charlet
076c1a9157 [Ada] Add No_Tasking restriction is system.ads for bootstrap
gcc/ada/

	* gcc-interface/system.ads: Add No_Tasking restriction.
2021-07-08 13:34:17 +00:00
Ed Schonberg
b927d936e3 [Ada] Incorrect iteration over hashed containers after multiple Inserts
gcc/ada/

	* libgnat/a-cohama.ads: Introduce an equality operator over
	cursors.
	* libgnat/a-cohase.ads: Ditto.
	* libgnat/a-cohama.adb: Add body for "=" over cursors.
	(Insert): Do not set the Position component of the cursor that
	denotes the inserted element.
	* libgnat/a-cohase.adb: Ditto.
2021-07-08 13:34:17 +00:00
Arnaud Charlet
c5b1e8e9a5 [Ada] Make runtime code compatible with No_Dynamic_Accessibility_Checks
gcc/ada/

	* libgnat/a-cbdlli.adb, libgnat/a-cbhama.adb,
	libgnat/a-cbhase.adb, libgnat/a-cbmutr.adb,
	libgnat/a-cborma.adb, libgnat/a-cborse.adb,
	libgnat/a-cobove.adb, libgnat/a-textio.adb,
	libgnat/a-witeio.adb, libgnat/a-ztexio.adb: Make code compatible
	with No_Dynamic_Accessibility_Checks restriction.
2021-07-08 13:34:17 +00:00
Arnaud Charlet
a2f91a52b4 [Ada] Revert meaning of -gnatd_b
gcc/ada/

	* debug.adb, sem_util.adb: Revert meaning of -gnatd_b.
	* sem_res.adb: Minor reformatting.
2021-07-08 13:34:16 +00:00
Arnaud Charlet
3cb32058b4 [Ada] Make tools compatible with No_Dynamic_Accessibility_Checks
gcc/ada/

	* make.adb, osint.adb: Make code compatible with
	No_Dynamic_Accessibility_Checks restriction.
2021-07-08 13:34:16 +00:00
Piotr Trojanek
79a8b14237 [Ada] Avoid linear search when ensuring dependency on System
gcc/ada/

	* lib-writ.adb (Ensure_System_Dependency): Replace search in
	Lib.Units with a search in Lib.Unit_Names.
2021-07-08 13:34:16 +00:00
Piotr Trojanek
999a2dd00d [Ada] Simplify string manipulation related to preprocessing
gcc/ada/

	* sinput-l.adb (Load_File): Simplify foreword manipulation with
	concatenation; similar for filename with preprocessed output.
2021-07-08 13:34:16 +00:00
Richard Sandiford
2e9ef3929b vect: Remove always-true condition
vectorizable_reduction had code guarded by:

  if (STMT_VINFO_DEF_TYPE (stmt_info) == vect_reduction_def
      || STMT_VINFO_DEF_TYPE (stmt_info) == vect_double_reduction_def)

But that's always true after:

  if (STMT_VINFO_DEF_TYPE (stmt_info) != vect_reduction_def
      && STMT_VINFO_DEF_TYPE (stmt_info) != vect_double_reduction_def
      && STMT_VINFO_DEF_TYPE (stmt_info) != vect_nested_cycle)
    return false;

  if (STMT_VINFO_DEF_TYPE (stmt_info) == vect_nested_cycle)
    {
      …
      return true;
    }

(I wasn't sure at first how the empty “else” for the first “if” above
was supposed to work.)

gcc/
	* tree-vect-loop.c (vectorizable_reduction): Remove always-true
	if condition.
2021-07-08 12:58:13 +01:00
Richard Sandiford
298b0db76d match.pd: Relax rule to include POLY_INT_CSTs
match.pd has a rule to simplify an extension, operation and truncation
back to the original type:

 (simplify
   (convert (op:s@0 (convert1?@3 @1) (convert2?@4 @2)))

Currently it handles cases in which @2 is an INTEGER_CST, but it
also works for POLY_INT_CSTs.[*]

For INTEGER_CST it doesn't matter whether we test @2 or @4,
but for POLY_INT_CST it is possible to have unfolded (convert …)s.

Originally I saw this leading to some bad ivopts decisions, because
we weren't folding away redundancies from candidate iv expressions.
It's also possible to test the fold directly using the SVE ACLE.

[*] Not all INTEGER_CST rules work for POLY_INT_CSTs, since extensions
    don't necessarily distribute over the internals of the POLY_INT_CST.
    But in this case that isn't an issue.

gcc/
	* match.pd: Simplify an extend-operate-truncate sequence involving
	a POLY_INT_CST.

gcc/testsuite/
	* gcc.target/aarch64/sve/acle/general/cntb_1.c: New test.
2021-07-08 12:49:44 +01:00
Roger Sayle
4c619132b3 PR tree-optimization/40210: Fold (bswap(X)>>C1)&C2 to (X>>C3)&C2 in match.pd
All of the optimizations/transformations mentioned in bugzilla for
PR tree-optimization/40210 are already implemented in mainline GCC,
with one exception.  In comment #5, there's a suggestion that
(bswap64(x)>>56)&0xff can be implemented without the bswap as
(unsigned char)x, or equivalently x&0xff.

This patch implements the above optimization, and closely related
variants.  For any single bit, (bswap(X)>>C1)&1 can be simplified
to (X>>C2)&1, where bit position C2 is the appropriate permutation
of C1.  Similarly, the bswap can eliminated if the desired set of
bits all lie within the same byte, hence (bswap(x)>>8)&255 can
always be optimized, as can (bswap(x)>>8)&123.

Previously,
int foo(long long x) {
  return (__builtin_bswap64(x) >> 56) & 0xff;
}

compiled with -O2 to
foo:	movq    %rdi, %rax
        bswap   %rax
        shrq    $56, %rax
        ret

with this patch, it now compiles to
foo:	movzbl  %dil, %eax
        ret

2021-07-08  Roger Sayle  <roger@nextmovesoftware.com>
	    Richard Biener  <rguenther@suse.de>

gcc/ChangeLog
	PR tree-optimization/40210
	* match.pd (bswap optimizations): Simplify (bswap(x)>>C1)&C2 as
	(x>>C3)&C2 when possible.  Simplify bswap(x)>>C1 as ((T)x)>>C2
	when possible.  Simplify bswap(x)&C1 as (x>>C2)&C1 when 0<=C1<=255.

gcc/testsuite/ChangeLog
	PR tree-optimization/40210
	* gcc.dg/builtin-bswap-13.c: New test.
	* gcc.dg/builtin-bswap-14.c: New test.
2021-07-08 11:47:55 +01:00
Uros Bizjak
663a014e77 i386: Add pack/unpack patterns for 32bit vectors [PR100637]
V1SI mode shift is needed to shift 32bit operands and consequently we
need to implement V1SI moves and pushes.

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

gcc/
	PR target/100637
	* config/i386/i386-expand.c (ix86_expand_sse_unpack):
	Handle V4QI mode.
	* config/i386/mmx.md (V_32): New mode iterator.
	(mov<V_32:mode>): Use V_32 mode iterator.
	(*mov<V_32:mode>_internal): Ditto.
	(*push<V_32:mode>2_rex64): Ditto.
	(*push<V_32:mode>2): Ditto.
	(movmisalign<V_32:mode>): Ditto.
	(mmx_<any_shiftrt:insn>v1si3): New insn pattern.
	(sse4_1_<any_extend:code>v2qiv2hi2): Ditto.
	(vec_unpacks_lo_v4qi): New expander.
	(vec_unpacks_hi_v4qi): Ditto.
	(vec_unpacku_lo_v4qi): Ditto.
	(vec_unpacku_hi_v4qi): Ditto.
	* config/i386/i386.h (VALID_SSE2_REG_MODE): Add V1SImode.
	(VALID_INT_MODE_P): Ditto.
2021-07-08 12:20:29 +02:00
Michael Meissner
852b11da11 Generate 128-bit int divide/modulus on power10.
This patch adds support for the VDIVSQ, VDIVUQ, VMODSQ, and VMODUQ
instructions to do 128-bit arithmetic.

2021-07-07  Michael Meissner  <meissner@linux.ibm.com>

gcc/
	PR target/100809
	* config/rs6000/rs6000.md (udivti3): New insn.
	(divti3): New insn.
	(umodti3): New insn.
	(modti3): New insn.

gcc/testsuite/
	PR target/100809
	* gcc.target/powerpc/p10-vdivq-vmodq.c: New test.
2021-07-07 21:55:38 -04:00
GCC Administrator
c24a970782 Daily bump. 2021-07-08 00:16:27 +00:00
David Malcolm
48e8a7a677 analyzer: remove add_any_constraints_from_ssa_def_stmt
I'm working on reimplementing -Wanalyzer-use-of-uninitialized-value, but
I ran into issues with
region_model::add_any_constraints_from_ssa_def_stmt.
This function is from the initial commit of the analyzer and walks the
SSA names finding conditions that were missed due to the GCC 10 era
region_model not retaining useful information on how values were
created; as of GCC 11 the symbolic values contain this information,
and so the conditions can be reconstructed from them instead.

region_model::add_any_constraints_from_ssa_def_stmt is a liability
when tracking uninitialized values as it requires looking up SSA
values when those values may have been purged, thus greatly complicating
detection of uses of uninitialized values.

It's simplest to eliminate it and reimplement the condition-finding
via the makeup of the svalues, which this patch does.  Doing so requires
supporting add_condition on svalues rather than just on trees, which
requires some changes to ana::state_machine and its subclasses.

gcc/analyzer/ChangeLog:
	* diagnostic-manager.cc (null_assignment_sm_context::get_state):
	New overload.
	(null_assignment_sm_context::set_next_state): New overload.
	(null_assignment_sm_context::get_diagnostic_tree): New.
	* engine.cc (impl_sm_context::get_state): New overload.
	(impl_sm_context::set_next_state): New overload.
	(impl_sm_context::get_diagnostic_tree): New overload.
	(impl_region_model_context::on_condition): Convert params from
	tree to const svalue *.
	* exploded-graph.h (impl_region_model_context::on_condition):
	Likewise.
	* region-model.cc (region_model::on_call_pre): Move handling of
	internal calls to before checking for get_fndecl_for_call.
	(region_model::add_constraints_from_binop): New.
	(region_model::add_constraint): Split out into a new overload
	working on const svalue * rather than tree.  Call
	add_constraints_from_binop.  Drop call to
	add_any_constraints_from_ssa_def_stmt.
	(region_model::add_any_constraints_from_ssa_def_stmt): Delete.
	(region_model::add_any_constraints_from_gassign): Delete.
	(region_model::add_any_constraints_from_gcall): Delete.
	* region-model.h
	(region_model::add_any_constraints_from_ssa_def_stmt): Delete.
	(region_model::add_any_constraints_from_gassign): Delete.
	(region_model::add_any_constraints_from_gcall): Delete.
	(region_model::add_constraint): Add overload decl.
	(region_model::add_constraints_from_binop): New decl.
	(region_model_context::on_condition): Convert params from tree to
	const svalue *.
	(noop_region_model_context::on_condition): Likewise.
	* sm-file.cc (fileptr_state_machine::condition): Likewise.
	* sm-malloc.cc (malloc_state_machine::on_condition): Likewise.
	* sm-pattern-test.cc: Include tristate.h, selftest.h,
	analyzer/call-string.h, analyzer/program-point.h,
	analyzer/store.h, and analyzer/region-model.h.
	(pattern_test_state_machine::on_condition): Convert params from tree to
	const svalue *.
	* sm-sensitive.cc (sensitive_state_machine::on_condition): Delete.
	* sm-signal.cc (signal_state_machine::on_condition): Delete.
	* sm-taint.cc (taint_state_machine::on_condition): Convert params
	from tree to const svalue *.
	* sm.cc: Include tristate.h, selftest.h, analyzer/call-string.h,
	analyzer/program-point.h, analyzer/store.h, and
	analyzer/region-model.h.
	(any_pointer_p): Add overload taking const svalue *sval.
	* sm.h (any_pointer_p): Add overload taking const svalue *sval.
	(state_machine::on_condition): Convert params from tree to
	const svalue *.  Provide no-op default implementation.
	(sm_context::get_state): Add overload taking const svalue *sval.
	(sm_context::set_next_state): Likewise.
	(sm_context::on_transition): Likewise.
	(sm_context::get_diagnostic_tree): Likewise.
	* svalue.cc (svalue::all_zeroes_p): New.
	(constant_svalue::all_zeroes_p): New.
	(repeated_svalue::all_zeroes_p): Convert to vfunc.
	* svalue.h (svalue::all_zeroes_p): New decl.
	(constant_svalue::all_zeroes_p): New decl.
	(repeated_svalue::all_zeroes_p): Convert decl to vfunc.

gcc/testsuite/ChangeLog:
	* gcc.dg/analyzer/pattern-test-2.c: Update expected results.
	* gcc.dg/plugin/analyzer_gil_plugin.c
	(gil_state_machine::on_condition): Remove.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2021-07-07 19:29:30 -04:00
Martin Sebor
a110855667 Correct handling of variable offset minus constant in -Warray-bounds [PR100137]
Resolves:
PR tree-optimization/100137 - -Warray-bounds false positive on varying offset plus negative
PR tree-optimization/99121 - ICE in -Warray-bounds on a multidimensional
PR tree-optimization/97027 - missing warning on buffer overflow storing a larger scalar into a smaller array

gcc/ChangeLog:

	PR tree-optimization/100137
	PR tree-optimization/99121
	PR tree-optimization/97027
	* builtins.c (access_ref::access_ref): Also set offmax.
	(access_ref::offset_in_range): Define new function.
	(access_ref::add_offset): Set offmax.
	(access_ref::inform_access): Handle access_none.
	(handle_mem_ref): Clear ostype.
	(compute_objsize_r): Handle ASSERT_EXPR.
	* builtins.h (struct access_ref): Add offmax member.
	* gimple-array-bounds.cc (array_bounds_checker::check_mem_ref): Use
	compute_objsize() and simplify.

gcc/testsuite/ChangeLog:

	PR tree-optimization/100137
	PR tree-optimization/99121
	PR tree-optimization/97027
	* c-c++-common/Warray-bounds-3.c: Remove xfail
	* c-c++-common/Warray-bounds-4.c: Add an expected warning.
	* c-c++-common/Warray-bounds-9.c: New test.
	* c-c++-common/Warray-bounds-10.c: New test.
	* g++.dg/asan/asan_test.C: Suppress expected warnings.
	* g++.dg/pr95768.C: Same.
	* g++.dg/warn/Warray-bounds-10.C: Adjust text of expected messages.
	* g++.dg/warn/Warray-bounds-11.C: Same.
	* g++.dg/warn/Warray-bounds-12.C: Same.
	* g++.dg/warn/Warray-bounds-13.C: Same.
	* g++.dg/warn/Warray-bounds-17.C: Same.
	* g++.dg/warn/Warray-bounds-20.C: Same.
	* gcc.dg/Warray-bounds-29.c: Same.
	* gcc.dg/Warray-bounds-30.c: Add xfail.
	* gcc.dg/Warray-bounds-31.c: Adjust text of expected messages.
	* gcc.dg/Warray-bounds-32.c: Same.
	* gcc.dg/Warray-bounds-52.c: Same.
	* gcc.dg/Warray-bounds-53.c: Same.
	* gcc.dg/Warray-bounds-58.c: Remove xfail.
	* gcc.dg/Warray-bounds-63.c: Adjust text of expected messages.
	* gcc.dg/Warray-bounds-66.c: Same.
	* gcc.dg/Warray-bounds-69.c: Same.
	* gcc.dg/Wstringop-overflow-34.c: Same.
	* gcc.dg/Wstringop-overflow-47.c: Same.
	* gcc.dg/Wstringop-overflow-61.c: Same.
	* gcc.dg/Warray-bounds-77.c: New test.
	* gcc.dg/Warray-bounds-78.c: New test.
	* gcc.dg/Warray-bounds-79.c: New test.
2021-07-07 14:06:59 -06:00
Peter Bergner
6278065af0 rs6000: Harden mma_init_builtins
The previous MMA patch added some fragile code to initialize its new
built-ins.  This patch hardens the initialization.

2021-07-07  Peter Bergner  <bergner@linux.ibm.com>

gcc/
	* config/rs6000/rs6000-call.c (mma_init_builtins): Use VSX_BUILTIN_LXVP
	and VSX_BUILTIN_STXVP.
2021-07-07 11:45:49 -05:00