From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa1.mentor.iphmx.com (esa1.mentor.iphmx.com [68.232.129.153]) by sourceware.org (Postfix) with ESMTPS id 763C73858C50 for ; Thu, 9 Feb 2023 10:16:44 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 763C73858C50 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com X-IronPort-AV: E=Sophos;i="5.97,283,1669104000"; d="diff'?scan'208";a="100163298" Received: from orw-gwy-02-in.mentorg.com ([192.94.38.167]) by esa1.mentor.iphmx.com with ESMTP; 09 Feb 2023 02:16:43 -0800 IronPort-SDR: 4GDVGYIDStH9cLs/ERVv79Ixcm4u0JbgqrFDz3r2jH+8xf41K+lqwTBQyVh30PPNFxk3/oqdjy kQbOIpYAkLFr2NHXQ6K6tEZG1Oys9sZk1MahgV5BcEQZBzpyAEauToGnZKZ2DfmQTWkuKg3Urf IKGod/vlBzrCvncUhBBfJeUVdkVn3YrY5QKC0ky/HN5oGSM0Ke/O/1/WrkMYL17GMLA+F7oPed uaelzVItcM7W8xC4j5mfKRQZExccrwbqKcTGOtIbfy9V1dMvG5rqySiBrnRh1Q5S+QAnFRkry2 vyY= Content-Type: multipart/mixed; boundary="------------YLcbTNYDsQEUjiIy8VJwwWZC" Message-ID: Date: Thu, 9 Feb 2023 11:16:39 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.7.2 Subject: Re: [Patch] OpenMP: Parse align clause in allocate directive in C/C++ Content-Language: en-US To: Jakub Jelinek CC: gcc-patches References: <857e44cb-92ce-7f1d-c036-579d2e345107@codesourcery.com> From: Tobias Burnus In-Reply-To: X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-10.mgc.mentorg.com (139.181.222.10) To svr-ies-mbx-12.mgc.mentorg.com (139.181.222.12) X-Spam-Status: No, score=-11.9 required=5.0 tests=BAYES_00,GIT_PATCH_0,HEADER_FROM_DIFFERENT_DOMAINS,KAM_DMARC_STATUS,NICE_REPLY_A,SPF_HELO_PASS,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --------------YLcbTNYDsQEUjiIy8VJwwWZC Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: quoted-printable Updated patch included. Changes: * Removed xfail for C++ * For C, I updated the comment as suggested. * For C++: I updated/extended the FIXME comment and added the 'align' check (the simple version as first suggested; I did not went for the one which supports some templates.) Any further comments before I commit it? Tobias On 31.01.23 13:09, Jakub Jelinek wrote: > On Tue, Dec 13, 2022 at 06:44:27PM +0100, Tobias Burnus wrote: >> OpenMP: Parse align clause in allocate directive in C/C++ >> >> gcc/c/ChangeLog: >> >> * c-parser.cc (c_parser_omp_allocate): Parse align >> clause and check for restrictions. >> >> gcc/cp/ChangeLog: >> >> * parser.cc (cp_parser_omp_allocate): Parse align >> clause. >> >> gcc/testsuite/ChangeLog: >> >> * c-c++-common/gomp/allocate-5.c: Extend for align clause. >> >> gcc/c/c-parser.cc | 88 ++++++++++++++++++++= -------- >> gcc/cp/parser.cc | 58 +++++++++++++----- >> gcc/testsuite/c-c++-common/gomp/allocate-5.c | 36 ++++++++++++ >> 3 files changed, 144 insertions(+), 38 deletions(-) >> >> diff --git a/gcc/c/c-parser.cc b/gcc/c/c-parser.cc >> index 1bbb39f9b08..62c302748dd 100644 >> --- a/gcc/c/c-parser.cc >> +++ b/gcc/c/c-parser.cc >> @@ -18819,32 +18819,71 @@ c_parser_oacc_wait (location_t loc, c_parser *= parser, char *p_name) >> return stmt; >> } >> >> -/* OpenMP 5.0: >> - # pragma omp allocate (list) [allocator(allocator)] */ >> +/* OpenMP 5.x: >> + # pragma omp allocate (list) clauses >> + >> + OpenMP 5.0 clause: >> + allocator (omp_allocator_handle_t expression) >> + >> + OpenMP 5.1 additional clause: >> + align (int expression)] */ > integer-expression or constant-expression or just expression. > Also, 2 spaces before */ rather than just one. > >> + else if (p[2] =3D=3D 'i') >> + { >> + alignment =3D c_fully_fold (expr.value, false, NULL); >> + if (TREE_CODE (alignment) !=3D INTEGER_CST >> + || !INTEGRAL_TYPE_P (TREE_TYPE (alignment)) >> + || tree_int_cst_sgn (alignment) !=3D 1 >> + || !integer_pow2p (alignment)) > Note, the reason why we diagnose this in c-parser.cc and for C++ > in semantics.cc rather than in parser.cc are templates, it would be > wasteful to handle it in two spots (parser.cc and during instantiation). > >> - if (allocator) >> + if (allocator || alignment) >> for (tree c =3D nl; c !=3D NULL_TREE; c =3D OMP_CLAUSE_CHAIN (c)) >> - OMP_CLAUSE_ALLOCATE_ALLOCATOR (c) =3D allocator; >> + { >> + OMP_CLAUSE_ALLOCATE_ALLOCATOR (c) =3D allocator; >> + OMP_CLAUSE_ALLOCATE_ALIGN (c) =3D alignment; >> + } > So, if you want for now until we actually support the directive > properly diagnose it here in the parser (otherwise there is nothing > to stick it on for later), then it would need either what semantics.cc > currently uses: > if (!type_dependent_expression_p (align) > && !INTEGRAL_TYPE_P (TREE_TYPE (align))) > { > error_at (OMP_CLAUSE_LOCATION (c), > "% clause % modifier " > "argument needs to be positive constant " > "power of two integer expression"); > remove =3D true; > } > else > { > align =3D mark_rvalue_use (align); > if (!processing_template_decl) > { > align =3D maybe_constant_value (align); > if (TREE_CODE (align) !=3D INTEGER_CST > || !tree_fits_uhwi_p (align) > || !integer_pow2p (align)) > { > error_at (OMP_CLAUSE_LOCATION (c), > "% clause % modif= ier " > "argument needs to be positive const= ant " > "power of two integer expression"); > remove =3D true; > } > } > } > with adjusted diagnostics, or perhaps instead of the > !processing_template_decl guarding do > fold_non_dependent_expr (align, !tf_none) > instead of maybe_constant_value and just for > processing_template_decl && TREE_CODE (align) !=3D INTEGER_CST > do nothing instead of the other tests and diagnostics. > With the !processing_template_decl guarding it wouldn't diagnose > ever non-power of two or non-constant operand in templates, > with fold_non_dependent_expr etc. it would as long as they are > not dependent. > > Otherwise LGTM, with or without the above changes. ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstra=C3=9Fe 201= , 80634 M=C3=BCnchen; Gesellschaft mit beschr=C3=A4nkter Haftung; Gesch=C3= =A4ftsf=C3=BChrer: Thomas Heurung, Frank Th=C3=BCrauf; Sitz der Gesellschaf= t: M=C3=BCnchen; Registergericht M=C3=BCnchen, HRB 106955 --------------YLcbTNYDsQEUjiIy8VJwwWZC Content-Type: text/x-patch; charset="UTF-8"; name="align-c-v2.diff" Content-Disposition: attachment; filename="align-c-v2.diff" Content-Transfer-Encoding: base64 T3Blbk1QOiBQYXJzZSBhbGlnbiBjbGF1c2UgaW4gYWxsb2NhdGUgZGlyZWN0aXZlIGluIEMv QysrCgpnY2MvYy9DaGFuZ2VMb2c6CgoJKiBjLXBhcnNlci5jYyAoY19wYXJzZXJfb21wX2Fs bG9jYXRlKTogUGFyc2UgYWxpZ24KCWNsYXVzZSBhbmQgY2hlY2sgZm9yIHJlc3RyaWN0aW9u cy4KCmdjYy9jcC9DaGFuZ2VMb2c6CgoJKiBwYXJzZXIuY2MgKGNwX3BhcnNlcl9vbXBfYWxs b2NhdGUpOiBQYXJzZSBhbGlnbgoJY2xhdXNlLgoKZ2NjL3Rlc3RzdWl0ZS9DaGFuZ2VMb2c6 CgoJKiBjLWMrKy1jb21tb24vZ29tcC9hbGxvY2F0ZS01LmM6IEV4dGVuZCBmb3IgYWxpZ24g Y2xhdXNlLgoKIGdjYy9jL2MtcGFyc2VyLmNjICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgODggKysrKysrKysrKysrKysrKysrLS0tLS0tLQogZ2NjL2NwL3BhcnNlci5jYyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfCA5NyArKysrKysrKysrKysrKysrKysrKysrKy0t LS0tCiBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9nb21wL2FsbG9jYXRlLTUuYyB8IDM2 ICsrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDE4MSBpbnNlcnRpb25zKCspLCA0MCBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9nY2MvYy9jLXBhcnNlci5jYyBiL2djYy9jL2Mt cGFyc2VyLmNjCmluZGV4IDY5MjMwMDAyYmM4Li40MzQyNzg4NmFkNCAxMDA2NDQKLS0tIGEv Z2NjL2MvYy1wYXJzZXIuY2MKKysrIGIvZ2NjL2MvYy1wYXJzZXIuY2MKQEAgLTE4ODE0LDMy ICsxODgxNCw3MSBAQCBjX3BhcnNlcl9vYWNjX3dhaXQgKGxvY2F0aW9uX3QgbG9jLCBjX3Bh cnNlciAqcGFyc2VyLCBjaGFyICpwX25hbWUpCiAgIHJldHVybiBzdG10OwogfQogCi0vKiBP cGVuTVAgNS4wOgotICAgIyBwcmFnbWEgb21wIGFsbG9jYXRlIChsaXN0KSAgW2FsbG9jYXRv cihhbGxvY2F0b3IpXSAgKi8KKy8qIE9wZW5NUCA1Lng6CisgICAjIHByYWdtYSBvbXAgYWxs b2NhdGUgKGxpc3QpICBjbGF1c2VzCisKKyAgIE9wZW5NUCA1LjAgY2xhdXNlOgorICAgYWxs b2NhdG9yIChvbXBfYWxsb2NhdG9yX2hhbmRsZV90IGV4cHJlc3Npb24pCisKKyAgIE9wZW5N UCA1LjEgYWRkaXRpb25hbCBjbGF1c2U6CisgICBhbGlnbiAoY29uc3RhbnQtZXhwcmVzc2lv bildICAqLwogCiBzdGF0aWMgdm9pZAogY19wYXJzZXJfb21wX2FsbG9jYXRlIChsb2NhdGlv bl90IGxvYywgY19wYXJzZXIgKnBhcnNlcikKIHsKKyAgdHJlZSBhbGlnbm1lbnQgPSBOVUxM X1RSRUU7CiAgIHRyZWUgYWxsb2NhdG9yID0gTlVMTF9UUkVFOwogICB0cmVlIG5sID0gY19w YXJzZXJfb21wX3Zhcl9saXN0X3BhcmVucyAocGFyc2VyLCBPTVBfQ0xBVVNFX0FMTE9DQVRF LCBOVUxMX1RSRUUpOwotICBpZiAoY19wYXJzZXJfbmV4dF90b2tlbl9pcyAocGFyc2VyLCBD UFBfQ09NTUEpCi0gICAgICAmJiBjX3BhcnNlcl9wZWVrXzJuZF90b2tlbiAocGFyc2VyKS0+ dHlwZSA9PSBDUFBfTkFNRSkKLSAgICBjX3BhcnNlcl9jb25zdW1lX3Rva2VuIChwYXJzZXIp OwotICBpZiAoY19wYXJzZXJfbmV4dF90b2tlbl9pcyAocGFyc2VyLCBDUFBfTkFNRSkpCisg IGRvCiAgICAgeworICAgICAgaWYgKGNfcGFyc2VyX25leHRfdG9rZW5faXMgKHBhcnNlciwg Q1BQX0NPTU1BKQorCSAgJiYgY19wYXJzZXJfcGVla18ybmRfdG9rZW4gKHBhcnNlciktPnR5 cGUgPT0gQ1BQX05BTUUpCisJY19wYXJzZXJfY29uc3VtZV90b2tlbiAocGFyc2VyKTsKKyAg ICAgIGlmICghY19wYXJzZXJfbmV4dF90b2tlbl9pcyAocGFyc2VyLCBDUFBfTkFNRSkpCisJ YnJlYWs7CiAgICAgICBtYXRjaGluZ19wYXJlbnMgcGFyZW5zOwogICAgICAgY29uc3QgY2hh ciAqcCA9IElERU5USUZJRVJfUE9JTlRFUiAoY19wYXJzZXJfcGVla190b2tlbiAocGFyc2Vy KS0+dmFsdWUpOwogICAgICAgY19wYXJzZXJfY29uc3VtZV90b2tlbiAocGFyc2VyKTsKLSAg ICAgIGlmIChzdHJjbXAgKCJhbGxvY2F0b3IiLCBwKSAhPSAwKQotCWVycm9yX2F0IChjX3Bh cnNlcl9wZWVrX3Rva2VuIChwYXJzZXIpLT5sb2NhdGlvbiwKLQkJICAiZXhwZWN0ZWQgJTxh bGxvY2F0b3IlPiIpOwotICAgICAgZWxzZSBpZiAocGFyZW5zLnJlcXVpcmVfb3BlbiAocGFy c2VyKSkKKyAgICAgIGxvY2F0aW9uX3QgZXhwcl9sb2MgPSBjX3BhcnNlcl9wZWVrX3Rva2Vu IChwYXJzZXIpLT5sb2NhdGlvbjsKKyAgICAgIGlmIChzdHJjbXAgKCJhbGlnbiIsIHApICE9 IDAgJiYgc3RyY21wICgiYWxsb2NhdG9yIiwgcCkgIT0gMCkKIAl7Ci0JICBsb2NhdGlvbl90 IGV4cHJfbG9jID0gY19wYXJzZXJfcGVla190b2tlbiAocGFyc2VyKS0+bG9jYXRpb247Ci0J ICBjX2V4cHIgZXhwciA9IGNfcGFyc2VyX2V4cHJfbm9fY29tbWFzIChwYXJzZXIsIE5VTEwp OwotCSAgZXhwciA9IGNvbnZlcnRfbHZhbHVlX3RvX3J2YWx1ZSAoZXhwcl9sb2MsIGV4cHIs IGZhbHNlLCB0cnVlKTsKLQkgIGFsbG9jYXRvciA9IGV4cHIudmFsdWU7Ci0JICBhbGxvY2F0 b3IgPSBjX2Z1bGx5X2ZvbGQgKGFsbG9jYXRvciwgZmFsc2UsIE5VTEwpOworCSAgZXJyb3Jf YXQgKGNfcGFyc2VyX3BlZWtfdG9rZW4gKHBhcnNlciktPmxvY2F0aW9uLAorCQkgICAgImV4 cGVjdGVkICU8YWxsb2NhdG9yJT4gb3IgJTxhbGlnbiU+Iik7CisJICBicmVhazsKKwl9Cisg ICAgICBpZiAoIXBhcmVucy5yZXF1aXJlX29wZW4gKHBhcnNlcikpCisJYnJlYWs7CisKKyAg ICAgIGNfZXhwciBleHByID0gY19wYXJzZXJfZXhwcl9ub19jb21tYXMgKHBhcnNlciwgTlVM TCk7CisgICAgICBleHByID0gY29udmVydF9sdmFsdWVfdG9fcnZhbHVlIChleHByX2xvYywg ZXhwciwgZmFsc2UsIHRydWUpOworICAgICAgZXhwcl9sb2MgPSBjX3BhcnNlcl9wZWVrX3Rv a2VuIChwYXJzZXIpLT5sb2NhdGlvbjsKKyAgICAgIGlmIChwWzJdID09ICdpJyAmJiBhbGln bm1lbnQpCisJeworCSAgZXJyb3JfYXQgKGV4cHJfbG9jLCAidG9vIG1hbnkgJXFzIGNsYXVz ZXMiLCAiYWxpZ24iKTsKKwkgIGJyZWFrOworCX0KKyAgICAgIGVsc2UgaWYgKHBbMl0gPT0g J2knKQorCXsKKwkgIGFsaWdubWVudCA9IGNfZnVsbHlfZm9sZCAoZXhwci52YWx1ZSwgZmFs c2UsIE5VTEwpOworCSAgaWYgKFRSRUVfQ09ERSAoYWxpZ25tZW50KSAhPSBJTlRFR0VSX0NT VAorCSAgICAgIHx8ICFJTlRFR1JBTF9UWVBFX1AgKFRSRUVfVFlQRSAoYWxpZ25tZW50KSkK KwkgICAgICB8fCB0cmVlX2ludF9jc3Rfc2duIChhbGlnbm1lbnQpICE9IDEKKwkgICAgICB8 fCAhaW50ZWdlcl9wb3cycCAoYWxpZ25tZW50KSkKKwkgICAgeworCSAgICAgIGVycm9yX2F0 IChleHByX2xvYywgIiU8YWxpZ24lPiBjbGF1c2UgYXJndW1lbnQgbmVlZHMgdG8gYmUgIgor CQkJCSAgInBvc2l0aXZlIGNvbnN0YW50IHBvd2VyIG9mIHR3byBpbnRlZ2VyICIKKwkJCQkg ICJleHByZXNzaW9uIik7CisJICAgICAgYWxpZ25tZW50ID0gTlVMTF9UUkVFOworCSAgICB9 CisJfQorICAgICAgZWxzZSBpZiAoYWxsb2NhdG9yKQorCXsKKwkgIGVycm9yX2F0IChleHBy X2xvYywgInRvbyBtYW55ICVxcyBjbGF1c2VzIiwgImFsbG9jYXRvciIpOworCSAgYnJlYWs7 CisJfQorICAgICAgZWxzZQorCXsKKwkgIGFsbG9jYXRvciA9IGNfZnVsbHlfZm9sZCAoZXhw ci52YWx1ZSwgZmFsc2UsIE5VTEwpOwogCSAgdHJlZSBvcmlnX3R5cGUKIAkgICAgPSBleHBy Lm9yaWdpbmFsX3R5cGUgPyBleHByLm9yaWdpbmFsX3R5cGUgOiBUUkVFX1RZUEUgKGFsbG9j YXRvcik7CiAJICBvcmlnX3R5cGUgPSBUWVBFX01BSU5fVkFSSUFOVCAob3JpZ190eXBlKTsK QEAgLTE4ODQ4LDIwICsxODg4NywyMyBAQCBjX3BhcnNlcl9vbXBfYWxsb2NhdGUgKGxvY2F0 aW9uX3QgbG9jLCBjX3BhcnNlciAqcGFyc2VyKQogCSAgICAgIHx8IFRZUEVfTkFNRSAob3Jp Z190eXBlKQogCQkgIT0gZ2V0X2lkZW50aWZpZXIgKCJvbXBfYWxsb2NhdG9yX2hhbmRsZV90 IikpCiAJICAgIHsKLQkgICAgICBlcnJvcl9hdCAoZXhwcl9sb2MsICIlPGFsbG9jYXRvciU+ IGNsYXVzZSBhbGxvY2F0b3IgZXhwcmVzc2lvbiAiCi0JCQkJImhhcyB0eXBlICVxVCByYXRo ZXIgdGhhbiAiCi0JCQkJIiU8b21wX2FsbG9jYXRvcl9oYW5kbGVfdCU+IiwKLQkJCQlUUkVF X1RZUEUgKGFsbG9jYXRvcikpOworCSAgICAgIGVycm9yX2F0IChleHByX2xvYywKKwkJCSIl PGFsbG9jYXRvciU+IGNsYXVzZSBhbGxvY2F0b3IgZXhwcmVzc2lvbiBoYXMgdHlwZSAiCisJ CQkiJXFUIHJhdGhlciB0aGFuICU8b21wX2FsbG9jYXRvcl9oYW5kbGVfdCU+IiwKKwkJCVRS RUVfVFlQRSAoYWxsb2NhdG9yKSk7CiAJICAgICAgYWxsb2NhdG9yID0gTlVMTF9UUkVFOwog CSAgICB9Ci0JICBwYXJlbnMuc2tpcF91bnRpbF9mb3VuZF9jbG9zZSAocGFyc2VyKTsKIAl9 Ci0gICAgfQorICAgICAgcGFyZW5zLnNraXBfdW50aWxfZm91bmRfY2xvc2UgKHBhcnNlcik7 CisgICAgfSB3aGlsZSAodHJ1ZSk7CiAgIGNfcGFyc2VyX3NraXBfdG9fcHJhZ21hX2VvbCAo cGFyc2VyKTsKIAotICBpZiAoYWxsb2NhdG9yKQorICBpZiAoYWxsb2NhdG9yIHx8IGFsaWdu bWVudCkKICAgICBmb3IgKHRyZWUgYyA9IG5sOyBjICE9IE5VTExfVFJFRTsgYyA9IE9NUF9D TEFVU0VfQ0hBSU4gKGMpKQotICAgICAgT01QX0NMQVVTRV9BTExPQ0FURV9BTExPQ0FUT1Ig KGMpID0gYWxsb2NhdG9yOworICAgICAgeworCU9NUF9DTEFVU0VfQUxMT0NBVEVfQUxMT0NB VE9SIChjKSA9IGFsbG9jYXRvcjsKKwlPTVBfQ0xBVVNFX0FMTE9DQVRFX0FMSUdOIChjKSA9 IGFsaWdubWVudDsKKyAgICAgIH0KIAogICBzb3JyeV9hdCAobG9jLCAiJTwjcHJhZ21hIG9t cCBhbGxvY2F0ZSU+IG5vdCB5ZXQgc3VwcG9ydGVkIik7CiB9CmRpZmYgLS1naXQgYS9nY2Mv Y3AvcGFyc2VyLmNjIGIvZ2NjL2NwL3BhcnNlci5jYwppbmRleCA0Y2RjMWNkNDcyZi4uYTg5 YWIyODRhMzggMTAwNjQ0Ci0tLSBhL2djYy9jcC9wYXJzZXIuY2MKKysrIGIvZ2NjL2NwL3Bh cnNlci5jYwpAQCAtNDE0ODMsNDMgKzQxNDgzLDEwNiBAQCBjcF9wYXJzZXJfb21wX3N0cnVj dHVyZWRfYmxvY2sgKGNwX3BhcnNlciAqcGFyc2VyLCBib29sICppZl9wKQogICByZXR1cm4g ZmluaXNoX29tcF9zdHJ1Y3R1cmVkX2Jsb2NrIChzdG10KTsKIH0KIAotLyogT3Blbk1QIDUu MDoKLSAgICMgcHJhZ21hIG9tcCBhbGxvY2F0ZSAobGlzdCkgIFthbGxvY2F0b3IoYWxsb2Nh dG9yKV0gICovCisvKiBPcGVuTVAgNS54OgorICAgIyBwcmFnbWEgb21wIGFsbG9jYXRlIChs aXN0KSAgY2xhdXNlcworCisgICBPcGVuTVAgNS4wIGNsYXVzZToKKyAgIGFsbG9jYXRvciAo b21wX2FsbG9jYXRvcl9oYW5kbGVfdCBleHByZXNzaW9uKQorCisgICBPcGVuTVAgNS4xIGFk ZGl0aW9uYWwgY2xhdXNlOgorICAgYWxpZ24gKGNvbnN0YW50LWV4cHJlc3Npb24pXSAgKi8K IAogc3RhdGljIHZvaWQKIGNwX3BhcnNlcl9vbXBfYWxsb2NhdGUgKGNwX3BhcnNlciAqcGFy c2VyLCBjcF90b2tlbiAqcHJhZ21hX3RvaykKIHsKICAgdHJlZSBhbGxvY2F0b3IgPSBOVUxM X1RSRUU7CisgIHRyZWUgYWxpZ25tZW50ID0gTlVMTF9UUkVFOwogICBsb2NhdGlvbl90IGxv YyA9IHByYWdtYV90b2stPmxvY2F0aW9uOwogICB0cmVlIG5sID0gY3BfcGFyc2VyX29tcF92 YXJfbGlzdCAocGFyc2VyLCBPTVBfQ0xBVVNFX0FMTE9DQVRFLCBOVUxMX1RSRUUpOwogCi0g IGlmIChjcF9sZXhlcl9uZXh0X3Rva2VuX2lzIChwYXJzZXItPmxleGVyLCBDUFBfQ09NTUEp Ci0gICAgICAmJiBjcF9sZXhlcl9udGhfdG9rZW5faXMgKHBhcnNlci0+bGV4ZXIsIDIsIENQ UF9OQU1FKSkKLSAgICBjcF9sZXhlcl9jb25zdW1lX3Rva2VuIChwYXJzZXItPmxleGVyKTsK LQotICBpZiAoY3BfbGV4ZXJfbmV4dF90b2tlbl9pcyAocGFyc2VyLT5sZXhlciwgQ1BQX05B TUUpKQorICBkbwogICAgIHsKKyAgICAgIGlmIChjcF9sZXhlcl9uZXh0X3Rva2VuX2lzIChw YXJzZXItPmxleGVyLCBDUFBfQ09NTUEpCisJICAmJiBjcF9sZXhlcl9udGhfdG9rZW5faXMg KHBhcnNlci0+bGV4ZXIsIDIsIENQUF9OQU1FKSkKKwljcF9sZXhlcl9jb25zdW1lX3Rva2Vu IChwYXJzZXItPmxleGVyKTsKKworICAgICAgaWYgKCFjcF9sZXhlcl9uZXh0X3Rva2VuX2lz IChwYXJzZXItPmxleGVyLCBDUFBfTkFNRSkpCisJYnJlYWs7CiAgICAgICBtYXRjaGluZ19w YXJlbnMgcGFyZW5zOwogICAgICAgdHJlZSBpZCA9IGNwX2xleGVyX3BlZWtfdG9rZW4gKHBh cnNlci0+bGV4ZXIpLT51LnZhbHVlOwogICAgICAgY29uc3QgY2hhciAqcCA9IElERU5USUZJ RVJfUE9JTlRFUiAoaWQpOwogICAgICAgbG9jYXRpb25fdCBjbG9jID0gY3BfbGV4ZXJfcGVl a190b2tlbiAocGFyc2VyLT5sZXhlciktPmxvY2F0aW9uOwogICAgICAgY3BfbGV4ZXJfY29u c3VtZV90b2tlbiAocGFyc2VyLT5sZXhlcik7Ci0gICAgICBpZiAoc3RyY21wIChwLCAiYWxs b2NhdG9yIikgIT0gMCkKLQllcnJvcl9hdCAoY2xvYywgImV4cGVjdGVkICU8YWxsb2NhdG9y JT4iKTsKLSAgICAgIGVsc2UgaWYgKHBhcmVucy5yZXF1aXJlX29wZW4gKHBhcnNlcikpCisg ICAgICBpZiAoc3RyY21wIChwLCAiYWxsb2NhdG9yIikgIT0gMCAmJiBzdHJjbXAgKHAsICJh bGlnbiIpICE9IDApCiAJewotCSAgYWxsb2NhdG9yID0gY3BfcGFyc2VyX2Fzc2lnbm1lbnRf ZXhwcmVzc2lvbiAocGFyc2VyKTsKLQkgIGlmIChhbGxvY2F0b3IgPT0gZXJyb3JfbWFya19u b2RlKQotCSAgICBhbGxvY2F0b3IgPSBOVUxMX1RSRUU7Ci0JICBwYXJlbnMucmVxdWlyZV9j bG9zZSAocGFyc2VyKTsKKwkgIGVycm9yX2F0IChjbG9jLCAiZXhwZWN0ZWQgJTxhbGxvY2F0 b3IlPiBvciAlPGFsaWduJT4iKTsKKwkgIGJyZWFrOwogCX0KLSAgICB9CisgICAgICBpZiAo IXBhcmVucy5yZXF1aXJlX29wZW4gKHBhcnNlcikpCisJYnJlYWs7CisgICAgICB0cmVlIGV4 cHIgPSBjcF9wYXJzZXJfYXNzaWdubWVudF9leHByZXNzaW9uIChwYXJzZXIpOworICAgICAg aWYgKHBbMl0gPT0gJ2knICYmIGFsaWdubWVudCkKKwl7CisJICBlcnJvcl9hdCAoY2xvYywg InRvbyBtYW55ICVxcyBjbGF1c2VzIiwgImFsaWduIik7CisJICBicmVhazsKKwl9CisgICAg ICBlbHNlIGlmIChwWzJdID09ICdpJykKKwl7CisJICBpZiAoZXhwciAhPSBlcnJvcl9tYXJr X25vZGUpCisJICAgIGFsaWdubWVudCA9IGV4cHI7CisJICAvKiBGSVhNRTogUmVtb3ZlIHdo ZW4gYWRkaW5nIGNoZWNrIHRvIHNlbWFudGljLmNjOyBjZiBGSVhNRSBiZWxvdy4gICovCisJ ICBpZiAoYWxpZ25tZW50CisJICAgICAgJiYgIXR5cGVfZGVwZW5kZW50X2V4cHJlc3Npb25f cCAoYWxpZ25tZW50KQorCSAgICAgICYmICFJTlRFR1JBTF9UWVBFX1AgKFRSRUVfVFlQRSAo YWxpZ25tZW50KSkpCisJICAgIHsKKyAgICAgICAgICAgICAgZXJyb3JfYXQgKGNsb2MsICIl PGFsaWduJT4gY2xhdXNlIGFyZ3VtZW50IG5lZWRzIHRvIGJlICIKKwkJCSAgICAgICJwb3Np dGl2ZSBjb25zdGFudCBwb3dlciBvZiB0d28gaW50ZWdlciAiCisJCQkgICAgICAiZXhwcmVz c2lvbiIpOworCSAgICAgIGFsaWdubWVudCA9IE5VTExfVFJFRTsKKwkgICAgfQorCSAgZWxz ZSBpZiAoYWxpZ25tZW50KQorCSAgICB7CisJICAgICAgYWxpZ25tZW50ID0gbWFya19ydmFs dWVfdXNlIChhbGlnbm1lbnQpOworCSAgICAgIGlmICghcHJvY2Vzc2luZ190ZW1wbGF0ZV9k ZWNsKQorCQl7CisJCSAgYWxpZ25tZW50ID0gbWF5YmVfY29uc3RhbnRfdmFsdWUgKGFsaWdu bWVudCk7CisJCSAgaWYgKFRSRUVfQ09ERSAoYWxpZ25tZW50KSAhPSBJTlRFR0VSX0NTVAor CQkgICAgICB8fCAhdHJlZV9maXRzX3Vod2lfcCAoYWxpZ25tZW50KQorCQkgICAgICB8fCAh aW50ZWdlcl9wb3cycCAoYWxpZ25tZW50KSkKKwkJICAgIHsKKwkJICAgICAgZXJyb3JfYXQg KGNsb2MsICIlPGFsaWduJT4gY2xhdXNlIGFyZ3VtZW50IG5lZWRzIHRvIGJlICIKKwkJCQkg ICAgICAicG9zaXRpdmUgY29uc3RhbnQgcG93ZXIgb2YgdHdvIGludGVnZXIgIgorCQkJCSAg ICAgICJleHByZXNzaW9uIik7CisJCSAgICAgIGFsaWdubWVudCA9IE5VTExfVFJFRTsKKwkJ ICAgIH0KKwkJfQorCSAgICB9CisJfQorICAgICAgZWxzZSBpZiAoYWxsb2NhdG9yKQorCXsK KwkgIGVycm9yX2F0IChjbG9jLCAidG9vIG1hbnkgJXFzIGNsYXVzZXMiLCAiYWxsb2NhdG9y Iik7CisJICBicmVhazsKKwl9CisgICAgICBlbHNlCisJeworCSAgaWYgKGV4cHIgIT0gZXJy b3JfbWFya19ub2RlKQorCSAgICBhbGxvY2F0b3IgPSBleHByOworCX0KKyAgICAgIHBhcmVu cy5yZXF1aXJlX2Nsb3NlIChwYXJzZXIpOworICAgIH0gd2hpbGUgKHRydWUpOwogICBjcF9w YXJzZXJfcmVxdWlyZV9wcmFnbWFfZW9sIChwYXJzZXIsIHByYWdtYV90b2spOwogCi0gIGlm IChhbGxvY2F0b3IpCisgIGlmIChhbGxvY2F0b3IgfHwgYWxpZ25tZW50KQogICAgIGZvciAo dHJlZSBjID0gbmw7IGMgIT0gTlVMTF9UUkVFOyBjID0gT01QX0NMQVVTRV9DSEFJTiAoYykp Ci0gICAgICBPTVBfQ0xBVVNFX0FMTE9DQVRFX0FMTE9DQVRPUiAoYykgPSBhbGxvY2F0b3I7 CisgICAgICB7CisJT01QX0NMQVVTRV9BTExPQ0FURV9BTExPQ0FUT1IgKGMpID0gYWxsb2Nh dG9yOworCU9NUF9DTEFVU0VfQUxMT0NBVEVfQUxJR04gKGMpID0gYWxpZ25tZW50OworICAg ICAgfQogCisgIC8qIEZJWE1FOiBXaGVuIGltcGxlbWVudGluZyBwcm9wZXJseSwgZGVsZXRl IHRoZSBhbGlnbi9hbGxvY2F0ZSBleHByIGVycm9yCisgICAgIGNoZWNrIGFib3ZlIGFuZCBh ZGQgb25lIGluIHNlbWFudGljcy5jYyAodG8gcHJvcGVybHkgaGFuZGxlIHRlbXBsYXRlcyku CisgICAgIEJhc2UgdGhpcyBvbiB0aGUgYWxsb2NhdG9yL2FsaWduIG1vZGlmaWVycyBjaGVj ayBmb3IgdGhlICdhbGxvY2F0ZScgY2xhdXNlCisgICAgIGluIHNlbWFudGljcy5jYydzIGZp bmlzaF9vbXBfY2xhdXNlcy4gICovCiAgIHNvcnJ5X2F0IChsb2MsICIlPCNwcmFnbWEgb21w IGFsbG9jYXRlJT4gbm90IHlldCBzdXBwb3J0ZWQiKTsKIH0KIApkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vZ29tcC9hbGxvY2F0ZS01LmMgYi9nY2MvdGVzdHN1 aXRlL2MtYysrLWNvbW1vbi9nb21wL2FsbG9jYXRlLTUuYwppbmRleCAzNGRjYjQ4YzNkNy4u OGE5MTgxMjA1ZjcgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2dv bXAvYWxsb2NhdGUtNS5jCisrKyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2dvbXAv YWxsb2NhdGUtNS5jCkBAIC0zOSwzICszOSwzOSBAQCBiYXIgKCkKICNwcmFnbWEgb21wIGFs bG9jYXRlKGEpIGFsbG9jYXRvcihiKSAgLyogeyBkZy1lcnJvciAiJ2FsbG9jYXRvcicgY2xh dXNlIGFsbG9jYXRvciBleHByZXNzaW9uIGhhcyB0eXBlICdpbnQnIHJhdGhlciB0aGFuICdv bXBfYWxsb2NhdG9yX2hhbmRsZV90JyIgInRvZG86IGNwL3NlbWFudGljcy5jIiB7IHhmYWls IGMrKyB9IH0gKi8KICAgLyogeyBkZy1tZXNzYWdlICJzb3JyeSwgdW5pbXBsZW1lbnRlZDog JyNwcmFnbWEgb21wIGFsbG9jYXRlJyBub3QgeWV0IHN1cHBvcnRlZCIgIiIgeyB0YXJnZXQg Ki0qLSogfSAuLTEgfSAqLwogfQorCisKK3ZvaWQKK2FsaWduX3Rlc3QgKCkKK3sKKyAgaW50 IGk7CisgICNwcmFnbWEgb21wIGFsbG9jYXRlKGkpIGFsbG9jYXRvcihvbXBfZGVmYXVsdF9t ZW1fYWxsb2MpLCBhbGlnbigzMikKKyAgLyogeyBkZy1tZXNzYWdlICJzb3JyeSwgdW5pbXBs ZW1lbnRlZDogJyNwcmFnbWEgb21wIGFsbG9jYXRlJyBub3QgeWV0IHN1cHBvcnRlZCIgIiIg eyB0YXJnZXQgKi0qLSogfSAuLTEgfSAqLworICAjcHJhZ21hIG9tcCBhbGxvY2F0ZShpKSBh bGlnbiAoIDMyICksYWxsb2NhdG9yKG9tcF9kZWZhdWx0X21lbV9hbGxvYykKKyAgLyogeyBk Zy1tZXNzYWdlICJzb3JyeSwgdW5pbXBsZW1lbnRlZDogJyNwcmFnbWEgb21wIGFsbG9jYXRl JyBub3QgeWV0IHN1cHBvcnRlZCIgIiIgeyB0YXJnZXQgKi0qLSogfSAuLTEgfSAqLworICAj cHJhZ21hIG9tcCBhbGxvY2F0ZShpKSxhbGxvY2F0b3Iob21wX2RlZmF1bHRfbWVtX2FsbG9j KSBhbGlnbigzMikKKyAgLyogeyBkZy1tZXNzYWdlICJzb3JyeSwgdW5pbXBsZW1lbnRlZDog JyNwcmFnbWEgb21wIGFsbG9jYXRlJyBub3QgeWV0IHN1cHBvcnRlZCIgIiIgeyB0YXJnZXQg Ki0qLSogfSAuLTEgfSAqLworICAjcHJhZ21hIG9tcCBhbGxvY2F0ZShpKSBhbGlnbiAoIDMy ICkgYWxsb2NhdG9yKG9tcF9kZWZhdWx0X21lbV9hbGxvYykKKyAgLyogeyBkZy1tZXNzYWdl ICJzb3JyeSwgdW5pbXBsZW1lbnRlZDogJyNwcmFnbWEgb21wIGFsbG9jYXRlJyBub3QgeWV0 IHN1cHBvcnRlZCIgIiIgeyB0YXJnZXQgKi0qLSogfSAuLTEgfSAqLworCisgICNwcmFnbWEg b21wIGFsbG9jYXRlKGkpIGFsbG9jYXRvciAoIG9tcF9oaWdoX2J3X21lbV9hbGxvYyApLCBh bGlnbiAoIDMyICkgYWxsb2NhdG9yKG9tcF9kZWZhdWx0X21lbV9hbGxvYykKKyAgLyogeyBk Zy1lcnJvciAidG9vIG1hbnkgJ2FsbG9jYXRvcicgY2xhdXNlcyIgIiIgeyB0YXJnZXQgKi0q LSogfSAuLTEgfSAqLworICAvKiB7IGRnLWVycm9yICJleHBlY3RlZCBlbmQgb2YgbGluZSBi ZWZvcmUgJ1xcKScgdG9rZW4iICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0yIH0gKi8KKyAgLyog eyBkZy1tZXNzYWdlICJzb3JyeSwgdW5pbXBsZW1lbnRlZDogJyNwcmFnbWEgb21wIGFsbG9j YXRlJyBub3QgeWV0IHN1cHBvcnRlZCIgIiIgeyB0YXJnZXQgKi0qLSogfSAuLTMgfSAqLwor ICAjcHJhZ21hIG9tcCBhbGxvY2F0ZShpKSBhbGlnbiAoIDMyICksIGFsaWduKDMyKSBhbGxv Y2F0b3Iob21wX2RlZmF1bHRfbWVtX2FsbG9jKQorICAvKiB7IGRnLWVycm9yICJ0b28gbWFu eSAnYWxpZ24nIGNsYXVzZXMiICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0gKi8KKyAgLyog eyBkZy1lcnJvciAiZXhwZWN0ZWQgZW5kIG9mIGxpbmUgYmVmb3JlICdcXCknIHRva2VuIiAi IiB7IHRhcmdldCAqLSotKiB9IC4tMiB9ICovCisgIC8qIHsgZGctbWVzc2FnZSAic29ycnks IHVuaW1wbGVtZW50ZWQ6ICcjcHJhZ21hIG9tcCBhbGxvY2F0ZScgbm90IHlldCBzdXBwb3J0 ZWQiICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0zIH0gKi8KK30KKwordm9pZAorYWxpZ25fdGVz dDIgKCkKK3sKKyAgaW50IGk7CisgICNwcmFnbWEgb21wIGFsbG9jYXRlKGkpIGFsaWduICgz Mi4wKSAgLyogeyBkZy1lcnJvciAiJ2FsaWduJyBjbGF1c2UgYXJndW1lbnQgbmVlZHMgdG8g YmUgcG9zaXRpdmUgY29uc3RhbnQgcG93ZXIgb2YgdHdvIGludGVnZXIgZXhwcmVzc2lvbiIg fSAqLworICAvKiB7IGRnLW1lc3NhZ2UgInNvcnJ5LCB1bmltcGxlbWVudGVkOiAnI3ByYWdt YSBvbXAgYWxsb2NhdGUnIG5vdCB5ZXQgc3VwcG9ydGVkIiAiIiB7IHRhcmdldCAqLSotKiB9 IC4tMSB9ICovCisgICNwcmFnbWEgb21wIGFsbG9jYXRlKGkpIGFsaWduICggMzEgKSAgLyog eyBkZy1lcnJvciAiJ2FsaWduJyBjbGF1c2UgYXJndW1lbnQgbmVlZHMgdG8gYmUgcG9zaXRp dmUgY29uc3RhbnQgcG93ZXIgb2YgdHdvIGludGVnZXIgZXhwcmVzc2lvbiIgfSAqLworICAv KiB7IGRnLW1lc3NhZ2UgInNvcnJ5LCB1bmltcGxlbWVudGVkOiAnI3ByYWdtYSBvbXAgYWxs b2NhdGUnIG5vdCB5ZXQgc3VwcG9ydGVkIiAiIiB7IHRhcmdldCAqLSotKiB9IC4tMSB9ICov CisgICNwcmFnbWEgb21wIGFsbG9jYXRlKGkpIGFsaWduICggLTMyICkgIC8qIHsgZGctZXJy b3IgIidhbGlnbicgY2xhdXNlIGFyZ3VtZW50IG5lZWRzIHRvIGJlIHBvc2l0aXZlIGNvbnN0 YW50IHBvd2VyIG9mIHR3byBpbnRlZ2VyIGV4cHJlc3Npb24iIH0gKi8KKyAgLyogeyBkZy1t ZXNzYWdlICJzb3JyeSwgdW5pbXBsZW1lbnRlZDogJyNwcmFnbWEgb21wIGFsbG9jYXRlJyBu b3QgeWV0IHN1cHBvcnRlZCIgIiIgeyB0YXJnZXQgKi0qLSogfSAuLTEgfSAqLworfQo= --------------YLcbTNYDsQEUjiIy8VJwwWZC--