This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[patch/commit/testsuite/cp] virtfunc.exp


This patch brings virtfunc.exp into the modern age with
gdb_test_multiple, support for the new gcc ABI, removal of patterns to
match bugs in gcc 2.4.5, and so on.

Like the old edition, this edition has one test that FAIL/KFAIL's.  The
test is "print pEe->D::vg()", pr gdb/1064.  I guess gdb does not like
the "D::" base selector part.  All the other virtual function calls are
working fine.  And the numerous varieties of ptype's are all okay too.

I tested this on native i686-pc-linux-gnu with gcc 2.95.3, gcc 3.3.2,
and gcc HEAD (with new ABI), and with -gdwarf-2 and -gstabs+.

I am committing this now.

Did I mention that gcc has a new ABI?

Michael C

2003-12-31  Michael Chastain  <mec.gnu@mindspring.com>

	* gdb.cp/virtfunc.exp: Rewrite.  Clean up patterns to match
	current versions of gcc, including gcc abi 2.  Use "breakpoint"
	and "continue" instead of restarting the target program.  Use
	gdb_test_multiple and gdb_test for all tests.

Index: virtfunc.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.cp/virtfunc.exp,v
retrieving revision 1.2
diff -c -3 -p -r1.2 virtfunc.exp
*** virtfunc.exp	23 Nov 2003 18:24:46 -0000	1.2
--- virtfunc.exp	1 Jan 2004 02:22:09 -0000
***************
*** 19,30 ****
  # 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 }
--- 19,31 ----
  # bug-gdb@prep.ai.mit.edu
  
  # 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\]+"
  
  if $tracelevel then {
!     strace $tracelevel
  }
  
  if { [skip_cplus_tests] } { continue }
*************** set testfile "virtfunc"
*** 33,738 ****
  set srcfile ${testfile}.cc
  set binfile ${objdir}/${subdir}/${testfile}
  
- if [get_compiler_info ${binfile} "c++"] {
-     return -1
- }
- 
- source ${binfile}.ci
- 
  if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {c++ debug}] != "" } {
       gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
  }
  
! proc gdb_virtfunc_init {} {
!     global srcdir subdir binfile
!     global gdb_prompt
! 
!     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 $"
! }
! 
! proc gdb_virtfunc_restart {} {
!     gdb_exit;
!     gdb_start;
!     gdb_virtfunc_init;
!     runto 'test_calls';
! }
! 
  #
! #  Test printing of the types of various classes.
  #
  
  proc test_ptype_of_classes {} {
      global gdb_prompt
      global ws
      global nl
  
!     # This used to be a fail if it printed "struct" not "class".  But
!     # since this struct doesn't use any special C++ features, it is
!     # considered right for GDB to print it as "struct".
!     send_gdb "ptype VA\n"
!     gdb_expect {
! 	-re "type = (struct|class) VA \{(${ws}public:|)${ws}int va;${ws}VA & operator=\\(VA const ?&\\);${ws}VA\\((VA const|const VA) ?&\\);${ws}VA\\((void|)\\);${ws}\}.*$gdb_prompt $" {
  	    pass "ptype VA"
  	}
- 	-re "type = (struct|class) VA \{(${ws}public:|)${ws}int va;((${ws}VA & operator=\\(VA const ?&\\);)|(${ws}VA\\(VA const ?&\\);)|(${ws}VA\\((void|)\\);))*${ws}\}.*$gdb_prompt $" {
- 	    pass "ptype VA (obsolescent gcc or gdb)"
- 	}
- 	-re ".*$gdb_prompt $" {
- 	    fail "ptype VA"
- 	}
- 	timeout {
- 	    fail "ptype VA (timeout)"
- 	}
      }
  
!     send_gdb "ptype VB\n"
!     gdb_expect {
! 	-re "type = class VB \{${ws}public:${ws}int vb;${ws}VB & operator=\\(VB const ?&\\);${ws}VB\\((VB const|const VB) ?&\\);${ws}VB\\((void|)\\);${ws}int fvb\\((void|)\\);${ws}virtual int vvb\\((void|)\\);${ws}\}.*$gdb_prompt $" {
  	    pass "ptype VB"
  	}
! 	-re "type = class VB \{${ws}public:${ws}int vb;${ws}int fvb \\((void|)\\);${ws}virtual int vvb \\((void|)\\);${ws}\}.*$gdb_prompt $" {
! 	    pass "ptype VB (aCC)"
! 	}
! 	-re "type = class VB \{${ws}public:${ws}int vb;((${ws}VB & operator=\\(VB const ?&\\);)|(${ws}VB\\(VB const ?&\\);)|(${ws}VB\\((void|)\\);)|(${ws}int fvb\\((void|)\\);)|(${ws}virtual int vvb\\((void|)\\);))*${ws}\}.*$gdb_prompt $" {
! 	    pass "ptype VB (obsolescent gcc or gdb)"
! 	}
! 	-re ".*$gdb_prompt $" {
! 	    fail "ptype VB"
  	}
! 	timeout {
! 	    fail "ptype VB (timeout)"
  	}
      }
  
!     send_gdb "ptype V\n"
!     gdb_expect {
! 	-re "type = class V : public VA, public VB \{${ws}public:${ws}int w;${ws}V & operator=\\(V const ?&\\);${ws}V\\((V const|const V) ?&\\);${ws}V\\((void|)\\);${ws}int f\\((void|)\\);${ws}virtual int vv\\((void|)\\);${ws}\}$nl$gdb_prompt $" {
  	    pass "ptype V"
  	}
- 	-re "type = class V : public VA, public VB \{${ws}public:${ws}int w;${ws}int f \\((void|)\\);${ws}virtual int vv \\((void|)\\);${ws}\}$nl$gdb_prompt $" {
- 	    pass "ptype V (aCC)"
- 	}
- 	-re "type = class V : public VA, public VB \{${ws}public:${ws}int w;((${ws}V & operator=\\(V const ?&\\);)|(${ws}V\\(V const ?&\\);)|(${ws}V\\((void|)\\);)|(${ws}int f\\((void|)\\);)|(${ws}virtual int vv\\((void|)\\);))*${ws}\}$nl$gdb_prompt $" {
- 	    pass "ptype V (obsolescent gcc or gdb)"
- 	}
- 	-re ".*$gdb_prompt $" {
- 	    fail "ptype V"
- 	}
- 	timeout {
- 	    fail "ptype V (timeout)"
- 	}
      }
  
!     # The format of a g++ virtual base pointer.
!     set vbptr "(_vb\[$.\]|__vb_)\[0-9\]?"
  
!     send_gdb "ptype A\n"
!     gdb_expect {
! 	-re "type = class A : public virtual V \{${ws}private:${ws}V \\*${vbptr}V;${ws}int a;${ws}public:${ws}A & operator=\\(A const ?&\\);${ws}A\\(int, A const ?&\\);${ws}A\\(int\\);${ws}virtual int f\\((void|)\\);${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype A"
! 	}
! 	-re "type = class A : public virtual V \{${ws}private:${ws}int a;${ws}public:${ws}A & operator=\\(A const ?&\\);${ws}A\\((A const|const A) ?&\\);${ws}A\\((void|)\\);${ws}virtual int f\\((void|)\\);${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype A"
! 	}
!         -re "type = class A : public virtual V \{${ws}private:${ws}int a;${ws}public:${ws}virtual int f\\((void|)\\);${ws}\}$nl$gdb_prompt $" {
!             pass "ptype A (aCC)"
!         }
! 	-re "type = class A : public virtual V \{${ws}private:${ws}V \\*${vbptr}V;${ws}int a;${ws}public:((${ws}A & operator=\\(A const ?&\\);)|(${ws}A\\(int, A const ?&\\);)|(${ws}A\\(int\\);)|(${ws}virtual int f\\((void|)\\);))*${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype A (obsolescent gcc or gdb)"
! 	}
! 	-re "type = class A : public virtual V \{${ws}private:${ws}V \\*${vbptr}FOO;${ws}int a;${ws}public:${ws}virtual int f.void.;${ws}\}$nl$gdb_prompt $" {
! 	    # This happens because the type is defined only after it is
! 	    # too late.
! 	    fail "ptype A (known failure with gcc cygnus-2.4.5-930417)"
! 	    # Many of the rest of these tests have the same problem.
! 	    return 0
! 	}
! 	-re ".*$gdb_prompt $" {
! 	    fail "ptype A"
! 	}
! 	timeout {
! 	    fail "ptype A (timeout)"
  	}
      }
  
!     send_gdb "ptype B\n"
!     gdb_expect {
! 	-re "type = class B : public A \{${ws}private:${ws}int b;${ws}public:${ws}B & operator=\\(B const ?&\\);${ws}B\\(int, B const ?&\\);${ws}B\\(int\\);${ws}virtual int f\\((void|)\\);${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype B"
! 	}
! 	-re "type = class B : public A \{${ws}private:${ws}int b;${ws}public:${ws}B & operator=\\(B const ?&\\);${ws}B\\((B const|const B) ?&\\);${ws}B\\((void|)\\);${ws}virtual int f\\((void|)\\);${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype B"
! 	}
! 	-re "type = class B : public A \{${ws}private:${ws}int b;${ws}public:${ws}virtual int f \\((void|)\\);${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype B (aCC)"
! 	}
! 	-re "type = class B : public A \{${ws}private:${ws}int b;${ws}public:((${ws}B & operator=\\(B const ?&\\);)|(${ws}B\\(int, B const ?&\\);)|(${ws}B\\(int\\);)|(${ws}virtual int f\\((void|)\\);))*${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype B (obsolescent gcc or gdb)"
! 	}
! 	-re ".*$gdb_prompt $" {
! 	    fail "ptype B"
! 	}
! 	timeout {
! 	    fail "ptype B (timeout)"
  	}
      }
  
!     send_gdb "ptype C\n"
!     gdb_expect {
! 	-re "type = class C : public virtual V \{${ws}private:${ws}V \\*${vbptr}V;${ws}public:${ws}int c;${ws}C & operator=\\(C const ?&\\);${ws}C\\(int, C const ?&\\);${ws}C\\(int\\);${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype C"
! 	}
! 	-re "type = class C : public virtual V \{${ws}public:${ws}int c;${ws}C & operator=\\(C const ?&\\);${ws}C\\((C const|const C) ?&\\);${ws}C\\((void|)\\);${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype C"
! 	}
!         -re "type = class C : public virtual V \{${ws}public:${ws}int c;${ws}\}$nl$gdb_prompt $" {
!             pass "ptype C (aCC)"
!         }
! 	-re "type = class C : public virtual V \{${ws}private:${ws}V \\*${vbptr}V;${ws}public:${ws}int c;((${ws}C & operator=\\(C const ?&\\);)|(${ws}C\\(int, C const ?&\\);)|(${ws}C\\(int\\);))*${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype C (obsolescent gcc or gdb)"
! 	}
! 	-re ".*$gdb_prompt $" {
! 	    fail "ptype C"
! 	}
! 	timeout {
! 	    fail "ptype C (timeout)"
  	}
      }
  
