From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ua1-x92f.google.com (mail-ua1-x92f.google.com [IPv6:2607:f8b0:4864:20::92f]) by sourceware.org (Postfix) with ESMTPS id 0C6523858420 for ; Fri, 17 Sep 2021 17:31:31 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 0C6523858420 Received: by mail-ua1-x92f.google.com with SMTP id f24so6543173uav.8 for ; Fri, 17 Sep 2021 10:31:31 -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:references:in-reply-to:from:date :message-id:subject:to:cc; bh=olCDSQcoW8P0JW82e44QrAGGuyKQ5xwiKfryBucH+zY=; b=CLrwYDPqP8S/oYd/5jpwxC6T8CiGNl1YJr7Z4p+4mwu0wLv9JIFeBIC02QWClhwTPv b+IKwJi8YgY1sR5JJKC7ucl8/t+yJe2DtAtmymA4zUrxsrRDFLo7L3UX3PXlfUpcuwUx 8KeI+T6TPIfPJz+zfN6QwAxEkzMZo4JMdQAR/nR1WAFLW7KJaAQCjsLrmdbrX2F94obW paqexdgfSHT2sMVh7oS1vUdiP/6p71bwG5PGLy3u57nSZoI9lVr3PNrjdtPY6ANW1lWf 9F94Cu4/6izy1Ll2CXgjdrstUijlYCxR+TrqMZdh6WWgdQfoQd+T8BybzzNGEgUDVehT gCOg== X-Gm-Message-State: AOAM530BN6TQkzIl1ueRSZtvcfruzmNQIPlhb2a7mZ9lmPg9w5Tq61mA ffrFkVj/LB+5IJOjHfO888FQBXCN8XXGzKBWWhf+QD52Kbpuqw== X-Google-Smtp-Source: ABdhPJyjXt0LlEtyUMUYhklKxT0QCCFhb26zpFb6+R4mmTYjcI+GuP9nTiIcqxBS5wTsJ0QZ9DJFbHoIEwSJbVHeTBo= X-Received: by 2002:ab0:2b95:: with SMTP id q21mr5799254uar.59.1631899890457; Fri, 17 Sep 2021 10:31:30 -0700 (PDT) MIME-Version: 1.0 References: <63d2c5da-2089-2a41-9427-9c0d7d786272@redhat.com> In-Reply-To: From: Michel Morin Date: Sat, 18 Sep 2021 02:31:19 +0900 Message-ID: Subject: Re: [PATCH] c++: fix wrong fixit hints for misspelled typedef [PR77565] To: Jason Merrill Cc: David Malcolm , gcc-patches@gcc.gnu.org Content-Type: multipart/mixed; boundary="00000000000047c20a05cc344d62" X-Spam-Status: No, score=-9.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_ASCII_DIVIDERS, KAM_SHORT, 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: Fri, 17 Sep 2021 17:31:33 -0000 --00000000000047c20a05cc344d62 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Sep 17, 2021 at 3:23 AM Jason Merrill wrote: > > On 9/16/21 11:50, Michel Morin wrote: > > On Thu, Sep 16, 2021 at 5:44 AM Jason Merrill wrote: > >> > >> On 9/14/21 04:29, Michel Morin via Gcc-patches wrote: > >>> On Tue, Sep 14, 2021 at 7:14 AM David Malcolm w= rote: > >>>> > >>>> On Tue, 2021-09-14 at 03:35 +0900, Michel Morin via Gcc-patches wrot= e: > >>>>> 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): > >>>> > >>>> Thanks for this patch (and for reporting the bug in the first place)= . > >>>> > >>>> I notice that, as well as being used for fix-it hints by > >>>> lookup_name_fuzzy (indirectly via suggest_rid_p), > >>>> cp_keyword_starts_decl_specifier_p is also used by > >>>> cp_lexer_next_token_is_decl_specifier_keyword, which is used by > >>>> cp_parser_lambda_declarator_opt and cp_parser_constructor_declarator= _p. > >>> > >>> Ah, you're right! Thank you for pointing this out. > >>> I failed to grep those functions somehow. > >>> > >>> One thing that confuses me is that cp_keyword_starts_decl_specifier_p > >>> misses many keywords that can start decl-specifiers (e.g. > >>> typedef/inline/cv-qual and friend/explicit/virtual). > >>> So let's wait C++ frontend maintainers ;) > >> > >> That is strange. Let's add all the rest of them as well. > > > > Done. Thanks for your help! > > > > One more thing =E2=80=94 cp_keyword_starts_decl_specifier_p includes RI= D_ATTRIBUTE > > (from the beginning; see https://gcc.gnu.org/PR28261 ), but attributes = are > > not decl-specifiers. Would it be reasonable to remove this? > > It looks like the place that PR28261 used > cp_lexer_next_token_is_decl_specifier_keyword specifically exempts > attributes: > > > && (!cp_lexer_next_token_is_decl_specifier_keyword (parser->l= exer) > > /* GNU attributes can actually appear both at the start o= f > > a parameter and parenthesized declarator. > > S (__attribute__((unused)) int); > > is a constructor, but > > S (__attribute__((unused)) foo) (int); > > is a function declaration. */ > > || (cp_parser_allow_gnu_extensions_p (parser) > > && cp_next_tokens_can_be_gnu_attribute_p (parser))) > > So yes, let's remove RID_ATTRIBUTE and the || clause there. I'd keep > the comment, but move it to go with the test for C++11 attributes below. Done. No regressions introduced. > > One more thing =E2=80=94 cp_keyword_starts_decl_specifier_p includes RI= D_ATTRIBUTE > > (from the beginning; see https://gcc.gnu.org/PR28261 ), but attributes = are > > not decl-specifiers. Oh, this is wrong. I thought that, since C++11 attributes are not a decl-specifier, neither are GNU attributes. But the comment just before cp_parser_decl_specifier_seq says that GNU attributes are considered as a decl-specifier. So I'm not confident about the removal of RID_ATTRIBUTE in cp_keyword_starts_decl_specifier_p... I've split the patch into two. The first one is for adding missing keywords= to fix PR77565 and the second one is for removing the "attribute" keyword. Here is the second patch (if this is not applied, that's no problem ;) ) =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D c++: adjust the handling of RID_ATTRIBUTE. gcc/cp/ChangeLog: * parser.c (cp_keyword_starts_decl_specifier_p): Do not handle RID_ATTRIBUTE. (cp_parser_constructor_declarator_p): Remove now-redundant checks. diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 40308d0d33f..d184a3aca7e 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -1062,7 +1062,6 @@ cp_keyword_starts_decl_specifier_p (enum rid keyword) case RID_TYPEDEF: case RID_INLINE: /* GNU extensions. */ - case RID_ATTRIBUTE: case RID_TYPEOF: /* C++11 extensions. */ case RID_DECLTYPE: @@ -30798,23 +30797,22 @@ cp_parser_constructor_declarator_p (cp_parser *parser, cp_parser_flags flags, /* A parameter declaration begins with a decl-specifier, which is either the "attribute" keyword, a storage class specifier, or (usually) a type-specifier. */ - && (!cp_lexer_next_token_is_decl_specifier_keyword (parser->lexer) - /* GNU attributes can actually appear both at the start of - a parameter and parenthesized declarator. - S (__attribute__((unused)) int); - is a constructor, but - S (__attribute__((unused)) foo) (int); - is a function declaration. */ - || (cp_parser_allow_gnu_extensions_p (parser) - && cp_next_tokens_can_be_gnu_attribute_p (parser))) - /* A parameter declaration can also begin with [[attribute]]. */ + && !cp_lexer_next_token_is_decl_specifier_keyword (parser->lexer) + /* GNU attributes can actually appear both at the start of + a parameter and parenthesized declarator. + S (__attribute__((unused)) int); + is a constructor, but + S (__attribute__((unused)) foo) (int); + is a function declaration. [[attribute]] can appear in the + first form too, but not in the second form. */ && !cp_next_tokens_can_be_std_attribute_p (parser)) { tree type; tree pushed_scope =3D NULL_TREE; unsigned saved_num_template_parameter_lists; - if (cp_next_tokens_can_be_gnu_attribute_p (parser)) + if (cp_parser_allow_gnu_extensions_p (parser) + && cp_next_tokens_can_be_gnu_attribute_p (parser)) { unsigned int n =3D cp_parser_skip_gnu_attributes_opt (parser, 1); while (--n) =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D Regards, Michel > > Both patches (with and without removal of RID_ATTRIBUTE) attached. > > No regressions on x86_64-apple-darwin. > > > > Regards, > > Michel > > > > > > > >>>> So I'm not sure if this fix is exactly correct - hopefully one of th= e > >>>> C++ frontend maintainers can chime in. If > >>>> cp_keyword_starts_decl_specifier_p isn't quite the right place for > >>>> this, the fix could probably go in suggest_rid_p instead, which *is* > >>>> specific to spelling corrections. > >>>> > >>>> Hope this is constructive; thanks again for the patch > >>>> Dave > >>>> > >>>> > >>>> > >>>>> > >>>>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > >>>>> 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 =3D 0; // { dg-error "1: 'coonst' does not name a ty= pe; > >>>>> did you mean 'const'?" } > >>>>> +/* { dg-begin-multiline-output "" } > >>>>> + coonst int ci =3D 0; > >>>>> + ^~~~~~ > >>>>> + const > >>>>> + { dg-end-multiline-output "" } */ > >>>>> + > >>>>> +voltil int vi; // { dg-error "1: 'voltil' does not name a type; di= d > >>>>> 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; di= d > >>>>> you mean 'static'?" } > >>>>> +/* { dg-begin-multiline-output "" } > >>>>> + statik int si; > >>>>> + ^~~~~~ > >>>>> + static > >>>>> + { dg-end-multiline-output "" } */ > >>>>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > >>>>> > >>>>> -- > >>>>> Regards, > >>>>> Michel > >>>> > >>>> > >>> > >> > --00000000000047c20a05cc344d62 Content-Type: text/plain; charset="US-ASCII"; name="add_only.git_diff.txt" Content-Disposition: attachment; filename="add_only.git_diff.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kton11yz0 RnJvbSBlNDlkMGZjZmM2MTZkY2Q5MGI3NDc4YmRmODk0NjY1MDNhMDMzYjEyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBtb3Jpbm1vcmluIDxtaW1vbW9yaW5AZ21haWwuY29tPgpEYXRl OiBUaHUsIDE2IFNlcCAyMDIxIDIzOjI5OjU0ICswOTAwClN1YmplY3Q6IFtQQVRDSF0gYysrOiBh ZGQgc3BlbGxjaGVjayBzdWdnZXN0aW9ucyBmb3IgdHlwZWRlZiBldGMuIFtQUjc3NTY1XQoKY3Bf a2V5d29yZF9zdGFydHNfZGVjbF9zcGVjaWZpZXJfcCBtaXNzZXMgbWFueSBrZXl3b3JkcyB0aGF0 IGNhbgpzdGFydCBkZWNsLXNwZWNpZmllcnMuIFRoaXMgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0 aG9zZSBrZXl3b3Jkcy4KCglQUiBjKysvNzc1NjUKCmdjYy9jcC9DaGFuZ2VMb2c6CgoJKiBwYXJz ZXIuYyAoY3Bfa2V5d29yZF9zdGFydHNfZGVjbF9zcGVjaWZpZXJfcCk6IEhhbmRsZSBtb3JlCglk ZWNsLXNwZWNpZmllcnMgKHR5cGVkZWYvaW5saW5lL2N2L2V4cGxpY2l0L3ZpcnR1YWwvZnJpZW5k KS4KCmdjYy90ZXN0c3VpdGUvQ2hhbmdlTG9nOgoKCSogZysrLmRnL3NwZWxsY2hlY2stcHI3NzU2 NS5DOiBOZXcgdGVzdC4KLS0tCiBnY2MvY3AvcGFyc2VyLmMgICAgICAgICAgICAgICAgICAgICAg ICAgICB8IDEwICsrKysrKysrKysKIGdjYy90ZXN0c3VpdGUvZysrLmRnL3NwZWxsY2hlY2stcHI3 NzU2NS5DIHwgMTIgKysrKysrKysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDIyIGluc2VydGlvbnMo KykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2crKy5kZy9zcGVsbGNoZWNrLXBy Nzc1NjUuQwoKZGlmZiAtLWdpdCBhL2djYy9jcC9wYXJzZXIuYyBiL2djYy9jcC9wYXJzZXIuYwpp bmRleCA4ZDYwZjQwNzA2Yi4uNDAzMDhkMGQzM2YgMTAwNjQ0Ci0tLSBhL2djYy9jcC9wYXJzZXIu YworKysgYi9nY2MvY3AvcGFyc2VyLmMKQEAgLTEwNTEsNiArMTA1MSwxNiBAQCBjcF9rZXl3b3Jk X3N0YXJ0c19kZWNsX3NwZWNpZmllcl9wIChlbnVtIHJpZCBrZXl3b3JkKQogICAgIGNhc2UgUklE X0ZMT0FUOgogICAgIGNhc2UgUklEX0RPVUJMRToKICAgICBjYXNlIFJJRF9WT0lEOgorICAgICAg LyogQ1YgcXVhbGlmaWVycy4gICovCisgICAgY2FzZSBSSURfQ09OU1Q6CisgICAgY2FzZSBSSURf Vk9MQVRJTEU6CisgICAgICAvKiBGdW5jdGlvbiBzcGVjaWZpZXJzLiAgKi8KKyAgICBjYXNlIFJJ RF9FWFBMSUNJVDoKKyAgICBjYXNlIFJJRF9WSVJUVUFMOgorICAgICAgLyogZnJpZW5kL3R5cGRl Zi9pbmxpbmUgc3BlY2lmaWVycy4gICovCisgICAgY2FzZSBSSURfRlJJRU5EOgorICAgIGNhc2Ug UklEX1RZUEVERUY6CisgICAgY2FzZSBSSURfSU5MSU5FOgogICAgICAgLyogR05VIGV4dGVuc2lv bnMuICAqLwogICAgIGNhc2UgUklEX0FUVFJJQlVURToKICAgICBjYXNlIFJJRF9UWVBFT0Y6CmRp ZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2crKy5kZy9zcGVsbGNoZWNrLXByNzc1NjUuQyBiL2dj Yy90ZXN0c3VpdGUvZysrLmRnL3NwZWxsY2hlY2stcHI3NzU2NS5DCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yMjU3ZjdiNjk5ZAotLS0gL2Rldi9udWxsCisrKyBiL2dj Yy90ZXN0c3VpdGUvZysrLmRnL3NwZWxsY2hlY2stcHI3NzU2NS5DCkBAIC0wLDAgKzEsMTIgQEAK Ky8qIHsgZGctZG8gY29tcGlsZSB9ICovCisKK3R5cGRlZiBpbnQgbXlfaW50OyAvLyB7IGRnLWVy cm9yICIxOiAndHlwZGVmJyBkb2VzIG5vdCBuYW1lIGEgdHlwZTsgZGlkIHlvdSBtZWFuICd0eXBl ZGVmJ1xcPyIgfQoraW5saWVuIGludCBpX2ZuKCk7IC8vIHsgZGctZXJyb3IgIjE6ICdpbmxpZW4n IGRvZXMgbm90IG5hbWUgYSB0eXBlOyBkaWQgeW91IG1lYW4gJ2lubGluZSdcXD8iIH0KK2Nvb25z dCBpbnQgY2kgPSAxOyAvLyB7IGRnLWVycm9yICIxOiAnY29vbnN0JyBkb2VzIG5vdCBuYW1lIGEg dHlwZTsgZGlkIHlvdSBtZWFuICdjb25zdCdcXD8iIH0KK3ZvbHRpbCBpbnQgdmkgPSAyOyAvLyB7 IGRnLWVycm9yICIxOiAndm9sdGlsJyBkb2VzIG5vdCBuYW1lIGEgdHlwZTsgZGlkIHlvdSBtZWFu ICd2b2xhdGlsZSdcXD8iIH0KKworY2xhc3MgbXlfY2xhc3MgeworICBleHBsaWN0IG15X2NsYXNz KGludCk7IC8vIHsgZGctZXJyb3IgIjM6ICdleHBsaWN0JyBkb2VzIG5vdCBuYW1lIGEgdHlwZTsg ZGlkIHlvdSBtZWFuICdleHBsaWNpdCdcXD8iIH0KKyAgZnJpZW5kcyBkb3VibGUgZl9mbigpOyAv LyB7IGRnLWVycm9yICIzOiAnZnJpZW5kcycgZG9lcyBub3QgbmFtZSBhIHR5cGU7IGRpZCB5b3Ug bWVhbiAnZnJpZW5kJ1xcPyIgfQorICB2aXJ0aWFsIGRvdWJsZSB2X2ZuKCk7IC8vIHsgZGctZXJy b3IgIjM6ICd2aXJ0aWFsJyBkb2VzIG5vdCBuYW1lIGEgdHlwZTsgZGlkIHlvdSBtZWFuICd2aXJ0 dWFsJ1xcPyIgfQorfTsKLS0gCjIuMzEuMQoK --00000000000047c20a05cc344d62 Content-Type: text/plain; charset="US-ASCII"; name="remove_attr.git_diff.txt" Content-Disposition: attachment; filename="remove_attr.git_diff.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kton15vq1 RnJvbSBkMDcyMWU4NmFkN2FlODBjODBjZDRiZWMwMjQzNDNiODM0NzIzNzIzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBtb3Jpbm1vcmluIDxtaW1vbW9yaW5AZ21haWwuY29tPgpEYXRl OiBTYXQsIDE4IFNlcCAyMDIxIDAxOjQ1OjEyICswOTAwClN1YmplY3Q6IFtQQVRDSF0gYysrOiBh ZGp1c3QgdGhlIGhhbmRsaW5nIG9mIFJJRF9BVFRSSUJVVEUuCgpnY2MvY3AvQ2hhbmdlTG9nOgoK CSogcGFyc2VyLmMgKGNwX2tleXdvcmRfc3RhcnRzX2RlY2xfc3BlY2lmaWVyX3ApOiBEbyBub3QK CWhhbmRsZSBSSURfQVRUUklCVVRFLgoJKGNwX3BhcnNlcl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdG9y X3ApOiBSZW1vdmUgbm93LXJlZHVuZGFudAoJY2hlY2tzLgoKZGlmZiAtLWdpdCBhL2djYy9jcC9w YXJzZXIuYyBiL2djYy9jcC9wYXJzZXIuYwppbmRleCA0MDMwOGQwZDMzZi4uZDE4NGEzYWNhN2Ug MTAwNjQ0Ci0tLSBhL2djYy9jcC9wYXJzZXIuYworKysgYi9nY2MvY3AvcGFyc2VyLmMKQEAgLTEw NjIsNyArMTA2Miw2IEBAIGNwX2tleXdvcmRfc3RhcnRzX2RlY2xfc3BlY2lmaWVyX3AgKGVudW0g cmlkIGtleXdvcmQpCiAgICAgY2FzZSBSSURfVFlQRURFRjoKICAgICBjYXNlIFJJRF9JTkxJTkU6 CiAgICAgICAvKiBHTlUgZXh0ZW5zaW9ucy4gICovCi0gICAgY2FzZSBSSURfQVRUUklCVVRFOgog ICAgIGNhc2UgUklEX1RZUEVPRjoKICAgICAgIC8qIEMrKzExIGV4dGVuc2lvbnMuICAqLwogICAg IGNhc2UgUklEX0RFQ0xUWVBFOgpAQCAtMzA3OTgsMjMgKzMwNzk3LDIyIEBAIGNwX3BhcnNlcl9j b25zdHJ1Y3Rvcl9kZWNsYXJhdG9yX3AgKGNwX3BhcnNlciAqcGFyc2VyLCBjcF9wYXJzZXJfZmxh Z3MgZmxhZ3MsCiAJICAvKiBBIHBhcmFtZXRlciBkZWNsYXJhdGlvbiBiZWdpbnMgd2l0aCBhIGRl Y2wtc3BlY2lmaWVyLAogCSAgICAgd2hpY2ggaXMgZWl0aGVyIHRoZSAiYXR0cmlidXRlIiBrZXl3 b3JkLCBhIHN0b3JhZ2UgY2xhc3MKIAkgICAgIHNwZWNpZmllciwgb3IgKHVzdWFsbHkpIGEgdHlw ZS1zcGVjaWZpZXIuICAqLwotCSAgJiYgKCFjcF9sZXhlcl9uZXh0X3Rva2VuX2lzX2RlY2xfc3Bl Y2lmaWVyX2tleXdvcmQgKHBhcnNlci0+bGV4ZXIpCi0JICAgICAgLyogR05VIGF0dHJpYnV0ZXMg Y2FuIGFjdHVhbGx5IGFwcGVhciBib3RoIGF0IHRoZSBzdGFydCBvZgotCQkgYSBwYXJhbWV0ZXIg YW5kIHBhcmVudGhlc2l6ZWQgZGVjbGFyYXRvci4KLQkJIFMgKF9fYXR0cmlidXRlX18oKHVudXNl ZCkpIGludCk7Ci0JCSBpcyBhIGNvbnN0cnVjdG9yLCBidXQKLQkJIFMgKF9fYXR0cmlidXRlX18o KHVudXNlZCkpIGZvbykgKGludCk7Ci0JCSBpcyBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLiAgKi8K LQkgICAgICB8fCAoY3BfcGFyc2VyX2FsbG93X2dudV9leHRlbnNpb25zX3AgKHBhcnNlcikKLQkJ ICAmJiBjcF9uZXh0X3Rva2Vuc19jYW5fYmVfZ251X2F0dHJpYnV0ZV9wIChwYXJzZXIpKSkKLQkg IC8qIEEgcGFyYW1ldGVyIGRlY2xhcmF0aW9uIGNhbiBhbHNvIGJlZ2luIHdpdGggW1thdHRyaWJ1 dGVdXS4gICovCisJICAmJiAhY3BfbGV4ZXJfbmV4dF90b2tlbl9pc19kZWNsX3NwZWNpZmllcl9r ZXl3b3JkIChwYXJzZXItPmxleGVyKQorCSAgLyogR05VIGF0dHJpYnV0ZXMgY2FuIGFjdHVhbGx5 IGFwcGVhciBib3RoIGF0IHRoZSBzdGFydCBvZgorCSAgICAgYSBwYXJhbWV0ZXIgYW5kIHBhcmVu dGhlc2l6ZWQgZGVjbGFyYXRvci4KKwkgICAgIFMgKF9fYXR0cmlidXRlX18oKHVudXNlZCkpIGlu dCk7CisJICAgICBpcyBhIGNvbnN0cnVjdG9yLCBidXQKKwkgICAgIFMgKF9fYXR0cmlidXRlX18o KHVudXNlZCkpIGZvbykgKGludCk7CisJICAgICBpcyBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLiBb W2F0dHJpYnV0ZV1dIGNhbiBhcHBlYXIgaW4gdGhlCisJICAgICBmaXJzdCBmb3JtIHRvbywgYnV0 IG5vdCBpbiB0aGUgc2Vjb25kIGZvcm0uICAqLwogCSAgJiYgIWNwX25leHRfdG9rZW5zX2Nhbl9i ZV9zdGRfYXR0cmlidXRlX3AgKHBhcnNlcikpCiAJewogCSAgdHJlZSB0eXBlOwogCSAgdHJlZSBw dXNoZWRfc2NvcGUgPSBOVUxMX1RSRUU7CiAJICB1bnNpZ25lZCBzYXZlZF9udW1fdGVtcGxhdGVf cGFyYW1ldGVyX2xpc3RzOwogCi0JICBpZiAoY3BfbmV4dF90b2tlbnNfY2FuX2JlX2dudV9hdHRy aWJ1dGVfcCAocGFyc2VyKSkKKwkgIGlmIChjcF9wYXJzZXJfYWxsb3dfZ251X2V4dGVuc2lvbnNf cCAocGFyc2VyKQorCSAgICAgICYmIGNwX25leHRfdG9rZW5zX2Nhbl9iZV9nbnVfYXR0cmlidXRl X3AgKHBhcnNlcikpCiAJICAgIHsKIAkgICAgICB1bnNpZ25lZCBpbnQgbiA9IGNwX3BhcnNlcl9z a2lwX2dudV9hdHRyaWJ1dGVzX29wdCAocGFyc2VyLCAxKTsKIAkgICAgICB3aGlsZSAoLS1uKQot LSAKMi4zMS4xCgo= --00000000000047c20a05cc344d62--