| // RUN: %clang_cc1 -x objective-c -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp | 
 | // RUN: %clang_cc1 -fsyntax-only -fcxx-exceptions -fexceptions  -Wno-address-of-temporary -D"SEL=void*" -D"Class=struct objc_class *" -D"__declspec(X)=" %t-rw.cpp | 
 |  | 
 | typedef struct objc_object { | 
 |     Class isa; | 
 | } *id; | 
 |  | 
 | void *sel_registerName(const char *); | 
 |  | 
 | id SYNCH_EXPR(); | 
 | void SYNCH_BODY(); | 
 | void  SYNCH_BEFORE(); | 
 | void  SYNC_AFTER(); | 
 |  | 
 | void foo(id sem) | 
 | { | 
 |   SYNCH_BEFORE(); | 
 |   @synchronized (SYNCH_EXPR()) {  | 
 |     SYNCH_BODY(); | 
 |     return; | 
 |   } | 
 |  SYNC_AFTER(); | 
 |  @synchronized ([sem self]) { | 
 |     SYNCH_BODY(); | 
 |     return; | 
 |  } | 
 | } | 
 |  | 
 | void test_sync_with_implicit_finally() { | 
 |     id foo; | 
 |     @synchronized (foo) { | 
 |         return; // The rewriter knows how to generate code for implicit finally | 
 |     } | 
 | } | 
 |  | 
 | // rdar://14993814 | 
 | @interface NSObject @end | 
 |  | 
 | @interface I : NSObject @end | 
 |  | 
 | @implementation I | 
 | + (void) Meth { | 
 | @synchronized(self) { | 
 | } | 
 | } | 
 | @end |