!     send_gdb "ptype AD\n"
!     gdb_expect {
! 	-re "type = class AD \{${ws}public:${ws}AD & operator=\\(AD const ?&\\);${ws}AD\\((AD const|const AD) ?&\\);${ws}AD\\((void|)\\);${ws}virtual int vg\\((void|)\\);${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype AD"
! 	}
! 	-re "type = class AD \{${ws}public:${ws}virtual int vg \\((void|)\\);${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype AD (aCC)"
! 	}
! 	-re "type = class AD \{${ws}public:((${ws}AD & operator=\\(AD const ?&\\);)|(${ws}AD\\(AD const ?&\\);)|(${ws}AD\\((void|)\\);)|(${ws}virtual int vg\\((void|)\\);))*${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype AD (obsolescent gcc or gdb)"
! 	}
! 	-re ".*$gdb_prompt $" {
! 	    fail "ptype AD"
! 	}
! 	timeout {
! 	    fail "ptype AD (timeout)"
  	}
      }
  
!     send_gdb "ptype D\n"
!     gdb_expect {
! 	-re "type = class D : public AD, public virtual V \{${ws}private:${ws}V \\*${vbptr}V;${ws}public:${ws}int d;${ws}D & operator=\\(D const ?&\\);${ws}D\\(int, D const ?&\\);${ws}D\\(int\\);${ws}static void s\\((void|)\\);${ws}virtual int vg\\((void|)\\);${ws}virtual int vd\\((void|)\\);${ws}int fd\\((void|)\\);${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype D"
! 	}
! 	-re "type = class D : public AD, public virtual V \{${ws}public:${ws}int d;${ws}D & operator=\\(D const ?&\\);${ws}D\\((D const|const D) ?&\\);${ws}D\\((void|)\\);${ws}static void s\\((void|)\\);${ws}virtual int vg\\((void|)\\);${ws}virtual int vd\\((void|)\\);${ws}int fd\\((void|)\\);${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype D"
! 	}
!         -re "type = class D : public AD, public virtual V \{${ws}public:${ws}int d;${ws}static void s\\((void|)\\);${ws}virtual int vg\\((void|)\\);${ws}virtual int vd\\((void|)\\);${ws}int fd\\((void|)\\);${ws}\}$nl$gdb_prompt $" {
!             pass "ptype D (aCC)"
!         }
! 	-re "type = class D : public AD, public virtual V \{${ws}private:${ws}V \\*${vbptr}V;${ws}public:${ws}int d;((${ws}D & operator=\\(D const ?&\\);)|(${ws}D\\(int, D const ?&\\);)|(${ws}D\\(int\\);)|(${ws}static void s\\((void|)\\);)|(${ws}virtual int vg\\((void|)\\);)|(${ws}virtual int vd\\((void|)\\);)|(${ws}int fd\\((void|)\\);))*${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype D (obsolescent gcc or gdb)"
! 	}
! 	-re ".*$gdb_prompt $" {
! 	    fail "ptype D"
! 	}
! 	timeout {
! 	    fail "ptype D (timeout)"
  	}
      }
  
!     send_gdb "ptype E\n"
!     gdb_expect {
! 	-re "type = class E : public B, public virtual V, public D, public C \{${ws}public:${ws}int e;${ws}E & operator=\\(E const ?&\\);${ws}E\\(int, E const ?&\\);${ws}E\\(int\\);${ws}virtual int f\\((void|)\\);${ws}virtual int vg\\((void|)\\);${ws}virtual int vv\\((void|)\\);${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype E"
! 	}
! 	-re "type = class E : public B, public virtual V, public D, public C \{${ws}public:${ws}int e;${ws}E & operator=\\(E const ?&\\);${ws}E\\((E const|const E) ?&\\);${ws}E\\((void|)\\);${ws}virtual int f\\((void|)\\);${ws}virtual int vg\\((void|)\\);${ws}virtual int vv\\((void|)\\);${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype E"
! 	}
! 	-re "type = class E : public B, public virtual V, public D, public C \{${ws}public:${ws}int e;${ws}virtual int f \\((void|)\\);${ws}virtual int vg \\((void|)\\);${ws}virtual int vv \\((void|)\\);${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype E (aCC)"
! 	}
! 	-re "type = class E : public B, public virtual V, public D, public C \{${ws}public:${ws}int e;((${ws}E & operator=\\(E const ?&\\);)|(${ws}E\\(int, E const ?&\\);)|(${ws}E\\(int\\);)|(${ws}virtual int f\\((void|)\\);)|(${ws}virtual int vg\\((void|)\\);)|(${ws}virtual int vv\\((void|)\\);))*${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype E (obsolescent gcc or gdb)"
! 	}
! 	-re ".*$gdb_prompt $" {
! 	    fail "ptype E"
! 	}
! 	timeout {
! 	    fail "ptype E (timeout)"
  	}
      }
  
!     send_gdb "ptype dd\n"
!     gdb_expect {
! 	-re "type = class D : public AD, public virtual V \{${ws}private:${ws}V \\*${vbptr}V;${ws}public:${ws}int d;${ws}D & operator=\\(D const ?&\\);${ws}D\\(int, D const ?&\\);${ws}D\\(int\\);${ws}static void s\\((void|)\\);${ws}virtual int vg\\((void|)\\);${ws}virtual int vd\\((void|)\\);${ws}int fd\\((void|)\\);${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype dd"
! 	}
! 	-re "type = class D : public AD, public virtual V \{${ws}public:${ws}int d;${ws}D & operator=\\(D const ?&\\);${ws}D\\((D const|const D) ?&\\);${ws}D\\((void|)\\);${ws}static void s\\((void|)\\);${ws}virtual int vg\\((void|)\\);${ws}virtual int vd\\((void|)\\);${ws}int fd\\((void|)\\);${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype dd"
! 	}
!         -re "type = class D : public AD, public virtual V \{${ws}public:${ws}int d;${ws}static void s\\((void|)\\);${ws}virtual int vg\\((void|)\\);${ws}virtual int vd\\((void|)\\);${ws}int fd\\((void|)\\);${ws}\}$nl$gdb_prompt $" {
!             pass "ptype dd (aCC)"
!         }
! 	-re "type = class D : public AD, public virtual V \{${ws}private:${ws}V \\*${vbptr}V;${ws}public:${ws}int d;((${ws}D & operator=\\(D const ?&\\);)|(${ws}D\\(int, D const ?&\\);)|(${ws}D\\(int\\);)|(${ws}static void s\\((void|)\\);)|(${ws}virtual int vg\\((void|)\\);)|(${ws}virtual int vd\\((void|)\\);)|(${ws}int fd\\((void|)\\);))*${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype dd (obsolescent gcc or gdb)"
! 	}
! 	-re ".*$gdb_prompt $" {
! 	    fail "ptype dd"
! 	}
! 	timeout {
! 	    fail "ptype dd (timeout)"
  	}
      }
  
!     send_gdb "ptype ppd\n"
!     gdb_expect {
! 	-re "type = class D : public AD, public virtual V \{${ws}private:${ws}V \\*${vbptr}V;${ws}public:${ws}int d;${ws}D & operator=\\(D const ?&\\);${ws}D\\(int, D const ?&\\);${ws}D\\(int\\);${ws}static void s\\((void|)\\);${ws}virtual int vg\\((void|)\\);${ws}virtual int vd\\((void|)\\);${ws}int fd\\((void|)\\);${ws}\} \[*\]+$nl$gdb_prompt $" {
! 	    pass "ptype ppd"
! 	}
! 	-re "type = class D : public AD, public virtual V \{${ws}public:${ws}int d;${ws}D & operator=\\(D const ?&\\);${ws}D\\((D const|const D) ?&\\);${ws}D\\((void|)\\);${ws}static void s\\((void|)\\);${ws}virtual int vg\\((void|)\\);${ws}virtual int vd\\((void|)\\);${ws}int fd\\((void|)\\);${ws}\} \[*\]+$nl$gdb_prompt $" {
! 	    pass "ptype ppd"
! 	}
!         -re "type = class D : public AD, public virtual V \{${ws}public:${ws}int d;${ws}static void s\\((void|)\\);${ws}virtual int vg\\((void|)\\);${ws}virtual int vd\\((void|)\\);${ws}int fd\\((void|)\\);${ws}\} \[*\]+$nl$gdb_prompt $" {
!             pass "ptype ppd (aCC)"
!         }
! 	-re "type = class D : public AD, public virtual V \{${ws}private:${ws}V \\*${vbptr}V;${ws}public:${ws}int d;((${ws}D & operator=\\(D const ?&\\);)|(${ws}D\\(int, D const ?&\\);)|(${ws}D\\(int\\);)|(${ws}static void s\\((void|)\\);)|(${ws}virtual int vg\\((void|)\\);)|(${ws}virtual int vd\\((void|)\\);)|(${ws}int fd\\((void|)\\);))*${ws}\} \[*\]+$nl$gdb_prompt $" {
! 	    pass "ptype ppd (obsolescent gcc or gdb)"
! 	}
! 	-re ".*$gdb_prompt $" {
! 	    fail "ptype ppd"
! 	}
! 	timeout {
! 	    fail "ptype ppd (timeout)"
  	}
      }
  
!     send_gdb "ptype pAd\n"
!     gdb_expect {
! 	-re "type = class AD \{${ws}public:${ws}AD & operator=\\(AD const ?&\\);${ws}AD\\((AD const|const AD) ?&\\);${ws}AD\\((void|)\\);${ws}virtual int vg\\((void|)\\);${ws}\} \[*\]+$nl$gdb_prompt $" {
! 	    pass "ptype pAd"
! 	}
! 	-re "type = class AD \{${ws}public:${ws}virtual int vg \\((void|)\\);${ws}\} \[*\]+$nl$gdb_prompt $" {
! 	    pass "ptype pAd (aCC)"
! 	}
! 	-re "type = class AD \{${ws}public:((${ws}AD & operator=\\(AD const ?&\\);)|(${ws}AD\\(AD const ?&\\);)|(${ws}AD\\((void|)\\);)|(${ws}virtual int vg\\((void|)\\);))*${ws}\} \[*\]+$nl$gdb_prompt $" {
! 	    pass "ptype pAd (obsolescent gcc or gdb)"
! 	}
! 	-re ".*$gdb_prompt $" {
! 	    fail "ptype pAd"
! 	}
! 	timeout {
! 	    fail "ptype pAd (timeout)"
  	}
      }
  
