This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Undefined behavior in genautomata.c?


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]