summaryrefslogtreecommitdiffstats
path: root/gcc/fortran/trans-expr.c
Commit message (Collapse)AuthorAgeFilesLines
...
* 2012-10-16 Tobias Burnus <burnus@net-b.de>burnus2012-10-161-38/+318
| | | | | | | | | | | | | | | | | | | | | | | | | PR fortran/50981 PR fortran/54618 * trans.h (gfc_conv_derived_to_class, gfc_conv_class_to_class): Update prototype. * trans-stmt.c (trans_associate_var,gfc_trans_allocate): Update calls to those functions. * trans-expr.c (gfc_conv_derived_to_class, * gfc_conv_class_to_class, gfc_conv_expr_present): Handle absent polymorphic arguments. (class_scalar_coarray_to_class): New function. (gfc_conv_procedure_call): Update calls. 2012-10-16 Tobias Burnus <burnus@net-b.de> PR fortran/50981 PR fortran/54618 * gfortran.dg/class_optional_1.f90: New. * gfortran.dg/class_optional_2.f90: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@192495 138bc75d-0d04-0410-961f-82ee72b054a4
* 2012-09-24 Tobias Burnus <burnus@net-b.de>burnus2012-09-241-1/+1
| | | | | | | | | | PR fortran/54618 * trans-expr.c (gfc_conv_procedure_call): Fix INTENT(OUT) handling for allocatable BT_CLASS. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@191676 138bc75d-0d04-0410-961f-82ee72b054a4
* Finish conversion of uses of double_int to the new API.crowl2012-09-241-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Some old functionality required new interfaces, and these have been added to double-int.[hc]: double_int::from_pair - static constructor function wide_mul_with_sign - double-wide multiply instruction sub_with_overflow - subtraction with overlow testing neg_with_overflow - negation with overlow testing divmod_with_overflow - div and mod with overlow testing This patch corrects the bootstrap problem on HPPA, via the addition of sub_with_overflow. (The overflow properties of negation and addition are different from subtraction.) The prior two generations of the interface have been removed. Some of these old interfaces are still used as static implementation in double-int.c. The changed compiler appears 0.321% faster with 80% confidence of being faster. Tested on x86_64, HPPA, and SPARC. However, there are changes to the avr config files, and I have not tested those. Index: gcc/java/ChangeLog 2012-09-24 Lawrence Crowl <crowl@google.com> * decl.c (java_init_decl_processing): Change to new double_int API. * jcf-parse.c (get_constant): Likewise. * boehm.c (mark_reference_fields): Likewise. (get_boehm_type_descriptor): Likewise. Index: gcc/ChangeLog 2012-09-24 Lawrence Crowl <crowl@google.com> * double-int.h (double_int::from_pair): New. (double_int::wide_mul_with_sign): New. (double_int::sub_with_overflow): New. (double_int::neg_with_overflow): New. (double_int::divmod_with_overflow): New. (shwi_to_double_int): Remove. (uhwi_to_double_int): Remove. (double_int_to_shwi): Remove. (double_int_to_uhwi): Remove. (double_int_fits_in_uhwi_p): Remove. (double_int_fits_in_shwi_p): Remove. (double_int_fits_in_hwi_p): Remove. (double_int_mul): Remove. (double_int_mul_with_sign): Remove. (double_int_add): Remove. (double_int_sub): Remove. (double_int_neg): Remove. (double_int_div): Remove. (double_int_sdiv): Remove. (double_int_udiv): Remove. (double_int_mod): Remove. (double_int_smod): Remove. (double_int_umod): Remove. (double_int_divmod): Remove. (double_int_sdivmod): Remove. (double_int_udivmod): Remove. (double_int_multiple_of): Remove. (double_int_setbit): Remove. (double_int_ctz): Remove. (double_int_not): Remove. (double_int_ior): Remove. (double_int_and): Remove. (double_int_and_not): Remove. (double_int_xor): Remove. (double_int_lshift): Remove. (double_int_rshift): Remove. (double_int_lrotate): Remove. (double_int_rrotate): Remove. (double_int_negative_p): Remove. (double_int_cmp): Remove. (double_int_scmp): Remove. (double_int_ucmp): Remove. (double_int_max): Remove. (double_int_smax): Remove. (double_int_umax): Remove. (double_int_min): Remove. (double_int_smin): Remove. (double_int_umin): Remove. (double_int_ext): Remove. (double_int_sext): Remove. (double_int_zext): Remove. (double_int_mask): Remove. (double_int_max_value): Remove. (double_int_min_value): Remove. (double_int_zero_p): Remove. (double_int_one_p): Remove. (double_int_minus_one_p): Remove. (double_int_equal_p): Remove. (double_int_popcount): Remove. (extern add_double_with_sign): Remove. (#define add_double): Remove. (extern neg_double): Remove. (extern mul_double_with_sign): Remove. (extern mul_double_wide_with_sign): Remove. (#define mul_double): Remove. (extern lshift_double): Remove. (extern div_and_round_double): Remove. * double-int.c (add_double_with_sign): Make static. (#defined add_double): Localized from header. (neg_double): Make static. (mul_double_with_sign): Make static. (mul_double_wide_with_sign): Make static. (#defined mul_double): Localized from header. (lshift_double): Make static. (div_and_round_double): Make static. (double_int::wide_mul_with_sign): New. (double_int::sub_with_overflow): New. (double_int::neg_with_overflow): New. (double_int::divmod_with_overflow): New. * emit-rtl.c (init_emit_once): Change to new double_int API. * explow.c (plus_constant): Likewise. * expmed.c (choose_multiplier): Likewise. * fold-const.c (#define OVERFLOW_SUM_SIGN): Remove. (int_const_binop_1): Change to new double_int API. (fold_div_compare): Likewise. (maybe_canonicalize_comparison): Likewise. (pointer_may_wrap_p): Likewise. (fold_negate_const): Likewise. (fold_abs_const): Likewise. * simplify-rtx.c (simplify_const_unary_operation): Likewise. (simplify_const_binary_operation): Likewise. * tree-chrec.c (tree_fold_binomial): Likewise. * tree-vrp.c (extract_range_from_binary_expr_1): Likewise. * config/sparc/sparc.c (sparc_fold_builtin): Likewise. * config/avr/avr.c (avr_double_int_push_digit): Likewise. (avr_map): Likewise. (avr_map_decompose): Likewise. (avr_out_insert_bits): Likewise. Index: gcc/cp/ChangeLog 2012-09-24 Lawrence Crowl <crowl@google.com> * init.c (build_new_1): Change to new double_int API. * decl.c (build_enumerator): Likewise. * typeck2.c (process_init_constructor_array): Likewise. * mangle.c (write_array_type): Likewise. Index: gcc/fortran/ChangeLog 2012-09-24 Lawrence Crowl <crowl@google.com> * trans-expr.c (gfc_conv_cst_int_power): Change to new double_int API. * target-memory.c (gfc_interpret_logical): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@191675 138bc75d-0d04-0410-961f-82ee72b054a4
* 2012-09-23 Tobias Burnus <burnus@net-b.de>burnus2012-09-231-4/+34
| | | | | | | | | | | | | | | | | | | | | | | | | | | * parse.c (parse_derived): Don't set attr.alloc_comp for pointer components with allocatable subcomps. PR fortran/54599 * resolve.c (resolve_fl_namelist): Remove superfluous NULL check. * simplify.c (simplify_min_max): Remove unreachable code. * trans-array.c (gfc_trans_create_temp_array): Change a condition into an assert. PR fortran/54618 * trans-expr.c (gfc_trans_class_init_assign): Guard re-setting of the _data by gfc_conv_expr_present. (gfc_conv_procedure_call): Fix INTENT(OUT) handling for allocatable BT_CLASS. 2012-09-23 Tobias Burnus <burnus@net-b.de> PR fortran/54618 * gfortran.dg/class_array_14.f90: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@191649 138bc75d-0d04-0410-961f-82ee72b054a4
* 2012-09-17 Tobias Burnus <burnus@net-b.de>burnus2012-09-171-2/+7
| | | | | | | | | | | | | | | PR fortran/54603 * trans-expr.c (gfc_trans_subcomponent_assign): Handle proc-pointer components. 2012-09-17 Tobias Burnus <burnus@net-b.de> PR fortran/54603 * gfortran.dg/structure_constructor_11.f90: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@191382 138bc75d-0d04-0410-961f-82ee72b054a4
* 2012-08-27 Tobias Burnus <burnus@net-b.de>burnus2012-08-271-0/+1
| | | | | | | | | | | PR fortran/54384 * resolve.c (gfc_resolve_character_operator): Free temporary variables. * trans-expr.c (gfc_conv_statement_function): Ditto. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@190731 138bc75d-0d04-0410-961f-82ee72b054a4
* 2012-08-27 Tobias Burnus <burnus@net-b.de>burnus2012-08-271-0/+5
| | | | | | | | | | PR fortran/54384 * trans-expr.c (gfc_trans_arrayfunc_assign): Free se.ss and loop. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@190713 138bc75d-0d04-0410-961f-82ee72b054a4
* 2012-08-24 Tobias Burnus <burnus@net-b.de>burnus2012-08-241-45/+44
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | PR fortran/54350 * trans-array.c (free_ss_info): Free data.array.subscript. (gfc_free_ss): No longer free data.array.subscript. (walk_coarray): New function, moved from trans-intrinsic.c (gfc_conv_expr_descriptor): Walk array descriptor instead of taking passed "ss". (get_array_ctor_all_strlen, gfc_add_loop_ss_code, gfc_conv_array_parameter): Update call and cleanup ss handling. * trans-array.h (gfc_conv_expr_descriptor, gfc_conv_array_parameter): Update prototype. * trans-expr.c (gfc_conv_derived_to_class, conv_isocbinding_procedure, gfc_conv_procedure_call, gfc_trans_alloc_subarray_assign, gfc_trans_subcomponent_assign, gfc_trans_pointer_assignment, gfc_trans_arrayfunc_assign): Update call to gfc_conv_expr_descriptor and gfc_conv_array_parameter, and clean up. * trans-intrinsic.c (walk_coarray): Moved to trans-array.c (trans_this_image, trans_image_index, gfc_conv_intrinsic_rank gfc_conv_intrinsic_bound, gfc_conv_intrinsic_cobound, gfc_conv_intrinsic_len, gfc_conv_intrinsic_size, gfc_conv_intrinsic_sizeof, gfc_conv_intrinsic_storage_size, gfc_conv_intrinsic_transfer, gfc_conv_allocated, gfc_conv_associated, gfc_conv_intrinsic_loc, conv_intrinsic_move_alloc): Update calls. * trans-io.c (gfc_convert_array_to_string, set_internal_unit, gfc_trans_transfer): Ditto. * trans-stmt.c (gfc_conv_elemental_dependencies, gfc_trans_sync, trans_associate_var, gfc_trans_pointer_assign_need_temp): Ditto. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@190641 138bc75d-0d04-0410-961f-82ee72b054a4
* 2012-08-22 Tobias Burnus <burnus@net-b.de>burnus2012-08-221-0/+3
| | | | | | | | | | * trans-expr.c (gfc_copy_class_to_class, gfc_trans_arrayfunc_assign): Free loop and ss data. * trans-intrinsic.c (gfc_trans_arrayfunc_assign): Free ss data. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@190586 138bc75d-0d04-0410-961f-82ee72b054a4
* fortran/mikael2012-08-141-0/+45
| | | | | | | | | | | | | | | PR fortran/47586 * trans-expr.c (expr_is_variable): Handle regular, procedure pointer, and typebound functions returning a data pointer. testsuite/ PR fortran/47586 * gfortran.dg/typebound_proc_20.f90: Enable runtime test. * gfortran.dg/typebound_proc_27.f03: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@190394 138bc75d-0d04-0410-961f-82ee72b054a4
* fortran/mikael2012-08-141-6/+29
| | | | | | | | | * trans-expr.c (gfc_trans_scalar_assign): Rename argument, extend comment. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@190392 138bc75d-0d04-0410-961f-82ee72b054a4
* fortran/mikael2012-08-141-9/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | * gfortran.h (gfc_get_proc_ptr_comp): New prototype. (gfc_is_proc_ptr_comp): Update prototype. * expr.c (gfc_get_proc_ptr_comp): New function based on the old gfc_is_proc_ptr_comp. (gfc_is_proc_ptr_comp): Call gfc_get_proc_ptr_comp. (gfc_specification_expr, gfc_check_pointer_assign): Use gfc_get_proc_ptr_comp. * trans-array.c (gfc_walk_function_expr): Likewise. * resolve.c (resolve_structure_cons, update_ppc_arglist, resolve_ppc_call, resolve_expr_ppc): Likewise. (resolve_function): Update call to gfc_is_proc_ptr_comp. * dump-parse-tree.c (show_expr): Likewise. * interface.c (compare_actual_formal): Likewise. * match.c (gfc_match_pointer_assignment): Likewise. * primary.c (gfc_match_varspec): Likewise. * trans-io.c (gfc_trans_transfer): Likewise. * trans-expr.c (gfc_conv_variable, conv_function_val, conv_isocbinding_procedure, gfc_conv_procedure_call, gfc_trans_pointer_assignment): Likewise. (gfc_conv_procedure_call, gfc_trans_array_func_assign): Use gfc_get_proc_ptr_comp. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@190391 138bc75d-0d04-0410-961f-82ee72b054a4
* * array.c (gfc_copy_array_ref): Don't copy the offset field.mikael2012-08-021-1/+0
| | | | | | | | | | | * expr.c (find_array_section): Ignore the offset field. * trans-expr.c (gfc_find_interface_mapping_to_ref): Don't apply any interface mapping to the offset field. * gfortran.h (struct gfc_array_ref): Remove the offset field. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@190092 138bc75d-0d04-0410-961f-82ee72b054a4
* 2012-07-25 Tobias Burnus <burnus@net-b.de>burnus2012-07-251-3/+3
| | | | | | | | | | | | | | | | | | | | * trans-types.c (gfc_real16_is_float128): Fix spelling in a comment. * trans.h (struct gfc_array_info): Ditto. * gfortran.h (gfc_expr): Ditto. * simplify.c (gfc_count): Ditto. * trans-expr.c (gfc_copy_class_to_class, conv_parent_component_references, gfc_trans_pointer_assignment): Ditto. * expr.c (check_pointer_assign): Fix diagnostic spelling. * interface.c (compare_parameter): Ditto. * parse.c (use_modules, parse_associate): Ditto. * decl.c (match_char_length): Fix spelling of the an function argument. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@189859 138bc75d-0d04-0410-961f-82ee72b054a4
* 2012-07-21 Tobias Burnus <burnus@net-b.de>burnus2012-07-211-2/+1
| | | | | | | | | * trans-expr.c (gfc_conv_derived_to_class): Fix argument passed to class_array_data_assign. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@189739 138bc75d-0d04-0410-961f-82ee72b054a4
* 2012-07-20 Tobias Burnus <burnus@net-b.de>burnus2012-07-201-15/+158
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | PR fortran/48820 * array.c (match_array_element_spec, gfc_match_array_spec, spec_size, gfc_array_dimen_size): Add support for assumed-rank arrays. * check.c (dim_rank_check): Ditto. * class.c (gfc_add_component_ref): Ditto. (gfc_build_class_symbol): Regard assumed-rank arrays as having GFC_MAX_DIMENSIONS. And build extra class container for a scalar pointer class. * decl.c (merge_array_spec): Add assert. * dump-parse-tree.c (show_array_spec): Add support for assumed-rank arrays. * expr.c (gfc_is_simply_contiguous): Ditto. * gfortran.h (array_type): Ditto. (gfc_array_spec, gfc_expr): Add comment to "rank" field. * interface.c (compare_type_rank, argument_rank_mismatch, compare_parameter, gfc_procedure_use): Ditto. (compare_actual_formal): Fix NULL() to optional-dummy handling for polymorphic dummies. * module.c (mio_typespec): Add support for assumed-rank arrays. * resolve.c (resolve_formal_arglist, resolve_actual_arglist, resolve_elemental_actual, resolve_global_procedure, expression_shape, resolve_variable, update_ppc_arglist, check_typebound_baseobject, gfc_resolve_expr, resolve_fl_var_and_proc, gfc_resolve_finalizers, resolve_typebound_procedure, resolve_symbol): Ditto. (assumed_type_expr_allowed): Remove static variable. (actual_arg, first_actual_arg): New static variables. * simplify.c (simplify_bound, gfc_simplify_range): Add support for assumed-rank arrays. * trans-array.c (gfc_conv_array_parameter): Ditto. (gfc_get_descriptor_dimension): New function, which returns the descriptor. (gfc_conv_descriptor_dimension): Use it. (gfc_conv_descriptor_stride_get, gfc_conv_array_parameter): Handle GFC_ARRAY_ASSUMED_RANK_CONT and AS_ASSUMED_RANK. * trans-array.h (gfc_get_descriptor_dimension): New prototype. * trans-decl. (gfc_build_dummy_array_decl, gfc_trans_deferred_vars, add_argument_checking): Add support for assumed-rank arrays. * trans-expr.c (gfc_conv_expr_present, gfc_conv_variable, gfc_conv_procedure_call): Ditto. (get_scalar_to_descriptor_type, class_array_data_assign, conv_scalar_to_descriptor): New static functions. (gfc_conv_derived_to_class, gfc_conv_class_to_class): Use them. * trans-intrinsic.c (get_rank_from_desc): New function. (gfc_conv_intrinsic_rank, gfc_conv_associated): Use it. * trans-types.c (gfc_array_descriptor_base_caf, gfc_array_descriptor_base): Make space for scalar array. (gfc_is_nodesc_array, gfc_is_nodesc_array, gfc_build_array_type, gfc_get_array_descriptor_base): Add support for assumed-rank arrays. * trans.h (gfc_array_kind): Add GFC_ARRAY_ASSUMED_RANK and GFC_ARRAY_ASSUMED_RANK_CONT. 2012-07-20 Tobias Burnus <burnus@net-b.de> PR fortran/48820 * gfortran.dg/assumed_type_3.f90: Update dg-error. * gfortran.dg/assumed_rank_1.f90: New. * gfortran.dg/assumed_rank_1_c.c: New. * gfortran.dg/assumed_rank_2.f90: New. * gfortran.dg/assumed_rank_4.f90: New. * gfortran.dg/assumed_rank_5.f90: New. * gfortran.dg/assumed_rank_6.f90: New. * gfortran.dg/assumed_rank_7.f90: New. * gfortran.dg/assumed_rank_8.f90: New. * gfortran.dg/assumed_rank_8_c.c: New. * gfortran.dg/assumed_rank_9.f90: New. * gfortran.dg/assumed_rank_10.f90: New. * gfortran.dg/assumed_rank_12.f90: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@189700 138bc75d-0d04-0410-961f-82ee72b054a4
* 2012-07-19 Tobias Burnus <burnus@net-b.de>burnus2012-07-191-2/+7
| | | | | | | | | | | * trans-expr.c (gfc_conv_procedure_call): Fix handling of polymorphic arguments. * resolve.c (resolve_formal_arglist): Ditto, mark polymorphic assumed-shape arrays as such. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@189678 138bc75d-0d04-0410-961f-82ee72b054a4
* 2012-07-12 Tobias Burnus <burnus@net-b.de>burnus2012-07-121-21/+102
| | | | | | | | | | | | | | | | * trans-expr.c (conv_isocbinding_procedure): Generate * c_f_pointer code inline. 2012-07-12 Tobias Burnus <burnus@net-b.de> * gfortran.dg/c_f_pointer_shape_tests_5.f90: New. * gfortran.dg/c_f_pointer_tests_3.f90: Update scan-tree-dump-times pattern. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@189442 138bc75d-0d04-0410-961f-82ee72b054a4
* 2012-06-16 Tobias Burnus <burnus@net-b.de>burnus2012-06-161-8/+2
| | | | | | | | | | | | | | | | | | | PR fortran/53642 PR fortran/45170 * frontend-passes.c (optimize_assignment): Don't remove RHS's trim when assigning to a deferred-length string. * trans-expr.c (gfc_trans_assignment_1): Ensure that the RHS string length is evaluated before the deferred-length LHS is reallocated. 2012-06-16 Tobias Burnus <burnus@net-b.de> PR fortran/53642 PR fortran/45170 * gfortran.dg/deferred_type_param_8.f90: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@188692 138bc75d-0d04-0410-961f-82ee72b054a4
* 2012-05-14 Tobias Burnus <burnus@net-b.de>burnus2012-05-141-7/+8
| | | | | | | | | | | | | | | | | | | | | | | | PR fortran/49110 PR fortran/51055 PR fortran/53329 * trans-expr.c (gfc_trans_assignment_1): Fix allocation handling for assignment of function results to allocatable deferred-length strings. * trans-decl.c (gfc_create_string_length): For deferred-length module variables, include module name in the assembler name. (gfc_get_symbol_decl): Don't override the assembler name. 2012-05-14 Tobias Burnus <burnus@net-b.de> PR fortran/49110 PR fortran/51055 PR fortran/53329 * gfortran.dg/deferred_type_param_4.f90: New. * gfortran.dg/deferred_type_param_6.f90: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@187472 138bc75d-0d04-0410-961f-82ee72b054a4
* 2012-05-13 Alessandro Fanfarillo <fanfarillo.gcc@gmail.com>burnus2012-05-131-20/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Tobias Burnus <burnus@net-b.de> PR fortran/52158 PR fortran/45170 PR fortran/49430 * resolve.c (resolve_fl_derived0): Deferred character length procedure components are supported. * trans-expr.c (gfc_conv_procedure_call): Handle TBP with deferred-length results. (gfc_string_to_single_character): Add a new check to prevent NULL read. (gfc_conv_procedure_call): Remove unuseful checks on symbol's attributes. Add new checks to prevent NULL read on string length. 2012-05-13 Alessandro Fanfarillo <fanfarillo.gcc@gmail.com> PR fortran/45170 * gfortran.dg/deferred_type_param_3.f90: New. * gfortran.dg/deferred_type_proc_pointer_1.f90: New. * gfortran.dg/deferred_type_proc_pointer_2.f90: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@187436 138bc75d-0d04-0410-961f-82ee72b054a4
* 2012-05-05 Paul Thomas <pault@gcc.gnu.org>pault2012-05-051-9/+31
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | PR fortran/41600 * trans-array.c (build_array_ref): New static function. (gfc_conv_array_ref, gfc_get_dataptr_offset): Call it. * trans-expr.c (gfc_get_vptr_from_expr): New function. (gfc_conv_derived_to_class): Add a new argument for a caller supplied vptr and use it if it is not NULL. (gfc_conv_procedure_call): Add NULL to call to above. symbol.c (gfc_is_associate_pointer): Return true if symbol is a class object. * trans-stmt.c (trans_associate_var): Handle class associate- names. * expr.c (gfc_get_variable_expr): Supply the array-spec if possible. * trans-types.c (gfc_typenode_for_spec): Set GFC_CLASS_TYPE_P for class types. * trans.h : Add prototypes for gfc_get_vptr_from_expr and gfc_conv_derived_to_class. Define GFC_CLASS_TYPE_P. * resolve.c (resolve_variable): For class arrays, ensure that the target expression has all the necessary _data references. (resolve_assoc_var): Throw a "not yet implemented" error for class array selectors that need a temporary. * match.c (copy_ts_from_selector_to_associate, select_derived_set_tmp, select_class_set_tmp): New functions. (select_type_set_tmp): Call one of last two new functions. (gfc_match_select_type): Copy_ts_from_selector_to_associate is called if associate-name is typed. PR fortran/53191 * resolve.c (resolve_ref): C614 applied to class expressions. 2012-05-05 Paul Thomas <pault@gcc.gnu.org> PR fortran/41600 * gfortran.dg/select_type_26.f03 : New test. * gfortran.dg/select_type_27.f03 : New test. PR fortran/53191 * gfortran.dg/select_type_28.f03 : New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@187192 138bc75d-0d04-0410-961f-82ee72b054a4
* 2012-04-25 Tobias Burnus <burnus@net-b.de>burnus2012-04-251-2/+21
| | | | | | | | | | | | | | | | | | | | | | PR fortran/52196 * lang.opt (Wrealloc-lhs, Wrealloc-lhs-all): New flags. * gfortran.h (gfc_option_t): Add them. * options.c (gfc_init_options, gfc_post_options, gfc_handle_option): Handle them. * invoke.texi: Document them. * trans-expr.c (realloc_lhs_warning): New function. (gfc_trans_arrayfunc_assign, alloc_scalar_allocatable_for_assignment, gfc_trans_assignment_1): Use it. 2012-04-25 Tobias Burnus <burnus@net-b.de> PR fortran/52196 * gfortran.dg/realloc_on_assign_14.f90: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@186806 138bc75d-0d04-0410-961f-82ee72b054a4
* 2012-04-15 Janus Weil <janus@gcc.gnu.org>janus2012-04-151-1/+1
| | | | | | | | | | | | | | | PR fortran/51082 * trans-expr.c (gfc_conv_expr_reference): Check if the expression is a simple function call (or a more involved PPC reference). 2012-04-15 Janus Weil <janus@gcc.gnu.org> PR fortran/51082 * gfortran.dg/proc_ptr_comp_34.f90: New test case. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@186465 138bc75d-0d04-0410-961f-82ee72b054a4
* fortran/mikael2012-03-041-0/+4
| | | | | | | | | | | | | | | | | PR fortran/50981 * gfortran.h (gfc_is_class_container_ref): New prototype. * class.c (gfc_is_class_container_ref): New function. * trans-expr.c (gfc_conv_procedure_call): Add a "_data" component reference to polymorphic actual arguments. testsuite/ PR fortran/50981 * gfortran.dg/elemental_optional_args_5.f03: Add subcomponent actual argument checks. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@184904 138bc75d-0d04-0410-961f-82ee72b054a4
* fortran/mikael2012-03-041-2/+29
| | | | | | | | | | | | | | PR fortran/50981 * trans-expr.c (gfc_conv_procedure_call): Save se->ss's value. Handle the case of unallocated arrays passed to elemental procedures. testsuite/ PR fortran/50981 * gfortran.dg/elemental_optional_args_5.f03: Add array checks. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@184896 138bc75d-0d04-0410-961f-82ee72b054a4
* fortran/mikael2012-03-041-1/+1
| | | | | | | | | | | | | * trans.h (struct gfc_ss_info): Move can_be_null_ref component from the data::scalar subcomponent to the toplevel. * trans-expr.c (gfc_conv_expr): Update component reference. * trans-array.c (gfc_add_loop_ss_code): Ditto. (gfc_walk_elemental_function_args): Ditto. Move the conditional setting the field out of the scalar-only block. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@184893 138bc75d-0d04-0410-961f-82ee72b054a4
* 2012-03-03 Tobias Burnus <burnus@net-b.de>burnus2012-03-031-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | PR fortran/48820 * decl.c (gfc_match_decl_type_spec): Support type(*). (gfc_verify_c_interop): Allow type(*). * dump-parse-tree.c (show_typespec): Handle type(*). * expr.c (gfc_copy_expr): Ditto. * interface.c (compare_type_rank, compare_parameter, compare_actual_formal, gfc_procedure_use): Ditto. * libgfortran.h (bt): Add BT_ASSUMED. * misc.c (gfc_basic_typename, gfc_typename): Handle type(*). * module.c (bt_types): Ditto. * resolve.c (assumed_type_expr_allowed): New static variable. (resolve_actual_arglist, resolve_variable, resolve_symbol): Handle type(*). * trans-expr.c (gfc_conv_procedure_call): Ditto. * trans-types.c (gfc_typenode_for_spec, gfc_get_dtype): Ditto. 2012-03-03 Tobias Burnus <burnus@net-b.de> PR fortran/48820 * gfortran.dg/assumed_type_1.f90: New. * gfortran.dg/assumed_type_2.f90: New. * gfortran.dg/assumed_type_3.f90: New. * gfortran.dg/assumed_type_4.f90: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@184852 138bc75d-0d04-0410-961f-82ee72b054a4
* 2012-02-29 Paul Thomas <pault@gcc.gnu.org>pault2012-02-291-0/+2
| | | | | | | | | | | | | | | PR fortran/52386 * trans-expr.c (fcncall_realloc_result): Dereference the descriptor if needed. 2012-02-29 Paul Thomas <pault@gcc.gnu.org> PR fortran/52386 * gfortran.dg/realloc_on_assign_13.f90 : New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@184651 138bc75d-0d04-0410-961f-82ee72b054a4
* 2012-02-08 Tobias Burnus <burnus@net-b.de>burnus2012-02-081-7/+6
| | | | | | | | | | | | | | PR fortran/52151 * trans-expr.c (fcncall_realloc_result): Set also the stride. 2012-02-08 Tobias Burnus <burnus@net-b.de> PR fortran/52151 * gfortran.dg/realloc_on_assign_12.f90: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@184016 138bc75d-0d04-0410-961f-82ee72b054a4
* 2012-02-07 Tobias Burnus <burnus@net-b.de>burnus2012-02-071-0/+6
| | | | | | | | | | | | | | | PR fortran/51514 * trans-expr.c (gfc_conv_procedure_call): Add _data component for calls of scalar CLASS actuals to TYPE dummies. 2012-02-07 Tobias Burnus <burnus@net-b.de> PR fortran/51514 * gfortran.dg/class_to_type_2.f90: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@183954 138bc75d-0d04-0410-961f-82ee72b054a4
* 2012-02-02 Mikael Morin <mikael@gcc.gnu.org>mikael2012-02-021-4/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | PR fortran/41587 PR fortran/46356 PR fortran/51754 PR fortran/50981 * class.c (insert_component_ref, class_data_ref_missing, gfc_fix_class_refs): New functions. * gfortran.h (gfc_fix_class_refs): New prototype. * trans-expr.c (gfc_conv_expr): Remove special case handling and call gfc_fix_class_refs instead. 2012-02-02 Mikael Morin <mikael@gcc.gnu.org> PR fortran/41587 * gfortran.dg/class_array_10.f03: New test. PR fortran/46356 * gfortran.dg/class_array_11.f03: New test. PR fortran/51754 * gfortran.dg/class_array_12.f03: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@183853 138bc75d-0d04-0410-961f-82ee72b054a4
* 2012-02-02 Paul Thomas <pault@gcc.gnu.org>pault2012-02-021-13/+57
| | | | | | | | | | | | | PR fortran/52012 * trans-expr.c (fcncall_realloc_result): If variable shape is correct, retain the bounds, whatever they are. 2012-02-02 Paul Thomas <pault@gcc.gnu.org> PR fortran/52012 * gfortran.dg/realloc_on_assign_11.f90: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@183849 138bc75d-0d04-0410-961f-82ee72b054a4
* 2012-02-01 Tobias Burnusburnus2012-02-011-1/+1
| | | | | | | | | | | | | | | PR fortran/52059 * trans-expr.c (gfc_conv_procedure_call): Add array ref only to variables. 2012-02-01 Tobias Burnus PR fortran/52059 * gfortran.dg/elemental_function_1.f90: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@183807 138bc75d-0d04-0410-961f-82ee72b054a4
* 2012-01-31 Paul Thomas <pault@gcc.gnu.org>pault2012-01-311-16/+12
| | | | | | | | | | | | | PR fortran/52012 * trans-expr.c (fcncall_realloc_result): Correct calculation of result offset. 2012-01-31 Paul Thomas <pault@gcc.gnu.org> PR fortran/52012 * gfortran.dg/realloc_on_assign_10.f90: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@183757 138bc75d-0d04-0410-961f-82ee72b054a4
* 2012-01-27 Tobias Burnus <burnus@net-b.de>burnus2012-01-271-1/+2
| | | | | | | | | | | | | | | PR fortran/52022 * trans-expr.c (gfc_conv_procedure_call): Fix passing of functions, which return allocatables. 2012-01-27 Tobias Burnus <burnus@net-b.de> PR fortran/52022 * gfortran.dg/dummy_procedure_7.f90: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@183643 138bc75d-0d04-0410-961f-82ee72b054a4
* 2012-01-27 Paul Thomas <pault@gcc.gnu.org>pault2012-01-271-1/+104
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Tobias Burnus <burnus@gcc.gnu.org> PR fortran/48705 PR fortran/51870 PR fortran/51943 PR fortran/51946 * trans-array.c (gfc_array_init_size): Add two extra arguments to convey the dynamic element size of a calls object and to return the number of elements that have been allocated. (gfc_array_allocate): Add the same arguments and use them to call gfc_array_init_size. Before the allocation dereference the data pointer, if necessary. Set the allocated array to zero if the class element size or expr3 are non-null. * trans-expr.c (gfc_conv_class_to_class): Give this function global scope. (get_class_array_ref): New function. (gfc_copy_class_to_class): New function. * trans-array.h : Update prototype for gfc_array_allocate. * trans-stmt.c (gfc_trans_allocate): For non-variable class STATUS expressions extract the class object and the dynamic element size. Use the latter to call gfc_array_allocate and the former for setting the vptr and, via gfc_copy_class_to_clasfc_cs, to copy to the allocated data. * trans.h : Prototypes for gfc_get_class_array_ref, gfc_copy_class_to_class and gfc_conv_class_to_class. 2012-01-27 Paul Thomas <pault@gcc.gnu.org> Tobias Burnus <burnus@gcc.gnu.org> PR fortran/48705 * gfortran.dg/class_allocate_11.f03: New. PR fortran/51870 PR fortran/51943 PR fortran/51946 * gfortran.dg/class_allocate_7.f03: New. * gfortran.dg/class_allocate_8.f03: New. * gfortran.dg/class_allocate_9.f03: New. * gfortran.dg/class_allocate_10.f03: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@183613 138bc75d-0d04-0410-961f-82ee72b054a4
* 2012-01-18 Paul Thomas <pault@gcc.gnu.org>pault2012-01-181-1/+11
| | | | | | | | | | | | | | | PR fortran/51634 * trans-expr.c (gfc_conv_procedure_call): Deallocate allocatable components of temporary class arguments. 2012-01-18 Paul Thomas <pault@gcc.gnu.org> PR fortran/51634 * gfortran.dg/typebound_operator_12.f03: New. * gfortran.dg/typebound_operator_13.f03: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@183287 138bc75d-0d04-0410-961f-82ee72b054a4
* 2012-01-17 Tobias Burnus <burnus@net-b.de>burnus2012-01-171-5/+18
| | | | | | | | | | | | | | | | | | Janne Blomqvist <jb@gcc.gnu.org> PR fortran/51869 * trans-expr.c (alloc_scalar_allocatable_for_assignment): Nullify LHS after allocation, if it has allocatable components. * f95-lang.c (gfc_init_builtin_functions): Add BUILT_IN_CALLOC. 2012-01-17 Tobias Burnus <burnus@net-b.de> PR fortran/51869 * gfortran.dg/realloc_on_assign_9.f90: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@183247 138bc75d-0d04-0410-961f-82ee72b054a4
* 2012-01-06 Tobias Burnus <burnus@net-b.de>burnus2012-01-061-3/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@182951 138bc75d-0d04-0410-961f-82ee72b054a4
* PR fortran/50981mikael2012-01-041-0/+5
| | | | | | | | | | | | * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@182874 138bc75d-0d04-0410-961f-82ee72b054a4
* * trans-expr.c (gfc_conv_expr): Move address taking...mikael2012-01-041-2/+1
| | | | | | | | (gfc_conv_expr_reference): ... here. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@182873 138bc75d-0d04-0410-961f-82ee72b054a4
* 2012-01-02 Paul Thomas <pault@gcc.gnu.org>pault2012-01-021-158/+213
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@182796 138bc75d-0d04-0410-961f-82ee72b054a4
* 2011-12-15 Paul Thomas <pault@gcc.gnu.org>pault2011-12-151-1/+1
| | | | | | | | | | | | | | | | | * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@182389 138bc75d-0d04-0410-961f-82ee72b054a4
* 2011-12-11 Paul Thomas <pault@gcc.gnu.org>pault2011-12-111-72/+386
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@182210 138bc75d-0d04-0410-961f-82ee72b054a4
* * trans-expr.c (gfc_conv_procedure_call): Handle temporaries formikael2011-11-041-1/+12
| | | | | | | | | | | | arguments to elemental calls. * trans-stmt.c (replace_ss): New function. (gfc_conv_elemental_dependencies): Remove temporary loop handling. Create a new ss for the temporary and replace the original one with it. Remove fake array references. Recalculate all offsets. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180906 138bc75d-0d04-0410-961f-82ee72b054a4
* * trans.h (struct gfc_ss): New field nested_ss.mikael2011-11-031-1/+2
| | | | | | | | * trans-expr.c (gfc_advance_se_ss_chain): Update assertion. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180893 138bc75d-0d04-0410-961f-82ee72b054a4
* * trans.h (struct gfc_ss): New field parent.mikael2011-11-031-1/+10
| | | | | | | | | | | * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180889 138bc75d-0d04-0410-961f-82ee72b054a4
* * trans-array.h (gfc_trans_create_temp_array): Remove loop argument.mikael2011-11-031-2/+2
| | | | | | | | | | | | | | | * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180888 138bc75d-0d04-0410-961f-82ee72b054a4
* * trans.h (struct gfc_ss, struct gfc_ss_info): Move fieldmikael2011-11-031-2/+2
| | | | | | | | | | | | | 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180875 138bc75d-0d04-0410-961f-82ee72b054a4
OpenPOWER on IntegriCloud