# Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002, 2003,
# 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.  

# This file was written by Fred Fish. (fnf@cygnus.com)
# And rewritten by Michael Chastain. (mec.gnu@mindspring.com)

set ws  "\[\r\n\t \]+"
set nl  "\[\r\n\]+"
set vhn "\\$\[0-9\]+"

if $tracelevel then {
    strace $tracelevel
}

if { [skip_cplus_tests] } { continue }

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

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

# Single inheritance, print type definitions.

proc test_ptype_si { } {
    global gdb_prompt
    global ws
    global nl

    # Print class A as a type.

    set re_class	"class A \{${ws}public:"
    set re_fields	"int a;${ws}int x;"
    set re_synth_gcc_23	"A & operator=\\(A const ?&\\);${ws}A\\(A const ?&\\);${ws}A\\((void|)\\);"

    set name "ptype A (FIXME)"
    gdb_test_multiple "ptype A" $name {
	-re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    pass $name
	}
	-re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
	    pass $name
	}
    }

    # Print class A as an explicit class.

    set name "ptype class A (FIXME)"
    gdb_test_multiple "ptype class A" $name {
	-re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    pass $name
	}
	-re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
	    pass $name
	}
    }

    # Print type of an object of type A.

    set name "ptype g_A (FIXME)"
    gdb_test_multiple "ptype g_A" $name {
	-re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    pass $name
	}
	-re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
	    pass $name
	}
    }

    # Print class B as a type.

    set re_class	"class B : public A \{${ws}public:"
    set re_fields	"int b;${ws}int x;"
    set re_synth_gcc_23	"B & operator=\\(B const ?&\\);${ws}B\\(B const ?&\\);${ws}B\\((void|)\\);"

    set name "ptype B"
    gdb_test_multiple "ptype B" $name {
	-re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    pass $name
	}
	-re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
	    pass $name
	}
    }

    # Print class B as an explicit class.

    set name "ptype class B"
    gdb_test_multiple "ptype class B" $name {
	-re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    pass $name
	}
	-re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
	    pass $name
	}
    }

    # Print type of an object of type B.

    set name "ptype g_B"
    gdb_test_multiple "ptype g_B" $name {
	-re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    pass $name
	}
	-re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
	    pass $name
	}
    }

    # Print class C as a type.

    set re_class	"class C : public A \{${ws}public:"
    set re_fields	"int c;${ws}int x;"
    set re_synth_gcc_23	"C & operator=\\(C const ?&\\);${ws}C\\(C const ?&\\);${ws}C\\((void|)\\);"

    set name "ptype C"
    gdb_test_multiple "ptype C" $name {
	-re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    pass $name
	}
	-re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
	    pass $name
	}
    }

    # Print class C as an explicit class.

    set name "ptype class C"
    gdb_test_multiple "ptype class C" $name {
	-re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    pass $name
	}
	-re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
	    pass $name
	}
    }

    # Print type of an object of type g_C.

    set name "ptype g_C"
    gdb_test_multiple "ptype g_C" $name {
	-re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    pass $name
	}
	-re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
	    pass $name
	}
    }

    # Print a structure with no tag.

    set re_tag		"tagless_struct"
    set XX_tag		"\\._1"
    set re_class	"(class $re_tag \{${ws}public:|class \{${ws}public:|struct $re_tag \{|struct \{)"
    set XX_class	"(class $XX_tag \{${ws}public:|struct $XX_tag \{)"
    set re_fields	"int one;${ws}int two;"
    set re_synth_gcc_23	"$re_tag & operator=\\($re_tag const ?&\\);${ws}$re_tag\\($re_tag const ?&\\);${ws}$re_tag\\((void|)\\);"
    set XX_synth_gcc_23	"($re_tag|$XX_tag) & operator=\\($XX_tag const ?&\\);${ws}$XX_tag\\($XX_tag const ?&\\);${ws}$XX_tag\\((void|)\\);"

    set name "ptype tagless struct"
    gdb_test_multiple "ptype tagless_struct" $name {
	-re "type = $XX_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    # gcc 2.95.3 -gdwarf-2
	    pass "$name (obsolete gcc or gdb)"
	}
	-re "type = $re_class${ws}$re_fields${ws}$XX_synth_gcc_23$nl\}$nl$gdb_prompt $" {
	    # gcc 2.95.3 -gstabs+
	    pass "$name (obsolete gcc or gdb)"
	}
	-re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    # gcc 3.3.2 -gdwarf-2
	    # gcc HEAD 2004-01-21 -gdwarf-2
	    pass "$name (obsolete gcc or gdb)"
	}
	-re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
	    # gcc 3.3.2 -gstabs+
	    # gcc HEAD 2004-01-21 -gstabs+
	    pass "$name"
	}
    }

    set name "ptype variable of type tagless struct"
    gdb_test_multiple "ptype v_tagless" $name {
	-re "type = $XX_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    # gcc 2.95.3 -gdwarf-2
	    pass "$name (obsolete gcc or gdb)"
	}
	-re "type = $re_class${ws}$re_fields${ws}$XX_synth_gcc_23$nl\}$nl$gdb_prompt $" {
	    # gcc 2.95.3 -gstabs+
	    pass "$name (obsolete gcc or gdb)"
	}
	-re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    # gcc 3.3.2 -gdwarf-2
	    # gcc HEAD 2004-01-21 -gdwarf-2
	    pass "$name (obsolete gcc or gdb)"
	}
	-re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
	    # gcc 3.3.2 -gstabs+
	    # gcc HEAD 2004-01-21 -gstabs+
	    pass "$name"
	}
    }
}

