Commit Graph

77 Commits

Author SHA1 Message Date
Tobias Schlüter
da4c6ed815 re PR fortran/25392 (ICEs with -ff2c)
PR fortran/25392
fortran/
* trans-stmt.c (gfc_trans_return): Fix comment formatting.
* trans-types.c (gfc_sym_type): Don't return early for functions.
Remove special handling for -ff2c.
(gfc_get_function_type): Add special handling for -ff2c.
* trans-decl.c (gfc_create_function_decl): Fix comment formatting.
(gfc_get_fake_result_decl): Make sure we get the right type for
functions.
(gfc_generate_function_code): Convert type of result variable to
type of function.
testsuite/
* gfortran.dg/f2c_8.f90: New test.

From-SVN: r120099
2006-12-21 04:04:43 +01:00
Richard Guenther
54200abb68 re PR fortran/30115 (allocate() interface pessimizes aliasing)
2006-12-13  Richard Guenther  <rguenther@suse.de>

	PR fortran/30115
	* runtime/memory.c (allocate_size): Change interface to
	void *()(size_t, GFC_INTEGER_4 *).
	(allocate): Likewise.
	(allocate64): Likewise.
	(allocate_array): Change interface to
	void *()(void *, size_t, GFC_INTEGER_4 *).
	(allocate64_array): Likewise.
	(deallocate): Change interface to
	void ()(void *, GFC_INTEGER_4 *).

	* trans-array.c (gfc_array_allocate): Adjust for changed
	library interface.
	(gfc_array_deallocate): Likewise.
	(gfc_trans_dealloc_allocated): Likewise.
	* trans-stmt.c (gfc_trans_allocate): Likewise.
	(gfc_trans_deallocate): Likewise.
	* trans-decl.c (gfc_build_builtin_function_decls): Adjust
	function declarations to match the library changes.  Mark
	allocation functions with DECL_IS_MALLOC.

From-SVN: r119822
2006-12-13 09:57:56 +00:00
Francois-Xavier Coudert
5a0aad3165 re PR fortran/26025 (Optionally use BLAS for matmul)
PR fortran/26025

	* lang.opt: Add -fexternal-blas and -fblas-matmul-limit options.
	* options.c (gfc_init_options): Initialize new flags.
	(gfc_handle_option): Handle new flags.
	* gfortran.h (gfc_option): Add flag_external_blas and
	blas_matmul_limit flags.
	* trans-expr.c (gfc_conv_function_call): Use new argument
	append_args, appending it at the end of the argument list
	built for a function call.
	* trans-stmt.c (gfc_trans_call): Use NULL_TREE for the new
	append_args argument to gfc_trans_call.
	* trans.h (gfc_conv_function_call): Update prototype.
	* trans-decl.c (gfc_build_intrinsic_function_decls): Add
	prototypes for BLAS ?gemm routines.
	* trans-intrinsic.c (gfc_conv_intrinsic_funcall): Generate the
	extra arguments given to the library matmul function, and give
	them to gfc_conv_function_call.
	* invoke.texi: Add documentation for -fexternal-blas and
	-fblas-matmul-limit.

	* m4/matmul.m4: Add possible call to gemm routine.
	* generated/matmul_r8.c: Regenerate.
	* generated/matmul_r16.c: Regenerate.
	* generated/matmul_c8.c: Regenerate.
	* generated/matmul_i8.c: Regenerate.
	* generated/matmul_c16.c: Regenerate.
	* generated/matmul_r10.c: Regenerate.
	* generated/matmul_r4.c: Regenerate.
	* generated/matmul_c10.c: Regenerate.
	* generated/matmul_c4.c: Regenerate.
	* generated/matmul_i4.c: Regenerate.
	* generated/matmul_i16.c: Regenerate.

From-SVN: r117948
2006-10-22 07:41:48 +00:00
Paul Thomas
6b591ec0ba [multiple changes]
2006-10-19  Paul Thomas <pault@gcc.gnu.org>

	PR fortran/29216
	PR fortran/29314
	* gfortran.h : Add EXEC_INIT_ASSIGN.
	* dump-parse-tree.c (gfc_show_code_node): The same.
	* trans-openmp.c (gfc_trans_omp_array_reduction): Set new
	argument for gfc_trans_assignment to false.
	* trans-stmt.c (gfc_trans_forall_1): The same.
	* trans-expr.c (gfc_conv_function_call, gfc_trans_assign,
	gfc_trans_arrayfunc_assign, gfc_trans_assignment): The
	same. In the latter function, use the new flag to stop
	the checking of the lhs for deallocation.
	(gfc_trans_init_assign): New function.
	* trans-stmt.h : Add prototype for gfc_trans_init_assign.
	* trans.c (gfc_trans_code): Implement EXEC_INIT_ASSIGN.
	* trans.h : Add new boolean argument to the prototype of
	gfc_trans_assignment.
	* resolve.c (resolve_allocate_exp): Replace EXEC_ASSIGN by
	EXEC_INIT_ASSIGN.
	(resolve_code): EXEC_INIT_ASSIGN does not need resolution.
	(apply_default_init): New function.
	(resolve_symbol): Call it for derived types that become
	defined but which do not already have an initialization
	expression..
	* st.c (gfc_free_statement): Include EXEC_INIT_ASSIGN.

2006-10-19  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/29216
	* gfortran.dg/result_default_init_1.f90: New test.

	PR fortran/29314
	* gfortran.dg/automatic_default_init_1.f90: New test.

	* gfortran.dg/alloc_comp_basics_1.f90: Reduce deallocate count
	from 38 to 33.

From-SVN: r117879
2006-10-19 04:51:14 +00:00
Tobias Burnus
fa9516946c trans-stmt.c: Fix a typo
2006-10-16  Tobias Burnus <burnus@net-b.de>

       * trans-stmt.c: Fix a typo
       * invoke.texi: Fix typos
       * resolve.c: Fix a comment typo
       * trans-decl.c: Fix a comment typo
       * primary.c: Fix a comment typo

