>
> 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;