diff mbox series

Disable strict-overflow warnings from data-ref code

Message ID alpine.LSU.2.20.1805231038410.24704@zhemvz.fhfr.qr
State New
Headers show
Series Disable strict-overflow warnings from data-ref code | expand

Commit Message

Richard Biener May 23, 2018, 8:42 a.m. UTC
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  <rguenther@suse.de>

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

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

Patch

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);
+}