[Bug fortran/79312] Empty array in assignment not correctly type-checked
kargl at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Feb 2 01:52:00 GMT 2017
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79312
kargl at gcc dot gnu.org changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |kargl at gcc dot gnu.org
--- Comment #3 from kargl at gcc dot gnu.org ---
(In reply to john.harper from comment #0)
> This program violates f2008 syntax rule 7.2.1.2(4) but gfortran 6.1.1 on an
> x86-64 system compiles and runs it, printing 0
>
> program emptyarray5
> implicit none
> real a(0)
> a = [logical::]
> print *,size(a)
> end program emptyarray5
>
> ! f2008 7.2.1.2 (4) if the variable is polymorphic it shall be type
> ! compatible with expr ; otherwise the declared types of the variable and
> ! expr shall conform as specified in Table 7.8,
> !
> ! Table 7.8: Type conformance for the intrinsic assignment statement
> !
> ! Type of the variable | Type of expr
> !-----------------------------------------------------------+
> ! integer | integer, real, complex |
> ! real | integer, real, complex |
> ! complex | integer, real, complex |
> ! character | character |
> ! logical | logical |
> ! derived type | same derived type as the variable |
> !-----------------------------------------------------------+
Index: resolve.c
===================================================================
--- resolve.c (revision 245068)
+++ resolve.c (working copy)
@@ -9911,6 +9911,13 @@ resolve_ordinary_assign (gfc_code *code,
lhs = code->expr1;
rhs = code->expr2;
+ if (rhs->ts.type == BT_LOGICAL && lhs->ts.type != BT_LOGICAL)
+ {
+ gfc_error ("LOGICAL expression at %L assigned to a non-LOGICAL entity",
+ &rhs->where);
+ return false;
+ }
+
if (rhs->is_boz
&& !gfc_notify_std (GFC_STD_GNU, "BOZ literal at %L outside "
"a DATA statement and outside INT/REAL/DBLE/CMPLX",
More information about the Gcc-bugs
mailing list