!     send_gdb "ptype a\n"
!     gdb_expect {
! 	-re "type = class A : public virtual V \{${ws}private:${ws}V \\*${vbptr}V;${ws}int a;${ws}public:${ws}A & operator=\\(A const ?&\\);${ws}A\\(int, A const ?&\\);${ws}A\\(int\\);${ws}virtual int f\\((void|)\\);${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype a"
! 	}
! 	-re "type = class A : public virtual V \{${ws}private:${ws}int a;${ws}public:${ws}A & operator=\\(A const ?&\\);${ws}A\\((A const|const A) ?&\\);${ws}A\\((void|)\\);${ws}virtual int f\\((void|)\\);${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype a"
! 	}
!         -re "type = class A : public virtual V \{${ws}private:${ws}int a;${ws}public:${ws}virtual int f\\((void|)\\);${ws}\}$nl$gdb_prompt $" {
!             pass "ptype a (aCC)"
!         }
! 	-re "type = class A : public virtual V \{${ws}private:${ws}V \\*${vbptr}V;${ws}int a;${ws}public:((${ws}A & operator=\\(A const ?&\\);)|(${ws}A\\(int, A const ?&\\);)|(${ws}A\\(int\\);)|(${ws}virtual int f\\((void|)\\);))*${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype a (obsolescent gcc or gdb)"
! 	}
! 	-re ".*$gdb_prompt $" {
! 	    fail "ptype a"
! 	}
! 	timeout {
! 	    fail "ptype a (timeout)"
  	}
      }
  
!     send_gdb "ptype b\n"
!     gdb_expect {
! 	-re "type = class B : public A \{${ws}private:${ws}int b;${ws}public:${ws}B & operator=\\(B const ?&\\);${ws}B\\(int, B const ?&\\);${ws}B\\(int\\);${ws}virtual int f\\((void|)\\);${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype b"
! 	}
! 	-re "type = class B : public A \{${ws}private:${ws}int b;${ws}public:${ws}B & operator=\\(B const ?&\\);${ws}B\\((B const|const B) ?&\\);${ws}B\\((void|)\\);${ws}virtual int f\\((void|)\\);${ws}\}$nl$gdb_prompt $" {
  	    pass "ptype b"
  	}
! 	-re "type = class B : public A \{${ws}private:${ws}int b;${ws}public:${ws}virtual int f \\((void|)\\);${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype b (aCC)"
! 	}
! 	-re "type = class B : public A \{${ws}private:${ws}int b;${ws}public:((${ws}B & operator=\\(B const ?&\\);)|(${ws}B\\(int, B const ?&\\);)|(${ws}B\\(int\\);)|(${ws}virtual int f\\((void|)\\);))*${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype b (obsolescent gcc or gdb)"
! 	}
! 	-re ".*$gdb_prompt $" {
! 	    fail "ptype b"
! 	}
! 	timeout {
! 	    fail "ptype b (timeout)"
  	}
      }
  
!     send_gdb "ptype c\n"
!     gdb_expect {
! 	-re "type = class C : public virtual V \{${ws}private:${ws}V \\*${vbptr}V;${ws}public:${ws}int c;${ws}C & operator=\\(C const ?&\\);${ws}C\\(int, C const ?&\\);${ws}C\\(int\\);${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype c"
  	}
! 	-re "type = class C : public virtual V \{${ws}public:${ws}int c;${ws}C & operator=\\(C const ?&\\);${ws}C\\((C const|const C) ?&\\);${ws}C\\((void|)\\);${ws}\}$nl$gdb_prompt $" {
  	    pass "ptype c"
  	}
-         -re "type = class C : public virtual V \{${ws}public:${ws}int c;${ws}\}$nl$gdb_prompt $" {
-             pass "ptype c (aCC)"
-         }
- 	-re "type = class C : public virtual V \{${ws}private:${ws}V \\*${vbptr}V;${ws}public:${ws}int c;((${ws}C & operator=\\(C const ?&\\);)|(${ws}C\\(int, C const ?&\\);)|(${ws}C\\(int\\);))*${ws}\}$nl$gdb_prompt $" {
- 	    pass "ptype c (obsolescent gcc or gdb)"
- 	}
- 	-re ".*$gdb_prompt $" {
- 	    fail "ptype c"
- 	}
- 	timeout {
- 	    fail "ptype c (timeout)"
- 	}
      }
  
!     send_gdb "ptype d\n"
!     gdb_expect {
! 	-re "type = class D : public AD, public virtual V \{${ws}private:${ws}V \\*${vbptr}V;${ws}public:${ws}int d;${ws}D & operator=\\(D const ?&\\);${ws}D\\(int, D const ?&\\);${ws}D\\(int\\);${ws}static void s\\((void|)\\);${ws}virtual int vg\\((void|)\\);${ws}virtual int vd\\((void|)\\);${ws}int fd\\((void|)\\);${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype d"
! 	}
! 	-re "type = class D : public AD, public virtual V \{${ws}public:${ws}int d;${ws}D & operator=\\(D const ?&\\);${ws}D\\((D const|const D) ?&\\);${ws}D\\((void|)\\);${ws}static void s\\((void|)\\);${ws}virtual int vg\\((void|)\\);${ws}virtual int vd\\((void|)\\);${ws}int fd\\((void|)\\);${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype d"
! 	}
!         -re "type = class D : public AD, public virtual V \{${ws}public:${ws}int d;${ws}static void s\\((void|)\\);${ws}virtual int vg\\((void|)\\);${ws}virtual int vd\\((void|)\\);${ws}int fd\\((void|)\\);${ws}\}$nl$gdb_prompt $" {
!             pass "ptype d (aCC)"
!         }
! 	-re "type = class D : public AD, public virtual V \{${ws}private:${ws}V \\*${vbptr}V;${ws}public:${ws}int d;((${ws}D & operator=\\(D const ?&\\);)|(${ws}D\\(int, D const ?&\\);)|(${ws}D\\(int\\);)|(${ws}static void s\\((void|)\\);)|(${ws}virtual int vg\\((void|)\\);)|(${ws}virtual int vd\\((void|)\\);)|(${ws}int fd\\((void|)\\);))*${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype d (obsolescent gcc or gdb)"
! 	}
! 	-re ".*$gdb_prompt $" {
! 	    fail "ptype d"
! 	}
! 	timeout {
! 	    fail "ptype d (timeout)"
  	}
      }
  
!     send_gdb "ptype e\n"
!     gdb_expect {
! 	-re "type = class E : public B, public virtual V, public D, public C \{${ws}public:${ws}int e;${ws}E & operator=\\(E const ?&\\);${ws}E\\(int, E const ?&\\);${ws}E\\(int\\);${ws}virtual int f\\((void|)\\);${ws}virtual int vg\\((void|)\\);${ws}virtual int vv\\((void|)\\);${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype e"
! 	}
! 	-re "type = class E : public B, public virtual V, public D, public C \{${ws}public:${ws}int e;${ws}E & operator=\\(E const ?&\\);${ws}E\\((E const|const E) ?&\\);${ws}E\\((void|)\\);${ws}virtual int f\\((void|)\\);${ws}virtual int vg\\((void|)\\);${ws}virtual int vv\\((void|)\\);${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype e"
! 	}
! 	-re "type = class E : public B, public virtual V, public D, public C \{${ws}public:${ws}int e;${ws}virtual int f \\((void|)\\);${ws}virtual int vg \\((void|)\\);${ws}virtual int vv \\((void|)\\);${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype e (aCC)"
! 	}
! 	-re "type = class E : public B, public virtual V, public D, public C \{${ws}public:${ws}int e;((${ws}E & operator=\\(E const ?&\\);)|(${ws}E\\(int, E const ?&\\);)|(${ws}E\\(int\\);)|(${ws}virtual int f\\((void|)\\);)|(${ws}virtual int vg\\((void|)\\);)|(${ws}virtual int vv\\((void|)\\);))*${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype e (obsolescent gcc or gdb)"
! 	}
! 	-re ".*$gdb_prompt $" {
! 	    fail "ptype e"
! 	}
! 	timeout {
! 	    fail "ptype e (timeout)"
  	}
      }
  
!     send_gdb "ptype v\n"
!     gdb_expect {
! 	-re "type = class V : public VA, public VB \{${ws}public:${ws}int w;${ws}V & operator=\\(V const ?&\\);${ws}V\\((V const|const V) ?&\\);${ws}V\\((void|)\\);${ws}int f\\((void|)\\);${ws}virtual int vv\\((void|)\\);${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype v"
! 	}
! 	-re "type = class V : public VA, public VB \{${ws}public:${ws}int w;${ws}int f \\((void|)\\);${ws}virtual int vv \\((void|)\\);${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype v (aCC)"
! 	}
! 	-re "type = class V : public VA, public VB \{${ws}public:${ws}int w;((${ws}V & operator=\\(V const ?&\\);)|(${ws}V\\(V const ?&\\);)|(${ws}V\\((void|)\\);)|(${ws}int f\\((void|)\\);)|(${ws}virtual int vv\\((void|)\\);))*${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype v (obsolescent gcc or gdb)"
! 	}
! 	-re ".*$gdb_prompt $" {
! 	    fail "ptype v"
! 	}
! 	timeout {
! 	    fail "ptype v (timeout)"
  	}
      }
  
!     send_gdb "ptype vb\n"
!     gdb_expect {
! 	-re "type = class VB \{${ws}public:${ws}int vb;${ws}VB & operator=\\(VB const ?&\\);${ws}VB\\((VB const|const VB) ?&\\);${ws}VB\\((void|)\\);${ws}int fvb\\((void|)\\);${ws}virtual int vvb\\((void|)\\);${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype vb"
! 	}
! 	-re "type = class VB \{${ws}public:${ws}int vb;${ws}int fvb \\((void|)\\);${ws}virtual int vvb \\((void|)\\);${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype vb (aCC)"
! 	}
! 	-re "type = class VB \{${ws}public:${ws}int vb;((${ws}VB & operator=\\(VB const ?&\\);)|(${ws}VB\\(VB const ?&\\);)|(${ws}VB\\((void|)\\);)|(${ws}int fvb\\((void|)\\);)|(${ws}virtual int vvb\\((void|)\\);))*${ws}\}$nl$gdb_prompt $" {
! 	    pass "ptype vb (obsolescent gcc or gdb)"
! 	}
! 	-re ".*$gdb_prompt $" {
! 	    fail "ptype vb"
! 	}
! 	timeout {
! 	    fail "ptype vb (timeout)"
  	}
      }
  
