Author: ahatanak Date: Thu Apr 26 22:56:55 2018 New Revision: 331019 URL: http://llvm.org/viewvc/llvm-project?rev=331019&view=rev Log: Revert "[CodeGen] Avoid destructing a callee-destructued struct type in a"
This reverts commit r331016, which broke a windows bot. http://lab.llvm.org:8011/builders/clang-x86-windows-msvc2015/builds/11727 Modified: cfe/trunk/lib/CodeGen/CGCall.cpp cfe/trunk/lib/CodeGen/CGCleanup.cpp cfe/trunk/lib/CodeGen/CGDecl.cpp cfe/trunk/lib/CodeGen/CodeGenFunction.h cfe/trunk/test/CodeGenObjCXX/arc-forwarded-lambda-call.mm cfe/trunk/test/CodeGenObjCXX/arc-special-member-functions.mm cfe/trunk/test/CodeGenObjCXX/lambda-expressions.mm Modified: cfe/trunk/lib/CodeGen/CGCall.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGCall.cpp?rev=331019&r1=331018&r2=331019&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/CGCall.cpp (original) +++ cfe/trunk/lib/CodeGen/CGCall.cpp Thu Apr 26 22:56:55 2018 @@ -3063,22 +3063,6 @@ void CodeGenFunction::EmitDelegateCallAr } else { args.add(convertTempToRValue(local, type, loc), type); } - - // Deactivate the cleanup for the callee-destructed param that was pushed. - if (hasAggregateEvaluationKind(type) && - getContext().isParamDestroyedInCallee(type)) { - EHScopeStack::stable_iterator cleanup = - CalleeDestructedParamCleanups.lookup(cast<ParmVarDecl>(param)); - if (cleanup.isValid()) { - // This unreachable is a temporary marker which will be removed later. - llvm::Instruction *isActive = Builder.CreateUnreachable(); - args.addArgCleanupDeactivation(cleanup, isActive); - } else - // A param cleanup should have been pushed unless we are code-generating - // a thunk. - assert(CurFuncIsThunk && - "cleanup for callee-destructed param not recorded"); - } } static bool isProvablyNull(llvm::Value *addr) { Modified: cfe/trunk/lib/CodeGen/CGCleanup.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGCleanup.cpp?rev=331019&r1=331018&r2=331019&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/CGCleanup.cpp (original) +++ cfe/trunk/lib/CodeGen/CGCleanup.cpp Thu Apr 26 22:56:55 2018 @@ -1233,10 +1233,8 @@ void CodeGenFunction::DeactivateCleanupB EHCleanupScope &Scope = cast<EHCleanupScope>(*EHStack.find(C)); assert(Scope.isActive() && "double deactivation"); - // If it's the top of the stack, just pop it, but do so only if it belongs - // to the current RunCleanupsScope. - if (C == EHStack.stable_begin() && - CurrentCleanupScopeDepth.strictlyEncloses(C)) { + // If it's the top of the stack, just pop it. + if (C == EHStack.stable_begin()) { // If it's a normal cleanup, we need to pretend that the // fallthrough is unreachable. CGBuilderTy::InsertPoint SavedIP = Builder.saveAndClearIP(); Modified: cfe/trunk/lib/CodeGen/CGDecl.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDecl.cpp?rev=331019&r1=331018&r2=331019&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/CGDecl.cpp (original) +++ cfe/trunk/lib/CodeGen/CGDecl.cpp Thu Apr 26 22:56:55 2018 @@ -1962,8 +1962,6 @@ void CodeGenFunction::EmitParmDecl(const DtorKind == QualType::DK_nontrivial_c_struct) && "unexpected destructor type"); pushDestroy(DtorKind, DeclPtr, Ty); - CalleeDestructedParamCleanups[cast<ParmVarDecl>(&D)] = - EHStack.stable_begin(); } } } else { Modified: cfe/trunk/lib/CodeGen/CodeGenFunction.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenFunction.h?rev=331019&r1=331018&r2=331019&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/CodeGenFunction.h (original) +++ cfe/trunk/lib/CodeGen/CodeGenFunction.h Thu Apr 26 22:56:55 2018 @@ -587,7 +587,7 @@ public: /// \brief Enters a new scope for capturing cleanups, all of which /// will be executed once the scope is exited. class RunCleanupsScope { - EHScopeStack::stable_iterator CleanupStackDepth, OldCleanupScopeDepth; + EHScopeStack::stable_iterator CleanupStackDepth; size_t LifetimeExtendedCleanupStackSize; bool OldDidCallStackSave; protected: @@ -610,8 +610,6 @@ public: CGF.LifetimeExtendedCleanupStack.size(); OldDidCallStackSave = CGF.DidCallStackSave; CGF.DidCallStackSave = false; - OldCleanupScopeDepth = CGF.CurrentCleanupScopeDepth; - CGF.CurrentCleanupScopeDepth = CleanupStackDepth; } /// \brief Exit this cleanup scope, emitting any accumulated cleanups. @@ -637,14 +635,9 @@ public: CGF.PopCleanupBlocks(CleanupStackDepth, LifetimeExtendedCleanupStackSize, ValuesToReload); PerformCleanup = false; - CGF.CurrentCleanupScopeDepth = OldCleanupScopeDepth; } }; - // Cleanup stack depth of the RunCleanupsScope that was pushed most recently. - EHScopeStack::stable_iterator CurrentCleanupScopeDepth = - EHScopeStack::stable_end(); - class LexicalScope : public RunCleanupsScope { SourceRange Range; SmallVector<const LabelDecl*, 4> Labels; @@ -1102,11 +1095,6 @@ private: /// decls. DeclMapTy LocalDeclMap; - // Keep track of the cleanups for callee-destructed parameters pushed to the - // cleanup stack so that they can be deactivated later. - llvm::DenseMap<const ParmVarDecl *, EHScopeStack::stable_iterator> - CalleeDestructedParamCleanups; - /// SizeArguments - If a ParmVarDecl had the pass_object_size attribute, this /// will contain a mapping from said ParmVarDecl to its implicit "object_size" /// parameter. Modified: cfe/trunk/test/CodeGenObjCXX/arc-forwarded-lambda-call.mm URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjCXX/arc-forwarded-lambda-call.mm?rev=331019&r1=331018&r2=331019&view=diff ============================================================================== --- cfe/trunk/test/CodeGenObjCXX/arc-forwarded-lambda-call.mm (original) +++ cfe/trunk/test/CodeGenObjCXX/arc-forwarded-lambda-call.mm Thu Apr 26 22:56:55 2018 @@ -10,17 +10,6 @@ void test0(id x) { // CHECK-NEXT: ret i8* [[T2]] } -// Check that the delegating block invoke function doesn't destruct the Weak -// object that is passed. - -// CHECK-LABEL: define internal void @___Z8testWeakv_block_invoke( -// CHECK: call void @"_ZZ8testWeakvENK3$_2clE4Weak"( -// CHECK-NEXT: ret void - -// CHECK-LABEL: define internal void @"_ZZ8testWeakvENK3$_2clE4Weak"( -// CHECK: call void @_ZN4WeakD1Ev( -// CHECK-NEXT: ret void - id test1_rv; void test1() { @@ -32,12 +21,3 @@ void test1() { // CHECK-NEXT: [[T2:%.*]] = tail call i8* @objc_autoreleaseReturnValue(i8* [[T1]]) // CHECK-NEXT: ret i8* [[T2]] } - -struct Weak { - __weak id x; -}; - -void testWeak() { - extern void testWeak_helper(void (^)(Weak)); - testWeak_helper([](Weak){}); -} Modified: cfe/trunk/test/CodeGenObjCXX/arc-special-member-functions.mm URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjCXX/arc-special-member-functions.mm?rev=331019&r1=331018&r2=331019&view=diff ============================================================================== --- cfe/trunk/test/CodeGenObjCXX/arc-special-member-functions.mm (original) +++ cfe/trunk/test/CodeGenObjCXX/arc-special-member-functions.mm Thu Apr 26 22:56:55 2018 @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -std=c++11 -fobjc-arc -fblocks -triple x86_64-apple-darwin10.0.0 -fobjc-runtime-has-weak -emit-llvm -o - %s | FileCheck %s +// RUN: %clang_cc1 -fobjc-arc -fblocks -triple x86_64-apple-darwin10.0.0 -emit-llvm -o - %s | FileCheck %s struct ObjCMember { id member; @@ -12,59 +12,6 @@ struct ObjCBlockMember { int (^bp)(int); }; -// CHECK: %[[STRUCT_CONTAINSWEAK:.*]] = type { %[[STRUCT_WEAK:.*]] } -// CHECK: %[[STRUCT_WEAK]] = type { i8* } - -// The Weak object that is passed is destructed in this constructor. - -// CHECK: define void @_ZN12ContainsWeakC2E4Weak( -// CHECK: call void @_ZN4WeakC1ERKS_( -// CHECK: call void @_ZN4WeakD1Ev( - -// Check that the Weak object passed to this constructor is not destructed after -// the delegate constructor is called. - -// CHECK: define void @_ZN12ContainsWeakC1E4Weak( -// CHECK: call void @_ZN12ContainsWeakC2E4Weak( -// CHECK-NEXT: ret void - -struct Weak { - Weak(id); - __weak id x; -}; - -struct ContainsWeak { - ContainsWeak(Weak); - Weak w; -}; - -ContainsWeak::ContainsWeak(Weak a) : w(a) {} - -// The Weak object that is passed is destructed in this constructor. - -// CHECK: define void @_ZN4BaseC2E4Weak( -// CHECK: call void @_ZN4WeakD1Ev( -// CHECK: ret void - -// Check that the Weak object passed to this constructor is not destructed after -// the delegate constructor is called. - -// CHECK: define linkonce_odr void @_ZN7DerivedCI14BaseE4Weak( -// CHECK: call void @_ZN7DerivedCI24BaseE4Weak( -// CHECK-NEXT: ret void - -struct Base { - Base(Weak); -}; - -Base::Base(Weak a) {} - -struct Derived : Base { - using Base::Base; -}; - -Derived d(Weak(0)); - // CHECK-LABEL: define void @_Z42test_ObjCMember_default_construct_destructv( void test_ObjCMember_default_construct_destruct() { // CHECK: call void @_ZN10ObjCMemberC1Ev @@ -164,13 +111,6 @@ void test_ObjCBlockMember_copy_assign(Ob // CHECK-NEXT: call void @objc_release(i8* [[T7]]) // CHECK-NEXT: ret -// Check that the Weak object passed to this constructor is not destructed after -// the delegate constructor is called. - -// CHECK: define linkonce_odr void @_ZN7DerivedCI24BaseE4Weak( -// CHECK: call void @_ZN4BaseC2E4Weak( -// CHECK-NEXT: ret void - // Implicitly-generated default constructor for ObjCMember // CHECK-LABEL: define linkonce_odr void @_ZN10ObjCMemberC2Ev // CHECK-NOT: objc_release Modified: cfe/trunk/test/CodeGenObjCXX/lambda-expressions.mm URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjCXX/lambda-expressions.mm?rev=331019&r1=331018&r2=331019&view=diff ============================================================================== --- cfe/trunk/test/CodeGenObjCXX/lambda-expressions.mm (original) +++ cfe/trunk/test/CodeGenObjCXX/lambda-expressions.mm Thu Apr 26 22:56:55 2018 @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -triple x86_64-apple-darwin10.0.0 -emit-llvm -o - %s -fexceptions -std=c++11 -fblocks -fobjc-arc -fobjc-runtime-has-weak -DWEAK_SUPPORTED | FileCheck -check-prefix=ARC %s +// RUN: %clang_cc1 -triple x86_64-apple-darwin10.0.0 -emit-llvm -o - %s -fexceptions -std=c++11 -fblocks -fobjc-arc | FileCheck -check-prefix=ARC %s // RUN: %clang_cc1 -triple x86_64-apple-darwin10.0.0 -emit-llvm -o - %s -fexceptions -std=c++11 -fblocks | FileCheck -check-prefix=MRC %s typedef int (^fp)(); @@ -138,31 +138,5 @@ namespace BlockInLambda { } @end -// Check that the delegating invoke function doesn't destruct the Weak object -// that is passed. - -// ARC-LABEL: define internal void @"_ZZN14LambdaDelegate4testEvEN3$_58__invokeENS_4WeakE"( -// ARC: call void @"_ZZN14LambdaDelegate4testEvENK3$_5clENS_4WeakE"( -// ARC-NEXT: ret void - -// ARC-LABEL: define internal void @"_ZZN14LambdaDelegate4testEvENK3$_5clENS_4WeakE"( -// ARC: call void @_ZN14LambdaDelegate4WeakD1Ev( - -#ifdef WEAK_SUPPORTED - -namespace LambdaDelegate { - -struct Weak { - __weak id x; -}; - -void test() { - void (*p)(Weak) = [](Weak a) { }; -} - -}; - -#endif - // ARC: attributes [[NUW]] = { noinline nounwind{{.*}} } // MRC: attributes [[NUW]] = { noinline nounwind{{.*}} } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits