[all-commits] [llvm/llvm-project] a31a5d: Make sure Target::EvaluateExpression() passes up a...

Adrian Prantl via All-commits all-commits at lists.llvm.org
Mon Oct 17 15:22:09 PDT 2022


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: a31a5da3c7d7393749a43dbc678fd28fb94d07f6
      https://github.com/llvm/llvm-project/commit/a31a5da3c7d7393749a43dbc678fd28fb94d07f6
  Author: Adrian Prantl <aprantl at apple.com>
  Date:   2022-10-17 (Mon, 17 Oct 2022)

  Changed paths:
    M lldb/source/Commands/CommandObjectExpression.cpp
    M lldb/source/Target/Target.cpp

  Log Message:
  -----------
  Make sure Target::EvaluateExpression() passes up an error instead of silently dropping it.

When UserExpression::Evaluate() fails and doesn't return a ValueObject there is no vehicle for returning the error in the return value.

This behavior can be observed by applying the following patch:

diff --git a/lldb/source/Target/Target.cpp b/lldb/source/Target/Target.cpp
index f1a311b7252c..58c03ccdb068 100644
--- a/lldb/source/Target/Target.cpp
+++ b/lldb/source/Target/Target.cpp
@@ -2370,6 +2370,7 @@ UserExpression *Target::GetUserExpressionForLanguage(
     Expression::ResultType desired_type,
     const EvaluateExpressionOptions &options, ValueObject *ctx_obj,
     Status &error) {
+  error.SetErrorStringWithFormat("Ha ha!");  return nullptr;
   auto type_system_or_err = GetScratchTypeSystemForLanguage(language);
   if (auto err = type_system_or_err.takeError()) {
     error.SetErrorStringWithFormat(

and then running

$ lldb -o "p 1"
(lldb) p 1
(lldb)

This patch fixes this by creating an empty result ValueObject that wraps the error.

Differential Revision: https://reviews.llvm.org/D135998




More information about the All-commits mailing list