From: Thomas Koenig Date: Sun, 10 Aug 2014 14:19:18 +0000 (+0000) Subject: backport: re PR fortran/61999 (`gfc_simplify_dot_product` causes ICE for constant... X-Git-Tag: releases/gcc-4.8.4~301 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d5841e5235a1265a7259d4cab55c223964c8b714;p=thirdparty%2Fgcc.git backport: re PR fortran/61999 (`gfc_simplify_dot_product` causes ICE for constant arguments) 2014-08-10 Thomas Koenig Backport from trunk PR fortran/61999 * simplify.c (gfc_simplify_dot_product): Convert types of vectors before calculating the result. 2014-08-10 Thomas Koenig Backport from trunk PR fortran/61999 * gfortran.dg/dot_product_3.f90: New test case. From-SVN: r213789 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index a21b5dbe7c77..22e84cf8dd03 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2014-08-10 Thomas Koenig + + Backport from trunk + PR fortran/61999 + * simplify.c (gfc_simplify_dot_product): Convert types of + vectors before calculating the result. + 2014-07-19 Paul Thomas Backport from trunk. diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c index 7c21f226d99d..65c65a300d27 100644 --- a/gcc/fortran/simplify.c +++ b/gcc/fortran/simplify.c @@ -1877,13 +1877,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); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3053629c52b1..d55ac28b2dca 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2014-08-10 Thomas Koenig + + Backport from trunk + PR fortran/61999 + * gfortran.dg/dot_product_3.f90: New test case. + 2014-08-07 John David Anglin PR tree-optimization/60707 diff --git a/gcc/testsuite/gfortran.dg/dot_product_3.f90 b/gcc/testsuite/gfortran.dg/dot_product_3.f90 new file mode 100644 index 000000000000..6e11556ee860 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/dot_product_3.f90 @@ -0,0 +1,15 @@ +! { dg-do compile } +! { dg-options "-fdump-tree-original" } +! PR 61999 - this used to ICE. +! Original test case by A. Kasahara +program main + use, intrinsic:: iso_fortran_env, only: output_unit + + implicit none + + write(output_unit, *) dot_product([1, 2], [2.0, 3.0]) + + stop +end program main +! { dg-final { scan-tree-dump-times "8\\.0e\\+0" 1 "original" } } +! { dg-final { cleanup-tree-dump "original" } }