From: Fariborz Jahanian Date: Tue, 17 Sep 2013 17:51:48 +0000 (+0000) Subject: ObjectiveC modern translator: Provide proper cast of X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=786e56f5b49fb5f1a4314629a1b80c9308ead28e;p=clang ObjectiveC modern translator: Provide proper cast of the ObjectiveC object of an @synchronized statement. // rdar://14993814 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@190874 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Rewrite/Frontend/RewriteModernObjC.cpp b/lib/Rewrite/Frontend/RewriteModernObjC.cpp index 697d1009fa..ecd509610a 100644 --- a/lib/Rewrite/Frontend/RewriteModernObjC.cpp +++ b/lib/Rewrite/Frontend/RewriteModernObjC.cpp @@ -1904,7 +1904,7 @@ Stmt *RewriteModernObjC::RewriteObjCSynchronizedStmt(ObjCAtSynchronizedStmt *S) std::string buf; SourceLocation SynchLoc = S->getAtSynchronizedLoc(); ConvertSourceLocationToLineDirective(SynchLoc, buf); - buf += "{ id _rethrow = 0; id _sync_obj = "; + buf += "{ id _rethrow = 0; id _sync_obj = (id)"; const char *lparenBuf = startBuf; while (*lparenBuf != '(') lparenBuf++; diff --git a/test/Rewriter/rewrite-modern-synchronized.m b/test/Rewriter/rewrite-modern-synchronized.m index e895339303..17c8e9a4ad 100644 --- a/test/Rewriter/rewrite-modern-synchronized.m +++ b/test/Rewriter/rewrite-modern-synchronized.m @@ -1,7 +1,6 @@ // 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"__declspec(X)=" %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_class *Class; typedef struct objc_object { Class isa; } *id; @@ -33,3 +32,15 @@ void test_sync_with_implicit_finally() { 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