diff options
author | Richard Biener <rguenther@suse.de> | 2022-03-28 14:55:49 +0200 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2022-03-29 08:14:40 +0200 |
commit | 28c5df79300ab354cbc381aab200f7c2bd0331ad (patch) | |
tree | 6368653bc67b50720ff7f200a045f94b35c371fb | |
parent | 3734527dfa0d10a50aee2f088d37320000fd65bf (diff) | |
download | gcc-28c5df79300ab354cbc381aab200f7c2bd0331ad.zip gcc-28c5df79300ab354cbc381aab200f7c2bd0331ad.tar.gz gcc-28c5df79300ab354cbc381aab200f7c2bd0331ad.tar.bz2 |
tree-optimization/105080 - make sure SCEV is available for ranger
When doing format diagnostics at -O0 we should make sure to make
SCEV available to avoid false positives due to ranges we otherwise
can trivially compute.
2022-03-28 Richard Biener <rguenther@suse.de>
PR tree-optimization/105080
* tree-ssa-strlen.cc (printf_strlen_execute): Always init
loops and SCEV.
* gcc.dg/pr105080.c: New testcase.
-rw-r--r-- | gcc/testsuite/gcc.dg/pr105080.c | 11 | ||||
-rw-r--r-- | gcc/tree-ssa-strlen.cc | 16 |
2 files changed, 15 insertions, 12 deletions
diff --git a/gcc/testsuite/gcc.dg/pr105080.c b/gcc/testsuite/gcc.dg/pr105080.c new file mode 100644 index 0000000..77ee7ee --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr105080.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-O0 -Wall" } */ + +int main() +{ + char foo[3]; + int i; + + for (i = 0; i < 16; i++) + __builtin_snprintf(foo, sizeof(foo), "%d", i); /* { dg-bogus "truncated" } */ +} diff --git a/gcc/tree-ssa-strlen.cc b/gcc/tree-ssa-strlen.cc index 112f0dc..b255636 100644 --- a/gcc/tree-ssa-strlen.cc +++ b/gcc/tree-ssa-strlen.cc @@ -5858,13 +5858,8 @@ printf_strlen_execute (function *fun, bool warn_only) strlen_optimize = !warn_only; calculate_dominance_info (CDI_DOMINATORS); - - bool use_scev = optimize > 0 && flag_printf_return_value; - if (use_scev) - { - loop_optimizer_init (LOOPS_NORMAL); - scev_initialize (); - } + loop_optimizer_init (LOOPS_NORMAL); + scev_initialize (); gcc_assert (!strlen_to_stridx); if (warn_stringop_overflow || warn_stringop_truncation) @@ -5902,11 +5897,8 @@ printf_strlen_execute (function *fun, bool warn_only) strlen_to_stridx = NULL; } - if (use_scev) - { - scev_finalize (); - loop_optimizer_finalize (); - } + scev_finalize (); + loop_optimizer_finalize (); return walker.m_cleanup_cfg ? TODO_cleanup_cfg : 0; } |