[PATCH] D54457: [AST] Generate unique identifiers for CXXCtorInitializer objects.
Artem Dergachev via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Dec 3 13:18:33 PST 2018
NoQ updated this revision to Diff 176465.
NoQ added a comment.
Rebase on top of D54486 <https://reviews.llvm.org/D54486>!
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D54457/new/
https://reviews.llvm.org/D54457
Files:
include/clang/AST/DeclCXX.h
lib/AST/DeclBase.cpp
lib/AST/DeclCXX.cpp
lib/AST/Stmt.cpp
lib/StaticAnalyzer/Core/ExplodedGraph.cpp
lib/StaticAnalyzer/Core/ProgramState.cpp
Index: lib/StaticAnalyzer/Core/ProgramState.cpp
===================================================================
--- lib/StaticAnalyzer/Core/ProgramState.cpp
+++ lib/StaticAnalyzer/Core/ProgramState.cpp
@@ -70,10 +70,7 @@
}
int64_t ProgramState::getID() const {
- Optional<int64_t> Out = getStateManager().Alloc.identifyObject(this);
- assert(Out && "Wrong allocator used");
- assert(*Out % alignof(ProgramState) == 0 && "Wrong alignment information");
- return *Out / alignof(ProgramState);
+ return getStateManager().Alloc.identifyKnownAlignedObject<ProgramState>(this);
}
ProgramStateManager::ProgramStateManager(ASTContext &Ctx,
Index: lib/StaticAnalyzer/Core/ExplodedGraph.cpp
===================================================================
--- lib/StaticAnalyzer/Core/ExplodedGraph.cpp
+++ lib/StaticAnalyzer/Core/ExplodedGraph.cpp
@@ -284,10 +284,7 @@
}
int64_t ExplodedNode::getID(ExplodedGraph *G) const {
- Optional<int64_t> Out = G->getAllocator().identifyObject(this);
- assert(Out && "Wrong allocator used");
- assert(*Out % alignof(ExplodedNode) == 0 && "Wrong alignment information");
- return *Out / alignof(ExplodedNode);
+ return G->getAllocator().identifyKnownAlignedObject<ExplodedNode>(this);
}
bool ExplodedNode::isTrivial() const {
Index: lib/AST/Stmt.cpp
===================================================================
--- lib/AST/Stmt.cpp
+++ lib/AST/Stmt.cpp
@@ -303,10 +303,7 @@
}
int64_t Stmt::getID(const ASTContext &Context) const {
- Optional<int64_t> Out = Context.getAllocator().identifyObject(this);
- assert(Out && "Wrong allocator used");
- assert(*Out % alignof(Stmt) == 0 && "Wrong alignment information");
- return *Out / alignof(Stmt);
+ return Context.getAllocator().identifyKnownAlignedObject<Stmt>(this);
}
CompoundStmt::CompoundStmt(ArrayRef<Stmt *> Stmts, SourceLocation LB,
Index: lib/AST/DeclCXX.cpp
===================================================================
--- lib/AST/DeclCXX.cpp
+++ lib/AST/DeclCXX.cpp
@@ -2246,6 +2246,11 @@
: Initializee(TInfo), Init(Init), LParenLoc(L), RParenLoc(R),
IsDelegating(true), IsVirtual(false), IsWritten(false), SourceOrder(0) {}
+int64_t CXXCtorInitializer::getID(const ASTContext &Context) const {
+ return Context.getAllocator()
+ .identifyKnownAlignedObject<CXXCtorInitializer>(this);
+}
+
TypeLoc CXXCtorInitializer::getBaseClassLoc() const {
if (isBaseInitializer())
return Initializee.get<TypeSourceInfo*>()->getTypeLoc();
Index: lib/AST/DeclBase.cpp
===================================================================
--- lib/AST/DeclBase.cpp
+++ lib/AST/DeclBase.cpp
@@ -955,10 +955,7 @@
static Decl::Kind getKind(const DeclContext *DC) { return DC->getDeclKind(); }
int64_t Decl::getID() const {
- Optional<int64_t> Out = getASTContext().getAllocator().identifyObject(this);
- assert(Out && "Wrong allocator used");
- assert(*Out % alignof(Decl) == 0 && "Wrong alignment information");
- return *Out / alignof(Decl);
+ return getASTContext().getAllocator().identifyKnownAlignedObject<Decl>(this);
}
const FunctionType *Decl::getFunctionType(bool BlocksToo) const {
Index: include/clang/AST/DeclCXX.h
===================================================================
--- include/clang/AST/DeclCXX.h
+++ include/clang/AST/DeclCXX.h
@@ -2315,6 +2315,9 @@
CXXCtorInitializer(ASTContext &Context, TypeSourceInfo *TInfo,
SourceLocation L, Expr *Init, SourceLocation R);
+ /// \return Unique reproducible object identifier.
+ int64_t getID(const ASTContext &Context) const;
+
/// Determine whether this initializer is initializing a base class.
bool isBaseInitializer() const {
return Initializee.is<TypeSourceInfo*>() && !IsDelegating;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D54457.176465.patch
Type: text/x-patch
Size: 3776 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20181203/8307f650/attachment-0001.bin>
More information about the cfe-commits
mailing list