From 52880d11ce08fc59999823524667a7f135e7dbac Mon Sep 17 00:00:00 2001 From: Paul Thomas Date: Sat, 9 Feb 2013 09:49:49 +0000 Subject: [PATCH] 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 --- gcc/fortran/ChangeLog | 8 +++++++- gcc/fortran/check.c | 2 +- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gfortran.dg/intrinsic_size_4.f90 | 18 ++++++++++++++++++ 4 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/intrinsic_size_4.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 6505704a965..52b610dab03 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 8bd06457ff4..0e71b9506f8 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 557c8fef5d2..69d7a15d2ad 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 00000000000..6d8e1c0b587 --- /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 -- 2.30.2