# Copyright (C) 1998, 1999 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.  

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

# This file was written by Elena Zannoni (ezannoni@cygnus.com)

# This file is part of the gdb testsuite
#

#
# tests for inheritance, with several derivations types combinations (private,
# public, protected) 
# classes have simple members and member functions.
# 


if $tracelevel then {
        strace $tracelevel
        }

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

if { [skip_cplus_tests] } { continue }

set testfile "derivation"
set srcfile ${testfile}.cc
set binfile ${objdir}/${subdir}/${testfile}

# Create and source the file that provides information about the compiler
# used to compile the test case.

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

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."
}

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

#
# set it up at a breakpoint so we can play with the variable values
#
if ![runto_main] then {
    perror "couldn't run to breakpoint"
    continue
}

send_gdb "break marker1\n" ; gdb_expect -re ".*$gdb_prompt $"

    send_gdb "cont\n"
    gdb_expect {
        -re "Break.* marker1 \\(\\) at .*:$decimal.*$gdb_prompt $" {
            send_gdb "up\n"
            gdb_expect {
                -re ".*$gdb_prompt $" {}
                timeout { fail "up from marker1" }
            }
        }
        -re "$gdb_prompt $" { fail "continue to marker1"  }
        timeout { fail "(timeout) continue to marker1"  }
    }



send_gdb "print a_instance\n"
gdb_expect {
    -re ".\[0-9\]* = \{a = 1, aa = 2\}\r\n$gdb_prompt $" {
        pass "print value of a_instance"
      }
    -re ".*$gdb_prompt $" { fail "print value of a_instance" }
    timeout           { fail "(timeout) print value of a_instance" }
  }


send_gdb "ptype a_instance\n"
gdb_expect {
    -re "type = class A \{\r\n\[\t \]*public:\r\n\[\t \]*int a;\r\n\[\t \]*int aa;\[\r\n\t ]+A & operator=\\(A const &\\);\[\r\n\t ]+A\\(A const &\\);\[\r\n\t ]+A\\(void\\);\r\n\[\t \]*int afoo\\(void\\);\r\n\[\t \]*int foo\\(void\\);\r\n\}.*$gdb_prompt $"  { pass "ptype a_instance (with synth ops)" }
    -re "type = class A \{\r\n\[\t \]*public:\r\n\[\t \]*int a;\r\n\[\t \]*int aa;\[\r\n\t \]+A\\(void\\);\r\n\[\t \]*int afoo\\(void\\);\r\n\[\t \]*int foo\\(void\\);\r\n\}.*$gdb_prompt $"  { pass "ptype a_instance (no synth ops)" }
    -re ".*$gdb_prompt $"   {  fail "ptype a_instance" }
    timeout             { fail "(timeout) ptype a_instance" }
}