!     send_gdb "ptype pAa\n"
!     gdb_expect {
! 	-re "type = class A : public virtual V \{${ws}private:${ws}V \\*${vbptr}V;${ws}int a;${ws}public:${ws}A & operator=\\(A const ?&\\);${ws}A\\(int, A const ?&\\);${ws}A\\(int\\);${ws}virtual int f\\((void|)\\);${ws}\} \[*\]+$nl$gdb_prompt $" {
! 	    pass "ptype pAa"
! 	}
! 	-re "type = class A : public virtual V \{${ws}private:${ws}int a;${ws}public:${ws}A & operator=\\(A const ?&\\);${ws}A\\((A const|const A) ?&\\);${ws}A\\((void|)\\);${ws}virtual int f\\((void|)\\);${ws}\} \[*\]+$nl$gdb_prompt $" {
! 	    pass "ptype pAa"
! 	}
!         -re "type = class A : public virtual V \{${ws}private:${ws}int a;${ws}public:${ws}virtual int f\\((void|)\\);${ws}\} \[*\]+$nl$gdb_prompt $" {
!             pass "ptype pAa (aCC)"
!         }
! 	-re "type = class A : public virtual V \{${ws}private:${ws}V \\*${vbptr}V;${ws}int a;${ws}public:((${ws}A & operator=\\(A const ?&\\);)|(${ws}A\\(int, A const ?&\\);)|(${ws}A\\(int\\);)|(${ws}virtual int f\\((void|)\\);))*${ws}\} \[*\]+$nl$gdb_prompt $" {
! 	    pass "ptype pAa (obsolescent gcc or gdb)"
! 	}
! 	-re ".*$gdb_prompt $" {
! 	    fail "ptype pAa"
! 	}
! 	timeout {
! 	    fail "ptype pAa (timeout)"
  	}
      }
  
!     send_gdb "ptype pAe\n"
!     gdb_expect {
! 	-re "type = class A : public virtual V \{${ws}private:${ws}V \\*${vbptr}V;${ws}int a;${ws}public:${ws}A & operator=\\(A const ?&\\);${ws}A\\(int, A const ?&\\);${ws}A\\(int\\);${ws}virtual int f\\((void|)\\);${ws}\} \[*\]+$nl$gdb_prompt $" {
! 	    pass "ptype pAe"
! 	}
! 	-re "type = class A : public virtual V \{${ws}private:${ws}int a;${ws}public:${ws}A & operator=\\(A const ?&\\);${ws}A\\((A const|const A) ?&\\);${ws}A\\((void|)\\);${ws}virtual int f\\((void|)\\);${ws}\} \[*\]+$nl$gdb_prompt $" {
! 	    pass "ptype pAe"
! 	}
!         -re "type = class A : public virtual V \{${ws}private:${ws}int a;${ws}public:${ws}virtual int f\\((void|)\\);${ws}\} \[*\]+$nl$gdb_prompt $" {
!             pass "ptype pAe (aCC)"
! 	}
! 	-re "type = class A : public virtual V \{${ws}private:${ws}V \\*${vbptr}V;${ws}int a;${ws}public:((${ws}A & operator=\\(A const ?&\\);)|(${ws}A\\(int, A const ?&\\);)|(${ws}A\\(int\\);)|(${ws}virtual int f\\((void|)\\);))*${ws}\} \[*\]+$nl$gdb_prompt $" {
! 	    pass "ptype pAe (obsolescent gcc or gdb)"
! 	}
! 	-re ".*$gdb_prompt $" {
! 	    fail "ptype pAe"
! 	}
! 	timeout {
! 	    fail "ptype pAe (timeout)"
  	}
      }
  
!     send_gdb "ptype pBe\n"
!     gdb_expect {
! 	-re "type = class B : public A \{${ws}private:${ws}int b;${ws}public:${ws}B & operator=\\(B const ?&\\);${ws}B\\(int, B const ?&\\);${ws}B\\(int\\);${ws}virtual int f\\((void|)\\);${ws}\} \[*\]+$nl$gdb_prompt $" {
! 	    pass "ptype pBe"
! 	}
! 	-re "type = class B : public A \{${ws}private:${ws}int b;${ws}public:${ws}B & operator=\\(B const ?&\\);${ws}B\\((B const|const B) ?&\\);${ws}B\\((void|)\\);${ws}virtual int f\\((void|)\\);${ws}\} \[*\]+$nl$gdb_prompt $" {
! 	    pass "ptype pBe"
! 	}
! 	-re "type = class B : public A \{${ws}private:${ws}int b;${ws}public:${ws}virtual int f \\((void|)\\);${ws}\} \[*\]+$nl$gdb_prompt $" {
! 	    pass "ptype pBe (aCC)"
! 	}
! 	-re "type = class B : public A \{${ws}private:${ws}int b;${ws}public:((${ws}B & operator=\\(B const ?&\\);)|(${ws}B\\(int, B const ?&\\);)|(${ws}B\\(int\\);)|(${ws}virtual int f\\((void|)\\);))*${ws}\} \[*\]+$nl$gdb_prompt $" {
! 	    pass "ptype pBe (obsolescent gcc or gdb)"
! 	}
! 	-re ".*$gdb_prompt $" {
! 	    fail "ptype pBe"
! 	}
! 	timeout {
! 	    fail "ptype pBe (timeout)"
  	}
      }
  
!     send_gdb "ptype pDd\n"
!     gdb_expect {
! 	-re "type = class D : public AD, public virtual V \{${ws}private:${ws}V \\*${vbptr}V;${ws}public:${ws}int d;${ws}D & operator=\\(D const ?&\\);${ws}D\\(int, D const ?&\\);${ws}D\\(int\\);${ws}static void s\\((void|)\\);${ws}virtual int vg\\((void|)\\);${ws}virtual int vd\\((void|)\\);${ws}int fd\\((void|)\\);${ws}\} \[*\]+$nl$gdb_prompt $" {
! 	    pass "ptype pDd"
! 	}
! 	-re "type = class D : public AD, public virtual V \{${ws}public:${ws}int d;${ws}D & operator=\\(D const ?&\\);${ws}D\\((D const|const D) ?&\\);${ws}D\\((void|)\\);${ws}static void s\\((void|)\\);${ws}virtual int vg\\((void|)\\);${ws}virtual int vd\\((void|)\\);${ws}int fd\\((void|)\\);${ws}\} \[*\]+$nl$gdb_prompt $" {
  	    pass "ptype pDd"
  	}
-         -re "type = class D : public AD, public virtual V \{${ws}public:${ws}int d;${ws}static void s\\((void|)\\);${ws}virtual int vg\\((void|)\\);${ws}virtual int vd\\((void|)\\);${ws}int fd\\((void|)\\);${ws}\} \[*\]+$nl$gdb_prompt $" {
-             pass "ptype pDd (aCC)"
-         }
- 	-re "type = class D : public AD, public virtual V \{${ws}private:${ws}V \\*${vbptr}V;${ws}public:${ws}int d;((${ws}D & operator=\\(D const ?&\\);)|(${ws}D\\(int, D const ?&\\);)|(${ws}D\\(int\\);)|(${ws}static void s\\((void|)\\);)|(${ws}virtual int vg\\((void|)\\);)|(${ws}virtual int vd\\((void|)\\);)|(${ws}int fd\\((void|)\\);))*${ws}\} \[*\]+$nl$gdb_prompt $" {
- 	    pass "ptype pDd (obsolescent gcc or gdb)"
- 	}
- 	-re ".*$gdb_prompt $" {
- 	    fail "ptype pDd"
- 	}
- 	timeout {
- 	    fail "ptype pDd (timeout)"
- 	}
      }
  
!     send_gdb "ptype pDe\n"
!     gdb_expect {
! 	-re "type = class D : public AD, public virtual V \{${ws}private:${ws}V \\*${vbptr}V;${ws}public:${ws}int d;${ws}D & operator=\\(D const ?&\\);${ws}D\\(int, D const ?&\\);${ws}D\\(int\\);${ws}static void s\\((void|)\\);${ws}virtual int vg\\((void|)\\);${ws}virtual int vd\\((void|)\\);${ws}int fd\\((void|)\\);${ws}\} \[*\]+$nl$gdb_prompt $" {
! 	    pass "ptype pDe"
! 	}
! 	-re "type = class D : public AD, public virtual V \{${ws}public:${ws}int d;${ws}D & operator=\\(D const ?&\\);${ws}D\\((D const|const D) ?&\\);${ws}D\\((void|)\\);${ws}static void s\\((void|)\\);${ws}virtual int vg\\((void|)\\);${ws}virtual int vd\\((void|)\\);${ws}int fd\\((void|)\\);${ws}\} \[*\]+$nl$gdb_prompt $" {
  	    pass "ptype pDe"
  	}
-         -re "type = class D : public AD, public virtual V \{${ws}public:${ws}int d;${ws}static void s\\((void|)\\);${ws}virtual int vg\\((void|)\\);${ws}virtual int vd\\((void|)\\);${ws}int fd\\((void|)\\);${ws}\} \[*\]+$nl$gdb_prompt $" {
-             pass "ptype pDe (aCC)"
-         }
- 	-re "type = class D : public AD, public virtual V \{${ws}private:${ws}V \\*${vbptr}V;${ws}public:${ws}int d;((${ws}D & operator=\\(D const ?&\\);)|(${ws}D\\(int, D const ?&\\);)|(${ws}D\\(int\\);)|(${ws}static void s\\((void|)\\);)|(${ws}virtual int vg\\((void|)\\);)|(${ws}virtual int vd\\((void|)\\);)|(${ws}int fd\\((void|)\\);))*${ws}\} \[*\]+$nl$gdb_prompt $" {
- 	    pass "ptype pDe (obsolescent gcc or gdb)"
- 	}
- 	-re ".*$gdb_prompt $" {
- 	    fail "ptype pDe"
- 	}
- 	timeout {
- 	    fail "ptype pDe (timeout)"
- 	}
      }
  
