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

David Blaikie via cfe-commits cfe-commits at lists.llvm.org
Wed Aug 12 15:19:34 PDT 2015


On Wed, Aug 12, 2015 at 3:17 PM, David Majnemer via cfe-commits <
cfe-commits at lists.llvm.org> wrote:

>
>
> 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.
>

There's a helper script to facilitate this in
llvm/utils/git-svn/git-svnrevert


>
> 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
>>
>
>
> _______________________________________________
> 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/46210746/attachment-0001.html>


More information about the cfe-commits mailing list