This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH 1/4] Introduce gcc_rich_location::add_fixit_misspelled_id
- From: David Malcolm <dmalcolm at redhat dot com>
- To: gcc-patches at gcc dot gnu dot org
- Cc: David Malcolm <dmalcolm at redhat dot com>
- Date: Tue, 14 Jun 2016 11:15:50 -0400
- Subject: [PATCH 1/4] Introduce gcc_rich_location::add_fixit_misspelled_id
- Authentication-results: sourceware.org; auth=none
There's a fair amount of repetition in the code to emit
fixits for misspelled identifiers, and I plan to add more
such fixits, so this patch moves it to a helper method.
Successfully bootstrapped®rtested in combination with the rest of
the kit on x86_64-pc-linux-gnu
Successful -fself-test of stage1 on powerpc-ibm-aix7.1.3.0 of
just this patch by itself.
OK for trunk if it passes individual bootstrap®rtest?
gcc/c/ChangeLog:
* c-typeck.c (build_component_ref): Simplify fixit code by
using gcc_rich_location::add_fixit_misspelled_id.
(set_init_label): Likewise.
gcc/cp/ChangeLog:
* typeck.c: Include "gcc-rich-location.h".
(finish_class_member_access_expr): Simplify fixit code by
using gcc_rich_location::add_fixit_misspelled_id.
gcc/ChangeLog:
* gcc-rich-location.c
(gcc_rich_location::add_fixit_misspelled_id): New method.
* gcc-rich-location.h
(gcc_rich_location::add_fixit_misspelled_id): Add decl.
---
gcc/c/c-typeck.c | 16 ++++------------
gcc/cp/typeck.c | 10 ++++------
gcc/gcc-rich-location.c | 14 ++++++++++++++
gcc/gcc-rich-location.h | 3 +++
4 files changed, 25 insertions(+), 18 deletions(-)
diff --git a/gcc/c/c-typeck.c b/gcc/c/c-typeck.c
index ea04d5e..f987508 100644
--- a/gcc/c/c-typeck.c
+++ b/gcc/c/c-typeck.c
@@ -2371,14 +2371,9 @@ build_component_ref (location_t loc, tree datum, tree component,
we have a valid range for the component. */
location_t reported_loc
= (component_loc != UNKNOWN_LOCATION) ? component_loc : loc;
- rich_location rich_loc (line_table, reported_loc);
+ gcc_rich_location rich_loc (reported_loc);
if (component_loc != UNKNOWN_LOCATION)
- {
- source_range component_range =
- get_range_from_loc (line_table, component_loc);
- rich_loc.add_fixit_replace (component_range,
- IDENTIFIER_POINTER (guessed_id));
- }
+ rich_loc.add_fixit_misspelled_id (component_loc, guessed_id);
error_at_rich_loc
(&rich_loc,
"%qT has no member named %qE; did you mean %qE?",
@@ -8234,11 +8229,8 @@ set_init_label (location_t loc, tree fieldname, location_t fieldname_loc,
tree guessed_id = lookup_field_fuzzy (constructor_type, fieldname);
if (guessed_id)
{
- rich_location rich_loc (line_table, fieldname_loc);
- source_range component_range =
- get_range_from_loc (line_table, fieldname_loc);
- rich_loc.add_fixit_replace (component_range,
- IDENTIFIER_POINTER (guessed_id));
+ gcc_rich_location rich_loc (fieldname_loc);
+ rich_loc.add_fixit_misspelled_id (fieldname_loc, guessed_id);
error_at_rich_loc
(&rich_loc,
"%qT has no member named %qE; did you mean %qE?",
diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c
index f68c2a3..2ccd2da 100644
--- a/gcc/cp/typeck.c
+++ b/gcc/cp/typeck.c
@@ -36,6 +36,7 @@ along with GCC; see the file COPYING3. If not see
#include "c-family/c-objc.h"
#include "c-family/c-ubsan.h"
#include "params.h"
+#include "gcc-rich-location.h"
static tree cp_build_addr_expr_strict (tree, tsubst_flags_t);
static tree cp_build_function_call (tree, tree, tsubst_flags_t);
@@ -2831,12 +2832,9 @@ finish_class_member_access_expr (cp_expr object, tree name, bool template_p,
if (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));
+ gcc_rich_location rich_loc (bogus_component_loc);
+ rich_loc.add_fixit_misspelled_id (bogus_component_loc,
+ guessed_id);
error_at_rich_loc
(&rich_loc,
"%q#T has no member named %qE; did you mean %qE?",
diff --git a/gcc/gcc-rich-location.c b/gcc/gcc-rich-location.c
index a03ce0e..15c0700 100644
--- a/gcc/gcc-rich-location.c
+++ b/gcc/gcc-rich-location.c
@@ -60,3 +60,17 @@ gcc_rich_location::maybe_add_expr (tree t)
if (EXPR_P (t))
add_expr (t);
}
+
+/* Add a fixit hint suggesting replacing the range at MISSPELLED_TOKEN_LOC
+ with the identifier HINT_ID. */
+
+void
+gcc_rich_location::add_fixit_misspelled_id (location_t misspelled_token_loc,
+ tree hint_id)
+{
+ gcc_assert (TREE_CODE (hint_id) == IDENTIFIER_NODE);
+
+ source_range misspelled_token_range
+ = get_range_from_loc (line_table, misspelled_token_loc);
+ add_fixit_replace (misspelled_token_range, IDENTIFIER_POINTER (hint_id));
+}
diff --git a/gcc/gcc-rich-location.h b/gcc/gcc-rich-location.h
index fd332de..9c8a790 100644
--- a/gcc/gcc-rich-location.h
+++ b/gcc/gcc-rich-location.h
@@ -42,6 +42,9 @@ class gcc_rich_location : public rich_location
void
maybe_add_expr (tree t);
+
+ void add_fixit_misspelled_id (location_t misspelled_token_loc,
+ tree hint_id);
};
#endif /* GCC_RICH_LOCATION_H */
--
1.8.5.3