From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 107050 invoked by alias); 24 Jun 2015 18:37:34 -0000 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 Received: (qmail 107033 invoked by uid 89); 24 Jun 2015 18:37:33 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.2 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,KAM_ASCII_DIVIDERS,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=no version=3.3.2 X-Spam-User: qpsmtpd, 2 recipients X-HELO: mail-wi0-f170.google.com Received: from mail-wi0-f170.google.com (HELO mail-wi0-f170.google.com) (209.85.212.170) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Wed, 24 Jun 2015 18:37:28 +0000 Received: by wicnd19 with SMTP id nd19so143345784wic.1; Wed, 24 Jun 2015 11:37:25 -0700 (PDT) X-Received: by 10.194.192.166 with SMTP id hh6mr71345049wjc.127.1435171045344; Wed, 24 Jun 2015 11:37:25 -0700 (PDT) MIME-Version: 1.0 Received: by 10.28.180.133 with HTTP; Wed, 24 Jun 2015 11:36:45 -0700 (PDT) From: =?UTF-8?B?TWFudWVsIEzDs3Blei1JYsOhw7Fleg==?= Date: Wed, 24 Jun 2015 19:33:00 -0000 Message-ID: Subject: [PR fortran/66528] unbalanced IF/ENDIF with -fmax-errors=1 causes invalid free To: "fortran@gcc.gnu.org List" , Gcc Patch List Content-Type: multipart/mixed; boundary=047d7bb7095059b5eb051947cce2 X-SW-Source: 2015-06/txt/msg01735.txt.bz2 --047d7bb7095059b5eb051947cce2 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Content-length: 1184 The problem is that diagnostic_action_after_output tries to delete the active pretty-printer which tries to delete its output_buffer, which is normally dynamically allocated via placement-new, but the output_buffer used by the error_buffer of Fortran is statically allocated. Being statically allocated simplifies a lot pushing/poping several instances of error_buffer. The solution I found is to reset the active output_buffer back to the default one before calling diagnostic_action_after_output. This is a bit ugly, because this function does use the output_buffer, however, at the point that Fortran calls it, both are in an equivalent state, thus there is no visible difference. Bootstrapped and regression tested on x86_64-linux-gnu. 2015-06-24 Manuel L=C3=B3pez-Ib=C3=A1=C3=B1ez PR fortran/66528 * gfortran.dg/maxerrors.f90: New test. gcc/fortran/ChangeLog: 2015-06-24 Manuel L=C3=B3pez-Ib=C3=A1=C3=B1ez PR fortran/66528 * error.c (gfc_warning_check): Restore the default output_buffer before calling diagnostic_action_after_output. (gfc_error_check): Likewise. (gfc_diagnostics_init): Add comment. --047d7bb7095059b5eb051947cce2 Content-Type: text/plain; charset=US-ASCII; name="fix-pr66528.diff" Content-Disposition: attachment; filename="fix-pr66528.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ibb3rbmt0 Content-length: 3294 SW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvbWF4ZXJyb3JzLmY5 MAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvdGVzdHN1aXRlL2dm b3J0cmFuLmRnL21heGVycm9ycy5mOTAJKHJldmlzaW9uIDApCisrKyBnY2Mv dGVzdHN1aXRlL2dmb3J0cmFuLmRnL21heGVycm9ycy5mOTAJKHJldmlzaW9u IDApCkBAIC0wLDAgKzEsMTIgQEAKKyEgeyBkZy1kbyBjb21waWxlIH0KKyEg eyBkZy1vcHRpb25zICItZm1heC1lcnJvcnM9MSIgfQorISBQUjY2NTI4Cish IHsgZGctcHJ1bmUtb3V0cHV0ICJjb21waWxhdGlvbiB0ZXJtaW5hdGVkIiB9 Citwcm9ncmFtIG1haW4KKyAgcmVhZCAoKiwqKSBuCisgIGlmIChuPDApIHRo ZW4KKyAgICBwcmludCAqLGZvbworICBlbmQgISB7IGRnLWVycm9yICJFTkQg SUYgc3RhdGVtZW50IGV4cGVjdGVkIiB9CisgICAgcHJpbnQgKixiYXIKK2Vu ZCBwcm9ncmFtIG1haW4KKwpJbmRleDogZ2NjL2ZvcnRyYW4vZXJyb3IuYwo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvZm9ydHJhbi9lcnJvci5j CShyZXZpc2lvbiAyMjQ4NDQpCisrKyBnY2MvZm9ydHJhbi9lcnJvci5jCSh3 b3JraW5nIGNvcHkpCkBAIC0xMjQ3LDI0ICsxMjQ3LDIzIEBAIGdmY19jbGVh cl93YXJuaW5nICh2b2lkKQogICAgSWYgc28sIHByaW50IHRoZSB3YXJuaW5n LiAgKi8KIAogdm9pZAogZ2ZjX3dhcm5pbmdfY2hlY2sgKHZvaWQpCiB7Ci0g IC8qIFRoaXMgaXMgZm9yIHRoZSBuZXcgZGlhZ25vc3RpY3MgbWFjaGluZXJ5 LiAgKi8KICAgaWYgKCEgZ2ZjX291dHB1dF9idWZmZXJfZW1wdHlfcCAocHBf d2FybmluZ19idWZmZXIpKQogICAgIHsKICAgICAgIHByZXR0eV9wcmludGVy ICpwcCA9IGdsb2JhbF9kYy0+cHJpbnRlcjsKICAgICAgIG91dHB1dF9idWZm ZXIgKnRtcF9idWZmZXIgPSBwcC0+YnVmZmVyOwogICAgICAgcHAtPmJ1ZmZl ciA9IHBwX3dhcm5pbmdfYnVmZmVyOwogICAgICAgcHBfcmVhbGx5X2ZsdXNo IChwcCk7CiAgICAgICB3YXJuaW5nY291bnQgKz0gd2FybmluZ2NvdW50X2J1 ZmZlcmVkOwogICAgICAgd2Vycm9yY291bnQgKz0gd2Vycm9yY291bnRfYnVm ZmVyZWQ7CiAgICAgICBnY2NfYXNzZXJ0ICh3YXJuaW5nY291bnRfYnVmZmVy ZWQgKyB3ZXJyb3Jjb3VudF9idWZmZXJlZCA9PSAxKTsKKyAgICAgIHBwLT5i dWZmZXIgPSB0bXBfYnVmZmVyOwogICAgICAgZGlhZ25vc3RpY19hY3Rpb25f YWZ0ZXJfb3V0cHV0IChnbG9iYWxfZGMsIAogCQkJCSAgICAgIHdhcm5pbmdj b3VudF9idWZmZXJlZCAKIAkJCQkgICAgICA/IERLX1dBUk5JTkcgOiBES19F UlJPUik7Ci0gICAgICBwcC0+YnVmZmVyID0gdG1wX2J1ZmZlcjsKICAgICB9 CiB9CiAKIAogLyogSXNzdWUgYW4gZXJyb3IuICAqLwpAQCAtMTM3OSwxMiAr MTM3OCwxMiBAQCBnZmNfZXJyb3JfY2hlY2sgKHZvaWQpCiAgICAgICBvdXRw dXRfYnVmZmVyICp0bXBfYnVmZmVyID0gcHAtPmJ1ZmZlcjsKICAgICAgIHBw LT5idWZmZXIgPSBwcF9lcnJvcl9idWZmZXI7CiAgICAgICBwcF9yZWFsbHlf Zmx1c2ggKHBwKTsKICAgICAgICsrZXJyb3Jjb3VudDsKICAgICAgIGdjY19h c3NlcnQgKGdmY19vdXRwdXRfYnVmZmVyX2VtcHR5X3AgKHBwX2Vycm9yX2J1 ZmZlcikpOwotICAgICAgZGlhZ25vc3RpY19hY3Rpb25fYWZ0ZXJfb3V0cHV0 IChnbG9iYWxfZGMsIERLX0VSUk9SKTsKICAgICAgIHBwLT5idWZmZXIgPSB0 bXBfYnVmZmVyOworICAgICAgZGlhZ25vc3RpY19hY3Rpb25fYWZ0ZXJfb3V0 cHV0IChnbG9iYWxfZGMsIERLX0VSUk9SKTsKICAgICAgIHJldHVybiB0cnVl OwogICAgIH0KIAogICByZXR1cm4gZmFsc2U7CiB9CkBAIC0xNDcwLDEwICsx NDY5LDEyIEBAIGdmY19kaWFnbm9zdGljc19pbml0ICh2b2lkKQogICBkaWFn bm9zdGljX2Zvcm1hdF9kZWNvZGVyIChnbG9iYWxfZGMpID0gZ2ZjX2Zvcm1h dF9kZWNvZGVyOwogICBnbG9iYWxfZGMtPmNhcmV0X2NoYXJzWzBdID0gJzEn OwogICBnbG9iYWxfZGMtPmNhcmV0X2NoYXJzWzFdID0gJzInOwogICBwcF93 YXJuaW5nX2J1ZmZlciA9IG5ldyAoWE5FVyAob3V0cHV0X2J1ZmZlcikpIG91 dHB1dF9idWZmZXIgKCk7CiAgIHBwX3dhcm5pbmdfYnVmZmVyLT5mbHVzaF9w ID0gZmFsc2U7CisgIC8qIHBwX2Vycm9yX2J1ZmZlciBpcyBzdGF0aWNhbGx5 IGFsbG9jYXRlZC4gIFRoaXMgc2ltcGxpZmllcyBtZW1vcnkKKyAgICAgbWFu YWdlbWVudCB3aGVuIHVzaW5nIGdmY19wdXNoL3BvcF9lcnJvci4gKi8KICAg cHBfZXJyb3JfYnVmZmVyID0gJihlcnJvcl9idWZmZXIuYnVmZmVyKTsKICAg cHBfZXJyb3JfYnVmZmVyLT5mbHVzaF9wID0gZmFsc2U7CiB9CiAKIHZvaWQK --047d7bb7095059b5eb051947cce2--