This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: PR java/1305: [JSR133] GCJ ignores volatile modifier


Testcase from the PR.

Andrew.


2006-06-19  Andrew Haley  <aph@redhat.com>

	* testsuite/libjava.lang/PR27908.out: New.
	* testsuite/libjava.lang/PR27908.java: New.

Index: testsuite/libjava.lang/PR27908.java
===================================================================
--- testsuite/libjava.lang/PR27908.java	(revision 0)
+++ testsuite/libjava.lang/PR27908.java	(revision 0)
@@ -0,0 +1,87 @@
+class PR27908
+{
+  public static void main (String[] argv)
+    throws InterruptedException
+  {
+    run1 r1 = new run1();
+    run2 r2 = new run2();
+    run3 r3 = new run3();
+
+    Thread t1, t2, t3;
+
+    (t1 = new Thread (r1)).start();
+    (t2 = new Thread (r2)).start();
+    (t3 = new Thread (r3)).start();
+
+    Thread.yield();
+
+    r1.stop();
+    r2.stop();
+    r3.stop();
+
+    Thread.sleep(5000);
+
+    if (t1.isAlive() || t2.isAlive() || t3.isAlive())
+      {
+	System.out.println ("fail");
+	System.exit(1);
+      }
+  }
+
+  private static class run1 implements Runnable
+  {
+    volatile int counter;
+    volatile boolean running;
+
+    public void run ()
+    {
+      counter = 0;
+      running = true;
+      while (running)
+        counter++;
+    }
+
+    private void stop ()
+    {
+      running = false;
+    }
+  }
+
+  private static class run2 implements Runnable
+  {
+    volatile int counter;
+    boolean running;
+
+    public void run ()
+    {
+      counter = 0;
+      running = true;
+      while (running)
+        counter++;
+    }
+
+    private void stop ()
+    {
+      running = false;
+    }
+  }
+
+  static class run3 implements Runnable
+  {
+    volatile int counter;
+    private volatile boolean running;
+
+    public void run ()
+    {
+      counter = 0;
+      running = true;
+      while (running)
+        counter++;
+    }
+
+    void stop ()
+    {
+      running = false;
+    }
+  }
+}
Index: testsuite/libjava.lang/PR27908.out
===================================================================


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]