From efd2e969f2571ba3e1bf9a04b88da7ee2144e1d9 Mon Sep 17 00:00:00 2001 From: Paul Thomas Date: Mon, 9 Jan 2012 20:25:55 +0000 Subject: re PR fortran/51791 ([OOP] Failure to resolve typebound function call with base object in parentheses.) 2012-01-09 Paul Thomas PR fortran/51791 * interface.c (matching_typebound_op): Drill down through possible parentheses to obtain base expression. Do not test for 'class_ok' but, instead for the class structure components. * resolve.c (resolve_ordinary_assign): Extend error message for polymorphic assignment to advise checking for specific subroutine. PR fortran/51792 * resolve.c (resolve_typebound_function): Restore 'static' to declaration. 2012-01-09 Paul Thomas PR fortran/51791 * gfortran.dg/typebound_operator_7.f03: Insert parentheses around base object in first assignment in main program. * gfortran.dg/typebound_operator_10.f03: New test. From-SVN: r183032 --- gcc/fortran/interface.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'gcc/fortran/interface.c') diff --git a/gcc/fortran/interface.c b/gcc/fortran/interface.c index 773749d..94f767d 100644 --- a/gcc/fortran/interface.c +++ b/gcc/fortran/interface.c @@ -3168,9 +3168,13 @@ matching_typebound_op (gfc_expr** tb_base, gfc_symbol* derived; gfc_try result; + while (base->expr->expr_type == EXPR_OP + && base->expr->value.op.op == INTRINSIC_PARENTHESES) + base->expr = base->expr->value.op.op1; + if (base->expr->ts.type == BT_CLASS) { - if (!gfc_expr_attr (base->expr).class_ok) + if (CLASS_DATA (base->expr) == NULL) continue; derived = CLASS_DATA (base->expr)->ts.u.derived; } -- cgit v1.1