|
|
|
2017-03-07 Jakub Jelinek <jakub@redhat.com>
|
|
|
|
|
|
|
|
Partial backport
|
|
|
|
2016-05-07 Fritz Reese <fritzoreese@gmail.com>
|
|
|
|
|
|
|
|
PR fortran/56226
|
|
|
|
* interface.c (gfc_compare_derived_types): Don't ICE if the
|
|
|
|
derived type or both types have no components.
|
|
|
|
|
|
|
|
* gfortran.dg/rh1369183.f90: New test.
|
|
|
|
|
|
|
|
--- gcc/fortran/interface.c.jj 2015-06-18 16:32:45.000000000 +0200
|
|
|
|
+++ gcc/fortran/interface.c 2017-03-07 18:35:38.982302826 +0100
|
|
|
|
@@ -418,6 +418,13 @@ gfc_compare_derived_types (gfc_symbol *d
|
|
|
|
&& !(derived1->attr.is_bind_c && derived2->attr.is_bind_c))
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
+ /* Protect against null components. */
|
|
|
|
+ if (derived1->attr.zero_comp != derived2->attr.zero_comp)
|
|
|
|
+ return 0;
|
|
|
|
+
|
|
|
|
+ if (derived1->attr.zero_comp)
|
|
|
|
+ return 1;
|
|
|
|
+
|
|
|
|
dt1 = derived1->components;
|
|
|
|
dt2 = derived2->components;
|
|
|
|
|
|
|
|
--- gcc/testsuite/gfortran.dg/rh1369183.f90.jj 2017-03-07 18:37:39.574775432 +0100
|
|
|
|
+++ gcc/testsuite/gfortran.dg/rh1369183.f90 2017-03-07 18:38:38.423993194 +0100
|
|
|
|
@@ -0,0 +1,22 @@
|
|
|
|
+! { dg-do compile }
|
|
|
|
+
|
|
|
|
+module mod1369183
|
|
|
|
+ implicit none
|
|
|
|
+ contains
|
|
|
|
+ subroutine sub(test)
|
|
|
|
+ type test_t
|
|
|
|
+ sequence
|
|
|
|
+ integer(4) type
|
|
|
|
+ end type test_t
|
|
|
|
+ type(test_t),intent(inout) :: test
|
|
|
|
+ end subroutine sub
|
|
|
|
+end module mod1369183
|
|
|
|
+subroutine rh1369183
|
|
|
|
+ use mod1369183
|
|
|
|
+ implicit none
|
|
|
|
+ type test_t
|
|
|
|
+ sequence
|
|
|
|
+ end type test_t
|
|
|
|
+ type(test_t) :: tst
|
|
|
|
+ call sub(tst) ! { dg-error "Type mismatch in argument" }
|
|
|
|
+end subroutine rh1369183
|