iresolve.c (resolve_mask_arg): If a mask is an array expression, convert it to kind=1.

2007-09-13  Thomas Koenig  <tkoenig@gcc.gnu.org>

	* iresolve.c (resolve_mask_arg): If a mask is an array
	expression, convert it to kind=1.

From-SVN: r128477
This commit is contained in:
Thomas Koenig 2007-09-13 19:02:31 +00:00
parent 1d7d5ac4e8
commit 76896993c2
2 changed files with 28 additions and 9 deletions

View File

@ -1,3 +1,8 @@
2007-09-13 Thomas Koenig <tkoenig@gcc.gnu.org>
* iresolve.c (resolve_mask_arg): If a mask is an array
expression, convert it to kind=1.
2007-09-13 Tobias Burnus <burnus@net-b.de>
PR fortran/33343

View File

@ -78,18 +78,32 @@ static void
resolve_mask_arg (gfc_expr *mask)
{
/* The mask can be any kind for an array.
For the scalar case, coerce it to kind=4 unconditionally
(because this is the only kind we have a library function
for). */
gfc_typespec ts;
if (mask->rank == 0 && mask->ts.kind != 4)
if (mask->rank == 0)
{
gfc_typespec ts;
/* For the scalar case, coerce the mask to kind=4 unconditionally
(because this is the only kind we have a library function
for). */
ts.type = BT_LOGICAL;
ts.kind = 4;
gfc_convert_type (mask, &ts, 2);
if (mask->ts.kind != 4)
{
ts.type = BT_LOGICAL;
ts.kind = 4;
gfc_convert_type (mask, &ts, 2);
}
}
else
{
/* In the library, we access the mask with a GFC_LOGICAL_1
argument. No need to waste memory if we are about to create
a temporary array. */
if (mask->expr_type == EXPR_OP)
{
ts.type = BT_LOGICAL;
ts.kind = 1;
gfc_convert_type (mask, &ts, 2);
}
}
}