aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSteven G. Kargl <kargls@comcast.net>2005-12-12 20:13:37 +0000
committerSteven G. Kargl <kargl@gcc.gnu.org>2005-12-12 20:13:37 +0000
commitd0497a6573fa4523ffbe52f20793b39f756af221 (patch)
tree7f8296ae7a013335025b997f4562e35e7a9461d9 /gcc
parent0e0ed594114997686efba9a45b8782ce87c465c3 (diff)
downloadgcc-d0497a6573fa4523ffbe52f20793b39f756af221.zip
gcc-d0497a6573fa4523ffbe52f20793b39f756af221.tar.gz
gcc-d0497a6573fa4523ffbe52f20793b39f756af221.tar.bz2
re PR fortran/25078 (EQUILALENCE requires two or more objects)
PR fortran/25078 * match.c (gfc_match_equivalence): Count number of objects. gfortran.dg/equiv_5.f90: New test. From-SVN: r108426
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog5
-rw-r--r--gcc/fortran/match.c12
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/equiv_5.f907
4 files changed, 29 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index fa055ea..d480b6f 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,8 @@
+2005-12-12 Steven G. Kargl <kargls@comcast.net>
+
+ PR fortran/25078
+ * match.c (gfc_match_equivalence): Count number of objects.
+
2005-12-11 Aldy Hernandez <aldyh@redhat.com>
* lang.opt: Add RejectNegative to ffixed-form and ffree-form.
diff --git a/gcc/fortran/match.c b/gcc/fortran/match.c
index 8ca7ed6..fd4fe33 100644
--- a/gcc/fortran/match.c
+++ b/gcc/fortran/match.c
@@ -2599,6 +2599,7 @@ gfc_match_equivalence (void)
match m;
gfc_common_head *common_head = NULL;
bool common_flag;
+ int cnt;
tail = NULL;
@@ -2616,6 +2617,7 @@ gfc_match_equivalence (void)
set = eq;
common_flag = FALSE;
+ cnt = 0;
for (;;)
{
@@ -2625,6 +2627,9 @@ gfc_match_equivalence (void)
if (m == MATCH_NO)
goto syntax;
+ /* count the number of objects. */
+ cnt++;
+
if (gfc_match_char ('%') == MATCH_YES)
{
gfc_error ("Derived type component %C is not a "
@@ -2655,6 +2660,7 @@ gfc_match_equivalence (void)
if (gfc_match_char (')') == MATCH_YES)
break;
+
if (gfc_match_char (',') != MATCH_YES)
goto syntax;
@@ -2662,6 +2668,12 @@ gfc_match_equivalence (void)
set = set->eq;
}
+ if (cnt < 2)
+ {
+ gfc_error ("EQUIVALENCE at %C requires two or more objects");
+ goto cleanup;
+ }
+
/* If one of the members of an equivalence is in common, then
mark them all as being in common. Before doing this, check
that members of the equivalence group are not in different
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index d2740e7..370065d 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2005-12-12 Steven G. Kargl <kargls@comcast.net>
+
+ PR fortran/25078
+ gfortran.dg/equiv_5.f90: New test.
+
2005-12-12 Daniel Berlin <dberlin@dberlin.org>
* gcc.dg/tree-ssa/ssa-pre-2.c: Update due to reassociation changes.
diff --git a/gcc/testsuite/gfortran.dg/equiv_5.f90 b/gcc/testsuite/gfortran.dg/equiv_5.f90
new file mode 100644
index 0000000..70b458b
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/equiv_5.f90
@@ -0,0 +1,7 @@
+! { dg-do compile }
+! PR fortran/25078
+! An equivalence statement requires two or more objcets.
+program a
+ real x
+ equivalence(x) ! { dg-error "two or more objects" }
+end program a