# Copyright 2003, 2007, 2008 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/>.

# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu

# This file is part of the gdb testsuite

# This is intended to be a repository for tests that partial symbols
# are working properly.  If multiple tests are added, make sure that
# you exit and restart GDB between tests.

if $tracelevel then {
    strace $tracelevel
}

#
# test running programs
#

set prms_id 0
set bug_id 0

if { [skip_cplus_tests] } { continue }

set testfile "psymtab"
set binfile ${objdir}/${subdir}/${testfile}

if  { [gdb_compile "${srcdir}/${subdir}/${testfile}1.c" "${testfile}1.o" object {debug}] != "" } {
     untested psymtab.exp
     return -1
}

if  { [gdb_compile "${srcdir}/${subdir}/${testfile}2.c" "${testfile}2.o" object {debug}] != "" } {
     untested psymtab.exp
     return -1
}

if  { [gdb_compile "${testfile}1.o ${testfile}2.o" ${binfile} executable {debug}] != "" } {
     untested psymtab.exp
     return -1
}

# Create and source the file that provides information about the compiler
# used to compile the test case.
if [get_compiler_info ${binfile}] {
    return -1;
}

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}

# This test is looking for a bug that manifested itself when GDB was
# looking for a partial symbol such that there wasn't such a partial
# symbol in the psymtab, but such that the last psym in the psymtab
# had the right name but the wrong namespace.  Here, searching for
# zzz::dummy currently causes a search for 'zzz' in STRUCT_NAMESPACE
# without a preceding search for 'zzz' in VAR_NAMESPACE.

gdb_test "break zzz::dummy" "Can't find member of namespace, class, struct, or union named \"zzz::dummy\"\r\n.*" "Don't search past end of psymtab."
