This revision was automatically updated to reflect the committed changes. Closed by commit rL268527: [ObjC] Enter a new evaluation context before calling (authored by ahatanak).
Changed prior to commit: http://reviews.llvm.org/D18815?vs=56092&id=56178#toc Repository: rL LLVM http://reviews.llvm.org/D18815 Files: cfe/trunk/lib/Sema/SemaExprCXX.cpp cfe/trunk/test/SemaObjCXX/block-cleanup.mm Index: cfe/trunk/test/SemaObjCXX/block-cleanup.mm =================================================================== --- cfe/trunk/test/SemaObjCXX/block-cleanup.mm +++ cfe/trunk/test/SemaObjCXX/block-cleanup.mm @@ -0,0 +1,16 @@ +// RUN: %clang_cc1 -triple x86_64-apple-macosx10.11.0 -std=gnu++11 -o /dev/null -x objective-c++ -fblocks -ast-dump %s 2>&1 | FileCheck %s + +// CHECK: -FunctionDecl {{.*}} test 'id (void)' +// CHECK-NEXT: -CompoundStmt +// CHECK-NEXT: -ReturnStmt +// CHECK-NEXT: -ExprWithCleanups +// CHECK-NEXT: -cleanup Block +// CHECK-NEXT: -cleanup Block + +@interface NSDictionary ++ (id)dictionaryWithObjects:(const id [])objects forKeys:(const id [])keys count:(unsigned long)cnt; +@end + +id test() { + return @{@"a": [](){}, @"b": [](){}}; +} Index: cfe/trunk/lib/Sema/SemaExprCXX.cpp =================================================================== --- cfe/trunk/lib/Sema/SemaExprCXX.cpp +++ cfe/trunk/lib/Sema/SemaExprCXX.cpp @@ -6229,9 +6229,12 @@ // follows the normal lifetime rules for block literals instead of being // autoreleased. DiagnosticErrorTrap Trap(Diags); + PushExpressionEvaluationContext(PotentiallyEvaluated); ExprResult Exp = BuildBlockForLambdaConversion(E->getExprLoc(), E->getExprLoc(), Method, E); + PopExpressionEvaluationContext(); + if (Exp.isInvalid()) Diag(E->getExprLoc(), diag::note_lambda_to_block_conv); return Exp;
Index: cfe/trunk/test/SemaObjCXX/block-cleanup.mm =================================================================== --- cfe/trunk/test/SemaObjCXX/block-cleanup.mm +++ cfe/trunk/test/SemaObjCXX/block-cleanup.mm @@ -0,0 +1,16 @@ +// RUN: %clang_cc1 -triple x86_64-apple-macosx10.11.0 -std=gnu++11 -o /dev/null -x objective-c++ -fblocks -ast-dump %s 2>&1 | FileCheck %s + +// CHECK: -FunctionDecl {{.*}} test 'id (void)' +// CHECK-NEXT: -CompoundStmt +// CHECK-NEXT: -ReturnStmt +// CHECK-NEXT: -ExprWithCleanups +// CHECK-NEXT: -cleanup Block +// CHECK-NEXT: -cleanup Block + +@interface NSDictionary ++ (id)dictionaryWithObjects:(const id [])objects forKeys:(const id [])keys count:(unsigned long)cnt; +@end + +id test() { + return @{@"a": [](){}, @"b": [](){}}; +} Index: cfe/trunk/lib/Sema/SemaExprCXX.cpp =================================================================== --- cfe/trunk/lib/Sema/SemaExprCXX.cpp +++ cfe/trunk/lib/Sema/SemaExprCXX.cpp @@ -6229,9 +6229,12 @@ // follows the normal lifetime rules for block literals instead of being // autoreleased. DiagnosticErrorTrap Trap(Diags); + PushExpressionEvaluationContext(PotentiallyEvaluated); ExprResult Exp = BuildBlockForLambdaConversion(E->getExprLoc(), E->getExprLoc(), Method, E); + PopExpressionEvaluationContext(); + if (Exp.isInvalid()) Diag(E->getExprLoc(), diag::note_lambda_to_block_conv); return Exp;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits