This is the mail archive of the
fortran@gcc.gnu.org
mailing list for the GNU Fortran project.
Re: [Patch, Fortran] PR39630: Procedure Pointer Components, Part 1 (NOPASS only)
- From: Tobias Burnus <burnus at net-b dot de>
- To: Janus Weil <janus at gcc dot gnu dot org>
- Cc: gfortran <fortran at gcc dot gnu dot org>, gcc patches <gcc-patches at gcc dot gnu dot org>
- Date: Tue, 05 May 2009 22:47:42 +0200
- Subject: Re: [Patch, Fortran] PR39630: Procedure Pointer Components, Part 1 (NOPASS only)
- References: <854832d40905041531s12fcd1fdoba9b1f67cd12a3bf@mail.gmail.com>
Hi Janus,
Janus Weil wrote:
> Regression-test on x86_64-unknown-linux-gnu succeeded
> without any failures. Ok for trunk?
>
Looks OK except for the nit below. Thanks for the patch.
Please change
+tree gfc_get_proc_ptr_comp (gfc_se *se, gfc_expr *e)
to
+tree
+gfc_...
to enable one to grep for ^gfc_get ...
Otherwise, I think for the "dg-do run" test cases, it would be good not
only to check whether they run successfully but also check whether they
do the right thing. Currently, a nop operation would succeed as well -
visually the output would then be different, but the testsuite does not
check this. For this patch, however, it should not be that important.
Tobias
> 2009-05-04 Janus Weil <janus@gcc.gnu.org>
> Paul Thomas <pault@gcc.gnu.org>
>
> PR fortran/39630
> * decl.c (match_procedure_interface): New function to match the
> interface for a PROCEDURE statement.
> (match_procedure_decl): Call match_procedure_interface.
> (match_ppc_decl): New function to match the declaration of a
> procedure pointer component.
> (gfc_match_procedure): Call match_ppc_decl.
> (match_binding_attributes): Add new argument 'ppc' and handle the
> POINTER attribute for procedure pointer components.
> (match_procedure_in_type,gfc_match_generic): Added new argument to
> match_binding_attributes.
> * expr.c (free_expr0,gfc_copy_expr,gfc_simplify_expr): Handle EXPR_PPC.
> (gfc_check_pointer_assign): Handle procedure pointer components, but no
> full checking yet.
> (is_proc_ptr_comp): New function to determine if an expression is a
> procedure pointer component.
> * gfortran.h (expr_t): Add EXPR_PPC.
> (symbol_attribute): Add new member 'proc_pointer_comp'.
> (gfc_component): Add new member 'formal'.
> (gfc_exec_op): Add EXEC_CALL_PPC.
> (gfc_get_default_type): Changed first argument.
> (is_proc_ptr_comp): Add prototype.
> (gfc_match_varspec): Add new argument.
> * interface.c (compare_actual_formal): Handle procedure pointer
> components.
> * match.c (gfc_match_pointer_assignment,match_typebound_call): Handle
> procedure pointer components.
> * module.c (mio_expr): Handle EXPR_PPC.
> * parse.c (parse_derived): Handle procedure pointer components.
> * primary.c (gfc_match_varspec): Add new argument 'ppc_arg' and handle
> procedure pointer components.
> (gfc_variable_attr): Handle procedure pointer components.
> (gfc_match_rvalue): Added new argument to gfc_match_varspec and changed
> first argument of gfc_get_default_type.
> (match_variable): Added new argument to gfc_match_varspec.
> * resolve.c (resolve_entries,set_type,resolve_fl_parameter): Changed
> first argument of gfc_get_default_type.
> (resolve_structure_cons,resolve_actual_arglist): Handle procedure
> pointer components.
> (resolve_ppc_call): New function to resolve a call to a procedure
> pointer component (subroutine).
> (resolve_expr_ppc): New function to resolve a call to a procedure
> pointer component (function).
> (gfc_resolve_expr): Handle EXPR_PPC.
> (resolve_code): Handle EXEC_CALL_PPC.
> (resolve_fl_derived): Copy the interface for a procedure pointer
> component.
> (resolve_symbol): Fix overlong line.
> * st.c (gfc_free_statement): Handle EXEC_CALL_PPC.
> * symbol.c (gfc_get_default_type): Changed first argument.
> (gfc_set_default_type): Changed first argument of gfc_get_default_type.
> (gfc_add_component): Initialize ts.type to BT_UNKNOWN.
> * trans.h (gfc_conv_function_call): Renamed.
> * trans.c (gfc_trans_code): Handle EXEC_CALL_PPC.
> * trans-expr.c (gfc_conv_component_ref): Ditto.
> (gfc_conv_function_val): Rename to 'conv_function_val', add new
> argument 'expr' and handle procedure pointer components.
> (gfc_conv_operator_assign): Renamed gfc_conv_function_val.
> (gfc_apply_interface_mapping_to_expr): Handle EXPR_PPC.
> (gfc_conv_function_call): Rename to 'gfc_conv_procedure_call', add new
> argument 'expr' and handle procedure pointer components.
> (gfc_get_proc_ptr_comp): New function to get the backend decl for a
> procedure pointer component.
> (gfc_conv_function_expr): Renamed gfc_conv_function_call.
> (gfc_conv_structure): Handle procedure pointer components.
> * trans-intrinsic.c (gfc_conv_intrinsic_funcall,
> conv_generic_with_optional_char_arg): Renamed gfc_conv_function_call.
> * trans-stmt.h (gfc_get_proc_ptr_comp): Add prototype.
> * trans-stmt.c (gfc_trans_call): Renamed gfc_conv_function_call.
> * trans-types.h (gfc_get_ppc_type): Add prototype.
> * trans-types.c (gfc_get_ppc_type): New function to build a tree node
> for a procedure pointer component.
> (gfc_get_derived_type): Handle procedure pointer components.
>
>
> 2009-05-04 Janus Weil <janus@gcc.gnu.org>
>
> PR fortran/39630
> * gfortran.dg/proc_decl_1.f90: Modified.
> * gfortran.dg/proc_ptr_comp_1.f90: New.
> * gfortran.dg/proc_ptr_comp_2.f90: New.
> * gfortran.dg/proc_ptr_comp_3.f90: New.
> * gfortran.dg/proc_ptr_comp_4.f90: New.
> * gfortran.dg/proc_ptr_comp_5.f90: New.
> * gfortran.dg/proc_ptr_comp_6.f90: New.
>