# Copyright 1998, 1999, 2000, 2001, 2002 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 {$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|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 {$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|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()" }
  }
