From patchwork Thu Apr 21 08:30:01 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tobias Burnus X-Patchwork-Id: 92387 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 1D276B7027 for ; Thu, 21 Apr 2011 18:30:26 +1000 (EST) Received: (qmail 18420 invoked by alias); 21 Apr 2011 08:30:20 -0000 Received: (qmail 18394 invoked by uid 22791); 21 Apr 2011 08:30:18 -0000 X-SWARE-Spam-Status: No, hits=-1.4 required=5.0 tests=AWL, BAYES_00, T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from outpost1.zedat.fu-berlin.de (HELO outpost1.zedat.fu-berlin.de) (130.133.4.66) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 21 Apr 2011 08:30:03 +0000 Received: from relay1.zedat.fu-berlin.de ([130.133.4.67]) by outpost1.zedat.fu-berlin.de (Exim 4.69) with esmtp (envelope-from ) id <1QCpH0-0004DN-3O>; Thu, 21 Apr 2011 10:30:02 +0200 Received: from mx.physik.fu-berlin.de ([160.45.64.218]) by relay1.zedat.fu-berlin.de (Exim 4.69) with esmtp (envelope-from ) id <1QCpGz-00087Q-V3>; Thu, 21 Apr 2011 10:30:02 +0200 Received: from squeeze64.physik.fu-berlin.de ([160.45.66.239]) by mx.physik.fu-berlin.de with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.69) (envelope-from ) id 1QCpGz-0006q3-P9; Thu, 21 Apr 2011 10:30:01 +0200 Received: from tburnus by squeeze64.physik.fu-berlin.de with local (Exim 4.72 #1 (Debian)) id 1QCpGz-0003kS-O4; Thu, 21 Apr 2011 10:30:01 +0200 Date: Thu, 21 Apr 2011 10:30:01 +0200 From: Tobias Burnus To: gcc-patches@gcc.gnu.org, fortran@gcc.gnu.org Subject: [Patch, Fortran, committed] PR 18918 - Fix max-rank check for coarrays Message-ID: <20110421083001.GA13912@physik.fu-berlin.de> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.20 (2009-06-14) 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 Committed as obvious (Rev. 172812). Tobias Index: gcc/testsuite/gfortran.dg/coarray_18.f90 =================================================================== --- gcc/testsuite/gfortran.dg/coarray_18.f90 (revision 0) +++ gcc/testsuite/gfortran.dg/coarray_18.f90 (revision 0) @@ -0,0 +1,39 @@ +! { dg-do compile } +! { dg-options "-fcoarray=single" } +! +! Prevent ICE when exceeding the maximal number of allowed +! dimensions (normal + codimensions). +! +! Fortran 2008 allows (co)arrays with 15 ranks +! Currently, gfortran only supports 7, cf. PR 37577 +! Thus, the program is valid Fortran 2008 ... +! +! See also general coarray PR 18918 +! +! Test case taken from Leibniz-Rechenzentrum (LRZ)'s +! fortran_tests with thanks to Reinhold Bader. +! + +program ar + implicit none + integer :: ic(2)[*] + integer :: id(2,2)[2,*] + integer :: ie(2,2,2)[2,2,*] + integer :: ig(2,2,2,2)[2,2,2,*] ! { dg-error "has more than 7 dimensions" } + integer :: ih(2,2,2,2,2)[2,2,2,2,*] ! { dg-error "has more than 7 dimensions" } + integer :: ij(2,2,2,2,2,2)[2,2,2,2,2,*] ! { dg-error "has more than 7 dimensions" } + integer :: ik(2,2,2,2,2,2,2)[2,2,2,2,2,2,*] ! { dg-error "has more than 7 dimensions" } + integer :: il[2,2,2,2,2,2,2,*] ! { dg-error "has more than 7 dimensions" } + integer :: im[2,2,2,2,2,2,2,2,*] ! { dg-error "has more than 7 dimensions" } + integer :: in[2,2,2,2,2,2,2,2,2,*] ! { dg-error "has more than 7 dimensions" } + integer :: io[2,2,2,2,2,2,2,2,2,2,*] ! { dg-error "has more than 7 dimensions" } + real :: x2(2,2,4)[2,*] + complex :: c2(4,2)[2,*] + double precision :: d2(1,5,9)[2,*] + character(len=1) :: ch2(2)[2,*] + character(len=2) :: ch22(-5:4)[2,*] + logical :: l2(17)[2,*] + if (this_image() == 1) then + write(*,*) 'OK' + end if +end program Index: gcc/testsuite/ChangeLog =================================================================== --- gcc/testsuite/ChangeLog (revision 172811) +++ gcc/testsuite/ChangeLog (working copy) @@ -1,3 +1,8 @@ +2011-04-21 Tobias Burnus + + PR fortran/18918 + * gfortran.dg/coarray_18.f90: New. + 2011-04-20 Jason Merrill * g++.dg/cpp0x/initlist47.C: New. Index: gcc/fortran/array.c =================================================================== --- gcc/fortran/array.c (revision 172811) +++ gcc/fortran/array.c (working copy) @@ -576,6 +576,13 @@ goto cleanup; } + if (as->rank >= GFC_MAX_DIMENSIONS) + { + gfc_error ("Array specification at %C has more than %d " + "dimensions", GFC_MAX_DIMENSIONS); + goto cleanup; + } + for (;;) { as->corank++; @@ -644,7 +651,7 @@ goto cleanup; } - if (as->corank >= GFC_MAX_DIMENSIONS) + if (as->rank + as->corank >= GFC_MAX_DIMENSIONS) { gfc_error ("Array specification at %C has more than %d " "dimensions", GFC_MAX_DIMENSIONS); Index: gcc/fortran/ChangeLog =================================================================== --- gcc/fortran/ChangeLog (revision 172811) +++ gcc/fortran/ChangeLog (working copy) @@ -1,3 +1,8 @@ +2011-04-21 Tobias Burnus + + PR fortran/18918 + * array.c (gfc_match_array_spec): Fix maximal rank(+corank) check. + 2011-04-20 Jim Meyering * expr.c (free_expr0): Remove useless if-before-free.