aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/expr.c7
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/pr80752.f9020
4 files changed, 37 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index f962ca9..07cbea0 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2017-05-15 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/80752
+ * expr.c (gfc_generate_initializer): If type conversion fails,
+ check for error and return NULL.
+
2017-05-14 Nicolas Koenig <koenigni@student.ethz.ch>
PR fortran/80442
diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c
index c8be951..c7d3e54 100644
--- a/gcc/fortran/expr.c
+++ b/gcc/fortran/expr.c
@@ -4395,7 +4395,12 @@ gfc_generate_initializer (gfc_typespec *ts, bool generate)
if ((comp->ts.type != tmp->ts.type
|| comp->ts.kind != tmp->ts.kind)
&& !comp->attr.pointer && !comp->attr.proc_pointer)
- gfc_convert_type_warn (ctor->expr, &comp->ts, 2, false);
+ {
+ bool val;
+ val = gfc_convert_type_warn (ctor->expr, &comp->ts, 1, false);
+ if (val == false)
+ return NULL;
+ }
}
if (comp->attr.allocatable
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 898656a..0082e85 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2017-05-15 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/80752
+ gfortran.dg/pr80752.f90: New test.
+
2017-05-15 Uros Bizjak <ubizjak@gmail.com>
PR target/80425
diff --git a/gcc/testsuite/gfortran.dg/pr80752.f90 b/gcc/testsuite/gfortran.dg/pr80752.f90
new file mode 100644
index 0000000..00a4b33
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr80752.f90
@@ -0,0 +1,20 @@
+! { dg-do compile }
+! PR fortran/80752
+module exchange_utils
+
+ implicit none
+
+ integer, parameter, public :: knd = 8
+
+ type, private :: a
+ logical :: add_vs98 = 0.0_knd ! { dg-error "Can't convert" }
+ end type a
+
+ type, private :: x_param_t
+ type(a) :: m05_m06
+ end type x_param_t
+
+ type(x_param_t), public, save :: x_param
+
+end module exchange_utils
+