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

# Test that koenig lookup finds correct function
gdb_test "p first(c)" "= 11"

# Change the number of parameters and position of
# the qualifying parameter
gdb_test "p second(0,0,c,0,0)" "= 33"

# Test that koenig lookup finds correct function
# even if it is overloaded
gdb_test "p first(0,c)" "= 22"

# Test that koenig lookup finds correct function
# when the argument is an expression
gdb_test "p first(b.c)" "= 11"

# test that resolutions can be made across namespaces
gdb_test "p foo(eo)"         "= 1"
gdb_test "p foo(eo, eo)"     "= 2"
gdb_test "p foo(eo, eo, 1)"  "= 3"
gdb_test "p foo(fo, eo)"     "= 4"
gdb_test "p foo(1 ,fo, eo)"  "= 5"
gdb_test "p foo(go, fo, eo)" "= 6"

#test that gdb fails gracefully
gdb_test "p fake(eo)" "No symbol \"fake\" in current context."
gdb_test "p foo (fake)" "No symbol \"fake\" in current context."

#test that namespaces of base classes are searched
gdb_test "p foo(io)" "= 7"
gdb_test "p foo(ix)" "Cannot resolve function foo to any overloaded instance"

#test for other types
gdb_test "p foo(ju)" "= 8"
gdb_test "p foo(js)" "= 9"
gdb_test "p foo(je)" "= 10"

#test for class members
setup_xfail "*-*-*"
gdb_test "p foo(jab)" "= 11"

gdb_test "p foo(jap)" "= 12"
gdb_test "p foo(japp)" "= 13"
gdb_test "p foo(jca)" "= 14"

#test overload resolution
gdb_test "p foo(ko,1)" "= 15"
gdb_test "p foo(ko,1.0f)" "= 16"
setup_xfail "*-*-*"
gdb_test "p bar(ko,1)" "= -1"

#test lookup of objects belonging to nested namespaces
gdb_test "p foo(labo)" "= 17"

#test koenig found function do not compete with qualified
#names
gdb_test "p ma.foo('a')" "= 18"
gdb_test "p foo(ma,'a')" "= 19"
gdb_test "p M::N::foo(ma,'a')" "= 20"
gdb_test "p M::FAKE::foo(ma,'a')" "No type \"FAKE\" within class or namespace \"M\"."
gdb_test "p M::N::fake(ma,'a')" "No symbol \"fake\" in namespace \"M::N\"."

gdb_test "p M::bar('a')" "= 21"
gdb_test "p M::N::bar('a')" "= 22"

#test that lookup supports typedef
gdb_test "p foo(ttoa, 'a')" "= 23"

#test that lookup is not thwarted by anonymous types
gdb_test "p foo (p_union)" \
  "Cannot resolve function foo to any overloaded instance"

# test lookup of namespace user-defined operators
# and overload resolution:

# within class
gdb_test "p q == 5" "= 24"
gdb_test "p q == 5.0f" "= 25"

# within namespace
gdb_test "p q != 5" "= 27"
gdb_test "p q != 5.0f" "= 28"

# across namespace and class
gdb_test "p q + 5.0f" "= 26"
gdb_test "p q + 5" "= 29"

# some unary operators for good measure
# Cannot resolve function operator++ to any overloaded instance
gdb_test "p ++q" "= 30"
