re PR fortran/55827 (ICE with multiple fortran modules and character lenght determined by an interfaced pure function)
2013-01-07 Steven G. Kargl <kargl@gcc.gnu.org> Mikael Morin <mikael@gcc.gnu.org> PR fortran/55827 * class.c (gfc_fix_class_refs): Adapt ts initialization for the case e->symtree == NULL. * trans-expr.c (gfc_conv_function_expr): Init sym earlier. Use it. 2013-01-07 Steven G. Kargl <kargl@gcc.gnu.org> Mikael Morin <mikael@gcc.gnu.org> PR fortran/55827 * gfortran.dg/use_22.f90: New test. Co-Authored-By: Mikael Morin <mikael@gcc.gnu.org> From-SVN: r194985
This commit is contained in:
parent
1e0ae1eaf5
commit
1e7aecb585
|
@ -1,3 +1,11 @@
|
|||
2013-01-07 Steven G. Kargl <kargl@gcc.gnu.org>
|
||||
Mikael Morin <mikael@gcc.gnu.org>
|
||||
|
||||
PR fortran/55827
|
||||
* class.c (gfc_fix_class_refs): Adapt ts initialization for the case
|
||||
e->symtree == NULL.
|
||||
* trans-expr.c (gfc_conv_function_expr): Init sym earlier. Use it.
|
||||
|
||||
2012-12-20 Tobias Burnus <burnus@net-b.de>
|
||||
|
||||
PR fortran/54818
|
||||
|
|
|
@ -162,7 +162,23 @@ gfc_fix_class_refs (gfc_expr *e)
|
|||
&& e->value.function.isym != NULL))
|
||||
return;
|
||||
|
||||
ts = &e->symtree->n.sym->ts;
|
||||
if (e->expr_type == EXPR_VARIABLE)
|
||||
ts = &e->symtree->n.sym->ts;
|
||||
else
|
||||
{
|
||||
gfc_symbol *func;
|
||||
|
||||
gcc_assert (e->expr_type == EXPR_FUNCTION);
|
||||
if (e->value.function.esym != NULL)
|
||||
func = e->value.function.esym;
|
||||
else
|
||||
func = e->symtree->n.sym;
|
||||
|
||||
if (func->result != NULL)
|
||||
ts = &func->result->ts;
|
||||
else
|
||||
ts = &func->ts;
|
||||
}
|
||||
|
||||
for (ref = &e->ref; *ref != NULL; ref = &(*ref)->next)
|
||||
{
|
||||
|
|
|
@ -4799,20 +4799,20 @@ gfc_conv_function_expr (gfc_se * se, gfc_expr * expr)
|
|||
return;
|
||||
}
|
||||
|
||||
/* We distinguish statement functions from general functions to improve
|
||||
runtime performance. */
|
||||
if (expr->symtree->n.sym->attr.proc == PROC_ST_FUNCTION)
|
||||
{
|
||||
gfc_conv_statement_function (se, expr);
|
||||
return;
|
||||
}
|
||||
|
||||
/* expr.value.function.esym is the resolved (specific) function symbol for
|
||||
most functions. However this isn't set for dummy procedures. */
|
||||
sym = expr->value.function.esym;
|
||||
if (!sym)
|
||||
sym = expr->symtree->n.sym;
|
||||
|
||||
/* We distinguish statement functions from general functions to improve
|
||||
runtime performance. */
|
||||
if (sym->attr.proc == PROC_ST_FUNCTION)
|
||||
{
|
||||
gfc_conv_statement_function (se, expr);
|
||||
return;
|
||||
}
|
||||
|
||||
gfc_conv_procedure_call (se, sym, expr->value.function.actual, expr, NULL);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
2013-01-07 Steven G. Kargl <kargl@gcc.gnu.org>
|
||||
Mikael Morin <mikael@gcc.gnu.org>
|
||||
|
||||
PR fortran/55827
|
||||
* gfortran.dg/use_22.f90: New test.
|
||||
|
||||
2013-01-07 Terry Guo <terry.guo@arm.com>
|
||||
|
||||
Backport from mainline
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
! { dg-do compile }
|
||||
!
|
||||
! PR fortran/55827
|
||||
! gfortran used to ICE with the call to `tostring' depending on how the
|
||||
! `tostring' symbol was USE-associated.
|
||||
!
|
||||
! Contributed by Lorenz Hüdepohl <bugs@stellardeath.org>
|
||||
|
||||
module stringutils
|
||||
interface
|
||||
pure function strlen(handle) result(len)
|
||||
integer, intent(in) :: handle
|
||||
integer :: len
|
||||
end function
|
||||
end interface
|
||||
end module
|
||||
module intermediate ! does not die if this module is merged with stringutils
|
||||
contains
|
||||
function tostring(handle) result(string)
|
||||
use stringutils
|
||||
integer, intent(in) :: handle
|
||||
character(len=strlen(handle)) :: string
|
||||
end function
|
||||
end module
|
||||
module usage
|
||||
contains
|
||||
subroutine dies_here(handle)
|
||||
use stringutils ! does not die if this unnecessary line is omitted or placed after "use intermediate"
|
||||
use intermediate
|
||||
integer :: handle
|
||||
write(*,*) tostring(handle) ! ICE
|
||||
end subroutine
|
||||
end module
|
||||
|
||||
|
Loading…
Reference in New Issue