Commit Graph

470 Commits

Author SHA1 Message Date
Tobias Burnus
5d81ddd07f 2012-01-06 Tobias Burnus <burnus@net-b.de>
* trans-openmp.c (gfc_omp_clause_dtor,
        * gfc_trans_omp_array_reduction):
        Update call to gfc_trans_dealloc_allocated.
        * trans.c (gfc_allocate_using_malloc): Fix spacing.
        (gfc_allocate_allocatable): For gfc_allocate_using_lib, jump to
        label_finish when an error occurs.
        (gfc_deallocate_with_status): Call caf_deregister for -fcoarray=lib.
        * trans.h (gfc_allocate_allocatable,
        * gfc_deallocate_with_status):
        Update prototype.
        (gfor_fndecl_caf_deregister): New tree symbol.
        * trans-expr.c (gfc_conv_procedure_call): Update
        gfc_deallocate_with_status and gfc_trans_dealloc_allocated calls.
        * trans-array.c (gfc_array_allocate,
        * gfc_trans_dealloc_allocated,
        structure_alloc_comps, gfc_trans_deferred_array): Ditto.
        (gfc_array_deallocate): Handle coarrays with -fcoarray=lib.
        * trans-array.h (gfc_array_deallocate, gfc_array_allocate,
        gfc_trans_dealloc_allocated): Update prototypes.
        * trans-stmt.c (gfc_trans_sync): Fix indentation.
        (gfc_trans_allocate): Fix errmsg padding and label handling.
        (gfc_trans_deallocate): Ditto and handle -fcoarray=lib.
        * expr.c (gfc_is_coarray): Fix algorithm for BT_CLASS.
        * libgfortran.h (GFC_STAT_STOPPED_IMAGE): Use large value
        to avoid other stats accidentally matching this one.
        * trans-decl.c (gfor_fndecl_caf_deregister): New global var.
        (gfc_build_builtin_function_decls): Fix prototype decl of caf_register
        and add decl for caf_deregister.
        (gfc_trans_deferred_vars): Handle CAF vars with -fcoarrays=lib.
        * trans-intrinsic.c (conv_intrinsic_move_alloc): Update call to
        gfc_deallocate_with_status.

2012-01-06  Tobias Burnus <burnus@net-b.de>

        * caf/single.c (_gfortran_caf_register,
        * _gfortran_caf_deregister):
        Fix token handling.
        * caf/mpi.c  (_gfortran_caf_register, _gfortran_caf_deregister):
        * Ditto.
        * caf/libcaf.h (STAT_STOPPED_IMAGE): Sync with libgfortran.h.
        (_gfortran_caf_register, _gfortran_caf_deregister): Update prototype.

2012-01-06  Tobias Burnus <burnus@net-b.de>

        * gfortran.dg/deallocate_stat_2.f90: New.
        * coarray/allocate_errgmsg.f90: New.
        * gfortran.dg/coarray_lib_alloc_1.f90: New.
        * gfortran.dg/coarray_lib_alloc_2.f90: New.
        * coarray/subobject_1.f90: Fix for num_images > 1.
        * gfortran.dg/deallocate_stat.f90: Update due to changed
        stat= handling.

From-SVN: r182951
2012-01-06 14:38:49 +01:00
Mikael Morin
17d038cd90 re PR fortran/50981 ([OOP] Wrong-code for scalarizing ELEMENTAL call with absent OPTIONAL argument)
PR fortran/50981
	* trans-array.h (gfc_walk_elemental_function_args): New argument.
	* trans-intrinsic.c (gfc_walk_intrinsic_function): Update call.
	* trans-stmt.c (gfc_trans_call): Ditto.
	* trans-array.c (gfc_walk_function_expr): Ditto.
	(gfc_walk_elemental_function_args): Get the dummy argument list
	if possible.  Check that the dummy and the actual argument are both
	optional, and set can_be_null_ref accordingly.

	* gfortran.dg/elemental_optional_args_2.f90: New test.

From-SVN: r182875
2012-01-04 14:20:17 +00:00
Mikael Morin
0192ef204c re PR fortran/50981 ([OOP] Wrong-code for scalarizing ELEMENTAL call with absent OPTIONAL argument)
PR fortran/50981
	* trans.h (struct gfc_ss_info): New field data::scalar::can_be_null_ref
	* trans-array.c: If the reference can be NULL, save the reference
	instead of the value.
	* trans-expr.c (gfc_conv_expr): If we have saved a reference,
	dereference it.

From-SVN: r182874
2012-01-04 14:04:24 +00:00
Paul Thomas
94fae14bf8 re PR fortran/51529 ([OOP] gfortran.dg/class_to_type_1.f03 is miscompiled: Uninitialized variable used)
2012-01-02  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/51529
	* trans-array.c (gfc_array_allocate): Null allocated memory of
	newly allocted class arrays.

	PR fortran/46262
	PR fortran/46328
	PR fortran/51052
	* interface.c(build_compcall_for_operator): Add a type to the
	expression.
	* trans-expr.c (conv_base_obj_fcn_val): New function.
	(gfc_conv_procedure_call): Use base_expr to detect non-variable
	base objects and, ensuring that there is a temporary variable,
	build up the typebound call using conv_base_obj_fcn_val.
	(gfc_trans_class_assign): Pick out class procedure pointer
	assignments and do the assignment with no further prcessing.
	(gfc_trans_class_array_init_assign, gfc_trans_class_init_assign
	gfc_trans_class_assign): Move to top of file.
	* gfortran.h : Add 'base_expr' field to gfc_expr.
	* resolve.c (get_declared_from_expr): Add 'types' argument to
	switch checking of derived types on or off.
	(resolve_typebound_generic_call): Set the new argument.
	(resolve_typebound_function, resolve_typebound_subroutine):
	Set 'types' argument for get_declared_from_expr appropriately.
	Identify base expression, if not a variable, in the argument
	list of class valued calls. Assign it to the 'base_expr' field
	of the final expression. Strip away all references after the
	last class reference.


2012-01-02  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/46262
	PR fortran/46328
	PR fortran/51052
	* gfortran.dg/typebound_operator_7.f03: New.
	* gfortran.dg/typebound_operator_8.f03: New.

From-SVN: r182796
2012-01-02 12:46:08 +00:00
Paul Thomas
1b26c26bb0 trans-expr.c (gfc_walk_function_expr): Detect elemental procedure components as well as elemental procedures.
2011-12-15  Paul Thomas  <pault@gcc.gnu.org>

	* trans-expr.c (gfc_walk_function_expr): Detect elemental
	procedure components as well as elemental procedures.
	* trans-array.c (gfc_conv_procedure_call): Ditto.
	* trans-decl.c (gfc_trans_deferred_vars): Correct erroneous
	break for class pointers to continue.

2011-12-15  Paul Thomas  <pault@gcc.gnu.org>

	* gfortran.dg/class_array_3.f03: Remove explicit indexing of
	A%disp() to use scalarizer.
	* gfortran.dg/class_array_9.f03: New.

