This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug fortran/37513] New: Wrongly rejects: unprotected_pointer => protected_pointer
- From: "burnus at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 13 Sep 2008 22:41:03 -0000
- Subject: [Bug fortran/37513] New: Wrongly rejects: unprotected_pointer => protected_pointer
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
+++ This bug was initially created as a clone of Bug #37504 +++
gfortran rightly rejects the following program, however, the error message is
misleading:
PROTECTED at (1) only allowed in specification part of a module
module m
implicit none
integer, pointer, protected :: protected_pointer
end module m
program p
use m
implicit none
integer, pointer :: unprotected_pointer
protected_pointer => unprotected_pointer
end program p
* * *
The reason is as follows:
decode_statement calls "gfc_match_pointer_assignment" which calls in turn
match_variable, which calls "gfc_error ("Assigning to PROTECTED variable at
%C");". However, as "gfc_match_pointer_assignment" does not return MATCH_YES,
one proceeds in decode_statement and reaches gfc_match_protected, which also
calls gfc_error. Only the last error message is printed, i.e. the one of
gfc_match_protected.
* * *
My first attempt was to do an
if(gfc_match_pointer_assignment() == MATCH_ERROR) goto error;
however, that fails since gfc_match_pointer_assignment returns MATCH_NO and not
MATCH_ERROR if match ("%v =>") fails. (It fails because of the "Assigning to
PROTECTED variable at %C".)
Removing the "m = MATCH_NO" in gfc_match_pointer_assignment works for this test
case, but let's several test cases fail in the test suite. Note: The checks for
PROTECTED in gfc_match_assignment and gfc_match_pointer_assignment are not
needed as the match_variable() check comes first.
* * *
My next attempt was to remove the current checks from primary.c and match.c and
insert them into gfc_check_assign / gfc_check_pointer_assign. However, that
fails for e.g. protected_5.f90: I miss an error for "allocate(t%array(15))" but
I get one for "use good2", which is not only the lexpr->where/rexpr->where, but
also the case if "use good2" is the only statement in "program main". I fail to
understand why this goes wrong.
--
Summary: Wrongly rejects: unprotected_pointer =>
protected_pointer
Product: gcc
Version: 4.4.0
Status: UNCONFIRMED
Keywords: rejects-valid
Severity: normal
Priority: P3
Component: fortran
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: burnus at gcc dot gnu dot org
BugsThisDependsOn: 37504
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37513