Fortran: fix order of checks for the SHAPE intrinsic

gcc/fortran/ChangeLog:

	PR fortran/102716
	* check.c (gfc_check_shape): Reorder checks so that invalid KIND
	arguments can be detected.

gcc/testsuite/ChangeLog:

	PR fortran/102716
	* gfortran.dg/shape_10.f90: New test.
This commit is contained in:
Harald Anlauf 2021-10-14 20:18:14 +02:00
parent f0b7d4cc49
commit 1b115daf62
2 changed files with 13 additions and 7 deletions

View File

@ -5086,6 +5086,13 @@ gfc_check_shape (gfc_expr *source, gfc_expr *kind)
if (gfc_invalid_null_arg (source))
return false;
if (!kind_check (kind, 1, BT_INTEGER))
return false;
if (kind && !gfc_notify_std (GFC_STD_F2003, "%qs intrinsic "
"with KIND argument at %L",
gfc_current_intrinsic, &kind->where))
return false;
if (source->rank == 0 || source->expr_type != EXPR_VARIABLE)
return true;
@ -5098,13 +5105,6 @@ gfc_check_shape (gfc_expr *source, gfc_expr *kind)
return false;
}
if (!kind_check (kind, 1, BT_INTEGER))
return false;
if (kind && !gfc_notify_std (GFC_STD_F2003, "%qs intrinsic "
"with KIND argument at %L",
gfc_current_intrinsic, &kind->where))
return false;
return true;
}

View File

@ -0,0 +1,6 @@
! { dg-do compile }
! PR fortran/102716
program p
integer, parameter :: a(1) = shape([2], [1]) ! { dg-error "must be a scalar" }
end