aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik Edelmann <erik.edelmann@iki.fi>2005-05-18 22:20:31 +0300
committerTobias Schlüter <tobi@gcc.gnu.org>2005-05-18 21:20:31 +0200
commitacc75ae36ea717cc0792ffec8f6336c4a73da7b3 (patch)
tree103eb1e45541bcba7b7352fc170509174c22cd36
parentc0fb94d7250e1311bfd2724f3df629999f1a291b (diff)
downloadgcc-acc75ae36ea717cc0792ffec8f6336c4a73da7b3.zip
gcc-acc75ae36ea717cc0792ffec8f6336c4a73da7b3.tar.gz
gcc-acc75ae36ea717cc0792ffec8f6336c4a73da7b3.tar.bz2
array.c (gfc_match_array_constructor): Support [ ...
fortran/ * array.c (gfc_match_array_constructor): Support [ ... ] style array constructors. testsuite/ * gfortran.dg/array_constructor_1.f90: New test. * gfortran.dg/array_constructor_2.f90: New test. From-SVN: r99919
-rw-r--r--gcc/fortran/ChangeLog5
-rw-r--r--gcc/fortran/array.c19
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/array_constructor_1.f9017
-rw-r--r--gcc/testsuite/gfortran.dg/array_constructor_2.f908
5 files changed, 51 insertions, 3 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 714024f..31179f0 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,8 @@
+2005-05-18 Erik Edelmann <erik.edelmann@iki.fi>
+
+ * array.c (gfc_match_array_constructor): Support [ ... ]
+ style array constructors.
+
2005-05-18 Tobias Schl"uter <tobias.schlueter@physik.uni-muenchen.de>
* f95-lang.c (gfc_init_builtin_functions): Define BUILT_IN_TRUNC
diff --git a/gcc/fortran/array.c b/gcc/fortran/array.c
index dc660d4..f628440 100644
--- a/gcc/fortran/array.c
+++ b/gcc/fortran/array.c
@@ -866,14 +866,27 @@ gfc_match_array_constructor (gfc_expr ** result)
gfc_expr *expr;
locus where;
match m;
+ const char *end_delim;
if (gfc_match (" (/") == MATCH_NO)
- return MATCH_NO;
+ {
+ if (gfc_match (" [") == MATCH_NO)
+ return MATCH_NO;
+ else
+ {
+ if (gfc_notify_std (GFC_STD_F2003, "New in Fortran 2003: [...] "
+ "style array constructors at %C") == FAILURE)
+ return MATCH_ERROR;
+ end_delim = " ]";
+ }
+ }
+ else
+ end_delim = " /)";
where = gfc_current_locus;
head = tail = NULL;
- if (gfc_match (" /)") == MATCH_YES)
+ if (gfc_match (end_delim) == MATCH_YES)
goto empty; /* Special case */
for (;;)
@@ -895,7 +908,7 @@ gfc_match_array_constructor (gfc_expr ** result)
break;
}
- if (gfc_match (" /)") == MATCH_NO)
+ if (gfc_match (end_delim) == MATCH_NO)
goto syntax;
empty:
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 45bdf06..7ad8521 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2005-05-12 Erik Edelmann <erik.edelmann@iki.fi>
+
+ * gfortran.dg/array_constructor_1.f90: New test.
+ * gfortran.dg/array_constructor_2.f90: New test.
+
2005-05-18 Feng Wang <fengwang@nudt.edu.cn>
PR fortran/20954
diff --git a/gcc/testsuite/gfortran.dg/array_constructor_1.f90 b/gcc/testsuite/gfortran.dg/array_constructor_1.f90
new file mode 100644
index 0000000..20452f3
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/array_constructor_1.f90
@@ -0,0 +1,17 @@
+! { dg-do run }
+! Check that [...] style array constructors work
+program bracket_array_constructor
+ implicit none
+ integer :: a(4), i
+
+ a = [ 1, 2, 3, 4 ] ! { dg-warning "array constructor" }
+ do i = 1, size(a)
+ if (a(i) /= i) call abort()
+ end do
+
+ a = [ (/ 1, 2, 3, 4 /) ] ! { dg-warning "array constructor" }
+ do i = 1, size(a)
+ if (a(i) /= i) call abort()
+ end do
+
+end program bracket_array_constructor
diff --git a/gcc/testsuite/gfortran.dg/array_constructor_2.f90 b/gcc/testsuite/gfortran.dg/array_constructor_2.f90
new file mode 100644
index 0000000..ffed1f0
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/array_constructor_2.f90
@@ -0,0 +1,8 @@
+! { dg-do compile }
+! Check that array constructor delimiters match
+program bracket_array_constr_2
+ implicit none
+ integer :: a(4)
+ a = (/ 1, 2, 3, 4 ] ! { dg-error "array constructor" }
+ a = (/ [ 1, 2, 3, 4 /) ] ! { dg-error "array constructor" }
+end program bracket_array_constr_2