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