[clang-tools-extra] 2ac1d90 - [TimeProfiler] Mark the TimeTraceScope class nodiscard (#231700)
via cfe-commits
cfe-commits at lists.llvm.org
Wed Oct 14 02:40:52 PDT 2026
Author: Balázs Benics
Date: 2026-10-14T10:40:46+01:00
New Revision: 2ac1d901d7711f66365be11aa21848c06c9fb79c
URL: https://github.com/llvm/llvm-project/commit/2ac1d901d7711f66365be11aa21848c06c9fb79c
DIFF: https://github.com/llvm/llvm-project/commit/2ac1d901d7711f66365be11aa21848c06c9fb79c.diff
LOG: [TimeProfiler] Mark the TimeTraceScope class nodiscard (#231700)
This would have caught #213521
This patch is similar to #180008 - to understand why
to put this attribute onto the class instead of on the individual ctors.
This patch also fixes the discarded TimeTraceScope
instances within clang and clang-tools-extra now that I was here.
Added:
Modified:
clang-tools-extra/clang-doc/BitcodeReader.cpp
clang-tools-extra/clang-doc/tool/ClangDocMain.cpp
llvm/include/llvm/Support/TimeProfiler.h
Removed:
################################################################################
diff --git a/clang-tools-extra/clang-doc/BitcodeReader.cpp b/clang-tools-extra/clang-doc/BitcodeReader.cpp
index 3299dedfbc3e4..b303076d3346a 100644
--- a/clang-tools-extra/clang-doc/BitcodeReader.cpp
+++ b/clang-tools-extra/clang-doc/BitcodeReader.cpp
@@ -413,7 +413,7 @@ template <typename T, typename BlockBeginHandler, typename BlockEndHandler,
llvm::Error
ClangDocBitcodeReader::parseBlock(unsigned ID, T I, BlockBeginHandler &&BBH,
BlockEndHandler &&BEH, RecordHandler &&RH) {
- llvm::TimeTraceScope("Reducing infos", "readBlock");
+ llvm::TimeTraceScope TimeTrace("Reducing infos", "readBlock");
if (llvm::Error Err = Stream.EnterSubBlock(ID))
return Err;
@@ -1185,7 +1185,7 @@ llvm::Error ClangDocBitcodeReader::readRecord(unsigned ID, T I) {
template <>
llvm::Error ClangDocBitcodeReader::readRecord(unsigned ID, Reference *I) {
- llvm::TimeTraceScope("Reducing infos", "readRecord");
+ llvm::TimeTraceScope TimeTrace("Reducing infos", "readRecord");
Record R;
llvm::StringRef Blob;
llvm::Expected<unsigned> MaybeRecID = Stream.readRecord(ID, R, &Blob);
@@ -1289,7 +1289,7 @@ llvm::Error ClangDocBitcodeReader::handleSubBlock(unsigned ID, T Parent) {
template <typename T>
llvm::Error ClangDocBitcodeReader::readSubBlock(unsigned ID, T I) {
- llvm::TimeTraceScope("Reducing infos", "readSubBlock");
+ llvm::TimeTraceScope TimeTrace("Reducing infos", "readSubBlock");
static auto CreateAddFunc = [](auto AddFunc) {
return [AddFunc](auto Parent, auto Child) {
@@ -1377,7 +1377,7 @@ llvm::Error ClangDocBitcodeReader::readSubBlock(unsigned ID, T I) {
llvm::Expected<ClangDocBitcodeReader::Cursor>
ClangDocBitcodeReader::skipUntilRecordOrBlock(unsigned &BlockOrRecordID) {
- llvm::TimeTraceScope("Reducing infos", "skipUntilRecordOrBlock");
+ llvm::TimeTraceScope TimeTrace("Reducing infos", "skipUntilRecordOrBlock");
BlockOrRecordID = 0;
while (!Stream.AtEndOfStream()) {
@@ -1433,7 +1433,7 @@ llvm::Error ClangDocBitcodeReader::validateStream() {
}
llvm::Error ClangDocBitcodeReader::readBlockInfoBlock() {
- llvm::TimeTraceScope("Reducing infos", "readBlockInfoBlock");
+ llvm::TimeTraceScope TimeTrace("Reducing infos", "readBlockInfoBlock");
Expected<std::optional<llvm::BitstreamBlockInfo>> MaybeBlockInfo =
Stream.ReadBlockInfoBlock();
if (!MaybeBlockInfo)
@@ -1448,7 +1448,7 @@ llvm::Error ClangDocBitcodeReader::readBlockInfoBlock() {
template <typename T>
llvm::Expected<Info *> ClangDocBitcodeReader::createInfo(unsigned ID) {
- llvm::TimeTraceScope("Reducing infos", "createInfo");
+ llvm::TimeTraceScope TimeTrace("Reducing infos", "createInfo");
auto *I = doc::allocateTransient<T>();
if (auto Err = readBlock(ID, I))
return std::move(Err);
@@ -1456,7 +1456,7 @@ llvm::Expected<Info *> ClangDocBitcodeReader::createInfo(unsigned ID) {
}
llvm::Expected<Info *> ClangDocBitcodeReader::readBlockToInfo(unsigned ID) {
- llvm::TimeTraceScope("Reducing infos", "readBlockToInfo");
+ llvm::TimeTraceScope TimeTrace("Reducing infos", "readBlockToInfo");
switch (ID) {
case BI_NAMESPACE_BLOCK_ID:
return createInfo<NamespaceInfo>(ID);
diff --git a/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp b/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp
index 0b81a3cb20351..f4cf954ce0f81 100644
--- a/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp
+++ b/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp
@@ -278,7 +278,7 @@ Example usage for a project using a compile commands database:
if (FTimeTrace)
llvm::timeTraceProfilerInitialize(200, "clang-doc");
{
- llvm::TimeTraceScope("main");
+ llvm::TimeTraceScope TimeTrace("main");
// Fail early if an invalid format was provided.
llvm::StringRef Format = getFormatString();
diff --git a/llvm/include/llvm/Support/TimeProfiler.h b/llvm/include/llvm/Support/TimeProfiler.h
index 2eb2c09d1becd..e80ace27a23ca 100644
--- a/llvm/include/llvm/Support/TimeProfiler.h
+++ b/llvm/include/llvm/Support/TimeProfiler.h
@@ -179,7 +179,7 @@ LLVM_ABI void timeTraceProfilerEnd(TimeTraceProfilerEntry *E);
/// of the time trace profiler. When the object is constructed, it begins
/// the section; and when it is destroyed, it stops it. If the time profiler
/// is not initialized, the overhead is a single branch.
-class TimeTraceScope {
+class [[nodiscard]] TimeTraceScope {
public:
TimeTraceScope() = delete;
TimeTraceScope(const TimeTraceScope &) = delete;
More information about the cfe-commits
mailing list