re PR middle-end/85874 (gcc points to wrong location when displaying warning for...
authorRichard Biener <rguenther@suse.de>
Wed, 23 May 2018 09:06:01 +0000 (09:06 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Wed, 23 May 2018 09:06:01 +0000 (09:06 +0000)
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

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/Wstrict-overflow-27.c [new file with mode: 0644]
gcc/tree-data-ref.c

index 202b658d872b6391fd9bdae0c33ad255211405e8..534ecd3939813af6ef9d6175cb7ec3fc6ba29201 100644 (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
index 075f845977fdad6d45768c950524bebec4a2018f..5a80e1d1a5c6149d6ff522d17b8c48163a08a347 100644 (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
diff --git a/gcc/testsuite/gcc.dg/Wstrict-overflow-27.c b/gcc/testsuite/gcc.dg/Wstrict-overflow-27.c
new file mode 100644 (file)
index 0000000..95d101a
--- /dev/null
@@ -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);
+}
index e2107feb22a35197ed6f5674f4a56f7e3f3db0c1..0917d6dff0148ce5729b38affe63a8417a98ce21 100644 (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