MI failures related to string printing

Vladimir Prus
2007-01-12T10:52:36Z

As I've reported before, I'm getting this failure:

FAIL: gdb.mi/mi-var-child.exp: update all vars psnp->next->next->long_ptr (and 2.long_ptr) changed

After investigation, it appears related to recent -var-update changes. The failing test
does:

mi_gdb_test "-var-update *" \
"\\^done,changelist=\\\[\{name=\"psnp->ptrs.0.next.next.long_ptr\",in_scope=\"true\",type_changed=\"false\"\}\\\]" \
"update all vars psnp->next->next->long_ptr (and 2.long_ptr) changed"

It's the last check in mi-var-child.exp. The reply from gdb includes also:

{name="psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr",in_scope="true",type_changed="false"}

and another similar thing. The problem is that test is written like this:

char a0, *a1, **a2, ***a3;

a0 = '0';
a1 = &a0;
a2 = &a1;
a3 = &a2;

There's a variable object correspoding to a1. When varobj_update tries to compare old
and new value of that varobj, it computes string value of a1. Unfortunately, a1 points to
a single character. There's no terminating zero character. So, the string value of a1 is
essentially random, and -var-update randomly marks varobj as changed.

What do we do about it? At the very least, the test should be fixed. Is there anything smart
we can do here?

- Volodya