Commit ac816b02 by Richard Guenther Committed by Richard Biener

trans-expr.c (gfc_conv_expr_op): Use zero constant that matches the lse type.

2007-05-31  Richard Guenther  <rguenther@suse.de>

	* trans-expr.c (gfc_conv_expr_op): Use zero constant
	that matches the lse type.
	(gfc_trans_string_copy): Use sizetype zero constant.
	* intrinsic.c (add_functions): The sizeof intrinsic has
	index type result.
	* trans-types.c (gfc_get_dtype): Convert size to index
	type before shifting.
	* trans-array.c (gfc_trans_array_constructor_value): Use
	index type for offset computation.
	* trans-intrinsic.c (gfc_conv_associated): Use correct type
	for zero constant.

From-SVN: r125242
parent ac5753b7
2007-05-31 Richard Guenther <rguenther@suse.de>
* trans-expr.c (gfc_conv_expr_op): Use zero constant
that matches the lse type.
(gfc_trans_string_copy): Use sizetype zero constant.
* intrinsic.c (add_functions): The sizeof intrinsic has
index type result.
* trans-types.c (gfc_get_dtype): Convert size to index
type before shifting.
* trans-array.c (gfc_trans_array_constructor_value): Use
index type for offset computation.
* trans-intrinsic.c (gfc_conv_associated): Use correct type
for zero constant.
2007-05-31 Paul Thomas <pault@gcc.gnu.org> 2007-05-31 Paul Thomas <pault@gcc.gnu.org>
PR fortran/32156 PR fortran/32156
......
...@@ -2143,9 +2143,9 @@ add_functions (void) ...@@ -2143,9 +2143,9 @@ add_functions (void)
make_generic ("size", GFC_ISYM_SIZE, GFC_STD_F95); make_generic ("size", GFC_ISYM_SIZE, GFC_STD_F95);
add_sym_1 ("sizeof", GFC_ISYM_SIZEOF, NOT_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, add_sym_1 ("sizeof", GFC_ISYM_SIZEOF, NOT_ELEMENTAL, ACTUAL_NO, BT_INTEGER, ii,
GFC_STD_GNU, gfc_check_sizeof, NULL, NULL, GFC_STD_GNU, gfc_check_sizeof, NULL, NULL,
i, BT_INTEGER, di, REQUIRED); i, BT_UNKNOWN, 0, REQUIRED);
make_generic ("sizeof", GFC_ISYM_SIZEOF, GFC_STD_GNU); make_generic ("sizeof", GFC_ISYM_SIZEOF, GFC_STD_GNU);
......
...@@ -1196,7 +1196,8 @@ gfc_trans_array_constructor_value (stmtblock_t * pblock, tree type, ...@@ -1196,7 +1196,8 @@ gfc_trans_array_constructor_value (stmtblock_t * pblock, tree type,
gfc_add_expr_to_block (&body, tmp); gfc_add_expr_to_block (&body, tmp);
*poffset = fold_build2 (PLUS_EXPR, gfc_array_index_type, *poffset = fold_build2 (PLUS_EXPR, gfc_array_index_type,
*poffset, build_int_cst (NULL_TREE, n)); *poffset,
build_int_cst (gfc_array_index_type, n));
} }
if (!INTEGER_CST_P (*poffset)) if (!INTEGER_CST_P (*poffset))
{ {
......
...@@ -1149,7 +1149,7 @@ gfc_conv_expr_op (gfc_se * se, gfc_expr * expr) ...@@ -1149,7 +1149,7 @@ gfc_conv_expr_op (gfc_se * se, gfc_expr * expr)
lse.expr = gfc_build_compare_string (lse.string_length, lse.expr, lse.expr = gfc_build_compare_string (lse.string_length, lse.expr,
rse.string_length, rse.expr); rse.string_length, rse.expr);
rse.expr = integer_zero_node; rse.expr = build_int_cst (TREE_TYPE (lse.expr), 0);
gfc_add_block_to_block (&lse.post, &rse.post); gfc_add_block_to_block (&lse.post, &rse.post);
} }
...@@ -2537,7 +2537,7 @@ gfc_trans_string_copy (stmtblock_t * block, tree dlength, tree dest, ...@@ -2537,7 +2537,7 @@ gfc_trans_string_copy (stmtblock_t * block, tree dlength, tree dest,
/* Do nothing if the destination length is zero. */ /* Do nothing if the destination length is zero. */
cond = fold_build2 (GT_EXPR, boolean_type_node, dlen, cond = fold_build2 (GT_EXPR, boolean_type_node, dlen,
build_int_cst (gfc_charlen_type_node, 0)); build_int_cst (size_type_node, 0));
/* The following code was previously in _gfortran_copy_string: /* The following code was previously in _gfortran_copy_string:
......
...@@ -3271,7 +3271,7 @@ gfc_conv_associated (gfc_se *se, gfc_expr *expr) ...@@ -3271,7 +3271,7 @@ gfc_conv_associated (gfc_se *se, gfc_expr *expr)
tmp = gfc_conv_descriptor_stride (arg1se.expr, tmp = gfc_conv_descriptor_stride (arg1se.expr,
gfc_rank_cst[arg1->expr->rank - 1]); gfc_rank_cst[arg1->expr->rank - 1]);
nonzero_arraylen = build2 (NE_EXPR, boolean_type_node, nonzero_arraylen = build2 (NE_EXPR, boolean_type_node,
tmp, integer_zero_node); tmp, build_int_cst (TREE_TYPE (tmp), 0));
/* A pointer to an array, call library function _gfor_associated. */ /* A pointer to an array, call library function _gfor_associated. */
gcc_assert (ss2 != gfc_ss_terminator); gcc_assert (ss2 != gfc_ss_terminator);
......
...@@ -993,7 +993,8 @@ gfc_get_dtype (tree type) ...@@ -993,7 +993,8 @@ gfc_get_dtype (tree type)
if (size && !INTEGER_CST_P (size)) if (size && !INTEGER_CST_P (size))
{ {
tmp = build_int_cst (gfc_array_index_type, GFC_DTYPE_SIZE_SHIFT); tmp = build_int_cst (gfc_array_index_type, GFC_DTYPE_SIZE_SHIFT);
tmp = fold_build2 (LSHIFT_EXPR, gfc_array_index_type, size, tmp); tmp = fold_build2 (LSHIFT_EXPR, gfc_array_index_type,
fold_convert (gfc_array_index_type, size), tmp);
dtype = fold_build2 (PLUS_EXPR, gfc_array_index_type, tmp, dtype); dtype = fold_build2 (PLUS_EXPR, gfc_array_index_type, tmp, dtype);
} }
/* If we don't know the size we leave it as zero. This should never happen /* If we don't know the size we leave it as zero. This should never happen
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment