(And it was fixed in r338648) On Wed, Aug 1, 2018 at 3:24 PM David Jones <d...@google.com> wrote:
> 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