This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[patch] pr11594
- From: Chris Moller <cmoller at redhat dot com>
- To: "gdb-patches at sourceware dot org" <gdb-patches at sourceware dot org>
- Date: Tue, 22 Jun 2010 08:11:33 -0400
- Subject: [patch] pr11594
I'm fairly sure that the
type2 = check_typedef (type1);
at valarith.c:277 is a typo and treally should be
type2 = check_typedef (type2);
but, with gdb, who knows?
? testsuite/gdb.cp/pr11594
Index: ChangeLog
===================================================================
RCS file: /cvs/src/src/gdb/ChangeLog,v
retrieving revision 1.11916
diff -u -r1.11916 ChangeLog
--- ChangeLog 22 Jun 2010 00:09:08 -0000 1.11916
+++ ChangeLog 22 Jun 2010 02:38:33 -0000
@@ -1,3 +1,10 @@
+2010-06-21 Chris Moller <cmoller@redhat.com>
+
+ * eval.c (evaluate_subexp_standard): Add a test for an overloaded
+ comma operator.
+ * valarith.c (binop_types_user_defined_p): Fix a typo.
+ (value_x_binop): Synthesise an "operator," function name.
+
2010-06-21 Doug Evans <dje@google.com>
* i386-tdep.h (i386_displaced_step_copy_insn): Declare.
Index: eval.c
===================================================================
RCS file: /cvs/src/src/gdb/eval.c,v
retrieving revision 1.136
diff -u -r1.136 eval.c
--- eval.c 7 Jun 2010 16:11:31 -0000 1.136
+++ eval.c 22 Jun 2010 02:38:37 -0000
@@ -2421,8 +2421,23 @@
return value_repeat (arg1, longest_to_int (value_as_long (arg2)));
case BINOP_COMMA:
- evaluate_subexp (NULL_TYPE, exp, pos, noside);
- return evaluate_subexp (NULL_TYPE, exp, pos, noside);
+ arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
+ arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
+ if (noside == EVAL_SKIP)
+ goto nosideret;
+ if (current_language->la_language == language_cplus
+ && binop_user_defined_p (op, arg1, arg2))
+ {
+ struct value *rc;
+
+ rc = value_x_binop (arg1, arg2, op, OP_NULL, noside);
+ if (rc != NULL)
+ return rc;
+ else
+ return arg2;
+ }
+ else
+ return arg2;
case UNOP_PLUS:
arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
Index: valarith.c
===================================================================
RCS file: /cvs/src/src/gdb/valarith.c,v
retrieving revision 1.85
diff -u -r1.85 valarith.c
--- valarith.c 7 Jun 2010 16:11:31 -0000 1.85
+++ valarith.c 22 Jun 2010 02:38:38 -0000
@@ -274,7 +274,7 @@
if (TYPE_CODE (type1) == TYPE_CODE_REF)
type1 = check_typedef (TYPE_TARGET_TYPE (type1));
- type2 = check_typedef (type1);
+ type2 = check_typedef (type2);
if (TYPE_CODE (type2) == TYPE_CODE_REF)
type2 = check_typedef (TYPE_TARGET_TYPE (type2));
@@ -418,6 +418,9 @@
ptr = tstr + 8;
switch (op)
{
+ case BINOP_COMMA:
+ strcpy (ptr, ",");
+ break;
case BINOP_ADD:
strcpy (ptr, "+");
break;
Index: testsuite/ChangeLog
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/ChangeLog,v
retrieving revision 1.2344
diff -u -r1.2344 ChangeLog
--- testsuite/ChangeLog 22 Jun 2010 00:02:07 -0000 1.2344
+++ testsuite/ChangeLog 22 Jun 2010 02:38:55 -0000
@@ -1,3 +1,9 @@
+2010-06-21 Chris Moller <moller@mollerware.com>
+
+ * gdb.cp/Makefile.in (EXECUTABLES): Added pr11594.
+ * gdb.cp/pr11594.cc: New File.
+ * gdb.cp/pr11594.exp: New File.
+
2010-06-21 Doug Evans <dje@google.com>
* gdb.gdb/selftest.exp: Remove support for gpl v1 and v2 gdb's.
Index: testsuite/gdb.cp/Makefile.in
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.cp/Makefile.in,v
retrieving revision 1.11
diff -u -r1.11 Makefile.in
--- testsuite/gdb.cp/Makefile.in 21 Apr 2010 17:33:54 -0000 1.11
+++ testsuite/gdb.cp/Makefile.in 22 Jun 2010 02:38:56 -0000
@@ -5,7 +5,7 @@
derivation inherit local member-ptr method misc \
overload ovldbreak ref-typ ref-typ2 templates userdef virtfunc namespace \
ref-types ref-params method2 pr9594 gdb2495 virtfunc2 pr9067 \
- pr1072 pr10687 pr9167
+ pr1072 pr10687 pr9167 pr11594
all info install-info dvi install uninstall installcheck check:
@echo "Nothing to be done for $@..."
Index: testsuite/gdb.cp/pr11594.cc
===================================================================
RCS file: testsuite/gdb.cp/pr11594.cc
diff -N testsuite/gdb.cp/pr11594.cc
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ testsuite/gdb.cp/pr11594.cc 22 Jun 2010 02:38:57 -0000
@@ -0,0 +1,46 @@
+class complx
+{
+ double real, imag;
+public:
+ complx( double real = 0., double imag = 0.); // constructor
+ complx operator,(const complx&) const; // operator,()
+};
+
+// define constructor
+complx::complx( double r, double i )
+{
+ real = r; imag = i;
+}
+
+// define overloaded , (comma) operator
+complx
+complx::operator, (const complx& c) const
+{
+ complx result;
+ result.real = (this->real + c.real);
+ result.imag = (this->imag - c.imag);
+ return result;
+}
+
+int
+main()
+{
+ complx x(4,5);
+ complx y(6,7);
+ complx z;
+
+ return 0; // break
+}
+
+#if 0
+(gdb) p x,y
+$1 = {real = 10, imag = -2}
+(gdb) p y,x
+$2 = {real = 10, imag = 2}
+(gdb) set variable z = x,y
+(gdb) p z
+$3 = {real = 4, imag = 5}
+(gdb) set variable z = (x,y)
+(gdb) p z
+$4 = {real = 10, imag = -2}
+#endif
Index: testsuite/gdb.cp/pr11594.exp
===================================================================
RCS file: testsuite/gdb.cp/pr11594.exp
diff -N testsuite/gdb.cp/pr11594.exp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ testsuite/gdb.cp/pr11594.exp 22 Jun 2010 02:38:57 -0000
@@ -0,0 +1,37 @@
+#Copyright 2010 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 3 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, see <http://www.gnu.org/licenses/>.
+
+set testfile pr11594
+set srcfile ${testfile}.cc
+if [prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}] {
+ return -1
+}
+
+if ![runto_main] then {
+ fail "Can't run to main"
+ return
+}
+
+gdb_breakpoint [gdb_get_line_number "break"]
+gdb_continue_to_breakpoint "break"
+
+gdb_test "p x,y" "{real = 10, imag = -2}.*"
+
+gdb_test "set variable z = x,y" ""
+gdb_test "p z" "{real = 4, imag = 5}"
+
+gdb_test "set variable z = (x,y)" ""
+gdb_test "p z" "{real = 10, imag = -2}"
+
1c1
< Test Run By moller on Mon Jun 21 21:38:39 2010
---
> Test Run By moller on Mon Jun 21 22:12:55 2010
12245a12246,12252
> Running ../../../src/gdb/testsuite/gdb.cp/pr11594.exp ...
> PASS: gdb.cp/pr11594.exp: continue to breakpoint: break
> PASS: gdb.cp/pr11594.exp: p x,y
> PASS: gdb.cp/pr11594.exp: set variable z = x,y
> PASS: gdb.cp/pr11594.exp: p z
> PASS: gdb.cp/pr11594.exp: set variable z = (x,y)
> PASS: gdb.cp/pr11594.exp: p z
16610c16617
< KFAIL: gdb.threads/watchthreads2.exp: gdb can drop watchpoints in multithreaded app (PRMS: gdb/10116)
---
> PASS: gdb.threads/watchthreads2.exp: all threads incremented x
16873c16880
< # of expected passes 15991
---
> # of expected passes 15998