aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/Wstrict-overflow-27.c28
-rw-r--r--gcc/tree-data-ref.c2
4 files changed, 41 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 202b658..534ecd3 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 075f845..5a80e1d 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..95d101a
--- /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 e2107fe..0917d6d 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