From: Richard Biener Date: Thu, 30 Jan 2014 15:30:30 +0000 (+0000) Subject: re PR tree-optimization/59903 (ICE on valid code at -O3 on x86_64-linux-gnu (affectin... X-Git-Tag: releases/gcc-4.9.0~1218 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c972624e481f320326200ef6cfbaaf4daa66a45a;p=thirdparty%2Fgcc.git re PR tree-optimization/59903 (ICE on valid code at -O3 on x86_64-linux-gnu (affecting trunk and 4.8.x)) 2014-01-30 Richard Biener PR tree-optimization/59903 * tree-vect-loop.c (vect_transform_loop): Guard multiple-types check properly. * gcc.dg/torture/pr59903.c: New testcase. From-SVN: r207307 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d571a8faf440..ca5a89311eff 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2014-01-30 Richard Biener + + PR tree-optimization/59903 + * tree-vect-loop.c (vect_transform_loop): Guard multiple-types + check properly. + 2014-01-30 Jason Merrill PR c++/59633 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 22a79d4d9712..5b3e071d9c9d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-01-30 Richard Biener + + PR tree-optimization/59903 + * gcc.dg/torture/pr59903.c: New testcase. + 2014-01-30 Paolo Carlini PR c++/58843 diff --git a/gcc/testsuite/gcc.dg/torture/pr59903.c b/gcc/testsuite/gcc.dg/torture/pr59903.c new file mode 100644 index 000000000000..01772df61118 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr59903.c @@ -0,0 +1,56 @@ +/* { dg-do compile } */ + +int a, b, c, d, e, f, g, h, i[3], l, m, n, o, p, q, r; + +struct S0 +{ + int f0; + int f1; + int f2; + int f3; +} j; + +static int +fn1 (int p1) +{ + return p1 || ((p1 > 0) > (e << 1)); +} + +static struct S0 +fn2 (struct S0 p1) +{ + char s; + struct S0 t = {0,0,0,0}; + int u = 2; + for (;;) + { + if (i[0]) + break; + for (m = 0; m < 4; m++) + for (p1.f0 = 0; p1.f0 < 3; p1.f0++) + { + j = t; + t.f3 = i[p1.f0]; + o = b || 1 >> b ? 0 : a < 0; + q = 1 % d; + if ((g < fn1 ((1 ^ (q & 1)) | n)) ^ u) + j.f3 |= p % 2; + s = j.f3 > 0 ? j.f3 : j.f3 << 1; + r = l = s && p1.f1 * c; + h = p1.f1; + } + } + return p1; +} + +int +main () +{ + for (;f;) + { + struct S0 v = {0,0,0,0}; + fn2 (v); + j.f3 = 0; + } + return 0; +} diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c index 69c8d2196067..2bb9fbdb2f1c 100644 --- a/gcc/tree-vect-loop.c +++ b/gcc/tree-vect-loop.c @@ -5869,8 +5869,9 @@ vect_transform_loop (loop_vec_info loop_vinfo) && !STMT_VINFO_LIVE_P (stmt_info)) continue; - if ((TYPE_VECTOR_SUBPARTS (STMT_VINFO_VECTYPE (stmt_info)) - != (unsigned HOST_WIDE_INT) vectorization_factor) + if (STMT_VINFO_VECTYPE (stmt_info) + && (TYPE_VECTOR_SUBPARTS (STMT_VINFO_VECTYPE (stmt_info)) + != (unsigned HOST_WIDE_INT) vectorization_factor) && dump_enabled_p ()) dump_printf_loc (MSG_NOTE, vect_location, "multiple-types.\n");