Skip to content
Snippets Groups Projects
Commit 4cb07a38 authored by Paul Thomas's avatar Paul Thomas
Browse files

Fortran: Fix class transformational intrinsic calls [PR102689]

2024-08-06  Paul Thomas  <pault@gcc.gnu.org>

gcc/fortran
	PR fortran/102689
	* trans-array.cc (get_array_ref_dim_for_loop_dim): Use the arg1
	class container carried in ss->info as the seed for a lhs in
	class valued transformational intrinsic calls that are not the
	rhs of an assignment. Otherwise, the lhs variable expression is
	taken from the loop chain. For this latter case, the _vptr and
	_len fields are set.
	(gfc_trans_create_temp_array): Use either the lhs expression
	seeds to build a class variable that will take the returned
	descriptor as its _data field. In the case that the arg1 expr.
	is used, a class typespec must be built with the correct rank
	and the _vptr and _len fields set. The element size is provided
	for the temporary allocation and to set the descriptor span.
	(gfc_array_init_size): When an intrinsic type scalar expr3 is
	used in allocation of a class array, use its element size in
	the descriptor dtype.
	* trans-expr.cc (gfc_conv_class_to_class): Class valued
	transformational intrinsics return the pointer to the array
	descriptor as the _data field of a class temporary. Extract
	directly and return the address of the class temporary.
	(gfc_conv_procedure_call): store the expression for the first
	argument of a class valued transformational intrinsic function
	in the ss info class_container field. Later, use its type  as
	the element type in the call to gfc_trans_create_temp_array.
	(fcncall_realloc_result): Add a dtype argument and use it in
	the descriptor, when available.
	(gfc_trans_arrayfunc_assign): For class lhs, build a dtype with
	the lhs rank and the rhs element size and use it in the call to
	fcncall_realloc_result.

gcc/testsuite/
	PR fortran/102689
	* gfortran.dg/class_transformational_1.f90: New test for class-
	valued reshape.
	* gfortran.dg/class_transformational_2.f90: New test for other
	class_valued transformational intrinsics.
parent 95990db0
No related branches found
No related tags found
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment