aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichel Morin <mimomorin@gmail.com>2021-09-16 23:29:54 +0900
committerJason Merrill <jason@redhat.com>2021-09-23 16:25:45 -0400
commiteb9f099c3df2b1b4c5fb0fa25cfdfa3cb5fc817e (patch)
treea28c86b3c539ab861892909deb26560dae82da03
parentfe4e6c824a580012bf9034cc33f0b440df93f56f (diff)
downloadgcc-eb9f099c3df2b1b4c5fb0fa25cfdfa3cb5fc817e.zip
gcc-eb9f099c3df2b1b4c5fb0fa25cfdfa3cb5fc817e.tar.gz
gcc-eb9f099c3df2b1b4c5fb0fa25cfdfa3cb5fc817e.tar.bz2
c++: add spellcheck suggestions for typedef etc. [PR77565]
cp_keyword_starts_decl_specifier_p misses many keywords that can start decl-specifiers. This patch adds support for those keywords. PR c++/77565 gcc/cp/ChangeLog: * parser.c (cp_keyword_starts_decl_specifier_p): Handle more decl-specifiers (typedef/inline/cv/explicit/virtual/friend). gcc/testsuite/ChangeLog: * g++.dg/spellcheck-pr77565.C: New test.
-rw-r--r--gcc/cp/parser.c10
-rw-r--r--gcc/testsuite/g++.dg/spellcheck-pr77565.C12
2 files changed, 22 insertions, 0 deletions
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index 052fa25..1d1543d 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -1051,6 +1051,16 @@ cp_keyword_starts_decl_specifier_p (enum rid keyword)
case RID_FLOAT:
case RID_DOUBLE:
case RID_VOID:
+ /* CV qualifiers. */
+ case RID_CONST:
+ case RID_VOLATILE:
+ /* Function specifiers. */
+ case RID_EXPLICIT:
+ case RID_VIRTUAL:
+ /* friend/typdef/inline specifiers. */
+ case RID_FRIEND:
+ case RID_TYPEDEF:
+ case RID_INLINE:
/* GNU extensions. */
case RID_ATTRIBUTE:
case RID_TYPEOF:
diff --git a/gcc/testsuite/g++.dg/spellcheck-pr77565.C b/gcc/testsuite/g++.dg/spellcheck-pr77565.C
new file mode 100644
index 0000000..2257f7b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/spellcheck-pr77565.C
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+
+typdef int my_int; // { dg-error "1: 'typdef' does not name a type; did you mean 'typedef'\\?" }
+inlien int i_fn(); // { dg-error "1: 'inlien' does not name a type; did you mean 'inline'\\?" }
+coonst int ci = 1; // { dg-error "1: 'coonst' does not name a type; did you mean 'const'\\?" }
+voltil int vi = 2; // { dg-error "1: 'voltil' does not name a type; did you mean 'volatile'\\?" }
+
+class my_class {
+ explict my_class(int); // { dg-error "3: 'explict' does not name a type; did you mean 'explicit'\\?" }
+ friends double f_fn(); // { dg-error "3: 'friends' does not name a type; did you mean 'friend'\\?" }
+ virtial double v_fn(); // { dg-error "3: 'virtial' does not name a type; did you mean 'virtual'\\?" }
+};