aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/ChangeLog49
-rw-r--r--gcc/testsuite/g++.dg/init/new32.C16
-rw-r--r--gcc/testsuite/g++.dg/other/pr49133.C37
-rw-r--r--gcc/testsuite/g++.dg/torture/pr47714.C16
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr49238.c18
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr49186.c15
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr49038.c42
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-strided-u8-i8-gap4-unknown.c116
-rw-r--r--gcc/testsuite/gcc.target/mips/reg-var-1.c16
-rw-r--r--gcc/testsuite/gfortran.dg/operator_7.f9027
10 files changed, 352 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 681b53cdb40..78cce68b97e 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,52 @@
+2011-06-08 Kaz Kojima <kkojima@gcc.gnu.org>
+
+ Backport from mainline
+ 2011-06-01 Kaz Kojima <kkojima@gcc.gnu.org>
+
+ PR target/49238
+ * gcc.c-torture/compile/pr49238.c: New.
+
+2011-06-05 Kaz Kojima <kkojima@gcc.gnu.org>
+
+ Backport from mainline
+ 2011-05-30 Kaz Kojima <kkojima@gcc.gnu.org>
+
+ PR target/49186
+ * gcc.c-torture/execute/pr49186.c: New.
+
+2011-06-04 Ira Rosen <ira.rosen@linaro.org>
+
+ PR tree-optimization/49038
+ * gcc.dg/vect/vect-strided-u8-i8-gap4-unknown.c: New test.
+ * gcc.dg/vect/pr49038.c: New test.
+
+2011-06-02 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ Backport from trunk
+ PR fortran/45786
+ * gfortran.dg/operator_7.f90: New test case.
+
+2011-05-31 Duncan Sands <baldrick@free.fr>
+
+ Backported from 4.6 branch
+ 2011-03-09 Martin Jambor <mjambor@suse.cz>
+
+ PR tree-optimization/47714
+ * g++.dg/torture/pr47714.C: New test.
+
+2011-05-29 Richard Sandiford <rdsandiford@googlemail.com>
+
+ * gcc.target/mips/reg-var-1.c: New test.
+
+2011-05-25 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/49133
+ * g++.dg/other/pr49133.C: New test.
+
+2011-05-20 Jason Merrill <jason@redhat.com>
+
+ * g++.dg/init/new32.C: New.
+
2011-05-19 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* gcc.c-torture/execute/960321-1.x: Remove.
diff --git a/gcc/testsuite/g++.dg/init/new32.C b/gcc/testsuite/g++.dg/init/new32.C
new file mode 100644
index 00000000000..f82785749ce
--- /dev/null
+++ b/gcc/testsuite/g++.dg/init/new32.C
@@ -0,0 +1,16 @@
+// PR c++/48873
+
+#include <new>
+
+struct D {
+private:
+ ~D();
+};
+
+template<class T>
+T& create();
+
+void f()
+{
+ D* dp = new (((void*) 0)) D(create<D>()); // #
+}
diff --git a/gcc/testsuite/g++.dg/other/pr49133.C b/gcc/testsuite/g++.dg/other/pr49133.C
new file mode 100644
index 00000000000..51d8475455e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/other/pr49133.C
@@ -0,0 +1,37 @@
+/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-options "-O2 -msse2" } */
+/* { dg-require-effective-target sse2 } */
+/* { dg-require-effective-target sse2_runtime } */
+
+#include <xmmintrin.h>
+
+extern "C" void abort ();
+
+typedef double double_a __attribute__((__may_alias__));
+
+struct V
+{
+ __m128d data;
+};
+
+int
+main()
+{
+ V a;
+ __m128d b;
+
+ b = _mm_set_pd (1., 0.);
+ a.data = _mm_set_pd (1., 0.);
+ a.data = _mm_add_pd (a.data,
+ _mm_and_pd (_mm_cmpeq_pd (a.data, _mm_set1_pd (0.)),
+ _mm_set1_pd (2.)));
+ reinterpret_cast<double_a *>(&a.data)[1] += 1.;
+ b = _mm_add_pd (b, _mm_and_pd (_mm_cmpeq_pd (b, _mm_set1_pd (0.)),
+ _mm_set1_pd (1.)));
+ b = _mm_add_pd (b, _mm_and_pd (_mm_cmpeq_pd (b, _mm_set1_pd (1.)),
+ _mm_set1_pd (1.)));
+ if (_mm_movemask_pd (_mm_cmpeq_pd (a.data, b)) != 0x3)
+ abort();
+
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/torture/pr47714.C b/gcc/testsuite/g++.dg/torture/pr47714.C
new file mode 100644
index 00000000000..4ff2eeef0a4
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr47714.C
@@ -0,0 +1,16 @@
+struct A { virtual ~A () {} };
+struct B { virtual ~B () {} };
+struct C { virtual const A *foo (int) const = 0; };
+struct E : public B, public A { };
+struct F : public C
+{
+ virtual const E *foo (int) const;
+};
+void bar (int &);
+
+const E *
+F::foo (int x) const
+{
+ bar (x);
+ return __null;
+}
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr49238.c b/gcc/testsuite/gcc.c-torture/compile/pr49238.c
new file mode 100644
index 00000000000..fd8443a8f08
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr49238.c
@@ -0,0 +1,18 @@
+/* PR target/49238 */
+extern int bar (void);
+
+void
+foo (unsigned long long a, int b)
+{
+ int i;
+
+ if (b)
+ for (a = -12; a >= 10; a = bar ())
+ break;
+ else
+ return;
+
+ for (i = 0; i < 10; i += 10)
+ if ((i == bar ()) | (bar () >= a))
+ bar ();
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr49186.c b/gcc/testsuite/gcc.c-torture/execute/pr49186.c
new file mode 100644
index 00000000000..743815b9802
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr49186.c
@@ -0,0 +1,15 @@
+/* PR target/49186 */
+extern void abort (void);
+
+int
+main ()
+{
+ int x;
+ unsigned long long uv = 0x1000000001ULL;
+
+ x = (uv < 0x80) ? 1 : ((uv < 0x800) ? 2 : 3);
+ if (x != 3)
+ abort ();
+
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/vect/pr49038.c b/gcc/testsuite/gcc.dg/vect/pr49038.c
new file mode 100644
index 00000000000..91c214ffd4c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr49038.c
@@ -0,0 +1,42 @@
+#include <sys/mman.h>
+#include <stdio.h>
+
+#define COUNT 320
+#define MMAP_SIZE 0x10000
+#define ADDRESS 0x1122000000
+#define TYPE unsigned short
+
+#ifndef MAP_ANONYMOUS
+#define MAP_ANONYMOUS MAP_ANON
+#endif
+
+void __attribute__((noinline))
+foo (TYPE *__restrict a, TYPE *__restrict b)
+{
+ int n;
+
+ for (n = 0; n < COUNT; n++)
+ a[n] = b[n * 2];
+}
+
+int
+main (void)
+{
+ void *x;
+ size_t b_offset;
+
+ x = mmap ((void *) ADDRESS, MMAP_SIZE, PROT_READ | PROT_WRITE,
+ MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+ if (x == MAP_FAILED)
+ {
+ perror ("mmap");
+ return 1;
+ }
+
+ b_offset = MMAP_SIZE - (2 * COUNT - 1) * sizeof (TYPE);
+ foo ((unsigned short *) x,
+ (unsigned short *) ((char *) x + b_offset));
+ return 0;
+}
+
+/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-strided-u8-i8-gap4-unknown.c b/gcc/testsuite/gcc.dg/vect/vect-strided-u8-i8-gap4-unknown.c
new file mode 100644
index 00000000000..45066a053a2
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/vect-strided-u8-i8-gap4-unknown.c
@@ -0,0 +1,116 @@
+/* { dg-require-effective-target vect_int } */
+
+#include <stdarg.h>
+#include <stdio.h>
+#include "tree-vect.h"
+
+#define N 160
+
+typedef struct {
+ unsigned char a;
+ unsigned char b;
+ unsigned char c;
+ unsigned char d;
+ unsigned char e;
+ unsigned char f;
+ unsigned char g;
+ unsigned char h;
+} s;
+
+__attribute__ ((noinline)) int
+main1 (s *arr, int n)
+{
+ int i;
+ s *ptr = arr;
+ s res[N];
+ unsigned char x;
+
+ for (i = 0; i < N; i++)
+ {
+ res[i].a = 0;
+ res[i].b = 0;
+ res[i].c = 0;
+ res[i].d = 0;
+ res[i].e = 0;
+ res[i].f = 0;
+ res[i].g = 0;
+ res[i].h = 0;
+ __asm__ volatile ("");
+ }
+
+ /* Check peeling for gaps for unknown loop bound. */
+ for (i = 0; i < n; i++)
+ {
+ res[i].c = ptr->b + ptr->c;
+ x = ptr->c + ptr->f;
+ res[i].a = x + ptr->b;
+ res[i].d = ptr->b + ptr->c;
+ res[i].b = ptr->c;
+ res[i].f = ptr->f + ptr->e;
+ res[i].e = ptr->b + ptr->e;
+ res[i].h = ptr->c;
+ res[i].g = ptr->b + ptr->c;
+ ptr++;
+ }
+
+ /* check results: */
+ for (i = 0; i < n; i++)
+ {
+ if (res[i].c != arr[i].b + arr[i].c
+ || res[i].a != arr[i].c + arr[i].f + arr[i].b
+ || res[i].d != arr[i].b + arr[i].c
+ || res[i].b != arr[i].c
+ || res[i].f != arr[i].f + arr[i].e
+ || res[i].e != arr[i].b + arr[i].e
+ || res[i].h != arr[i].c
+ || res[i].g != arr[i].b + arr[i].c)
+ abort ();
+ }
+
+ /* Check also that we don't do more iterations than needed. */
+ for (i = n; i < N; i++)
+ {
+ if (res[i].c == arr[i].b + arr[i].c
+ || res[i].a == arr[i].c + arr[i].f + arr[i].b
+ || res[i].d == arr[i].b + arr[i].c
+ || res[i].b == arr[i].c
+ || res[i].f == arr[i].f + arr[i].e
+ || res[i].e == arr[i].b + arr[i].e
+ || res[i].h == arr[i].c
+ || res[i].g == arr[i].b + arr[i].c)
+ abort ();
+ }
+
+ return 0;
+}
+
+
+int main (void)
+{
+ int i;
+ s arr[N];
+
+ check_vect ();
+
+ for (i = 0; i < N; i++)
+ {
+ arr[i].a = 5;
+ arr[i].b = 6;
+ arr[i].c = 17;
+ arr[i].d = 3;
+ arr[i].e = 16;
+ arr[i].f = 16;
+ arr[i].g = 3;
+ arr[i].h = 56;
+ if (arr[i].a == 178)
+ abort();
+ }
+
+ main1 (arr, N-2);
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */
+/* { dg-final { cleanup-tree-dump "vect" } } */
+
diff --git a/gcc/testsuite/gcc.target/mips/reg-var-1.c b/gcc/testsuite/gcc.target/mips/reg-var-1.c
new file mode 100644
index 00000000000..d8b8118103a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/mips/reg-var-1.c
@@ -0,0 +1,16 @@
+/* { dg-do run } */
+register int g asm ("$18");
+
+void __attribute__((noinline))
+test (void)
+{
+ g = g + 1;
+}
+
+int
+main (void)
+{
+ g = 2;
+ test ();
+ return g != 3;
+}
diff --git a/gcc/testsuite/gfortran.dg/operator_7.f90 b/gcc/testsuite/gfortran.dg/operator_7.f90
new file mode 100644
index 00000000000..66d8dd187ee
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/operator_7.f90
@@ -0,0 +1,27 @@
+! { dg-do compile }
+! PR fortran/45786 - operators were not correctly marked as public
+! if the alternative form was used.
+! Test case contributed by Neil Carlson.
+module foo_type
+ private
+ public :: foo, operator(==)
+ type :: foo
+ integer :: bar
+ end type
+ interface operator(.eq.)
+ module procedure eq_foo
+ end interface
+contains
+ logical function eq_foo (a, b)
+ type(foo), intent(in) :: a, b
+ eq_foo = (a%bar == b%bar)
+ end function
+end module
+
+ subroutine use_it (a, b)
+ use foo_type
+ type(foo) :: a, b
+ print *, a == b
+end subroutine
+
+! { dg-final { cleanup-modules "foo_type" } }