mirror of
https://github.com/intel/llvm.git
synced 2026-01-26 12:26:52 +08:00
Remove HasSynthBitfield and all callers/writers/etc. Also remove
previous ResetObjCLayout calls since this is now handled in Sema. Part of rdar://11842763 llvm-svn: 160527
This commit is contained in:
@@ -1311,9 +1311,6 @@ class ObjCCategoryDecl : public ObjCContainerDecl {
|
||||
/// FIXME: this should not be a singly-linked list. Move storage elsewhere.
|
||||
ObjCCategoryDecl *NextClassCategory;
|
||||
|
||||
/// true of class extension has at least one bitfield ivar.
|
||||
bool HasSynthBitfield : 1;
|
||||
|
||||
/// \brief The location of the category name in this declaration.
|
||||
SourceLocation CategoryNameLoc;
|
||||
|
||||
@@ -1327,7 +1324,7 @@ class ObjCCategoryDecl : public ObjCContainerDecl {
|
||||
SourceLocation IvarLBraceLoc=SourceLocation(),
|
||||
SourceLocation IvarRBraceLoc=SourceLocation())
|
||||
: ObjCContainerDecl(ObjCCategory, DC, Id, ClassNameLoc, AtLoc),
|
||||
ClassInterface(IDecl), NextClassCategory(0), HasSynthBitfield(false),
|
||||
ClassInterface(IDecl), NextClassCategory(0),
|
||||
CategoryNameLoc(CategoryNameLoc),
|
||||
IvarLBraceLoc(IvarLBraceLoc), IvarRBraceLoc(IvarRBraceLoc) {
|
||||
}
|
||||
@@ -1377,9 +1374,6 @@ public:
|
||||
bool IsClassExtension() const { return getIdentifier() == 0; }
|
||||
const ObjCCategoryDecl *getNextClassExtension() const;
|
||||
|
||||
bool hasSynthBitfield() const { return HasSynthBitfield; }
|
||||
void setHasSynthBitfield (bool val) { HasSynthBitfield = val; }
|
||||
|
||||
typedef specific_decl_iterator<ObjCIvarDecl> ivar_iterator;
|
||||
ivar_iterator ivar_begin() const {
|
||||
return ivar_iterator(decls_begin());
|
||||
@@ -1581,9 +1575,6 @@ class ObjCImplementationDecl : public ObjCImplDecl {
|
||||
/// true if class has a .cxx_[construct,destruct] method.
|
||||
bool HasCXXStructors : 1;
|
||||
|
||||
/// true if class extension has at least one bitfield ivar.
|
||||
bool HasSynthBitfield : 1;
|
||||
|
||||
ObjCImplementationDecl(DeclContext *DC,
|
||||
ObjCInterfaceDecl *classInterface,
|
||||
ObjCInterfaceDecl *superDecl,
|
||||
@@ -1594,7 +1585,7 @@ class ObjCImplementationDecl : public ObjCImplDecl {
|
||||
SuperClass(superDecl), IvarLBraceLoc(IvarLBraceLoc),
|
||||
IvarRBraceLoc(IvarRBraceLoc),
|
||||
IvarInitializers(0), NumIvarInitializers(0),
|
||||
HasCXXStructors(false), HasSynthBitfield(false){}
|
||||
HasCXXStructors(false) {}
|
||||
public:
|
||||
static ObjCImplementationDecl *Create(ASTContext &C, DeclContext *DC,
|
||||
ObjCInterfaceDecl *classInterface,
|
||||
@@ -1641,9 +1632,6 @@ public:
|
||||
bool hasCXXStructors() const { return HasCXXStructors; }
|
||||
void setHasCXXStructors(bool val) { HasCXXStructors = val; }
|
||||
|
||||
bool hasSynthBitfield() const { return HasSynthBitfield; }
|
||||
void setHasSynthBitfield (bool val) { HasSynthBitfield = val; }
|
||||
|
||||
/// getIdentifier - Get the identifier that names the class
|
||||
/// interface associated with this implementation.
|
||||
IdentifierInfo *getIdentifier() const {
|
||||
|
||||
@@ -922,16 +922,10 @@ ObjCIvarDecl *ObjCIvarDecl::Create(ASTContext &C, ObjCContainerDecl *DC,
|
||||
// decl contexts, the previously built IvarList must be rebuilt.
|
||||
ObjCInterfaceDecl *ID = dyn_cast<ObjCInterfaceDecl>(DC);
|
||||
if (!ID) {
|
||||
if (ObjCImplementationDecl *IM = dyn_cast<ObjCImplementationDecl>(DC)) {
|
||||
if (ObjCImplementationDecl *IM = dyn_cast<ObjCImplementationDecl>(DC))
|
||||
ID = IM->getClassInterface();
|
||||
if (BW)
|
||||
IM->setHasSynthBitfield(true);
|
||||
} else {
|
||||
ObjCCategoryDecl *CD = cast<ObjCCategoryDecl>(DC);
|
||||
ID = CD->getClassInterface();
|
||||
if (BW)
|
||||
CD->setHasSynthBitfield(true);
|
||||
}
|
||||
else
|
||||
ID = cast<ObjCCategoryDecl>(DC)->getClassInterface();
|
||||
}
|
||||
ID->setIvarList(0);
|
||||
}
|
||||
|
||||
@@ -778,7 +778,6 @@ struct XMLDumper : public XMLDeclVisitor<XMLDumper>,
|
||||
// ObjCCategoryDecl
|
||||
void visitObjCCategoryDeclAttrs(ObjCCategoryDecl *D) {
|
||||
setFlag("extension", D->IsClassExtension());
|
||||
setFlag("synth_bitfield", D->hasSynthBitfield());
|
||||
}
|
||||
void visitObjCCategoryDeclChildren(ObjCCategoryDecl *D) {
|
||||
visitDeclRef("interface", D->getClassInterface());
|
||||
@@ -804,7 +803,6 @@ struct XMLDumper : public XMLDeclVisitor<XMLDumper>,
|
||||
|
||||
// ObjCImplementationDecl
|
||||
void visitObjCImplementationDeclAttrs(ObjCImplementationDecl *D) {
|
||||
setFlag("synth_bitfield", D->hasSynthBitfield());
|
||||
set("identifier", D->getName());
|
||||
}
|
||||
void visitObjCImplementationDeclChildren(ObjCImplementationDecl *D) {
|
||||
|
||||
@@ -2586,14 +2586,8 @@ void CodeGenModule::EmitTopLevelDecl(Decl *D) {
|
||||
|
||||
// Forward declarations, no (immediate) code generation.
|
||||
case Decl::ObjCInterface:
|
||||
case Decl::ObjCCategory:
|
||||
break;
|
||||
|
||||
case Decl::ObjCCategory: {
|
||||
ObjCCategoryDecl *CD = cast<ObjCCategoryDecl>(D);
|
||||
if (CD->IsClassExtension() && CD->hasSynthBitfield())
|
||||
Context.ResetObjCLayout(CD->getClassInterface());
|
||||
break;
|
||||
}
|
||||
|
||||
case Decl::ObjCProtocol: {
|
||||
ObjCProtocolDecl *Proto = cast<ObjCProtocolDecl>(D);
|
||||
@@ -2610,8 +2604,6 @@ void CodeGenModule::EmitTopLevelDecl(Decl *D) {
|
||||
|
||||
case Decl::ObjCImplementation: {
|
||||
ObjCImplementationDecl *OMD = cast<ObjCImplementationDecl>(D);
|
||||
if (LangOpts.ObjCRuntime.isNonFragile() && OMD->hasSynthBitfield())
|
||||
Context.ResetObjCLayout(OMD->getClassInterface());
|
||||
EmitObjCPropertyImplementations(OMD);
|
||||
EmitObjCIvarInitializations(OMD);
|
||||
ObjCRuntime->GenerateClass(OMD);
|
||||
|
||||
@@ -803,7 +803,6 @@ void ASTDeclReader::VisitObjCCategoryDecl(ObjCCategoryDecl *CD) {
|
||||
ProtoLocs.push_back(ReadSourceLocation(Record, Idx));
|
||||
CD->setProtocolList(ProtoRefs.data(), NumProtoRefs, ProtoLocs.data(),
|
||||
Reader.getContext());
|
||||
CD->setHasSynthBitfield(Record[Idx++]);
|
||||
}
|
||||
|
||||
void ASTDeclReader::VisitObjCCompatibleAliasDecl(ObjCCompatibleAliasDecl *CAD) {
|
||||
@@ -849,7 +848,6 @@ void ASTDeclReader::VisitObjCImplementationDecl(ObjCImplementationDecl *D) {
|
||||
D->setIvarRBraceLoc(ReadSourceLocation(Record, Idx));
|
||||
llvm::tie(D->IvarInitializers, D->NumIvarInitializers)
|
||||
= Reader.ReadCXXCtorInitializers(F, Record, Idx);
|
||||
D->setHasSynthBitfield(Record[Idx++]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -561,7 +561,6 @@ void ASTDeclWriter::VisitObjCCategoryDecl(ObjCCategoryDecl *D) {
|
||||
PL = D->protocol_loc_begin(), PLEnd = D->protocol_loc_end();
|
||||
PL != PLEnd; ++PL)
|
||||
Writer.AddSourceLocation(*PL, Record);
|
||||
Record.push_back(D->hasSynthBitfield());
|
||||
Code = serialization::DECL_OBJC_CATEGORY;
|
||||
}
|
||||
|
||||
@@ -609,7 +608,6 @@ void ASTDeclWriter::VisitObjCImplementationDecl(ObjCImplementationDecl *D) {
|
||||
Writer.AddSourceLocation(D->getIvarRBraceLoc(), Record);
|
||||
Writer.AddCXXCtorInitializers(D->IvarInitializers, D->NumIvarInitializers,
|
||||
Record);
|
||||
Record.push_back(D->hasSynthBitfield());
|
||||
Code = serialization::DECL_OBJC_IMPLEMENTATION;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user