aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2009-02-02 21:50:13 +0000
committerTom Tromey <tromey@redhat.com>2009-02-02 21:50:13 +0000
commita42952252f6cfaf3b84072997bd187c39b2088bb (patch)
tree9840ada8cc7928d2d48160f6ffb437564cfcff47
parent72a80a16c635aeea4fc0e13364de95cc9b265170 (diff)
downloadfsf-binutils-gdb-a42952252f6cfaf3b84072997bd187c39b2088bb.zip
fsf-binutils-gdb-a42952252f6cfaf3b84072997bd187c39b2088bb.tar.gz
fsf-binutils-gdb-a42952252f6cfaf3b84072997bd187c39b2088bb.tar.bz2
gdb
PR exp/9059: * valops.c (find_overload_match): Follow typedefs before taking address of object argument. gdb/testsuite PR exp/9059: * gdb.cp/call-c.exp: Add regression test. * gdb.cp/call-c.cc (FooHandle): New typedef. (main): New variable 'handle'.
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/testsuite/ChangeLog7
-rw-r--r--gdb/testsuite/gdb.cp/call-c.cc3
-rw-r--r--gdb/testsuite/gdb.cp/call-c.exp3
-rw-r--r--gdb/valops.c8
5 files changed, 24 insertions, 3 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 416b389..53059c5 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2009-02-02 Tom Tromey <tromey@redhat.com>
+
+ PR exp/9059:
+ * valops.c (find_overload_match): Follow typedefs before taking
+ address of object argument.
+
2009-02-01 Doug Evans <dje@google.com>
* target.h (target_waitstatus_to_string): Declare.
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 3b3735c..55f2d0e 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2009-02-02 Tom Tromey <tromey@redhat.com>
+
+ PR exp/9059:
+ * gdb.cp/call-c.exp: Add regression test.
+ * gdb.cp/call-c.cc (FooHandle): New typedef.
+ (main): New variable 'handle'.
+
2009-01-30 Vladimir Prus <vladimir@codesourcery.com>
* lib/mi-support.exp (et_mi_thread_list)
diff --git a/gdb/testsuite/gdb.cp/call-c.cc b/gdb/testsuite/gdb.cp/call-c.cc
index 1c54b89..cc90993 100644
--- a/gdb/testsuite/gdb.cp/call-c.cc
+++ b/gdb/testsuite/gdb.cp/call-c.cc
@@ -28,11 +28,14 @@ struct Foo {
int x_;
};
+typedef Foo *FooHandle;
+
int main()
{
Foo f;
Foo *pf = &f;
Foo* &rf = pf;
+ FooHandle handle = pf;
rf->func(); /* set breakpoint here */
return func(0);
}
diff --git a/gdb/testsuite/gdb.cp/call-c.exp b/gdb/testsuite/gdb.cp/call-c.exp
index cb3b945..a80f4dd 100644
--- a/gdb/testsuite/gdb.cp/call-c.exp
+++ b/gdb/testsuite/gdb.cp/call-c.exp
@@ -49,3 +49,6 @@ gdb_test "b [gdb_get_line_number {breakpoint here} ${testfile}.cc ]" \
gdb_test "print foo(1)" "\\\$$decimal = 1"
gdb_test "continue" ".*breakpoint here.*" "continue to bp"
gdb_test "print rf->func()" "\\\$$decimal = 1"
+
+# Regression test for method call via a typedef.
+gdb_test "print handle->func()" "\\\$$decimal = 1"
diff --git a/gdb/valops.c b/gdb/valops.c
index 1c724d3..09be6dd 100644
--- a/gdb/valops.c
+++ b/gdb/valops.c
@@ -2173,9 +2173,11 @@ find_overload_match (struct type **arg_types, int nargs,
if (objp)
{
- if (TYPE_CODE (value_type (temp)) != TYPE_CODE_PTR
- && (TYPE_CODE (value_type (*objp)) == TYPE_CODE_PTR
- || TYPE_CODE (value_type (*objp)) == TYPE_CODE_REF))
+ struct type *temp_type = check_typedef (value_type (temp));
+ struct type *obj_type = check_typedef (value_type (*objp));
+ if (TYPE_CODE (temp_type) != TYPE_CODE_PTR
+ && (TYPE_CODE (obj_type) == TYPE_CODE_PTR
+ || TYPE_CODE (obj_type) == TYPE_CODE_REF))
{
temp = value_addr (temp);
}