# Copyright 1992, 1994, 1995, 1996, 1997, 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 Fred Fish. (fnf@cygnus.com)

set ws "\[\r\n\t \]+"
set nl "\[\r\n\]+"

if $tracelevel then {
	strace $tracelevel
}

if { [skip_cplus_tests] } { continue }

set testfile "misc"
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."
}

#
# Test ptype of class objects.
#

proc test_ptype_class_objects {} {
    global gdb_prompt
    global ws
    global nl

    # Note that struct members are public by default, so we don't print
    # "public:" for the public members of structs.
    # Accept it as an expected failure if gdb just fails to distinguish between
    # class and struct, and everything else is OK.

    send_gdb "ptype struct default_public_struct\n"
    gdb_expect {
	-re "type = struct default_public_struct \{${ws}int a;${ws}int b;$nl\}$nl$gdb_prompt $" {
	    pass "ptype struct default_public_struct"
	}
	-re "type = class default_public_struct \{$nl.*int a;${ws}int b;$nl.*\}$nl$gdb_prompt $" {
	    setup_xfail "*-*-*"
	    fail "ptype struct default_public_struct"
	}
	-re ".*$gdb_prompt $" { fail "ptype struct default_public_struct" }
	timeout { fail "ptype struct default_public_struct (timeout)" ; return }
    }

    # Note that struct members are public by default, so we don't print
    # "public:" for the public members of structs.
    # Accept it as an expected failure if gdb just fails to distinguish between
    # class and struct, and everything else is OK.

    send_gdb "ptype struct explicit_public_struct\n"
    gdb_expect {
	-re "type = struct explicit_public_struct \{${ws}int a;${ws}int b;$nl.*\}$nl$gdb_prompt $" {
	    pass "ptype struct explicit_public_struct"
	}
	-re "type = class explicit_public_struct \{$nl.*int a;${ws}int b;$nl.*\}$nl$gdb_prompt $" {
	    setup_xfail "*-*-*"
	    fail "ptype struct explicit_public_struct"
	}
	-re ".*$gdb_prompt $" { fail "ptype struct explicit_public_struct" }
	timeout { fail "ptype struct explicit_public_struct (timeout)" ; return }
    }

    # Accept it as an expected failure if gdb just fails to distinguish between
    # class and struct, and everything else is OK.

    setup_xfail_format "DWARF 1"
    send_gdb "ptype struct protected_struct\n"
    gdb_expect {
	-re "type = struct protected_struct \{${ws}protected:${ws}int a;${ws}int b;$nl\}$nl$gdb_prompt $" {
	    pass "ptype struct protected_struct (FIXME)"
	}
	-re "type = class protected_struct \{${ws}protected:${ws}int a;${ws}int b;$nl.*\}$nl$gdb_prompt $" {
	    setup_xfail "*-*-*"
	    fail "ptype struct protected_struct (FIXME)"
	}
	-re ".*$gdb_prompt $" { fail "ptype struct protected_struct" }
	timeout { fail "ptype struct protected_struct (timeout)" ; return }
    }

    # Accept it as an expected failure if gdb just fails to distinguish between
    # class and struct, and everything else is OK.

    setup_xfail_format "DWARF 1"
    send_gdb "ptype struct private_struct\n"
    gdb_expect {
	-re "type = struct private_struct \{${ws}private:${ws}int a;${ws}int b;$nl\}$nl$gdb_prompt $" {
	    pass "ptype struct private_struct (FIXME)"
	}
	-re "type = class private_struct \{${ws}private:${ws}int a;${ws}int b;$nl.*\}$nl$gdb_prompt $" { 
	    setup_xfail "*-*-*"
	    fail "ptype struct private_struct (FIXME)"
	}
	-re ".*$gdb_prompt $" { fail "ptype struct private_struct" }
	timeout { fail "ptype struct private_struct (timeout)" ; return }
    }

    # Accept it as an expected failure if gdb just fails to distinguish between
    # class and struct, and everything else is OK.

    setup_xfail_format "DWARF 1"
    send_gdb "ptype struct mixed_protection_struct\n"
    gdb_expect {
	-re "type = struct mixed_protection_struct \{${ws}int a;${ws}int b;${ws}private:${ws}int c;${ws}int d;${ws}protected:${ws}int e;${ws}int f;${ws}public:${ws}int g;${ws}private:${ws}int h;${ws}protected:${ws}int i;$nl\}$nl$gdb_prompt $" {
	    pass "ptype struct mixed_protection_struct (FIXME)"
	}
        -re "type = struct mixed_protection_struct \{${ws}public:${ws}int a;${ws}int b;${ws}private:${ws}int c;${ws}int d;${ws}protected:${ws}int e;${ws}int f;${ws}public:${ws}int g;${ws}private:${ws}int h;${ws}protected:${ws}int i;$nl.*\}$nl$gdb_prompt $" {
            pass "ptype struct mixed_protection_struct (extra public)"
        }
	-re "type = class mixed_protection_struct \{${ws}public:${ws}int a;${ws}int b;${ws}private:${ws}int c;${ws}int d;${ws}protected:${ws}int e;${ws}int f;${ws}public:${ws}int g;${ws}private:${ws}int h;${ws}protected:${ws}int i;$nl.*\}$nl$gdb_prompt $" {
	    setup_xfail "*-*-*"
	    fail "ptype struct mixed_protection_struct (FIXME)"
	}
	-re ".*$gdb_prompt $" { fail "ptype struct mixed_protection_struct" }
	timeout { fail "ptype struct mixed_protection_struct (timeout)" ; return }
    }

    # Accept it as an expected failure if gdb just fails to distinguish between
    # class and struct, and everything else is OK.

    send_gdb "ptype class public_class\n"
    gdb_expect {
	-re "type = class public_class \{${ws}public:${ws}int a;${ws}int b;$nl.*\}$nl$gdb_prompt $" {
	    pass "ptype class public_class (FIXME)"
	}
	-re "type = struct public_class \{${ws}int a;${ws}int b;$nl\}$nl$gdb_prompt $" {
	    setup_xfail "*-*-*"
	    fail "ptype class public_class (FIXME)"
	}
	-re ".*$gdb_prompt $" { fail "ptype class public_class" }
	timeout { fail "ptype class public_class (timeout)" ; return }
    }

    send_gdb "ptype class protected_class\n"
    gdb_expect {
	-re "type = class protected_class \{${ws}protected:${ws}int a;${ws}int b;$nl.*\}$nl$gdb_prompt $" {
	    pass "ptype class protected_class"
	}
	-re "type = struct protected_class \{${ws}int a;${ws}int b;$nl\}$nl$gdb_prompt $" {
	    setup_xfail "*-*-*"
	    fail "ptype class protected_class"
	}
	-re ".*$gdb_prompt $" { fail "ptype class protected_class" }
	timeout { fail "ptype class protected_class (timeout)" ; return }
    }

    # Accept it as an expected failure if gdb just emits a superflous "private:"
    # attribute, since classes default to private and for consistency with
    # structs (where we don't print the "public:" attribute) we don't print
    # the "private:" attribute.

    setup_xfail_format "DWARF 1"
    send_gdb "ptype class default_private_class\n"
    gdb_expect {
	-re "type = class default_private_class \{${ws}int a;${ws}int b;$nl.*\}$nl$gdb_prompt $" {
	    pass "ptype class default_private_class (FIXME)"
	}
	-re "type = class default_private_class \{${ws}private:${ws}int a;${ws}int b;$nl.*\}$nl$gdb_prompt $" {
	    setup_xfail "*-*-*"
	    fail "ptype class default_private_class (FIXME)"
	}
	-re ".*$gdb_prompt $" { fail "ptype class default_private_class" }
	timeout { fail "ptype class default_private_class (timeout)" ; return }
    }

    send_gdb "ptype class explicit_private_class\n"
    gdb_expect {
	-re "type = class explicit_private_class \{${ws}private:${ws}int a;${ws}int b;$nl.*\}$nl$gdb_prompt $" {
	    pass "ptype class explicit_private_class"
	}
        -re "type = class explicit_private_class \{${ws}int a;${ws}int b;$nl.*\}$nl$gdb_prompt $" {
            pass "ptype class explicit_private_class (OK for HP aCC)"
        }
	-re "type = struct explicit_private_class \{${ws}int a;${ws}int b;$nl.*\}$nl$gdb_prompt $" {
	    setup_xfail "*-*-*"
	    fail "ptype class explicit_private_class"
	}
	-re ".*$gdb_prompt $" { fail "ptype class explicit_private_class" }
	timeout { fail "ptype class explicit_private_class (timeout)" ; return }
    }

    send_gdb "ptype class mixed_protection_class\n"
    gdb_expect {
	-re "type = class mixed_protection_class \{${ws}public:${ws}int a;${ws}int b;${ws}private:${ws}int c;${ws}int d;${ws}protected:${ws}int e;${ws}int f;${ws}public:${ws}int g;${ws}private:${ws}int h;${ws}protected:${ws}int i;$nl.*\}$nl$gdb_prompt $" {
	    pass "ptype class mixed_protection_class"
	}
	-re "type = struct mixed_protection_class \{${ws}int a;${ws}int b;${ws}int c;${ws}int d;${ws}int e;${ws}int f;${ws}int g;${ws}int h;${ws}int i;$nl.*\}$nl$gdb_prompt $" {
	    setup_xfail "*-*-*"
	    fail "ptype class mixed_protection_class"
	}
	-re ".*$gdb_prompt $" { fail "ptype class mixed_protection_class" }
	timeout { fail "ptype class mixed_protection_class (timeout)" ; return }
    }

    # This class does not use any C++-specific features, so it's fine for
    # it to print as "struct".
    send_gdb "ptype class A\n"
    gdb_expect {
	-re "type = (class|struct) A \{(${ws}public:|)${ws}int a;${ws}int x;((${ws}A & operator=\\(A const ?&\\);)|(${ws}A\\((A const|const A) ?&\\);)|(${ws}A\\((void|)\\);))*${ws}\}$nl$gdb_prompt $" {
	    pass "ptype class A"
	}
	-re ".*$gdb_prompt $" {
	    fail "ptype class A"
	}
	timeout {
	    fail "ptype class A (timeout)"
	    return
	}
    }

    setup_xfail_format "DWARF 1"
    send_gdb "ptype class B\n"
    gdb_expect {
	-re "type = class B : public A \{${ws}public:${ws}int b;${ws}int x;${ws}B & operator=\\(B const ?&\\);${ws}B\\((B const|const B) ?&\\);${ws}B\\((void|)\\);${ws}\}$nl$gdb_prompt $" {
	    pass "ptype class B"
	}
	-re "type = class B : public A \{${ws}public:${ws}int b;${ws}int x;((${ws}B & operator=\\(B const ?&\\);)|(${ws}B\\(B const ?&\\);)|(${ws}B\\((void|)\\);))*${ws}\}$nl$gdb_prompt $" {
	    pass "ptype class B (obsolescent gcc or gdb)"
	}
	-re ".*$gdb_prompt $" {
	    fail "ptype class B"
	}
	timeout {
	    fail "ptype class B (timeout)"
	    return
	}
    }

    setup_xfail_format "DWARF 1"
    send_gdb "ptype class C\n"
    gdb_expect {
	-re "type = class C : public A \{${ws}public:${ws}int c;${ws}int x;${ws}C & operator=\\(C const ?&\\);${ws}C\\((C const|const C) ?&\\);${ws}C\\((void|)\\);${ws}\}$nl$gdb_prompt $" {
	    pass "ptype class C"
	}
	-re "type = class C : public A \{${ws}public:${ws}int c;${ws}int x;((${ws}C & operator=\\(C const ?&\\);)|(${ws}C\\(C const ?&\\);)|(${ws}C\\((void|)\\);))*${ws}\}$nl$gdb_prompt $" {
	    pass "ptype class C (obsolescent gcc or gdb)"
	}
	-re ".*$gdb_prompt $" {
	    fail "ptype class C"
	}
	timeout {
	    fail "ptype class C (timeout)"
	    return
	}
    }

    setup_xfail_format "DWARF 1"
    send_gdb "ptype class D\n"
    gdb_expect {
	-re "type = class D : public B, public C \{${ws}public:${ws}int d;${ws}int x;${ws}D & operator=\\(D const ?&\\);${ws}D\\((D const|const D) ?&\\);${ws}D\\((void|)\\);${ws}\}$nl$gdb_prompt $" {
	    pass "ptype class D"
	}
	-re "type = class D : public B, public C \{${ws}public:${ws}int d;${ws}int x;((${ws}D & operator=\\(D const ?&\\);)|(${ws}D\\(D const ?&\\);)|(${ws}D\\((void|)\\);))*${ws}\}$nl$gdb_prompt $" {
	    pass "ptype class D (obsolescent gcc or gdb)"
	}
	-re ".*$gdb_prompt $" {
	    fail "ptype class D"
	}
	timeout {
	    fail "ptype class D (timeout)"
	    return
	}
    }

    setup_xfail_format "DWARF 1"
    send_gdb "ptype class E\n"
    gdb_expect {
	-re "type = class E : public D \{${ws}public:${ws}int e;${ws}int x;${ws}E & operator=\\(E const ?&\\);${ws}E\\((E const|const E) ?&\\);${ws}E\\((void|)\\);${ws}\}$nl$gdb_prompt $" {
	    pass "ptype class E"
	}
	-re "type = class E : public D \{${ws}public:${ws}int e;${ws}int x;((${ws}E & operator=\\(E const ?&\\);)|(${ws}E\\((E const|const E) ?&\\);)|(${ws}E\\((void|)\\);))*${ws}\}$nl$gdb_prompt $" {
	    pass "ptype class E"
	}
	-re ".*$gdb_prompt $" {
	    fail "ptype class E"
	}
	timeout {
	    fail "ptype class E (timeout)"
	    return
	}
    }

    # With g++ 2.x and stabs debug info, we misinterpret static methods
    # whose name matches their argument mangling.
    send_gdb "ptype class Static\n"
    gdb_expect {
	-re "type = (class|struct) Static \{(${ws}public:|)${ws}Static & operator=\\(Static const ?&\\);${ws}Static\\((Static const|const Static) ?&\\);${ws}Static\\((void|)\\);${ws}static void ii\\(int, int\\);${ws}\}$nl$gdb_prompt $" {
	    pass "ptype class Static"
	}
	-re "type = (class|struct) Static \{(${ws}public:|)${ws}static void ii\\(int, int\\);${ws}\}$nl$gdb_prompt $" {
	    pass "ptype class Static"
	}
	-re ".*$gdb_prompt $" {
	    fail "ptype class Static"
	}
	timeout {
	    fail "ptype class Static (timeout)"
	    return
	}
    }

    send_gdb "ptype class vA\n"
    gdb_expect {
	-re "type = (class|struct) vA \{(${ws}public:|)${ws}int va;${ws}int vx;${ws}\}$nl$gdb_prompt $" {
	    pass "ptype class vA"
	}
	-re "type = (class|struct) vA \{(${ws}public:|)${ws}int va;${ws}int vx;${ws}vA & operator=\\(vA const ?&\\);${ws}vA\\((vA const|const vA) ?&\\);${ws}vA\\((void|)\\);${ws}\}$nl$gdb_prompt $" {
	    pass "ptype class vA"
	}
	-re "type = (class|struct) vA \{(${ws}public:|)${ws}int va;${ws}int vx;((${ws}vA & operator=\\(vA const ?&\\);)|(${ws}vA\\(vA const ?&\\);)|(${ws}vA\\((void|)\\);))*${ws}\}$nl$gdb_prompt $" {
	    pass "ptype class vA (obsolescent gcc or gdb)"
	}
	-re ".*$gdb_prompt $" {
	    fail "ptype class vA"
	}
	timeout {
	    fail "ptype class vA (timeout)"
	    return
	}
    }

    # Accept the form with embedded GNU style mangled virtual table constructs
    # for now, but with a FIXME.  At some future point, gdb should use a
    # portable representation for the virtual table constructs.

    # The format of a g++ virtual base pointer.
    set vbptr "(_vb\[$.\]|__vb_)\[0-9\]?"

    setup_xfail_format "DWARF 1"
    send_gdb "ptype class vB\n"
    gdb_expect {
	-re "type = class vB : public virtual vA \{${ws}public:${ws}int vb;${ws}int vx;${ws}vB & operator=\\(vB const ?&\\);${ws}vB\\((vB const|const vB) ?&\\);${ws}vB\\((void|)\\);${ws}\}$nl$gdb_prompt $" {
	    pass "ptype class vB"
	}
	-re "type = class vB : public virtual vA \{${ws}private:${ws}vA \\*${vbptr}vA;${ws}public:${ws}int vb;${ws}int vx;${ws}vB & operator=\\(vB const ?&\\);${ws}vB\\(int, vB const ?&\\);${ws}vB\\(int\\);${ws}\}$nl$gdb_prompt $" {
	    setup_xfail "*-*-*"
	    fail "ptype class vB (FIXME: non-portable virtual table constructs)"
	}
        -re "type = class vB : public virtual vA \{${ws}public:${ws}int vb;${ws}int vx;${ws}\}$nl$gdb_prompt $" {
            pass "ptype class vB"
        }
	-re "type = class vB : public virtual vA \{${ws}private:${ws}vA \\*_vb.vA;${ws}public:${ws}int vb;${ws}int vx;((${ws}vB & operator=\\(vB const ?&\\);)|(${ws}vB\\(int, vB const ?&\\);)|(${ws}vB\\(int\\);))*${ws}\}$nl$gdb_prompt $" {
	    setup_xfail "*-*-*"
	    fail "ptype class vB (FIXME) (obsolescent gcc or gdb)"
	}
	-re ".*$gdb_prompt $" {
	    fail "ptype class vB"
	}
	timeout {
	    fail "ptype class vB (timeout)"
	    return
	}
    }

    # Accept the form with embedded GNU style mangled virtual table constructs
    # for now, but with a FIXME.  At some future point, gdb should use a
    # portable representation for the virtual table constructs.

    setup_xfail_format "DWARF 1"
    send_gdb "ptype class vC\n"
    gdb_expect {
	-re "type = class vC : public virtual vA \{${ws}public:${ws}int vc;${ws}int vx;${ws}vC & operator=\\(vC const ?&\\);${ws}vC\\((vC const|const vC) ?&\\);${ws}vC\\((void|)\\);${ws}\}$nl$gdb_prompt $" {
	    pass "ptype class vC"
	}
	-re "type = class vC : public virtual vA \{${ws}private:${ws}vA \\*${vbptr}vA;${ws}public:${ws}int vc;${ws}int vx;${ws}vC & operator=\\(vC const ?&\\);${ws}vC\\(int, vC const ?&\\);${ws}vC\\(int\\);${ws}\}$nl$gdb_prompt $" {
	    setup_xfail "*-*-*"
	    fail "ptype class vC (FIXME: non-portable virtual table constructs)"
	}
        -re "type = class vC : public virtual vA \{${ws}public:${ws}int vc;${ws}int vx;${ws}\}$nl$gdb_prompt $" {
            pass "ptype class vC"
        }
	-re "type = class vC : public virtual vA \{${ws}private:${ws}vA \\*_vb.vA;${ws}public:${ws}int vc;${ws}int vx;((${ws}vC & operator=\\(vC const ?&\\);)|(${ws}vC\\(int, vC const ?&\\);)|(${ws}vC\\(int\\);))*${ws}\}$nl$gdb_prompt $" {
	    setup_xfail "*-*-*"
	    fail "ptype class vC (FIXME) (obsolescent gcc or gdb)"
	}
	-re ".*$gdb_prompt $" {
	    fail "ptype class vC"
	}
	timeout {
	    fail "ptype class vC (timeout)"
	    return
	}
    }

    # Accept the form with embedded GNU style mangled virtual table constructs
    # for now, but with a FIXME.  At some future point, gdb should use a
    # portable representation for the virtual table constructs.

    setup_xfail_format "DWARF 1"
    send_gdb "ptype class vD\n"
    gdb_expect {
	-re "type = class vD : public virtual vB, public virtual vC \{${ws}public:${ws}int vd;${ws}int vx;${ws}vD & operator=\\(vD const ?&\\);${ws}vD\\((vD const|const vD) ?&\\);${ws}vD\\((void|)\\);${ws}\}$nl$gdb_prompt $" {
	    pass "ptype class vD"
	}
	-re "type = class vD : public virtual vB, public virtual vC \{${ws}private:${ws}vC \\*${vbptr}vC;${ws}vB \\*${vbptr}vB;${ws}public:${ws}int vd;${ws}int vx;${ws}vD & operator=\\(vD const ?&\\);${ws}vD\\(int, vD const ?&\\);${ws}vD\\(int\\);${ws}\}$nl$gdb_prompt $" {
	    setup_xfail "*-*-*"
	    fail "ptype class vD (FIXME: non-portable virtual table constructs)"
	}
        -re "type = class vD : public virtual vB, public virtual vC \{${ws}public:${ws}int vd;${ws}int vx;${ws}\}$nl$gdb_prompt $" {
            pass "ptype class vD"
        }
	-re "type = class vD : public virtual vB, public virtual vC \{${ws}private:${ws}vC \\*_vb.vC;${ws}vB \\*_vb.vB;${ws}public:${ws}int vd;${ws}int vx;((${ws}vD & operator=\\(vD const ?&\\);)|(${ws}vD\\(int, vD const ?&\\);)|(${ws}vD\\(int\\);))*${ws}\}$nl$gdb_prompt $" {
	    setup_xfail "*-*-*"
	    fail "ptype class vD (FIXME) (obsolescent gcc or gdb)"
	}
	-re ".*$gdb_prompt $" {
	    fail "ptype class vD"
	}
	timeout {
	    fail "ptype class vD (timeout)"
	    return
	}
    }

    # Accept the form with embedded GNU style mangled virtual table constructs
    # for now, but with a FIXME.  At some future point, gdb should use a
    # portable representation for the virtual table constructs.

    setup_xfail_format "DWARF 1"
    send_gdb "ptype class vE\n"
    gdb_expect {
	-re "type = class vE : public virtual vD \{${ws}public:${ws}int ve;${ws}int vx;${ws}vE & operator=\\(vE const ?&\\);${ws}vE\\((vE const|const vE) ?&\\);${ws}vE\\((void|)\\);${ws}\}$nl$gdb_prompt $" {
	    pass "ptype class vE"
	}
	-re "type = class vE : public virtual vD \{${ws}private:${ws}vD \\*${vbptr}vD;${ws}public:${ws}int ve;${ws}int vx;${ws}vE & operator=\\(vE const ?&\\);${ws}vE\\(int, vE const ?&\\);${ws}vE\\(int\\);${ws}\}$nl$gdb_prompt $" {
	    setup_xfail "*-*-*"
	    fail "ptype class vE (FIXME: non-portable virtual table constructs)"
	}
        -re "type = class vE : public virtual vD \{${ws}public:${ws}int ve;${ws}int vx;${ws}\}$nl$gdb_prompt $" {
            pass "ptype class vE"
        }
	-re "type = class vE : public virtual vD \{${ws}private:${ws}vD \\*_vb.vD;${ws}public:${ws}int ve;${ws}int vx;((${ws}vE & operator=\\(vE const ?&\\);)|(${ws}vE\\(int, vE const ?&\\);)|(${ws}vE\\(int\\);))*${ws}\}$nl$gdb_prompt $" {
	    setup_xfail "*-*-*"
	    fail "ptype class vE (FIXME) (obsolescent gcc or gdb)"
	}
	-re ".*$gdb_prompt $" {
	    fail "ptype class vE"
	}
	timeout {
	    fail "ptype class vE (timeout)"
	    return
	}
    }

    setup_xfail_format "DWARF 1"
    send_gdb "ptype class Base1\n"
    gdb_expect {
	-re "type = class Base1 \{${ws}public:${ws}int x;${ws}Base1 & operator=\\(Base1 const ?&\\);${ws}Base1\\(((Base1 const)|(const Base1)) ?&\\);${ws}Base1\\(int\\);${ws}\}$nl$gdb_prompt $" {
	    pass "ptype class Base1"
	}
	-re "type = class Base1 \{${ws}public:${ws}int x;${ws}Base1\\(int\\);${ws}\}$nl$gdb_prompt $" {
	    pass "ptype class Base1"
	}
	-re "type = class Base1 \{${ws}public:${ws}int x;((${ws}Base1 & operator=\\(Base1 const ?&\\);)|(${ws}Base1\\(Base1 const ?&\\);)|(${ws}Base1\\(int\\);))*${ws}\}$nl$gdb_prompt $" {
	    pass "ptype class Base1 (obsolescent gcc or gdb)"
	}
	-re ".*$gdb_prompt $" {
	    fail "ptype class Base1"
	}
	timeout {
	    fail "ptype class Base1 (timeout)"
	    return
	}
    }

    setup_xfail_format "DWARF 1"
    send_gdb "ptype class Foo\n"
    gdb_expect {
        -re "type = class Foo \{${ws}public:${ws}int x;${ws}int y;${ws}static int st;\r\n${ws}Foo\\(int, int\\);${ws}int operator!\\((void|)\\);${ws}operator int\\((void|)\\);${ws}int times\\(int\\);$nl\}$nl$gdb_prompt $" {
            pass "ptype class Foo"
        }
	-re "type = class Foo \{${ws}public:${ws}int x;${ws}int y;${ws}static int st;${ws}Foo & operator=\\(Foo const ?&\\);${ws}Foo\\((Foo const|const Foo) ?&\\);${ws}Foo\\(int, int\\);${ws}int operator!\\((void|)\\);${ws}operator int\\((void|)\\);${ws}int times\\(int\\);${ws}\}$nl$gdb_prompt $" {
	    pass "ptype class Foo"
	}
	-re "type = class Foo \{${ws}public:${ws}int x;${ws}int y;${ws}static int st;((${ws}Foo & operator=\\(Foo const ?&\\);)|(${ws}Foo\\(Foo const ?&\\);)|(${ws}Foo\\(int, int\\);)|(${ws}int operator!\\((void|)\\);)|(${ws}int operator int\\((void|)\\);)|(${ws}int times\\(int\\);))*${ws}\}$nl$gdb_prompt $" {
	    pass "ptype class Foo (obsolescent gcc or gdb)"
	}
	-re ".*$gdb_prompt $" {
	    fail "ptype class Foo"
	}
	timeout {
	    fail "ptype class Foo (timeout)"
	    return
	}
    }

    setup_xfail_format "DWARF 1"
    send_gdb "ptype class Bar\n"
    gdb_expect {
	-re "type = class Bar : public Base1, public Foo \{${ws}public:${ws}int z;${ws}Bar & operator=\\(Bar const ?&\\);${ws}Bar\\((Bar const|const Bar) ?&\\);${ws}Bar\\(int, int, int\\);${ws}\}$nl$gdb_prompt $" {
	    pass "ptype class Bar"
	}
	-re "type = class Bar : public Base1, public Foo \{${ws}public:${ws}int z;((${ws}Bar & operator=\\(Bar const ?&\\);)|(${ws}Bar\\(Bar const ?&\\);)|(${ws}Bar\\(int, int, int\\);))*${ws}\}$nl$gdb_prompt $" {
	    pass "ptype class Bar (obsolescent gcc or gdb)"
	}
	-re ".*$gdb_prompt $" {
	    fail "ptype class Bar"
	}
	timeout {
	    fail "ptype class Bar (timeout)"
	    return
	}
    }
}

