https://github.com/medismailben updated 
https://github.com/llvm/llvm-project/pull/158811

>From d588fcece4756658ef5ca28dcacc36bd51dcf7ea Mon Sep 17 00:00:00 2001
From: Med Ismail Bennani <[email protected]>
Date: Tue, 2 Dec 2025 18:37:54 -0800
Subject: [PATCH] [lldb/Symbol] Relax LineEntry validity for PC-less frames

LineEntry::IsValid() no longer requires a valid address range, enabling
line entries created using the SBAPI to be set in SBSymbolContext.

Signed-off-by: Med Ismail Bennani <[email protected]>
---
 lldb/source/API/SBLineEntry.cpp                    |  4 ++--
 lldb/source/Symbol/LineEntry.cpp                   |  4 +---
 .../scripted_process/dummy_scripted_process.py     | 14 ++++++++++++++
 3 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/lldb/source/API/SBLineEntry.cpp b/lldb/source/API/SBLineEntry.cpp
index 0f4936f32a074..94d58af606c03 100644
--- a/lldb/source/API/SBLineEntry.cpp
+++ b/lldb/source/API/SBLineEntry.cpp
@@ -50,7 +50,7 @@ SBAddress SBLineEntry::GetStartAddress() const {
   LLDB_INSTRUMENT_VA(this);
 
   SBAddress sb_address;
-  if (m_opaque_up)
+  if (m_opaque_up && m_opaque_up->range.IsValid())
     sb_address.SetAddress(m_opaque_up->range.GetBaseAddress());
 
   return sb_address;
@@ -60,7 +60,7 @@ SBAddress SBLineEntry::GetEndAddress() const {
   LLDB_INSTRUMENT_VA(this);
 
   SBAddress sb_address;
-  if (m_opaque_up) {
+  if (m_opaque_up && m_opaque_up->range.IsValid()) {
     sb_address.SetAddress(m_opaque_up->range.GetBaseAddress());
     sb_address.OffsetAddress(m_opaque_up->range.GetByteSize());
   }
diff --git a/lldb/source/Symbol/LineEntry.cpp b/lldb/source/Symbol/LineEntry.cpp
index c941a6927cb93..3491dd1363500 100644
--- a/lldb/source/Symbol/LineEntry.cpp
+++ b/lldb/source/Symbol/LineEntry.cpp
@@ -32,9 +32,7 @@ void LineEntry::Clear() {
   is_terminal_entry = 0;
 }
 
-bool LineEntry::IsValid() const {
-  return range.GetBaseAddress().IsValid() && line != LLDB_INVALID_LINE_NUMBER;
-}
+bool LineEntry::IsValid() const { return line != LLDB_INVALID_LINE_NUMBER; }
 
 bool LineEntry::DumpStopContext(Stream *s, bool show_fullpaths) const {
   const FileSpec &file = file_sp->GetSpecOnly();
diff --git 
a/lldb/test/API/functionalities/scripted_process/dummy_scripted_process.py 
b/lldb/test/API/functionalities/scripted_process/dummy_scripted_process.py
index 835267221ddb4..a9459682e70a8 100644
--- a/lldb/test/API/functionalities/scripted_process/dummy_scripted_process.py
+++ b/lldb/test/API/functionalities/scripted_process/dummy_scripted_process.py
@@ -74,6 +74,20 @@ def __init__(self, process, args):
         self.frames.append(DummyScriptedFrame(self, args, len(self.frames), 
"bar"))
         self.frames.append(DummyScriptedFrame(self, args, len(self.frames), 
"foo"))
 
+        cwd = os.path.dirname(os.path.abspath(__file__))
+
+        le = lldb.SBLineEntry()
+        le.SetFileSpec(lldb.SBFileSpec(os.path.join(cwd, "baz.cpp"), True))
+        le.SetLine(9)
+        le.SetColumn(10)
+
+        sym_ctx = lldb.SBSymbolContext()
+        sym_ctx.SetLineEntry(le)
+
+        self.frames.append(
+            DummyScriptedFrame(self, args, len(self.frames), "baz", sym_ctx)
+        )
+
     def get_thread_id(self) -> int:
         return 0x19
 

_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to