# Multiple inheritance, print type definitions.

proc test_ptype_mi { } {
    global gdb_prompt
    global ws
    global nl

    set re_class	"class D : public B, public C \{${ws}public:"
    set re_fields	"int d;${ws}int x;"
    set re_synth_gcc_23	"D & operator=\\(D const ?&\\);${ws}D\\(D const ?&\\);${ws}D\\((void|)\\);"

    # ptype D: type, class, object.

    set name "ptype D"
    gdb_test_multiple "ptype D" $name {
	-re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    pass $name
	}
	-re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
	    pass $name
	}
    }

    set name "ptype class D"
    gdb_test_multiple "ptype class D" $name {
	-re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    pass $name
	}
	-re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
	    pass $name
	}
    }

    set name "ptype g_D"
    gdb_test_multiple "ptype g_D" $name {
	-re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    pass $name
	}
	-re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
	    pass $name
	}
    }

    set re_class	"class E : public D \{${ws}public:"
    set re_fields	"int e;${ws}int x;"
    set re_synth_gcc_23	"E & operator=\\(E const ?&\\);${ws}E\\(E const ?&\\);${ws}E\\((void|)\\);"

    # ptype E: type, class, object.

    set name "ptype E"
    gdb_test_multiple "ptype E" $name {
	-re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    pass $name
	}
	-re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
	    pass $name
	}
    }

    set name "ptype class E"
    gdb_test_multiple "ptype class E" $name {
	-re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    pass $name
	}
	-re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
	    pass $name
	}
    }

    set name "ptype g_E"
    gdb_test_multiple "ptype g_E" $name {
	-re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    pass $name
	}
	-re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
	    pass $name
	}
    }
}

# Single virtual inheritance, print type definitions.