#
# Test simple access to class members.
#

proc test_non_inherited_member_access {} {
    global gdb_prompt
    
    # Print non-inherited members of g_A.

    gdb_test "print g_A.a" ".* = 1" "g_A.a incorrect"

    gdb_test "print g_A.x" ".* = 2" "g_A.x incorrect"

    # Print non-inherited members of g_B.

    gdb_test "print g_B.b" ".* = 5" "g_B.b incorrect"

    gdb_test "print g_B.x" ".* = 6" "g_B.x incorrect"

    # Print non-inherited members of g_C.

    gdb_test "print g_C.c" ".* = 9" "g_C.c incorrect"

    gdb_test "print g_C.x" ".* = 10" "g_C.x incorrect"

    # Print non-inherited members of g_D.

    gdb_test "print g_D.d" ".* = 19" "g_D.d incorrect"

    gdb_test "print g_D.x" ".* = 20" "g_D.x incorrect"

    # Print non-inherited members of g_E.

    gdb_test "print g_E.e" ".* = 31" "g_E.e incorrect"

    gdb_test "print g_E.x" ".* = 32" "g_E.x incorrect"
}

#
# Try access to non-members that are members of another class.
# Should give errors.
#

proc test_wrong_class_members {} {
    global gdb_prompt

    gdb_test "print g_A.b" "There is no member( or method|) named b." "print g_A.b should be error"

    gdb_test "print g_B.c" "There is no member( or method|) named c." "print g_B.c should be error"

    gdb_test "print g_B.d" "There is no member( or method|) named d." "print g_B.d should be error"

    gdb_test "print g_C.b" "There is no member( or method|) named b." "print g_C.b should be error"

    gdb_test "print g_C.d" "There is no member( or method|) named d." "print g_C.d should be error"

    gdb_test "print g_D.e" "There is no member( or method|) named e." "print g_D.e should be error"
}

