https://github.com/cmtice updated 
https://github.com/llvm/llvm-project/pull/151605

>From 0d51e89d663bfd85f3b503452d9c6221be0f7fb7 Mon Sep 17 00:00:00 2001
From: Caroline Tice <cmt...@google.com>
Date: Thu, 31 Jul 2025 15:07:25 -0700
Subject: [PATCH 1/3] [LLDB] Update DIL handling of array subscripting.

This updates the DIL code for handling array subscripting to more
closely match and handle all the cases from the original
'frame var' implementation. Also updates the DIL array subscripting
test. This particularly fixes some issues with handling
synthetic children, objc pointers, and accessing specific bits
within scalar data types.
---
 lldb/source/ValueObject/DILEval.cpp           | 155 ++++++++++++++----
 .../TestFrameVarDILArraySubscript.py          |  16 +-
 2 files changed, 135 insertions(+), 36 deletions(-)

diff --git a/lldb/source/ValueObject/DILEval.cpp 
b/lldb/source/ValueObject/DILEval.cpp
index 6f28434c646cd..527fd46cab1cc 100644
--- a/lldb/source/ValueObject/DILEval.cpp
+++ b/lldb/source/ValueObject/DILEval.cpp
@@ -323,6 +323,7 @@ Interpreter::Visit(const MemberOfNode *node) {
       m_expr, errMsg, node->GetLocation(), node->GetFieldName().size());
 }
 
+
 llvm::Expected<lldb::ValueObjectSP>
 Interpreter::Visit(const ArraySubscriptNode *node) {
   auto lhs_or_err = Evaluate(node->GetBase());
@@ -330,40 +331,136 @@ Interpreter::Visit(const ArraySubscriptNode *node) {
     return lhs_or_err;
   lldb::ValueObjectSP base = *lhs_or_err;
 
-  // Check to see if 'base' has a synthetic value; if so, try using that.
+  StreamString var_expr_path_strm;
   uint64_t child_idx = node->GetIndex();
-  if (lldb::ValueObjectSP synthetic = base->GetSyntheticValue()) {
-    llvm::Expected<uint32_t> num_children =
-        synthetic->GetNumChildren(child_idx + 1);
-    if (!num_children)
-      return llvm::make_error<DILDiagnosticError>(
-          m_expr, toString(num_children.takeError()), node->GetLocation());
-    if (child_idx >= *num_children) {
-      std::string message = llvm::formatv(
-          "array index {0} is not valid for \"({1}) {2}\"", child_idx,
-          base->GetTypeName().AsCString("<invalid type>"),
-          base->GetName().AsCString());
-      return llvm::make_error<DILDiagnosticError>(m_expr, message,
+  lldb::ValueObjectSP child_valobj_sp;
+  bool is_incomplete_array = false;
+  CompilerType base_type = base->GetCompilerType().GetNonReferenceType();
+  base->GetExpressionPath(var_expr_path_strm);
+  if (base_type.IsPointerType()) {
+    bool is_objc_pointer = true;
+    if (base->GetCompilerType().GetMinimumLanguage() != 
lldb::eLanguageTypeObjC)
+      is_objc_pointer = false;
+    else if (!base_type.IsPointerType())
+      is_objc_pointer = false;
+
+    if (is_objc_pointer && !m_use_synthetic) {
+      std::string errMsg =
+          llvm::formatv("\"(({0}) {1}\" is an Objective-C pointer, and cannot "
+                        "be subscripted",
+                        base->GetTypeName().AsCString("<invalid type>"),
+                        base->GetName());
+      return llvm::make_error<DILDiagnosticError>(m_expr, errMsg,
+                                                  node->GetLocation());
+    } else if (is_objc_pointer) {
+      lldb::ValueObjectSP synthetic = base->GetSyntheticValue();
+      if (!synthetic || synthetic == base) {
+        std::string errMsg =
+            llvm::formatv("\"({0}) {1}\" is not an array type",
+                          base->GetTypeName().AsCString("<invalid type>"),
+                          base->GetName());
+        return llvm::make_error<DILDiagnosticError>(m_expr, errMsg,
+                                                    node->GetLocation());
+      } else if (static_cast<uint32_t>(child_idx) >=
+                 synthetic->GetNumChildrenIgnoringErrors()) {
+        std::string errMsg =
+            llvm::formatv("array index {0} is not valid for \"({1}) {2}\"",
+                          child_idx,
+                          base->GetTypeName().AsCString("<invalid type>"),
+                          var_expr_path_strm.GetData());
+        return llvm::make_error<DILDiagnosticError>(m_expr, errMsg,
+                                                    node->GetLocation());
+      } else {
+        child_valobj_sp = synthetic->GetChildAtIndex(child_idx);
+        if (!child_valobj_sp) {
+          std::string errMsg =
+              llvm::formatv("array index {0} is not valid for \"({1}) {2}\"",
+                            child_idx,
+                            base->GetTypeName().AsCString("<invalid type>"),
+                            var_expr_path_strm.GetData());
+          return llvm::make_error<DILDiagnosticError>(m_expr, errMsg,
+                                                      node->GetLocation());
+        }
+      }
+    } else { // it's not an objc pointer
+      child_valobj_sp = base->GetSyntheticArrayMember(child_idx, true);
+      if (!child_valobj_sp) {
+        std::string errMsg =
+            llvm::formatv("failed to use pointer as array for index {0} for "
+                          "\"({1}) {2}\"", child_idx,
+                          base->GetTypeName().AsCString("<invalid type>"),
+                          var_expr_path_strm.GetData());
+        if (base_type.IsPointerToVoid())
+          errMsg = "subscript of pointer to incomplete type 'void'";
+        return llvm::make_error<DILDiagnosticError>(m_expr, errMsg,
+                                                    node->GetLocation());
+      }
+    }
+  } else if (base_type.IsArrayType(
+      nullptr, nullptr, &is_incomplete_array)) {
+    child_valobj_sp = base->GetChildAtIndex(child_idx);
+    if (!child_valobj_sp && (is_incomplete_array || m_use_synthetic))
+      child_valobj_sp = base->GetSyntheticArrayMember(child_idx, true);
+    if (!child_valobj_sp) {
+      std::string errMsg =
+          llvm::formatv("array index {0} is not valid for \"({1}) {2}\"",
+                        child_idx,
+                        base->GetTypeName().AsCString("<invalid type>"),
+                        var_expr_path_strm.GetData());
+      return llvm::make_error<DILDiagnosticError>(m_expr, errMsg,
                                                   node->GetLocation());
     }
-    if (lldb::ValueObjectSP child_valobj_sp =
-            synthetic->GetChildAtIndex(child_idx))
-      return child_valobj_sp;
+  } else if (base_type.IsScalarType()) {
+    child_valobj_sp =
+        base->GetSyntheticBitFieldChild(child_idx, child_idx, true);
+    if (!child_valobj_sp) {
+      std::string errMsg =
+          llvm::formatv("bitfield range {0}-{1} is not valid for \"({2}) 
{3}\"",
+                        child_idx, child_idx,
+                        base->GetTypeName().AsCString("<invalid type>"),
+                        var_expr_path_strm.GetData());
+      return llvm::make_error<DILDiagnosticError>(m_expr, errMsg,
+                                                  node->GetLocation(), 1);
+    }
+  } else {
+    lldb::ValueObjectSP synthetic = base->GetSyntheticValue();
+    if (!m_use_synthetic || !synthetic || synthetic == base) {
+      std::string errMsg =
+          llvm::formatv("\"{0}\" is not an array type",
+                        base->GetTypeName().AsCString("<invalid type>"));
+      return llvm::make_error<DILDiagnosticError>(m_expr, errMsg,
+                                                  node->GetLocation(), 1);
+    } else if (static_cast<uint32_t>(child_idx) >=
+               synthetic->GetNumChildrenIgnoringErrors()) {
+      std::string errMsg =
+          llvm::formatv("array index {0} is not valid for \"({1}) {2}\"",
+                        child_idx,
+                        base->GetTypeName().AsCString("<invalid type>"),
+                        var_expr_path_strm.GetData());
+      return llvm::make_error<DILDiagnosticError>(m_expr, errMsg,
+                                                  node->GetLocation(), 1);
+    } else {
+      child_valobj_sp = synthetic->GetChildAtIndex(child_idx);
+      if (!child_valobj_sp) {
+        std::string errMsg =
+            llvm::formatv("array index {0} is not valid for \"({1}) {2}\"",
+                          child_idx,
+                          base->GetTypeName().AsCString("<invalid type>"),
+                          var_expr_path_strm.GetData());
+        return llvm::make_error<DILDiagnosticError>(m_expr, errMsg,
+                                                    node->GetLocation(), 1);
+      }
+    }
   }
 
-  auto base_type = base->GetCompilerType().GetNonReferenceType();
-  if (!base_type.IsPointerType() && !base_type.IsArrayType())
-    return llvm::make_error<DILDiagnosticError>(
-        m_expr, "subscripted value is not an array or pointer",
-        node->GetLocation());
-  if (base_type.IsPointerToVoid())
-    return llvm::make_error<DILDiagnosticError>(
-        m_expr, "subscript of pointer to incomplete type 'void'",
-        node->GetLocation());
-
-  if (base_type.IsArrayType()) {
-    if (lldb::ValueObjectSP child_valobj_sp = base->GetChildAtIndex(child_idx))
-      return child_valobj_sp;
+  if (child_valobj_sp) {
+    if (m_use_dynamic != lldb::eNoDynamicValues) {
+      lldb::ValueObjectSP dynamic_value_sp(
+          child_valobj_sp->GetDynamicValue(m_use_dynamic));
+      if (dynamic_value_sp)
+        child_valobj_sp = dynamic_value_sp;
+    }
+    return child_valobj_sp;
   }
 
   int64_t signed_child_idx = node->GetIndex();
diff --git 
a/lldb/test/API/commands/frame/var-dil/basics/ArraySubscript/TestFrameVarDILArraySubscript.py
 
b/lldb/test/API/commands/frame/var-dil/basics/ArraySubscript/TestFrameVarDILArraySubscript.py
index 0f56057189395..769bed2acb02c 100644
--- 
a/lldb/test/API/commands/frame/var-dil/basics/ArraySubscript/TestFrameVarDILArraySubscript.py
+++ 
b/lldb/test/API/commands/frame/var-dil/basics/ArraySubscript/TestFrameVarDILArraySubscript.py
@@ -69,17 +69,19 @@ def test_subscript(self):
             substrs=["expected 'r_square', got: <'.'"],
         )
 
-        # Base should be a "pointer to T" and index should be of an integral 
type.
-        self.expect(
-            "frame var 'idx_1[0]'",
-            error=True,
-            substrs=["subscripted value is not an array or pointer"],
-        )
+
+        # Test accessing bits in scalar types.
+        self.expect_var_path("idx_1[0]", value="1")
+        self.expect_var_path("idx_1[1]", value="0")
+
+        # Bit acess not valid for a reference.
         self.expect(
             "frame var 'idx_1_ref[0]'",
             error=True,
-            substrs=["subscripted value is not an array or pointer"],
+            substrs=["bitfield range 0-0 is not valid"],
         )
+
+        # Base should be a "pointer to T" and index should be of an integral 
type.
         self.expect(
             "frame var 'int_arr[int_ptr]'",
             error=True,

>From 0f706e8d85fd9868bf656b02c8f9c09da6e6f58d Mon Sep 17 00:00:00 2001
From: Caroline Tice <cmt...@google.com>
Date: Wed, 6 Aug 2025 22:58:40 -0700
Subject: [PATCH 2/3] Address reviewer comments: - Remove code testing for objc
 pointers - No else-after-return - Rename errMsg err_msg - Add child_idx+1
 argument to calls to GetNumChildrenIgnoringErrors - Fix typo.

---
 lldb/source/ValueObject/DILEval.cpp           | 106 +++++-------------
 .../TestFrameVarDILArraySubscript.py          |   2 +-
 2 files changed, 31 insertions(+), 77 deletions(-)

diff --git a/lldb/source/ValueObject/DILEval.cpp 
b/lldb/source/ValueObject/DILEval.cpp
index 527fd46cab1cc..d75d221cb7299 100644
--- a/lldb/source/ValueObject/DILEval.cpp
+++ b/lldb/source/ValueObject/DILEval.cpp
@@ -338,63 +338,17 @@ Interpreter::Visit(const ArraySubscriptNode *node) {
   CompilerType base_type = base->GetCompilerType().GetNonReferenceType();
   base->GetExpressionPath(var_expr_path_strm);
   if (base_type.IsPointerType()) {
-    bool is_objc_pointer = true;
-    if (base->GetCompilerType().GetMinimumLanguage() != 
lldb::eLanguageTypeObjC)
-      is_objc_pointer = false;
-    else if (!base_type.IsPointerType())
-      is_objc_pointer = false;
-
-    if (is_objc_pointer && !m_use_synthetic) {
-      std::string errMsg =
-          llvm::formatv("\"(({0}) {1}\" is an Objective-C pointer, and cannot "
-                        "be subscripted",
+    child_valobj_sp = base->GetSyntheticArrayMember(child_idx, true);
+    if (!child_valobj_sp) {
+      std::string err_msg =
+          llvm::formatv("failed to use pointer as array for index {0} for "
+                        "\"({1}) {2}\"", child_idx,
                         base->GetTypeName().AsCString("<invalid type>"),
-                        base->GetName());
-      return llvm::make_error<DILDiagnosticError>(m_expr, errMsg,
+                        var_expr_path_strm.GetData());
+      if (base_type.IsPointerToVoid())
+        err_msg = "subscript of pointer to incomplete type 'void'";
+      return llvm::make_error<DILDiagnosticError>(m_expr, err_msg,
                                                   node->GetLocation());
-    } else if (is_objc_pointer) {
-      lldb::ValueObjectSP synthetic = base->GetSyntheticValue();
-      if (!synthetic || synthetic == base) {
-        std::string errMsg =
-            llvm::formatv("\"({0}) {1}\" is not an array type",
-                          base->GetTypeName().AsCString("<invalid type>"),
-                          base->GetName());
-        return llvm::make_error<DILDiagnosticError>(m_expr, errMsg,
-                                                    node->GetLocation());
-      } else if (static_cast<uint32_t>(child_idx) >=
-                 synthetic->GetNumChildrenIgnoringErrors()) {
-        std::string errMsg =
-            llvm::formatv("array index {0} is not valid for \"({1}) {2}\"",
-                          child_idx,
-                          base->GetTypeName().AsCString("<invalid type>"),
-                          var_expr_path_strm.GetData());
-        return llvm::make_error<DILDiagnosticError>(m_expr, errMsg,
-                                                    node->GetLocation());
-      } else {
-        child_valobj_sp = synthetic->GetChildAtIndex(child_idx);
-        if (!child_valobj_sp) {
-          std::string errMsg =
-              llvm::formatv("array index {0} is not valid for \"({1}) {2}\"",
-                            child_idx,
-                            base->GetTypeName().AsCString("<invalid type>"),
-                            var_expr_path_strm.GetData());
-          return llvm::make_error<DILDiagnosticError>(m_expr, errMsg,
-                                                      node->GetLocation());
-        }
-      }
-    } else { // it's not an objc pointer
-      child_valobj_sp = base->GetSyntheticArrayMember(child_idx, true);
-      if (!child_valobj_sp) {
-        std::string errMsg =
-            llvm::formatv("failed to use pointer as array for index {0} for "
-                          "\"({1}) {2}\"", child_idx,
-                          base->GetTypeName().AsCString("<invalid type>"),
-                          var_expr_path_strm.GetData());
-        if (base_type.IsPointerToVoid())
-          errMsg = "subscript of pointer to incomplete type 'void'";
-        return llvm::make_error<DILDiagnosticError>(m_expr, errMsg,
-                                                    node->GetLocation());
-      }
     }
   } else if (base_type.IsArrayType(
       nullptr, nullptr, &is_incomplete_array)) {
@@ -402,54 +356,54 @@ Interpreter::Visit(const ArraySubscriptNode *node) {
     if (!child_valobj_sp && (is_incomplete_array || m_use_synthetic))
       child_valobj_sp = base->GetSyntheticArrayMember(child_idx, true);
     if (!child_valobj_sp) {
-      std::string errMsg =
+      std::string err_msg =
           llvm::formatv("array index {0} is not valid for \"({1}) {2}\"",
                         child_idx,
                         base->GetTypeName().AsCString("<invalid type>"),
                         var_expr_path_strm.GetData());
-      return llvm::make_error<DILDiagnosticError>(m_expr, errMsg,
+      return llvm::make_error<DILDiagnosticError>(m_expr, err_msg,
                                                   node->GetLocation());
     }
   } else if (base_type.IsScalarType()) {
     child_valobj_sp =
         base->GetSyntheticBitFieldChild(child_idx, child_idx, true);
     if (!child_valobj_sp) {
-      std::string errMsg =
+      std::string err_msg =
           llvm::formatv("bitfield range {0}-{1} is not valid for \"({2}) 
{3}\"",
                         child_idx, child_idx,
                         base->GetTypeName().AsCString("<invalid type>"),
                         var_expr_path_strm.GetData());
-      return llvm::make_error<DILDiagnosticError>(m_expr, errMsg,
+      return llvm::make_error<DILDiagnosticError>(m_expr, err_msg,
                                                   node->GetLocation(), 1);
     }
   } else {
     lldb::ValueObjectSP synthetic = base->GetSyntheticValue();
     if (!m_use_synthetic || !synthetic || synthetic == base) {
-      std::string errMsg =
+      std::string err_msg =
           llvm::formatv("\"{0}\" is not an array type",
                         base->GetTypeName().AsCString("<invalid type>"));
-      return llvm::make_error<DILDiagnosticError>(m_expr, errMsg,
+      return llvm::make_error<DILDiagnosticError>(m_expr, err_msg,
                                                   node->GetLocation(), 1);
-    } else if (static_cast<uint32_t>(child_idx) >=
-               synthetic->GetNumChildrenIgnoringErrors()) {
-      std::string errMsg =
+    }
+    if (static_cast<uint32_t>(child_idx) >=
+        synthetic->GetNumChildrenIgnoringErrors(child_idx+1)) {
+      std::string err_msg =
           llvm::formatv("array index {0} is not valid for \"({1}) {2}\"",
                         child_idx,
                         base->GetTypeName().AsCString("<invalid type>"),
                         var_expr_path_strm.GetData());
-      return llvm::make_error<DILDiagnosticError>(m_expr, errMsg,
+      return llvm::make_error<DILDiagnosticError>(m_expr, err_msg,
+                                                  node->GetLocation(), 1);
+    }
+    child_valobj_sp = synthetic->GetChildAtIndex(child_idx);
+    if (!child_valobj_sp) {
+      std::string err_msg =
+          llvm::formatv("array index {0} is not valid for \"({1}) {2}\"",
+                        child_idx,
+                        base->GetTypeName().AsCString("<invalid type>"),
+                        var_expr_path_strm.GetData());
+      return llvm::make_error<DILDiagnosticError>(m_expr, err_msg,
                                                   node->GetLocation(), 1);
-    } else {
-      child_valobj_sp = synthetic->GetChildAtIndex(child_idx);
-      if (!child_valobj_sp) {
-        std::string errMsg =
-            llvm::formatv("array index {0} is not valid for \"({1}) {2}\"",
-                          child_idx,
-                          base->GetTypeName().AsCString("<invalid type>"),
-                          var_expr_path_strm.GetData());
-        return llvm::make_error<DILDiagnosticError>(m_expr, errMsg,
-                                                    node->GetLocation(), 1);
-      }
     }
   }
 
diff --git 
a/lldb/test/API/commands/frame/var-dil/basics/ArraySubscript/TestFrameVarDILArraySubscript.py
 
b/lldb/test/API/commands/frame/var-dil/basics/ArraySubscript/TestFrameVarDILArraySubscript.py
index 769bed2acb02c..1a3a52883955c 100644
--- 
a/lldb/test/API/commands/frame/var-dil/basics/ArraySubscript/TestFrameVarDILArraySubscript.py
+++ 
b/lldb/test/API/commands/frame/var-dil/basics/ArraySubscript/TestFrameVarDILArraySubscript.py
@@ -74,7 +74,7 @@ def test_subscript(self):
         self.expect_var_path("idx_1[0]", value="1")
         self.expect_var_path("idx_1[1]", value="0")
 
-        # Bit acess not valid for a reference.
+        # Bit adcess not valid for a reference.
         self.expect(
             "frame var 'idx_1_ref[0]'",
             error=True,

>From a394c684eaf5df27c90c6facd6d7e1548e32d9d2 Mon Sep 17 00:00:00 2001
From: Caroline Tice <cmt...@google.com>
Date: Wed, 6 Aug 2025 23:15:01 -0700
Subject: [PATCH 3/3] Fix clang-format issues.

---
 lldb/source/ValueObject/DILEval.cpp           | 52 ++++++++-----------
 .../TestFrameVarDILArraySubscript.py          |  1 -
 2 files changed, 23 insertions(+), 30 deletions(-)

diff --git a/lldb/source/ValueObject/DILEval.cpp 
b/lldb/source/ValueObject/DILEval.cpp
index d75d221cb7299..18cc1bfc6554b 100644
--- a/lldb/source/ValueObject/DILEval.cpp
+++ b/lldb/source/ValueObject/DILEval.cpp
@@ -323,7 +323,6 @@ Interpreter::Visit(const MemberOfNode *node) {
       m_expr, errMsg, node->GetLocation(), node->GetFieldName().size());
 }
 
-
 llvm::Expected<lldb::ValueObjectSP>
 Interpreter::Visit(const ArraySubscriptNode *node) {
   auto lhs_or_err = Evaluate(node->GetBase());
@@ -340,27 +339,25 @@ Interpreter::Visit(const ArraySubscriptNode *node) {
   if (base_type.IsPointerType()) {
     child_valobj_sp = base->GetSyntheticArrayMember(child_idx, true);
     if (!child_valobj_sp) {
-      std::string err_msg =
-          llvm::formatv("failed to use pointer as array for index {0} for "
-                        "\"({1}) {2}\"", child_idx,
-                        base->GetTypeName().AsCString("<invalid type>"),
-                        var_expr_path_strm.GetData());
+      std::string err_msg = llvm::formatv(
+          "failed to use pointer as array for index {0} for "
+          "\"({1}) {2}\"",
+          child_idx, base->GetTypeName().AsCString("<invalid type>"),
+          var_expr_path_strm.GetData());
       if (base_type.IsPointerToVoid())
         err_msg = "subscript of pointer to incomplete type 'void'";
       return llvm::make_error<DILDiagnosticError>(m_expr, err_msg,
                                                   node->GetLocation());
     }
-  } else if (base_type.IsArrayType(
-      nullptr, nullptr, &is_incomplete_array)) {
+  } else if (base_type.IsArrayType(nullptr, nullptr, &is_incomplete_array)) {
     child_valobj_sp = base->GetChildAtIndex(child_idx);
     if (!child_valobj_sp && (is_incomplete_array || m_use_synthetic))
       child_valobj_sp = base->GetSyntheticArrayMember(child_idx, true);
     if (!child_valobj_sp) {
-      std::string err_msg =
-          llvm::formatv("array index {0} is not valid for \"({1}) {2}\"",
-                        child_idx,
-                        base->GetTypeName().AsCString("<invalid type>"),
-                        var_expr_path_strm.GetData());
+      std::string err_msg = llvm::formatv(
+          "array index {0} is not valid for \"({1}) {2}\"", child_idx,
+          base->GetTypeName().AsCString("<invalid type>"),
+          var_expr_path_strm.GetData());
       return llvm::make_error<DILDiagnosticError>(m_expr, err_msg,
                                                   node->GetLocation());
     }
@@ -368,11 +365,10 @@ Interpreter::Visit(const ArraySubscriptNode *node) {
     child_valobj_sp =
         base->GetSyntheticBitFieldChild(child_idx, child_idx, true);
     if (!child_valobj_sp) {
-      std::string err_msg =
-          llvm::formatv("bitfield range {0}-{1} is not valid for \"({2}) 
{3}\"",
-                        child_idx, child_idx,
-                        base->GetTypeName().AsCString("<invalid type>"),
-                        var_expr_path_strm.GetData());
+      std::string err_msg = llvm::formatv(
+          "bitfield range {0}-{1} is not valid for \"({2}) {3}\"", child_idx,
+          child_idx, base->GetTypeName().AsCString("<invalid type>"),
+          var_expr_path_strm.GetData());
       return llvm::make_error<DILDiagnosticError>(m_expr, err_msg,
                                                   node->GetLocation(), 1);
     }
@@ -386,22 +382,20 @@ Interpreter::Visit(const ArraySubscriptNode *node) {
                                                   node->GetLocation(), 1);
     }
     if (static_cast<uint32_t>(child_idx) >=
-        synthetic->GetNumChildrenIgnoringErrors(child_idx+1)) {
-      std::string err_msg =
-          llvm::formatv("array index {0} is not valid for \"({1}) {2}\"",
-                        child_idx,
-                        base->GetTypeName().AsCString("<invalid type>"),
-                        var_expr_path_strm.GetData());
+        synthetic->GetNumChildrenIgnoringErrors(child_idx + 1)) {
+      std::string err_msg = llvm::formatv(
+          "array index {0} is not valid for \"({1}) {2}\"", child_idx,
+          base->GetTypeName().AsCString("<invalid type>"),
+          var_expr_path_strm.GetData());
       return llvm::make_error<DILDiagnosticError>(m_expr, err_msg,
                                                   node->GetLocation(), 1);
     }
     child_valobj_sp = synthetic->GetChildAtIndex(child_idx);
     if (!child_valobj_sp) {
-      std::string err_msg =
-          llvm::formatv("array index {0} is not valid for \"({1}) {2}\"",
-                        child_idx,
-                        base->GetTypeName().AsCString("<invalid type>"),
-                        var_expr_path_strm.GetData());
+      std::string err_msg = llvm::formatv(
+          "array index {0} is not valid for \"({1}) {2}\"", child_idx,
+          base->GetTypeName().AsCString("<invalid type>"),
+          var_expr_path_strm.GetData());
       return llvm::make_error<DILDiagnosticError>(m_expr, err_msg,
                                                   node->GetLocation(), 1);
     }
diff --git 
a/lldb/test/API/commands/frame/var-dil/basics/ArraySubscript/TestFrameVarDILArraySubscript.py
 
b/lldb/test/API/commands/frame/var-dil/basics/ArraySubscript/TestFrameVarDILArraySubscript.py
index 1a3a52883955c..1a59fd3bca9f2 100644
--- 
a/lldb/test/API/commands/frame/var-dil/basics/ArraySubscript/TestFrameVarDILArraySubscript.py
+++ 
b/lldb/test/API/commands/frame/var-dil/basics/ArraySubscript/TestFrameVarDILArraySubscript.py
@@ -69,7 +69,6 @@ def test_subscript(self):
             substrs=["expected 'r_square', got: <'.'"],
         )
 
-
         # Test accessing bits in scalar types.
         self.expect_var_path("idx_1[0]", value="1")
         self.expect_var_path("idx_1[1]", value="0")

_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to