Index: lib/Sema/SemaLambda.cpp =================================================================== --- lib/Sema/SemaLambda.cpp (revision 217960) +++ lib/Sema/SemaLambda.cpp (working copy) @@ -1572,14 +1572,20 @@ CallOperator->setReferenced(); CallOperator->markUsed(Context); - ExprResult Init = PerformCopyInitialization( - InitializedEntity::InitializeBlock(ConvLocation, - Src->getType(), - /*NRVO=*/false), - CurrentLocation, Src); - if (!Init.isInvalid()) - Init = ActOnFinishFullExpr(Init.get()); + ExprResult Init; + { + EnterExpressionEvaluationContext evalContext(*this, Sema::PotentiallyEvaluated); + ExprNeedsCleanups = !Lambda->hasTrivialDestructor(); + Init = PerformCopyInitialization( + InitializedEntity::InitializeBlock(ConvLocation, + Src->getType(), + /*NRVO=*/false), + CurrentLocation, Src); + if (!Init.isInvalid()) + Init = ActOnFinishFullExpr(Init.get()); + } + if (Init.isInvalid()) return ExprError(); Index: test/CodeGenObjCXX/lambda-in-objc-literals.mm =================================================================== --- test/CodeGenObjCXX/lambda-in-objc-literals.mm (revision 0) +++ test/CodeGenObjCXX/lambda-in-objc-literals.mm (working copy) @@ -0,0 +1,52 @@ +// RUN: %clang_cc1 -triple x86_64-apple-darwin10.0.0 -emit-llvm -o - %s -fexceptions -std=c++11 -fblocks +// rdar://16879958 + +@protocol NSCopying @end +typedef unsigned long NSUInteger; +typedef long NSInteger; + +@interface NSDictionary ++ (id)dictionaryWithObjects:(const id [])objects forKeys:(const id [])keys count:(NSUInteger)cnt; +- (void)setObject:(id)object forKeyedSubscript:(id)key; +- (id)objectForKeyedSubscript:(id)key; ++ (id) alloc; +- (id)initWithObjects:(const id [])objects forKeys:(const id [])keys count:(unsigned long)cnt; +@end + +@interface NSString +@end + + +@class NSFastEnumerationState; + +@protocol NSFastEnumeration + +- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id [])buffer count:(NSUInteger)len; + +@end + +@interface NSNumber ++ (NSNumber *)numberWithInt:(int)value; +@end + +@interface NSArray ++ (id) alloc; ++ (id)arrayWithObjects:(const id [])objects count:(NSUInteger)cnt; +@end + +id test_dict() +{ + return @{ + @"a": [](){}, + @"b": [](){}, + @"c": [](){} + }; +} + +id test_arr() +{ + return @[ + [](){}, + [](){} + ]; +}