re PR fortran/46122 (PROTECTED check too strict)

2010-10-23  Tobias Burnus  <burnus@net-b.de>

        PR fortran/46122
        * expr.c (gfc_check_vardef_context): Fix PROTECTED check.

2010-10-23  Tobias Burnus  <burnus@net-b.de>

        PR fortran/46122
        * gfortran.dg/protected_8.f90: New.

From-SVN: r165883
This commit is contained in:
Tobias Burnus 2010-10-23 15:48:08 +02:00 committed by Tobias Burnus
parent 15ac394242
commit 67f67405cb
4 changed files with 61 additions and 1 deletions

View File

@ -1,3 +1,8 @@
2010-10-23 Tobias Burnus <burnus@net-b.de>
PR fortran/46122
* expr.c (gfc_check_vardef_context): Fix PROTECTED check.
2010-10-21 Janus Weil <janus@gcc.gnu.org>
PR fortran/46060

View File

@ -4400,7 +4400,7 @@ gfc_check_vardef_context (gfc_expr* e, bool pointer, const char* context)
}
/* PROTECTED and use-associated. */
if (sym->attr.is_protected && sym->attr.use_assoc)
if (sym->attr.is_protected && sym->attr.use_assoc && check_intentin)
{
if (pointer && is_pointer)
{

View File

@ -1,3 +1,8 @@
2010-10-23 Tobias Burnus <burnus@net-b.de>
PR fortran/46122
* gfortran.dg/protected_8.f90: New.
2010-10-23 Joseph Myers <joseph@codesourcery.com>
* gcc.dg/march-generic.c: Skip for -march in multilib options.

View File

@ -0,0 +1,50 @@
! { dg-do compile }
!
! PR fortran/46122
!
! PROTECT check
!
! Contributed by Jared Ahern
!
MODULE amod
IMPLICIT NONE
TYPE foo
INTEGER :: i = 4
INTEGER, POINTER :: j => NULL()
END TYPE foo
TYPE(foo), SAVE, PROTECTED :: a
TYPE(foo), SAVE, PROTECTED, POINTER :: b
INTEGER, SAVE, PROTECTED :: i = 5
INTEGER, SAVE, PROTECTED, POINTER :: j => NULL()
contains
subroutine alloc()
allocate(b,j)
end subroutine alloc
END MODULE amod
PROGRAM test
USE amod
IMPLICIT NONE
INTEGER, TARGET :: k
TYPE(foo), TARGET :: c
k = 2 ! local
c%i = 9 ! local
call alloc()
i = k ! { dg-error "is PROTECTED" }
j => k ! { dg-error "is PROTECTED" }
j = 3 ! OK 1
a = c ! { dg-error "is PROTECTED" }
a%i = k ! { dg-error "is PROTECTED" }
a%j => k ! { dg-error "is PROTECTED" }
a%j = 5 ! OK 2
b => c ! { dg-error "is PROTECTED" }
b%i = k ! OK 3
b%j => k ! OK 4
b%j = 5 ! OK 5
END PROGRAM test
! { dg-final { cleanup-modules "amod" } }