OSDN Git Service

2009-07-22 Paul Thomas <pault@gcc.gnu.org>
authorpault <pault@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 22 Jul 2009 18:12:35 +0000 (18:12 +0000)
committerpault <pault@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 22 Jul 2009 18:12:35 +0000 (18:12 +0000)
PR fortran/40796
* trans-decl.c (generate_local_decl): Unreferenced result
variables with allocatable components should be treated like
INTENT_OUT dummy variables.

2009-07-21  Richard Guenther  <rguenther@suse.de>

PR fortran/40726
Change attribution to Richi.

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

gcc/fortran/ChangeLog
gcc/fortran/trans-decl.c

index 9370dd7..0cdf188 100644 (file)
@@ -1,3 +1,10 @@
+2009-07-22  Paul Thomas  <pault@gcc.gnu.org>
+
+       PR fortran/40796
+       * trans-decl.c (generate_local_decl): Unreferenced result
+       variables with allocatable components should be treated like
+       INTENT_OUT dummy variables.
+
 2009-07-22  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
 
        * trans.h (gfc_set_decl_assembler_name): New prototype.
@@ -8,7 +15,7 @@
        * trans-common.c (build_common_decl): Use
        gfc_set_decl_assembler_name instead of SET_DECL_ASSEMBLER_NAME.
 
-2009-07-21  Paul Thomas  <pault@gcc.gnu.org>
+2009-07-21  Richard Guenther  <rguenther@suse.de>
 
        PR fortran/40726
        * trans-decl.c (gfc_get_extern_function_decl): Do not set
index 83c28cd..b70d0bd 100644 (file)
@@ -3702,19 +3702,20 @@ generate_local_decl (gfc_symbol * sym)
          gfc_get_symbol_decl (sym);
        }
 
-      /* INTENT(out) dummy arguments with allocatable components are reset
-        by default and need to be set referenced to generate the code for
-        automatic lengths.  */
-      if (sym->attr.dummy && !sym->attr.referenced
+      /* INTENT(out) dummy arguments and result variables with allocatable
+        components are reset by default and need to be set referenced to
+        generate the code for nullification and automatic lengths.  */
+      if (!sym->attr.referenced
            && sym->ts.type == BT_DERIVED
            && sym->ts.derived->attr.alloc_comp
-           && sym->attr.intent == INTENT_OUT)
+           && ((sym->attr.dummy && sym->attr.intent == INTENT_OUT)
+                 ||
+               (sym->attr.result && sym != sym->result)))
        {
          sym->attr.referenced = 1;
          gfc_get_symbol_decl (sym);
        }
 
-
       /* Check for dependencies in the array specification and string
        length, adding the necessary declarations to the function.  We
        mark the symbol now, as well as in traverse_ns, to prevent