From-SVN: r117781
2006-10-16 13:17:29 +02:00
Paul Thomas
5046aff56b [multiple changes]
2006-10-05  Erik Edelmann <edelmann@gcc.gnu.org>
	    Paul Thomas <pault@gcc.gnu.org>

	PR fortran/20541
	* interface.c (gfc_compare_derived_types): Add comparison of
	the allocatable field.
	* intrinsic.c (add_subroutines): Add MOVE_ALLOC.
	* trans-expr.c (gfc_conv_aliased_arg, gfc_trans_subarray_assign,
	gfc_trans_subcomponent_assign, gfc_conv_string_parameter,
	gfc_trans_scalar_assign): Add extra arguments l_is_temp
	and r_is_var to references to latter function.
	(gfc_conv_function_call): Add enum for types of argument and
	an associated variable parm_kind. Deallocate components of
	INTENT(OUT) and non-variable arrays.
	(gfc_trans_subcomponent_assign): Add block to assign arrays
	to allocatable components.
	(gfc_trans_scalar_assign): Add block to handle assignments of
	derived types with allocatable components, using the above new
	arguments to control allocation/deallocation of memory and the
	copying of allocated arrays.
	* trans-array.c (gfc_array_allocate): Remove old identification 
	of pointer and replace with that of an allocatable array. Add
	nullify of structures with allocatable components. 
	(gfc_conv_array_initializer): Treat EXPR_NULL.
	(gfc_conv_array_parameter): Deallocate allocatable components
	of non-variable structures.
	(gfc_trans_dealloc_allocated): Use second argument of library
	deallocate to inhibit, without error, freeing NULL pointers.
	(get_full_array_size): New function to return the size of a
	full array.
	(gfc_duplicate_allocatable): New function to allocate and copy
	allocated data.
	(structure_alloc_comps): New recursive function to deallocate,
	nullify or copy allocatable components.
	(gfc_nullify_alloc_comp, gfc_deallocate_alloc_comp,
	gfc_copy_alloc_comp): New interface functions to call previous.
	(gfc_trans_deferred_array): Add the code to nullify allocatable
	components, when entering scope, and to deallocate them on
	leaving. Do not call gfc_trans_static_array_pointer and return
	for structures with allocatable components and default
	initializers.
	* symbol.c (gfc_set_component_attr): Set allocatable field.
	(gfc_get_component_attr): Set the allocatable attribute.
	* intrinsic.h : Prototype for gfc_check_move_alloc.
	* decl.c (build_struct): Apply TR15581 constraints for
	allocatable components.
	(variable_decl): Default initializer is always NULL for
	allocatable components.
	(match_attr_spec): Allow, or not, allocatable components,
	according to the standard in force.
	* trans-array.h : Prototypes for gfc_nullify_alloc_comp,
	gfc_deallocate_alloc_comp, gfc_copy_alloc_comp and
	gfc_duplicate_allocatable.
	* gfortran.texi : Add mention of TR15581 extensions.
	* gfortran.h : Add attribute alloc_comp, add
	gfc_components field allocatable and add the prototype
	for gfc_expr_to_initialize.
	* trans-stmt.c (generate_loop_for_temp_to_lhs,
	generate_loop_for_rhs_to_temp, gfc_trans_where_assign,
	gfc_trans_where_3): Add extra arguments to calls to
	gfc_trans_scalar_assign and set appropriately.
	(gfc_trans_allocate): Nullify allocatable components.
	(gfc_trans_deallocate): Deallocate to ultimate allocatable
	components but stop at ultimate pointer components.
	* module.c (mio_symbol_attribute, mio_symbol_attribute,
	mio_component): Add module support for allocatable
	components.
	* trans-types.c (gfc_get_derived_type): Treat allocatable
	components.
	* trans.h : Add two boolean arguments to
	gfc_trans_scalar_assign.
	* resolve.c (resolve_structure_cons): Check conformance of
	constructor element and the component.
	(resolve_allocate_expr): Add expression to nullify the
	constructor expression for allocatable components.
	(resolve_transfer): Inhibit I/O of derived types with
	allocatable components.
	(resolve_fl_derived): Skip check of bounds of allocatable
	components.
	* trans-decl.c (gfc_get_symbol_decl): Add derived types
	with allocatable components to deferred variable.
	(gfc_trans_deferred_vars): Make calls for derived types
	with allocatable components to gfc_trans_deferred_array.
	(gfc_generate_function_code): Nullify allocatable
	component function result on entry.
	* parse.c (parse_derived): Set symbol attr.allocatable if
	allocatable components are present.
	* check.c (gfc_check_allocated): Enforce attr.allocatable
	for intrinsic arguments.
	(gfc_check_move_alloc): Check arguments of move_alloc.
	* primary.c (gfc_variable_attr): Set allocatable attribute.
	* intrinsic.texi : Add index entry and section for
	for move_alloc.

	PR fortran/29115
	* resolve.c (resolve_structure_cons): It is an error if the
	pointer component elements of a derived type constructor are
	not pointer or target.


	PR fortran/29211
	* trans-stmt.c (generate_loop_for_temp_to_lhs,
	generate_loop_for_rhs_to_temp): Provide a string length for
	the temporary by copying that of the other side of the scalar
	assignment.


2006-10-05  Paul Thomas  <pault@gcc.gnu.org>
	    Erik Edelmann  <edelmann@gcc.gnu.org>

	PR libgfortran/20541
	* Makefile.in : Add move_alloc.
	* intrinsics/move_alloc.c: New function.
	* Makefile.am : Add move_alloc.



2006-10-05  Erik Edelmann  <edelmann@gcc.gnu.org>
	    Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/20541
	* gfortran.dg/alloc_comp_basics_1.f90: New test.
	* gfortran.dg/alloc_comp_basics_2.f90: New test.
	* gfortran.dg/alloc_comp_assign_1.f90: New test.
	* gfortran.dg/alloc_comp_assign_2.f90: New test.
	* gfortran.dg/alloc_comp_assign_3.f90: New test.
	* gfortran.dg/alloc_comp_assign_4.f90: New test.
	* gfortran.dg/alloc_comp_constraint_1.f90: New test.
	* gfortran.dg/alloc_comp_constraint_2.f90: New test.
	* gfortran.dg/alloc_comp_constraint_3.f90: New test.
	* gfortran.dg/alloc_comp_constructor_1.f90: New test.
	* gfortran.dg/alloc_comp_constructor_2.f90: New test.
	* gfortran.dg/alloc_comp_initializer_1.f90: New test.
	* gfortran.dg/alloc_comp_std.f90: New test.
	* gfortran.dg/move_alloc.f90: New test.

	PR fortran/29115
	* gfortran.dg/derived_constructor_comps_2.f90: New test.

	PR fortran/29211
	* gfortran.dg/forall_char_dependencies_1.f90: New test.

From-SVN: r117558
2006-10-08 16:21:55 +00:00
Paul Thomas
dc6c771432 re PR fortran/29101 (Memory leak in gfortran)
2006-09-19 Paul Thomas <pault@gcc.gnu.org>
	   Steven Bosscher  <steven@gcc.gnu.org>

	PR fortran/29101
	* trans-stmt.c (gfc_trans_character_select): Store the label
	from select_string and then clean up any temporaries from the
	conversion of the select expression, before branching to the
	selected case.


Co-Authored-By: Steven Bosscher <steven@gcc.gnu.org>

From-SVN: r117053
2006-09-19 11:04:55 +00:00
Paul Thomas
fd2aa7ad9f re PR fortran/28526 ('end' is recognized as a variable incorrectly)
2006-09-18 Paul Thomas <pault@gcc.gnu.org>

	PR fortran/28526
	* primary.c (match_variable): If the compiler is in a module
	specification block, an interface block or a contains section,
	reset host_flag to force the changed symbols mechanism.

	PR fortran/29101
	* trans-stmt.c (gfc_trans_character_select): Add the post block
	for the expression to the main block, after the call to
	select_string and the last label.


2006-09-18 Paul Thomas <pault@gcc.gnu.org>

	PR fortran/28526
	* gfortran.dg/keyword_symbol_1.f90: New test.

	* gfortran.dg/spread_shape_1.f90: Add missing warning with
	pedantic compilation option.

From-SVN: r117034
2006-09-18 20:19:50 +00:00
Steven Bosscher
5ec1334b94 re PR fortran/28439 ([4.1 only] Multiple evaluations of arithmetic if condition)
2006-07-22  Steven Bosscher  <steven@gcc.gnu.org> 

	PR fortran/28439
	* trans-stmt.c (gfc_trans_arithmetic_if): Evaluate the condition once.

From-SVN: r115677
2006-07-22 17:55:35 +00:00
Francois-Xavier Coudert
ca86ddcc24 re PR fortran/27874 (Bad interaction between bounds checking, forall and derived types)
PR fortran/27874
	* trans-stmt.c (compute_inner_temp_size): Don't perform bounds
	checking when calculating the bounds of scalarization.

From-SVN: r115224
2006-07-06 17:12:25 +00:00
Francois-Xavier Coudert
c3238e32eb trans-expr.c (gfc_conv_missing_dummy, [...]): Replace calls to convert on constant integer nodes by build_int_cst.
* trans-expr.c (gfc_conv_missing_dummy, gfc_conv_unary_op,
	gfc_conv_cst_int_power, gfc_conv_string_tmp,
	gfc_conv_function_call): Replace calls to convert on constant
	integer nodes by build_int_cst.
	* trans-stmt.c (gfc_trans_do): Likewise.
	* trans-io.c (set_internal_unit, transfer_namelist_element):
	Likewise.
	* trans-decl.c (build_entry_thunks): Likewise.

