From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 117789 invoked by alias); 11 Jul 2018 21:06:15 -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 117738 invoked by uid 89); 11 Jul 2018 21:06:11 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-9.9 required=5.0 tests=AWL,BAYES_00,FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,GIT_PATCH_2,GIT_PATCH_3,KAM_ASCII_DIVIDERS,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy=dust, concerning, Hx-languages-length:4698, warned X-HELO: mail-yb0-f172.google.com Received: from mail-yb0-f172.google.com (HELO mail-yb0-f172.google.com) (209.85.213.172) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 11 Jul 2018 21:06:09 +0000 Received: by mail-yb0-f172.google.com with SMTP id k127-v6so10589456ybk.6; Wed, 11 Jul 2018 14:06:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:sender:from:date:message-id:subject:to; bh=LT/HEKC0Vny6MddlfYBk82OAR4+byb1/Q2tEj96wLTM=; b=lqJvWQZJQCmPXPQH7/8N0mW1i3q0ZJl6aN97yiN+Go7+lp7daTO/kkVb9Tr4cIo4zo N7/zfGDxpS7VQQ9srKrzaLHZt0IKosJ5GU9LyFyrBBE3BgTM1w88IicDR9gz78XFXpRT XNtfKc19ifCL20BZf2GNsagPw6lup2D0lDBJG87h9NbKA3Uit0opA03EmyuTSvLNxSzB /sKS4GAqL18rXd3yo0t5+eqa/Qkb8VSVDu8dPuCYGmZ7txRzEY8vk/XOevM5STZo93Rp DaBrX8j2JypbnX/857TMHHCcdzOA49KyI5CFZ6H87rq4M+kSzsbARSJPjeUmRQGJpFIP yNEg== MIME-Version: 1.0 Sender: jaydub66@gmail.com Received: by 2002:a81:9a13:0:0:0:0:0 with HTTP; Wed, 11 Jul 2018 14:06:07 -0700 (PDT) From: Janus Weil Date: Wed, 11 Jul 2018 21:06:00 -0000 Message-ID: Subject: [Patch, Fortran] PR 85599: warn about short-circuiting of logical expressions for non-pure functions To: gfortran , gcc-patches Content-Type: multipart/mixed; boundary="0000000000008e4f220570bf9d69" X-IsSubscribed: yes X-SW-Source: 2018-07/txt/msg00017.txt.bz2 --0000000000008e4f220570bf9d69 Content-Type: text/plain; charset="UTF-8" Content-length: 1875 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. --0000000000008e4f220570bf9d69 Content-Type: text/x-patch; charset="US-ASCII"; name="pr85599_v2.diff" Content-Disposition: attachment; filename="pr85599_v2.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_jjhlkw200 Content-length: 3274 SW5kZXg6IGdjYy9mb3J0cmFuL2R1bXAtcGFyc2UtdHJlZS5jCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLS0tIGdjYy9mb3J0cmFuL2R1bXAtcGFyc2UtdHJl ZS5jCShyZXZpc2lvbiAyNjI1NjMpCisrKyBnY2MvZm9ydHJhbi9kdW1wLXBh cnNlLXRyZWUuYwkod29ya2luZyBjb3B5KQpAQCAtNzE2LDYgKzcxNiw4IEBA IHNob3dfYXR0ciAoc3ltYm9sX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hh ciAqIG1vCiAgICAgZnB1dHMgKCIgRUxFTUVOVEFMIiwgZHVtcGZpbGUpOwog ICBpZiAoYXR0ci0+cHVyZSkKICAgICBmcHV0cyAoIiBQVVJFIiwgZHVtcGZp bGUpOworICBpZiAoYXR0ci0+aW1wbGljaXRfcHVyZSkKKyAgICBmcHV0cyAo IiBJTVBMSUNJVF9QVVJFIiwgZHVtcGZpbGUpOwogICBpZiAoYXR0ci0+cmVj dXJzaXZlKQogICAgIGZwdXRzICgiIFJFQ1VSU0lWRSIsIGR1bXBmaWxlKTsK IApJbmRleDogZ2NjL2ZvcnRyYW4vcmVzb2x2ZS5jCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tIGdjYy9mb3J0cmFuL3Jlc29sdmUuYwkocmV2aXNpb24g MjYyNTYzKQorKysgZ2NjL2ZvcnRyYW4vcmVzb2x2ZS5jCSh3b3JraW5nIGNv cHkpCkBAIC0zODIyLDYgKzM4MjIsNDYgQEAgbG9va3VwX3VvcF9mdXp6eSAo Y29uc3QgY2hhciAqb3AsIGdmY19zeW10cmVlICp1b3AKIH0KIAogCisvKiBD YWxsYmFjayBmaW5kaW5nIGFuIGltcHVyZSBmdW5jdGlvbiBhcyBhbiBvcGVy YW5kIHRvIGFuIC5hbmQuIG9yCisgICAub3IuICBleHByZXNzaW9uLiAgUmVt ZW1iZXIgdGhlIGxhc3QgZnVuY3Rpb24gd2FybmVkIGFib3V0IHRvCisgICBh dm9pZCBkb3VibGUgd2FybmluZ3Mgd2hlbiByZWN1cnNpbmcuICAqLworCitz dGF0aWMgaW50CitpbXB1cmVfZnVuY3Rpb25fY2FsbGJhY2sgKGdmY19leHBy ICoqZSwgaW50ICp3YWxrX3N1YnRyZWVzIEFUVFJJQlVURV9VTlVTRUQsCisJ CQkgIHZvaWQgKmRhdGEpCit7CisgIGdmY19leHByICpmID0gKmU7CisgIGNv bnN0IGNoYXIgKm5hbWU7CisgIHN0YXRpYyBnZmNfZXhwciAqbGFzdCA9IE5V TEw7CisgIGJvb2wgKmZvdW5kID0gKGJvb2wgKikgZGF0YTsKKworICBpZiAo Zi0+ZXhwcl90eXBlID09IEVYUFJfRlVOQ1RJT04pCisgICAgeworICAgICAg KmZvdW5kID0gMTsKKyAgICAgIGlmIChmICE9IGxhc3QgJiYgIXB1cmVfZnVu Y3Rpb24gKGYsICZuYW1lKSkKKwl7CisJICAvKiBUaGlzIGNvdWxkIHN0aWxs IGJlIGEgZnVuY3Rpb24gd2l0aG91dCBzaWRlIGVmZmVjdHMsIGkuZS4KKwkg ICAgIGltcGxpY2l0IHB1cmUuICBEbyBub3Qgd2FybiBmb3IgdGhhdCBjYXNl LiAgKi8KKwkgIGlmIChmLT5zeW10cmVlID09IE5VTEwgfHwgZi0+c3ltdHJl ZS0+bi5zeW0gPT0gTlVMTAorCSAgICAgIHx8ICFnZmNfaW1wbGljaXRfcHVy ZSAoZi0+c3ltdHJlZS0+bi5zeW0pKQorCSAgICB7CisJICAgICAgaWYgKG5h bWUpCisJCWdmY193YXJuaW5nIChPUFRfV2V4dHJhLAorCQkJICAgICAiRnVu Y3Rpb24gJXFzIGF0ICVMIG1pZ2h0IG5vdCBiZSBldmFsdWF0ZWQiLAorCQkJ ICAgICBuYW1lLCAmZi0+d2hlcmUpOworCSAgICAgIGVsc2UKKwkJZ2ZjX3dh cm5pbmcgKE9QVF9XZXh0cmEsCisJCQkgICAgICJGdW5jdGlvbiBhdCAlTCBt aWdodCBub3QgYmUgZXZhbHVhdGVkIiwKKwkJCSAgICAgJmYtPndoZXJlKTsK KwkgICAgfQorCX0KKyAgICAgIGxhc3QgPSBmOworICAgIH0KKworICByZXR1 cm4gMDsKK30KKworCiAvKiBSZXNvbHZlIGFuIG9wZXJhdG9yIGV4cHJlc3Np b24gbm9kZS4gIFRoaXMgY2FuIGludm9sdmUgcmVwbGFjaW5nIHRoZQogICAg b3BlcmF0aW9uIHdpdGggYSB1c2VyIGRlZmluZWQgZnVuY3Rpb24gY2FsbC4g ICovCiAKQEAgLTM5MzAsNiArMzk3MCwxNCBAQCByZXNvbHZlX29wZXJhdG9y IChnZmNfZXhwciAqZSkKIAkgICAgZ2ZjX2NvbnZlcnRfdHlwZSAob3AxLCAm ZS0+dHMsIDIpOwogCSAgZWxzZSBpZiAob3AyLT50cy5raW5kIDwgZS0+dHMu a2luZCkKIAkgICAgZ2ZjX2NvbnZlcnRfdHlwZSAob3AyLCAmZS0+dHMsIDIp OworCisJICBpZiAoZS0+dmFsdWUub3Aub3AgPT0gSU5UUklOU0lDX0FORCB8 fCBlLT52YWx1ZS5vcC5vcCA9PSBJTlRSSU5TSUNfT1IpCisJICAgIHsKKwkg ICAgICAvKiBXYXJuIGFib3V0IHNob3J0LWNpcmN1aXRpbmcKKwkgICAgICAg ICB3aXRoIGltcHVyZSBmdW5jdGlvbiBhcyBzZWNvbmQgb3BlcmFuZC4gICov CisJICAgICAgYm9vbCBvcDJfZiA9IGZhbHNlOworCSAgICAgIGdmY19leHBy X3dhbGtlciAoJm9wMiwgaW1wdXJlX2Z1bmN0aW9uX2NhbGxiYWNrLCAmb3Ay X2YpOworCSAgICB9CiAJICBicmVhazsKIAl9CiAK --0000000000008e4f220570bf9d69 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_jjhllopd1 Content-length: 854 ISB7IGRnLWRvIGNvbXBpbGUgfQohIHsgZGctYWRkaXRpb25hbC1vcHRpb25z ICItV2V4dHJhIiB9CiEKISBQUiA4NTU5OTogd2FybiBhYm91dCBzaG9ydC1j aXJjdWl0aW5nIG9mIGxvZ2ljYWwgZXhwcmVzc2lvbnMgZm9yIG5vbi1wdXJl IGZ1bmN0aW9ucwohCiEgQ29udHJpYnV0ZWQgYnkgSmFudXMgV2VpbCA8amFu dXNAZ2NjLmdudS5vcmc+Cgpwcm9ncmFtIHNob3J0X2NpcmN1aXQKCiAgIGxv Z2ljYWwgOjogZmxhZwogICBmbGFnID0gLmZhbHNlLgogICBmbGFnID0gY2hl Y2soKSAuYW5kLiBmbGFnCiAgIGZsYWcgPSBmbGFnIC5hbmQuIGNoZWNrKCkg ICAgICAhIHsgZGctd2FybmluZyAibWlnaHQgbm90IGJlIGV2YWx1YXRlZCIg fQogICBmbGFnID0gZmxhZyAuYW5kLiBwdXJlX2NoZWNrKCkKCmNvbnRhaW5z CgogICBsb2dpY2FsIGZ1bmN0aW9uIGNoZWNrKCkKICAgICAgaW50ZWdlciwg c2F2ZSA6OiBpID0gMQogICAgICBwcmludCAqLCAiY2hlY2siLCBpCiAgICAg IGkgPSBpICsgMQogICAgICBjaGVjayA9IC50cnVlLgogICBlbmQgZnVuY3Rp b24KCiAgIGxvZ2ljYWwgcHVyZSBmdW5jdGlvbiBwdXJlX2NoZWNrKCkKICAg ICAgcHVyZV9jaGVjayA9IC50cnVlLgogICBlbmQgZnVuY3Rpb24KCmVuZAo= --0000000000008e4f220570bf9d69--