diff options
author | Sandra Loosemore <sandra@codesourcery.com> | 2021-11-04 15:43:29 -0700 |
---|---|---|
committer | Sandra Loosemore <sandra@codesourcery.com> | 2021-11-07 09:35:04 -0800 |
commit | ee11be7f2d788e6055ebed9746a8d8ac3cb04b8e (patch) | |
tree | a96c18c77e62872d69d6c8ba6d96f7278ce9a88c /gcc/fortran/intrinsic.c | |
parent | f6f704fd104b79fc88914978772737cd05423059 (diff) | |
download | gcc-ee11be7f2d788e6055ebed9746a8d8ac3cb04b8e.zip gcc-ee11be7f2d788e6055ebed9746a8d8ac3cb04b8e.tar.gz gcc-ee11be7f2d788e6055ebed9746a8d8ac3cb04b8e.tar.bz2 |
Fortran: Diagnose all operands/arguments with constraint violations
04-Nov-2021 Sandra Loosemore <sandra@codesourcery.com>
Bernhard Reutner-Fischer <aldot@gcc.gnu.org>
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.
Diffstat (limited to 'gcc/fortran/intrinsic.c')
-rw-r--r-- | gcc/fortran/intrinsic.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/gcc/fortran/intrinsic.c b/gcc/fortran/intrinsic.c index f5c88d9..54d2d33 100644 --- a/gcc/fortran/intrinsic.c +++ b/gcc/fortran/intrinsic.c @@ -223,6 +223,7 @@ static bool do_ts29113_check (gfc_intrinsic_sym *specific, gfc_actual_arglist *arg) { gfc_actual_arglist *a; + bool ok = true; for (a = arg; a; a = a->next) { @@ -238,7 +239,7 @@ do_ts29113_check (gfc_intrinsic_sym *specific, gfc_actual_arglist *arg) gfc_error ("Variable with NO_ARG_CHECK attribute at %L is only " "permitted as argument to the intrinsic functions " "C_LOC and PRESENT", &a->expr->where); - return false; + ok = false; } else if (a->expr->ts.type == BT_ASSUMED && specific->id != GFC_ISYM_LBOUND @@ -254,32 +255,32 @@ do_ts29113_check (gfc_intrinsic_sym *specific, gfc_actual_arglist *arg) gfc_error ("Assumed-type argument at %L is not permitted as actual" " argument to the intrinsic %s", &a->expr->where, gfc_current_intrinsic); - return false; + ok = false; } else if (a->expr->ts.type == BT_ASSUMED && a != arg) { gfc_error ("Assumed-type argument at %L is only permitted as " "first actual argument to the intrinsic %s", &a->expr->where, gfc_current_intrinsic); - return false; + ok = false; } - if (a->expr->rank == -1 && !specific->inquiry) + else if (a->expr->rank == -1 && !specific->inquiry) { gfc_error ("Assumed-rank argument at %L is only permitted as actual " "argument to intrinsic inquiry functions", &a->expr->where); - return false; + ok = false; } - if (a->expr->rank == -1 && arg != a) + else if (a->expr->rank == -1 && arg != a) { gfc_error ("Assumed-rank argument at %L is only permitted as first " "actual argument to the intrinsic inquiry function %s", &a->expr->where, gfc_current_intrinsic); - return false; + ok = false; } } - return true; + return ok; } |