diff options
author | burnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-05-05 14:04:07 +0000 |
---|---|---|
committer | burnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-05-05 14:04:07 +0000 |
commit | 7431b56c9dfdcdcd6c349b8bd46a2e1821a575f9 (patch) | |
tree | dbd309f6cce0d3d3fc224b8fbc8b7492968942ff | |
parent | ddf8ce2dac389784930c7cc479a5d43ab21f2506 (diff) | |
download | gcc-7431b56c9dfdcdcd6c349b8bd46a2e1821a575f9.tar.gz |
2013-05-05 Tobias Burnus <burnus@net-b.de>
* resolve.c (conformable_arrays): Avoid segfault
when ar.start[i] == NULL.
2013-05-05 Tobias Burnus <burnus@net-b.de>
* gfortran.dg/allocate_with_source_3.f90: New.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@198610 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/fortran/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/fortran/resolve.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/allocate_with_source_3.f90 | 28 |
4 files changed, 40 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index d595cf29f7a..66b20c0457c 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,5 +1,10 @@ 2013-05-05 Tobias Burnus <burnus@net-b.de> + * resolve.c (conformable_arrays): Avoid segfault + when ar.start[i] == NULL. + +2013-05-05 Tobias Burnus <burnus@net-b.de> + PR fortran/57141 * decl.c (gfc_match_null): Permit use-associated NULL intrinsic. diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 2860e4127b5..e27b23b2a54 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -6508,6 +6508,9 @@ conformable_arrays (gfc_expr *e1, gfc_expr *e2) for (i = 0; i < e1->rank; i++) { + if (tail->u.ar.start[i] == NULL) + break; + if (tail->u.ar.end[i]) { mpz_set (s, tail->u.ar.end[i]->value.integer); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2dde9c6482e..e383f089e72 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,9 @@ 2013-05-05 Tobias Burnus <burnus@net-b.de> + * gfortran.dg/allocate_with_source_3.f90: New. + +2013-05-05 Tobias Burnus <burnus@net-b.de> + PR fortran/57141 * gfortran.dg/null_8.f90: New. diff --git a/gcc/testsuite/gfortran.dg/allocate_with_source_3.f90 b/gcc/testsuite/gfortran.dg/allocate_with_source_3.f90 new file mode 100644 index 00000000000..f7e010948ac --- /dev/null +++ b/gcc/testsuite/gfortran.dg/allocate_with_source_3.f90 @@ -0,0 +1,28 @@ +! { dg-do compile } +! +! Contributed by Reinhold Bader +! +program assumed_shape_01 + use, intrinsic :: iso_c_binding + implicit none + type, bind(c) :: cstruct + integer(c_int) :: i + real(c_float) :: r(2) + end type cstruct + interface + subroutine psub(this, that) bind(c, name='Psub') + import :: c_float, cstruct + real(c_float) :: this(:,:) + type(cstruct) :: that(:) + end subroutine psub + end interface + + real(c_float) :: t(3,7) + type(cstruct), pointer :: u(:) + +! The following is VALID Fortran 2008 but NOT YET supported + allocate(u, source=[cstruct( 4, [1.1,2.2] ) ]) ! { dg-error "Array specification required in ALLOCATE statement" } + call psub(t, u) + deallocate (u) + +end program assumed_shape_01 |