From-SVN: r114868
2006-06-21 20:44:31 +00:00
Thomas Koenig
da4340a1ac trans-array.h (gfc_trans_create_temp_array): Add bool argument.
2006-06-15  Thomas Koenig <Thomas.Koenig@online.de>

	* trans-array.h (gfc_trans_create_temp_array):  Add bool
	argument.
	* trans-arrray.c (gfc_trans_create_temp_array): Add extra
	argument "function" to show if we are translating a function.
	If we are translating a function, perform checks whether
	the size along any argument is negative.  In that case,
	allocate size 0.
	(gfc_trans_allocate_storage):  Add function argument (as
	false) to gfc_trans_create_temp_array call.
	* trans-expr.c (gfc_conv_function_call):  Add function
	argument (as true) to gfc_trans_create_temp_array call.
	* trans-stmt.c (gfc_conv_elemental_dependencies): Add
	function argument (as false) to gfc_trans_create_temp_array
	call.
	* trans-intrinsic.c:  Likewise.

2006-06-15  Thomas Koenig <Thomas.Koenig@online.de>

	* gfortran.dg/allocate_zerosize_2.f90:  New test case.

From-SVN: r114677
2006-06-15 10:30:09 +00:00
Francois-Xavier Coudert
dd18a33bd9 trans.c (gfc_msg_bounds, [...]): Add strings for common runtime error messages.
* trans.c (gfc_msg_bounds, gfc_msg_fault, gfc_msg_wrong_return):
	Add strings for common runtime error messages.
	(gfc_trans_runtime_check): Add a locus argument, use a string
	and not a string tree for the message.
	* trans.h (gfc_trans_runtime_check): Change prototype accordingly.
	(gfc_msg_bounds, gfc_msg_fault, gfc_msg_wrong_return): Add proto.
	* trans-const.c (gfc_strconst_bounds, gfc_strconst_fault,
	gfc_strconst_wrong_return, gfc_strconst_current_filename): Remove.
	(gfc_init_constants): Likewise.
	* trans-const.h: Likewise.
	* trans-decl.c (gfc_build_builtin_function_decls): Call to
	_gfortran_runtime_error has only one argument, the message string.
	* trans-array.h (gfc_conv_array_ref): Add a symbol argument and a
	locus.
	* trans-array.c (gfc_trans_array_bound_check): Build precise
	error messages.
	(gfc_conv_array_ref): Use the new symbol argument and the locus
	to build more precise error messages.
	(gfc_conv_ss_startstride): More precise error messages.
	* trans-expr.c (gfc_conv_variable): Give symbol reference and
	locus to gfc_conv_array_ref.
	(gfc_conv_function_call): Use the new prototype for
	gfc_trans_runtime_check.
	* trans-stmt.c (gfc_trans_goto): Build more precise error message.
	* trans-io.c (set_string): Likewise.
	* trans-intrinsic.c (gfc_conv_intrinsic_bound): Use new prototype
	for gfc_trans_runtime_check.

From-SVN: r114346
2006-06-03 17:28:33 +00:00
Kazu Hirata
e2ae1407d3 check.c, [...]: Fix comment typos.
* check.c, expr.c, resolve.c, trans-common.c,
	trans-intrinsic.c, trans-stmt.c, trans-types.c: Fix comment typos.

From-SVN: r114170
2006-05-28 17:56:58 +00:00
Paul Thomas
476220e7ee re PR fortran/25746 (Elemental assignment gives wrong result)
2006-05-21  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/25746
	* interface.c (gfc_extend_assign): Use new code EXEC_ASSIGN_CALL.
	* gfortran.h : Put EXEC_ASSIGN_CALL in enum.
	* trans-stmt.c (gfc_conv_elemental_dependencies): New function.
	(gfc_trans_call): Call it.  Add new boolian argument to flag
	need for dependency checking. Assert intent OUT and IN for arg1
	and arg2.
	(gfc_trans_forall_1): Use new code EXEC_ASSIGN_CALL.
	trans-stmt.h : Modify prototype of gfc_trans_call.
	trans.c (gfc_trans_code): Add call for EXEC_ASSIGN_CALL.
	st.c (gfc_free_statement): Free actual for EXEC_ASSIGN_CALL.
	* dependency.c (gfc_check_fncall_dependency): Don't check other
	against itself.

	PR fortran/25090
	* resolve.c : Remove resolving_index_expr.
	(entry_parameter): Remove.
	(gfc_resolve_expr, resolve_charlen, resolve_fl_variable): Remove
	calls to entry_parameter and references to resolving_index_expr.

	PR fortran/27584
	* check.c (gfc_check_associated): Replace NULL assert with an
	error message, since it is possible to generate bad code that
	has us fall through to here..

	PR fortran/19015
	* iresolve.c (maxloc, minloc): If DIM is not present, pass the
	rank of ARRAY as the shape of the result.  Otherwise, pass the
	shape of ARRAY, less the dimension DIM.
	(maxval, minval): The same, when DIM is present, otherwise no
	change.

2006-05-21  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/25746
	* gfortran.dg/elemental_subroutine_3.f90: New test.

	PR fortran/25090
	* gfortran.dg/entry_dummy_ref_1.f90: Remove.

	PR fortran/27584
	* gfortran.dg/associated_target_1.f90: New test.

	PR fortran/19015
	* gfortran.dg/maxloc_shape_1.f90: New test.

From-SVN: r113949
2006-05-21 07:35:05 +00:00
Kazu Hirata
b82feea52f gfortran.texi: Fix typos.
* gfortran.texi: Fix typos.  Follow spelling conventions.
	* resolve.c, trans-expr.c, trans-stmt.c: Fix comment typos.
	Follow spelling conventions.

From-SVN: r112780
2006-04-08 14:31:12 +00:00
Paul Thomas
5f20c93a30 re PR fortran/26107 (ICE after error message on invalid code)
2006-03-06  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/26107
	* resolve.c (resolve_function): Add name after test for pureness.

	PR fortran/19546
	* trans-expr.c (gfc_conv_variable): Detect reference to parent result,
	store current_function_decl, replace with parent, whilst calls are
	made to gfc_get_fake_result_decl, and restore afterwards. Signal this
	to gfc_get_fake_result_decl with a new argument, parent_flag.
	* trans-stmt.c (gfc_trans_return): gfc_get_fake_result_decl 2nd arg
	is set to zero.
	* trans.h: Add parent_flag to gfc_get_fake_result_decl prototype.
	* trans-decl.c (gfc_get_fake_result_decl): On parent_flag, being set,
	add decl to parent function. Replace refs to current_fake_result_decl
	with refs to this_result_decl.
	(gfc_generate_function_code): Null parent_fake_result_decl before the
	translation of code for contained procedures. Set parent_flag to zero
	in call to gfc_get_fake_result_decl.
	* trans-intrinsic.c (gfc_conv_intrinsic_len): The same.

2006-03-06  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/26107
	* pure_dummy_length_1.f90: New test.

	PR fortran/19546
	* gfortran.dg/parent_result_ref_1.f90: New test.
	* gfortran.dg/parent_result_ref_2.f90: New test.
	* gfortran.dg/parent_result_ref_3.f90: New test.
	* gfortran.dg/parent_result_ref_4.f90: New test.

From-SVN: r111793
2006-03-06 22:56:39 +00:00
Thomas Koenig
5b725b8d04 re PR fortran/25031 ([4.1 only] Allocatable array can be reallocated.)
2006-03-03  Thomas Koenig  <Thomas.Koenig@online.de>

	PR fortran/25031
	* trans-array.h:  Adjust gfc_array_allocate prototype.
	* trans-array.c (gfc_array_allocate):  Change type of
	gfc_array_allocatate to bool.  Function returns true if
	it operates on an array.  Change second argument to gfc_expr.
	Find last reference in chain.
	If the function operates on an allocatable array, emit call to
	allocate_array() or allocate64_array().
	* trans-stmt.c (gfc_trans_allocate):  Code to follow to last
	reference has been moved to gfc_array_allocate.
	* trans.h:  Add declaration for gfor_fndecl_allocate_array and
	gfor_fndecl_allocate64_array.
	(gfc_build_builtin_function_decls):  Add gfor_fndecl_allocate_array
	and gfor_fndecl_allocate64_array.

