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

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