aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.dg
diff options
context:
space:
mode:
authorDavid Malcolm <dmalcolm@redhat.com>2016-08-18 18:52:43 +0000
committerDavid Malcolm <dmalcolm@gcc.gnu.org>2016-08-18 18:52:43 +0000
commitcb18fd07f2962779c2651adc970541210d4ad98f (patch)
treeb325fd07e1c9c2f08551326602a989303e28ddfd /gcc/testsuite/gcc.dg
parenta76989dc7c9236214856db196da88a739f0e7baa (diff)
downloadgcc-cb18fd07f2962779c2651adc970541210d4ad98f.zip
gcc-cb18fd07f2962779c2651adc970541210d4ad98f.tar.gz
gcc-cb18fd07f2962779c2651adc970541210d4ad98f.tar.bz2
Spelling suggestions for misspelled preprocessor directives
This patch allows the preprocessor to offer suggestions for misspelled directives, taking us from e.g.: test.c:5:2: error: invalid preprocessing directive #endfi #endfi ^~~~~ to: test.c:5:2: error: invalid preprocessing directive #endfi; did you mean #endif? #endfi ^~~~~ endif gcc/c-family/ChangeLog: * c-common.c: Include "spellcheck.h". (cb_get_suggestion): New function. * c-common.h (cb_get_suggestion): New decl. * c-lex.c (init_c_lex): Initialize cb->get_suggestion to cb_get_suggestion. gcc/testsuite/ChangeLog: * gcc.dg/cpp/misspelled-directive-1.c: New testcase. * gcc.dg/cpp/misspelled-directive-2.c: New testcase. libcpp/ChangeLog: * directives.c (directive_names): New array. (_cpp_handle_directive): Offer spelling suggestions for misspelled directives. * errors.c (cpp_diagnostic_at_richloc): New function. (cpp_error_at_richloc): New function. * include/cpplib.h (struct cpp_callbacks): Add field "get_suggestion". (cpp_error_at_richloc): New decl. From-SVN: r239585
Diffstat (limited to 'gcc/testsuite/gcc.dg')
-rw-r--r--gcc/testsuite/gcc.dg/cpp/misspelled-directive-1.c12
-rw-r--r--gcc/testsuite/gcc.dg/cpp/misspelled-directive-2.c21
2 files changed, 33 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/cpp/misspelled-directive-1.c b/gcc/testsuite/gcc.dg/cpp/misspelled-directive-1.c
new file mode 100644
index 0000000..f79670a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/cpp/misspelled-directive-1.c
@@ -0,0 +1,12 @@
+#ifndef SOME_GUARD /* { dg-error "unterminated" } */
+
+#if 1
+/* Typo here: "endfi" should have been "endif". */
+#endfi /* { dg-error "invalid preprocessing directive #endfi; did you mean #endif?" } */
+
+int make_non_empty;
+
+/* Another transposition typo: */
+#deifne FOO /* { dg-error "invalid preprocessing directive #deifne; did you mean #define?" } */
+
+#endif /* #ifndef SOME_GUARD */
diff --git a/gcc/testsuite/gcc.dg/cpp/misspelled-directive-2.c b/gcc/testsuite/gcc.dg/cpp/misspelled-directive-2.c
new file mode 100644
index 0000000..7ec5dee
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/cpp/misspelled-directive-2.c
@@ -0,0 +1,21 @@
+/* { dg-options "-fdiagnostics-show-caret" } */
+
+#endfi /* { dg-error "invalid preprocessing directive #endfi; did you mean #endif?" } */
+
+/* Verify that we offer fix-it hints. */
+/* { dg-begin-multiline-output "" }
+ #endfi
+ ^~~~~
+ endif
+ { dg-end-multiline-output "" } */
+
+/* Test coverage for the case of an unrecognized directive where no suggestion
+ is offered. */
+
+#this_does_not_match_anything /* { dg-error "invalid preprocessing directive #this_does_not_match_anything" } */
+/* { dg-begin-multiline-output "" }
+ #this_does_not_match_anything
+ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ { dg-end-multiline-output "" } */
+
+int make_non_empty;