aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorLouis Krupp <louis.krupp@zoho.com>2017-12-27 19:20:12 +0000
committerLouis Krupp <lkrupp@gcc.gnu.org>2017-12-27 19:20:12 +0000
commitaefd636b3cc00e1aa37537f9fa3a8381883a1d19 (patch)
tree9ab9aa114277ba50463637b6940bf80217960a8a /gcc
parent467e6f1bb18878c330e1dc88888b133e85524c46 (diff)
downloadgcc-aefd636b3cc00e1aa37537f9fa3a8381883a1d19.zip
gcc-aefd636b3cc00e1aa37537f9fa3a8381883a1d19.tar.gz
gcc-aefd636b3cc00e1aa37537f9fa3a8381883a1d19.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/expr.c1
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/init_char_with_nonchar_ctr.f9034
4 files changed, 46 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index c28f4fe..91771e0 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -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
diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c
index 428fce1..2cdd465 100644
--- a/gcc/fortran/expr.c
+++ b/gcc/fortran/expr.c
@@ -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))
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 53f61f1..f8fcc47 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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.
diff --git a/gcc/testsuite/gfortran.dg/init_char_with_nonchar_ctr.f90 b/gcc/testsuite/gfortran.dg/init_char_with_nonchar_ctr.f90
new file mode 100644
index 0000000..b84a9a8
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/init_char_with_nonchar_ctr.f90
@@ -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