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] derivation.exp


Here's another gdb.cp/*.exp rewrite.  As with the previous file, my
motivation is to accommodate the new gcc ABI.  The new gcc ABI causes a
lot of noise in the test suite, and I have to work through all the noise
so that I can see if there's any actual bugs with the new ABI.

Testing: as usual, native i686-pc-linux-gnu with gcc 2.95.3,
gcc 3.3.2, and gcc HEAD, with -gdwarf-2 and -gstabs+.

I uncovered a long-standing bug in gcc stabs+ debug info with protected
inheritance.  Basically, the stabs+ writer emits the same flag bits for
private inheritance and protected inheritance.  derivation.exp was just
quietly accepting "private" in place of "protected" and issuing a PASS.
No more!  Now it KFAIL's to PR gdb/1498, which refers to PR gcc/13539.

The number of send_gdb's in gdb.cp/*.exp is going down a lot.
Also I'm looking forward to testing with HP-UX aCC soon.

I am committing this now.

Michael C

2004-01-01  Michael Chastain  <mec.gnu@mindspring.com>

	* gdb.cp/derivation.exp: Rewrite.  Clean up patterns to match
	current versions of gcc, including gcc abi 2.  Remove gratuitous
	restart of test program.  Use gdb_test_multiple and gdb_test for
	all tests.  Add patterns to kfail PR gdb/1498.

Index: derivation.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.cp/derivation.exp,v
retrieving revision 1.2
diff -c -3 -p -r1.2 derivation.exp
*** derivation.exp	23 Nov 2003 18:24:46 -0000	1.2
--- derivation.exp	1 Jan 2004 06:49:15 -0000
***************
*** 1,4 ****
! # Copyright 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
  
  # This program is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
--- 1,5 ----
! # Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004
! # Free Software Foundation, Inc.
  
  # This program is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
***************
*** 18,41 ****
  # bug-gdb@prep.ai.mit.edu
  
  # This file was written by Elena Zannoni (ezannoni@cygnus.com)
  
  # This file is part of the gdb testsuite
- #
  
! #
! # tests for inheritance, with several derivations types combinations (private,
! # public, protected) 
  # classes have simple members and member functions.
- # 
  
  
  if $tracelevel then {
!         strace $tracelevel
!         }
  
- #
- # test running programs
- #
  set prms_id 0
  set bug_id 0
  
--- 19,41 ----
  # bug-gdb@prep.ai.mit.edu
  
  # This file was written by Elena Zannoni (ezannoni@cygnus.com)
+ # And rewritten by Michael Chastain <mec.gnu@mindspring.com>
  
  # This file is part of the gdb testsuite
  
! # tests for inheritance, with several derivations types combinations
! # (private, public, protected) 
  # classes have simple members and member functions.
  
+ set ws "\[\r\n\t \]+"
+ set nl "\[\r\n\]+"
  
  if $tracelevel then {
!     strace $tracelevel
! }
! 
! # Start program.
  
  set prms_id 0
  set bug_id 0
  
*************** set testfile "derivation"
*** 45,57 ****
  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."
  }
--- 45,50 ----
*************** gdb_start
*** 61,73 ****
  gdb_reinitialize_dir $srcdir/$subdir
  gdb_load ${binfile}
  
! #
! # set it up at a breakpoint so we can play with the variable values
! #
! if ![runto_main] then {
!     perror "couldn't run to breakpoint"
!     continue
! }
  
  if ![runto 'marker1'] then {
      perror "couldn't run to marker1"
--- 54,60 ----
  gdb_reinitialize_dir $srcdir/$subdir
  gdb_load ${binfile}
  
! # Set it up at a breakpoint so we can play with the variable values.
  
  if ![runto 'marker1'] then {
      perror "couldn't run to marker1"
*************** if ![runto 'marker1'] then {
*** 76,311 ****
  
  gdb_test "up" ".*main.*" "up from marker1"
  
  
  
! send_gdb "print a_instance\n"
! gdb_expect {
!     -re ".\[0-9\]* = \{a = 1, aa = 2\}\r\n$gdb_prompt $" {
!         pass "print value of a_instance"
!       }
!     -re ".*$gdb_prompt $" { fail "print value of a_instance" }
!     timeout           { fail "(timeout) print value of a_instance" }
!   }
! 
! 
! send_gdb "ptype a_instance\n"
! gdb_expect {
!     -re "type = class A \{\r\n\[\t \]*public:\r\n\[\t \]*int a;\r\n\[\t \]*int aa;\[\r\n\t ]+A & operator=\\(A const ?&\\);\[\r\n\t ]+A\\((A const|const A) ?&\\);\[\r\n\t ]+A\\((void|)\\);\r\n\[\t \]*int afoo\\((void|)\\);\r\n\[\t \]*int foo\\((void|)\\);\r\n\}.*$gdb_prompt $"  { pass "ptype a_instance (with synth ops)" }
!     -re "type = class A \{\r\n\[\t \]*public:\r\n\[\t \]*int a;\r\n\[\t \]*int aa;\[\r\n\t \]+A\\(void\\);\r\n\[\t \]*int afoo\\((void|)\\);\r\n\[\t \]*int foo\\((void|)\\);\r\n\}.*$gdb_prompt $"  { pass "ptype a_instance (no synth ops)" }
!     -re ".*$gdb_prompt $"   {  fail "ptype a_instance" }
!     timeout             { fail "(timeout) ptype a_instance" }
! }
! 
! 
! send_gdb "print d_instance\n"
! gdb_expect {
!     -re ".\[0-9\]* = \{<A> = \{a = 1, aa = 2\}, <B> = \{b = 3, bb = 4\}, <C> = \{c = 5, cc = 6\}, d = 7, dd = 8\}\r\n$gdb_prompt $" {
!         pass "print value of d_instance"
!       }
!     -re ".\[0-9\]* = \{<class A> = \{a = 1, aa = 2\}, <class B> = \{b = 3, bb = 4\}, <class C> = \{c = 5, cc = 6\}, d = 7, dd = 8\}\r\n$gdb_prompt $" {
!         pass "print value of d_instance"
!       }
!     -re ".*$gdb_prompt $" { fail "print value of d_instance" }
!     timeout           { fail "(timeout) print value of d_instance" }
!   }
! 
!   if { [test_compiler_info gcc-*] } then {
!       send_gdb "ptype d_instance\n"
!       gdb_expect {
! 	  -re "type = class D : private A, public B, (protected|private) C \{\r\n\[\t \]*public:\r\n\[\t \]*int d;\r\n\[\t \]*int dd;\[\r\n\t ]+D & operator=\\(D const ?&\\);\[\r\n\t ]+D\\((D const|const D) ?&\\);\[\r\n\t \]+D\\((void|)\\);\r\n\[\t \]*int dfoo\\((void|)\\);\r\n\[\t \]*int foo\\((void|)\\);\r\n\}.*$gdb_prompt $"  { pass "ptype d_instance" }
! 	  -re "type = class D : private A, public B, (protected|private) C \{\r\n\[\t \]*public:\r\n\[\t \]*int d;\r\n\[\t \]*int dd;\[\r\n\t ]+D & operator=\\(D const ?&\\);\[\r\n\t ]+D\\((D const|const D) ?&\\);\[\r\n\t \]+D\\((void|)\\);\r\n\[\t \]*int dfoo\\((void|)\\);\r\n\[\t \]*int foo\\((void|)\\);\r\n\}.*$gdb_prompt $"  { pass "ptype d_instance" }
!           -re "type = class D : private A, public B, (protected|private) C \{\r\n\[\t \]*public:\r\n\[\t \]*int d;\r\n\[\t \]*int dd;\[\r\n\t \]+D\\(void\\);\r\n\[\t \]*int dfoo\\((void|)\\);\r\n\[\t \]*int foo\\((void|)\\);\r\n\}.*$gdb_prompt $"  { pass "ptype d_instance" }
! 	  -re ".*$gdb_prompt $"   {  fail "ptype d_instance" }
! 	  timeout             { fail "(timeout) ptype d_instance" }
!       }
!   } else {
!       send_gdb "ptype d_instance\n"
!       gdb_expect {
! 	  -re "type = class D : private A, public B, protected C \{\r\n\[\t \]*public:\r\n\[\t \]*int d;\r\n\[\t \]*int dd;\[\r\n\t \]+D\\(void\\);\r\n\[\t \]*int dfoo\\((void|)\\);\r\n\[\t \]*int foo\\((void|)\\);\r\n\}.*$gdb_prompt $"  { pass "ptype d_instance" }
! 	  -re ".*$gdb_prompt $"   {  fail "ptype d_instance" }
! 	  timeout             { fail "(timeout) ptype d_instance" }
!       }
!   }
! 
! 
! send_gdb "print e_instance\n"
! gdb_expect {
!     -re ".\[0-9\]* = \{<A> = \{a = 1, aa = 2\}, <B> = \{b = 3, bb = 4\}, <C> = \{c = 5, cc = 6\}, e = 9, ee = 10\}\r\n$gdb_prompt $" {
!         pass "print value of e_instance"
!       }
!     -re ".\[0-9\]* = \{<class A> = \{a = 1, aa = 2\}, <class B> = \{b = 3, bb = 4\}, <class C> = \{c = 5, cc = 6\}, e = 9, ee = 10\}\r\n$gdb_prompt $" {
!         pass "print value of e_instance"
!       }
!     -re ".*$gdb_prompt $" { fail "print value of e_instance" }
!     timeout           { fail "(timeout) print value of e_instance" }
!   }
! 
!   if { [test_compiler_info gcc-*] } then {
!       send_gdb "ptype e_instance\n"
!       gdb_expect {
! 	  -re "type = class E : public A, private B, (protected|private) C \{\r\n\[\t \]*public:\r\n\[\t \]*int e;\r\n\[\t \]*int ee;\[\r\n\t ]+E & operator=\\(E const ?&\\);\[\r\n\t ]+E\\((E const|const E) ?&\\);\[\r\n\t \]+E\\((void|)\\);\r\n\[\t \]*int efoo\\((void|)\\);\r\n\[\t \]*int foo\\((void|)\\);\r\n\}.*$gdb_prompt $"  { pass "ptype e_instance" }
!           -re "type = class E : public A, private B, (protected|private) C \{\r\n\[\t \]*public:\r\n\[\t \]*int e;\r\n\[\t \]*int ee;\[\r\n\t \]+E\\((void|)\\);\r\n\[\t \]*int efoo\\((void|)\\);\r\n\[\t \]*int foo\\((void|)\\);\r\n\}.*$gdb_prompt $"  { pass "ptype e_instance" }
! 	  -re ".*$gdb_prompt $"   {  fail "ptype e_instance" }
! 	  timeout             { fail "(timeout) ptype e_instance" }
!       }
!   } else {
!       send_gdb "ptype e_instance\n"
!       gdb_expect {
! 	  -re "type = class E : public A, private B, protected C \{\r\n\[\t \]*public:\r\n\[\t \]*int e;\r\n\[\t \]*int ee;\[\r\n\t \]+E\\((void|)\\);\r\n\[\t \]*int efoo\\((void|)\\);\r\n\[\t \]*int foo\\((void|)\\);\r\n\}.*$gdb_prompt $"  { pass "ptype e_instance" }
! 	  -re ".*$gdb_prompt $"   {  fail "ptype e_instance" }
! 	  timeout             { fail "(timeout) ptype e_instance" }
!       }
!   }
! 
! 
! send_gdb "print f_instance\n"
! gdb_expect {
!     -re ".\[0-9\]* = \{<A> = \{a = 1, aa = 2\}, <B> = \{b = 3, bb = 4\}, <C> = \{c = 5, cc = 6\}, f = 11, ff = 12\}\r\n$gdb_prompt $" {
!         pass "print value of f_instance"
!       }
!     -re ".\[0-9\]* = \{<class A> = \{a = 1, aa = 2\}, <class B> = \{b = 3, bb = 4\}, <class C> = \{c = 5, cc = 6\}, f = 11, ff = 12\}\r\n$gdb_prompt $" {
!         pass "print value of f_instance"
!       }
!     -re ".*$gdb_prompt $" { fail "print value of f_instance" }
!     timeout           { fail "(timeout) print value of f_instance" }
!   }
! 
! send_gdb "ptype f_instance\n"
! gdb_expect {
!     -re "type = class F : private A, public B, private C \{\r\n\[\t \]*public:\r\n\[\t \]*int f;\r\n\[\t \]*int ff;\[\r\n\t ]+F & operator=\\(F const ?&\\);\[\r\n\t ]+F\\((F const|const F) ?&\\);\[\r\n\t \]+F\\((void|)\\);\r\n\[\t \]*int ffoo\\((void|)\\);\r\n\[\t \]*int foo\\((void|)\\);\r\n\}.*$gdb_prompt $"  { pass "ptype f_instance" }
!     -re "type = class F : private A, public B, private C \{\r\n\[\t \]*public:\r\n\[\t \]*int f;\r\n\[\t \]*int ff;\[\r\n\t \]+F\\((void|)\\);\r\n\[\t \]*int ffoo\\((void|)\\);\r\n\[\t \]*int foo\\((void|)\\);\r\n\}.*$gdb_prompt $"  { pass "ptype f_instance" }
!     -re ".*$gdb_prompt $"   {  fail "ptype f_instance" }
!     timeout             { fail "(timeout) ptype f_instance" }
! }
! 
! 
! 
! send_gdb "print d_instance.a\n"
! gdb_expect {
!     -re ".\[0-9\]* = 1.*$gdb_prompt $" {
!         pass "print value of d_instance.a"
!       }
!     -re ".*$gdb_prompt $" { fail "print value of d_instance.a" }
!     timeout           { fail "(timeout) print value of d_instance.a" }
!   }
! 
! send_gdb "print d_instance.aa\n"
! gdb_expect {
!     -re ".\[0-9\]* = 2.*$gdb_prompt $" {
!         pass "print value of d_instance.aa"
!       }
!     -re ".*$gdb_prompt $" { fail "print value of d_instance.aa" }
!     timeout           { fail "(timeout) print value of d_instance.aa" }
!   }
! 
! send_gdb "print d_instance.b\n"
! gdb_expect {
!     -re ".\[0-9\]* = 3.*$gdb_prompt $" {
!         pass "print value of d_instance.b"
!       }
!     -re ".*$gdb_prompt $" { fail "print value of d_instance.b" }
!     timeout           { fail "(timeout) print value of d_instance.b" }
!   }
! 
! send_gdb "print d_instance.bb\n"
! gdb_expect {
!     -re ".\[0-9\]* = 4.*$gdb_prompt $" {
!         pass "print value of d_instance.bb"
!       }
!     -re ".*$gdb_prompt $" { fail "print value of d_instance.bb" }
!     timeout           { fail "(timeout) print value of d_instance.bb" }
!   }
! 
! send_gdb "print d_instance.c\n"
! gdb_expect {
!     -re ".\[0-9\]* = 5.*$gdb_prompt $" {
!         pass "print value of d_instance.c"
!       }
!     -re ".*$gdb_prompt $" { fail "print value of d_instance.c" }
!     timeout           { fail "(timeout) print value of d_instance.c" }
!   }
! 
! send_gdb "print d_instance.cc\n"
! gdb_expect {
!     -re ".\[0-9\]* = 6.*$gdb_prompt $" {
!         pass "print value of d_instance.cc"
!       }
!     -re ".*$gdb_prompt $" { fail "print value of d_instance.cc" }
!     timeout           { fail "(timeout) print value of d_instance.cc" }
!   }
! 
! send_gdb "print d_instance.d\n"
! gdb_expect {
!     -re ".\[0-9\]* = 7.*$gdb_prompt $" {
!         pass "print value of d_instance.d"
!       }
!     -re ".*$gdb_prompt $" { fail "print value of d_instance.d" }
!     timeout           { fail "(timeout) print value of d_instance.d" }
!   }
! 
! send_gdb "print d_instance.dd\n"
! gdb_expect {
!     -re ".\[0-9\]* = 8.*$gdb_prompt $" {
!         pass "print value of d_instance.dd"
!       }
!     -re ".*$gdb_prompt $" { fail "print value of d_instance.dd" }
!     timeout           { fail "(timeout) print value of d_instance.dd" }
!   }
! 
! send_gdb "print g_instance.a\n"
! gdb_expect {
!     -re "warning.*$gdb_prompt $" {
! 	# The compiler doesn't think this is ambiguous.
! 	fail "print value of g_instance.a"
!     }
!     -re ".\[0-9\]* = 15.*$gdb_prompt $" {
!         pass "print value of g_instance.a"
!       }
!     -re ".*$gdb_prompt $" { fail "print value of g_instance.a" }
!     timeout           { fail "(timeout) print value of g_instance.a" }
!   }
! 
! send_gdb "print g_instance.b\n"
! gdb_expect {
!     -re "warning.*$gdb_prompt $" {
! 	# The compiler doesn't think this is ambiguous.
! 	fail "print value of g_instance.b"
!     }
!     -re ".\[0-9\]* = 16.*$gdb_prompt $" {
!         pass "print value of g_instance.b"
!       }
!     -re ".*$gdb_prompt $" { fail "print value of g_instance.b" }
!     timeout           { fail "(timeout) print value of g_instance.b" }
!   }
! 
! send_gdb "print g_instance.c\n"
! gdb_expect {
!     -re "warning.*$gdb_prompt $" {
! 	# The compiler doesn't think this is ambiguous.
! 	fail "print value of g_instance.c"
!     }
!     -re ".\[0-9\]* = 17.*$gdb_prompt $" {
!         pass "print value of g_instance.c"
!       }
!     -re ".*$gdb_prompt $" { fail "print value of g_instance.c" }
!     timeout           { fail "(timeout) print value of g_instance.c" }
!   }
! 
! send_gdb "print g_instance.afoo()\n"
! gdb_expect {
!     -re ".\[0-9\]* = 1.*$gdb_prompt $" {
!         pass "print value of g_instance.afoo()"
!       }
!     -re ".*$gdb_prompt $" { fail "print value of g_instance.afoo()" }
!     timeout           { fail "(timeout) print value of g_instance.afoo()" }
!   }
  
  
  # If GDB fails to restore the selected frame properly after the
  # inferior function call above (see GDB PR 1155 for an explanation of
  # why this might happen), all the subsequent tests will fail.  We
  # should detect report that failure, but let the marker call finish so
  # that the rest of the tests can run undisturbed.
  gdb_test_multiple "frame" "re-selected 'main' frame after inferior call" {
      -re "#0  marker1.*$gdb_prompt $" {
          setup_kfail "gdb/1155" s390-*-linux-gnu
--- 63,183 ----
  
  gdb_test "up" ".*main.*" "up from marker1"
  
+ # Print class types and values.
+ # See virtfunc.exp for a discussion of ptype.
+ 
+ # class A
+ 
+ set re_class		"((struct|class) A \{${ws}public:|struct A \{)"
+ set re_fields		"int a;${ws}int aa;"
+ set re_methods		"A\\((void|)\\);${ws}int afoo\\((void|)\\);${ws}int foo\\((void|)\\);"
+ set re_synth_gcc_23	"A & operator=\\(A const ?&\\);${ws}A\\(A const ?&\\);"
+ set re_all_methods	"($re_methods|$re_methods${ws}$re_synth_gcc_23|$re_synth_gcc_23${ws}$re_methods)"
+ 
+ gdb_test_multiple "ptype a_instance" "ptype a_instance" {
+     -re "type = $re_class${ws}$re_fields${ws}$re_all_methods$nl\}$nl$gdb_prompt $" {
+ 	pass "ptype a_instance"
+     }
+ }
+ 
+ gdb_test "print a_instance" "\\$\[0-9\]+ = \{a = 1, aa = 2\}" "print value of a_instance"
  
+ # class D
+ 
+ set re_class		"class D : private A, public B, protected C \{${ws}public:"
+ set re_class_BAD	"class D : private A, public B, private C \{${ws}public:"
+ set re_fields		"int d;${ws}int dd;"
+ set re_methods		"D\\((void|)\\);${ws}int dfoo\\((void|)\\);${ws}int foo\\((void|)\\);"
+ set re_synth_gcc_23	"D & operator=\\(D const ?&\\);${ws}D\\(D const ?&\\);"
+ set re_all_methods	"($re_methods|$re_methods${ws}$re_synth_gcc_23|$re_synth_gcc_23${ws}$re_methods)"
+ 
+ gdb_test_multiple "ptype d_instance" "ptype d_instance" {
+     -re "type = $re_class${ws}$re_fields${ws}$re_all_methods$nl\}$nl$gdb_prompt $" {
+ 	pass "ptype d_instance"
+     }
+     -re "type = $re_class_BAD${ws}$re_fields${ws}$re_all_methods$nl\}$nl$gdb_prompt $" {
+ 	kfail "gdb/1498" "ptype d_instance"
+     }
+ }
  
! gdb_test_multiple "print d_instance" "print value of d_instance" {
!     -re "\\$\[0-9\]+ = \{<(class A|A)> = \{a = 1, aa = 2\}, <(class B|B)> = \{b = 3, bb = 4\}, <(class C|C)> = \{c = 5, cc = 6\}, d = 7, dd = 8\}$nl$gdb_prompt $" {
! 	pass "print value of d_instance"
!     }
! }
  
+ # class E
+ 
+ set re_class		"class E : public A, private B, protected C \{${ws}public:"
+ set re_class_BAD	"class E : public A, private B, private C \{${ws}public:"
+ set re_fields		"int e;${ws}int ee;"
+ set re_methods		"E\\((void|)\\);${ws}int efoo\\((void|)\\);${ws}int foo\\((void|)\\);"
+ set re_synth_gcc_23	"E & operator=\\(E const ?&\\);${ws}E\\(E const ?&\\);"
+ set re_all_methods	"($re_methods|$re_methods${ws}$re_synth_gcc_23|$re_synth_gcc_23${ws}$re_methods)"
+ 
+ gdb_test_multiple "ptype e_instance" "ptype e_instance" {
+     -re "type = $re_class${ws}$re_fields${ws}$re_all_methods$nl\}$nl$gdb_prompt $" {
+ 	pass "ptype e_instance"
+     }
+     -re "type = $re_class_BAD${ws}$re_fields${ws}$re_all_methods$nl\}$nl$gdb_prompt $" {
+ 	kfail "gdb/1498" "ptype e_instance"
+     }
+ }
+ 
+ gdb_test_multiple "print e_instance" "print value of e_instance" {
+     -re "\\$\[0-9\]+ = \{<(class A|A)> = \{a = 1, aa = 2\}, <(class B|B)> = \{b = 3, bb = 4\}, <(class C|C)> = \{c = 5, cc = 6\}, e = 9, ee = 10\}$nl$gdb_prompt $" {
+ 	pass "print value of e_instance"
+     }
+ }
+ 
+ # class F
+ 
+ set re_class		"class F : private A, public B, private C \{${ws}public:"
+ set re_fields		"int f;${ws}int ff;"
+ set re_methods		"F\\((void|)\\);${ws}int ffoo\\((void|)\\);${ws}int foo\\((void|)\\);"
+ set re_synth_gcc_23	"F & operator=\\(F const ?&\\);${ws}F\\(F const ?&\\);"
+ set re_all_methods	"($re_methods|$re_methods${ws}$re_synth_gcc_23|$re_synth_gcc_23${ws}$re_methods)"
+ 
+ gdb_test_multiple "ptype f_instance" "ptype f_instance" {
+     -re "type = $re_class${ws}$re_fields${ws}$re_all_methods$nl\}$nl$gdb_prompt $" {
+ 	pass "ptype f_instance"
+     }
+ }
+ 
+ gdb_test_multiple "print f_instance" "print value of f_instance" {
+     -re "\\$\[0-9\]+ = \{<(class A|A)> = \{a = 1, aa = 2\}, <(class B|B)> = \{b = 3, bb = 4\}, <(class C|C)> = \{c = 5, cc = 6\}, f = 11, ff = 12\}$nl$gdb_prompt $" {
+ 	pass "print value of f_instance"
+     }
+ }
+ 
+ # Print individual fields.
+ 
+ gdb_test "print d_instance.a"  "\\$\[0-9\]+ = 1" "print value of d_instance.a"
+ gdb_test "print d_instance.aa" "\\$\[0-9\]+ = 2" "print value of d_instance.aa"
+ gdb_test "print d_instance.b"  "\\$\[0-9\]+ = 3" "print value of d_instance.b"
+ gdb_test "print d_instance.bb" "\\$\[0-9\]+ = 4" "print value of d_instance.bb"
+ gdb_test "print d_instance.c"  "\\$\[0-9\]+ = 5" "print value of d_instance.c"
+ gdb_test "print d_instance.cc" "\\$\[0-9\]+ = 6" "print value of d_instance.cc"
+ gdb_test "print d_instance.d"  "\\$\[0-9\]+ = 7" "print value of d_instance.d"
+ gdb_test "print d_instance.dd" "\\$\[0-9\]+ = 8" "print value of d_instance.dd"
+ 
+ # Print some fields which are defined in the top of class G
+ # and in its base classes.  This is not be ambiguous.
+ 
+ gdb_test "print g_instance.a"  "\\$\[0-9\]+ = 15" "print value of g_instance.a"
+ gdb_test "print g_instance.b"  "\\$\[0-9\]+ = 16" "print value of g_instance.b"
+ gdb_test "print g_instance.c"  "\\$\[0-9\]+ = 17" "print value of g_instance.c"
+ 
+ # Print a function call.
+ 
+ gdb_test "print g_instance.afoo()" "\\$\[0-9\]+ = 1" "print value of g_instance.afoo()"
  
  # If GDB fails to restore the selected frame properly after the
  # inferior function call above (see GDB PR 1155 for an explanation of
  # why this might happen), all the subsequent tests will fail.  We
  # should detect report that failure, but let the marker call finish so
  # that the rest of the tests can run undisturbed.
+ 
  gdb_test_multiple "frame" "re-selected 'main' frame after inferior call" {
      -re "#0  marker1.*$gdb_prompt $" {
          setup_kfail "gdb/1155" s390-*-linux-gnu
*************** gdb_test_multiple "frame" "re-selected '
*** 317,337 ****
          pass "re-selected 'main' frame after inferior call"
      }
  }
!         
! send_gdb "print g_instance.bfoo()\n"
! gdb_expect {
!     -re ".\[0-9\]* = 2.*$gdb_prompt $" {
!         pass "print value of g_instance.bfoo()"
!       }
!     -re ".*$gdb_prompt $" { fail "print value of g_instance.bfoo()" }
!     timeout           { fail "(timeout) print value of g_instance.bfoo()" }
!   }
! 
! send_gdb "print g_instance.cfoo()\n"
! gdb_expect {
!     -re ".\[0-9\]* = 3.*$gdb_prompt $" {
!         pass "print value of g_instance.cfoo()"
!       }
!     -re ".*$gdb_prompt $" { fail "print value of g_instance.cfoo()" }
!     timeout           { fail "(timeout) print value of g_instance.cfoo()" }
!   }
--- 189,194 ----
          pass "re-selected 'main' frame after inferior call"
      }
  }
! 
! gdb_test "print g_instance.bfoo()" "\\$\[0-9\]+ = 2" "print value of g_instance.bfoo()"
! gdb_test "print g_instance.cfoo()" "\\$\[0-9\]+ = 3" "print value of g_instance.cfoo()"


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