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'.
This commit is contained in:
Tom Tromey 2009-02-02 21:50:13 +00:00
parent 72a80a16c6
commit a42952252f
5 changed files with 24 additions and 3 deletions

View File

@ -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.

View File

@ -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)

View File

@ -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);
}

View File

@ -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"

View File

@ -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);
}