[multiple changes]
authorJanus Weil <janus@gcc.gnu.org>
Fri, 2 Dec 2016 18:38:24 +0000 (19:38 +0100)
committerJanus Weil <janus@gcc.gnu.org>
Fri, 2 Dec 2016 18:38:24 +0000 (19:38 +0100)
2016-12-02  Janus Weil  <janus@gcc.gnu.org>
    Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/78618
* check.c (gfc_check_rank): Remove ATTRIBUTE_UNUSED.
* expr.c (gfc_check_assign): Fix error propagation.

2016-12-02  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/78618
* gfortran.dg/char_conversion.f90: New test.

From-SVN: r243201

gcc/fortran/ChangeLog
gcc/fortran/check.c
gcc/fortran/expr.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/char_conversion.f90 [new file with mode: 0644]

index 20a9f2e2ba75c036e654f09cd5167734921068ac..b11a99982cff42718f411a4b8f2360ce5e2760c0 100644 (file)
@@ -1,3 +1,10 @@
+2016-12-02  Janus Weil  <janus@gcc.gnu.org>
+           Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/78618
+       * check.c (gfc_check_rank): Remove ATTRIBUTE_UNUSED.
+       * expr.c (gfc_check_assign): Fix error propagation.
+
 2016-12-01  Elizebeth Punnoose  <elizebeth.punnoose@hpe.com>
 
        PR fortran/77505
index 3b80156e3c8a93700475d1d8f086afc4cdce6d72..3ea8391ffc8bc34d2985cf566e50e0eb7e70b8af 100644 (file)
@@ -3667,7 +3667,7 @@ gfc_check_range (gfc_expr *x)
 
 
 bool
-gfc_check_rank (gfc_expr *a ATTRIBUTE_UNUSED)
+gfc_check_rank (gfc_expr *a)
 {
   /* Any data object is allowed; a "data object" is a "constant (4.1.3),
      variable (6), or subobject of a constant (2.4.3.2.3)" (F2008, 1.3.45).  */
index 60f6080877f408f62ab5f3c0f82e1e80e0c908b7..c01418d48401bc82b2dac8ce62b5bc47d787bbeb 100644 (file)
@@ -3314,9 +3314,9 @@ gfc_check_assign (gfc_expr *lvalue, gfc_expr *rvalue, int conform,
   if (lvalue->ts.type == BT_CHARACTER && rvalue->ts.type == BT_CHARACTER)
     {
       if (lvalue->ts.kind != rvalue->ts.kind && allow_convert)
-       gfc_convert_chartype (rvalue, &lvalue->ts);
-
-      return true;
+       return gfc_convert_chartype (rvalue, &lvalue->ts);
+      else
+       return true;
     }
 
   if (!allow_convert)
index 3a478b9abed15c62f757a4ef5f2b2f197783c3ea..d7b90d65f8e628a034b036ab580218c1bef5534c 100644 (file)
@@ -1,3 +1,8 @@
+2016-12-02  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/78618
+       * gfortran.dg/char_conversion.f90: New test.
+
 2016-12-02  Jakub Jelinek  <jakub@redhat.com>
 
        PR target/70322
diff --git a/gcc/testsuite/gfortran.dg/char_conversion.f90 b/gcc/testsuite/gfortran.dg/char_conversion.f90
new file mode 100644 (file)
index 0000000..7120a1c
--- /dev/null
@@ -0,0 +1,10 @@
+! { dg-do compile }
+!
+! PR 78618: ICE in gfc_check_rank, at fortran/check.c:3670
+!
+! Contributed by Gerhard Steinmetz <gerhard.steinmetz.fortran@t-online.de>
+
+program p
+   character, parameter :: c = char(256,4) ! { dg-error "cannot be converted" }
+   if (rank(c) /= 0) call abort
+end