aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Driver/RewriteObjC.cpp12
-rw-r--r--include/clang/AST/Decl.h23
-rw-r--r--include/clang/AST/DeclCXX.h8
-rw-r--r--lib/AST/ASTContext.cpp4
-rw-r--r--lib/AST/Decl.cpp43
-rw-r--r--lib/AST/DeclCXX.cpp5
-rw-r--r--lib/AST/DeclSerialization.cpp4
-rw-r--r--lib/CodeGen/CGObjCMac.cpp2
-rw-r--r--lib/Sema/Sema.cpp4
-rw-r--r--lib/Sema/SemaDecl.cpp6
10 files changed, 28 insertions, 83 deletions
diff --git a/Driver/RewriteObjC.cpp b/Driver/RewriteObjC.cpp
index 2f91ea9741..b078db3184 100644
--- a/Driver/RewriteObjC.cpp
+++ b/Driver/RewriteObjC.cpp
@@ -880,7 +880,7 @@ Stmt *RewriteObjC::RewriteObjCIvarRefExpr(ObjCIvarRefExpr *IV,
RecName += "_IMPL";
IdentifierInfo *II = &Context->Idents.get(RecName.c_str());
RecordDecl *RD = RecordDecl::Create(*Context, TagDecl::TK_struct, TUDecl,
- SourceLocation(), II, 0);
+ SourceLocation(), II);
assert(RD && "RewriteObjCIvarRefExpr(): Can't find RecordDecl");
QualType castT = Context->getPointerType(Context->getTagDeclType(RD));
CastExpr *castExpr = new ExplicitCastExpr(castT, IV->getBase(),
@@ -922,7 +922,7 @@ Stmt *RewriteObjC::RewriteObjCIvarRefExpr(ObjCIvarRefExpr *IV,
RecName += "_IMPL";
IdentifierInfo *II = &Context->Idents.get(RecName.c_str());
RecordDecl *RD = RecordDecl::Create(*Context, TagDecl::TK_struct, TUDecl,
- SourceLocation(), II, 0);
+ SourceLocation(), II);
assert(RD && "RewriteObjCIvarRefExpr(): Can't find RecordDecl");
QualType castT = Context->getPointerType(Context->getTagDeclType(RD));
CastExpr *castExpr = new ExplicitCastExpr(castT, IV->getBase(),
@@ -1795,7 +1795,7 @@ void RewriteObjC::SynthMsgSendSuperFunctionDecl() {
llvm::SmallVector<QualType, 16> ArgTys;
RecordDecl *RD = RecordDecl::Create(*Context, TagDecl::TK_struct, TUDecl,
SourceLocation(),
- &Context->Idents.get("objc_super"), 0);
+ &Context->Idents.get("objc_super"));
QualType argT = Context->getPointerType(Context->getTagDeclType(RD));
assert(!argT.isNull() && "Can't build 'struct objc_super *' type");
ArgTys.push_back(argT);
@@ -1838,7 +1838,7 @@ void RewriteObjC::SynthMsgSendSuperStretFunctionDecl() {
llvm::SmallVector<QualType, 16> ArgTys;
RecordDecl *RD = RecordDecl::Create(*Context, TagDecl::TK_struct, TUDecl,
SourceLocation(),
- &Context->Idents.get("objc_super"), 0);
+ &Context->Idents.get("objc_super"));
QualType argT = Context->getPointerType(Context->getTagDeclType(RD));
assert(!argT.isNull() && "Can't build 'struct objc_super *' type");
ArgTys.push_back(argT);
@@ -1964,7 +1964,7 @@ QualType RewriteObjC::getSuperStructType() {
if (!SuperStructDecl) {
SuperStructDecl = RecordDecl::Create(*Context, TagDecl::TK_struct, TUDecl,
SourceLocation(),
- &Context->Idents.get("objc_super"), 0);
+ &Context->Idents.get("objc_super"));
QualType FieldTypes[2];
// struct objc_object *receiver;
@@ -1987,7 +1987,7 @@ QualType RewriteObjC::getConstantStringStructType() {
if (!ConstantStringDecl) {
ConstantStringDecl = RecordDecl::Create(*Context, TagDecl::TK_struct, TUDecl,
SourceLocation(),
- &Context->Idents.get("__NSConstantStringImpl"), 0);
+ &Context->Idents.get("__NSConstantStringImpl"));
QualType FieldTypes[4];
// struct objc_object *receiver;
diff --git a/include/clang/AST/Decl.h b/include/clang/AST/Decl.h
index 9688ea3e8c..0e2db965f9 100644
--- a/include/clang/AST/Decl.h
+++ b/include/clang/AST/Decl.h
@@ -795,38 +795,21 @@ class RecordDecl : public TagDecl {
/// array member (e.g. int X[]) or if this union contains a struct that does.
/// If so, this cannot be contained in arrays or other structs as a member.
bool HasFlexibleArrayMember : 1;
-
- /// NextDecl - A pointer to the next RecordDecl in a chain of RecordDecls
- /// for the same struct/union. By construction, the last RecordDecl in
- /// the chain is the one that provides the definition of the struct/union
- /// (i.e., all forward declarations appear first in the chain). Note that
- /// one should make no other assumption about the order of the RecordDecl's
- /// within this chain with respect to the original source.
- /// NOTE: This is *not* an owning reference.
- RecordDecl* NextDecl;
/// Members/NumMembers - This is a new[]'d array of pointers to Decls.
FieldDecl **Members; // Null if not defined.
int NumMembers; // -1 if not defined.
protected:
- RecordDecl(Kind DK, DeclContext *DC, SourceLocation L, IdentifierInfo *Id,
- RecordDecl *PrevDecl);
-
+ RecordDecl(Kind DK, DeclContext *DC, SourceLocation L, IdentifierInfo *Id);
virtual ~RecordDecl();
public:
static RecordDecl *Create(ASTContext &C, TagKind TK, DeclContext *DC,
- SourceLocation L, IdentifierInfo *Id,
- RecordDecl *PrevDecl);
+ SourceLocation L, IdentifierInfo *Id);
virtual void Destroy(ASTContext& C);
-
- /// getDefinitionDecl - Returns the RecordDecl for the struct/union that
- /// represents the actual definition (i.e., not a forward declaration).
- /// This method returns NULL if no such RecordDecl exists.
- const RecordDecl* getDefinitionDecl() const;
-
+
bool hasFlexibleArrayMember() const { return HasFlexibleArrayMember; }
void setHasFlexibleArrayMember(bool V) { HasFlexibleArrayMember = V; }
diff --git a/include/clang/AST/DeclCXX.h b/include/clang/AST/DeclCXX.h
index a4f522eaf5..614e8ef93c 100644
--- a/include/clang/AST/DeclCXX.h
+++ b/include/clang/AST/DeclCXX.h
@@ -43,15 +43,13 @@ public:
/// The only difference with RecordDecl is that CXXRecordDecl is a DeclContext.
class CXXRecordDecl : public RecordDecl, public DeclContext {
protected:
- CXXRecordDecl(Kind DK, DeclContext *DC, SourceLocation L, IdentifierInfo *Id,
- CXXRecordDecl *PrevDecl) : RecordDecl(DK, DC, L, Id, PrevDecl),
- DeclContext(DK) {
+ CXXRecordDecl(Kind DK, DeclContext *DC, SourceLocation L, IdentifierInfo *Id)
+ : RecordDecl(DK, DC, L, Id), DeclContext(DK) {
assert(classof(static_cast<Decl*>(this)) && "Invalid Kind!");
}
public:
static CXXRecordDecl *Create(ASTContext &C, TagKind TK, DeclContext *DC,
- SourceLocation L, IdentifierInfo *Id,
- CXXRecordDecl *PrevDecl);
+ SourceLocation L, IdentifierInfo *Id);
const CXXFieldDecl *getMember(unsigned i) const {
return cast<const CXXFieldDecl>(RecordDecl::getMember(i));
diff --git a/lib/AST/ASTContext.cpp b/lib/AST/ASTContext.cpp
index 2264bca0f9..5a6aa1ae31 100644
--- a/lib/AST/ASTContext.cpp
+++ b/lib/AST/ASTContext.cpp
@@ -1348,7 +1348,7 @@ QualType ASTContext::getCFConstantStringType() {
if (!CFConstantStringTypeDecl) {
CFConstantStringTypeDecl =
RecordDecl::Create(*this, TagDecl::TK_struct, TUDecl, SourceLocation(),
- &Idents.get("NSConstantString"), 0);
+ &Idents.get("NSConstantString"));
QualType FieldTypes[4];
// const int *isa;
@@ -1390,7 +1390,7 @@ QualType ASTContext::getObjCFastEnumerationStateType()
ObjCFastEnumerationStateTypeDecl =
RecordDecl::Create(*this, TagDecl::TK_struct, TUDecl, SourceLocation(),
- &Idents.get("__objcFastEnumerationState"), 0);
+ &Idents.get("__objcFastEnumerationState"));
ObjCFastEnumerationStateTypeDecl->defineBody(FieldDecls, 4);
}
diff --git a/lib/AST/Decl.cpp b/lib/AST/Decl.cpp
index 04cec6f66b..eb9d0efdb4 100644
--- a/lib/AST/Decl.cpp
+++ b/lib/AST/Decl.cpp
@@ -204,36 +204,18 @@ unsigned FunctionDecl::getMinRequiredArguments() const {
//===----------------------------------------------------------------------===//
RecordDecl::RecordDecl(Kind DK, DeclContext *DC, SourceLocation L,
- IdentifierInfo *Id, RecordDecl *PrevDecl)
-: TagDecl(DK, DC, L, Id, 0), NextDecl(0) {
+ IdentifierInfo *Id)
+: TagDecl(DK, DC, L, Id, 0) {
HasFlexibleArrayMember = false;
assert(classof(static_cast<Decl*>(this)) && "Invalid Kind!");
Members = 0;
- NumMembers = -1;
-
- // Hook up the RecordDecl chain.
- if (PrevDecl) {
- RecordDecl* Tmp = PrevDecl->NextDecl;
- // 'Tmp' might be non-NULL if it is the RecordDecl that provides the
- // definition of the struct/union. By construction, the last RecordDecl
- // in the chain is the 'defining' RecordDecl.
- if (Tmp) {
- assert (Tmp->NextDecl == 0);
- assert (Tmp->isDefinition()
- && "Previous RecordDecl has a NextDecl that is "
- "not the 'defining' RecordDecl");
-
- NextDecl = Tmp;
- }
-
- PrevDecl->NextDecl = this;
- }
+ NumMembers = -1;
}
RecordDecl *RecordDecl::Create(ASTContext &C, TagKind TK, DeclContext *DC,
- SourceLocation L, IdentifierInfo *Id,
- RecordDecl *PrevDecl) {
+ SourceLocation L, IdentifierInfo *Id) {
+
void *Mem = C.getAllocator().Allocate<RecordDecl>();
Kind DK;
switch (TK) {
@@ -243,7 +225,7 @@ RecordDecl *RecordDecl::Create(ASTContext &C, TagKind TK, DeclContext *DC,
case TK_union: DK = Union; break;
case TK_class: DK = Class; break;
}
- return new (Mem) RecordDecl(DK, DC, L, Id, PrevDecl);
+ return new (Mem) RecordDecl(DK, DC, L, Id);
}
RecordDecl::~RecordDecl() {
@@ -281,16 +263,3 @@ FieldDecl *RecordDecl::getMember(IdentifierInfo *II) {
return Members[i];
return 0;
}
-
-/// getDefinitionDecl - Returns the RecordDecl for the struct/union that
-/// represents the actual definition (i.e., not a forward declaration).
-/// This method returns NULL if no such RecordDecl exists.
-const RecordDecl* RecordDecl::getDefinitionDecl() const {
- const RecordDecl* R = this;
-
- for (RecordDecl* N = R->NextDecl; N; N = R->NextDecl)
- R = N;
-
- return R->Members ? R : 0;
-}
-
diff --git a/lib/AST/DeclCXX.cpp b/lib/AST/DeclCXX.cpp
index 2fe69fced5..0cce7db1d6 100644
--- a/lib/AST/DeclCXX.cpp
+++ b/lib/AST/DeclCXX.cpp
@@ -27,8 +27,7 @@ CXXFieldDecl *CXXFieldDecl::Create(ASTContext &C, CXXRecordDecl *RD,
}
CXXRecordDecl *CXXRecordDecl::Create(ASTContext &C, TagKind TK, DeclContext *DC,
- SourceLocation L, IdentifierInfo *Id,
- CXXRecordDecl *PrevDecl) {
+ SourceLocation L, IdentifierInfo *Id) {
Kind DK;
switch (TK) {
default: assert(0 && "Invalid TagKind!");
@@ -38,7 +37,7 @@ CXXRecordDecl *CXXRecordDecl::Create(ASTContext &C, TagKind TK, DeclContext *DC,
case TK_class: DK = CXXClass; break;
}
void *Mem = C.getAllocator().Allocate<CXXRecordDecl>();
- return new (Mem) CXXRecordDecl(DK, DC, L, Id, PrevDecl);
+ return new (Mem) CXXRecordDecl(DK, DC, L, Id);
}
CXXMethodDecl *
diff --git a/lib/AST/DeclSerialization.cpp b/lib/AST/DeclSerialization.cpp
index 82a8fcd0f6..3f36e3ac89 100644
--- a/lib/AST/DeclSerialization.cpp
+++ b/lib/AST/DeclSerialization.cpp
@@ -449,7 +449,6 @@ void RecordDecl::EmitImpl(Serializer& S) const {
ScopedDecl::EmitInRec(S);
S.EmitBool(isDefinition());
S.EmitBool(hasFlexibleArrayMember());
- S.EmitPtr(NextDecl);
S.EmitSInt(getNumMembers());
if (getNumMembers() > 0) {
assert (Members);
@@ -463,12 +462,11 @@ RecordDecl* RecordDecl::CreateImpl(Decl::Kind DK, Deserializer& D,
ASTContext& C) {
void *Mem = C.getAllocator().Allocate<RecordDecl>();
- RecordDecl* decl = new (Mem) RecordDecl(DK, 0, SourceLocation(), NULL, NULL);
+ RecordDecl* decl = new (Mem) RecordDecl(DK, 0, SourceLocation(), NULL);
decl->ScopedDecl::ReadInRec(D, C);
decl->setDefinition(D.ReadBool());
decl->setHasFlexibleArrayMember(D.ReadBool());
- D.ReadPtr(decl->NextDecl); // Allow backpatching.
decl->NumMembers = D.ReadSInt();
if (decl->getNumMembers() > 0) {
diff --git a/lib/CodeGen/CGObjCMac.cpp b/lib/CodeGen/CGObjCMac.cpp
index 9638bc1430..a535ea254e 100644
--- a/lib/CodeGen/CGObjCMac.cpp
+++ b/lib/CodeGen/CGObjCMac.cpp
@@ -1866,7 +1866,7 @@ ObjCTypesHelper::ObjCTypesHelper(CodeGen::CodeGenModule &cgm)
// FIXME: Merge with rewriter code?
RecordDecl *RD = RecordDecl::Create(Ctx, TagDecl::TK_struct, 0,
SourceLocation(),
- &Ctx.Idents.get("_objc_super"), 0);
+ &Ctx.Idents.get("_objc_super"));
FieldDecl *FieldDecls[2];
FieldDecls[0] = FieldDecl::Create(Ctx, SourceLocation(), 0,
Ctx.getObjCIdType());
diff --git a/lib/Sema/Sema.cpp b/lib/Sema/Sema.cpp
index b288c62787..9092f83f0a 100644
--- a/lib/Sema/Sema.cpp
+++ b/lib/Sema/Sema.cpp
@@ -32,11 +32,11 @@ static inline RecordDecl *CreateStructDecl(ASTContext &C, const char *Name)
if (C.getLangOptions().CPlusPlus)
return CXXRecordDecl::Create(C, TagDecl::TK_struct,
C.getTranslationUnitDecl(),
- SourceLocation(), &C.Idents.get(Name), 0);
+ SourceLocation(), &C.Idents.get(Name));
else
return RecordDecl::Create(C, TagDecl::TK_struct,
C.getTranslationUnitDecl(),
- SourceLocation(), &C.Idents.get(Name), 0);
+ SourceLocation(), &C.Idents.get(Name));
}
void Sema::ActOnTranslationUnitScope(SourceLocation Loc, Scope *S) {
diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp
index b45611ca59..53327e497e 100644
--- a/lib/Sema/SemaDecl.cpp
+++ b/lib/Sema/SemaDecl.cpp
@@ -1765,14 +1765,12 @@ Sema::DeclTy *Sema::ActOnTag(Scope *S, unsigned TagType, TagKind TK,
// We use 'dyn_cast' instead of 'cast' because PrevDecl might not
// be a CXXRecordDecl* if we had a redefinition error. In this case,
// the dyn_cast will return a NULL pointer.
- New = CXXRecordDecl::Create(Context, Kind, CurContext, Loc, Name,
- dyn_cast_or_null<CXXRecordDecl>(PrevDecl));
+ New = CXXRecordDecl::Create(Context, Kind, CurContext, Loc, Name);
else
// We use 'dyn_cast' instead of 'cast' because PrevDecl might not
// be a RecordDecl* if we had a redefinition error. In this case,
// the dyn_cast will return a NULL pointer.
- New = RecordDecl::Create(Context, Kind, CurContext, Loc, Name,
- dyn_cast_or_null<RecordDecl>(PrevDecl));
+ New = RecordDecl::Create(Context, Kind, CurContext, Loc, Name);
}
// If this has an identifier, add it to the scope stack.