[PATCH] D32029: [ObjC] Fix lifetime markers of loop variable in EmitObjCForCollectionStmt
Phabricator via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Apr 13 17:45:33 PDT 2017
This revision was automatically updated to reflect the committed changes.
Closed by commit rL300287: [ObjC] Fix lifetime markers of loop variable in EmitObjCForCollectionStmt (authored by kuba.brecka).
Changed prior to commit:
https://reviews.llvm.org/D32029?vs=95157&id=95251#toc
Repository:
rL LLVM
https://reviews.llvm.org/D32029
Files:
cfe/trunk/lib/CodeGen/CGObjC.cpp
cfe/trunk/test/CodeGenObjC/arc-foreach.m
cfe/trunk/test/CodeGenObjC/arc-ternary-op.m
Index: cfe/trunk/lib/CodeGen/CGObjC.cpp
===================================================================
--- cfe/trunk/lib/CodeGen/CGObjC.cpp
+++ cfe/trunk/lib/CodeGen/CGObjC.cpp
@@ -1469,11 +1469,6 @@
if (DI)
DI->EmitLexicalBlockStart(Builder, S.getSourceRange().getBegin());
- // The local variable comes into scope immediately.
- AutoVarEmission variable = AutoVarEmission::invalid();
- if (const DeclStmt *SD = dyn_cast<DeclStmt>(S.getElement()))
- variable = EmitAutoVarAlloca(*cast<VarDecl>(SD->getSingleDecl()));
-
JumpDest LoopEnd = getJumpDestInCurrentScope("forcoll.end");
// Fast enumeration state.
@@ -1625,8 +1620,10 @@
bool elementIsVariable;
LValue elementLValue;
QualType elementType;
+ AutoVarEmission variable = AutoVarEmission::invalid();
if (const DeclStmt *SD = dyn_cast<DeclStmt>(S.getElement())) {
// Initialize the variable, in case it's a __block variable or something.
+ variable = EmitAutoVarAlloca(*cast<VarDecl>(SD->getSingleDecl()));
EmitAutoVarInit(variable);
const VarDecl* D = cast<VarDecl>(SD->getSingleDecl());
Index: cfe/trunk/test/CodeGenObjC/arc-foreach.m
===================================================================
--- cfe/trunk/test/CodeGenObjC/arc-foreach.m
+++ cfe/trunk/test/CodeGenObjC/arc-foreach.m
@@ -24,9 +24,9 @@
// CHECK-LP64-LABEL: define void @test0(
// CHECK-LP64: [[ARRAY:%.*]] = alloca [[ARRAY_T:%.*]]*,
-// CHECK-LP64-NEXT: [[X:%.*]] = alloca i8*,
// CHECK-LP64-NEXT: [[STATE:%.*]] = alloca [[STATE_T:%.*]],
// CHECK-LP64-NEXT: [[BUFFER:%.*]] = alloca [16 x i8*], align 8
+// CHECK-LP64-NEXT: [[X:%.*]] = alloca i8*,
// CHECK-LP64-NEXT: [[BLOCK:%.*]] = alloca [[BLOCK_T:<{.*}>]],
// Initialize 'array'.
@@ -97,9 +97,9 @@
// CHECK-LP64-LABEL: define void @test1(
// CHECK-LP64: alloca [[ARRAY_T:%.*]]*,
-// CHECK-LP64-NEXT: [[X:%.*]] = alloca i8*,
// CHECK-LP64-NEXT: [[STATE:%.*]] = alloca [[STATE_T:%.*]],
// CHECK-LP64-NEXT: alloca [16 x i8*], align 8
+// CHECK-LP64-NEXT: [[X:%.*]] = alloca i8*,
// CHECK-LP64-NEXT: [[BLOCK:%.*]] = alloca [[BLOCK_T:<{.*}>]],
// CHECK-LP64: [[T0:%.*]] = getelementptr inbounds [[STATE_T]], [[STATE_T]]* [[STATE]], i32 0, i32 1
@@ -160,7 +160,7 @@
// CHECK-LP64-LABEL: define void @test3(
// CHECK-LP64: [[ARRAY:%.*]] = alloca [[ARRAY_T]]*, align 8
- // CHECK-LP64-NEXT: [[X:%.*]] = alloca i8*, align 8
+ // CHECK-LP64: [[X:%.*]] = alloca i8*, align 8
// CHECK-LP64: [[T0:%.*]] = load i8*, i8** [[X]], align 8
// CHECK-LP64-NEXT: [[T1:%.*]] = icmp ne i8* [[T0]], null
// CHECK-LP64-NEXT: br i1 [[T1]],
Index: cfe/trunk/test/CodeGenObjC/arc-ternary-op.m
===================================================================
--- cfe/trunk/test/CodeGenObjC/arc-ternary-op.m
+++ cfe/trunk/test/CodeGenObjC/arc-ternary-op.m
@@ -120,9 +120,9 @@
// CHECK-LABEL: define void @test2(
// CHECK: [[COND:%.*]] = alloca i32,
- // CHECK: alloca i8*
// CHECK: [[CLEANUP_SAVE:%.*]] = alloca i8*
// CHECK: [[RUN_CLEANUP:%.*]] = alloca i1
+ // CHECK: alloca i8*
// Evaluate condition; cleanup disabled by default.
// CHECK: [[T0:%.*]] = load i32, i32* [[COND]],
// CHECK-NEXT: icmp ne i32 [[T0]], 0
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D32029.95251.patch
Type: text/x-patch
Size: 3276 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170414/20fc3ce8/attachment.bin>
More information about the cfe-commits
mailing list