@@ -1390,6 +1390,7 @@ format_integer (const directive &dir, tree arg)
res.range.max = tree_digits (arg, base, dir.prec[1],
maybesign, maybebase);
res.range.likely = res.range.min;
+ res.knownrange = true;
}
res.range.unlikely = res.range.max;
b/gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-18.c
@@ -114,18 +114,15 @@ void test_characters ()
void test_width_and_precision_out_of_range (char *d)
{
-#if __LONG_MAX__ == 2147483647
-# define MAX_P1_STR "2147483648"
-#elif __LONG_MAX__ == 9223372036854775807
-# define MAX_P1_STR "9223372036854775808"
-#endif
-
- T ("%" MAX_P1_STR "i", 0); /* { dg-warning "width out of range" } */
- /* { dg-warning "result to exceed .INT_MAX. " "" { target *-*-* } .-1
} */
- T ("%." MAX_P1_STR "i", 0); /* { dg-warning "precision out of
range" } */
+ /* The range here happens to be a property of the compiler, not
+ one of the target. */
+ T ("%9223372036854775808i", 0); /* { dg-warning "width out of
range" } */
+ /* { dg-warning "result to exceed .INT_MAX." "" { target *-*-* } .-1 } */
+ T ("%.9223372036854775808i", 0); /* { dg-warning "precision out of
range" } */
+ /* { dg-warning "causes result to exceed .INT_MAX." "" { target *-*-*
} .-1 } */