OSDN Git Service

2010-10-23 Tobias Burnus <burnus@net-b.de>
authorburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 23 Oct 2010 13:48:08 +0000 (13:48 +0000)
committerburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 23 Oct 2010 13:48:08 +0000 (13:48 +0000)
        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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@165883 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/fortran/ChangeLog
gcc/fortran/expr.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/protected_8.f90 [new file with mode: 0644]

index 5ade0ec..341e150 100644 (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
index ef516a4..e567c98 100644 (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)
        {
index 21ddf30..d742fbf 100644 (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.
diff --git a/gcc/testsuite/gfortran.dg/protected_8.f90 b/gcc/testsuite/gfortran.dg/protected_8.f90
new file mode 100644 (file)
index 0000000..aaa34a6
--- /dev/null
@@ -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" } }