2006-03-03  Thomas Koenig  <Thomas.Koenig@online.de>

	PR fortran/25031
	* runtime/memory.c:  Adjust copyright years.
	(allocate_array):  New function.
	(allocate64_array):  New function.
	* libgfortran.h (error_codes):  Add ERROR_ALLOCATION.

2006-03-03  Thomas Koenig  <Thomas.Koenig@online.de>

	PR fortran/25031
	* multiple_allocation_1.f90:  New test.

From-SVN: r111677
2006-03-03 16:18:46 +00:00
Roger Sayle
011daa767e trans-stmt.c (generate_loop_for_temp_to_lhs): Add an additional INVERT argument to invert the sense of the WHEREMASK argument.
* trans-stmt.c (generate_loop_for_temp_to_lhs): Add an additional
	INVERT argument to invert the sense of the WHEREMASK argument.
	Remove unneeded code to AND together a list of masks.
	(generate_loop_for_rhs_to_temp): Likewise.
	(gfc_trans_assign_need_temp): Likewise.
	(gfc_trans_forall_1): Likewise.
	(gfc_evaluate_where_mask): Likewise, add a new INVERT argument
	to specify the sense of the MASK argument.
	(gfc_trans_where_assign): Likewise.
	(gfc_trans_where_2): Likewise.  Restructure code that decides
	whether we need to allocate zero, one or two temporary masks.
	If this is a top-level WHERE (i.e. the incoming MAKS is NULL),
	we only need to allocate at most one temporary mask, and can
	invert it's sense to provide the complementary pending execution
	mask.  Only calculate the size of the required temporary arrays
	if we need any.
	(gfc_trans_where): Update call to gfc_trans_where_2.

From-SVN: r111630
2006-03-02 00:24:45 +00:00
Roger Sayle
90f58ec8ed trans-stmt.c (gfc_trans_where_2): Avoid updating unused current execution mask for empty WHERE/ELSEWHERE clauses.
* trans-stmt.c (gfc_trans_where_2): Avoid updating unused current
	execution mask for empty WHERE/ELSEWHERE clauses.  Don't allocate
	temporary mask arrays if they won't be used.

From-SVN: r111303
2006-02-20 14:22:33 +00:00
Roger Sayle
3c90c9ae61 trans-stmt.c (gfc_trans_where_assign): Remove code to handle traversing a linked list of MASKs.
* trans-stmt.c (gfc_trans_where_assign): Remove code to handle
	traversing a linked list of MASKs.  The MASK is now always a
	single element requiring no ANDing during the assignment.

From-SVN: r111301
2006-02-20 14:15:35 +00:00
Roger Sayle
3891cee230 trans-stmt.c (struct temporary_list): Delete.
* trans-stmt.c (struct temporary_list): Delete.
	(gfc_trans_where_2): Major reorganization.  Remove no longer needed
	TEMP argument.  Allocate and deallocate the control mask and
	pending control mask locally.
	(gfc_trans_forall_1): Delete TEMP local variable, and update
	call to gfc_trans_where_2.  No need to deallocate arrays after.
	(gfc_evaluate_where_mask): Major reorganization.  Change return
	type to void.  Pass in parent execution mask, MASK, and two
	already allocated mask arrays CMASK and PMASK.  On return
	CMASK := MASK & COND, PMASK := MASK & !COND.  MASK, CMASK and
	CMASK may all be NULL, or refer to the same temporary arrays.
	(gfc_trans_where): Update call to gfc_trans_where_2.  We no
	longer need a TEMP variable or to deallocate temporary arrays
	allocated by gfc_trans_where_2.

From-SVN: r111245
2006-02-18 17:26:35 +00:00
Paul Thomas
c4bbc10564 re PR fortran/26038 (ICE on allocation of assumed length CHARACTER dummy.)
2006-02-09  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/26038
	* trans-stmt.c (gfc_trans_allocate): Provide assumed character length
	scalar with missing backend_decl for the hidden dummy charlen.

	PR fortran/25059
	* interface.c (gfc_extend_assign): Remove detection of non-PURE
	subroutine in assignment interface, with gfc_error, and put it in
	* resolve.c (resolve_code).

	PR fortran/25070
	* interface.c (gfc_procedure_use): Flag rank checking for non-
	elemental, contained or interface procedures in call to
	(compare_actual_formal), where ranks are checked for assumed
	shape arrays..

2006-02-09  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/26038
	* gfortran.dg/allocate_char_star_scalar_1.f90: New test.

	PR fortran/25059
	* gfortran.dg/impure_assignment_1.f90: New test.

	PR fortran/25070
	* gfortran.dg/assumed_shape_ranks_1.f90: New test.

From-SVN: r110816
2006-02-09 23:23:28 +00:00
Roger Sayle
42e73749c7 trans-stmt.c (gfc_evaluate_where_mask): Allow the NMASK argument to be NULL to indicate that the not mask isn't required.
* trans-stmt.c (gfc_evaluate_where_mask): Allow the NMASK argument
	to be NULL to indicate that the not mask isn't required.
	(gfc_trans_where_2): Remove PMASK argument.  Avoid calculating the
	pending mask for the last clause of a WHERE chain.  Update recursive
	call.
	(gfc_trans_forall_1): Update call to gfc_trans_where_2.
	(gfc_trans_where): Likewise.

From-SVN: r110659
2006-02-06 18:48:38 +00:00
Jakub Jelinek
417ab240ee backport: trans-decl.c (create_function_arglist): Handle dummy functions.
Backport from gomp-20050608-branch
	* trans-decl.c (create_function_arglist): Handle dummy functions.

	* trans-decl.c (gfc_get_symbol_decl): Revert explicit setting of
	TYPE_SIZE_UNIT.
	(gfc_trans_vla_type_sizes): Also "gimplify"
	GFC_TYPE_ARRAY_DATAPTR_TYPE for GFC_DESCRIPTOR_TYPE_P types.
	* trans-array.c (gfc_trans_deferred_array): Call
	gfc_trans_vla_type_sizes.

	* trans-decl.c (saved_function_decls, saved_parent_function_decls):
	Remove unnecessary initialization.
	(create_function_arglist): Make sure __result has complete type.
	(gfc_get_fake_result_decl): Change current_fake_result_decl into
	a tree chain.  For entry master, create a separate variable
	for each result name.  For BT_CHARACTER results, call
	gfc_finish_var_decl on length even if it has been already created,
	but not pushdecl'ed.
	(gfc_trans_vla_type_sizes): For function/entry result, adjust
	result value type, not the FUNCTION_TYPE.
	(gfc_generate_function_code): Adjust for current_fake_result_decl
	changes.
	(gfc_trans_deferred_vars): Likewise.  Call gfc_trans_vla_type_sizes
	even on result if it is assumed-length character.

	* trans-decl.c (gfc_trans_dummy_character): Add SYM argument.
	Call gfc_trans_vla_type_sizes.
	(gfc_trans_auto_character_variable): Call gfc_trans_vla_type_sizes.
	(gfc_trans_vla_one_sizepos, gfc_trans_vla_type_sizes_1,
	gfc_trans_vla_type_sizes): New functions.
	(gfc_trans_deferred_vars): Adjust gfc_trans_dummy_character
	callers.  Call gfc_trans_vla_type_sizes on assumed-length
	character parameters.
	* trans-array.c (gfc_trans_array_bounds,
	gfc_trans_auto_array_allocation, gfc_trans_dummy_array_bias): Call
	gfc_trans_vla_type_sizes.
	* trans.h (gfc_trans_vla_type_sizes): New prototype.

	* trans-decl.c (gfc_build_qualified_array): For non-assumed-size
	arrays without constant size, create also an index var for
	GFC_TYPE_ARRAY_SIZE (type).  If the type is incomplete, complete
	it as 0..size-1.
	(gfc_create_string_length): Don't call gfc_defer_symbol_init
	if just creating DECL_ARGUMENTS.
	(gfc_get_symbol_decl): Call gfc_finish_var_decl and
	gfc_defer_symbol_init even if ts.cl->backend_decl is already
	set to a VAR_DECL that doesn't have DECL_CONTEXT yet.
	(create_function_arglist): Rework, so that hidden length
	arguments for CHARACTER parameters are created together with
	the parameters.  Resolve ts.cl->backend_decl for CHARACTER
	parameters.  If the argument is a non-constant length array
	or CHARACTER, ensure PARM_DECL has different type than
	its DECL_ARG_TYPE.
	(generate_local_decl): Call gfc_get_symbol_decl even
	for non-referenced non-constant length CHARACTER parameters
	after optionally issuing warnings.
	* trans-array.c (gfc_trans_array_bounds): Set last stride
	to GFC_TYPE_ARRAY_SIZE (type) to initialize it as well.
	(gfc_trans_dummy_array_bias): Initialize GFC_TYPE_ARRAY_SIZE (type)
	variable as well.

	* trans-expr.c (gfc_conv_expr_val): Fix comment typo.

	* trans-stmt.c (gfc_trans_simple_do): Fix comment.

