[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--