r244820 - Revert "Implement poisoning of only class members in dtor, as opposed to also poisoning fields inherited from base classes."

David Majnemer via cfe-commits cfe-commits at lists.llvm.org
Wed Aug 12 15:17:54 PDT 2015


On Wed, Aug 12, 2015 at 6:07 PM, Naomi Musgrave via cfe-commits <
cfe-commits at lists.llvm.org> wrote:

> Author: nmusgrave
> Date: Wed Aug 12 17:07:24 2015
> New Revision: 244820
>
> URL: http://llvm.org/viewvc/llvm-project?rev=244820&view=rev
> Log:
> Revert "Implement poisoning of only class members in dtor, as opposed to
> also poisoning fields inherited from base classes."
>
> This reverts commit 8dbbf3578a9a5d063232b59e558e5fe46e2cd42c.
>

In the future, please refer to SVN revisions.

Thanks!


> Rolled back due to buildbot failures on 'ninja check-clang'.
>
> Removed:
>     cfe/trunk/test/CodeGenCXX/sanitize-dtor-derived-class.cpp
> Modified:
>     cfe/trunk/lib/CodeGen/CGClass.cpp
>     cfe/trunk/test/CodeGenCXX/sanitize-dtor-callback.cpp
>     cfe/trunk/test/CodeGenCXX/sanitize-dtor-fn-attribute.cpp
>
> Modified: cfe/trunk/lib/CodeGen/CGClass.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGClass.cpp?rev=244820&r1=244819&r2=244820&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGClass.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGClass.cpp Wed Aug 12 17:07:24 2015
> @@ -1376,30 +1376,9 @@ static void EmitDtorSanitizerCallback(Co
>    const ASTRecordLayout &Layout =
>        CGF.getContext().getASTRecordLayout(Dtor->getParent());
>
> -  // Nothing to poison
> -  if(Layout.getFieldCount() == 0)
> -    return;
> -
> -  // Construct pointer to region to begin poisoning, and calculate poison
> -  // size, so that only members declared in this class are poisoned.
> -  llvm::Value *OffsetPtr;
> -  CharUnits::QuantityType PoisonSize;
> -  ASTContext &Context = CGF.getContext();
> -
> -  llvm::ConstantInt *OffsetSizePtr = llvm::ConstantInt::get(
> -      CGF.SizeTy, Context.toCharUnitsFromBits(Layout.getFieldOffset(0)).
> -      getQuantity());
> -
> -  OffsetPtr = CGF.Builder.CreateGEP(CGF.Builder.CreateBitCast(
> -      CGF.LoadCXXThis(), CGF.Int8PtrTy), OffsetSizePtr);
> -
> -  PoisonSize = Layout.getSize().getQuantity() -
> -      Context.toCharUnitsFromBits(Layout.getFieldOffset(0)).getQuantity();
> -
>    llvm::Value *Args[] = {
> -    CGF.Builder.CreateBitCast(OffsetPtr, CGF.VoidPtrTy),
> -    llvm::ConstantInt::get(CGF.SizeTy, PoisonSize)};
> -
> +      CGF.Builder.CreateBitCast(CGF.LoadCXXThis(), CGF.VoidPtrTy),
> +      llvm::ConstantInt::get(CGF.SizeTy, Layout.getSize().getQuantity())};
>    llvm::Type *ArgTypes[] = {CGF.VoidPtrTy, CGF.SizeTy};
>
>    llvm::FunctionType *FnType =
> @@ -1407,8 +1386,6 @@ static void EmitDtorSanitizerCallback(Co
>    llvm::Value *Fn =
>        CGF.CGM.CreateRuntimeFunction(FnType, "__sanitizer_dtor_callback");
>
> -  // Disables tail call elimination, to prevent the current stack frame
> from
> -  // disappearing from the stack trace.
>    CGF.CurFn->addFnAttr("disable-tail-calls", "true");
>    CGF.EmitNounwindRuntimeCall(Fn, Args);
>  }
> @@ -1491,13 +1468,6 @@ void CodeGenFunction::EmitDestructorBody
>      // the caller's body.
>      if (getLangOpts().AppleKext)
>        CurFn->addFnAttr(llvm::Attribute::AlwaysInline);
> -
> -    // Insert memory-poisoning instrumentation, before final clean ups,
> -    // to ensure this class's members are protected from invalid access.
> -    if (CGM.getCodeGenOpts().SanitizeMemoryUseAfterDtor
> -        && SanOpts.has(SanitizerKind::Memory))
> -      EmitDtorSanitizerCallback(*this, Dtor);
> -
>      break;
>    }
>
> @@ -1507,6 +1477,11 @@ void CodeGenFunction::EmitDestructorBody
>    // Exit the try if applicable.
>    if (isTryBody)
>      ExitCXXTryStmt(*cast<CXXTryStmt>(Body), true);
> +
> +  // Insert memory-poisoning instrumentation.
> +  if (CGM.getCodeGenOpts().SanitizeMemoryUseAfterDtor
> +      && SanOpts.has(SanitizerKind::Memory))
> +    EmitDtorSanitizerCallback(*this, Dtor);
>  }
>
>  void CodeGenFunction::emitImplicitAssignmentOperatorBody(FunctionArgList
> &Args) {
>
> Modified: cfe/trunk/test/CodeGenCXX/sanitize-dtor-callback.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/sanitize-dtor-callback.cpp?rev=244820&r1=244819&r2=244820&view=diff
>
> ==============================================================================
> --- cfe/trunk/test/CodeGenCXX/sanitize-dtor-callback.cpp (original)
> +++ cfe/trunk/test/CodeGenCXX/sanitize-dtor-callback.cpp Wed Aug 12
> 17:07:24 2015
> @@ -7,8 +7,7 @@ struct Simple {
>  Simple s;
>  // Simple internal member is poisoned by compiler-generated dtor
>  // CHECK-LABEL: define {{.*}}SimpleD1Ev
> -// CHECK-NOT: call void @__sanitizer_dtor_callback
> -// CHECK: call void {{.*}}SimpleD2Ev
> +// CHECK: call void @__sanitizer_dtor_callback
>  // CHECK-NOT: call void @__sanitizer_dtor_callback
>  // CHECK: ret void
>
> @@ -18,8 +17,7 @@ struct Inlined {
>  Inlined i;
>  // Simple internal member is poisoned by compiler-generated dtor
>  // CHECK-LABEL: define {{.*}}InlinedD1Ev
> -// CHECK-NOT: call void @__sanitizer_dtor_callback
> -// CHECK: call void {{.*}}InlinedD2Ev
> +// CHECK: call void @__sanitizer_dtor_callback
>  // CHECK-NOT: call void @__sanitizer_dtor_callback
>  // CHECK: ret void
>
> @@ -46,8 +44,7 @@ Defaulted_Non_Trivial def_non_trivial;
>  // By including a Simple member in the struct, the compiler is
>  // forced to generate a non-trivial destructor.
>  // CHECK-LABEL: define {{.*}}Defaulted_Non_TrivialD1Ev
> -// CHECK-NOT: call void @__sanitizer_dtor_callback
> -// CHECK: call void {{.*}}Defaulted_Non_TrivialD2
> +// CHECK: call void @__sanitizer_dtor_callback
>  // CHECK-NOT: call void @__sanitizer_dtor_callback
>  // CHECK: ret void
>
>
> Removed: cfe/trunk/test/CodeGenCXX/sanitize-dtor-derived-class.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/sanitize-dtor-derived-class.cpp?rev=244819&view=auto
>
> ==============================================================================
> --- cfe/trunk/test/CodeGenCXX/sanitize-dtor-derived-class.cpp (original)
> +++ cfe/trunk/test/CodeGenCXX/sanitize-dtor-derived-class.cpp (removed)
> @@ -1,62 +0,0 @@
> -// RUN: %clang_cc1 -fsanitize=memory -fsanitize-memory-use-after-dtor
> -disable-llvm-optzns -std=c++11 -triple=x86_64-pc-linux -emit-llvm -o - %s
> | FileCheck %s
> -// RUN: %clang_cc1 -O1 -fsanitize=memory -fsanitize-memory-use-after-dtor
> -disable-llvm-optzns -std=c++11 -triple=x86_64-pc-linux -emit-llvm -o - %s
> | FileCheck %s
> -
> -class Base {
> - public:
> -  int x;
> -  Base() {
> -    x = 5;
> -  }
> -  virtual ~Base() {
> -    x += 1;
> -  }
> -};
> -
> -class Derived : public Base {
> - public:
> -  int y;
> -  Derived() {
> -    y = 10;
> -  }
> -  ~Derived() {
> -    y += 1;
> -  }
> -};
> -
> -Derived d;
> -
> -// CHECK-LABEL: define {{.*}}DerivedD1Ev
> -// CHECK-NOT: call void @__sanitizer_dtor_callback
> -// CHECK: call void {{.*}}DerivedD2Ev
> -// CHECK-NOT: call void @__sanitizer_dtor_callback
> -// CHECK: ret void
> -
> -// CHECK-LABEL: define {{.*}}DerivedD0Ev
> -// CHECK-NOT: call void @__sanitizer_dtor_callback
> -// CHECK: call void {{.*}}DerivedD1Ev
> -// CHECK-NOT: call void @__sanitizer_dtor_callback
> -// CHECK: ret void
> -
> -// CHECK-LABEL: define {{.*}}BaseD1Ev
> -// CHECK-NOT: call void @__sanitizer_dtor_callback
> -// CHECK: call void {{.*}}BaseD2Ev
> -// CHECK-NOT: call void @__sanitizer_dtor_callback
> -// CHECK: ret void
> -
> -// CHECK-LABEL: define {{.*}}BaseD0Ev
> -// CHECK-NOT: call void @__sanitizer_dtor_callback
> -// CHECK: call void {{.*}}BaseD1Ev
> -// CHECK-NOT: call void @__sanitizer_dtor_callback
> -// CHECK: ret void
> -
> -// CHECK-LABEL: define {{.*}}BaseD2Ev
> -// CHECK: call void @__sanitizer_dtor_callback
> -// CHECK-NOT: call void @__sanitizer_dtor_callback
> -// CHECK: ret void
> -
> -// CHECK-LABEL: define {{.*}}DerivedD2Ev
> -// CHECK: call void @__sanitizer_dtor_callback
> -// CHECK-NOT: call void @__sanitizer_dtor_callback
> -// CHECK: call void {{.*}}BaseD2Ev
> -// CHECK-NOT: call void @__sanitizer_dtor_callback
> -// CHECK: ret void
>
> Modified: cfe/trunk/test/CodeGenCXX/sanitize-dtor-fn-attribute.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/sanitize-dtor-fn-attribute.cpp?rev=244820&r1=244819&r2=244820&view=diff
>
> ==============================================================================
> --- cfe/trunk/test/CodeGenCXX/sanitize-dtor-fn-attribute.cpp (original)
> +++ cfe/trunk/test/CodeGenCXX/sanitize-dtor-fn-attribute.cpp Wed Aug 12
> 17:07:24 2015
> @@ -26,27 +26,22 @@ int main() {
>  // Repressing the sanitization attribute results in no msan
>  // instrumentation of the destructor
>  // CHECK: define {{.*}}No_SanD1Ev{{.*}} [[ATTRIBUTE:#[0-9]+]]
> -// CHECK-NOT: call void @__sanitizer_dtor_callback
>  // CHECK: call void {{.*}}No_SanD2Ev
> -// CHECK-NOT: call void @__sanitizer_dtor_callback
> +// CHECK: call void @__sanitizer_dtor_callback
>  // CHECK: ret void
>
>  // CHECK-ATTR: define {{.*}}No_SanD1Ev{{.*}} [[ATTRIBUTE:#[0-9]+]]
> -// CHECK-ATTR-NOT: call void @__sanitizer_dtor_callback
>  // CHECK-ATTR: call void {{.*}}No_SanD2Ev
>  // CHECK-ATTR-NOT: call void @__sanitizer_dtor_callback
>  // CHECK-ATTR: ret void
>
>
>  // CHECK: define {{.*}}No_SanD2Ev{{.*}} [[ATTRIBUTE:#[0-9]+]]
> -// CHECK: call void @__sanitizer_dtor_callback
> -// CHECK-NOT: call void @__sanitizer_dtor_callback
>  // CHECK: call void {{.*}}Vector
> -// CHECK-NOT: call void @__sanitizer_dtor_callback
> +// CHECK: call void @__sanitizer_dtor_callback
>  // CHECK: ret void
>
>  // CHECK-ATTR: define {{.*}}No_SanD2Ev{{.*}} [[ATTRIBUTE:#[0-9]+]]
> -// CHECK-ATTR-NOT: call void @__sanitizer_dtor_callback
>  // CHECK-ATTR: call void {{.*}}Vector
>  // CHECK-ATTR-NOT: call void @__sanitizer_dtor_callback
>  // CHECK-ATTR: ret void
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150812/ba27731d/attachment.html>


More information about the cfe-commits mailing list