# Copyright 2012-2020 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"

standard_ada_testfile foo

if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } {
  return -1
}

clean_restart ${testfile}

set bp_location [gdb_get_line_number "STOP1" ${testdir}/foo.adb]
runto "foo.adb:$bp_location"

# Print My_Object and My_Object.Ptr when Ptr is null...

gdb_test "print my_object" \
         "= \\(n => 3, ptr => 0x0, data => \\(3, 5, 8\\)\\)" \
         "print My_Object with null Ptr"

gdb_test "print my_object.ptr" \
         "= \\(foo.table_access\\) 0x0" \
         "print My_Object.Ptr when null"

# Same for My_P_Object...

gdb_test "print my_p_object" \
         "= \\(n => 3, ptr => 0x0, data => \\(3, 5, 8\\)\\)" \
         "print My_P_Object with null Ptr"

gdb_test "print my_p_object.ptr" \
         "\\(foo.p_table_access\\) 0x0" \
         "print My_P_Object.Ptr when null"

# Continue until the Ptr component of both objects get allocated.

set bp_location [gdb_get_line_number "STOP2" ${testdir}/foo.adb]

gdb_breakpoint "foo.adb:$bp_location"

gdb_test "continue" \
         "Breakpoint $decimal, foo \\(\\) at .*foo.adb:$decimal.*" \
         "continue to STOP2"

# Inspect My_Object again...

gdb_test "print my_object" \
         "= \\(n => 3, ptr => $hex, data => \\(3, 5, 8\\)\\)" \
         "print my_object after setting Ptr"

gdb_test "print my_object.ptr" \
         "\\(foo.table_access\\) $hex" \
         "print My_P_Object.Ptr when no longer null"

gdb_test "print my_object.ptr.all" \
         "= \\(13, 21, 34\\)"

# Same with My_P_Object...

gdb_test "print my_p_object" \
         "= \\(n => 3, ptr => $hex, data => \\(3, 5, 8\\)\\)" \
         "print my_p_object after setting Ptr"

gdb_test "print my_p_object.ptr" \
         "= \\(foo.p_table_access\\) $hex" \
         "print My_P_Object.Ptr when no longer null"

gdb_test "print my_p_object.ptr.all" \
         "\\(13, 21, 34\\)"

