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