From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 120837 invoked by alias); 15 Jul 2018 20:39:10 -0000 Mailing-List: contact fortran-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: fortran-owner@gcc.gnu.org Received: (qmail 120820 invoked by uid 89); 15 Jul 2018 20:39:09 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-14.4 required=5.0 tests=AWL,BAYES_00,FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_ASCII_DIVIDERS,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy=impure, HX-Received:a25, Nick, Dominique X-HELO: mail-yb0-f178.google.com Received: from mail-yb0-f178.google.com (HELO mail-yb0-f178.google.com) (209.85.213.178) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sun, 15 Jul 2018 20:39:07 +0000 Received: by mail-yb0-f178.google.com with SMTP id s1-v6so14704252ybk.3; Sun, 15 Jul 2018 13:39:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to; bh=xk96IBKaHN1keKFDTJ56kUBCIkdqVZ2jqMLNpZA8YBY=; b=bTe5ePZc85jv63YeuAoh9lXWW02bYkn5HpuLNSLF67bojPlg0mU5z+q+6zisKeGVl/ +la29h9/9HTKnmm8G7MP+0lRgM+3Vh0i1sfO/7TuA9XVNHD/MFF6H1AOtVEqz4SNEm0b PDJxeqUzwmJerR7JKKhuStIMkkLHgelw0hJuJb2k7mo2hURiWzDW6Hkef5gEVVnG0yNs kOFnNl5QFCvBTOejh1CWzD2PkDlhK+KI+ZEJZ8FZBZ7uW0Qf3syuLPgXgEufjJBS/WDQ rwiiy68BFaGtPUZO34zkOqnkeh2uV2CNX6mQBZZtcWpDIsb79QiGf/iHb/hGVSb0pEM4 XHzw== MIME-Version: 1.0 Sender: jaydub66@gmail.com Received: by 2002:a0d:ea0c:0:0:0:0:0 with HTTP; Sun, 15 Jul 2018 13:39:04 -0700 (PDT) In-Reply-To: References: From: Janus Weil Date: Sun, 15 Jul 2018 20:39:00 -0000 Message-ID: Subject: Re: [Patch, Fortran] PR 85599: warn about short-circuiting of logical expressions for non-pure functions To: gfortran , gcc-patches Content-Type: multipart/mixed; boundary="0000000000003524d405710fb48e" X-IsSubscribed: yes X-SW-Source: 2018-07/txt/msg00044.txt.bz2 --0000000000003524d405710fb48e Content-Type: text/plain; charset="UTF-8" Content-length: 4081 Hi all, here is another update of the patch. It cures the previously-mentioned problems with generic interfaces, adds some documentation (as suggested by Dominique) and slightly enhances the error message (mentioning the impurity of the function we're warning about). I tested it on a fairly large code base and found no further false positives. Also it still regtests cleanly. Ok for trunk? Cheers, Janus 2018-07-15 Thomas Koenig Janus Weil PR fortran/85599 * dump-parse-tree.c (show_attr): Add handling of implicit_pure. * gfortran.texi: Add chapter on evaluation of logical expressions. * resolve.c (implicit_pure_function): New function. (check_pure_function): Use it here. (impure_function_callback): New function. (resolve_operator): Call it via gfc_expr_walker. 2018-07-15 Janus Weil PR fortran/85599 * gfortran.dg/short_circuiting.f90: New test. 2018-07-13 10:02 GMT+02:00 Janus Weil : > Just noticed another problematic case: Calls to generic interfaces are > not detected as implicitly pure, see enhanced test case in attachment. > Will look into this problem on the weekend ... > > Cheers, > Janus > > 2018-07-12 21:43 GMT+02:00 Janus Weil : >> Hi all, >> >> here is a minor update of the patch, which cures some problems with >> implicitly pure functions in the previous version. >> >> Most implicitly pure functions were actually detected correctly, but >> implicitly pure functions that called other implicitly pure functions >> were not detected properly, and therefore could trigger a warning. >> This is fixed in the current version, which still regtests cleanly >> (note that alloc-comp-3.f90 currently fails due to PR 86417). The test >> case is also enhanced to include the problematic case. >> >> Ok for trunk? >> >> Cheers, >> Janus >> >> >> >> 2018-07-11 23:06 GMT+02:00 Janus Weil : >>> Hi all, >>> >>> after the dust of the heated discussion around this PR has settled a >>> bit, here is another attempt to implement at least some basic warnings >>> about compiler-dependent behavior concerning the short-circuiting of >>> logical expressions. >>> >>> As a reminder (and recap of the previous discussion), the Fortran >>> standard unfortunately is a bit sloppy in this area: It allows >>> compilers to short-circuit the second operand of .AND. / .OR. >>> operators, but does not require this. As a result, compilers can do >>> what they want without conflicting with the standard, and they do: >>> gfortran does short-circuiting (via TRUTH_ANDIF_EXPR/TRUTH_ORIF_EXPR), >>> ifort does not. >>> >>> I'm continuing here the least-invasive approach of keeping gfortran's >>> current behavior, but warning about cases where compilers may produce >>> different results. >>> >>> The attached patch is very close to the version I posted previously >>> (which was already approved by Janne), with the difference that the >>> warnings are now triggered by -Wextra and not -Wsurprising (which is >>> included in -Wall), as suggested by Nick Maclaren. I think this is >>> more reasonable, since not everyone may want to see these warnings. >>> >>> Note that I don't want to warn about all possible optimizations that >>> might be allowed by the standard, but only about those that are >>> actually problematic in practice and result in compiler-dependent >>> behavior. >>> >>> The patch regtests cleanly on x86_64-linux-gnu. Ok for trunk? >>> >>> Cheers, >>> Janus >>> >>> >>> 2018-07-11 Thomas Koenig >>> Janus Weil >>> >>> PR fortran/85599 >>> * dump-parse-tree (show_attr): Add handling of implicit_pure. >>> * resolve.c (impure_function_callback): New function. >>> (resolve_operator): Call it vial gfc_expr_walker. >>> >>> >>> 2018-07-11 Janus Weil >>> >>> PR fortran/85599 >>> * gfortran.dg/short_circuiting.f90: New test. --0000000000003524d405710fb48e Content-Type: text/x-patch; charset="US-ASCII"; name="pr85599_v4.diff" Content-Disposition: attachment; filename="pr85599_v4.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_jjnauf751 Content-length: 6096 SW5kZXg6IGdjYy9mb3J0cmFuL2R1bXAtcGFyc2UtdHJlZS5jCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLS0tIGdjYy9mb3J0cmFuL2R1bXAtcGFyc2UtdHJl ZS5jCShyZXZpc2lvbiAyNjI1NjMpCisrKyBnY2MvZm9ydHJhbi9kdW1wLXBh cnNlLXRyZWUuYwkod29ya2luZyBjb3B5KQpAQCAtNzE2LDYgKzcxNiw4IEBA IHNob3dfYXR0ciAoc3ltYm9sX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hh ciAqIG1vCiAgICAgZnB1dHMgKCIgRUxFTUVOVEFMIiwgZHVtcGZpbGUpOwog ICBpZiAoYXR0ci0+cHVyZSkKICAgICBmcHV0cyAoIiBQVVJFIiwgZHVtcGZp bGUpOworICBpZiAoYXR0ci0+aW1wbGljaXRfcHVyZSkKKyAgICBmcHV0cyAo IiBJTVBMSUNJVF9QVVJFIiwgZHVtcGZpbGUpOwogICBpZiAoYXR0ci0+cmVj dXJzaXZlKQogICAgIGZwdXRzICgiIFJFQ1VSU0lWRSIsIGR1bXBmaWxlKTsK IApJbmRleDogZ2NjL2ZvcnRyYW4vZ2ZvcnRyYW4udGV4aQo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0tLSBnY2MvZm9ydHJhbi9nZm9ydHJhbi50ZXhpCShy ZXZpc2lvbiAyNjI1NjMpCisrKyBnY2MvZm9ydHJhbi9nZm9ydHJhbi50ZXhp CSh3b3JraW5nIGNvcHkpCkBAIC0xMTc3LDYgKzExNzcsNyBAQCBtaWdodCBp biBzb21lIHdheSBvciBhbm90aGVyIGJlY29tZSB2aXNpYmxlIHRvIHRoZQog QG1lbnUKICogS0lORCBUeXBlIFBhcmFtZXRlcnM6OgogKiBJbnRlcm5hbCBy ZXByZXNlbnRhdGlvbiBvZiBMT0dJQ0FMIHZhcmlhYmxlczo6CisqIEV2YWx1 YXRpb24gb2YgbG9naWNhbCBleHByZXNzaW9uczo6CiAqIFRocmVhZC1zYWZl dHkgb2YgdGhlIHJ1bnRpbWUgbGlicmFyeTo6CiAqIERhdGEgY29uc2lzdGVu Y3kgYW5kIGR1cmFiaWxpdHk6OgogKiBGaWxlcyBvcGVuZWQgd2l0aG91dCBh biBleHBsaWNpdCBBQ1RJT049IHNwZWNpZmllcjo6CkBAIC0xMjUxLDYgKzEy NTIsMTkgQEAgdmFsdWVzOiBAY29kZXsxfSBmb3IgQGNvZGV7LlRSVUUufSBh bmQgQGNvZGV7MH0gZm8KIFNlZSBhbHNvIEByZWZ7QXJndW1lbnQgcGFzc2lu ZyBjb252ZW50aW9uc30gYW5kIEByZWZ7SW50ZXJvcGVyYWJpbGl0eSB3aXRo IEN9LgogCiAKK0Bub2RlIEV2YWx1YXRpb24gb2YgbG9naWNhbCBleHByZXNz aW9ucworQHNlY3Rpb24gRXZhbHVhdGlvbiBvZiBsb2dpY2FsIGV4cHJlc3Np b25zCisKK1RoZSBGb3J0cmFuIHN0YW5kYXJkIGRvZXMgbm90IHJlcXVpcmUg dGhlIGNvbXBpbGVyIHRvIGV2YWx1YXRlIGFsbCBwYXJ0cyBvZiBhbgorZXhw cmVzc2lvbiwgaWYgdGhleSBkbyBub3QgY29udHJpYnV0ZSB0byB0aGUgZmlu YWwgcmVzdWx0LiBGb3IgbG9naWNhbAorZXhwcmVzc2lvbnMgd2l0aCBAY29k ZXsuQU5ELn0gb3IgQGNvZGV7Lk9SLn0gb3BlcmF0b3JzLCBpbiBwYXJ0aWN1 bGFyLCBHTlUKK0ZvcnRyYW4gd2lsbCBvcHRpbWl6ZSBvdXQgZnVuY3Rpb24g Y2FsbHMgKGV2ZW4gdG8gaW1wdXJlIGZ1bmN0aW9ucykgaWYgdGhlCityZXN1 bHQgb2YgdGhlIGV4cHJlc3Npb24gY2FuIGJlIGVzdGFibGlzaGVkIHdpdGhv dXQgdGhlbS4gSG93ZXZlciwgc2luY2Ugbm90CithbGwgY29tcGlsZXJzIGRv IHRoYXQsIGFuZCBzdWNoIGFuIG9wdGltaXphdGlvbiBjYW4gcG90ZW50aWFs bHkgbW9kaWZ5IHRoZQorcHJvZ3JhbSBmbG93IGFuZCBzdWJzZXF1ZW50IHJl c3VsdHMsIEdOVSBGb3J0cmFuIHRocm93cyB3YXJuaW5ncyBmb3Igc3VjaAor c2l0dWF0aW9ucyB3aXRoIHRoZSBAb3B0aW9uey1XZXh0cmF9IGZsYWcuCisK KwogQG5vZGUgVGhyZWFkLXNhZmV0eSBvZiB0aGUgcnVudGltZSBsaWJyYXJ5 CiBAc2VjdGlvbiBUaHJlYWQtc2FmZXR5IG9mIHRoZSBydW50aW1lIGxpYnJh cnkKIEBjaW5kZXggdGhyZWFkLXNhZmV0eSwgdGhyZWFkcwpJbmRleDogZ2Nj L2ZvcnRyYW4vcmVzb2x2ZS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t IGdjYy9mb3J0cmFuL3Jlc29sdmUuYwkocmV2aXNpb24gMjYyNTYzKQorKysg Z2NjL2ZvcnRyYW4vcmVzb2x2ZS5jCSh3b3JraW5nIGNvcHkpCkBAIC0yOTgy LDYgKzI5ODIsMjEgQEAgcHVyZV9mdW5jdGlvbiAoZ2ZjX2V4cHIgKmUsIGNv bnN0IGNoYXIgKipuYW1lKQogfQogCiAKKy8qIENoZWNrIGlmIHRoZSBleHBy ZXNzaW9uIGlzIGEgcmVmZXJlbmNlIHRvIGFuIGltcGxpY2l0bHkgcHVyZSBm dW5jdGlvbi4gICovCisKK3N0YXRpYyBpbnQKK2ltcGxpY2l0X3B1cmVfZnVu Y3Rpb24gKGdmY19leHByICplKQoreworICBnZmNfY29tcG9uZW50ICpjb21w ID0gZ2ZjX2dldF9wcm9jX3B0cl9jb21wIChlKTsKKyAgaWYgKGNvbXApCisg ICAgcmV0dXJuIGdmY19pbXBsaWNpdF9wdXJlIChjb21wLT50cy5pbnRlcmZh Y2UpOworICBlbHNlIGlmIChlLT52YWx1ZS5mdW5jdGlvbi5lc3ltKQorICAg IHJldHVybiBnZmNfaW1wbGljaXRfcHVyZSAoZS0+dmFsdWUuZnVuY3Rpb24u ZXN5bSk7CisgIGVsc2UKKyAgICByZXR1cm4gMDsKK30KKworCiBzdGF0aWMg Ym9vbAogaW1wdXJlX3N0bXRfZmNuIChnZmNfZXhwciAqZSwgZ2ZjX3N5bWJv bCAqc3ltLAogCQkgaW50ICpmIEFUVFJJQlVURV9VTlVTRUQpCkBAIC0zMDM0 LDcgKzMwNDksOCBAQCBzdGF0aWMgYm9vbCBjaGVja19wdXJlX2Z1bmN0aW9u IChnZmNfZXhwciAqZSkKIAkJICAgICAid2l0aGluIGEgUFVSRSBwcm9jZWR1 cmUiLCBuYW1lLCAmZS0+d2hlcmUpOwogCSAgcmV0dXJuIGZhbHNlOwogCX0K LSAgICAgIGdmY191bnNldF9pbXBsaWNpdF9wdXJlIChOVUxMKTsKKyAgICAg IGlmICghaW1wbGljaXRfcHVyZV9mdW5jdGlvbiAoZSkpCisJZ2ZjX3Vuc2V0 X2ltcGxpY2l0X3B1cmUgKE5VTEwpOwogICAgIH0KICAgcmV0dXJuIHRydWU7 CiB9CkBAIC0zODIyLDYgKzM4MzgsNDAgQEAgbG9va3VwX3VvcF9mdXp6eSAo Y29uc3QgY2hhciAqb3AsIGdmY19zeW10cmVlICp1b3AKIH0KIAogCisvKiBD YWxsYmFjayBmaW5kaW5nIGFuIGltcHVyZSBmdW5jdGlvbiBhcyBhbiBvcGVy YW5kIHRvIGFuIC5hbmQuIG9yCisgICAub3IuICBleHByZXNzaW9uLiAgUmVt ZW1iZXIgdGhlIGxhc3QgZnVuY3Rpb24gd2FybmVkIGFib3V0IHRvCisgICBh dm9pZCBkb3VibGUgd2FybmluZ3Mgd2hlbiByZWN1cnNpbmcuICAqLworCitz dGF0aWMgaW50CitpbXB1cmVfZnVuY3Rpb25fY2FsbGJhY2sgKGdmY19leHBy ICoqZSwgaW50ICp3YWxrX3N1YnRyZWVzIEFUVFJJQlVURV9VTlVTRUQsCisJ CQkgIHZvaWQgKmRhdGEpCit7CisgIGdmY19leHByICpmID0gKmU7CisgIGNv bnN0IGNoYXIgKm5hbWU7CisgIHN0YXRpYyBnZmNfZXhwciAqbGFzdCA9IE5V TEw7CisgIGJvb2wgKmZvdW5kID0gKGJvb2wgKikgZGF0YTsKKworICBpZiAo Zi0+ZXhwcl90eXBlID09IEVYUFJfRlVOQ1RJT04pCisgICAgeworICAgICAg KmZvdW5kID0gMTsKKyAgICAgIGlmIChmICE9IGxhc3QgJiYgIXB1cmVfZnVu Y3Rpb24gKGYsICZuYW1lKSAmJiAhaW1wbGljaXRfcHVyZV9mdW5jdGlvbiAo ZikpCisJeworCSAgaWYgKG5hbWUpCisJICAgIGdmY193YXJuaW5nIChPUFRf V2V4dHJhLAorCQkJICJJbXB1cmUgZnVuY3Rpb24gJXFzIGF0ICVMIG1pZ2h0 IG5vdCBiZSBldmFsdWF0ZWQiLAorCQkJIG5hbWUsICZmLT53aGVyZSk7CisJ ICBlbHNlCisJICAgIGdmY193YXJuaW5nIChPUFRfV2V4dHJhLAorCQkJICJJ bXB1cmUgZnVuY3Rpb24gYXQgJUwgbWlnaHQgbm90IGJlIGV2YWx1YXRlZCIs CisJCQkgJmYtPndoZXJlKTsKKwl9CisgICAgICBsYXN0ID0gZjsKKyAgICB9 CisKKyAgcmV0dXJuIDA7Cit9CisKKwogLyogUmVzb2x2ZSBhbiBvcGVyYXRv ciBleHByZXNzaW9uIG5vZGUuICBUaGlzIGNhbiBpbnZvbHZlIHJlcGxhY2lu ZyB0aGUKICAgIG9wZXJhdGlvbiB3aXRoIGEgdXNlciBkZWZpbmVkIGZ1bmN0 aW9uIGNhbGwuICAqLwogCkBAIC0zOTMwLDYgKzM5ODAsMTQgQEAgcmVzb2x2 ZV9vcGVyYXRvciAoZ2ZjX2V4cHIgKmUpCiAJICAgIGdmY19jb252ZXJ0X3R5 cGUgKG9wMSwgJmUtPnRzLCAyKTsKIAkgIGVsc2UgaWYgKG9wMi0+dHMua2lu ZCA8IGUtPnRzLmtpbmQpCiAJICAgIGdmY19jb252ZXJ0X3R5cGUgKG9wMiwg JmUtPnRzLCAyKTsKKworCSAgaWYgKGUtPnZhbHVlLm9wLm9wID09IElOVFJJ TlNJQ19BTkQgfHwgZS0+dmFsdWUub3Aub3AgPT0gSU5UUklOU0lDX09SKQor CSAgICB7CisJICAgICAgLyogV2FybiBhYm91dCBzaG9ydC1jaXJjdWl0aW5n CisJICAgICAgICAgd2l0aCBpbXB1cmUgZnVuY3Rpb24gYXMgc2Vjb25kIG9w ZXJhbmQuICAqLworCSAgICAgIGJvb2wgb3AyX2YgPSBmYWxzZTsKKwkgICAg ICBnZmNfZXhwcl93YWxrZXIgKCZvcDIsIGltcHVyZV9mdW5jdGlvbl9jYWxs YmFjaywgJm9wMl9mKTsKKwkgICAgfQogCSAgYnJlYWs7CiAJfQogCg== --0000000000003524d405710fb48e Content-Type: text/x-fortran; charset="US-ASCII"; name="short_circuiting.f90" Content-Disposition: attachment; filename="short_circuiting.f90" Content-Transfer-Encoding: base64 X-Attachment-Id: f_jjnauq0h2 Content-length: 1546 ISB7IGRnLWRvIGNvbXBpbGUgfQohIHsgZGctYWRkaXRpb25hbC1vcHRpb25z ICItV2V4dHJhIiB9CiEKISBQUiA4NTU5OTogd2FybiBhYm91dCBzaG9ydC1j aXJjdWl0aW5nIG9mIGxvZ2ljYWwgZXhwcmVzc2lvbnMgZm9yIG5vbi1wdXJl IGZ1bmN0aW9ucwohCiEgQ29udHJpYnV0ZWQgYnkgSmFudXMgV2VpbCA8amFu dXNAZ2NjLmdudS5vcmc+Cgptb2R1bGUgYQoKICAgaW50ZXJmYWNlIGltcGxf cHVyZV9hCiAgICAgIG1vZHVsZSBwcm9jZWR1cmUgaW1wbF9wdXJlX2ExCiAg IGVuZCBpbnRlcmZhY2UKCmNvbnRhaW5zCgogICAgbG9naWNhbCBmdW5jdGlv biBpbXBsX3B1cmVfYTEoKQogICAgICBpbXBsX3B1cmVfYTEgPSAudHJ1ZS4K ICAgZW5kIGZ1bmN0aW9uCgplbmQgbW9kdWxlCgoKcHJvZ3JhbSBzaG9ydF9j aXJjdWl0CgogICB1c2UgYQoKICAgbG9naWNhbCA6OiBmbGFnCiAgIGZsYWcg PSAuZmFsc2UuCiAgIGZsYWcgPSBjaGVjaygpIC5hbmQuIGZsYWcKICAgZmxh ZyA9IGZsYWcgLmFuZC4gY2hlY2soKSAgICAgICAgISB7IGRnLXdhcm5pbmcg Im1pZ2h0IG5vdCBiZSBldmFsdWF0ZWQiIH0KICAgZmxhZyA9IGZsYWcgLmFu ZC4gcHVyZV9jaGVjaygpCiAgIGZsYWcgPSBmbGFnIC5hbmQuIGltcGxfcHVy ZV8xKCkKICAgZmxhZyA9IGZsYWcgLmFuZC4gaW1wbF9wdXJlXzIoKQogICBm bGFnID0gZmxhZyAuYW5kLiBpbXBsX3B1cmVfYTEoKQogICBmbGFnID0gZmxh ZyAuYW5kLiBpbXBsX3B1cmVfYSgpCgpjb250YWlucwoKICAgbG9naWNhbCBm dW5jdGlvbiBjaGVjaygpCiAgICAgIGludGVnZXIsIHNhdmUgOjogaSA9IDEK ICAgICAgcHJpbnQgKiwgImNoZWNrIiwgaQogICAgICBpID0gaSArIDEKICAg ICAgY2hlY2sgPSAudHJ1ZS4KICAgZW5kIGZ1bmN0aW9uCgogICBsb2dpY2Fs IHB1cmUgZnVuY3Rpb24gcHVyZV9jaGVjaygpCiAgICAgIHB1cmVfY2hlY2sg PSAudHJ1ZS4KICAgZW5kIGZ1bmN0aW9uCgogICBsb2dpY2FsIGZ1bmN0aW9u IGltcGxfcHVyZV8xKCkKICAgICAgaW1wbF9wdXJlXzEgPSAudHJ1ZS4KICAg ZW5kIGZ1bmN0aW9uCgogICBsb2dpY2FsIGZ1bmN0aW9uIGltcGxfcHVyZV8y KCkKICAgICAgaW1wbF9wdXJlXzIgPSBpbXBsX3B1cmVfMSgpCiAgIGVuZCBm dW5jdGlvbgoKCmVuZAo= --0000000000003524d405710fb48e--