From-SVN: r110653
2006-02-06 18:15:51 +01:00
Roger Sayle
3ded621059 dependency.c (gfc_check_dependency): Remove unused vars and nvars arguments.
* dependency.c (gfc_check_dependency): Remove unused vars and nvars
	arguments.  Replace with an "identical" argument.  A full array
	reference to the same symbol is a dependency if identical is true.
	* dependency.h (gfc_check_dependency): Update prototype.
	* trans-array.h (gfc_check_dependency): Delete duplicate prototype.
	* trans-stmt.c: #include dependency.h for gfc_check_dependency.
	(gfc_trans_forall_1): Update calls to gfc_check_dependency.
	(gfc_trans_where_2): Likewise.  Remove unneeded variables.
	(gfc_trans_where_3): New function for simple non-dependent WHEREs.
	(gfc_trans_where): Call gfc_trans_where_3 to translate simple
	F90-style WHERE statements without internal dependencies.
	* Make-lang.in (trans-stmt.o): Depend upon dependency.h.

From-SVN: r110625
2006-02-05 22:12:20 +00:00
Roger Sayle
c2a11bfcc0 trans-stmt.c (gfc_evaluate_where_mask): Use LOGICAL*1 for WHERE masks instead of LOGICAL*4.
* trans-stmt.c (gfc_evaluate_where_mask): Use LOGICAL*1 for WHERE
	masks instead of LOGICAL*4.

From-SVN: r110617
2006-02-05 16:59:48 +00:00
Tobias Schlüter
681f47f25d gfortranspec.c: Update copyright years.
* gfortranspec.c: Update copyright years.
* trans.c: Likewise.
* trans-array.c: Likewise.
* trans-array.h: Likewise.
* trans-decl.c: Likewise.
* trans-stmt.c: Likewise.
* trans-stmt.h: Likewise.
* trans-types.c: Likewise.

From-SVN: r109951
2006-01-19 10:53:36 +01:00
Richard Guenther
61ead1351f trans-stmt.c (gfc_trans_if_1): Use fold_buildN and build_int_cst.
2006-01-16  Richard Guenther  <rguenther@suse.de>

	* trans-stmt.c (gfc_trans_if_1): Use fold_buildN and build_int_cst.
	(gfc_trans_arithmetic_if): Likewise.
	(gfc_trans_simple_do): Likewise.
	(gfc_trans_do): Likewise.
	(gfc_trans_do_while): Likewise.
	(gfc_trans_logical_select): Likewise.
	(gfc_trans_forall_loop): Likewise.
	(generate_loop_for_temp_to_lhs): Likewise.
	(generate_loop_for_rhs_to_temp): Likewise.
	(gfc_trans_allocate): Likewise.
	* trans.c (gfc_add_expr_to_block): Do not fold expr again.

From-SVN: r109756
2006-01-16 17:27:24 +00:00
Richard Guenther
3f2ec06a70 trans-expr.c (gfc_conv_function_call): Use fold_build2.
2006-01-16  Richard Guenther  <rguenther@suse.de>

	* trans-expr.c (gfc_conv_function_call): Use fold_build2.
	* trans-stmt.c (gfc_trans_goto): Likewise.  Use build_int_cst.
	* trans.c (gfc_trans_runtime_check): Don't fold the condition
	again.

From-SVN: r109745
2006-01-16 09:40:16 +00:00
Andrew Pinski
cc2804f14f trans-stmt.c (gfc_trans_pointer_assign_need_temp): Use fold_convert to avoid type mismatch.
2006-01-09  Andrew Pinski  <pinskia@physics.uc.edu>

        fortran/24936
        * trans-stmt.c (gfc_trans_pointer_assign_need_temp): Use fold_convert
        to avoid type mismatch.


2006-01-09  Andrew Pinski  <pinskia@physics.uc.edu>

        fortran/24936
        * gfortran.dg/forall_3.f90: New test.

From-SVN: r109508
2006-01-09 12:42:26 -08:00
Paul Thomas
48474141e5 re PR fortran/22146 (ICE when calling ELEMENTAL subroutines)
2006-01-07  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/22146
	* trans-array.c (gfc_reverse_ss): Remove static attribute.
	(gfc_walk_elemental_function_args): Replace gfc_expr * argument for
	the function call with the corresponding gfc_actual_arglist*.  Change
	code accordingly.
	(gfc_walk_function_expr): Call to gfc_walk_elemental_function_args
	now requires the actual argument list instead of the expression for
	the function call.
	* trans-array.h: Modify the prototype for gfc_walk_elemental_function_args
	and provide a prototype for gfc_reverse_ss.
	* trans-stmt.h (gfc_trans_call): Add the scalarization code for the case
	where an elemental subroutine has array valued actual arguments.

	PR fortran/25029
	PR fortran/21256
	PR fortran/20868
	PR fortran/20870
	* resolve.c (check_assumed_size_reference): New function to check for upper
	bound in assumed size array references.
	(resolve_assumed_size_actual): New function to do a very restricted scan
	of actual argument expressions of those procedures for which incomplete
	assumed size array references are not allowed.
	(resolve_function, resolve_call): Switch off assumed size checking of
	actual arguments, except for elemental procedures and intrinsic
	inquiry functions, in some circumstances.
	(resolve_variable): Call check_assumed_size_reference.

2006-01-07  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/22146
	* gfortran.dg/elemental_subroutine_1.f90: New test.
	* gfortran.dg/elemental_subroutine_2.f90: New test.

	PR fortran/25029
	PR fortran/21256
	* gfortran.dg/assumed_size_refs_1.f90: New test.

	PR fortran/20868
	PR fortran/20870
	* gfortran.dg/assumed_size_refs_2.f90: New test.
	* gfortran.dg/initialization_1.f90: Change warning message.

