diff options
author | Tobias Burnus <burnus@net-b.de> | 2008-09-23 10:00:01 +0200 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2008-09-23 10:00:01 +0200 |
commit | 54799fcd030107ce920b4522b67987a9128f8c78 (patch) | |
tree | 78248e90f68238801800ee76e96c0694d054231e /gcc/fortran/expr.c | |
parent | d7445152be468cc8de1ea0a3ab6555448086e951 (diff) | |
download | gcc-54799fcd030107ce920b4522b67987a9128f8c78.zip gcc-54799fcd030107ce920b4522b67987a9128f8c78.tar.gz gcc-54799fcd030107ce920b4522b67987a9128f8c78.tar.bz2 |
re PR fortran/37580 (Accepts "pointer(:) => target" without lower bound)
2008-09-22 Tobias Burnus <burnus@net-b.de>
PR fortran/37580
* expr.c (gfc_check_pointer_assign): Add checks for pointer
remapping.
2008-09-22 Tobias Burnus <burnus@net-b.de>
PR fortran/37580
* gfortran.dg/pointer_assign_5.f90: New test.
* gfortran.dg/pointer_assign_6.f90: New test.
From-SVN: r140580
Diffstat (limited to 'gcc/fortran/expr.c')
-rw-r--r-- | gcc/fortran/expr.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c index ba4be56..e15412a 100644 --- a/gcc/fortran/expr.c +++ b/gcc/fortran/expr.c @@ -2955,6 +2955,32 @@ gfc_check_pointer_assign (gfc_expr *lvalue, gfc_expr *rvalue) if (ref->type == REF_COMPONENT && ref->u.c.component->attr.pointer) pointer = 1; + + if (ref->type == REF_ARRAY && ref->next == NULL) + { + if (ref->u.ar.type == AR_FULL) + break; + + if (ref->u.ar.type != AR_SECTION) + { + gfc_error ("Expected bounds specification for '%s' at %L", + lvalue->symtree->n.sym->name, &lvalue->where); + return FAILURE; + } + + if (gfc_notify_std (GFC_STD_F2003,"Fortran 2003: Bounds " + "specification for '%s' in pointer assignment " + "at %L", lvalue->symtree->n.sym->name, + &lvalue->where) == FAILURE) + return FAILURE; + + gfc_error ("Pointer bounds remapping at %L is not yet implemented " + "in gfortran", &lvalue->where); + /* TODO: See PR 29785. Add checks that all lbounds are specified and + either never or always the upper-bound; strides shall not be + present. */ + return FAILURE; + } } if (check_intent_in && lvalue->symtree->n.sym->attr.intent == INTENT_IN) |