re PR fortran/58880 ([OOP] ICE on valid with FINAL function and type extension)

2014-03-27  Tobias Burnus  <burnus@net-b.de>

        PR fortran/58880
        * trans-expr.c (gfc_conv_scalar_to_descriptor): Fix handling
        of nonpointers.

2014-03-27  Tobias Burnus  <burnus@net-b.de>

        PR fortran/58880
        * gfortran.dg/finalize_24.f90: New.

From-SVN: r208879
This commit is contained in:
Tobias Burnus 2014-03-27 22:17:43 +01:00
parent 117f16fbba
commit 7651172f59
4 changed files with 45 additions and 4 deletions

View File

@ -1,3 +1,9 @@
2014-03-27 Tobias Burnus <burnus@net-b.de>
PR fortran/58880
* trans-expr.c (gfc_conv_scalar_to_descriptor): Fix handling
of nonpointers.
2014-03-26 Dominique d'Humieres <dominiq@lps.ens.fr>
PR fortran/34928

View File

@ -69,14 +69,16 @@ gfc_conv_scalar_to_descriptor (gfc_se *se, tree scalar, symbol_attribute attr)
type = get_scalar_to_descriptor_type (scalar, attr);
desc = gfc_create_var (type, "desc");
DECL_ARTIFICIAL (desc) = 1;
if (!POINTER_TYPE_P (TREE_TYPE (scalar)))
scalar = gfc_build_addr_expr (NULL_TREE, scalar);
gfc_add_modify (&se->pre, gfc_conv_descriptor_dtype (desc),
gfc_get_dtype (type));
gfc_conv_descriptor_data_set (&se->pre, desc, scalar);
/* Copy pointer address back - but only if it could have changed and
if the actual argument is a pointer and not, e.g., NULL(). */
if ((attr.pointer || attr.allocatable)
&& attr.intent != INTENT_IN && POINTER_TYPE_P (TREE_TYPE (scalar)))
if ((attr.pointer || attr.allocatable) && attr.intent != INTENT_IN)
gfc_add_modify (&se->post, scalar,
fold_convert (TREE_TYPE (scalar),
gfc_conv_descriptor_data_get (desc)));

View File

@ -1,3 +1,8 @@
2014-03-27 Tobias Burnus <burnus@net-b.de>
PR fortran/58880
* gfortran.dg/finalize_24.f90: New.
2014-03-27 Michael Meissner <meissner@linux.vnet.ibm.com>
* gcc.target/powerpc/p8vector-vbpermq.c: New test to test the
@ -43,8 +48,8 @@
2014-03-26 Fabien Chêne <fabien@gcc.gnu.org>
PR c++/52369
* g++.dg/init/const10.C: New.
PR c++/52369
* g++.dg/init/const10.C: New.
* g++.dg/init/const11.C: New.
* g++.dg/init/pr25811.C: Adjust.
* g++.dg/init/pr29043.C: Likewise.

View File

@ -0,0 +1,28 @@
! { dg-do compile }
!
! PR fortran/58880
!
! Contributed by Andrew Benson
!
module gn
type sl
integer, allocatable, dimension(:) :: lv
contains
final :: sld
end type sl
type :: nde
type(sl) :: r
end type nde
contains
subroutine ndm(s)
type(nde), intent(inout) :: s
type(nde) :: i
i=s
end subroutine ndm
subroutine sld(s)
implicit none
type(sl), intent(inout) :: s
return
end subroutine sld
end module gn