2017_12_27 Louis Krupp <louis.krupp@zoho.com>

PR fortran/83092
	* expr.c (gfc_apply_init): Check that typespec has character type
	before using character length field.

2017_12_27  Louis Krupp  <louis.krupp@zoho.com>

	PR fortran/83092
	* gfortran.dg/init_char_with_nonchar_ctr.f90: New test.

From-SVN: r256011
This commit is contained in:
Louis Krupp 2017-12-27 19:20:12 +00:00 committed by Louis Krupp
parent 467e6f1bb1
commit aefd636b3c
4 changed files with 46 additions and 0 deletions

View file

@ -1,3 +1,9 @@
2017_12_27 Louis Krupp <louis.krupp@zoho.com>
PR fortran/83092
* expr.c (gfc_apply_init): Check that typespec has character type
before using character length field.
2017-12-26 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/83540

View file

@ -4208,6 +4208,7 @@ gfc_apply_init (gfc_typespec *ts, symbol_attribute *attr, gfc_expr *init)
if (init->expr_type == EXPR_CONSTANT)
gfc_set_constant_character_len (len, init, -1);
else if (init
&& init->ts.type == BT_CHARACTER
&& init->ts.u.cl
&& mpz_cmp (ts->u.cl->length->value.integer,
init->ts.u.cl->length->value.integer))

View file

@ -1,3 +1,8 @@
2017_12_27 Louis Krupp <louis.krupp@zoho.com>
PR fortran/83092
* gfortran.dg/init_char_with_nonchar_ctr.f90: New test.
2017-12-27 Kugan Vivekanandarajah <kuganv@linaro.org>
* gcc.target/aarch64/advsimd-intrinsics/vld1x2.c: New test.

View file

@ -0,0 +1,34 @@
! { dg-do compile }
! Initialization of character by non-character constructor
subroutine s1
type t
integer :: n = 0
end type
type t2
character :: c = t() ! { dg-error "Can't convert TYPE\\(t\\) to CHARACTER\\(1\\)" }
end type
end subroutine
subroutine s2
type t
end type
type t2
character :: c(1) = [t()] ! { dg-error "Can't convert TYPE\\(t\\) to CHARACTER\\(1\\)" }
end type
end subroutine
subroutine s3
type t
integer :: a = 1
character :: c = t() ! { dg-error "Can't convert TYPE\\(t\\) to CHARACTER\\(1\\)" }
end type
end subroutine
subroutine s4
type t
integer, allocatable :: a
character :: c = t() ! { dg-error "Can't convert TYPE\\(t\\) to CHARACTER\\(1\\)" }
end type
end subroutine