> > On Wed, 2006-02-08 at 12:28 -0500, Andrew Pinski wrote: > > > > > > I've build in a unified (symlink) tree, with sourceware stuff checked > > > out via cvs from date/time D2006.02.07.17.00.00 > > > > I am reducing this failure and will file a bug report. > > > > This failure is actually a latent bug elsewhere in marking statements > annotations with volatile ops > > PRE doesn't touch statements that contain volatile operations because > operand_equal_p claims two volatile operands are different, even if they > look the same (which is the underlying cause of your infinite loop. We > keep thinking we've generated new values because the hash lookup never > finds the old ones because operand_equal_p returns false) > > All the other statements related to your volatile expressions have > stmt_ann (stmt)->has_volatile_ops set to 1. > > yet > > (gdb) p ann->has_volatile_ops > $18 = 0 > :(
I have a patch which is testing right now and I will apply it as pre-approved (by Diego) once it has finishing testing. Thanks, Andrew Pinski ChangeLog: * tree-flow-inline.h (var_can_have_subvars): Volatile variables should not have subvariables.
Index: tree-flow-inline.h =================================================================== --- tree-flow-inline.h (revision 110761) +++ tree-flow-inline.h (working copy) @@ -1463,6 +1463,11 @@ get_subvar_at (tree var, unsigned HOST_W static inline bool var_can_have_subvars (tree v) { + + /* Volatile variables should never have subvars. */ + if (TREE_THIS_VOLATILE (v)) + return false; + /* Non decls or memory tags can never have subvars. */ if (!DECL_P (v) || MTAG_P (v)) return false;