summaryrefslogtreecommitdiff
path: root/gcc/c-objc-common.c
diff options
context:
space:
mode:
authorjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>2004-07-01 08:52:33 +0000
committerjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>2004-07-01 08:52:33 +0000
commit31266980975ce05c3f41e92e112f873c9cfa9a05 (patch)
tree5e14fad8701c2b2a0d71a2e08df216891b59d315 /gcc/c-objc-common.c
parent52d6bee4af7c047290440bcef095b2b11b5280f4 (diff)
downloadgcc-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.c39
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);
+}