diff options
author | Steven G. Kargl <kargl@gcc.gnu.org> | 2019-08-28 20:36:00 +0000 |
---|---|---|
committer | Steven G. Kargl <kargl@gcc.gnu.org> | 2019-08-28 20:36:00 +0000 |
commit | c980510a5ab79614fcbaf5f411b1273dc9a8c7ca (patch) | |
tree | 1d54640ebad4cd1963dbe737ea184c32f570888e /gcc | |
parent | 4742dbe71804b3db099eb0eb8620dff2c79a71cf (diff) | |
download | gcc-c980510a5ab79614fcbaf5f411b1273dc9a8c7ca.zip gcc-c980510a5ab79614fcbaf5f411b1273dc9a8c7ca.tar.gz gcc-c980510a5ab79614fcbaf5f411b1273dc9a8c7ca.tar.bz2 |
re PR fortran/91551 (ICE in sort_actual, at fortran/intrinsic.c:4193)
2019-08-28 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/91551
* intrinsic.c (sort_actual): ALLOCATED has one argument. Check for
no argument case.
2019-08-28 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/91551
* gfortran.dg/allocated_3.f90
From-SVN: r275009
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/intrinsic.c | 54 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/allocated_3.f90 | 6 |
4 files changed, 49 insertions, 22 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 5e3d7b9..0f2efb2 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,5 +1,11 @@ 2019-08-28 Steven G. Kargl <kargl@gcc.gnu.org> + PR fortran/91551 + * intrinsic.c (sort_actual): ALLOCATED has one argument. Check for + no argument case. + +2019-08-28 Steven G. Kargl <kargl@gcc.gnu.org> + PR fortran/91565 * simplify.c (gfc_simplify_reshape): Add additional checks of the ORDER dummy argument. diff --git a/gcc/fortran/intrinsic.c b/gcc/fortran/intrinsic.c index 1b6eeda..764e350 100644 --- a/gcc/fortran/intrinsic.c +++ b/gcc/fortran/intrinsic.c @@ -4190,35 +4190,45 @@ sort_actual (const char *name, gfc_actual_arglist **ap, /* ALLOCATED has two mutually exclusive keywords, but only one can be present at time and neither is optional. */ - if (strcmp (name, "allocated") == 0 && a->name) + if (strcmp (name, "allocated") == 0) { - if (strcmp (a->name, "scalar") == 0) + if (!a) { - if (a->next) - goto whoops; - if (a->expr->rank != 0) - { - gfc_error ("Scalar entity required at %L", &a->expr->where); - return false; - } - return true; + gfc_error ("ALLOCATED intrinsic at %L requires an array or scalar " + "allocatable entity", where); + return false; } - else if (strcmp (a->name, "array") == 0) + + if (a->name) { - if (a->next) - goto whoops; - if (a->expr->rank == 0) + if (strcmp (a->name, "scalar") == 0) + { + if (a->next) + goto whoops; + if (a->expr->rank != 0) + { + gfc_error ("Scalar entity required at %L", &a->expr->where); + return false; + } + return true; + } + else if (strcmp (a->name, "array") == 0) { - gfc_error ("Array entity required at %L", &a->expr->where); + if (a->next) + goto whoops; + if (a->expr->rank == 0) + { + gfc_error ("Array entity required at %L", &a->expr->where); + return false; + } + return true; + } + else + { + gfc_error ("Invalid keyword %qs in %qs intrinsic function at %L", + a->name, name, &a->expr->where); return false; } - return true; - } - else - { - gfc_error ("Invalid keyword %qs in %qs intrinsic function at %L", - a->name, name, &a->expr->where); - return false; } } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 77fa37f..bd9fe70 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-08-28 Steven G. Kargl <kargl@gcc.gnu.org> + + PR fortran/91551 + * gfortran.dg/allocated_3.f90 + 2019-08-28 Marek Polacek <polacek@redhat.com> PR c++/91360 - Implement C++20 P1143R2: constinit. diff --git a/gcc/testsuite/gfortran.dg/allocated_3.f90 b/gcc/testsuite/gfortran.dg/allocated_3.f90 new file mode 100644 index 0000000..66748d6 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/allocated_3.f90 @@ -0,0 +1,6 @@ +! { dg-do compile } +! PR fortran/91551 +! Contributed by Gerhard Steinmetz +program p + if (allocated()) stop 1 ! { dg-error "requires an array or scalar allocatable" } +end |