proc test_ptype_vi { } {
    global gdb_prompt
    global ws
    global nl

    # ptype vA: type, class, object.

    set re_class	"class vA \{${ws}public:"
    set re_fields	"int va;${ws}int vx;"
    set re_synth_gcc_23	"vA & operator=\\(vA const ?&\\);${ws}vA\\(vA const ?&\\);${ws}vA\\((void|)\\);"

    set name "ptype vA"
    gdb_test_multiple "ptype vA" $name {
	-re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    pass $name
	}
	-re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
	    pass $name
	}
    }

    set name "ptype class vA"
    gdb_test_multiple "ptype class vA" $name {
	-re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    pass $name
	}
	-re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
	    pass $name
	}
    }

    set name "ptype g_vA"
    gdb_test_multiple "ptype g_vA" $name {
	-re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    pass $name
	}
	-re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
	    pass $name
	}
    }

    # ptype vB: type, class, object.

    set re_class	"class vB : public virtual vA \{(${ws}private:|)"
    set re_vbptr	"vA \\*(_vb.2vA|_vb.vA);${ws}"
    set re_access	"public:"
    set re_fields	"int vb;${ws}int vx;"
    set re_synth_gcc_2	"vB & operator=\\(vB const ?&\\);${ws}vB\\(int, vB const ?&\\);${ws}vB\\(int\\);"
    set re_synth_gcc_3	"vB & operator=\\(vB const ?&\\);${ws}vB\\(vB const ?&\\);${ws}vB\\((void|)\\);"

    set name "ptype vB"
    gdb_test_multiple "ptype vB" $name {
	-re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    # gcc 2.95.3 -gdwarf-2
	    pass $name
	}
	-re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_2$nl\}$nl$gdb_prompt $" {
	    # gcc 2.95.3 -gstabs+
	    pass $name
	}
	-re "type = $re_class${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    # gcc 3.3.2 -gdwarf-2
	    # gcc HEAD 2004-01-21 -gdwarf-2
	    pass "$name (aCC)"
	}
	-re "type = $re_class${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_3$nl\}$nl$gdb_prompt $" {
	    # gcc 3.3.2 -gstabs+
	    # gcc HEAD 2004-01-21 -gstabs+
	    pass "$name (aCC)"
	}
    }

    set name "ptype class vB"
    gdb_test_multiple "ptype class vB" $name {
	-re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    # gcc 2.95.3 -gdwarf-2
	    pass $name
	}
	-re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_2$nl\}$nl$gdb_prompt $" {
	    # gcc 2.95.3 -gstabs+
	    pass $name
	}
	-re "type = $re_class${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    # gcc 3.3.2 -gdwarf-2
	    # gcc HEAD 2004-01-21 -gdwarf-2
	    pass "$name (aCC)"
	}
	-re "type = $re_class${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_3$nl\}$nl$gdb_prompt $" {
	    # gcc 3.3.2 -gstabs+
	    # gcc HEAD 2004-01-21 -gstabs+
	    pass "$name (aCC)"
	}
    }

    set name "ptype g_vB"
    gdb_test_multiple "ptype g_vB" $name {
	-re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    # gcc 2.95.3 -gdwarf-2
	    pass $name
	}
	-re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_2$nl\}$nl$gdb_prompt $" {
	    # gcc 2.95.3 -gstabs+
	    pass $name
	}
	-re "type = $re_class${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    # gcc 3.3.2 -gdwarf-2
	    # gcc HEAD 2004-01-21 -gdwarf-2
	    pass "$name (aCC)"
	}
	-re "type = $re_class${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_3$nl\}$nl$gdb_prompt $" {
	    # gcc 3.3.2 -gstabs+
	    # gcc HEAD 2004-01-21 -gstabs+
	    pass "$name (aCC)"
	}
    }

    # ptype vC: type, class, object.

    set re_class	"class vC : public virtual vA \{(${ws}private:|)"
    set re_vbptr	"vA \\*(_vb.2vA|_vb.vA);${ws}"
    set re_access	"public:"
    set re_fields	"int vc;${ws}int vx;"
    set re_synth_gcc_2	"vC & operator=\\(vC const ?&\\);${ws}vC\\(int, vC const ?&\\);${ws}vC\\(int\\);"
    set re_synth_gcc_3	"vC & operator=\\(vC const ?&\\);${ws}vC\\(vC const ?&\\);${ws}vC\\((void|)\\);"

    set name "ptype vC"
    gdb_test_multiple "ptype vC" $name {
	-re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    # gcc 2.95.3 -gdwarf-2
	    pass $name
	}
	-re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_2$nl\}$nl$gdb_prompt $" {
	    # gcc 2.95.3 -gstabs+
	    pass $name
	}
	-re "type = $re_class${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    # gcc 3.3.2 -gdwarf-2
	    # gcc HEAD 2004-01-21 -gdwarf-2
	    pass "$name (aCC)"
	}
	-re "type = $re_class${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_3$nl\}$nl$gdb_prompt $" {
	    # gcc 3.3.2 -gstabs+
	    # gcc HEAD 2004-01-21 -gstabs+
	    pass "$name (aCC)"
	}
    }

    set name "ptype class vC"
    gdb_test_multiple "ptype class vC" $name {
	-re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    # gcc 2.95.3 -gdwarf-2
	    pass $name
	}
	-re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_2$nl\}$nl$gdb_prompt $" {
	    # gcc 2.95.3 -gstabs+
	    pass $name
	}
	-re "type = $re_class${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    # gcc 3.3.2 -gdwarf-2
	    # gcc HEAD 2004-01-21 -gdwarf-2
	    pass "$name (aCC)"
	}
	-re "type = $re_class${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_3$nl\}$nl$gdb_prompt $" {
	    # gcc 3.3.2 -gstabs+
	    # gcc HEAD 2004-01-21 -gstabs+
	    pass "$name (aCC)"
	}
    }

    set name "ptype g_vC"
    gdb_test_multiple "ptype g_vC" $name {
	-re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    # gcc 2.95.3 -gdwarf-2
	    pass $name
	}
	-re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_2$nl\}$nl$gdb_prompt $" {
	    # gcc 2.95.3 -gstabs+
	    pass $name
	}
	-re "type = $re_class${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    # gcc 3.3.2 -gdwarf-2
	    # gcc HEAD 2004-01-21 -gdwarf-2
	    pass "$name (aCC)"
	}
	-re "type = $re_class${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_3$nl\}$nl$gdb_prompt $" {
	    # gcc 3.3.2 -gstabs+
	    # gcc HEAD 2004-01-21 -gstabs+
	    pass "$name (aCC)"
	}
    }
}

# Multiple virtual inheritance, print type definitions.

