# Copyright 2011-2021 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 "failed to prepare" ${testfile} ${srcfile} {debug c++}] } {
     return -1
}

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

with_test_prefix "main scope" {
    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"

with_test_prefix "A::B::first scope" {
    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"

with_test_prefix "A::B::C::second scope" {
    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"
}

