From 329719ec1d3002c2e148acbf7287fee1dcd531c7 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Tue, 22 Sep 2009 17:39:54 +0000 Subject: [PATCH] gdb PR python/10680: * eval.c (evaluate_subexp_standard) : Handle internal functions in EVAL_AVOID_SIDE_EFFECTS case. gdb/testsuite * gdb.python/py-function.exp: Add regression tests. --- gdb/ChangeLog | 6 ++++++ gdb/eval.c | 15 +++++++++++---- gdb/testsuite/ChangeLog | 4 ++++ gdb/testsuite/gdb.python/py-function.exp | 13 +++++++++++++ 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 + + PR python/10680: + * eval.c (evaluate_subexp_standard) : Handle internal + functions in EVAL_AVOID_SIDE_EFFECTS case. + 2009-09-22 Jie Zhang * 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 + + * gdb.python/py-function.exp: Add regression tests. + 2009-09-21 Keith Seitz * 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 ||" -- 2.7.4