http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54556

--- Comment #9 from Tobias Burnus <burnus at gcc dot gnu.org> 2012-09-12 
21:11:54 UTC ---
Untested patch.

The first and second part allows VALUE for implicit_pure (in line with F2008
for PURE).

The third part is the crucial change: If there is a pointer, assume that the
procedure is not implicit_pure.

Note: A proper patch should also take BT_CLASS into account - and proc-pointer
arguments.

--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -426,12 +426,16 @@ resolve_formal_arglist (gfc_symbol *proc)
            }
          else if (!sym->attr.pointer)
            {
-             if (proc->attr.function && sym->attr.intent != INTENT_IN)
+             if (proc->attr.function && sym->attr.intent != INTENT_IN
+                 && !sym->attr.value)
                proc->attr.implicit_pure = 0;

-             if (proc->attr.subroutine && sym->attr.intent == INTENT_UNKNOWN)
+             if (proc->attr.subroutine && sym->attr.intent == INTENT_UNKNOWN
+                 && !sym->attr.value)
                proc->attr.implicit_pure = 0;
            }
+         else
+           proc->attr.implicit_pure = 0;
        }

       if (gfc_elemental (proc))

Reply via email to