diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index d7c4e706958..092a1499c2d 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,12 @@ +2007-07-11 Richard Guenther + + * trans-array.c (gfc_conv_array_parameter): Use correct + types for comparison. + * trans-intrinsic.c (gfc_conv_intrinsic_repeat): Use + correct types for POINTER_PLUS_EXPR. + * trans-stmt.c (gfc_trans_forall_loop): Use correct type + for integer one constant. + 2007-07-10 Paul Thomas PR fortran/32157 diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index 6a48031b3fb..8a2365813ba 100644 --- a/gcc/fortran/trans-array.c +++ b/gcc/fortran/trans-array.c @@ -4924,7 +4924,8 @@ gfc_conv_array_parameter (gfc_se * se, gfc_expr * expr, gfc_ss * ss, int g77) loop cleanup code. */ tmp = build_fold_indirect_ref (desc); tmp = gfc_conv_array_data (tmp); - tmp = build2 (NE_EXPR, boolean_type_node, ptr, tmp); + tmp = build2 (NE_EXPR, boolean_type_node, + fold_convert (TREE_TYPE (tmp), ptr), tmp); tmp = build3_v (COND_EXPR, tmp, stmt, build_empty_stmt ()); gfc_add_expr_to_block (&block, tmp); diff --git a/gcc/fortran/trans-intrinsic.c b/gcc/fortran/trans-intrinsic.c index 8856f1965af..c4354b11e5f 100644 --- a/gcc/fortran/trans-intrinsic.c +++ b/gcc/fortran/trans-intrinsic.c @@ -3596,7 +3596,8 @@ gfc_conv_intrinsic_repeat (gfc_se * se, gfc_expr * expr) /* Call memmove (dest + (i*slen), src, slen). */ tmp = fold_build2 (MULT_EXPR, gfc_charlen_type_node, slen, fold_convert (gfc_charlen_type_node, count)); - tmp = fold_build2 (POINTER_PLUS_EXPR, pchar_type_node, dest, + tmp = fold_build2 (POINTER_PLUS_EXPR, pchar_type_node, + fold_convert (pchar_type_node, dest), fold_convert (sizetype, tmp)); tmp = build_call_expr (built_in_decls[BUILT_IN_MEMMOVE], 3, tmp, src, slen); diff --git a/gcc/fortran/trans-stmt.c b/gcc/fortran/trans-stmt.c index abb53ef7515..034a50529eb 100644 --- a/gcc/fortran/trans-stmt.c +++ b/gcc/fortran/trans-stmt.c @@ -1609,7 +1609,8 @@ gfc_trans_forall_loop (forall_info *forall_tmp, tree body, } /* Decrement the loop counter. */ - tmp = build2 (MINUS_EXPR, TREE_TYPE (var), count, gfc_index_one_node); + tmp = build2 (MINUS_EXPR, TREE_TYPE (var), count, + build_int_cst (TREE_TYPE (var), 1)); gfc_add_modify_expr (&block, count, tmp); body = gfc_finish_block (&block); @@ -3609,7 +3610,8 @@ gfc_trans_allocate (gfc_code * code) tmp = se.string_length; tmp = build_call_expr (gfor_fndecl_allocate, 2, tmp, pstat); - tmp = build2 (MODIFY_EXPR, void_type_node, se.expr, tmp); + tmp = build2 (MODIFY_EXPR, void_type_node, se.expr, + fold_convert (TREE_TYPE (se.expr), tmp)); gfc_add_expr_to_block (&se.pre, tmp); if (code->expr)