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

# This file is part of the gdb testsuite

# Test expressions which assume an implicit "this" with a qualified
# name.

if {[skip_cplus_tests]} { continue }

standard_testfile .cc

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

# First test expressions when there is no context.
with_test_prefix "before run" {
    gdb_test "print i" "No symbol \"i\" in current context."
    gdb_test "print D::i" "Cannot reference non-static field \"i\""
    gdb_test "print D::B<int>::i" "Cannot reference non-static field \"i\""
    gdb_test "print B<int>::i" "Cannot reference non-static field \"i\""
    gdb_test "print D::C::i" "Cannot reference non-static field \"i\""
    gdb_test "print C::i" "Cannot reference non-static field \"i\""
    gdb_test "print D::B<int>::A<int>::i" \
	"Cannot reference non-static field \"i\""
    gdb_test "print B<int>::A<int>::i" "Cannot reference non-static field \"i\""
    gdb_test "print A<int>::i" "Cannot reference non-static field \"i\""
    gdb_test "print D::C::A<int>::i" "Cannot reference non-static field \"i\""
    gdb_test "print C::A<int>::i" "Cannot reference non-static field \"i\""
    gdb_test "print D::x" "Cannot reference non-static field \"x\""
    gdb_test "print x" "No symbol \"x\" in current context."
    gdb_test "print D::C::c" "Cannot reference non-static field \"c\""
    gdb_test "print C::c" "Cannot reference non-static field \"c\""
    gdb_test "print c" "No symbol \"c\" in current context."
    gdb_test "print D::A<int>::i" "Cannot reference non-static field \"i\""
}

# Run to D::f.
if {![runto_main]} {
    perror "couldn't run to main"
    continue
}

gdb_breakpoint "D::f"
gdb_continue_to_breakpoint "continue to D::f"

# Now test valid expressions in the class hierarchy for D.
with_test_prefix "at D::f (valid expressions)" {
    gdb_test "print i" "= 4"
    gdb_test "print D::i" "= 4"
    gdb_test "print D::B<int>::i" "= 2"
    gdb_test "print B<int>::i" "= 2"
    gdb_test "print D::Bint::i" \
	"No type \"Bint\" within class or namespace \"D\"."
    gdb_test "print Bint::i" "= 2"
    gdb_test "print D::C::i" "= 3"
    gdb_test "print C::i" "= 3"
    gdb_test "print D::B<int>::A<int>::i" "= 1"
    gdb_test "print B<int>::A<int>::i" "= 1"
    gdb_test "print D::Bint::A<int>::i" \
	"No type \"Bint\" within class or namespace \"D\"."
    gdb_test "print Bint::A<int>::i" "= 1"
    gdb_test "print A<int>::i" "= 1"
    gdb_test "print D::C::A<int>::i" "= 1"
    gdb_test "print C::A<int>::i" "= 1"
    gdb_test "print D::x" "= 40"
    gdb_test "print x" "= 40"
    gdb_test "print D::C::c" "= 30"
    gdb_test "print C::c" "= 30"
    gdb_test "print c" "= 30"
    gdb_test "print D::A<int>::i" "= 1"
}

# Test some invalid expressions
with_test_prefix "at D::f (invalid expressions)" {
    gdb_test "print D::B<int>::c" "There is no field named c"
    gdb_test "print D::B<int>::A<int>::c" "There is no field named c"
    gdb_test "print D::Bint::c" \
	"No type \"Bint\" within class or namespace \"D\"."

    gdb_test "print D::Bint::A<int>::c" \
	"No type \"Bint\" within class or namespace \"D\"."
    gdb_test "print D::C::A<int>::c" "There is no field named c"
    gdb_test "print B<int>::c" "There is no field named c"
    gdb_test "print B<int>::A<int>::c" "There is no field named c"
    gdb_test "print Bint::c" "There is no field named c"
    gdb_test "print Bint::A<int>::c" "There is no field named c"
    gdb_test "print C::A<int>::c" "There is no field named c"
    gdb_test "print D::B<int>::x" "There is no field named x"
    gdb_test "print D::B<int>::A<int>::x" "There is no field named x"
    gdb_test "print D::Bint::x" \
	"No type \"Bint\" within class or namespace \"D\"."
    gdb_test "print D::Bint::A<int>::x" \
	"No type \"Bint\" within class or namespace \"D\"."
    gdb_test "print B<int>::x" "There is no field named x"
    gdb_test "print B<int>::A<int>::x" "There is no field named x"
    gdb_test "print Bint::x" "There is no field named x"
    gdb_test "print Bint::A<int>::x" "There is no field named x"
    gdb_test "print D::C::x" "There is no field named x"
    gdb_test "print C::x" "There is no field named x"
    gdb_test "print D::C::A<int>::x" "There is no field named x"
    gdb_test "print C::A<int>::x" "There is no field named x"
}

# Test some ambiguous names
with_test_prefix "at D::f (ambiguous names)" {
    gdb_test "print B<int>::common" " = 200"
    gdb_test "print Bint::common" " = 200"
    gdb_test "print C::common" " = 300"
    gdb_test "print am.i" " = 1000"
    gdb_test "print am.A<int>::i" \
	"base class 'A<int>' is ambiguous in type 'Ambig'"
    gdb_test "print am.BB::A<int>::i" \
	"base class 'A<int>' is ambiguous in type 'Ambig'"
    gdb_test "print am.CC::A<int>::i" \
	"base class 'A<int>' is ambiguous in type 'Ambig'"
}
