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
This commit is contained in:
parent
54d04ce91a
commit
e310b38153
4 changed files with 36 additions and 0 deletions
|
@ -1,3 +1,9 @@
|
|||
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. */
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
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
|
||||
|
|
9
gcc/testsuite/gfortran.dg/pr88138.f90
Normal file
9
gcc/testsuite/gfortran.dg/pr88138.f90
Normal file
|
@ -0,0 +1,9 @@
|
|||
! { 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" }
|
Loading…
Add table
Reference in a new issue