diff mbox

=?UTF-8?Q?Re:=20GNU=20Objective-C=20runtime=20support=20for=20@synchroni?= =?UTF-8?Q?zed()?=

Message ID 1285315479.6973093@192.168.2.230
State New
Headers show

Commit Message

Nicola Pero Sept. 24, 2010, 8:04 a.m. UTC
Andrew

(responding to an old email of yours that was stuck in my TODO list)

> I forgot to mention this is PR 23680.  And can you add a testcase or two?

Yes, good idea - today I added a testcase for @synchronized().  This should help
flagging up if changes in the compiler break something basic in @synchronized().

It won't test much of the runtime implementation of @synchronized(); testing 
that properly would require starting up lots of different threads 
etc.  I do have such tests which I used while implementing the runtime support, but 
it is not trivial to integrate them into the testsuite (to start with, I don't think
we have anything to run ObjC tests in multithreading [by linking the appropriate thread
library] - all tests run in single-thread mode at the moment [since they don't link
any threading library]).  And serious threading tests are very expensive to run as you 
have to have lots of threads doing a lot to try catch any synchronization issues. :-(

What we have should be enough for now. :-)

Thanks
diff mbox

Patch

Index: ChangeLog
===================================================================
--- ChangeLog   (revision 164584)
+++ ChangeLog   (working copy)
@@ -1,3 +1,8 @@ 
+2010-09-24  Nicola Pero  <nicola.pero@meta-innovation.com>
+
+       * objc.dg/sync-2.m: New test.
+       * obj-c++.dg/sync-2.mm: New test.
+
 2010-09-24  Tobias Burnus  <burnus@net-b.de>
 
        PR fortran/40571
Index: objc.dg/sync-2.m
===================================================================
--- objc.dg/sync-2.m    (revision 0)
+++ objc.dg/sync-2.m    (revision 0)
@@ -0,0 +1,35 @@ 
+/* Make sure that @synchronized parses and a very basic test runs.  */
+/* { dg-options "-fobjc-exceptions -fgnu-runtime" } */
+
+#include "../objc-obj-c++-shared/Object1.h"
+
+int main (void)
+{
+  Object *a = [Object new];
+  Object *b = [Object new];
+  Object *c = [Object new];
+
+  /* This single-threaded test just checks that @synchronized() uses a
+     recursive mutex, and that the runtime at least doesn't crash
+     immediately upon finding it.
+  */
+  @synchronized (a)
+    {
+      @synchronized (a)
+       {
+         @synchronized (b)
+           {
+             @synchronized (b)
+               {
+                 @synchronized (c)
+                   {
+                     @synchronized (c)
+                       {
+                         return 0;
+                       }
+                   }
+               }
+           }
+       }
+    }
+}
Index: obj-c++.dg/sync-2.mm
===================================================================
--- obj-c++.dg/sync-2.mm        (revision 0)
+++ obj-c++.dg/sync-2.mm        (revision 0)
@@ -0,0 +1,35 @@ 
+/* Make sure that @synchronized parses and a very basic test runs.  */
+/* { dg-options "-fobjc-exceptions -fgnu-runtime" } */
+
+#include "../objc-obj-c++-shared/Object1.h"
+
+int main (void)
+{
+  Object *a = [Object new];
+  Object *b = [Object new];
+  Object *c = [Object new];
+
+  /* This single-threaded test just checks that @synchronized() uses a
+     recursive mutex, and that the runtime at least doesn't crash
+     immediately upon finding it.
+  */
+  @synchronized (a)
+    {
+      @synchronized (a)
+       {
+         @synchronized (b)
+           {
+             @synchronized (b)
+               {
+                 @synchronized (c)
+                   {
+                     @synchronized (c)
+                       {
+                         return 0;
+                       }
+                   }
+               }
+           }
+       }
+    }