From 6d36ad9ba5d2e03b79039f4479d256526bd12d44 Mon Sep 17 00:00:00 2001 From: "Steven G. Kargl" Date: Wed, 21 Mar 2018 01:27:42 +0000 Subject: [PATCH] re PR fortran/85001 (ICE in gfc_build_array_type, at fortran/trans-types.c:1420) 2018-03-20 Steven G. Kargl PR fortran/85001 * interface.c (symbol_rank): Remove bogus null pointer check that crept in when translating a ternary operator into an if-else constructor. 2018-03-20 Steven G. Kargl PR fortran/85001 * gfortran.dg/interface_41.f90: New test. From-SVN: r258700 --- gcc/fortran/interface.c | 2 +- gcc/testsuite/gfortran.dg/interface_41.f90 | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.dg/interface_41.f90 diff --git a/gcc/fortran/interface.c b/gcc/fortran/interface.c index 04b92c994f12..725ffd18ed24 100644 --- a/gcc/fortran/interface.c +++ b/gcc/fortran/interface.c @@ -1167,7 +1167,7 @@ symbol_rank (gfc_symbol *sym) { gfc_array_spec *as = NULL; - if (sym->ts.type == BT_CLASS && CLASS_DATA (sym) && CLASS_DATA (sym)->as) + if (sym->ts.type == BT_CLASS && CLASS_DATA (sym)) as = CLASS_DATA (sym)->as; else as = sym->as; diff --git a/gcc/testsuite/gfortran.dg/interface_41.f90 b/gcc/testsuite/gfortran.dg/interface_41.f90 new file mode 100644 index 000000000000..b5ea8af189d3 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/interface_41.f90 @@ -0,0 +1,19 @@ +! { dg-do compile } +! PR fortran/85001 +! Contributed by Gerhard Steinmetz. +program p + type t + end type + call s +contains + real function f(x) + class(t) :: x + dimension :: x(:) + f = 1.0 + end + subroutine s + type(t) :: x(2) + real :: z + z = f(x) ! { dg-error "Rank mismatch in argument" } + end +end -- 2.47.2