# Copyright 2010, 2011 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/>.

# Check that GDB can call C++ functions whose parameters or return values have
# type containing a static member of the same type.

# Still no C++ compiler is used.
if { [skip_cplus_tests] } { continue }

load_lib dwarf.exp
# This test can only be run on targets which support DWARF-2 and use gas.
if {![dwarf2_support]} {
    return 0  
}

set testfile "dw2-cp-infcall-ref-static"
if { [prepare_for_testing ${testfile}.exp ${testfile} [list ${testfile}-main.c ${testfile}.S] {}] } {
    return -1
}

if ![runto_main] then {
    return -1
}

# main is not provided by DWARF.
gdb_test_no_output "set language c++"

# There are no mangled names in DWARF to suggest the v3 ABI.
gdb_test_no_output "set cp-abi gnu-v3"

# GDB could crash.  There is no DW_AT_location so it is <optimized out>.
gdb_test "p f()" { = {static s = <optimized out>}}
