[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
This commit is contained in:
Jakub Jelinek 2006-12-13 18:29:26 +01:00
parent 40e1b1d433
commit 6cf43108a9
11 changed files with 380 additions and 0 deletions

View File

@ -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

View File

@ -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;
}
}
}
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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> >());
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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 };

View File

@ -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