# Copyright 2022-2025 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/>.

# Check that GDB handles the user asking for the value of a label
# symbol (i.e. a symbol for a goto label).

load_lib gdb-python.exp
require allow_python_tests
standard_testfile

if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile}] } {
    return -1
}

if ![runto_main] {
   return -1
}

# Use Python to print the value of the 'some_label' symbol.
gdb_test "python frame = gdb.selected_frame()"
gdb_test "python frame_pc = frame.pc()"
gdb_test "python block = gdb.current_progspace().block_for_pc(frame_pc)"
gdb_test "python symbol,_ = gdb.lookup_symbol('some_label', block, gdb.SYMBOL_LABEL_DOMAIN)"
gdb_test "python print(str(symbol.value()))" "$hex <main\\+$decimal>"
gdb_test "python print(str(symbol.value().type))" "void \\*"
