aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/simplify.c
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2014-05-25 07:24:12 +0200
committerTobias Burnus <burnus@gcc.gnu.org>2014-05-25 07:24:12 +0200
commit05fc16dde913ed47ab4352a34b15f71d24d58934 (patch)
tree674a166546a3e633ac9d67036605b32fa986ed8b /gcc/fortran/simplify.c
parentfd1e93027047ca891e278fac96d38978aeb51d6d (diff)
downloadgcc-05fc16dde913ed47ab4352a34b15f71d24d58934.zip
gcc-05fc16dde913ed47ab4352a34b15f71d24d58934.tar.gz
gcc-05fc16dde913ed47ab4352a34b15f71d24d58934.tar.bz2
check.c (gfc_check_num_images): New.
2014-05-25 Tobias Burnus <burnus@net-b.de> * check.c (gfc_check_num_images): New. (gfc_check_this_image): Handle distance argument. * intrinsic.c (add_functions): Update this_image and num_images for new distance and failed arguments. * intrinsic.texi (THIS_IMAGE, NUM_IMAGES): Document the new arguments. * intrinsic.h (gfc_check_num_images): New. (gfc_check_this_image, gfc_simplify_num_images, gfc_simplify_this_image, gfc_resolve_this_image): Update prototype. * iresolve.c (gfc_resolve_this_image): Handle distance argument. * simplify.c (gfc_simplify_num_images, gfc_simplify_this_image): Handle new arguments. * trans-intrinsic.c (trans_this_image, trans_num_images): Ditto. (gfc_conv_intrinsic_function): Update trans_num_images call. 2014-05-25 Tobias Burnus <burnus@net-b.de> * gfortran.dg/coarray_10.f90: Update dg-warning. * gfortran.dg/coarray_this_image_1.f90: New. * gfortran.dg/coarray_this_image_2.f90: New. From-SVN: r210909
Diffstat (limited to 'gcc/fortran/simplify.c')
-rw-r--r--gcc/fortran/simplify.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c
index 1b6cd5b..d18bc08 100644
--- a/gcc/fortran/simplify.c
+++ b/gcc/fortran/simplify.c
@@ -4601,7 +4601,7 @@ gfc_simplify_null (gfc_expr *mold)
gfc_expr *
-gfc_simplify_num_images (void)
+gfc_simplify_num_images (gfc_expr *distance ATTRIBUTE_UNUSED, gfc_expr *failed)
{
gfc_expr *result;
@@ -4614,10 +4614,18 @@ gfc_simplify_num_images (void)
if (gfc_option.coarray != GFC_FCOARRAY_SINGLE)
return NULL;
+ if (failed && failed->expr_type != EXPR_CONSTANT)
+ return NULL;
+
/* FIXME: gfc_current_locus is wrong. */
result = gfc_get_constant_expr (BT_INTEGER, gfc_default_integer_kind,
&gfc_current_locus);
- mpz_set_si (result->value.integer, 1);
+
+ if (failed && failed->value.logical != 0)
+ mpz_set_si (result->value.integer, 0);
+ else
+ mpz_set_si (result->value.integer, 1);
+
return result;
}
@@ -6389,12 +6397,15 @@ gfc_simplify_image_index (gfc_expr *coarray, gfc_expr *sub)
gfc_expr *
-gfc_simplify_this_image (gfc_expr *coarray, gfc_expr *dim)
+gfc_simplify_this_image (gfc_expr *coarray, gfc_expr *dim,
+ gfc_expr *distance ATTRIBUTE_UNUSED)
{
if (gfc_option.coarray != GFC_FCOARRAY_SINGLE)
return NULL;
- if (coarray == NULL)
+ /* If no coarray argument has been passed or when the first argument
+ is actually a distance argment. */
+ if (coarray == NULL || !gfc_is_coarray (coarray))
{
gfc_expr *result;
/* FIXME: gfc_current_locus is wrong. */