aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/clang/AST/DeclGroup.h27
-rw-r--r--include/clang/AST/Stmt.h4
-rw-r--r--lib/AST/CFG.cpp7
-rw-r--r--lib/AST/DeclGroup.cpp51
-rw-r--r--lib/AST/Stmt.cpp1
-rw-r--r--lib/AST/StmtSerialization.cpp3
-rw-r--r--lib/Sema/SemaStmt.cpp4
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));
}
}