diff options
author | Janus Weil <janus@gcc.gnu.org> | 2009-08-21 11:43:04 +0200 |
---|---|---|
committer | Janus Weil <janus@gcc.gnu.org> | 2009-08-21 11:43:04 +0200 |
commit | 50dbf0b414c3a0afe3f1fbe2143511882d5277d9 (patch) | |
tree | a3b5977c83d08689c7361a13185588b3559d8618 /gcc/fortran/primary.c | |
parent | 4b8c1a924a55851b83b26391e1703bd15c1c4066 (diff) | |
download | gcc-50dbf0b414c3a0afe3f1fbe2143511882d5277d9.zip gcc-50dbf0b414c3a0afe3f1fbe2143511882d5277d9.tar.gz gcc-50dbf0b414c3a0afe3f1fbe2143511882d5277d9.tar.bz2 |
re PR fortran/41106 ([F03] Procedure Pointers with CHARACTER results)
2009-08-21 Janus Weil <janus@gcc.gnu.org>
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 <janus@gcc.gnu.org>
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
Diffstat (limited to 'gcc/fortran/primary.c')
-rw-r--r-- | gcc/fortran/primary.c | 4 |
1 files changed, 3 insertions, 1 deletions
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. */ |