From-SVN: r109449
2006-01-07 14:14:08 +00:00
Richard Guenther
3380b80294 trans.h (tree): Remove declaration of gfc_build_function_call.
2005-12-16  Richard Guenther  <rguenther@suse.de>

	* trans.h (tree): Remove declaration of gfc_build_function_call.
	* trans.c (gfc_build_function_call): Remove.
	(gfc_build_array_ref): Use build_function_call_expr.
	(gfc_trans_runtime_check): Likewise.
	* trans-array.c (gfc_trans_allocate_array_storage): Likewise.
	(gfc_grow_array): Likewise.
	(gfc_trans_array_ctor_element): Likewise.
	(gfc_trans_array_constructor_value): Likewise.
	(gfc_array_allocate): Likewise.
	(gfc_array_deallocate): Likewise.
	(gfc_trans_auto_array_allocation): Likewise.
	(gfc_trans_dummy_array_bias): Likewise.
	(gfc_conv_array_parameter): Likewise.
	* trans-expr.c (gfc_conv_power_op): Likewise.
	(gfc_conv_string_tmp): Likewise.
	(gfc_conv_concat_op): Likewise.
	(gfc_conv_expr_op): Likewise.
	(gfc_trans_string_copy): Likewise.
	* trans-decl.c (build_entry_thunks): Likewise.
	(gfc_generate_function_code): Likewise.
	(gfc_generate_constructors): Likewise.
	* trans-io.c (gfc_trans_open): Likewise.
	(gfc_trans_close): Likewise.
	(build_filepos): Likewise.
	(gfc_trans_inquire): Likewise.
	(transfer_namelist_element): Likewise.
	(build_dt): Likewise.
	(gfc_trans_dt_end): Likewise.
	(transfer_expr): Likewise.
	(transfer_array_desc): Likewise.
	* trans-stmt.c (gfc_trans_pause): Likewise.
	(gfc_trans_stop): Likewise.
	(gfc_trans_character_select): Likewise.
	(gfc_do_allocate): Likewise.
	(gfc_trans_assign_need_temp): Likewise.
	(gfc_trans_pointer_assign_need_temp): Likewise.
	(gfc_trans_forall_1): Likewise.
	(gfc_trans_where): Likewise.
	(gfc_trans_allocate): Likewise.
	(gfc_trans_deallocate): Likewise.
	* trans-intrinsic.c (gfc_conv_intrinsic_aint): Likewise.
	(gfc_conv_intrinsic_lib_function): Likewise.
	(gfc_conv_intrinsic_exponent): Likewise.
	(gfc_conv_intrinsic_abs): Likewise.
	(gfc_conv_intrinsic_sign): Likewise.
	(gfc_conv_intrinsic_ctime): Likewise.
	(gfc_conv_intrinsic_fdate): Likewise.
	(gfc_conv_intrinsic_ttynam): Likewise.
	(gfc_conv_intrinsic_ishftc): Likewise.
	(gfc_conv_intrinsic_len_trim): Likewise.
	(gfc_conv_intrinsic_index): Likewise.
	(gfc_conv_intrinsic_size): Likewise.
	(gfc_conv_intrinsic_strcmp): Likewise.
	(gfc_conv_intrinsic_adjust): Likewise.
	(gfc_conv_associated): Likewise.
	(gfc_conv_intrinsic_scan): Likewise.
	(gfc_conv_intrinsic_verify): Likewise.
	(call_builtin_clz): Likewise.
	(gfc_conv_intrinsic_si_kind): Likewise.
	(gfc_conv_intrinsic_sr_kind): Likewise.
	(gfc_conv_intrinsic_trim): Likewise.
	(gfc_conv_intrinsic_repeat): Likewise.
	(gfc_conv_intrinsic_iargc): Likewise.

From-SVN: r108687
2005-12-16 21:45:27 +00:00
Richard Guenther
38611275f6 trans.h (gfc_build_indirect_ref): Remove declaration.
2005-12-16  Richard Guenther  <rguenther@suse.de>

	* trans.h (gfc_build_indirect_ref): Remove declaration.
	* trans.c (gfc_build_indirect_ref): Remove.
	* trans-array.c (gfc_trans_array_ctor_element): Use
	build_fold_indirect_ref instead of gfc_build_indirect_ref.
	(gfc_trans_array_constructor_value): Likewise.
	(gfc_conv_array_index_offset): Likewise.
	(gfc_conv_scalarized_array_ref): Likewise.
	(gfc_conv_array_ref): Likewise.
	(gfc_trans_dummy_array_bias): Likewise.
	(gfc_conv_expr_descriptor): Likewise.
	(gfc_conv_array_parameter): Likewise.
	* trans-decl.c (gfc_finish_cray_pointee): Likewise.
	(gfc_get_symbol_decl): Likewise.
	* trans-expr.c (gfc_conv_substring): Likewise.
	(gfc_conv_component_ref): Likewise.
	(gfc_conv_variable): Likewise.
	(gfc_add_interface_mapping): Likewise.
	(gfc_conv_function_call): Likewise.
	* trans-intrinsic.c (gfc_conv_intrinsic_ichar): Likewise.
	(gfc_conv_intrinsic_transfer): Likewise.
	* trans-io.c (nml_get_addr_expr): Likewise.
	(transfer_namelist_element): Likewise.
	(transfer_expr): Likewise.
	* trans-stmt.c (gfc_trans_nested_forall_loop): Likewise.
	(allocate_temp_for_forall_nest_1): Likewise.
	(gfc_trans_forall_1): Likewise.

From-SVN: r108678
2005-12-16 21:03:50 +00:00
Richard Guenther
488ce07ba2 (gfc_conv_descriptor_data_addr): Use build_fold_addr_expr where appropriate.
2005-12-16  Richard Guenther  <rguenther@suse.de>

	(gfc_conv_descriptor_data_addr): Use build_fold_addr_expr where
	appropriate.
	(gfc_trans_allocate_array_storage): Likewise.
	(gfc_trans_array_constructor_value): Likewise.
	(gfc_conv_array_data): Likewise.
	(gfc_conv_expr_descriptor): Likewise.
	(gfc_conv_array_parameter): Likewise.
	(gfc_conv_variable): Likewise.
	(gfc_conv_function_val): Likewise.
	(gfc_conv_function_call): Likewise.
	(gfc_conv_expr_reference): Likewise.
	(gfc_conv_intrinsic_ctime): Likewise.
	(gfc_conv_intrinsic_fdate): Likewise.
	(gfc_conv_intrinsic_ttynam): Likewise.
	(gfc_conv_intrinsic_si_kind): Likewise.
	(gfc_conv_intrinsic_trim): Likewise.
	(set_parameter_ref): Likewise.
	(gfc_convert_array_to_string): Likewise.
	(gfc_trans_open): Likewise.
	(gfc_trans_close): Likewise.
	(build_filepos): Likewise.
	(gfc_trans_inquire): Likewise.
	(nml_get_addr_expr): Likewise.
	(transfer_namelist_element): Likewise.
	(build_dt): Likewise.
	(gfc_trans_dt_end): Likewise.
	(transfer_array_component): Likewise.
	(transfer_expr): Likewise.
	(transfer_array_desc): Likewise.
	(gfc_trans_transfer): Likewise.
	(gfc_trans_allocate): Likewise.
	(gfc_trans_deallocate): Likewise.

From-SVN: r108633
2005-12-16 09:16:12 +00:00
Feng Wang
910450c13f re PR fortran/22290 (Optimize Assigned GOTO to cause error with -O1 or higher)
2005-10-25  Feng Wang  <fengwang@nudt.edu.cn>

	PR fortran/22290
	* trans-decl.c (gfc_add_assign_aux_vars): New function. Add two
	auxiliary variables.
	(gfc_get_symbol_decl): Use it when a variable, including dummy
	argument, is assigned a label.
	(gfc_trans_assign_aux_var): New function. Set initial value of
	the auxiliary variable explicitly.
	(gfc_trans_deferred_vars): Use it.
	* trans-stmt.c (gfc_conv_label_variable): Handle dummy argument.

2005-10-25  Feng Wang  <fengwang@nudt.edu.cn>

	PR fortran/22290
	* gfortran.dg/assign_5.f90: New test.
	* gfortran.dg/assign_6.f: New test.

From-SVN: r105887
2005-10-25 14:06:22 +00:00
Erik Edelmann
4c46bf2eba re PR fortran/19929 (Deallocation of an allocated derived type component causes failure)
2005-09-21  Erik Edelmann  <erik.edelmann@iki.fi>

	PR fortran/19929
	* trans-stmt.c (gfc_trans_deallocate): Check if the
	object to be deallocated is an array by looking at
	expr->rank instead of expr->symtree->n.sym->attr.dimension.

2005-09-21  Erik Edelmann  <erik.edelmann@iki.fi>

	PR fortran/19929
	* gfortran.dg/der_ptr_component_1.f90: New test.

From-SVN: r104495
2005-09-21 17:05:16 +00:00
Canqun Yang
442c1644c7 trans-stmt.c (gfc_trans_arithmetic_if): Optimized in case of equal labels.
* trans-stmt.c (gfc_trans_arithmetic_if): Optimized in case of equal
	labels.

From-SVN: r103074
2005-08-14 10:06:06 +08:00
Steven Bosscher
75d2cf695f trans-stmt.c (gfc_trans_goto): Jump to the known label instead of the assigned goto variable.
* trans-stmt.c (gfc_trans_goto): Jump to the known label instead
	of the assigned goto variable.

From-SVN: r102607
2005-07-31 20:36:47 +00:00
Giovanni Bajo
4038c495fc Make CONSTRUCTOR use VEC to store initializers.
* c-common.c (complete_array_type): Update to cope with VEC in
	CONSTRUCTOR_ELTS.
	* c-pretty-print.c (pp_c_initializer_list): Use pp_c_constructor_elts.
	(pp_c_constructor_elts): New function.
	* c-pretty-print.h (pp_c_constructor_elts): Declare.
	* c-typeck.c (build_function_call, build_c_cast, digest_init,
	struct constructor_stack, struct initializer_stack,
	constructor_elements, push_init_level, pop_init_level,
	add_pending_init, find_init_member, output_init_element): Update to
	cope with VEC in CONSTRUCTOR_ELTS.
	* coverage.c (build_fn_info_value, build_ctr_info_value,
	build_gcov_info): Likewise.
	* expr.c (categorize_ctor_elements_1, store_constructor,
	expand_expr_real_1): Likewise.
	* fold-const.c (fold_ternary): Likewise.
	* gimplify.c (gimplify_init_ctor_preeval, zero_sized_field_decl,
	gimplify_init_constructor, gimplify_expr): Likewise.
	* tree-dump.c (dequeue_and_dump): Likewise.
	* tree-inline.c (copy_tree_r): Add code to duplicate a CONSTRUCTOR
	node.
	* tree-pretty-print.c (dump_generic_node): Update to cope with VEC in
	CONSTRUCTOR_ELTS.
	* tree-sra.c (generate_element_init_1): Likewise.
	* tree-ssa-ccp.c (fold_const_aggregate_ref): Likewise.
	* tree-ssa-operands.c (get_expr_operands): Likewise.
	* tree-vect-generic.c (expand_vector_piecewise): Likewise.
	* tree-vect-transform.c (vect_get_vec_def_for_operand):
	(get_initial_def_for_reduction): Likewise.
	* tree-vn.c (set_value_handle, get_value_handle): CONSTURCTOR uses
	value handle in annotations.
	* tree.c (tree_node_kind, tree_code_size, make_node_stat,
	tree_node_structure): Add support for constr_kind.
	(build_vector_from_ctor, build_constructor_single,
	build_constructor_from_list): New functions.
	(build_constructor): Update to take a VEC instead of a TREE_LIST.
	(simple_cst_equal, iterative_hash_expr, initializer_zerop, walk_tree):
	Update to cope with VEC in CONSTRUCTOR_ELTS.
	* tree.def (CONSTRUCTOR): Make it a tcc_exceptional node.
	* tree.h (FOR_EACH_CONSTRUCTOR_VALUE, FOR_EACH_CONSTRUCTOR_ELT,
	CONSTRUCTOR_APPEND_ELT): New macros.
	(struct constructor_elt, struct	tree_constructor): New data types.
	(union tree_node): Add tree_constructor field.
	* treestruct.def: Define TS_CONSTRUCTOR.
	* varasm.c (const_hash_1, compare_constant, copy_constant,
	compute_reloc_for_constant, output_addressed_constants,
	initializer_constant_valid_p, output_constant,
	array_size_for_constructor, output_constructor): Update to cope with
	VEC in CONSTRUCTOR_ELTS.
	* vec.h (VEC_empty, VEC_copy): New macros.

ada/
	Make CONSTRUCTOR use VEC to store initializers.
	* decl.c (gnat_to_gnu_entity): Update to cope with VEC in
	CONSTRUCTOR_ELTS.
	* trans.c (extract_values): Likewise.
	* utils.c (convert, remove_conversions): Likewise.
	* utils2.c (contains_save_expr_p, build_binary_op, build_unary_op,
	gnat_build_constructor): Likewise.

cp/
	Make CONSTRUCTOR use VEC to store initializers.
	* call.c (convert_default_arg): Update call to digest_init.
	* class.c (dump_class_hierarchy, dump_array): Update to cope with
	VEC in CONSTRUCTOR_ELTS.
	* cp-tree.h (EMPTY_CONSTRUCTOR_P): Likewise.
	(finish_compound_literal, digest_init): Update declaration.
	* decl.c (struct reshape_iter): New data type.
	(reshape_init_array): Rename to...
	(reshape_init_array_1): Update to cope with VEC in CONSTRUCTOR_ELTS.
	(reshape_init): Rewrite from scratch. Split parts into...
	(reshape_init_array, reshape_init_vector, reshape_init_class,
	reshape_init_r): New functions.
	(check_initializer): Update call to reshape_init. Remove obsolete
	code.
	(initialize_artificial_var, cp_complete_array_type): Update to cope
	with VEC in CONSTRUCTOR_ELTS.
	* decl2.c (grokfield): Update calls to digest_init.
	(mark_vtable_entries): Update to cope with VEC in CONSTRUCTOR_ELTS.
	* error.c (dump_expr_init_vec): New function.
	(dump_expr): Use dump_expr_init_vec.
	* init.c (build_zero_init, build_vec_init): Update to cope with VEC
	in CONSTRUCTOR_ELTS.
	(expand_default_init): Update call to digest_init.
	* parser.c  (cp_parser_postfix_expression): Use a VEC for the
	initializers.
	(cp_parser_initializer_list): Build a VEC of initializers.
	* pt.c (tsubst_copy, tsubst_copy_and_build): Update to cope with VEC
	in CONSTRUCTOR_ELTS.
	* rtti.c (tinfo_base_init, generic_initializer, ptr_initializer,
	ptm_initializer, class_initializer, get_pseudo_ti_init): Use
	build_constructor_from_list instead of build_constructor.
	* semantics.c (finish_compound_literal): Update call to digest_init.
	* tree.c (stabilize_init): Update to cope with VEC in
	CONSTRUCTOR_ELTS.
	* typeck.c (build_ptrmemfunc1): Likewise.
	* typeck2.c: (cxx_incomplete_type_error, split_nonconstant_init_1):
	Likewise.
	(store_init_value): Use build_constructor_from_list and update call
	to digest_init.
	(digest_init): Rewrite.
	(process_init_constructor): Rewrite from scratch. Split into...
	(process_init_constructor_array, picflag_from_initializer,
	process_init_constructor_record, process_init_constructor_union):
	New functions.
	(PICFLAG_ERRONEOUS, PICFLAG_NOT_ALL_CONSTANT, PICFLAG_NOT_ALL_SIMPLE):
	New macros.
	(build_functional_cast): Use build_constructor_from_list instead of
	build_constructor.

fortran/
	Make CONSTRUCTOR use VEC to store initializers.
	* trans-array.c (gfc_build_null_descriptor,
	gfc_trans_array_constructor_value, gfc_conv_array_initializer):
	Update to cope with VEC in CONSTRUCTOR_ELTS.
	* trans-common.c (create_common): Likewise.
	* trans-expr.c (gfc_conv_structure): Likewise.
	* trans-stmt.c (gfc_trans_character_select): Use
	build_constructor_from_list instead of build_constructor.

