================
@@ -2886,6 +2887,16 @@ class CXXDestructorDecl : public CXXMethodDecl {
     return getCanonicalDecl()->OperatorDelete;
   }
 
+  const FunctionDecl *getOperatorGlobalDelete() const {
+    return getCanonicalDecl()->OperatorGlobalDelete;
+  }
+
+  void setOperatorGlobalDelete(FunctionDecl *OD) {
+    auto *First = cast<CXXDestructorDecl>(getCanonicalDecl());
+    if (OD && !First->OperatorGlobalDelete)
+      First->OperatorGlobalDelete = OD;
----------------
tahonermann wrote:

I think a call to `setOperatorGlobalDelete(nullptr)` should clear 
`OperatorGlobalDelete`.

Hmm, `setOperatorDelete()` silently ignores a call that passes `nullptr`. That 
seems wrong. Maybe there should be a non-null assertion?

`setOperatorDelete()` also registers the delete operator with 
`ASTMutationListener::ResolvedOperatorDelete()` and `ASTWriter` overrides that 
function. That seems important for PCH and module support. I think updates are 
needed to `clang/lib/Serialization/ASTReaderDecl.cpp` as well to restore 
`OperatorGlobalDelete` during AST deserialization; see 
`ASTDeclReader::VisitCXXDestructorDecl()` and `ASTDeclReader::UpdateDecl()` for 
assignments to `OperatorDelete`.

https://github.com/llvm/llvm-project/pull/139566
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to