r331019 - Revert "[CodeGen] Avoid destructing a callee-destructued struct type in a"

Akira Hatanaka via cfe-commits cfe-commits at lists.llvm.org
Thu Apr 26 22:56:55 PDT 2018


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{{.*}} }




More information about the cfe-commits mailing list