From-SVN: r182389
2011-12-15 20:51:19 +00:00
Paul Thomas
c49ea23d52 re PR fortran/41539 ([OOP] Calling function which takes CLASS: Rank comparison does not work)
2011-12-11  Paul Thomas  <pault@gcc.gnu.org>
	Tobias Burnus  <burnus@gcc.gnu.org>

	PR fortran/41539
	PR fortran/43214
	PR fortran/43969
	PR fortran/44568
	PR fortran/46356
	PR fortran/46990
	PR fortran/49074
	* interface.c(symbol_rank): Return the rank of the _data
	component of class objects.
	(compare_parameter): Also compare the derived type of the class
	_data component for type mismatch.  Similarly, return 1 if the
	formal and _data ranks match.
	(compare_actual_formal): Do not compare storage sizes for class
	expressions. It is an error if an actual class array, passed to
	a formal class array is not full.
	* trans-expr.c (gfc_class_data_get, gfc_class_vptr_get,
	gfc_vtable_field_get, gfc_vtable_hash_get, gfc_vtable_size_get,
	gfc_vtable_extends_get, gfc_vtable_def_init_get,
	gfc_vtable_copy_get): New functions for class API.
	(gfc_conv_derived_to_class): For an array reference in an
	elemental procedure call retain the ss to provide the
	scalarized array reference. Moved in file.
	(gfc_conv_class_to_class): New function.
        (gfc_conv_subref_array_arg): Use the type of the
	class _data component as a basetype.
	(gfc_conv_procedure_call): Ensure that class array expressions
	have both the _data reference and an array reference. Use 
	gfc_conv_class_to_class to handle class arrays for elemental
	functions in scalarized loops, class array elements and full
	class arrays. Use a call to gfc_conv_subref_array_arg in order
	that the copy-in/copy-out for passing class arrays to derived
	type arrays occurs correctly.
	(gfc_conv_expr): If it is missing, add the _data component
	between a class object or component and an array reference.
	(gfc_trans_class_array_init_assign): New function.
	(gfc_trans_class_init_assign): Call it for array expressions.
	* trans-array.c (gfc_add_loop_ss_code): Do not use a temp for
	class scalars since their size will depend on the dynamic type.
	(build_class_array_ref): New function.
	(gfc_conv_scalarized_array_ref): Call build_class_array_ref.
	(gfc_array_init_size): Add extra argument, expr3, that represents
	the SOURCE argument. If present,use this for the element size.
	(gfc_array_allocate): Also add argument expr3 and use it when
	calling gfc_array_init_size.
	(structure_alloc_comps): Enable class arrays.
	* class.c (gfc_add_component_ref): Carry over the derived type
	of the _data component.
	(gfc_add_class_array_ref): New function.
	(class_array_ref_detected): New static function.
	(gfc_is_class_array_ref): New function that calls previous.
	(gfc_is_class_scalar_expr): New function.
	(gfc_build_class_symbol): Throw not implemented error for
	assumed size class arrays.  Remove error that prevents
	CLASS arrays.
	(gfc_build_class_symbol): Prevent pointer/allocatable conflict.
	Also unset codimension.
	(gfc_find_derived_vtab): Make 'copy' elemental and set the
	intent of the arguments accordingly.: 
	* trans-array.h : Update prototype for gfc_array_allocate.
	* array.c (gfc_array_dimen_size): Return failure if class expr.
	(gfc_array_size): Likewise.
	* gfortran.h : New prototypes for gfc_add_class_array_ref,
	gfc_is_class_array_ref and gfc_is_class_scalar_expr.
	* trans-stmt.c (trans_associate_var): Exclude class targets
	from test. Move the allocation of the _vptr to an earlier time
	for class objects.
	(trans_associate_var): Assign the descriptor directly for class
	arrays.
	(gfc_trans_allocate): Add expr3 to gfc_array_allocate arguments.
	Convert array element references into sections. Do not invoke
	gfc_conv_procedure_call, use gfc_trans_call instead.
	* expr.c (gfc_get_corank): Fix for BT_CLASS.
	(gfc_is_simply_contiguous): Exclude class from test.
	* trans.c (gfc_build_array_ref): Include class array refs.
	* trans.h : Include prototypes for class API functions that are
	new in trans-expr. Define GFC_DECL_CLASS(node).
	* resolve.c (check_typebound_baseobject ): Remove error for
	non-scalar base object.
	(resolve_allocate_expr): Ensure that class _data component is
	present. If array, call gfc_expr_to_intialize.
	(resolve_select): Remove scalar error for SELECT statement as a
	temporary measure.
	(resolve_assoc_var): Update 'target' (aka 'selector') as
	needed. Ensure that the target expression has the right rank.
	(resolve_select_type): Ensure that target expressions have a
	valid locus.
	(resolve_allocate_expr, resolve_fl_derived0): Fix for BT_CLASS.
	* trans-decl.c (gfc_get_symbol_decl): Set GFC_DECL_CLASS, where
	appropriate.
	(gfc_trans_deferred_vars): Get class arrays right.
	* match.c(select_type_set_tmp): Add array spec to temporary.
	(gfc_match_select_type): Allow class arrays.
	* check.c (array_check): Ensure that class arrays have refs.
	(dim_corank_check, dim_rank_check): Retrun success if class.
	* primary.c (gfc_match_varspec): Fix for class arrays and
	co-arrays. Make sure that class _data is present.
	(gfc_match_rvalue): Handle class arrays.
	*trans-intrinsic.c (gfc_conv_intrinsic_size): Add class array
	reference.
	(gfc_conv_allocated): Add _data component to class expressions.
	(gfc_add_intrinsic_ss_code): ditto.
	* simplify.c (simplify_cobound): Fix for BT_CLASS.
	(simplify_bound): Return NULL for class arrays.
	(simplify_cobound): Obtain correct array_spec. Use cotype as
	appropriate. Use arrayspec for bounds.

2011-12-11  Paul Thomas  <pault@gcc.gnu.org>
	Tobias Burnus  <burnus@gcc.gnu.org>

	PR fortran/41539
	PR fortran/43214
	PR fortran/43969
	PR fortran/44568
	PR fortran/46356
	PR fortran/46990
	PR fortran/49074
	* gfortran.dg/class_array_1.f03: New.
	* gfortran.dg/class_array_2.f03: New.
	* gfortran.dg/class_array_3.f03: New.
	* gfortran.dg/class_array_4.f03: New.
	* gfortran.dg/class_array_5.f03: New.
	* gfortran.dg/class_array_6.f03: New.
	* gfortran.dg/class_array_7.f03: New.
	* gfortran.dg/class_array_8.f03: New.
	* gfortran.dg/coarray_poly_1.f90: New.
	* gfortran.dg/coarray_poly_2.f90: New.
	* gfortran.dg/coarray/poly_run_1.f90: New.
	* gfortran.dg/coarray/poly_run_2.f90: New.
	* gfortran.dg/class_to_type_1.f03: New.
	* gfortran.dg/type_to_class_1.f03: New.
	* gfortran.dg/typebound_assignment_3.f03: Remove the error.
	* gfortran.dg/auto_dealloc_2.f90: Occurences of __builtin_free
	now 2.
	* gfortran.dg/class_19.f03: Occurences of __builtin_free now 8.


Co-Authored-By: Tobias Burnus <burnus@gcc.gnu.org>

From-SVN: r182210
2011-12-11 20:42:23 +00:00
Tobias Burnus
e48cc39155 re PR fortran/51448 (Compiler crash when assigning floating point values of different kinds)
2011-12-08  Tobias Burnus  <burnus@net-b.de>

        PR fortran/51448
        * fortran/trans-array.c (get_std_lbound): Fix handling of
        conversion functions.

2011-12-08  Tobias Burnus  <burnus@net-b.de>

        PR fortran/51448
        * gfortran.dg/realloc_on_assign_8.f90: New.

From-SVN: r182131
2011-12-08 19:51:28 +01:00
Mikael Morin
3120f5119c trans-array.c (set_loop_bounds): Remove dead conditions.
* trans-array.c (set_loop_bounds): Remove dead conditions.

From-SVN: r181731
2011-11-25 20:24:10 +00:00
Mikael Morin
f6a40ccda3 re PR fortran/51250 (Bug with SUM(,dim,mask))
fortran/
	PR fortran/51250
	PR fortran/43829
	* trans-array.c (gfc_trans_create_temp_array): Get dimension from
	the right gfc_ss struct.

testsuite/
	PR fortran/51250
	PR fortran/43829
	* gfortran.dg/inline_sum_3.f90: New test.

From-SVN: r181730
2011-11-25 20:18:21 +00:00
Tobias Burnus
c3f3495248 re PR fortran/39427 (F2003: Procedures with same name as types/type constructors)
gcc/fortran
2011-11-16  Tobias Burnus  <burnus@net-b.de>

        PR fortran/39427
        PR fortran/37829
        * decl.c (match_data_constant, match_data_constant,
        * variable_decl,
        gfc_match_decl_type_spec, access_attr_decl,
        check_extended_derived_type, gfc_match_derived_decl,
        gfc_match_derived_decl, gfc_match_derived_decl) Modified to deal
        with DT constructors.
        * gfortran.h (gfc_find_dt_in_generic,
        gfc_convert_to_structure_constructor): New function prototypes.
        * interface.c (check_interface0, check_interface1,
        gfc_search_interface): Ignore DT constructors in generic list.
        * match.h (gfc_match_structure_constructor): Update prototype.
        * match.c (match_derived_type_spec): Ensure that one uses the DT
        not the generic function.
        * module.c (MOD_VERSION): Bump.
        (dt_lower_string, dt_upper_string): New functions.
        (find_use_name_n, find_use_operator, compare_true_names,
        find_true_name, add_true_name, fix_mio_expr, load_needed,
        read_module, write_dt_extensions, write_symbol): Changes to deal with
        different symtree vs. sym names.
        (create_derived_type): Create also generic procedure.
        * parse.c (gfc_fixup_sibling_symbols): Don't regard DT and
        * generic
        function as the same.
        * primary.c (gfc_convert_to_structure_constructor): New
        * function.
        (gfc_match_structure_constructor): Restructured; calls
        gfc_convert_to_structure_constructor.
        (build_actual_constructor, gfc_match_rvalue): Update for DT generic
        functions.
        * resolve.c (resolve_formal_arglist, resolve_structure_cons,
        is_illegal_recursion, resolve_generic_f, resolve_variable,
        resolve_fl_variable_derived, resolve_fl_derived0,
        resolve_symbol): Handle DT and DT generic constructors.
        * symbol.c (gfc_use_derived, gfc_undo_symbols,
        gen_special_c_interop_ptr, gen_cptr_param,
        generate_isocbinding_symbol, gfc_get_derived_super_type): Handle
        derived-types, which are hidden in the generic type.
        (gfc_find_dt_in_generic): New function
        * trans-array.c (gfc_conv_array_initializer): Replace
        * FL_PARAMETER
        expr by actual value.
        * trans-decl.c (gfc_get_module_backend_decl,
        * gfc_trans_use_stmts):
        Ensure that we use the DT and not the generic function.
        * trans-types.c (gfc_get_derived_type): Ensure that we use the
        * DT
        and not the generic procedure.

gcc/testsuite/
2011-11-16  Tobias Burnus  <burnus@net-b.de>

        PR fortran/39427
        PR fortran/37829
        * gfortran.dg/constructor_1.f90: New.
        * gfortran.dg/constructor_2.f90: New.
        * gfortran.dg/constructor_3.f90: New.
        * gfortran.dg/constructor_4.f90: New.
        * gfortran.dg/constructor_5.f90: New.
        * gfortran.dg/constructor_6.f90: New.
        * gfortran.dg/use_only_5.f90: New.
        * gfortran.dg/c_ptr_tests_17.f90: New.
        * gfortran.dg/c_ptr_tests_18.f90: New.
        * gfortran.dg/used_types_25.f90: New.
        * gfortran.dg/used_types_26.f90: New
        * gfortran.dg/type_decl_3.f90: New.
        * gfortran.dg/function_types_3.f90: Update dg-error.
        * gfortran.dg/result_1.f90: Ditto.
        * gfortran.dg/structure_constructor_3.f03: Ditto.
        * gfortran.dg/structure_constructor_4.f03: Ditto.

From-SVN: r181425
2011-11-16 22:37:43 +01:00
Mikael Morin
0c08de8f8b re PR fortran/43829 (Scalarization of reductions)
PR fortran/43829
	* trans-array.c (gfc_conv_expr_descriptor): Accept the inline intrinsic
	case in the assertion.
	* trans-intrinsic (enter_nested_loop): New function.
	(gfc_conv_intrinsic_arith): Support non-scalar cases.
	(nest_loop_dimension, walk_inline_intrinsic_arith): New functions.
	(walk_inline_intrinsic_function): Handle sum and product.
	(gfc_inline_intrinsic_function_p): Ditto.
	* trans.h (gfc_get_loopinfo): New macro.

From-SVN: r180920
2011-11-04 00:31:19 +00:00
Mikael Morin
121c82c9ac trans-array.h (gfc_free_ss, [...]): New prototypes.
* trans-array.h (gfc_free_ss, gfc_set_delta): New prototypes.
	* trans-array.c (gfc_free_ss): Remove forward declaration.
	Make non-static.
	(set_delta, gfc_set_delta): Remove forward declaration.
	Make non-static and rename the former to the later. Update uses.

From-SVN: r180905
2011-11-04 00:00:23 +00:00
Mikael Morin
8e24054ba4 trans-array.c (gfc_trans_preloop_setup): New pointers to outer dimension's ss and loop.
* trans-array.c (gfc_trans_preloop_setup): New pointers to outer
	dimension's ss and loop. Use them.

From-SVN: r180903
2011-11-03 23:56:20 +00:00
Mikael Morin
d769d0df73 trans-array.c (outermost_loop): New function.
* trans-array.c (outermost_loop): New function.
	(gfc_trans_array_constructor, gfc_set_vector_loop_bounds,
	gfc_add_loop_ss_code): Put generated code out of the outermost loop.

From-SVN: r180902
2011-11-03 23:53:42 +00:00
Mikael Morin
f03077b019 trans-array.c (constant_array_constructor_loop_size): Handle multiple loops.
* trans-array.c (constant_array_constructor_loop_size):
	Handle multiple loops.

From-SVN: r180901
2011-11-03 23:51:04 +00:00
Mikael Morin
b2f82aaa78 trans-array.c (get_rank, [...]): New functions.
* trans-array.c (get_rank, get_loop_upper_bound_for_array):
	New functions.
	(gfc_trans_array_constructor): Handle multiple loops.

From-SVN: r180900
2011-11-03 23:48:29 +00:00
Mikael Morin
4616ef9b85 trans.h (struct gfc_loopinfo): New field parent.
* trans.h (struct gfc_loopinfo): New field parent.
	* trans-array.c (gfc_cleanup_loop): Free nested loops.
	(gfc_add_ss_to_loop): Set nested_loop's parent loop.
	(gfc_trans_array_constructor): Update assertion.
	(gfc_conv_loop_setup): Ditto.

From-SVN: r180899
2011-11-03 23:45:19 +00:00
Mikael Morin
30ae600f1f trans-array.c (gfc_add_loop_ss_code): Skip non-nestedmost ss.
* trans-array.c (gfc_add_loop_ss_code): Skip non-nestedmost ss.
	Call recursively gfc_add_loop_ss_code for all the nested loops.
	(gfc_conv_ss_startstride): Only get the descriptor for the outermost
	ss. Call recursively gfc_conv_ss_startstride for all the nested loops.
	(set_loop_bounds): Call recursively for all the nested loops.
	(set_delta): Ditto.

From-SVN: r180898
2011-11-03 23:41:28 +00:00
Mikael Morin
9d75804367 trans.h (struct gfc_loopinfo): New fields nested and next.
* trans.h (struct gfc_loopinfo): New fields nested and next.
	* trans-array.c (gfc_add_ss_to_loop): Update list of nested list if
	ss has non-null nested_ss field.

From-SVN: r180897
2011-11-03 23:39:11 +00:00
Mikael Morin
06cd4e1b5a trans-array.c (gfc_trans_create_temp_array): Loop over the parents.
* trans-array.c (gfc_trans_create_temp_array): Loop over the parents.

From-SVN: r180895
2011-11-03 23:37:24 +00:00
Mikael Morin
d6b3a0d72c trans-array.c (get_array_ref_dim, [...]): Rename the former to the latter and loop over the parents.
* trans-array.c (get_array_ref_dim, get_scalarizer_dim_for_array_dim): 
	Rename the former to the latter and loop over the parents.
	(innermost_ss): New function.
	(get_array_ref_dim_for_loop_dim): New function.
	(gfc_trans_create_temp_array): Use get_scalarizer_dim_for_array_dim.
	(set_loop_bounds): Use get_array_dim_for_loop_dim).

From-SVN: r180894
2011-11-03 23:34:53 +00:00
Mikael Morin
f49afcb009 trans-array.c (set_vector_loop_bounds): Loop over the parents.
* trans-array.c (set_vector_loop_bounds): Loop over the parents.

From-SVN: r180892
2011-11-03 23:28:25 +00:00
Mikael Morin
fa168d9ff4 trans-array.c (gfc_trans_array_constructor): Loop over the parents.
* trans-array.c (gfc_trans_array_constructor): Loop over the parents.

From-SVN: r180891
2011-11-03 23:25:34 +00:00
Mikael Morin
5125d6d5d7 trans-array.c (gfc_set_loop_bounds_from_array_spec): Loop over the parents.
* trans-array.c (gfc_set_loop_bounds_from_array_spec): Loop over the
	parents.

From-SVN: r180890
2011-11-03 23:22:13 +00:00
Mikael Morin
2eace29ac3 trans.h (struct gfc_ss): New field parent.
* trans.h (struct gfc_ss): New field parent.
	* trans-array.c (gfc_trans_scalarizing_loops): Skip clearing if a
	parent exists.
	* trans-expr.c (gfc_advance_se_ss_chain): Move to parent ss at the
	end of the chain.

