# 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 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.}
