From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ciao.gmane.io (ciao.gmane.io [116.202.254.214]) by sourceware.org (Postfix) with ESMTPS id 18FCB3858D20 for ; Sat, 4 Mar 2023 16:02:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 18FCB3858D20 Authentication-Results: sourceware.org; dmarc=fail (p=none dis=none) header.from=gmx.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=m.gmane-mx.org Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1pYUKp-0006QD-Ub for gcc-patches@gcc.gnu.org; Sat, 04 Mar 2023 17:02:11 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: gcc-patches@gcc.gnu.org From: Harald Anlauf Subject: Re: [PATCH, v2] Fortran: fix CLASS attribute handling [PR106856] Date: Sat, 4 Mar 2023 17:02:05 +0100 Message-ID: References: <5b42f0b7-e217-555d-b1f2-4b623f3ae150@orange.fr> <5f1e8202-303e-5da2-c42b-8eab00a12a97@orange.fr> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------UnIYNKUpsAMbGSm10EyRUXKx" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Content-Language: en-US In-Reply-To: <5f1e8202-303e-5da2-c42b-8eab00a12a97@orange.fr> Cc: fortran@gcc.gnu.org X-Spam-Status: No, score=-7.5 required=5.0 tests=BAYES_00,BODY_8BITS,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,GIT_PATCH_0,HEADER_FROM_DIFFERENT_DOMAINS,KAM_DMARC_STATUS,NICE_REPLY_A,SPF_HELO_NONE,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: This is a multi-part message in MIME format. --------------UnIYNKUpsAMbGSm10EyRUXKx Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi Mikael! Am 04.03.23 um 14:56 schrieb Mikael Morin: > I have found the time finally.  It's not as bad as it seemed.  See below. > >> diff --git a/gcc/fortran/decl.cc b/gcc/fortran/decl.cc >> index eec0314cf4c..72d8c6f1c14 100644 >> --- a/gcc/fortran/decl.cc >> +++ b/gcc/fortran/decl.cc >> +      sym->attr.pointer = CLASS_DATA(sym)->attr.class_pointer; >> +      sym->attr.allocatable = CLASS_DATA(sym)->attr.allocatable; >> +      sym->attr.dimension = CLASS_DATA(sym)->attr.dimension; >> +      sym->attr.codimension = CLASS_DATA(sym)->attr.codimension; >> +      if (as && CLASS_DATA (sym)->as) >> +    sym->as = gfc_copy_array_spec (CLASS_DATA (sym)->as); > > Here the condition on 'CLASS_DATA(sym)->as' makes obviously sense, but I > don't see why there is also a condition on 'as'. > > For example, if the array spec has been previously set on the class > container's first component, and there is no array spec information in > the current statement (i.e. as == NULL), sym->as will remain NULL, and a > non-array class container will be built in gfc_build_class_symbol below. Very good catch! Indeed, this fixes the testcase variations. >> @@ -8807,6 +8785,27 @@ attr_decl1 (void) >>        goto cleanup; >>      } >> >> +  if (sym->ts.type == BT_CLASS && sym->ts.u.derived->attr.is_class >> +      && !as && !current_attr.pointer && !current_attr.allocatable >> +      && !current_attr.external) >> +    { >> +      sym->attr.pointer = 0; >> +      sym->attr.allocatable = 0; >> +      sym->attr.dimension = 0; >> +      sym->attr.codimension = 0; > >> +      gfc_free_array_spec (sym->as); > sym->as should probably be reset to NULL here. Done. > Maybe both calls to gfc_free_array_spec here and to gfc_copy_array_spec > above can be avoided by doing a simple pointer copy? I tried that, but this produced a crash with a double-free. The attached revised version uses the above proven changes, and extends the new testcase class_74.f90 by variations of the failures remaining with version 1 so that different codepaths are tested. Regtested again on x86_64-pc-linux-gnu. Any further comments? Thanks for your very helpful review! Harald --------------UnIYNKUpsAMbGSm10EyRUXKx Content-Type: text/x-patch; charset=UTF-8; name="pr107074-v2.diff" Content-Disposition: attachment; filename="pr107074-v2.diff" Content-Transfer-Encoding: base64 RnJvbSA3MGNiYTdkYTE4MDIzMjgyNTQ2YjlhNWQ4MGU5NzZmYzM3NDRkNzMyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIYXJhbGQgQW5sYXVmIDxhbmxhdWZAZ214LmRlPgpE YXRlOiBXZWQsIDUgT2N0IDIwMjIgMjI6MjU6MTQgKzAyMDAKU3ViamVjdDogW1BBVENIXSBG b3J0cmFuOiByZWplY3QgcHJvY2VkdXJlcyBhbmQgcHJvY2VkdXJlIHBvaW50ZXJzIGFzIElP CiBlbGVtZW50IFtQUjEwNzA3NF0KCmdjYy9mb3J0cmFuL0NoYW5nZUxvZzoKCglQUiBmb3J0 cmFuLzEwNzA3NAoJKiByZXNvbHZlLmNjIChyZXNvbHZlX3RyYW5zZmVyKTogQSBwcm9jZWR1 cmUsIHR5cGUtYm91bmQgcHJvY2VkdXJlCglvciBhIHByb2NlZHVyZSBwb2ludGVyIGNhbm5v dCBiZSBhbiBlbGVtZW50IG9mIGFuIElPIGxpc3QuCgkqIHNpbXBsaWZ5LmNjIChnZmNfc2lt cGxpZnlfbWVyZ2UpOiBEbyBub3QgdHJ5IHRvIHJlc2V0IGFycmF5IGxvd2VyCglib3VuZCBm b3Igc2NhbGFycy4KCmdjYy90ZXN0c3VpdGUvQ2hhbmdlTG9nOgoKCVBSIGZvcnRyYW4vMTA3 MDc0CgkqIGdmb3J0cmFuLmRnL3ByMTA3MDc0LmY5MDogTmV3IHRlc3QuCgkqIGdmb3J0cmFu LmRnL3ByMTA3MDc0Yi5mOTA6IE5ldyB0ZXN0LgotLS0KIGdjYy9mb3J0cmFuL3Jlc29sdmUu Y2MgICAgICAgICAgICAgICAgICB8IDMxICsrKysrKysrKysrKysrKysrKysrKysrKysKIGdj Yy9mb3J0cmFuL3NpbXBsaWZ5LmNjICAgICAgICAgICAgICAgICB8ICAzICsrLQogZ2NjL3Rl c3RzdWl0ZS9nZm9ydHJhbi5kZy9wcjEwNzA3NC5mOTAgIHwgMTEgKysrKysrKysrCiBnY2Mv dGVzdHN1aXRlL2dmb3J0cmFuLmRnL3ByMTA3MDc0Yi5mOTAgfCAxOCArKysrKysrKysrKysr KwogNCBmaWxlcyBjaGFuZ2VkLCA2MiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBj cmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9wcjEwNzA3NC5m OTAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL3ByMTA3 MDc0Yi5mOTAKCmRpZmYgLS1naXQgYS9nY2MvZm9ydHJhbi9yZXNvbHZlLmNjIGIvZ2NjL2Zv cnRyYW4vcmVzb2x2ZS5jYwppbmRleCBkMTMzYmMyZDAzNC4uZDlkMTAxNzc1ZjYgMTAwNjQ0 Ci0tLSBhL2djYy9mb3J0cmFuL3Jlc29sdmUuY2MKKysrIGIvZ2NjL2ZvcnRyYW4vcmVzb2x2 ZS5jYwpAQCAtMTAxMzcsNiArMTAxMzcsMzcgQEAgcmVzb2x2ZV90cmFuc2ZlciAoZ2ZjX2Nv ZGUgKmNvZGUpCiAJCSAiYW4gYXNzdW1lZC1zaXplIGFycmF5IiwgJmNvZGUtPmxvYyk7CiAg ICAgICByZXR1cm47CiAgICAgfQorCisgIC8qIENoZWNrIGZvciBwcm9jZWR1cmVzIGFuZCBw cm9jZWR1cmUgcG9pbnRlcnMuICBGb3J0cmFuIDIwMTggaGFzOgorCisgICAgIEMxMjMzIChS MTIxNykgQW4gZXhwcmVzc2lvbiB0aGF0IGlzIGFuIG91dHB1dC1pdGVtIHNoYWxsIG5vdCBo YXZlIGEKKyAgICAgdmFsdWUgdGhhdCBpcyBhIHByb2NlZHVyZSBwb2ludGVyLgorCisgICAg IFRoZXJlIGRvZXMgbm90IGFwcGVhciBhbnkgcmVhc29uIHRvIGFsbG93IHByb2NlZHVyZSBw b2ludGVycyBmb3IKKyAgICAgaW5wdXQsIHNvIHdlIGRpc2FsbG93IHRoZW0gZ2VuZXJhbGx5 LCBhbmQgd2UgcmVqZWN0IHByb2NlZHVyZXMuICAqLworCisgIGlmIChleHAtPmV4cHJfdHlw ZSA9PSBFWFBSX1ZBUklBQkxFKQorICAgIHsKKyAgICAgIC8qIENoZWNrIGZvciB0eXBlLWJv dW5kIHByb2NlZHVyZXMuICAqLworICAgICAgZm9yIChyZWYgPSBleHAtPnJlZjsgcmVmOyBy ZWYgPSByZWYtPm5leHQpCisJaWYgKHJlZi0+dHlwZSA9PSBSRUZfQ09NUE9ORU5UCisJICAg ICYmIHJlZi0+dS5jLmNvbXBvbmVudC0+YXR0ci5mbGF2b3IgPT0gRkxfUFJPQ0VEVVJFKQor CSAgYnJlYWs7CisKKyAgICAgIC8qIFByb2NlZHVyZSBvciBwcm9jZWR1cmUgcG9pbnRlcj8g ICovCisgICAgICBpZiAoZXhwLT50cy50eXBlID09IEJUX1BST0NFRFVSRQorCSAgfHwgKHJl ZiAmJiByZWYtPnUuYy5jb21wb25lbnQtPmF0dHIuZmxhdm9yID09IEZMX1BST0NFRFVSRSkp CisJeworCSAgaWYgKGV4cC0+c3ltdHJlZS0+bi5zeW0tPmF0dHIucHJvY19wb2ludGVyCisJ ICAgICAgfHwgKHJlZiAmJiByZWYtPnUuYy5jb21wb25lbnQtPmF0dHIucHJvY19wb2ludGVy KSkKKwkgICAgZ2ZjX2Vycm9yICgiRGF0YSB0cmFuc2ZlciBlbGVtZW50IGF0ICVMIGNhbm5v dCBiZSBhIHByb2NlZHVyZSAiCisJCSAgICAgICAicG9pbnRlciIsICZjb2RlLT5sb2MpOwor CSAgZWxzZQorCSAgICBnZmNfZXJyb3IgKCJEYXRhIHRyYW5zZmVyIGVsZW1lbnQgYXQgJUwg Y2Fubm90IGJlIGEgcHJvY2VkdXJlIiwKKwkJICAgICAgICZjb2RlLT5sb2MpOworCSAgcmV0 dXJuOworCX0KKyAgICB9CiB9CiAKIApkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4vc2ltcGxp ZnkuY2MgYi9nY2MvZm9ydHJhbi9zaW1wbGlmeS5jYwppbmRleCA2YWM5MmNmOWRiOC4uZjA0 ODJkMzQ5YWYgMTAwNjQ0Ci0tLSBhL2djYy9mb3J0cmFuL3NpbXBsaWZ5LmNjCisrKyBiL2dj Yy9mb3J0cmFuL3NpbXBsaWZ5LmNjCkBAIC00OTE1LDcgKzQ5MTUsOCBAQCBnZmNfc2ltcGxp ZnlfbWVyZ2UgKGdmY19leHByICp0c291cmNlLCBnZmNfZXhwciAqZnNvdXJjZSwgZ2ZjX2V4 cHIgKm1hc2spCiAgICAgewogICAgICAgcmVzdWx0ID0gZ2ZjX2NvcHlfZXhwciAobWFzay0+ dmFsdWUubG9naWNhbCA/IHRzb3VyY2UgOiBmc291cmNlKTsKICAgICAgIC8qIFBhcmVudGhl c2lzIGlzIG5lZWRlZCB0byBnZXQgbG93ZXIgYm91bmRzIG9mIDEuICAqLwotICAgICAgcmVz dWx0ID0gZ2ZjX2dldF9wYXJlbnRoZXNlcyAocmVzdWx0KTsKKyAgICAgIGlmIChyZXN1bHQt PnJhbmspCisJcmVzdWx0ID0gZ2ZjX2dldF9wYXJlbnRoZXNlcyAocmVzdWx0KTsKICAgICAg IGdmY19zaW1wbGlmeV9leHByIChyZXN1bHQsIDEpOwogICAgICAgcmV0dXJuIHJlc3VsdDsK ICAgICB9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL3ByMTA3MDc0 LmY5MCBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvcHIxMDcwNzQuZjkwCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xMzYzYzI4NTkxMgotLS0gL2Rldi9u dWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvcHIxMDcwNzQuZjkwCkBAIC0w LDAgKzEsMTEgQEAKKyEgeyBkZy1kbyBjb21waWxlIH0KKyEgUFIgZm9ydHJhbi8xMDcwNzQg LSBJQ0U6IEJhZCBJTyBiYXNldHlwZSAoOCkKKyEgQ29udHJpYnV0ZWQgYnkgRy5TdGVpbm1l dHoKKworcHJvZ3JhbSBwCisgIGltcGxpY2l0IG5vbmUKKyAgaW50ZWdlciwgZXh0ZXJuYWwg ICAgICAgIDo6IGEKKyAgcHJvY2VkdXJlKHJlYWwpLCBwb2ludGVyIDo6IGIKKyAgcHJpbnQg KiwgbWVyZ2UgKGEsIGEsIC50cnVlLikgISB7IGRnLWVycm9yICJwcm9jZWR1cmUiIH0KKyAg cHJpbnQgKiwgbWVyZ2UgKGIsIGIsIC50cnVlLikgISB7IGRnLWVycm9yICJwcm9jZWR1cmUg cG9pbnRlciIgfQorZW5kCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRn L3ByMTA3MDc0Yi5mOTAgYi9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL3ByMTA3MDc0Yi5m OTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjk4YzNmYzBiOTBh Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9wcjEwNzA3 NGIuZjkwCkBAIC0wLDAgKzEsMTggQEAKKyEgeyBkZy1kbyBjb21waWxlIH0KKyEgQWRkaXRp b25hbCB0ZXN0IGZvciBQUiBmb3J0cmFuLzEwNzA3NAorISBDb250cmlidXRlZCBieSBNLk1v cmluCisKK3Byb2dyYW0gcAorICBpbXBsaWNpdCBub25lCisgIHR5cGUgOjogdAorICAgIHBy b2NlZHVyZShmKSwgcG9pbnRlciwgbm9wYXNzIDo6IGIKKyAgZW5kIHR5cGUgdAorICB0eXBl KHQpIDo6IGEKKworICBpbnRlcmZhY2UKKyAgICByZWFsIGZ1bmN0aW9uIGYoKQorICAgIGVu ZCBmdW5jdGlvbiBmCisgIGVuZCBpbnRlcmZhY2UKKworICBwcmludCAqLCBtZXJnZSAoYSVi LCBhJWIsIC50cnVlLikgISB7IGRnLWVycm9yICJwcm9jZWR1cmUgcG9pbnRlciIgfQorZW5k Ci0tIAoyLjM1LjMKCg== --------------UnIYNKUpsAMbGSm10EyRUXKx--