From-SVN: r180889
2011-11-03 23:17:08 +00:00
Mikael Morin
4164579308 trans-array.h (gfc_trans_create_temp_array): Remove loop argument.
* trans-array.h (gfc_trans_create_temp_array): Remove loop argument.
	* trans-array.c (gfc_trans_create_temp_array): Ditto.  Get loop from ss.
	Update reference to loop.  Remove loop argument.
	(gfc_trans_array_constructor, gfc_conv_loop_setup): Update calls to
	gfc_trans_create_temp_array.
	* trans-expr.c (gfc_conv_procedure_call): Ditto.
	* trans-intrinsic.c (gfc_conv_intrinsic_transfer): Ditto.
	* trans-stmt.c (gfc_conv_elemental_dependencies): Ditto.
	Set loop before calling gfc_trans_create_temp_array.

From-SVN: r180888
2011-11-03 23:06:22 +00:00
Mikael Morin
d35335e315 trans-array.c (gfc_trans_create_temp_array): New variable total_dim.
* trans-array.c (gfc_trans_create_temp_array): New variable total_dim.
	Set total_dim to loop's rank. Replace usages of loop's rank.

From-SVN: r180887
2011-11-03 23:02:03 +00:00
Mikael Morin
6adbe65465 trans-array.c (gfc_trans_array_constructor, [...]): Rename the former to the later.
* trans-array.c (gfc_trans_array_constructor, trans_array_constructor):
	Rename the former to the later.  Get loop from ss.
	Remove loop argument.
	(gfc_add_loop_ss_code): Update call.

From-SVN: r180886
2011-11-03 22:59:29 +00:00
Mikael Morin
84952a4e31 trans-array.c (gfc_set_vector_loop_bounds): Get loop from ss.
* trans-array.c (gfc_set_vector_loop_bounds): Get loop from ss.
	Remove loop argument.
	(gfc_add_loop_ss_code): Update call.

From-SVN: r180885
2011-11-03 22:56:12 +00:00
Mikael Morin
4615abe856 trans.h (struct gfc_ss): New field loop.
* trans.h (struct gfc_ss): New field loop.
	* trans-array.c (set_ss_loop): New function.
	(gfc_add_ss_to_loop): Call set_ss_loop.

From-SVN: r180884
2011-11-03 22:54:37 +00:00
Mikael Morin
c7bf4f1e64 trans.h (struct gfc_ss_info): New field refcount.
* trans.h (struct gfc_ss_info): New field refcount.
	* trans-array.c (free_ss_info): Decrement refcount. Return early if
	still non-zero.
	(gfc_get_array_ss, gfc_get_temp_ss, gfc_get_scalar_ss): Increment
	refcount.

From-SVN: r180883
2011-11-03 22:50:06 +00:00
Mikael Morin
f28cd38e36 trans-array.c (gfc_trans_create_temp_array): Move invariant condition out of the containing loop.
* trans-array.c (gfc_trans_create_temp_array): Move invariant condition
	out of the containing loop.

From-SVN: r180882
2011-11-03 22:45:41 +00:00
Mikael Morin
b2028d0b94 trans-array.c (gfc_conv_loop_setup, [...]): Move specloop arrays clearing from the former to the latter.
* trans-array.c (gfc_conv_loop_setup, gfc_trans_create_temp_array):
	Move specloop arrays clearing from the former to the latter.

From-SVN: r180881
2011-11-03 22:42:58 +00:00
Mikael Morin
1d9370e909 trans-array.c (set_loop_bounds): Separate the beginning of gfc_conv_loop_setup into a function of its own.
* trans-array.c (set_loop_bounds): Separate the beginning of
	gfc_conv_loop_setup into a function of its own.
	(set_delta): Separate the end of gfc_conv_loop_setup into a function
	of its own.
	(gfc_conv_loop_setup): Call set_loop_bounds and set delta.
	(set_loop_bounds, set_delta, gfc_conv_loop_setup): Make loopspec a
	pointer to the specloop field from the loop struct.

From-SVN: r180880
2011-11-03 22:40:55 +00:00
Mikael Morin
42d0058e49 trans.h (struct gfc_ss, [...]): Move field gfc_ss::where into gfc_ss_info.
* trans.h (struct gfc_ss, struct gfc_ss_info): Move field
	gfc_ss::where into gfc_ss_info.
	* trans-array.c (gfc_add_loop_ss_code):
	Update reference chains.
	* trans-stmt.c (gfc_trans_where_assign, gfc_trans_where_3): Ditto.

From-SVN: r180877
2011-11-03 22:29:25 +00:00
Mikael Morin
7a412892a6 trans.h (struct gfc_ss, [...]): Move field gfc_ss::useflags into gfc_ss_info.
* trans.h (struct gfc_ss, struct gfc_ss_info): Move field
	gfc_ss::useflags into gfc_ss_info.
	* trans-array.c (gfc_mark_ss_chain_used, gfc_trans_preloop_setup,
	gfc_trans_scalarizing_loops, gfc_trans_scalarized_boundary):
	Update reference chains.
	* trans-expr.c (gfc_conv_procedure_call): Ditto.
	* trans-intrinsic.c (gfc_conv_intrinsic_function): Ditto.

From-SVN: r180875
2011-11-03 22:24:37 +00:00
Mikael Morin
1838afec3e trans.h (struct gfc_ss, [...]): Move field gfc_ss::data::info into gfc_ss_info::data and remove empty union...
* trans.h (struct gfc_ss, struct gfc_ss_info): Move field
	gfc_ss::data::info into gfc_ss_info::data and remove empty union
	gfc_ss::data.
	* trans-array.c (gfc_free_ss, gfc_trans_create_temp_array,
	gfc_trans_constant_array_constructor, gfc_trans_array_constructor,
	gfc_set_vector_loop_bounds, gfc_add_loop_ss_code,
	gfc_conv_ss_descriptor, gfc_trans_array_bound_check,
	gfc_conv_array_index_offset, gfc_conv_scalarized_array_ref,
	add_array_offset, gfc_trans_preloop_setup,
	gfc_trans_scalarized_boundary, gfc_conv_section_startstride,
	gfc_conv_ss_startstride, gfc_could_be_alias,
	gfc_conv_loop_setup, gfc_conv_expr_descriptor,
	gfc_alloc_allocatable_for_assignment, gfc_walk_array_ref):
	Update reference chains and factor them where possible.
	* trans-expr.c (gfc_conv_variable, gfc_conv_subref_array_arg,
	gfc_conv_procedure_call, gfc_trans_subarray_assign): Updata reference
	chains.
	* trans-intrinsic.c (gfc_conv_intrinsic_transfer): Ditto.
	* trans-io.c (transfer_array_component): Ditto.
	* trans-stmt.c (gfc_conv_elemental_dependencies,
	gfc_trans_pointer_assign_need_temp): Ditto.

From-SVN: r180873
2011-11-03 22:21:36 +00:00
Mikael Morin
961e73ace2 trans.h (struct gfc_ss, [...]): Move member struct gfc_ss::data::temp into gfc_ss_info::data.
* trans.h (struct gfc_ss, struct gfc_ss_info): Move member struct
	gfc_ss::data::temp into gfc_ss_info::data.
	* trans-array.c (gfc_get_temp_ss, gfc_conv_loop_setup): Update reference
	chains.

From-SVN: r180872
2011-11-03 22:16:29 +00:00
Mikael Morin
99dd5a2990 trans.h (struct gfc_ss, [...]): Move member struct gfc_ss::data::scalar into newly created union...
* trans.h (struct gfc_ss, struct gfc_ss_info): Move member struct
	gfc_ss::data::scalar into newly created union gfc_ss_info::data,
	and rename subfield expr to value.
	* trans-array.c (gfc_add_loop_ss_code, gfc_conv_array_index_offset,
	gfc_conv_expr_descriptor): Update reference chains.
	* trans-const.c (gfc_conv_constant): Ditto.
	* trans-expr.c (gfc_conv_expr): Ditto.

From-SVN: r180870
2011-11-03 22:10:25 +00:00
Mikael Morin
a0add3be3e trans.h (struct gfc_ss, [...]): Move field string_length from the former struct to the latter.
* trans.h (struct gfc_ss, struct gfc_ss_info): Move field
	string_length from the former struct to the latter.
	* trans-array.c
	(gfc_get_temp_ss, gfc_trans_array_constructor, gfc_add_loop_ss_code,
	gfc_conv_ss_descriptor, gfc_conv_scalarized_array_ref,
	gfc_conv_resolve_dependencies, gfc_conv_loop_setup,
	gfc_conv_expr_descriptor): Update references to string_length and
	factor common reference chains where possible.
	* trans-const.c (gfc_conv_constant): Ditto.
	* trans-expr.c (gfc_conv_variable, gfc_conv_subref_array_arg,
	gfc_conv_expr): Ditto.

