llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: cor3ntin (cor3ntin) <details> <summary>Changes</summary> To avoid any possible confusion with the notion of pure function and the gnu::pure attribute. --- Patch is 27.47 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/78463.diff 33 Files Affected: - (modified) clang-tools-extra/clang-tidy/fuchsia/MultipleInheritanceCheck.cpp (+3-3) - (modified) clang-tools-extra/clang-tidy/modernize/UseEqualsDeleteCheck.cpp (+3-2) - (modified) clang-tools-extra/clangd/SemanticHighlighting.cpp (+1-1) - (modified) clang-tools-extra/clangd/XRefs.cpp (+1-1) - (modified) clang/include/clang/AST/Decl.h (+2-2) - (modified) clang/include/clang/AST/DeclBase.h (+1-1) - (modified) clang/include/clang/AST/DeclCXX.h (+2-2) - (modified) clang/include/clang/ASTMatchers/ASTMatchers.h (+1-3) - (modified) clang/lib/AST/ASTImporter.cpp (+1-1) - (modified) clang/lib/AST/ASTStructuralEquivalence.cpp (+1-1) - (modified) clang/lib/AST/Decl.cpp (+3-3) - (modified) clang/lib/AST/DeclCXX.cpp (+3-3) - (modified) clang/lib/AST/DeclPrinter.cpp (+1-1) - (modified) clang/lib/AST/ExprConstant.cpp (+1-1) - (modified) clang/lib/AST/Interp/Interp.cpp (+1-1) - (modified) clang/lib/AST/JSONNodeDumper.cpp (+1-1) - (modified) clang/lib/AST/ODRDiagsEmitter.cpp (+2-2) - (modified) clang/lib/AST/ODRHash.cpp (+1-1) - (modified) clang/lib/AST/RecordLayoutBuilder.cpp (+2-2) - (modified) clang/lib/AST/TextNodeDumper.cpp (+1-1) - (modified) clang/lib/AST/VTableBuilder.cpp (+9-9) - (modified) clang/lib/CodeGen/CGDebugInfo.cpp (+1-1) - (modified) clang/lib/CodeGen/CGVTables.cpp (+1-1) - (modified) clang/lib/Sema/Sema.cpp (+1-1) - (modified) clang/lib/Sema/SemaDecl.cpp (+5-4) - (modified) clang/lib/Sema/SemaDeclCXX.cpp (+5-4) - (modified) clang/lib/Sema/SemaExpr.cpp (+1-1) - (modified) clang/lib/Sema/SemaOverload.cpp (+1-1) - (modified) clang/lib/Sema/SemaTemplateInstantiateDecl.cpp (+1-1) - (modified) clang/lib/Serialization/ASTReaderDecl.cpp (+1-1) - (modified) clang/lib/Serialization/ASTWriterDecl.cpp (+1-1) - (modified) clang/lib/StaticAnalyzer/Checkers/VirtualCallChecker.cpp (+1-1) - (modified) clang/tools/libclang/CIndex.cpp (+1-1) ``````````diff diff --git a/clang-tools-extra/clang-tidy/fuchsia/MultipleInheritanceCheck.cpp b/clang-tools-extra/clang-tidy/fuchsia/MultipleInheritanceCheck.cpp index 8aecd3ba27b2e3..aa1d0cce8f87be 100644 --- a/clang-tools-extra/clang-tidy/fuchsia/MultipleInheritanceCheck.cpp +++ b/clang-tools-extra/clang-tidy/fuchsia/MultipleInheritanceCheck.cpp @@ -53,7 +53,7 @@ bool MultipleInheritanceCheck::isCurrentClassInterface( // Interfaces should have exclusively pure methods. return llvm::none_of(Node->methods(), [](const CXXMethodDecl *M) { - return M->isUserProvided() && !M->isPure() && !M->isStatic(); + return M->isUserProvided() && !M->isVirtualPure() && !M->isStatic(); }); } @@ -103,8 +103,8 @@ void MultipleInheritanceCheck::check(const MatchFinder::MatchResult &Result) { const auto *Base = cast<CXXRecordDecl>(Ty->getDecl()->getDefinition()); if (!isInterface(Base)) NumConcrete++; } - - // Check virtual bases to see if there is more than one concrete + + // Check virtual bases to see if there is more than one concrete // non-virtual base. for (const auto &V : D->vbases()) { const auto *Ty = V.getType()->getAs<RecordType>(); diff --git a/clang-tools-extra/clang-tidy/modernize/UseEqualsDeleteCheck.cpp b/clang-tools-extra/clang-tidy/modernize/UseEqualsDeleteCheck.cpp index 059a0af60d3ee8..e6c984aa41ef89 100644 --- a/clang-tools-extra/clang-tidy/modernize/UseEqualsDeleteCheck.cpp +++ b/clang-tools-extra/clang-tidy/modernize/UseEqualsDeleteCheck.cpp @@ -17,11 +17,12 @@ namespace clang::tidy::modernize { namespace { AST_MATCHER(FunctionDecl, hasAnyDefinition) { - if (Node.hasBody() || Node.isPure() || Node.isDefaulted() || Node.isDeleted()) + if (Node.hasBody() || Node.isVirtualPure() || Node.isDefaulted() || + Node.isDeleted()) return true; if (const FunctionDecl *Definition = Node.getDefinition()) - if (Definition->hasBody() || Definition->isPure() || + if (Definition->hasBody() || Definition->isVirtualPure() || Definition->isDefaulted() || Definition->isDeleted()) return true; diff --git a/clang-tools-extra/clangd/SemanticHighlighting.cpp b/clang-tools-extra/clangd/SemanticHighlighting.cpp index 37939d36425a97..79bbbfd7d861b4 100644 --- a/clang-tools-extra/clangd/SemanticHighlighting.cpp +++ b/clang-tools-extra/clangd/SemanticHighlighting.cpp @@ -265,7 +265,7 @@ bool isStatic(const Decl *D) { bool isAbstract(const Decl *D) { if (const auto *CMD = llvm::dyn_cast<CXXMethodDecl>(D)) - return CMD->isPure(); + return CMD->isVirtualPure(); if (const auto *CRD = llvm::dyn_cast<CXXRecordDecl>(D)) return CRD->hasDefinition() && CRD->isAbstract(); return false; diff --git a/clang-tools-extra/clangd/XRefs.cpp b/clang-tools-extra/clangd/XRefs.cpp index 5f41f788a69393..5ca2080990fc22 100644 --- a/clang-tools-extra/clangd/XRefs.cpp +++ b/clang-tools-extra/clangd/XRefs.cpp @@ -427,7 +427,7 @@ locateASTReferent(SourceLocation CurLoc, const syntax::Token *TouchedIdentifier, // Special case: virtual void ^method() = 0: jump to all overrides. // FIXME: extend it to ^virtual, unfortunately, virtual location is not // saved in the AST. - if (CMD->isPure()) { + if (CMD->isVirtualPure()) { if (TouchedIdentifier && SM.getSpellingLoc(CMD->getLocation()) == TouchedIdentifier->location()) { VirtualMethods.insert(getSymbolID(CMD)); diff --git a/clang/include/clang/AST/Decl.h b/clang/include/clang/AST/Decl.h index a807bcdd76b30d..14b5d6cdcc45a6 100644 --- a/clang/include/clang/AST/Decl.h +++ b/clang/include/clang/AST/Decl.h @@ -2293,8 +2293,8 @@ class FunctionDecl : public DeclaratorDecl, /// Whether this virtual function is pure, i.e. makes the containing class /// abstract. - bool isPure() const { return FunctionDeclBits.IsPure; } - void setPure(bool P = true); + bool isVirtualPure() const { return FunctionDeclBits.IsVirtualPure; } + void setIsVirtualPure(bool P = true); /// Whether this templated function will be late parsed. bool isLateTemplateParsed() const { diff --git a/clang/include/clang/AST/DeclBase.h b/clang/include/clang/AST/DeclBase.h index 10dcbdb262d84e..69c3dfed1e31de 100644 --- a/clang/include/clang/AST/DeclBase.h +++ b/clang/include/clang/AST/DeclBase.h @@ -1697,7 +1697,7 @@ class DeclContext { LLVM_PREFERRED_TYPE(bool) uint64_t IsVirtualAsWritten : 1; LLVM_PREFERRED_TYPE(bool) - uint64_t IsPure : 1; + uint64_t IsVirtualPure : 1; LLVM_PREFERRED_TYPE(bool) uint64_t HasInheritedPrototype : 1; LLVM_PREFERRED_TYPE(bool) diff --git a/clang/include/clang/AST/DeclCXX.h b/clang/include/clang/AST/DeclCXX.h index 648f5f94640870..d62cb631993276 100644 --- a/clang/include/clang/AST/DeclCXX.h +++ b/clang/include/clang/AST/DeclCXX.h @@ -266,7 +266,7 @@ class CXXRecordDecl : public RecordDecl { friend class LambdaExpr; friend class ODRDiagsEmitter; - friend void FunctionDecl::setPure(bool); + friend void FunctionDecl::setIsVirtualPure(bool); friend void TagDecl::startDefinition(); /// Values used in DefinitionData fields to represent special members. @@ -2121,7 +2121,7 @@ class CXXMethodDecl : public FunctionDecl { // Member function is virtual if it is marked explicitly so, or if it is // declared in __interface -- then it is automatically pure virtual. - if (CD->isVirtualAsWritten() || CD->isPure()) + if (CD->isVirtualAsWritten() || CD->isVirtualPure()) return true; return CD->size_overridden_methods() != 0; diff --git a/clang/include/clang/ASTMatchers/ASTMatchers.h b/clang/include/clang/ASTMatchers/ASTMatchers.h index 82a26356c58f55..310ba957b5be6f 100644 --- a/clang/include/clang/ASTMatchers/ASTMatchers.h +++ b/clang/include/clang/ASTMatchers/ASTMatchers.h @@ -6192,9 +6192,7 @@ AST_POLYMORPHIC_MATCHER(isFinal, /// }; /// \endcode /// matches A::x -AST_MATCHER(CXXMethodDecl, isPure) { - return Node.isPure(); -} +AST_MATCHER(CXXMethodDecl, isPure) { return Node.isVirtualPure(); } /// Matches if the given method declaration is const. /// diff --git a/clang/lib/AST/ASTImporter.cpp b/clang/lib/AST/ASTImporter.cpp index c8085c5dd48a59..4640ca00a2fd68 100644 --- a/clang/lib/AST/ASTImporter.cpp +++ b/clang/lib/AST/ASTImporter.cpp @@ -3896,7 +3896,7 @@ ExpectedDecl ASTNodeImporter::VisitFunctionDecl(FunctionDecl *D) { ToFunction->setLexicalDeclContext(LexicalDC); ToFunction->setVirtualAsWritten(D->isVirtualAsWritten()); ToFunction->setTrivial(D->isTrivial()); - ToFunction->setPure(D->isPure()); + ToFunction->setIsVirtualPure(D->isVirtualPure()); ToFunction->setDefaulted(D->isDefaulted()); ToFunction->setExplicitlyDefaulted(D->isExplicitlyDefaulted()); ToFunction->setDeletedAsWritten(D->isDeletedAsWritten()); diff --git a/clang/lib/AST/ASTStructuralEquivalence.cpp b/clang/lib/AST/ASTStructuralEquivalence.cpp index a9e0d1698a9178..6e6275a48e8b09 100644 --- a/clang/lib/AST/ASTStructuralEquivalence.cpp +++ b/clang/lib/AST/ASTStructuralEquivalence.cpp @@ -1410,7 +1410,7 @@ static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, Method1->isConst() == Method2->isConst() && Method1->isVolatile() == Method2->isVolatile() && Method1->isVirtual() == Method2->isVirtual() && - Method1->isPure() == Method2->isPure() && + Method1->isVirtualPure() == Method2->isVirtualPure() && Method1->isDefaulted() == Method2->isDefaulted() && Method1->isDeleted() == Method2->isDeleted(); if (!PropertiesEqual) diff --git a/clang/lib/AST/Decl.cpp b/clang/lib/AST/Decl.cpp index e1440e5183a4e6..09dc9eff74a904 100644 --- a/clang/lib/AST/Decl.cpp +++ b/clang/lib/AST/Decl.cpp @@ -3036,7 +3036,7 @@ FunctionDecl::FunctionDecl(Kind DK, ASTContext &C, DeclContext *DC, FunctionDeclBits.IsInline = isInlineSpecified; FunctionDeclBits.IsInlineSpecified = isInlineSpecified; FunctionDeclBits.IsVirtualAsWritten = false; - FunctionDeclBits.IsPure = false; + FunctionDeclBits.IsVirtualPure = false; FunctionDeclBits.HasInheritedPrototype = false; FunctionDeclBits.HasWrittenPrototype = true; FunctionDeclBits.IsDeleted = false; @@ -3203,8 +3203,8 @@ void FunctionDecl::setBody(Stmt *B) { EndRangeLoc = B->getEndLoc(); } -void FunctionDecl::setPure(bool P) { - FunctionDeclBits.IsPure = P; +void FunctionDecl::setIsVirtualPure(bool P) { + FunctionDeclBits.IsVirtualPure = P; if (P) if (auto *Parent = dyn_cast<CXXRecordDecl>(getDeclContext())) Parent->markedVirtualFunctionPure(); diff --git a/clang/lib/AST/DeclCXX.cpp b/clang/lib/AST/DeclCXX.cpp index 98b0a6dc28ea2f..487f29fd3086d3 100644 --- a/clang/lib/AST/DeclCXX.cpp +++ b/clang/lib/AST/DeclCXX.cpp @@ -2054,7 +2054,7 @@ void CXXRecordDecl::completeDefinition(CXXFinalOverriderMap *FinalOverriders) { // A class is abstract if it contains or inherits at least one // pure virtual function for which the final overrider is pure // virtual. - if (SO->second.front().Method->isPure()) { + if (SO->second.front().Method->isVirtualPure()) { data().Abstract = true; Done = true; break; @@ -2273,7 +2273,7 @@ CXXMethodDecl *CXXMethodDecl::getDevirtualizedMethod(const Expr *Base, // If the member function is marked 'final', we know that it can't be // overridden and can therefore devirtualize it unless it's pure virtual. if (hasAttr<FinalAttr>()) - return isPure() ? nullptr : this; + return isVirtualPure() ? nullptr : this; // If Base is unknown, we cannot devirtualize. if (!Base) @@ -2302,7 +2302,7 @@ CXXMethodDecl *CXXMethodDecl::getDevirtualizedMethod(const Expr *Base, // If that method is pure virtual, we can't devirtualize. If this code is // reached, the result would be UB, not a direct call to the derived class // function, and we can't assume the derived class function is defined. - if (DevirtualizedMethod->isPure()) + if (DevirtualizedMethod->isVirtualPure()) return nullptr; // If that method is marked final, we can devirtualize it. diff --git a/clang/lib/AST/DeclPrinter.cpp b/clang/lib/AST/DeclPrinter.cpp index 24da6f2ef32b4f..3eaacf13f74086 100644 --- a/clang/lib/AST/DeclPrinter.cpp +++ b/clang/lib/AST/DeclPrinter.cpp @@ -871,7 +871,7 @@ void DeclPrinter::VisitFunctionDecl(FunctionDecl *D) { prettyPrintAttributes(D, Out, AttrPrintLoc::Right); - if (D->isPure()) + if (D->isVirtualPure()) Out << " = 0"; else if (D->isDeletedAsWritten()) Out << " = delete"; diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp index f20850d14c0c86..cd0ae365f16754 100644 --- a/clang/lib/AST/ExprConstant.cpp +++ b/clang/lib/AST/ExprConstant.cpp @@ -5839,7 +5839,7 @@ static const CXXMethodDecl *HandleVirtualDispatch( // C++2a [class.abstract]p6: // the effect of making a virtual call to a pure virtual function [...] is // undefined - if (Callee->isPure()) { + if (Callee->isVirtualPure()) { Info.FFDiag(E, diag::note_constexpr_pure_virtual_call, 1) << Callee; Info.Note(Callee->getLocation(), diag::note_declared_at); return nullptr; diff --git a/clang/lib/AST/Interp/Interp.cpp b/clang/lib/AST/Interp/Interp.cpp index b95a52199846fa..5b1f33079a8977 100644 --- a/clang/lib/AST/Interp/Interp.cpp +++ b/clang/lib/AST/Interp/Interp.cpp @@ -466,7 +466,7 @@ bool CheckThis(InterpState &S, CodePtr OpPC, const Pointer &This) { } bool CheckPure(InterpState &S, CodePtr OpPC, const CXXMethodDecl *MD) { - if (!MD->isPure()) + if (!MD->isVirtualPure()) return true; const SourceInfo &E = S.Current->getSource(OpPC); S.FFDiag(E, diag::note_constexpr_pure_virtual_call, 1) << MD; diff --git a/clang/lib/AST/JSONNodeDumper.cpp b/clang/lib/AST/JSONNodeDumper.cpp index 637d06cee78c85..ff3e8507e333ad 100644 --- a/clang/lib/AST/JSONNodeDumper.cpp +++ b/clang/lib/AST/JSONNodeDumper.cpp @@ -930,7 +930,7 @@ void JSONNodeDumper::VisitFunctionDecl(const FunctionDecl *FD) { JOS.attribute("storageClass", VarDecl::getStorageClassSpecifierString(SC)); attributeOnlyIfTrue("inline", FD->isInlineSpecified()); attributeOnlyIfTrue("virtual", FD->isVirtualAsWritten()); - attributeOnlyIfTrue("pure", FD->isPure()); + attributeOnlyIfTrue("pure", FD->isVirtualPure()); attributeOnlyIfTrue("explicitlyDeleted", FD->isDeletedAsWritten()); attributeOnlyIfTrue("constexpr", FD->isConstexpr()); attributeOnlyIfTrue("variadic", FD->isVariadic()); diff --git a/clang/lib/AST/ODRDiagsEmitter.cpp b/clang/lib/AST/ODRDiagsEmitter.cpp index 9dcd2ed04f6f7d..203e0d7884a4d9 100644 --- a/clang/lib/AST/ODRDiagsEmitter.cpp +++ b/clang/lib/AST/ODRDiagsEmitter.cpp @@ -1102,8 +1102,8 @@ bool ODRDiagsEmitter::diagnoseMismatch( const bool FirstVirtual = FirstMethod->isVirtualAsWritten(); const bool SecondVirtual = SecondMethod->isVirtualAsWritten(); - const bool FirstPure = FirstMethod->isPure(); - const bool SecondPure = SecondMethod->isPure(); + const bool FirstPure = FirstMethod->isVirtualPure(); + const bool SecondPure = SecondMethod->isVirtualPure(); if ((FirstVirtual || SecondVirtual) && (FirstVirtual != SecondVirtual || FirstPure != SecondPure)) { DiagMethodError(MethodVirtual) << FirstPure << FirstVirtual; diff --git a/clang/lib/AST/ODRHash.cpp b/clang/lib/AST/ODRHash.cpp index aea1a93ae1fa82..f3319f9d62f3fb 100644 --- a/clang/lib/AST/ODRHash.cpp +++ b/clang/lib/AST/ODRHash.cpp @@ -688,7 +688,7 @@ void ODRHash::AddFunctionDecl(const FunctionDecl *Function, ID.AddInteger(Function->getStorageClass()); AddBoolean(Function->isInlineSpecified()); AddBoolean(Function->isVirtualAsWritten()); - AddBoolean(Function->isPure()); + AddBoolean(Function->isVirtualPure()); AddBoolean(Function->isDeletedAsWritten()); AddBoolean(Function->isExplicitlyDefaulted()); diff --git a/clang/lib/AST/RecordLayoutBuilder.cpp b/clang/lib/AST/RecordLayoutBuilder.cpp index 706991f4fb501c..699ff5e894bc46 100644 --- a/clang/lib/AST/RecordLayoutBuilder.cpp +++ b/clang/lib/AST/RecordLayoutBuilder.cpp @@ -2349,7 +2349,7 @@ static const CXXMethodDecl *computeKeyFunction(ASTContext &Context, if (!MD->isVirtual()) continue; - if (MD->isPure()) + if (MD->isVirtualPure()) continue; // Ignore implicit member functions, they are always marked as inline, but @@ -3293,7 +3293,7 @@ void MicrosoftRecordLayoutBuilder::computeVtorDispSet( // Seed the working set with our non-destructor, non-pure virtual methods. for (const CXXMethodDecl *MD : RD->methods()) if (MicrosoftVTableContext::hasVtableSlot(MD) && - !isa<CXXDestructorDecl>(MD) && !MD->isPure()) + !isa<CXXDestructorDecl>(MD) && !MD->isVirtualPure()) Work.insert(MD); while (!Work.empty()) { const CXXMethodDecl *MD = *Work.begin(); diff --git a/clang/lib/AST/TextNodeDumper.cpp b/clang/lib/AST/TextNodeDumper.cpp index 369ff66ac4dbc6..b82f36ed41eea5 100644 --- a/clang/lib/AST/TextNodeDumper.cpp +++ b/clang/lib/AST/TextNodeDumper.cpp @@ -1875,7 +1875,7 @@ void TextNodeDumper::VisitFunctionDecl(const FunctionDecl *D) { if (D->isModulePrivate()) OS << " __module_private__"; - if (D->isPure()) + if (D->isVirtualPure()) OS << " pure"; if (D->isDefaulted()) { OS << " default"; diff --git a/clang/lib/AST/VTableBuilder.cpp b/clang/lib/AST/VTableBuilder.cpp index 69861c65f6e3ac..36580eee338750 100644 --- a/clang/lib/AST/VTableBuilder.cpp +++ b/clang/lib/AST/VTableBuilder.cpp @@ -422,7 +422,7 @@ void FinalOverriders::dump(raw_ostream &Out, BaseSubobject Base, Out << ", " << Overrider.Offset.getQuantity() << ')'; BaseOffset Offset; - if (!Overrider.Method->isPure()) + if (!Overrider.Method->isVirtualPure()) Offset = ComputeReturnAdjustmentBaseOffset(Context, Overrider.Method, MD); if (!Offset.isEmpty()) { @@ -1261,7 +1261,7 @@ ThisAdjustment ItaniumVTableBuilder::ComputeThisAdjustment( const CXXMethodDecl *MD, CharUnits BaseOffsetInLayoutClass, FinalOverriders::OverriderInfo Overrider) { // Ignore adjustments for pure virtual member functions. - if (Overrider.Method->isPure()) + if (Overrider.Method->isVirtualPure()) return ThisAdjustment(); BaseSubobject OverriddenBaseSubobject(MD->getParent(), @@ -1607,7 +1607,7 @@ void ItaniumVTableBuilder::AddMethods( // Check if this overrider needs a return adjustment. // We don't want to do this for pure virtual member functions. BaseOffset ReturnAdjustmentOffset; - if (!OverriderMD->isPure()) { + if (!OverriderMD->isVirtualPure()) { ReturnAdjustmentOffset = ComputeReturnAdjustmentBaseOffset(Context, OverriderMD, MD); } @@ -1959,7 +1959,7 @@ void ItaniumVTableBuilder::dumpLayout(raw_ostream &Out) { std::string Str = PredefinedExpr::ComputeName( PredefinedIdentKind::PrettyFunctionNoVirtual, MD); Out << Str; - if (MD->isPure()) + if (MD->isVirtualPure()) Out << " [pure]"; if (MD->isDeleted()) @@ -2010,7 +2010,7 @@ void ItaniumVTableBuilder::dumpLayout(raw_ostream &Out) { else Out << "() [deleting]"; - if (DD->isPure()) + if (DD->isVirtualPure()) Out << " [pure]"; ThunkInfo Thunk = VTableThunks.lookup(I); @@ -2038,7 +2038,7 @@ void ItaniumVTableBuilder::dumpLayout(raw_ostream &Out) { std::string Str = PredefinedExpr::ComputeName( PredefinedIdentKind::PrettyFunctionNoVirtual, MD); Out << "[unused] " << Str; - if (MD->isPure()) + if (MD->isVirtualPure()) Out << " [pure]"; } @@ -3076,7 +3076,7 @@ void VFTableBuilder::AddMethods(BaseSubobject Base, unsigned BaseDepth, // We don't want to do this for pure virtual member functions. BaseOffset ReturnAdjustmentOffset; ReturnAdjustment ReturnAdjustment; - if (!FinalOverriderMD->isPure()) { + if (!FinalOverriderMD->isVirtualPure()) { ReturnAdjustmentOffset = ComputeReturnAdjustmentBaseOffset(Context, FinalOverriderMD, MD); } @@ -3175,7 +3175,7 @@ void VFTableBuilder::dumpLayout(raw_ostream &Out) { std::string Str = PredefinedExpr::ComputeName( PredefinedIdentKind::PrettyFunctionNoVirtual, MD); Out << Str; - if (MD->isPure()) + if (MD->isVirtualPure()) Out << " [pure]"; if (MD->isDeleted()) @@ -3194,7 +3194,7 @@ void VFTableBuilder::dumpLayout(raw_ostream &Out) { DD->printQualifiedName(Out); Out << "() [scalar deleting]"; - if (DD->isPure()) + if (DD->isVirtualPure()) Out << " [pure]"; ThunkInfo Thunk = VTableThunks.lookup(I); diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp index 236d53bee4e8f1..152921555fe11f 100644 --- a/clang/lib/CodeGen/CGDebugInfo.cpp +++ b/clang/lib/CodeGen/CGDebugInfo.cpp @@ -1926,7 +1926,7 @@ llvm::DISubprogram *CGDebugInfo::CreateCXXMemberFunction( int ThisAdjustment = 0; if (VTableContextBase::hasVtableSlot(Method)) { - if (Method->isPure()) + if (Method->isVirtualPure()) SPFlags |= llvm::DISubprogram::SPFlagPureVirtual; else SPFlags |= llvm::DISubprogram::SPFlagVirtual; diff --git a/clang/lib/CodeGen/CGVTables.cpp b/clang/lib/CodeGen/CGVTables.cpp index 27a2cab4f75319..1a9eb6b60d31b8 100644 --- a/clang/lib/CodeGen/CGVTables.cpp +++ b/clang/lib/CodeGen/CGVTables.cpp @@ -793,7 +793,7 @@ void CodeGenVTables::addVTableComponent(ConstantArrayBuilder &builder, llvm::Constant *fnPtr; // Pure virtual member functions. - if (cast<CXXMethodDecl>(GD.getDecl())->isPure()) { + if (cast<CXXMethodDecl>(GD.getDecl())->isVirtualPure()) { if (!PureVirtualFn) PureVirtualFn = getSpecialVirtualFn(CGM.getCXXABI().GetPureVirtualCallName()); diff --git a/clang/lib/Sema/Sema.cpp b/clang/lib/Sema/Sema.cpp index cafbecebc8a119..695e32b7ec1b68 100644 --- a/clang/lib/Sema/Sema.cpp +++ b/clang/lib/Sema/Sema.cpp @@ -957,7 +957,7 @@ static bool MethodsAndNestedClassesComplete(const CXXRecordDecl *RD, I != E && Complete; ++I) { if (const CXXMethodDecl *M = dyn_cast<CXXMethodDecl>(*I)) Complete = M->isDefined() || M->isDefaulted() || - (M->isPure() && !isa<CXXDestructorDecl>(M)); + (M->isVirtualPure() && !isa<CXXDestructorDecl>(M)); else if (const FunctionTempla... [truncated] `````````` </details> https://github.com/llvm/llvm-project/pull/78463 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits