FYI, this breaks clang: .../llvm/tools/clang/lib/AST/DeclObjC.cpp:793:7: error: static_assert expression is not an integral constant expression static_cast<unsigned>(ObjCMethodDeclBits.ObjCMethodFamilyBitWidth) == ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .../llvm/tools/clang/lib/AST/DeclObjC.cpp:793:29: note: implicit use of 'this' pointer is only allowed within the evaluation of a call to a 'constexpr' member function static_cast<unsigned>(ObjCMethodDeclBits.ObjCMethodFamilyBitWidth) == ^ 1 error generated.
On Wed, Aug 1, 2018 at 2:31 PM Erich Keane via cfe-commits < cfe-commits@lists.llvm.org> wrote: > Author: erichkeane > Date: Wed Aug 1 14:31:08 2018 > New Revision: 338641 > > URL: http://llvm.org/viewvc/llvm-project?rev=338641&view=rev > Log: > [AST][4/4] Move the bit-fields from ObjCMethodDecl and ObjCContainerDecl > into DeclContext > > This patch follows https://reviews.llvm.org/D49729, > https://reviews.llvm.org/D49732 and > https://reviews.llvm.org/D49733. > > Move the bits from ObjCMethodDecl and ObjCContainerDecl > into DeclContext. > > Differential Revision: https://reviews.llvm.org/D49734 > > Patch By: bricci > > Modified: > cfe/trunk/include/clang/AST/DeclObjC.h > cfe/trunk/lib/AST/DeclObjC.cpp > cfe/trunk/lib/Sema/SemaDeclObjC.cpp > cfe/trunk/lib/Serialization/ASTReaderDecl.cpp > cfe/trunk/lib/Serialization/ASTWriterDecl.cpp > > Modified: cfe/trunk/include/clang/AST/DeclObjC.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DeclObjC.h?rev=338641&r1=338640&r2=338641&view=diff > > ============================================================================== > --- cfe/trunk/include/clang/AST/DeclObjC.h (original) > +++ cfe/trunk/include/clang/AST/DeclObjC.h Wed Aug 1 14:31:08 2018 > @@ -141,58 +141,10 @@ public: > enum ImplementationControl { None, Required, Optional }; > > private: > - // The conventional meaning of this method; an ObjCMethodFamily. > - // This is not serialized; instead, it is computed on demand and > - // cached. > - mutable unsigned Family : ObjCMethodFamilyBitWidth; > - > - /// instance (true) or class (false) method. > - unsigned IsInstance : 1; > - unsigned IsVariadic : 1; > - > - /// True if this method is the getter or setter for an explicit > property. > - unsigned IsPropertyAccessor : 1; > - > - // Method has a definition. > - unsigned IsDefined : 1; > - > - /// Method redeclaration in the same interface. > - unsigned IsRedeclaration : 1; > - > - /// Is redeclared in the same interface. > - mutable unsigned HasRedeclaration : 1; > - > - // NOTE: VC++ treats enums as signed, avoid using ImplementationControl > enum > - /// \@required/\@optional > - unsigned DeclImplementation : 2; > - > - // NOTE: VC++ treats enums as signed, avoid using the ObjCDeclQualifier > enum > - /// in, inout, etc. > - unsigned objcDeclQualifier : 7; > - > - /// Indicates whether this method has a related result type. > - unsigned RelatedResultType : 1; > - > - /// Whether the locations of the selector identifiers are in a > - /// "standard" position, a enum SelectorLocationsKind. > - unsigned SelLocsKind : 2; > - > - /// Whether this method overrides any other in the class hierarchy. > - /// > - /// A method is said to override any method in the class's > - /// base classes, its protocols, or its categories' protocols, that has > - /// the same selector and is of the same kind (class or instance). > - /// A method in an implementation is not considered as overriding the > same > - /// method in the interface or its categories. > - unsigned IsOverriding : 1; > - > - /// Indicates if the method was a definition but its body was skipped. > - unsigned HasSkippedBody : 1; > - > - // Return type of this method. > + /// Return type of this method. > QualType MethodDeclType; > > - // Type source information for the return type. > + /// Type source information for the return type. > TypeSourceInfo *ReturnTInfo; > > /// Array of ParmVarDecls for the formal parameters of this method > @@ -203,7 +155,7 @@ private: > /// List of attributes for this method declaration. > SourceLocation DeclEndLoc; // the location of the ';' or '{'. > > - // The following are only used for method definitions, null otherwise. > + /// The following are only used for method definitions, null otherwise. > LazyDeclStmtPtr Body; > > /// SelfDecl - Decl for the implicit self parameter. This is lazily > @@ -220,21 +172,14 @@ private: > bool isVariadic = false, bool isPropertyAccessor = false, > bool isImplicitlyDeclared = false, bool isDefined = > false, > ImplementationControl impControl = None, > - bool HasRelatedResultType = false) > - : NamedDecl(ObjCMethod, contextDecl, beginLoc, SelInfo), > - DeclContext(ObjCMethod), Family(InvalidObjCMethodFamily), > - IsInstance(isInstance), IsVariadic(isVariadic), > - IsPropertyAccessor(isPropertyAccessor), IsDefined(isDefined), > - IsRedeclaration(0), HasRedeclaration(0), > DeclImplementation(impControl), > - objcDeclQualifier(OBJC_TQ_None), > - RelatedResultType(HasRelatedResultType), > - SelLocsKind(SelLoc_StandardNoSpace), IsOverriding(0), > HasSkippedBody(0), > - MethodDeclType(T), ReturnTInfo(ReturnTInfo), DeclEndLoc(endLoc) { > - setImplicit(isImplicitlyDeclared); > - } > + bool HasRelatedResultType = false); > > SelectorLocationsKind getSelLocsKind() const { > - return (SelectorLocationsKind)SelLocsKind; > + return > static_cast<SelectorLocationsKind>(ObjCMethodDeclBits.SelLocsKind); > + } > + > + void setSelLocsKind(SelectorLocationsKind Kind) { > + ObjCMethodDeclBits.SelLocsKind = Kind; > } > > bool hasStandardSelLocs() const { > @@ -244,10 +189,10 @@ private: > /// Get a pointer to the stored selector identifiers locations array. > /// No locations will be stored if HasStandardSelLocs is true. > SourceLocation *getStoredSelLocs() { > - return reinterpret_cast<SourceLocation*>(getParams() + NumParams); > + return reinterpret_cast<SourceLocation *>(getParams() + NumParams); > } > const SourceLocation *getStoredSelLocs() const { > - return reinterpret_cast<const SourceLocation*>(getParams() + > NumParams); > + return reinterpret_cast<const SourceLocation *>(getParams() + > NumParams); > } > > /// Get a pointer to the stored selector identifiers locations array. > @@ -297,21 +242,35 @@ public: > } > > ObjCDeclQualifier getObjCDeclQualifier() const { > - return ObjCDeclQualifier(objcDeclQualifier); > + return > static_cast<ObjCDeclQualifier>(ObjCMethodDeclBits.objcDeclQualifier); > + } > + > + void setObjCDeclQualifier(ObjCDeclQualifier QV) { > + ObjCMethodDeclBits.objcDeclQualifier = QV; > } > - void setObjCDeclQualifier(ObjCDeclQualifier QV) { objcDeclQualifier = > QV; } > > /// Determine whether this method has a result type that is related > /// to the message receiver's type. > - bool hasRelatedResultType() const { return RelatedResultType; } > + bool hasRelatedResultType() const { > + return ObjCMethodDeclBits.RelatedResultType; > + } > > /// Note whether this method has a related result type. > - void SetRelatedResultType(bool RRT = true) { RelatedResultType = RRT; } > + void setRelatedResultType(bool RRT = true) { > + ObjCMethodDeclBits.RelatedResultType = RRT; > + } > > /// True if this is a method redeclaration in the same interface. > - bool isRedeclaration() const { return IsRedeclaration; } > + bool isRedeclaration() const { return > ObjCMethodDeclBits.IsRedeclaration; } > + void setIsRedeclaration(bool RD) { ObjCMethodDeclBits.IsRedeclaration = > RD; } > void setAsRedeclaration(const ObjCMethodDecl *PrevMethod); > > + /// True if redeclared in the same interface. > + bool hasRedeclaration() const { return > ObjCMethodDeclBits.HasRedeclaration; } > + void setHasRedeclaration(bool HRD) const { > + ObjCMethodDeclBits.HasRedeclaration = HRD; > + } > + > /// Returns the location where the declarator ends. It will be > /// the location of ';' for a method declaration and the location of '{' > /// for a method definition. > @@ -449,18 +408,26 @@ public: > /// Determines the family of this method. > ObjCMethodFamily getMethodFamily() const; > > - bool isInstanceMethod() const { return IsInstance; } > - void setInstanceMethod(bool isInst) { IsInstance = isInst; } > - bool isVariadic() const { return IsVariadic; } > - void setVariadic(bool isVar) { IsVariadic = isVar; } > + bool isInstanceMethod() const { return ObjCMethodDeclBits.IsInstance; } > + void setInstanceMethod(bool isInst) { > + ObjCMethodDeclBits.IsInstance = isInst; > + } > > - bool isClassMethod() const { return !IsInstance; } > + bool isVariadic() const { return ObjCMethodDeclBits.IsVariadic; } > + void setVariadic(bool isVar) { ObjCMethodDeclBits.IsVariadic = isVar; } > > - bool isPropertyAccessor() const { return IsPropertyAccessor; } > - void setPropertyAccessor(bool isAccessor) { IsPropertyAccessor = > isAccessor; } > + bool isClassMethod() const { return !isInstanceMethod(); } > > - bool isDefined() const { return IsDefined; } > - void setDefined(bool isDefined) { IsDefined = isDefined; } > + bool isPropertyAccessor() const { > + return ObjCMethodDeclBits.IsPropertyAccessor; > + } > + > + void setPropertyAccessor(bool isAccessor) { > + ObjCMethodDeclBits.IsPropertyAccessor = isAccessor; > + } > + > + bool isDefined() const { return ObjCMethodDeclBits.IsDefined; } > + void setDefined(bool isDefined) { ObjCMethodDeclBits.IsDefined = > isDefined; } > > /// Whether this method overrides any other in the class hierarchy. > /// > @@ -469,8 +436,8 @@ public: > /// the same selector and is of the same kind (class or instance). > /// A method in an implementation is not considered as overriding the > same > /// method in the interface or its categories. > - bool isOverriding() const { return IsOverriding; } > - void setOverriding(bool isOverriding) { IsOverriding = isOverriding; } > + bool isOverriding() const { return ObjCMethodDeclBits.IsOverriding; } > + void setOverriding(bool IsOver) { ObjCMethodDeclBits.IsOverriding = > IsOver; } > > /// Return overridden methods for the given \p Method. > /// > @@ -484,8 +451,10 @@ public: > SmallVectorImpl<const ObjCMethodDecl *> &Overridden) > const; > > /// True if the method was a definition but its body was skipped. > - bool hasSkippedBody() const { return HasSkippedBody; } > - void setHasSkippedBody(bool Skipped = true) { HasSkippedBody = Skipped; > } > + bool hasSkippedBody() const { return ObjCMethodDeclBits.HasSkippedBody; > } > + void setHasSkippedBody(bool Skipped = true) { > + ObjCMethodDeclBits.HasSkippedBody = Skipped; > + } > > /// Returns the property associated with this method's selector. > /// > @@ -496,11 +465,11 @@ public: > > // Related to protocols declared in \@protocol > void setDeclImplementation(ImplementationControl ic) { > - DeclImplementation = ic; > + ObjCMethodDeclBits.DeclImplementation = ic; > } > > ImplementationControl getImplementationControl() const { > - return ImplementationControl(DeclImplementation); > + return ImplementationControl(ObjCMethodDeclBits.DeclImplementation); > } > > bool isOptional() const { > @@ -984,8 +953,6 @@ public: > /// ObjCProtocolDecl, and ObjCImplDecl. > /// > class ObjCContainerDecl : public NamedDecl, public DeclContext { > - SourceLocation AtStart; > - > // These two locations in the range mark the end of the method > container. > // The first points to the '@' token, and the second to the 'end' token. > SourceRange AtEnd; > @@ -993,10 +960,8 @@ class ObjCContainerDecl : public NamedDe > void anchor() override; > > public: > - ObjCContainerDecl(Kind DK, DeclContext *DC, > - IdentifierInfo *Id, SourceLocation nameLoc, > - SourceLocation atStartLoc) > - : NamedDecl(DK, DC, nameLoc, Id), DeclContext(DK), > AtStart(atStartLoc) {} > + ObjCContainerDecl(Kind DK, DeclContext *DC, IdentifierInfo *Id, > + SourceLocation nameLoc, SourceLocation atStartLoc); > > // Iterator access to instance/class properties. > using prop_iterator = specific_decl_iterator<ObjCPropertyDecl>; > @@ -1130,20 +1095,19 @@ public: > virtual void collectPropertiesToImplement(PropertyMap &PM, > PropertyDeclOrder &PO) const > {} > > - SourceLocation getAtStartLoc() const { return AtStart; } > - void setAtStartLoc(SourceLocation Loc) { AtStart = Loc; } > + SourceLocation getAtStartLoc() const { return > ObjCContainerDeclBits.AtStart; } > > - // Marks the end of the container. > - SourceRange getAtEndRange() const { > - return AtEnd; > + void setAtStartLoc(SourceLocation Loc) { > + ObjCContainerDeclBits.AtStart = Loc; > } > > - void setAtEndRange(SourceRange atEnd) { > - AtEnd = atEnd; > - } > + // Marks the end of the container. > + SourceRange getAtEndRange() const { return AtEnd; } > + > + void setAtEndRange(SourceRange atEnd) { AtEnd = atEnd; } > > SourceRange getSourceRange() const override LLVM_READONLY { > - return SourceRange(AtStart, getAtEndRange().getEnd()); > + return SourceRange(getAtStartLoc(), getAtEndRange().getEnd()); > } > > // Implement isa/cast/dyncast/etc. > > Modified: cfe/trunk/lib/AST/DeclObjC.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/DeclObjC.cpp?rev=338641&r1=338640&r2=338641&view=diff > > ============================================================================== > --- cfe/trunk/lib/AST/DeclObjC.cpp (original) > +++ cfe/trunk/lib/AST/DeclObjC.cpp Wed Aug 1 14:31:08 2018 > @@ -65,6 +65,13 @@ void ObjCProtocolList::set(ObjCProtocolD > // ObjCInterfaceDecl > > > //===----------------------------------------------------------------------===// > > +ObjCContainerDecl::ObjCContainerDecl(Kind DK, DeclContext *DC, > + IdentifierInfo *Id, SourceLocation > nameLoc, > + SourceLocation atStartLoc) > + : NamedDecl(DK, DC, nameLoc, Id), DeclContext(DK) { > + setAtStartLoc(atStartLoc); > +} > + > void ObjCContainerDecl::anchor() {} > > /// getIvarDecl - This method looks up an ivar in this ContextDecl. > @@ -769,6 +776,44 @@ ObjCMethodDecl *ObjCInterfaceDecl::looku > // ObjCMethodDecl > > > //===----------------------------------------------------------------------===// > > +ObjCMethodDecl::ObjCMethodDecl(SourceLocation beginLoc, SourceLocation > endLoc, > + Selector SelInfo, QualType T, > + TypeSourceInfo *ReturnTInfo, > + DeclContext *contextDecl, bool isInstance, > + bool isVariadic, bool isPropertyAccessor, > + bool isImplicitlyDeclared, bool isDefined, > + ImplementationControl impControl, > + bool HasRelatedResultType) > + : NamedDecl(ObjCMethod, contextDecl, beginLoc, SelInfo), > + DeclContext(ObjCMethod), MethodDeclType(T), > ReturnTInfo(ReturnTInfo), > + DeclEndLoc(endLoc) { > + // See the comment in ObjCMethodFamilyBitfields about > + // ObjCMethodFamilyBitWidth for why we check this. > + static_assert( > + static_cast<unsigned>(ObjCMethodDeclBits.ObjCMethodFamilyBitWidth) > == > + static_cast<unsigned>(ObjCMethodFamilyBitWidth), > + "ObjCMethodDeclBitfields::ObjCMethodFamilyBitWidth and " > + "ObjCMethodFamilyBitWidth do not match!"); > + > + // Initialized the bits stored in DeclContext. > + ObjCMethodDeclBits.Family = > + static_cast<ObjCMethodFamily>(InvalidObjCMethodFamily); > + setInstanceMethod(isInstance); > + setVariadic(isVariadic); > + setPropertyAccessor(isPropertyAccessor); > + setDefined(isDefined); > + setIsRedeclaration(false); > + setHasRedeclaration(false); > + setDeclImplementation(impControl); > + setObjCDeclQualifier(OBJC_TQ_None); > + setRelatedResultType(HasRelatedResultType); > + setSelLocsKind(SelLoc_StandardNoSpace); > + setOverriding(false); > + setHasSkippedBody(false); > + > + setImplicit(isImplicitlyDeclared); > +} > + > ObjCMethodDecl *ObjCMethodDecl::Create( > ASTContext &C, SourceLocation beginLoc, SourceLocation endLoc, > Selector SelInfo, QualType T, TypeSourceInfo *ReturnTInfo, > @@ -810,8 +855,8 @@ Stmt *ObjCMethodDecl::getBody() const { > void ObjCMethodDecl::setAsRedeclaration(const ObjCMethodDecl *PrevMethod) > { > assert(PrevMethod); > getASTContext().setObjCMethodRedeclaration(PrevMethod, this); > - IsRedeclaration = true; > - PrevMethod->HasRedeclaration = true; > + setIsRedeclaration(true); > + PrevMethod->setHasRedeclaration(true); > } > > void ObjCMethodDecl::setParamsAndSelLocs(ASTContext &C, > @@ -846,9 +891,9 @@ void ObjCMethodDecl::setMethodParams(AST > if (isImplicit()) > return setParamsAndSelLocs(C, Params, llvm::None); > > - SelLocsKind = hasStandardSelectorLocs(getSelector(), SelLocs, Params, > - DeclEndLoc); > - if (SelLocsKind != SelLoc_NonStandard) > + setSelLocsKind(hasStandardSelectorLocs(getSelector(), SelLocs, Params, > + DeclEndLoc)); > + if (getSelLocsKind() != SelLoc_NonStandard) > return setParamsAndSelLocs(C, Params, llvm::None); > > setParamsAndSelLocs(C, Params, SelLocs); > @@ -860,7 +905,7 @@ void ObjCMethodDecl::setMethodParams(AST > ObjCMethodDecl *ObjCMethodDecl::getNextRedeclarationImpl() { > ASTContext &Ctx = getASTContext(); > ObjCMethodDecl *Redecl = nullptr; > - if (HasRedeclaration) > + if (hasRedeclaration()) > Redecl = > const_cast<ObjCMethodDecl*>(Ctx.getObjCMethodRedeclaration(this)); > if (Redecl) > return Redecl; > @@ -938,7 +983,7 @@ SourceLocation ObjCMethodDecl::getLocEnd > } > > ObjCMethodFamily ObjCMethodDecl::getMethodFamily() const { > - auto family = static_cast<ObjCMethodFamily>(Family); > + auto family = static_cast<ObjCMethodFamily>(ObjCMethodDeclBits.Family); > if (family != static_cast<unsigned>(InvalidObjCMethodFamily)) > return family; > > @@ -954,7 +999,7 @@ ObjCMethodFamily ObjCMethodDecl::getMeth > case ObjCMethodFamilyAttr::OMF_mutableCopy: family = OMF_mutableCopy; > break; > case ObjCMethodFamilyAttr::OMF_new: family = OMF_new; break; > } > - Family = static_cast<unsigned>(family); > + ObjCMethodDeclBits.Family = family; > return family; > } > > @@ -1025,7 +1070,7 @@ ObjCMethodFamily ObjCMethodDecl::getMeth > } > > // Cache the result. > - Family = static_cast<unsigned>(family); > + ObjCMethodDeclBits.Family = family; > return family; > } > > > Modified: cfe/trunk/lib/Sema/SemaDeclObjC.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclObjC.cpp?rev=338641&r1=338640&r2=338641&view=diff > > ============================================================================== > --- cfe/trunk/lib/Sema/SemaDeclObjC.cpp (original) > +++ cfe/trunk/lib/Sema/SemaDeclObjC.cpp Wed Aug 1 14:31:08 2018 > @@ -4351,7 +4351,7 @@ void Sema::CheckObjCMethodOverrides(ObjC > > // Propagate down the 'related result type' bit from overridden > methods. > if (RTC != Sema::RTC_Incompatible && > overridden->hasRelatedResultType()) > - ObjCMethod->SetRelatedResultType(); > + ObjCMethod->setRelatedResultType(); > > // Then merge the declarations. > mergeObjCMethodDecls(ObjCMethod, overridden); > @@ -4746,7 +4746,7 @@ Decl *Sema::ActOnMethodDeclaration( > > if (InferRelatedResultType && > !ObjCMethod->getReturnType()->isObjCIndependentClassType()) > - ObjCMethod->SetRelatedResultType(); > + ObjCMethod->setRelatedResultType(); > } > > if (MethodDefinition && > > Modified: cfe/trunk/lib/Serialization/ASTReaderDecl.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReaderDecl.cpp?rev=338641&r1=338640&r2=338641&view=diff > > ============================================================================== > --- cfe/trunk/lib/Serialization/ASTReaderDecl.cpp (original) > +++ cfe/trunk/lib/Serialization/ASTReaderDecl.cpp Wed Aug 1 14:31:08 2018 > @@ -1007,18 +1007,18 @@ void ASTDeclReader::VisitObjCMethodDecl( > MD->setVariadic(Record.readInt()); > MD->setPropertyAccessor(Record.readInt()); > MD->setDefined(Record.readInt()); > - MD->IsOverriding = Record.readInt(); > - MD->HasSkippedBody = Record.readInt(); > + MD->setOverriding(Record.readInt()); > + MD->setHasSkippedBody(Record.readInt()); > > - MD->IsRedeclaration = Record.readInt(); > - MD->HasRedeclaration = Record.readInt(); > - if (MD->HasRedeclaration) > + MD->setIsRedeclaration(Record.readInt()); > + MD->setHasRedeclaration(Record.readInt()); > + if (MD->hasRedeclaration()) > Reader.getContext().setObjCMethodRedeclaration(MD, > ReadDeclAs<ObjCMethodDecl>()); > > > > MD->setDeclImplementation((ObjCMethodDecl::ImplementationControl)Record.readInt()); > MD->setObjCDeclQualifier((Decl::ObjCDeclQualifier)Record.readInt()); > - MD->SetRelatedResultType(Record.readInt()); > + MD->setRelatedResultType(Record.readInt()); > MD->setReturnType(Record.readType()); > MD->setReturnTypeSourceInfo(GetTypeSourceInfo()); > MD->DeclEndLoc = ReadSourceLocation(); > @@ -1028,7 +1028,7 @@ void ASTDeclReader::VisitObjCMethodDecl( > for (unsigned I = 0; I != NumParams; ++I) > Params.push_back(ReadDeclAs<ParmVarDecl>()); > > - MD->SelLocsKind = Record.readInt(); > + MD->setSelLocsKind((SelectorLocationsKind)Record.readInt()); > unsigned NumStoredSelLocs = Record.readInt(); > SmallVector<SourceLocation, 16> SelLocs; > SelLocs.reserve(NumStoredSelLocs); > > Modified: cfe/trunk/lib/Serialization/ASTWriterDecl.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriterDecl.cpp?rev=338641&r1=338640&r2=338641&view=diff > > ============================================================================== > --- cfe/trunk/lib/Serialization/ASTWriterDecl.cpp (original) > +++ cfe/trunk/lib/Serialization/ASTWriterDecl.cpp Wed Aug 1 14:31:08 2018 > @@ -647,12 +647,12 @@ void ASTDeclWriter::VisitObjCMethodDecl( > Record.push_back(D->isVariadic()); > Record.push_back(D->isPropertyAccessor()); > Record.push_back(D->isDefined()); > - Record.push_back(D->IsOverriding); > - Record.push_back(D->HasSkippedBody); > + Record.push_back(D->isOverriding()); > + Record.push_back(D->hasSkippedBody()); > > - Record.push_back(D->IsRedeclaration); > - Record.push_back(D->HasRedeclaration); > - if (D->HasRedeclaration) { > + Record.push_back(D->isRedeclaration()); > + Record.push_back(D->hasRedeclaration()); > + if (D->hasRedeclaration()) { > assert(Context.getObjCMethodRedeclaration(D)); > Record.AddDeclRef(Context.getObjCMethodRedeclaration(D)); > } > @@ -669,7 +669,7 @@ void ASTDeclWriter::VisitObjCMethodDecl( > for (const auto *P : D->parameters()) > Record.AddDeclRef(P); > > - Record.push_back(D->SelLocsKind); > + Record.push_back(D->getSelLocsKind()); > unsigned NumStoredSelLocs = D->getNumStoredSelLocs(); > SourceLocation *SelLocs = D->getStoredSelLocs(); > Record.push_back(NumStoredSelLocs); > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits