From: Jakub Jelinek Date: Mon, 30 Oct 2006 08:08:41 +0000 (+0100) Subject: re PR tree-optimization/29637 (Endless recursion in make_vector_type) X-Git-Tag: releases/gcc-4.0.4~244 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=10720be45a800115d02225db1e13655c30f3a1a1;p=thirdparty%2Fgcc.git re PR tree-optimization/29637 (Endless recursion in make_vector_type) PR tree-optimization/29637 * tree.c (make_vector_type): Don't recurse if TYPE_MAIN_VARIANT of the innertype is the innertype itself. * gcc.dg/pr29637.c: New test. From-SVN: r118178 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 34d85384c966..674744c32f25 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,7 +1,12 @@ +2006-10-30 Jakub Jelinek + + PR tree-optimization/29637 + * tree.c (make_vector_type): Don't recurse if TYPE_MAIN_VARIANT + of the innertype is the innertype itself. + 2006-10-26 Paolo Bonzini PR c/29092 - * c-typeck.c (digest_init): Always allow initializing vectors that have static storage duration with compound literals. * tree.c (build_type_attribute_qual_variant): New, based on diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8d60f378152f..2f8aad597600 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2006-10-30 Jakub Jelinek + + PR tree-optimization/29637 + * gcc.dg/pr29637.c: New test. + 2006-10-25 Steve Ellcey * gcc.dg/pthread-init-2.c: Define _POSIX_C_SOURCE on ia64 HP-UX. diff --git a/gcc/testsuite/gcc.dg/pr29637.c b/gcc/testsuite/gcc.dg/pr29637.c new file mode 100644 index 000000000000..5dfee41b1d5c --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr29637.c @@ -0,0 +1,23 @@ +/* PR tree-optimization/29637 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -ftree-vectorize" } */ + +typedef struct __attribute__ ((aligned (8))) +{ + short a, b, c, d; +} A; + +typedef struct +{ + A a[24]; +} B; + +static const A b = { 0, 0, 1, -1 }; + +void +foo (B *x) +{ + int i; + for (i = 0; i <= 20; i += 4) + x->a[i] = b; +} diff --git a/gcc/tree.c b/gcc/tree.c index c80960002a86..17399352d032 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -5624,7 +5624,8 @@ make_vector_type (tree innertype, int nunits, enum machine_mode mode) /* Build a main variant, based on the main variant of the inner type, then use it to build the variant we return. */ - if (TYPE_ATTRIBUTES (innertype) || TYPE_QUALS (innertype)) + if ((TYPE_ATTRIBUTES (innertype) || TYPE_QUALS (innertype)) + && TYPE_MAIN_VARIANT (innertype) != innertype) return build_type_attribute_qual_variant ( make_vector_type (TYPE_MAIN_VARIANT (innertype), nunits, mode), TYPE_ATTRIBUTES (innertype),