aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2009-09-22 17:39:54 +0000
committerTom Tromey <tromey@redhat.com>2009-09-22 17:39:54 +0000
commit329719ec1d3002c2e148acbf7287fee1dcd531c7 (patch)
tree6bd836db9acc4a8708ba39578e5ac0489e572e8d
parent074d710de74bfa99c9fb9ac2c3013508149d16e5 (diff)
downloadfsf-binutils-gdb-329719ec1d3002c2e148acbf7287fee1dcd531c7.zip
fsf-binutils-gdb-329719ec1d3002c2e148acbf7287fee1dcd531c7.tar.gz
fsf-binutils-gdb-329719ec1d3002c2e148acbf7287fee1dcd531c7.tar.bz2
gdb
PR python/10680: * eval.c (evaluate_subexp_standard) <do_call_it>: Handle internal functions in EVAL_AVOID_SIDE_EFFECTS case. gdb/testsuite * gdb.python/py-function.exp: Add regression tests.
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/eval.c15
-rw-r--r--gdb/testsuite/ChangeLog4
-rw-r--r--gdb/testsuite/gdb.python/py-function.exp13
4 files changed, 34 insertions, 4 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index f9e94b6..51cee9a 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2009-09-22 Tom Tromey <tromey@redhat.com>
+
+ PR python/10680:
+ * eval.c (evaluate_subexp_standard) <do_call_it>: Handle internal
+ functions in EVAL_AVOID_SIDE_EFFECTS case.
+
2009-09-22 Jie Zhang <jie.zhang@analog.com>
* MAINTAINERS: Add myself under Write After Approval.
diff --git a/gdb/eval.c b/gdb/eval.c
index 7e41d39..2926465 100644
--- a/gdb/eval.c
+++ b/gdb/eval.c
@@ -1513,11 +1513,18 @@ evaluate_subexp_standard (struct type *expect_type,
gdb isn't asked for it's opinion (ie. through "whatis"),
it won't offer it. */
- struct type *ftype =
- TYPE_TARGET_TYPE (value_type (argvec[0]));
+ struct type *ftype = value_type (argvec[0]);
- if (ftype)
- return allocate_value (TYPE_TARGET_TYPE (value_type (argvec[0])));
+ if (TYPE_CODE (ftype) == TYPE_CODE_INTERNAL_FUNCTION)
+ {
+ /* We don't know anything about what the internal
+ function might return, but we have to return
+ something. */
+ return value_zero (builtin_type (exp->gdbarch)->builtin_int,
+ not_lval);
+ }
+ else if (TYPE_TARGET_TYPE (ftype))
+ return allocate_value (TYPE_TARGET_TYPE (ftype));
else
error (_("Expression of type other than \"Function returning ...\" used as function"));
}
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index ac6fbc2..b86f723 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2009-09-22 Tom Tromey <tromey@redhat.com>
+
+ * gdb.python/py-function.exp: Add regression tests.
+
2009-09-21 Keith Seitz <keiths@redhat.com>
* gdb.cp/cplusfuncs.exp (do_tests): Add check for proper error message
diff --git a/gdb/testsuite/gdb.python/py-function.exp b/gdb/testsuite/gdb.python/py-function.exp
index 7feca2b..30fde7d 100644
--- a/gdb/testsuite/gdb.python/py-function.exp
+++ b/gdb/testsuite/gdb.python/py-function.exp
@@ -77,3 +77,16 @@ gdb_py_test_multiple "input value-returning convenience function" \
"end" ""
gdb_test "print \$double (1)" "= 2" "call value-returning function"
+
+gdb_py_test_multiple "input int-returning function" \
+ "python" "" \
+ "class Yes(gdb.Function):" "" \
+ " def __init__(self):" "" \
+ " gdb.Function.__init__(self, 'yes')" "" \
+ " def invoke(self):" "" \
+ " return 1" "" \
+ "Yes ()" "" \
+ "end" ""
+
+gdb_test "print \$yes() && \$yes()" " = 1" "call yes with &&"
+gdb_test "print \$yes() || \$yes()" " = 1" "call yes with ||"