!     send_gdb "ptype pVa\n"
!     gdb_expect {
! 	-re "type = class V : public VA, public VB \{${ws}public:${ws}int w;${ws}V & operator=\\(V const ?&\\);${ws}V\\((V const|const V) ?&\\);${ws}V\\((void|)\\);${ws}int f\\((void|)\\);${ws}virtual int vv\\((void|)\\);${ws}\} \[*\]+$nl$gdb_prompt $" {
! 	    pass "ptype pVa"
! 	}
! 	-re "type = class V : public VA, public VB \{${ws}public:${ws}int w;${ws}int f \\((void|)\\);${ws}virtual int vv \\((void|)\\);${ws}\} \[*\]+$nl$gdb_prompt $" {
! 	    pass "ptype pVa (aCC)"
! 	}
! 	-re "type = class V : public VA, public VB \{${ws}public:${ws}int w;((${ws}V & operator=\\(V const ?&\\);)|(${ws}V\\(V const ?&\\);)|(${ws}V\\((void|)\\);)|(${ws}int f\\((void|)\\);)|(${ws}virtual int vv\\((void|)\\);))*${ws}\} \[*\]+$nl$gdb_prompt $" {
! 	    pass "ptype pVa (obsolescent gcc or gdb)"
! 	}
! 	-re ".*$gdb_prompt $" {
! 	    fail "ptype pVa"
! 	}
! 	timeout {
! 	    fail "ptype pVa (timeout)"
! 	}
!     }
  
!     send_gdb "ptype pVv\n"
!     gdb_expect {
! 	-re "type = class V : public VA, public VB \{${ws}public:${ws}int w;${ws}V & operator=\\(V const ?&\\);${ws}V\\((V const|const V) ?&\\);${ws}V\\((void|)\\);${ws}int f\\((void|)\\);${ws}virtual int vv\\((void|)\\);${ws}\} \[*\]+$nl$gdb_prompt $" {
! 	    pass "ptype pVv"
! 	}
! 	-re "type = class V : public VA, public VB \{${ws}public:${ws}int w;${ws}int f \\((void|)\\);${ws}virtual int vv \\((void|)\\);${ws}\} \[*\]+$nl$gdb_prompt $" {
! 	    pass "ptype pVv (aCC)"
! 	}
! 	-re "type = class V : public VA, public VB \{${ws}public:${ws}int w;((${ws}V & operator=\\(V const ?&\\);)|(${ws}V\\(V const ?&\\);)|(${ws}V\\((void|)\\);)|(${ws}int f\\((void|)\\);)|(${ws}virtual int vv\\((void|)\\);))*${ws}\} \[*\]+$nl$gdb_prompt $" {
! 	    pass "ptype pVv (obsolescent gcc or gdb)"
! 	}
! 	-re ".*$gdb_prompt $" {
! 	    fail "ptype pVv"
! 	}
! 	timeout {
! 	    fail "ptype pVv (timeout)"
! 	}
!     }
  
!     send_gdb "ptype pVe\n"
!     gdb_expect {
! 	-re "type = class V : public VA, public VB \{${ws}public:${ws}int w;${ws}V & operator=\\(V const ?&\\);${ws}V\\((V const|const V) ?&\\);${ws}V\\((void|)\\);${ws}int f\\((void|)\\);${ws}virtual int vv\\((void|)\\);${ws}\} \[*\]+$nl$gdb_prompt $" {
! 	    pass "ptype pVe"
! 	}
! 	-re "type = class V : public VA, public VB \{${ws}public:${ws}int w;${ws}int f \\((void|)\\);${ws}virtual int vv \\((void|)\\);${ws}\} \[*\]+$nl$gdb_prompt $" {
! 	    pass "ptype pVe (aCC)"
! 	}
! 	-re "type = class V : public VA, public VB \{${ws}public:${ws}int w;((${ws}V & operator=\\(V const ?&\\);)|(${ws}V\\(V const ?&\\);)|(${ws}V\\((void|)\\);)|(${ws}int f\\((void|)\\);)|(${ws}virtual int vv\\((void|)\\);))*${ws}\} \[*\]+$nl$gdb_prompt $" {
! 	    pass "ptype pVe (obsolescent gcc or gdb)"
! 	}
! 	-re ".*$gdb_prompt $" {
! 	    fail "ptype pVe"
! 	}
! 	timeout {
! 	    fail "ptype pVe (timeout)"
  	}
      }
  
!     send_gdb "ptype pVd\n"
!     gdb_expect {
! 	-re "type = class V : public VA, public VB \{${ws}public:${ws}int w;${ws}V & operator=\\(V const ?&\\);${ws}V\\((V const|const V) ?&\\);${ws}V\\((void|)\\);${ws}int f\\((void|)\\);${ws}virtual int vv\\((void|)\\);${ws}\} \[*\]+$nl$gdb_prompt $" {
! 	    pass "ptype pVd"
! 	}
! 	-re "type = class V : public VA, public VB \{${ws}public:${ws}int w;${ws}int f \\((void|)\\);${ws}virtual int vv \\((void|)\\);${ws}\} \[*\]+$nl$gdb_prompt $" {
! 	    pass "ptype pVd (aCC)"
! 	}
! 	-re "type = class V : public VA, public VB \{${ws}public:${ws}int w;((${ws}V & operator=\\(V const ?&\\);)|(${ws}V\\(V const ?&\\);)|(${ws}V\\((void|)\\);)|(${ws}int f\\((void|)\\);)|(${ws}virtual int vv\\((void|)\\);))*${ws}\} \[*\]+$nl$gdb_prompt $" {
! 	    pass "ptype pVd (obsolescent gcc or gdb)"
! 	}
! 	-re ".*$gdb_prompt $" {
! 	    fail "ptype pVd"
! 	}
! 	timeout {
! 	    fail "ptype pVd (timeout)"
! 	}
!     }
  
!     send_gdb "ptype pADe\n"
!     gdb_expect {
! 	-re "type = class AD \{${ws}public:${ws}AD & operator=\\(AD const ?&\\);${ws}AD\\((AD const|const AD) ?&\\);${ws}AD\\((void|)\\);${ws}virtual int vg\\((void|)\\);${ws}\} \[*\]+$nl$gdb_prompt $" {
! 	    pass "ptype pADe"
! 	}
! 	-re "type = class AD \{${ws}public:${ws}virtual int vg \\((void|)\\);${ws}\} \[*\]+$nl$gdb_prompt $" {
! 	    pass "ptype pADe (aCC)"
! 	}
! 	-re "type = class AD \{${ws}public:((${ws}AD & operator=\\(AD const ?&\\);)|(${ws}AD\\(AD const ?&\\);)|(${ws}AD\\((void|)\\);)|(${ws}virtual int vg\\((void|)\\);))*${ws}\} \[*\]+$nl$gdb_prompt $" {
! 	    pass "ptype pADe (obsolescent gcc or gdb)"
! 	}
! 	-re ".*$gdb_prompt $" {
! 	    fail "ptype pADe"
! 	}
! 	timeout {
! 	    fail "ptype pADe (timeout)"
  	}
      }
  
!     send_gdb "ptype pEe\n"
!     gdb_expect {
! 	-re "type = class E : public B, public virtual V, public D, public C \{${ws}public:${ws}int e;${ws}E & operator=\\(E const ?&\\);${ws}E\\(int, E const ?&\\);${ws}E\\(int\\);${ws}virtual int f\\((void|)\\);${ws}virtual int vg\\((void|)\\);${ws}virtual int vv\\((void|)\\);${ws}\} \[*\]+$nl$gdb_prompt $" {
! 	    pass "ptype pEe"
! 	}
! 	-re "type = class E : public B, public virtual V, public D, public C \{${ws}public:${ws}int e;${ws}E & operator=\\(E const ?&\\);${ws}E\\((E const|const E) ?&\\);${ws}E\\((void|)\\);${ws}virtual int f\\((void|)\\);${ws}virtual int vg\\((void|)\\);${ws}virtual int vv\\((void|)\\);${ws}\} \[*\]+$nl$gdb_prompt $" {
! 	    pass "ptype pEe"
! 	}
! 	-re "type = class E : public B, public virtual V, public D, public C \{${ws}public:${ws}int e;${ws}virtual int f \\((void|)\\);${ws}virtual int vg \\((void|)\\);${ws}virtual int vv \\((void|)\\);${ws}\} \[*\]+$nl$gdb_prompt $" {
! 	    pass "ptype pEe (aCC)"
! 	}
! 	-re "type = class E : public B, public virtual V, public D, public C \{${ws}public:${ws}int e;((${ws}E & operator=\\(E const ?&\\);)|(${ws}E\\(int, E const ?&\\);)|(${ws}E\\(int\\);)|(${ws}virtual int f\\((void|)\\);)|(${ws}virtual int vg\\((void|)\\);)|(${ws}virtual int vv\\((void|)\\);))*${ws}\} \[*\]+$nl$gdb_prompt $" {
! 	    pass "ptype pEe (obsolescent gcc or gdb)"
! 	}
! 	-re ".*$gdb_prompt $" {
! 	    fail "ptype pEe"
! 	}
! 	timeout {
! 	    fail "ptype pEe (timeout)"
! 	}
!     }
  
!     send_gdb "ptype pVB\n"
!     gdb_expect {
! 	-re "type = class VB \{${ws}public:${ws}int vb;${ws}VB & operator=\\(VB const ?&\\);${ws}VB\\((VB const|const VB) ?&\\);${ws}VB\\((void|)\\);${ws}int fvb\\((void|)\\);${ws}virtual int vvb\\((void|)\\);${ws}\} \[*\]+$nl$gdb_prompt $" {
! 	    pass "ptype pVB"
! 	}
! 	-re "type = class VB \{${ws}public:${ws}int vb;${ws}int fvb \\((void|)\\);${ws}virtual int vvb \\((void|)\\);${ws}\} \[*\]+$nl$gdb_prompt $" {
! 	    pass "ptype pVB (aCC)"
! 	}
! 	-re "type = class VB \{${ws}public:${ws}int vb;((${ws}VB & operator=\\(VB const ?&\\);)|(${ws}VB\\(VB const ?&\\);)|(${ws}VB\\((void|)\\);)|(${ws}int fvb\\((void|)\\);)|(${ws}virtual int vvb\\((void|)\\);))*${ws}\} \[*\]+$nl$gdb_prompt $" {
! 	    pass "ptype pVB (obsolescent gcc or gdb)"
! 	}
! 	-re ".*$gdb_prompt $" {
! 	    fail "ptype pVB"
! 	}
! 	timeout {
! 	    fail "ptype pVB (timeout)"
  	}
      }
  }
  
! #
! #  Test calling of virtual functions.
! #
  
  proc test_virtual_calls {} {
      global gdb_prompt
-     global GDB
      global nl
  
      if [target_info exists gdb,cannot_call_functions] {
--- 34,427 ----
  set srcfile ${testfile}.cc
  set binfile ${objdir}/${subdir}/${testfile}
  
  if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {c++ debug}] != "" } {
       gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
  }
  
! # Test ptype of class objects.
! #
! # Different C++ compilers produce different output.  I build up regular
! # expressions piece by piece to accommodate all the compilers that I
! # have seen: gcc 2.95.3, gcc 3.3.2 (ABI 1), gcc 3.4 prerelease (ABI 2);
! # and all the debug formats I have seen: dwarf-2 and stabs+.
! #
! # A complicated class declaration looks like this:
! #
! #   class A : public virtual V {	// re_class
! #     private:
! #       V * _vb$V;			// re_vbptr
! #       int a;				// re_fields
! #
! #     public:
! #       A & operator=(A const &);	// re_synth_gcc_2
! #       A(int, A const &);		// ...
! #       A(int);				// ...
! #       virtual int f(void);		// re_methods
! #   }
! #
! # RE_CLASS matches the class declaration.  C++ allows multiple ways of
! # expressing this.
  #
! #   struct ... { private: ... };
! #   class ... { private: ... };
! #   class ... { ... };
  #
+ # RE_VBPTR matches the virtual base declarations.  gcc 2.95.3 emits
+ # these, but gcc 3.X.Y does not.  The name depends on the debug format.
+ #
+ # RE_FIELDS matches the data fields of the class.
+ # RE_METHODS matches the methods explicitly declared for the class.
+ #
+ # RE_SYNTH_GCC_2 and RE_SYNTH_GCC_3 match the optional synthetic methods
+ # of the class.  gcc -gstabs+ emits these methods, and gcc -gdwarf-2
+ # does not.
+ #
+ # RE_ALL_METHODS combines RE_METHODS and the optional synthetic methods.
+ # Up to gcc 3.3.X, gcc defaults to gcc ABI 1, with synthetic methods at
+ # the beginning.  Starting with gcc 3.4.X, gcc defaults to gcc ABI 2,
+ # with synthetic methods at the end.
+ #
+ # So the possible choices for RE_ALL_METHODS are:
+ #
+ #   RE_METHODS			// any gcc with dwarf-2
+ #   RE_SYNTH_GCC_2|RE_METHODS	// gcc 2.95.3, stabs+
+ #   RE_SYNTH_GCC_3|RE_METHODS	// gcc 3.3.2, stabs+
+ #   RE_METHODS|RE_SYNTH_GCC_3	// gcc 3.4.0, stabs+
+ #
+ # When I get HP-UX aCC, I hope that I can just add RE_SYNTH_ACC_FOO
+ # and enlarge RE_ALL_METHODS.
+ #
+ # Yet another twist: with gcc v2, ctor and dtor methods have a hidden
+ # argument in front, the "in-charge" flag.  With gcc v3, there is no
+ # hidden argument; instead, there are multiple object functions for
+ # each ctor and dtor.
+ #
+ # I use gdb_test_multiple with only one arm.  I could use gdb_test,
+ # but gdb_test_multiple makes it easier to add KFAIL arms as needed.
+ #
+ # -- chastain 2003-12-31
  
  proc test_ptype_of_classes {} {
      global gdb_prompt
      global ws
      global nl
  
!     # class VA
! 
!     set re_class	"((struct|class) VA \{${ws}public:|struct VA \{)"
!     set re_fields	"int va;"
!     set re_synth_gcc_23	"VA & operator=\\(VA const ?&\\);${ws}VA\\(VA const ?&\\);${ws}VA\\((void|)\\);"
!     set re_all_methods	"(|$re_synth_gcc_23)"
! 
!     gdb_test_multiple "ptype VA" "ptype VA" {
! 	-re "type = $re_class${ws}$re_fields${ws}(public:${ws}|)$re_all_methods$nl\}$nl$gdb_prompt $" {
  	    pass "ptype VA"
  	}
      }
  
!     # class VB
! 
!     set re_class	"((struct|class) VB \{${ws}public:|struct VB \{)"
!     set re_fields	"int vb;"
!     set re_methods	"int fvb\\((void|)\\);${ws}virtual int vvb\\((void|)\\);"
!     set re_synth_gcc_23	"VB & operator=\\(VB const ?&\\);${ws}VB\\(VB const ?&\\);${ws}VB\\((void|)\\);"
!     set re_all_methods	"($re_methods|$re_methods${ws}$re_synth_gcc_23|$re_synth_gcc_23${ws}$re_methods)"
! 
!     gdb_test_multiple "ptype VB" "ptype VB" {
! 	-re "type = $re_class${ws}$re_fields${ws}(public:${ws}|)$re_all_methods$nl\}$nl$gdb_prompt $" {
  	    pass "ptype VB"
  	}
!     }
! 
!     # An instance of VB
! 
!     gdb_test_multiple "ptype vb" "ptype vb" {
! 	-re "type = $re_class${ws}$re_fields${ws}(public:${ws}|)$re_all_methods$nl\}$nl$gdb_prompt $" {
! 	    pass "ptype vb"
  	}
!     }
! 
!     # An instance of VB *
! 
!     gdb_test_multiple "ptype pVB" "ptype pVB" {
! 	-re "type = $re_class${ws}$re_fields${ws}(public:${ws}|)$re_all_methods$nl\} \\*$nl$gdb_prompt $" {
! 	    pass "ptype pVB"
  	}
      }
  
!     # class V
! 
!     set re_class	"class V : public VA, public VB \{${ws}public:"
!     set re_fields	"int w;"
!     set re_methods	"int f\\((void|)\\);${ws}virtual int vv\\((void|)\\);"
!     set re_synth_gcc_23	"V & operator=\\(V const ?&\\);${ws}V\\(V const ?&\\);${ws}V\\((void|)\\);"
!     set re_all_methods	"($re_methods|$re_methods${ws}$re_synth_gcc_23|$re_synth_gcc_23${ws}$re_methods)"
! 
!     gdb_test_multiple "ptype V" "ptype V" {
! 	-re "type = $re_class${ws}$re_fields${ws}(public:${ws}|)$re_all_methods$nl\}$nl$gdb_prompt $" {
  	    pass "ptype V"
  	}
      }
  
!     # An instance of V
  
!     gdb_test_multiple "ptype v" "ptype v" {
! 	-re "type = $re_class${ws}$re_fields${ws}(public:${ws}|)$re_all_methods$nl\}$nl$gdb_prompt $" {
! 	    pass "ptype v"
  	}
      }
  
!     # An instance of V *
! 
!     gdb_test_multiple "ptype pVa" "ptype pVa" {
! 	-re "type = $re_class${ws}$re_fields${ws}(public:${ws}|)$re_all_methods$nl\} \\*$nl$gdb_prompt $" {
! 	    pass "ptype pVa"
  	}
      }
  
!     # An instance of V *
! 
!     gdb_test_multiple "ptype pVv" "ptype pVv" {
! 	-re "type = $re_class${ws}$re_fields${ws}(public:${ws}|)$re_all_methods$nl\} \\*$nl$gdb_prompt $" {
! 	    pass "ptype pVv"
  	}
      }
  
!     # An instance of V *
! 
!     gdb_test_multiple "ptype pVe" "ptype pVe" {
! 	-re "type = $re_class${ws}$re_fields${ws}(public:${ws}|)$re_all_methods$nl\} \\*$nl$gdb_prompt $" {
! 	    pass "ptype pVe"
  	}
      }
  
!     # An instance of V *
! 
!     gdb_test_multiple "ptype pVd" "ptype pVd" {
! 	-re "type = $re_class${ws}$re_fields${ws}(public:${ws}|)$re_all_methods$nl\} \\*$nl$gdb_prompt $" {
! 	    pass "ptype pVd"
  	}
      }
  
!     # class A
! 
!     set re_class	"class A : public virtual V \{(${ws}private:|)"
!     set re_vbptr 	"V \\*(_vb.1V|_vb.V);"
!     set re_fields	"int a;"
!     set re_methods	"virtual int f\\((void|)\\);"
!     # gcc 2 adds an "in-charge" arg to the ctor.
!     set re_synth_gcc_2	"A & operator=\\(A const ?&\\);${ws}A\\(int, A const ?&\\);${ws}A\\(int\\);"
!     set re_synth_gcc_3	"A & operator=\\(A const ?&\\);${ws}A\\(A const ?&\\);${ws}A\\(\\);"
!     set re_all_methods	"($re_methods|$re_synth_gcc_2${ws}$re_methods|$re_synth_gcc_3${ws}$re_methods|$re_methods${ws}$re_synth_gcc_3)"
! 
!     gdb_test_multiple "ptype A" "ptype A" {
! 	-re "type = ${re_class}${ws}(${re_vbptr}${ws}|)${re_fields}${ws}public:${ws}${re_all_methods}$nl\}$nl$gdb_prompt $" {
! 	    pass "ptype A"
  	}
      }
  
!     # An instance of A
! 
!     gdb_test_multiple "ptype a" "ptype a" {
! 	-re "type = ${re_class}${ws}(${re_vbptr}${ws}|)${re_fields}${ws}public:${ws}${re_all_methods}$nl\}$nl$gdb_prompt $" {
! 	    pass "ptype a"
  	}
      }
  
!     # An instance of A *
! 
!     gdb_test_multiple "ptype pAa" "ptype pAa" {
! 	-re "type = ${re_class}${ws}(${re_vbptr}${ws}|)${re_fields}${ws}public:${ws}${re_all_methods}$nl\} \\*$nl$gdb_prompt $" {
! 	    pass "ptype pAa"
  	}
      }
  
!     # An instance of A *
! 
!     gdb_test_multiple "ptype pAe" "ptype pAe" {
! 	-re "type = ${re_class}${ws}(${re_vbptr}${ws}|)${re_fields}${ws}public:${ws}${re_all_methods}$nl\} \\*$nl$gdb_prompt $" {
! 	    pass "ptype pAe"
  	}
      }
  
!     # class B
! 
!     set re_class	"class B : public A \{(${ws}private:|)"
!     set re_vbptr	"V \\*(_vb.1V|_vb.V);"
!     set re_fields	"int b;"
!     set re_methods	"virtual int f\\((void|)\\);"
!     set re_synth_gcc_2	"B & operator=\\(B const ?&\\);${ws}B\\(int, B const ?&\\);${ws}B\\(int\\);"
!     set re_synth_gcc_3	"B & operator=\\(B const ?&\\);${ws}B\\(B const ?&\\);${ws}B\\(\\);"
!     set re_all_methods	"($re_methods|$re_synth_gcc_2${ws}$re_methods|$re_synth_gcc_3${ws}$re_methods|$re_methods${ws}$re_synth_gcc_3)"
! 
!     gdb_test_multiple "ptype B" "ptype B" {
! 	-re "type = ${re_class}${ws}(${re_vbptr}${ws}|)${re_fields}${ws}public:${ws}${re_all_methods}$nl\}$nl$gdb_prompt $" {
! 	    pass "ptype B"
  	}
      }
  
!     # An instance of B
! 
!     gdb_test_multiple "ptype b" "ptype b" {
! 	-re "type = ${re_class}${ws}(${re_vbptr}${ws}|)${re_fields}${ws}public:${ws}${re_all_methods}$nl\}$nl$gdb_prompt $" {
  	    pass "ptype b"
  	}
!     }
! 
!     # An instance of B *
! 
!     gdb_test_multiple "ptype pBe" "ptype pBe" {
! 	-re "type = ${re_class}${ws}(${re_vbptr}${ws}|)${re_fields}${ws}public:${ws}${re_all_methods}$nl\} \\*$nl$gdb_prompt $" {
! 	    pass "ptype pBe"
  	}
      }
  
!     # class C
! 
!     set re_class	"class C : public virtual V \{(${ws}private:|)"
!     set re_vbptr	"V \\*(_vb.1V|_vb.V);"
!     set re_fields	"int c;"
!     set re_synth_gcc_2	"C & operator=\\(C const ?&\\);${ws}C\\(int, C const ?&\\);${ws}C\\(int\\);"
!     set re_synth_gcc_3	"C & operator=\\(C const ?&\\);${ws}C\\(C const ?&\\);${ws}C\\(\\);"
!     set re_all_methods	"(|$re_synth_gcc_2|$re_synth_gcc_3)"
! 
!     gdb_test_multiple "ptype C" "ptype C" {
! 	-re "type = ${re_class}${ws}(${re_vbptr}${ws}|)public:${ws}${re_fields}${ws}(public:${ws}|)${re_all_methods}$nl\}$nl$gdb_prompt $" {
! 	    pass "ptype C"
  	}
!     }
! 
!     # An instance of C
! 
!     gdb_test_multiple "ptype c" "ptype c" {
! 	-re "type = ${re_class}${ws}(${re_vbptr}${ws}|)public:${ws}${re_fields}${ws}(public:${ws}|)${re_all_methods}$nl\}$nl$gdb_prompt $" {
  	    pass "ptype c"
  	}
      }
  
!     # class AD
! 
!     set re_class	"((struct|class) AD \{${ws}public:|struct AD \{)"
!     set re_methods	"virtual int vg\\((void|)\\);"
!     set re_synth_gcc_23	"AD & operator=\\(AD const ?&\\);${ws}AD\\(AD const ?&\\);${ws}AD\\((void|)\\);"
!     set re_all_methods	"($re_methods|$re_methods${ws}$re_synth_gcc_23|$re_synth_gcc_23${ws}$re_methods)"
! 
!     gdb_test_multiple "ptype AD" "ptype AD" {
! 	-re "type = $re_class${ws}$re_all_methods$nl\}$nl$gdb_prompt $" {
! 	    pass "ptype AD"
  	}
      }
  
!     # An instance of AD *
!     # TODO: this should be named pADd, not pAd.
! 
!     gdb_test_multiple "ptype pAd" "ptype pAd" {
! 	-re "type = $re_class${ws}$re_all_methods$nl\} \\*$nl$gdb_prompt $" {
! 	    pass "ptype pAd"
  	}
      }
  
!     # An instance of a AD *
! 
!     gdb_test_multiple "ptype pADe" "ptype pADe" {
! 	-re "type = $re_class${ws}$re_all_methods$nl\} \\*$nl$gdb_prompt $" {
! 	    pass "ptype pADe"
  	}
      }
  
!     # class D
! 
!     set re_class	"class D : public AD, public virtual V \{(${ws}private:|)"
!     set re_vbptr	"V \\*(_vb.1V|_vb.V);"
!     set re_fields	"int d;"
!     set re_methods	"static void s\\((void|)\\);${ws}virtual int vg\\((void|)\\);${ws}virtual int vd\\((void|)\\);${ws}int fd\\((void|)\\);"
!     set re_synth_gcc_2	"D & operator=\\(D const ?&\\);${ws}D\\(int, D const ?&\\);${ws}D\\(int\\);"
!     set re_synth_gcc_3	"D & operator=\\(D const ?&\\);${ws}D\\(D const ?&\\);${ws}D\\(\\);"
!     set re_all_methods	"($re_methods|$re_synth_gcc_2${ws}$re_methods|$re_synth_gcc_3${ws}$re_methods|$re_methods${ws}$re_synth_gcc_3)"
! 
!     gdb_test_multiple "ptype D" "ptype D" {
! 	-re "type = ${re_class}${ws}(${re_vbptr}${ws}|)public:${ws}${re_fields}${ws}${re_all_methods}$nl\}$nl$gdb_prompt $" {
! 	    pass "ptype D"
  	}
      }
  
!     # An instance of D
! 
!     gdb_test_multiple "ptype d" "ptype d" {
! 	-re "type = ${re_class}${ws}(${re_vbptr}${ws}|)public:${ws}${re_fields}${ws}${re_all_methods}$nl\}$nl$gdb_prompt $" {
! 	    pass "ptype d"
  	}
      }
  
!     # An instance of D
! 
!     gdb_test_multiple "ptype dd" "ptype dd" {
! 	-re "type = ${re_class}${ws}(${re_vbptr}${ws}|)public:${ws}${re_fields}${ws}${re_all_methods}$nl\}$nl$gdb_prompt $" {
! 	    pass "ptype dd"
  	}
      }
  
!     # An instance of D *
! 
!     gdb_test_multiple "ptype ppd" "ptype ppd" {
! 	-re "type = ${re_class}${ws}(${re_vbptr}${ws}|)public:${ws}${re_fields}${ws}${re_all_methods}$nl\} \\*$nl$gdb_prompt $" {
! 	    pass "ptype ppd"
  	}
      }
  
!     # An instance of D *
! 
!     gdb_test_multiple "ptype pDd" "ptype pDd" {
! 	-re "type = ${re_class}${ws}(${re_vbptr}${ws}|)public:${ws}${re_fields}${ws}${re_all_methods}$nl\} \\*$nl$gdb_prompt $" {
  	    pass "ptype pDd"
  	}
      }
  
!     # An instance of D *
! 
!     gdb_test_multiple "ptype pDe" "ptype pDe" {
! 	-re "type = ${re_class}${ws}(${re_vbptr}${ws}|)public:${ws}${re_fields}${ws}${re_all_methods}$nl\} \\*$nl$gdb_prompt $" {
  	    pass "ptype pDe"
  	}
      }
  
!     # class E
!     # TODO: E does not show a vbptr for V.  That seems strange.
  
!     set re_class	"class E : public B, public virtual V, public D, public C \{(${ws}private:|)"
!     set re_fields	"int e;"
!     set re_methods	"virtual int f\\((void|)\\);${ws}virtual int vg\\((void|)\\);${ws}virtual int vv\\((void|)\\);"
!     set re_synth_gcc_2	"E & operator=\\(E const ?&\\);${ws}E\\(int, E const ?&\\);${ws}E\\(int\\);"
!     set re_synth_gcc_3	"E & operator=\\(E const ?&\\);${ws}E\\(E const ?&\\);${ws}E\\(\\);"
!     set re_all_methods	"($re_methods|$re_synth_gcc_2${ws}$re_methods|$re_synth_gcc_3${ws}$re_methods|$re_methods${ws}$re_synth_gcc_3)"
  
!     gdb_test_multiple "ptype E" "ptype E" {
! 	-re "type = ${re_class}${ws}public:${ws}${re_fields}${ws}${re_all_methods}$nl\}$nl$gdb_prompt $" {
! 	    pass "ptype E"
  	}
      }
  
!     # An instance of E
  
!     gdb_test_multiple "ptype e" "ptype e" {
! 	-re "type = ${re_class}${ws}public:${ws}${re_fields}${ws}${re_all_methods}$nl\}$nl$gdb_prompt $" {
! 	    pass "ptype e"
  	}
      }
  
!     # An instance of E *
  
!     gdb_test_multiple "ptype pEe" "ptype pEe" {
! 	-re "type = ${re_class}${ws}public:${ws}${re_fields}${ws}${re_all_methods}$nl\} \\*$nl$gdb_prompt $" {
! 	    pass "ptype pEe"
  	}
      }
  }
  
