]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
gdb/
authorDaniel Jacobowitz <drow@false.org>
Wed, 1 Mar 2006 19:34:46 +0000 (19:34 +0000)
committerDaniel Jacobowitz <drow@false.org>
Wed, 1 Mar 2006 19:34:46 +0000 (19:34 +0000)
* gdbtypes.c (lookup_struct_elt_type): Correct noerr for recursive
calls.
gdb/testsuite/
* gdb.cp/inherit.exp (test_print_mi_member_types): New function.
(do_tests): Call it.

gdb/ChangeLog
gdb/gdbtypes.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.cp/inherit.exp

index 73b503d20b78cb48c6c3409141c25835a82cb618..3fdd9a5dfe78b3aa6d82f27d69fa3c223ab05e55 100644 (file)
@@ -1,3 +1,8 @@
+2006-03-01  Daniel Jacobowitz  <dan@codesourcery.com>
+
+       * gdbtypes.c (lookup_struct_elt_type): Correct noerr for recursive
+       calls.
+
 2006-03-01  Randolph Chung  <tausq@debian.org>
 
        * somread.c (som_symfile_read): Update comment and remove unneeded 
index dde327b5ab413e767dc10e0b97b67b12c54559d4..0d297281a1358a91e0e78e23a1ccc466cf517c92 100644 (file)
@@ -1271,7 +1271,7 @@ lookup_struct_elt_type (struct type *type, char *name, int noerr)
     {
       struct type *t;
 
-      t = lookup_struct_elt_type (TYPE_BASECLASS (type, i), name, noerr);
+      t = lookup_struct_elt_type (TYPE_BASECLASS (type, i), name, 1);
       if (t != NULL)
        {
          return t;
index 45f07116f39b17229497c5a418b5019deb55887c..888069add22fdc25ba675b85547159a207babfc0 100644 (file)
@@ -1,3 +1,8 @@
+2006-03-01  Daniel Jacobowitz  <dan@codesourcery.com>
+
+       * gdb.cp/inherit.exp (test_print_mi_member_types): New function.
+       (do_tests): Call it.
+
 2006-02-28  Alexandre Oliva  <aoliva@redhat.com>
 
        * gdb.base/prelink.exp: New test.
index 9ae1c1e2f3aec2fb1694aaafd9a52dfc4a096839..e90c0c68e1a8593b00a3b87d6e9984c5a0c33b23 100644 (file)
@@ -1,5 +1,5 @@
 # Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002, 2003,
-# 2004 Free Software Foundation, Inc.
+# 2004, 2006 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
@@ -373,6 +373,127 @@ proc test_print_mi_members {} {
     gdb_test "print g_E.E::x" "$vhn = 32"
 }
 
+# Multiple inheritance, print individual member types.
+
+proc test_print_mi_member_types {} {
+    global gdb_prompt
+    global nl
+    global vhn
+
+    # Print the types of some members of g_D without qualifying them.
+    gdb_test "ptype g_D.b" "type = int"
+    gdb_test "ptype g_D.c" "type = int"
+    gdb_test "ptype g_D.d" "type = int"
+
+    # Print the types of qualified members; none of these tests pass today.
+
+    # Print all members of g_A.
+    setup_kfail "gdb/2092" "*-*-*"
+    gdb_test "ptype g_A.A::a" "type = int"
+    setup_kfail "gdb/2092" "*-*-*"
+    gdb_test "ptype g_A.A::x" "type = int"
+
+    # Print all members of g_B.
+    setup_kfail "gdb/2092" "*-*-*"
+    gdb_test "ptype g_B.A::a" "type = int"
+    setup_kfail "gdb/2092" "*-*-*"
+    gdb_test "ptype g_B.A::x" "type = int"
+    setup_kfail "gdb/2092" "*-*-*"
+    gdb_test "ptype g_B.B::b" "type = int"
+    setup_kfail "gdb/2092" "*-*-*"
+    gdb_test "ptype g_B.B::x" "type = int"
+
+    # Print all members of g_C.
+    setup_kfail "gdb/2092" "*-*-*"
+    gdb_test "ptype g_C.A::a" "type = int"
+    setup_kfail "gdb/2092" "*-*-*"
+    gdb_test "ptype g_C.A::x" "type = int"
+    setup_kfail "gdb/2092" "*-*-*"
+    gdb_test "ptype g_C.C::c" "type = int"
+    setup_kfail "gdb/2092" "*-*-*"
+    gdb_test "ptype g_C.C::x" "type = int"
+
+    # Print all members of g_D.
+    #
+    # g_D.A::a and g_D.A::x are ambiguous member accesses, and gdb
+    # should detect these.  There are no ways to PASS these tests
+    # because I don't know what the gdb message will be.  -- chastain
+    # 2004-01-27.
+
+    set name "ptype g_D.A::a"
+    gdb_test_multiple "ptype g_D.A::a" $name {
+       -re "Attempt to take address of non-lval$nl$gdb_prompt $" {
+           kfail "gdb/2092" "$name"
+       }
+       -re "type = int$nl$gdb_prompt $" {
+           kfail "gdb/68" "ptype g_D.A::a"
+       }
+    }
+
+    set name "ptype g_D.A::x"
+    gdb_test_multiple "ptype g_D.A::x" $name {
+       -re "Attempt to take address of non-lval$nl$gdb_prompt $" {
+           kfail "gdb/2092" "$name"
+       }
+       -re "type = int$nl$gdb_prompt $" {
+           kfail "gdb/68" "ptype g_D.A::x"
+       }
+    }
+
+    setup_kfail "gdb/2092" "*-*-*"
+    gdb_test "ptype g_D.B::b" "type = int"
+    setup_kfail "gdb/2092" "*-*-*"
+    gdb_test "ptype g_D.B::x" "type = int"
+    setup_kfail "gdb/2092" "*-*-*"
+    gdb_test "ptype g_D.C::c" "type = int"
+    setup_kfail "gdb/2092" "*-*-*"
+    gdb_test "ptype g_D.C::x" "type = int"
+    setup_kfail "gdb/2092" "*-*-*"
+    gdb_test "ptype g_D.D::d" "type = int"
+    setup_kfail "gdb/2092" "*-*-*"
+    gdb_test "ptype g_D.D::x" "type = int"
+
+    # Print all members of g_E.
+    # g_E.A::a and g_E.A::x are ambiguous.
+
+    set name "ptype g_E.A::a"
+    gdb_test_multiple "ptype g_E.A::a" $name {
+       -re "Attempt to take address of non-lval$nl$gdb_prompt $" {
+           kfail "gdb/2092" "$name"
+       }
+       -re "type = int$nl$gdb_prompt $" {
+           kfail "gdb/68" "ptype g_E.A::a"
+       }
+    }
+
+    set name "ptype g_E.A::x"
+    gdb_test_multiple "ptype g_E.A::x" $name {
+       -re "Attempt to take address of non-lval$nl$gdb_prompt $" {
+           kfail "gdb/2092" "$name"
+       }
+       -re "type = int$nl$gdb_prompt $" {
+           kfail "gdb/68" "ptype g_E.A::x"
+       }
+    }
+
+    setup_kfail "gdb/2092" "*-*-*"
+    gdb_test "ptype g_E.B::b" "type = int"
+    setup_kfail "gdb/2092" "*-*-*"
+    gdb_test "ptype g_E.B::x" "type = int"
+    setup_kfail "gdb/2092" "*-*-*"
+    gdb_test "ptype g_E.C::c" "type = int"
+    setup_kfail "gdb/2092" "*-*-*"
+    gdb_test "ptype g_E.C::x" "type = int"
+    setup_kfail "gdb/2092" "*-*-*"
+    gdb_test "ptype g_E.D::d" "type = int"
+    setup_kfail "gdb/2092" "*-*-*"
+    gdb_test "ptype g_E.D::x" "type = int"
+    setup_kfail "gdb/2092" "*-*-*"
+    gdb_test "ptype g_E.E::e" "type = int"
+    setup_kfail "gdb/2092" "*-*-*"
+    gdb_test "ptype g_E.E::x" "type = int"
+}
+
 # Multiple inheritance, print complete classes.
 
 proc test_print_mi_classes { } {
@@ -668,6 +789,7 @@ proc do_tests { } {
     test_print_si_members
     test_print_si_classes
     test_print_mi_members
+    test_print_mi_member_types
     test_print_mi_classes
     test_print_anon_union