diff options
author | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-09-27 07:24:58 +0000 |
---|---|---|
committer | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-09-27 07:24:58 +0000 |
commit | b8c23db329da6afaebde201237f25c583ba61885 (patch) | |
tree | da9ad83a363c4d770588541c6c1fc6b8fc3e0b7a /gcc/pretty-print.c | |
parent | 8fdca00ada80224bbb584a12e7c5ca8ee333b905 (diff) | |
download | gcc-b8c23db329da6afaebde201237f25c583ba61885.tar.gz |
* builtins.c (expand_builtin, expand_builtin_object_size,
expand_builtin_memory_chk, maybe_emit_chk_warning,
maybe_emit_sprintf_chk_warning): Use new %K format string specifier
for diagnostics.
* expr.c (expand_expr_real_1): Likewise.
* langhooks-def.h (struct diagnostic_info): Add forward decl.
(lhd_print_error_function): Add third argument.
* langhooks.h (struct diagnostic_info): Add forward decl.
(struct lang_hooks): Add third argument to print_error_function.
* diagnostic.h (diagnostic_info): Add abstract_origin field.
(diagnostic_last_function_changed, diagnostic_set_last_function): Add
second argument.
(diagnostic_report_current_function): Likewise.
* toplev.c (announce_function): Pass NULL as second argument to
diagnostic_set_last_function.
* diagnostic.c (diagnostic_report_current_function): Add second
argument, pass it as third argument to lang_hooks.print_error_function.
(default_diagnostic_starter): Pass DIAGNOSTIC as second argument
to diagnostic_report_current_function.
(diagnostic_report_diagnostic): Initialize diagnostic->abstract_origin
and message.abstract_origin.
(verbatim): Initialize abstract_origin.
* pretty-print.h (text_info): Add abstract_origin field.
* pretty-print.c (pp_base_format): Handle %K.
* langhooks.c (lhd_print_error_function): Add third argument. If
diagnostic->abstract_origin, print virtual backtrace.
* c-format.c (gcc_diag_char_table, gcc_tdiag_char_table,
gcc_cdiag_char_table, gcc_cxxdiag_char_table): Support %K.
(init_dynamic_diag_info): Likewise.
cp/
* error.c (cxx_print_error_function): Add third argument, pass
it over to lhd_print_error_function.
(cp_print_error_function): If diagnostic->abstract_origin, print
virtual backtrace.
* cp-tree.h (struct diagnostic_info): New forward decl.
(cxx_print_error_function): Add third argument.
java/
* lang.c (java_print_error_function): Add third argument.
testsuite/
* lib/prune.exp: Prune also "^In function .*$" lines and
"^ inlined from .*$" lines.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@128830 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/pretty-print.c')
-rw-r--r-- | gcc/pretty-print.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/gcc/pretty-print.c b/gcc/pretty-print.c index 8f55df29a24..c4de15dc21a 100644 --- a/gcc/pretty-print.c +++ b/gcc/pretty-print.c @@ -187,6 +187,7 @@ pp_base_indent (pretty_printer *pp) %Ns: likewise, but length specified as constant in the format string. %H: location_t. %J: a decl tree, from which DECL_SOURCE_LOCATION will be recorded. + %K: a statement, from which EXPR_LOCATION and TREE_BLOCK will be recorded. Flag 'q': quote formatted text (must come immediately after '%'). Arguments can be used sequentially, or through %N$ resp. *N$ @@ -486,6 +487,33 @@ pp_base_format (pretty_printer *pp, text_info *text) } break; + case 'K': + { + tree t = va_arg (*text->args_ptr, tree), block; + gcc_assert (text->locus != NULL); + *text->locus = EXPR_LOCATION (t); + gcc_assert (text->abstract_origin != NULL); + block = TREE_BLOCK (t); + *text->abstract_origin = NULL; + while (block + && TREE_CODE (block) == BLOCK + && BLOCK_ABSTRACT_ORIGIN (block)) + { + tree ao = BLOCK_ABSTRACT_ORIGIN (block); + + while (TREE_CODE (ao) == BLOCK && BLOCK_ABSTRACT_ORIGIN (ao)) + ao = BLOCK_ABSTRACT_ORIGIN (ao); + + if (TREE_CODE (ao) == FUNCTION_DECL) + { + *text->abstract_origin = block; + break; + } + block = BLOCK_SUPERCONTEXT (block); + } + } + break; + case '.': { int n; |