diff options
author | jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-07-01 08:52:33 +0000 |
---|---|---|
committer | jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-07-01 08:52:33 +0000 |
commit | 31266980975ce05c3f41e92e112f873c9cfa9a05 (patch) | |
tree | 5e14fad8701c2b2a0d71a2e08df216891b59d315 /gcc/c-objc-common.c | |
parent | 52d6bee4af7c047290440bcef095b2b11b5280f4 (diff) | |
download | gcc-31266980975ce05c3f41e92e112f873c9cfa9a05.tar.gz |
PR c/1027
* c-lang.c (c_initialize_diagnostics): Move from here ...
* c-objc-common.c: ... to here. Include "c-pretty-print.h".
(c_tree_printer): Use pretty-printer to format %T.
* c-pretty-print.c (pp_c_specifier_qualifier_list): Include space
before '*' if not C++.
(pp_c_direct_abstract_declarator): Don't try to print array upper
bound for flexible array members.
* c-tree.h: Include "diagnostic.h".
(c_initialize_diagnostics): Declare.
* objc/objc-lang.c (LANG_HOOKS_INITIALIZE_DIAGNOSTICS): Define.
* c-format.c (format_type_warning): New function. Improve
diagnostics for incorrect format argument types.
(check_format_types): Use it. Add two parameters. Use the
TYPE_MAIN_VARIANT of wanted_type.
(check_format_info_main): Pass new parameters to
check_format_types.
(struct format_wanted_type): Update comment.
testsuite:
* gcc.dg/Wswitch-enum.c, gcc.dg/Wswitch.c,
gcc.dg/format/branch-1.c, gcc.dg/format/diag-1.c,
gcc.dg/format/multattr-3.c, gcc.dg/format/xopen-1.c: Update
expected warning text.
* gcc.dg/format/diag-2.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@83965 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/c-objc-common.c')
-rw-r--r-- | gcc/c-objc-common.c | 39 |
1 files changed, 32 insertions, 7 deletions
diff --git a/gcc/c-objc-common.c b/gcc/c-objc-common.c index 293884af7f6..1ede9c337a6 100644 --- a/gcc/c-objc-common.c +++ b/gcc/c-objc-common.c @@ -27,6 +27,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include "insn-config.h" #include "integrate.h" #include "c-tree.h" +#include "c-pretty-print.h" #include "function.h" #include "flags.h" #include "toplev.h" @@ -242,7 +243,10 @@ static bool c_tree_printer (pretty_printer *pp, text_info *text) { tree t = va_arg (*text->args_ptr, tree); + tree name; const char *n = "({anonymous})"; + c_pretty_printer *cpp = (c_pretty_printer *) pp; + pp->padding = pp_none; switch (*text->format_spec) { @@ -254,14 +258,22 @@ c_tree_printer (pretty_printer *pp, text_info *text) case 'T': if (TYPE_P (t)) - t = TYPE_NAME (t); - if (t && TREE_CODE (t) == TYPE_DECL) + name = TYPE_NAME (t); + else + abort (); + if (name && TREE_CODE (name) == TYPE_DECL) { - if (DECL_NAME (t)) - n = lang_hooks.decl_printable_name (t, 2); + if (DECL_NAME (name)) + pp_string (cpp, lang_hooks.decl_printable_name (name, 2)); + else + pp_type_id (cpp, t); + return true; + } + else + { + pp_type_id (cpp, t); + return true; } - else if (t) - n = IDENTIFIER_POINTER (t); break; case 'E': @@ -275,7 +287,7 @@ c_tree_printer (pretty_printer *pp, text_info *text) return false; } - pp_string (pp, n); + pp_string (cpp, n); return true; } @@ -313,3 +325,16 @@ has_c_linkage (tree decl ATTRIBUTE_UNUSED) { return true; } + +void +c_initialize_diagnostics (diagnostic_context *context) +{ + pretty_printer *base = context->printer; + c_pretty_printer *pp = xmalloc (sizeof (c_pretty_printer)); + memcpy (pp_base (pp), base, sizeof (pretty_printer)); + pp_c_pretty_printer_init (pp); + context->printer = (pretty_printer *) pp; + + /* It is safe to free this object because it was previously malloc()'d. */ + free (base); +} |