diff --git a/gdb/ChangeLog b/gdb/ChangeLog index d34b29a5c0..105c1dba5f 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2017-09-04 Pedro Alves + + * eval.c (evaluate_subexp_standard): : Extract + function name from symbol/minsym and pass it to + error_call_unknown_return_type. + 2017-09-04 Pedro Alves * ada-lang.c (resolve_subexp): Handle OP_VAR_MSYM_VALUE. diff --git a/gdb/eval.c b/gdb/eval.c index 457e280f6b..0e77f0ad14 100644 --- a/gdb/eval.c +++ b/gdb/eval.c @@ -716,6 +716,7 @@ evaluate_subexp_standard (struct type *expect_type, int save_pos1; struct symbol *function = NULL; char *function_name = NULL; + const char *var_func_name = NULL; pc = (*pos)++; op = exp->elts[pc].opcode; @@ -1545,6 +1546,17 @@ evaluate_subexp_standard (struct type *expect_type, } else { + if (op == OP_VAR_MSYM_VALUE) + { + symbol *sym = exp->elts[*pos + 2].symbol; + var_func_name = SYMBOL_PRINT_NAME (sym); + } + else if (op == OP_VAR_VALUE) + { + minimal_symbol *msym = exp->elts[*pos + 2].msymbol; + var_func_name = MSYMBOL_PRINT_NAME (msym); + } + argvec[0] = evaluate_subexp_with_coercion (exp, pos, noside); type = value_type (argvec[0]); if (type && TYPE_CODE (type) == TYPE_CODE_PTR) @@ -1761,7 +1773,7 @@ evaluate_subexp_standard (struct type *expect_type, return_type = expect_type; if (return_type == NULL) - error_call_unknown_return_type (NULL); + error_call_unknown_return_type (var_func_name); return allocate_value (return_type); } diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index c00c30038c..5457aa12f5 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2017-09-04 Pedro Alves + + * gdb.base/nodebug.exp: Test that ptype's error about functions + with unknown return type includes the function name too. + 2017-09-04 Pedro Alves * gdb.base/break-main-file-remove-fail.exp (test_remove_bp): Cast diff --git a/gdb/testsuite/gdb.base/nodebug.exp b/gdb/testsuite/gdb.base/nodebug.exp index 7bdf9ad766..da704f1037 100644 --- a/gdb/testsuite/gdb.base/nodebug.exp +++ b/gdb/testsuite/gdb.base/nodebug.exp @@ -204,14 +204,10 @@ if [runto inner] then { # This test is not as obscure as it might look. `p getenv ("TERM")' # is a real-world example, at least on many systems. - - gdb_test {p/c array_index("abcdef",2)} \ - "'array_index' has unknown return type; cast the call to its declared return type" - gdb_test {ptype array_index("abcdef",2)} \ - "function has unknown return type; cast the call to its declared return type" - gdb_test {whatis array_index("abcdef",2)} \ - "function has unknown return type; cast the call to its declared return type" - + foreach cmd {"p/c" "ptype" "whatis"} { + gdb_test "$cmd array_index(\"abcdef\",2)" \ + "'array_index' has unknown return type; cast the call to its declared return type" + } if [target_info exists gdb,cannot_call_functions] { unsupported "p/c (int) array_index(\"abcdef\",2)" } else {