Commit f59d4026 by Martin Sebor Committed by Jeff Law

re PR tree-optimization/83640 (ICE in generic_overlap, at gimple-ssa-warn-restrict.c:814)

2018-01-06  Martin Sebor  <msebor@redhat.com>

	PR tree-optimization/83640
	* gimple-ssa-warn-restrict.c (builtin_access::builtin_access): Avoid
	subtracting negative offset from size.
	(builtin_access::overlap): Adjust offset bounds of the access to fall
	within the size of the object if possible.

	PR tree-optimization/83640
	* gcc.dg/Wrestrict-6.c: New test.
	* gcc.dg/pr83640.c: New test.

From-SVN: r256319
parent 9ea52d27
2018-01-06 Martin Sebor <msebor@redhat.com>
PR tree-optimization/83640
* gimple-ssa-warn-restrict.c (builtin_access::builtin_access): Avoid
subtracting negative offset from size.
(builtin_access::overlap): Adjust offset bounds of the access to fall
within the size of the object if possible.
2018-01-06 Richard Sandiford <richard.sandiford@linaro.org>
PR rtl-optimization/83699
......
......@@ -1371,8 +1371,6 @@ maybe_diag_overlap (location_t loc, gcall *call, builtin_access &acs)
return true;
}
/* Issue "may overlap" diagnostics below. */
/* Use more concise wording when one of the offsets is unbounded
to avoid confusing the user with large and mostly meaningless
numbers. */
......
2018-01-06 Martin Sebor <msebor@redhat.com>
PR tree-optimization/83640
* gcc.dg/Wrestrict-6.c: New test.
* gcc.dg/pr83640.c: New test.
2018-01-06 Richard Sandiford <richard.sandiford@linaro.org>
* gcc.target/aarch64/reg-alloc-1.c: New test.
......
/* PR tree-optimization/83640 - ice in generic_overlap, at
gimple-ssa-warn-restrict.c:814
Test to verify that a pointer offset range whose upper bound is less
than its lower bound (when interpreted as a signed integer) is handled
correctly.
{ dg-do compile }
{ dg-options "-O2 -Wrestrict" } */
#include "range.h"
extern char* strcpy (char*, const char*);
extern char* stpcpy (char*, const char*);
void sink (void*);
void warn_2_smax_p2 (void)
{
char a[7] = "01234";
char *d = a;
ptrdiff_t i = UR (2, DIFF_MAX + (size_t)2);
strcpy (d, d + i); /* { dg-warning "accessing between 0 and 4 bytes at offsets 0 and \\\[2, -\[0-9\]+] may overlap up to 2 bytes at offset 2" } */
sink (d);
}
void nowarn_3_smax_p2 (void)
{
char a[7] = "12345";
char *d = a;
ptrdiff_t i = UR (3, DIFF_MAX + (size_t)2);
strcpy (d, d + i);
sink (d);
}
void warn_2u_smax_p2 (void)
{
char a[7] = "23456";
char *d = a;
size_t i = UR (2, DIFF_MAX + (size_t)2);
strcpy (d, d + i); /* { dg-warning "accessing between 0 and 4 bytes at offsets 0 and \\\[2, -\[0-9\]+] may overlap up to 2 bytes at offset 2" } */
sink (d);
}
void nowarn_3u_smax_p2 (void)
{
char a[7] = "34567";
char *d = a;
size_t i = UR (3, DIFF_MAX + (size_t)2);
strcpy (d, d + i);
sink (d);
}
/* PR tree-optimization/83640 - ice in generic_overlap, at
gimple-ssa-warn-restrict.c:814
{ dg-do compile }
{ dg-options "-O2 -Wall" } */
char *foo (void);
void
bar (char *b, char *c)
{
b = c;
c = foo ();
__builtin_strcat (c, "*/");
__builtin_strcat (c, b);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment