resolve.c (resolve_symbol): Fix coarray var decl check.
authorTobias Burnus <burnus@net-b.de>
Fri, 22 Jul 2011 22:39:10 +0000 (00:39 +0200)
committerTobias Burnus <burnus@gcc.gnu.org>
Fri, 22 Jul 2011 22:39:10 +0000 (00:39 +0200)
2011-07-23  Tobias Burnus  <burnus@net-b.de>

        * resolve.c (resolve_symbol): Fix coarray var decl check.

2011-07-23  Tobias Burnus  <burnus@net-b.de>

        * gfortran.dg/coarray_25.f90: New.

From-SVN: r176660

gcc/fortran/ChangeLog
gcc/fortran/resolve.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/coarray_25.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/coarray_4.f90

index dd4cd8dd15a54f6b879047b5bd29ce69c210adaa..533c28c5e067b3d66720328ba15b3bd2895f8209 100644 (file)
@@ -1,3 +1,7 @@
+2011-07-23  Tobias Burnus  <burnus@net-b.de>
+
+       * resolve.c (resolve_symbol): Fix coarray var decl check.
+
 2011-07-21  Daniel Carrera  <dcarrera@gmail.com>
 
        * trans.c (gfc_allocate_with_status): Split into two functions
index 71e0ba062f54d22a19d7fada3d77e13e5ce80f44..e9e7bf00fab26c14bdf2051b6e9a04553704f3d2 100644 (file)
@@ -12435,16 +12435,14 @@ resolve_symbol (gfc_symbol *sym)
               sym->name, &sym->declared_at);
 
   /* F2008, C526.  The function-result case was handled above.  */
-  if (((sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.coarray_comp)
-       || sym->attr.codimension)
+  if (sym->attr.codimension
       && !(sym->attr.allocatable || sym->attr.dummy || sym->attr.save
           || sym->ns->save_all
           || sym->ns->proc_name->attr.flavor == FL_MODULE
           || sym->ns->proc_name->attr.is_main_program
           || sym->attr.function || sym->attr.result || sym->attr.use_assoc))
-    gfc_error ("Variable '%s' at %L is a coarray or has a coarray "
-              "component and is not ALLOCATABLE, SAVE nor a "
-              "dummy argument", sym->name, &sym->declared_at);
+    gfc_error ("Variable '%s' at %L is a coarray and is not ALLOCATABLE, SAVE "
+              "nor a dummy argument", sym->name, &sym->declared_at);
   /* F2008, C528.  */  /* FIXME: sym->as check due to PR 43412.  */
   else if (sym->attr.codimension && !sym->attr.allocatable
       && sym->as && sym->as->cotype == AS_DEFERRED)
index ec8a8e0fbae29d1ef5a252a59db9152414b62551..8eb2828f92c31729ed2e27cdeb98f0a2702c6525 100644 (file)
@@ -1,3 +1,7 @@
+2011-07-23  Tobias Burnus  <burnus@net-b.de>
+
+       * gfortran.dg/coarray_25.f90: New.
+
 2011-07-22  Ville Voutilainen  <ville.voutilainen@gmail.com>
 
        * override1.C: This test should use c++0x mode.
diff --git a/gcc/testsuite/gfortran.dg/coarray_25.f90 b/gcc/testsuite/gfortran.dg/coarray_25.f90
new file mode 100644 (file)
index 0000000..a78a196
--- /dev/null
@@ -0,0 +1,18 @@
+! { dg-do compile }
+! { dg-options "-fcoarray=single" }
+!
+! Used to be rejected with:
+!  Error: Variable 'x' at (1) is a coarray or has a coarray
+!  component and is not ALLOCATABLE, SAVE nor a dummy argument
+!
+! Is valid as "a" is allocatable, cf. C526
+! and http://j3-fortran.org/pipermail/j3/2011-June/004403.html
+!
+
+  subroutine test2()
+    type t
+      integer, allocatable :: a(:)[:]
+    end type t
+    type(t) :: x
+    allocate(x%a(1)[*])
+  end subroutine test2
index be2bc4edb5cd755149704bc58be338fbbc057495..cdc4ef88e732a9518eea0b4d6403f557d0c964dc 100644 (file)
@@ -31,7 +31,7 @@ subroutine valid2()
     integer, allocatable :: b[:]
   end type tt
   type(tt), save :: foo
-  type(tt) :: bar ! { dg-error "is a coarray or has a coarray component" }
+  type(tt) :: bar
 end subroutine valid2
 
 subroutine invalid(n)