OSDN Git Service

2011-01-28 Tobias Burnus <burnus@net-b.de>
authorburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 28 Jan 2011 19:49:25 +0000 (19:49 +0000)
committerburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 28 Jan 2011 19:49:25 +0000 (19:49 +0000)
        PR fortran/47507
        * resolve.c (resolve_formal_arglist): Allow arguments with VALUE
        attribute also without INTENT.

2011-01-28  Tobias Burnus  <burnus@net-b.de>

        PR fortran/47507
        * gfortran.dg/pure_formal_1.f90: New.

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

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

index 336f28e..b706492 100644 (file)
@@ -1,5 +1,11 @@
 2011-01-28  Tobias Burnus  <burnus@net-b.de>
 
+       PR fortran/47507
+       * resolve.c (resolve_formal_arglist): Allow arguments with VALUE
+       attribute also without INTENT.
+
+2011-01-28  Tobias Burnus  <burnus@net-b.de>
+
        * gfortran.texi (Fortran 2003 status): Mention support for
        nonconstant namelist variables.
 
index 2436283..55b5183 100644 (file)
@@ -338,15 +338,17 @@ resolve_formal_arglist (gfc_symbol *proc)
       if (gfc_pure (proc) && !sym->attr.pointer
          && sym->attr.flavor != FL_PROCEDURE)
        {
-         if (proc->attr.function && sym->attr.intent != INTENT_IN)
+         if (proc->attr.function && sym->attr.intent != INTENT_IN
+             && !sym->attr.value)
            gfc_error ("Argument '%s' of pure function '%s' at %L must be "
-                      "INTENT(IN)", sym->name, proc->name,
+                      "INTENT(IN) or VALUE", sym->name, proc->name,
                       &sym->declared_at);
 
-         if (proc->attr.subroutine && sym->attr.intent == INTENT_UNKNOWN)
+         if (proc->attr.subroutine && sym->attr.intent == INTENT_UNKNOWN
+             && !sym->attr.value)
            gfc_error ("Argument '%s' of pure subroutine '%s' at %L must "
-                      "have its INTENT specified", sym->name, proc->name,
-                      &sym->declared_at);
+                      "have its INTENT specified or have the VALUE "
+                      "attribute", sym->name, proc->name, &sym->declared_at);
        }
 
       if (proc->attr.implicit_pure && !sym->attr.pointer
index 4d6acf0..892a543 100644 (file)
@@ -1,3 +1,8 @@
+2011-01-28  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/47507
+       * gfortran.dg/pure_formal_1.f90: New.
+
 2011-01-28  Jakub Jelinek  <jakub@redhat.com>
 
        PR target/42894
diff --git a/gcc/testsuite/gfortran.dg/pure_formal_1.f90 b/gcc/testsuite/gfortran.dg/pure_formal_1.f90
new file mode 100644 (file)
index 0000000..4e62cf9
--- /dev/null
@@ -0,0 +1,16 @@
+! { dg-do compile }
+!
+! PR fortran/47507
+!
+! PURE procedures: Allow arguments w/o INTENT if they are VALUE
+!
+
+pure function f(x)
+  real, VALUE :: x
+  real :: f
+  f = sin(x)
+end function f
+
+pure subroutine sub(x)
+  real, VALUE :: x
+end subroutine sub