On Wed, Aug 12, 2015 at 3:17 PM, David Majnemer via cfe-commits < cfe-commits@lists.llvm.org> wrote:
> > > 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. > 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@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 > >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits