This silences an unhelpful warning about strict-overflow for the
samba build.  The warning is emitted from
tree-data-ref.c:create_intersect_range_checks and ends up in
the default input_location which is just the function scope.

Bootstrapped and tested on x86_64-unknown-linux-gnu, will apply to trunk 
and branch.

I guess we should eventually prune all input_location using warnings
and make those strict-overflow warnings opt-in rather than opt-out?
Thus only emit them from frontend triggered foldings?

Thanks,
Richard.

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

        * tree-data-ref.c (create_runtime_alias_checks): Defer
        and ignore overflow warnings.

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

Index: gcc/tree-data-ref.c
===================================================================
--- gcc/tree-data-ref.c (revision 260306)
+++ gcc/tree-data-ref.c (working copy)
@@ -1918,6 +1918,7 @@ create_runtime_alias_checks (struct 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
       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
Index: gcc/testsuite/gcc.dg/Wstrict-overflow-27.c
===================================================================
--- gcc/testsuite/gcc.dg/Wstrict-overflow-27.c  (nonexistent)
+++ gcc/testsuite/gcc.dg/Wstrict-overflow-27.c  (working copy)
@@ -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);
+}

Reply via email to