Re: [PATCH] -var-update [was Re: Variable objects: references formatting]

Daniel Jacobowitz
2006-05-15T16:46:11Z

On Tue, May 09, 2006 at 12:40:43AM +1200, Nick Roberts wrote:
> I think this patch works. My reasoning is one of symmetry: whatever is done to
> val2 should also be done to val1, and that you probably don't want to change
> the contents of val1 (hence val3). I don't know exactly what coerce_array
> does, apart from convert the type from TYPE_CODE_REF to TYPE_CODE_INT or
> TYPE_CODE_FLOAT or whatever, so the comment might not be quite right.

I don't think this is in the right place: you're using an argument of
symmetry, but in fact, the comments in my_value_equal suggest that
symmetry is inappropriate. For instance:

/* The contents of VAL1 are supposed to be known. */
gdb_assert (!value_lazy (val1));

If val1 is the reference at this point, then we haven't checked what we
think we have.

Every time my_value_equal is called its first argument comes from a
varobj's ->value. It seems to me that if we want to properly know
whether the varobj has changed, we'd better have read its value into
GDB.

I spent a little while looking around and the right places to fix
weren't entirely obvious, but I am tentatively thinking after the
gdb_evaluate_expression call in varobj_create and before the assignment
to ->value in varobj_update. But there might be more; really you'd
have to think about each time the address of ->value is taken or
->value is directly assigned to (basically grep for each ->value and
look at the context).

--
Daniel Jacobowitz
CodeSourcery