mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-02 05:50:26 +08:00
In cp/error.c...
In cp/error.c, I separate the initialization of the diagnostic context from the initialization of the scratch pretty-printer (cxx_pp). This was suggested by Gabriel in the last review of the patch and now I realize it was a good idea. Now cxx_initialize_diagnostics is the equivalent version of c_initialize_diagnostics. To avoid having to make extern a bunch of functions, I moved it from cp-objcp-common.c to error.c. I moved the setting of diagnostic_format_decoder (global_dc) = c_tree_printer, from c_objc_common_init to c_initialize_diagnostics, and right after c_common_diagnostics_set_defaults. This mimics what is done in cxx_initialize_diagnostics. Moreover, in both c_initialize_diagnostics and cxx_initialize_diagnostics, the FE-specific pretty-printer is initialized first and then other settings are applied. This does not make a difference right now, but if in the future one wishes to touch something in the pretty-printer, it will not get overriden immediately. In fact, the code I removed in c_common_initialize_diagnostics, which sets line_cutoff to 80, is useless because the pretty-printer created here is actually never used, but overriden by the FE-specific pretty-printers. This also means that doc/invoke.texi was wrong. Finally, it is useless to set the maximum line length to 0 in the constructor of cxx_pretty_printer. It is the default anyway. gcc/c/ChangeLog: 2014-10-26 Manuel López-Ibáñez <manu@gcc.gnu.org> PR c++/53061 * c-objc-common.c (c_objc_common_init): Do not do diagnostics initialization here... (c_initialize_diagnostics): ... but here. Set defaults after building pretty-printer. gcc/ChangeLog: 2014-10-26 Manuel López-Ibáñez <manu@gcc.gnu.org> PR c++/53061 * doc/invoke.texi (fmessage-length): Update text to match reality. gcc/cp/ChangeLog: 2014-10-26 Manuel López-Ibáñez <manu@gcc.gnu.org> PR c++/53061 * cp-objcp-common.c: Do not include new. (cxx_initialize_diagnostics): Move from here to ... * error.c (cxx_initialize_diagnostics): : ... here. Move diagnostics initialization here from init_error. (cxx_pp): Use a real pointer not a macro. (init_error): Just initialize cxx_pp. * cxx-pretty-print.c (cxx_pretty_printer::cxx_pretty_printer): Do not set maximum line length. gcc/c-family/ChangeLog: 2014-10-26 Manuel López-Ibáñez <manu@gcc.gnu.org> PR c++/53061 * c-opts.c (c_common_diagnostics_set_defaults): Renamed from c_common_initialize_diagnostics. * c-common.h: Likewise. From-SVN: r216720
This commit is contained in:
parent
23487675cd
commit
d723bb7c75
@ -1,3 +1,8 @@
|
||||
2014-10-26 Manuel López-Ibáñez <manu@gcc.gnu.org>
|
||||
|
||||
PR c++/53061
|
||||
* doc/invoke.texi (fmessage-length): Update text to match reality.
|
||||
|
||||
2014-10-26 Richard Sandiford <richard.sandiford@arm.com>
|
||||
|
||||
* config/microblaze/microblaze.c: Include rtl-iter.h.
|
||||
|
@ -1,3 +1,10 @@
|
||||
2014-10-26 Manuel López-Ibáñez <manu@gcc.gnu.org>
|
||||
|
||||
PR c++/53061
|
||||
* c-opts.c (c_common_diagnostics_set_defaults): Renamed from
|
||||
c_common_initialize_diagnostics.
|
||||
* c-common.h: Likewise.
|
||||
|
||||
2014-10-24 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR c/56980
|
||||
|
@ -845,7 +845,7 @@ extern tree build_va_arg (location_t, tree, tree);
|
||||
|
||||
extern const unsigned int c_family_lang_mask;
|
||||
extern unsigned int c_common_option_lang_mask (void);
|
||||
extern void c_common_initialize_diagnostics (diagnostic_context *);
|
||||
extern void c_common_diagnostics_set_defaults (diagnostic_context *);
|
||||
extern bool c_common_complain_wrong_lang_p (const struct cl_option *);
|
||||
extern void c_common_init_options_struct (struct gcc_options *);
|
||||
extern void c_common_init_options (unsigned int, struct cl_decoded_option *);
|
||||
|
@ -178,21 +178,10 @@ c_diagnostic_finalizer (diagnostic_context *context,
|
||||
pp_newline_and_flush (context->printer);
|
||||
}
|
||||
|
||||
/* Common diagnostics initialization. */
|
||||
/* Common default settings for diagnostics. */
|
||||
void
|
||||
c_common_initialize_diagnostics (diagnostic_context *context)
|
||||
c_common_diagnostics_set_defaults (diagnostic_context *context)
|
||||
{
|
||||
/* This is conditionalized only because that is the way the front
|
||||
ends used to do it. Maybe this should be unconditional? */
|
||||
if (c_dialect_cxx ())
|
||||
{
|
||||
/* By default wrap lines at 80 characters. Is getenv
|
||||
("COLUMNS") preferable? */
|
||||
diagnostic_line_cutoff (context) = 80;
|
||||
/* By default, emit location information once for every
|
||||
diagnostic message. */
|
||||
diagnostic_prefixing_rule (context) = DIAGNOSTICS_SHOW_PREFIX_ONCE;
|
||||
}
|
||||
diagnostic_finalizer (context) = c_diagnostic_finalizer;
|
||||
context->opt_permissive = OPT_fpermissive;
|
||||
}
|
||||
|
@ -1,3 +1,11 @@
|
||||
2014-10-26 Manuel López-Ibáñez <manu@gcc.gnu.org>
|
||||
|
||||
PR c++/53061
|
||||
* c-objc-common.c (c_objc_common_init): Do not do diagnostics
|
||||
initialization here...
|
||||
(c_initialize_diagnostics): ... but here. Set defaults after
|
||||
building pretty-printer.
|
||||
|
||||
2014-10-23 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR c/63626
|
||||
|
@ -62,15 +62,7 @@ c_objc_common_init (void)
|
||||
{
|
||||
c_init_decl_processing ();
|
||||
|
||||
if (c_common_init () == false)
|
||||
return false;
|
||||
|
||||
/* These were not defined in the Objective-C front end, but I'm
|
||||
putting them here anyway. The diagnostic format decoder might
|
||||
want an enhanced ObjC implementation. */
|
||||
diagnostic_format_decoder (global_dc) = &c_tree_printer;
|
||||
|
||||
return true;
|
||||
return c_common_init ();
|
||||
}
|
||||
|
||||
/* Called during diagnostic message formatting process to print a
|
||||
@ -186,8 +178,6 @@ has_c_linkage (const_tree decl ATTRIBUTE_UNUSED)
|
||||
void
|
||||
c_initialize_diagnostics (diagnostic_context *context)
|
||||
{
|
||||
c_common_initialize_diagnostics (context);
|
||||
|
||||
pretty_printer *base = context->printer;
|
||||
c_pretty_printer *pp = XNEW (c_pretty_printer);
|
||||
context->printer = new (pp) c_pretty_printer ();
|
||||
@ -195,6 +185,9 @@ c_initialize_diagnostics (diagnostic_context *context)
|
||||
/* It is safe to free this object because it was previously XNEW()'d. */
|
||||
base->~pretty_printer ();
|
||||
XDELETE (base);
|
||||
|
||||
c_common_diagnostics_set_defaults (context);
|
||||
diagnostic_format_decoder (context) = &c_tree_printer;
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -1,3 +1,15 @@
|
||||
2014-10-26 Manuel López-Ibáñez <manu@gcc.gnu.org>
|
||||
|
||||
PR c++/53061
|
||||
* cp-objcp-common.c: Do not include new.
|
||||
(cxx_initialize_diagnostics): Move from here to ...
|
||||
* error.c (cxx_initialize_diagnostics): : ... here. Move
|
||||
diagnostics initialization here from init_error.
|
||||
(cxx_pp): Use a real pointer not a macro.
|
||||
(init_error): Just initialize cxx_pp.
|
||||
* cxx-pretty-print.c (cxx_pretty_printer::cxx_pretty_printer): Do
|
||||
not set maximum line length.
|
||||
|
||||
2014-10-23 Jonathan Wakely <jwakely@redhat.com>
|
||||
|
||||
PR c++/63619
|
||||
|
@ -32,8 +32,6 @@ along with GCC; see the file COPYING3. If not see
|
||||
#include "cxx-pretty-print.h"
|
||||
#include "cp-objcp-common.h"
|
||||
|
||||
#include <new> // For placement new.
|
||||
|
||||
/* Special routine to get the alias set for C++. */
|
||||
|
||||
alias_set_type
|
||||
@ -132,22 +130,6 @@ cp_var_mod_type_p (tree type, tree fn)
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Construct a C++-aware pretty-printer for CONTEXT. It is assumed
|
||||
that CONTEXT->printer is an already constructed basic pretty_printer. */
|
||||
void
|
||||
cxx_initialize_diagnostics (diagnostic_context *context)
|
||||
{
|
||||
c_common_initialize_diagnostics (context);
|
||||
|
||||
pretty_printer *base = context->printer;
|
||||
cxx_pretty_printer *pp = XNEW (cxx_pretty_printer);
|
||||
context->printer = new (pp) cxx_pretty_printer ();
|
||||
|
||||
/* It is safe to free this object because it was previously XNEW()'d. */
|
||||
base->~pretty_printer ();
|
||||
XDELETE (base);
|
||||
}
|
||||
|
||||
/* This compares two types for equivalence ("compatible" in C-based languages).
|
||||
This routine should only return 1 if it is sure. It should not be used
|
||||
in contexts where erroneously returning 0 causes problems. */
|
||||
|
@ -2433,8 +2433,6 @@ cxx_pretty_printer::cxx_pretty_printer ()
|
||||
: c_pretty_printer (),
|
||||
enclosing_scope (global_namespace)
|
||||
{
|
||||
pp_set_line_maximum_length (this, 0);
|
||||
|
||||
type_specifier_seq = (pp_fun) pp_cxx_type_specifier_seq;
|
||||
parameter_list = (pp_fun) pp_cxx_parameter_declaration_clause;
|
||||
}
|
||||
|
@ -39,11 +39,13 @@ along with GCC; see the file COPYING3. If not see
|
||||
#define pp_separate_with_comma(PP) pp_cxx_separate_with (PP, ',')
|
||||
#define pp_separate_with_semicolon(PP) pp_cxx_separate_with (PP, ';')
|
||||
|
||||
/* The global buffer where we dump everything. It is there only for
|
||||
transitional purpose. It is expected, in the near future, to be
|
||||
completely removed. */
|
||||
/* cxx_pp is a C++ front-end-specific pretty printer: this is where we
|
||||
dump C++ ASTs as strings. It is mostly used only by the various
|
||||
tree -> string functions that are occasionally called from the
|
||||
debugger or by the front-end for things like
|
||||
__PRETTY_FUNCTION__. */
|
||||
static cxx_pretty_printer scratch_pretty_printer;
|
||||
#define cxx_pp (&scratch_pretty_printer)
|
||||
static cxx_pretty_printer * cxx_pp = &scratch_pretty_printer;
|
||||
|
||||
/* Translate if being used for diagnostics, but not for dump files or
|
||||
__PRETTY_FUNCTION. */
|
||||
@ -104,13 +106,37 @@ static void cp_print_error_function (diagnostic_context *, diagnostic_info *);
|
||||
static bool cp_printer (pretty_printer *, text_info *, const char *,
|
||||
int, bool, bool, bool);
|
||||
|
||||
/* CONTEXT->printer is a basic pretty printer that was constructed
|
||||
presumably by diagnostic_initialize(), called early in the
|
||||
compiler's initialization process (in general_init) Before the FE
|
||||
is initialized. This (C++) FE-specific diagnostic initializer is
|
||||
thus replacing the basic pretty printer with one that has C++-aware
|
||||
capacities. */
|
||||
|
||||
void
|
||||
cxx_initialize_diagnostics (diagnostic_context *context)
|
||||
{
|
||||
pretty_printer *base = context->printer;
|
||||
cxx_pretty_printer *pp = XNEW (cxx_pretty_printer);
|
||||
context->printer = new (pp) cxx_pretty_printer ();
|
||||
|
||||
/* It is safe to free this object because it was previously XNEW()'d. */
|
||||
base->~pretty_printer ();
|
||||
XDELETE (base);
|
||||
|
||||
c_common_diagnostics_set_defaults (context);
|
||||
diagnostic_starter (context) = cp_diagnostic_starter;
|
||||
/* diagnostic_finalizer is already c_diagnostic_finalizer. */
|
||||
diagnostic_format_decoder (context) = cp_printer;
|
||||
}
|
||||
|
||||
/* Initialize the global cxx_pp that is used as the memory store for
|
||||
the string representation of C++ AST. See the description of
|
||||
cxx_pp above. */
|
||||
|
||||
void
|
||||
init_error (void)
|
||||
{
|
||||
diagnostic_starter (global_dc) = cp_diagnostic_starter;
|
||||
/* diagnostic_finalizer is already c_diagnostic_finalizer. */
|
||||
diagnostic_format_decoder (global_dc) = cp_printer;
|
||||
|
||||
new (cxx_pp) cxx_pretty_printer ();
|
||||
}
|
||||
|
||||
|
@ -3078,11 +3078,10 @@ honor these options.
|
||||
@table @gcctabopt
|
||||
@item -fmessage-length=@var{n}
|
||||
@opindex fmessage-length
|
||||
Try to format error messages so that they fit on lines of about @var{n}
|
||||
characters. The default is 72 characters for @command{g++} and 0 for the rest of
|
||||
the front ends supported by GCC@. If @var{n} is zero, then no
|
||||
line-wrapping is done; each error message appears on a single
|
||||
line.
|
||||
Try to format error messages so that they fit on lines of about
|
||||
@var{n} characters. If @var{n} is zero, then no line-wrapping will be
|
||||
done; each error message will appear on a single line. This is the
|
||||
default for all front ends.
|
||||
|
||||
@item -fdiagnostics-show-location=once
|
||||
@opindex fdiagnostics-show-location
|
||||
|
Loading…
x
Reference in New Issue
Block a user