re PR fortran/90498 (ICE with select type/associate and derived type argument containing class(*))
2019-05-19 Paul Thomas <pault@gcc.gnu.org> PR fortran/90498 * trans-stmt.c (trans_associate_var) Do not use the saved descriptor if the expression is a COMPONENT_REF. 2019-05-19 Paul Thomas <pault@gcc.gnu.org> PR fortran/90498 * gfortran.dg/associate_48.f90 : New test. From-SVN: r271380
This commit is contained in:
parent
20733f1b0d
commit
d05ccada17
@ -1,3 +1,9 @@
|
||||
2019-05-19 Paul Thomas <pault@gcc.gnu.org>
|
||||
|
||||
PR fortran/90498
|
||||
* trans-stmt.c (trans_associate_var) Do not use the saved
|
||||
descriptor if the expression is a COMPONENT_REF.
|
||||
|
||||
2019-05-19 Thomas Koenig <tkoenig@gcc.gnu.org>
|
||||
|
||||
PR fortran/90329
|
||||
|
@ -1858,7 +1858,8 @@ trans_associate_var (gfc_symbol *sym, gfc_wrapped_block *block)
|
||||
{
|
||||
if (e->symtree
|
||||
&& DECL_LANG_SPECIFIC (e->symtree->n.sym->backend_decl)
|
||||
&& GFC_DECL_SAVED_DESCRIPTOR (e->symtree->n.sym->backend_decl))
|
||||
&& GFC_DECL_SAVED_DESCRIPTOR (e->symtree->n.sym->backend_decl)
|
||||
&& TREE_CODE (target_expr) != COMPONENT_REF)
|
||||
/* Use the original class descriptor stored in the saved
|
||||
descriptor to get the target_expr. */
|
||||
target_expr =
|
||||
|
@ -1,3 +1,8 @@
|
||||
2019-05-19 Paul Thomas <pault@gcc.gnu.org>
|
||||
|
||||
PR fortran/90498
|
||||
* gfortran.dg/associate_48.f90 : New test.
|
||||
|
||||
2019-05-19 Thomas Koenig <tkoenig@gcc.gnu.org>
|
||||
|
||||
PR fortran/78290
|
||||
@ -429,7 +434,7 @@
|
||||
|
||||
2019-05-15 Iain Sandoe <iain@sandoe.co.uk>
|
||||
|
||||
* lib/target-supports.exp
|
||||
* lib/target-supports.exp
|
||||
(check_effective_target_powerpc_p8vector_ok): No support for Darwin.
|
||||
(check_effective_target_powerpc_p9vector_ok): Likewise.
|
||||
(check_effective_target_powerpc_float128_sw_ok): Likewise.
|
||||
|
41
gcc/testsuite/gfortran.dg/associate_48.f90
Normal file
41
gcc/testsuite/gfortran.dg/associate_48.f90
Normal file
@ -0,0 +1,41 @@
|
||||
! { dg=do run }
|
||||
!
|
||||
! Test the fix for PR90498.
|
||||
!
|
||||
! Contributed by Vladimir Fuka <vladimir.fuka@gmail.com>
|
||||
!
|
||||
type field_names_a
|
||||
class(*), pointer :: var(:) =>null()
|
||||
end type
|
||||
|
||||
type(field_names_a),pointer :: a(:)
|
||||
allocate (a(2))
|
||||
|
||||
allocate (a(1)%var(2), source = ["hello"," vlad"])
|
||||
allocate (a(2)%var(2), source = ["HELLO"," VLAD"])
|
||||
call s(a)
|
||||
deallocate (a(1)%var)
|
||||
deallocate (a(2)%var)
|
||||
deallocate (a)
|
||||
contains
|
||||
subroutine s(a)
|
||||
|
||||
type(field_names_a) :: a(:)
|
||||
|
||||
select type (var => a(1)%var)
|
||||
type is (character(*))
|
||||
if (any (var .ne. ["hello"," vlad"])) stop 1
|
||||
class default
|
||||
stop
|
||||
end select
|
||||
|
||||
associate (var => a(2)%var)
|
||||
select type (var)
|
||||
type is (character(*))
|
||||
if (any (var .ne. ["HELLO"," VLAD"])) stop 2
|
||||
class default
|
||||
stop
|
||||
end select
|
||||
end associate
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue
Block a user