summaryrefslogtreecommitdiff
path: root/gcc/fortran/resolve.c
diff options
context:
space:
mode:
authorburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>2010-06-08 06:37:32 +0000
committerburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>2010-06-08 06:37:32 +0000
commit4e1f7cdd604ce719e2906cc612bca05c52a5f08a (patch)
treefaee54b2196b28339a9768a43ed57cbe759b5fb1 /gcc/fortran/resolve.c
parent6d00b16b034ed93df97076a93a1113a8ccb286dd (diff)
downloadgcc-4e1f7cdd604ce719e2906cc612bca05c52a5f08a.tar.gz
2010-06-07 Tobias Burnus <burnus@net-b.de>
PR fortran/44446 * symbol.c (check_conflict): Move protected--external/procedure check ... * resolve.c (resolve_select_type): ... to the resolution stage. 2010-06-07 Tobias Burnus <burnus@net-b.de> PR fortran/44446 * gfortran.dg/proc_ptr_27.f90: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@160424 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/fortran/resolve.c')
-rw-r--r--gcc/fortran/resolve.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 7e5a4f95773..e4c739430a8 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -11311,6 +11311,19 @@ resolve_symbol (gfc_symbol *sym)
}
}
+ if (sym->attr.is_protected && !sym->attr.proc_pointer
+ && (sym->attr.procedure || sym->attr.external))
+ {
+ if (sym->attr.external)
+ gfc_error ("PROTECTED attribute conflicts with EXTERNAL attribute "
+ "at %L", &sym->declared_at);
+ else
+ gfc_error ("PROCEDURE attribute conflicts with PROTECTED attribute "
+ "at %L", &sym->declared_at);
+
+ return;
+ }
+
if (sym->attr.flavor == FL_DERIVED && resolve_fl_derived (sym) == FAILURE)
return;