--- gdb/testsuite/gdb.cp/call-c.cc.orig 2008-05-08 14:01:57.000000000 -0700 +++ gdb/testsuite/gdb.cp/call-c.cc 2008-05-08 13:40:09.851165000 -0700 @@ -21,7 +21,18 @@ int func(int x) return x; } +struct Foo { + Foo() : x_(1) { } + int func() const { return x_; } + private: + int x_; +}; + int main() { + Foo f; + Foo *pf = &f; + Foo* &rf = pf; + rf->func(); return func(0); } --- gdb/testsuite/gdb.cp/call-c.exp.orig 2008-05-08 14:01:57.000000000 -0700 +++ gdb/testsuite/gdb.cp/call-c.exp 2008-05-08 13:54:14.497857000 -0700 @@ -44,3 +44,6 @@ gdb_load ${binfile} runto_main gdb_test "print foo(1)" "\\\$$decimal = 1" +send_gdb "next\nnext\nnext\n" +gdb_expect -re "$gdb_prompt $" +gdb_test "print rf->func()" "\\\$$decimal = 1" --- gdb/valops.c.orig 2008-05-08 14:01:57.000000000 -0700 +++ gdb/valops.c 2008-05-08 13:57:14.320875000 -0700 @@ -1919,7 +1919,8 @@ find_overload_match (struct type **arg_t 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_PTR + || (TYPE_CODE (value_type (*objp)) == TYPE_CODE_REF))) { temp = value_addr (temp); }