[clang] [clang][p2719] Module deserialization does not restore allocator flags (PR #137102)
Oliver Hunt via cfe-commits
cfe-commits at lists.llvm.org
Wed Apr 23 18:13:25 PDT 2025
https://github.com/ojhunt created https://github.com/llvm/llvm-project/pull/137102
When serializing and deserializing a FunctionDecl we don't recover whether or not the decl was a type aware allocator or destroying delete, because in the final PR that information was placed in a side table in ASTContext.
In principle it should be possible to re-do the semantic checks to determine what these flags should be when deserializing, but it seems like the most robust path is simply recording the flags directly in the serialized AST.
>From fdb5037f8cbcc6f2e1e967f6cac0a1bbb46abb51 Mon Sep 17 00:00:00 2001
From: Oliver Hunt <oliver at apple.com>
Date: Wed, 23 Apr 2025 18:09:22 -0700
Subject: [PATCH] [clang][p2719] Module deserialization does not restore
allocator flags
When serializing and deserializing a FunctionDecl we don't recover
whether or not the decl was a type aware allocator or destroying
delete, because in the final PR that information was placed in a
side table in ASTContext.
In principle it should be possible to re-do the semantic checks to
determine what these flags should be when deserializing, but it
seems like the most robust path is simply recording the flags
directly in the serialized AST.
---
clang/lib/Serialization/ASTReaderDecl.cpp | 3 +++
clang/lib/Serialization/ASTWriterDecl.cpp | 2 ++
2 files changed, 5 insertions(+)
diff --git a/clang/lib/Serialization/ASTReaderDecl.cpp b/clang/lib/Serialization/ASTReaderDecl.cpp
index 5545cbc8d608c..bc6f745a5c514 100644
--- a/clang/lib/Serialization/ASTReaderDecl.cpp
+++ b/clang/lib/Serialization/ASTReaderDecl.cpp
@@ -1076,6 +1076,8 @@ void ASTDeclReader::VisitFunctionDecl(FunctionDecl *FD) {
FD->setFriendConstraintRefersToEnclosingTemplate(
FunctionDeclBits.getNextBit());
FD->setUsesSEHTry(FunctionDeclBits.getNextBit());
+ FD->setIsDestroyingOperatorDelete(FunctionDeclBits.getNextBit());
+ FD->setIsTypeAwareOperatorNewOrDelete(FunctionDeclBits.getNextBit());
FD->EndRangeLoc = readSourceLocation();
if (FD->isExplicitlyDefaulted())
@@ -1160,6 +1162,7 @@ void ASTDeclReader::VisitFunctionDecl(FunctionDecl *FD) {
C.registerSYCLEntryPointFunction(FD);
}
}
+
}
void ASTDeclReader::VisitObjCMethodDecl(ObjCMethodDecl *MD) {
diff --git a/clang/lib/Serialization/ASTWriterDecl.cpp b/clang/lib/Serialization/ASTWriterDecl.cpp
index 3a7a23481ea98..d1f92cea4dfea 100644
--- a/clang/lib/Serialization/ASTWriterDecl.cpp
+++ b/clang/lib/Serialization/ASTWriterDecl.cpp
@@ -847,6 +847,8 @@ void ASTDeclWriter::VisitFunctionDecl(FunctionDecl *D) {
FunctionDeclBits.addBit(D->isInstantiatedFromMemberTemplate());
FunctionDeclBits.addBit(D->FriendConstraintRefersToEnclosingTemplate());
FunctionDeclBits.addBit(D->usesSEHTry());
+ FunctionDeclBits.addBit(D->isDestroyingOperatorDelete());
+ FunctionDeclBits.addBit(D->isTypeAwareOperatorNewOrDelete());
Record.push_back(FunctionDeclBits);
Record.AddSourceLocation(D->getEndLoc());
More information about the cfe-commits
mailing list