[clang] [clang-tools-extra] [flang] [lldb] [llvm] [mlir] [LLVM][ADT] Deprecate `make_scope_exit` in favour of CTAD (PR #174030)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Dec 30 22:38:04 PST 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang-static-analyzer-1
Author: Victor Chernyakin (localspook)
<details>
<summary>Changes</summary>
This is a followup to #<!-- -->173131. `llvm/include/llvm/ADT/ScopeExit.h` has a nontrivial change (the deprecation message), everything else is a mechanical replacement.
---
Patch is 135.92 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/174030.diff
160 Files Affected:
- (modified) bolt/lib/Profile/DataAggregator.cpp (+1-1)
- (modified) clang-tools-extra/clangd/ClangdLSPServer.cpp (+1-1)
- (modified) clang-tools-extra/clangd/Diagnostics.cpp (+1-1)
- (modified) clang-tools-extra/clangd/GlobalCompilationDatabase.cpp (+1-1)
- (modified) clang-tools-extra/clangd/SystemIncludeExtractor.cpp (+1-1)
- (modified) clang-tools-extra/clangd/TUScheduler.cpp (+2-3)
- (modified) clang-tools-extra/clangd/XRefs.cpp (+1-1)
- (modified) clang-tools-extra/clangd/index/dex/dexp/Dexp.cpp (+1-1)
- (modified) clang-tools-extra/clangd/support/FileCache.cpp (+2-2)
- (modified) clang-tools-extra/clangd/support/Threading.cpp (+1-1)
- (modified) clang-tools-extra/clangd/support/Trace.cpp (+1-1)
- (modified) clang-tools-extra/clangd/unittests/CompileCommandsTests.cpp (+4-5)
- (modified) clang-tools-extra/clangd/unittests/TUSchedulerTests.cpp (+1-1)
- (modified) clang-tools-extra/clangd/unittests/TestTU.cpp (+2-2)
- (modified) clang/lib/AST/ASTImporter.cpp (+3-5)
- (modified) clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp (+1-1)
- (modified) clang/lib/Analysis/FlowSensitive/HTMLLogger.cpp (+2-4)
- (modified) clang/lib/Analysis/ThreadSafety.cpp (+1-1)
- (modified) clang/lib/Analysis/ThreadSafetyCommon.cpp (+7-7)
- (modified) clang/lib/CodeGen/CGCoroutine.cpp (+2-4)
- (modified) clang/lib/CodeGen/CGExpr.cpp (+2-3)
- (modified) clang/lib/CodeGen/CGExprScalar.cpp (+2-2)
- (modified) clang/lib/CodeGen/CGHLSLRuntime.cpp (+1-1)
- (modified) clang/lib/CodeGen/CodeGenFunction.cpp (+1-1)
- (modified) clang/lib/DependencyScanning/DependencyScannerImpl.cpp (+1-1)
- (modified) clang/lib/DirectoryWatcher/linux/DirectoryWatcher-linux.cpp (+1-1)
- (modified) clang/lib/Driver/ToolChains/Clang.cpp (+2-2)
- (modified) clang/lib/Frontend/ASTUnit.cpp (+1-1)
- (modified) clang/lib/Frontend/CompilerInstance.cpp (+1-1)
- (modified) clang/lib/Frontend/FrontendAction.cpp (+1-1)
- (modified) clang/lib/Index/IndexTypeSourceInfo.cpp (+2-2)
- (modified) clang/lib/Lex/DependencyDirectivesScanner.cpp (+2-2)
- (modified) clang/lib/Lex/LiteralSupport.cpp (+1-1)
- (modified) clang/lib/Lex/PPDirectives.cpp (+1-1)
- (modified) clang/lib/Parse/ParseCXXInlineMethods.cpp (+1-1)
- (modified) clang/lib/Parse/ParseStmt.cpp (+1-2)
- (modified) clang/lib/Sema/SemaDecl.cpp (+1-1)
- (modified) clang/lib/Sema/SemaOverload.cpp (+1-1)
- (modified) clang/lib/Serialization/ASTReader.cpp (+1-1)
- (modified) clang/lib/Serialization/ASTWriter.cpp (+1-1)
- (modified) clang/lib/StaticAnalyzer/Core/ConstraintManager.cpp (+1-2)
- (modified) clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp (+1-2)
- (modified) clang/lib/Testing/TestAST.cpp (+2-2)
- (modified) clang/unittests/StaticAnalyzer/UnsignedStatDemo.cpp (+1-1)
- (modified) flang/lib/Lower/Bridge.cpp (+1-2)
- (modified) flang/lib/Optimizer/CodeGen/TypeConverter.cpp (+2-2)
- (modified) lldb/source/Commands/CommandObjectTarget.cpp (+1-1)
- (modified) lldb/source/Host/common/MemoryMonitor.cpp (+1-1)
- (modified) lldb/source/Host/macosx/objcxx/Host.mm (+3-4)
- (modified) lldb/source/Host/macosx/objcxx/HostInfoMacOSX.mm (+4-4)
- (modified) lldb/source/Host/windows/ProcessLauncherWindows.cpp (+4-4)
- (modified) lldb/source/Interpreter/CommandInterpreter.cpp (+1-1)
- (modified) lldb/source/Interpreter/CommandObject.cpp (+1-1)
- (modified) lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionSourceCode.cpp (+2-3)
- (modified) lldb/source/Plugins/ExpressionParser/Clang/ClangUserExpression.cpp (+2-2)
- (modified) lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp (+2-2)
- (modified) lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp (+1-1)
- (modified) lldb/source/Plugins/Platform/POSIX/PlatformPOSIX.cpp (+5-6)
- (modified) lldb/source/Plugins/Platform/Windows/PlatformWindows.cpp (+9-10)
- (modified) lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp (+2-2)
- (modified) lldb/source/Plugins/ScriptInterpreter/Python/PythonDataObjects.cpp (+3-5)
- (modified) lldb/source/Target/Process.cpp (+1-1)
- (modified) lldb/source/Target/Target.cpp (+2-2)
- (modified) lldb/tools/lldb-dap/DAP.cpp (+3-3)
- (modified) lldb/tools/lldb-dap/tool/lldb-dap.cpp (+1-1)
- (modified) lldb/tools/lldb-mcp/lldb-mcp.cpp (+1-1)
- (modified) lldb/tools/lldb-test/lldb-test.cpp (+1-2)
- (modified) lldb/unittests/Host/HostTest.cpp (+1-1)
- (modified) llvm/include/llvm/ADT/ScopeExit.h (+8-1)
- (modified) llvm/include/llvm/Transforms/Utils/SSAUpdaterImpl.h (+1-1)
- (modified) llvm/lib/Analysis/BasicAliasAnalysis.cpp (+1-1)
- (modified) llvm/lib/Analysis/LazyCallGraph.cpp (+11-11)
- (modified) llvm/lib/Analysis/LoopInfo.cpp (+1-1)
- (modified) llvm/lib/Analysis/ScalarEvolution.cpp (+3-3)
- (modified) llvm/lib/Analysis/ValueTracking.cpp (+1-1)
- (modified) llvm/lib/AsmParser/LLParser.cpp (+2-2)
- (modified) llvm/lib/CAS/OnDiskGraphDB.cpp (+1-1)
- (modified) llvm/lib/CAS/UnifiedOnDiskCache.cpp (+6-6)
- (modified) llvm/lib/CodeGen/GlobalISel/GISelValueTracking.cpp (+2-2)
- (modified) llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp (+1-1)
- (modified) llvm/lib/CodeGen/GlobalISel/InstructionSelect.cpp (+1-1)
- (modified) llvm/lib/CodeGen/IfConversion.cpp (+1-1)
- (modified) llvm/lib/CodeGen/ResetMachineFunctionPass.cpp (+2-2)
- (modified) llvm/lib/ExecutionEngine/Orc/LoadLinkableFile.cpp (+1-1)
- (modified) llvm/lib/ExecutionEngine/Orc/MachO.cpp (+1-1)
- (modified) llvm/lib/ExecutionEngine/Orc/TargetProcess/SimpleExecutorMemoryManager.cpp (+1-1)
- (modified) llvm/lib/LTO/LTO.cpp (+3-3)
- (modified) llvm/lib/LTO/ThinLTOCodeGenerator.cpp (+1-1)
- (modified) llvm/lib/MC/MCExpr.cpp (+1-1)
- (modified) llvm/lib/MC/MCParser/ELFAsmParser.cpp (+1-2)
- (modified) llvm/lib/ObjectYAML/DXContainerYAML.cpp (+1-1)
- (modified) llvm/lib/Remarks/BitstreamRemarkSerializer.cpp (+2-2)
- (modified) llvm/lib/Support/Parallel.cpp (+1-1)
- (modified) llvm/lib/Support/Path.cpp (+1-1)
- (modified) llvm/lib/Support/ThreadPool.cpp (+2-2)
- (modified) llvm/lib/Support/Unix/Threading.inc (+1-1)
- (modified) llvm/lib/Support/VirtualOutputBackends.cpp (+1-1)
- (modified) llvm/lib/Support/Windows/Path.inc (+4-4)
- (modified) llvm/lib/Support/Z3Solver.cpp (+1-1)
- (modified) llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp (+1-1)
- (modified) llvm/lib/Target/AArch64/AArch64FrameLowering.cpp (+1-1)
- (modified) llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp (+1-1)
- (modified) llvm/lib/Target/M68k/M68kInstrInfo.cpp (+1-1)
- (modified) llvm/lib/Target/X86/X86FlagsCopyLowering.cpp (+1-1)
- (modified) llvm/lib/Transforms/Coroutines/CoroFrame.cpp (+1-1)
- (modified) llvm/lib/Transforms/IPO/ArgumentPromotion.cpp (+1-1)
- (modified) llvm/lib/Transforms/IPO/Inliner.cpp (+1-1)
- (modified) llvm/lib/Transforms/IPO/ModuleInliner.cpp (+1-1)
- (modified) llvm/lib/Transforms/Instrumentation/PGOCtxProfFlattening.cpp (+1-1)
- (modified) llvm/lib/Transforms/Scalar/ConstraintElimination.cpp (+2-2)
- (modified) llvm/lib/Transforms/Scalar/JumpThreading.cpp (+1-1)
- (modified) llvm/lib/Transforms/Scalar/LowerMatrixIntrinsics.cpp (+1-1)
- (modified) llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp (+1-1)
- (modified) llvm/lib/Transforms/Utils/LoopUtils.cpp (+1-1)
- (modified) llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp (+1-2)
- (modified) llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp (+3-3)
- (modified) llvm/lib/Transforms/Vectorize/VPlanUnroll.cpp (+1-1)
- (modified) llvm/lib/Transforms/Vectorize/VectorCombine.cpp (+1-1)
- (modified) llvm/tools/gold/gold-plugin.cpp (+1-1)
- (modified) llvm/tools/llc/llc.cpp (+1-1)
- (modified) llvm/tools/llvm-exegesis/lib/BenchmarkResult.cpp (+1-1)
- (modified) llvm/tools/llvm-exegesis/lib/BenchmarkRunner.cpp (+1-1)
- (modified) llvm/tools/llvm-exegesis/lib/SubprocessMemory.cpp (+4-4)
- (modified) llvm/tools/llvm-lto2/llvm-lto2.cpp (+1-1)
- (modified) llvm/tools/llvm-mc/llvm-mc.cpp (+1-1)
- (modified) llvm/tools/llvm-profdata/llvm-profdata.cpp (+1-1)
- (modified) llvm/unittests/ADT/ScopeExitTest.cpp (+3-3)
- (modified) llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp (+3-3)
- (modified) llvm/unittests/Support/MemoryBufferTest.cpp (+7-8)
- (modified) llvm/unittests/Support/Path.cpp (+4-4)
- (modified) llvm/unittests/Support/SignalsTest.cpp (+2-3)
- (modified) llvm/unittests/Support/ThreadPool.cpp (+1-1)
- (modified) llvm/unittests/Support/VirtualFileSystemTest.cpp (+1-2)
- (modified) mlir/lib/Analysis/DataFlow/DeadCodeAnalysis.cpp (+2-2)
- (modified) mlir/lib/Analysis/DataFlowFramework.cpp (+2-2)
- (modified) mlir/lib/AsmParser/Parser.cpp (+3-3)
- (modified) mlir/lib/Bindings/Python/IRAttributes.cpp (+2-2)
- (modified) mlir/lib/Bytecode/Reader/BytecodeReader.cpp (+5-6)
- (modified) mlir/lib/CAPI/Interfaces/Interfaces.cpp (+1-1)
- (modified) mlir/lib/Conversion/ArmSMEToLLVM/ArmSMEToLLVM.cpp (+1-1)
- (modified) mlir/lib/Conversion/LLVMCommon/TypeConverter.cpp (+1-1)
- (modified) mlir/lib/Debug/ExecutionContext.cpp (+1-1)
- (modified) mlir/lib/Dialect/Bufferization/IR/BufferizableOpInterface.cpp (+1-2)
- (modified) mlir/lib/Dialect/LLVMIR/Transforms/InlinerInterfaceImpl.cpp (+1-1)
- (modified) mlir/lib/Dialect/Linalg/TransformOps/LinalgTransformOps.cpp (+4-4)
- (modified) mlir/lib/Dialect/Linalg/Transforms/Interchange.cpp (+1-2)
- (modified) mlir/lib/Dialect/SCF/Transforms/TileUsingInterface.cpp (+2-2)
- (modified) mlir/lib/Dialect/Transform/IR/TransformOps.cpp (+1-1)
- (modified) mlir/lib/Dialect/Transform/Interfaces/TransformInterfaces.cpp (+1-1)
- (modified) mlir/lib/Dialect/Transform/PDLExtension/PDLExtensionOps.cpp (+1-1)
- (modified) mlir/lib/IR/AsmPrinter.cpp (+2-2)
- (modified) mlir/lib/Pass/Pass.cpp (+1-1)
- (modified) mlir/lib/Pass/PassRegistry.cpp (+1-1)
- (modified) mlir/lib/Rewrite/PatternApplicator.cpp (+1-1)
- (modified) mlir/lib/Target/LLVM/NVVM/Target.cpp (+1-1)
- (modified) mlir/lib/Target/LLVMIR/Dialect/GPU/SelectObjectAttr.cpp (+1-1)
- (modified) mlir/lib/Target/LLVMIR/ModuleImport.cpp (+1-1)
- (modified) mlir/lib/Transforms/Utils/DialectConversion.cpp (+1-1)
- (modified) mlir/lib/Transforms/Utils/GreedyPatternRewriteDriver.cpp (+1-2)
- (modified) mlir/test/lib/Dialect/Test/TestPatterns.cpp (+1-1)
``````````diff
diff --git a/bolt/lib/Profile/DataAggregator.cpp b/bolt/lib/Profile/DataAggregator.cpp
index ed20ff3941cee..cce08658fefb9 100644
--- a/bolt/lib/Profile/DataAggregator.cpp
+++ b/bolt/lib/Profile/DataAggregator.cpp
@@ -347,7 +347,7 @@ bool DataAggregator::checkPerfDataMagic(StringRef FileName) {
char Buf[7] = {0, 0, 0, 0, 0, 0, 0};
- auto Close = make_scope_exit([&] { sys::fs::closeFile(*FD); });
+ llvm::scope_exit Close([&] { sys::fs::closeFile(*FD); });
Expected<size_t> BytesRead = sys::fs::readNativeFileSlice(
*FD, MutableArrayRef(Buf, sizeof(Buf)), 0);
if (!BytesRead) {
diff --git a/clang-tools-extra/clangd/ClangdLSPServer.cpp b/clang-tools-extra/clangd/ClangdLSPServer.cpp
index 1518f177b06a0..761b07eceec83 100644
--- a/clang-tools-extra/clangd/ClangdLSPServer.cpp
+++ b/clang-tools-extra/clangd/ClangdLSPServer.cpp
@@ -433,7 +433,7 @@ class ClangdLSPServer::MessageHandler : public Transport::MessageHandler {
// When the request ends, we can clean up the entry we just added.
// The cookie lets us check that it hasn't been overwritten due to ID
// reuse.
- return Task.first.derive(llvm::make_scope_exit([this, StrID, Cookie] {
+ return Task.first.derive(llvm::scope_exit([this, StrID, Cookie] {
std::lock_guard<std::mutex> Lock(RequestCancelersMutex);
auto It = RequestCancelers.find(StrID);
if (It != RequestCancelers.end() && It->second.second == Cookie)
diff --git a/clang-tools-extra/clangd/Diagnostics.cpp b/clang-tools-extra/clangd/Diagnostics.cpp
index bc605fda5b0ce..e10960ca5850f 100644
--- a/clang-tools-extra/clangd/Diagnostics.cpp
+++ b/clang-tools-extra/clangd/Diagnostics.cpp
@@ -880,7 +880,7 @@ void StoreDiags::HandleDiagnostic(DiagnosticsEngine::Level DiagLevel,
void StoreDiags::flushLastDiag() {
if (!LastDiag)
return;
- auto Finish = llvm::make_scope_exit([&, NDiags(Output.size())] {
+ llvm::scope_exit Finish([&, NDiags(Output.size())] {
if (Output.size() == NDiags) // No new diag emitted.
vlog("Dropped diagnostic: {0}: {1}", LastDiag->File, LastDiag->Message);
LastDiag.reset();
diff --git a/clang-tools-extra/clangd/GlobalCompilationDatabase.cpp b/clang-tools-extra/clangd/GlobalCompilationDatabase.cpp
index d229a71867558..a1d9135111ca8 100644
--- a/clang-tools-extra/clangd/GlobalCompilationDatabase.cpp
+++ b/clang-tools-extra/clangd/GlobalCompilationDatabase.cpp
@@ -174,7 +174,7 @@ class DirectoryBasedGlobalCompilationDatabase::DirectoryCache {
}
std::lock_guard<std::mutex> Lock(Mu);
- auto RequestBroadcast = llvm::make_scope_exit([&, OldCDB(CDB.get())] {
+ llvm::scope_exit RequestBroadcast([&, OldCDB(CDB.get())] {
// If we loaded a new CDB, it should be broadcast at some point.
if (CDB != nullptr && CDB.get() != OldCDB)
NeedsBroadcast = true;
diff --git a/clang-tools-extra/clangd/SystemIncludeExtractor.cpp b/clang-tools-extra/clangd/SystemIncludeExtractor.cpp
index 4a5cd3bb78b2f..e781f355aa3e1 100644
--- a/clang-tools-extra/clangd/SystemIncludeExtractor.cpp
+++ b/clang-tools-extra/clangd/SystemIncludeExtractor.cpp
@@ -332,7 +332,7 @@ std::optional<std::string> run(llvm::ArrayRef<llvm::StringRef> Argv,
EC.message());
return std::nullopt;
}
- auto CleanUp = llvm::make_scope_exit(
+ llvm::scope_exit CleanUp(
[&OutputPath]() { llvm::sys::fs::remove(OutputPath); });
std::optional<llvm::StringRef> Redirects[] = {{""}, {""}, {""}};
diff --git a/clang-tools-extra/clangd/TUScheduler.cpp b/clang-tools-extra/clangd/TUScheduler.cpp
index 035e5e63d8fbb..0661ecb58008e 100644
--- a/clang-tools-extra/clangd/TUScheduler.cpp
+++ b/clang-tools-extra/clangd/TUScheduler.cpp
@@ -1003,8 +1003,7 @@ void ASTWorker::runWithAST(
AST = NewAST ? std::make_unique<ParsedAST>(std::move(*NewAST)) : nullptr;
}
// Make sure we put the AST back into the LRU cache.
- auto _ = llvm::make_scope_exit(
- [&AST, this]() { IdleASTs.put(this, std::move(*AST)); });
+ llvm::scope_exit _([&AST, this]() { IdleASTs.put(this, std::move(*AST)); });
// Run the user-provided action.
if (!*AST)
return Action(error(llvm::errc::invalid_argument, "invalid AST"));
@@ -1057,7 +1056,7 @@ void PreambleThread::build(Request Req) {
Status.update([&](TUStatus &Status) {
Status.PreambleActivity = PreambleAction::Building;
});
- auto _ = llvm::make_scope_exit([this, &Req, &ReusedPreamble] {
+ llvm::scope_exit _([this, &Req, &ReusedPreamble] {
ASTPeer.updatePreamble(std::move(Req.CI), std::move(Req.Inputs),
LatestBuild, std::move(Req.CIDiags),
std::move(Req.WantDiags));
diff --git a/clang-tools-extra/clangd/XRefs.cpp b/clang-tools-extra/clangd/XRefs.cpp
index 4e330bf769d20..8a24d19a7d129 100644
--- a/clang-tools-extra/clangd/XRefs.cpp
+++ b/clang-tools-extra/clangd/XRefs.cpp
@@ -1097,7 +1097,7 @@ class FindControlFlow : public RecursiveASTVisitor<FindControlFlow> {
// Traverses the subtree using Delegate() if any targets remain.
template <typename Func>
bool filterAndTraverse(DynTypedNode D, const Func &Delegate) {
- auto RestoreIgnore = llvm::make_scope_exit(
+ llvm::scope_exit RestoreIgnore(
[OldIgnore(Ignore), this] { Ignore = OldIgnore; });
if (getFunctionBody(D))
Ignore = All;
diff --git a/clang-tools-extra/clangd/index/dex/dexp/Dexp.cpp b/clang-tools-extra/clangd/index/dex/dexp/Dexp.cpp
index fa451daf1bb52..d3eb0e152cd0d 100644
--- a/clang-tools-extra/clangd/index/dex/dexp/Dexp.cpp
+++ b/clang-tools-extra/clangd/index/dex/dexp/Dexp.cpp
@@ -107,7 +107,7 @@ class Command {
bool Ok = llvm::cl::ParseCommandLineOptions(Argv.size(), Argv.data(),
Overview, &OS);
// must do this before opts are destroyed
- auto Cleanup = llvm::make_scope_exit(llvm::cl::ResetCommandLineParser);
+ llvm::scope_exit Cleanup(llvm::cl::ResetCommandLineParser);
if (Help.getNumOccurrences() > 0) {
// Avoid printing parse errors in this case.
// (Well, in theory. A bunch get printed to llvm::errs() regardless!)
diff --git a/clang-tools-extra/clangd/support/FileCache.cpp b/clang-tools-extra/clangd/support/FileCache.cpp
index cc59c648b062a..25de5a77e5bec 100644
--- a/clang-tools-extra/clangd/support/FileCache.cpp
+++ b/clang-tools-extra/clangd/support/FileCache.cpp
@@ -35,7 +35,7 @@ void FileCache::read(
std::lock_guard<std::mutex> Lock(Mu);
// We're going to update the cache and return whatever's in it.
- auto Return = llvm::make_scope_exit(Read);
+ llvm::scope_exit Return(Read);
// Return any sufficiently recent result without doing any further work.
if (ValidTime > FreshTime)
@@ -43,7 +43,7 @@ void FileCache::read(
// Ensure we always bump ValidTime, so that FreshTime imposes a hard limit on
// how often we do IO.
- auto BumpValidTime = llvm::make_scope_exit(
+ llvm::scope_exit BumpValidTime(
[&] { ValidTime = std::chrono::steady_clock::now(); });
// stat is cheaper than opening the file. It's usually unchanged.
diff --git a/clang-tools-extra/clangd/support/Threading.cpp b/clang-tools-extra/clangd/support/Threading.cpp
index f42db89b483c0..7017201e3a225 100644
--- a/clang-tools-extra/clangd/support/Threading.cpp
+++ b/clang-tools-extra/clangd/support/Threading.cpp
@@ -85,7 +85,7 @@ void AsyncTaskRunner::runAsync(const llvm::Twine &Name,
++InFlightTasks;
}
- auto CleanupTask = llvm::make_scope_exit([this]() {
+ llvm::scope_exit CleanupTask([this]() {
std::lock_guard<std::mutex> Lock(Mutex);
int NewTasksCnt = --InFlightTasks;
if (NewTasksCnt == 0) {
diff --git a/clang-tools-extra/clangd/support/Trace.cpp b/clang-tools-extra/clangd/support/Trace.cpp
index 7c6490f2e92fb..196611b9b76d1 100644
--- a/clang-tools-extra/clangd/support/Trace.cpp
+++ b/clang-tools-extra/clangd/support/Trace.cpp
@@ -289,7 +289,7 @@ makeSpanContext(llvm::Twine Name, const Metric &LatencyMetric) {
return std::make_pair(Context::current().clone(), nullptr);
std::optional<WithContextValue> WithLatency;
using Clock = std::chrono::high_resolution_clock;
- WithLatency.emplace(llvm::make_scope_exit(
+ WithLatency.emplace(llvm::scope_exit(
[StartTime = Clock::now(), Name = Name.str(), &LatencyMetric] {
LatencyMetric.record(
std::chrono::duration_cast<std::chrono::milliseconds>(Clock::now() -
diff --git a/clang-tools-extra/clangd/unittests/CompileCommandsTests.cpp b/clang-tools-extra/clangd/unittests/CompileCommandsTests.cpp
index 660540afd2320..4d59a6151c167 100644
--- a/clang-tools-extra/clangd/unittests/CompileCommandsTests.cpp
+++ b/clang-tools-extra/clangd/unittests/CompileCommandsTests.cpp
@@ -140,7 +140,7 @@ TEST(CommandMangler, ClangPathResolve) {
ok());
// /var/tmp is a symlink on Mac. Resolve it so we're asserting the right path.
ASSERT_THAT(llvm::sys::fs::real_path(TempDir.str(), TempDir), ok());
- auto CleanDir = llvm::make_scope_exit(
+ llvm::scope_exit CleanDir(
[&] { llvm::sys::fs::remove_directories(TempDir); });
ASSERT_THAT(llvm::sys::fs::create_directory(TempDir + "/bin"), ok());
ASSERT_THAT(llvm::sys::fs::create_directory(TempDir + "/lib"), ok());
@@ -163,10 +163,9 @@ TEST(CommandMangler, ClangPathResolve) {
// Set PATH to point to temp/bin so we can find 'foo' on it.
ASSERT_TRUE(::getenv("PATH"));
- auto RestorePath =
- llvm::make_scope_exit([OldPath = std::string(::getenv("PATH"))] {
- ::setenv("PATH", OldPath.c_str(), 1);
- });
+ llvm::scope_exit RestorePath([OldPath = std::string(::getenv("PATH"))] {
+ ::setenv("PATH", OldPath.c_str(), 1);
+ });
::setenv("PATH", (TempDir + "/bin").str().c_str(), /*overwrite=*/1);
// Test the case where the driver is a $PATH-relative path to a symlink.
diff --git a/clang-tools-extra/clangd/unittests/TUSchedulerTests.cpp b/clang-tools-extra/clangd/unittests/TUSchedulerTests.cpp
index 43f38e39c8952..c6862b5eba6fa 100644
--- a/clang-tools-extra/clangd/unittests/TUSchedulerTests.cpp
+++ b/clang-tools-extra/clangd/unittests/TUSchedulerTests.cpp
@@ -113,7 +113,7 @@ class TUSchedulerTests : public ::testing::Test {
void updateWithCallback(TUScheduler &S, PathRef File, ParseInputs Inputs,
WantDiagnostics WD,
llvm::unique_function<void()> CB) {
- WithContextValue Ctx(llvm::make_scope_exit(std::move(CB)));
+ WithContextValue Ctx(llvm::scope_exit(std::move(CB)));
S.update(File, Inputs, WD);
}
diff --git a/clang-tools-extra/clangd/unittests/TestTU.cpp b/clang-tools-extra/clangd/unittests/TestTU.cpp
index a733fac932bf4..e2c2e3f000b66 100644
--- a/clang-tools-extra/clangd/unittests/TestTU.cpp
+++ b/clang-tools-extra/clangd/unittests/TestTU.cpp
@@ -106,7 +106,7 @@ TestTU::preamble(PreambleParsedCallback PreambleCallback) const {
assert(CI && "Failed to build compilation invocation.");
if (OverlayRealFileSystemForModules)
initializeModuleCache(*CI);
- auto ModuleCacheDeleter = llvm::make_scope_exit(
+ llvm::scope_exit ModuleCacheDeleter(
std::bind(deleteModuleCache, CI->getHeaderSearchOpts().ModuleCachePath));
return clang::clangd::buildPreamble(testPath(Filename), *CI, Inputs,
/*StoreInMemory=*/true, PreambleCallback);
@@ -121,7 +121,7 @@ ParsedAST TestTU::build() const {
assert(CI && "Failed to build compilation invocation.");
if (OverlayRealFileSystemForModules)
initializeModuleCache(*CI);
- auto ModuleCacheDeleter = llvm::make_scope_exit(
+ llvm::scope_exit ModuleCacheDeleter(
std::bind(deleteModuleCache, CI->getHeaderSearchOpts().ModuleCachePath));
auto Preamble = clang::clangd::buildPreamble(testPath(Filename), *CI, Inputs,
diff --git a/clang/lib/AST/ASTImporter.cpp b/clang/lib/AST/ASTImporter.cpp
index c1441744c8578..101ab2c40973b 100644
--- a/clang/lib/AST/ASTImporter.cpp
+++ b/clang/lib/AST/ASTImporter.cpp
@@ -1298,7 +1298,7 @@ auto ASTImporter::FunctionDeclImportCycleDetector::makeScopedCycleDetection(
FunctionDeclsWithImportInProgress.insert(D);
LambdaD = D;
}
- return llvm::make_scope_exit([this, LambdaD]() {
+ return llvm::scope_exit([this, LambdaD]() {
if (LambdaD) {
FunctionDeclsWithImportInProgress.erase(LambdaD);
}
@@ -2547,8 +2547,7 @@ Error ASTNodeImporter::ImportDefinition(
// Complete the definition even if error is returned.
// The RecordDecl may be already part of the AST so it is better to
// have it in complete state even if something is wrong with it.
- auto DefinitionCompleterScopeExit =
- llvm::make_scope_exit(DefinitionCompleter);
+ llvm::scope_exit DefinitionCompleterScopeExit(DefinitionCompleter);
if (Error Err = setTypedefNameForAnonDecl(From, To, Importer))
return Err;
@@ -9799,8 +9798,7 @@ Expected<Decl *> ASTImporter::Import(Decl *FromD) {
// Push FromD to the stack, and remove that when we return.
ImportPath.push(FromD);
- auto ImportPathBuilder =
- llvm::make_scope_exit([this]() { ImportPath.pop(); });
+ llvm::scope_exit ImportPathBuilder([this]() { ImportPath.pop(); });
// Check whether there was a previous failed import.
// If yes return the existing error.
diff --git a/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp b/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp
index f14cb43e47dd4..c5b1ed8cfabdc 100644
--- a/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp
+++ b/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp
@@ -1018,7 +1018,7 @@ Environment::createLocAndMaybeValue(QualType Ty,
int Depth, int &CreatedValuesCount) {
if (!Visited.insert(Ty.getCanonicalType()).second)
return createStorageLocation(Ty.getNonReferenceType());
- auto EraseVisited = llvm::make_scope_exit(
+ llvm::scope_exit EraseVisited(
[&Visited, Ty] { Visited.erase(Ty.getCanonicalType()); });
Ty = Ty.getNonReferenceType();
diff --git a/clang/lib/Analysis/FlowSensitive/HTMLLogger.cpp b/clang/lib/Analysis/FlowSensitive/HTMLLogger.cpp
index 557df21883794..a1469d690a3a8 100644
--- a/clang/lib/Analysis/FlowSensitive/HTMLLogger.cpp
+++ b/clang/lib/Analysis/FlowSensitive/HTMLLogger.cpp
@@ -539,12 +539,10 @@ llvm::Expected<std::string> renderSVG(llvm::StringRef DotGraph) {
Input))
return llvm::createStringError(EC, "failed to create `dot` temp input");
llvm::raw_fd_ostream(InputFD, /*shouldClose=*/true) << DotGraph;
- auto DeleteInput =
- llvm::make_scope_exit([&] { llvm::sys::fs::remove(Input); });
+ llvm::scope_exit DeleteInput([&] { llvm::sys::fs::remove(Input); });
if (auto EC = llvm::sys::fs::createTemporaryFile("analysis", ".svg", Output))
return llvm::createStringError(EC, "failed to create `dot` temp output");
- auto DeleteOutput =
- llvm::make_scope_exit([&] { llvm::sys::fs::remove(Output); });
+ llvm::scope_exit DeleteOutput([&] { llvm::sys::fs::remove(Output); });
std::vector<std::optional<llvm::StringRef>> Redirects = {
Input, Output,
diff --git a/clang/lib/Analysis/ThreadSafety.cpp b/clang/lib/Analysis/ThreadSafety.cpp
index 60d9c0f3b0ed2..df4bae89f62df 100644
--- a/clang/lib/Analysis/ThreadSafety.cpp
+++ b/clang/lib/Analysis/ThreadSafety.cpp
@@ -1682,7 +1682,7 @@ void ThreadSafetyAnalyzer::getEdgeLockset(FactSet& Result,
return LocalVarMap.lookupExpr(D, Ctx);
});
}
- auto Cleanup = llvm::make_scope_exit(
+ llvm::scope_exit Cleanup(
[this] { SxBuilder.setLookupLocalVarExpr(nullptr); });
const auto *Exp = getTrylockCallExpr(Cond, LVarCtx, Negate);
diff --git a/clang/lib/Analysis/ThreadSafetyCommon.cpp b/clang/lib/Analysis/ThreadSafetyCommon.cpp
index ef48ae439c5f3..5bee86470ed7f 100644
--- a/clang/lib/Analysis/ThreadSafetyCommon.cpp
+++ b/clang/lib/Analysis/ThreadSafetyCommon.cpp
@@ -251,13 +251,13 @@ til::SExpr *SExprBuilder::translateVariable(const VarDecl *VD,
// The closure captures state that is updated to correctly translate chains of
// aliases. Restore it when we are done with recursive translation.
- auto Cleanup = llvm::make_scope_exit(
- [&, RestoreClosure =
- VarsBeingTranslated.empty() ? LookupLocalVarExpr : nullptr] {
- VarsBeingTranslated.erase(VD->getCanonicalDecl());
- if (VarsBeingTranslated.empty())
- LookupLocalVarExpr = RestoreClosure;
- });
+ llvm::scope_exit Cleanup([&, RestoreClosure = VarsBeingTranslated.empty()
+ ? LookupLocalVarExpr
+ : nullptr] {
+ VarsBeingTranslated.erase(VD->getCanonicalDecl());
+ if (VarsBeingTranslated.empty())
+ LookupLocalVarExpr = RestoreClosure;
+ });
VarsBeingTranslated.insert(VD->getCanonicalDecl());
QualType Ty = VD->getType();
diff --git a/clang/lib/CodeGen/CGCoroutine.cpp b/clang/lib/CodeGen/CGCoroutine.cpp
index f972f6a7e30b9..c80bb0e004367 100644
--- a/clang/lib/CodeGen/CGCoroutine.cpp
+++ b/clang/lib/CodeGen/CGCoroutine.cpp
@@ -230,8 +230,7 @@ static LValueOrRValue emitSuspendExpression(CodeGenFunction &CGF, CGCoroData &Co
auto CommonBinder =
CodeGenFunction::OpaqueValueMappingData::bind(CGF, S.getOpaqueValue(), E);
- auto UnbindCommonOnExit =
- llvm::make_scope_exit([&] { CommonBinder.unbind(CGF); });
+ llvm::scope_exit UnbindCommonOnExit([&] { CommonBinder.unbind(CGF); });
auto Prefix = buildSuspendPrefixStr(Coro, Kind);
BasicBlock *ReadyBlock = CGF.createBasicBlock(Prefix + Twine(".ready"));
@@ -464,8 +463,7 @@ CodeGenFunction::generateAwaitSuspendWrapper(Twine const &CoroName,
auto *SuspendRet = EmitScalarExpr(S.getSuspendExpr());
- auto UnbindCommonOnExit =
- llvm::make_scope_exit([&] { AwaiterBinder.unbind(*this); });
+ llvm::scope_exit UnbindCommonOnExit([&] { AwaiterBinder.unbind(*this); });
if (SuspendRet != nullptr) {
Fn->addRetAttr(llvm::Attribute::AttrKind::NoUndef);
Builder.CreateStore(SuspendRet, ReturnValue);
diff --git a/clang/lib/CodeGen/CGExpr.cpp b/clang/lib/CodeGen/CGExpr.cpp
index d784e1d6c68fe..ba2cdd3ea19dc 100644
--- a/clang/lib/CodeGen/CGExpr.cpp
+++ b/clang/lib/CodeGen/CGExpr.cpp
@@ -5874,8 +5874,7 @@ LValue CodeGenFunction::EmitConditionalOperatorLValue(
/// are permitted with aggregate result, including noop aggregate casts, and
/// cast from scalar to union.
LValue CodeGenFunction::EmitCastLValue(const CastExpr *E) {
- auto RestoreCurCast =
- llvm::make_scope_exit([this, Prev = CurCast] { CurCast = Prev; });
+ llvm::scope_exit RestoreCurCast([this, Prev = CurCast] { CurCast = Prev; });
CurCast = E;
switch (E->getCastKind()) {
case CK_ToVoid:
@@ -6172,7 +6171,7 @@ RValue CodeGenFunction::EmitCallExpr(const CallExpr *E,
CallOrInvoke = &CallOrInvokeStorage;
}
- auto AddCoroElideSafeOnExit = llvm::make_scope_exit([&] {
+ llvm::scope_exit AddCoroElideSafeOnExit([&] {
if (E->isCoroElideSafe()) {
auto *I = *CallOrInvoke;
if (I)
diff --git a/clang/lib/CodeGen/CGExprScalar.cpp b/clang/lib/CodeGen/CGExprScalar.cpp
index 7961aba7df52f..84421fef9f524 100644
--- a/clang/lib/CodeGen/CGExprScalar.cpp
+++ b/clang/lib/CodeGen/CGExprScalar.cpp
@@ -2503,8 +2503,8 @@ static Value *EmitHLSLElementwiseCast(CodeGenFunction &CGF, LValue SrcVal,
// have to handle a more broad range of conversions than explicit casts, as they
// handle things like function to ptr-to-function decay etc.
Value *ScalarExprEmitter::VisitCastExpr(CastExpr *CE) {
- auto RestoreCurCast =
- llvm::make_scope_exit([this, Prev = CGF.CurCast] { CGF.CurCast = Prev; });
+ llvm::scope_exit RestoreCurCast(
+ [this, Prev = CGF.CurCast] { CGF.CurCast = Prev; });
CGF.CurCast = CE;
Expr *E = CE->getSubExpr();
diff --git a/clang/lib/CodeGen/CGHLSLRuntime.cpp b/clang/lib/CodeGen/CGHLSLRuntime.cpp
index 2e9602d1b3793..86e73fbad9ae5 100644
--- a/clang/lib/CodeGen/CGHLSLRuntime.cpp
+++ b/clang/lib/CodeGen/CGHLSLRuntime.cpp
@@ -1418,7 +1418,7 @@ class HLSLBufferCopyEmitter {
llvm::ConstantInt *LoadIndex) {
CurStoreIndices.push_back(StoreIndex);
CurLoadIndices.push_back(LoadIndex);
- auto RestoreIndices = llvm::make_scope_exit([&]() {
+ llvm::scope_exit RestoreIndices([&]() {
CurStoreIndices.pop_back();
CurLoadIndices.pop_back();
});
diff --gi...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/174030
More information about the llvm-commits
mailing list