diff options
-rw-r--r-- | include/clang/AST/DeclGroup.h | 27 | ||||
-rw-r--r-- | include/clang/AST/Stmt.h | 4 | ||||
-rw-r--r-- | lib/AST/CFG.cpp | 7 | ||||
-rw-r--r-- | lib/AST/DeclGroup.cpp | 51 | ||||
-rw-r--r-- | lib/AST/Stmt.cpp | 1 | ||||
-rw-r--r-- | lib/AST/StmtSerialization.cpp | 3 | ||||
-rw-r--r-- | lib/Sema/SemaStmt.cpp | 4 |
7 files changed, 10 insertions, 87 deletions
diff --git a/include/clang/AST/DeclGroup.h b/include/clang/AST/DeclGroup.h index 3f7a60a303..2b93f3c2cb 100644 --- a/include/clang/AST/DeclGroup.h +++ b/include/clang/AST/DeclGroup.h @@ -53,7 +53,7 @@ public: void Emit(llvm::Serializer& S) const; /// Read - Deserialize a DeclGroup from Bitcode. - static DeclGroup* Create(llvm::Deserializer& D, ASTContext& C); + static DeclGroup* Read(llvm::Deserializer& D, ASTContext& C); }; class DeclGroupRef { @@ -110,30 +110,5 @@ public: static DeclGroupRef ReadVal(llvm::Deserializer& D); }; -class DeclGroupOwningRef : public DeclGroupRef { -public: - explicit DeclGroupOwningRef() : DeclGroupRef((Decl*)0) {} - explicit DeclGroupOwningRef(Decl* d) : DeclGroupRef(d) {} - explicit DeclGroupOwningRef(DeclGroup* dg) : DeclGroupRef(dg) {} - - ~DeclGroupOwningRef(); - void Destroy(ASTContext& C); - - DeclGroupOwningRef(DeclGroupOwningRef& R) - : DeclGroupRef(R) { R.D = 0; } - - DeclGroupOwningRef& operator=(DeclGroupOwningRef& R) { - D = R.D; - R.D = 0; - return *this; - } - - /// Emit - Serialize a DeclGroupOwningRef to Bitcode. - void Emit(llvm::Serializer& S) const; - - /// Read - Deserialize a DeclGroupOwningRef from Bitcode. - DeclGroupOwningRef& Read(llvm::Deserializer& D, ASTContext& C); -}; - } // end clang namespace #endif diff --git a/include/clang/AST/Stmt.h b/include/clang/AST/Stmt.h index ae7596a106..66eb303c9d 100644 --- a/include/clang/AST/Stmt.h +++ b/include/clang/AST/Stmt.h @@ -226,10 +226,10 @@ public: /// class DeclStmt : public Stmt { protected: - DeclGroupOwningRef DG; + DeclGroupRef DG; SourceLocation StartLoc, EndLoc; public: - DeclStmt(DeclGroupOwningRef& dg, SourceLocation startLoc, + DeclStmt(DeclGroupRef dg, SourceLocation startLoc, SourceLocation endLoc) : Stmt(DeclStmtClass), DG(dg), StartLoc(startLoc), EndLoc(endLoc) {} diff --git a/lib/AST/CFG.cpp b/lib/AST/CFG.cpp index 2ea8388287..e08a00b8a5 100644 --- a/lib/AST/CFG.cpp +++ b/lib/AST/CFG.cpp @@ -379,11 +379,8 @@ CFGBlock* CFGBuilder::WalkAST(Stmt* Terminator, bool AlwaysAddStmt = false) { ? 8 : llvm::AlignOf<DeclStmt>::Alignment; // Allocate the DeclStmt using the BumpPtrAllocator. It will - // get automatically freed with the CFG. Note that even though - // we are using a DeclGroupOwningRef that wraps a singe Decl*, - // that Decl* will not get deallocated because the destroy method - // of DG is never called. - DeclGroupOwningRef DG(*I); + // get automatically freed with the CFG. + DeclGroupRef DG(*I); Decl* D = *I; void* Mem = cfg->getAllocator().Allocate(sizeof(DeclStmt), A); diff --git a/lib/AST/DeclGroup.cpp b/lib/AST/DeclGroup.cpp index e7f84e1f46..35cb6d3bc6 100644 --- a/lib/AST/DeclGroup.cpp +++ b/lib/AST/DeclGroup.cpp @@ -7,7 +7,7 @@ // //===----------------------------------------------------------------------===// // -// This file defines the DeclGroup, DeclGroupRef, and OwningDeclGroup classes. +// This file defines the DeclGroup and DeclGroupRef classes. // //===----------------------------------------------------------------------===// @@ -36,7 +36,7 @@ void DeclGroup::Emit(llvm::Serializer& S) const { } /// Read - Deserialize a DeclGroup from Bitcode. -DeclGroup* DeclGroup::Create(llvm::Deserializer& D, ASTContext& C) { +DeclGroup* DeclGroup::Read(llvm::Deserializer& D, ASTContext& C) { unsigned NumDecls = (unsigned) D.ReadInt(); unsigned size = sizeof(DeclGroup) + sizeof(Decl*) * NumDecls; unsigned alignment = llvm::AlignOf<DeclGroup>::Alignment; @@ -54,32 +54,10 @@ DeclGroup::DeclGroup(unsigned numdecls, Decl** decls) : NumDecls(numdecls) { } void DeclGroup::Destroy(ASTContext& C) { - Decl** Decls = (Decl**) (this + 1); - - for (unsigned i = 0; i < NumDecls; ++i) - Decls[i]->Destroy(C); - this->~DeclGroup(); C.Deallocate((void*) this); } -DeclGroupOwningRef::~DeclGroupOwningRef() { - assert (D == 0 && "Destroy method not called."); -} - -void DeclGroupOwningRef::Destroy(ASTContext& C) { - if (!D) - return; - - if (getKind() == DeclKind) - D->Destroy(C); - else - reinterpret_cast<DeclGroup*>(reinterpret_cast<uintptr_t>(D) & - ~Mask)->Destroy(C); - - D = 0; -} - void DeclGroupRef::Emit(llvm::Serializer& S) const { if (getKind() == DeclKind) { S.EmitBool(false); @@ -98,28 +76,3 @@ DeclGroupRef DeclGroupRef::ReadVal(llvm::Deserializer& D) { return DeclGroupRef(D.ReadPtr<DeclGroup>()); } - -void DeclGroupOwningRef::Emit(llvm::Serializer& S) const { - if (getKind() == DeclKind) { - S.EmitBool(false); - S.EmitOwnedPtr(D); - } - else { - S.EmitBool(true); - S.EmitOwnedPtr(reinterpret_cast<DeclGroup*>(reinterpret_cast<uintptr_t>(D) - & ~Mask)); - } -} - -DeclGroupOwningRef& DeclGroupOwningRef::Read(llvm::Deserializer& Dezr, - ASTContext& C) { - - if (!Dezr.ReadBool()) - D = Dezr.ReadOwnedPtr<Decl>(C); - else { - uintptr_t x = reinterpret_cast<uintptr_t>(Dezr.ReadOwnedPtr<DeclGroup>(C)); - D = reinterpret_cast<Decl*>(x | DeclGroupKind); - } - - return *this; -} diff --git a/lib/AST/Stmt.cpp b/lib/AST/Stmt.cpp index 49c8c80509..b85a67e689 100644 --- a/lib/AST/Stmt.cpp +++ b/lib/AST/Stmt.cpp @@ -58,7 +58,6 @@ void Stmt::Destroy(ASTContext& C) { } void DeclStmt::Destroy(ASTContext& C) { - DG.Destroy(C); this->~DeclStmt(); C.Deallocate((void *)this); } diff --git a/lib/AST/StmtSerialization.cpp b/lib/AST/StmtSerialization.cpp index 5a6e49cb3e..22ce8183fd 100644 --- a/lib/AST/StmtSerialization.cpp +++ b/lib/AST/StmtSerialization.cpp @@ -550,8 +550,7 @@ void DeclStmt::EmitImpl(Serializer& S) const { DeclStmt* DeclStmt::CreateImpl(Deserializer& D, ASTContext& C) { SourceLocation StartLoc = SourceLocation::ReadVal(D); SourceLocation EndLoc = SourceLocation::ReadVal(D); - DeclGroupOwningRef DG; - return new DeclStmt(DG.Read(D, C), StartLoc, EndLoc); + return new DeclStmt(DeclGroupRef::ReadVal(D), StartLoc, EndLoc); } void DeclRefExpr::EmitImpl(Serializer& S) const { diff --git a/lib/Sema/SemaStmt.cpp b/lib/Sema/SemaStmt.cpp index dd505f6967..bfa1c5e6d0 100644 --- a/lib/Sema/SemaStmt.cpp +++ b/lib/Sema/SemaStmt.cpp @@ -58,11 +58,11 @@ Sema::OwningStmtResult Sema::ActOnDeclStmt(DeclTy *decl, assert (!decls.empty()); if (decls.size() == 1) { - DeclGroupOwningRef DG(*decls.begin()); + DeclGroupRef DG(*decls.begin()); return Owned(new (Context) DeclStmt(DG, StartLoc, EndLoc)); } else { - DeclGroupOwningRef DG(DeclGroup::Create(Context, decls.size(), &decls[0])); + DeclGroupRef DG(DeclGroup::Create(Context, decls.size(), &decls[0])); return Owned(new (Context) DeclStmt(DG, StartLoc, EndLoc)); } } |