1# Copyright 1992-2020 Free Software Foundation, Inc.
2
3# This program is free software; you can redistribute it and/or modify
4# it under the terms of the GNU General Public License as published by
5# the Free Software Foundation; either version 3 of the License, or
6# (at your option) any later version.
7#
8# This program is distributed in the hope that it will be useful,
9# but WITHOUT ANY WARRANTY; without even the implied warranty of
10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11# GNU General Public License for more details.
12#
13# You should have received a copy of the GNU General Public License
14# along with this program.  If not, see <http://www.gnu.org/licenses/>.
15
16# Test callling a method on a variable that has been put in a
17# register.
18
19if { [skip_cplus_tests] } { continue }
20
21load_lib "cp-support.exp"
22
23standard_testfile .cc
24
25if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug c++}]} {
26    return -1
27}
28
29proc test_call_register_class {} {
30    global gdb_prompt
31
32    if ![runto_main] {
33	fail "couldn't run to main"
34	return
35    }
36
37    set bp_location [gdb_get_line_number "set breakpoint here"]
38    gdb_breakpoint $bp_location
39    gdb_continue_to_breakpoint "break here"
40
41    # This class is so small that an instance of it can fit in a register.
42    # When gdb tries to call a method, it gets embarrassed about taking
43    # the address of a register.
44    #
45    # That message is a PASS, not an XFAIL, because gdb prints an
46    # informative message and declines to do something impossible.
47    #
48    # The method call actually succeeds if the compiler allocates very
49    # small classes in memory instead of registers.  If that happens,
50    # it's a FAIL, because the testcase is written in a form such that
51    # it should not happen.
52    gdb_test "print v.method ()" \
53	"Address requested for identifier \"v\" which is in register .*" \
54	"call method on register local"
55}
56
57test_call_register_class
58