Commit e310b381 by Steven G. Kargl

re PR fortran/88138 (ICE in gfc_arith_concat, at fortran/arith.c:1007)

2019-12-15  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/88138
	* decl.c (variable_decl): Check that a derived isn't being assigned
	an incompatible entity in an initialization.
 
2019-12-15  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/88138
	* gfortran.dg/pr88138.f90: new test.

From-SVN: r267177
parent 54d04ce9
2019-12-15 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/88138
* decl.c (variable_decl): Check that a derived isn't being assigned
an incompatible entity in an initialization.
2018-12-12 Jakub Jelinek <jakub@redhat.com>
PR fortran/88463
......
......@@ -2784,6 +2784,22 @@ variable_decl (int elem)
param->value = gfc_copy_expr (initializer);
}
/* Before adding a possible initilizer, do a simple check for compatibility
of lhs and rhs types. Assigning a REAL value to a derive type is not a
good thing. */
if (current_ts.type == BT_DERIVED && initializer
&& (gfc_numeric_ts (&initializer->ts)
|| initializer->ts.type == BT_LOGICAL
|| initializer->ts.type == BT_CHARACTER))
{
gfc_error ("Incompatible initialization between a derive type "
"entity and an entity with %qs type at %C",
gfc_typename (&initializer->ts));
m = MATCH_ERROR;
goto cleanup;
}
/* Add the initializer. Note that it is fine if initializer is
NULL here, because we sometimes also need to check if a
declaration *must* have an initialization expression. */
......
2019-12-15 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/88138
* gfortran.dg/pr88138.f90: new test.
2018-12-15 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/88464
......
! { dg-do compile }
program p
type t
character :: c = 'c'
end type
type(t), parameter :: x = 1.e1 ! { dg-error "Incompatible initialization between a" }s
print *, 'a' // x%c
end
! { dg-prune-output "has no IMPLICIT type" }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment