diff options
author | Tobias Burnus <burnus@net-b.de> | 2014-05-25 07:24:12 +0200 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2014-05-25 07:24:12 +0200 |
commit | 05fc16dde913ed47ab4352a34b15f71d24d58934 (patch) | |
tree | 674a166546a3e633ac9d67036605b32fa986ed8b /gcc/fortran/simplify.c | |
parent | fd1e93027047ca891e278fac96d38978aeb51d6d (diff) | |
download | gcc-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.c | 19 |
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. */ |