https://github.com/PeterChou1 updated https://github.com/llvm/llvm-project/pull/97644
>From ff278188403a6f89e8c13f7a2330d978f31b1ab5 Mon Sep 17 00:00:00 2001 From: PeterChou1 <peter.c...@mail.utoronto.ca> Date: Wed, 3 Jul 2024 15:42:22 -0400 Subject: [PATCH 1/4] [clang-doc] add ftime trace option --- clang-tools-extra/clang-doc/BitcodeReader.cpp | 8 ++++ clang-tools-extra/clang-doc/Mapper.cpp | 11 ++++- .../clang-doc/Representation.cpp | 2 + clang-tools-extra/clang-doc/Representation.h | 5 +- .../clang-doc/tool/ClangDocMain.cpp | 47 ++++++++++++++++++- 5 files changed, 69 insertions(+), 4 deletions(-) diff --git a/clang-tools-extra/clang-doc/BitcodeReader.cpp b/clang-tools-extra/clang-doc/BitcodeReader.cpp index bfb04e7407b38..975dbca3a2ce2 100644 --- a/clang-tools-extra/clang-doc/BitcodeReader.cpp +++ b/clang-tools-extra/clang-doc/BitcodeReader.cpp @@ -10,6 +10,7 @@ #include "llvm/ADT/IndexedMap.h" #include "llvm/Support/Error.h" #include "llvm/Support/raw_ostream.h" +#include "llvm/Support/TimeProfiler.h" #include <optional> namespace clang { @@ -670,6 +671,7 @@ llvm::Error ClangDocBitcodeReader::readRecord(unsigned ID, T I) { template <> llvm::Error ClangDocBitcodeReader::readRecord(unsigned ID, Reference *I) { + llvm::TimeTraceScope("clang-doc", "readRecord Reference"); Record R; llvm::StringRef Blob; llvm::Expected<unsigned> MaybeRecID = Stream.readRecord(ID, R, &Blob); @@ -681,6 +683,7 @@ llvm::Error ClangDocBitcodeReader::readRecord(unsigned ID, Reference *I) { // Read a block of records into a single info. template <typename T> llvm::Error ClangDocBitcodeReader::readBlock(unsigned ID, T I) { + llvm::TimeTraceScope("clang-doc", "readBlock"); if (llvm::Error Err = Stream.EnterSubBlock(ID)) return Err; @@ -711,6 +714,7 @@ llvm::Error ClangDocBitcodeReader::readBlock(unsigned ID, T I) { template <typename T> llvm::Error ClangDocBitcodeReader::readSubBlock(unsigned ID, T I) { + llvm::TimeTraceScope("clang-doc", "readSubBlock"); switch (ID) { // Blocks can only have certain types of sub blocks. case BI_COMMENT_BLOCK_ID: { @@ -817,6 +821,7 @@ llvm::Error ClangDocBitcodeReader::readSubBlock(unsigned ID, T I) { ClangDocBitcodeReader::Cursor ClangDocBitcodeReader::skipUntilRecordOrBlock(unsigned &BlockOrRecordID) { + llvm::TimeTraceScope("clang-doc", "skipUntilRecordOrBlock"); BlockOrRecordID = 0; while (!Stream.AtEndOfStream()) { @@ -878,6 +883,7 @@ llvm::Error ClangDocBitcodeReader::validateStream() { } llvm::Error ClangDocBitcodeReader::readBlockInfoBlock() { + llvm::TimeTraceScope("clang-doc", "readBlockInfoBlock"); Expected<std::optional<llvm::BitstreamBlockInfo>> MaybeBlockInfo = Stream.ReadBlockInfoBlock(); if (!MaybeBlockInfo) @@ -894,6 +900,7 @@ llvm::Error ClangDocBitcodeReader::readBlockInfoBlock() { template <typename T> llvm::Expected<std::unique_ptr<Info>> ClangDocBitcodeReader::createInfo(unsigned ID) { + llvm::TimeTraceScope("clang-doc", "createInfo"); std::unique_ptr<Info> I = std::make_unique<T>(); if (auto Err = readBlock(ID, static_cast<T *>(I.get()))) return std::move(Err); @@ -902,6 +909,7 @@ ClangDocBitcodeReader::createInfo(unsigned ID) { llvm::Expected<std::unique_ptr<Info>> ClangDocBitcodeReader::readBlockToInfo(unsigned ID) { + llvm::TimeTraceScope("clang-doc", "readBlockToInfo"); switch (ID) { case BI_NAMESPACE_BLOCK_ID: return createInfo<NamespaceInfo>(ID); diff --git a/clang-tools-extra/clang-doc/Mapper.cpp b/clang-tools-extra/clang-doc/Mapper.cpp index bb8b7952980ac..a8875473649c1 100644 --- a/clang-tools-extra/clang-doc/Mapper.cpp +++ b/clang-tools-extra/clang-doc/Mapper.cpp @@ -13,11 +13,14 @@ #include "clang/Index/USRGeneration.h" #include "llvm/ADT/StringExtras.h" #include "llvm/Support/Error.h" +#include "llvm/Support/TimeProfiler.h" namespace clang { namespace doc { void MapASTVisitor::HandleTranslationUnit(ASTContext &Context) { + if (CDCtx.FTimeTrace) + llvm::timeTraceProfilerInitialize(CDCtx.Granularity, "clang-doc"); TraverseDecl(Context.getTranslationUnitDecl()); } @@ -30,6 +33,7 @@ template <typename T> bool MapASTVisitor::mapDecl(const T *D) { if (D->getParentFunctionOrMethod()) return true; + llvm::timeTraceProfilerBegin("clang-doc", "emit info"); llvm::SmallString<128> USR; // If there is an error generating a USR for the decl, skip this decl. if (index::generateUSRForDecl(D, USR)) @@ -40,7 +44,9 @@ template <typename T> bool MapASTVisitor::mapDecl(const T *D) { auto I = serialize::emitInfo(D, getComment(D, D->getASTContext()), getLine(D, D->getASTContext()), File, IsFileInRootDir, CDCtx.PublicOnly); + llvm::timeTraceProfilerEnd(); + llvm::timeTraceProfilerBegin("clang-doc", "serialize info"); // A null in place of I indicates that the serializer is skipping this decl // for some reason (e.g. we're only reporting public decls). if (I.first) @@ -49,6 +55,7 @@ template <typename T> bool MapASTVisitor::mapDecl(const T *D) { if (I.second) CDCtx.ECtx->reportResult(llvm::toHex(llvm::toStringRef(I.second->USR)), serialize::serialize(I.second)); + llvm::timeTraceProfilerEnd(); return true; } @@ -56,7 +63,9 @@ bool MapASTVisitor::VisitNamespaceDecl(const NamespaceDecl *D) { return mapDecl(D); } -bool MapASTVisitor::VisitRecordDecl(const RecordDecl *D) { return mapDecl(D); } +bool MapASTVisitor::VisitRecordDecl(const RecordDecl *D) { + return mapDecl(D); +} bool MapASTVisitor::VisitEnumDecl(const EnumDecl *D) { return mapDecl(D); } diff --git a/clang-tools-extra/clang-doc/Representation.cpp b/clang-tools-extra/clang-doc/Representation.cpp index d08afbb962189..23e739a675789 100644 --- a/clang-tools-extra/clang-doc/Representation.cpp +++ b/clang-tools-extra/clang-doc/Representation.cpp @@ -366,10 +366,12 @@ void Index::sort() { ClangDocContext::ClangDocContext(tooling::ExecutionContext *ECtx, StringRef ProjectName, bool PublicOnly, + bool FTimeTrace, int Granularity, StringRef OutDirectory, StringRef SourceRoot, StringRef RepositoryUrl, std::vector<std::string> UserStylesheets) : ECtx(ECtx), ProjectName(ProjectName), PublicOnly(PublicOnly), + FTimeTrace(FTimeTrace), Granularity(Granularity), OutDirectory(OutDirectory), UserStylesheets(UserStylesheets) { llvm::SmallString<128> SourceRootDir(SourceRoot); if (SourceRoot.empty()) diff --git a/clang-tools-extra/clang-doc/Representation.h b/clang-tools-extra/clang-doc/Representation.h index d70c279f7a2bd..619fa34da8779 100644 --- a/clang-tools-extra/clang-doc/Representation.h +++ b/clang-tools-extra/clang-doc/Representation.h @@ -480,12 +480,15 @@ mergeInfos(std::vector<std::unique_ptr<Info>> &Values); struct ClangDocContext { ClangDocContext() = default; ClangDocContext(tooling::ExecutionContext *ECtx, StringRef ProjectName, - bool PublicOnly, StringRef OutDirectory, StringRef SourceRoot, + bool PublicOnly, bool FTimeTrace, int Granularity, + StringRef OutDirectory, StringRef SourceRoot, StringRef RepositoryUrl, std::vector<std::string> UserStylesheets); tooling::ExecutionContext *ECtx; std::string ProjectName; // Name of project clang-doc is documenting. bool PublicOnly; // Indicates if only public declarations are documented. + bool FTimeTrace; // Indicates if ftime trace is turned on + int Granularity; // Granularity of ftime trace std::string OutDirectory; // Directory for outputting generated files. std::string SourceRoot; // Directory where processed files are stored. Links // to definition locations will only be generated if diff --git a/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp b/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp index 6198a6e0cdcc3..db04d4ca9d62f 100644 --- a/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp +++ b/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp @@ -42,6 +42,7 @@ #include "llvm/Support/Signals.h" #include "llvm/Support/ThreadPool.h" #include "llvm/Support/raw_ostream.h" +#include "llvm/Support/TimeProfiler.h" #include <atomic> #include <mutex> #include <string> @@ -99,6 +100,16 @@ URL of repository that hosts code. Used for links to definition locations.)"), llvm::cl::cat(ClangDocCategory)); +static llvm::cl::opt<bool> FTimeTrace( + "ftime-trace", llvm::cl::desc(R"( +Turn on time profiler. Generates clang-doc-tracing.json)"), + llvm::cl::init(false), llvm::cl::cat(ClangDocCategory)); + +static llvm::cl::opt<int> FTimeGranularity( + "ftime-gran", llvm::cl::desc(R"( +Specify granularity for ftime-trace defaults to 200)"), + llvm::cl::init(200), llvm::cl::cat(ClangDocCategory)); + enum OutputFormatTy { md, yaml, @@ -229,6 +240,12 @@ Example usage for a project using a compile commands database: return 1; } + // turns on ftime trace profiling + if (FTimeTrace) + llvm::timeTraceProfilerInitialize(FTimeGranularity, "clang-doc"); + + llvm::TimeTraceScope("clang-doc", "main"); + // Fail early if an invalid format was provided. std::string Format = getFormatString(); llvm::outs() << "Emiting docs in " << Format << " format.\n"; @@ -249,6 +266,8 @@ Example usage for a project using a compile commands database: Executor->get()->getExecutionContext(), ProjectName, PublicOnly, + FTimeTrace, + FTimeGranularity, OutDirectory, SourceRoot, RepositoryUrl, @@ -262,6 +281,7 @@ Example usage for a project using a compile commands database: } } + llvm::timeTraceProfilerBegin("clang-doc", "mapping phase"); // Mapping phase llvm::outs() << "Mapping decls...\n"; auto Err = @@ -276,10 +296,12 @@ Example usage for a project using a compile commands database: return 1; } } + llvm::timeTraceProfilerEnd(); // Collect values into output by key. // In ToolResults, the Key is the hashed USR and the value is the // bitcode-encoded representation of the Info object. + llvm::timeTraceProfilerBegin("clang-doc", "collection phase"); llvm::outs() << "Collecting infos...\n"; llvm::StringMap<std::vector<StringRef>> USRToBitcode; Executor->get()->getToolResults()->forEachResult( @@ -287,6 +309,7 @@ Example usage for a project using a compile commands database: auto R = USRToBitcode.try_emplace(Key, std::vector<StringRef>()); R.first->second.emplace_back(Value); }); + llvm::timeTraceProfilerEnd(); // Collects all Infos according to their unique USR value. This map is added // to from the thread pool below and is protected by the USRToInfoMutex. @@ -294,6 +317,7 @@ Example usage for a project using a compile commands database: llvm::StringMap<std::unique_ptr<doc::Info>> USRToInfo; // First reducing phase (reduce all decls into one info per decl). + llvm::timeTraceProfilerBegin("clang-doc", "reduction phase"); llvm::outs() << "Reducing " << USRToBitcode.size() << " infos...\n"; std::atomic<bool> Error; Error = false; @@ -302,8 +326,11 @@ Example usage for a project using a compile commands database: llvm::DefaultThreadPool Pool(llvm::hardware_concurrency(ExecutorConcurrency)); for (auto &Group : USRToBitcode) { Pool.async([&]() { - std::vector<std::unique_ptr<doc::Info>> Infos; + if (FTimeTrace) + llvm::timeTraceProfilerInitialize(FTimeGranularity, "clang-doc"); + llvm::timeTraceProfilerBegin("clang-doc", "decoding bitcode phase"); + std::vector<std::unique_ptr<doc::Info>> Infos; for (auto &Bitcode : Group.getValue()) { llvm::BitstreamCursor Stream(Bitcode); doc::ClangDocBitcodeReader Reader(Stream); @@ -316,12 +343,16 @@ Example usage for a project using a compile commands database: std::move(ReadInfos->begin(), ReadInfos->end(), std::back_inserter(Infos)); } + llvm::timeTraceProfilerEnd(); + llvm::timeTraceProfilerBegin("clang-doc", "merging bitcode phase"); auto Reduced = doc::mergeInfos(Infos); if (!Reduced) { llvm::errs() << llvm::toString(Reduced.takeError()); return; } + llvm::timeTraceProfilerEnd(); + // Add a reference to this Info in the Index { @@ -336,12 +367,14 @@ Example usage for a project using a compile commands database: } }); } + llvm::timeTraceProfilerEnd(); Pool.wait(); if (Error) return 1; + llvm::timeTraceProfilerBegin("clang-doc", "generating phase"); // Ensure the root output directory exists. if (std::error_code Err = llvm::sys::fs::create_directories(OutDirectory); Err != std::error_code()) { @@ -362,6 +395,16 @@ Example usage for a project using a compile commands database: if (Err) { llvm::outs() << "warning: " << toString(std::move(Err)) << "\n"; } - + llvm::timeTraceProfilerEnd(); + + if (FTimeTrace) { + std::error_code EC; + llvm::raw_fd_ostream OS("clang-doc-tracing.json", EC, llvm::sys::fs::OF_Text); + if (!EC) { + llvm::timeTraceProfilerWrite(OS); + } else { + llvm::errs() << "Error opening file: " << EC.message() << "\n"; + } + } return 0; } >From 7367a758a14a5a07d4bbf4eb07d9dd0850f25b07 Mon Sep 17 00:00:00 2001 From: PeterChou1 <peter.c...@mail.utoronto.ca> Date: Wed, 3 Jul 2024 17:56:02 -0400 Subject: [PATCH 2/4] [clang-doc] add ftime trace --- clang-tools-extra/clang-doc/BitcodeReader.cpp | 12 ++++++------ clang-tools-extra/clang-doc/Mapper.cpp | 14 ++++++-------- clang-tools-extra/clang-doc/tool/ClangDocMain.cpp | 14 +++++++++----- 3 files changed, 21 insertions(+), 19 deletions(-) diff --git a/clang-tools-extra/clang-doc/BitcodeReader.cpp b/clang-tools-extra/clang-doc/BitcodeReader.cpp index 975dbca3a2ce2..2fa228dd7b180 100644 --- a/clang-tools-extra/clang-doc/BitcodeReader.cpp +++ b/clang-tools-extra/clang-doc/BitcodeReader.cpp @@ -683,7 +683,7 @@ llvm::Error ClangDocBitcodeReader::readRecord(unsigned ID, Reference *I) { // Read a block of records into a single info. template <typename T> llvm::Error ClangDocBitcodeReader::readBlock(unsigned ID, T I) { - llvm::TimeTraceScope("clang-doc", "readBlock"); + llvm::TimeTraceScope("readBlock", "ClangDocBitcodeReader"); if (llvm::Error Err = Stream.EnterSubBlock(ID)) return Err; @@ -714,7 +714,7 @@ llvm::Error ClangDocBitcodeReader::readBlock(unsigned ID, T I) { template <typename T> llvm::Error ClangDocBitcodeReader::readSubBlock(unsigned ID, T I) { - llvm::TimeTraceScope("clang-doc", "readSubBlock"); + llvm::TimeTraceScope("readSubBlock", "ClangDocBitcodeReader"); switch (ID) { // Blocks can only have certain types of sub blocks. case BI_COMMENT_BLOCK_ID: { @@ -821,7 +821,7 @@ llvm::Error ClangDocBitcodeReader::readSubBlock(unsigned ID, T I) { ClangDocBitcodeReader::Cursor ClangDocBitcodeReader::skipUntilRecordOrBlock(unsigned &BlockOrRecordID) { - llvm::TimeTraceScope("clang-doc", "skipUntilRecordOrBlock"); + llvm::TimeTraceScope("skipUntilRecordOrBlock", "ClangDocBitcodeReader"); BlockOrRecordID = 0; while (!Stream.AtEndOfStream()) { @@ -883,7 +883,7 @@ llvm::Error ClangDocBitcodeReader::validateStream() { } llvm::Error ClangDocBitcodeReader::readBlockInfoBlock() { - llvm::TimeTraceScope("clang-doc", "readBlockInfoBlock"); + llvm::TimeTraceScope("readBlockInfoBlock", "ClangDocBitcodeReader"); Expected<std::optional<llvm::BitstreamBlockInfo>> MaybeBlockInfo = Stream.ReadBlockInfoBlock(); if (!MaybeBlockInfo) @@ -900,7 +900,7 @@ llvm::Error ClangDocBitcodeReader::readBlockInfoBlock() { template <typename T> llvm::Expected<std::unique_ptr<Info>> ClangDocBitcodeReader::createInfo(unsigned ID) { - llvm::TimeTraceScope("clang-doc", "createInfo"); + llvm::TimeTraceScope("createInfo", "ClangDocBitcodeReader"); std::unique_ptr<Info> I = std::make_unique<T>(); if (auto Err = readBlock(ID, static_cast<T *>(I.get()))) return std::move(Err); @@ -909,7 +909,7 @@ ClangDocBitcodeReader::createInfo(unsigned ID) { llvm::Expected<std::unique_ptr<Info>> ClangDocBitcodeReader::readBlockToInfo(unsigned ID) { - llvm::TimeTraceScope("clang-doc", "readBlockToInfo"); + llvm::TimeTraceScope("readBlockToInfo", "ClangDocBitcodeReader"); switch (ID) { case BI_NAMESPACE_BLOCK_ID: return createInfo<NamespaceInfo>(ID); diff --git a/clang-tools-extra/clang-doc/Mapper.cpp b/clang-tools-extra/clang-doc/Mapper.cpp index a8875473649c1..a60e6c70f9419 100644 --- a/clang-tools-extra/clang-doc/Mapper.cpp +++ b/clang-tools-extra/clang-doc/Mapper.cpp @@ -22,6 +22,8 @@ void MapASTVisitor::HandleTranslationUnit(ASTContext &Context) { if (CDCtx.FTimeTrace) llvm::timeTraceProfilerInitialize(CDCtx.Granularity, "clang-doc"); TraverseDecl(Context.getTranslationUnitDecl()); + if (CDCtx.FTimeTrace) + llvm::timeTraceProfilerFinishThread(); } template <typename T> bool MapASTVisitor::mapDecl(const T *D) { @@ -33,7 +35,7 @@ template <typename T> bool MapASTVisitor::mapDecl(const T *D) { if (D->getParentFunctionOrMethod()) return true; - llvm::timeTraceProfilerBegin("clang-doc", "emit info"); + llvm::timeTraceProfilerBegin("emit info phase", "emit info"); llvm::SmallString<128> USR; // If there is an error generating a USR for the decl, skip this decl. if (index::generateUSRForDecl(D, USR)) @@ -46,7 +48,7 @@ template <typename T> bool MapASTVisitor::mapDecl(const T *D) { IsFileInRootDir, CDCtx.PublicOnly); llvm::timeTraceProfilerEnd(); - llvm::timeTraceProfilerBegin("clang-doc", "serialize info"); + llvm::timeTraceProfilerBegin("serializing info", "serializing"); // A null in place of I indicates that the serializer is skipping this decl // for some reason (e.g. we're only reporting public decls). if (I.first) @@ -63,9 +65,7 @@ bool MapASTVisitor::VisitNamespaceDecl(const NamespaceDecl *D) { return mapDecl(D); } -bool MapASTVisitor::VisitRecordDecl(const RecordDecl *D) { - return mapDecl(D); -} +bool MapASTVisitor::VisitRecordDecl(const RecordDecl *D) { return mapDecl(D); } bool MapASTVisitor::VisitEnumDecl(const EnumDecl *D) { return mapDecl(D); } @@ -80,9 +80,7 @@ bool MapASTVisitor::VisitFunctionDecl(const FunctionDecl *D) { return mapDecl(D); } -bool MapASTVisitor::VisitTypedefDecl(const TypedefDecl *D) { - return mapDecl(D); -} +bool MapASTVisitor::VisitTypedefDecl(const TypedefDecl *D) { return mapDecl(D);} bool MapASTVisitor::VisitTypeAliasDecl(const TypeAliasDecl *D) { return mapDecl(D); diff --git a/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp b/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp index db04d4ca9d62f..4cd4a845629fa 100644 --- a/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp +++ b/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp @@ -281,7 +281,7 @@ Example usage for a project using a compile commands database: } } - llvm::timeTraceProfilerBegin("clang-doc", "mapping phase"); + llvm::timeTraceProfilerBegin("mapping phase", "mapping"); // Mapping phase llvm::outs() << "Mapping decls...\n"; auto Err = @@ -317,7 +317,7 @@ Example usage for a project using a compile commands database: llvm::StringMap<std::unique_ptr<doc::Info>> USRToInfo; // First reducing phase (reduce all decls into one info per decl). - llvm::timeTraceProfilerBegin("clang-doc", "reduction phase"); + llvm::timeTraceProfilerBegin("reduction phase", "reducing"); llvm::outs() << "Reducing " << USRToBitcode.size() << " infos...\n"; std::atomic<bool> Error; Error = false; @@ -329,7 +329,7 @@ Example usage for a project using a compile commands database: if (FTimeTrace) llvm::timeTraceProfilerInitialize(FTimeGranularity, "clang-doc"); - llvm::timeTraceProfilerBegin("clang-doc", "decoding bitcode phase"); + llvm::timeTraceProfilerBegin("decoding bitcode phase", "decoding"); std::vector<std::unique_ptr<doc::Info>> Infos; for (auto &Bitcode : Group.getValue()) { llvm::BitstreamCursor Stream(Bitcode); @@ -345,7 +345,7 @@ Example usage for a project using a compile commands database: } llvm::timeTraceProfilerEnd(); - llvm::timeTraceProfilerBegin("clang-doc", "merging bitcode phase"); + llvm::timeTraceProfilerBegin("merging bitcode phase", "merging"); auto Reduced = doc::mergeInfos(Infos); if (!Reduced) { llvm::errs() << llvm::toString(Reduced.takeError()); @@ -365,6 +365,10 @@ Example usage for a project using a compile commands database: std::lock_guard<llvm::sys::Mutex> Guard(USRToInfoMutex); USRToInfo[Group.getKey()] = std::move(Reduced.get()); } + + if (CDCtx.FTimeTrace) + llvm::timeTraceProfilerFinishThread(); + }); } llvm::timeTraceProfilerEnd(); @@ -374,7 +378,7 @@ Example usage for a project using a compile commands database: if (Error) return 1; - llvm::timeTraceProfilerBegin("clang-doc", "generating phase"); + llvm::timeTraceProfilerBegin("generating phase", "generating"); // Ensure the root output directory exists. if (std::error_code Err = llvm::sys::fs::create_directories(OutDirectory); Err != std::error_code()) { >From 73d03758acbbe42f85b713684ea852d02fb8e2b1 Mon Sep 17 00:00:00 2001 From: PeterChou1 <peter.c...@mail.utoronto.ca> Date: Wed, 3 Jul 2024 18:42:58 -0400 Subject: [PATCH 3/4] [clang-doc] clang-format --- clang-tools-extra/clang-doc/tool/ClangDocMain.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp b/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp index 4cd4a845629fa..bb278a858fd1d 100644 --- a/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp +++ b/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp @@ -271,8 +271,7 @@ Example usage for a project using a compile commands database: OutDirectory, SourceRoot, RepositoryUrl, - {UserStylesheets.begin(), UserStylesheets.end()} - }; + {UserStylesheets.begin(), UserStylesheets.end()}}; if (Format == "html") { if (auto Err = getHtmlAssetFiles(argv[0], CDCtx)) { @@ -403,7 +402,8 @@ Example usage for a project using a compile commands database: if (FTimeTrace) { std::error_code EC; - llvm::raw_fd_ostream OS("clang-doc-tracing.json", EC, llvm::sys::fs::OF_Text); + llvm::raw_fd_ostream OS("clang-doc-tracing.json", EC, + llvm::sys::fs::OF_Text); if (!EC) { llvm::timeTraceProfilerWrite(OS); } else { >From b47fb667b48d484f617e0f2a2bfa16553ce8a310 Mon Sep 17 00:00:00 2001 From: PeterChou1 <peter.c...@mail.utoronto.ca> Date: Thu, 4 Jul 2024 03:07:19 -0400 Subject: [PATCH 4/4] [clang-doc] clang-format --- clang-tools-extra/clang-doc/BitcodeReader.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang-tools-extra/clang-doc/BitcodeReader.cpp b/clang-tools-extra/clang-doc/BitcodeReader.cpp index 2fa228dd7b180..eef8c1b6e7f0a 100644 --- a/clang-tools-extra/clang-doc/BitcodeReader.cpp +++ b/clang-tools-extra/clang-doc/BitcodeReader.cpp @@ -9,8 +9,8 @@ #include "BitcodeReader.h" #include "llvm/ADT/IndexedMap.h" #include "llvm/Support/Error.h" -#include "llvm/Support/raw_ostream.h" #include "llvm/Support/TimeProfiler.h" +#include "llvm/Support/raw_ostream.h" #include <optional> namespace clang { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits