1*67e74705SXin Li// RUN: %clang_cc1 -x objective-c -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp 2*67e74705SXin Li// 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 3*67e74705SXin Li 4*67e74705SXin Litypedef struct objc_object { 5*67e74705SXin Li Class isa; 6*67e74705SXin Li} *id; 7*67e74705SXin Li 8*67e74705SXin Livoid *sel_registerName(const char *); 9*67e74705SXin Li 10*67e74705SXin Liid SYNCH_EXPR(); 11*67e74705SXin Livoid SYNCH_BODY(); 12*67e74705SXin Livoid SYNCH_BEFORE(); 13*67e74705SXin Livoid SYNC_AFTER(); 14*67e74705SXin Li 15*67e74705SXin Livoid foo(id sem) 16*67e74705SXin Li{ 17*67e74705SXin Li SYNCH_BEFORE(); 18*67e74705SXin Li @synchronized (SYNCH_EXPR()) { 19*67e74705SXin Li SYNCH_BODY(); 20*67e74705SXin Li return; 21*67e74705SXin Li } 22*67e74705SXin Li SYNC_AFTER(); 23*67e74705SXin Li @synchronized ([sem self]) { 24*67e74705SXin Li SYNCH_BODY(); 25*67e74705SXin Li return; 26*67e74705SXin Li } 27*67e74705SXin Li} 28*67e74705SXin Li 29*67e74705SXin Livoid test_sync_with_implicit_finally() { 30*67e74705SXin Li id foo; 31*67e74705SXin Li @synchronized (foo) { 32*67e74705SXin Li return; // The rewriter knows how to generate code for implicit finally 33*67e74705SXin Li } 34*67e74705SXin Li} 35*67e74705SXin Li 36*67e74705SXin Li// rdar://14993814 37*67e74705SXin Li@interface NSObject @end 38*67e74705SXin Li 39*67e74705SXin Li@interface I : NSObject @end 40*67e74705SXin Li 41*67e74705SXin Li@implementation I 42*67e74705SXin Li+ (void) Meth { 43*67e74705SXin Li@synchronized(self) { 44*67e74705SXin Li} 45*67e74705SXin Li} 46*67e74705SXin Li@end 47