diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 2d088b68b5e806a53fe85b3f7aac87925103c5af..0fcc366c937cfb488bcee804c340105311795503 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,12 @@
+2004-04-05  Paul Brook  <paul@codesourcery.com>
+
+	PR2123
+	* g++.gd/expr/anew1.C: XFAIL and make reproducible.  Call abort on
+	failure and exit(0) on success.
+	* g++.gd/expr/anew2.C: Ditto.
+	* g++.gd/expr/anew3.C: Ditto.
+	* g++.gd/expr/anew4.C: Ditto. 
+
 2004-04-05  Nathan Sidwell  <nathan@codesourcery.com>
 
 	PR c++/3518
diff --git a/gcc/testsuite/g++.dg/expr/anew1.C b/gcc/testsuite/g++.dg/expr/anew1.C
index a14408ace0ab23b2f2197cb5c010d3f458c9be8d..9e0d0ec601f9512c50426152307fc9c6cb9243f1 100644
--- a/gcc/testsuite/g++.dg/expr/anew1.C
+++ b/gcc/testsuite/g++.dg/expr/anew1.C
@@ -1,12 +1,20 @@
-// { dg-do run }
+// { dg-do run { xfail *-*-* } }
+// XFAILed until PR2123 is fixed
 // PR 11228: array operator new, with zero-initialization and a variable sized array.
 // Regression test for PR 
 // Author: Matt Austern <austern@apple.com>
 
 
+#include <new>
+#include <stdlib.h>
+#include <string.h>
+
 int* allocate(int n)
 {
-  return new int[n]();
+  void *p;
+  p = malloc(n * sizeof (int));
+  memset (p, 0xff, n * sizeof(int));
+  return new (p) int[n]();
 }
 
 int main()
@@ -15,6 +23,6 @@ int main()
   int* p = allocate(n);
   for (int i = 0; i < n; ++i)
     if (p[i] != 0)
-      return 1;
-  return 0;
+      abort ();
+  exit (0);
 }
diff --git a/gcc/testsuite/g++.dg/expr/anew2.C b/gcc/testsuite/g++.dg/expr/anew2.C
index b8681897577b0cf5113a23f1166a38306393b0b9..aa11eef149ca50057f8038bdc6f5bca0760f1264 100644
--- a/gcc/testsuite/g++.dg/expr/anew2.C
+++ b/gcc/testsuite/g++.dg/expr/anew2.C
@@ -1,12 +1,20 @@
-// { dg-do run }
+// { dg-do run { xfail *-*-* } }
+// XFAILed until PR2123 is fixed
 // PR 11228: array operator new, with zero-initialization and a variable sized array.
 // Regression test for PR 
 // Author: Matt Austern <austern@apple.com>
 
 
+#include <new>
+#include <stdlib.h>
+#include <string.h>
+
 double* allocate(int n)
 {
-  return new double[n]();
+  void *p;
+  p = malloc(n * sizeof (double));
+  memset (p, 0xff, n * sizeof(double));
+  return new (p) double[n]();
 }
 
 int main()
@@ -15,6 +23,6 @@ int main()
   double* p = allocate(n);
   for (int i = 0; i < n; ++i)
     if (p[i] != 0.0)
-      return 1;
-  return 0;
+      abort ();
+  exit (0);
 }
diff --git a/gcc/testsuite/g++.dg/expr/anew3.C b/gcc/testsuite/g++.dg/expr/anew3.C
index 3223546d4c8da8f780f76b3a964c847e8aa7c04b..c8ab44183ca5fa0a84347251b82de43719e7cfcf 100644
--- a/gcc/testsuite/g++.dg/expr/anew3.C
+++ b/gcc/testsuite/g++.dg/expr/anew3.C
@@ -1,8 +1,13 @@
-// { dg-do run }
+// { dg-do run { xfail *-*-* } }
+// XFAILed until PR2123 is fixed
 // PR 11228: array operator new, with zero-initialization and a variable sized array.
 // Regression test for PR 
 // Author: Matt Austern <austern@apple.com>
 
+#include <new>
+#include <stdlib.h>
+#include <string.h>
+
 struct X
 {
   int a;
@@ -11,7 +16,10 @@ struct X
 
 X* allocate(int n)
 {
-  return new X[n]();
+  void *p;
+  p = malloc(n * sizeof (X));
+  memset (p, 0xff, n * sizeof(X));
+  return new (p) X[n]();
 }
 
 int main()
@@ -20,6 +28,6 @@ int main()
   X* p = allocate(n);
   for (int i = 0; i < n; ++i)
     if (p[i].a != 0 || p[i].b != 0.0)
-      return 1;
-  return 0;
+      abort ();
+  exit (0);
 }
diff --git a/gcc/testsuite/g++.dg/expr/anew4.C b/gcc/testsuite/g++.dg/expr/anew4.C
index 8999ffb53c6d7162f2b5f597d1697ea9c8e28953..d86d52514121768447eda7b542a0fe30c612ed87 100644
--- a/gcc/testsuite/g++.dg/expr/anew4.C
+++ b/gcc/testsuite/g++.dg/expr/anew4.C
@@ -1,8 +1,13 @@
-// { dg-do run }
+// { dg-do run { xfail *-*-* } }
+// XFAILed until PR2123 is fixed
 // PR 11228: array operator new, with zero-initialization and a variable sized array.
 // Regression test for PR 
 // Author: Matt Austern <austern@apple.com>
 
+#include <new>
+#include <stdlib.h>
+#include <string.h>
+
 struct B
 {
   B();
@@ -23,7 +28,10 @@ struct D : public B
 
 D* allocate(int n)
 {
-  return new D[n]();
+  void *p;
+  p = malloc(n * sizeof (D));
+  memset (p, 0xff, n * sizeof(D));
+  return new (p) D[n]();
 }
 
 int main()
@@ -32,6 +40,6 @@ int main()
   D* p = allocate(n);
   for (int i = 0; i < n; ++i)
     if (p[i].n != 137 || p[i].x != 0)
-      return 1;
-  return 0;
+      abort ();
+  exit (0);
 }