diff options
author | Tobias Burnus <burnus@net-b.de> | 2007-09-13 20:03:39 +0200 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2007-09-13 20:03:39 +0200 |
commit | 10a6db6ef3704c55bebf354218fcd9166800f543 (patch) | |
tree | 2860cd0d26ff39818b3a1b52fb1369063d43bef5 /gcc/fortran | |
parent | e3bfd8f4169dbe03574a3ce1efc91d23f5877f9c (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/fortran/symbol.c | 18 |
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); } |