From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6621 invoked by alias); 25 Oct 2009 11:20:37 -0000 Received: (qmail 6604 invoked by uid 22791); 25 Oct 2009 11:20:35 -0000 X-SWARE-Spam-Status: No, hits=-2.0 required=5.0 tests=AWL,BAYES_00,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from ey-out-1920.google.com (HELO ey-out-1920.google.com) (74.125.78.147) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sun, 25 Oct 2009 11:20:29 +0000 Received: by ey-out-1920.google.com with SMTP id 26so538000eyw.46 for ; Sun, 25 Oct 2009 04:20:26 -0700 (PDT) MIME-Version: 1.0 Received: by 10.216.89.19 with SMTP id b19mr755766wef.152.1256469626204; Sun, 25 Oct 2009 04:20:26 -0700 (PDT) Date: Sun, 25 Oct 2009 11:49:00 -0000 Message-ID: <854832d40910250420i45c7bfddga4130fc1f1bfccd0@mail.gmail.com> Subject: [Patch, Fortran] PR 41714: [OOP] ALLOCATE SOURCE= does not properly copy the value from SOURCE From: Janus Weil To: gfortran , gcc-patches , salvatore.filippone@uniroma2.it Content-Type: multipart/mixed; boundary=0016e6d99f20bdb2020476c0a1e2 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2009-10/txt/msg01521.txt.bz2 --0016e6d99f20bdb2020476c0a1e2 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 1509 Hi all, here is my patch for this PR. After my original fix in comment #1 had been lying around for more than a week, I finally managed to get rid of the regression (see comment #5). Moreover I also did some cleanup. When allocating a CLASS variable, the size of the allocated memory is used in several places: For the actual allocation, initialization via memcpy, settig the '$size' field, etc. There are several possible cases for this size: It can be fixed at compile time in some cases, while in others it has to be determined at run-time. Before this patch, the size was re-evaluated in every place where it was used. Now I use a tree variable 'memsz', which remembers the size, so that it can be reused, which simplifies the code a lot. Salvatore: I hope this already fixes some of the runtime trouble you're seeing (it seems you use CLASS allocation with SOURCE quite a bit, though I haven't checked if this particular case appears (SOURCE being non-CLASS)). The patch was regtested on x86_64-unknown-linux-gnu. Ok for trunk? Cheers, Janus 2009-10-25 Janus Weil PR fortran/41714 * trans-expr.c (gfc_build_memcpy_call): Take care of the case that the call to '__builtin_memcpy' is optimized away (replaced by a direct assignment). * trans-stmt.c (gfc_trans_allocate): Do correct data initialization for CLASS variables with SOURCE tag, plus some cleanup. 2009-10-25 Janus Weil PR fortran/41714 * gfortran.dg/class_allocate_4.f03: New test. --0016e6d99f20bdb2020476c0a1e2 Content-Type: text/x-diff; charset=US-ASCII; name="pr41714_v3.diff" Content-Disposition: attachment; filename="pr41714_v3.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g17pev9p0 Content-length: 7365 SW5kZXg6IGdjYy9mb3J0cmFuL3RyYW5zLWV4cHIuYwo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0tLSBnY2MvZm9ydHJhbi90cmFucy1leHByLmMJKFJldmlz aW9uIDE1MzUzOCkKKysrIGdjYy9mb3J0cmFuL3RyYW5zLWV4cHIuYwkoQXJi ZWl0c2tvcGllKQpAQCAtNDg4OCw3ICs0ODg4LDEwIEBAIGdmY19idWlsZF9t ZW1jcHlfY2FsbCAodHJlZSBkc3QsIHRyZWUgc3JjLCB0cmVlIGxlCiAgIC8q IENvbnN0cnVjdCBjYWxsIHRvIF9fYnVpbHRpbl9tZW1jcHkuICAqLwogICB0 bXAgPSBidWlsZF9jYWxsX2V4cHJfbG9jIChpbnB1dF9sb2NhdGlvbiwKIAkJ CSBidWlsdF9pbl9kZWNsc1tCVUlMVF9JTl9NRU1DUFldLCAzLCBkc3QsIHNy YywgbGVuKTsKLSAgcmV0dXJuIGZvbGRfY29udmVydCAodm9pZF90eXBlX25v ZGUsIHRtcCk7CisgIGlmIChUUkVFX0NPREUgKHRtcCkgPT0gTk9QX0VYUFIp CisgICAgcmV0dXJuIHRtcDsKKyAgZWxzZQorICAgIHJldHVybiBmb2xkX2Nv bnZlcnQgKHZvaWRfdHlwZV9ub2RlLCB0bXApOwogfQogCiAKSW5kZXg6IGdj Yy9mb3J0cmFuL3RyYW5zLXN0bXQuYwo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0tLSBnY2MvZm9ydHJhbi90cmFucy1zdG10LmMJKFJldmlzaW9uIDE1MzUz OCkKKysrIGdjYy9mb3J0cmFuL3RyYW5zLXN0bXQuYwkoQXJiZWl0c2tvcGll KQpAQCAtMzk4MywxMiArMzk4MywxMyBAQCBnZmNfdHJhbnNfYWxsb2NhdGUg KGdmY19jb2RlICogY29kZSkKICAgdHJlZSBzdGF0OwogICB0cmVlIHBzdGF0 OwogICB0cmVlIGVycm9yX2xhYmVsOworICB0cmVlIG1lbXN6OwogICBzdG10 YmxvY2tfdCBibG9jazsKIAogICBpZiAoIWNvZGUtPmV4dC5hbGxvYy5saXN0 KQogICAgIHJldHVybiBOVUxMX1RSRUU7CiAKLSAgcHN0YXQgPSBzdGF0ID0g ZXJyb3JfbGFiZWwgPSB0bXAgPSBOVUxMX1RSRUU7CisgIHBzdGF0ID0gc3Rh dCA9IGVycm9yX2xhYmVsID0gdG1wID0gbWVtc3ogPSBOVUxMX1RSRUU7CiAK ICAgZ2ZjX3N0YXJ0X2Jsb2NrICgmYmxvY2spOwogCkBAIC00MDMyLDE5ICs0 MDMzLDE5IEBAIGdmY190cmFuc19hbGxvY2F0ZSAoZ2ZjX2NvZGUgKiBjb2Rl KQogCSAgICAgIGdmY19pbml0X3NlICgmc2Vfc3osIE5VTEwpOwogCSAgICAg IGdmY19jb252X2V4cHIgKCZzZV9zeiwgc3opOwogCSAgICAgIGdmY19mcmVl X2V4cHIgKHN6KTsKLQkgICAgICB0bXAgPSBzZV9zei5leHByOworCSAgICAg IG1lbXN6ID0gc2Vfc3ouZXhwcjsKIAkgICAgfQogCSAgZWxzZSBpZiAoY29k ZS0+ZXhwcjMgJiYgY29kZS0+ZXhwcjMtPnRzLnR5cGUgIT0gQlRfQ0xBU1Mp Ci0JICAgIHRtcCA9IFRZUEVfU0laRV9VTklUIChnZmNfdHlwZW5vZGVfZm9y X3NwZWMgKCZjb2RlLT5leHByMy0+dHMpKTsKKwkgICAgbWVtc3ogPSBUWVBF X1NJWkVfVU5JVCAoZ2ZjX3R5cGVub2RlX2Zvcl9zcGVjICgmY29kZS0+ZXhw cjMtPnRzKSk7CiAJICBlbHNlIGlmIChjb2RlLT5leHQuYWxsb2MudHMudHlw ZSAhPSBCVF9VTktOT1dOKQotCSAgICB0bXAgPSBUWVBFX1NJWkVfVU5JVCAo Z2ZjX3R5cGVub2RlX2Zvcl9zcGVjICgmY29kZS0+ZXh0LmFsbG9jLnRzKSk7 CisJICAgIG1lbXN6ID0gVFlQRV9TSVpFX1VOSVQgKGdmY190eXBlbm9kZV9m b3Jfc3BlYyAoJmNvZGUtPmV4dC5hbGxvYy50cykpOwogCSAgZWxzZQotCSAg ICB0bXAgPSBUWVBFX1NJWkVfVU5JVCAoVFJFRV9UWVBFIChUUkVFX1RZUEUg KHNlLmV4cHIpKSk7CisJICAgIG1lbXN6ID0gVFlQRV9TSVpFX1VOSVQgKFRS RUVfVFlQRSAoVFJFRV9UWVBFIChzZS5leHByKSkpOwogCi0JICBpZiAoZXhw ci0+dHMudHlwZSA9PSBCVF9DSEFSQUNURVIgJiYgdG1wID09IE5VTExfVFJF RSkKLQkgICAgdG1wID0gc2Uuc3RyaW5nX2xlbmd0aDsKKwkgIGlmIChleHBy LT50cy50eXBlID09IEJUX0NIQVJBQ1RFUiAmJiBtZW1zeiA9PSBOVUxMX1RS RUUpCisJICAgIG1lbXN6ID0gc2Uuc3RyaW5nX2xlbmd0aDsKIAotCSAgdG1w ID0gZ2ZjX2FsbG9jYXRlX3dpdGhfc3RhdHVzICgmc2UucHJlLCB0bXAsIHBz dGF0KTsKKwkgIHRtcCA9IGdmY19hbGxvY2F0ZV93aXRoX3N0YXR1cyAoJnNl LnByZSwgbWVtc3osIHBzdGF0KTsKIAkgIHRtcCA9IGZvbGRfYnVpbGQyIChN T0RJRllfRVhQUiwgdm9pZF90eXBlX25vZGUsIHNlLmV4cHIsCiAJCQkgICAg IGZvbGRfY29udmVydCAoVFJFRV9UWVBFIChzZS5leHByKSwgdG1wKSk7CiAJ ICBnZmNfYWRkX2V4cHJfdG9fYmxvY2sgKCZzZS5wcmUsIHRtcCk7CkBAIC00 MDc1LDIxICs0MDc2LDE3IEBAIGdmY190cmFuc19hbGxvY2F0ZSAoZ2ZjX2Nv ZGUgKiBjb2RlKQogICAgICAgaWYgKGNvZGUtPmV4cHIzKQogCXsKIAkgIGdm Y19leHByICpyaHMgPSBnZmNfY29weV9leHByIChjb2RlLT5leHByMyk7Ci0J ICBpZiAocmhzLT50cy50eXBlID09IEJUX0NMQVNTKQorCSAgaWYgKGFsLT5l eHByLT50cy50eXBlID09IEJUX0NMQVNTKQogCSAgICB7Ci0JICAgICAgZ2Zj X3NlIGRzdCxzcmMsbGVuOwotCSAgICAgIGdmY19leHByICpzejsKLQkgICAg ICBnZmNfYWRkX2NvbXBvbmVudF9yZWYgKHJocywgIiRkYXRhIik7Ci0JICAg ICAgc3ogPSBnZmNfY29weV9leHByIChjb2RlLT5leHByMyk7Ci0JICAgICAg Z2ZjX2FkZF9jb21wb25lbnRfcmVmIChzeiwgIiRzaXplIik7CisJICAgICAg Z2ZjX3NlIGRzdCxzcmM7CisJICAgICAgaWYgKHJocy0+dHMudHlwZSA9PSBC VF9DTEFTUykKKwkJZ2ZjX2FkZF9jb21wb25lbnRfcmVmIChyaHMsICIkZGF0 YSIpOwogCSAgICAgIGdmY19pbml0X3NlICgmZHN0LCBOVUxMKTsKIAkgICAg ICBnZmNfaW5pdF9zZSAoJnNyYywgTlVMTCk7Ci0JICAgICAgZ2ZjX2luaXRf c2UgKCZsZW4sIE5VTEwpOwogCSAgICAgIGdmY19jb252X2V4cHIgKCZkc3Qs IGV4cHIpOwogCSAgICAgIGdmY19jb252X2V4cHIgKCZzcmMsIHJocyk7Ci0J ICAgICAgZ2ZjX2NvbnZfZXhwciAoJmxlbiwgc3opOwotCSAgICAgIGdmY19m cmVlX2V4cHIgKHN6KTsKLQkgICAgICB0bXAgPSBnZmNfYnVpbGRfbWVtY3B5 X2NhbGwgKGRzdC5leHByLCBzcmMuZXhwciwgbGVuLmV4cHIpOworCSAgICAg IGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZibG9jaywgJnNyYy5wcmUpOwor CSAgICAgIHRtcCA9IGdmY19idWlsZF9tZW1jcHlfY2FsbCAoZHN0LmV4cHIs IHNyYy5leHByLCBtZW1zeik7CiAJICAgIH0KIAkgIGVsc2UKIAkgICAgdG1w ID0gZ2ZjX3RyYW5zX2Fzc2lnbm1lbnQgKGdmY19leHByX3RvX2luaXRpYWxp emUgKGV4cHIpLApAQCAtNDEwOCw4ICs0MTA1LDcgQEAgZ2ZjX3RyYW5zX2Fs bG9jYXRlIChnZmNfY29kZSAqIGNvZGUpCiAJICBnZmNfY29udl9leHByICgm ZHN0LCBleHByKTsKIAkgIGdmY19jb252X2V4cHIgKCZzcmMsIGluaXRfZSk7 CiAJICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgmYmxvY2ssICZzcmMucHJl KTsKLQkgIHRtcCA9IFRZUEVfU0laRV9VTklUIChnZmNfdHlwZW5vZGVfZm9y X3NwZWMgKCZjb2RlLT5leHQuYWxsb2MudHMpKTsKLQkgIHRtcCA9IGdmY19i dWlsZF9tZW1jcHlfY2FsbCAoZHN0LmV4cHIsIHNyYy5leHByLCB0bXApOwor CSAgdG1wID0gZ2ZjX2J1aWxkX21lbWNweV9jYWxsIChkc3QuZXhwciwgc3Jj LmV4cHIsIG1lbXN6KTsKIAkgIGdmY19hZGRfZXhwcl90b19ibG9jayAoJmJs b2NrLCB0bXApOwogCX0KICAgICAgIC8qIEFkZCBkZWZhdWx0IGluaXRpYWxp emVyIGZvciB0aG9zZSBkZXJpdmVkIHR5cGVzIHRoYXQgbmVlZCB0aGVtLiAg Ki8KQEAgLTQxMjcsNiArNDEyMyw3IEBAIGdmY190cmFuc19hbGxvY2F0ZSAo Z2ZjX2NvZGUgKiBjb2RlKQogICAgICAgaWYgKGV4cHItPnRzLnR5cGUgPT0g QlRfQ0xBU1MpCiAJewogCSAgZ2ZjX2V4cHIgKmxocywqcmhzOworCSAgZ2Zj X3NlIGxzZTsKIAkgIC8qIEluaXRpYWxpemUgVklOREVYIGZvciBDTEFTUyBv YmplY3RzLiAgKi8KIAkgIGxocyA9IGdmY19leHByX3RvX2luaXRpYWxpemUg KGV4cHIpOwogCSAgZ2ZjX2FkZF9jb21wb25lbnRfcmVmIChsaHMsICIkdmlu ZGV4Iik7CkBAIC00MTU4LDM2ICs0MTU1LDExIEBAIGdmY190cmFuc19hbGxv Y2F0ZSAoZ2ZjX2NvZGUgKiBjb2RlKQogCSAgLyogSW5pdGlhbGl6ZSBTSVpF IGZvciBDTEFTUyBvYmplY3RzLiAgKi8KIAkgIGxocyA9IGdmY19leHByX3Rv X2luaXRpYWxpemUgKGV4cHIpOwogCSAgZ2ZjX2FkZF9jb21wb25lbnRfcmVm IChsaHMsICIkc2l6ZSIpOwotCSAgcmhzID0gTlVMTDsKLQkgIGlmIChjb2Rl LT5leHByMyAmJiBjb2RlLT5leHByMy0+dHMudHlwZSA9PSBCVF9DTEFTUykK LQkgICAgewotCSAgICAgIC8qIFNpemUgbXVzdCBiZSBkZXRlcm1pbmVkIGF0 IHJ1biB0aW1lLiAgKi8KLQkgICAgICByaHMgPSBnZmNfY29weV9leHByIChj b2RlLT5leHByMyk7Ci0JICAgICAgZ2ZjX2FkZF9jb21wb25lbnRfcmVmIChy aHMsICIkc2l6ZSIpOwotCSAgICAgIHRtcCA9IGdmY190cmFuc19hc3NpZ25t ZW50IChsaHMsIHJocywgZmFsc2UpOwotCSAgICAgIGdmY19hZGRfZXhwcl90 b19ibG9jayAoJmJsb2NrLCB0bXApOwotCSAgICB9Ci0JICBlbHNlCi0JICAg IHsKLQkgICAgICAvKiBTaXplIGlzIGZpeGVkIGF0IGNvbXBpbGUgdGltZS4g ICovCi0JICAgICAgZ2ZjX3R5cGVzcGVjICp0czsKLQkgICAgICBnZmNfc2Ug bHNlOwotCSAgICAgIGdmY19pbml0X3NlICgmbHNlLCBOVUxMKTsKLQkgICAg ICBnZmNfY29udl9leHByICgmbHNlLCBsaHMpOwotCSAgICAgIGlmIChjb2Rl LT5leHByMykKLQkJdHMgPSAmY29kZS0+ZXhwcjMtPnRzOwotCSAgICAgIGVs c2UgaWYgKGNvZGUtPmV4dC5hbGxvYy50cy50eXBlID09IEJUX0RFUklWRUQp Ci0JCXRzID0gJmNvZGUtPmV4dC5hbGxvYy50czsKLQkgICAgICBlbHNlIGlm IChleHByLT50cy50eXBlID09IEJUX0NMQVNTKQotCQl0cyA9ICZleHByLT50 cy51LmRlcml2ZWQtPmNvbXBvbmVudHMtPnRzOwotCSAgICAgIGVsc2UKLQkJ dHMgPSAmZXhwci0+dHM7Ci0JICAgICAgdG1wID0gVFlQRV9TSVpFX1VOSVQg KGdmY190eXBlbm9kZV9mb3Jfc3BlYyAodHMpKTsKLQkgICAgICBnZmNfYWRk X21vZGlmeSAoJmJsb2NrLCBsc2UuZXhwciwKLQkJCSAgICAgIGZvbGRfY29u dmVydCAoVFJFRV9UWVBFIChsc2UuZXhwciksIHRtcCkpOwotCSAgICB9CisJ ICBnZmNfaW5pdF9zZSAoJmxzZSwgTlVMTCk7CisJICBnZmNfY29udl9leHBy ICgmbHNlLCBsaHMpOworCSAgZ2ZjX2FkZF9tb2RpZnkgKCZibG9jaywgbHNl LmV4cHIsCisJCQkgIGZvbGRfY29udmVydCAoVFJFRV9UWVBFIChsc2UuZXhw ciksIG1lbXN6KSk7CiAJICBnZmNfZnJlZV9leHByIChsaHMpOwotCSAgZ2Zj X2ZyZWVfZXhwciAocmhzKTsKIAl9CiAKICAgICB9Cg== --0016e6d99f20bdb2020476c0a1e2 Content-Type: application/octet-stream; name="class_allocate_4.f03" Content-Disposition: attachment; filename="class_allocate_4.f03" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g17pj1st1 Content-length: 578 ISB7IGRnLWRvIHJ1biB9CiEKISBQUiA0MTcxNDogW09PUF0gQUxMT0NBVEUg U09VUkNFPSBkb2VzIG5vdCBwcm9wZXJseSBjb3B5IHRoZSB2YWx1ZSBmcm9t IFNPVVJDRQohCiEgQ29udHJpYnV0ZWQgYnkgVG9iaWFzIEJ1cm51cyA8YnVy bnVzQGdjYy5nbnUub3JnPgoKdHlwZSB0CiAgaW50ZWdlciA6OiBpCmVuZCB0 eXBlIHQKdHlwZSwgZXh0ZW5kcyh0KSA6OiB0MgogIGludGVnZXIgOjogagpl bmQgdHlwZSB0MgoKY2xhc3ModCksIGFsbG9jYXRhYmxlIDo6IGEKYWxsb2Nh dGUoYSwgc291cmNlPXQyKDEsMikpCnByaW50ICosYSVpCmlmKGElaSAvPSAx KSBjYWxsIGFib3J0KCkKc2VsZWN0IHR5cGUgKGEpCiAgdHlwZSBpcyAodDIp CiAgICAgcHJpbnQgKixhJWoKICAgICBpZihhJWogLz0gMikgY2FsbCBhYm9y dCgpCmVuZCBzZWxlY3QKZW5kCg== --0016e6d99f20bdb2020476c0a1e2--