[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
Mon Apr 26 16:49:32 PDT 2021
aprantl created this revision.
aprantl added reviewers: teemperor, shafik, jingham.
aprantl requested review of this revision.
When the user running LLDB with default settings sees the fixit notification it means that the auto-applied fixit didn't work. This patch shows the underlying error message instead of just the fixit to make it easier to understand what the error in the expression was.
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().size())
+ 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.340684.patch
Type: text/x-patch
Size: 3709 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20210426/532a682c/attachment.bin>
More information about the lldb-commits
mailing list