Mikael Morin wrote:
+++ b/gcc/fortran/trans-decl.c
@@ -3872,7 +3892,8 @@ gfc_trans_deferred_vars (gfc_symbol * proc_sym, 
gfc_wrapped_block * block)
              /* Deallocate when leaving the scope. Nullifying is not
                 needed.  */
-             if (!sym->attr.result && !sym->attr.dummy)
+             if (!sym->attr.result && !sym->attr.dummy
+                 && !sym->ns->proc_name->attr.is_main_program)
No check for !sym->attr.save here?

The code is in a big if block which has:

          if (!sym->attr.save && gfc_option.flag_max_stack_var_size != 0)
            {

There are several places through the patch where we check whether a
variable needs end of scope automatic deallocation. Might be worth
factoring the checks to a common predicate.

Probably yes. One other case which needs some refactoring* is allocate: We currently immediately distinguish between arrays and scalars - and only the scalar code handles "allocate(character(len=5) :: str)" - the array code duplicates part of the code, but not fully.

The patch is OK in any case; thanks.

Thanks for the review!

Tobias

* To my surprise, the word "refactor"/"refactoring" does not exist in Marriam Webbster, nor in the Oxford Dictionary of English (or oxfordreference.com). On the other hand, it has a wikipedia page, thousands of book and article titles, dating back to the 60s and seemingly it is more widely used since the 1990s/2000s.

Reply via email to