* gdb.c++/misc.cc (class ClassParam, class_param): Define.
authorNicholas Duffek <nsd@redhat.com>
Sun, 9 Jul 2000 05:16:11 +0000 (05:16 +0000)
committerNicholas Duffek <nsd@redhat.com>
Sun, 9 Jul 2000 05:16:11 +0000 (05:16 +0000)
(use_methods): New function.
(main): Call use_methods().
* gdb.c++/classes.exp (test_method_param_class): New procedure.
(do_tests): Call test_method_param_class.

gdb/testsuite/ChangeLog
gdb/testsuite/gdb.c++/classes.exp
gdb/testsuite/gdb.c++/misc.cc

index 31e20db6c4d4707fe2bf50b761833a3560a37f08..dbc97e811c16154fad0a9094fb91cabe9ef8898c 100644 (file)
@@ -1,3 +1,11 @@
+2000-07-09  Nick Duffek  <nsd@redhat.com>
+
+       * gdb.c++/misc.cc (class ClassParam, class_param): Define.
+       (use_methods): New function.
+       (main): Call use_methods().
+       * gdb.c++/classes.exp (test_method_param_class): New procedure.
+       (do_tests): Call test_method_param_class.
+
 2000-07-09  Nick Duffek  <nsd@redhat.com>
 
        * gdb.c++/classes.exp (test_nonexistant_members): Fix name
index 8a0b14807c0456af767290bf9dcd7c718cd0d975..9faa2fdd8c22815549ede7cd31ce81cab1aa6fa0 100644 (file)
@@ -569,6 +569,30 @@ proc test_nonexistent_members {} {
     gdb_test "print g_D.p" "There is no member( or method|) named p." "print g_D.p should be error"
 }
 
+#
+# Call a method that expects a base class parameter with base, inherited,
+# and unrelated class arguments.
+#
+
+proc test_method_param_class {} {
+    gdb_test "call class_param.Aptr_a (&g_A)" ".* = 1" "base class param->a"
+    gdb_test "call class_param.Aptr_x (&g_A)" ".* = 2" "base class param->x"
+    gdb_test "call class_param.Aptr_a (&g_B)" ".* = 3" "inherited class param->a"
+    gdb_test "call class_param.Aptr_x (&g_B)" ".* = 4" "inherited class param->x"
+    gdb_test "call class_param.Aref_a (g_A)" ".* = 1" "base class (&param)->a"
+    gdb_test "call class_param.Aref_x (g_A)" ".* = 2" "base class (&param)->x"
+    gdb_test "call class_param.Aref_a (g_B)" ".* = 3" "inherited class (&param)->a"
+    gdb_test "call class_param.Aref_x (g_B)" ".* = 4" "inherited class (&param)->x"
+    gdb_test "call class_param.Aval_a (g_A)" ".* = 1" "base class param.a"
+    gdb_test "call class_param.Aval_x (g_A)" ".* = 2" "base class param.x"
+    gdb_test "call class_param.Aval_a (g_B)" ".* = 3" "inherited class param.a"
+    gdb_test "call class_param.Aval_x (g_B)" ".* = 4" "inherited class param.x"
+
+    gdb_test "call class_param.Aptr_a (&foo)" "Cannot resolve .*" "unrelated class *param"
+    gdb_test "call class_param.Aref_a (foo)" "Cannot resolve .*" "unrelated class &param"
+    gdb_test "call class_param.Aval_a (foo)" "Cannot resolve .*" "unrelated class param"
+}
+
 #
 # Examine a class with an enum field.
 #
@@ -806,6 +830,7 @@ proc do_tests {} {
        test_non_inherited_member_access
        test_wrong_class_members
        test_nonexistent_members
+       test_method_param_class
     }
 
     gdb_breakpoint enums2
index e4c3520df4f2487393e67fc5d3be604878ec9969..caa54511838b33c827ce1f88f6ae956bc6e85ebd 100644 (file)
@@ -427,6 +427,18 @@ void enums1 ()
   obj_with_enum.priv_enum = ClassWithEnum::green;
 }
 
+class ClassParam {
+public:
+  int Aptr_a (A *a) { return a->a; }
+  int Aptr_x (A *a) { return a->x; }
+  int Aref_a (A &a) { return a.a; }
+  int Aref_x (A &a) { return a.x; }
+  int Aval_a (A a) { return a.a; }
+  int Aval_x (A a) { return a.x; }
+};
+
+ClassParam class_param;
+
 class Contains_static_instance
 {
  public:
@@ -514,6 +526,18 @@ void dummy()
   v_bool_array[1] = v_bool;
 }
 
+void use_methods ()
+{
+  /* Refer to methods so that they don't get optimized away. */
+  int i;
+  i = class_param.Aptr_a (&g_A);
+  i = class_param.Aptr_x (&g_A);
+  i = class_param.Aref_a (g_A);
+  i = class_param.Aref_x (g_A);
+  i = class_param.Aval_a (g_A);
+  i = class_param.Aval_x (g_A);
+}
+
 
 int
 main()
@@ -536,6 +560,8 @@ main()
   /* Make sure the AIX linker doesn't remove the variable.  */
   v_tagless.one = 5;
 
+  use_methods ();
+
   return foo.*pmi;
 }