From f724ed4411f34b283c6b50539918f2f69d184308 Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Thu, 15 Aug 2019 10:56:05 +0000 Subject: [PATCH] Replace llvm::integer_sequence and friends with the C++14 standard version The implementation in libc++ takes O(1) compile time, ours was O(n). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@368990 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/ASTMatchers/ASTMatchersInternal.h | 4 ++-- include/clang/Sema/Sema.h | 4 ++-- .../Tooling/Refactoring/RefactoringActionRulesInternal.h | 8 ++++---- lib/CodeGen/EHScopeStack.h | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/include/clang/ASTMatchers/ASTMatchersInternal.h b/include/clang/ASTMatchers/ASTMatchersInternal.h index 46e47a3100..ae7b9e7c3e 100644 --- a/include/clang/ASTMatchers/ASTMatchersInternal.h +++ b/include/clang/ASTMatchers/ASTMatchersInternal.h @@ -1334,14 +1334,14 @@ public: template operator Matcher() const { return DynTypedMatcher::constructVariadic( Op, ast_type_traits::ASTNodeKind::getFromNodeKind(), - getMatchers(llvm::index_sequence_for())) + getMatchers(std::index_sequence_for())) .template unconditionalConvertTo(); } private: // Helper method to unpack the tuple into a vector. template - std::vector getMatchers(llvm::index_sequence) const { + std::vector getMatchers(std::index_sequence) const { return {Matcher(std::get(Params))...}; } diff --git a/include/clang/Sema/Sema.h b/include/clang/Sema/Sema.h index 4be2e5cdb9..2dbb045be2 100644 --- a/include/clang/Sema/Sema.h +++ b/include/clang/Sema/Sema.h @@ -1621,7 +1621,7 @@ public: template void emit(const SemaDiagnosticBuilder &DB, - llvm::index_sequence) const { + std::index_sequence) const { // Apply all tuple elements to the builder in order. bool Dummy[] = {false, (DB << getPrintable(std::get(Args)))...}; (void)Dummy; @@ -1635,7 +1635,7 @@ public: void diagnose(Sema &S, SourceLocation Loc, QualType T) override { const SemaDiagnosticBuilder &DB = S.Diag(Loc, DiagID); - emit(DB, llvm::index_sequence_for()); + emit(DB, std::index_sequence_for()); DB << T; } }; diff --git a/include/clang/Tooling/Refactoring/RefactoringActionRulesInternal.h b/include/clang/Tooling/Refactoring/RefactoringActionRulesInternal.h index aaa9e50faa..fb373fcf50 100644 --- a/include/clang/Tooling/Refactoring/RefactoringActionRulesInternal.h +++ b/include/clang/Tooling/Refactoring/RefactoringActionRulesInternal.h @@ -47,7 +47,7 @@ template void invokeRuleAfterValidatingRequirements( RefactoringResultConsumer &Consumer, RefactoringRuleContext &Context, const std::tuple &Requirements, - llvm::index_sequence) { + std::index_sequence) { // Check if the requirements we're interested in can be evaluated. auto Values = std::make_tuple(std::get(Requirements).evaluate(Context)...); @@ -87,7 +87,7 @@ template void visitRefactoringOptions( RefactoringOptionVisitor &Visitor, const std::tuple &Requirements, - llvm::index_sequence) { + std::index_sequence) { visitRefactoringOptionsImpl(Visitor, std::get(Requirements)...); } @@ -131,7 +131,7 @@ createRefactoringActionRule(const RequirementTypes &... Requirements) { RefactoringRuleContext &Context) override { internal::invokeRuleAfterValidatingRequirements( Consumer, Context, Requirements, - llvm::index_sequence_for()); + std::index_sequence_for()); } bool hasSelectionRequirement() override { @@ -142,7 +142,7 @@ createRefactoringActionRule(const RequirementTypes &... Requirements) { void visitRefactoringOptions(RefactoringOptionVisitor &Visitor) override { internal::visitRefactoringOptions( Visitor, Requirements, - llvm::index_sequence_for()); + std::index_sequence_for()); } private: std::tuple Requirements; diff --git a/lib/CodeGen/EHScopeStack.h b/lib/CodeGen/EHScopeStack.h index 3b0db35d98..0ed67aabcd 100644 --- a/lib/CodeGen/EHScopeStack.h +++ b/lib/CodeGen/EHScopeStack.h @@ -199,14 +199,14 @@ public: SavedTuple Saved; template - T restore(CodeGenFunction &CGF, llvm::index_sequence) { + T restore(CodeGenFunction &CGF, std::index_sequence) { // It's important that the restores are emitted in order. The braced init // list guarantees that. return T{DominatingValue::restore(CGF, std::get(Saved))...}; } void Emit(CodeGenFunction &CGF, Flags flags) override { - restore(CGF, llvm::index_sequence_for()).Emit(CGF, flags); + restore(CGF, std::index_sequence_for()).Emit(CGF, flags); } public: -- 2.40.0