From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa3.mentor.iphmx.com (esa3.mentor.iphmx.com [68.232.137.180]) by sourceware.org (Postfix) with ESMTPS id 4C9393857BBD; Mon, 27 Nov 2023 17:35:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 4C9393857BBD Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 4C9393857BBD Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=68.232.137.180 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1701106541; cv=none; b=h3MuMLHAah1TIcrtYb//H40uBvZY9PD2jz0IKFOuwa0tCy9K7INzUT7unFlODVcBsPgsuNo0S9Cfs2mh1xG7CbF4ke+D9Ssb0M0NYCjVXUPo0OaeFhDajBg7PJUhGDcKVqXUqs80GiBfghaT0zb/KBNwc4o/zghSNuI/gv6jCDU= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1701106541; c=relaxed/simple; bh=EvEAzduTDSVYkjFQBQX5Zo4oTAc7uGqId5jDt9eACDI=; h=Message-ID:Date:MIME-Version:To:From:Subject; b=oXd6WKLkDIcGrpIFZLK+tqc2BMqV47hj7EZylHU0fHzD1q5nKXkFPldySeSrEXRAAP2xZpBzvfFZnpthVtl4xXXjdxu6vvEJjfPuS3aNUg7E8UerOC4sCi3iDUZxScxsy3UlumkT/ZpKQL2mpKZa11ONpT6wKcCNVInKkiNi14E= ARC-Authentication-Results: i=1; server2.sourceware.org X-CSE-ConnectionGUID: fqSCgObPSUuhQdhPY3qJjQ== X-CSE-MsgGUID: ADb0E63pSU+thGPOmur69g== X-IronPort-AV: E=Sophos;i="6.04,231,1695715200"; d="scan'208";a="23814329" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa3.mentor.iphmx.com with ESMTP; 27 Nov 2023 09:35:30 -0800 IronPort-SDR: H/VSWDyyPZ2weRECY7PUa0JNOQyRsv+wALOulMjOxkfqEFx+58jZRRkLWw1AlqidIeJikPy4nj ntbaN7qzi1DVTT+6IVGQHM/Lhod0jfxqWbBn/nILoOI5O1sx+8cPL3aSmNJWIRhho0Vu1GlmMK gcR6phaWMAfGMfAroNj2GXPBT8klSFeB7e62a5z4OF8udup81ARsRbzk0iTC0reiV+r9ZUSRin jEW2rb5bFSn+qnw8TD6Jevl+LBs1zkctvGJWGeu+f06enHUarTFDcEoEZTCFUTQ5JvqtiGeMb8 /HI= Content-Type: multipart/mixed; boundary="------------2vUb6lX7drYkrBbpIbhwvmsn" Message-ID: <4733a0ea-1a3e-4cf3-8b1e-3e1efac91dd0@codesourcery.com> Date: Mon, 27 Nov 2023 17:35:22 +0000 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: gcc Patches , From: Andrew Jenner Subject: [PATCH v2] Fortran: fix reallocation on assignment of polymorphic variables [PR110415] CC: Tobias Burnus X-ClientProxiedBy: svr-orw-mbx-11.mgc.mentorg.com (147.34.90.211) To svr-ies-mbx-10.mgc.mentorg.com (139.181.222.10) X-Spam-Status: No, score=-11.3 required=5.0 tests=BAYES_00,GIT_PATCH_0,HEADER_FROM_DIFFERENT_DOMAINS,KAM_DMARC_STATUS,KAM_SHORT,SPF_HELO_PASS,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE 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: --------------2vUb6lX7drYkrBbpIbhwvmsn Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit This is the second version of the patch - previous discussion at: https://gcc.gnu.org/pipermail/gcc-patches/2023-November/636671.html This patch adds the testcase from PR110415 and fixes the bug. The problem is that in a couple of places in trans_class_assignment in trans-expr.cc, we need to get the run-time size of the polymorphic object from the vtbl, but we are currently getting that vtbl from the lhs of the assignment rather than the rhs. This gives us the old value of the size but we need to pass the new size to __builtin_malloc and __builtin_realloc. I'm fixing this by adding a parameter to trans_class_vptr_len_assignment to retrieve the tree corresponding the vptr from the object on the rhs of the assignment, and then passing this where it is needed. In the case where trans_class_vptr_len_assignment returns NULL_TREE for the rhs vptr we use the lhs vptr as before. To get this to work I also needed to change the implementation of trans_class_vptr_len_assignment to create a temporary for the assignment in more circumstances. Currently, the "a = func()" assignment in MAIN__ doesn't hit the "Create a temporary for complication expressions" case on line 9951 because "DECL_P (rse->expr)" is true - the expression has already been placed into a temporary. That means we don't hit the "if (temp_rhs ..." case on line 10038 and go on to get the vptr_expr from "gfc_lval_expr_from_sym (gfc_find_vtab (&re->ts))" on line 10057 which is the vtbl of the static type rather than the dynamic one from the rhs. So with this fix we create an extra temporary, but that should be optimised away in the middle-end so there should be no run-time effect. I'm not sure if this is the best way to fix this (the Fortran front-end is new territory for me) but I've verified that the testcase passes with this change, fails without it, and that the change does not introduce any FAILs when running the gfortran testcases on x86_64-pc-linux-gnu. After the previous submission, Tobias Burnus found a closely related problem and contributed testcases and a fix for it, which I have incorporated into this version of the patch. The problem in this case is with the __builtin_realloc call that is executed if one polymorphic variable is replaced by another. The return value of this call was being ignored rather than used to replace the pointer being reallocated. Is this OK for mainline, GCC 13 and OG13? Thanks, Andrew gcc/fortran/ PR fortran/110415 * trans-expr.cc (trans_class_vptr_len_assignment): Add from_vptrp parameter. Populate it. Don't check for DECL_P when deciding whether to create temporary. (trans_class_pointer_fcn, gfc_trans_pointer_assignment): Add NULL argument to trans_class_vptr_len_assignment calls. (trans_class_assignment): Get rhs_vptr from trans_class_vptr_len_assignment and use it for determining size for allocation/reallocation. Use return value from realloc. gcc/testsuite/ PR fortran/110415 * gfortran.dg/pr110415.f90: New test. * gfortran.dg/asan/pr110415-2.f90: New test. * gfortran.dg/asan/pr110415-3.f90: New test. --------------2vUb6lX7drYkrBbpIbhwvmsn Content-Type: text/plain; charset="UTF-8"; name="pr110415-2.patch" Content-Disposition: attachment; filename="pr110415-2.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9mb3J0cmFuL3RyYW5zLWV4cHIuY2MgYi9nY2MvZm9ydHJhbi90 cmFucy1leHByLmNjCmluZGV4IDUwYzQ2MDRhMDI1Li5iZmU5OTk2Y2VkNiAxMDA2NDQKLS0t IGEvZ2NjL2ZvcnRyYW4vdHJhbnMtZXhwci5jYworKysgYi9nY2MvZm9ydHJhbi90cmFucy1l eHByLmNjCkBAIC05OTM2LDcgKzk5MzYsOCBAQCB0cmFuc19nZXRfdXBvbHlfbGVuIChzdG10 YmxvY2tfdCAqYmxvY2ssIGdmY19leHByICpleHByKQogc3RhdGljIHRyZWUKIHRyYW5zX2Ns YXNzX3ZwdHJfbGVuX2Fzc2lnbm1lbnQgKHN0bXRibG9ja190ICpibG9jaywgZ2ZjX2V4cHIg KiBsZSwKIAkJCQkgZ2ZjX2V4cHIgKiByZSwgZ2ZjX3NlICpyc2UsCi0JCQkJIHRyZWUgKiB0 b19sZW5wLCB0cmVlICogZnJvbV9sZW5wKQorCQkJCSB0cmVlICogdG9fbGVucCwgdHJlZSAq IGZyb21fbGVucCwKKwkJCQkgdHJlZSAqIGZyb21fdnB0cnApCiB7CiAgIGdmY19zZSBzZTsK ICAgZ2ZjX2V4cHIgKiB2cHRyX2V4cHI7CkBAIC05OTQ0LDEwICs5OTQ1LDExIEBAIHRyYW5z X2NsYXNzX3ZwdHJfbGVuX2Fzc2lnbm1lbnQgKHN0bXRibG9ja190ICpibG9jaywgZ2ZjX2V4 cHIgKiBsZSwKICAgYm9vbCBzZXRfdnB0ciA9IGZhbHNlLCB0ZW1wX3JocyA9IGZhbHNlOwog ICBzdG10YmxvY2tfdCAqcHJlID0gYmxvY2s7CiAgIHRyZWUgY2xhc3NfZXhwciA9IE5VTExf VFJFRTsKKyAgdHJlZSBmcm9tX3ZwdHIgPSBOVUxMX1RSRUU7CiAKICAgLyogQ3JlYXRlIGEg dGVtcG9yYXJ5IGZvciBjb21wbGljYXRlZCBleHByZXNzaW9ucy4gICovCiAgIGlmIChyZS0+ ZXhwcl90eXBlICE9IEVYUFJfVkFSSUFCTEUgJiYgcmUtPmV4cHJfdHlwZSAhPSBFWFBSX05V TEwKLSAgICAgICYmIHJzZS0+ZXhwciAhPSBOVUxMX1RSRUUgJiYgIURFQ0xfUCAocnNlLT5l eHByKSkKKyAgICAgICYmIHJzZS0+ZXhwciAhPSBOVUxMX1RSRUUpCiAgICAgewogICAgICAg aWYgKHJlLT50cy50eXBlID09IEJUX0NMQVNTICYmICFHRkNfQ0xBU1NfVFlQRV9QIChUUkVF X1RZUEUgKHJzZS0+ZXhwcikpKQogCWNsYXNzX2V4cHIgPSBnZmNfZ2V0X2NsYXNzX2Zyb21f ZXhwciAocnNlLT5leHByKTsKQEAgLTEwMDQ0LDYgKzEwMDQ2LDcgQEAgdHJhbnNfY2xhc3Nf dnB0cl9sZW5fYXNzaWdubWVudCAoc3RtdGJsb2NrX3QgKmJsb2NrLCBnZmNfZXhwciAqIGxl LAogCQl0bXAgPSByc2UtPmV4cHI7CiAKIAkgICAgICBzZS5leHByID0gZ2ZjX2NsYXNzX3Zw dHJfZ2V0ICh0bXApOworCSAgICAgIGZyb21fdnB0ciA9IHNlLmV4cHI7CiAJICAgICAgaWYg KFVOTElNSVRFRF9QT0xZIChyZSkpCiAJCWZyb21fbGVuID0gZ2ZjX2NsYXNzX2xlbl9nZXQg KHRtcCk7CiAKQEAgLTEwMDY1LDYgKzEwMDY4LDcgQEAgdHJhbnNfY2xhc3NfdnB0cl9sZW5f YXNzaWdubWVudCAoc3RtdGJsb2NrX3QgKmJsb2NrLCBnZmNfZXhwciAqIGxlLAogCSAgZ2Zj X2ZyZWVfZXhwciAodnB0cl9leHByKTsKIAkgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKGJs b2NrLCAmc2UucHJlKTsKIAkgIGdjY19hc3NlcnQgKHNlLnBvc3QuaGVhZCA9PSBOVUxMX1RS RUUpOworCSAgZnJvbV92cHRyID0gc2UuZXhwcjsKIAl9CiAgICAgICBnZmNfYWRkX21vZGlm eSAocHJlLCBsaHNfdnB0ciwgZm9sZF9jb252ZXJ0IChUUkVFX1RZUEUgKGxoc192cHRyKSwK IAkJCQkJCXNlLmV4cHIpKTsKQEAgLTEwMDkzLDExICsxMDA5NywxMyBAQCB0cmFuc19jbGFz c192cHRyX2xlbl9hc3NpZ25tZW50IChzdG10YmxvY2tfdCAqYmxvY2ssIGdmY19leHByICog bGUsCiAJfQogICAgIH0KIAotICAvKiBSZXR1cm4gdGhlIF9sZW4gdHJlZXMgb25seSwgd2hl biByZXF1ZXN0ZWQuICAqLworICAvKiBSZXR1cm4gdGhlIF9sZW4gYW5kIF92cHRyIHRyZWVz IG9ubHksIHdoZW4gcmVxdWVzdGVkLiAgKi8KICAgaWYgKHRvX2xlbnApCiAgICAgKnRvX2xl bnAgPSB0b19sZW47CiAgIGlmIChmcm9tX2xlbnApCiAgICAgKmZyb21fbGVucCA9IGZyb21f bGVuOworICBpZiAoZnJvbV92cHRycCkKKyAgICAqZnJvbV92cHRycCA9IGZyb21fdnB0cjsK ICAgcmV0dXJuIGxoc192cHRyOwogfQogCkBAIC0xMDE2Niw3ICsxMDE3Miw3IEBAIHRyYW5z X2NsYXNzX3BvaW50ZXJfZmNuIChzdG10YmxvY2tfdCAqYmxvY2ssIGdmY19zZSAqbHNlLCBn ZmNfc2UgKnJzZSwKICAgICB7CiAgICAgICBleHByMV92cHRyID0gdHJhbnNfY2xhc3NfdnB0 cl9sZW5fYXNzaWdubWVudCAoYmxvY2ssIGV4cHIxLAogCQkJCQkJICAgIGV4cHIyLCByc2Us Ci0JCQkJCQkgICAgTlVMTCwgTlVMTCk7CisJCQkJCQkgICAgTlVMTCwgTlVMTCwgTlVMTCk7 CiAgICAgICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrIChibG9jaywgJnJzZS0+cHJlKTsKICAg ICAgIHRtcCA9IGdmY19jcmVhdGVfdmFyIChUUkVFX1RZUEUgKHJzZS0+ZXhwciksICJwdHJ0 ZW1wIik7CiAgICAgICBnZmNfYWRkX21vZGlmeSAoJmxzZS0+cHJlLCB0bXAsIHJzZS0+ZXhw cik7CkBAIC0xMDI0Miw3ICsxMDI0OCw3IEBAIGdmY190cmFuc19wb2ludGVyX2Fzc2lnbm1l bnQgKGdmY19leHByICogZXhwcjEsIGdmY19leHByICogZXhwcjIpCiAgICAgICBpZiAobm9u X3Byb2NfcHRyX2Fzc2lnbiAmJiBleHByMS0+dHMudHlwZSA9PSBCVF9DTEFTUykKIAl7CiAJ ICB0cmFuc19jbGFzc192cHRyX2xlbl9hc3NpZ25tZW50ICgmYmxvY2ssIGV4cHIxLCBleHBy MiwgJnJzZSwgTlVMTCwKLQkJCQkJICAgTlVMTCk7CisJCQkJCSAgIE5VTEwsIE5VTEwpOwog CSAgbHNlLmV4cHIgPSBnZmNfY2xhc3NfZGF0YV9nZXQgKGxzZS5leHByKTsKIAl9CiAKQEAg LTEwMzcxLDcgKzEwMzc3LDggQEAgZ2ZjX3RyYW5zX3BvaW50ZXJfYXNzaWdubWVudCAoZ2Zj X2V4cHIgKiBleHByMSwgZ2ZjX2V4cHIgKiBleHByMikKIAkgICAgICBpZiAoZXhwcjEtPnRz LnR5cGUgPT0gQlRfQ0xBU1MpCiAJCWV4cHIxX3ZwdHIgPSB0cmFuc19jbGFzc192cHRyX2xl bl9hc3NpZ25tZW50ICgmYmxvY2ssIGV4cHIxLAogCQkJCQkJCSAgICAgIGV4cHIyLCAmcnNl LAotCQkJCQkJCSAgICAgIE5VTEwsIE5VTEwpOworCQkJCQkJCSAgICAgIE5VTEwsIE5VTEws CisJCQkJCQkJICAgICAgTlVMTCk7CiAJICAgIH0KIAl9CiAgICAgICBlbHNlIGlmIChleHBy Mi0+ZXhwcl90eXBlID09IEVYUFJfVkFSSUFCTEUpCkBAIC0xMDM4OCw3ICsxMDM5NSw3IEBA IGdmY190cmFuc19wb2ludGVyX2Fzc2lnbm1lbnQgKGdmY19leHByICogZXhwcjEsIGdmY19l eHByICogZXhwcjIpCiAJICAgICAgcnNlLmV4cHIgPSBOVUxMX1RSRUU7CiAJICAgICAgcnNl LnN0cmluZ19sZW5ndGggPSBzdHJsZW5fcmhzOwogCSAgICAgIHRyYW5zX2NsYXNzX3ZwdHJf bGVuX2Fzc2lnbm1lbnQgKCZibG9jaywgZXhwcjEsIGV4cHIyLCAmcnNlLAotCQkJCQkgICAg ICAgTlVMTCwgTlVMTCk7CisJCQkJCSAgICAgICBOVUxMLCBOVUxMLCBOVUxMKTsKIAkgICAg fQogCiAJICBpZiAocmVtYXAgPT0gTlVMTCkKQEAgLTEwNDIxLDcgKzEwNDI4LDcgQEAgZ2Zj X3RyYW5zX3BvaW50ZXJfYXNzaWdubWVudCAoZ2ZjX2V4cHIgKiBleHByMSwgZ2ZjX2V4cHIg KiBleHByMikKIAkgICAgewogCSAgICAgIGV4cHIxX3ZwdHIgPSB0cmFuc19jbGFzc192cHRy X2xlbl9hc3NpZ25tZW50ICgmYmxvY2ssIGV4cHIxLAogCQkJCQkJCSAgICBleHByMiwgJnJz ZSwgTlVMTCwKLQkJCQkJCQkgICAgTlVMTCk7CisJCQkJCQkJICAgIE5VTEwsIE5VTEwpOwog CSAgICAgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZibG9jaywgJnJzZS5wcmUpOwogCSAg ICAgIHRtcCA9IGdmY19jcmVhdGVfdmFyIChUUkVFX1RZUEUgKHJzZS5leHByKSwgInB0cnRl bXAiKTsKIAkgICAgICBnZmNfYWRkX21vZGlmeSAoJmxzZS5wcmUsIHRtcCwgcnNlLmV4cHIp OwpAQCAtMTE4MTksNyArMTE4MjYsNyBAQCB0cmFuc19jbGFzc19hc3NpZ25tZW50IChzdG10 YmxvY2tfdCAqYmxvY2ssIGdmY19leHByICpsaHMsIGdmY19leHByICpyaHMsCiAJCQlnZmNf c2UgKmxzZSwgZ2ZjX3NlICpyc2UsIGJvb2wgdXNlX3ZwdHJfY29weSwKIAkJCWJvb2wgY2xh c3NfcmVhbGxvYykKIHsKLSAgdHJlZSB0bXAsIGZjbiwgc3RkY29weSwgdG9fbGVuLCBmcm9t X2xlbiwgdnB0ciwgb2xkX3ZwdHI7CisgIHRyZWUgdG1wLCBmY24sIHN0ZGNvcHksIHRvX2xl biwgZnJvbV9sZW4sIHZwdHIsIG9sZF92cHRyLCByaHNfdnB0cjsKICAgdmVjPHRyZWUsIHZh X2djPiAqYXJncyA9IE5VTEw7CiAgIGJvb2wgZmluYWxfZXhwcjsKIApAQCAtMTE4NDMsNyAr MTE4NTAsOSBAQCB0cmFuc19jbGFzc19hc3NpZ25tZW50IChzdG10YmxvY2tfdCAqYmxvY2ss IGdmY19leHByICpsaHMsIGdmY19leHByICpyaHMsCiAgICAgfQogCiAgIHZwdHIgPSB0cmFu c19jbGFzc192cHRyX2xlbl9hc3NpZ25tZW50IChibG9jaywgbGhzLCByaHMsIHJzZSwgJnRv X2xlbiwKLQkJCQkJICZmcm9tX2xlbik7CisJCQkJCSAgJmZyb21fbGVuLCAmcmhzX3ZwdHIp OworICBpZiAocmhzX3ZwdHIgPT0gTlVMTF9UUkVFKQorICAgIHJoc192cHRyID0gdnB0cjsK IAogICAvKiBHZW5lcmF0ZSAocmUpYWxsb2NhdGlvbiBvZiB0aGUgbGhzLiAgKi8KICAgaWYg KGNsYXNzX3JlYWxsb2MpCkBAIC0xMTg1Niw3ICsxMTg2NSw3IEBAIHRyYW5zX2NsYXNzX2Fz c2lnbm1lbnQgKHN0bXRibG9ja190ICpibG9jaywgZ2ZjX2V4cHIgKmxocywgZ2ZjX2V4cHIg KnJocywKICAgICAgIGVsc2UKIAlvbGRfdnB0ciA9IGJ1aWxkX2ludF9jc3QgKFRSRUVfVFlQ RSAodnB0ciksIDApOwogCi0gICAgICBzaXplID0gZ2ZjX3ZwdHJfc2l6ZV9nZXQgKHZwdHIp OworICAgICAgc2l6ZSA9IGdmY192cHRyX3NpemVfZ2V0IChyaHNfdnB0cik7CiAgICAgICB0 bXAgPSBsc2UtPmV4cHI7CiAgICAgICBjbGFzc19oYW4gPSBHRkNfQ0xBU1NfVFlQRV9QIChU UkVFX1RZUEUgKHRtcCkpCiAJICA/IGdmY19jbGFzc19kYXRhX2dldCAodG1wKSA6IHRtcDsK QEAgLTExODcwLDEyICsxMTg3OSwxNCBAQCB0cmFuc19jbGFzc19hc3NpZ25tZW50IChzdG10 YmxvY2tfdCAqYmxvY2ssIGdmY19leHByICpsaHMsIGdmY19leHByICpyaHMsCiAKICAgICAg IC8qIFJlYWxsb2NhdGUgaWYgZHluYW1pYyB0eXBlcyBhcmUgZGlmZmVyZW50LiAqLwogICAg ICAgZ2ZjX2luaXRfYmxvY2sgKCZyZV9hbGxvYyk7CisgICAgICB0bXAgPSBmb2xkX2NvbnZl cnQgKHB2b2lkX3R5cGVfbm9kZSwgY2xhc3NfaGFuKTsKICAgICAgIHJlID0gYnVpbGRfY2Fs bF9leHByX2xvYyAoaW5wdXRfbG9jYXRpb24sCiAJCQkJYnVpbHRpbl9kZWNsX2V4cGxpY2l0 IChCVUlMVF9JTl9SRUFMTE9DKSwgMiwKLQkJCQlmb2xkX2NvbnZlcnQgKHB2b2lkX3R5cGVf bm9kZSwgY2xhc3NfaGFuKSwKLQkJCQlzaXplKTsKKwkJCQl0bXAsIHNpemUpOworICAgICAg cmUgPSBmb2xkX2J1aWxkMl9sb2MgKGlucHV0X2xvY2F0aW9uLCBNT0RJRllfRVhQUiwgVFJF RV9UWVBFICh0bXApLCB0bXAsCisJCQkgICAgcmUpOwogICAgICAgdG1wID0gZm9sZF9idWls ZDJfbG9jIChpbnB1dF9sb2NhdGlvbiwgTkVfRVhQUiwKLQkJCSAgICAgbG9naWNhbF90eXBl X25vZGUsIHZwdHIsIG9sZF92cHRyKTsKKwkJCSAgICAgbG9naWNhbF90eXBlX25vZGUsIHJo c192cHRyLCBvbGRfdnB0cik7CiAgICAgICByZSA9IGZvbGRfYnVpbGQzX2xvYyAoaW5wdXRf bG9jYXRpb24sIENPTkRfRVhQUiwgdm9pZF90eXBlX25vZGUsCiAJCQkgICAgdG1wLCByZSwg YnVpbGRfZW1wdHlfc3RtdCAoaW5wdXRfbG9jYXRpb24pKTsKICAgICAgIGdmY19hZGRfZXhw cl90b19ibG9jayAoJnJlX2FsbG9jLCByZSk7CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRl L2dmb3J0cmFuLmRnL2FzYW4vcHIxMTA0MTUtMi5mOTAgYi9nY2MvdGVzdHN1aXRlL2dmb3J0 cmFuLmRnL2FzYW4vcHIxMTA0MTUtMi5mOTAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXgg MDAwMDAwMDAwMDAuLmY0ZmYxODIzZTU0Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3Rz dWl0ZS9nZm9ydHJhbi5kZy9hc2FuL3ByMTEwNDE1LTIuZjkwCkBAIC0wLDAgKzEsNDUgQEAK KyEgeyBkZy1kbyBydW4gfQorIQorISBDb250cmlidXRlZCBieSBCcmFkIFJpY2hhcmRzb24g PGV2ZXJ5dGhpbmdmdW5jdGlvbmFsQHByb3Rvbm1haWwuY29tPgorIQoraW1wbGljaXQgbm9u ZQorICB0eXBlLCBhYnN0cmFjdCA6OiBwCisgICAgaW50ZWdlciA6OiBhID0gNAorICBlbmQg dHlwZSBwCisKKyAgdHlwZSwgZXh0ZW5kcyhwKSA6OiBjCisgICAgaW50ZWdlciA6OiBiID0g NworICAgIGNoYXJhY3RlcihsZW49OiksIGFsbG9jYXRhYmxlIDo6IHN0ciwgc3RyMig6KQor ICBlbmQgdHlwZSBjCisKKyAgdHlwZSwgZXh0ZW5kcyhwKSA6OiBkCisgICAgaW50ZWdlciA6 OiBlZiA9IDcKKyAgZW5kIHR5cGUgZAorCisgIGNsYXNzKHApLCBhbGxvY2F0YWJsZSA6OiBh CisKKyAgYSA9IGZ1bmMoKQorCisgIGEgPSBmdW5jMigpCisKKyAgYSA9IGZ1bmMoKQorCisg IGRlYWxsb2NhdGUoYSkKKworY29udGFpbnMKKyAgZnVuY3Rpb24gZnVuYzIoKSByZXN1bHQo YSkKKyAgICBjbGFzcyhwKSwgYWxsb2NhdGFibGUgOjogYQorICAgIGEgPSBkKCkKKyAgZW5k IGZ1bmN0aW9uIGZ1bmMyCisKKyAgZnVuY3Rpb24gZnVuYygpIHJlc3VsdChhKQorICAgIGNs YXNzKHApLCBhbGxvY2F0YWJsZSA6OiBhCisKKyAgICBhID0gYygpCisgICAgc2VsZWN0IHR5 cGUoYSkKKyAgICB0eXBlIGlzIChjKQorICAgICAgYSVzdHIgPSAnYWJjZCcKKyAgICAgIGEl c3RyMiA9IFsnYWJjZCcsJ2VmZ2gnXQorICAgIGVuZCBzZWxlY3QKKyAgZW5kIGZ1bmN0aW9u IGZ1bmMKK2VuZCBwcm9ncmFtCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dmb3J0cmFu LmRnL2FzYW4vcHIxMTA0MTUtMy5mOTAgYi9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2Fz YW4vcHIxMTA0MTUtMy5mOTAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAw MDAuLjY1YzAxOGQ4MDVmCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nZm9y dHJhbi5kZy9hc2FuL3ByMTEwNDE1LTMuZjkwCkBAIC0wLDAgKzEsNDkgQEAKKyEgeyBkZy1k byBydW4gfQorIQorISBDb250cmlidXRlZCBieSBCcmFkIFJpY2hhcmRzb24gPGV2ZXJ5dGhp bmdmdW5jdGlvbmFsQHByb3Rvbm1haWwuY29tPgorIQoraW1wbGljaXQgbm9uZQorICB0eXBl LCBhYnN0cmFjdCA6OiBwCisgICAgaW50ZWdlciA6OiBhID0gNAorICBlbmQgdHlwZSBwCisK KyAgdHlwZSwgZXh0ZW5kcyhwKSA6OiBjCisgICAgaW50ZWdlciA6OiBiID0gNworICAgIGNo YXJhY3RlcihsZW49OiksIGFsbG9jYXRhYmxlIDo6IHN0ciwgc3RyMig6KQorICBlbmQgdHlw ZSBjCisKKyAgdHlwZSwgZXh0ZW5kcyhwKSA6OiBkCisgICAgaW50ZWdlciA6OiBlZiA9IDcK KyAgZW5kIHR5cGUgZAorCisgIGNsYXNzKHApLCBhbGxvY2F0YWJsZSA6OiBhKDopCisKKyAg YSA9IGZ1bmMoKQorCisgIGEgPSBmdW5jMigpCisKKyAgYSA9IGZ1bmMoKQorCisgIGRlYWxs b2NhdGUoYSkKKworY29udGFpbnMKKyAgZnVuY3Rpb24gZnVuYzIoKSByZXN1bHQoYSkKKyAg ICBjbGFzcyhwKSwgYWxsb2NhdGFibGUgOjogYSg6KQorICAgIGEgPSBbZCgpLGQoKV0KKyAg ZW5kIGZ1bmN0aW9uIGZ1bmMyCisKKyAgZnVuY3Rpb24gZnVuYygpIHJlc3VsdChhKQorICAg IGNsYXNzKHApLCBhbGxvY2F0YWJsZSA6OiBhKDopCisKKyAgICBhID0gW2MoKSxjKCksYygp XQorICAgIHNlbGVjdCB0eXBlKGEpCisgICAgdHlwZSBpcyAoYykKKyAgICAgIGEoMSklc3Ry ID0gJ2FiY2QnCisgICAgICBhKDIpJXN0ciA9ICdhYmMnCisgICAgICBhKDMpJXN0ciA9ICdh YmNkNCcKKyAgICAgIGEoMSklc3RyMiA9IFsnYWJjZCcsJ2VmZ2gnXQorICAgICAgYSgyKSVz dHIyID0gWydiY2QnLCdmZ2gnXQorICAgICAgYSgzKSVzdHIyID0gWydhYmNkNicsJ2VmZ2g3 J10KKyAgICBlbmQgc2VsZWN0CisgIGVuZCBmdW5jdGlvbiBmdW5jCitlbmQgcHJvZ3JhbQpk aWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9wcjExMDQxNS5mOTAgYi9n Y2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL3ByMTEwNDE1LmY5MApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjY0N2NjNGM1MmMKLS0tIC9kZXYvbnVsbAorKysg Yi9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL3ByMTEwNDE1LmY5MApAQCAtMCwwICsxLDIw IEBACishIHsgZGctZG8gcnVuIH0KKyEKKyEgQ29udHJpYnV0ZWQgYnkgQnJhZCBSaWNoYXJk c29uIDxldmVyeXRoaW5nZnVuY3Rpb25hbEBwcm90b25tYWlsLmNvbT4KKyEKKyAgdHlwZSwg YWJzdHJhY3QgOjogcAorICBlbmQgdHlwZSBwCisKKyAgdHlwZSwgZXh0ZW5kcyhwKSA6OiBj CisgIGVuZCB0eXBlIGMKKworICBjbGFzcyhwKSwgYWxsb2NhdGFibGUgOjogYQorCisgIGEg PSBmdW5jKCkKK2NvbnRhaW5zCisgIGZ1bmN0aW9uIGZ1bmMoKSByZXN1bHQoYSkKKyAgICBj bGFzcyhwKSwgYWxsb2NhdGFibGUgOjogYQorCisgICAgYSA9IGMoKQorICBlbmQgZnVuY3Rp b24gZnVuYworZW5kIHByb2dyYW0K --------------2vUb6lX7drYkrBbpIbhwvmsn--