1. 15 Feb, 2020 1 commit
    • PR 87488: Add --with-diagnostics-urls configuration option · 458c8d64
      2020-02-15  David Malcolm  <dmalcolm@redhat.com>
      	    Bernd Edlinger  <bernd.edlinger@hotmail.de>
      
      	PR 87488
      	PR other/93168
      	* config.in (DIAGNOSTICS_URLS_DEFAULT): New define.
      	* configure.ac (--with-diagnostics-urls): New configuration
      	option, based on --with-diagnostics-color.
      	(DIAGNOSTICS_URLS_DEFAULT): New define.
      	* config.h: Regenerate.
      	* configure: Regenerate.
      	* diagnostic.c (diagnostic_urls_init): Handle -1 for
      	DIAGNOSTICS_URLS_DEFAULT from configure-time
      	--with-diagnostics-urls=auto-if-env by querying for a GCC_URLS
      	and TERM_URLS environment variable.
      	* diagnostic-url.h (diagnostic_url_format): New enum type.
      	(diagnostic_urls_enabled_p): rename to...
      	(determine_url_format): ... this, and change return type.
      	* diagnostic-color.c (parse_env_vars_for_urls): New helper function.
      	(auto_enable_urls): Disable URLs on xfce4-terminal, gnome-terminal,
      	the linux console, and mingw.
      	(diagnostic_urls_enabled_p): rename to...
      	(determine_url_format): ... this, and adjust.
      	* pretty-print.h (pretty_printer::show_urls): rename to...
      	(pretty_printer::url_format): ... this, and change to enum.
      	* pretty-print.c (pretty_printer::pretty_printer,
      	pp_begin_url, pp_end_url, test_urls): Adjust.
      	* doc/install.texi (--with-diagnostics-urls): Document the new
      	configuration option.
      	(--with-diagnostics-color): Document the existing interaction
      	with GCC_COLORS better.
      	* doc/invoke.texi (-fdiagnostics-urls): Add GCC_URLS and TERM_URLS
      	vindex reference.  Update description of defaults based on the above.
      	(-fdiagnostics-color): Update description of how -fdiagnostics-color
      	interacts with GCC_COLORS.
      Bernd Edlinger committed
  2. 10 Jan, 2020 1 commit
    • Add diagnostic paths · 4bc1899b
      This patch adds support for associating a "diagnostic_path" with a
      diagnostic: a sequence of events predicted by the compiler that leads to
      the problem occurring, with their locations in the user's source,
      text descriptions, and stack information (for handling interprocedural
      paths).
      
      For example, the following (hypothetical) error has a 3-event
      intraprocedural path:
      
      test.c: In function 'demo':
      test.c:29:5: error: passing NULL as argument 1 to 'PyList_Append' which
        requires a non-NULL parameter
         29 |     PyList_Append(list, item);
            |     ^~~~~~~~~~~~~~~~~~~~~~~~~
        'demo': events 1-3
           |
           |   25 |   list = PyList_New(0);
           |      |          ^~~~~~~~~~~~~
           |      |          |
           |      |          (1) when 'PyList_New' fails, returning NULL
           |   26 |
           |   27 |   for (i = 0; i < count; i++) {
           |      |   ~~~
           |      |   |
           |      |   (2) when 'i < count'
           |   28 |     item = PyLong_FromLong(random());
           |   29 |     PyList_Append(list, item);
           |      |     ~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |     |
           |      |     (3) when calling 'PyList_Append', passing NULL from (1) as argument 1
           |
      
      The patch adds a new "%@" format code for printing event IDs, so that
      in the above, the description of event (3) mentions event (1), showing
      the user where the bogus NULL value comes from (the event IDs are
      colorized to draw the user's attention to them).
      
      There is a separation between data vs presentation: the above shows how
      the diagnostic-printing code has consolidated the path into a single run
      of events, since all the events are near each other and within the same
      function; more complicated examples (such as interprocedural paths)
      might be printed as multiple runs of events.
      
      Examples of how interprocedural paths are printed can be seen in the
      test suite (which uses a plugin to exercise the code without relying
      on specific warnings using this functionality).
      
      Other output formats include
      - JSON,
      - printing each event as a separate "note", and
      - to not emit paths.
      
      gcc/ChangeLog:
      	* Makefile.in (OBJS): Add tree-diagnostic-path.o.
      	* common.opt (fdiagnostics-path-format=): New option.
      	(diagnostic_path_format): New enum.
      	(fdiagnostics-show-path-depths): New option.
      	* coretypes.h (diagnostic_event_id_t): New forward decl.
      	* diagnostic-color.c (color_dict): Add "path".
      	* diagnostic-event-id.h: New file.
      	* diagnostic-format-json.cc (json_from_expanded_location): Make
      	non-static.
      	(json_end_diagnostic): Call context->make_json_for_path if it
      	exists and the diagnostic has a path.
      	(diagnostic_output_format_init): Clear context->print_path.
      	* diagnostic-path.h: New file.
      	* diagnostic-show-locus.c (colorizer::set_range): Special-case
      	when printing a run of events in a diagnostic_path so that they
      	all get the same color.
      	(layout::m_diagnostic_path_p): New field.
      	(layout::layout): Initialize it.
      	(layout::print_any_labels): Don't colorize the label text for an
      	event in a diagnostic_path.
      	(gcc_rich_location::add_location_if_nearby): Add
      	"restrict_to_current_line_spans" and "label" params.  Pass the
      	former to layout.maybe_add_location_range; pass the latter
      	when calling add_range.
      	* diagnostic.c: Include "diagnostic-path.h".
      	(diagnostic_initialize): Initialize context->path_format and
      	context->show_path_depths.
      	(diagnostic_show_any_path): New function.
      	(diagnostic_path::interprocedural_p): New function.
      	(diagnostic_report_diagnostic): Call diagnostic_show_any_path.
      	(simple_diagnostic_path::num_events): New function.
      	(simple_diagnostic_path::get_event): New function.
      	(simple_diagnostic_path::add_event): New function.
      	(simple_diagnostic_event::simple_diagnostic_event): New ctor.
      	(simple_diagnostic_event::~simple_diagnostic_event): New dtor.
      	(debug): New overload taking a diagnostic_path *.
      	* diagnostic.def (DK_DIAGNOSTIC_PATH): New.
      	* diagnostic.h (enum diagnostic_path_format): New enum.
      	(json::value): New forward decl.
      	(diagnostic_context::path_format): New field.
      	(diagnostic_context::show_path_depths): New field.
      	(diagnostic_context::print_path): New callback field.
      	(diagnostic_context::make_json_for_path): New callback field.
      	(diagnostic_show_any_path): New decl.
      	(json_from_expanded_location): New decl.
      	* doc/invoke.texi (-fdiagnostics-path-format=): New option.
      	(-fdiagnostics-show-path-depths): New option.
      	(-fdiagnostics-color): Add "path" to description of default
      	GCC_COLORS; describe it.
      	(-fdiagnostics-format=json): Document how diagnostic paths are
      	represented in the JSON output format.
      	* gcc-rich-location.h (gcc_rich_location::add_location_if_nearby):
      	Add optional params "restrict_to_current_line_spans" and "label".
      	* opts.c (common_handle_option): Handle
      	OPT_fdiagnostics_path_format_ and
      	OPT_fdiagnostics_show_path_depths.
      	* pretty-print.c: Include "diagnostic-event-id.h".
      	(pp_format): Implement "%@" format code for printing
      	diagnostic_event_id_t *.
      	(selftest::test_pp_format): Add tests for "%@".
      	* selftest-run-tests.c (selftest::run_tests): Call
      	selftest::tree_diagnostic_path_cc_tests.
      	* selftest.h (selftest::tree_diagnostic_path_cc_tests): New decl.
      	* toplev.c (general_init): Initialize global_dc->path_format and
      	global_dc->show_path_depths.
      	* tree-diagnostic-path.cc: New file.
      	* tree-diagnostic.c (maybe_unwind_expanded_macro_loc): Make
      	non-static.  Drop "diagnostic" param in favor of storing the
      	original value of "where" and re-using it.
      	(virt_loc_aware_diagnostic_finalizer): Update for dropped param of
      	maybe_unwind_expanded_macro_loc.
      	(tree_diagnostics_defaults): Initialize context->print_path and
      	context->make_json_for_path.
      	* tree-diagnostic.h (default_tree_diagnostic_path_printer): New
      	decl.
      	(default_tree_make_json_for_path): New decl.
      	(maybe_unwind_expanded_macro_loc): New decl.
      
      gcc/c-family/ChangeLog:
      	* c-format.c (local_event_ptr_node): New.
      	(PP_FORMAT_CHAR_TABLE): Add entry for "%@".
      	(init_dynamic_diag_info): Initialize local_event_ptr_node.
      	* c-format.h (T_EVENT_PTR): New define.
      
      gcc/testsuite/ChangeLog:
      	* gcc.dg/format/gcc_diag-10.c (diagnostic_event_id_t): New
      	typedef.
      	(test_diag): Add coverage of "%@".
      	* gcc.dg/plugin/diagnostic-path-format-default.c: New test.
      	* gcc.dg/plugin/diagnostic-path-format-inline-events-1.c: New test.
      	* gcc.dg/plugin/diagnostic-path-format-inline-events-2.c: New test.
      	* gcc.dg/plugin/diagnostic-path-format-inline-events-3.c: New test.
      	* gcc.dg/plugin/diagnostic-path-format-none.c: New test.
      	* gcc.dg/plugin/diagnostic-test-paths-1.c: New test.
      	* gcc.dg/plugin/diagnostic-test-paths-2.c: New test.
      	* gcc.dg/plugin/diagnostic-test-paths-3.c: New test.
      	* gcc.dg/plugin/diagnostic-test-paths-4.c: New test.
      	* gcc.dg/plugin/diagnostic_plugin_test_paths.c: New.
      	* gcc.dg/plugin/plugin.exp: Add the new plugin and test cases.
      
      libcpp/ChangeLog:
      	* include/line-map.h (class diagnostic_path): New forward decl.
      	(rich_location::get_path): New accessor.
      	(rich_location::set_path): New function.
      	(rich_location::m_path): New field.
      	* line-map.c (rich_location::rich_location): Initialize m_path.
      
      From-SVN: r280142
      David Malcolm committed
  3. 01 Jan, 2020 1 commit
  4. 16 Dec, 2019 1 commit
  5. 11 Dec, 2019 2 commits
    • Introduce pretty_printer::clone vfunc · 368877a1
      This patch provides a way to clone a pretty_printer.
      
      This is needed so that we can capture text in a label_text and make
      layout decisions based on it, using the policy of global_dc's printer,
      whilst within a call to diagnostic_show_locus.  We can't print with
      the pretty_printer itself within a call to diagnostic_show_locus since
      it has partly-buffered content.
      
      gcc/c-family/ChangeLog:
      	* c-pretty-print.c (c_pretty_printer::clone): New vfunc
      	implementation.
      	* c-pretty-print.h (c_pretty_printer::clone): New vfunc decl.
      
      gcc/cp/ChangeLog:
      	* cxx-pretty-print.c (cxx_pretty_printer::clone): New vfunc
      	implementation.
      	* cxx-pretty-print.h (cxx_pretty_printer::clone): New vfunc decl.
      	* error.c (cxx_format_postprocessor::clone): New vfunc.
      
      gcc/ChangeLog:
      	* pretty-print.c (pretty_printer::pretty_printer): New copy-ctor.
      	(pretty_printer::clone): New vfunc implementation.
      	* pretty-print.h (format_postprocessor::clone): New pure vfunc
      	decl.
      	(pretty_printer::pretty_printer): New copy-ctor decl.
      	(pretty_printer::clone): New vfunc decl.
      
      From-SVN: r279244
      David Malcolm committed
    • Adds multibyte awareness to pretty-print.c · ddd0fd17
      2019-12-11  Lewis Hyatt  <lhyatt@gmail.com>
      
      	PR 91853
      	* pretty-print.c (pp_quoted_string): Avoid hex-escaping valid
      	multibyte input.  Fix off-by-one-bug printing the last byte before a
      	hex-escaped output.
      	(pp_character): Don't apply line wrapping in the middle of multibyte
      	characters.
      	(test_utf8): New test.
      	(pretty_print_c_tests): Call the new test.
      
      From-SVN: r279226
      Lewis Hyatt committed
  6. 07 Dec, 2019 1 commit
  7. 10 Oct, 2019 1 commit
    • pretty-print: support URL escape sequences (PR 87488) · d2608235
      https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda
      describes an emerging standard for embedding URLs in escape sequences
      for marking up text output.  This is supported e.g. by recent releases
      of GNOME Terminal.
      
      This patch adds support to our pretty-printing framework for emitting
      URLs.
      
      A followup patch uses this to add URLs to the pertinent documentation
      for the output of -fdiagnostics-show-option.
      
      gcc/ChangeLog:
      	PR 87488
      	* common.opt (fdiagnostics-urls=): New option.
      	(diagnostic-url.h): Add SourceInclude.
      	(diagnostic_url_rule): New enum.
      	* diagnostic-color.c: Include "diagnostic-url.h".
      	(diagnostic_urls_enabled_p): New function.
      	* diagnostic-url.h: New file.
      	* diagnostic.c: Include "diagnostic-url.h".
      	(diagnostic_urls_init): New function.
      	* diagnostic.h (diagnostic_urls_init): New decl.
      	* doc/invoke.texi (Diagnostic Message Formatting Options): Add
      	-fdiagnostics-urls to the list.
      	(-fdiagnostics-urls): New option.
      	* gcc.c (driver_handle_option): Handle OPT_fdiagnostics_urls_.
      	(driver::global_initializations): Call diagnostic_urls_init.
      	* opts-global.c (init_options_once): Likewise.
      	* opts.c (common_handle_option): Handle OPT_fdiagnostics_urls_.
      	* pretty-print.c (pretty_printer::pretty_printer): Initialize
      	show_urls.
      	(pp_begin_url): New function.
      	(pp_end_url): New function.
      	(selftest::test_urls): New selftest.
      	(selftest::pretty_print_c_tests): Call it.
      	* pretty-print.h (pretty_printer::show_urls): New field.
      	(pp_begin_url): New decl.
      	(pp_end_url): New decl.
      
      gcc/testsuite/ChangeLog:
      	PR 87488
      	* lib/prune.exp (TEST_ALWAYS_FLAGS): Add -fdiagnostics-urls=never.
      
      From-SVN: r276841
      David Malcolm committed
  8. 01 Oct, 2019 1 commit
    • Support prefixes in diagnostic_show_locus · e9c9a142
      Previously, diagnostic_show_locus saved and restored the pretty_printer's
      prefix, clearing it for the duration of the call.
      
      I have a patch kit in development that can benefit from applying a prefix
      to the output of d_s_l, so this patch adds support to d_s_l for printing
      such prefixes.
      
      It moves the save and restore of the pp's prefix from d_s_l to all of its
      callers, and updates diagnostic-show-locus.c to properly handle prefixes.
      
      gcc/c-family/ChangeLog:
      	* c-opts.c (c_diagnostic_finalizer): Temporarily clear prefix when
      	calling diagnostic_show_locus, rather than destroying it afterwards.
      
      gcc/ChangeLog:
      	* diagnostic-show-locus.c (layout::print_gap_in_line_numbering):
      	Call pp_emit_prefix.
      	(layout::print_source_line): Likewise.
      	(layout::start_annotation_line): Likewise.
      	(diagnostic_show_locus): Remove call to temporarily clear the
      	prefix.
      	(selftest::test_one_liner_fixit_remove): Add test coverage for the
      	interaction of pp_set_prefix with rulers and fix-it hints.
      	* diagnostic.c (default_diagnostic_finalizer): Temporarily clear
      	prefix when calling diagnostic_show_locus, rather than destroying
      	it afterwards.
      	(print_parseable_fixits): Temporarily clear prefix.
      	* pretty-print.c (pp_format): Save and restore line_length, rather
      	than assuming it is zero.
      	(pp_output_formatted_text): Remove assertion that line_length is
      	zero.
      
      gcc/fortran/ChangeLog:
      	* error.c (gfc_diagnostic_starter): Clear the prefix before
      	calling diagnostic_show_locus.
      
      gcc/testsuite/ChangeLog:
      	* gcc.dg/plugin/diagnostic_group_plugin.c (test_begin_group_cb):
      	Clear the prefix before emitting the "END GROUP" line.
      	* gcc.dg/plugin/diagnostic_plugin_test_show_locus.c
      	(custom_diagnostic_finalizer): Temporarily clear prefix when
      	calling diagnostic_show_locus, rather than destroying it
      	afterwards.
      
      From-SVN: r276433
      David Malcolm committed
  9. 01 Jan, 2019 1 commit
  10. 30 Nov, 2018 1 commit
  11. 08 Nov, 2018 1 commit
    • Support %f in pp_format · 204839e7
      Numerous formatted messages from the inliner use %f, mostly as %f, but
      occasionally with length modifiers.
      
      This patch implements the simplest case of "%f" for pp_format (with no
      modifier support) to make it easier to port these messages from fprintf
      to dump_printf_loc.
      
      The selftest has an assertion that %f on 1.0 is printed as "1.000000".
      This comes from the host's sprintf, and I believe this is guaranteed by
      POSIX: "If the precision is missing, it shall be taken as 6".  If this is
      an issue I can drop the selftest.
      
      gcc/c-family/ChangeLog:
      	* c-format.c (gcc_dump_printf_char_table): Add entry for %f.
      
      gcc/ChangeLog:
      	* pretty-print.c (pp_format): Handle %f.
      	(selftest::test_pp_format): Add test of %f.
      	* pretty-print.h (pp_double): New macro.
      
      gcc/testsuite/ChangeLog:
      	* gcc.dg/format/gcc_diag-10.c: Add coverage for %f.
      
      From-SVN: r265919
      David Malcolm committed
  12. 27 Aug, 2018 1 commit
    • Less verbose fix-it hints for missing header files (PR 87091) · 85204e23
      This patch tweaks maybe_add_include_fixit so that if we're emitting a note
      about adding the header file, the note's primary location will be replaced
      by that of the fix-it hint, to avoid repeating a location we've already
      emitted (or one close to it).
      
      For example, this simplifies:
      
        ../x86_64-pc-linux-gnu/libstdc++-v3/include/vector:87:27: error: msg 1
        87 |       using vector = std::vector<_Tp, polymorphic_allocator<_Tp>>;
           |                           ^~~~~~
        ../x86_64-pc-linux-gnu/libstdc++-v3/include/vector:87:22: note: msg 2
         73 | # include <debug/vector>
        +++ |+#include <vector>
         74 | #endif
        ....
         87 |       using vector = std::vector<_Tp, polymorphic_allocator<_Tp>>;
            |                      ^~~
      
      to:
      
        ../x86_64-pc-linux-gnu/libstdc++-v3/include/vector:87:27: error: msg 1
        87 |       using vector = std::vector<_Tp, polymorphic_allocator<_Tp>>;
           |                           ^~~~~~
        ../x86_64-pc-linux-gnu/libstdc++-v3/include/vector:74:1: note: msg 2
         73 | # include <debug/vector>
        +++ |+#include <vector>
         74 | #endif
      
      eliminating the repetition of line 87 in the note.
      
      Doing so requires converting show_caret_p to a tri-state, to avoid
      meaninglessly printing a caret for the first column in the next line
      (and colorizing it):
      
        ../x86_64-pc-linux-gnu/libstdc++-v3/include/vector:74:1: note: msg 2
         73 | # include <debug/vector>
        +++ |+#include <vector>
         74 | #endif
            | ^
      
      gcc/c-family/ChangeLog:
      	PR 87091
      	* c-common.c (c_cpp_error): Update for conversion of show_caret_p
      	to a tri-state.
      	(maybe_suggest_missing_token_insertion): Likewise.
      	(maybe_add_include_fixit): Add param "override_location".  If set,
      	and source-printing is enabled, then override the rich_location's
      	primary location with that of the insertion point for the fix-it
      	hint, marking it with SHOW_LINES_WITHOUT_RANGE.
      	* c-common.h (extern void maybe_add_include_fixit): Add bool
      	param.
      	* c-format.c (selftest::test_type_mismatch_range_labels): Update
      	for conversion of show_caret_p to a tri-state.
      	* c-warn.c (warn_for_restrict): Likewise.
      	* known-headers.cc
      	(suggest_missing_header::~suggest_missing_header): Update call to
      	maybe_add_include_fixit to suggest overriding the location, as it
      	is for a note.
      
      gcc/c/ChangeLog:
      	PR 87091
      	* c-decl.c (implicitly_declare): Update call to
      	maybe_add_include_fixit to suggest overriding the location, as it
      	is for a note.
      	* c-objc-common.c (c_tree_printer): Update for conversion of
      	show_caret_p to a tri-state.
      
      gcc/cp/ChangeLog:
      	PR 87091
      	* decl.c (grokdeclarator): Update for conversion of show_caret_p
      	to a tri-state.
      	* error.c (cp_printer): Likewise.
      	* name-lookup.c (maybe_suggest_missing_std_header): Update call to
      	maybe_add_include_fixit to suggest overriding the location, as it
      	is for a note.
      	* parser.c (cp_parser_string_literal): Update for conversion of
      	show_caret_p to a tri-state.
      	(cp_parser_elaborated_type_specifier): Likewise.
      	(set_and_check_decl_spec_loc): Likewise.
      	* pt.c (listify): Update call to maybe_add_include_fixit to not
      	override the location, as it is for an error.
      	* rtti.c (typeid_ok_p): Likewise.
      
      gcc/ChangeLog:
      	PR 87091
      	* diagnostic-show-locus.c (class layout_range): Update for
      	conversion of show_caret_p to a tri-state.
      	(layout_range::layout_range): Likewise.
      	(make_range): Likewise.
      	(layout::maybe_add_location_range): Likewise.
      	(layout::should_print_annotation_line_p): Don't show annotation
      	lines for ranges that are SHOW_LINES_WITHOUT_RANGE.
      	(layout::get_state_at_point): Update for conversion of
      	show_caret_p to a tri-state.  Bail out early for
      	SHOW_LINES_WITHOUT_RANGE, so that such ranges don't affect
      	underlining or source colorization.
      	(gcc_rich_location::add_location_if_nearby): Update for conversion
      	of show_caret_p to a tri-state.
      	(selftest::test_one_liner_multiple_carets_and_ranges): Likewise.
      	(selftest::test_one_liner_fixit_replace_equal_secondary_range):
      	Likewise.
      	(selftest::test_one_liner_labels): Likewise.
      	* gcc-rich-location.c (gcc_rich_location::add_expr): Update for
      	conversion of show_caret_p to a tri-state.
      	* pretty-print.c (text_info::set_location): Likewise.
      	* pretty-print.h (text_info::set_location): Likewise.
      	* substring-locations.c (format_warning_n_va): Likewise.
      	* tree-diagnostic.c (default_tree_printer): Likewise.
      	* tree-pretty-print.c (newline_and_indent): Likewise.
      
      gcc/fortran/ChangeLog:
      	PR 87091
      	* error.c (gfc_format_decoder): Update for conversion of
      	show_caret_p to a tri-state.
      
      gcc/testsuite/ChangeLog:
      	PR 87091
      	* gcc.dg/empty.h: New file.
      	* gcc.dg/fixits-pr84852-1.c: Update for move of fix-it hint to
      	top of file and removal of redundant second printing of warning
      	location.
      	* gcc.dg/fixits-pr84852-2.c: Likewise.
      	* gcc.dg/missing-header-fixit-3.c: Likewise.
      	* gcc.dg/missing-header-fixit-4.c: New test.
      	* gcc.dg/plugin/diagnostic_plugin_test_show_locus.c: Update for
      	conversion of show_caret_p to a tri-state.
      
      libcpp/ChangeLog:
      	PR 87091
      	* include/line-map.h (enum range_display_kind): New enum.
      	(struct location_range): Replace field "m_show_caret_p" with
      	"m_range_display_kind", converting from bool to the new enum.
      	(class rich_location): Add example of line insertion fix-it hint.
      	(rich_location::add_range): Convert param "show_caret_p" from bool
      	to enum range_display_kind and rename to "range_display_kind",
      	giving it a default of SHOW_RANGE_WITHOUT_CARET.
      	(rich_location::set_range): Likewise, albeit without a default.
      	* line-map.c (rich_location::rich_location): Update for conversion
      	of show_caret_p to tri-state enum.
      	(rich_location::add_range): Likewise.
      	(rich_location::set_range): Likewise.
      
      From-SVN: r263885
      David Malcolm committed
  13. 14 Aug, 2018 2 commits
  14. 02 Aug, 2018 1 commit
    • Fix memory leak of pretty_printer prefixes · 653fee19
      We were rather sloppy about handling the ownership of prefixes for
      pretty_printer, and this lead to a memory leak for any time a
      diagnostic_show_locus call emits multiple line spans.
      
      This showed up in "make selftest-valgrind" as:
      
      3,976 bytes in 28 blocks are definitely lost in loss record 632 of 669
         at 0x4A0645D: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
         by 0x1F08227: xmalloc (xmalloc.c:147)
         by 0x1F083E6: xvasprintf (xvasprintf.c:58)
         by 0x1E7EC7D: build_message_string(char const*, ...) (diagnostic.c:78)
         by 0x1E7F438: diagnostic_get_location_text(diagnostic_context*, expanded_location) (diagnostic.c:328)
         by 0x1E7FD54: default_diagnostic_start_span_fn(diagnostic_context*, expanded_location) (diagnostic.c:626)
         by 0x1EB3508: selftest::test_diagnostic_context::start_span_cb(diagnostic_context*, expanded_location) (selftest-diagnostic.c:57)
         by 0x1E89215: diagnostic_show_locus(diagnostic_context*, rich_location*, diagnostic_t) (diagnostic-show-locus.c:1992)
         by 0x1E8ECAD: selftest::test_fixit_insert_containing_newline_2(selftest::line_table_case const&) (diagnostic-show-locus.c:3044)
         by 0x1EB0606: selftest::for_each_line_table_case(void (*)(selftest::line_table_case const&)) (input.c:3525)
         by 0x1E8F3F5: selftest::diagnostic_show_locus_c_tests() (diagnostic-show-locus.c:3164)
         by 0x1E010BF: selftest::run_tests() (selftest-run-tests.c:88)
      
      4,004 bytes in 28 blocks are definitely lost in loss record 633 of 669
         at 0x4A0645D: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
         by 0x1F08227: xmalloc (xmalloc.c:147)
         by 0x1F083E6: xvasprintf (xvasprintf.c:58)
         by 0x1E7EC7D: build_message_string(char const*, ...) (diagnostic.c:78)
         by 0x1E7F438: diagnostic_get_location_text(diagnostic_context*, expanded_location) (diagnostic.c:328)
         by 0x1E7FD54: default_diagnostic_start_span_fn(diagnostic_context*, expanded_location) (diagnostic.c:626)
         by 0x1EB3508: selftest::test_diagnostic_context::start_span_cb(diagnostic_context*, expanded_location) (selftest-diagnostic.c:57)
         by 0x1E89215: diagnostic_show_locus(diagnostic_context*, rich_location*, diagnostic_t) (diagnostic-show-locus.c:1992)
         by 0x1E8B373: selftest::test_diagnostic_show_locus_fixit_lines(selftest::line_table_case const&) (diagnostic-show-locus.c:2500)
         by 0x1EB0606: selftest::for_each_line_table_case(void (*)(selftest::line_table_case const&)) (input.c:3525)
         by 0x1E8F3B9: selftest::diagnostic_show_locus_c_tests() (diagnostic-show-locus.c:3159)
         by 0x1E010BF: selftest::run_tests() (selftest-run-tests.c:88)
      
      This patch fixes the leaks by ensuring that the pretty_printer "owns"
      the prefix if it's non-NULL, freeing it in the dtor and in pp_set_prefix.
      
      gcc/cp/ChangeLog:
      	* error.c (cxx_print_error_function): Duplicate "file" before
      	passing it to pp_set_prefix.
      	(cp_print_error_function): Use pp_take_prefix when saving the
      	existing prefix.
      
      gcc/ChangeLog:
      	* diagnostic-show-locus.c (diagnostic_show_locus): Use
      	pp_take_prefix when saving the existing prefix.
      	* diagnostic.c (diagnostic_append_note): Likewise.
      	* langhooks.c (lhd_print_error_function): Likewise.
      	* pretty-print.c (pp_set_prefix): Drop the "const" from "prefix"
      	param's type.  Free the existing prefix.
      	(pp_take_prefix): New function.
      	(pretty_printer::pretty_printer): Drop the prefix parameter.
      	Rename the length parameter to match the comment.
      	(pretty_printer::~pretty_printer): Free the prefix.
      	* pretty-print.h (pretty_printer::pretty_printer): Drop the prefix
      	parameter.
      	(struct pretty_printer): Drop the "const" from "prefix" field's
      	type and clarify memory management.
      	(pp_set_prefix): Drop the "const" from the 2nd param.
      	(pp_take_prefix): New decl.
      
      From-SVN: r263275
      David Malcolm committed
  15. 20 Jul, 2018 1 commit
    • libcpp: remove redundant parameter from rich_location::set_range · 181463c2
      gcc/c-family/ChangeLog:
      	* c-common.c (c_cpp_error): Remove redundant "line_table"
      	parameter from call to rich_location::set_range.
      	(maybe_suggest_missing_token_insertion): Likewise.
      
      gcc/ChangeLog:
      	* pretty-print.c (text_info::set_location): Remove redundant
      	"line_table" parameter from call to rich_location::set_range.
      
      libcpp/ChangeLog:
      	* include/line-map.h (rich_location::set_range): Remove redundant
      	line_maps * parameter.
      	* line-map.c (rich_location::set_range): Likewise.
      
      From-SVN: r262913
      David Malcolm committed
  16. 02 Jul, 2018 1 commit
    • selftest: introduce class auto_fix_quotes · dbf96d49
      This patch moves a workaround for locale differences from a
      selftest in pretty-print.c to selftest.h/c to make it reusable; I need
      this for a selftest in a followup patch.
      
      gcc/ChangeLog:
      	* pretty-print.c (selftest::test_pp_format): Move save and restore
      	of quotes to class auto_fix_quotes, and add an instance.
      	* selftest.c: Include "intl.h".
      	(selftest::auto_fix_quotes::auto_fix_quotes): New ctor.
      	(selftest::auto_fix_quotes::~auto_fix_quotes): New dtor.
      	* selftest.h (selftest::auto_fix_quotes): New class.
      
      From-SVN: r262317
      David Malcolm committed
  17. 03 Jan, 2018 1 commit
  18. 20 Dec, 2017 1 commit
    • poly_int: dump routines · dc3f3805
      2017-12-20  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* dumpfile.h (dump_dec): Declare.
      	* dumpfile.c (dump_dec): New function.
      	* pretty-print.h (pp_wide_integer): Turn into a function and
      	declare a poly_int version.
      	* pretty-print.c (pp_wide_integer): New function for poly_ints.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r255864
      Richard Sandiford committed
  19. 22 Nov, 2017 1 commit
    • C/C++: fix quoting of "aka" typedef information (PR 62170) · ce95abc4
      PR 62170 describes a problem with how the quoting in pp_format
      interacts with the "aka" information for typedefs in %qT for
      the C family of frontends, and also now for %qH and %qI in the
      C++ frontend: we print:
      
        'Py_ssize_t* {aka int*}'
         ^^^^^^^^^^^^^^^^^^^^^^ colorized as "quote"
      
      i.e.
        '[START_COLOR]Py_ssize_t* {aka int*}[END_COLOR]'
      
      when we should print:
      
        'Py_ssize_t*' {aka 'int*'}
         ^^^^^^^^^^^        ^^^^ colorized as "quote"
      
      i.e.
        '[START_COLOR]Py_ssize_t*[END_COLOR]' {aka '[START_COLOR]int*[END_COLOR]'}
      
      where the opening and closing quote characters and colorization are
      added by the 'q' handling within pp_format.
      
      This patch fixes the quoting by updating the %T handling in C and C++
      and the %H/%I handling in C++ to insert the quoting appropriately.
      It converts the "quote" param of the pp_format_decoder callback from
      bool to bool *, allowing for the %T and %H/%I handlers to write
      false back to it, to avoid printing the closing quote for the cases
      like the above where the trailing closing quote isn't needed.
      
      It introduces pp_begin_quote/pp_end_quote to simplify this.  These
      take a "bool show_color", rather than using "pp_show_color (pp)"
      since cxx_pp's pp_show_color isn't currently initialized (since
      cxx_initialize_diagnostics happens before diagnostic_color_init).
      
      gcc/c/ChangeLog:
      	PR c++/62170
      	* c-objc-common.c (c_tree_printer): Convert penultimate param from
      	bool to bool *.  Within '%T' handling, if showing an "aka", use
      	"quoted" param to add appropriate quoting.
      
      gcc/cp/ChangeLog:
      	PR c++/62170
      	* error.c (type_to_string): Add leading comment.  Add params
      	"postprocessed", "quote", and "show_color", using them to fix
      	quoting of the "aka" for types involving typedefs.
      	(arg_to_string): Update for new params to type_to_string.
      	(cxx_format_postprocessor::handle): Likewise.
      	(cp_printer): Convert penultimate param from bool to bool *.
      	Update call to type_to_string and calls to
      	defer_phase_2_of_type_diff.
      
      gcc/fortran/ChangeLog:
      	PR c++/62170
      	* error.c (gfc_notify_std): Convert "quoted" param from bool to
      	bool *.
      
      gcc/ChangeLog:
      	PR c++/62170
      	* pretty-print.c (pp_format): Move quoting implementation to
      	pp_begin_quote and pp_end_quote.  Update pp_format_decoder call
      	to pass address of "quote" local.
      	(pp_begin_quote): New function.
      	(pp_end_quote): New function.
      	* pretty-print.h (printer_fn): Convert penultimate param from bool
      	to bool *.
      	(pp_begin_quote): New decl.
      	(pp_end_quote): New decl.
      	* tree-diagnostic.c (default_tree_printer): Convert penultimate
      	param from bool to bool *.
      	* tree-diagnostic.h (default_tree_printer): Likewise.
      
      gcc/testsuite/ChangeLog:
      	PR c++/62170
      	* g++.dg/diagnostic/aka1.C: Update expected error messages to
      	reflect fixes to quoting.
      	* g++.dg/diagnostic/aka2.C: New test case.
      	* g++.dg/parse/error55.C: Update expected error messages to
      	reflect fixes to quoting.
      	* gcc.dg/diag-aka-1.c: Likewise.
      	* gcc.dg/diag-aka-2.c: New test case.
      	* gcc.dg/pr13804-1.c: Update expected error messages to reflect
      	fixes to quoting.
      	* gcc.dg/pr56980.c: Likewise.
      	* gcc.dg/pr65050.c: Likewise.
      	* gcc.dg/redecl-14.c: Likewise.
      	* gcc.dg/utf16-4.c Likewise.
      	* gcc.target/i386/sse-vect-types.c (__m128d): Likewise.
      	* obj-c++.dg/invalid-type-1.mm: Likewise.
      	* objc.dg/proto-lossage-4.m: Likewise.
      
      From-SVN: r255076
      David Malcolm committed
  20. 11 Oct, 2017 1 commit
    • pretty-print.c [_WIN32] (colorize_init): Remove. · db0d1bae
      2017-10-11  Liu Hao  <lh_mouse@126.com>
      
      	* pretty-print.c [_WIN32] (colorize_init): Remove.  Use
      	the generic version below instead.
      	(should_colorize): Recognize Windows consoles as terminals
      	for MinGW targets.
      	* pretty-print.c [__MINGW32__] (write_all): New function.
      	[__MINGW32__] (find_esc_head): Likewise.
      	[__MINGW32__] (find_esc_terminator): Likewise.
      	[__MINGW32__] (eat_esc_sequence): Likewise.
      	[__MINGW32__] (mingw_ansi_fputs): New function that handles
      	ANSI escape codes.
      	(pp_write_text_to_stream): Use mingw_ansi_fputs instead of fputs
      	for MinGW targets.
      
      From-SVN: r253645
      Liu Hao committed
  21. 17 Aug, 2017 1 commit
  22. 10 Aug, 2017 1 commit
  23. 30 May, 2017 1 commit
    • C++ template type diff printing · f012c8ef
      gcc/ChangeLog:
      	* diagnostic-color.c (color_dict): Add "type-diff".
      	(parse_gcc_colors): Update comment.
      	* doc/invoke.texi (Diagnostic Message Formatting Options): Add
      	-fdiagnostics-show-template-tree and -fno-elide-type.
      	(GCC_COLORS): Add type-diff to example.
      	(type-diff=): New.
      	(-fdiagnostics-show-template-tree): New.
      	(-fno-elide-type): New.
      	* pretty-print.c (pp_format): Pass quote and formatters[argno] to
      	the pp_format_decoder callback.  Call any m_format_postprocessor's
      	"handle" method.
      	(pretty_printer::pretty_printer): Initialize
      	m_format_postprocessor.
      	(pretty_printer::~pretty_printer): Delete any
      	m_format_postprocessor.
      	* pretty-print.h (printer_fn): Add bool and const char **
      	parameters.
      	(class format_postprocessor): New class.
      	(struct pretty_printer::format_decoder): Document the new
      	parameters.
      	(struct pretty_printer::m_format_postprocessor): New field.
      	* tree-diagnostic.c (default_tree_printer): Update for new
      	bool and const char ** params.
      	* tree-diagnostic.h (default_tree_printer): Likewise.
      
      gcc/c/ChangeLog:
      	* c-objc-common.c (c_tree_printer): Gain bool and const char **
      	parameters.
      
      gcc/c-family/ChangeLog:
      	* c-format.c (gcc_cxxdiag_char_table): Add 'H' and 'I' to
      	format_chars.
      	* c.opt (fdiagnostics-show-template-tree): New option.
      	(felide-type): New option.
      
      gcc/cp/ChangeLog:
      	* call.c (perform_implicit_conversion_flags): Convert
      	"from %qT to %qT" to "from %qH to %qI" in diagnostic.
      	(print_conversion_rejection): Replace pairs of %qT with
      	%qH and %qI in various places.
      	(build_user_type_conversion_1): Likewise.
      	(build_integral_nontype_arg_conv): Likewise.
      	(build_conditional_expr_1): Likewise.
      	(convert_like_real): Likewise.
      	(convert_arg_to_ellipsis): Likewise.
      	(joust): Likewise.
      	(initialize_reference): Likewise.
      	* cvt.c (cp_convert_to_pointer): Likewise.
      	(cp_convert_to_pointer): Likewise.
      	(convert_to_reference): Likewise.
      	(ocp_convert): Likewise.
      	* error.c (cp_printer): Gain bool and const char ** parameters.
      	(struct deferred_printed_type): New struct.
      	(class cxx_format_postprocessor): New class.
      	(cxx_initialize_diagnostics): Wire up a cxx_format_postprocessor
      	to pp->m_format_postprocessor.
      	(comparable_template_types_p): New function.
      	(newline_and_indent): New function.
      	(arg_to_string): New function.
      	(print_nonequal_arg): New function.
      	(print_template_differences): New function.
      	(type_to_string_with_compare): New function.
      	(print_template_tree_comparison): New function.
      	(append_formatted_chunk): New function.
      	(add_quotes): New function.
      	(cxx_format_postprocessor::handle): New function.
      	(defer_phase_2_of_type_diff): New function.
      	(cp_printer): Add "quoted" and "buffer_ptr" params.  Implement
      	%H and %I.
      	* typeck.c (cp_build_binary_op): Replace pairs of %qT with
      	%qH and %qI in various places.
      	(convert_member_func_to_ptr): Likewise.
      	(build_reinterpret_cast_1): Likewise.
      	(convert_for_assignment): Likewise.
      	* typeck2.c (check_narrowing): Likewise.
      
      gcc/fortran/ChangeLog:
      	* error.c (gfc_format_decoder): Update for new bool and
      	const char ** params.
      
      gcc/testsuite/ChangeLog:
      	* g++.dg/plugin/plugin.exp (plugin_test_list): Add...
      	* g++.dg/plugin/show-template-tree-color-no-elide-type.C: New
      	test case.
      	* g++.dg/plugin/show-template-tree-color.C: New test case.
      	* g++.dg/plugin/show_template_tree_color_plugin.c: New plugin.
      	* g++.dg/template/show-template-tree-2.C: New test case.
      	* g++.dg/template/show-template-tree-3.C: New test case.
      	* g++.dg/template/show-template-tree-4.C: New test case.
      	* g++.dg/template/show-template-tree-no-elide-type.C: New test case.
      	* g++.dg/template/show-template-tree.C: New test case.
      
      From-SVN: r248698
      David Malcolm committed
  24. 01 Jan, 2017 1 commit
  25. 13 Nov, 2016 1 commit
    • re PR tree-optimization/35503 (Warning about restricted pointers?) · 975672f3
      2016-11-13  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>
      
      	PR c/35503
      	* doc/invoke.texi: Document Wrestrict.
      	* pretty-print.c (pp_format): Add case for "Z" specifier.
      	(test_pp_format): Test "Z" specifier.
      c-family/
      	* c-common.h (warn_for_restrict): Declare.
      	* c-warn.c: Include gcc-rich-location.h.
      	(warn_for_restrict): New function.
      	* c-format.c (gcc_tdiag_char_table): Add entry for "Z" specifier.
      	(gcc_cdiag_char_table): Likewise.
      	(gcc_cxxdiag_char_table): Likewise.
      	* c.opt (Wrestrict): New option.
      c/
      	* c-parser.c (c_parser_postfix_expression_after_primary): Call
      	warn_for_restrict.
      cp/
      	* parser.c (cp_parser_postfix_pexpression): Call warn_for_restrict.
      testsuite/
      	* c-c++-common/pr35503-1.c: New test.
      	* c-c++-common/pr35503-2.c: Likewise.
      	* c-c++-common/pr35503-3.c: Likewise.
      	* gcc.dg/format/gcc_diag-1.c: Add tests for "Z" specifier.
      
      From-SVN: r242366
      Prathamesh Kulkarni committed
  26. 09 Sep, 2016 1 commit
    • PR c/77520 - wrong value for extended ASCII characters in -Wformat message · 3f0177e7
      PR c/77520 - wrong value for extended ASCII characters in -Wformat message
      PR c/77521 - %qc format directive should quote non-printable characters
      
      gcc/c-family/ChangeLog:
      
      	PR c/77520
      	PR c/77521
      	* c-format.c (argument_parser::find_format_char_info): Use %qc
      	format directive unconditionally.
      
      gcc/ChangeLog:
      
      	PR c/77520
      	PR c/77521
      	* pretty-print.c (pp_quoted_string): New function.
      	(pp_format): Call it for %c and %s directives.
      
      gcc/testsuite/ChangeLog:
      
      	PR c/77520
      	PR c/77521
      	* gcc.dg/pr77520.c: New test.
      	* gcc.dg/pr77521.c: New test.
      
      From-SVN: r240059
      Martin Sebor committed
  27. 13 Jun, 2016 2 commits
    • pretty-print.c: skip color selftests if GCC_COLORS is set · 2fe00b1f
      gcc/ChangeLog:
      	* pretty-print.c (assert_pp_format_colored): Skip the test if
      	GCC_COLORS is set.
      	(test_pp_format): Remove comment about GCC_COLORS.
      
      From-SVN: r237411
      David Malcolm committed
    • selftests: improve reported failure locations · 09765e3a
      This patch introduce a selftest::location struct to wrap up __FILE__
      and __LINE__ information (and __FUNCTION__) throughout the selftests,
      allowing location information to be passed around.
      
      It updates the helper functions in pretty-print.c to pass through
      the precise location of each test, so that if a failure occurs, the
      correct line number is printed, rather than a line within a helper
      function.
      
      gcc/ChangeLog:
      	* input.c (test_reading_source_line): Use SELFTEST_LOCATION.
      	* pretty-print.c (assert_pp_format_va): Add location param and use
      	it with ASSERT_STREQ_AT.
      	(assert_pp_format): Add location param and pass it to
      	assert_pp_format_va.
      	(assert_pp_format_colored): Likewise.
      	(ASSERT_PP_FORMAT_1): New.
      	(ASSERT_PP_FORMAT_2): New.
      	(ASSERT_PP_FORMAT_3): New.
      	(test_pp_format): Provide SELFTEST_LOCATION throughout, either
      	explicitly, or implicitly via the above macros.
      	* selftest.c (selftest::pass): Use a selftest::location rather
      	than file and line.
      	(selftest::fail): Likewise.  Print the function name.
      	(selftest::fail_formatted): Likewise.
      	(selftest::assert_streq): Use a selftest::location rather than
      	file and line.
      	* selftest.h (selftest::location): New struct.
      	(SELFTEST_LOCATION): New macro.
      	(selftest::pass): Accept a const location & rather than file
      	and line.
      	(selftest::fail): Likewise.
      	(selftest::fail_formatted): Likewise.
      	(selftest::assert_streq): Likewise.
      	(ASSERT_TRUE): Update for above changes, using SELFTEST_LOCATION.
      	(ASSERT_FALSE): Likewise.
      	(ASSERT_EQ): Likewise.
      	(ASSERT_NE): Likewise.
      	(ASSERT_STREQ): Likewise.
      	(ASSERT_PRED1): Likewise.
      	(ASSERT_STREQ_AT): New macro.
      
      From-SVN: r237410
      David Malcolm committed
  28. 09 Jun, 2016 1 commit
  29. 08 Jun, 2016 1 commit
    • Add selftest for pretty-print.c · 4ccab56d
      gcc/ChangeLog:
      	* pretty-print.c: Include "selftest.h".
      	(pp_format): Fix comment.
      	(identifier_to_locale): Likewise.
      	(selftest::test_basic_printing): New function.
      	(selftest::assert_pp_format): New function.
      	(selftest::test_pp_format): New function.
      	(selftest::pretty_print_c_tests): New function.
      	* selftest-run-tests.c (selftest::run_tests): Call
      	selftest::pretty_print_c_tests.
      	* selftest.h (pretty_print_c_tests): New declaration.
      
      From-SVN: r237221
      David Malcolm committed
  30. 22 Apr, 2016 1 commit
  31. 17 Apr, 2016 3 commits
  32. 04 Jan, 2016 1 commit
  33. 07 Dec, 2015 1 commit
    • Fix missing range information for "%q+D" format code · f79520bb
      gcc/c-family/ChangeLog:
      	* c-common.c (c_cpp_error): Update for change to
      	rich_location::set_range.
      
      gcc/fortran/ChangeLog:
      	* error.c (gfc_format_decoder): Update for change of
      	text_info::set_range to text_info::set_location.
      
      gcc/ChangeLog:
      	* pretty-print.c (text_info::set_range): Rename to...
      	(text_info::set_location): ...this, converting 2nd param
      	from source_range to a location_t.
      	* pretty-print.h (text_info::set_location): Convert
      	from inline function to external definition.
      	(text_info::set_range): Delete.
      
      gcc/testsuite/ChangeLog:
      	* gcc.dg/diagnostic-ranges-1.c: New test file.
      	* gcc.dg/plugin/diagnostic-test-show-locus-bw.c
      	(test_percent_q_plus_d): New test function.
      	* gcc.dg/plugin/diagnostic_plugin_test_show_locus.c
      	(test_show_locus): Rewrite test code using
      	rich_location::set_range.  Add code to unit-test the "%q+D"
      	format code.
      
      libcpp/ChangeLog:
      	* include/line-map.h (rich_location::set_range): Add line_maps *
      	param; convert param from source_range to source_location.  Drop
      	"overwrite_loc_p" param.
      	* line-map.c (rich_location::set_range): Likewise, acting as if
      	"overwrite_loc_p" were true, and getting range from the location.
      
      From-SVN: r231367
      David Malcolm committed
  34. 06 Nov, 2015 1 commit
    • Reimplement diagnostic_show_locus, introducing rich_location classes · 8a645150
      gcc/ChangeLog:
      	* diagnostic-color.c (color_dict): Eliminate "caret"; add "range1"
      	and "range2".
      	(parse_gcc_colors): Update comment to describe default GCC_COLORS.
      	* diagnostic-core.h (warning_at_rich_loc): New declaration.
      	(error_at_rich_loc): New declaration.
      	(permerror_at_rich_loc): New declaration.
      	(inform_at_rich_loc): New declaration.
      	* diagnostic-show-locus.c (adjust_line): Delete.
      	(struct point_state): New struct.
      	(class colorizer): New class.
      	(class layout_point): New class.
      	(class layout_range): New class.
      	(struct line_bounds): New.
      	(class layout): New class.
      	(colorizer::colorizer): New ctor.
      	(colorizer::~colorizer): New dtor.
      	(layout::layout): New ctor.
      	(layout::print_source_line): New method.
      	(layout::print_annotation_line): New method.
      	(layout::get_state_at_point): New method.
      	(layout::get_x_bound_for_row): New method.
      	(diagnostic_show_locus): Reimplement in terms of class layout.
      	(diagnostic_print_caret_line): Delete.
      	* diagnostic.c (diagnostic_initialize): Replace
      	MAX_LOCATIONS_PER_MESSAGE with rich_location::MAX_RANGES.
      	(diagnostic_set_info_translated): Convert param from location_t
      	to rich_location *.  Eliminate calls to set_location on the
      	message in favor of storing the rich_location ptr there.
      	(diagnostic_set_info): Convert param from location_t to
      	rich_location *.
      	(diagnostic_build_prefix): Break out array into...
      	(diagnostic_kind_color): New variable.
      	(diagnostic_get_color_for_kind): New function.
      	(diagnostic_report_diagnostic): Colorize the option_text
      	using the color for the severity.
      	(diagnostic_append_note): Update for change in signature of
      	diagnostic_set_info.
      	(diagnostic_append_note_at_rich_loc): New function.
      	(emit_diagnostic): Update for change in signature of
      	diagnostic_set_info.
      	(inform): Likewise.
      	(inform_at_rich_loc): New function.
      	(inform_n): Update for change in signature of diagnostic_set_info.
      	(warning): Likewise.
      	(warning_at): Likewise.
      	(warning_at_rich_loc): New function.
      	(warning_n): Update for change in signature of diagnostic_set_info.
      	(pedwarn): Likewise.
      	(permerror): Likewise.
      	(permerror_at_rich_loc): New function.
      	(error): Update for change in signature of diagnostic_set_info.
      	(error_n): Likewise.
      	(error_at): Likewise.
      	(error_at_rich_loc): New function.
      	(sorry): Update for change in signature of diagnostic_set_info.
      	(fatal_error): Likewise.
      	(internal_error): Likewise.
      	(internal_error_no_backtrace): Likewise.
      	(source_range::debug): New function.
      	* diagnostic.h (struct diagnostic_info): Eliminate field
      	"override_column".  Add field "richloc".
      	(struct diagnostic_context): Add field "colorize_source_p".
      	(diagnostic_override_column): Delete.
      	(diagnostic_set_info): Convert param from location_t to
      	rich_location *.
      	(diagnostic_set_info_translated): Likewise.
      	(diagnostic_append_note_at_rich_loc): New function.
      	(diagnostic_num_locations): New function.
      	(diagnostic_expand_location): Get the location from the
      	rich_location.
      	(diagnostic_print_caret_line): Delete.
      	(diagnostic_get_color_for_kind): New declaration.
      	* genmatch.c (linemap_client_expand_location_to_spelling_point): New.
      	(error_cb): Update for change in signature of "error" callback.
      	(fatal_at): Likewise.
      	(warning_at): Likewise.
      	* input.c (linemap_client_expand_location_to_spelling_point): New.
      	* pretty-print.c (text_info::set_range): New method.
      	(text_info::get_location): New method.
      	* pretty-print.h (MAX_LOCATIONS_PER_MESSAGE): Eliminate this macro.
      	(struct text_info): Eliminate "locations" array in favor of
      	"m_richloc", a rich_location *.
      	(textinfo::set_location): Add a "caret_p" param, and reimplement
      	in terms of a call to set_range.
      	(textinfo::get_location): Eliminate inline implementation in favor of
      	an out-of-line reimplementation.
      	(textinfo::set_range): New method.
      	* rtl-error.c (diagnostic_for_asm): Update for change in signature
      	of diagnostic_set_info.
      	* tree-diagnostic.c (default_tree_printer): Update for new
      	"caret_p" param for textinfo::set_location.
      	* tree-pretty-print.c (percent_K_format): Likewise.
      
      gcc/c-family/ChangeLog:
      	* c-common.c (c_cpp_error): Convert parameter from location_t to
      	rich_location *.  Eliminate the "column_override" parameter and
      	the call to diagnostic_override_column.
      	Update the "done_lexing" clause to set range 0
      	on the rich_location, rather than overwriting a location_t.
      	* c-common.h (c_cpp_error): Convert parameter from location_t to
      	rich_location *.  Eliminate the "column_override" parameter.
      
      gcc/c/ChangeLog:
      	* c-decl.c (warn_defaults_to): Update for change in signature
      	of diagnostic_set_info.
      	* c-errors.c (pedwarn_c99): Likewise.
      	(pedwarn_c90): Likewise.
      	* c-objc-common.c (c_tree_printer): Update for new "caret_p" param
      	for textinfo::set_location.
      
      gcc/cp/ChangeLog:
      	* error.c (cp_printer): Update for new "caret_p" param for
      	textinfo::set_location.
      	(pedwarn_cxx98): Update for change in signature of
      	diagnostic_set_info.
      
      gcc/fortran/ChangeLog:
      	* cpp.c (cb_cpp_error): Convert parameter from location_t to
      	rich_location *.  Eliminate the "column_override" parameter.
      	* error.c (gfc_warning): Update for change in signature of
      	diagnostic_set_info.
      	(gfc_format_decoder): Update handling of %C/%L for changes
      	to struct text_info.
      	(gfc_diagnostic_starter): Use richloc when determining whether to
      	print one locus or two.  When handling a location that will
      	involve a call to diagnostic_show_locus, only attempt to print the
      	locus for the primary location, and don't call into
      	diagnostic_print_caret_line.
      	(gfc_warning_now_at): Update for change in signature of
      	diagnostic_set_info.
      	(gfc_warning_now): Likewise.
      	(gfc_error_now): Likewise.
      	(gfc_fatal_error): Likewise.
      	(gfc_error): Likewise.
      	(gfc_internal_error): Likewise.
      
      gcc/testsuite/ChangeLog:
      	* gcc.dg/plugin/diagnostic-test-show-locus-bw.c: New file.
      	* gcc.dg/plugin/diagnostic-test-show-locus-color.c: New file.
      	* gcc.dg/plugin/diagnostic_plugin_test_show_locus.c: New file.
      	* gcc.dg/plugin/plugin.exp (plugin_test_list): Add the above.
      	* lib/gcc-dg.exp: Load multiline.exp.
      
      libcpp/ChangeLog:
      	* errors.c (cpp_diagnostic): Update for change in signature
      	of "error" callback.
      	(cpp_diagnostic_with_line): Likewise, calling override_column
      	on the rich_location.
      	* include/cpplib.h (struct cpp_callbacks): Within "error"
      	callback, convert param from source_location to rich_location *,
      	and drop column_override param.
      	* include/line-map.h (struct source_range): New struct.
      	(struct location_range): New struct.
      	(class rich_location): New class.
      	(linemap_client_expand_location_to_spelling_point): New declaration.
      	* line-map.c (rich_location::rich_location): New ctors.
      	(rich_location::lazily_expand_location): New method.
      	(rich_location::override_column): New method.
      	(rich_location::add_range): New methods.
      	(rich_location::set_range): New method.
      
      From-SVN: r229884
      David Malcolm committed
  35. 28 Oct, 2015 1 commit
    • [PATCH 7/9] ENABLE_CHECKING refactoring: middle-end, LTO FE · b2b29377
      [PATCH 7/9] ENABLE_CHECKING refactoring: middle-end, LTO FE
      gcc/lto/ChangeLog:
      2015-10-27  Mikhail Maltsev  <maltsevm@gmail.com>
      
      	* lto.c (unify_scc): Use flag_checking and remove ENABLE_CHECKING
      	conditionals.
      	(lto_fixup_state): Likewise.
      	(do_whole_program_analysis): Use
      	symtab_node::checking_verify_symtab_nodes and remove ENABLE_CHECKING
      	conditionals.
      
      gcc/ChangeLog:
      
      2015-10-27  Mikhail Maltsev  <maltsevm@gmail.com>
      
      	* attribs.c (check_attribute_tables): New function, broken out from...
      	(init_attributes): Use it.
      	* cfgcleanup.c (try_optimize_cfg): Use flag_checking, CHECKING_P
      	gcc_checking_assert and checking_* functions to eliminate
      	ENABLE_CHECKING conditionals.
      	* cfgexpand.c (expand_goto, expand_debug_expr): Likewise.
      	(pass_expand::execute): Likewise.
      	* cgraphclones.c (symbol_table::materialize_all_clones): Likewise.
      	* cgraphunit.c (mark_functions_to_output): Likewise.
      	(cgraph_node::expand_thunk): Likewise.
      	(symbol_table::compile): Likewise.
      	* ddg.c (add_cross_iteration_register_deps): Likewise.
      	(create_ddg_all_sccs): Likewise.
      	* df-core.c (df_finish_pass, df_analyze): Likewise.
      	* diagnostic-core.h: Likewise.
      	* diagnostic.c (diagnostic_report_diagnostic): Likewise.
      	* dominance.c (calculate_dominance_info): Likewise.
      	* dwarf2out.c (add_AT_die_ref): Likewise.
      	(const_ok_for_output_1, mem_loc_descriptor): Likewise.
      	(loc_list_from_tree, gen_lexical_block_die): Likewise.
      	gen_type_die_with_usage, gen_type_die): Likewise.
      	(dwarf2out_decl): Likewise.
      	* emit-rtl.c (verify_rtx_sharing, reorder_insns_nobb): Likewise.
      	* except.c (duplicate_eh_regions): Likewise.
      	* fwprop.c (register_active_defs, update_df_init): Likewise.
      	(fwprop_init, fwprop_done): Likewise.
      	(update_uses): Likewise.
      	* ggc-page.c (ggc_grow): Likewise.
      	* gimplify.c (gimplify_body): Likewise.
      	(gimplify_hasher::equal): Likewise.
      	* graphite-isl-ast-to-gimple.c (graphite_verify): Likewise.
      	* graphite-scop-detection.c (canonicalize_loop_closed_ssa_form):
      	Likewise.
      	* graphite-sese-to-poly.c (rewrite_reductions_out_of_ssa): Likewise.
      	(rewrite_cross_bb_scalar_deps_out_of_ssa): Likwise.
      	* hash-table.h (::find_empty_slot_for_expand): Likewise.
      	* ifcvt.c (if_convert): Likewise.
      	* ipa-cp.c (ipcp_propagate_stage): Likewise.
      	* ipa-devirt.c (type_in_anonymous_namespace_p): Likewise.
      	(odr_type_p, odr_types_equivalent_p): Likewise.
      	(add_type_duplicate, get_odr_type): Likewise.
      	* ipa-icf.c (sem_item_optimizer::execute): Likewise.
      	(sem_item_optimizer::subdivide_classes_by_equality): Likewise.
      	(sem_item_optimizer::verify_classes): Likewise.
      	(sem_item_optimizer::traverse_congruence_split): Likewise.
      	(sem_item_optimizer::checking_verify_classes): New.
      	* ipa-icf.h (sem_item_optimizer::checking_verify_classes): Add new
      	method.
      	* cfgrtl.c (commit_edge_insertions): Likewise.
      	(fixup_reorder_chain, cfg_layout_finalize): Likewise.
      	(rtl_flow_call_edges_add): Likewise.
      	* cgraph.c (symbol_table::create_edge): Likewise.
      	(cgraph_edge::redirect_call_stmt_to_callee): Likewise.
      	* cgraph.h (symtab_node): Likewise.
      	(symtab_node::checking_verify_symtab_nodes): Define.
      	(cgraph_node::checking_verify_cgraph_nodes): Define.
      	* cfghooks.h (checking_verify_flow_info): Define.
      	* cfgloop.h (checking_verify_loop_structure): Define.
      	* dominance.h (checking_verify_dominators): Define.
      	* et-forest.c: Fix comment.
      	* ipa-inline-analysis.c (compute_inline_parameters): Use flag_checking,
      	CHECKING_P gcc_checking_assert and checking_* functions to eliminate
      	ENABLE_CHECKING conditionals.
      	* ipa-inline-transform.c (save_inline_function_body): Likewise.
      	* ipa-inline.c (inline_small_functions): Likewise.
      	(early_inliner): Likewise.
      	* ipa-inline.h (estimate_edge_growth): Likewise.
      	* ipa-visibility.c (function_and_variable_visibility): Likewise.
      	* ipa.c (symbol_table::remove_unreachable_nodes): Likewise.
      	(ipa_single_use): Likewise.
      	* ira-int.h: Likewise.
      	* ira.c (ira): Likewise.
      	* loop-doloop.c (doloop_optimize_loops): Likewise.
      	* loop-init.c (loop_optimizer_init, fix_loop_structure): Likewise.
      	* loop-invariant.c (move_loop_invariants): Likewise.
      	* lra-assigns.c (lra_assign): Likewise.
      	* lra-constraints.c (lra_constraints): Likewise.
      	* lra-eliminations.c (lra_eliminate): Likewise.
      	* lra-int.h (struct lra_reg): Likewise.
      	* lra-lives.c (check_pseudos_live_through_calls): Likewise.
      	(lra_create_live_ranges_1): Likewise.
      	* lra-remat.c (create_remat_bb_data): Likewise.
      	* lra.c (lra_update_insn_recog_data, restore_scratches): Likewise.
      	(lra): Likewise.
      	(check_rtl): Always define. Remove incorrect guard around
      	extract_constrain_insn call.
      	* lto-cgraph.c (input_cgraph_1: Use flag_checking,
      	CHECKING_P gcc_checking_assert and checking_* functions to eliminate
      	ENABLE_CHECKING conditionals.
      	* lto-streamer-out.c (DFS::DFS): Likewise.
      	(lto_output): Likewise.
      	* lto-streamer.c (lto_streamer_init): Likewise.
      	* omp-low.c (scan_omp_target, expand_omp_taskreg): Likewise.
      	expand_omp_target, execute_expand_omp): Likewise.
      	(lower_omp_target): Likewise.
      	* passes.c (execute_function_todo): Likewise.
      	(execute_todo, execute_one_pass): Likewise.
      	(verify_curr_properties): Always define.
      	* predict.c (tree_estimate_probability: Use flag_checking,
      	CHECKING_P gcc_checking_assert and checking_* functions to eliminate
      	ENABLE_CHECKING conditionals.
      	(propagate_freq): Likewise.
      	* pretty-print.c (pp_format): Likewise.
      	* real.c (real_to_decimal_for_mode): Likewise.
      	* recog.c (split_all_insns): Likewise.
      	* regcprop.c (kill_value_one_regno): Likewise.
      	(copy_value): Likewise.
      	(validate_value_data): Define unconditionally.
      	* reload.c: Fix comment.
      	* timevar.c: Include options.h
      	* tree-ssa.h (checking_verify_ssa): Define.
      	* tree-ssa-loop-manip.h (checking_verify_loop_closed_ssa): Define.
      	* sched-deps.c (CHECK): Remove unused macro.
      	(add_or_update_dep_1, sd_add_dep: Use flag_checking, CHECKING_P
      	gcc_checking_assert and checking_* functions to eliminate
      	ENABLE_CHECKING conditionals.
      	* sel-sched-ir.c (free_regset_pool, tidy_control_flow): Likewise.
      	* sel-sched.c (struct moveop_static_params): Likewise.
      	(find_best_reg_for_expr, move_cond_jump): Likewise.
      	(move_op_orig_expr_not_found): Likewise.
      	(code_motion_process_successors, move_op): Likewise.
      	* ssa-iterators.h (first_readonly_imm_use): Likewise.
      	(next_readonly_imm_use): Likewise.
      	* store-motion.c (compute_store_table): Likewise.
      	* symbol-summary.h (function_summary::function_summary): Likewise.
      	* target.h (cumulative_args_t): Likewise.
      	(get_cumulative_args, pack_cumulative_args): Likewise.
      	* timevar.c: (timer::print): Likewise.
      	* trans-mem.c (ipa_tm_execute): Likewise.
      	* tree-cfg.c (move_stmt_op): Likewise.
      	(move_sese_region_to_fn): Likewise.
      	(gimple_flow_call_edges_add): Likewise.
      	* tree-cfgcleanup.c (cleanup_tree_cfg_noloop, repair_loop_structures):
      	Likewise.
      	* tree-eh.c (remove_unreachable_handlers): Likewise.
      	* tree-if-conv.c (pass_if_conversion::execute): Likewise.
      	* tree-inline.c (expand_call_inline, optimize_inline_calls): Likewise.
      	* tree-into-ssa.c (update_ssa): Likewise.
      	* tree-loop-distribution.c (pass_loop_distribution::execute): Likewise.
      	* tree-outof-ssa.c (eliminate_useless_phis, rewrite_trees): Likewise.
      	* tree-parloops.c (pass_parallelize_loops::execute): Likewise.
      	* tree-predcom.c (suitable_component_p): Likewise.
      	* tree-profile.c (gimple_gen_const_delta_profiler): Likewise.
      	* tree-ssa-alias.c (refs_may_alias_p_1): Likewise.
      	* tree-ssa-live.c (verify_live_on_entry): Likewise.
      	* tree-ssa-live.h (register_ssa_partition): Likewise.
      	* tree-ssa-loop-ivcanon.c (tree_unroll_loops_completely): Likewise.
      	* tree-ssa-loop-manip.c (add_exit_phi): Likewise.
      	(tree_transform_and_unroll_loop): Likewise.
      	* tree-ssa-math-opts.c (pass_cse_reciprocals::execute): Likewise.
      	* tree-ssa-operands.c (get_expr_operands): Likewise.
      	* tree-ssa-propagate.c (replace_exp_1): Likewise.
      	* tree-ssa-structalias.c (rewrite_constraints): Likewise.
      	* tree-ssa-ter.c (free_temp_expr_table): Likewise.
      	* tree-ssa-threadupdate.c (duplicate_thread_path): Likewise.
      	* tree-ssanames.c (release_ssa_name_fn): Likewise.
      	* tree-stdarg.c (expand_ifn_va_arg): Likewise.
      	* tree-vect-loop-manip.c
      	(slpeel_tree_duplicate_loop_to_edge_cfg): Likewise.
      	(slpeel_checking_verify_cfg_after_peeling): Likewise.
      	(vect_do_peeling_for_loop_bound): Likewise.
      	(vect_do_peeling_for_alignment): Likewise.
      	* tree-vrp.c (supports_overflow_infinity): Likewise.
      	(set_value_range): Likewise.
      	* tree.c (free_lang_data_in_cgraph): Likewise.
      	* value-prof.c (gimple_remove_histogram_value): Likewise.
      	(free_hist): Likewise.
      	* var-tracking.c (canonicalize_values_star): Likewise.
      	(compute_bb_dataflow, vt_find_locations, vt_emit_notes): Likewise.
      
      From-SVN: r229470
      Mikhail Maltsev committed