diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 8c811c990d..6e18dfcd3b 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2012-01-11 Paul Hilfinger + + * 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 Joel Brobecker diff --git a/gdb/testsuite/gdb.base/watchpoint.c b/gdb/testsuite/gdb.base/watchpoint.c index 50f0a83635..88c110f273 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 f321de53c1..1860368b51 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"