#
# Try access to non-members that are not members of any class.
# Should give errors.
#

proc test_nonexistent_members {} {
    global gdb_prompt

    gdb_test "print g_A.y" "There is no member( or method|) named y." "print g_A.y should be error"

    gdb_test "print g_B.z" "There is no member( or method|) named z." "print g_B.z should be error"

    gdb_test "print g_C.q" "There is no member( or method|) named q." "print g_C.q should be error"

    gdb_test "print g_D.p" "There is no member( or method|) named p." "print g_D.p should be error"
}

#
# Call a method that expects a base class parameter with base, inherited,
# and unrelated class arguments.
#

proc test_method_param_class {} {
    gdb_test "call class_param.Aptr_a (&g_A)" ".* = 1" "base class param->a"
    gdb_test "call class_param.Aptr_x (&g_A)" ".* = 2" "base class param->x"
    gdb_test "call class_param.Aptr_a (&g_B)" ".* = 3" "inherited class param->a"
    gdb_test "call class_param.Aptr_x (&g_B)" ".* = 4" "inherited class param->x"
    gdb_test "call class_param.Aref_a (g_A)" ".* = 1" "base class (&param)->a"
    gdb_test "call class_param.Aref_x (g_A)" ".* = 2" "base class (&param)->x"
    gdb_test "call class_param.Aref_a (g_B)" ".* = 3" "inherited class (&param)->a"
    gdb_test "call class_param.Aref_x (g_B)" ".* = 4" "inherited class (&param)->x"
    gdb_test "call class_param.Aval_a (g_A)" ".* = 1" "base class param.a"
    gdb_test "call class_param.Aval_x (g_A)" ".* = 2" "base class param.x"
    gdb_test "call class_param.Aval_a (g_B)" ".* = 3" "inherited class param.a"
    gdb_test "call class_param.Aval_x (g_B)" ".* = 4" "inherited class param.x"

    gdb_test "call class_param.Aptr_a (&foo)" "Cannot resolve .*" "unrelated class *param"
    gdb_test "call class_param.Aref_a (foo)" "Cannot resolve .*" "unrelated class &param"
    gdb_test "call class_param.Aval_a (foo)" "Cannot resolve .*" "unrelated class param"
}

