diff options
author | Paul N. Hilfinger <hilfinger@adacore.com> | 2012-01-11 10:36:18 +0000 |
---|---|---|
committer | Paul N. Hilfinger <hilfinger@adacore.com> | 2012-01-11 10:36:18 +0000 |
commit | 97ddaa9bd5f8f4d51d6dac55831d2494a0ea2bdd (patch) | |
tree | 9e3ee3ae9c11133ebc873841dacfd0417738e297 /gdb | |
parent | ea7335759531113c855fab30d191462b44a08dd8 (diff) | |
download | gdb-97ddaa9bd5f8f4d51d6dac55831d2494a0ea2bdd.zip gdb-97ddaa9bd5f8f4d51d6dac55831d2494a0ea2bdd.tar.gz gdb-97ddaa9bd5f8f4d51d6dac55831d2494a0ea2bdd.tar.bz2 |
Add test for use of "<block>::<variable>" syntax for locals in watch.
First, fix a technical problem with the function recurser. The test sets a
watch on local_x at a point where its value is technically undefined. The
test is written assuming that the value is not initially 2, but nothing in the
C standard guarantees that.
Second, augment the existing test for variables in recursive calls to check an
equivalent expression that explicitly sets the scope of the local variable
being tracked.
2012-01-11 Paul Hilfinger <hilfingr@adacore.com>
* gdb.base/watchpoint.c (recurser): Initialize local_x.
(main): Repeat recurser call.
* gdb.base/watchpoint.exp: Check that 'watch recurser::local_x' is
equivalent to 'local_x'.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/watchpoint.c | 8 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/watchpoint.exp | 14 |
3 files changed, 28 insertions, 1 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 8c811c9..6e18dfc 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,4 +1,11 @@ 2012-01-11 Paul Hilfinger <hilfingr@adacore.com> + + * gdb.base/watchpoint.c (recurser): Initialize local_x. + (main): Repeat recurser call. + * gdb.base/watchpoint.exp: Check that 'watch recurser::local_x' is + equivalent to 'local_x'. + +2012-01-11 Paul Hilfinger <hilfingr@adacore.com> Joel Brobecker <brobecker@adacore.com> * gdb.base/recpar.c, gdb.base/recpar.exp: New files. diff --git a/gdb/testsuite/gdb.base/watchpoint.c b/gdb/testsuite/gdb.base/watchpoint.c index 50f0a83..88c110f 100644 --- a/gdb/testsuite/gdb.base/watchpoint.c +++ b/gdb/testsuite/gdb.base/watchpoint.c @@ -80,7 +80,7 @@ void recurser (int x) void recurser (x) int x; #endif { - int local_x; + int local_x = 0; if (x > 0) recurser (x-1); @@ -232,6 +232,12 @@ int main () marker6 (); recurser (2); + /* This invocation is used for watches of a local variable with explicitly + specified scope when recursion happens. + */ + marker6 (); + recurser (2); + marker6 (); func3 (); diff --git a/gdb/testsuite/gdb.base/watchpoint.exp b/gdb/testsuite/gdb.base/watchpoint.exp index f321de5..1860368 100644 --- a/gdb/testsuite/gdb.base/watchpoint.exp +++ b/gdb/testsuite/gdb.base/watchpoint.exp @@ -580,6 +580,7 @@ proc test_complex_watchpoint {} { # gdb_test "tbreak recurser" ".*breakpoint.*" gdb_test "cont" "Continuing.*recurser.*" + gdb_test "next" "if \\(x > 0.*" "next past local_x initialization" gdb_test "watch local_x" ".*\[Ww\]atchpoint \[0-9\]*: local_x" \ "set local watch in recursive call" gdb_test "cont" "Continuing.*\[Ww\]atchpoint .*: local_x.*New value = 2.*" \ @@ -587,6 +588,19 @@ proc test_complex_watchpoint {} { gdb_test "cont" "Continuing.*\[Ww\]atchpoint .* deleted because the program has left the block in.*which its expression is valid.*" \ "self-delete local watch in recursive call" + # Repeat the preceding test, but this time use "recurser::local_x" as + # the variable to track. + gdb_test "cont" "Continuing.*marker6.*" + gdb_test "tbreak recurser" ".*breakpoint.*" + gdb_test "cont" "Continuing.*recurser.*" + gdb_test "next" "if \\(x > 0.*" "next past local_x initialization" + gdb_test "watch recurser::local_x" ".*\[Ww\]atchpoint \[0-9\]*: recurser::local_x" \ + "set local watch in recursive call with explicit scope" + gdb_test "cont" "Continuing.*\[Ww\]atchpoint .*: recurser::local_x.*New value = 2.*" \ + "trigger local watch with explicit scope in recursive call" + gdb_test "cont" "Continuing.*\[Ww\]atchpoint .* deleted because the program has left the block in.*which its expression is valid.*" \ + "self-delete local watch with explicit scope in recursive call (2)" + # Disable everything so we can finish the program at full speed gdb_test_no_output "disable" "disable in test_complex_watchpoint" |