diff options
Diffstat (limited to 'gcc/fortran/expr.c')
-rw-r--r-- | gcc/fortran/expr.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c index d2f73d6..2049fa4 100644 --- a/gcc/fortran/expr.c +++ b/gcc/fortran/expr.c @@ -3189,10 +3189,14 @@ gfc_check_pointer_assign (gfc_expr *lvalue, gfc_expr *rvalue) /* TODO: Enable interface check for PPCs. */ if (is_proc_ptr_comp (rvalue, NULL)) return SUCCESS; - if (rvalue->expr_type == EXPR_VARIABLE - && !gfc_compare_interfaces (lvalue->symtree->n.sym, - rvalue->symtree->n.sym, 0, 1, err, - sizeof(err))) + if ((rvalue->expr_type == EXPR_VARIABLE + && !gfc_compare_interfaces (lvalue->symtree->n.sym, + rvalue->symtree->n.sym, 0, 1, err, + sizeof(err))) + || (rvalue->expr_type == EXPR_FUNCTION + && !gfc_compare_interfaces (lvalue->symtree->n.sym, + rvalue->symtree->n.sym->result, 0, 1, + err, sizeof(err)))) { gfc_error ("Interface mismatch in procedure pointer assignment " "at %L: %s", &rvalue->where, err); |