re PR middle-end/85874 (gcc points to wrong location when displaying warning for strict overflow warning)

2018-05-23  Richard Biener  <rguenther@suse.de>

	PR middle-end/85874
	* tree-data-ref.c (create_runtime_alias_checks): Defer
	and ignore overflow warnings.

	* gcc.dg/Wstrict-overflow-27.c: New testcase.

From-SVN: r260569
This commit is contained in:
Richard Biener 2018-05-23 09:06:01 +00:00 committed by Richard Biener
parent ad4f3f5d4e
commit 72cfbeae2b
4 changed files with 41 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2018-05-23 Richard Biener <rguenther@suse.de>
PR middle-end/85874
* tree-data-ref.c (create_runtime_alias_checks): Defer
and ignore overflow warnings.
2018-05-23 Yury Gribov <tetra2005@gmail.com>
PR tree-optimization/85822

View File

@ -1,3 +1,8 @@
2018-05-23 Richard Biener <rguenther@suse.de>
PR middle-end/85874
* gcc.dg/Wstrict-overflow-27.c: New testcase.
2018-05-23 Yury Gribov <tetra2005@gmail.com>
PR tree-optimization/85822

View File

@ -0,0 +1,28 @@
/* { dg-do compile } */
/* { dg-options "-O3 -Wstrict-overflow=2 -Werror" } */
typedef __SIZE_TYPE__ size_t;
extern char *strtok_r (char *__restrict __s, const char *__restrict __delim,
char **__restrict __save_ptr)
__attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 3)));
extern const unsigned short int **__ctype_b_loc (void)
__attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
extern int *DEBUGLEVEL_CLASS;
size_t debug_num_classes = 0;
void debug_parse_param(char *param);
void
debug_parse_levels(const char *params_str, size_t str_len)
{
char str[str_len+1];
char *tok, *saveptr;
size_t i;
tok = strtok_r(str, " \t,\n\r", &saveptr);
if (((*__ctype_b_loc ())[(int) ((tok[0]))]))
tok = strtok_r(((void *)0), " \t,\n\r", &saveptr);
else
DEBUGLEVEL_CLASS[0] = 0;
for (i = 0 +1; i < debug_num_classes; i++)
DEBUGLEVEL_CLASS[i] = DEBUGLEVEL_CLASS[0];
while (tok != ((void *)0) )
debug_parse_param(tok);
}

View File

@ -1918,6 +1918,7 @@ create_runtime_alias_checks (struct loop *loop,
{
tree part_cond_expr;
fold_defer_overflow_warnings ();
for (size_t i = 0, s = alias_pairs->length (); i < s; ++i)
{
const dr_with_seg_len& dr_a = (*alias_pairs)[i].first;
@ -1940,6 +1941,7 @@ create_runtime_alias_checks (struct loop *loop,
else
*cond_expr = part_cond_expr;
}
fold_undefer_and_ignore_overflow_warnings ();
}
/* Check if OFFSET1 and OFFSET2 (DR_OFFSETs of some data-refs) are identical