https://github.com/Michael137 created 
https://github.com/llvm/llvm-project/pull/176428

Makes use of the recently introduced `llvm::createStringErrorV` API. It's 
designed exactly for this use-case.

>From 77e4c7befb251b2cefc3e0aa8732f5a84a022519 Mon Sep 17 00:00:00 2001
From: Michael Buch <[email protected]>
Date: Fri, 16 Jan 2026 16:06:10 +0000
Subject: [PATCH] [lldb][NFC] Replace createStringError/llvm::formatv pairs
 with createStringErrorV

Makes use of the recently introduced `llvm::createStringErrorV` API.
It's designed exactly for this use-case.
---
 lldb/source/Expression/DWARFExpression.cpp    | 18 +++++------
 lldb/source/Expression/Expression.cpp         | 12 +++----
 .../Clang/ClangModulesDeclVendor.cpp          | 15 +++++----
 .../Platform/WebAssembly/PlatformWasm.cpp     |  4 +--
 .../Process/gdb-remote/ProcessGDBRemote.cpp   | 31 +++++++++----------
 .../SymbolFile/DWARF/SymbolFileDWARF.cpp      | 14 ++++-----
 .../DWARF/SymbolFileDWARFDebugMap.cpp         |  4 +--
 lldb/source/Protocol/MCP/Server.cpp           |  2 +-
 lldb/source/Symbol/Function.cpp               |  4 +--
 9 files changed, 51 insertions(+), 53 deletions(-)

diff --git a/lldb/source/Expression/DWARFExpression.cpp 
b/lldb/source/Expression/DWARFExpression.cpp
index 364b2ecadadd4..47909db410cac 100644
--- a/lldb/source/Expression/DWARFExpression.cpp
+++ b/lldb/source/Expression/DWARFExpression.cpp
@@ -702,9 +702,9 @@ static llvm::Error 
Evaluate_DW_OP_entry_value(DWARFExpression::Stack &stack,
     // produced by an ambiguous tail call. In this case, refuse to proceed.
     call_edge = parent_func->GetCallEdgeForReturnAddress(return_pc, target);
     if (!call_edge) {
-      return llvm::createStringError(
-          llvm::formatv("no call edge for retn-pc = {0:x} in parent frame {1}",
-                        return_pc, parent_func->GetName()));
+      return llvm::createStringErrorV(
+          "no call edge for retn-pc = {0:x} in parent frame {1}", return_pc,
+          parent_func->GetName());
     }
     Function *callee_func = call_edge->GetCallee(modlist, parent_exe_ctx);
     if (callee_func != current_func) {
@@ -1521,9 +1521,9 @@ llvm::Expected<Value> DWARFExpression::Evaluate(
       if (new_offset <= opcodes.GetByteSize())
         offset = new_offset;
       else {
-        return llvm::createStringError(llvm::formatv(
+        return llvm::createStringErrorV(
             "Invalid opcode offset in DW_OP_skip: {0}+({1}) > {2}", offset,
-            skip_offset, opcodes.GetByteSize()));
+            skip_offset, opcodes.GetByteSize());
       }
     } break;
 
@@ -1547,9 +1547,9 @@ llvm::Expected<Value> DWARFExpression::Evaluate(
         if (new_offset <= opcodes.GetByteSize())
           offset = new_offset;
         else {
-          return llvm::createStringError(llvm::formatv(
+          return llvm::createStringErrorV(
               "Invalid opcode offset in DW_OP_bra: {0}+({1}) > {2}", offset,
-              bra_offset, opcodes.GetByteSize()));
+              bra_offset, opcodes.GetByteSize());
         }
       }
     } break;
@@ -2268,8 +2268,8 @@ llvm::Expected<Value> DWARFExpression::Evaluate(
           break;
         }
       }
-      return llvm::createStringError(llvm::formatv(
-          "Unhandled opcode {0} in DWARFExpression", LocationAtom(op)));
+      return llvm::createStringErrorV("Unhandled opcode {0} in 
DWARFExpression",
+                                      LocationAtom(op));
     }
   }
 
diff --git a/lldb/source/Expression/Expression.cpp 
b/lldb/source/Expression/Expression.cpp
index 16ecb1d7deef8..155079b234522 100644
--- a/lldb/source/Expression/Expression.cpp
+++ b/lldb/source/Expression/Expression.cpp
@@ -41,9 +41,9 @@ lldb_private::FunctionCallLabel::fromString(llvm::StringRef 
label) {
     return llvm::createStringError("malformed function call label.");
 
   if (components[0] != FunctionCallLabelPrefix)
-    return llvm::createStringError(llvm::formatv(
+    return llvm::createStringErrorV(
         "expected function call label prefix '{0}' but found '{1}' instead.",
-        FunctionCallLabelPrefix, components[0]));
+        FunctionCallLabelPrefix, components[0]);
 
   llvm::StringRef discriminator = components[1];
   llvm::StringRef module_label = components[2];
@@ -52,13 +52,13 @@ lldb_private::FunctionCallLabel::fromString(llvm::StringRef 
label) {
 
   lldb::user_id_t module_id = 0;
   if (!llvm::to_integer(module_label, module_id))
-    return llvm::createStringError(
-        llvm::formatv("failed to parse module ID from '{0}'.", module_label));
+    return llvm::createStringError("failed to parse module ID from '{0}'.",
+                                   module_label);
 
   lldb::user_id_t die_id;
   if (!llvm::to_integer(die_label, die_id))
-    return llvm::createStringError(
-        llvm::formatv("failed to parse symbol ID from '{0}'.", die_label));
+    return llvm::createStringErrorV("failed to parse symbol ID from '{0}'.",
+                                    die_label);
 
   return FunctionCallLabel{/*.discriminator=*/discriminator,
                            /*.module_id=*/module_id,
diff --git 
a/lldb/source/Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.cpp 
b/lldb/source/Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.cpp
index ce8dc50b84a31..5d5535d2dd221 100644
--- a/lldb/source/Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.cpp
+++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.cpp
@@ -366,9 +366,9 @@ ClangModulesDeclVendorImpl::AddModule(const SourceModule 
&module,
     lldb_private::StreamString error_stream;
     diagnostic_consumer->DumpDiagnostics(error_stream);
 
-    return llvm::createStringError(llvm::formatv(
-        "couldn't load top-level module {0}:\n{1}",
-        module.path.front().GetStringRef(), error_stream.GetString()));
+    return llvm::createStringErrorV("couldn't load top-level module {0}:\n{1}",
+                                    module.path.front().GetStringRef(),
+                                    error_stream.GetString());
   }
 
   clang::Module *submodule = top_level_module;
@@ -379,10 +379,10 @@ ClangModulesDeclVendorImpl::AddModule(const SourceModule 
&module,
       lldb_private::StreamString error_stream;
       diagnostic_consumer->DumpDiagnostics(error_stream);
 
-      return llvm::createStringError(llvm::formatv(
+      return llvm::createStringErrorV(
           "couldn't load submodule '{0}' of module '{1}':\n{2}",
           component.GetStringRef(), submodule->getFullModuleName(),
-          error_stream.GetString()));
+          error_stream.GetString());
     }
 
     submodule = found;
@@ -408,9 +408,8 @@ ClangModulesDeclVendorImpl::AddModule(const SourceModule 
&module,
     return llvm::Error::success();
   }
 
-  return llvm::createStringError(
-      llvm::formatv("unknown error while loading module {0}\n",
-                    module.path.front().GetStringRef()));
+  return llvm::createStringErrorV("unknown error while loading module {0}\n",
+                                  module.path.front().GetStringRef());
 }
 
 bool ClangModulesDeclVendor::LanguageSupportsClangModules(
diff --git a/lldb/source/Plugins/Platform/WebAssembly/PlatformWasm.cpp 
b/lldb/source/Plugins/Platform/WebAssembly/PlatformWasm.cpp
index 05993f3b3bf84..2872f19693bd7 100644
--- a/lldb/source/Plugins/Platform/WebAssembly/PlatformWasm.cpp
+++ b/lldb/source/Plugins/Platform/WebAssembly/PlatformWasm.cpp
@@ -213,8 +213,8 @@ lldb::ProcessSP 
PlatformWasm::DebugProcess(ProcessLaunchInfo &launch_info,
     // failing to connect.
     if (*exit_code)
       error = Status::FromError(llvm::joinErrors(
-          llvm::createStringError(llvm::formatv(
-              "WebAssembly runtime exited with exit code {0}", **exit_code)),
+          llvm::createStringError(
+              "WebAssembly runtime exited with exit code {0}", **exit_code),
           error.takeError()));
 
     return nullptr;
diff --git a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp 
b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
index 80a8f441da12e..fb1bb47e05d1f 100644
--- a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
+++ b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
@@ -2871,16 +2871,16 @@ ProcessGDBRemote::SendMultiMemReadPacket(
       m_gdb_comm.SendPacketAndWaitForResponse(packet_str.data(), response,
                                               GetInterruptTimeout());
   if (packet_result != GDBRemoteCommunication::PacketResult::Success)
-    return llvm::createStringError(
-        llvm::formatv("MultiMemRead failed to send packet: '{0}'", 
packet_str));
+    return llvm::createStringErrorV("MultiMemRead failed to send packet: 
'{0}'",
+                                    packet_str);
 
   if (response.IsErrorResponse())
-    return llvm::createStringError(
-        llvm::formatv("MultiMemRead failed: '{0}'", response.GetStringRef()));
+    return llvm::createStringErrorV("MultiMemRead failed: '{0}'",
+                                    response.GetStringRef());
 
   if (!response.IsNormalResponse())
-    return llvm::createStringError(llvm::formatv(
-        "MultiMemRead unexpected response: '{0}'", response.GetStringRef()));
+    return llvm::createStringErrorV("MultiMemRead unexpected response: '{0}'",
+                                    response.GetStringRef());
 
   return response;
 }
@@ -2892,22 +2892,22 @@ llvm::Error ProcessGDBRemote::ParseMultiMemReadPacket(
   // The sizes and the data are separated by a `;`.
   auto [sizes_str, memory_data] = response_str.split(';');
   if (sizes_str.size() == response_str.size())
-    return llvm::createStringError(llvm::formatv(
+    return llvm::createStringError(
         "MultiMemRead response missing field separator ';' in: '{0}'",
-        response_str));
+        response_str);
 
   // Sizes are separated by a `,`.
   for (llvm::StringRef size_str : llvm::split(sizes_str, ',')) {
     uint64_t read_size;
     if (size_str.getAsInteger(16, read_size))
-      return llvm::createStringError(llvm::formatv(
-          "MultiMemRead response has invalid size string: {0}", size_str));
+      return llvm::createStringError(
+          "MultiMemRead response has invalid size string: {0}", size_str);
 
     if (memory_data.size() < read_size)
       return llvm::createStringError(
-          llvm::formatv("MultiMemRead response did not have enough data, "
-                        "requested sizes: {0}",
-                        sizes_str));
+          "MultiMemRead response did not have enough data, "
+          "requested sizes: {0}",
+          sizes_str);
 
     llvm::StringRef region_to_read = memory_data.take_front(read_size);
     memory_data = memory_data.drop_front(read_size);
@@ -5674,9 +5674,8 @@ llvm::Expected<bool> 
ProcessGDBRemote::SaveCore(llvm::StringRef outfile) {
     // TODO: grab error message from the packet?  StringExtractor seems to
     // be missing a method for that
     if (response.IsErrorResponse())
-      return llvm::createStringError(
-          llvm::inconvertibleErrorCode(),
-          llvm::formatv("qSaveCore returned an error"));
+      return llvm::createStringError(llvm::inconvertibleErrorCode(),
+                                     "qSaveCore returned an error");
 
     std::string path;
 
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp 
b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
index e1210a1310772..331f0cc502ed3 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
@@ -2619,24 +2619,24 @@ 
SymbolFileDWARF::ResolveFunctionCallLabel(FunctionCallLabel &label) {
         label.lookup_name, from, variant);
     if (!subst_or_err)
       return llvm::joinErrors(
-          llvm::createStringError(llvm::formatv(
+          llvm::createStringErrorV(
               "failed to substitute {0} for {1} in mangled name {2}:", from,
-              variant, label.lookup_name)),
+              variant, label.lookup_name),
           subst_or_err.takeError());
 
     if (!*subst_or_err)
       return llvm::createStringError(
-          llvm::formatv("got invalid substituted mangled named (substituted "
-                        "{0} for {1} in mangled name {2})",
-                        from, variant, label.lookup_name));
+          "got invalid substituted mangled named (substituted "
+          "{0} for {1} in mangled name {2})",
+          from, variant, label.lookup_name);
 
     label.lookup_name = subst_or_err->GetStringRef();
   }
 
   DWARFDIE die = GetDIE(label.symbol_id);
   if (!die.IsValid())
-    return llvm::createStringError(
-        llvm::formatv("invalid DIE ID in {0}", label));
+    return llvm::createStringErrorV(
+        llvm::formatv("invalid DIE ID in {0}", label);
 
   // Label was created using a declaration DIE. Need to fetch the definition
   // to resolve the function call.
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp 
b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp
index a44bf82d3b705..c6aab08117d88 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp
@@ -1609,8 +1609,8 @@ 
SymbolFileDWARFDebugMap::ResolveFunctionCallLabel(FunctionCallLabel &label) {
   const uint64_t oso_idx = GetOSOIndexFromUserID(label.symbol_id);
   SymbolFileDWARF *oso_dwarf = GetSymbolFileByOSOIndex(oso_idx);
   if (!oso_dwarf)
-    return llvm::createStringError(llvm::formatv(
-        "couldn't find symbol file for {0} in debug-map.", label));
+    return llvm::createStringErrorV(
+        "couldn't find symbol file for {0} in debug-map.", label);
 
   return oso_dwarf->ResolveFunctionCallLabel(label);
 }
diff --git a/lldb/source/Protocol/MCP/Server.cpp 
b/lldb/source/Protocol/MCP/Server.cpp
index 71323adbac5f5..18d4b6f42c5bb 100644
--- a/lldb/source/Protocol/MCP/Server.cpp
+++ b/lldb/source/Protocol/MCP/Server.cpp
@@ -190,7 +190,7 @@ Server::ToolsCallHandler(const CallToolParams &params) {
 
   auto it = m_tools.find(tool_name);
   if (it == m_tools.end())
-    return llvm::createStringError(llvm::formatv("no tool \"{0}\"", 
tool_name));
+    return llvm::createStringErrorV("no tool \"{0}\"", tool_name);
 
   ToolArguments tool_args;
   if (params.arguments)
diff --git a/lldb/source/Symbol/Function.cpp b/lldb/source/Symbol/Function.cpp
index 11b823c8c53d6..061cc03a69ed2 100644
--- a/lldb/source/Symbol/Function.cpp
+++ b/lldb/source/Symbol/Function.cpp
@@ -307,8 +307,8 @@ Function::GetSourceInfo() {
   GetStartLineSourceInfo(source_file_sp, start_line);
   LineTable *line_table = m_comp_unit->GetLineTable();
   if (start_line == 0 || !line_table) {
-    return llvm::createStringError(llvm::formatv(
-        "Could not find line information for function \"{0}\".", GetName()));
+    return llvm::createStringErrorV(
+        "Could not find line information for function \"{0}\".", GetName());
   }
 
   uint32_t end_line = start_line;

_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to