================
Comment at: include/clang/Sema/Sema.h:395-396
@@ -392,1 +394,4 @@
 
+  /// \brief All delete-expressions within the translation unit.
+  llvm::SmallPtrSet<const CXXDeleteExpr *, 4> DeleteExprs;
+
----------------
This is not a reasonable way to track the relevant state here.

The interesting cases are `VarDecl`s and `FieldDecl`s. For `VarDecl`s, at the 
point where we see the `delete`, you can immediately check whether you have an 
new-expression as an initializer (and don't worry about the obscure cases where 
an initializer comes after the use). For `FieldDecl`s, perform the check where 
you see the `delete`, and if you see either (a) no constructor with a matching 
`new`, or (b) only constructors with the wrong kind of `new`, then add your 
`delete` to a list to check at the end of the TU.

That way, in almost all cases we can deal with the diagnostic immediately 
rather than at end of TU. (This avoids building up a big set of all delete 
expressions.)

You'll also need to figure out how you're going to handle 
serialization/deserialization here, in the case where you hit one of these "not 
sure" cases in a PCH or similar. To that end, you should probably store a list 
of `{SourceLocation, FieldDecl}` pairs, or -- better -- a map from `FieldDecl` 
to the first source location where we saw a `delete`. (You'll need one extra 
bit to describe whether it was `delete` or `delete[]` I suppose...).

http://reviews.llvm.org/D4661



_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to