From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10olkn2052.outbound.protection.outlook.com [40.92.41.52]) by sourceware.org (Postfix) with ESMTPS id 7A5483858C2C for ; Thu, 30 Sep 2021 18:24:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 7A5483858C2C ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fRdRAmL1kNOP+xC4ZqCUUhGA1MBOIma/apwl+KRwfS2XKStEkoAl32xAFfPCxFIlxrfAnrmKsJStAJiHUvLVYC5ZbEkqannu/FXpg+QHzRyE0uV7ZLKp98TztPNV1neScSqbCjyOmVtz17cKeQNSCtM6F4AxrKgPEbfAnZ/l3HIDaGYCAS3OqQTv5J2+DRjpKoYkzuhGwJwnxzoSL38ua6zQZYfNEhekurb+gbXVFdIcHpTB9CaaO467KIecsWT6qa6Jpa5yje8MvI1XSE4TfSfQWyuhzLZnPNsz44Tpjiuo62mlJNty0BcT0Qw46elPIflGpupBkSLNOJh6RCJROA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ImqO6VBzrzJsD0Xk0OXMEH9q2JAl5LoMr6CKUFHr+d4=; b=BpmHc7c5znWgnp4PFzGmTG9PxjgPGxo7uqwMPaomy1PPDPDcFOxSQF3JSZxEMQB4UFisX4oaSctyAiYssfPQLZJP1Ga+BEXjrMuunx/UfF4fg++La3KPuKPSLyZgBoi5+glZCGm/WhWUxlw9ZMJR7c9qSzfZhcJGbI44Z/6USe5Pem+S+VkVBx3YM9EV+sjVrnRKmlS4WvMlIXrcZY5EnDuHrO5RJoduNzIaOUtM99BTW7H9oydBjkWxhVdWjWToza6WO95JbBrR0bHnVnzqhc/QaydhRBOREeuCq0TfFtrY6DnhlBMZQCezuKPHYespJ6o6WE5j3CeBSsEb3ElwnQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none Received: from DM5PR0501MB3733.namprd05.prod.outlook.com (2603:10b6:4:80::23) by DM6PR05MB4507.namprd05.prod.outlook.com (2603:10b6:5:99::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4566.10; Thu, 30 Sep 2021 18:24:08 +0000 Received: from DM5PR0501MB3733.namprd05.prod.outlook.com ([fe80::80fb:3d56:dd10:755d]) by DM5PR0501MB3733.namprd05.prod.outlook.com ([fe80::80fb:3d56:dd10:755d%7]) with mapi id 15.20.4566.014; Thu, 30 Sep 2021 18:24:08 +0000 From: nick huang To: Jason Merrill , Gcc-patches Subject: Re: [PATCH] c++: Suppress error when cv-qualified reference is introduced by typedef [PR101783] Thread-Topic: [PATCH] c++: Suppress error when cv-qualified reference is introduced by typedef [PR101783] Thread-Index: AQHXsrWZBJl9f3l5jUKsfMN27vIgLau3A78GgALbRoCAAwo9Ww== Date: Thu, 30 Sep 2021 18:24:08 +0000 Message-ID: References: <41fa824d-59ff-07d1-50f5-2aacd88abf7e@redhat.com> In-Reply-To: <41fa824d-59ff-07d1-50f5-2aacd88abf7e@redhat.com> Accept-Language: en-CA, en-US Content-Language: en-CA X-MS-Has-Attach: yes X-MS-TNEF-Correlator: suggested_attachment_session_id: 9bed964e-2c64-3b76-089d-8c518d56d557 x-ms-exchange-messagesentrepresentingtype: 1 x-tmn: [qnRdCAdtZ0qamv4JqpWPK4rgdVNYKAI0] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: ffb9e912-e1dd-4b97-e1fb-08d9843f7e06 x-ms-traffictypediagnostic: DM6PR05MB4507: x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: OiPR0v61bhpd1Q8/JiG8QElfKauM7OQeqEA4tZ8EpYLQS32EkgCn/Z3ClDhi1THoPx0ZG0rav1cAtZfore08NT0i/RRBb7Ntt9gwv9YjAm3HgCwXku8Y1AyF1PFeFbsjpPBkgHfJBU71WxJ1KdPbzugDyyqJmopauAX4HyuPHmCOJ1ZTH01JV1oz9fxl5H9JSmWpT0S/NTjGXWkDgKql5sBCrPmHWBa77++n2yT83vk09B/gfKC/UDFian9LwKbOSu9neyyMtqNlFtXL3tEpg+XY44gJi6eLPL7bjcNXN0fqgGYyXUkBeysDr+Gs2zQamhW60B3tHSn0Xmg8DaDNAsvkYlYKwngmHRdmcQ1JfvNevejBVd7a+54Y4afog43J+NPQkQoQn5xR7LyvRTMyIr+BmG7oE52HzgBp3JUcCxyK+le8KG9tgr+YxHbxhxZ6Ah012WvwMGQ48b2mlOPu9CN8dk4orD+kJBe4hs5TuKg= x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: WCh75kSSmEowv43rPqMqTAIOZGgfrDAaQcQzrIj4JxYcg9Plj+j3lXWCs3PRmlDiTngzIM0mGHmPa6m2MkP7cl+rsjMETl2pLeHq3D8/xpV+iNuNXFOxNBcHHqXb16cve4p3RLRryin/HAU+TOjDAQ== x-ms-exchange-transport-forked: True Content-Type: multipart/mixed; boundary="_002_DM5PR0501MB37332F0CFBA3F98E949FB9C8B5AA9DM5PR0501MB3733_" MIME-Version: 1.0 X-OriginatorOrg: sct-15-20-3174-8-msonline-outlook-e6bda.templateTenant X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM5PR0501MB3733.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: ffb9e912-e1dd-4b97-e1fb-08d9843f7e06 X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Sep 2021 18:24:08.1022 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR05MB4507 X-Spam-Status: No, score=-9.0 required=5.0 tests=BAYES_00, BODY_8BITS, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, 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: Thu, 30 Sep 2021 18:24:12 -0000 --_002_DM5PR0501MB37332F0CFBA3F98E949FB9C8B5AA9DM5PR0501MB3733_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable >>You may need to run contrib/gcc-git-customization.sh to get the git =0A= >>gcc-verify command.=0A= I re-setup and can use git gcc-verify. Now I can see it rejects because I f= orgot to add a =0A= description of modified file. Now that it passes gcc-verify and I attach th= e changelog =0A= as attachment.=0A= =0A= Thank you again for your patient explanation and help!=0A= =0A= =0A= =0A= On 9/26/21 21:31, nick huang via Gcc-patches wrote:=0A= > Hi Jason,=0A= > =0A= > 1. Thank you very much for your detailed comments for my patch and I real= ly appreciate it! Here is my revised patch:=0A= > =0A= > The root cause of this bug is that it considers reference with=0A= > cv-qualifiers as an error by generating value for variable "bad_quals".= =0A= > However, this is not correct for case of typedef. Here I quote spec:=0A= > "Cv-qualified references are ill-formed except when the cv-qualifiers=0A= > are introduced through the use of a typedef-name ([dcl.typedef],=0A= > [temp.param]) or decltype-specifier ([dcl.type.decltype]),=0A= > in which case the cv-qualifiers are ignored."=0A= > =0A= > 2021-09-25=A0 qingzhe huang=A0 =0A= > =0A= > gcc/cp/=0A= >=A0=A0=A0=A0=A0=A0=A0 PR c++/101783=0A= >=A0=A0=A0=A0=A0=A0=A0 * tree.c (cp_build_qualified_type_real):=0A= =0A= git gcc-verify still rejects this line with=0A= =0A= ERR: missing description of a change: " * tree.c =0A= (cp_build_qualified_type_real):"=0A= =0A= You may need to run contrib/gcc-git-customization.sh to get the git =0A= gcc-verify command.=0A= =0A= > gcc/testsuite/=0A= >=A0=A0=A0=A0=A0=A0=A0 PR c++/101783=0A= >=A0=A0=A0=A0=A0=A0=A0 * g++.dg/parse/pr101783.C: New test.=0A= > -------------- next part --------------=0A= =0A= Please drop this line, it breaks git gcc-verify when I apply the patch =0A= with git am.=A0 The patch should start immediately after the ChangeLog =0A= entries.=0A= =0A= > diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c=0A= > index 8840932dba2..d5c8daeb340 100644=0A= > --- a/gcc/cp/tree.c=0A= > +++ b/gcc/cp/tree.c=0A= > @@ -1356,11 +1356,18 @@ cp_build_qualified_type_real (tree type,=0A= >=A0=A0=A0=A0 /* A reference or method type shall not be cv-qualified.=0A= >=A0=A0=A0=A0=A0=A0=A0 [dcl.ref], [dcl.fct].=A0 This used to be an error, b= ut as of DR 295=0A= >=A0=A0=A0=A0=A0=A0=A0 (in CD1) we always ignore extra cv-quals on function= s.=A0 */=0A= > +=0A= > +=A0 /* Cv-qualified references are ill-formed except when the cv-qualifi= ers=0A= =0A= In my previous reply I meant please add "[dcl.ref]/1" at the beginning =0A= of this comment.=0A= =0A= > +=A0=A0=A0=A0 are introduced through the use of a typedef-name ([dcl.type= def],=0A= > +=A0=A0=A0=A0 [temp.param]) or decltype-specifier ([dcl.type.decltype]),= =0A= > +=A0=A0=A0=A0 in which case the cv-qualifiers are ignored.=0A= > +=A0=A0 */=0A= >=A0=A0=A0=A0 if (type_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)=0A= >=A0=A0=A0=A0=A0=A0=A0=A0 && (TYPE_REF_P (type)=0A= >=A0=A0=A0=A0=A0=A0=A0=A0=A0 || FUNC_OR_METHOD_TYPE_P (type)))=0A= >=A0=A0=A0=A0=A0=A0 {=0A= > -=A0=A0=A0=A0=A0 if (TYPE_REF_P (type))=0A= > +=A0=A0=A0=A0=A0 if (TYPE_REF_P (type)=0A= > +=A0=A0=A0=A0=A0=A0 && (!typedef_variant_p (type) || FUNC_OR_METHOD_TYPE_= P (type)))=0A= >=A0=A0=A0=A0=A0=A0=A0 bad_quals |=3D type_quals & (TYPE_QUAL_CONST | TYPE_= QUAL_VOLATILE);=0A= >=A0=A0=A0=A0=A0=A0=A0=A0 type_quals &=3D ~(TYPE_QUAL_CONST | TYPE_QUAL_VOL= ATILE);=0A= >=A0=A0=A0=A0=A0=A0 }=0A= > diff --git a/gcc/testsuite/g++.dg/parse/pr101783.C b/gcc/testsuite/g++.dg= /parse/pr101783.C=0A= > new file mode 100644=0A= > index 00000000000..4e0a435dd0b=0A= > --- /dev/null=0A= > +++ b/gcc/testsuite/g++.dg/parse/pr101783.C=0A= > @@ -0,0 +1,5 @@=0A= > +template struct A{=0A= > +=A0=A0=A0=A0=A0=A0=A0 typedef T& Type;=0A= > +};=0A= > +template void f(const typename A::Type){}=0A= > +template <> void f(const typename A::Type){}=0A= > =0A= > =0A= > =0A= > 2.=0A= >> In Jonathan's earlier reply he asked how you tested the patch; this=0A= >> message still doesn't say anything about that.=0A= > I communicated with Mr. Jonathan in private email, worrying my naive ques= tion might pollute the public maillist. The following is major part of this= communication and I attached original part in attachment.=0A= > =0A= >>>> How has this patch been tested? Have you bootstrapped the compiler and= =0A= >>>> run the full testsuite?=0A= > Here is how I am doing:=0A= > a) build original 10.2.0 from scratch and make check to get both "testsui= te/gcc/gcc.sum"=0A= > and "testsuite/g++/g++.sum".=0A= > b) apply my patch and build from scratch and make check to get both two f= iles above.=0A= > c) compare two run's *.sum files to see if there is any difference.=0A= > =0A= >=A0=A0 (Later I realized there is tool=A0 "contrib/compare_tests" is a goo= d help of doing so.)=0A= > =0A= > 3.=0A= >> What is the legal status of your contributions?=0A= > I thought small patch didn't require assignment. However, I just sent ema= il to assign@gnu.org to request assignment.=0A= > Alternatively, I am not sure if adding this "signoff" tag in submission w= ill help?=0A= > Signed-off-by: qingzhe huang =0A= > =0A= > =0A= > Thank you again!=0A= > =0A= > =0A= >> On 8/28/21 07:54, nick huang via Gcc-patches wrote:=0A= >>> Reference with cv-qualifiers should be ignored instead of causing an er= ror=0A= >>> because standard accepts cv-qualified references introduced by typedef = which=0A= >>> is ignored.=0A= >>> Therefore, the fix prevents GCC from reporting error by not setting var= iable=0A= >>> "bad_quals" in case the reference is introduced by typedef. Still the= =0A= >>> cv-qualifier is silently ignored.=0A= >>> Here I quote spec (https://timsong-cpp.github.io/cppwp/dcl.ref#1):=0A= >>> "Cv-qualified references are ill-formed except when the cv-qualifiers= =0A= >>> are introduced through the use of a typedef-name ([dcl.typedef],=0A= >>> [temp.param]) or decltype-specifier ([dcl.type.decltype]),=0A= >>> in which case the cv-qualifiers are ignored."=0A= >>>=0A= >>> PR c++/101783=0A= >>>=0A= >>> gcc/cp/ChangeLog:=0A= >>>=0A= >>> 2021-08-27=A0 qingzhe huang=A0 =0A= >>>=0A= >>> * tree.c (cp_build_qualified_type_real):=0A= >>=0A= >> The git commit verifier rejects this commit message with=0A= >>=0A= >> Checking 1fa0fbcdd15adf936ab4fae584f841beb35da1bb: FAILED ERR: missing= =0A= >> description of a change:=0A= >> " * tree.c (cp_build_qualified_type_real):"=0A= >>=0A= >> (your initial patch had a description here, you just need to copy it ove= r)=0A= >>=0A= >> ERR: PR 101783 in subject but not in changelog:=0A= >> "c++: Suppress error when cv-qualified reference is introduced by=0A= >> typedef [PR101783]"=0A= >>=0A= >> (the PR number needs to have a Tab before it)=0A= >>=0A= >> In Jonathan's earlier reply he asked how you tested the patch; this=0A= >> message still doesn't say anything about that.=0A= >>=0A= >> https://gcc.gnu.org/contribute.html#testing=0A= >>=0A= >> What is the legal status of your contributions?=0A= >>=0A= >> https://gcc.gnu.org/contribute.html#legal=0A= >>=0A= >> Existing code tries to handle this with the tf_ignore_bad_quals, but the= =0A= >> unnecessary use of typename gets past the code that tries to set the=0A= >> flag.=A0 But your approach is nice and straightforward, so let's go ahea= d=0A= >> with it.=0A= >>=0A= >>> gcc/testsuite/ChangeLog:=0A= >>>=0A= >>> 2021-08-27=A0 qingzhe huang=A0 =0A= >>>=0A= >>> * g++.dg/parse/pr101783.C: New test.=0A= >>>=0A= >>> diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c=0A= >>> index 8840932dba2..7aa4318a574 100644=0A= >>> --- a/gcc/cp/tree.c=0A= >>> +++ b/gcc/cp/tree.c=0A= >>> @@ -1356,12 +1356,22 @@ cp_build_qualified_type_real (tree type,=0A= >>>=A0=A0=A0=A0=A0 /* A reference or method type shall not be cv-qualified.= =0A= >>>=A0=A0=A0=A0=A0=A0=A0=A0 [dcl.ref], [dcl.fct].=A0 This used to be an err= or, but as of DR 295=0A= >>>=A0=A0=A0=A0=A0=A0=A0=A0 (in CD1) we always ignore extra cv-quals on fun= ctions.=A0 */=0A= >>> +=0A= >>> +=A0 /* PR 101783=0A= >>=0A= >> Let's cite where this comes from in the standard ([dcl.ref]/1), and not= =0A= >> the PR number.=0A= >>=0A= >>> +=A0=A0=A0=A0 Cv-qualified references are ill-formed except when the cv= -qualifiers=0A= >>> +=A0=A0=A0=A0 are introduced through the use of a typedef-name ([dcl.ty= pedef],=0A= >>> +=A0=A0=A0=A0 [temp.param]) or decltype-specifier ([dcl.type.decltype])= ,=0A= >>> +=A0=A0=A0=A0 in which case the cv-qualifiers are ignored.=0A= >>> +=A0=A0 */=0A= >>>=A0=A0=A0=A0=A0 if (type_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)= =0A= >>>=A0=A0=A0=A0=A0=A0=A0=A0=A0 && (TYPE_REF_P (type)=0A= >>>=A0=A0=A0=A0 || FUNC_OR_METHOD_TYPE_P (type)))=0A= >>>=A0=A0=A0=A0=A0=A0=A0 {=0A= >>> -=A0=A0=A0=A0=A0 if (TYPE_REF_P (type))=0A= >>> +=A0=A0=A0=A0=A0 // do NOT set bad_quals when non-method reference is i= ntroduced by typedef.=0A= >>> +=A0=A0=A0=A0=A0 if (TYPE_REF_P (type)=0A= >>> +=A0 && (!typedef_variant_p (type) || FUNC_OR_METHOD_TYPE_P (type)))=0A= >>>=A0=A0=A0 bad_quals |=3D type_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLAT= ILE);=0A= >>> +=A0=A0=A0=A0=A0 // non-method reference introduced by typedef is also = dropped silently=0A= >>=0A= >> These two // comments seem redundant with the quote from the standard=0A= >> above, let's drop them.=0A= >>=0A= >>>=A0=A0=A0=A0=A0=A0=A0=A0=A0 type_quals &=3D ~(TYPE_QUAL_CONST | TYPE_QUA= L_VOLATILE);=0A= >>>=A0=A0=A0=A0=A0=A0=A0 }=0A= >>>=A0=A0 =0A= >>> diff --git a/gcc/testsuite/g++.dg/parse/pr101783.C b/gcc/testsuite/g++.= dg/parse/pr101783.C=0A= >>> new file mode 100644=0A= >>> index 00000000000..4e0a435dd0b=0A= >>> --- /dev/null=0A= >>> +++ b/gcc/testsuite/g++.dg/parse/pr101783.C=0A= >>> @@ -0,0 +1,5 @@=0A= >>> +template struct A{=0A= >>> +=A0=A0=A0=A0=A0=A0=A0 typedef T& Type;=0A= >>> +};=0A= >>> +template void f(const typename A::Type){}=0A= >>> +template <> void f(const typename A::Type){}=0A= >>>=0A= >>>=0A= --_002_DM5PR0501MB37332F0CFBA3F98E949FB9C8B5AA9DM5PR0501MB3733_ Content-Type: text/plain; name="pr101783.txt" Content-Description: pr101783.txt Content-Disposition: attachment; filename="pr101783.txt"; size=2158; creation-date="Thu, 30 Sep 2021 18:19:20 GMT"; modification-date="Thu, 30 Sep 2021 18:19:20 GMT" Content-Transfer-Encoding: base64 VGhlIHJvb3QgY2F1c2Ugb2YgdGhpcyBidWcgaXMgdGhhdCBpdCBjb25zaWRlcnMgcmVmZXJlbmNl IHdpdGgKY3YtcXVhbGlmaWVycyBhcyBhbiBlcnJvciBieSBnZW5lcmF0aW5nIHZhbHVlIGZvciB2 YXJpYWJsZSAiYmFkX3F1YWxzIi4KSG93ZXZlciwgdGhpcyBpcyBub3QgY29ycmVjdCBmb3IgY2Fz ZSBvZiB0eXBlZGVmLiBIZXJlIEkgcXVvdGUgc3BlYwpbZGNsLnJlZl0vMSA6CiJDdi1xdWFsaWZp ZWQgcmVmZXJlbmNlcyBhcmUgaWxsLWZvcm1lZCBleGNlcHQgd2hlbiB0aGUgY3YtcXVhbGlmaWVy cwphcmUgaW50cm9kdWNlZCB0aHJvdWdoIHRoZSB1c2Ugb2YgYSB0eXBlZGVmLW5hbWUgKFtkY2wu dHlwZWRlZl0sClt0ZW1wLnBhcmFtXSkgb3IgZGVjbHR5cGUtc3BlY2lmaWVyIChbZGNsLnR5cGUu ZGVjbHR5cGVdKSwKaW4gd2hpY2ggY2FzZSB0aGUgY3YtcXVhbGlmaWVycyBhcmUgaWdub3JlZC4i CgoyMDIxLTA5LTMwICBxaW5nemhlIGh1YW5nICA8bmlja2h1YW5nOTlAaG90bWFpbC5jb20+Cgpn Y2MvY3AvQ2hhbmdlTG9nOgogICAgUFIgYysrLzEwMTc4MwogICAgKiB0cmVlLmMgKGNwX2J1aWxk X3F1YWxpZmllZF90eXBlX3JlYWwpOiBFeGNsdWRpbmcgdHlwZWRlZiBmcm9tIGVycm9yCgpnY2Mv dGVzdHN1aXRlL0NoYW5nZUxvZzoKICAgIFBSIGMrKy8xMDE3ODMKICAgICogZysrLmRnL3BhcnNl L3ByMTAxNzgzLkM6IE5ldyB0ZXN0LgoKZGlmZiAtLWdpdCBhL2djYy9jcC90cmVlLmMgYi9nY2Mv Y3AvdHJlZS5jCmluZGV4IDg4NDA5MzJkYmEyLi5jZGMyN2ZhY2YwMiAxMDA2NDQKLS0tIGEvZ2Nj L2NwL3RyZWUuYworKysgYi9nY2MvY3AvdHJlZS5jCkBAIC0xMzU2LDExICsxMzU2LDE4IEBAIGNw X2J1aWxkX3F1YWxpZmllZF90eXBlX3JlYWwgKHRyZWUgdHlwZSwKICAgLyogQSByZWZlcmVuY2Ug b3IgbWV0aG9kIHR5cGUgc2hhbGwgbm90IGJlIGN2LXF1YWxpZmllZC4KICAgICAgW2RjbC5yZWZd LCBbZGNsLmZjdF0uICBUaGlzIHVzZWQgdG8gYmUgYW4gZXJyb3IsIGJ1dCBhcyBvZiBEUiAyOTUK ICAgICAgKGluIENEMSkgd2UgYWx3YXlzIGlnbm9yZSBleHRyYSBjdi1xdWFscyBvbiBmdW5jdGlv bnMuICAqLworCisgIC8qIFtkY2wucmVmLzFdIEN2LXF1YWxpZmllZCByZWZlcmVuY2VzIGFyZSBp bGwtZm9ybWVkIGV4Y2VwdCB3aGVuCisgICAgIHRoZSBjdi1xdWFsaWZpZXJzIGFyZSBpbnRyb2R1 Y2VkIHRocm91Z2ggdGhlIHVzZSBvZiBhIHR5cGVkZWYtbmFtZQorICAgICAoW2RjbC50eXBlZGVm XSwgW3RlbXAucGFyYW1dKSBvciBkZWNsdHlwZS1zcGVjaWZpZXIKKyAgICAgKFtkY2wudHlwZS5k ZWNsdHlwZV0pLGluIHdoaWNoIGNhc2UgdGhlIGN2LXF1YWxpZmllcnMgYXJlIGlnbm9yZWQuCisg ICovCiAgIGlmICh0eXBlX3F1YWxzICYgKFRZUEVfUVVBTF9DT05TVCB8IFRZUEVfUVVBTF9WT0xB VElMRSkKICAgICAgICYmIChUWVBFX1JFRl9QICh0eXBlKQogCSAgfHwgRlVOQ19PUl9NRVRIT0Rf VFlQRV9QICh0eXBlKSkpCiAgICAgewotICAgICAgaWYgKFRZUEVfUkVGX1AgKHR5cGUpKQorICAg ICAgaWYgKFRZUEVfUkVGX1AgKHR5cGUpCisJICAmJiAoIXR5cGVkZWZfdmFyaWFudF9wICh0eXBl KSB8fCBGVU5DX09SX01FVEhPRF9UWVBFX1AgKHR5cGUpKSkKIAliYWRfcXVhbHMgfD0gdHlwZV9x dWFscyAmIChUWVBFX1FVQUxfQ09OU1QgfCBUWVBFX1FVQUxfVk9MQVRJTEUpOwogICAgICAgdHlw ZV9xdWFscyAmPSB+KFRZUEVfUVVBTF9DT05TVCB8IFRZUEVfUVVBTF9WT0xBVElMRSk7CiAgICAg fQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvcGFyc2UvcHIxMDE3ODMuQyBiL2dj Yy90ZXN0c3VpdGUvZysrLmRnL3BhcnNlL3ByMTAxNzgzLkMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLjRlMGE0MzVkZDBiCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rl c3RzdWl0ZS9nKysuZGcvcGFyc2UvcHIxMDE3ODMuQwpAQCAtMCwwICsxLDUgQEAKK3RlbXBsYXRl PGNsYXNzIFQ+IHN0cnVjdCBBeworICAgICAgICB0eXBlZGVmIFQmIFR5cGU7Cit9OwordGVtcGxh dGU8Y2xhc3MgVD4gdm9pZCBmKGNvbnN0IHR5cGVuYW1lIEE8VD46OlR5cGUpe30KK3RlbXBsYXRl IDw+IHZvaWQgZjxpbnQ+KGNvbnN0IHR5cGVuYW1lIEE8aW50Pjo6VHlwZSl7fQoKCg== --_002_DM5PR0501MB37332F0CFBA3F98E949FB9C8B5AA9DM5PR0501MB3733_--