diff --git a/lldb/source/Commands/CommandCompletions.cpp b/lldb/source/Commands/CommandCompletions.cpp --- a/lldb/source/Commands/CommandCompletions.cpp +++ b/lldb/source/Commands/CommandCompletions.cpp @@ -611,6 +611,9 @@ RegisterContext *reg_ctx = interpreter.GetExecutionContext().GetRegisterContext(); + if (!reg_ctx) + return; + const size_t reg_num = reg_ctx->GetRegisterCount(); for (size_t reg_idx = 0; reg_idx < reg_num; ++reg_idx) { const RegisterInfo *reg_info = reg_ctx->GetRegisterInfoAtIndex(reg_idx); diff --git a/lldb/test/API/functionalities/completion/TestCompletion.py b/lldb/test/API/functionalities/completion/TestCompletion.py --- a/lldb/test/API/functionalities/completion/TestCompletion.py +++ b/lldb/test/API/functionalities/completion/TestCompletion.py @@ -736,13 +736,25 @@ self.runCmd("type synthetic add -x Hoo -l test") self.complete_from_to("type synthetic delete ", ["Hoo"]) - @skipIf(archs=no_match(["x86_64"])) - def test_register_read_and_write_on_x86(self): - """Test the completion of the commands register read and write on x86""" - + def test_register_no_complete(self): # The tab completion for "register read/write" won't work without a running process. self.complete_from_to("register read ", "register read ") self.complete_from_to("register write ", "register write ") + self.complete_from_to("register info ", "register info ") + + self.build() + self.runCmd("target create {}".format(self.getBuildArtifact("a.out"))) + self.runCmd("run") + + # Once a program has finished you have an execution context but no register + # context so completion cannot work. + self.complete_from_to("register read ", "register read ") + self.complete_from_to("register write ", "register write ") + self.complete_from_to("register info ", "register info ") + + @skipIf(archs=no_match(["x86_64"])) + def test_register_read_and_write_on_x86(self): + """Test the completion of the commands register read and write on x86""" self.build() self.main_source_spec = lldb.SBFileSpec("main.cpp")