[Lldb-commits] [PATCH] D101333: Also display the underlying error message when displaying a fixit

Adrian Prantl via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Tue Apr 27 10:41:04 PDT 2021


This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG25bf137b1ea3: Also display the underlying error message when displaying a fixit (authored by aprantl).
Herald added a project: LLDB.

Changed prior to commit:
  https://reviews.llvm.org/D101333?vs=340684&id=340907#toc

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101333/new/

https://reviews.llvm.org/D101333

Files:
  lldb/source/Expression/UserExpression.cpp
  lldb/test/API/commands/expression/fixits/TestFixIts.py


Index: lldb/test/API/commands/expression/fixits/TestFixIts.py
===================================================================
--- lldb/test/API/commands/expression/fixits/TestFixIts.py
+++ lldb/test/API/commands/expression/fixits/TestFixIts.py
@@ -132,25 +132,25 @@
         # Disable retries which will fail.
         multiple_runs_options.SetRetriesWithFixIts(0)
         value = frame.EvaluateExpression(two_runs_expr, multiple_runs_options)
-        self.assertIn("expression failed to parse, fixed expression suggested:",
-                      value.GetError().GetCString())
-        self.assertIn("using typename T::TypeDef",
-                      value.GetError().GetCString())
+        errmsg = value.GetError().GetCString()
+        self.assertIn("expression failed to parse", errmsg)
+        self.assertIn("using declaration resolved to type without 'typename'",
+                      errmsg)
+        self.assertIn("fixed expression suggested:", errmsg)
+        self.assertIn("using typename T::TypeDef", errmsg)
         # The second Fix-It shouldn't be suggested here as Clang should have
         # aborted the parsing process.
-        self.assertNotIn("i->m",
-                      value.GetError().GetCString())
+        self.assertNotIn("i->m", errmsg)
 
         # Retry once, but the expression needs two retries.
         multiple_runs_options.SetRetriesWithFixIts(1)
         value = frame.EvaluateExpression(two_runs_expr, multiple_runs_options)
-        self.assertIn("expression failed to parse, fixed expression suggested:",
-                      value.GetError().GetCString())
+        errmsg = value.GetError().GetCString()
+        self.assertIn("expression failed to parse", errmsg)
+        self.assertIn("fixed expression suggested:", errmsg)
         # Both our fixed expressions should be in the suggested expression.
-        self.assertIn("using typename T::TypeDef",
-                      value.GetError().GetCString())
-        self.assertIn("i->m",
-                      value.GetError().GetCString())
+        self.assertIn("using typename T::TypeDef", errmsg)
+        self.assertIn("i->m", errmsg)
 
         # Retry twice, which will get the expression working.
         multiple_runs_options.SetRetriesWithFixIts(2)
Index: lldb/source/Expression/UserExpression.cpp
===================================================================
--- lldb/source/Expression/UserExpression.cpp
+++ lldb/source/Expression/UserExpression.cpp
@@ -302,19 +302,19 @@
     }
 
     if (!parse_success) {
-      if (!fixed_expression->empty() && target->GetEnableNotifyAboutFixIts()) {
-        error.SetExpressionErrorWithFormat(
-            execution_results,
-            "expression failed to parse, fixed expression suggested:\n  %s",
-            fixed_expression->c_str());
-      } else {
-        if (!diagnostic_manager.Diagnostics().size())
-          error.SetExpressionError(execution_results,
-                                   "expression failed to parse, unknown error");
+      std::string msg;
+      {
+        llvm::raw_string_ostream os(msg);
+        os << "expression failed to parse:\n";
+        if (!diagnostic_manager.Diagnostics().empty())
+          os << diagnostic_manager.GetString();
         else
-          error.SetExpressionError(execution_results,
-                                   diagnostic_manager.GetString().c_str());
+          os << "unknown error";
+        if (target->GetEnableNotifyAboutFixIts() && fixed_expression &&
+            !fixed_expression->empty())
+          os << "\nfixed expression suggested:\n  " << *fixed_expression;
       }
+      error.SetExpressionError(execution_results, msg.c_str());
     }
   }
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D101333.340907.patch
Type: text/x-patch
Size: 3711 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20210427/941b8e66/attachment.bin>


More information about the lldb-commits mailing list