aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.cp/ref-params.cc
diff options
context:
space:
mode:
authorDaniel Jacobowitz <drow@false.org>2006-07-13 04:31:42 +0000
committerDaniel Jacobowitz <drow@false.org>2006-07-13 04:31:42 +0000
commitfb933624929d0716f25db8d1096557e7f5e72440 (patch)
treee216dad7d0d61e68304e7ab329fe58c5c850799b /gdb/testsuite/gdb.cp/ref-params.cc
parentd49c44d5f19771810279034d93060d13c13f0937 (diff)
downloadgdb-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.cc80
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. */
+}