Hello world, the attached patch fixes the PR; patch and test case are rather self-explanatory.
Regression-testing as I write this. OK for trunk if it passes? Regards Thomas 2017-07-24 Thomas König <tkoe...@gcc.gnu.org> PR fortran/79312 * intrisic.c (gfc_convert_type_warn): Only set typespec for empty array constructors which don't have it already. 2017-07-24 Thomas König <tkoe...@gcc.gnu.org> PR fortran/79312 * gfortran.dg/logical_assignment_1.f90: New test.
Index: intrinsic.c =================================================================== --- intrinsic.c (Revision 249936) +++ intrinsic.c (Arbeitskopie) @@ -4919,9 +4919,11 @@ gfc_convert_type_warn (gfc_expr *expr, gfc_typespe if (ts->type == BT_UNKNOWN) goto bad; - /* NULL and zero size arrays get their type here. */ - if (expr->expr_type == EXPR_NULL - || (expr->expr_type == EXPR_ARRAY && expr->value.constructor == NULL)) + /* NULL and zero size arrays get their type here, unless they already have a + typespec. */ + if ((expr->expr_type == EXPR_NULL + || (expr->expr_type == EXPR_ARRAY && expr->value.constructor == NULL)) + && expr->ts.type == BT_UNKNOWN) { /* Sometimes the RHS acquire the type. */ expr->ts = *ts;
! { dg-do compile } ! PR 79312 - assigning a logical value to a real ! is invalid. ! Test case by John Harper. program emptyarray5 implicit none real a(0) a = [logical::] ! { dg-error "Can't convert LOGICAL" } print *,size(a) end program emptyarray5