proc test_ptype_mvi { } {
    global gdb_prompt
    global ws
    global nl

    # ptype vD: type, class, object.

    set re_class	"class vD : public virtual vB, public virtual vC \{(${ws}private:|)"
    set re_vbptr	"vC \\*(_vb.2vC|_vb.vC);${ws}vB \\*(_vb.2vB|_vb.vB);"
    set re_access	"public:"
    set re_fields	"int vd;${ws}int vx;"
    set re_synth_gcc_2	"vD & operator=\\(vD const ?&\\);${ws}vD\\(int, vD const ?&\\);${ws}vD\\(int\\);"
    set re_synth_gcc_3	"vD & operator=\\(vD const ?&\\);${ws}vD\\(vD const ?&\\);${ws}vD\\((void|)\\);"

    set name "ptype vD"
    gdb_test_multiple "ptype vD" $name {
	-re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    # gcc 2.95.3 -gdwarf-2
	    pass $name
	}
	-re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_2$nl\}$nl$gdb_prompt $" {
	    # gcc 2.95.3 -gstabs+
	    pass $name
	}
	-re "type = $re_class${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    # gcc 3.3.2 -gdwarf-2
	    # gcc HEAD 2004-01-21 -gdwarf-2
	    pass "$name"
	}
	-re "type = $re_class${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_3$nl\}$nl$gdb_prompt $" {
	    # gcc 3.3.2 -gstabs+
	    # gcc HEAD 2004-01-21 -gstabs+
	    pass "$name"
	}
    }

    set name "ptype class vD"
    gdb_test_multiple "ptype class vD" $name {
	-re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    # gcc 2.95.3 -gdwarf-2
	    pass $name
	}
	-re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_2$nl\}$nl$gdb_prompt $" {
	    # gcc 2.95.3 -gstabs+
	    pass $name
	}
	-re "type = $re_class${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    # gcc 3.3.2 -gdwarf-2
	    # gcc HEAD 2004-01-21 -gdwarf-2
	    pass "$name"
	}
	-re "type = $re_class${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_3$nl\}$nl$gdb_prompt $" {
	    # gcc 3.3.2 -gstabs+
	    # gcc HEAD 2004-01-21 -gstabs+
	    pass "$name"
	}
    }

    set name "ptype g_vD"
    gdb_test_multiple "ptype g_vD" $name {
	-re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    # gcc 2.95.3 -gdwarf-2
	    pass $name
	}
	-re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_2$nl\}$nl$gdb_prompt $" {
	    # gcc 2.95.3 -gstabs+
	    pass $name
	}
	-re "type = $re_class${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    # gcc 3.3.2 -gdwarf-2
	    # gcc HEAD 2004-01-21 -gdwarf-2
	    pass "$name"
	}
	-re "type = $re_class${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_3$nl\}$nl$gdb_prompt $" {
	    # gcc 3.3.2 -gstabs+
	    # gcc HEAD 2004-01-21 -gstabs+
	    pass "$name"
	}
    }

    # ptype vE: type, class, object.

    set re_class	"class vE : public virtual vD \{(${ws}private:|)"
    set re_vbptr	"vD \\*(_vb.2vD|_vb.vD);"
    set re_access	"public:"
    set re_fields	"int ve;${ws}int vx;"
    set re_synth_gcc_2	"vE & operator=\\(vE const ?&\\);${ws}vE\\(int, vE const ?&\\);${ws}vE\\(int\\);"
    set re_synth_gcc_3	"vE & operator=\\(vE const ?&\\);${ws}vE\\(vE const ?&\\);${ws}vE\\((void|)\\);"

    set name "ptype vE"
    gdb_test_multiple "ptype vE" $name {
	-re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    # gcc 2.95.3 -gdwarf-2
	    pass $name
	}
	-re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_2$nl\}$nl$gdb_prompt $" {
	    # gcc 2.95.3 -gstabs+
	    pass $name
	}
	-re "type = $re_class${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    # gcc 3.3.2 -gdwarf-2
	    # gcc HEAD 2004-01-21 -gdwarf-2
	    pass "$name"
	}
	-re "type = $re_class${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_3$nl\}$nl$gdb_prompt $" {
	    # gcc 3.3.2 -gstabs+
	    # gcc HEAD 2004-01-21 -gstabs+
	    pass "$name"
	}
    }

    set name "ptype class vE"
    gdb_test_multiple "ptype class vE" $name {
	-re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    # gcc 2.95.3 -gdwarf-2
	    pass $name
	}
	-re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_2$nl\}$nl$gdb_prompt $" {
	    # gcc 2.95.3 -gstabs+
	    pass $name
	}
	-re "type = $re_class${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    # gcc 3.3.2 -gdwarf-2
	    # gcc HEAD 2004-01-21 -gdwarf-2
	    pass "$name"
	}
	-re "type = $re_class${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_3$nl\}$nl$gdb_prompt $" {
	    # gcc 3.3.2 -gstabs+
	    # gcc HEAD 2004-01-21 -gstabs+
	    pass "$name"
	}
    }

    set name "ptype g_vE"
    gdb_test_multiple "ptype g_vE" $name {
	-re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    # gcc 2.95.3 -gdwarf-2
	    pass $name
	}
	-re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_2$nl\}$nl$gdb_prompt $" {
	    # gcc 2.95.3 -gstabs+
	    pass $name
	}
	-re "type = $re_class${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
	    # gcc 3.3.2 -gdwarf-2
	    # gcc HEAD 2004-01-21 -gdwarf-2
	    pass "$name"
	}
	-re "type = $re_class${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_3$nl\}$nl$gdb_prompt $" {
	    # gcc 3.3.2 -gstabs+
	    # gcc HEAD 2004-01-21 -gstabs+
	    pass "$name"
	}
    }
}

