]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR fortran/85001 (ICE in gfc_build_array_type, at fortran/trans-types.c:1420)
authorSteven G. Kargl <kargl@gcc.gnu.org>
Wed, 21 Mar 2018 01:27:42 +0000 (01:27 +0000)
committerSteven G. Kargl <kargl@gcc.gnu.org>
Wed, 21 Mar 2018 01:27:42 +0000 (01:27 +0000)
2018-03-20  Steven G. Kargl  <kargl@gcc.gnu.org>

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  <kargl@gcc.gnu.org>

PR fortran/85001
* gfortran.dg/interface_41.f90: New test.

From-SVN: r258700

gcc/fortran/interface.c
gcc/testsuite/gfortran.dg/interface_41.f90 [new file with mode: 0644]

index 04b92c994f12fc26ec98c9061007a0cf96681653..725ffd18ed2462bc1de2f9e1453c13005f0eaccb 100644 (file)
@@ -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 (file)
index 0000000..b5ea8af
--- /dev/null
@@ -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