diff options
author | Thomas Koenig <tkoenig@gcc.gnu.org> | 2019-12-10 18:31:33 +0000 |
---|---|---|
committer | Thomas Koenig <tkoenig@gcc.gnu.org> | 2019-12-10 18:31:33 +0000 |
commit | f812dfe8e09a2fed68c74d36e3c9b9f1d8d59c68 (patch) | |
tree | 3392beb5db21b477dc4c4fa3aea01f631cc24f52 /gcc | |
parent | 940317b75c9cc864425e8c4c1f752b2f4acbb1fc (diff) | |
download | gcc-f812dfe8e09a2fed68c74d36e3c9b9f1d8d59c68.zip gcc-f812dfe8e09a2fed68c74d36e3c9b9f1d8d59c68.tar.gz gcc-f812dfe8e09a2fed68c74d36e3c9b9f1d8d59c68.tar.bz2 |
re PR fortran/92863 (ICE in gfc_typename)
2019-12-10 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/92863
* misc.c (gfc_typename): If derived component is NULL for
derived or class, return "invalid type" or "invalid class",
respectively.
2019-12-10 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/92863
* gfortran.dg/interface_45.f90: New test.
From-SVN: r279180
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/fortran/misc.c | 10 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/interface_45.f90 | 11 |
4 files changed, 33 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 86a1a14..b34a684 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2019-12-10 Thomas Koenig <tkoenig@gcc.gnu.org> + + PR fortran/92863 + * misc.c (gfc_typename): If derived component is NULL for + derived or class, return "invalid type" or "invalid class", + respectively. + 2019-12-10 Tobias Burnus <tobias@codesourcery.com> PR fortran/92872 diff --git a/gcc/fortran/misc.c b/gcc/fortran/misc.c index 97df9ee..3ea8285 100644 --- a/gcc/fortran/misc.c +++ b/gcc/fortran/misc.c @@ -164,9 +164,19 @@ gfc_typename (gfc_typespec *ts) sprintf (buffer, "UNION(%s)", ts->u.derived->name); break; case BT_DERIVED: + if (ts->u.derived == NULL) + { + sprintf (buffer, "invalid type"); + break; + } sprintf (buffer, "TYPE(%s)", ts->u.derived->name); break; case BT_CLASS: + if (ts->u.derived == NULL) + { + sprintf (buffer, "invalid class"); + break; + } ts1 = ts->u.derived->components ? &ts->u.derived->components->ts : NULL; if (ts1 && ts1->u.derived && ts1->u.derived->attr.unlimited_polymorphic) sprintf (buffer, "CLASS(*)"); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 4e52f2a..39e5366 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-12-10 Thomas Koenig <tkoenig@gcc.gnu.org> + + PR fortran/92863 + * gfortran.dg/interface_45.f90: New test. + 2019-12-10 Richard Sandiford <richard.sandiford@arm.com> * gcc.target/aarch64/sve/mixed_size_7.c: New test. diff --git a/gcc/testsuite/gfortran.dg/interface_45.f90 b/gcc/testsuite/gfortran.dg/interface_45.f90 new file mode 100644 index 0000000..095aef6 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/interface_45.f90 @@ -0,0 +1,11 @@ +! { dg-do compile } +! PR 92863 - this used to ICE +! Test case by Arseny Solokha. + +type(l1) function mp() ! { dg-error "type for function" } + call sub(mp) ! { dg-error "Type mismatch" } +end function mp + +function bi(ry) + call sub(ry) ! { dg-error "Type mismatch" } +end function bi |