| # Copyright 2008-2017 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 "failed to prepare" ${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 the name "entry" being used for `variablename@entry' entry values. |
| gdb_test "p entry (c)" " = 44" |
| |
| # 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" |
| |
| # Test that koening lookup does not affect |
| # member variable lookup. |
| gdb_test "p r.rfoo()" "= 31" |
| |
| # Do the same from inside class R. |
| gdb_breakpoint [gdb_get_line_number "marker1"] |
| gdb_continue_to_breakpoint "marker1" |
| |
| gdb_test "p rfoo()" "= 31" |
| gdb_test "p this->rfoo()" "= 31" |