* trans-types.c (gfc_sym_type): Use pointer types for optional args.
authorPaul Brook <paul@codesourcery.com>
Wed, 18 Aug 2004 13:08:08 +0000 (13:08 +0000)
committerPaul Brook <pbrook@gcc.gnu.org>
Wed, 18 Aug 2004 13:08:08 +0000 (13:08 +0000)
From-SVN: r86182

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

index c6e5cbe191bc192d87a0a878ddf3619fa1efc947..eae37c8c74811a1b0f9764184dc27416a5beb67a 100644 (file)
@@ -1,3 +1,7 @@
+2004-08-18  Paul Brook  <paul@codesourcery.com>
+
+       * trans-types.c (gfc_sym_type): Use pointer types for optional args.
+
 2004-08-18  Victor Leikehman  <lei@il.ibm.com>
 
        PR fortran/13278
index 85c13fa1a21ef7677a5e92d888e3a687c7c4b044..2b4edfc0e2797729922921743c331a2b048bac64 100644 (file)
@@ -972,7 +972,14 @@ gfc_sym_type (gfc_symbol * sym)
      See f95_get_function_decl.  For dummy function parameters return the
      function type.  */
   if (byref)
-    type = build_reference_type (type);
+    {
+      /* We must use pointer types for potentially absent variables.  The
+        optimizers assume a reference type argument is never NULL.  */
+      if (sym->attr.optional || sym->ns->proc_name->attr.entry_master)
+       type = build_pointer_type (type);
+      else
+       type = build_reference_type (type);
+    }
 
   return (type);
 }