зеркало из https://github.com/microsoft/clang-1.git
Don't assert when we think we need copy/dispose, but don't need them.
Radar 6838889 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70525 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
bad3a94d50
Коммит
dd2fb9c5eb
|
@ -158,6 +158,8 @@ llvm::Value *CodeGenFunction::BuildBlockLiteralTmp(const BlockExpr *BE) {
|
|||
BlockHasCopyDispose |= subBlockHasCopyDispose;
|
||||
Elts[3] = Fn;
|
||||
|
||||
// FIXME: Don't use BlockHasCopyDispose, it is set more often then necessary, for
|
||||
// example: { ^{ __block int i; ^{ i = 1; }(); }(); }
|
||||
if (subBlockHasCopyDispose)
|
||||
flags |= BLOCK_HAS_COPY_DISPOSE;
|
||||
|
||||
|
@ -557,7 +559,6 @@ BlockModule::GetAddrOfGlobalBlock(const BlockExpr *BE, const char * n) {
|
|||
subBlockHasCopyDispose);
|
||||
assert(subBlockSize == BlockLiteralSize
|
||||
&& "no imports allowed for global block");
|
||||
assert(!subBlockHasCopyDispose && "no imports allowed for global block");
|
||||
|
||||
// isa
|
||||
LiteralFields[0] = getNSConcreteGlobalBlock();
|
||||
|
|
|
@ -22,5 +22,9 @@ void *P = ^{
|
|||
void *Q = __func__;
|
||||
};
|
||||
|
||||
void (^test1)(void) = ^(void) {
|
||||
__block int i;
|
||||
^ { i = 1; }();
|
||||
};
|
||||
|
||||
// RUN: true
|
||||
|
|
Загрузка…
Ссылка в новой задаче