mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-03 06:20:27 +08:00
re PR fortran/50408 (ICE in transfer_expr)
2011-11-25 Tobias Burnus <burnus@net-b.de> PR fortran/50408 * trans-decl.c (gfc_get_module_backend_decl): Also copy ts.u.derived from the gsym if the ts.type is BT_CLASS. (gfc_get_extern_function_decl): Copy also the backend_decl for the symbol's ts.u.{derived,cl} from the gsym. * trans-types.c (gfc_copy_dt_decls_ifequal): Directly return if "from" and "to" are the same. 2011-11-25 Tobias Burnus <burnus@net-b.de> PR fortran/50408 * gfortran.dg/whole_file_35.f90: New. From-SVN: r181725
This commit is contained in:
parent
8594f636ac
commit
f29bda8308
@ -1,3 +1,13 @@
|
||||
2011-11-25 Tobias Burnus <burnus@net-b.de>
|
||||
|
||||
PR fortran/50408
|
||||
* trans-decl.c (gfc_get_module_backend_decl): Also copy
|
||||
ts.u.derived from the gsym if the ts.type is BT_CLASS.
|
||||
(gfc_get_extern_function_decl): Copy also the backend_decl
|
||||
for the symbol's ts.u.{derived,cl} from the gsym.
|
||||
* trans-types.c (gfc_copy_dt_decls_ifequal): Directly
|
||||
return if "from" and "to" are the same.
|
||||
|
||||
2011-11-25 Tobias Burnus <burnus@net-b.de>
|
||||
|
||||
PR fortran/51302
|
||||
|
@ -718,7 +718,7 @@ gfc_get_module_backend_decl (gfc_symbol *sym)
|
||||
}
|
||||
else if (s->backend_decl)
|
||||
{
|
||||
if (sym->ts.type == BT_DERIVED)
|
||||
if (sym->ts.type == BT_DERIVED || sym->ts.type == BT_CLASS)
|
||||
gfc_copy_dt_decls_ifequal (s->ts.u.derived, sym->ts.u.derived,
|
||||
true);
|
||||
else if (sym->ts.type == BT_CHARACTER)
|
||||
@ -1670,6 +1670,11 @@ gfc_get_extern_function_decl (gfc_symbol * sym)
|
||||
gfc_find_symbol (sym->name, gsym->ns, 0, &s);
|
||||
if (s && s->backend_decl)
|
||||
{
|
||||
if (sym->ts.type == BT_DERIVED || sym->ts.type == BT_CLASS)
|
||||
gfc_copy_dt_decls_ifequal (s->ts.u.derived, sym->ts.u.derived,
|
||||
true);
|
||||
else if (sym->ts.type == BT_CHARACTER)
|
||||
sym->ts.u.cl->backend_decl = s->ts.u.cl->backend_decl;
|
||||
sym->backend_decl = s->backend_decl;
|
||||
return sym->backend_decl;
|
||||
}
|
||||
|
@ -2188,6 +2188,9 @@ gfc_copy_dt_decls_ifequal (gfc_symbol *from, gfc_symbol *to,
|
||||
gfc_component *to_cm;
|
||||
gfc_component *from_cm;
|
||||
|
||||
if (from == to)
|
||||
return 1;
|
||||
|
||||
if (from->backend_decl == NULL
|
||||
|| !gfc_compare_derived_types (from, to))
|
||||
return 0;
|
||||
|
@ -1,3 +1,8 @@
|
||||
2011-11-25 Tobias Burnus <burnus@net-b.de>
|
||||
|
||||
PR fortran/50408
|
||||
* gfortran.dg/whole_file_35.f90: New.
|
||||
|
||||
2011-11-25 Tobias Burnus <burnus@net-b.de>
|
||||
|
||||
PR fortran/51302
|
||||
|
28
gcc/testsuite/gfortran.dg/whole_file_35.f90
Normal file
28
gcc/testsuite/gfortran.dg/whole_file_35.f90
Normal file
@ -0,0 +1,28 @@
|
||||
! { dg-do compile }
|
||||
!
|
||||
! PR fortran/50408
|
||||
!
|
||||
! Contributed by Vittorio Zecca
|
||||
!
|
||||
module m
|
||||
type int
|
||||
integer :: val
|
||||
end type int
|
||||
interface ichar
|
||||
module procedure uch
|
||||
end interface
|
||||
contains
|
||||
function uch (c)
|
||||
character (len=1), intent (in) :: c
|
||||
type (int) :: uch
|
||||
intrinsic ichar
|
||||
uch%val = 127 - ichar (c)
|
||||
end function uch
|
||||
end module m
|
||||
|
||||
program p
|
||||
use m
|
||||
print *,ichar('~') ! must print "1"
|
||||
end program p
|
||||
|
||||
! { dg-final { cleanup-modules "m" } }
|
Loading…
x
Reference in New Issue
Block a user