From patchwork Mon Mar 16 10:32:10 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Andre Vehreschild X-Patchwork-Id: 450477 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 27B8D140083 for ; Mon, 16 Mar 2015 21:32:30 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass reason="1024-bit key; unprotected key" header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b=eXmas43Q; dkim-adsp=none (unprotected policy); dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:date :from:to:cc:subject:message-id:in-reply-to:references :mime-version:content-type; q=dns; s=default; b=utnmABQwwXi+SS1J G4L4/qPbiouRZm2u2hTEpa9E8mTgfxkAsiC+C5DIECHg6nM9cY3KspbLZnb0z986 SpKLf66Q2oPXIf5Q/P3LAtxBDVEIaM2LW3BEf/28lPZn3Dcae22m0O1yZtb3UR7f 8EDEdmS6HQBNuehM0/RgOb0cQNo= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:date :from:to:cc:subject:message-id:in-reply-to:references :mime-version:content-type; s=default; bh=R0MuAYI2GaN7FASX6zB2Um dpDII=; b=eXmas43QLnczN9fAitkl7Jqq/IUEdG6IC34UMcZS03Ae0RYmeU3qsn YkqzSjHt7LHbn0uGTqUhmxgy2T5KUSc6C3J/F7dICa4W9bTqqMiGWhHeVx/vyTae mfPSebWPc7dfzmN1ZQpgyfHK2W+sUpytfRa2oXudj+xm+ambS6gac= Received: (qmail 118476 invoked by alias); 16 Mar 2015 10:32:19 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 118362 invoked by uid 89); 16 Mar 2015 10:32:18 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.7 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.2 X-Spam-User: qpsmtpd, 2 recipients X-HELO: mout.gmx.net Received: from mout.gmx.net (HELO mout.gmx.net) (212.227.17.21) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Mon, 16 Mar 2015 10:32:16 +0000 Received: from vepi2 ([88.75.104.20]) by mail.gmx.com (mrgmx101) with ESMTPSA (Nemesis) id 0LxcbX-1ZdGa73zwJ-017DrH; Mon, 16 Mar 2015 11:32:13 +0100 Date: Mon, 16 Mar 2015 11:32:10 +0100 From: Andre Vehreschild To: Tobias Burnus Cc: gcc-patches@gcc.gnu.org, fortran@gcc.gnu.org Subject: Re: [Patch, Fortran] Prevent segfault on illegal input Message-ID: <20150316113210.390642e0@vepi2> In-Reply-To: <20150313130459.GA4148@physik.fu-berlin.de> References: <20150313113336.154f327b@vepi2> <20150313130459.GA4148@physik.fu-berlin.de> MIME-Version: 1.0 X-UI-Out-Filterresults: notjunk:1; Hi Tobias, hi all, thanks for the review. Commited as r221455: r221455 | vehre | 2015-03-16 11:29:59 +0100 (Mo, 16. Mär 2015) | 13 Zeilen gcc/fortran/ChangeLog: 2015-03-16 Andre Vehreschild * resolve.c: Prevent segfault on illegal input. gcc/testsuite/ChangeLog: 2015-03-16 Andre Vehreschild * gfortran.dg/pointer_2.f90: New test. Regards, Andre On Fri, 13 Mar 2015 14:05:00 +0100 Tobias Burnus wrote: > Andre Vehreschild wrote: > > during debugging I found a segfault of gfortran, when it encounters an > > illegal fortran code. The mistake in Fortran is flagged correctly, but > > later gfortran crashes. This patch prevents the crash. > > > > Bootstraps and regtest ok on x86_64-linux-gnu. > > Ok for trunk? > > OK. Thanks for the patch. > > Tobias Index: gcc/fortran/ChangeLog =================================================================== --- gcc/fortran/ChangeLog (Revision 221454) +++ gcc/fortran/ChangeLog (Arbeitskopie) @@ -1,3 +1,7 @@ +2015-03-16 Andre Vehreschild + + * resolve.c: Prevent segfault on illegal input. + 2015-03-14 Mikael Morin PR fortran/61138 Index: gcc/fortran/resolve.c =================================================================== --- gcc/fortran/resolve.c (Revision 221454) +++ gcc/fortran/resolve.c (Arbeitskopie) @@ -2639,6 +2639,10 @@ expr->ts = sym->ts; expr->value.function.name = sym->name; expr->value.function.esym = sym; + /* Prevent crash when sym->ts.u.derived->components is not set due to previous + error(s). */ + if (sym->ts.type == BT_CLASS && !CLASS_DATA (sym)) + return MATCH_ERROR; if (sym->ts.type == BT_CLASS && CLASS_DATA (sym)->as) expr->rank = CLASS_DATA (sym)->as->rank; else if (sym->as != NULL) Index: gcc/testsuite/gfortran.dg/pointer_2.f90 =================================================================== --- gcc/testsuite/gfortran.dg/pointer_2.f90 (Revision 0) +++ gcc/testsuite/gfortran.dg/pointer_2.f90 (Revision 221455) @@ -0,0 +1,18 @@ +! { dg-do compile } +! Check that the compiler reports the errors, but does not segfault. +! Contributed by: Andre Vehreschild +! +program test + implicit none + class(*), pointer :: P + class(*), allocatable :: P2 + + allocate(P2, source=convertType(P)) + +contains + + function convertType(in) ! { dg-error "must be dummy, allocatable or pointer" } + class(*), intent(in) :: in + class(*) :: convertType + end function +end program test Index: gcc/testsuite/ChangeLog =================================================================== --- gcc/testsuite/ChangeLog (Revision 221454) +++ gcc/testsuite/ChangeLog (Arbeitskopie) @@ -1,3 +1,7 @@ +2015-03-16 Andre Vehreschild + + * gfortran.dg/pointer_2.f90: New test. + 2015-03-16 Eric Botcazou * testsuite/g++.dg/pr65049.C: New test.