aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.mi/mi-var-cmd.exp
diff options
context:
space:
mode:
authorDaniel Jacobowitz <drow@false.org>2007-01-04 21:59:10 +0000
committerDaniel Jacobowitz <drow@false.org>2007-01-04 21:59:10 +0000
commit5e572bb44adb067e5d4daf50169243b610954061 (patch)
tree0483aa01f18e2d862a4e83a31ac70b9e9cf715b0 /gdb/testsuite/gdb.mi/mi-var-cmd.exp
parent74a44383f0a7ceb4976b51dbf0a8709df34b8e24 (diff)
downloadgdb-5e572bb44adb067e5d4daf50169243b610954061.zip
gdb-5e572bb44adb067e5d4daf50169243b610954061.tar.gz
gdb-5e572bb44adb067e5d4daf50169243b610954061.tar.bz2
* Makefile.in (eval.o): Update dependencies.
* eval.c: Include "ui-out.h" and "exceptions.h". (evaluate_subexp_standard): Use TRY_CATCH around value_of_variable. Use value_zero if an error occurs when avoiding side effects. * varobj.c (c_value_of_root): Initialize new_val. * gdb.mi/mi-var-cmd.exp: Add tests for unreadable varobjs.
Diffstat (limited to 'gdb/testsuite/gdb.mi/mi-var-cmd.exp')
-rw-r--r--gdb/testsuite/gdb.mi/mi-var-cmd.exp43
1 files changed, 43 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.mi/mi-var-cmd.exp b/gdb/testsuite/gdb.mi/mi-var-cmd.exp
index d7cd4e9..9dfcc52 100644
--- a/gdb/testsuite/gdb.mi/mi-var-cmd.exp
+++ b/gdb/testsuite/gdb.mi/mi-var-cmd.exp
@@ -586,5 +586,48 @@ mi_gdb_test "-var-update selected_a" \
"\\^done,changelist=\\\[\{name=\"selected_a\",in_scope=\"true\",new_type=\"int\",new_num_children=\"0\"\}\\\]" \
"update selected_a in do_special_tests"
+# Test whether bad varobjs crash GDB.
+
+# A varobj we fail to read during -var-update should be considered
+# out of scope.
+mi_gdb_test "-var-create null_ptr * **0" \
+ {\^done,name="null_ptr",numchild="0",type="int"} \
+ "create null_ptr"
+
+# Allow this to succeed, if address zero is readable, although it
+# will not test what it was meant to. Most important is that GDB
+# does not crash.
+mi_gdb_test "-var-update null_ptr" \
+ {\^done,changelist=\[{.*}\]} \
+ "update null_ptr"
+
+mi_gdb_test "-var-delete null_ptr" \
+ "\\^done,ndeleted=\"1\"" \
+ "delete null_ptr"
+
+# When we fail to read a varobj created from a named variable,
+# we evaluate its type instead. Make sure that doesn't blow
+# up by trying to read it again. We can use _end when not running
+# the program to simulate an unreadable variable, if this platform
+# provides _end, but cope if it's missing.
+
+mi_gdb_test "kill" \
+ {&"kill\\n".*\^done} \
+ "kill program before endvar"
+
+mi_gdb_test "-var-create endvar * _end" \
+ {(\^done,name="endvar",numchild="0",type=".*"|&".*unable to.*".*\^error,msg=".*")} \
+ "create endvar"
+
+# Allow this to succeed whether the value is readable, unreadable, or
+# missing. Most important is that GDB does not crash.
+mi_gdb_test "-var-update endvar" \
+ {(\^done,changelist=\[.*\]|^".*".*\^error,msg=".*not found")} \
+ "update endvar"
+
+mi_gdb_test "-var-delete endvar" \
+ "\\^done,ndeleted=\"1\"" \
+ "delete endvar"
+
mi_gdb_exit
return 0