diff options
author | Jakub Jelinek <jakub@gcc.gnu.org> | 2006-12-13 18:29:26 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2006-12-13 18:29:26 +0100 |
commit | 6cf43108a94524fb164f4d29401ed8cf1890d347 (patch) | |
tree | b2e4fe83000683e3368074e77341645bd6d4c109 /gcc | |
parent | 40e1b1d433f5178bbf0c08d8ce18c9855390024b (diff) | |
download | gcc-6cf43108a94524fb164f4d29401ed8cf1890d347.zip gcc-6cf43108a94524fb164f4d29401ed8cf1890d347.tar.gz gcc-6cf43108a94524fb164f4d29401ed8cf1890d347.tar.bz2 |
[multiple changes]
2006-12-13 Jakub Jelinek <jakub@redhat.com>
* g++.dg/debug/vartrack1.C: New test.
* g++.dg/opt/ifcvt1.C: New test.
* gcc.dg/tls/opt-13.c: New test.
* gcc.dg/20060425-2.c: New test.
* g++.dg/opt/pr15054-2.C: New test.
* gcc.c-torture/execute/20060420-1.c: New test.
* gcc.c-torture/execute/20060412-1.c: New test.
* objc/compile/20060406-1.m: New test.
2006-12-08 Alexandre Oliva <aoliva@redhat.com>
* g++.dg/template/array17.C: New test.
2006-02-25 Alexandre Oliva <aoliva@redhat.com>
* gcc.target/powerpc/altivec-23.c: New test.
From-SVN: r119837
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/ChangeLog | 26 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/debug/vartrack1.C | 99 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/opt/ifcvt1.C | 17 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/opt/pr15054-2.C | 39 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/array17.C | 23 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/execute/20060412-1.c | 33 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/execute/20060420-1.c | 71 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/20060425-2.c | 10 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tls/opt-13.c | 16 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/powerpc/altivec-23.c | 25 | ||||
-rw-r--r-- | gcc/testsuite/objc/compile/20060406-1.m | 21 |
11 files changed, 380 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 52a99cc..5fe430e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,29 @@ +2006-12-13 Jakub Jelinek <jakub@redhat.com> + + * g++.dg/debug/vartrack1.C: New test. + + * g++.dg/opt/ifcvt1.C: New test. + + * gcc.dg/tls/opt-13.c: New test. + + * gcc.dg/20060425-2.c: New test. + + * g++.dg/opt/pr15054-2.C: New test. + + * gcc.c-torture/execute/20060420-1.c: New test. + + * gcc.c-torture/execute/20060412-1.c: New test. + + * objc/compile/20060406-1.m: New test. + +2006-12-08 Alexandre Oliva <aoliva@redhat.com> + + * g++.dg/template/array17.C: New test. + +2006-02-25 Alexandre Oliva <aoliva@redhat.com> + + * gcc.target/powerpc/altivec-23.c: New test. + 2006-12-13 Lee Millward <lee.millward@codesourcery.com> PR c++27316 diff --git a/gcc/testsuite/g++.dg/debug/vartrack1.C b/gcc/testsuite/g++.dg/debug/vartrack1.C new file mode 100644 index 0000000..d72cb6f --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/vartrack1.C @@ -0,0 +1,99 @@ +// This testcase used to hang the compiler in vt_find_locations. +// { dg-do compile } +// { dg-options "-O2 -g" } + +struct S +{ + int a; + S *b, *c, *d; +}; + +struct T +{ + void f1 (S *x); + void f2 (S *x); + void f3 (S *x, S *y); + S *e; +}; + +void +T::f3 (S *x, S *y) +{ + while (x != this->e && (!x || x->a == 1)) + { + if (x == y->c) + { + S *w = y->d; + if (w && w->a == 0) + { + w->a = 1; + y->a = 0; + f2 (y); + w = y->d; + } + if (w && (!w->c || w->c->a == 1) && (!w->d || w->d->a == 1)) + { + w->a = 0; + x = y; + y = x->b; + } + else + { + if (w && (!w->d || w->d->a == 1)) + { + if (w->c) + w->c->a = 1; + w->a = 0; + f1 (w); + w = y->d; + } + if (w) + { + w->a = y->a; + if (w->d) + w->d->a = 1; + } + y->a = 1; + f2 (y); + x = e; + } + } + else + { + S *w = y->c; + if (w && w->a == 0) + { + w->a = 1; + y->a = 0; + f1 (y); + w = y->c; + } + if (w && (!w->c || w->c->a == 1) && (!w->d || w->d->a == 1)) + { + w->a = 0; + x = y; + y = x->b; + } + else + { + if (w && (!w->c || w->c->a == 1)) + { + w->a = 0; + if (w->d) + w->d->a = 1; + f2 (w); + w = y->c; + } + if (w) + { + w->a = y->a; + if (w->c) + w->c->a = 1; + } + y->a = 1; + f1 (y); + x = e; + } + } + } +} diff --git a/gcc/testsuite/g++.dg/opt/ifcvt1.C b/gcc/testsuite/g++.dg/opt/ifcvt1.C new file mode 100644 index 0000000..8fcbf46 --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/ifcvt1.C @@ -0,0 +1,17 @@ +// { dg-do compile } +// { dg-options "-O2 -fnon-call-exceptions" } + +struct S { ~S () throw () {} }; +double bar (); + +int +foo () +{ + S a; + int i = 0; + double c = bar (); + c = c < 0 ? -c : c; + if (c <= 1.e-8) + i += 24; + return i; +} diff --git a/gcc/testsuite/g++.dg/opt/pr15054-2.C b/gcc/testsuite/g++.dg/opt/pr15054-2.C new file mode 100644 index 0000000..156e945 --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr15054-2.C @@ -0,0 +1,39 @@ +// PR middle-end/15054 + +// { dg-do run } +// { dg-options "-O2" } + +extern "C" void abort (void); + +void +__attribute__((noinline)) +check (long x, long y) +{ + if (x != y) + abort (); +} + +struct A +{ + A() : a(2) { check (a, 2); } + ~A() { check (a, 2); } +private: + long a; +}; + +class B { + long b; + B& operator =(const B& ); +public: + B (long p) : b(p) { check (b, 6); } + B (const B& p) : b(p.b) { check (b, 6); } + ~B () { check (b, 6); A obj; check (b, 6); } + B foo() { return B(*this); } +}; + +int main () +{ + B o(6); + o.foo().foo(); + return 0; +} diff --git a/gcc/testsuite/g++.dg/template/array17.C b/gcc/testsuite/g++.dg/template/array17.C new file mode 100644 index 0000000..12a5c47 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/array17.C @@ -0,0 +1,23 @@ +// { dg-do compile } + +template <typename T> +struct V { + T& operator[](int); +}; + +struct S { + S operator +(int); + template <typename T> T value(); +}; + +template <typename T> +void R (T v) +{ + v[(S() + 0).template value<int>()][0] = 0; +} + +int +main () +{ + R(V<V<int> >()); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/20060412-1.c b/gcc/testsuite/gcc.c-torture/execute/20060412-1.c new file mode 100644 index 0000000..a4cc4d4 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/20060412-1.c @@ -0,0 +1,33 @@ +extern void abort (void); + +struct S +{ + long o; +}; + +struct T +{ + long o; + struct S m[82]; +}; + +struct T t; + +int +main () +{ + struct S *p, *q; + + p = (struct S *) &t; + p = &((struct T *) p)->m[0]; + q = p + 82; + while (--q > p) + q->o = -1; + q->o = 0; + + if (q > p) + abort (); + if (q - p > 0) + abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/execute/20060420-1.c b/gcc/testsuite/gcc.c-torture/execute/20060420-1.c new file mode 100644 index 0000000..fe62f6b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/20060420-1.c @@ -0,0 +1,71 @@ +extern void abort (void); + +typedef float v4flt __attribute__ ((vector_size (16))); + +void __attribute__ ((noinline)) foo (float *dst, float **src, int a, int n) +{ + int i, j; + int z = sizeof (v4flt) / sizeof (float); + unsigned m = sizeof (v4flt) - 1; + + for (j = 0; j < n && (((unsigned long) dst + j) & m); ++j) + { + float t = src[0][j]; + for (i = 1; i < a; ++i) + t += src[i][j]; + dst[j] = t; + } + + for (; j < (n - (4 * z - 1)); j += 4 * z) + { + v4flt t0 = *(v4flt *) (src[0] + j + 0 * z); + v4flt t1 = *(v4flt *) (src[0] + j + 1 * z); + v4flt t2 = *(v4flt *) (src[0] + j + 2 * z); + v4flt t3 = *(v4flt *) (src[0] + j + 3 * z); + for (i = 1; i < a; ++i) + { + t0 += *(v4flt *) (src[i] + j + 0 * z); + t1 += *(v4flt *) (src[i] + j + 1 * z); + t2 += *(v4flt *) (src[i] + j + 2 * z); + t3 += *(v4flt *) (src[i] + j + 3 * z); + } + *(v4flt *) (dst + j + 0 * z) = t0; + *(v4flt *) (dst + j + 1 * z) = t1; + *(v4flt *) (dst + j + 2 * z) = t2; + *(v4flt *) (dst + j + 3 * z) = t3; + } + for (; j < n; ++j) + { + float t = src[0][j]; + for (i = 1; i < a; ++i) + t += src[i][j]; + dst[j] = t; + } +} + +float buffer[64]; + +int +main (void) +{ + int i; + float *dst, *src[2]; + + dst = buffer; + dst += (-(long int) buffer & (16 * sizeof (float) - 1)) / sizeof (float); + src[0] = dst + 16; + src[1] = dst + 32; + for (i = 0; i < 16; ++i) + { + src[0][i] = (float) i + 11 * (float) i; + src[1][i] = (float) i + 12 * (float) i; + } + foo (dst, src, 2, 16); + for (i = 0; i < 16; ++i) + { + float e = (float) i + 11 * (float) i + (float) i + 12 * (float) i; + if (dst[i] != e) + abort (); + } + return 0; +} diff --git a/gcc/testsuite/gcc.dg/20060425-2.c b/gcc/testsuite/gcc.dg/20060425-2.c new file mode 100644 index 0000000..2a5e131 --- /dev/null +++ b/gcc/testsuite/gcc.dg/20060425-2.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +double +crashme (double v, double *p) +{ + if (v < 0. && *p == 1.) + v = 0.; + return v; +} diff --git a/gcc/testsuite/gcc.dg/tls/opt-13.c b/gcc/testsuite/gcc.dg/tls/opt-13.c new file mode 100644 index 0000000..8eea76b --- /dev/null +++ b/gcc/testsuite/gcc.dg/tls/opt-13.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ +/* { dg-require-effective-target tls } */ + +__thread struct +{ + int a; + char b[32]; +} thr; + +int +main () +{ + __builtin_strcpy (thr.b, "abcd"); + return 0; +} diff --git a/gcc/testsuite/gcc.target/powerpc/altivec-23.c b/gcc/testsuite/gcc.target/powerpc/altivec-23.c new file mode 100644 index 0000000..c8851a4 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/altivec-23.c @@ -0,0 +1,25 @@ +/* Verify that it is possible to define variables of composite types + containing vector types. We used to crash handling the + initializer of automatic ones. */ + +/* { dg-do compile } */ +/* { dg-require-effective-target powerpc_altivec_ok } */ +/* { dg-options "-maltivec -mabi=altivec" } */ + +#include <altivec.h> + +typedef int bt; +typedef vector bt vt; +typedef struct { vt x; bt y[sizeof(vt) / sizeof (bt)]; } st; +#define INIT { 1, 2, 3, 4 } + +void f () +{ + vt x = INIT; + vt y[1] = { INIT }; + st s = { INIT, INIT }; +} + +vt x = INIT; +vt y[1] = { INIT }; +st s = { INIT, INIT }; diff --git a/gcc/testsuite/objc/compile/20060406-1.m b/gcc/testsuite/objc/compile/20060406-1.m new file mode 100644 index 0000000..e4496bf --- /dev/null +++ b/gcc/testsuite/objc/compile/20060406-1.m @@ -0,0 +1,21 @@ +typedef struct +{ + void *p; +} *S; + +@protocol O +- (unsigned)j; +@end + +@interface I ++ (unsigned char)T:(S<O>[2])p v:(S<O>)h; +@end + +@implementation I ++ (unsigned char)T:(S<O>[2])p v:(S<O>)h +{ + p[0] = (S) 0; + p[1] = (S) 0; + return 0; +} +@end |