From: Richard Biener Date: Wed, 23 May 2018 09:06:01 +0000 (+0000) Subject: re PR middle-end/85874 (gcc points to wrong location when displaying warning for... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=72cfbeae2b8dbc10e2738f5ccbe6328ac2111ddf;p=gcc.git re PR middle-end/85874 (gcc points to wrong location when displaying warning for strict overflow warning) 2018-05-23 Richard Biener 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 202b658d872..534ecd39398 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2018-05-23 Richard Biener + + PR middle-end/85874 + * tree-data-ref.c (create_runtime_alias_checks): Defer + and ignore overflow warnings. + 2018-05-23 Yury Gribov PR tree-optimization/85822 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 075f845977f..5a80e1d1a5c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-05-23 Richard Biener + + PR middle-end/85874 + * gcc.dg/Wstrict-overflow-27.c: New testcase. + 2018-05-23 Yury Gribov PR tree-optimization/85822 diff --git a/gcc/testsuite/gcc.dg/Wstrict-overflow-27.c b/gcc/testsuite/gcc.dg/Wstrict-overflow-27.c new file mode 100644 index 00000000000..95d101ad02e --- /dev/null +++ b/gcc/testsuite/gcc.dg/Wstrict-overflow-27.c @@ -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); +} diff --git a/gcc/tree-data-ref.c b/gcc/tree-data-ref.c index e2107feb22a..0917d6dff01 100644 --- a/gcc/tree-data-ref.c +++ b/gcc/tree-data-ref.c @@ -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