From 50dbf0b414c3a0afe3f1fbe2143511882d5277d9 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Fri, 21 Aug 2009 11:43:04 +0200 Subject: re PR fortran/41106 ([F03] Procedure Pointers with CHARACTER results) 2009-08-21 Janus Weil PR fortran/41106 * primary.c (gfc_variable_attr): Make it work also on EXPR_FUNCTION. (gfc_expr_attr): Use gfc_variable_attr for procedure pointer components. * resolve.c (resolve_fl_derived): Handle CHARACTER-valued procedure pointer components. * trans-expr.c (gfc_conv_component_ref): Ditto. (gfc_conv_variable): Ditto. (gfc_conv_procedure_call): Ditto. (gfc_trans_pointer_assignment): Ditto. * trans-types.c (gfc_get_derived_type): Ditto. 2009-08-21 Janus Weil PR fortran/41106 * gfortran.dg/proc_ptr_23.f90: New. * gfortran.dg/proc_ptr_comp_15.f90: New. * gfortran.dg/proc_ptr_comp_16.f90: New. * gfortran.dg/proc_ptr_comp_17.f90: New. From-SVN: r150987 --- gcc/fortran/primary.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'gcc/fortran/primary.c') diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c index e0021c5..0a917f7 100644 --- a/gcc/fortran/primary.c +++ b/gcc/fortran/primary.c @@ -1938,7 +1938,7 @@ gfc_variable_attr (gfc_expr *expr, gfc_typespec *ts) symbol_attribute attr; gfc_ref *ref; - if (expr->expr_type != EXPR_VARIABLE) + if (expr->expr_type != EXPR_VARIABLE && expr->expr_type != EXPR_FUNCTION) gfc_internal_error ("gfc_variable_attr(): Expression isn't a variable"); ref = expr->ref; @@ -2032,6 +2032,8 @@ gfc_expr_attr (gfc_expr *e) if (e->value.function.esym != NULL) attr = e->value.function.esym->result->attr; + else + attr = gfc_variable_attr (e, NULL); /* TODO: NULL() returns pointers. May have to take care of this here. */ -- cgit v1.1