# Copyright 2005 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.  

# A structure inside another structure results in a uniquely weird symbol
# name in stabs, e.g. 
#   We've had several problems with complex types like ostream.  First they
#   were mangled when the file was compiled as ObjC++.  Then they were mangled
#   when compiled -gfull.

if $tracelevel then {
        strace $tracelevel
        }

#
# test running programs
#

set prms_id 0
set bug_id 0


set testfile "ostream-defined"
set srcfile ${testfile}.cc
set binfile ${objdir}/${subdir}/${testfile}
    
global srcdir objdir subdir gdb_prompt srcfile testfile binfile hex
    
if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++} ] != "" } {
  gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}
    
# Start with a fresh gdb
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_file_cmd "${binfile}"
    
send_gdb "set width 0\n"
gdb_expect -re "$gdb_prompt $"
    
gdb_test "break [gdb_get_line_number "good place to put a breakpoint"]" "Breakpoint 1 at $hex: file.*, line.*\\." \
  "Set breakpoint on line  'good stopping point in main'"
    
gdb_test "run" "Starting program: $binfile *\r\n\Reading symbols for shared libraries \(\[.+\]\)+ done.*Breakpoint 1, main.*" \
  "run to breakpoint in main()"
    
gdb_test "print outStream" "basic_ostream.*" "Able to print outStream"
    

gdb_exit