From-SVN: r180869
2011-11-03 22:04:50 +00:00
Mikael Morin
f98cfd3c42 trans.h (struct gfc_ss, [...]): Move field expr from the former struct to the latter.
* trans.h (struct gfc_ss, struct gfc_ss_info): Move field expr from
	the former struct to the latter.
	* trans-array.c
	(gfc_get_array_ss, gfc_get_scalar_ss,
	gfc_trans_constant_array_constructor, gfc_trans_array_constructor,
	gfc_add_loop_ss_code, gfc_conv_ss_descriptor,
	gfc_trans_array_bound_check, gfc_conv_array_index_offset,
	gfc_conv_scalarized_array_ref, gfc_conv_ss_startstride,
	gfc_could_be_alias, gfc_conv_resolve_dependencies,
	gfc_conv_loop_setup, gfc_conv_expr_descriptor,
	gfc_alloc_allocatable_for_assignment): Update references to expr and
	factor common reference chains where possible.
	* trans-const.c (gfc_conv_constant): Ditto.
	* trans-expr.c (gfc_conv_variable, gfc_conv_procedure_call,
	gfc_conv_array_constructor_expr, gfc_conv_expr,
	gfc_conv_expr_reference): Ditto.
	* trans-intrinsic.c (trans_this_image, gfc_conv_intrinsic_bound,
	gfc_conv_intrinsic_cobound, gfc_conv_intrinsic_funcall,
	gfc_add_intrinsic_ss_code): Ditto.
	* trans-stmt.c (gfc_conv_elemental_dependencies): Ditto.

From-SVN: r180868
2011-11-03 22:01:46 +00:00
Mikael Morin
bcc4d4e089 trans.h (struct gfc_ss_info): New struct.
* trans.h (struct gfc_ss_info): New struct.
	(gfc_get_ss_info): New macro.
	(struct gfc_ss): Move type field to struct gfc_ss_info.
	Add an info field of type gfc_ss_info.
	* trans-array.c (free_ss_info): New function.
	(gfc_free_ss): Call free_ss_info.
	(gfc_get_array_ss, gfc_get_temp_ss, gfc_get_scalar_ss):
	Allocate gfc_ss_info field.
	(gfc_get_array_ss, gfc_get_temp_ss, gfc_get_scalar_ss,
	gfc_set_vector_loop_bounds, gfc_add_loop_ss_code,
	gfc_conv_array_index_offset, gfc_trans_preloop_setup,
	gfc_trans_scalarized_loop_boundary, gfc_conv_section_startstride,
	gfc_conv_ss_startstride, gfc_conv_resolve_dependencies,
	gfc_conv_loop_setup, transposed_dims, gfc_conv_expr_descriptor,
	gfc_walk_elemental_function_args): Update references to type.
	* trans-const.c (gfc_conv_constant): Factor common reference chains
	and update reference to type.
	* trans-expr.c (gfc_conv_procedure_call, gfc_trans_assignment_1):
	Update reference to type.
	(gfc_conv_array_constructor_expr, gfc_conv_expr,
	gfc_conv_expr_reference): Ditto. Factor common reference chains.
	* trans-intrinsic.c (walk_inline_intrinsic_transpose): Update references
	to type
	* trans-stmt.c (gfc_trans_where_assign): Ditto.

From-SVN: r180867
2011-11-03 21:55:48 +00:00
Mikael Morin
08dcec6137 trans.h (struct gfc_ss, [...]): Move shape field from the former struct to the latter.
* trans.h (struct gfc_ss, struct gfc_array_info): Move shape field
	from the former struct to the latter.
	* trans-array.c (gfc_conv_ss_startstride, gfc_conv_loop_setup):
	Update field references.
	* trans-expr.c (gfc_trans_subarray_assign): Update field references
	and factor common reference chains.
	* trans-io.c (transfer_array_component): Ditto.

From-SVN: r180866
2011-11-03 21:47:49 +00:00
Mikael Morin
cb4b9eaebe trans.h (struct gfc_array_info): Move dim and dimen fields...
* trans.h (struct gfc_array_info): Move dim and dimen fields...
	(struct gfc_ss): ... here.  Remove gfc_ss::data::temp::dimen field.
	* trans-array.c (gfc_conv_loop_setup): Remove temp_ss dim array
	initialization.
	(gfc_get_temp_ss): Initialize dim and dimen.
	(gfc_free_ss, gfc_get_array_ss, gfc_get_temp_ss,
	gfc_set_loop_bounds_from_array_spec, get_array_ref_dim,
	gfc_trans_create_temp_array, gfc_trans_constant_array_constructor,
	gfc_set_vector_loop_bounds, gfc_conv_scalarized_array_ref,
	gfc_trans_preloop_setup, gfc_conv_ss_startstride,
	gfc_conv_resolve_dependencies, gfc_conv_loop_setup, transposed_dims,
	gfc_conv_expr_descriptor, gfc_alloc_allocatable_for_assignment,
	gfc_walk_array_ref): Update field references.
	* trans-expr.c (gfc_conv_subref_array_arg, gfc_conv_procedure_call):
	Ditto.
	* trans-intrinsic.c (walk_inline_intrinsic_transpose): Ditto.
	* trans-stmt.c (gfc_conv_elemental_dependencies): Ditto.

From-SVN: r180865
2011-11-03 21:44:56 +00:00
Mikael Morin
6d63e468a3 trans.h (struct gfc_ss_info, [...]): Rename the former to the latter.
* trans.h (struct gfc_ss_info, struct gfc_array_info):
	Rename the former to the latter.
	* trans-array.c (gfc_get_array_ss, gfc_trans_allocate_array_storage,
	get_array_ref_dim, gfc_trans_create_temp_array,
	gfc_trans_constant_array_constructor, gfc_set_vector_loop_bounds,
	gfc_conv_array_index_offset, gfc_conv_scalarized_array_ref,
	add_array_offset, gfc_trans_preloop_setup, gfc_conv_section_startstride,
	gfc_conv_ss_startstride, gfc_conv_loop_setup, transposed_dims,
	gfc_conv_expr_descriptor): Update all uses.
	* trans-expr.c (gfc_conv_subref_array_arg, gfc_conv_procedure_call):
	Ditto.
	* trans-intrinsic.c (gfc_conv_intrinsic_transfer,
	walk_inline_intrinsic_transpose): Ditto.
	* trans-stmt.c (gfc_conv_elemental_dependencies,
	gfc_trans_pointer_assign_need_temp): Ditto.

From-SVN: r180864
2011-11-03 21:39:11 +00:00
Mikael Morin
a7fb208d57 trans-array.c (dim_ok, [...]): Rename the former to the latter.
* trans-array.c (dim_ok, transposed_dims): Rename the former to the
	latter.  Change argument type.  Invert return value.
	(gfc_conv_expr_descriptor): Update calls.

From-SVN: r180862
2011-11-03 21:35:35 +00:00
Mikael Morin
820d5e68fb trans-array.c (get_array_ref_dim): Change argument type and name.
* trans-array.c (get_array_ref_dim): Change argument type and name.
	Obtain previous argument from the new argument in the body.
	(gfc_trans_create_temp_arry, gfc_conv_loop_setup): Update calls.

From-SVN: r180861
2011-11-03 21:33:28 +00:00
Mikael Morin
43e7d60bc6 trans-array.c (gfc_set_vector_loop_bounds, [...]): Rename the former to the latter.
* trans-array.c (gfc_set_vector_loop_bounds, set_vector_loop_bounds):
	Rename the former to the latter.  Change type and name of argument.
	Get previous argument from the new one.
	(gfc_add_loop_ss_code): Update call.

From-SVN: r180860
2011-11-03 21:31:12 +00:00
Mikael Morin
f44d227711 trans-array.h (gfc_trans_create_temp_array): Replace info argument with ss argument.
* trans-array.h (gfc_trans_create_temp_array): Replace info argument
	with ss argument.
	* trans-array.c (gfc_trans_create_temp_array): Ditto. Get info from ss.
	(gfc_trans_array_constructor, gfc_conv_loop_setup): Update call to
	gfc_trans_create_temp_array.
	* trans-expr.c (gfc_conv_procedure_call): Ditto.
	* trans-intrinsic.c (gfc_conv_intrinsic_transfer): Ditto.
	* trans-stmt.c (gfc_conv_elemental_dependencies): Ditto.