# Single inheritance, print individual members.

proc test_print_si_members { } {
    global vhn

    # Print all members of g_A using fully qualified form.
    gdb_test "print g_A.A::a" "$vhn = 1"
    gdb_test "print g_A.A::x" "$vhn = 2"

    # Print members of g_A using nonambiguous compact form.
    gdb_test "print g_A.a" "$vhn = 1"
    gdb_test "print g_A.x" "$vhn = 2"

    # Print all members of g_B using fully qualified form.
    gdb_test "print g_B.A::a" "$vhn = 3"
    gdb_test "print g_B.A::x" "$vhn = 4"
    gdb_test "print g_B.B::b" "$vhn = 5"
    gdb_test "print g_B.B::x" "$vhn = 6"

    # Print members of g_B using nonambiguous compact form.
    gdb_test "print g_B.a" "$vhn = 3"
    gdb_test "print g_B.b" "$vhn = 5"
    gdb_test "print g_B.x" "$vhn = 6"

    # Print all members of g_C using fully qualified form.
    gdb_test "print g_C.A::a" "$vhn = 7"
    gdb_test "print g_C.A::x" "$vhn = 8"
    gdb_test "print g_C.C::c" "$vhn = 9"
    gdb_test "print g_C.C::x" "$vhn = 10"

    # Print members of g_C using nonambiguous compact form.
    gdb_test "print g_C.a" "$vhn = 7"
    gdb_test "print g_C.c" "$vhn = 9"
    gdb_test "print g_C.x" "$vhn = 10"
}

# Single inheritance, print complete classes.

proc test_print_si_classes { } {
    global vhn

    # Print all members of g_A, g_B, g_C.
    gdb_test "print g_A" "$vhn = \{a = 1, x = 2\}"
    gdb_test "print g_B" "$vhn = \{<(class A|A)> = \{a = 3, x = 4\}, b = 5, x = 6\}"
    gdb_test "print g_C" "$vhn = \{<(class A|A)> = \{a = 7, x = 8\}, c = 9, x = 10\}"
}

# Multiple inheritance, print individual members.

proc test_print_mi_members {} {
    global gdb_prompt
    global nl
    global vhn

    # Print all members of g_A.
    gdb_test "print g_A.A::a" "$vhn = 1"
    gdb_test "print g_A.A::x" "$vhn = 2"

    # Print all members of g_B.
    gdb_test "print g_B.A::a" "$vhn = 3"
    gdb_test "print g_B.A::x" "$vhn = 4"
    gdb_test "print g_B.B::b" "$vhn = 5"
    gdb_test "print g_B.B::x" "$vhn = 6"

    # Print all members of g_C.
    gdb_test "print g_C.A::a" "$vhn = 7"
    gdb_test "print g_C.A::x" "$vhn = 8"
    gdb_test "print g_C.C::c" "$vhn = 9"
    gdb_test "print g_C.C::x" "$vhn = 10"

    # Print all members of g_D.
    #
    # g_D.A::a and g_D.A::x are ambiguous member accesses, and gdb
    # should detect these.  There are no ways to PASS these tests
    # because I don't know what the gdb message will be.  -- chastain
    # 2004-01-27.

    set name "print g_D.A::a"
    gdb_test_multiple "print g_D.A::a" $name {
	-re "$vhn = (15|11)$nl$gdb_prompt $" {
	    kfail "gdb/68" "print g_D.A::a"
	}
    }

    set name "print g_D.A::x"
    gdb_test_multiple "print g_D.A::x" $name {
	-re "$vhn = (16|12)$nl$gdb_prompt $" {
	    kfail "gdb/68" "print g_D.A::x"
	}
    }

    gdb_test "print g_D.B::b" "$vhn = 13"
    gdb_test "print g_D.B::x" "$vhn = 14"
    gdb_test "print g_D.C::c" "$vhn = 17"
    gdb_test "print g_D.C::x" "$vhn = 18"
    gdb_test "print g_D.D::d" "$vhn = 19"
    gdb_test "print g_D.D::x" "$vhn = 20"

    # Print all members of g_E.
    # g_E.A::a and g_E.A::x are ambiguous.

    set name "print g_E.A::a"
    gdb_test_multiple "print g_E.A::a" $name {
	-re "$vhn = (21|25)$nl$gdb_prompt $" {
	    kfail "gdb/68" "print g_E.A::a"
	}
    }

    set name "print g_E.A::x"
    gdb_test_multiple "print g_E.A::x" $name {
	-re "$vhn = (26|22)$nl$gdb_prompt $" {
	    kfail "gdb/68" "print g_E.A::x"
	}
    }

    gdb_test "print g_E.B::b" "$vhn = 23"
    gdb_test "print g_E.B::x" "$vhn = 24"
    gdb_test "print g_E.C::c" "$vhn = 27"
    gdb_test "print g_E.C::x" "$vhn = 28"
    gdb_test "print g_E.D::d" "$vhn = 29"
    gdb_test "print g_E.D::x" "$vhn = 30"
    gdb_test "print g_E.E::e" "$vhn = 31"
    gdb_test "print g_E.E::x" "$vhn = 32"
}

