diff options
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/AST/Decl.cpp | 48 | ||||
| -rw-r--r-- | clang/lib/AST/DeclCXX.cpp | 17 | ||||
| -rw-r--r-- | clang/lib/Serialization/ASTReaderDecl.cpp | 53 | ||||
| -rw-r--r-- | clang/lib/Serialization/ASTWriterDecl.cpp | 41 |
4 files changed, 103 insertions, 56 deletions
diff --git a/clang/lib/AST/Decl.cpp b/clang/lib/AST/Decl.cpp index fe8285c444b..0edd18e3931 100644 --- a/clang/lib/AST/Decl.cpp +++ b/clang/lib/AST/Decl.cpp @@ -2609,6 +2609,38 @@ unsigned ParmVarDecl::getParameterIndexLarge() const { // FunctionDecl Implementation //===----------------------------------------------------------------------===// +FunctionDecl::FunctionDecl(Kind DK, ASTContext &C, DeclContext *DC, + SourceLocation StartLoc, + const DeclarationNameInfo &NameInfo, QualType T, + TypeSourceInfo *TInfo, StorageClass S, + bool isInlineSpecified, bool isConstexprSpecified) + : DeclaratorDecl(DK, DC, NameInfo.getLoc(), NameInfo.getName(), T, TInfo, + StartLoc), + DeclContext(DK), redeclarable_base(C), ODRHash(0), + EndRangeLoc(NameInfo.getEndLoc()), DNLoc(NameInfo.getInfo()) { + setStorageClass(S); + setInlineSpecified(isInlineSpecified); + setExplicitSpecified(false); + setVirtualAsWritten(false); + setPure(false); + setHasInheritedPrototype(false); + setHasWrittenPrototype(true); + setDeletedAsWritten(false); + setTrivial(false); + setTrivialForCall(false); + setDefaulted(false); + setExplicitlyDefaulted(false); + setHasImplicitReturnZero(false); + setLateTemplateParsed(false); + setConstexpr(isConstexprSpecified); + setInstantiationIsPending(false); + setUsesSEHTry(false); + setHasSkippedBody(false); + setWillHaveBody(false); + setIsMultiVersion(false); + setHasODRHash(false); +} + void FunctionDecl::getNameForDiagnostic( raw_ostream &OS, const PrintingPolicy &Policy, bool Qualified) const { NamedDecl::getNameForDiagnostic(OS, Policy, Qualified); @@ -2676,7 +2708,7 @@ void FunctionDecl::setBody(Stmt *B) { } void FunctionDecl::setPure(bool P) { - IsPure = P; + FunctionDeclBits.IsPure = P; if (P) if (auto *Parent = dyn_cast<CXXRecordDecl>(getDeclContext())) Parent->markedVirtualFunctionPure(); @@ -2892,8 +2924,8 @@ FunctionDecl::setPreviousDeclaration(FunctionDecl *PrevDecl) { FunTmpl->setPreviousDecl(PrevFunTmpl); } - if (PrevDecl && PrevDecl->IsInline) - IsInline = true; + if (PrevDecl && PrevDecl->isInlined()) + setImplicitlyInline(true); } FunctionDecl *FunctionDecl::getCanonicalDecl() { return getFirstDecl(); } @@ -3664,23 +3696,23 @@ unsigned FunctionDecl::getMemoryFunctionKind() const { } unsigned FunctionDecl::getODRHash() const { - assert(HasODRHash); + assert(hasODRHash()); return ODRHash; } unsigned FunctionDecl::getODRHash() { - if (HasODRHash) + if (hasODRHash()) return ODRHash; if (auto *FT = getInstantiatedFromMemberFunction()) { - HasODRHash = true; + setHasODRHash(true); ODRHash = FT->getODRHash(); return ODRHash; } class ODRHash Hash; Hash.AddFunctionDecl(this); - HasODRHash = true; + setHasODRHash(true); ODRHash = Hash.CalculateHash(); return ODRHash; } @@ -4350,7 +4382,7 @@ FunctionDecl *FunctionDecl::Create(ASTContext &C, DeclContext *DC, FunctionDecl *New = new (C, DC) FunctionDecl(Function, C, DC, StartLoc, NameInfo, T, TInfo, SC, isInlineSpecified, isConstexprSpecified); - New->HasWrittenPrototype = hasWrittenPrototype; + New->setHasWrittenPrototype(hasWrittenPrototype); return New; } diff --git a/clang/lib/AST/DeclCXX.cpp b/clang/lib/AST/DeclCXX.cpp index f4bffed6d5b..8fe27f1304a 100644 --- a/clang/lib/AST/DeclCXX.cpp +++ b/clang/lib/AST/DeclCXX.cpp @@ -2246,6 +2246,21 @@ SourceRange CXXCtorInitializer::getSourceRange() const { return SourceRange(getSourceLocation(), getRParenLoc()); } +CXXConstructorDecl::CXXConstructorDecl( + ASTContext &C, CXXRecordDecl *RD, SourceLocation StartLoc, + const DeclarationNameInfo &NameInfo, QualType T, TypeSourceInfo *TInfo, + bool isExplicitSpecified, bool isInline, bool isImplicitlyDeclared, + bool isConstexpr, InheritedConstructor Inherited) + : CXXMethodDecl(CXXConstructor, C, RD, StartLoc, NameInfo, T, TInfo, + SC_None, isInline, isConstexpr, SourceLocation()) { + setNumCtorInitializers(0); + setInheritingConstructor(static_cast<bool>(Inherited)); + setImplicit(isImplicitlyDeclared); + if (Inherited) + *getTrailingObjects<InheritedConstructor>() = Inherited; + setExplicitSpecified(isExplicitSpecified); +} + void CXXConstructorDecl::anchor() {} CXXConstructorDecl *CXXConstructorDecl::CreateDeserialized(ASTContext &C, @@ -2255,7 +2270,7 @@ CXXConstructorDecl *CXXConstructorDecl::CreateDeserialized(ASTContext &C, auto *Result = new (C, ID, Extra) CXXConstructorDecl( C, nullptr, SourceLocation(), DeclarationNameInfo(), QualType(), nullptr, false, false, false, false, InheritedConstructor()); - Result->IsInheritingConstructor = Inherited; + Result->setInheritingConstructor(Inherited); return Result; } diff --git a/clang/lib/Serialization/ASTReaderDecl.cpp b/clang/lib/Serialization/ASTReaderDecl.cpp index 3500d2e374d..2620a857b57 100644 --- a/clang/lib/Serialization/ASTReaderDecl.cpp +++ b/clang/lib/Serialization/ASTReaderDecl.cpp @@ -506,8 +506,8 @@ void ASTDeclReader::ReadFunctionDefinition(FunctionDecl *FD) { if (Record.readInt()) Reader.DefinitionSource[FD] = Loc.F->Kind == ModuleKind::MK_MainFile; if (auto *CD = dyn_cast<CXXConstructorDecl>(FD)) { - CD->NumCtorInitializers = Record.readInt(); - if (CD->NumCtorInitializers) + CD->setNumCtorInitializers(Record.readInt()); + if (CD->getNumCtorInitializers()) CD->CtorInitializers = ReadGlobalOffset(); } // Store the offset of the body so we can lazily load it later. @@ -855,30 +855,31 @@ void ASTDeclReader::VisitFunctionDecl(FunctionDecl *FD) { // FunctionDecl's body is handled last at ASTDeclReader::Visit, // after everything else is read. - FD->SClass = (StorageClass)Record.readInt(); - FD->IsInline = Record.readInt(); - FD->IsInlineSpecified = Record.readInt(); - FD->IsExplicitSpecified = Record.readInt(); - FD->IsVirtualAsWritten = Record.readInt(); - FD->IsPure = Record.readInt(); - FD->HasInheritedPrototype = Record.readInt(); - FD->HasWrittenPrototype = Record.readInt(); - FD->IsDeleted = Record.readInt(); - FD->IsTrivial = Record.readInt(); - FD->IsTrivialForCall = Record.readInt(); - FD->IsDefaulted = Record.readInt(); - FD->IsExplicitlyDefaulted = Record.readInt(); - FD->HasImplicitReturnZero = Record.readInt(); - FD->IsConstexpr = Record.readInt(); - FD->UsesSEHTry = Record.readInt(); - FD->HasSkippedBody = Record.readInt(); - FD->IsMultiVersion = Record.readInt(); - FD->IsLateTemplateParsed = Record.readInt(); - FD->setCachedLinkage(Linkage(Record.readInt())); + FD->setStorageClass(static_cast<StorageClass>(Record.readInt())); + FD->setInlineSpecified(Record.readInt()); + FD->setImplicitlyInline(Record.readInt()); + FD->setExplicitSpecified(Record.readInt()); + FD->setVirtualAsWritten(Record.readInt()); + FD->setPure(Record.readInt()); + FD->setHasInheritedPrototype(Record.readInt()); + FD->setHasWrittenPrototype(Record.readInt()); + FD->setDeletedAsWritten(Record.readInt()); + FD->setTrivial(Record.readInt()); + FD->setTrivialForCall(Record.readInt()); + FD->setDefaulted(Record.readInt()); + FD->setExplicitlyDefaulted(Record.readInt()); + FD->setHasImplicitReturnZero(Record.readInt()); + FD->setConstexpr(Record.readInt()); + FD->setUsesSEHTry(Record.readInt()); + FD->setHasSkippedBody(Record.readInt()); + FD->setIsMultiVersion(Record.readInt()); + FD->setLateTemplateParsed(Record.readInt()); + + FD->setCachedLinkage(static_cast<Linkage>(Record.readInt())); FD->EndRangeLoc = ReadSourceLocation(); FD->ODRHash = Record.readInt(); - FD->HasODRHash = true; + FD->setHasODRHash(true); switch ((FunctionDecl::TemplatedKind)Record.readInt()) { case FunctionDecl::TK_NonTemplate: @@ -1958,7 +1959,7 @@ ASTDeclReader::VisitCXXRecordDeclImpl(CXXRecordDecl *D) { void ASTDeclReader::VisitCXXDeductionGuideDecl(CXXDeductionGuideDecl *D) { VisitFunctionDecl(D); - D->IsCopyDeductionCandidate = Record.readInt(); + D->setIsCopyDeductionCandidate(Record.readInt()); } void ASTDeclReader::VisitCXXMethodDecl(CXXMethodDecl *D) { @@ -3380,7 +3381,7 @@ void ASTDeclReader::attachPreviousDeclImpl(ASTReader &Reader, // If the previous declaration is an inline function declaration, then this // declaration is too. - if (PrevFD->IsInline != FD->IsInline) { + if (PrevFD->isInlined() != FD->isInlined()) { // FIXME: [dcl.fct.spec]p4: // If a function with external linkage is declared inline in one // translation unit, it shall be declared inline in all translation @@ -3396,7 +3397,7 @@ void ASTDeclReader::attachPreviousDeclImpl(ASTReader &Reader, // module C instantiates the definition of X<int>::f // // If module B and C are merged, we do not have a violation of this rule. - FD->IsInline = true; + FD->setImplicitlyInline(true); } // If we need to propagate an exception specification along the redecl diff --git a/clang/lib/Serialization/ASTWriterDecl.cpp b/clang/lib/Serialization/ASTWriterDecl.cpp index d9836afc8ac..b2a8347c309 100644 --- a/clang/lib/Serialization/ASTWriterDecl.cpp +++ b/clang/lib/Serialization/ASTWriterDecl.cpp @@ -529,26 +529,25 @@ void ASTDeclWriter::VisitFunctionDecl(FunctionDecl *D) { // FunctionDecl's body is handled last at ASTWriterDecl::Visit, // after everything else is written. - - Record.push_back((int)D->SClass); // FIXME: stable encoding - Record.push_back(D->IsInline); - Record.push_back(D->IsInlineSpecified); - Record.push_back(D->IsExplicitSpecified); - Record.push_back(D->IsVirtualAsWritten); - Record.push_back(D->IsPure); - Record.push_back(D->HasInheritedPrototype); - Record.push_back(D->HasWrittenPrototype); - Record.push_back(D->IsDeleted); - Record.push_back(D->IsTrivial); - Record.push_back(D->IsTrivialForCall); - Record.push_back(D->IsDefaulted); - Record.push_back(D->IsExplicitlyDefaulted); - Record.push_back(D->HasImplicitReturnZero); - Record.push_back(D->IsConstexpr); - Record.push_back(D->UsesSEHTry); - Record.push_back(D->HasSkippedBody); - Record.push_back(D->IsMultiVersion); - Record.push_back(D->IsLateTemplateParsed); + Record.push_back(static_cast<int>(D->getStorageClass())); // FIXME: stable encoding + Record.push_back(D->isInlineSpecified()); + Record.push_back(D->isInlined()); + Record.push_back(D->isExplicitSpecified()); + Record.push_back(D->isVirtualAsWritten()); + Record.push_back(D->isPure()); + Record.push_back(D->hasInheritedPrototype()); + Record.push_back(D->hasWrittenPrototype()); + Record.push_back(D->isDeletedBit()); + Record.push_back(D->isTrivial()); + Record.push_back(D->isTrivialForCall()); + Record.push_back(D->isDefaulted()); + Record.push_back(D->isExplicitlyDefaulted()); + Record.push_back(D->hasImplicitReturnZero()); + Record.push_back(D->isConstexpr()); + Record.push_back(D->usesSEHTry()); + Record.push_back(D->hasSkippedBody()); + Record.push_back(D->isMultiVersion()); + Record.push_back(D->isLateTemplateParsed()); Record.push_back(D->getLinkageInternal()); Record.AddSourceLocation(D->getLocEnd()); @@ -628,7 +627,7 @@ void ASTDeclWriter::VisitFunctionDecl(FunctionDecl *D) { void ASTDeclWriter::VisitCXXDeductionGuideDecl(CXXDeductionGuideDecl *D) { VisitFunctionDecl(D); - Record.push_back(D->IsCopyDeductionCandidate); + Record.push_back(D->isCopyDeductionCandidate()); Code = serialization::DECL_CXX_DEDUCTION_GUIDE; } |

