From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp.smtpout.orange.fr (smtp-27.smtpout.orange.fr [80.12.242.27]) by sourceware.org (Postfix) with ESMTPS id BF1723858C74; Fri, 19 Jan 2024 17:47:47 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org BF1723858C74 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=gcc.gnu.org Authentication-Results: sourceware.org; spf=fail smtp.mailfrom=gcc.gnu.org ARC-Filter: OpenARC Filter v1.0.0 sourceware.org BF1723858C74 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=80.12.242.27 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1705686470; cv=none; b=giuLjgfXVMFDuvCm2Oz1+kaSckV6Dg6LXq4TlhemdRpsV/XtWImIW/WzsREDleRDmDiQsvdNasFsioOLwcA9fprCEe+HBUBAQcMtp32fOqwuaTo13pcdaVJrYCDI/Crw/YDZs2ZpUX5h/HOifOZ2Xnw/QNMtQJmUeFt6swdnVqw= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1705686470; c=relaxed/simple; bh=STLqdOI09AtuImnlCXZGkwd4OQrF8zfzDX05gqNgTQQ=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=Z5peXCL+oN241q2Nd6jjczCyadyWk2IzY+mSPnUPqT80ux4Iz6HfImPyS5IZ4ltXgdnCCkR+Ct3Ooyyf6hPE+bsNQE6pIYIs+NppO7/DO2E+6tFwFq0sr0yCfpXwJ/0lxwpRHHCqfmNXnYz/+UHX/JuIH1OC7HVb9wC/cQpYONo= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from cyrano.home ([86.215.161.51]) by smtp.orange.fr with ESMTPA id QsxsrseTZXxn1Qsy1rCux2; Fri, 19 Jan 2024 18:47:46 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=wanadoo.fr; s=t20230301; t=1705686466; bh=6B3wqdl69xSkBr/d3m8RgXvXPJKGAsYgHvaMhxG6Mts=; h=From:To:Subject:Date; b=GaG0smmxW1QVFi8/vH3iSeF/1VJxUjY1KzOvRB6a+Vgtm4CoYO41kHr4MvheE+bFg Mfy/0ar4ETNd2jdL2Q99mnZAWJwC4H8sFWPIlhRB3dV6idZTCmmKf31laMVZhtULbu Rjw9KhHL2zkVoXQZ3F+l4e69hsEuvaciauwWgdcyze2KmjeWs7TbIbI9JFxihXW5Dc oAB4CmMg2iGGLS5tiCw112rOROSSfTAurYb++bVX4MMyYkN7x9GDWk+1CyL1SLnjea VQMz7nvEvsz7ODGJ8LeUYVbH8EjTS7QTIveDnZCNsiMQovFEauTrrYO+4RiGLR682U AdpmNNxdxB0fA== X-ME-Helo: cyrano.home X-ME-Auth: bW9yaW4tbWlrYWVsQG9yYW5nZS5mcg== X-ME-Date: Fri, 19 Jan 2024 18:47:46 +0100 X-ME-IP: 86.215.161.51 From: Mikael Morin To: fortran@gcc.gnu.org, gcc-patches@gcc.gnu.org Subject: [PATCH] fortran: Restore current interface info on error [PR111291] Date: Fri, 19 Jan 2024 18:47:36 +0100 Message-ID: <20240119174736.1434406-1-mikael@gcc.gnu.org> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-11.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,GIT_PATCH_0,JMQ_SPF_NEUTRAL,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,SPF_HELO_PASS,SPF_NEUTRAL,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: Hello, I tested this on x86_64-pc-linux-gnu without regression. There is no new test, as the problem is visible on an existing test with valgrind or an asan-instrumented compiler. OK for master? -- >8 -- This change is a followup to the fix for PR48776 (namely r14-3572-gd58150452976c4ca65ddc811fac78ef956fa96b0 AKA fortran: Restore interface to its previous state on error [PR48776]), which cleaned up new changes from interfaces upon error. Unfortunately, there is one case in that fix that is mishandled, visible on unexpected_interface.f90 with valgrind or an asan-instrumented gfortran. when an interface statement is found while parsing an interface body (which is invalid), the current interface is replaced by the one from the new statement, and as parsing continues, new procedures are added to the new interface, which has been rejected and freed, instead of the original one. This change restores the current interface pointer to its previous value on each rejected statement. PR fortran/48776 PR fortran/111291 gcc/fortran/ChangeLog: * parse.cc: Restore current interface to its previous value on error. --- gcc/fortran/parse.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/gcc/fortran/parse.cc b/gcc/fortran/parse.cc index abd3a424f38..51e89e10e2d 100644 --- a/gcc/fortran/parse.cc +++ b/gcc/fortran/parse.cc @@ -4033,6 +4033,7 @@ loop: default: gfc_error ("Unexpected %s statement in INTERFACE block at %C", gfc_ascii_statement (st)); + current_interface = save; reject_statement (); gfc_free_namespace (gfc_current_ns); goto loop; -- 2.43.0