diff options
author | Tobias Burnus <burnus@net-b.de> | 2010-10-23 15:48:08 +0200 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2010-10-23 15:48:08 +0200 |
commit | 67f67405cb4f5fec7950c18f5e15da06d4852acb (patch) | |
tree | bdffa72fd30d81b09a902bb409ba967a2f583aac | |
parent | 15ac39424201c42cc637cb034102ddd689ad75d8 (diff) | |
download | gcc-67f67405cb4f5fec7950c18f5e15da06d4852acb.zip gcc-67f67405cb4f5fec7950c18f5e15da06d4852acb.tar.gz gcc-67f67405cb4f5fec7950c18f5e15da06d4852acb.tar.bz2 |
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
-rw-r--r-- | gcc/fortran/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/fortran/expr.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/protected_8.f90 | 50 |
4 files changed, 61 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 5ade0ec..341e150 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -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 diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c index ef516a4..e567c98 100644 --- a/gcc/fortran/expr.c +++ b/gcc/fortran/expr.c @@ -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) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 21ddf30..d742fbf 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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. diff --git a/gcc/testsuite/gfortran.dg/protected_8.f90 b/gcc/testsuite/gfortran.dg/protected_8.f90 new file mode 100644 index 0000000..aaa34a6 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/protected_8.f90 @@ -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" } } |