<html>
    <head>
      <base href="https://llvm.org/bugs/" />
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW --- - LLDB fails to display content of a variable size array"
   href="https://llvm.org/bugs/show_bug.cgi?id=26010">26010</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>LLDB fails to display content of a variable size array
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>lldb
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>unspecified
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>PC
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>Linux
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>normal
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>All Bugs
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>lldb-dev@lists.llvm.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>tberghammer@google.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvm-bugs@lists.llvm.org
          </td>
        </tr>

        <tr>
          <th>Classification</th>
          <td>Unclassified
          </td>
        </tr></table>
      <p>
        <div>
        <pre>Compile the following code snippet with g++ (tested with 4.8.2 on Linux
x86_64):

int main() {
    for (int i = 0; i < 10; ++i) {
        int x[i + 1];
        x[0] = sizeof(x);
        x[0] *= 2; // Break here
    }
}

Break at the marked line and display the variable x with executing the "frame
variable x" command.

Expected behavior is to display x as an array with the number of displayed
elements matching with the actual element count of the array in the current
implementation.

Actual behavior is that the array is always displayed with 4 element regardless
of the current iteration.

In the same scenario gdb displays the array with the correct number of element.

If the inferior is compiled with clang then gdb fails as well because incorrect
debug info is generated (<a href="http://llvm.org/pr25934">http://llvm.org/pr25934</a>)

The problem is that for variable sized arrays g++ correctly generates a
DW_TAG_subrange_type children with a DW_AT_upper_bound attribute containing a
dwarf expression pointing to the location where the current size of the array
is stored but LLDB don't handle the case where DW_AT_upper_bound is a dwarf
expression.</pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are the assignee for the bug.</li>
      </ul>
    </body>
</html>