diff options
author | Tobias Burnus <burnus@net-b.de> | 2012-01-27 14:06:13 +0100 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2012-01-27 14:06:13 +0100 |
commit | 4cb2a86715695603f8abf1396436b68a7281221b (patch) | |
tree | 2f41d3a752c94648faa27cf9232ade0c629edc7f /gcc | |
parent | 9775a921e0fb21cdd92ba3c26e603661865a5899 (diff) | |
download | gcc-4cb2a86715695603f8abf1396436b68a7281221b.zip gcc-4cb2a86715695603f8abf1396436b68a7281221b.tar.gz gcc-4cb2a86715695603f8abf1396436b68a7281221b.tar.bz2 |
re PR fortran/51953 ([F2008] Allow multiple allocate-objects in ALLOCATE with SOURCE=)
2012-01-27 Tobias Burnus <burnus@net-b.de>
PR fortran/51953
* match.c (gfc_match_allocate): Allow more than allocate
object with SOURCE=.
2012-01-27 Tobias Burnus <burnus@net-b.de>
PR fortran/51953
* gfortran.dg/allocate_alloc_opt_13.f90: New.
* gfortran.dg/allocate_alloc_opt_4.f90: Add -std=f2003
and change dg-error string.
From-SVN: r183621
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/match.c | 11 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/allocate_alloc_opt_13.f90 | 25 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/allocate_alloc_opt_4.f90 | 3 |
5 files changed, 45 insertions, 7 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 675c6ee..1c709f0 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,5 +1,11 @@ 2012-01-27 Tobias Burnus <burnus@net-b.de> + PR fortran/51953 + * match.c (gfc_match_allocate): Allow more than allocate + object with SOURCE=. + +2012-01-27 Tobias Burnus <burnus@net-b.de> + PR fortran/52016 * resolve.c (resolve_formal_arglist): Fix elemental constraint checks for polymorphic dummies. diff --git a/gcc/fortran/match.c b/gcc/fortran/match.c index fd91921..0585308 100644 --- a/gcc/fortran/match.c +++ b/gcc/fortran/match.c @@ -3660,12 +3660,11 @@ alloc_opt_list: goto cleanup; } - if (head->next) - { - gfc_error ("SOURCE tag at %L requires only a single entity in " - "the allocation-list", &tmp->where); - goto cleanup; - } + if (head->next + && gfc_notify_std (GFC_STD_F2008, "Fortran 2008: SOURCE tag at %L" + " with more than a single allocate objects", + &tmp->where) == FAILURE) + goto cleanup; source = tmp; tmp = NULL; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b3440a0..dae8112 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,12 @@ 2012-01-27 Tobias Burnus <burnus@net-b.de> + PR fortran/51953 + * gfortran.dg/allocate_alloc_opt_13.f90: New. + * gfortran.dg/allocate_alloc_opt_4.f90: Add -std=f2003 + and change dg-error string. + +2012-01-27 Tobias Burnus <burnus@net-b.de> + PR fortran/52016 * gfortran.dg/elemental_args_check_5.f90: New. diff --git a/gcc/testsuite/gfortran.dg/allocate_alloc_opt_13.f90 b/gcc/testsuite/gfortran.dg/allocate_alloc_opt_13.f90 new file mode 100644 index 0000000..462b121 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/allocate_alloc_opt_13.f90 @@ -0,0 +1,25 @@ +! { dg-do compile } +! +! PR fortran/51953 +! +! +type t +end type t + +class(t), allocatable :: a, c(:), e(:) +class(t), pointer :: b, d(:) + +allocate (a, b, source=c(1)) +allocate (c(4), d(6), source=e) + +allocate (a, b, source=f()) +allocate (c(1), d(6), source=g()) + +contains +function f() + class(t), allocatable :: f +end function +function g() + class(t), allocatable :: g(:) +end function +end diff --git a/gcc/testsuite/gfortran.dg/allocate_alloc_opt_4.f90 b/gcc/testsuite/gfortran.dg/allocate_alloc_opt_4.f90 index 89052ef..ed035b5 100644 --- a/gcc/testsuite/gfortran.dg/allocate_alloc_opt_4.f90 +++ b/gcc/testsuite/gfortran.dg/allocate_alloc_opt_4.f90 @@ -1,4 +1,5 @@ ! { dg-do compile } +! { dg-options "-std=f2003" } program a implicit none @@ -16,7 +17,7 @@ program a allocate(integer(4) :: i(4), source=n) ! { dg-error "conflicts with the typespec" } - allocate(i(4), j(n), source=n) ! { dg-error "requires only a single entity" } + allocate(i(4), j(n), source=n) ! { dg-error "Fortran 2008: SOURCE tag at .1. with more than a single allocate objects" } allocate(x(4), source=n) ! { dg-error "type incompatible with" } |