diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/AST/ASTImporter.cpp | 3 | ||||
-rw-r--r-- | lib/AST/DeclObjC.cpp | 10 | ||||
-rw-r--r-- | lib/Sema/SemaDeclObjC.cpp | 6 | ||||
-rw-r--r-- | lib/Serialization/ASTReaderDecl.cpp | 4 | ||||
-rw-r--r-- | lib/Serialization/ASTWriterDecl.cpp | 2 |
5 files changed, 17 insertions, 8 deletions
diff --git a/lib/AST/ASTImporter.cpp b/lib/AST/ASTImporter.cpp index ae2b8903f2..7e252d1d16 100644 --- a/lib/AST/ASTImporter.cpp +++ b/lib/AST/ASTImporter.cpp @@ -3110,7 +3110,8 @@ Decl *ASTNodeImporter::VisitObjCProtocolDecl(ObjCProtocolDecl *D) { if (!ToProto) { ToProto = ObjCProtocolDecl::Create(Importer.getToContext(), DC, Name.getAsIdentifierInfo(), Loc, - Importer.Import(D->getAtStartLoc())); + Importer.Import(D->getAtStartLoc()), + D->isInitiallyForwardDecl()); ToProto->setForwardDecl(D->isForwardDecl()); ToProto->setLexicalDeclContext(LexicalDC); LexicalDC->addDecl(ToProto); diff --git a/lib/AST/DeclObjC.cpp b/lib/AST/DeclObjC.cpp index a589b7f9d3..5af3cf5990 100644 --- a/lib/AST/DeclObjC.cpp +++ b/lib/AST/DeclObjC.cpp @@ -623,8 +623,9 @@ ObjCInterfaceDecl(DeclContext *DC, SourceLocation atLoc, IdentifierInfo *Id, SourceLocation CLoc, bool FD, bool isInternal) : ObjCContainerDecl(ObjCInterface, DC, Id, CLoc, atLoc), TypeForDecl(0), SuperClass(0), - CategoryList(0), IvarList(0), - ForwardDecl(FD), InternalInterface(isInternal), ExternallyCompleted(false) { + CategoryList(0), IvarList(0), + InitiallyForwardDecl(FD), ForwardDecl(FD), + InternalInterface(isInternal), ExternallyCompleted(false) { } void ObjCInterfaceDecl::LoadExternalDefinition() const { @@ -866,8 +867,9 @@ ObjCAtDefsFieldDecl ObjCProtocolDecl *ObjCProtocolDecl::Create(ASTContext &C, DeclContext *DC, IdentifierInfo *Id, SourceLocation nameLoc, - SourceLocation atStartLoc) { - return new (C) ObjCProtocolDecl(DC, Id, nameLoc, atStartLoc); + SourceLocation atStartLoc, + bool isForwardDecl) { + return new (C) ObjCProtocolDecl(DC, Id, nameLoc, atStartLoc, isForwardDecl); } ObjCProtocolDecl *ObjCProtocolDecl::lookupProtocolNamed(IdentifierInfo *Name) { diff --git a/lib/Sema/SemaDeclObjC.cpp b/lib/Sema/SemaDeclObjC.cpp index 62b4a7c0cc..1de17d2131 100644 --- a/lib/Sema/SemaDeclObjC.cpp +++ b/lib/Sema/SemaDeclObjC.cpp @@ -597,7 +597,8 @@ Sema::ActOnStartProtocolInterface(SourceLocation AtProtoInterfaceLoc, PDecl->setChangedSinceDeserialization(true); } else { PDecl = ObjCProtocolDecl::Create(Context, CurContext, ProtocolName, - ProtocolLoc, AtProtoInterfaceLoc); + ProtocolLoc, AtProtoInterfaceLoc, + /*isForwardDecl=*/false); PushOnScopeChains(PDecl, TUScope); PDecl->setForwardDecl(false); } @@ -698,7 +699,8 @@ Sema::ActOnForwardProtocolDeclaration(SourceLocation AtProtocolLoc, bool isNew = false; if (PDecl == 0) { // Not already seen? PDecl = ObjCProtocolDecl::Create(Context, CurContext, Ident, - IdentList[i].second, AtProtocolLoc); + IdentList[i].second, AtProtocolLoc, + /*isForwardDecl=*/true); PushOnScopeChains(PDecl, TUScope, false); isNew = true; } diff --git a/lib/Serialization/ASTReaderDecl.cpp b/lib/Serialization/ASTReaderDecl.cpp index 6cc3f0a70b..a15dc424e7 100644 --- a/lib/Serialization/ASTReaderDecl.cpp +++ b/lib/Serialization/ASTReaderDecl.cpp @@ -554,6 +554,7 @@ void ASTDeclReader::VisitObjCInterfaceDecl(ObjCInterfaceDecl *ID) { // We will rebuild this list lazily. ID->setIvarList(0); + ID->InitiallyForwardDecl = Record[Idx++]; ID->setForwardDecl(Record[Idx++]); ID->setImplicitInterfaceDecl(Record[Idx++]); ID->setSuperClassLoc(ReadSourceLocation(Record, Idx)); @@ -571,6 +572,7 @@ void ASTDeclReader::VisitObjCIvarDecl(ObjCIvarDecl *IVD) { void ASTDeclReader::VisitObjCProtocolDecl(ObjCProtocolDecl *PD) { VisitObjCContainerDecl(PD); + PD->InitiallyForwardDecl = Record[Idx++]; PD->setForwardDecl(Record[Idx++]); PD->setLocEnd(ReadSourceLocation(Record, Idx)); unsigned NumProtoRefs = Record[Idx++]; @@ -1637,7 +1639,7 @@ Decl *ASTReader::ReadDeclRecord(DeclID ID) { break; case DECL_OBJC_PROTOCOL: D = ObjCProtocolDecl::Create(Context, 0, 0, SourceLocation(), - SourceLocation()); + SourceLocation(), 0); break; case DECL_OBJC_AT_DEFS_FIELD: D = ObjCAtDefsFieldDecl::Create(Context, 0, SourceLocation(), diff --git a/lib/Serialization/ASTWriterDecl.cpp b/lib/Serialization/ASTWriterDecl.cpp index a8243e502e..2925f49292 100644 --- a/lib/Serialization/ASTWriterDecl.cpp +++ b/lib/Serialization/ASTWriterDecl.cpp @@ -470,6 +470,7 @@ void ASTDeclWriter::VisitObjCInterfaceDecl(ObjCInterfaceDecl *D) { IEnd = D->ivar_end(); I != IEnd; ++I) Writer.AddDeclRef(*I, Record); Writer.AddDeclRef(D->getCategoryList(), Record); + Record.push_back(D->isInitiallyForwardDecl()); Record.push_back(D->isForwardDecl()); Record.push_back(D->isImplicitInterfaceDecl()); Writer.AddSourceLocation(D->getSuperClassLoc(), Record); @@ -499,6 +500,7 @@ void ASTDeclWriter::VisitObjCIvarDecl(ObjCIvarDecl *D) { void ASTDeclWriter::VisitObjCProtocolDecl(ObjCProtocolDecl *D) { VisitObjCContainerDecl(D); + Record.push_back(D->isInitiallyForwardDecl()); Record.push_back(D->isForwardDecl()); Writer.AddSourceLocation(D->getLocEnd(), Record); Record.push_back(D->protocol_size()); |