java/
	Make CONSTRUCTOR use VEC to store initializers.
	* check-init.c (check_init): Update to cope with VEC in
	CONSTRUCTOR_ELTS.
	* class.c (make_field_value, make_method_value, get_dispatch_table,
	make_class_data, emit_symbol_table, emit_catch_table,
	emit_assertion_table): Use build_constructor_from_list instead of
	build_constructor.
	* constants.c (build_constants_constructor): Likewise.
	* java-gimplify.c (java_gimplify_new_array_init): Update to cope with
	VEC in CONSTRUCTOR_ELTS.
	* java-tree.h (START_RECORD_CONSTRUCTOR, PUSH_SUPER_VALUE,
	PUSH_FIELD_VALUE, FINISH_RECORD_CONSTRUCTOR): Create a VEC instead
	of a TREE_LIST.
	* jcf-write.c (generate_bytecode_insns): Update to cope with VEC in
	CONSTRUCTOR_ELTS.
	* parse.y (build_new_array_init): Use build_constructor_from_list
	instead of build_constructor.
	(patch_new_array_init): Update to cope with VEC in
	CONSTRUCTOR_ELTS.
	(array_constructor_check_entry): Likewise.

objc/
	Make CONSTRUCTOR use VEC to store initializers.
	* objc-act.c (objc_build_constructor): Use build_constructor_from_list
	instead of build_constructor.

testsuite/
	Make CONSTRUCTOR use VEC to store initializers.
	* g++.dg/ext/complit3.C: Check for specific error messages.
	* g++.dg/init/brace2.C: Update error message.
	* g++.dg/warn/Wbraces2.C: Likewise.

From-SVN: r102182
2005-07-20 01:19:59 +00:00
Jakub Jelinek
fcf3be37e2 trans-stmt.c (gfc_trans_forall_loop): Clear maskindex before the outermost loop.
* trans-stmt.c (gfc_trans_forall_loop): Clear maskindex before
	the outermost loop.
	(gfc_trans_assign_need_temp, gfc_trans_pointer_assign_need_temp,
	gfc_trans_forall_1, gfc_evaluate_where_mask, gfc_trans_where_2):
	Don't clear maskindexes here.

	* gfortran.fortran-torture/execute/forall_7.f90: New test.

From-SVN: r101865
2005-07-11 09:34:33 +02:00
Jakub Jelinek
7a1df4e2d7 trans-stmt.c (gfc_trans_forall_1): Prefer to use smaller logical type than boolean_type_node.
* trans-stmt.c (gfc_trans_forall_1): Prefer to use smaller logical
	type than boolean_type_node.

From-SVN: r101331
2005-06-26 07:21:25 +02:00
Kelley Cook
ab57747bb0 Update FSF address.
From-SVN: r101310
2005-06-25 00:40:37 +00:00
Tobias Schlüter
a8e12e4d75 re PR fortran/22038 (Forall with mask broken)
fortran/
2005-06-13  Jakub Jelinek  <jakub@redhat.com>

	PR fortran/22038
	* trans-stmt.c (gfc_trans_forall_loop): Only increment maskindex
	in the innermost loop.

testsuite/
2005-06-13  Tobias Schl"uter  <tobias.schlueter@physik.uni-muenchen.de>

	PR fortran/22038
	* gfortran.dg/forall_1.f90: Un-XFAIL.

From-SVN: r100887
2005-06-13 20:23:46 +02:00
Jakub Jelinek
dda895f9c6 trans-expr.c (gfc_conv_function_call): Return int instead of void.
* trans-expr.c (gfc_conv_function_call): Return int instead of
	void.  Use a local variable for has_alternate_specifier and
	return it.  Avoid modification of function type's return value
	in place, since it may be shared.
	* trans.h (has_alternate_specifier): Remove.
	(gfc_conv_function_call): Change return type.
	* trans-stmt.c (has_alternate_specifier): Remove.
	(gfc_trans_call): Add a local has_alternate_specifier variable,
	set it from gfc_conv_function_call return value.

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

From-SVN: r100878
2005-06-13 17:24:54 +02:00
Steven G. Kargl
364667a1ca re PR fortran/17792 ([4.0 only] deallocate does not return stat)
PR fortran/17792
PR fortran/21375
* trans-array.c (gfc_array_deallocate): pstat is new argument
  (gfc_array_allocate): update gfc_array_deallocate() call.
  (gfc_trans_deferred_array): ditto.
* trans-array.h: update gfc_array_deallocate() prototype.
* trans-decl.c (gfc_build_builtin_function_decls): update declaration
* trans-stmt.c (gfc_trans_deallocate): Implement STAT= feature.

From-SVN: r100845
2005-06-11 22:29:17 +00:00
Kazu Hirata
aa9c57ecdb data.c, [...]: Fix comment typos.
* data.c, parse.c, trans-array.c, trans-decl.c,
	trans-intrinsic.c, trans-stmt.c, trans-types.c, trans.c,
	trans.h: Fix comment typos.  Follow spelling conventions.

From-SVN: r100219
2005-05-26 18:36:11 +00:00
Jakub Jelinek
8de1f441bb re PR fortran/15080 (Forall bounds not calculated correctly (forall_3.f90))
PR fortran/15080
	* trans-stmt.c (generate_loop_for_temp_to_lhs): Remove SIZE and COUNT2
	arguments.  If LSS is gfc_ss_terminator, increment COUNT1 by 1, instead
	of incrementing COUNT2 and using COUNT1+COUNT2 increment COUNT1 and use
	just that as index.
	(generate_loop_for_rhs_to_temp): Likewise.
	(compute_overall_iter_number): Add INNER_SIZE_BODY argument.
	It non-NULL, add it to body.
	(allocate_temp_for_forall_nest_1): New function, split from
	allocate_temp_for_forall_nest.
	(allocate_temp_for_forall_nest): Add INNER_SIZE_BODY argument,
	propagate it down to compute_overall_iter_number.  Use
	allocate_temp_for_forall_nest_1.
	(gfc_trans_assign_need_temp): Remove COUNT2.  Call
	compute_inner_temp_size into a new stmtblock_t.  Adjust calls to
	allocate_temp_for_forall_nest, generate_loop_for_rhs_to_temp
	and generate_loop_for_temp_to_lhs.
	(gfc_trans_pointer_assign_need_temp): Adjust calls to
	allocate_temp_for_forall_nest.
	(gfc_evaluate_where_mask): Call compute_inner_temp_size into a new
	stmtblock_t.  Call compute_overall_iter_number just once, then
	allocate_temp_for_forall_nest_1 twice with the same size.
	Initialize mask indexes if nested_forall_info != NULL.
	(gfc_trans_where_2): Initialize mask indexes before calling
	gfc_trans_nested_forall_loop.

	* gfortran.fortran-torture/execute/forall_3.f90: Remove comment
	about the test failing.
	* gfortran.fortran-torture/execute/where_7.f90: New test.
	* gfortran.fortran-torture/execute/where_8.f90: New test.

From-SVN: r99812
2005-05-17 08:31:51 +02:00
Feng Wang
b078dfbf39 [multiple changes]
2005-05-15  Feng Wang <fengwang@nudt.edu.cn>
        Jerry DeLisle <jvdelisle@verizon.net>

        PR fortran/17432
        * trans-stmt.c (gfc_trans_label_assign): fix pointer type, to
        resolve ICE on assign of format label.
        * trans-io.c (set_string): add fold-convert to properly
        handle assigned format label in write.

2005-05-15  Jerry DeLisle <jvdelisle@verizon.net>

        PR fortran/17432
        * gfortran.dg/assign_4.f: New test.

From-SVN: r99711
2005-05-15 02:45:29 +00:00
Paul Brook
cafa34aa46 trans-stmt.c (gfc_trans_forall_1): Fix comment typo.
2005-05-13  Paul Brook  <paul@codesourcery.com>

	* trans-stmt.c (gfc_trans_forall_1): Fix comment typo.

From-SVN: r99660
2005-05-13 14:34:29 +00:00