From-SVN: r180859
2011-11-03 21:28:26 +00:00
Mikael Morin
14bf3267a6 trans-array.c (gfc_trans_array_bound_check): Use ss argument to get name.
* trans-array.c (gfc_trans_array_bound_check): Use ss argument
	to get name.

From-SVN: r180858
2011-11-03 21:24:24 +00:00
Mikael Morin
36e783e382 trans-array.c (gfc_trans_array_bound_check, [...]): Rename the former to the latter.
* trans-array.c (gfc_trans_array_bound_check,
	trans_array_bound_check): Rename the former to the latter.
	Replace descriptor argument with ss argument.  Get descriptor from ss.
	(gfc_conv_array_index_offset, conv_array_index_offset): Rename the
	former to the latter.  Update call to trans_array_bound_check.
	Replace info argument with ss argument.  Get info from ss.
	(gfc_conv_scalarized_array_ref): Update call to conv_array_index_offset.
	(add_array_offset): Ditto

From-SVN: r180857
2011-11-03 21:21:30 +00:00
Mikael Morin
a13d9afef7 trans-array.c (gfc_trans_constant_array_constructor, [...]): Rename the former to the latter.
* trans-array.c (gfc_trans_constant_array_constructor,
	trans_constant_array_constructor): Rename the former to the latter.
	Don't set the rank of the temporary for the loop.  Remove then unused
	loop argument.
	(gfc_trans_array_constructor): Update call.

From-SVN: r180856
2011-11-03 21:19:27 +00:00
Mikael Morin
39abb03c4b trans-array.c (gfc_trans_scalarizing_loops): Stop loop before end marker, not after it.
* trans-array.c (gfc_trans_scalarizing_loops): Stop loop before end
	marker, not after it.

From-SVN: r180855
2011-11-03 21:16:54 +00:00
Mikael Morin
596a95799c trans-array.c (gfc_conv_loop_setup): Also skip temporary arrays.
* trans-array.c (gfc_conv_loop_setup): Also skip temporary arrays.

From-SVN: r180853
2011-11-03 21:14:19 +00:00
Mikael Morin
ae9054ba25 trans-array.c (gfc_conv_ss_startstride): Access array bounds along array dimensions instead of loop dimensions.
* trans-array.c (gfc_conv_ss_startstride): Access array bounds along
	array dimensions instead of loop dimensions.

From-SVN: r180852
2011-11-03 21:12:33 +00:00
Mikael Morin
1e633e4fe1 trans-array.c (gfc_trans_preloop_setup): Assertify one condition.
* trans-array.c (gfc_trans_preloop_setup): Assertify one condition.

From-SVN: r180851
2011-11-03 21:09:58 +00:00
Mikael Morin
a7c6141677 trans-array.c (gfc_walk_array_ref): Skip coarray dimensions.
* trans-array.c (gfc_walk_array_ref): Skip coarray dimensions.

From-SVN: r180850
2011-11-03 21:08:25 +00:00
Mikael Morin
37f1447217 trans-array.c (get_array_ref_dim): Remove redundant condition.
* trans-array.c (get_array_ref_dim): Remove redundant condition.

From-SVN: r180849
2011-11-03 21:03:56 +00:00
Mikael Morin
1190b61129 trans-array.c (gfc_trans_preloop_setup): Move common code...
* trans-array.c (gfc_trans_preloop_setup): Move common code...
	(add_array_offset): ...into that new function.

From-SVN: r180848
2011-11-03 21:00:41 +00:00
Mikael Morin
e2b3e6bdd6 trans-array.c (gfc_trans_preloop_setup): Use loop's dimension instead of array's dimention.
* trans-array.c (gfc_trans_preloop_setup): Use loop's dimension instead
	of array's dimention. Check that it is indeed the same.

From-SVN: r180847
2011-11-03 20:56:19 +00:00
Mikael Morin
4f9a70fa31 trans-array.c (gfc_trans_preloop_setup): Remove redundant assertion.
* trans-array.c (gfc_trans_preloop_setup): Remove redundant assertion.
	Special case outermost loop.

From-SVN: r180846
2011-11-03 20:52:14 +00:00
Mikael Morin
7f6d568e74 trans-array.c (gfc_trans_preloop_setup): Factor loop index initialization.
* trans-array.c (gfc_trans_preloop_setup): Factor loop index
	initialization.

From-SVN: r180844
2011-11-03 20:49:14 +00:00
Mikael Morin
bee1695c21 trans-array.c (gfc_trans_preloop_setup): Move code earlier.
* trans-array.c (gfc_trans_preloop_setup): Move code earlier.

From-SVN: r180843
2011-11-03 20:46:00 +00:00
Mikael Morin
1fb35a9015 trans-array.c (gfc_trans_preloop_setup): Move array reference initialisation earlier.
* trans-array.c (gfc_trans_preloop_setup): Move array reference
	initialisation earlier. Factor subsequent array references.

From-SVN: r180842
2011-11-03 20:28:58 +00:00
Mikael Morin
6b81e94de1 re PR fortran/50420 ([Coarray] lcobound doesn't accept coarray subcomponents)
PR fortran/50420
	* trans-array.c (gfc_walk_array_ref): Allow zero rank arrays
	if they are coarrays.

From-SVN: r180145
2011-10-18 14:55:48 +00:00
Mikael Morin
42ac5ee128 trans-array.h (gfc_walk_array_ref): New prototype.
* trans-array.h (gfc_walk_array_ref): New prototype.
	* trans-array.c (gfc_walk_array_ref): New function, containing
	all but the beginning of gfc_walk_variable_expr's code.
	(gfc_walk_variable_expr): Use gfc_walk_array_ref.

From-SVN: r180144
2011-10-18 14:53:43 +00:00
Mikael Morin
700535b75f re PR fortran/50420 ([Coarray] lcobound doesn't accept coarray subcomponents)
PR fortran/50420
	* trans-array.c (gfc_conv_expr_descriptor): Use loop.dimen instead of
	ndim for the descriptor's rank.

From-SVN: r180143
2011-10-18 14:45:46 +00:00
Mikael Morin
a04b23d8a4 re PR fortran/50420 ([Coarray] lcobound doesn't accept coarray subcomponents)
PR fortran/50420
	* trans-array.c (gfc_conv_expr_descriptor): Count codimensions starting
	from zero, and add then the relevant offset (either ndim or loop.dimen)
	depending on context.

From-SVN: r180142
2011-10-18 14:42:21 +00:00
Mikael Morin
7c5950bd7f trans-array.c (gfc_conv_expr_descriptor): Save some horizontal space.
* trans-array.c (gfc_conv_expr_descriptor): Save some horizontal space.

From-SVN: r180141
2011-10-18 14:37:39 +00:00
Mikael Morin
c2558afc97 trans-array.c (gfc_conv_expr_descriptor): Move ndim initialization earlier.
* trans-array.c (gfc_conv_expr_descriptor): Move ndim initialization
	earlier.

From-SVN: r180140
2011-10-18 14:32:03 +00:00
Michael Meissner
e79983f458 Convert standard builtin functions from being arrays to using a functional interface
From-SVN: r179820
2011-10-11 19:55:09 +00:00
Paul Thomas
30a390c810 re PR fortran/47844 (Array stride ignored for pointer-valued function results)
2011-10-08  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/47844
	* trans-array.c (gfc_conv_array_index_offset): Use descriptor
	stride for pointer function results.

2011-10-08  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/47844
	* gfortran.dg/pointer_function_result_1.f90 : New test.

From-SVN: r179710
2011-10-08 10:18:51 +00:00
Mikael Morin
621babd8d0 trans-array.c (gfc_conv_expr_descriptor): Remove trailing whitespace.
* trans-array.c	(gfc_conv_expr_descriptor): Remove trailing whitespace.

From-SVN: r179695
2011-10-07 20:56:31 +00:00
Mikael Morin
c2eb5b539f trans-array.c (gfc_conv_ss_startstride): Merge two switch cases.
* trans-array.c	(gfc_conv_ss_startstride): Merge two switch cases.

From-SVN: r179694
2011-10-07 20:35:47 +00:00
Mikael Morin
065c6f9de2 trans-array.c (gfc_conv_section_startstride): Remove coarray argument.
* trans-array.c (gfc_conv_section_startstride): Remove coarray argument.
	Remove conditions on coarray.
	(gfc_conv_ss_startstride): Update call to gfc_conv_section_startstride.
	(gfc_conv_expr_descriptor): Ditto. Add assertions before the call.

From-SVN: r179693
2011-10-07 20:32:37 +00:00
Mikael Morin
6cb0246c1b trans-array.c (gfc_conv_section_startstride): Remove coarray_last argument.
* trans-array.c (gfc_conv_section_startstride): Remove coarray_last
	argument. Remove condition on coarray_last.
	(gfc_conv_ss_startstride): Update call to gfc_conv_section_startstride.
	(gfc_conv_expr_descriptor): Ditto.

From-SVN: r179692
2011-10-07 20:29:27 +00:00
Mikael Morin
d7baf64789 trans-array.c (gfc_walk_variable_expr): Remove scalar coarray handling.
* trans-array.c (gfc_walk_variable_expr): Remove scalar coarray
	handling.  Don't reset array ref's corank and codimensions' types
	in the full array ref case.  Update loop upper limit.
	Remove DIMEN_THIS_IMAGE case.  Remove unnecessary conditions.

From-SVN: r179691
2011-10-07 20:26:11 +00:00
Mikael Morin
677e2daebf trans.h (gfc_ss_info): Remove codimen field.
* trans.h (gfc_ss_info): Remove codimen field.
	* trans-array.c (gfc_get_array_ss): Don't set codimen field.
	(gfc_trans_create_temp_array): Don't set descriptor's cobounds.
	(gfc_trans_constant_array_constructor): Update loop upper limit.
	(gfc_conv_ss_startstride): Don't set codimen field.
	Don't get descriptor's cobounds.
	(gfc_walk_variable_expr): Update dimension index.
	* trans-intrinsic.c (trans_this_image, trans_image_index,
	conv_intrinsic_cobound): Don't set codimen field

From-SVN: r179690
2011-10-07 20:22:50 +00:00
Mikael Morin
c6d741b85b trans.h (gfc_loopinfo): Remove codimen field.
* trans.h (gfc_loopinfo): Remove codimen field.
	* trans-array.c (gfc_set_vector_loop_bounds,
	gfc_trans_scalarizing_loops, gfc_conv_loop_setup): Update loop upper
	limit.
	(gfc_set_loop_bounds_from_array_spec): Ditto. Remove skip on last
	codimension.
	(gfc_start_scalarized_body): Update loop lower limit.
	(gfc_conv_ss_startstride): Don't set loop's codimen field.
	(gfc_conv_loop_setup): Remove unnecessary condition.
	(gfc_conv_expr_descriptor): Don't use loop's codimen field as corank.

From-SVN: r179689
2011-10-07 20:14:44 +00:00
Mikael Morin
8e50858e07 trans.h (gfc_ss): Remove data.temp.codimen field.
* trans.h (gfc_ss): Remove data.temp.codimen field.
	* trans-array.c (gfc_conv_resolve_dependencies,
	gfc_conv_expr_descriptor): Don't set temp's codimen field.

From-SVN: r179686
2011-10-07 20:05:35 +00:00
Mikael Morin
6bd0ce7b61 trans-array.c (gfc_conv_expr_descriptor): Add out-of-the-scalarizer cobounds evaluation.
* trans-array.c (gfc_conv_expr_descriptor): Add out-of-the-scalarizer
	cobounds evaluation.

From-SVN: r179683
2011-10-07 19:47:07 +00:00
Mikael Morin
199c387dd1 trans-array.c (gfc_conv_ss_startstride): Support zero rank loop.
* trans-array.c (gfc_conv_ss_startstride): Support zero rank loop.

From-SVN: r179682
2011-10-07 19:43:21 +00:00
Mikael Morin
287b3dd2b2 trans-array.c (gfc_conv_section_startstride): Move code to evaluate_bound.
* trans-array.c (gfc_conv_section_startstride): Move code to
	evaluate_bound.  Use evaluate_bound.
	(evaluate_bound): New function.

From-SVN: r179681
2011-10-07 19:39:22 +00:00
Mikael Morin
b0ac6998a7 trans-array.c (gfc_conv_section_startstride): Update assertion to also accept coarrays.
* trans-array.c (gfc_conv_section_startstride): Update assertion to
	also accept coarrays.

From-SVN: r179680
2011-10-07 19:36:20 +00:00
Mikael Morin
3ca398580d trans-array.c (gfc_conv_section_startstride): Factor common array ref references.
* trans-array.c (gfc_conv_section_startstride): Factor common
	array ref references.

From-SVN: r179679
2011-10-07 19:33:10 +00:00
Mikael Morin
a7525708c6 trans-array.c (gfc_conv_expr_descriptor): Use codim instead of loop.codimen as argument to gfc_get_array_type_bounds.
* trans-array.c (gfc_conv_expr_descriptor): Use codim instead of
	loop.codimen as argument to gfc_get_array_type_bounds.

From-SVN: r179677
2011-10-07 19:28:55 +00:00
Mikael Morin
23c3d0f972 trans-array.h (struct gfc_se): New flag want_coarray.
* trans-array.h (struct gfc_se): New flag want_coarray.
	* trans-intrinsic.c (trans_this_image, trans_image_index,
	conv_intrinsic_cobound): Set want_coarray.
	* trans_array.c (gfc_conv_expr_descriptor): Evaluate codimension
	earlier and without relying on the scalarizer.

From-SVN: r179676
2011-10-07 19:24:07 +00:00
Mikael Morin
bb033c9adc trans-array.c (gfc_conv_expr_descriptor): Simplify coarray descriptor setup code.
* trans-array.c (gfc_conv_expr_descriptor): Simplify coarray
	descriptor setup code.

From-SVN: r179674
2011-10-07 19:11:01 +00:00
Mikael Morin
e97b61c26e trans-array.c (gfc_trans_constant_array_constructor): Remove superfluous initialisation of DIM field.
2011-09-08  Mikael Morin  <mikael.morin@sfr.fr>

	* trans-array.c (gfc_trans_constant_array_constructor): Remove
	superfluous initialisation of DIM field.
	(gfc_trans_array_constructor): Assert that DIMEN field is properly set.
	(gfc_conv_expr_descriptor): Ditto.
	* trans-expr.c (gfc_conv_procedure_call): Ditto.

From-SVN: r178698
2011-09-08 15:40:48 +00:00
Mikael Morin
26f7753013 trans-array.h (gfc_get_scalar_ss): New prototype.
2011-09-08  Mikael Morin  <mikael.morin@sfr.fr>

	* trans-array.h (gfc_get_scalar_ss): New prototype.
	* trans-array.c (gfc_get_scalar_ss): New function.
	(gfc_walk_variable_expr, gfc_walk_op_expr,
	gfc_walk_elemental_function_args): Re-use gfc_get_scalar_ss.
	* trans-expr.c (gfc_trans_subarray_assign): Ditto.
	(gfc_trans_assignment_1): Ditto.
	* trans-stmt.c (compute_inner_temp_size, gfc_trans_where_assign,
	gfc_trans_where_3): Ditto.

From-SVN: r178697
2011-09-08 15:30:39 +00:00
Mikael Morin
a1ae4f435f trans-array.h (gfc_get_temp_ss): New prototype.
2011-09-08  Mikael Morin  <mikael.morin@sfr.fr>

	* trans-array.h (gfc_get_temp_ss): New prototype.
	* trans-array.c (gfc_get_temp_ss): New function.
	(gfc_conv_resolve_dependencies): Re-use gfc_get_temp_ss.
	(gfc_conv_expr_descriptor): Ditto.
	* trans-expr.c (gfc_conv_subref_array_arg): Ditto.

From-SVN: r178696
2011-09-08 15:18:20 +00:00
Mikael Morin
6687727615 trans-array.h (gfc_get_array_ss): New prototype.
2011-09-08  Mikael Morin  <mikael.morin@sfr.fr>

	* trans-array.h (gfc_get_array_ss): New prototype.
	* trans-array.c (gfc_get_array_ss): New function.
	(gfc_walk_variable_expr, gfc_walk_function_expr,
	gfc_walk_array_constructor): Re-use gfc_get_array_ss.
	* trans-expr.c (gfc_trans_subarray_assign): Ditto.
	* trans-intrinsic.c (gfc_walk_intrinsic_bound,
	gfc_walk_intrinsic_libfunc): Ditto.
	* trans-io.c (transfer_array_component): Ditto.

From-SVN: r178695
2011-09-08 15:07:01 +00:00
Tobias Burnus
aa13dc3c93 trans-array.c (gfc_conv_descriptor_token): Add assert.
2011-08-25  Tobias Burnus  <burnus@net-b.de>

        * trans-array.c (gfc_conv_descriptor_token): Add assert.
        * trans-decl.c (gfc_build_qualified_array,
        create_function_arglist): Handle assumed-shape arrays.
        * trans-expr.c (gfc_conv_procedure_call): Ditto.
        * trans-types.c (gfc_get_array_descriptor_base): Ditto, don't
        add "caf_token" to assumed-shape descriptors, new akind argument.
        (gfc_get_array_type_bounds): Pass akind.
        * trans.h (lang_decl): New elements caf_offset and token.
        (GFC_DECL_TOKEN, GFC_DECL_CAF_OFFSET): New macros.

2011-08-25  Tobias Burnus  <burnus@net-b.de>

        * gfortran.dg/coarray_lib_token_4.f90: New.

From-SVN: r178069
2011-08-25 18:27:39 +02:00
Tobias Burnus
241e79cfc4 trans-array.c (structure_alloc_comps): Fix for allocatable scalar coarray components.
2011-08-25  Tobias Burnus  <burnus@net-b.de>

        * trans-array.c (structure_alloc_comps): Fix for allocatable
        scalar coarray components.
        * trans-expr.c (gfc_conv_component_ref): Ditto.
        * trans-type.c (gfc_get_derived_type): Ditto.

2011-08-25  Tobias Burnus  <burnus@net-b.de>

        * gfortran.dg/coarray/alloc_comp_1.f90: New.

From-SVN: r178068
2011-08-25 17:59:40 +02:00
Richard Guenther
428f80e651 re PR tree-optimization/49957 (Fails to SLP in 410.bwaves)
2011-08-04  Richard Guenther  <rguenther@suse.de>

	PR fortran/49957
	* trans-array.c (add_to_offset): New function.
	(gfc_conv_array_ref): Build the array index expression in optimally
	associated order.
	(gfc_walk_variable_expr): Adjust for the backward walk.

	* gfortran.dg/vect/O3-pr49957.f: New testcase.

From-SVN: r177368
2011-08-04 12:22:42 +00:00
Daniel Kraft
f315a6b438 re PR fortran/49885 (Segmentation fault when writing to an automatic character array)
2011-08-02  Daniel Kraft  <d@domob.eu>

	PR fortran/49885
	* trans-array.c (gfc_trans_auto_array_allocation): Change
	gfc_start_block to gfc_init_block to avoid spurious extra-scope.

2011-08-02  Daniel Kraft  <d@domob.eu>

	PR fortran/49885
	* gfortran.dg/auto_char_dummy_array_3.f90: New test.

From-SVN: r177211
2011-08-02 22:10:13 +02:00
Tobias Burnus
979d459888 trans-array.c (gfc_array_allocate): Pass token to gfc_allocate_allocatable for -fcoarray=lib.
2011-08-02  Tobias Burnus  <burnus@net-b.de>

        * trans-array.c (gfc_array_allocate): Pass token to
          gfc_allocate_allocatable for -fcoarray=lib.
        * trans-stmt.c (gfc_trans_allocate): Update
        gfc_allocate_allocatable call.
        * trans.h (gfc_allocate_allocatable): Update prototype.
        (gfc_allocate_using_lib): Remove.
        * trans.c (gfc_allocate_using_lib): Make static, handle
        token.
        (gfc_allocate_allocatable): Ditto.

2011-08-02  Tobias Burnus  <burnus@net-b.de>

        * gfortran.dg/coarray_lib_token_3.f90: New.

From-SVN: r177198
2011-08-02 20:07:52 +02:00
Daniel Carrera
4f13e17fff re PR fortran/49755 (ALLOCATE with STAT= produces invalid code for already allocated vars)
2011-07-26  Daniel Carrera  <dcarrera@gmail.com>

	PR fortran/49755
	* trans.c (gfc_allocate_using_malloc): Change function signature.
	Return nothing. New parameter "pointer". Eliminate temorary variables.
	(gfc_allocate_using_lib): Ditto.
	(gfc_allocate_allocatable): Ditto. Update call to gfc_allocate_using_lib
	and gfc_allocate_using_malloc. Do not free and then reallocate a
	variable that is already allocated.
	(gfc_likely): New function. Basedon gfc_unlikely.
	* trans-array.c (gfc_array_init_size): New parameter "descriptor_block".
	Instructions to modify the array descriptor are stored in this block
	while other instructions continue to be stored in "pblock".
	(gfc_array_allocate): Update call to gfc_array_init_size. Move the
	descriptor_block so that the array descriptor is only updated if
	the array was allocated successfully.
	Update calls to gfc_allocate_allocatable and gfc_allocate_using_malloc.
	* trans.h (gfc_allocate_allocatable): Change function signature.
	Function now returns void.
	(gfc_allocate_using_lib): Ditto, and new function parameter.
	(gfc_allocate_using_malloc): Ditto.
	* trans-openmp.c (gfc_omp_clause_default_ctor,
	gfc_omp_clause_copy_ctor,gfc_trans_omp_array_reduction): Replace a call
	to gfc_allocate_allocatable with gfc_allocate_using_malloc.
	* trans-stmt.c (gfc_trans_allocate): Update function calls for
	gfc_allocate_allocatable and gfc_allocate_using_malloc.



2011-07-26  Daniel Carrera  <dcarrera@gmail.com>

	PR fortran/49755
	* gfortran.dg/multiple_allocation_1.f90: Fix test. Allocating an
	allocated array should *not* change its size.
	* gfortran.dg/multiple_allocation_3.f90: New test.

From-SVN: r176822
2011-07-27 10:10:06 +00:00
Tobias Burnus
af232d48a7 trans-array.c (CAF_TOKEN_FIELD): New macro constant.
2011-07-26  Tobias Burnus  <burnus@net-b.de>

        * trans-array.c (CAF_TOKEN_FIELD): New macro constant.
        (gfc_conv_descriptor_token): New function.
        * trans-array.h (gfc_conv_descriptor_token): New prototype.
        * trans-types.c (gfc_get_array_descriptor_base): For coarrays
        with -fcoarray=lib, append "void *token" to the array descriptor.
        (gfc_array_descriptor_base_caf): New static variable.
        * trans-expr.c (gfc_conv_procedure_call): Handle token and
        * offset
        when passing a descriptor coarray to a nondescriptor dummy.

2011-07-26  Tobias Burnus  <burnus@net-b.de>

        * gfortran.dg/coarray_lib_token_2.f90: New.

From-SVN: r176784
2011-07-26 09:30:37 +02:00
Daniel Carrera
8f992d640e trans.c (gfc_allocate_with_status): Split into two functions gfc_allocate_using_malloc and gfc_allocate_usig_lib.
2011-07-21  Daniel Carrera  <dcarrera@gmail.com>

	* trans.c (gfc_allocate_with_status): Split into two functions
	gfc_allocate_using_malloc and gfc_allocate_usig_lib.
	(gfc_allocate_using_malloc): The status parameter is now the
	actual status rather than a pointer. Code cleanup.
	(gfc_allocate_using_lib): Ditto. Add new parametrs errmsg and
	errlen. Pass these to the coarray lib.
	* trans-openmp.c (gfc_omp_clause_default_ctor): Update calls to
	gfc_allocate_allocatable.
	(gfc_omp_clause_copy_ctor): Ditto.
	(gfc_trans_omp_array_reduction): Ditto.
	* trans-stmt.c (gfc_trans_allocate): Ditto. Update call to
	gfc_allocate_using_malloc. Pass stat rather than pstat to the allocate
	fuctions. If using coarray lib, pass errmsg and errlen to the allocate
	functions. Move error checking outside the if (!gfc_array_allocate)
	block so that it also affects trees produced by gfc_array_allocate.
	* trans-array.c (gfc_array_allocate): Add new parameters errmsg
	and errlen. Replace parameter pstat by status. Code cleanup. Update
	calls to gfc_allocate_allocatable and gfc_allocate_using_malloc.
	* trans-array.h (gfc_array_allocate): Update signature of
	gfc_array_allocate.

From-SVN: r176606
2011-07-21 23:18:24 +00:00