diff options
author | Janus Weil <janus@gcc.gnu.org> | 2016-11-30 10:50:04 +0100 |
---|---|---|
committer | Janus Weil <janus@gcc.gnu.org> | 2016-11-30 10:50:04 +0100 |
commit | 40109581065366e04c547d2bff6e8f7ff5646fb8 (patch) | |
tree | 3545cb58049e24356083d213deac96d297001759 /gcc/fortran/interface.c | |
parent | 0bdad1238b5b49ef3302321000d8eebf103e9038 (diff) | |
download | gcc-40109581065366e04c547d2bff6e8f7ff5646fb8.zip gcc-40109581065366e04c547d2bff6e8f7ff5646fb8.tar.gz gcc-40109581065366e04c547d2bff6e8f7ff5646fb8.tar.bz2 |
re PR fortran/78592 (ICE in gfc_find_specific_dtio_proc, at fortran/interface.c:4939)
2016-11-30 Janus Weil <janus@gcc.gnu.org>
PR fortran/78592
* interface.c (gfc_find_specific_dtio_proc): Rearrange code to avoid
dereferencing a null pointer.
2016-11-30 Janus Weil <janus@gcc.gnu.org>
PR fortran/78592
* gfortran.dg/dtio_18.f90: New test case.
From-SVN: r243005
Diffstat (limited to 'gcc/fortran/interface.c')
-rw-r--r-- | gcc/fortran/interface.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/gcc/fortran/interface.c b/gcc/fortran/interface.c index f5d3f77..8afba84 100644 --- a/gcc/fortran/interface.c +++ b/gcc/fortran/interface.c @@ -4933,15 +4933,15 @@ gfc_find_specific_dtio_proc (gfc_symbol *derived, bool write, bool formatted) && tb_io_st->n.sym && tb_io_st->n.sym->generic) { - gfc_interface *intr; - for (intr = tb_io_st->n.sym->generic; intr; intr = intr->next) + for (gfc_interface *intr = tb_io_st->n.sym->generic; + intr && intr->sym && intr->sym->formal; + intr = intr->next) { gfc_symbol *fsym = intr->sym->formal->sym; - if (intr->sym && intr->sym->formal - && ((fsym->ts.type == BT_CLASS - && CLASS_DATA (fsym)->ts.u.derived == extended) - || (fsym->ts.type == BT_DERIVED - && fsym->ts.u.derived == extended))) + if ((fsym->ts.type == BT_CLASS + && CLASS_DATA (fsym)->ts.u.derived == extended) + || (fsym->ts.type == BT_DERIVED + && fsym->ts.u.derived == extended)) { dtio_sub = intr->sym; break; |