# 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 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
}

if [get_compiler_info ${binfile}] {
    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"

if { [test_compiler_info {gcc-[0-3]-*}] ||
     [test_compiler_info {gcc-4-[0-3]-*}]} {
    setup_xfail *-*-*
}

gdb_test "print x" "= 11" "Print imported namespace x"
