# 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/>.
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 "pr11465"
set srcfile "$testfile.S"
set executable "$testfile.x"
set binfile [file join $objdir $subdir $executable]

if [is_ilp32_target] {
    set ptrbits 32
} else {
    set ptrbits 64
}

if  { [gdb_compile [file join $srcdir $subdir $srcfile] \
	   $binfile object [list additional_flags=-DPTRBITS=$ptrbits]] != "" } {
    return -1
}

clean_restart $executable

# Test delayed physname computations
gdb_test "p N::c.C" { = {void \(N::C \* const, void \(\*\)\(N::C\)\)}.*}
