From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa1.mentor.iphmx.com (esa1.mentor.iphmx.com [68.232.129.153]) by sourceware.org (Postfix) with ESMTPS id ED280385115E; Wed, 24 Aug 2022 17:47:56 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org ED280385115E Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com X-IronPort-AV: E=Sophos;i="5.93,261,1654588800"; d="diff'?scan'208,217";a="84634396" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa1.mentor.iphmx.com with ESMTP; 24 Aug 2022 09:47:55 -0800 IronPort-SDR: LDLpa9Ba8vWPI1Wp0NQ9DlfcN02fA94ktByzAFyeo76JxUBDV0ziJDI6UnOe4X9yD6Mm42PQiM Vng741iMRi8tIPgKUxkM3/CRKJGAIkNnH1lHgKJhPPEHnOwzyPKQQXtCSM1daFHSw13ss4QxTn GMOB9Lf13dTCud5Oa0kKlWb5w5fZdCZ0aR/g6UaouL76306IXMclEc4bA3MEwrBOqV4yOZHmMO dZhMM5+i5Ckf5o2lZF349Iz3gcvEvVTDFriJMlvGvf61RrK1BZopEOlMSukN0OCUyK+r3rbpjx A+s= Content-Type: multipart/mixed; boundary="------------rfWl8Ampszw5R7CtQqd6MToq" Message-ID: Date: Wed, 24 Aug 2022 19:47:50 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.1.2 Content-Language: en-US To: gcc-patches , fortran , Jakub Jelinek From: Tobias Burnus Subject: [Patch] Fortran/OpenMP: Fix strictly structured blocks parsing X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-09.mgc.mentorg.com (139.181.222.9) To svr-ies-mbx-12.mgc.mentorg.com (139.181.222.12) X-Spam-Status: No, score=-11.4 required=5.0 tests=BAYES_00, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, HTML_MESSAGE, KAM_DMARC_STATUS, SPF_HELO_PASS, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: fortran@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Fortran mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 24 Aug 2022 17:47:59 -0000 --------------rfWl8Ampszw5R7CtQqd6MToq Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: quoted-printable This patch is about error diagnostic + an ICE for invalid code. Before the patch, gfortran/f951 showed: ... Error: 'ancestor' device modifier not preceded by 'requires' directive with= 'reverse_offload' clause 18 | end block | 1 Error: Expecting END PROGRAM statement at (1) gfortran: internal compiler error: Segmentation fault signal terminated pro= gram f951 * The first error is for a user error and fine. * A follow-up error is expected (due to the now dangling '!$omp end target'= ), but the error location and wording is misleading * And the ICE is plainly wrong. With the patch, there is no ICE and the the second error reads: 16 | !$omp end target Error: Unexpected !$OMP END TARGET statement at (1) The problem was due to nesting '!$omp target' (=3D same directive), where the outer one was a strictly structured block - and parsing the inner '!$omp target' failed with MATCH_ERROR, which ignored that line - while '!$omp end target' remained. (So far, so good, but then the parsing-code did run into a bug.) For the blocks, the following applies. OpenMP permits either * strictly structured blocks (with optional END_ST =3D=3D 'end target') !$omp target block ... end block !$omp end target ! << this line is optional * loosely structured block !$omp target ... ! may not start with 'block' (and hence cannot end with 'end block= ') !$omp end target ! << required The parsing issue is in the following code, which first takes care of the 'strictly': 'end block' + optional 'end targ= et' and then of the 'loosely structured' case with just: 'end target': else if (block_construct && st =3D=3D ST_END_BLOCK) ... st =3D next_statement (); if (st =3D=3D omp_end_st) accept_statement (st); ... else if (st !=3D omp_end_st) { unexpected_statement (st); st =3D next_statement (); } The fix is to change the second if condition to: else if (st !=3D omp_end_st || (block_construct && st =3D=3D omp_end_= st)) or rather to the following equivalent code: else if (st !=3D omp_end_st || block_construct) OK for mainline and GCC 12?* Tobias *strictly structured blocks were added in r12-4592. ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstra=C3=9Fe 201= , 80634 M=C3=BCnchen; Gesellschaft mit beschr=C3=A4nkter Haftung; Gesch=C3= =A4ftsf=C3=BChrer: Thomas Heurung, Frank Th=C3=BCrauf; Sitz der Gesellschaf= t: M=C3=BCnchen; Registergericht M=C3=BCnchen, HRB 106955 --------------rfWl8Ampszw5R7CtQqd6MToq Content-Type: text/x-patch; charset="UTF-8"; name="fix-strictly-struct-block.diff" Content-Disposition: attachment; filename="fix-strictly-struct-block.diff" Content-Transfer-Encoding: base64 Rm9ydHJhbi9PcGVuTVA6IEZpeCBzdHJpY3RseSBzdHJ1Y3R1cmVkIGJsb2NrcyBwYXJzaW5n CgpnY2MvZm9ydHJhbi9DaGFuZ2VMb2c6CgoJKiBwYXJzZS5jYyAocGFyc2Vfb21wX3N0cnVj dHVyZWRfYmxvY2spOiBXaGVuIHBhcnNpbiBzdHJpY3RseQoJc3RydWN0dXJlZCBibG9ja3Ms IGlzc3VlIGFuIGVycm9yIGlmIHRoZSBlbmQtZGlyZWN0aXZlIGNvbWVzCgliZWZvcmUgdGhl ICdlbmQgYmxvY2snLgoKZ2NjL3Rlc3RzdWl0ZS9DaGFuZ2VMb2c6CgoJKiBnZm9ydHJhbi5k Zy9nb21wL3N0cmljdGx5LXN0cnVjdHVyZWQtYmxvY2stNC5mOTA6IE5ldyB0ZXN0LgoKIGdj Yy9mb3J0cmFuL3BhcnNlLmNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAy ICstCiAuLi4vZ29tcC9zdHJpY3RseS1zdHJ1Y3R1cmVkLWJsb2NrLTQuZjkwICAgICAgICAg ICAgfCAyMSArKysrKysrKysrKysrKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgMjIgaW5z ZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL2djYy9mb3J0cmFuL3Bh cnNlLmNjIGIvZ2NjL2ZvcnRyYW4vcGFyc2UuY2MKaW5kZXggMGI0YzU5Njk5NmMuLjgwNDky Yzk1MmFhIDEwMDY0NAotLS0gYS9nY2MvZm9ydHJhbi9wYXJzZS5jYworKysgYi9nY2MvZm9y dHJhbi9wYXJzZS5jYwpAQCAtNTcwOSw3ICs1NzA5LDcgQEAgcGFyc2Vfb21wX3N0cnVjdHVy ZWRfYmxvY2sgKGdmY19zdGF0ZW1lbnQgb21wX3N0LCBib29sIHdvcmtzaGFyZV9zdG10c19v bmx5KQogCSAgICB9CiAJICByZXR1cm4gc3Q7CiAJfQotICAgICAgZWxzZSBpZiAoc3QgIT0g b21wX2VuZF9zdCkKKyAgICAgIGVsc2UgaWYgKHN0ICE9IG9tcF9lbmRfc3QgfHwgYmxvY2tf Y29uc3RydWN0KQogCXsKIAkgIHVuZXhwZWN0ZWRfc3RhdGVtZW50IChzdCk7CiAJICBzdCA9 IG5leHRfc3RhdGVtZW50ICgpOwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJh bi5kZy9nb21wL3N0cmljdGx5LXN0cnVjdHVyZWQtYmxvY2stNC5mOTAgYi9nY2MvdGVzdHN1 aXRlL2dmb3J0cmFuLmRnL2dvbXAvc3RyaWN0bHktc3RydWN0dXJlZC1ibG9jay00LmY5MApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjZjZjBhMzkyNWUKLS0t IC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2dvbXAvc3RyaWN0 bHktc3RydWN0dXJlZC1ibG9jay00LmY5MApAQCAtMCwwICsxLDIxIEBACishIHsgZGctZG8g Y29tcGlsZSB9CitpbXBsaWNpdCBub25lCitpbnRlZ2VyIDo6eCx6Cit4ID0gNDIKK3ByaW50 ICcoKih6MTY6IiAiKSknLCBsb2MoeCkKKyEkb21wIHRhcmdldCBtYXAoeCwgeikKK2Jsb2Nr CisgIGludGVnZXIgOjogeQorICB4ID0gMTIzCisgIHkgPSA5OQorICAhJG9tcCB0YXJnZXQg ZGV2aWNlKGFuY2VzdG9yOjEpIG1hcChhbHdheXMsdG9mcm9tOngpIG1hcCh5KSAhIHsgZGct ZXJyb3IgIidhbmNlc3RvcicgZGV2aWNlIG1vZGlmaWVyIG5vdCBwcmVjZWRlZCBieSAncmVx dWlyZXMnIGRpcmVjdGl2ZSB3aXRoICdyZXZlcnNlX29mZmxvYWQnIGNsYXVzZSIgfQorICAg IHByaW50ICcoKih6MTY6IiAiKSknLCBsb2MoeCksIGxvYyh5KQorICAgIHByaW50ICogLHgs IHkKKyAgICB4ID0gLXgKKyAgICB5ID0gLXkKKyAgISRvbXAgZW5kIHRhcmdldCAhIHsgZGct ZXJyb3IgIlVuZXhwZWN0ZWQgLi5PTVAgRU5EIFRBUkdFVCBzdGF0ZW1lbnQiIH0KKyAgeiA9 IHkKK2VuZCBibG9jaworICAgIHByaW50ICogLHggISwgegorZW5kCisK --------------rfWl8Ampszw5R7CtQqd6MToq-- From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa1.mentor.iphmx.com (esa1.mentor.iphmx.com [68.232.129.153]) by sourceware.org (Postfix) with ESMTPS id ED280385115E; Wed, 24 Aug 2022 17:47:56 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org ED280385115E Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com X-IronPort-AV: E=Sophos;i="5.93,261,1654588800"; d="diff'?scan'208,217";a="84634396" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa1.mentor.iphmx.com with ESMTP; 24 Aug 2022 09:47:55 -0800 IronPort-SDR: LDLpa9Ba8vWPI1Wp0NQ9DlfcN02fA94ktByzAFyeo76JxUBDV0ziJDI6UnOe4X9yD6Mm42PQiM Vng741iMRi8tIPgKUxkM3/CRKJGAIkNnH1lHgKJhPPEHnOwzyPKQQXtCSM1daFHSw13ss4QxTn GMOB9Lf13dTCud5Oa0kKlWb5w5fZdCZ0aR/g6UaouL76306IXMclEc4bA3MEwrBOqV4yOZHmMO dZhMM5+i5Ckf5o2lZF349Iz3gcvEvVTDFriJMlvGvf61RrK1BZopEOlMSukN0OCUyK+r3rbpjx A+s= Content-Type: multipart/mixed; boundary="------------rfWl8Ampszw5R7CtQqd6MToq" Message-ID: Date: Wed, 24 Aug 2022 19:47:50 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.1.2 Content-Language: en-US To: gcc-patches , fortran , Jakub Jelinek From: Tobias Burnus Subject: [Patch] Fortran/OpenMP: Fix strictly structured blocks parsing X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-09.mgc.mentorg.com (139.181.222.9) To svr-ies-mbx-12.mgc.mentorg.com (139.181.222.12) X-Spam-Status: No, score=-11.4 required=5.0 tests=BAYES_00,GIT_PATCH_0,HEADER_FROM_DIFFERENT_DOMAINS,HTML_MESSAGE,KAM_DMARC_STATUS,SPF_HELO_PASS,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE 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: Message-ID: <20220824174750.ga6P-cgqvMYml90ov7pVcptN3-BywNES4pPyVPrJ4w4@z> --------------rfWl8Ampszw5R7CtQqd6MToq Content-Type: multipart/alternative; boundary="------------hBP5P9boY0BETaqUPB0qvr0I" --------------hBP5P9boY0BETaqUPB0qvr0I Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: quoted-printable This patch is about error diagnostic + an ICE for invalid code. Before the patch, gfortran/f951 showed: ... Error: 'ancestor' device modifier not preceded by 'requires' directive with= 'reverse_offload' clause 18 | end block | 1 Error: Expecting END PROGRAM statement at (1) gfortran: internal compiler error: Segmentation fault signal terminated pro= gram f951 * The first error is for a user error and fine. * A follow-up error is expected (due to the now dangling '!$omp end target'= ), but the error location and wording is misleading * And the ICE is plainly wrong. With the patch, there is no ICE and the the second error reads: 16 | !$omp end target Error: Unexpected !$OMP END TARGET statement at (1) The problem was due to nesting '!$omp target' (=3D same directive), where the outer one was a strictly structured block - and parsing the inner '!$omp target' failed with MATCH_ERROR, which ignored that line - while '!$omp end target' remained. (So far, so good, but then the parsing-code did run into a bug.) For the blocks, the following applies. OpenMP permits either * strictly structured blocks (with optional END_ST =3D=3D 'end target') !$omp target block ... end block !$omp end target ! << this line is optional * loosely structured block !$omp target ... ! may not start with 'block' (and hence cannot end with 'end block= ') !$omp end target ! << required The parsing issue is in the following code, which first takes care of the 'strictly': 'end block' + optional 'end targ= et' and then of the 'loosely structured' case with just: 'end target': else if (block_construct && st =3D=3D ST_END_BLOCK) ... st =3D next_statement (); if (st =3D=3D omp_end_st) accept_statement (st); ... else if (st !=3D omp_end_st) { unexpected_statement (st); st =3D next_statement (); } The fix is to change the second if condition to: else if (st !=3D omp_end_st || (block_construct && st =3D=3D omp_end_= st)) or rather to the following equivalent code: else if (st !=3D omp_end_st || block_construct) OK for mainline and GCC 12?* Tobias *strictly structured blocks were added in r12-4592. ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstra=C3=9Fe 201= , 80634 M=C3=BCnchen; Gesellschaft mit beschr=C3=A4nkter Haftung; Gesch=C3= =A4ftsf=C3=BChrer: Thomas Heurung, Frank Th=C3=BCrauf; Sitz der Gesellschaf= t: M=C3=BCnchen; Registergericht M=C3=BCnchen, HRB 106955 --------------hBP5P9boY0BETaqUPB0qvr0I-- --------------rfWl8Ampszw5R7CtQqd6MToq Content-Type: text/x-patch; charset="UTF-8"; name="fix-strictly-struct-block.diff" Content-Disposition: attachment; filename="fix-strictly-struct-block.diff" Content-Transfer-Encoding: base64 Rm9ydHJhbi9PcGVuTVA6IEZpeCBzdHJpY3RseSBzdHJ1Y3R1cmVkIGJsb2Nr cyBwYXJzaW5nCgpnY2MvZm9ydHJhbi9DaGFuZ2VMb2c6CgoJKiBwYXJzZS5j YyAocGFyc2Vfb21wX3N0cnVjdHVyZWRfYmxvY2spOiBXaGVuIHBhcnNpbiBz dHJpY3RseQoJc3RydWN0dXJlZCBibG9ja3MsIGlzc3VlIGFuIGVycm9yIGlm IHRoZSBlbmQtZGlyZWN0aXZlIGNvbWVzCgliZWZvcmUgdGhlICdlbmQgYmxv Y2snLgoKZ2NjL3Rlc3RzdWl0ZS9DaGFuZ2VMb2c6CgoJKiBnZm9ydHJhbi5k Zy9nb21wL3N0cmljdGx5LXN0cnVjdHVyZWQtYmxvY2stNC5mOTA6IE5ldyB0 ZXN0LgoKIGdjYy9mb3J0cmFuL3BhcnNlLmNjICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8ICAyICstCiAuLi4vZ29tcC9zdHJpY3RseS1zdHJ1 Y3R1cmVkLWJsb2NrLTQuZjkwICAgICAgICAgICAgfCAyMSArKysrKysrKysr KysrKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgMjIgaW5zZXJ0aW9ucygr KSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL2djYy9mb3J0cmFuL3Bh cnNlLmNjIGIvZ2NjL2ZvcnRyYW4vcGFyc2UuY2MKaW5kZXggMGI0YzU5Njk5 NmMuLjgwNDkyYzk1MmFhIDEwMDY0NAotLS0gYS9nY2MvZm9ydHJhbi9wYXJz ZS5jYworKysgYi9nY2MvZm9ydHJhbi9wYXJzZS5jYwpAQCAtNTcwOSw3ICs1 NzA5LDcgQEAgcGFyc2Vfb21wX3N0cnVjdHVyZWRfYmxvY2sgKGdmY19zdGF0 ZW1lbnQgb21wX3N0LCBib29sIHdvcmtzaGFyZV9zdG10c19vbmx5KQogCSAg ICB9CiAJICByZXR1cm4gc3Q7CiAJfQotICAgICAgZWxzZSBpZiAoc3QgIT0g b21wX2VuZF9zdCkKKyAgICAgIGVsc2UgaWYgKHN0ICE9IG9tcF9lbmRfc3Qg fHwgYmxvY2tfY29uc3RydWN0KQogCXsKIAkgIHVuZXhwZWN0ZWRfc3RhdGVt ZW50IChzdCk7CiAJICBzdCA9IG5leHRfc3RhdGVtZW50ICgpOwpkaWZmIC0t Z2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb21wL3N0cmljdGx5 LXN0cnVjdHVyZWQtYmxvY2stNC5mOTAgYi9nY2MvdGVzdHN1aXRlL2dmb3J0 cmFuLmRnL2dvbXAvc3RyaWN0bHktc3RydWN0dXJlZC1ibG9jay00LmY5MApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjZjZjBh MzkyNWUKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2dmb3J0 cmFuLmRnL2dvbXAvc3RyaWN0bHktc3RydWN0dXJlZC1ibG9jay00LmY5MApA QCAtMCwwICsxLDIxIEBACishIHsgZGctZG8gY29tcGlsZSB9CitpbXBsaWNp dCBub25lCitpbnRlZ2VyIDo6eCx6Cit4ID0gNDIKK3ByaW50ICcoKih6MTY6 IiAiKSknLCBsb2MoeCkKKyEkb21wIHRhcmdldCBtYXAoeCwgeikKK2Jsb2Nr CisgIGludGVnZXIgOjogeQorICB4ID0gMTIzCisgIHkgPSA5OQorICAhJG9t cCB0YXJnZXQgZGV2aWNlKGFuY2VzdG9yOjEpIG1hcChhbHdheXMsdG9mcm9t OngpIG1hcCh5KSAhIHsgZGctZXJyb3IgIidhbmNlc3RvcicgZGV2aWNlIG1v ZGlmaWVyIG5vdCBwcmVjZWRlZCBieSAncmVxdWlyZXMnIGRpcmVjdGl2ZSB3 aXRoICdyZXZlcnNlX29mZmxvYWQnIGNsYXVzZSIgfQorICAgIHByaW50ICco Kih6MTY6IiAiKSknLCBsb2MoeCksIGxvYyh5KQorICAgIHByaW50ICogLHgs IHkKKyAgICB4ID0gLXgKKyAgICB5ID0gLXkKKyAgISRvbXAgZW5kIHRhcmdl dCAhIHsgZGctZXJyb3IgIlVuZXhwZWN0ZWQgLi5PTVAgRU5EIFRBUkdFVCBz dGF0ZW1lbnQiIH0KKyAgeiA9IHkKK2VuZCBibG9jaworICAgIHByaW50ICog LHggISwgegorZW5kCisK --------------rfWl8Ampszw5R7CtQqd6MToq--