diff --git a/clang/lib/Sema/SemaConcept.cpp b/clang/lib/Sema/SemaConcept.cpp index 883e3410a35e..2674f0a7b874 100644 --- a/clang/lib/Sema/SemaConcept.cpp +++ b/clang/lib/Sema/SemaConcept.cpp @@ -30,6 +30,7 @@ #include "llvm/ADT/PointerUnion.h" #include "llvm/ADT/StringExtras.h" #include "llvm/Support/SaveAndRestore.h" +#include "llvm/Support/TimeProfiler.h" using namespace clang; using namespace sema; @@ -1182,6 +1183,10 @@ bool Sema::CheckConstraintSatisfaction( const MultiLevelTemplateArgumentList &TemplateArgsLists, SourceRange TemplateIDRange, ConstraintSatisfaction &OutSatisfaction, const ConceptReference *TopLevelConceptId, Expr **ConvertedExpr) { + llvm::TimeTraceScope TimeScope( + "CheckConstraintSatisfaction", [TemplateIDRange, this] { + return TemplateIDRange.printToString(getSourceManager()); + }); if (AssociatedConstraints.empty()) { OutSatisfaction.IsSatisfied = true; return false; diff --git a/clang/unittests/Support/TimeProfilerTest.cpp b/clang/unittests/Support/TimeProfilerTest.cpp index 3b18aa8360a6..e9597948dc22 100644 --- a/clang/unittests/Support/TimeProfilerTest.cpp +++ b/clang/unittests/Support/TimeProfilerTest.cpp @@ -272,11 +272,14 @@ TEST(TimeProfilerTest, ClassTemplateInstantiations) { ASSERT_EQ(R"( Frontend (test.cc) | ParseClass (S) +| CheckConstraintSatisfaction () | InstantiateClass (S, test.cc:9) | InstantiateFunction (S::foo, test.cc:5) | ParseDeclarationOrFunctionDefinition (test.cc:11:5) | | ParseFunctionDefinition (user) +| | | CheckConstraintSatisfaction () | | | InstantiateClass (S, test.cc:3) +| | | CheckConstraintSatisfaction () | | | InstantiateClass (S, test.cc:3) | | | DeferInstantiation (S::foo) | PerformPendingInstantiations