This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
[patch/commit/testsuite/cp] derivation.exp
- From: mec dot gnu at mindspring dot com (Michael Elizabeth Chastain)
- To: carlton at kealia dot com, gdb-patches at sources dot redhat dot com
- Date: Thu, 1 Jan 2004 01:57:55 -0500 (EST)
- Subject: [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()"