#
# Examine a class with an enum field.
#

proc test_enums {} {
    global gdb_prompt
    global hp_aCC_compiler

    # print the object
    send_gdb "print obj_with_enum\n"
    gdb_expect {
	-re "\\$\[0-9\]* = \\{priv_enum = red, x = 0\\}.*$gdb_prompt $" { pass "print obj_with_enum (1)" }
	-re "$gdb_prompt $"                     { fail "print obj_with_enum (1)" }
	timeout                             { fail "(timeout) print obj_with_enum (1)" }
    }

    send_gdb "next\n"
    gdb_expect {
	-re "$gdb_prompt $"                     { pass "next" }
	timeout                             { fail "(timeout) next" }
    }

    # print the object again
    send_gdb "print obj_with_enum\n"
    gdb_expect {
	-re "\\$\[0-9\]* = \\{priv_enum = green, x = 0\\}.*$gdb_prompt $" { pass "print obj_with_enum (2)" }
	-re "$gdb_prompt $"                     { fail "print obj_with_enum (2)" }
	timeout                             { fail "(timeout) print obj_with_enum (2)" }
    }

    # print out the enum member
    send_gdb "print obj_with_enum.priv_enum\n"
    gdb_expect {
	-re "\\$\[0-9\]* = green.*$gdb_prompt $" { pass "print obj_with_enum.priv_enum" }
	-re "$gdb_prompt $"                     { fail "print obj_with_enum.priv_enum" }
	timeout                             { fail "(timeout) print obj_with_enum.priv_enum" }
    }

    # ptype on the enum member
    # The third success case is a little dubious, but it's not clear what
    # ought to be required of a ptype on a private enum... -sts 19990324
    send_gdb "ptype obj_with_enum.priv_enum\n"
    gdb_expect {
	-re "type = enum ClassWithEnum::PrivEnum \\{red, green, blue, yellow = 42\\}.*$gdb_prompt $" { pass "ptype obj_with_enum.priv_enum" }
	-re "type = enum PrivEnum \\{red, green, blue, yellow = 42\\}.*$gdb_prompt $" { pass "ptype obj_with_enum.priv_enum" }
	-re "type = enum \\{red, green, blue, yellow = 42\\}.*$gdb_prompt $" { pass "ptype obj_with_enum.priv_enum" }
	-re "$gdb_prompt $"                     { fail "ptype obj_with_enum.priv_enum" }
	timeout                             { fail "(timeout) ptype obj_with_enum.priv_enum" }
    }

    # ptype on the object
    # g++ is putting out the wrong debug info.  This works with aCC
    if {!$hp_aCC_compiler} {setup_xfail "*-*-*"}
    send_gdb "ptype obj_with_enum\n"
    gdb_expect {
	-re "type = class ClassWithEnum \\{\r\n\[ \t\]*public:\r\n\[ \t\]*(enum |)ClassWithEnum::PrivEnum priv_enum;\r\n\[ \t\]*int x;\r\n\\}\r\n$gdb_prompt $" { pass "ptype obj_with_enum" }
	-re "$gdb_prompt $"                     { fail "ptype obj_with_enum" }
	timeout                             { fail "(timeout) ptype obj_with_enum" }
    }

    # g++ is putting out the wrong debug info.  This works with aCC
    if {!$hp_aCC_compiler} {setup_xfail "*-*-*"}
    send_gdb "print (ClassWithEnum::PrivEnum) 42\n"
    gdb_expect {
	-re "\\$\[0-9\]* = yellow.*$gdb_prompt $" { pass "print (ClassWithEnum::PrivEnum) 42" }
	-re "$gdb_prompt $"                     { fail "print (ClassWithEnum::PrivEnum) 42" }
	timeout                             { fail "(timeout) print (ClassWithEnum::PrivEnum) 42" }
    }
}