send_gdb "print d_instance\n"
gdb_expect {
    -re ".\[0-9\]* = \{<A> = \{a = 1, aa = 2\}, <B> = \{b = 3, bb = 4\}, <C> = \{c = 5, cc = 6\}, d = 7, dd = 8\}\r\n$gdb_prompt $" {
        pass "print value of d_instance"
      }
    -re ".\[0-9\]* = \{<class A> = \{a = 1, aa = 2\}, <class B> = \{b = 3, bb = 4\}, <class C> = \{c = 5, cc = 6\}, d = 7, dd = 8\}\r\n$gdb_prompt $" {
        pass "print value of d_instance"
      }
    -re ".*$gdb_prompt $" { fail "print value of d_instance" }
    timeout           { fail "(timeout) print value of d_instance" }
  }

  if {$gcc_compiled} then {
      send_gdb "ptype d_instance\n"
      gdb_expect {
	  -re "type = class D : private A, public B, (protected|private) C \{\r\n\[\t \]*public:\r\n\[\t \]*int d;\r\n\[\t \]*int dd;\[\r\n\t ]+D & operator=\\(D const &\\);\[\r\n\t ]+D\\(D const &\\);\[\r\n\t \]+D\\(void\\);\r\n\[\t \]*int dfoo\\(void\\);\r\n\[\t \]*int foo\\(void\\);\r\n\}.*$gdb_prompt $"  { pass "ptype d_instance" }
          -re "type = class D : private A, public B, private C \{\r\n\[\t \]*public:\r\n\[\t \]*int d;\r\n\[\t \]*int dd;\[\r\n\t \]+D\\(void\\);\r\n\[\t \]*int dfoo\\(void\\);\r\n\[\t \]*int foo\\(void\\);\r\n\}.*$gdb_prompt $"  { pass "ptype d_instance" }
	  -re ".*$gdb_prompt $"   {  fail "ptype d_instance" }
	  timeout             { fail "(timeout) ptype d_instance" }
      }
  } else {
      send_gdb "ptype d_instance\n"
      gdb_expect {
	  -re "type = class D : private A, public B, protected C \{\r\n\[\t \]*public:\r\n\[\t \]*int d;\r\n\[\t \]*int dd;\[\r\n\t \]+D\\(void\\);\r\n\[\t \]*int dfoo\\(void\\);\r\n\[\t \]*int foo\\(void\\);\r\n\}.*$gdb_prompt $"  { pass "ptype d_instance" }
	  -re ".*$gdb_prompt $"   {  fail "ptype d_instance" }
	  timeout             { fail "(timeout) ptype d_instance" }
      }
  }


send_gdb "print e_instance\n"
gdb_expect {
    -re ".\[0-9\]* = \{<A> = \{a = 1, aa = 2\}, <B> = \{b = 3, bb = 4\}, <C> = \{c = 5, cc = 6\}, e = 9, ee = 10\}\r\n$gdb_prompt $" {
        pass "print value of e_instance"
      }
    -re ".\[0-9\]* = \{<class A> = \{a = 1, aa = 2\}, <class B> = \{b = 3, bb = 4\}, <class C> = \{c = 5, cc = 6\}, e = 9, ee = 10\}\r\n$gdb_prompt $" {
        pass "print value of e_instance"
      }
    -re ".*$gdb_prompt $" { fail "print value of e_instance" }
    timeout           { fail "(timeout) print value of e_instance" }
  }

  if {$gcc_compiled} {
      send_gdb "ptype e_instance\n"
      gdb_expect {
	  -re "type = class E : public A, private B, (protected|private) C \{\r\n\[\t \]*public:\r\n\[\t \]*int e;\r\n\[\t \]*int ee;\[\r\n\t ]+E & operator=\\(E const &\\);\[\r\n\t ]+E\\(E const &\\);\[\r\n\t \]+E\\(void\\);\r\n\[\t \]*int efoo\\(void\\);\r\n\[\t \]*int foo\\(void\\);\r\n\}.*$gdb_prompt $"  { pass "ptype e_instance" }
          -re "type = class E : public A, private B, private C \{\r\n\[\t \]*public:\r\n\[\t \]*int e;\r\n\[\t \]*int ee;\[\r\n\t \]+E\\(void\\);\r\n\[\t \]*int efoo\\(void\\);\r\n\[\t \]*int foo\\(void\\);\r\n\}.*$gdb_prompt $"  { pass "ptype e_instance" }
	  -re ".*$gdb_prompt $"   {  fail "ptype e_instance" }
	  timeout             { fail "(timeout) ptype e_instance" }
      }
  } else {
      send_gdb "ptype e_instance\n"
      gdb_expect {
	  -re "type = class E : public A, private B, protected C \{\r\n\[\t \]*public:\r\n\[\t \]*int e;\r\n\[\t \]*int ee;\[\r\n\t \]+E\\(void\\);\r\n\[\t \]*int efoo\\(void\\);\r\n\[\t \]*int foo\\(void\\);\r\n\}.*$gdb_prompt $"  { pass "ptype e_instance" }
	  -re ".*$gdb_prompt $"   {  fail "ptype e_instance" }
	  timeout             { fail "(timeout) ptype e_instance" }
      }
  }


