/* Some code common to C and ObjC front ends.
Copyright (C) 2001, 2002, 2003, 2004, 2005, 2007,
- 2009 Free Software Foundation, Inc.
+ 2009, 2010 Free Software Foundation, Inc.
This file is part of GCC.
#include "config.h"
#include "system.h"
#include "coretypes.h"
-#include "tm.h"
#include "tree.h"
-#include "rtl.h"
-#include "insn-config.h"
-#include "integrate.h"
#include "c-tree.h"
#include "intl.h"
-#include "c-pretty-print.h"
-#include "function.h"
+#include "c-family/c-pretty-print.h"
#include "flags.h"
-#include "toplev.h"
#include "diagnostic.h"
-#include "tree-inline.h"
-#include "ggc.h"
+#include "tree-pretty-print.h"
#include "langhooks.h"
-#include "tree-mudflap.h"
-#include "target.h"
#include "c-objc-common.h"
static bool c_tree_printer (pretty_printer *, text_info *, const char *,
%E: an identifier or expression,
%F: a function declaration,
%T: a type.
+ %V: a list of type qualifiers from a tree.
+ %v: an explicit list of type qualifiers
+ %#v: an explicit list of type qualifiers of a function type.
- These format specifiers form a subset of the format specifiers set used
- by the C++ front-end.
Please notice when called, the `%' part was already skipped by the
diagnostic machinery. */
static bool
c_tree_printer (pretty_printer *pp, text_info *text, const char *spec,
int precision, bool wide, bool set_locus, bool hash)
{
- tree t = va_arg (*text->args_ptr, tree);
+ tree t = NULL_TREE;
tree name;
c_pretty_printer *cpp = (c_pretty_printer *) pp;
pp->padding = pp_none;
- if (precision != 0 || wide || hash)
+ if (precision != 0 || wide)
return false;
- if (set_locus && text->locus)
- *text->locus = DECL_SOURCE_LOCATION (t);
+ if (*spec == 'K')
+ {
+ percent_K_format (text);
+ return true;
+ }
+
+ if (*spec != 'v')
+ {
+ t = va_arg (*text->args_ptr, tree);
+ if (set_locus && text->locus)
+ *text->locus = DECL_SOURCE_LOCATION (t);
+ }
switch (*spec)
{
pp_expression (cpp, t);
return true;
+ case 'V':
+ pp_c_type_qualifier_list (cpp, t);
+ return true;
+
+ case 'v':
+ pp_c_cv_qualifiers (cpp, va_arg (*text->args_ptr, int), hash);
+ return true;
+
default:
return false;
}
void
c_initialize_diagnostics (diagnostic_context *context)
{
- pretty_printer *base = context->printer;
- c_pretty_printer *pp = XNEW (c_pretty_printer);
+ pretty_printer *base;
+ c_pretty_printer *pp;
+
+ c_common_initialize_diagnostics (context);
+
+ base = context->printer;
+ pp = XNEW (c_pretty_printer);
memcpy (pp_base (pp), base, sizeof (pretty_printer));
pp_c_pretty_printer_init (pp);
context->printer = (pretty_printer *) pp;