# Multiple inheritance, print complete classes.

proc test_print_mi_classes { } {
    global vhn

    # Print all members of g_D.
    gdb_test "print g_D" "$vhn = \{\<(class |)B\> = \{\<(class |)A\> = \{a = 11, x = 12\}, b = 13, x = 14\}, \<(class |)C\> = \{\<(class |)A\> = \{a = 15, x = 16\}, c = 17, x = 18\}, d = 19, x = 20\}"

    # Print all members of g_E.
    gdb_test "print g_E" "$vhn = \{\<(class |)D\> = \{\<(class |)B\> = \{\<(class |)A\> = \{a = 21, x = 22\}, b = 23, x = 24\}, \<(class |)C\> = \{\<(class |)A\> = \{a = 25, x = 26\}, c = 27, x = 28\}, d = 29, x = 30\}, e = 31, x = 32\}"
}

# Single inheritance, print anonymous unions.
# GDB versions prior to 4.14 entered an infinite loop when printing
# the type of a class containing an anonymous union, and they were also
# incapable of printing the member of an anonymous union.
# We test the printing of the member first, and perform the other tests
# only if the test succeeds, to avoid the infinite loop.
#
# GDB HEAD 2004-01-27 with hp aCC A.03.45 crashes on the first test.
# -- chastain 2004-01-27

proc test_print_anon_union {} {
    global gdb_prompt
    global ws
    global nl
    global vhn

    gdb_test "print g_anon_union.a" "$vhn = 2" "print anonymous union member"

    set name "print variable of type anonymous union"
    gdb_test_multiple "print g_anon_union" $name {
	-re "$vhn = \{one = 1, \{a = 2, b = 2\}\}$nl$gdb_prompt $" {
	    pass $name
	}
    }

    set re_class	"class class_with_anon_union \{${ws}public:"
    set re_fields	"int one;${ws}"
    set re_anon_union	"union \{${ws}int a;${ws}long int b;${ws}\};"
    set re_synth_gcc_23	"class_with_anon_union & operator=\\(class_with_anon_union const ?&\\);${ws}class_with_anon_union\\(class_with_anon_union const ?&\\);${ws}class_with_anon_union\\((void|)\\);"

    set name "print type of anonymous union"
    gdb_test_multiple "ptype g_anon_union" $name {
	-re "type = $re_class${ws}$re_fields${ws}$re_anon_union$nl\}$nl$gdb_prompt $" {
	    pass $name
	}
	-re "type = $re_class${ws}$re_fields${ws}$re_anon_union${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
	    pass $name
	}
    }
}


# Single virtual inheritance, print individual members.

proc test_print_svi_members { } {
    global vhn

    # Print all members of g_vA.
    gdb_test "print g_vA.vA::va" "$vhn = 1"
    gdb_test "print g_vA.vA::vx" "$vhn = 2"

    # Print members of g_vA using compact form.
    gdb_test "print g_vA.va" "$vhn = 1"
    gdb_test "print g_vA.vx" "$vhn = 2"

    # Print all members of g_vB.
    gdb_test "print g_vB.vA::va" "$vhn = 3"
    gdb_test "print g_vB.vA::vx" "$vhn = 4"
    gdb_test "print g_vB.vB::vb" "$vhn = 5"
    gdb_test "print g_vB.vB::vx" "$vhn = 6"

    # Print members of g_vB using compact form.
    gdb_test "print g_vB.va" "$vhn = 3"
    gdb_test "print g_vB.vb" "$vhn = 5"
    gdb_test "print g_vB.vx" "$vhn = 6"

    # Print all members of g_vC.
    gdb_test "print g_vC.vA::va" "$vhn = 7"
    gdb_test "print g_vC.vA::vx" "$vhn = 8"
    gdb_test "print g_vC.vC::vc" "$vhn = 9"
    gdb_test "print g_vC.vC::vx" "$vhn = 10"

    # Print members of g_vC using compact form.
    gdb_test "print g_vC.va" "$vhn = 7" "print g_vC.va"
    gdb_test "print g_vC.vc" "$vhn = 9" "print g_vC.vc"
    gdb_test "print g_vC.vx" "$vhn = 10" "print g_vC.vx"
}

# Single virtual inheritance, print complete classes.

proc test_print_svi_classes { } {
    global gdb_prompt
    global hex
    global nl
    global vhn

    # Print all members of g_vA.
    gdb_test "print g_vA" "$vhn = \{va = 1, vx = 2\}"

    # Print all members of g_vB.
    set re_vbptr_2	"(_vb.2vA|_vb.vA)"
    set re_vbptr_3	"_vptr.vB"

    set name "print g_vB"
    gdb_test_multiple "print g_vB" $name {
	-re "$vhn = \{<vA> = \{va = 3, vx = 4\}, $re_vbptr_2 = $hex, vb = 5, vx = 6\}$nl$gdb_prompt $" {
	    # gcc 2.95.3 -gdwarf-2
	    # gcc 2.95.3 -gstabs+
	    pass $name
	}
	-re "$vhn = \{<vA> = \{va = 3, vx = 4\}, $re_vbptr_3 = $hex, vb = 5, vx = 6\}$nl$gdb_prompt $" {
	    # gcc 3.3.2 -gdwarf-2
	    # gcc HEAD 2004-01-21 -gdwarf-2
	    # gcc HEAD 2004-01-21 -gstabs+
	    pass "$name (FIXME v3 vtbl ptr)"
	}
	-re "$vhn = \{<vA> = \{va = 3, vx = 4\}, $re_vbptr_3 = $hex <VTT for vB>, vb = 5, vx = 6\}$nl$gdb_prompt $" {
	    # gcc 3.3.2 -gstabs+
	    pass $name
	}
    }

    # Print all members of g_vC.
    set re_vbptr_2	"(_vb.2vA|_vb.vA)"
    set re_vbptr_3	"_vptr.vC"

    set name "print g_vC"
    gdb_test_multiple "print g_vC" $name {
	-re "$vhn = \{<vA> = \{va = 7, vx = 8\}, $re_vbptr_2 = $hex, vc = 9, vx = 10\}$nl$gdb_prompt $" {
	    # gcc 2.95.3 -gdwarf-2
	    # gcc 2.95.3 -gstabs+
	    pass $name
	}
	-re "$vhn = \{<vA> = \{va = 7, vx = 8\}, $re_vbptr_3 = $hex, vc = 9, vx = 10\}$nl$gdb_prompt $" {
	    # gcc 3.3.2 -gdwarf-2
	    # gcc HEAD 2004-01-21 -gdwarf-2
	    # gcc HEAD 2004-01-21 -gstabs+
	    pass "$name (FIXME v3 vtbl ptr)"
	}
	-re "$vhn = \{<vA> = \{va = 7, vx = 8\}, $re_vbptr_3 = $hex <VTT for vC>, vc = 9, vx = 10\}$nl$gdb_prompt $" {
	    # gcc 3.3.2 -gstabs+
	    pass $name
	}
    }
}

# Multiple virtual inheritance, print individual members.

proc test_print_mvi_members { } {
    global vhn

    # Print all members of g_vD.
    gdb_test "print g_vD.vA::va" "$vhn = 19"
    gdb_test "print g_vD.vA::vx" "$vhn = 20"
    gdb_test "print g_vD.vB::vb" "$vhn = 21"
    gdb_test "print g_vD.vB::vx" "$vhn = 22"
    gdb_test "print g_vD.vC::vc" "$vhn = 23"
    gdb_test "print g_vD.vC::vx" "$vhn = 24"
    gdb_test "print g_vD.vD::vd" "$vhn = 25"
    gdb_test "print g_vD.vD::vx" "$vhn = 26"

    # Print all members of g_vE.
    gdb_test "print g_vE.vA::va" "$vhn = 0"
    gdb_test "print g_vE.vA::vx" "$vhn = 0"
    gdb_test "print g_vE.vB::vb" "$vhn = 0"
    gdb_test "print g_vE.vB::vx" "$vhn = 0"
    gdb_test "print g_vE.vC::vc" "$vhn = 0"
    gdb_test "print g_vE.vC::vx" "$vhn = 0"
    gdb_test "print g_vE.vD::vd" "$vhn = 0"
    gdb_test "print g_vE.vD::vx" "$vhn = 0"
    gdb_test "print g_vE.vE::ve" "$vhn = 27"
    gdb_test "print g_vE.vE::vx" "$vhn = 28"
}

# Multiple virtual inheritance, print complete classes.

