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

standard_testfile .cc

if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} {debug c++}] } {
     return -1
}

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

gdb_test "print A::_a" "= 11"
gdb_test "print A::B::ab" "= 22"
gdb_test "print A::B::C::abc" "= 33"

gdb_test "print _a" "No symbol .* in current context."
gdb_test "print ab" "No symbol .* in current context."
gdb_test "print abc" "No symbol .* in current context."

############################################
gdb_breakpoint A::B::first
gdb_continue_to_breakpoint "A::B::first"

gdb_test "print A::_a" "= 11"
gdb_test "print A::B::ab" "= 22"
gdb_test "print A::B::C::abc" "= 33"

gdb_test "print _a" "= 11"
gdb_test "print ab" "= 22"
gdb_test "print C::abc" "= 33"

gdb_test "print abc" "No symbol .* in current context."

############################################
gdb_breakpoint A::B::C::second
gdb_continue_to_breakpoint "A::B::C::second"

gdb_test "print A::_a" "= 11"
gdb_test "print A::B::ab" "= 22"
gdb_test "print A::B::C::abc" "= 33"

gdb_test "print _a" "= 11"
gdb_test "print ab" "= 22"
gdb_test "print abc" "= 33"