! # Call virtual functions.
  
  proc test_virtual_calls {} {
      global gdb_prompt
      global nl
  
      if [target_info exists gdb,cannot_call_functions] {
*************** proc test_virtual_calls {} {
*** 741,886 ****
  	return 0
      }
  
!     send_gdb "print pAe->f()\n"
!     gdb_expect {
! 	-re ".* = 20$nl$gdb_prompt $" { pass "print pAe->f()" }
! 	-re "Cannot invoke functions on this machine.*$gdb_prompt $" {
! 	    fail "print pAe->f() (cannot invoke functions, skipping virtual calls)"
! 	    return 0
! 	}
! 	-re ".*Cannot access memory at address 0x8.*$gdb_prompt $" {
! 	    fail "print pAe->f() \
! (known failure with gcc cygnus-2.4.5-930417, skipping virtual calls)"
! 	    return 0
! 	}
!         -re "Cannot resolve .* to any overloaded instance.*$gdb_prompt $" {
! 	    setup_xfail hppa*-*-* CLLbs16899
!             fail "print pAe->f()"
! 	}
! 	-re ".*$gdb_prompt $" { fail "print pAe->f()" }
! 	timeout { fail "print pAe->f() (timeout)" }
! 	eof { fail "print pAe->f() ($GDB dumped core) (FIXME)" ; gdb_virtfunc_restart; return }
!     }
! 
!     send_gdb "print pAa->f()\n"
!     gdb_expect {
! 	-re ".* = 1$nl$gdb_prompt $" { pass "print pAa->f()" }
!         -re "Cannot resolve .* to any overloaded instance.*$gdb_prompt $" {
! 	    setup_xfail hppa*-*-*  CLLbs16899
! 	    fail "print pAa->f()"
! 	}
! 	-re ".*$gdb_prompt $" { fail "print pAa->f()" }
! 	timeout { fail "print pAa->f() (timeout)" }
! 	eof { fail "print pAa->f() ($GDB dumped core) (FIXME)" ; gdb_virtfunc_restart; return }
!     }
! 
!     send_gdb "print pDe->vg()\n"
!     gdb_expect {
! 	-re ".* = 202$nl$gdb_prompt $" { pass "print pDe->vg()" }
!         -re "Cannot resolve .* to any overloaded instance.*$gdb_prompt $" {
! 	    setup_xfail hppa*-*-*  CLLbs16899
! 	    fail "print pDe->vg()"
! 	}
! 	-re ".*$gdb_prompt $" { fail "print pDe->vg()" }
! 	timeout { fail "print pDe->vg() (timeout)" }
! 	eof { fail "print pDe->vg() ($GDB dumped core) (FIXME)" ; gdb_virtfunc_restart; return }
!     }
! 
!     send_gdb "print pADe->vg()\n"
!     gdb_expect {
! 	-re ".* = 202$nl$gdb_prompt $" { pass "print pADe->vg()" }
!         -re "Cannot resolve .* to any overloaded instance.*$gdb_prompt $" {
! 	    setup_xfail hppa*-*-*  CLLbs16899
! 	    fail "print pADe->vg()"
! 	}
! 	-re ".*$gdb_prompt $" { fail "print pADe->vg()" }
! 	timeout { fail "print pADe->vg() (timeout)" }
! 	eof { fail "print pADe->vg() ($GDB dumped core) (FIXME)" ; gdb_virtfunc_restart; return }
!     }
! 
!     send_gdb "print pDd->vg()\n"
!     gdb_expect {
! 	-re ".* = 101$nl$gdb_prompt $" { pass "print pDd->vg()" }
!         -re "Cannot resolve .* to any overloaded instance.*$gdb_prompt $" {
! 	    setup_xfail hppa*-*-*  CLLbs16899
! 	    fail "print pDd->vg()"
! 	}
! 	-re ".*$gdb_prompt $" { fail "print pDd->vg()" }
! 	timeout { fail "print pDd->vg() (timeout)" }
! 	eof { fail "print pDd->vg() ($GDB dumped core) (FIXME)" ; gdb_virtfunc_restart; return }
!     }
! 
!     send_gdb "print pEe->vvb()\n"
!     gdb_expect {
! 	-re ".* = 411$nl$gdb_prompt $" { pass "print pEe->vvb()" }
!         -re "Cannot resolve .* to any overloaded instance.*$gdb_prompt $" {
! 	    setup_xfail hppa*-*-*  CLLbs16899
! 	    fail "print pEe->vvb()"
! 	}
! 	-re ".*$gdb_prompt $" { fail "print pEe->vvb()" }
! 	timeout { fail "print pEe->vvb() (timeout)" }
! 	eof { fail "print pEe->vvb() ($GDB dumped core) (FIXME)" ; gdb_virtfunc_restart; return }
!     }
! 
!     send_gdb "print pVB->vvb()\n"
!     gdb_expect {
! 	-re ".* = 407$nl$gdb_prompt $" { pass "print pVB->vvb()" }
!         -re "Cannot resolve .* to any overloaded instance.*$gdb_prompt $" {
! 	    setup_xfail hppa*-*-*  CLLbs16899
! 	    fail "print pVB->vvb()"
! 	}
! 	-re ".*$gdb_prompt $" { fail "print pVB->vvb()" }
! 	timeout { fail "print pVB->vvb() (timeout)" }
! 	eof { fail "print pVB->vvb() ($GDB dumped core) (FIXME)" ; gdb_virtfunc_restart; return }
!     }
! 
!     send_gdb "print pBe->vvb()\n"
!     gdb_expect {
! 	-re ".* = 411$nl$gdb_prompt $" { pass "print pBe->vvb()" }
!         -re "Cannot resolve .* to any overloaded instance.*$gdb_prompt $" {
! 	    setup_xfail hppa*-*-*  CLLbs16899
! 	    fail "print pBe->vvb()"
! 	}
! 	-re ".*$gdb_prompt $" { fail "print pBe->vvb()" }
! 	timeout { fail "print pBe->vvb() (timeout)" }
! 	eof { fail "print pBe->vvb() ($GDB dumped core) (FIXME)" ; gdb_virtfunc_restart; return }
!     }
! 
!     send_gdb "print pDe->vvb()\n"
!     gdb_expect {
! 	-re ".* = 411$nl$gdb_prompt $" { pass "print pDe->vvb()" }
!         -re "Cannot resolve .* to any overloaded instance.*$gdb_prompt $" {
! 	    setup_xfail hppa*-*-*  CLLbs16899
! 	    fail "print pDe->vvb()"
! 	}
! 	-re ".*$gdb_prompt $" { fail "print pDe->vvb()" }
! 	timeout { fail "print pDe->vvb() (timeout)" }
! 	eof { fail "print pDe->vvb() ($GDB dumped core) (FIXME)" ; gdb_virtfunc_restart; return }
!     }
! 
!     send_gdb "print pEe->vd()\n"
!     gdb_expect {
! 	-re ".* = 282$nl$gdb_prompt $" { pass "print pEe->vd()" }
!         -re "Cannot resolve .* to any overloaded instance.*$gdb_prompt $" {
! 	    setup_xfail hppa*-*-*  CLLbs16899
! 	    fail "print pEe->vd()"
! 	}
! 	-re ".*$gdb_prompt $" { fail "print pEe->vd()" }
! 	timeout { fail "print pEe->vd() (timeout)" }
! 	eof { fail "print pEe->vd() ($GDB dumped core) (FIXME)" ; gdb_virtfunc_restart; return }
!     }
! 
!     send_gdb "print pEe->fvb()\n"
!     gdb_expect {
! 	-re ".* = 311$nl$gdb_prompt $" { pass "print pEe->fvb()" }
!         -re "Cannot resolve .* to any overloaded instance.*$gdb_prompt $" {
! 	    setup_xfail hppa*-*-*  CLLbs16899
! 	    fail "print pEe->fvb()"
! 	}
! 	-re ".*$gdb_prompt $" { fail "print pEe->fvb()" }
! 	timeout { fail "print pEe->fvb() (timeout)" }
! 	eof { fail "print pEe->fvb() ($GDB dumped core) (FIXME)" ; gdb_virtfunc_restart; return }
!     }
  
      # fails on target=native, host=i686-pc-linux-gnu%rh-7.2,
      # gdb=HEAD%2002-02-16, gcc=2.95.3, goption=-gdwarf-2.
--- 430,446 ----
  	return 0
      }
  
!     gdb_test "print pAe->f()"   "\\$\[0-9\]+ = 20"
!     gdb_test "print pAa->f()"   "\\$\[0-9\]+ = 1"
!     gdb_test "print pDe->vg()"  "\\$\[0-9\]+ = 202"
!     gdb_test "print pADe->vg()" "\\$\[0-9\]+ = 202"
!     gdb_test "print pDd->vg()"  "\\$\[0-9\]+ = 101"
!     gdb_test "print pEe->vvb()" "\\$\[0-9\]+ = 411"
!     gdb_test "print pVB->vvb()" "\\$\[0-9\]+ = 407"
!     gdb_test "print pBe->vvb()" "\\$\[0-9\]+ = 411"
!     gdb_test "print pDe->vvb()" "\\$\[0-9\]+ = 411"
!     gdb_test "print pEe->vd()"  "\\$\[0-9\]+ = 282"
!     gdb_test "print pEe->fvb()" "\\$\[0-9\]+ = 311"
  
      # fails on target=native, host=i686-pc-linux-gnu%rh-7.2,
      # gdb=HEAD%2002-02-16, gcc=2.95.3, goption=-gdwarf-2.
*************** proc test_virtual_calls {} {
*** 914,947 ****
      #
      # -- chastain 2002-02-20
  
!     send_gdb "print pEe->D::vg()\n"
!     gdb_expect {
! 	-re ".* = 102$nl$gdb_prompt $" { pass "print pEe->D::vg()" }
! 	-re "Attempt to take address of value not located in memory.\r\n$gdb_prompt $"
! 	{ kfail "gdb/1064" "print pEe->D::vg()" }
! 	-re ".*$gdb_prompt $" { fail "print pEe->D::vg()" }
! 	timeout { fail "print pEe->D::vg() (timeout)" }
! 	eof { fail "print pEe->D::vg() ($GDB dumped core) (FIXME)" ; gdb_virtfunc_restart; return }
      }
  }
  
  proc do_tests {} {
      global prms_id
      global bug_id
  
      set prms_id 0
      set bug_id 0
  
!     gdb_start;
!     gdb_virtfunc_init;
  
      runto_main
- 
      test_ptype_of_classes
  
!     if [ runto 'test_calls' ] then {
! 	test_virtual_calls
!     }
  }
  
  do_tests
--- 474,522 ----
      #
      # -- chastain 2002-02-20
  
!     # more recent results:
!     # wrong value "202"
!     #   gcc 2.95.3 -gdwarf-2
!     #   gcc 2.95.3 -gstabs+
!     # attempt to take addres of value not located in memory
!     #   gcc 3.3.2 -gdwarf-2
!     #   gcc 3.3.2 -gstabs+
!     #
!     # -- chastain 2003-12-31
! 
!     gdb_test_multiple "print pEe->D::vg()" "print pEe->D::vg()" {
! 	-re "\\$\[0-9]+ = 102$nl$gdb_prompt $" {
! 	    pass "print pEe->D::vg()"
! 	}
! 	-re "Attempt to take address of value not located in memory.$nl$gdb_prompt $" {
! 	    kfail "gdb/1064" "print pEe->D::vg()"
! 	}
      }
  }
  
  proc do_tests {} {
      global prms_id
      global bug_id
+     global srcdir subdir binfile
+     global gdb_prompt
  
      set prms_id 0
      set bug_id 0
  
!     gdb_exit
!     gdb_start
!     gdb_reinitialize_dir $srcdir/$subdir
!     gdb_load $binfile
! 
!     gdb_test "set language c++" "" ""
!     gdb_test "set width 0" "" ""
  
      runto_main
      test_ptype_of_classes
  
!     gdb_breakpoint test_calls
!     gdb_test "continue" ".*Breakpoint .* test_calls.*" ""
!     test_virtual_calls
  }
  
  do_tests


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]