diff options
author | burnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-07-19 20:20:17 +0000 |
---|---|---|
committer | burnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-07-19 20:20:17 +0000 |
commit | bc118adbea5f7333e9f0ffe0ccfb1e3e6c383751 (patch) | |
tree | 184c424f1429e8cc9e55ae799bd1b5431551e537 /gcc/fortran/trans-expr.c | |
parent | 2be35848b15f27a452b95543d7e3aeb2c435ca84 (diff) | |
download | gcc-bc118adbea5f7333e9f0ffe0ccfb1e3e6c383751.tar.gz |
2012-07-19 Tobias Burnus <burnus@net-b.de>
* trans-expr.c (gfc_conv_procedure_call): Fix handling
of polymorphic arguments.
* resolve.c (resolve_formal_arglist): Ditto, mark polymorphic
assumed-shape arrays as such.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@189678 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/fortran/trans-expr.c')
-rw-r--r-- | gcc/fortran/trans-expr.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index 34e0f699cd2..17964bb2c64 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -3620,10 +3620,15 @@ gfc_conv_procedure_call (gfc_se * se, gfc_symbol * sym, parmse.string_length = build_int_cst (gfc_charlen_type_node, 0); } } - else if (arg->expr->expr_type == EXPR_NULL && fsym && !fsym->attr.pointer) + else if (arg->expr->expr_type == EXPR_NULL + && fsym && !fsym->attr.pointer + && (fsym->ts.type != BT_CLASS + || !CLASS_DATA (fsym)->attr.class_pointer)) { /* Pass a NULL pointer to denote an absent arg. */ - gcc_assert (fsym->attr.optional && !fsym->attr.allocatable); + gcc_assert (fsym->attr.optional && !fsym->attr.allocatable + && (fsym->ts.type != BT_CLASS + || !CLASS_DATA (fsym)->attr.allocatable)); gfc_init_se (&parmse, NULL); parmse.expr = null_pointer_node; if (arg->missing_arg_type == BT_CHARACTER) |