From: Paul Thomas Date: Sat, 9 Feb 2013 09:49:49 +0000 (+0000) Subject: re PR fortran/55362 (ICE with size() on character pointer) X-Git-Tag: releases/gcc-4.8.0~518 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=52880d11ce08fc59999823524667a7f135e7dbac;p=thirdparty%2Fgcc.git re PR fortran/55362 (ICE with size() on character pointer) 2013-02-09 Paul Thomas PR fortran/55362 * check.c (array_check): It is an error if a procedure is passed. 2013-02-09 Paul Thomas PR fortran/55362 * gfortran.dg/intrinsic_size_4.f90 : New test. From-SVN: r195915 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 6505704a9652..52b610dab03f 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2013-02-09 Paul Thomas + + PR fortran/55362 + * check.c (array_check): It is an error if a procedure is + passed. + 2013-02-08 Mikael Morin PR fortran/54107 @@ -8,7 +14,7 @@ 2013-02-07 Tobias Burnus - PR fortran/54339 + PR fortran/54339 * gfortran.texi (Standards): Mention TS29113. (Varying Length Character): Mention deferred-length strings. diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c index 8bd06457ff48..0e71b9506f86 100644 --- a/gcc/fortran/check.c +++ b/gcc/fortran/check.c @@ -256,7 +256,7 @@ array_check (gfc_expr *e, int n) return SUCCESS; } - if (e->rank != 0) + if (e->rank != 0 && e->ts.type != BT_PROCEDURE) return SUCCESS; gfc_error ("'%s' argument of '%s' intrinsic at %L must be an array", diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 557c8fef5d2c..69d7a15d2ade 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-02-09 Paul Thomas + + PR fortran/55362 + * gfortran.dg/intrinsic_size_4.f90 : New test. + 2013-02-09 Jakub Jelinek PR target/56256 diff --git a/gcc/testsuite/gfortran.dg/intrinsic_size_4.f90 b/gcc/testsuite/gfortran.dg/intrinsic_size_4.f90 new file mode 100644 index 000000000000..6d8e1c0b587e --- /dev/null +++ b/gcc/testsuite/gfortran.dg/intrinsic_size_4.f90 @@ -0,0 +1,18 @@ +! { dg-do compile } +! Test the fix for PR55362; the error below was missed and an ICE ensued. +! +! ! Contributed by Dominique d'Humieres +! +program ice_test + implicit none + write(*,*) 'message: ', & + size(Error_Msg),Error_Msg() ! { dg-error "must be an array" } + write(*,*) 'message: ', & + size(Error_Msg ()),Error_Msg() ! OK of course +contains + function Error_Msg() result(ErrorMsg) + character, dimension(:), pointer :: ErrorMsg + character, dimension(1), target :: str = '!' + ErrorMsg => str + end function Error_Msg +end program ice_test