diff options
author | Steven Bosscher <stevenb@suse.de> | 2004-06-29 22:01:35 +0000 |
---|---|---|
committer | Steven Bosscher <steven@gcc.gnu.org> | 2004-06-29 22:01:35 +0000 |
commit | 7ab92584665303887df921f930d38e606b41b39a (patch) | |
tree | 5200b1c6f390cd74c55fea19d853189ee1fb3d1c /gcc/fortran/trans.c | |
parent | e23667c608660cde7885ceb7aaaf0cc97eac3723 (diff) | |
download | gcc-7ab92584665303887df921f930d38e606b41b39a.zip gcc-7ab92584665303887df921f930d38e606b41b39a.tar.gz gcc-7ab92584665303887df921f930d38e606b41b39a.tar.bz2 |
Make sure types in assignments are compatible.
2004-06-29 Steven Bosscher <stevenb@suse.de>
Make sure types in assignments are compatible. Mostly mechanical.
* trans-const.h (gfc_index_one_node): New define.
* trans-array.c (gfc_trans_allocate_array_storage,
gfc_trans_allocate_temp_array, gfc_trans_array_constructor_subarray,
gfc_trans_array_constructor_value, gfc_trans_array_constructor,
gfc_conv_array_ubound, gfc_conv_array_ref,
gfc_trans_scalarized_loop_end, gfc_conv_section_startstride,
gfc_conv_ss_startstride, gfc_conv_loop_setup, gfc_array_init_size,
gfc_trans_array_bounds, gfc_trans_dummy_array_bias,
gfc_conv_expr_descriptor, gfc_trans_deferred_array): Use the correct
types in assignments, conversions and conditionals for expressions.
* trans-expr.c (gfc_conv_expr_present, gfc_conv_substring,
gfc_conv_unary_op, gfc_conv_cst_int_power, gfc_conv_string_tmp,
gfc_conv_function_call, gfc_trans_pointer_assignment,
gfc_trans_scalar_assign): Likewise.
* trans-intrinsic.c (build_fixbound_expr, gfc_conv_intrinsic_bound,
gfc_conv_intrinsic_anyall, gfc_conv_intrinsic_count,
gfc_conv_intrinsic_minmaxloc, gfc_conv_intrinsic_btest,
gfc_conv_intrinsic_singlebitop, gfc_conv_intrinsic_ishft,
gfc_conv_intrinsic_ishftc, gfc_conv_intrinsic_strcmp,
gfc_conv_allocated, gfc_conv_associated,
gfc_conv_intrinsic_rrspacing, gfc_conv_intrinsic_trim): Likewise.
* trans-io.c (set_string): Likewise.
* trans-stmt.c (gfc_trans_do, gfc_trans_forall_loop,
gfc_do_allocate, generate_loop_for_temp_to_lhs,
generate_loop_for_rhs_to_temp, compute_inner_temp_size,
compute_overall_iter_number, gfc_trans_assign_need_temp,
gfc_trans_pointer_assign_need_temp, gfc_trans_forall_1,
gfc_evaluate_where_mask, gfc_trans_where_assign,
gfc_trans_where_2): Likewise.
* trans-types.c (gfc_get_character_type, gfc_build_array_type,
gfc_get_nodesc_array_type, gfc_get_array_type_bounds): Likewise.
* trans.c (gfc_add_modify_expr): Add sanity check that types
for the lhs and rhs are the same for scalar assignments.
From-SVN: r83877
Diffstat (limited to 'gcc/fortran/trans.c')
-rw-r--r-- | gcc/fortran/trans.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/gcc/fortran/trans.c b/gcc/fortran/trans.c index 2927728..00215f6 100644 --- a/gcc/fortran/trans.c +++ b/gcc/fortran/trans.c @@ -146,6 +146,16 @@ gfc_add_modify_expr (stmtblock_t * pblock, tree lhs, tree rhs) { tree tmp; +#ifdef ENABLE_CHECKING + /* Make sure that the types of the rhs and the lhs are the same + for scalar assignments. We should probably have something + similar for aggregates, but right now removing that check just + breaks everything. */ + if (TREE_TYPE (rhs) != TREE_TYPE (lhs) + && !AGGREGATE_TYPE_P (TREE_TYPE (lhs))) + abort (); +#endif + tmp = fold (build_v (MODIFY_EXPR, lhs, rhs)); gfc_add_expr_to_block (pblock, tmp); } |