#
# Pointers to class members
#

proc test_pointers_to_class_members {} {
    global gdb_prompt
    global decimal
    global nl

    gdb_test "print Bar::z" ".* = .int\[ \]*\[( \]*Bar::&\[)\]+\[ \]*Bar::z" "print Bar::z"

    gdb_test "print &Foo::x" ".* = .int\[ \]*\[( \]*Foo::\[*)\]+\[ \]*&Foo::x" "print &Foo::x"

    gdb_test "print (int)&Foo::x" ".* = 0" "print (int)&Foo::x"

    send_gdb "print (int)&Bar::y == 2*sizeof(int)\n"
    gdb_expect {
	-re ".* = true$nl$gdb_prompt $" {
	    pass "print (int)&Bar::y == 2*sizeof(int)"
	}
	-re "There is no field named y.*$gdb_prompt $" {
	    setup_xfail "*-*-*"
	    fail "print (int)&Bar::y == 2*sizeof(int)"
	}
	-re ".*$gdb_prompt $" { fail "print (int)&Bar::y == 2*sizeof(int)" }
	timeout { fail "print (int)&Bar::y == 2*sizeof(int) (timeout)" ; return }
    }

    send_gdb "next 2\n"
    setup_xfail "*-*-*"
    gdb_expect {
	-re "$decimal\[ \t\]+inheritance3 \[)(\]+;$nl$gdb_prompt $" {}
	-re ".*$gdb_prompt $" { fail "next to inheritance3" ; return }
    }
    clear_xfail "*-*-*"

    setup_xfail_format "DWARF 1"
    gdb_test "print (int)pmi == sizeof(int)" ".* = false" "print (int)pmi == sizeof(int)"
}

