From: Artem Dergachev Date: Mon, 3 Dec 2018 22:15:34 +0000 (+0000) Subject: [AST] Generate unique identifiers for CXXCtorInitializer objects. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7f67927ad0fb9a06e626ac80bd8ac340997914c6;p=clang [AST] Generate unique identifiers for CXXCtorInitializer objects. This continues the work started in r342309 and r342315 to provide identifiers to AST objects that are shorter and easier to read and remember than pointers. Differential Revision: https://reviews.llvm.org/D54457 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@348198 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/AST/DeclCXX.h b/include/clang/AST/DeclCXX.h index 3f0e5c959a..9b80d505ed 100644 --- a/include/clang/AST/DeclCXX.h +++ b/include/clang/AST/DeclCXX.h @@ -2315,6 +2315,9 @@ public: 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() && !IsDelegating; diff --git a/lib/AST/DeclCXX.cpp b/lib/AST/DeclCXX.cpp index 9bb6e3a013..81ee48c182 100644 --- a/lib/AST/DeclCXX.cpp +++ b/lib/AST/DeclCXX.cpp @@ -2246,6 +2246,14 @@ CXXCtorInitializer::CXXCtorInitializer(ASTContext &Context, : Initializee(TInfo), Init(Init), LParenLoc(L), RParenLoc(R), IsDelegating(true), IsVirtual(false), IsWritten(false), SourceOrder(0) {} +int64_t CXXCtorInitializer::getID(const ASTContext &Context) const { + Optional Out = Context.getAllocator().identifyObject(this); + assert(Out && "Wrong allocator used"); + assert(*Out % alignof(CXXCtorInitializer) == 0 && + "Wrong alignment information"); + return *Out / alignof(CXXCtorInitializer); +} + TypeLoc CXXCtorInitializer::getBaseClassLoc() const { if (isBaseInitializer()) return Initializee.get()->getTypeLoc();