mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-27 06:26:08 +00:00
[AST] Convert MangleNumberingContext to a unique_ptr.
Summary: It doesn't need to be refcounted anymore, either. Reviewers: timshen Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D25420 llvm-svn: 283768
This commit is contained in:
parent
611c5c225a
commit
20ebffc99a
@ -407,7 +407,7 @@ private:
|
||||
/// \brief Mapping from each declaration context to its corresponding
|
||||
/// mangling numbering context (used for constructs like lambdas which
|
||||
/// need to be consistently numbered for the mangler).
|
||||
llvm::DenseMap<const DeclContext *, MangleNumberingContext *>
|
||||
llvm::DenseMap<const DeclContext *, std::unique_ptr<MangleNumberingContext>>
|
||||
MangleNumberingContexts;
|
||||
|
||||
/// \brief Side-table of mangling numbers for declarations which rarely
|
||||
@ -2470,7 +2470,7 @@ public:
|
||||
/// DeclContext.
|
||||
MangleNumberingContext &getManglingNumberContext(const DeclContext *DC);
|
||||
|
||||
MangleNumberingContext *createMangleNumberingContext() const;
|
||||
std::unique_ptr<MangleNumberingContext> createMangleNumberingContext() const;
|
||||
|
||||
/// \brief Used by ParmVarDecl to store on the side the
|
||||
/// index of the parameter when it exceeds the size of the normal bitfield.
|
||||
|
@ -29,7 +29,7 @@ class VarDecl;
|
||||
|
||||
/// \brief Keeps track of the mangled names of lambda expressions and block
|
||||
/// literals within a particular context.
|
||||
class MangleNumberingContext : public RefCountedBase<MangleNumberingContext> {
|
||||
class MangleNumberingContext {
|
||||
public:
|
||||
virtual ~MangleNumberingContext() {}
|
||||
|
||||
|
@ -876,7 +876,7 @@ public:
|
||||
///
|
||||
/// This mangling information is allocated lazily, since most contexts
|
||||
/// do not have lambda expressions or block literals.
|
||||
IntrusiveRefCntPtr<MangleNumberingContext> MangleNumbering;
|
||||
std::unique_ptr<MangleNumberingContext> MangleNumbering;
|
||||
|
||||
/// \brief If we are processing a decltype type, a set of call expressions
|
||||
/// for which we have deferred checking the completeness of the return type.
|
||||
|
@ -794,8 +794,6 @@ ASTContext::~ASTContext() {
|
||||
|
||||
for (const auto &Value : ModuleInitializers)
|
||||
Value.second->~PerModuleInitializers();
|
||||
|
||||
llvm::DeleteContainerSeconds(MangleNumberingContexts);
|
||||
}
|
||||
|
||||
void ASTContext::ReleaseParentMapEntries() {
|
||||
@ -8982,13 +8980,14 @@ unsigned ASTContext::getStaticLocalNumber(const VarDecl *VD) const {
|
||||
MangleNumberingContext &
|
||||
ASTContext::getManglingNumberContext(const DeclContext *DC) {
|
||||
assert(LangOpts.CPlusPlus); // We don't need mangling numbers for plain C.
|
||||
MangleNumberingContext *&MCtx = MangleNumberingContexts[DC];
|
||||
std::unique_ptr<MangleNumberingContext> &MCtx = MangleNumberingContexts[DC];
|
||||
if (!MCtx)
|
||||
MCtx = createMangleNumberingContext();
|
||||
return *MCtx;
|
||||
}
|
||||
|
||||
MangleNumberingContext *ASTContext::createMangleNumberingContext() const {
|
||||
std::unique_ptr<MangleNumberingContext>
|
||||
ASTContext::createMangleNumberingContext() const {
|
||||
return ABI->createMangleNumberingContext();
|
||||
}
|
||||
|
||||
|
@ -43,7 +43,8 @@ public:
|
||||
virtual bool isNearlyEmpty(const CXXRecordDecl *RD) const = 0;
|
||||
|
||||
/// Returns a new mangling number context for this C++ ABI.
|
||||
virtual MangleNumberingContext *createMangleNumberingContext() const = 0;
|
||||
virtual std::unique_ptr<MangleNumberingContext>
|
||||
createMangleNumberingContext() const = 0;
|
||||
|
||||
/// Adds a mapping from class to copy constructor for this C++ ABI.
|
||||
virtual void addCopyConstructorForExceptionObject(CXXRecordDecl *,
|
||||
|
@ -163,8 +163,9 @@ public:
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
MangleNumberingContext *createMangleNumberingContext() const override {
|
||||
return new ItaniumNumberingContext();
|
||||
std::unique_ptr<MangleNumberingContext>
|
||||
createMangleNumberingContext() const override {
|
||||
return llvm::make_unique<ItaniumNumberingContext>();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@ -143,8 +143,9 @@ public:
|
||||
const_cast<TagDecl *>(TD->getCanonicalDecl()));
|
||||
}
|
||||
|
||||
MangleNumberingContext *createMangleNumberingContext() const override {
|
||||
return new MicrosoftNumberingContext();
|
||||
std::unique_ptr<MangleNumberingContext>
|
||||
createMangleNumberingContext() const override {
|
||||
return llvm::make_unique<MicrosoftNumberingContext>();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user