Hi,
I was working on improving the results of scev, when VRP has broken
the bootstrap, eliminating loops that were estimated as running a
single time. These loop bound estimates come from the undefined
behavior of accessing over the bounds of statically allocated data in
genautomata.c:
*** genautomata.c.~1.66.~ 2005-07-29 17:46:30.000000000 +0200
--- genautomata.c 2005-09-19 11:11:22.000000000 +0200
***************
*** 1032,1037 ****
--- 1032,1050 ----
contains all declarations. We allocate additional entry for
special insn "cycle advancing" which is added by the automaton
generator. */
+ /* decls is statically declared as containing a single element, but
+ then, during the execution, other data is appended to the end of
+ this array, and elements over the statically allocated size are
+ accessed! This undefined behavior could affect a lot of
+ programs, now that VRP is doing its work. The problem is that
+ these cases are difficult to detect and diagnose without a
+ warning.
+
+ The fix is to declare this array as dynamically allocated as:
+
+ decl_t *decls;
+
+ then dynamically allocate its elements. */
decl_t decls [1];
};
Sebastian