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> 2018-01-06 Richard Sandiford <richard.sandiford@linaro.org>
PR rtl-optimization/83699 PR rtl-optimization/83699
......
...@@ -1371,8 +1371,6 @@ maybe_diag_overlap (location_t loc, gcall *call, builtin_access &acs) ...@@ -1371,8 +1371,6 @@ maybe_diag_overlap (location_t loc, gcall *call, builtin_access &acs)
return true; return true;
} }
/* Issue "may overlap" diagnostics below. */
/* Use more concise wording when one of the offsets is unbounded /* Use more concise wording when one of the offsets is unbounded
to avoid confusing the user with large and mostly meaningless to avoid confusing the user with large and mostly meaningless
numbers. */ 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> 2018-01-06 Richard Sandiford <richard.sandiford@linaro.org>
* gcc.target/aarch64/reg-alloc-1.c: New test. * 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