# Copyright 1998, 1999, 2000, 2001, 2002, 2003 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
}

if ![runto 'marker1'] then {
    perror "couldn't run to marker1"
    continue
}

gdb_test "up" ".*main.*" "up from 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|const A) ?&\\);\[\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 { [test_compiler_info gcc-*] } 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|const D) ?&\\);\[\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, (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|const D) ?&\\);\[\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, (protected|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 { [test_compiler_info gcc-*] } then {
      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|const E) ?&\\);\[\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, (protected|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|const F) ?&\\);\[\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" }
  }

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 GDB fails to restore the selected frame properly after the
# inferior function call above (see GDB PR 1155 for an explanation of
# why this might happen), all the subsequent tests will fail.  We
# should detect report that failure, but let the marker call finish so
# that the rest of the tests can run undisturbed.
gdb_test_multiple "frame" "re-selected 'main' frame after inferior call" {
    -re "#0  marker1.*$gdb_prompt $" {
        setup_kfail "gdb/1155" s390-*-linux-gnu
        fail "re-selected 'main' frame after inferior call"
        gdb_test "finish" ".*main.*at .*derivation.cc:.*// marker1-returns-here.*" \
            "finish call to marker1"
    }
    -re "#1  ($hex in )?main.*$gdb_prompt $" {
        pass "re-selected 'main' frame after inferior call"
    }
}
        
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()" }
  }

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()" }
  }
