ChangeLog: 2008-06-05 Paul Pluzhnikov PR gdb/1147 * gdb/valopts.c (find_overload_match): Handle references to pointers. testsuite/ChangeLog: 2008-06-05 Paul Pluzhnikov * gdb.cp/call-c.exp: Test for incorrect handling of reference to pointer. * gdb.cp/call-c.cc: Likewise. --- gdb/valops.c.orig 2008-06-05 13:53:24.000000000 -0700 +++ gdb/valops.c 2008-06-05 13:54:03.143468000 -0700 @@ -1972,7 +1972,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); } --- gdb/testsuite/gdb.cp/call-c.cc.orig 2008-05-08 14:01:57.000000000 -0700 +++ gdb/testsuite/gdb.cp/call-c.cc 2008-06-05 17:30:09.009890000 -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(); /* set breakpoint here */ 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-06-05 17:31:19.700025000 -0700 @@ -43,4 +43,9 @@ gdb_load ${binfile} runto_main +gdb_test "b [gdb_get_line_number {breakpoint here} ${testfile}.cc ]" \ + ".*Breakpoint .*call-c.*" + gdb_test "print foo(1)" "\\\$$decimal = 1" +gdb_test "continue" ".*breakpoint here.*" "continue to bp" +gdb_test "print rf->func()" "\\\$$decimal = 1"