# Copyright 2002, 2004 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 member static data
# 2002-05-13  Benjamin Kosnik  <bkoz@redhat.com>
# 2002-08-22  David Carlton <carlton@math.stanford.edu>

# 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 "m-static"
set srcfile  "${testfile}.cc"
set srcfile1 "${testfile}1.cc"
set objfile  "${testfile}.o"
set objfile1 "${testfile}1.o"
set binfile  "${objdir}/${subdir}/${testfile}"

if  { [gdb_compile "$srcdir/$subdir/$srcfile" "$objdir/$subdir/$objfile" object {debug c++}] != "" } {
     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}

if  { [gdb_compile "$srcdir/$subdir/$srcfile1" "$objdir/$subdir/$objfile1" object {debug c++}] != "" } {
     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}

if { [gdb_compile "$objdir/$subdir/$objfile $objdir/$subdir/$objfile1" "${binfile}" executable {debug c++}] != "" } {
     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}

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


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

# First, run to after we've constructed all the objects:

gdb_breakpoint [gdb_get_line_number "constructs-done"]
gdb_continue_to_breakpoint "end of constructors"


# One.

# simple object, static const bool
gdb_test "print test1.test" "\\$\[0-9\]* = true" "simple object, static const bool"

# simple object, static const int
gdb_test "print test1.key1" "\\$\[0-9\]* = 5" "simple object, static const int"

# simple object, static long
gdb_test "print test1.key2" "\\$\[0-9\]* = 77" "simple object, static long"

# simple object, static enum
gdb_test "print test1.value" "\\$\[0-9\]* = oriental" "simple object, static enum"

# Two.

# derived template object, base static const bool
gdb_test "print test2.test" "\\$\[0-9\]* = true" "derived template object, base static const bool"

# derived template object, base static const int
gdb_test "print test2.key1" "\\$\[0-9\]* = 5" "derived template object, base static const int"

# derived template object, base static long
gdb_test "print test2.key2" "\\$\[0-9\]* = 77" "derived template object, base static long"

# derived template object, base static enum
gdb_test "print test2.value" "\\$\[0-9\].* = oriental" "derived template object, base static enum"

# derived template object, static enum
gdb_test "print test2.value_derived" "\\$\[0-9\].* = etruscan" "derived template object, static enum"

# Three.

# template object, static derived template data member's base static const bool
gdb_test "print test3.data.test" "\\$\[0-9\].* = true" "template object, static const bool"

# template object, static derived template data member's base static const int
gdb_test "print test3.data.key1" "\\$\[0-9\].* = 5" "template object, static const int"

# template object, static derived template data member's base static long
gdb_test "print test3.data.key2" "\\$\[0-9\].* = 77" "template object, static long"

# template object, static derived template data member's base static enum
gdb_test "print test3.data.value" "\\$\[0-9\].* = oriental" "template object, static enum"

#  template object, static derived template data member's static enum
gdb_test "print test3.data.value_derived" "\\$\[0-9\].* = etruscan" "template object, static derived enum"

# 2002-08-16
# Four.

# static const int initialized in another file.
gdb_test "print test4.elsewhere" "\\$\[0-9\].* = 221" "static const int initialized elsewhere"

# static const int that nobody initializes.  From PR gdb/635.
gdb_test "print test4.nowhere" "field nowhere is nonexistent or has been optimised out" "static const int initialized nowhere"

# Perhaps at some point test4 should also include a test for a static
# const int that was initialized in the header file.  But I'm not sure
# that GDB's current behavior in such situations is either consistent
# across platforms or optimal, so I'm not including one now.

gdb_exit
return 0
