# Copyright 2014-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

if {[skip_cplus_tests]} { continue }

standard_testfile .cc

if {[prepare_for_testing "failed to prepare" $testfile $srcfile \
	 {debug c++ additional_flags=-std=c++11}]} {
    return -1
}

if {![runto_main]} {
    return -1
}

gdb_test "ptype E1" \
    "type = enum class E1 (: int )?{E1::HI = 7, E1::THERE}"

gdb_test "print E1::HI" " = E1::HI"
gdb_test "print (int) E1::HI" " = 7"
gdb_test "print (int) E2::HI" " = 23"
gdb_test "print HI" "No symbol .HI.*"

gdb_test "print overload1(E1::THERE)" " = 8"
gdb_test "print overload1(77)" " = 0"

gdb_test "print overload2(E1::THERE)" " = 8"
gdb_test "print overload2(77)" \
    "Cannot resolve function overload2 to any overloaded instance"

gdb_test "print overload3(E1::THERE)" \
    "Cannot resolve function overload3 to any overloaded instance"
gdb_test "print overload3(77)" " = 0"
