aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/simplify.c
diff options
context:
space:
mode:
authorThomas Koenig <tkoenig@gcc.gnu.org>2014-08-09 22:38:46 +0000
committerThomas Koenig <tkoenig@gcc.gnu.org>2014-08-09 22:38:46 +0000
commit4d0513401049a350978e89428070f74cc0cfdc0e (patch)
tree2bd995fd5969ee34d779a626b328099b61025b8e /gcc/fortran/simplify.c
parent726540aa29ba5d46a4028852d937ab889be941d8 (diff)
downloadgcc-4d0513401049a350978e89428070f74cc0cfdc0e.zip
gcc-4d0513401049a350978e89428070f74cc0cfdc0e.tar.gz
gcc-4d0513401049a350978e89428070f74cc0cfdc0e.tar.bz2
re PR fortran/61999 (`gfc_simplify_dot_product` causes ICE for constant arguments)
2014-08-10 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/61999 * simplify.c (gfc_simplify_dot_product): Convert types of vectors before calculating the result. 2014-08-10 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/61999 * gfortran.dg/dot_product_3.f90: New test case. From-SVN: r213782
Diffstat (limited to 'gcc/fortran/simplify.c')
-rw-r--r--gcc/fortran/simplify.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c
index d4a67ad..cc8a52a 100644
--- a/gcc/fortran/simplify.c
+++ b/gcc/fortran/simplify.c
@@ -1882,13 +1882,22 @@ gfc_simplify_dim (gfc_expr *x, gfc_expr *y)
gfc_expr*
gfc_simplify_dot_product (gfc_expr *vector_a, gfc_expr *vector_b)
{
+
+ gfc_expr temp;
+
if (!is_constant_array_expr (vector_a)
|| !is_constant_array_expr (vector_b))
return NULL;
gcc_assert (vector_a->rank == 1);
gcc_assert (vector_b->rank == 1);
- gcc_assert (gfc_compare_types (&vector_a->ts, &vector_b->ts));
+
+ temp.expr_type = EXPR_OP;
+ gfc_clear_ts (&temp.ts);
+ temp.value.op.op = INTRINSIC_NONE;
+ temp.value.op.op1 = vector_a;
+ temp.value.op.op2 = vector_b;
+ gfc_type_convert_binary (&temp, 1);
return compute_dot_product (vector_a, 1, 0, vector_b, 1, 0, true);
}