#
# Test static members.
#

proc test_static_members {} {
    global gdb_prompt
    global hex
    global nl

    send_gdb "print Foo::st\n"
    gdb_expect {
	-re ".* = 100$nl$gdb_prompt $" {
	    pass "print Foo::st"
	}
	-re "There is no field named st.*$gdb_prompt $" {
	    setup_xfail "*-*-*"
	    fail "print Foo::st"
	}
	-re ".*$gdb_prompt $" { fail "print Foo::st" }
       timeout { fail "print Foo::st (timeout)" ; return }
    }

    send_gdb "set foo.st = 200\n"
    gdb_expect {
	-re ".*$gdb_prompt $" {}
    }

    send_gdb "print bar.st\n"
    gdb_expect {
	-re ".* = 200$nl$gdb_prompt $" {
	    pass "print bar.st"
	}
	-re "There is no member( or method|) named st.*$gdb_prompt $" {
	    setup_xfail "*-*-*"
	    fail "print bar.st"
	}
	-re ".*$gdb_prompt $" { fail "print bar.st" }
       timeout { fail "print bar.st (timeout)" ; return }
    }

    send_gdb "print &foo.st\n"
    gdb_expect {
	-re ".* = .int \[*)\]+ $hex$nl$gdb_prompt $" {
	    pass "print &foo.st"
	}
	-re "There is no member( or method|) named st.*$gdb_prompt $" {
	    setup_xfail "*-*-*"
	    fail "print &foo.st"
	}
	-re ".*$gdb_prompt $" { fail "print &foo.st" }
       timeout { fail "print &foo.st (timeout)" ; return }
    }

    set got_bar_st 0
    send_gdb "print &Bar::st\n"
    gdb_expect {
	-re ".* = .int \[*)\]+ $hex$nl$gdb_prompt $" {
	    pass "print &Bar::st"
	    set got_bar_st 1
	}
	-re "There is no field named st.*$gdb_prompt $" {
	    setup_xfail "*-*-*"
	    fail "print &Bar::st"
	}
	-re ".*$gdb_prompt $" { fail "print &Bar::st" }
       timeout { fail "print &Bar::st (timeout)" ; return }
    }

    if $got_bar_st then {
	gdb_test "print *\$" ".* = 200" "print *\$"
    }

    gdb_test "set print static-members off" ""
    gdb_test "print csi" \
	"{x = 10, y = 20}" \
	"print csi without static members"
    gdb_test "print cnsi" \
	"{x = 30, y = 40}" \
	"print cnsi without static members"

    gdb_test "set print static-members on" ""
    setup_xfail_format "DWARF 1"
    gdb_test "print csi" \
	"{x = 10, y = 20, static null = {x = 0, y = 0, static null = <same as static member of an already seen type>}}" \
	"print csi with static members"
    setup_xfail_format "DWARF 1"
    gdb_test "print cnsi" \
	"{x = 30, y = 40, static null = {x = 0, y = 0, static null = <same as static member of an already seen type>, static yy = {z = 5, static xx = {x = 1, y = 2, static null = <same as static member of an already seen type>, static yy = <same as static member of an already seen type>}}}, static yy = <same as static member of an already seen type>}" \
	"print cnsi with static members"
}

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

    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

    send_gdb "set language c++\n"
    gdb_expect -re "$gdb_prompt $"
    send_gdb "set width 0\n"
    gdb_expect -re "$gdb_prompt $"

    # Get the debug format for the compiled test case.

    if [ runto_main ] then {
	get_debug_format
    }

    test_ptype_class_objects

    if [ runto 'inheritance2' ] then {
	test_non_inherited_member_access
	test_wrong_class_members
	test_nonexistent_members
	test_method_param_class
    }

    gdb_breakpoint enums2
    if [ gdb_continue "enums2(\\(\\)|)" ]==0 then {
	gdb_test "finish" "" ""
	test_enums
    }

    if [istarget "mips-idt-*"] then {
	# Restart because IDT/SIM runs out of file descriptors.
	gdb_exit
	gdb_start
	gdb_reinitialize_dir $srcdir/$subdir
	gdb_load $binfile
    }

    if [ runto_main ] then {
	test_pointers_to_class_members
	test_static_members
    }

    if [istarget "mips-idt-*"] then {
	# Restart because IDT/SIM runs out of file descriptors.
	gdb_exit
	gdb_start
	gdb_reinitialize_dir $srcdir/$subdir
	gdb_load $binfile
    }

    if [ runto marker_reg1 ] then {

	gdb_test "finish" "Run till exit from.*" "finish from marker_reg1"

	send_gdb "print v.method ()\n"
	gdb_expect {
	    -re "= 82.*$gdb_prompt $" {
		pass "calling method for small class"
	    }
	    -re "Address requested for identifier .v. which is in register.*$gdb_prompt $" {
		setup_xfail "*-*-*" 2972
		fail "calling method for small class"
	    }
	    -re ".*$gdb_prompt $" { fail "calling method for small class" }
	    timeout { fail "calling method for small class (timeout)" }
	    eof { fail "calling method for small class (eof)" }
	}
    }

}

do_tests

send_gdb "maint demangle inheritance1__Fv\n"
gdb_expect {
   -re "inheritance1\\(void\\).*$gdb_prompt $" { pass "demangle" }
   -re ".*$gdb_prompt $"   { fail "demangle" }
   timeout           { fail "(timeout) demangle" }
}
