aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJosé Rui Faustino de Sousa <jrfsousa@gmail.com>2020-08-30 18:03:13 +0000
committerJosé Rui Faustino de Sousa <jrfsousa@gmail.com>2020-08-30 18:03:13 +0000
commit3a7a95a220c14043da1e1166530e1d76f001dad9 (patch)
tree617c9faf7d287b69cd3321eb22a0ee16a120c6f2 /gcc
parent8f7d99acf6d94eed6a7f9b9f76bd4c2243c660b2 (diff)
downloadgcc-3a7a95a220c14043da1e1166530e1d76f001dad9.zip
gcc-3a7a95a220c14043da1e1166530e1d76f001dad9.tar.gz
gcc-3a7a95a220c14043da1e1166530e1d76f001dad9.tar.bz2
2020-8-20 José Rui Faustino de Sousa <jrfsousa@gmail.com>
gcc/fortran/ChangeLog: PR fortran/96727 * expr.c (gfc_check_init_expr): Add default error message for the AS_ASSUMED_RANK case. gcc/testsuite/ChangeLog: PR fortran/96727 * gfortran.dg/PR96727.f90: New test.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/expr.c6
-rw-r--r--gcc/testsuite/gfortran.dg/PR96727.f9034
2 files changed, 40 insertions, 0 deletions
diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c
index 2ef01f0..68784a2 100644
--- a/gcc/fortran/expr.c
+++ b/gcc/fortran/expr.c
@@ -3007,6 +3007,12 @@ gfc_check_init_expr (gfc_expr *e)
e->symtree->n.sym->name, &e->where);
break;
+ case AS_ASSUMED_RANK:
+ gfc_error ("Assumed-rank array %qs at %L is not permitted "
+ "in an initialization expression",
+ e->symtree->n.sym->name, &e->where);
+ break;
+
default:
gcc_unreachable();
}
diff --git a/gcc/testsuite/gfortran.dg/PR96727.f90 b/gcc/testsuite/gfortran.dg/PR96727.f90
new file mode 100644
index 0000000..d45dbb7
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/PR96727.f90
@@ -0,0 +1,34 @@
+! { dg-do run }
+!
+! Test the fix for PR96727
+!
+
+program cref_p
+
+ implicit none
+
+ integer :: i
+
+ integer, parameter :: n = 3
+ integer, parameter :: p(*) = [(i, i=1,n*n)]
+ character(len=*), parameter :: q = repeat('a', n*n)
+
+ integer :: a(n,n)
+ character(len=n*n) :: c
+
+ a = reshape(p, shape=[n,n])
+ call csub(a, c)
+ if (c/=q) stop 1
+ stop
+
+contains
+
+ subroutine csub(a, b)
+ integer, intent(in) :: a(..)
+ character(len=size(a)), intent(out) :: b
+
+ b = repeat('a', len(b))
+ return
+ end subroutine csub
+
+end program cref_p