* [RFA] Add support for class typedefs/add missing derivation.exp tests
@ 2012-10-04 0:30 Keith Seitz
2012-10-15 19:45 ` Tom Tromey
0 siblings, 1 reply; 5+ messages in thread
From: Keith Seitz @ 2012-10-04 0:30 UTC (permalink / raw)
To: gdb-patches@sourceware.org ml
[-- Attachment #1: Type: text/plain, Size: 563 bytes --]
Hi,
While working on some (more) symbol table bugs, I noticed that
derivation.exp doesn't test the ptype of the variable g_instance. I
presume this is because cp_test_ptype_class doesn't support typedefs.
Since it is pretty easy to do, and I will need it for a follow-on patch,
I'm submitting this omission now, adding the missing tests and support.
Ok?
Keith
testsuite/ChangeLog
2012-10-03 Keith Seitz <keiths@redhat.com>
* lib/cp-support.exp (cp_test_ptype_class): Add support
for class typedefs.
* gdb.cp/derivation.exp: Add tests for g_instance.
[-- Attachment #2: cp_test_ptype_class-typedef.patch --]
[-- Type: text/x-patch, Size: 3325 bytes --]
diff --git a/gdb/testsuite/lib/cp-support.exp b/gdb/testsuite/lib/cp-support.exp
index 8829f97..467a25e 100644
--- a/gdb/testsuite/lib/cp-support.exp
+++ b/gdb/testsuite/lib/cp-support.exp
@@ -81,6 +81,11 @@ proc cp_check_errata { expected_string actual_string errata_table } {
# the class has a member function with the given access type
# and the given declaration.
#
+# { typedef "access" "declaration" }
+#
+# the class has a typedef with the given access type and the
+# given declaration.
+#
# If you test the same class declaration more than once, you can specify
# IN_CLASS_TABLE as "ibid". "ibid" means: look for a previous class
# table that had the same IN_KEY and IN_TAG, and re-use that table.
@@ -199,6 +204,7 @@ proc cp_test_ptype_class { in_command in_testname in_key in_tag in_class_table {
set list_vbases { }
set list_fields { }
set list_methods { }
+ set list_typedefs { }
foreach class_line $in_class_table {
switch [lindex $class_line 0] {
@@ -206,6 +212,7 @@ proc cp_test_ptype_class { in_command in_testname in_key in_tag in_class_table {
"vbase" { lappend list_vbases [lindex $class_line 1] }
"field" { lappend list_fields [lrange $class_line 1 2] }
"method" { lappend list_methods [lrange $class_line 1 2] }
+ "typedef" { lappend list_typedefs [lrange $class_line 1 2] }
default { fail "$in_testname // bad line in class table: $class_line"; return; }
}
}
@@ -381,6 +388,22 @@ proc cp_test_ptype_class { in_command in_testname in_key in_tag in_class_table {
}
}
+ # Typedef
+
+ if {[llength $list_typedefs] > 0} {
+ set typedef_access [lindex [lindex $list_typedefs 0] 0]
+ set typedef_decl [lindex [lindex $list_typedefs 0] 1]
+ if {[string equal $actual_line $typedef_decl]} {
+ if {![string equal $access $typedef_access]} {
+ cp_check_errata $typedef_access $access $in_errata_table
+ fail "$in_testname // wrong access specifier for typedef: $access"
+ return
+ }
+ set list_typedefs [lreplace $list_typedefs 0 0]
+ continue
+ }
+ }
+
# Synthetic operators. These are optional and can be mixed in
# with the methods in any order, but duplicates are wrong.
#
@@ -452,6 +475,11 @@ proc cp_test_ptype_class { in_command in_testname in_key in_tag in_class_table {
return
}
+ if {[llength $list_typedefs] > 0} {
+ fail "$in_testname // missing typedefs"
+ return
+ }
+
# Check the tail.
set actual_tail [string trim $actual_tail]
diff --git a/gdb/testsuite/gdb.cp/derivation.exp b/gdb/testsuite/gdb.cp/derivation.exp
index a4210d9..f4b4888 100644
--- a/gdb/testsuite/gdb.cp/derivation.exp
+++ b/gdb/testsuite/gdb.cp/derivation.exp
@@ -134,6 +134,22 @@ cp_test_ptype_class \
{ method public "int foo();" }
}
+# class G
+cp_test_ptype_class \
+ "ptype g_instance" "" "class" "G" \
+ {
+ { base "private A" }
+ { base "public B" }
+ { base "protected C" }
+ { field public "int g;" }
+ { field public "int gg;" }
+ { field public "int a;" }
+ { field public "int b;" }
+ { field public "int c;" }
+ { method public "int gfoo();" }
+ { method public "int foo();" }
+ }
+
# Print individual fields.
gdb_test "print d_instance.a" "\\$\[0-9\]+ = 1" "print value of d_instance.a"
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [RFA] Add support for class typedefs/add missing derivation.exp tests
2012-10-04 0:30 [RFA] Add support for class typedefs/add missing derivation.exp tests Keith Seitz
@ 2012-10-15 19:45 ` Tom Tromey
2012-10-15 19:50 ` Keith Seitz
0 siblings, 1 reply; 5+ messages in thread
From: Tom Tromey @ 2012-10-15 19:45 UTC (permalink / raw)
To: Keith Seitz; +Cc: gdb-patches@sourceware.org ml
>>>>> "Keith" == Keith Seitz <keiths@redhat.com> writes:
Keith> While working on some (more) symbol table bugs, I noticed that
Keith> derivation.exp doesn't test the ptype of the variable g_instance. I
Keith> presume this is because cp_test_ptype_class doesn't support typedefs.
Funny, I have the exact same "typedef" change in one of my ptype patches
:)
Keith> 2012-10-03 Keith Seitz <keiths@redhat.com>
Keith> * lib/cp-support.exp (cp_test_ptype_class): Add support
Keith> for class typedefs.
Keith> * gdb.cp/derivation.exp: Add tests for g_instance.
I don't totally follow this since the new test doesn't seem to use the
new "typedef" keyword.
Tom
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [RFA] Add support for class typedefs/add missing derivation.exp tests
2012-10-15 19:45 ` Tom Tromey
@ 2012-10-15 19:50 ` Keith Seitz
2012-10-15 20:01 ` Tom Tromey
0 siblings, 1 reply; 5+ messages in thread
From: Keith Seitz @ 2012-10-15 19:50 UTC (permalink / raw)
To: Tom Tromey; +Cc: gdb-patches@sourceware.org ml
On 10/15/2012 12:45 PM, Tom Tromey wrote:
> Keith> 2012-10-03 Keith Seitz <keiths@redhat.com>
> Keith> * lib/cp-support.exp (cp_test_ptype_class): Add support
> Keith> for class typedefs.
> Keith> * gdb.cp/derivation.exp: Add tests for g_instance.
>
> I don't totally follow this since the new test doesn't seem to use the
> new "typedef" keyword.
Ha. Yeah. It doesn't (yet)... Those should actually be two separate patches.
That's what I get for posting a little cleanup patch (on which a
subsequent patch relies). Sorry.
Keith
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [RFA] Add support for class typedefs/add missing derivation.exp tests
2012-10-15 19:50 ` Keith Seitz
@ 2012-10-15 20:01 ` Tom Tromey
2012-10-15 22:33 ` Keith Seitz
0 siblings, 1 reply; 5+ messages in thread
From: Tom Tromey @ 2012-10-15 20:01 UTC (permalink / raw)
To: Keith Seitz; +Cc: gdb-patches@sourceware.org ml
Keith> Ha. Yeah. It doesn't (yet)... Those should actually be two
Keith> separate patches.
Keith> That's what I get for posting a little cleanup patch (on which a
Keith> subsequent patch relies). Sorry.
It's no problem. The patch is ok as-is. Thanks for explaining.
Tom
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2012-10-15 22:33 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-10-04 0:30 [RFA] Add support for class typedefs/add missing derivation.exp tests Keith Seitz
2012-10-15 19:45 ` Tom Tromey
2012-10-15 19:50 ` Keith Seitz
2012-10-15 20:01 ` Tom Tromey
2012-10-15 22:33 ` Keith Seitz
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox