From ee11be7f2d788e6055ebed9746a8d8ac3cb04b8e Mon Sep 17 00:00:00 2001 From: Sandra Loosemore Date: Thu, 4 Nov 2021 15:43:29 -0700 Subject: Fortran: Diagnose all operands/arguments with constraint violations 04-Nov-2021 Sandra Loosemore Bernhard Reutner-Fischer PR fortran/101337 gcc/fortran/ChangeLog: * interface.c (gfc_compare_actual_formal): Continue checking all arguments after encountering an error. * intrinsic.c (do_ts29113_check): Likewise. * resolve.c (resolve_operator): Continue resolving on op2 error. gcc/testsuite/ChangeLog: * gfortran.dg/bessel_3.f90: Expect additional diagnostics from multiple bad arguments in the call. * gfortran.dg/pr24823.f: Likewise. * gfortran.dg/pr39937.f: Likewise. * gfortran.dg/pr41011.f: Likewise. * gfortran.dg/pr61318.f90: Likewise. * gfortran.dg/c-interop/c407b-2.f90: Remove xfails. * gfortran.dg/c-interop/c535b-2.f90: Likewise. --- gcc/fortran/resolve.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'gcc/fortran/resolve.c') diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 1f4abd0..705d232 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -4064,7 +4064,7 @@ resolve_operator (gfc_expr *e) { default: if (!gfc_resolve_expr (e->value.op.op2)) - return false; + t = false; /* Fall through. */ @@ -4091,6 +4091,9 @@ resolve_operator (gfc_expr *e) op2 = e->value.op.op2; if (op1 == NULL && op2 == NULL) return false; + /* Error out if op2 did not resolve. We already diagnosed op1. */ + if (t == false) + return false; dual_locus_error = false; -- cgit v1.1