[Bug tree-optimization/89350] [9 Regression] Wrong -Wstringop-overflow= warning since r261518
jakub at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Feb 15 08:30:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89350
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |jakub at gcc dot gnu.org
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Well, we could perhaps do something like:
--- gcc/gimple-ssa-evrp.c.jj 2019-01-01 12:37:15.712998659 +0100
+++ gcc/gimple-ssa-evrp.c 2019-02-15 09:27:49.569441402 +0100
@@ -41,6 +41,7 @@ along with GCC; see the file COPYING3.
#include "tree-cfgcleanup.h"
#include "vr-values.h"
#include "gimple-ssa-evrp-analyze.h"
+#include "tree-dfa.h"
class evrp_folder : public substitute_and_fold_engine
{
@@ -307,6 +308,21 @@ execute_early_vrp ()
scev_initialize ();
calculate_dominance_info (CDI_DOMINATORS);
+ /* argc in main is never negative. */
+ if (MAIN_NAME_P (DECL_NAME (current_function_decl))
+ && DECL_ARGUMENTS (current_function_decl))
+ {
+ tree argc = DECL_ARGUMENTS (current_function_decl);
+ if (TYPE_MAIN_VARIANT (TREE_TYPE (argc)) == integer_type_node)
+ {
+ argc = ssa_default_def (cfun, argc);
+ if (argc && SSA_NAME_RANGE_INFO (argc) == NULL)
+ set_range_info (argc, VR_RANGE,
+ wi::zero (TYPE_PRECISION (integer_type_node)),
+ wi::to_wide (TYPE_MAX_VALUE (integer_type_node)));
+ }
+ }
+
/* Walk stmts in dominance order and propagate VRP. */
evrp_dom_walker walker;
walker.walk (ENTRY_BLOCK_PTR_FOR_FN (cfun));
(not really sure if it will work fine with Ada, it does some games with main).
That said, I bet the original package code didn't have the warning in main but
somewhere else.
More information about the Gcc-bugs
mailing list