aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/interface.c
diff options
context:
space:
mode:
authorJanus Weil <janus@gcc.gnu.org>2016-11-30 10:50:04 +0100
committerJanus Weil <janus@gcc.gnu.org>2016-11-30 10:50:04 +0100
commit40109581065366e04c547d2bff6e8f7ff5646fb8 (patch)
tree3545cb58049e24356083d213deac96d297001759 /gcc/fortran/interface.c
parent0bdad1238b5b49ef3302321000d8eebf103e9038 (diff)
downloadgcc-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.c14
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;