aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2007-09-13 20:03:39 +0200
committerTobias Burnus <burnus@gcc.gnu.org>2007-09-13 20:03:39 +0200
commit10a6db6ef3704c55bebf354218fcd9166800f543 (patch)
tree2860cd0d26ff39818b3a1b52fb1369063d43bef5 /gcc/fortran
parente3bfd8f4169dbe03574a3ce1efc91d23f5877f9c (diff)
downloadgcc-10a6db6ef3704c55bebf354218fcd9166800f543.zip
gcc-10a6db6ef3704c55bebf354218fcd9166800f543.tar.gz
gcc-10a6db6ef3704c55bebf354218fcd9166800f543.tar.bz2
symbol.c (gfc_add_elemental,gfc_add_pure,gfc_add_recursive): Allow prefixes only to be specified once.
2007-09-13 Tobias Burnus <burnus@net-b.de> * symbol.c (gfc_add_elemental,gfc_add_pure,gfc_add_recursive): Allow prefixes only to be specified once. 2007-09-13 Tobias Burnus <burnus@net-b.de> * gfortran.dg/recursive_check_3.f90: New. From-SVN: r128472
Diffstat (limited to 'gcc/fortran')
-rw-r--r--gcc/fortran/ChangeLog5
-rw-r--r--gcc/fortran/symbol.c18
2 files changed, 23 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 0b1eca4..73dcbf8 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,5 +1,10 @@
2007-09-13 Tobias Burnus <burnus@net-b.de>
+ * symbol.c (gfc_add_elemental,gfc_add_pure,gfc_add_recursive):
+ Allow prefixes only to be specified once.
+
+2007-09-13 Tobias Burnus <burnus@net-b.de>
+
PR fortran/33412
* symbol.c (check_conflict): Add conflict of ELEMENTAL with Bind(C).
diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c
index 01f64e2..6ed366f 100644
--- a/gcc/fortran/symbol.c
+++ b/gcc/fortran/symbol.c
@@ -1144,6 +1144,12 @@ gfc_add_elemental (symbol_attribute *attr, locus *where)
if (check_used (attr, NULL, where))
return FAILURE;
+ if (attr->elemental)
+ {
+ duplicate_attr ("ELEMENTAL", where);
+ return FAILURE;
+ }
+
attr->elemental = 1;
return check_conflict (attr, NULL, where);
}
@@ -1156,6 +1162,12 @@ gfc_add_pure (symbol_attribute *attr, locus *where)
if (check_used (attr, NULL, where))
return FAILURE;
+ if (attr->pure)
+ {
+ duplicate_attr ("PURE", where);
+ return FAILURE;
+ }
+
attr->pure = 1;
return check_conflict (attr, NULL, where);
}
@@ -1168,6 +1180,12 @@ gfc_add_recursive (symbol_attribute *attr, locus *where)
if (check_used (attr, NULL, where))
return FAILURE;
+ if (attr->recursive)
+ {
+ duplicate_attr ("RECURSIVE", where);
+ return FAILURE;
+ }
+
attr->recursive = 1;
return check_conflict (attr, NULL, where);
}