# 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 operator
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 global operator
gdb_test "p a == 1" "= 11" "global operator"
gdb_test "p a == 'a'" "= 12" "global operator overload"

# Test ADL operator
gdb_test "p bc == 1" "= 22" "ADL operator"
gdb_test "p bc == 'a'" "= 23" "ADL operator overload"
gdb_test "p B::BD::operator== (bc,'a')" "= 24" "Fully qualified explicit operator call"

# Test operator imported from anonymous namespace
gdb_test "p d == 1" "= 33" "anonymous namespace operator"
gdb_test "p d == 'a'" "= 34" "anonymous namespace operator overload"
gdb_test "p d == 1.0f" "= 35" "anonymous namespace operator overload float"

# Test operator imported by using directive
gdb_test "p e == 1" "= 44" "imported operator"
gdb_test "p e == 'a'" "= 45" "imported operator overload"
gdb_test "p e == 1.0f" "= 46" "imported operator overload float"

# Test member operator
gdb_test "p g == 1" "= 55" "member operator"
gdb_test "p g == 'a'" "= 56" "member operator overload"

# Test that operators are not wrongly imported
# by import declarations and namespace aliases
gdb_test "p h == 1" "Cannot resolve function operator== to any overloaded instance" "namespace alias"
gdb_test "p j == 1" "Cannot resolve function operator== to any overloaded instance" "imported declaration"

# Test that indirectly imported operators work
gdb_test "p l == 1" "= 88"

# Test that we don't fall into an import loop
gdb_test {p x[0]} {No symbol "operator\[\]" in current context.}
