diff options
author | Tobias Burnus <burnus@net-b.de> | 2016-06-21 20:36:25 +0200 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2016-06-21 20:36:25 +0200 |
commit | 63617e30150f174ffa325057327c16483715aa09 (patch) | |
tree | bef2b4d9e20275608c09b5f7e99543e05aa99067 /gcc | |
parent | 2befd3f722b21e47f238c61400955eb9e65ce782 (diff) | |
download | gcc-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/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/fortran/resolve.c | 11 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/coarray/data_1.f90 | 11 |
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 |