send_gdb "print f_instance\n"
gdb_expect {
    -re ".\[0-9\]* = \{<A> = \{a = 1, aa = 2\}, <B> = \{b = 3, bb = 4\}, <C> = \{c = 5, cc = 6\}, f = 11, ff = 12\}\r\n$gdb_prompt $" {
        pass "print value of f_instance"
      }
    -re ".\[0-9\]* = \{<class A> = \{a = 1, aa = 2\}, <class B> = \{b = 3, bb = 4\}, <class C> = \{c = 5, cc = 6\}, f = 11, ff = 12\}\r\n$gdb_prompt $" {
        pass "print value of f_instance"
      }
    -re ".*$gdb_prompt $" { fail "print value of f_instance" }
    timeout           { fail "(timeout) print value of f_instance" }
  }

send_gdb "ptype f_instance\n"
gdb_expect {
    -re "type = class F : private A, public B, private C \{\r\n\[\t \]*public:\r\n\[\t \]*int f;\r\n\[\t \]*int ff;\[\r\n\t ]+F & operator=\\(F const &\\);\[\r\n\t ]+F\\(F const &\\);\[\r\n\t \]+F\\(void\\);\r\n\[\t \]*int ffoo\\(void\\);\r\n\[\t \]*int foo\\(void\\);\r\n\}.*$gdb_prompt $"  { pass "ptype f_instance" }
    -re "type = class F : private A, public B, private C \{\r\n\[\t \]*public:\r\n\[\t \]*int f;\r\n\[\t \]*int ff;\[\r\n\t \]+F\\(void\\);\r\n\[\t \]*int ffoo\\(void\\);\r\n\[\t \]*int foo\\(void\\);\r\n\}.*$gdb_prompt $"  { pass "ptype f_instance" }
    -re ".*$gdb_prompt $"   {  fail "ptype f_instance" }
    timeout             { fail "(timeout) ptype f_instance" }
}



send_gdb "print d_instance.a\n"
gdb_expect {
    -re ".\[0-9\]* = 1.*$gdb_prompt $" {
        pass "print value of d_instance.a"
      }
    -re ".*$gdb_prompt $" { fail "print value of d_instance.a" }
    timeout           { fail "(timeout) print value of d_instance.a" }
  }

send_gdb "print d_instance.aa\n"
gdb_expect {
    -re ".\[0-9\]* = 2.*$gdb_prompt $" {
        pass "print value of d_instance.aa"
      }
    -re ".*$gdb_prompt $" { fail "print value of d_instance.aa" }
    timeout           { fail "(timeout) print value of d_instance.aa" }
  }

send_gdb "print d_instance.b\n"
gdb_expect {
    -re ".\[0-9\]* = 3.*$gdb_prompt $" {
        pass "print value of d_instance.b"
      }
    -re ".*$gdb_prompt $" { fail "print value of d_instance.b" }
    timeout           { fail "(timeout) print value of d_instance.b" }
  }

send_gdb "print d_instance.bb\n"
gdb_expect {
    -re ".\[0-9\]* = 4.*$gdb_prompt $" {
        pass "print value of d_instance.bb"
      }
    -re ".*$gdb_prompt $" { fail "print value of d_instance.bb" }
    timeout           { fail "(timeout) print value of d_instance.bb" }
  }

send_gdb "print d_instance.c\n"
gdb_expect {
    -re ".\[0-9\]* = 5.*$gdb_prompt $" {
        pass "print value of d_instance.c"
      }
    -re ".*$gdb_prompt $" { fail "print value of d_instance.c" }
    timeout           { fail "(timeout) print value of d_instance.c" }
  }

send_gdb "print d_instance.cc\n"
gdb_expect {
    -re ".\[0-9\]* = 6.*$gdb_prompt $" {
        pass "print value of d_instance.cc"
      }
    -re ".*$gdb_prompt $" { fail "print value of d_instance.cc" }
    timeout           { fail "(timeout) print value of d_instance.cc" }
  }

send_gdb "print d_instance.d\n"
gdb_expect {
    -re ".\[0-9\]* = 7.*$gdb_prompt $" {
        pass "print value of d_instance.d"
      }
    -re ".*$gdb_prompt $" { fail "print value of d_instance.d" }
    timeout           { fail "(timeout) print value of d_instance.d" }
  }

send_gdb "print d_instance.dd\n"
gdb_expect {
    -re ".\[0-9\]* = 8.*$gdb_prompt $" {
        pass "print value of d_instance.dd"
      }
    -re ".*$gdb_prompt $" { fail "print value of d_instance.dd" }
    timeout           { fail "(timeout) print value of d_instance.dd" }
  }

send_gdb "print g_instance.a\n"
gdb_expect {
    -re "warning.*$gdb_prompt $" {
	# The compiler doesn't think this is ambiguous.
	fail "print value of g_instance.a"
    }
    -re ".\[0-9\]* = 15.*$gdb_prompt $" {
        pass "print value of g_instance.a"
      }
    -re ".*$gdb_prompt $" { fail "print value of g_instance.a" }
    timeout           { fail "(timeout) print value of g_instance.a" }
  }

send_gdb "print g_instance.b\n"
gdb_expect {
    -re "warning.*$gdb_prompt $" {
	# The compiler doesn't think this is ambiguous.
	fail "print value of g_instance.b"
    }
    -re ".\[0-9\]* = 16.*$gdb_prompt $" {
        pass "print value of g_instance.b"
      }
    -re ".*$gdb_prompt $" { fail "print value of g_instance.b" }
    timeout           { fail "(timeout) print value of g_instance.b" }
  }

send_gdb "print g_instance.c\n"
gdb_expect {
    -re "warning.*$gdb_prompt $" {
	# The compiler doesn't think this is ambiguous.
	fail "print value of g_instance.c"
    }
    -re ".\[0-9\]* = 17.*$gdb_prompt $" {
        pass "print value of g_instance.c"
      }
    -re ".*$gdb_prompt $" { fail "print value of g_instance.c" }
    timeout           { fail "(timeout) print value of g_instance.c" }
  }

# The following cases always fail with g++ output, and should be fixed
# someday. -sts 1999-08-25

if { $gcc_compiled } { setup_xfail "*-*-*" }
send_gdb "print g_instance.afoo()\n"
gdb_expect {
    -re ".\[0-9\]* = 1.*$gdb_prompt $" {
        pass "print value of g_instance.afoo()"
      }
    -re ".*$gdb_prompt $" { fail "print value of g_instance.afoo()" }
    timeout           { fail "(timeout) print value of g_instance.afoo()" }
  }

if { $gcc_compiled } { setup_xfail "*-*-*" }
send_gdb "print g_instance.bfoo()\n"
gdb_expect {
    -re ".\[0-9\]* = 2.*$gdb_prompt $" {
        pass "print value of g_instance.bfoo()"
      }
    -re ".*$gdb_prompt $" { fail "print value of g_instance.bfoo()" }
    timeout           { fail "(timeout) print value of g_instance.bfoo()" }
  }

if { $gcc_compiled } { setup_xfail "*-*-*" }
send_gdb "print g_instance.cfoo()\n"
gdb_expect {
    -re ".\[0-9\]* = 3.*$gdb_prompt $" {
        pass "print value of g_instance.cfoo()"
      }
    -re ".*$gdb_prompt $" { fail "print value of g_instance.cfoo()" }
    timeout           { fail "(timeout) print value of g_instance.cfoo()" }
  }
