+2017-11-08 Joel Brobecker <brobecker@adacore.com>
+
+ * ada-exp.y (write_var_from_sym): Remove parameter
+ "orig_left_context". Update all callers.
+
2017-11-08 Simon Marchi <simon.marchi@ericsson.com>
* tracepoint.h (class collection_list) <stringify>: Return
}
/* Emit expression to access an instance of SYM, in block BLOCK (if
- * non-NULL), and with :: qualification ORIG_LEFT_CONTEXT. */
+ non-NULL). */
+
static void
write_var_from_sym (struct parser_state *par_state,
- const struct block *orig_left_context,
const struct block *block,
struct symbol *sym)
{
- if (orig_left_context == NULL && symbol_read_needs_frame (sym))
+ if (symbol_read_needs_frame (sym))
{
if (innermost_block == 0
|| contained_in (block, innermost_block))
&inner_renaming_expr))
{
case ADA_NOT_RENAMING:
- write_var_from_sym (par_state, orig_left_context, sym_info.block,
- sym_info.symbol);
+ write_var_from_sym (par_state, sym_info.block, sym_info.symbol);
break;
case ADA_OBJECT_RENAMING:
write_object_renaming (par_state, sym_info.block,
else if (SYMBOL_CLASS (index_sym_info.symbol) == LOC_TYPEDEF)
/* Index is an old-style renaming symbol. */
index_sym_info.block = orig_left_context;
- write_var_from_sym (par_state, NULL, index_sym_info.block,
+ write_var_from_sym (par_state, index_sym_info.block,
index_sym_info.symbol);
}
if (slice_state == SIMPLE_INDEX)
if (nsyms == 1)
{
- write_var_from_sym (par_state, block, syms[0].block,
- syms[0].symbol);
+ write_var_from_sym (par_state, syms[0].block, syms[0].symbol);
write_selectors (par_state, encoded_name + tail_index);
return NULL;
}
if (nsyms != 1 || SYMBOL_CLASS (syms[0].symbol) == LOC_TYPEDEF)
write_exp_op_with_string (par_state, OP_NAME, name);
else
- write_var_from_sym (par_state, NULL, syms[0].block, syms[0].symbol);
+ write_var_from_sym (par_state, syms[0].block, syms[0].symbol);
}
else
if (write_var_or_type (par_state, NULL, name) != NULL)
+2017-11-08 Joel Brobecker <brobecker@adacore.com>
+
+ * gdb.ada/scoped_watch: New testcase.
+ * gdb.ada/watch_arg.exp: Adjust expected behavior to the behavior
+ which is actually correct.
+ * gdb.ada/mi_interface.exp: Add missing thread-id in expected varobj.
+ * gdb.ada/mi_var_array.exp: Add missing thread-id in expected varobj.
+
2017-11-08 Pedro Alves <palves@redhat.com>
* gdb.gdb/complaints.exp (test_initial_complaints)
"stop at start of main Ada procedure"
mi_gdb_test "-var-create ggg1 * ggg1" \
- "\\^done,name=\"ggg1\",numchild=\"1\",value=\"{...}\",type=\"<ref> pck.gadatatype\",has_more=\"0\"" \
+ "\\^done,name=\"ggg1\",numchild=\"1\",value=\"{...}\",type=\"<ref> pck.gadatatype\",thread-id=\"$decimal\",has_more=\"0\"" \
"create ggg1 varobj"
mi_gdb_test "-var-list-children 1 ggg1" \
- "\\^done,numchild=\"1\",children=\\\[child={name=\"ggg1.i\",exp=\"i\",numchild=\"0\",value=\"42\",type=\"integer\"}\\\],has_more=\"0\"" \
+ "\\^done,numchild=\"1\",children=\\\[child={name=\"ggg1.i\",exp=\"i\",numchild=\"0\",value=\"42\",type=\"integer\",thread-id=\"$decimal\"}\\\],has_more=\"0\"" \
"list ggg1's children"
"create bt varobj"
mi_gdb_test "-var-list-children vta" \
- "\\^done,numchild=\"2\",children=\\\[child={name=\"vta.n\",exp=\"n\",numchild=\"0\",type=\"bar\\.int\"},child={name=\"vta.f\",exp=\"f\",numchild=\"0\",type=\"array \\(1 .. n\\) of character\"}\\\],.*" \
+ "\\^done,numchild=\"2\",children=\\\[child={name=\"vta.n\",exp=\"n\",numchild=\"0\",type=\"bar\\.int\",thread-id=\"$decimal\"},child={name=\"vta.f\",exp=\"f\",numchild=\"0\",type=\"array \\(1 .. n\\) of character\",thread-id=\"$decimal\"}\\\],.*" \
"list vta's children"
--- /dev/null
+# Copyright 2017 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+load_lib "ada.exp"
+
+if { [skip_ada_tests] } { return -1 }
+
+standard_ada_testfile foo_p708_025
+
+if {[gdb_compile_ada "${srcfile}" "${binfile}" executable {debug}] != ""} {
+ return -1
+}
+
+clean_restart ${testfile}
+
+set bp_location [gdb_get_line_number "START" ${testdir}/pck.adb]
+runto "pck.adb:$bp_location"
+
+# Insert a watchpoint on local variable "result"
+
+gdb_test "watch result" \
+ ".*atchpoint \[0-9\]+: result"
+
+# Insert a breakpoint we'll reach after returning from the current
+# function.
+
+set bp_location [gdb_get_line_number "Do_Nothing" ${testdir}/foo_p708_025.adb]
+gdb_test "break foo_p708_025.adb:$bp_location" \
+ "Breakpoint \[0-9\]+ at.*: file .*foo_p708_025.adb, line \[0-9\]+."
+
+# This breakpoint will be there to stop us after we test what happens
+# during a continue (see below...)
+
+gdb_test "break pck.increment" \
+ "Breakpoint \[0-9\]+ at.*: file .*pck.adb, line \[0-9\]+."
+
+# Continue until we reach our watchpoint. It isn't strictly necessary
+# for our purpose that the watchpoint actually triggers, but this shows
+# that the watchpoint exists and is active.
+gdb_test "cont" \
+ ".*atchpoint \[0-9\]+: result.*Old value = 8.*New value = 64.*" \
+ "continuing to watchpoint hit"
+
+# Continue again. We should be stopped at the (internal) breakpoint
+# that we setup to delete the watchpoint as soon as the program leaves
+# the current scope.
+
+gdb_test \
+ "cont" \
+ ".*atchpoint \[0-9\]+ deleted because the program has left the block.*" \
+ "continuing until watchpoint automatic deletion"
+
+# Continue one more time. We should be reaching one of the breakpoints
+# (on the call to Do_Nothing) we set earlier.
+
+gdb_test "cont" \
+ "Breakpoint \[0-9\]+.*Do_Nothing.*" \
+ "continuing to breakpoint on call to Do_Nothing"
+
+# Do a next, to verify that it works...
+
+gdb_test "next" \
+ ".* Call_Me;" \
+ "next to call to Call_Me"
+
+# And finally, one more continue.
+
+
+gdb_test "cont" \
+ "Breakpoint \[0-9\]+.*pck\\.increment.*" \
+ "continuing to breakpoint in pck.increment"
--- /dev/null
+-- Copyright 2017 Free Software Foundation, Inc.
+--
+-- This program is free software; you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation; either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+with Pck; use Pck;
+
+procedure Foo_P708_025 is
+ Val : Integer;
+begin
+ Val := Get_Val (8, False);
+ Do_Nothing (Val);
+ Call_Me;
+ Increment (Val);
+end Foo_P708_025;
--- /dev/null
+-- Copyright 2017 Free Software Foundation, Inc.
+--
+-- This program is free software; you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation; either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+package body Pck is
+ function Get_Val (Seed: Integer; Off_By_One: Boolean) return Integer is
+ Result : Integer := Seed;
+ begin
+ if Off_By_One then -- START
+ Result := Result - 1;
+ end if;
+ Result := Result * 8;
+ if Off_By_One then
+ Result := Result + 1;
+ end if;
+ return Result;
+ end Get_Val;
+
+ procedure Do_Nothing (Val: in out Integer) is
+ begin
+ null;
+ end Do_Nothing;
+
+ procedure Call_Me is
+ begin
+ null;
+ end Call_Me;
+
+ procedure Increment (Val : in out Integer) is
+ begin
+ Val := Val + 1;
+ end Increment;
+end Pck;
--- /dev/null
+-- Copyright 2017 Free Software Foundation, Inc.
+--
+-- This program is free software; you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation; either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+package Pck is
+ function Get_Val (Seed: Integer; Off_By_One: Boolean) return Integer;
+ procedure Do_Nothing (Val: in out Integer);
+ procedure Call_Me;
+ procedure Increment (Val : in out Integer);
+end Pck;
"Breakpoint \[0-9\]+ at.*: file .*watch.adb, line \[0-9\]+." \
"insert second breakpoint in watch.adb"
-# Then continue to that breakpoint, and verify that the watchpoint
-# did not interfere with that.
+# Continue again. We should be stopped at the (internal) breakpoint
+# that we setup to delete the watchpoint as soon as the program leaves
+# the watchpoint scope.
+
+gdb_test \
+ "cont" \
+ ".*atchpoint \[0-9\]+ deleted because the program has left the block.*" \
+ "continuing until watchpoint automatic deletion"
+
+# Continue one more time, and verify that we land at the second breakpoint
+# we inserted.
gdb_test "cont" \
"Breakpoint \[0-9\]+, watch \\(\\).*" \