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

# Test that when multiple variables have the same
# name the one from the correct scope is printed.

if $tracelevel then {
    strace $tracelevel
}

set prms_id 0
set bug_id 0

set testfile shadow
set srcfile ${testfile}.cc
set binfile ${objdir}/${subdir}/${testfile}
if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
    untested "Couldn't compile test program"
    return -1
}

# Get things started.

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}

if ![runto_main] then {
    perror "couldn't run to breakpoint main"
    continue
}

############################################
# Test printing of class variable is not shadowed
# by global variable

gdb_breakpoint [gdb_get_line_number "marker1"]
gdb_continue_to_breakpoint "marker1"

gdb_test "print x" "= 33" "Print class x shadowing global x"


############################################
# Test printing local variable is not shadowed
# by class variable

gdb_breakpoint [gdb_get_line_number "marker2"]
gdb_continue_to_breakpoint "marker2"

gdb_test "print x" "= 44" "Print local x shadowing class x"

############################################
# Test inner scope x is printed not outer scope

gdb_breakpoint [gdb_get_line_number "marker3"]
gdb_continue_to_breakpoint "marker3"

gdb_test "print x" "= 55" "Print inner scope x"

############################################
# Test printing local variable is not shadowed
# by namespace variable

gdb_breakpoint [gdb_get_line_number "marker4"]
gdb_continue_to_breakpoint "marker4"

gdb_test "print x" "= 55" "Print local x not namespace x"

############################################
# Test imported namespace element is printed

gdb_breakpoint [gdb_get_line_number "marker5"]
gdb_continue_to_breakpoint "marker5"

setup_kfail "gdb/7936" "*-*-*"
gdb_test "print x" "= 11" "Print imported namespace x"