proc test_print_mvi_classes { } {
    global gdb_prompt
    global hex
    global ws
    global nl
    global vhn

    # Virtual base pointers for everybody.

    set re_vbptr_2_vA	"(_vb.2vA|_vb.vA)"
    set re_vbptr_2_vB	"(_vb.2vB|_vb.vB)"
    set re_vbptr_2_vC	"(_vb.2vC|_vb.vC)"
    set re_vbptr_2_vD	"(_vb.2vD|_vb.vD)"
    set re_vbptr_3_vA	"_vptr.vA"
    set re_vbptr_3_vB	"_vptr.vB"
    set re_vbptr_3_vC	"_vptr.vC"
    set re_vbptr_3_vD	"_vptr.vD"
    set re_vbptr_3_vE	"_vptr.vE"

    # Print all members of g_vD.

    set name "print g_vD"
    gdb_test_multiple "print g_vD" $name {
	-re "$vhn = \{<vB> = \{<vA> = \{va = 19, vx = 20\}, $re_vbptr_2_vA = $hex, vb = 21, vx = 22\}, <vC> = \{$re_vbptr_2_vA = $hex, vc = 23, vx = 24\}, $re_vbptr_2_vC = $hex, $re_vbptr_2_vB = $hex, vd = 25, vx = 26\}$nl$gdb_prompt $" {
	    # gcc 2.95.3 -gdwarf-2
	    # gcc 2.95.3 -gstabs+
	    pass $name
	}
	-re "$vhn = \{<vB> = \{<vA> = \{va = 19, vx = 20\}, $re_vbptr_3_vB = $hex, vb = 21, vx = 22\}, <vC> = \{$re_vbptr_3_vC = $hex, vc = 23, vx = 24\}, $re_vbptr_3_vD = $hex, vd = 25, vx = 26\}$nl$gdb_prompt $" {
	    # gcc 3.3.2 -gdwarf-2
	    # gcc HEAD 2004-01-21 -gdwarf-2
	    # gcc HEAD 2004-01-21 -gstabs+
	    pass "$name (FIXME v3 vtbl ptr)"
	}
	-re "$vhn = \{<vB> = \{<vA> = \{va = 19, vx = 20\}, $re_vbptr_3_vB = $hex, vb = 21, vx = 22\}, <vC> = \{$re_vbptr_3_vC = $hex <VTT for vD>, vc = 23, vx = 24\}, $re_vbptr_3_vD = $hex, vd = 25, vx = 26\}$nl$gdb_prompt $" {
	    # gcc 3.3.2 -gstabs+
	    pass "$name"
	}
    }

    # Print all members of g_vE.

    set name "print g_vE"
    gdb_test_multiple "print g_vE" $name {
	-re "$vhn = \{<vD> = \{<vB> = \{<vA> = \{va = 0, vx = 0\}, $re_vbptr_2_vA = $hex, vb = 0, vx = 0\}, <vC> = \{$re_vbptr_2_vA = $hex, vc = 0, vx = 0\}, $re_vbptr_2_vC = $hex, $re_vbptr_2_vB = $hex, vd = 0, vx = 0\}, $re_vbptr_2_vD = $hex, ve = 27, vx = 28\}$nl$gdb_prompt $" {
	    # gcc 2.95.3 -gdwarf-2
	    # gcc 2.95.3 -gstabs+
	    pass $name
	}
	-re "$vhn = \{<vD> = \{<vB> = \{<vA> = \{va = 0, vx = 0\}, $re_vbptr_3_vB = $hex, vb = 0, vx = 0\}, <vC> = \{$re_vbptr_3_vC = $hex, vc = 0, vx = 0\}, $re_vbptr_3_vD = $hex, vd = 0, vx = 0\}, $re_vbptr_3_vE = $hex, ve = 27, vx = 28\}$nl$gdb_prompt $" {
	    # gcc 3.3.2 -gdwarf-2
	    # gcc 3.3.2 -gstabs+
	    # gcc HEAD 2004-01-21 -gdwarf-2
	    # gcc HEAD 2004-01-21 -gstabs+
	    pass "$name (FIXME v3 vtbl ptr)"
	}
	-re "$vhn = \{<vD> = \{<vB> = \{<vA> = \{va = 0, vx = 0\}, $re_vbptr_3_vB = $hex, vb = 0, vx = 0\}, <vC> = \{$re_vbptr_3_vC = $hex <VTT for vD>, vc = 0, vx = 0\}, $re_vbptr_3_vD = $hex, vd = 0, vx = 0\}, $re_vbptr_3_vE = $hex, ve = 27, vx = 28\}$nl$gdb_prompt $" {
	    # gcc 3.2.7-rh -gstabs+
	    pass "$name (FIXME v3 vtbl ptr)"
	}
    }
}

proc do_tests { } {
    global prms_id
    global bug_id
    global subdir
    global objdir
    global srcdir
    global binfile

    set prms_id 0
    set bug_id 0

    # Start with a fresh gdb.

    gdb_exit
    gdb_start
    gdb_reinitialize_dir $srcdir/$subdir
    gdb_load $binfile

    gdb_test "set language c++" ""
    gdb_test "set width 0" ""

    if { ![runto_main] } then {
	perror "couldn't run to main"
	return
    }

    test_ptype_si
    test_ptype_mi
    test_ptype_vi
    test_ptype_mvi

    if { ![runto 'inheritance2'] } then {
	perror "couldn't run to inheritance2"
	return
    }

    test_print_si_members
    test_print_si_classes
    test_print_mi_members
    test_print_mi_classes
    test_print_anon_union

    if { ![runto 'inheritance4'] } {
	perror "couldn't run to inheritance4"
	return
    }

    test_print_svi_members
    test_print_svi_classes
    test_print_mvi_members
    test_print_mvi_classes
}

do_tests
