* lib/cp-support.exp (cp_test_ptype_class): Add support
authorKeith Seitz <keiths@redhat.com>
Mon, 15 Oct 2012 22:32:50 +0000 (22:32 +0000)
committerKeith Seitz <keiths@redhat.com>
Mon, 15 Oct 2012 22:32:50 +0000 (22:32 +0000)
for class typedefs.

* gdb.cp/derivation.exp: Add tests for g_instance.

gdb/testsuite/ChangeLog
gdb/testsuite/gdb.cp/derivation.exp
gdb/testsuite/lib/cp-support.exp

index db61c62627e5b93257004fe70b6708a416544689..7203ad2822c3ffc901458369996707088ca1e3c0 100644 (file)
@@ -1,3 +1,10 @@
+2012-10-15  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.
+
 2012-10-15  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
        Fix entry values resolving in inlined frames.
index a4210d9d422b7547e8ffc565998d778d0a5fea6f..f4b488813799de91bd582d30feb6739d410c7070 100644 (file)
@@ -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"
index 8829f97df2b2bf1e5d9716592d85c0c76470f4e1..467a25e04ce36625f63632059cd8a34ed2dee6c5 100644 (file)
@@ -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]