https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61999

--- Comment #2 from Dominique d'Humieres <dominiq at lps dot ens.fr> ---
The ICE is due to the line

  gcc_assert (gfc_compare_types (&vector_a->ts, &vector_b->ts));

i.e., gfc_simplify_dot_product works only if the two vectors have the same
type. Replacing the assert with

--- ../_clean/gcc/fortran/simplify.c    2014-07-26 13:13:21.000000000 +0200
+++ gcc/fortran/simplify.c    2014-08-03 15:43:35.000000000 +0200
@@ -1883,7 +1883,8 @@ gfc_expr*
 gfc_simplify_dot_product (gfc_expr *vector_a, gfc_expr *vector_b)
 {
   if (!is_constant_array_expr (vector_a)
-      || !is_constant_array_expr (vector_b))
+      || !is_constant_array_expr (vector_b)
+      || !gfc_compare_types (&vector_a->ts, &vector_b->ts))
     return NULL;

   gcc_assert (vector_a->rank == 1);

fixes the problem. Indeed this prevents the dot product to be computed at
compile time. A better solution will be to do the type conversion, but I don't
know how to do it.

Reply via email to