Author: Nathan Ridge Date: 2025-05-11T23:55:00-04:00 New Revision: f7991aae5e2a7be1d3118591bc41ec36b296fecc
URL: https://github.com/llvm/llvm-project/commit/f7991aae5e2a7be1d3118591bc41ec36b296fecc DIFF: https://github.com/llvm/llvm-project/commit/f7991aae5e2a7be1d3118591bc41ec36b296fecc.diff LOG: [clang][AST] Pass ProfileArguments by value in findSpecialization{Impl,Locally} (#139489) The arguments passed are lightweight (an ArrayRef and a pointer), and findSpecializationImpl passes them to multiple functions, making it a potential hazard to pass them by rvalue reference (even though no one was in fact moving them). Added: Modified: clang/include/clang/AST/DeclTemplate.h clang/lib/AST/DeclTemplate.cpp Removed: ################################################################################ diff --git a/clang/include/clang/AST/DeclTemplate.h b/clang/include/clang/AST/DeclTemplate.h index a8100b642e04c..80c97681d9163 100644 --- a/clang/include/clang/AST/DeclTemplate.h +++ b/clang/include/clang/AST/DeclTemplate.h @@ -781,16 +781,15 @@ class RedeclarableTemplateDecl : public TemplateDecl, bool loadLazySpecializationsImpl(llvm::ArrayRef<TemplateArgument> Args, TemplateParameterList *TPL = nullptr) const; - template <class EntryType, typename ...ProfileArguments> - typename SpecEntryTraits<EntryType>::DeclType* + template <class EntryType, typename... ProfileArguments> + typename SpecEntryTraits<EntryType>::DeclType * findSpecializationImpl(llvm::FoldingSetVector<EntryType> &Specs, - void *&InsertPos, ProfileArguments &&...ProfileArgs); + void *&InsertPos, ProfileArguments... ProfileArgs); template <class EntryType, typename... ProfileArguments> typename SpecEntryTraits<EntryType>::DeclType * findSpecializationLocally(llvm::FoldingSetVector<EntryType> &Specs, - void *&InsertPos, - ProfileArguments &&...ProfileArgs); + void *&InsertPos, ProfileArguments... ProfileArgs); template <class Derived, class EntryType> void addSpecializationImpl(llvm::FoldingSetVector<EntryType> &Specs, diff --git a/clang/lib/AST/DeclTemplate.cpp b/clang/lib/AST/DeclTemplate.cpp index d058831b9f6bf..6857eef87de38 100644 --- a/clang/lib/AST/DeclTemplate.cpp +++ b/clang/lib/AST/DeclTemplate.cpp @@ -382,12 +382,11 @@ template <class EntryType, typename... ProfileArguments> typename RedeclarableTemplateDecl::SpecEntryTraits<EntryType>::DeclType * RedeclarableTemplateDecl::findSpecializationLocally( llvm::FoldingSetVector<EntryType> &Specs, void *&InsertPos, - ProfileArguments &&...ProfileArgs) { + ProfileArguments... ProfileArgs) { using SETraits = RedeclarableTemplateDecl::SpecEntryTraits<EntryType>; llvm::FoldingSetNodeID ID; - EntryType::Profile(ID, std::forward<ProfileArguments>(ProfileArgs)..., - getASTContext()); + EntryType::Profile(ID, ProfileArgs..., getASTContext()); EntryType *Entry = Specs.FindNodeOrInsertPos(ID, InsertPos); return Entry ? SETraits::getDecl(Entry)->getMostRecentDecl() : nullptr; } @@ -396,18 +395,15 @@ template <class EntryType, typename... ProfileArguments> typename RedeclarableTemplateDecl::SpecEntryTraits<EntryType>::DeclType * RedeclarableTemplateDecl::findSpecializationImpl( llvm::FoldingSetVector<EntryType> &Specs, void *&InsertPos, - ProfileArguments &&...ProfileArgs) { + ProfileArguments... ProfileArgs) { - if (auto *Found = findSpecializationLocally( - Specs, InsertPos, std::forward<ProfileArguments>(ProfileArgs)...)) + if (auto *Found = findSpecializationLocally(Specs, InsertPos, ProfileArgs...)) return Found; - if (!loadLazySpecializationsImpl( - std::forward<ProfileArguments>(ProfileArgs)...)) + if (!loadLazySpecializationsImpl(ProfileArgs...)) return nullptr; - return findSpecializationLocally( - Specs, InsertPos, std::forward<ProfileArguments>(ProfileArgs)...); + return findSpecializationLocally(Specs, InsertPos, ProfileArgs...); } template<class Derived, class EntryType> _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits