From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ua1-x935.google.com (mail-ua1-x935.google.com [IPv6:2607:f8b0:4864:20::935]) by sourceware.org (Postfix) with ESMTPS id C6F41385842B for ; Mon, 13 Sep 2021 18:35:29 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org C6F41385842B Received: by mail-ua1-x935.google.com with SMTP id s4so6854267uar.5 for ; Mon, 13 Sep 2021 11:35:29 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=1e2t+NDbw0Dnr/fkScy/7Skw+cYguU9weHrX6OLu28U=; b=wlTrIYBxsramWJm+8lzTk8q59q8H3J0UrSC1UKiILwDQ6M8C14Db+/ku2otNoBFsBg jBAitXfok6Ya6w8Piict8GC7HoGDVcOjsTqsWLODVmtnErpXfTPt28WxnRmiRGo6Ginl FnBhFd800OWFZeZEnfPuG1E/eN9Raj5sQkbvsHfabIqvyaqRxxSaQ+qdjx2GPHrQLBfw 0pzsyD8qJ8tLpHIkIQzR9X0HfshkoBQEjfr4YjhkZKab62Ongrt1epqXM7u/jJqoQLZb 5eHVl9gHi6b62L8VGa+VqUiG8OUxfx10KO38pFD44fs+FIYQLLhhDUBJPZKGGwIaVIZV WUGA== X-Gm-Message-State: AOAM533X6eNrQIui/7HVgEOPeZ5pB1pkeJJGga6Ok055xzetkRrlJXlj MhztrSVhIYHrKxn2wAKdzaeYhoy4YMVCPIt2oVcDP7mMhT5h5w== X-Google-Smtp-Source: ABdhPJwHdJxHxfOG7jPGzy1KH5esLQs/9h5LwpQafVxfHymLoDouahbaXlYUUte5issS0KXWTFymaeNjgXX7Rzp563Y= X-Received: by 2002:a9f:238b:: with SMTP id 11mr1155663uao.91.1631558129063; Mon, 13 Sep 2021 11:35:29 -0700 (PDT) MIME-Version: 1.0 From: Michel Morin Date: Tue, 14 Sep 2021 03:35:18 +0900 Message-ID: Subject: [PATCH] c++: fix wrong fixit hints for misspelled typedef [PR77565] To: gcc-patches@gcc.gnu.org Content-Type: multipart/mixed; boundary="000000000000b6bcf505cbe4ba79" X-Spam-Status: No, score=-10.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_ASCII_DIVIDERS, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Sep 2021 18:35:31 -0000 --000000000000b6bcf505cbe4ba79 Content-Type: text/plain; charset="UTF-8" Hi, PR77565 reports that, with the code `typdef int Int;`, GCC emits "did you mean 'typeof'?" instead of "did you mean 'typedef'?". This happens because the typo corrector determines that `typeof` is a candidate for suggestion (through `cp_keyword_starts_decl_specifier_p`), but `typedef` is not. This patch fixes the issue by adding `typedef` as a candidate. The patch additionally adds the `inline` specifier and cv-specifiers as a candidate. Here is a patch (tests `make check-gcc` pass on darwin): ============================================ c++: add typo corrections for typedef/inline/cv-qual [PR77565] PR c++/77565 gcc/cp/ChangeLog: * parser.c (cp_keyword_starts_decl_specifier_p): Handle typedef/inline specifiers and cv-qualifiers. gcc/testsuite/ChangeLog: * g++.dg/spellcheck-typenames.C: Add tests for decl-specs. --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -1051,6 +1051,12 @@ 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: + /* typedef/inline specifiers. */ + case RID_TYPEDEF: + case RID_INLINE: /* GNU extensions. */ case RID_ATTRIBUTE: case RID_TYPEOF: --- a/gcc/testsuite/g++.dg/spellcheck-typenames.C +++ b/gcc/testsuite/g++.dg/spellcheck-typenames.C @@ -76,3 +76,38 @@ singed char ch; // { dg-error "1: 'singed' does not name a type; did you mean 's ^~~~~~ signed { dg-end-multiline-output "" } */ + +typdef int my_int; // { dg-error "1: 'typdef' does not name a type; did you mean 'typedef'?" } +/* { dg-begin-multiline-output "" } + typdef int my_int; + ^~~~~~ + typedef + { dg-end-multiline-output "" } */ + +inlien int inline_func(); // { dg-error "1: 'inlien' does not name a type; did you mean 'inline'?" } +/* { dg-begin-multiline-output "" } + inlien int inline_func(); + ^~~~~~ + inline + { dg-end-multiline-output "" } */ + +coonst int ci = 0; // { dg-error "1: 'coonst' does not name a type; did you mean 'const'?" } +/* { dg-begin-multiline-output "" } + coonst int ci = 0; + ^~~~~~ + const + { dg-end-multiline-output "" } */ + +voltil int vi; // { dg-error "1: 'voltil' does not name a type; did you mean 'volatile'?" } +/* { dg-begin-multiline-output "" } + voltil int vi; + ^~~~~~ + volatile + { dg-end-multiline-output "" } */ + +statik int si; // { dg-error "1: 'statik' does not name a type; did you mean 'static'?" } +/* { dg-begin-multiline-output "" } + statik int si; + ^~~~~~ + static + { dg-end-multiline-output "" } */ ============================================ -- Regards, Michel --000000000000b6bcf505cbe4ba79 Content-Type: text/plain; charset="US-ASCII"; name="patch.txt" Content-Disposition: attachment; filename="patch.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ktizg77e0 ZGlmZiAtLWdpdCBhL2djYy9jcC9wYXJzZXIuYyBiL2djYy9jcC9wYXJzZXIuYwppbmRleCBmOWMy YzhhYzNhNy4uNTI5NTkxMWViODIgMTAwNjQ0Ci0tLSBhL2djYy9jcC9wYXJzZXIuYworKysgYi9n Y2MvY3AvcGFyc2VyLmMKQEAgLTEwNTEsNiArMTA1MSwxMiBAQCBjcF9rZXl3b3JkX3N0YXJ0c19k ZWNsX3NwZWNpZmllcl9wIChlbnVtIHJpZCBrZXl3b3JkKQogICAgIGNhc2UgUklEX0ZMT0FUOgog ICAgIGNhc2UgUklEX0RPVUJMRToKICAgICBjYXNlIFJJRF9WT0lEOgorICAgICAgLyogQ1YgcXVh bGlmaWVycy4gICovCisgICAgY2FzZSBSSURfQ09OU1Q6CisgICAgY2FzZSBSSURfVk9MQVRJTEU6 CisgICAgICAvKiB0eXBlZGVmL2lubGluZSBzcGVjaWZpZXJzLiAgKi8KKyAgICBjYXNlIFJJRF9U WVBFREVGOgorICAgIGNhc2UgUklEX0lOTElORToKICAgICAgIC8qIEdOVSBleHRlbnNpb25zLiAg Ki8KICAgICBjYXNlIFJJRF9BVFRSSUJVVEU6CiAgICAgY2FzZSBSSURfVFlQRU9GOgpkaWZmIC0t Z2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvc3BlbGxjaGVjay10eXBlbmFtZXMuQyBiL2djYy90 ZXN0c3VpdGUvZysrLmRnL3NwZWxsY2hlY2stdHlwZW5hbWVzLkMKaW5kZXggZmY1M2VjYzYzMDMu Ljc1ZjgwNDgwZTE2IDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2crKy5kZy9zcGVsbGNoZWNr LXR5cGVuYW1lcy5DCisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL3NwZWxsY2hlY2stdHlwZW5h bWVzLkMKQEAgLTc2LDMgKzc2LDM4IEBAIHNpbmdlZCBjaGFyIGNoOyAvLyB7IGRnLWVycm9yICIx OiAnc2luZ2VkJyBkb2VzIG5vdCBuYW1lIGEgdHlwZTsgZGlkIHlvdSBtZWFuICdzCiAgXn5+fn5+ CiAgc2lnbmVkCiAgICB7IGRnLWVuZC1tdWx0aWxpbmUtb3V0cHV0ICIiIH0gKi8KKwordHlwZGVm IGludCBteV9pbnQ7IC8vIHsgZGctZXJyb3IgIjE6ICd0eXBkZWYnIGRvZXMgbm90IG5hbWUgYSB0 eXBlOyBkaWQgeW91IG1lYW4gJ3R5cGVkZWYnPyIgfQorLyogeyBkZy1iZWdpbi1tdWx0aWxpbmUt b3V0cHV0ICIiIH0KKyB0eXBkZWYgaW50IG15X2ludDsKKyBefn5+fn4KKyB0eXBlZGVmCisgICB7 IGRnLWVuZC1tdWx0aWxpbmUtb3V0cHV0ICIiIH0gKi8KKworaW5saWVuIGludCBpbmxpbmVfZnVu YygpOyAvLyB7IGRnLWVycm9yICIxOiAnaW5saWVuJyBkb2VzIG5vdCBuYW1lIGEgdHlwZTsgZGlk IHlvdSBtZWFuICdpbmxpbmUnPyIgfQorLyogeyBkZy1iZWdpbi1tdWx0aWxpbmUtb3V0cHV0ICIi IH0KKyBpbmxpZW4gaW50IGlubGluZV9mdW5jKCk7CisgXn5+fn5+CisgaW5saW5lCisgICB7IGRn LWVuZC1tdWx0aWxpbmUtb3V0cHV0ICIiIH0gKi8KKworY29vbnN0IGludCBjaSA9IDA7IC8vIHsg ZGctZXJyb3IgIjE6ICdjb29uc3QnIGRvZXMgbm90IG5hbWUgYSB0eXBlOyBkaWQgeW91IG1lYW4g J2NvbnN0Jz8iIH0KKy8qIHsgZGctYmVnaW4tbXVsdGlsaW5lLW91dHB1dCAiIiB9CisgY29vbnN0 IGludCBjaSA9IDA7CisgXn5+fn5+CisgY29uc3QKKyAgIHsgZGctZW5kLW11bHRpbGluZS1vdXRw dXQgIiIgfSAqLworCit2b2x0aWwgaW50IHZpOyAvLyB7IGRnLWVycm9yICIxOiAndm9sdGlsJyBk b2VzIG5vdCBuYW1lIGEgdHlwZTsgZGlkIHlvdSBtZWFuICd2b2xhdGlsZSc/IiB9CisvKiB7IGRn LWJlZ2luLW11bHRpbGluZS1vdXRwdXQgIiIgfQorIHZvbHRpbCBpbnQgdmk7CisgXn5+fn5+Cisg dm9sYXRpbGUKKyAgIHsgZGctZW5kLW11bHRpbGluZS1vdXRwdXQgIiIgfSAqLworCitzdGF0aWsg aW50IHNpOyAvLyB7IGRnLWVycm9yICIxOiAnc3RhdGlrJyBkb2VzIG5vdCBuYW1lIGEgdHlwZTsg ZGlkIHlvdSBtZWFuICdzdGF0aWMnPyIgfQorLyogeyBkZy1iZWdpbi1tdWx0aWxpbmUtb3V0cHV0 ICIiIH0KKyBzdGF0aWsgaW50IHNpOworIF5+fn5+fgorIHN0YXRpYworICAgeyBkZy1lbmQtbXVs dGlsaW5lLW91dHB1dCAiIiB9ICovCg== --000000000000b6bcf505cbe4ba79--