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

set testfile oranking
set srcfile ${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_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"
setup_kfail "gdb/12098" *-*-*
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"
setup_kfail "gdb/12098" *-*-*
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"



