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

gdb_breakpoint [gdb_get_line_number "end of main"]
gdb_continue_to_breakpoint "end of main"

# The 'test*' functions are to prove our understanding
# of the overload resolution performed by the compiler
# So, they should always pass, and the returned value
# should match the corresponding call to 'foo*'

setup_kfail "gdb/12096" *-*-*
gdb_test "p foo0(b)" "10"

gdb_test "p test1()" "12"
gdb_test "p foo1(b)" "12"

gdb_test "p test2()" "13"
setup_kfail "gdb/12098" *-*-*
gdb_test "p foo2(b)" "13"

gdb_test "p test3()"    "21"
gdb_test "p foo3(1.0f)" "21"

gdb_test "p test4()"  "24"
gdb_test "p foo4(&a)" "24"

gdb_test "p test5()" "26"
gdb_test "p foo5(c)" "26"

gdb_test "p test6()"  "28"
gdb_test "p foo6(bp)" "28"

gdb_test "p test7()"  "210"
gdb_test "p foo7(cp)" "210"

gdb_test "p test8()"  "212"
gdb_test "p foo8(co)" "212"

gdb_test "p test9()"  "214"
gdb_test "p foo9(co)" "214"

gdb_test "p test10()"   "216"
setup_kfail "gdb/12098" *-*-*
gdb_test "p foo10(amp)" "216"

gdb_test "p test101()"   "218"
gdb_test "p foo101(\"abc\")" "218"

gdb_test "p test11()"   "32"
setup_kfail "gdb/12096" *-*-*
gdb_test "p foo11(d)" "32"

gdb_test "p test12()" "42"
# this passes only because gdb does not yet
# implement template function calling
gdb_test "p foo12(1)" "42"

gdb_test "p test13()" "44"
setup_kfail "gdb/12098" *-*-*
gdb_test "p foo13(c)" "44"

gdb_test "p test14()" "46"
setup_kfail "gdb/12096" *-*-*
gdb_test "p foo14(e)" "46"

gdb_test "p test15 ()" "194"
gdb_test "p foo15 (c)" "47"
gdb_test "p foo15 (cc)" "48"
gdb_test "p foo15 (vc)" "49"
gdb_test "p foo15 (cvc)" "50"
