diff --git a/lldb/source/Host/common/Editline.cpp b/lldb/source/Host/common/Editline.cpp index bcc174325195..5bfb612c63bd 100644 --- a/lldb/source/Host/common/Editline.cpp +++ b/lldb/source/Host/common/Editline.cpp @@ -1554,8 +1554,10 @@ bool Editline::GetLines(int first_line_number, StringList &lines, interrupted = m_editor_status == EditorStatus::Interrupted; if (!interrupted) { - // Save the completed entry in history before returning - m_history_sp->Enter(CombineLines(m_input_lines).c_str()); + // Save the completed entry in history before returning. Don't save empty + // input as that just clutters the command history. + if (m_input_lines.size() > 1 || !m_input_lines.front().empty()) + m_history_sp->Enter(CombineLines(m_input_lines).c_str()); lines = GetInputAsStringList(); } diff --git a/lldb/test/API/commands/expression/multiline-navigation/TestMultilineNavigation.py b/lldb/test/API/commands/expression/multiline-navigation/TestMultilineNavigation.py index 369ae3fb57a4..938934f1d3fa 100644 --- a/lldb/test/API/commands/expression/multiline-navigation/TestMultilineNavigation.py +++ b/lldb/test/API/commands/expression/multiline-navigation/TestMultilineNavigation.py @@ -76,22 +76,32 @@ class TestCase(PExpectTest): @skipIfEditlineSupportMissing @expectedFailureAll(oslist=['freebsd'], bugnumber='llvm.org/pr48316') @skipIf(oslist=["linux"], archs=["arm", "aarch64"]) # Randomly fails on buildbot - def test_nav_arrow_up_empty_pr49845(self): - """Tests that navigating with the up arrow doesn't crash.""" + def test_nav_arrow_up_empty(self): + """ + Tests that navigating with the up arrow doesn't crash and skips + empty history entries. + """ self.launch() - # Create an empty history session by only entering a newline. + # Create a real history entry '456' and then follow up with an + # empty entry (that shouldn't be saved). + self.child.sendline("expr") + self.child.expect_exact("terminate with an empty line to evaluate") + self.child.send("456\n\n") + self.expect_prompt() + self.child.sendline("expr") self.child.expect_exact("terminate with an empty line to evaluate") self.child.send("\n") self.expect_prompt() - # Send just the up arrow in the expression evaluator. This should bring up the previous empty expression. + # The up arrow should recall the actual history entry and not the + # the empty entry (as that one shouldn't have been saved). self.child.sendline("expr") self.child.expect_exact("terminate with an empty line to evaluate") self.child.send(self.arrow_up) - self.child.expect_exact("1: ") - self.child.send("\n") + self.child.expect_exact("456") + self.child.send("\n\n") self.expect_prompt() self.quit()