From: Fariborz Jahanian Date: Tue, 28 Oct 2014 23:46:58 +0000 (+0000) Subject: Objective-C modern rewriter. Patch to fix a rewriting bug X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a61c9c98319fa18db0856b5fc1ce0490e61dc06a;p=clang Objective-C modern rewriter. Patch to fix a rewriting bug rewriting an Objective-C block. Patch by Ryan Govostes. rdar://18799145 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@220834 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Frontend/Rewrite/RewriteModernObjC.cpp b/lib/Frontend/Rewrite/RewriteModernObjC.cpp index 3c48de2b4a..bcfba22668 100644 --- a/lib/Frontend/Rewrite/RewriteModernObjC.cpp +++ b/lib/Frontend/Rewrite/RewriteModernObjC.cpp @@ -5526,6 +5526,10 @@ Stmt *RewriteModernObjC::SynthBlockInitExpr(BlockExpr *Exp, VK_RValue, OK_Ordinary, SourceLocation()); NewRep = NoTypeInfoCStyleCastExpr(Context, FType, CK_BitCast, NewRep); + // Put Paren around the call. + NewRep = new (Context) ParenExpr(SourceLocation(), SourceLocation(), + NewRep); + BlockDeclRefs.clear(); BlockByRefDecls.clear(); BlockByRefDeclsPtrSet.clear(); diff --git a/test/Rewriter/rewrite-block-literal.mm b/test/Rewriter/rewrite-block-literal.mm index 43f581125b..cde6efcbf2 100644 --- a/test/Rewriter/rewrite-block-literal.mm +++ b/test/Rewriter/rewrite-block-literal.mm @@ -70,7 +70,7 @@ static int global_x = 10; void (^global_block)(void) = ^{ printf("global x is %d\n", global_x); }; // CHECK: static __global_block_block_impl_0 __global_global_block_block_impl_0((void *)__global_block_block_func_0, &__global_block_block_desc_0_DATA); -// CHECK: void (*global_block)(void) = (void (*)())&__global_global_block_block_impl_0; +// CHECK: void (*global_block)(void) = ((void (*)())&__global_global_block_block_impl_0); typedef void (^void_block_t)(void); diff --git a/test/Rewriter/rewrite-modern-block.mm b/test/Rewriter/rewrite-modern-block.mm index 23029654c9..926ee36f1a 100644 --- a/test/Rewriter/rewrite-modern-block.mm +++ b/test/Rewriter/rewrite-modern-block.mm @@ -63,3 +63,6 @@ z w(int loc, int len); options &= ~(1 | 2); } @end + +// rdar://18799145 +int Test18799145() { return ^(){return 0;}(); } diff --git a/test/Rewriter/rewrite-modern-captured-nested-bvar.mm b/test/Rewriter/rewrite-modern-captured-nested-bvar.mm index a8fd180733..be7548c778 100644 --- a/test/Rewriter/rewrite-modern-captured-nested-bvar.mm +++ b/test/Rewriter/rewrite-modern-captured-nested-bvar.mm @@ -32,4 +32,4 @@ int main() { // CHECK 2: (__Block_byref_BYREF_VAR_CHECK_0 *)BYREF_VAR_CHECK // CHECK: {(void*)0,(__Block_byref_BYREF_VAR_CHECK_0 *)&BYREF_VAR_CHECK, 0, sizeof(__Block_byref_BYREF_VAR_CHECK_0), 'a'} -// CHECK: __Block_byref_BYREF_VAR_CHECK_0 *)&BYREF_VAR_CHECK, (__Block_byref_d_1 *)&d, 570425344)); +// CHECK: __Block_byref_BYREF_VAR_CHECK_0 *)&BYREF_VAR_CHECK, (__Block_byref_d_1 *)&d, 570425344)));