aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2012-01-27 14:06:13 +0100
committerTobias Burnus <burnus@gcc.gnu.org>2012-01-27 14:06:13 +0100
commit4cb2a86715695603f8abf1396436b68a7281221b (patch)
tree2f41d3a752c94648faa27cf9232ade0c629edc7f /gcc
parent9775a921e0fb21cdd92ba3c26e603661865a5899 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/fortran/match.c11
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/gfortran.dg/allocate_alloc_opt_13.f9025
-rw-r--r--gcc/testsuite/gfortran.dg/allocate_alloc_opt_4.f903
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" }