This is the mail archive of the fortran@gcc.gnu.org mailing list for the GNU Fortran project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [Patch, Fortran] PR39630: Procedure Pointer Components, Part 1 (NOPASS only)


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.
>   


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]