Skip to content
Snippets Groups Projects
  • Paul Thomas's avatar
    ff3598bc
    re PR fortran/34640 (ICE when assigning item of a derived-component to a pointer) · ff3598bc
    Paul Thomas authored
    2017-09-10  Paul Thomas  <pault@gcc.gnu.org>
    
    	PR fortran/34640
    	PR fortran/40737
    	PR fortran/55763
    	PR fortran/57019
    	PR fortran/57116
    
    	* expr.c (is_subref_array): Add class pointer array dummies
    	to the list of expressions that return true.
    	* trans-array.c: Add SPAN_FIELD and update indices for
    	subsequent fields.
    	(gfc_conv_descriptor_span, gfc_conv_descriptor_span_get,
    	gfc_conv_descriptor_span_set, is_pointer_array,
    	get_array_span): New functions.
    	(gfc_get_descriptor_offsets_for_info): New function to preserve
    	API for access to descriptor fields for trans-types.c.
    	(gfc_conv_scalarized_array_ref): If the expression is a subref
    	array, make sure that info->descriptor is a descriptor type.
    	Otherwise, if info->descriptor is a pointer array, set 'decl'
    	and fix it if it is a component reference.
    	(build_array_ref): Simplify handling of class array refs by
    	passing the vptr to gfc_build_array_ref rather than generating
    	the pointer arithmetic in this function.
    	(gfc_conv_array_ref): As in gfc_conv_scalarized_array_ref, set
    	'decl'.
    	(gfc_array_allocate): Set the span field if this is a pointer
    	array. Use the expr3 element size if it is available, so that
    	the dynamic type element size is used.
    	(gfc_conv_expr_descriptor): Set the span field for pointer
    	assignments.
    	* trans-array.h: Prototypes for gfc_conv_descriptor_span_get
    	gfc_conv_descriptor_span_set and
    	gfc_get_descriptor_offsets_for_info added.
    	trans-decl.c (gfc_get_symbol_decl): If a non-class pointer
    	array, mark the declaration as a GFC_DECL_PTR_ARRAY_P. Remove
    	the setting of GFC_DECL_SPAN.
    	(gfc_trans_deferred_vars): Set the span field to zero in thge
    	originating scope.
    	* trans-expr.c (gfc_conv_procedure_call): Do not use copy-in/
    	copy-out to pass subref expressions to a pointer dummy.
    	(gfc_trans_pointer_assignment): Remove code for setting of
    	GFC_DECL_SPAN. Set the 'span' field for non-class pointers to
    	class function results. Likewise for rank remap. In the case
    	that the target is not a whole array, use the target array ref
    	for remap and, since the 'start' indices are missing, set the
    	lbounds to one, as required by the standard.
    	* trans-intrinsic.c (conv_expr_ref_to_caf_ref): Pick up the
    	'token' offset from the field decl in the descriptor.
    	(conv_isocbinding_subroutine): Set the 'span' field.
    	* trans-io.c (gfc_trans_transfer): Always scalarize pointer
    	array io.
    	* trans-stmt.c (trans_associate_var): Set the 'span' field.
    	* trans-types.c (gfc_get_array_descriptor_base): Add the 'span'
    	field to the array descriptor.
    	(gfc_get_derived_type): Pointer array components are marked as
    	GFC_DECL_PTR_ARRAY_P.
    	(gfc_get_array_descr_info): Replaced API breaking code for
    	descriptor offset calling gfc_get_descriptor_offsets_for_info.
    	* trans.c (get_array_span): New function.
    	(gfc_build_array_ref): Simplify by calling get_array_span and
    	obtain 'span' if 'decl' or 'vptr' present.
    	* trans.h : Rename DECL_LANG_FLAG_6, GFC_DECL_SUBREF_ARRAY_P,
    	as GFC_DECL_PTR_ARRAY_P.
    
    
    2017-09-10  Paul Thomas  <pault@gcc.gnu.org>
    
    	PR fortran/34640
    	* gfortran.dg/associate_24.f90: New test.
    	* gfortran.dg/assumed_type_2.f90: Adjust some of the tree dump
    	checks.
    	* gfortran.dg/no_arg_check_2.f90: Likewise.
    	* gfortran.dg/pointer_array_1.f90: New test.
    	* gfortran.dg/pointer_array_2.f90: New test.
    	* gfortran.dg/pointer_array_7.f90: New test.
    	* gfortran.dg/pointer_array_8.f90: New test.
    	* gfortran.dg/pointer_array_component_1.f90: New test.
    	* gfortran.dg/pointer_array_component_2.f90: New test.
    	* gfortran.dg/goacc/kernels-alias-4.f95: Bump up both tree scan
    	counts by 1.
    
    	PR fortran/40737
    	* gfortran.dg/pointer_array_3.f90: New test.
    
    	PR fortran/57116
    	* gfortran.dg/pointer_array_4.f90: New test.
    
    	PR fortran/55763
    	* gfortran.dg/pointer_array_5.f90: New test.
    
    	PR fortran/57019
    	* gfortran.dg/pointer_array_6.f90: New test.
    
    2017-09-10  Paul Thomas  <pault@gcc.gnu.org>
    
    	PR fortran/34640
    	* libgfortran/libgfortran.h: Add span field to descriptor.
    	* libgfortran/libtool-version : Bump up version number to 5:0:0.
    
    From-SVN: r251949
    ff3598bc
    History
    re PR fortran/34640 (ICE when assigning item of a derived-component to a pointer)
    Paul Thomas authored
    2017-09-10  Paul Thomas  <pault@gcc.gnu.org>
    
    	PR fortran/34640
    	PR fortran/40737
    	PR fortran/55763
    	PR fortran/57019
    	PR fortran/57116
    
    	* expr.c (is_subref_array): Add class pointer array dummies
    	to the list of expressions that return true.
    	* trans-array.c: Add SPAN_FIELD and update indices for
    	subsequent fields.
    	(gfc_conv_descriptor_span, gfc_conv_descriptor_span_get,
    	gfc_conv_descriptor_span_set, is_pointer_array,
    	get_array_span): New functions.
    	(gfc_get_descriptor_offsets_for_info): New function to preserve
    	API for access to descriptor fields for trans-types.c.
    	(gfc_conv_scalarized_array_ref): If the expression is a subref
    	array, make sure that info->descriptor is a descriptor type.
    	Otherwise, if info->descriptor is a pointer array, set 'decl'
    	and fix it if it is a component reference.
    	(build_array_ref): Simplify handling of class array refs by
    	passing the vptr to gfc_build_array_ref rather than generating
    	the pointer arithmetic in this function.
    	(gfc_conv_array_ref): As in gfc_conv_scalarized_array_ref, set
    	'decl'.
    	(gfc_array_allocate): Set the span field if this is a pointer
    	array. Use the expr3 element size if it is available, so that
    	the dynamic type element size is used.
    	(gfc_conv_expr_descriptor): Set the span field for pointer
    	assignments.
    	* trans-array.h: Prototypes for gfc_conv_descriptor_span_get
    	gfc_conv_descriptor_span_set and
    	gfc_get_descriptor_offsets_for_info added.
    	trans-decl.c (gfc_get_symbol_decl): If a non-class pointer
    	array, mark the declaration as a GFC_DECL_PTR_ARRAY_P. Remove
    	the setting of GFC_DECL_SPAN.
    	(gfc_trans_deferred_vars): Set the span field to zero in thge
    	originating scope.
    	* trans-expr.c (gfc_conv_procedure_call): Do not use copy-in/
    	copy-out to pass subref expressions to a pointer dummy.
    	(gfc_trans_pointer_assignment): Remove code for setting of
    	GFC_DECL_SPAN. Set the 'span' field for non-class pointers to
    	class function results. Likewise for rank remap. In the case
    	that the target is not a whole array, use the target array ref
    	for remap and, since the 'start' indices are missing, set the
    	lbounds to one, as required by the standard.
    	* trans-intrinsic.c (conv_expr_ref_to_caf_ref): Pick up the
    	'token' offset from the field decl in the descriptor.
    	(conv_isocbinding_subroutine): Set the 'span' field.
    	* trans-io.c (gfc_trans_transfer): Always scalarize pointer
    	array io.
    	* trans-stmt.c (trans_associate_var): Set the 'span' field.
    	* trans-types.c (gfc_get_array_descriptor_base): Add the 'span'
    	field to the array descriptor.
    	(gfc_get_derived_type): Pointer array components are marked as
    	GFC_DECL_PTR_ARRAY_P.
    	(gfc_get_array_descr_info): Replaced API breaking code for
    	descriptor offset calling gfc_get_descriptor_offsets_for_info.
    	* trans.c (get_array_span): New function.
    	(gfc_build_array_ref): Simplify by calling get_array_span and
    	obtain 'span' if 'decl' or 'vptr' present.
    	* trans.h : Rename DECL_LANG_FLAG_6, GFC_DECL_SUBREF_ARRAY_P,
    	as GFC_DECL_PTR_ARRAY_P.
    
    
    2017-09-10  Paul Thomas  <pault@gcc.gnu.org>
    
    	PR fortran/34640
    	* gfortran.dg/associate_24.f90: New test.
    	* gfortran.dg/assumed_type_2.f90: Adjust some of the tree dump
    	checks.
    	* gfortran.dg/no_arg_check_2.f90: Likewise.
    	* gfortran.dg/pointer_array_1.f90: New test.
    	* gfortran.dg/pointer_array_2.f90: New test.
    	* gfortran.dg/pointer_array_7.f90: New test.
    	* gfortran.dg/pointer_array_8.f90: New test.
    	* gfortran.dg/pointer_array_component_1.f90: New test.
    	* gfortran.dg/pointer_array_component_2.f90: New test.
    	* gfortran.dg/goacc/kernels-alias-4.f95: Bump up both tree scan
    	counts by 1.
    
    	PR fortran/40737
    	* gfortran.dg/pointer_array_3.f90: New test.
    
    	PR fortran/57116
    	* gfortran.dg/pointer_array_4.f90: New test.
    
    	PR fortran/55763
    	* gfortran.dg/pointer_array_5.f90: New test.
    
    	PR fortran/57019
    	* gfortran.dg/pointer_array_6.f90: New test.
    
    2017-09-10  Paul Thomas  <pault@gcc.gnu.org>
    
    	PR fortran/34640
    	* libgfortran/libgfortran.h: Add span field to descriptor.
    	* libgfortran/libtool-version : Bump up version number to 5:0:0.
    
    From-SVN: r251949