In cp/error.c...
authorManuel López-Ibáñez <manu@gcc.gnu.org>
Sun, 26 Oct 2014 21:21:58 +0000 (21:21 +0000)
committerManuel López-Ibáñez <manu@gcc.gnu.org>
Sun, 26 Oct 2014 21:21:58 +0000 (21:21 +0000)
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

gcc/ChangeLog
gcc/c-family/ChangeLog
gcc/c-family/c-common.h
gcc/c-family/c-opts.c
gcc/c/ChangeLog
gcc/c/c-objc-common.c
gcc/cp/ChangeLog
gcc/cp/cp-objcp-common.c
gcc/cp/cxx-pretty-print.c
gcc/cp/error.c
gcc/doc/invoke.texi

index b67d906bac51716434f6c9a5647b2a18d7defc5f..cfcba31de956a8a009aeb4210cd9e9754ef95795 100644 (file)
@@ -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.
index fb0e63bc7b403012fddbed7936248321cc7e7cd9..9735625eee1618fb0af5407b86188be4d80363aa 100644 (file)
@@ -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
index b45ccfce35be0b7e45b4f6b4b79ad05e267f8b63..dcd52fb010c22bfad4191b04b58e134d1969f479 100644 (file)
@@ -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 *);
index 448eb3e8b747a1d0391e754e2b93e73323aed8c6..000fdd2bd523ded0aa2732e56afad20b9f576bfe 100644 (file)
@@ -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;
 }
index 9b6c1d58558296f55e80276fe054ab1a14f73be3..35d9ceed23bac48de66e03368f4f92fe4091e028 100644 (file)
@@ -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
index 73bb297d4238ed59ecb19c6b7b0dddef52d42387..12db5487894598c0d769f75dd9b0575a8c6c91fb 100644 (file)
@@ -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
index f741bfb603601702a4794d827f565807bd295d14..e105edca01e6c1c63830c304fa19b048f30fad15 100644 (file)
@@ -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
index 0d144ef0ba7105e881c3b2ef61655e5cca4c8c13..12df4c2667f920e475be7e2380838eba505c8443 100644 (file)
@@ -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.  */
index 67e84c0a2405301ee473aea21a447387e42ed167..02ce34611b31c982c2ed70908044fbbd45a2ea42 100644 (file)
@@ -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;
 }
index 57f3c31972d221a0b3de2ca50bf2f1a5e0b9273f..755bb00f71bdaecd818117f49043cf5109529f57 100644 (file)
@@ -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
-init_error (void)
+cxx_initialize_diagnostics (diagnostic_context *context)
 {
-  diagnostic_starter (global_dc) = cp_diagnostic_starter;
+  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 (global_dc) = cp_printer;
+  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)
+{
   new (cxx_pp) cxx_pretty_printer ();
 }
 
index 9c68aebe6d2cd398e3ad330c568125f0a53ed4fd..9f21c9623a9348777c6c7b9d8f2a7e506dd841c9 100644 (file)
@@ -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