From 5ee5415af8691640b0f7a5332b78d04ba309f4f0 Mon Sep 17 00:00:00 2001 From: Paul Thomas Date: Thu, 11 Feb 2021 10:38:23 +0000 Subject: [PATCH] Fortran: Fix ICE after error regression [PR99060]. 2021-02-11 Paul Thomas gcc/fortran PR fortran/99060 * primary.c (gfc_match_varspec): Test for non-null 'previous' before using its name in the error message. gcc/testsuite/ PR fortran/99060 * gfortran.dg/pr99060.f90: New test. --- gcc/fortran/primary.c | 12 ++++++++---- gcc/testsuite/gfortran.dg/pr99060.f90 | 10 ++++++++++ 2 files changed, 18 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/pr99060.f90 diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c index d0610d0..7633e77 100644 --- a/gcc/fortran/primary.c +++ b/gcc/fortran/primary.c @@ -2407,11 +2407,15 @@ gfc_match_varspec (gfc_expr *primary, int equiv_flag, bool sub_flag, component = NULL; if (intrinsic && !inquiry) - { - gfc_error ("%qs at %C is not an inquiry reference to an intrinsic " - "type component %qs", name, previous->name); + { + if (previous) + gfc_error ("%qs at %C is not an inquiry reference to an intrinsic " + "type component %qs", name, previous->name); + else + gfc_error ("%qs at %C is not an inquiry reference to an intrinsic " + "type component", name); return MATCH_ERROR; - } + } else if (component == NULL && !inquiry) return MATCH_ERROR; diff --git a/gcc/testsuite/gfortran.dg/pr99060.f90 b/gcc/testsuite/gfortran.dg/pr99060.f90 new file mode 100644 index 0000000..fdf3b1a --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr99060.f90 @@ -0,0 +1,10 @@ +! { dg-do compile } +! +! Test the fix for PR99060 in which the expression caused an ICE after the error. +! +! Contributed by Gerhard Steinmetz +! +program p + real :: a + print *, a%kind%n ! { dg-error "not an inquiry reference" } +end -- 2.7.4