From patchwork Wed Apr 27 20:32:39 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tobias Burnus X-Patchwork-Id: 93118 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]) by ozlabs.org (Postfix) with SMTP id 7C0F21007D7 for ; Thu, 28 Apr 2011 06:33:01 +1000 (EST) Received: (qmail 27035 invoked by alias); 27 Apr 2011 20:33:00 -0000 Received: (qmail 27021 invoked by uid 22791); 27 Apr 2011 20:32:59 -0000 X-SWARE-Spam-Status: No, hits=-1.8 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_NONE X-Spam-Check-By: sourceware.org Received: from mx01.qsc.de (HELO mx01.qsc.de) (213.148.129.14) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 27 Apr 2011 20:32:42 +0000 Received: from [192.168.178.22] (port-92-204-55-235.dynamic.qsc.de [92.204.55.235]) by mx01.qsc.de (Postfix) with ESMTP id DB77A3CFDB; Wed, 27 Apr 2011 22:32:39 +0200 (CEST) Message-ID: <4DB87D67.8020606@net-b.de> Date: Wed, 27 Apr 2011 22:32:39 +0200 From: Tobias Burnus User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; de; rv:1.9.2.13) Gecko/20101206 SUSE/3.1.7 Thunderbird/3.1.7 MIME-Version: 1.0 To: gcc patches , gfortran Subject: [Patch, Fortran, committed] PR 48788 - Avoid segfault after gfc_error for whole-file diagnostic 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 First, I'd be glad if someone could review my patch at http://gcc.gnu.org/ml/fortran/2011-04/msg00271.html * * * Secondly, the attached patch fixes a segfault after printing an error about the invalid function-return type. It has been committed as Rev. 173048. As it is a 4.6/4.7 regression, I will backport it to 4.6 in the next days. Tobias Index: gcc/testsuite/gfortran.dg/whole_file_34.f90 =================================================================== --- gcc/testsuite/gfortran.dg/whole_file_34.f90 (Revision 0) +++ gcc/testsuite/gfortran.dg/whole_file_34.f90 (Revision 0) @@ -0,0 +1,12 @@ +! { dg-do compile } +! +! PR fortran/48788 +! +! Contributed by Zdenek Sojka +! +function foo () +end function foo + character(4), external :: foo ! { dg-error "Return type mismatch of function" } + character(4) :: x + x = foo () +END Index: gcc/testsuite/ChangeLog =================================================================== --- gcc/testsuite/ChangeLog (Revision 173047) +++ gcc/testsuite/ChangeLog (Arbeitskopie) @@ -1,3 +1,8 @@ +2011-04-27 Tobias Burnus + + PR fortran/48788 + * gfortran.dg/whole_file_34.f90: New. + 2011-04-27 Jan Hubicka * gcc.dg/tree-ssa/inline-9.c: New testcase. Index: gcc/fortran/ChangeLog =================================================================== --- gcc/fortran/ChangeLog (Revision 173047) +++ gcc/fortran/ChangeLog (Arbeitskopie) @@ -1,3 +1,9 @@ +2011-04-27 Tobias Burnus + + PR fortran/48788 + * resolve.c (resolve_global_procedure): Error recovery - + avoid segfault for (non)character-returning functions. + 2011-04-26 Thomas Koenig * decl.c (gfc_match_end): Check that the block name starts Index: gcc/fortran/resolve.c =================================================================== --- gcc/fortran/resolve.c (Revision 173047) +++ gcc/fortran/resolve.c (Arbeitskopie) @@ -2187,7 +2187,7 @@ /* F2003, 12.3.1.1 (3c); F2008, 12.4.2.2 (3c) */ if (sym->ts.type == BT_CHARACTER && sym->attr.if_source != IFSRC_IFBODY - && def_sym->ts.u.cl->length != NULL) + && def_sym->ts.type == BT_CHARACTER && def_sym->ts.u.cl->length != NULL) { gfc_charlen *cl = sym->ts.u.cl;