aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2016-06-21 20:36:25 +0200
committerTobias Burnus <burnus@gcc.gnu.org>2016-06-21 20:36:25 +0200
commit63617e30150f174ffa325057327c16483715aa09 (patch)
treebef2b4d9e20275608c09b5f7e99543e05aa99067 /gcc
parent2befd3f722b21e47f238c61400955eb9e65ce782 (diff)
downloadgcc-63617e30150f174ffa325057327c16483715aa09.zip
gcc-63617e30150f174ffa325057327c16483715aa09.tar.gz
gcc-63617e30150f174ffa325057327c16483715aa09.tar.bz2
re PR fortran/71068 (ICE in check_data_variable(): Bad expression)
2016-06-20 Tobias Burnus <burnus@net-b.de> PR fortran/71068 * resolve.c (resolve_function): Don't resolve caf_get/caf_send. (check_data_variable): Strip-off caf_get before checking. PR fortran/71068 * gfortran.dg/coarray/data_1.f90: New. From-SVN: r237656
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog8
-rw-r--r--gcc/fortran/resolve.c11
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/coarray/data_1.f9011
4 files changed, 34 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index bfd3d4e..317fee5 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,6 +1,12 @@
+2016-06-21 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/71068
+ * resolve.c (resolve_function): Don't resolve caf_get/caf_send.
+ (check_data_variable): Strip-off caf_get before checking.
+
2016-06-20 Tobias Burnus <burnus@net-b.de>
- fortran/71194
+ PR fortran/71194
* trans-expr.c (gfc_trans_pointer_assignment): Correctly handle
RHS pointer functions.
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 77f8c10..4378313 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -2923,6 +2923,13 @@ resolve_function (gfc_expr *expr)
if (gfc_is_proc_ptr_comp (expr))
return true;
+ /* Avoid re-resolving the arguments of caf_get, which can lead to inserting
+ another caf_get. */
+ if (sym && sym->attr.intrinsic
+ && (sym->intmod_sym_id == GFC_ISYM_CAF_GET
+ || sym->intmod_sym_id == GFC_ISYM_CAF_SEND))
+ return true;
+
if (sym && sym->attr.intrinsic
&& !gfc_resolve_intrinsic (sym, &expr->where))
return false;
@@ -14495,6 +14502,10 @@ check_data_variable (gfc_data_variable *var, locus *where)
mpz_init_set_si (offset, 0);
e = var->expr;
+ if (e->expr_type == EXPR_FUNCTION && e->value.function.isym
+ && e->value.function.isym->id == GFC_ISYM_CAF_GET)
+ e = e->value.function.actual->expr;
+
if (e->expr_type != EXPR_VARIABLE)
gfc_internal_error ("check_data_variable(): Bad expression");
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index ffb1614..7f57209 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2016-06-21 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/71068
+ * gfortran.dg/coarray/data_1.f90: New.
+
2016-06-21 Wilco Dijkstra <wdijkstr@arm.com>
* gcc.target/aarch64/advsimd-intrinsics/vrnd.c
diff --git a/gcc/testsuite/gfortran.dg/coarray/data_1.f90 b/gcc/testsuite/gfortran.dg/coarray/data_1.f90
new file mode 100644
index 0000000..d68ac14
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/coarray/data_1.f90
@@ -0,0 +1,11 @@
+! { dg-do compile }
+!
+! PR fortran/71068
+!
+! Contributed by Gerhard Steinmetz
+!
+program p
+ integer :: a(2)[*]
+ data a(1)[1] /1/ ! { dg-error "cannot have a coindex" }
+ data a(2)[1] /2/ ! { dg-error "cannot have a coindex" }
+end