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
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
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits