eugenis added a comment.

So, this can not be moved to the complete destructor because that would fail to 
poisons vptrs of the base classes. On the other hand, the current 
implementation is a bit wasteful, as it can poison the same pointer multiple 
times when it is shared by the derived class and the first base.

Maybe skip poisoning if the first base (or whatever is at offset 0 in the 
record layout) is a dynamic class with non-trivial destructor?


================
Comment at: lib/CodeGen/CGClass.cpp:1652
@@ +1651,3 @@
+
+ static void Poison(CodeGenFunction &CGF, llvm::Value *OffsetPtr,
+                    CharUnits::QuantityType PoisonSize);
----------------
If it's a global function, it should have a more descriptive name, like 
EmitSanitizerDtorCallback.
OffsetPtr => just Ptr
And move the body of the function to this line to avoid unnecessary 
redeclaration.

================
Comment at: test/CodeGenCXX/sanitize-dtor-derived-class.cpp:67
@@ -63,3 +66,3 @@
 // CHECK: call void {{.*}}BaseD2Ev
-// CHECK-NOT: call void @__sanitizer_dtor_callback
+// CHECK: call void @__sanitizer_dtor_callback
 // CHECK: ret void
----------------
Check that this poisons exactly 8 bytes.


http://reviews.llvm.org/D12712



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to