# Copyright 2003, 2007 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 2 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, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  

# Tests for PR gdb/1023.
# 2003-02-03  Michael Chastain <mec@shout.net>

# This file is part of the gdb testsuite.

if $tracelevel then {
        strace $tracelevel
        }

if { [skip_cplus_tests] } { continue }

#
# test running programs
#
set prms_id 0
set bug_id 0

set testfile "pr-1023"
set srcfile ${testfile}.cc
set binfile ${objdir}/${subdir}/${testfile}

if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
     untested pr-1023.exp
     return -1
}

if [get_compiler_info ${binfile} "c++"] {
    return -1
}

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

if ![runto_main] then {
    perror "couldn't run to breakpoint"
    continue
}

send_gdb "break myClass::performBlocking\n"
gdb_expect {
    -re "Breakpoint $decimal at $hex: file .*$srcfile, line 12.*$gdb_prompt $" {
	pass "break myClass::performBlocking"
    }
    -re "the class myClass does not have any method named performBlocking.*$gdb_prompt $" {
	# fails with gcc 2.95.3 -gstabs+, native i686-pc-linux-gnu
	# -- chastain 2003-02-03
	kfail "gdb/1023" "break myClass::performBlocking"
    }
    -re ".*$gdb_prompt $" {
	fail "break myClass::performBlocking"
    }
    timeout {
	fail "break myClass::performBlocking (timeout)"
    }
}

gdb_test \
  "break myClass::performUnblocking" \
  "Breakpoint $decimal at $hex: file .*$srcfile, line 10.*"

gdb_exit
return 0
