aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/fortran/ChangeLog4
-rw-r--r--gcc/fortran/trans-types.c9
2 files changed, 12 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index c6e5cbe..eae37c8 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -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
diff --git a/gcc/fortran/trans-types.c b/gcc/fortran/trans-types.c
index 85c13fa..2b4edfc 100644
--- a/gcc/fortran/trans-types.c
+++ b/gcc/fortran/trans-types.c
@@ -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);
}