Commit bc1aee87 by David Malcolm Committed by David Malcolm

PR c++/62314: C++: add fixit hint to misspelled member names

When we emit a hint about a misspelled member name, it will slightly
aid readability if we use a fixit-hint to show the proposed
name in context within the source code (and in the future this
might support some kind of auto-apply in an IDE).

This patch adds such a hint to the C++ frontend, taking us from:

test.cc:10:15: error: 'struct foo' has no member named 'colour'; did you mean 'color'?
   return ptr->colour;
               ^~~~~~

to:

test.cc:10:15: error: 'struct foo' has no member named 'colour'; did you mean 'color'?
   return ptr->colour;
               ^~~~~~
               color

gcc/cp/ChangeLog:
	PR c++/62314
	* typeck.c (finish_class_member_access_expr): When
	giving a hint about a possibly-misspelled member name,
	add a fix-it replacement hint.

gcc/testsuite/ChangeLog:
	PR c++/62314
	* g++.dg/spellcheck-fields-2.C: New test case.

From-SVN: r235785
parent 7caed520
2016-05-02 David Malcolm <dmalcolm@redhat.com>
PR c++/62314
* typeck.c (finish_class_member_access_expr): When
giving a hint about a possibly-misspelled member name,
add a fix-it replacement hint.
2016-05-02 Cesar Philippidis <cesar@codesourcery.com>
* cp-tree.h (finish_omp_clauses): Update prototype.
......
......@@ -2817,9 +2817,21 @@ finish_class_member_access_expr (cp_expr object, tree name, bool template_p,
tree guessed_id = lookup_member_fuzzy (access_path, name,
/*want_type=*/false);
if (guessed_id)
error ("%q#T has no member named %qE; did you mean %qE?",
TREE_CODE (access_path) == TREE_BINFO
? TREE_TYPE (access_path) : object_type, name, guessed_id);
{
location_t bogus_component_loc = input_location;
rich_location rich_loc (line_table, bogus_component_loc);
source_range bogus_component_range =
get_range_from_loc (line_table, bogus_component_loc);
rich_loc.add_fixit_replace
(bogus_component_range,
IDENTIFIER_POINTER (guessed_id));
error_at_rich_loc
(&rich_loc,
"%q#T has no member named %qE; did you mean %qE?",
TREE_CODE (access_path) == TREE_BINFO
? TREE_TYPE (access_path) : object_type, name,
guessed_id);
}
else
error ("%q#T has no member named %qE",
TREE_CODE (access_path) == TREE_BINFO
......
2016-05-02 David Malcolm <dmalcolm@redhat.com>
PR c++/62314
* g++.dg/spellcheck-fields-2.C: New test case.
2016-05-02 David Malcolm <dmalcolm@redhat.com>
PR c++/62314
* g++.dg/pr62314.C: New test case.
2016-05-02 Jan Hubicka <hubicka@ucw.cz>
......
// { dg-options "-fdiagnostics-show-caret" }
union u
{
int color;
int shape;
};
int test (union u *ptr)
{
return ptr->colour; // { dg-error "did you mean .color.?" }
}
// Verify that we get an underline and a fixit hint.
/* { dg-begin-multiline-output "" }
return ptr->colour;
^~~~~~
color
{ dg-end-multiline-output "" } */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment