On Wed, Aug 12, 2015 at 6:07 PM, Naomi Musgrave via cfe-commits < cfe-commits@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@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits