gcc/libcpp
David Malcolm a87a86e1e9 PR 62314: add ability to add fixit-hints to a diagnostic
This is the combination of two patches:
  [PATCH 01/02] PR/62314: add ability to add fixit-hints
  [PATCH 02/02] C FE: add fix-it hint for . vs ->

gcc/ChangeLog:
	PR 62314
	* diagnostic-show-locus.c (colorizer::set_fixit_hint): New.
	(class layout): Update comment
	(layout::print_any_fixits): New method.
	(layout::move_to_column): New method.
	(diagnostic_show_locus): Add call to layout.print_any_fixits.

gcc/c/ChangeLog:
	PR 62314
	* c-typeck.c (should_suggest_deref_p): New function.
	(build_component_ref): Special-case POINTER_TYPE when
	generating a "not a structure of union"  error message, and
	suggest a "->" rather than a ".", providing a fix-it hint.

gcc/testsuite/ChangeLog:
	PR 62314
	* gcc.dg/fixits.c: New file.
	* gcc.dg/plugin/diagnostic-test-show-locus-ascii-bw.c
	(test_fixit_insert): New.
	(test_fixit_remove): New.
	(test_fixit_replace): New.
	* gcc.dg/plugin/diagnostic-test-show-locus-ascii-color.c
	(test_fixit_insert): New.
	(test_fixit_remove): New.
	(test_fixit_replace): New.
	* gcc.dg/plugin/diagnostic_plugin_test_show_locus.c
	(test_show_locus): Add tests of rendering fixit hints.

libcpp/ChangeLog:
	PR 62314
	* include/line-map.h (source_range::intersects_line_p): New
	method.
	(rich_location::~rich_location): New.
	(rich_location::add_fixit_insert): New method.
	(rich_location::add_fixit_remove): New method.
	(rich_location::add_fixit_replace): New method.
	(rich_location::get_num_fixit_hints): New accessor.
	(rich_location::get_fixit_hint): New accessor.
	(rich_location::MAX_FIXIT_HINTS): New constant.
	(rich_location::m_num_fixit_hints): New field.
	(rich_location::m_fixit_hints): New field.
	(class fixit_hint): New class.
	(class fixit_insert): New class.
	(class fixit_remove): New class.
	(class fixit_replace): New class.
	* line-map.c (source_range::intersects_line_p): New method.
	(rich_location::rich_location): Add initialization of
	m_num_fixit_hints to both ctors.
	(rich_location::~rich_location): New.
	(rich_location::add_fixit_insert): New method.
	(rich_location::add_fixit_remove): New method.
	(rich_location::add_fixit_replace): New method.
	(fixit_insert::fixit_insert): New.
	(fixit_insert::~fixit_insert): New.
	(fixit_insert::affects_line_p): New.
	(fixit_remove::fixit_remove): New.
	(fixit_remove::affects_line_p): New.
	(fixit_replace::fixit_replace): New.
	(fixit_replace::~fixit_replace): New.
	(fixit_replace::affects_line_p): New.

From-SVN: r230674
2015-11-20 20:08:47 +00:00
..
include PR 62314: add ability to add fixit-hints to a diagnostic 2015-11-20 20:08:47 +00:00
po * zh_TW.po: Update. 2015-10-08 16:55:25 +01:00
aclocal.m4 libcpp: Bump to automake 1.11.6 2015-05-13 11:02:17 +00:00
ChangeLog PR 62314: add ability to add fixit-hints to a diagnostic 2015-11-20 20:08:47 +00:00
ChangeLog.jit Merger of dmalcolm/jit branch from git 2014-11-11 21:55:52 +00:00
charset.c re PR preprocessor/53690 ([C++11] \u0000 and \U00000000 are wrongly encoded as U+0001.) 2015-07-02 18:54:41 +00:00
config.in ENABLE_CHECKING refactoring: remove remaining occurrences 2015-11-04 15:01:46 +00:00
configure ENABLE_CHECKING refactoring: remove remaining occurrences 2015-11-04 15:01:46 +00:00
configure.ac ENABLE_CHECKING refactoring: remove remaining occurrences 2015-11-04 15:01:46 +00:00
directives-only.c Update copyright years. 2015-01-05 13:33:28 +01:00
directives.c Replace line_map union with C++ class hierarchy 2015-05-19 13:18:01 +00:00
errors.c re PR preprocessor/60736 (Crash in preprocessor including stdc-predef.h when it does not exist on glibc-based systems) 2015-11-19 09:27:12 +01:00
expr.c Implement N4197 - Adding u8 character literals 2015-06-30 12:58:48 +00:00
files.c re PR preprocessor/60736 (Crash in preprocessor including stdc-predef.h when it does not exist on glibc-based systems) 2015-11-19 09:27:12 +01:00
identifiers.c Update copyright years. 2015-01-05 13:33:28 +01:00
init.c [PATCH 2/9] ENABLE_CHECKING refactoring: libcpp 2015-10-21 16:22:03 -06:00
internal.h re PR preprocessor/53690 ([C++11] \u0000 and \U00000000 are wrongly encoded as U+0001.) 2015-07-02 18:54:41 +00:00
lex.c Source range tracking in libcpp and C FE, with bit-packing optimization 2015-11-13 16:29:59 +00:00
line-map.c PR 62314: add ability to add fixit-hints to a diagnostic 2015-11-20 20:08:47 +00:00
location-example.txt Source range tracking in libcpp and C FE, with bit-packing optimization 2015-11-13 16:29:59 +00:00
macro.c [PATCH 2/9] ENABLE_CHECKING refactoring: libcpp 2015-10-21 16:22:03 -06:00
Makefile.in Update copyright years. 2015-01-05 13:33:28 +01:00
makeucnid.c Update copyright years. 2015-01-05 13:33:28 +01:00
mkdeps.c Update copyright years. 2015-01-05 13:33:28 +01:00
pch.c Fix indentation issues seen by -Wmisleading-indentation 2015-05-05 19:41:11 +00:00
symtab.c Update copyright years. 2015-01-05 13:33:28 +01:00
system.h [PATCH 1/9] ENABLE_CHECKING refactoring 2015-10-21 15:16:31 -06:00
traditional.c re PR preprocessor/65238 (__has_attribute is not handled properly with -traditional-cpp.) 2015-03-23 09:02:39 +01:00
ucnid.h Update copyright years. 2015-01-05 13:33:28 +01:00
ucnid.tab Update copyright years. 2015-01-05 13:33:28 +01:00