[PATCH] fortran: [PR53296] Fix character array-ctor function called, twice
Jerry DeLisle <[email protected]> Tue, 21 Jul 2026 15:18:20 -0700
| Newsgroups | gmane.comp.gcc.patches,gmane.comp.gcc.fortran |
|---|---|
| Message-ID | <[email protected]> |
This is a multi-part message in MIME format. --------------uUmBIfpe03G0jbrQWs9ylUc9 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi all, The attached patch fixes this per the ChangeLog. While testing the double call fix I discovered the a memory leak problem. The patch is fairly straight forward. Regression tested on x86_64. New test case. Ok for mainline? Regards, Jerry --- fortran: [PR53296] Fix character array-ctor function called twice Avoid the redundant generated call to the pre chain when no_function_call is set. Also fix a related stack-buffer-overflow: gfc_conv_array_parameter wrote over the array constructor's. The specified length was to short. Use the explicit character type-spec length instead. PR fortran/53296 gcc/fortran/ChangeLog: * trans-expr.cc (gfc_conv_procedure_call): Skip the redundant function call added to the pre chain when no_function_call is set and the character result length was already determined without running the callee. * trans-array.cc (gfc_conv_array_parameter): Convert an array constructor's explicit character type-spec length directly instead of using the first elements length. gcc/testsuite/ChangeLog: * gfortran.dg/array_constructor_59.f90: New test. --- --------------uUmBIfpe03G0jbrQWs9ylUc9 Content-Type: text/x-patch; charset=UTF-8; name="PR53296-array-ctor-function-called-twice.patch" Content-Disposition: attachment; filename="PR53296-array-ctor-function-called-twice.patch" Content-Transfer-Encoding: base64 RnJvbSA1ZDUzOTQ1Y2Y0ZmM2NzRlZWYxOGMyZDhjODA3NWU1Yjg2MjRiZTNjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKZXJyeSBEZUxpc2xlIDxqdmRlbGlzbGUyQGdtYWls LmNvbT4KRGF0ZTogVHVlLCAyMSBKdWwgMjAyNiAwOToxNTo1MCAtMDcwMApTdWJqZWN0OiBb UEFUQ0hdIGZvcnRyYW46IFtQUjUzMjk2XSBGaXggY2hhcmFjdGVyIGFycmF5LWN0b3IgZnVu Y3Rpb24gY2FsbGVkCiB0d2ljZQoKQXZvaWQgdGhlIHJlZHVuZGFudCBnZW5lcmF0ZWQgY2Fs bCB0byB0aGUgcHJlIGNoYWluIHdoZW4Kbm9fZnVuY3Rpb25fY2FsbCBpcyBzZXQuCgpBbHNv IGZpeCBhIHJlbGF0ZWQgc3RhY2stYnVmZmVyLW92ZXJmbG93OiBnZmNfY29udl9hcnJheV9w YXJhbWV0ZXIKd3JvdGUgb3ZlciB0aGUgYXJyYXkgY29uc3RydWN0b3Incy4gVGhlIHNwZWNp ZmllZCBsZW5ndGggd2FzIHRvIHNob3J0LgpVc2UgdGhlIGV4cGxpY2l0IGNoYXJhY3RlciB0 eXBlLXNwZWMgbGVuZ3RoIGluc3RlYWQuCgoJUFIgZm9ydHJhbi81MzI5NgoKZ2NjL2ZvcnRy YW4vQ2hhbmdlTG9nOgoKCSogdHJhbnMtZXhwci5jYyAoZ2ZjX2NvbnZfcHJvY2VkdXJlX2Nh bGwpOiBTa2lwIHRoZSByZWR1bmRhbnQKCWZ1bmN0aW9uIGNhbGwgYWRkZWQgdG8gdGhlIHBy ZSBjaGFpbiB3aGVuIG5vX2Z1bmN0aW9uX2NhbGwgaXMKCXNldCBhbmQgdGhlIGNoYXJhY3Rl ciByZXN1bHQgbGVuZ3RoIHdhcyBhbHJlYWR5IGRldGVybWluZWQKCXdpdGhvdXQgcnVubmlu ZyB0aGUgY2FsbGVlLgoJKiB0cmFucy1hcnJheS5jYyAoZ2ZjX2NvbnZfYXJyYXlfcGFyYW1l dGVyKTogQ29udmVydCBhbiBhcnJheQoJY29uc3RydWN0b3IncyBleHBsaWNpdCBjaGFyYWN0 ZXIgdHlwZS1zcGVjIGxlbmd0aCBkaXJlY3RseQoJaW5zdGVhZCBvZiB1c2luZyB0aGUgZmly c3QgZWxlbWVudHMgbGVuZ3RoLgoKZ2NjL3Rlc3RzdWl0ZS9DaGFuZ2VMb2c6CgoJKiBnZm9y dHJhbi5kZy9hcnJheV9jb25zdHJ1Y3Rvcl81OS5mOTA6IE5ldyB0ZXN0LgotLS0KIGdjYy9m b3J0cmFuL3RyYW5zLWFycmF5LmNjICAgICAgICAgICAgICAgICAgICB8IDE1ICsrKysrKysr KysrLQogZ2NjL2ZvcnRyYW4vdHJhbnMtZXhwci5jYyAgICAgICAgICAgICAgICAgICAgIHwg IDkgKysrKysrKy0KIC4uLi9nZm9ydHJhbi5kZy9hcnJheV9jb25zdHJ1Y3Rvcl81OS5mOTAg ICAgICB8IDIzICsrKysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgNDUgaW5z ZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVz dHN1aXRlL2dmb3J0cmFuLmRnL2FycmF5X2NvbnN0cnVjdG9yXzU5LmY5MAoKZGlmZiAtLWdp dCBhL2djYy9mb3J0cmFuL3RyYW5zLWFycmF5LmNjIGIvZ2NjL2ZvcnRyYW4vdHJhbnMtYXJy YXkuY2MKaW5kZXggYjYwZTBjMTBiNmEuLmNmN2VkZGY2ZTFkIDEwMDY0NAotLS0gYS9nY2Mv Zm9ydHJhbi90cmFucy1hcnJheS5jYworKysgYi9nY2MvZm9ydHJhbi90cmFucy1hcnJheS5j YwpAQCAtODkwOCw3ICs4OTA4LDIwIEBAIGdmY19jb252X2FycmF5X3BhcmFtZXRlciAoZ2Zj X3NlICpzZSwgZ2ZjX2V4cHIgKmV4cHIsIGJvb2wgZzc3LAogCiAgIGlmIChleHByLT5leHBy X3R5cGUgPT0gRVhQUl9BUlJBWSAmJiBleHByLT50cy50eXBlID09IEJUX0NIQVJBQ1RFUikK ICAgICB7Ci0gICAgICBnZXRfYXJyYXlfY3Rvcl9zdHJsZW4gKCZzZS0+cHJlLCBleHByLT52 YWx1ZS5jb25zdHJ1Y3RvciwgJnRtcCk7CisgICAgICBpZiAoZXhwci0+dHMudS5jbC0+bGVu Z3RoX2Zyb21fdHlwZXNwZWMgJiYgZXhwci0+dHMudS5jbC0+bGVuZ3RoKQorCXsKKwkgIC8q IFRoZSBjb25zdHJ1Y3RvciBoYXMgYW4gZXhwbGljaXQgY2hhcmFjdGVyIHR5cGUtc3BlYyBs ZW5ndGgKKwkgICAgIHNvIGNvbnZlcnQgaXQgZGlyZWN0bHkuICAqLworCSAgZ2ZjX3NlIGNz ZTsKKwkgIGdmY19pbml0X3NlICgmY3NlLCBOVUxMKTsKKwkgIGdmY19jb252X2V4cHJfdHlw ZSAoJmNzZSwgZXhwci0+dHMudS5jbC0+bGVuZ3RoLAorCQkJICAgICAgZ2ZjX2NoYXJsZW5f dHlwZV9ub2RlKTsKKwkgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZzZS0+cHJlLCAmY3Nl LnByZSk7CisJICB0bXAgPSBjc2UuZXhwcjsKKwl9CisgICAgICBlbHNlCisJZ2V0X2FycmF5 X2N0b3Jfc3RybGVuICgmc2UtPnByZSwgZXhwci0+dmFsdWUuY29uc3RydWN0b3IsICZ0bXAp OworCiAgICAgICBleHByLT50cy51LmNsLT5iYWNrZW5kX2RlY2wgPSB0bXA7CiAgICAgICBz ZS0+c3RyaW5nX2xlbmd0aCA9IHRtcDsKICAgICB9CmRpZmYgLS1naXQgYS9nY2MvZm9ydHJh bi90cmFucy1leHByLmNjIGIvZ2NjL2ZvcnRyYW4vdHJhbnMtZXhwci5jYwppbmRleCBkYjMz YmNkZDE1ZC4uMmMyNGE2NzE3ZjUgMTAwNjQ0Ci0tLSBhL2djYy9mb3J0cmFuL3RyYW5zLWV4 cHIuY2MKKysrIGIvZ2NjL2ZvcnRyYW4vdHJhbnMtZXhwci5jYwpAQCAtNzA0Niw2ICs3MDQ2 LDcgQEAgZ2ZjX2NvbnZfcHJvY2VkdXJlX2NhbGwgKGdmY19zZSAqIHNlLCBnZmNfc3ltYm9s ICogc3ltLAogICBpbnQgYXJnbGVuOwogICB1bnNpZ25lZCBpbnQgYXJnYzsKICAgdHJlZSBh cmcxX2NudG5yID0gTlVMTF9UUkVFOworICBib29sIGNhbGxfbmVlZGVkX2Zvcl9sZW5ndGgg PSB0cnVlOwogICBhcmdsaXN0ID0gTlVMTDsKICAgcmV0YXJncyA9IE5VTEw7CiAgIHN0cmlu Z2FyZ3MgPSBOVUxMOwpAQCAtODc2Nyw2ICs4NzY4LDEwIEBAIGdmY19jb252X3Byb2NlZHVy ZV9jYWxsIChnZmNfc2UgKiBzZSwgZ2ZjX3N5bWJvbCAqIHN5bSwKIAkJCQkgZm9sZF9jb252 ZXJ0IChnZmNfY2hhcmxlbl90eXBlX25vZGUsIHRtcCksCiAJCQkJIGJ1aWxkX3plcm9fY3N0 IChnZmNfY2hhcmxlbl90eXBlX25vZGUpKTsKIAkgIGNsLmJhY2tlbmRfZGVjbCA9IHRtcDsK KworCSAgLyogVGhlIGxlbmd0aCB3YXMgZnVsbHkgY29tcHV0ZWQgYWJvdmUgZnJvbSB0aGUg c3BlY2lmaWNhdGlvbgorCSAgICAgZXhwcmVzc2lvbiwgd2l0aG91dCBuZWVkaW5nIHRoZSBj YWxsZWUgdG8gYWN0dWFsbHkgcnVuLiAgKi8KKwkgIGNhbGxfbmVlZGVkX2Zvcl9sZW5ndGgg PSBmYWxzZTsKIAl9CiAKICAgICAgIC8qIFNldCB1cCBhIGNoYXJsZW4gc3RydWN0dXJlIGZv ciBpdC4gICovCkBAIC05MDc2LDcgKzkwODEsOSBAQCBnZmNfY29udl9wcm9jZWR1cmVfY2Fs bCAoZ2ZjX3NlICogc2UsIGdmY19zeW1ib2wgKiBzeW0sCiAgIGlmIChieXJlZikKICAgICB7 CiAgICAgICAvKiBBZGQgdGhlIGZ1bmN0aW9uIGNhbGwgdG8gdGhlIHByZSBjaGFpbi4gIFRo ZXJlIGlzIG5vIGV4cHJlc3Npb24uICAqLwotICAgICAgZ2ZjX2FkZF9leHByX3RvX2Jsb2Nr ICgmc2UtPnByZSwgc2UtPmV4cHIpOworICAgICAgaWYgKCFzZS0+bm9fZnVuY3Rpb25fY2Fs bCB8fCBjYWxsX25lZWRlZF9mb3JfbGVuZ3RoKQorCWdmY19hZGRfZXhwcl90b19ibG9jayAo JnNlLT5wcmUsIHNlLT5leHByKTsKKwogICAgICAgc2UtPmV4cHIgPSBOVUxMX1RSRUU7CiAK ICAgICAgIGlmICghc2UtPmRpcmVjdF9ieXJlZikKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3Vp dGUvZ2ZvcnRyYW4uZGcvYXJyYXlfY29uc3RydWN0b3JfNTkuZjkwIGIvZ2NjL3Rlc3RzdWl0 ZS9nZm9ydHJhbi5kZy9hcnJheV9jb25zdHJ1Y3Rvcl81OS5mOTAKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjMxMTY5MTYzYTNlCi0tLSAvZGV2L251bGwKKysr IGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9hcnJheV9jb25zdHJ1Y3Rvcl81OS5mOTAK QEAgLTAsMCArMSwyMyBAQAorISB7IGRnLWRvIHJ1biB9CishIFBSIGZvcnRyYW4vNTMyOTYK KyEgVGVzdCBjYXNlIGJhc2VkIG9uIHRoZSB0ZXN0IGNhc2UgZnJvbSBTdGV2ZSBLYXJnbAor cHJvZ3JhbSBwcjUzMjk2CisgIGltcGxpY2l0IG5vbmUKKyAgY2hhcmFjdGVyKGxlbj0xMjgp IDo6IHN0cigyKQorICBpbnRlZ2VyIDo6IG5jYWxscyA9IDAKKworICBzdHIgPSBbdWNhc2Uo ImFiY2RlIiksIHVjYXNlKCJnaGlqIildCisgIGlmIChuY2FsbHMgLz0gMikgc3RvcCAxCisg IGlmICh0cmltIChzdHIoMSkpIC89ICJhYmNkZSIpIHN0b3AgMgorICBpZiAodHJpbSAoc3Ry KDIpKSAvPSAiZ2hpaiIpIHN0b3AgMworCitjb250YWlucworCisgIGZ1bmN0aW9uIHVjYXNl KHMpCisgICAgY2hhcmFjdGVyKCopLCBpbnRlbnQoaW4pIDo6IHMKKyAgICBjaGFyYWN0ZXIo bGVuKHMpKSA6OiB1Y2FzZQorICAgIG5jYWxscyA9IG5jYWxscyArIDEKKyAgICB1Y2FzZSA9 IHMKKyAgZW5kIGZ1bmN0aW9uIHVjYXNlCisKK2VuZCBwcm9ncmFtIHByNTMyOTYKLS0gCjIu NTUuMAoK --------------uUmBIfpe03G0jbrQWs9ylUc9--