diff options
author | Daniel Jacobowitz <drow@false.org> | 2006-07-13 04:31:42 +0000 |
---|---|---|
committer | Daniel Jacobowitz <drow@false.org> | 2006-07-13 04:31:42 +0000 |
commit | fb933624929d0716f25db8d1096557e7f5e72440 (patch) | |
tree | e216dad7d0d61e68304e7ab329fe58c5c850799b /gdb/testsuite/gdb.cp/ref-params.cc | |
parent | d49c44d5f19771810279034d93060d13c13f0937 (diff) | |
download | gdb-fb933624929d0716f25db8d1096557e7f5e72440.zip gdb-fb933624929d0716f25db8d1096557e7f5e72440.tar.gz gdb-fb933624929d0716f25db8d1096557e7f5e72440.tar.bz2 |
gdb/
* infcall.c (value_arg_coerce): Use value_cast_pointers for
references. Avoid value_cast to a reference type. Don't silently
convert pointers to references.
* valops.c (value_cast_pointers): New, based on value_cast.
(value_cast): Use it. Reject reference types.
(value_ref): New.
(typecmp): Use it.
* value.h (value_cast_pointers, value_ref): New prototypes.
gdb/testsuite/
* gdb.cp/ref-params.exp: New test.
* gdb.cp/ref-params.cc: New source file.
* gdb.cp/Makefile.in (EXECUTABLES): Add ref-params.
Diffstat (limited to 'gdb/testsuite/gdb.cp/ref-params.cc')
-rw-r--r-- | gdb/testsuite/gdb.cp/ref-params.cc | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.cp/ref-params.cc b/gdb/testsuite/gdb.cp/ref-params.cc new file mode 100644 index 0000000..9ccfe09 --- /dev/null +++ b/gdb/testsuite/gdb.cp/ref-params.cc @@ -0,0 +1,80 @@ +/* This test script is part of GDB, the GNU debugger. + + Copyright 2006 + Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +/* Author: Paul N. Hilfinger, AdaCore Inc. */ + +struct Parent { + Parent (int id0) : id(id0) { } + int id; +}; + +struct Child : public Parent { + Child (int id0) : Parent(id0) { } +}; + +int f1(Parent& R) +{ + return R.id; /* Set breakpoint marker3 here. */ +} + +int f2(Child& C) +{ + return f1(C); /* Set breakpoint marker2 here. */ +} + +struct OtherParent { + OtherParent (int other_id0) : other_id(other_id0) { } + int other_id; +}; + +struct MultiChild : public Parent, OtherParent { + MultiChild (int id0) : Parent(id0), OtherParent(id0 * 2) { } +}; + +int mf1(OtherParent& R) +{ + return R.other_id; +} + +int mf2(MultiChild& C) +{ + return mf1(C); +} + +int main(void) +{ + Child Q(42); + Child& QR = Q; + + #ifdef usestubs + set_debug_traps(); + breakpoint(); + #endif + + /* Set breakpoint marker1 here. */ + + f2(Q); + f2(QR); + + MultiChild MQ(53); + MultiChild& MQR = MQ; + + mf2(MQ); /* Set breakpoint MQ here. */ +} |