<html>
    <head>
      <base href="http://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 --- - Issue with displaying a union of templated type in debugger"
   href="http://llvm.org/bugs/show_bug.cgi?id=20609">20609</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>Issue with displaying a union of templated type in debugger
          </td>
        </tr>

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

        <tr>
          <th>Version</th>
          <td>3.4
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>Macintosh
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>MacOS X
          </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@cs.uiuc.edu
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>rtepub@gmail.com
          </td>
        </tr>

        <tr>
          <th>Classification</th>
          <td>Unclassified
          </td>
        </tr></table>
      <p>
        <div>
        <pre>(I tried to post this to the lldb-dev list a few days ago but it was blocked by
moderator. Not sure why, so I'm submitting as a bug, aplogies if it is a
duplicate).

I have come across an issue with trying to view data that is within a union
Xcode's debug view, specifically when the data type is templated. Please
consider the following:

template <typename T>
struct vec2 {
    union { T x, r; };
    union { T y, g; };
};

int main()
{
  vec2<float> foo = { 2.0f, 3.0f };
  return 0;
}

If I place a breakpoint on the return statement and exam foo, I see two tabs
with no name. Clicking on either tab shows an array of 'y = 3, g = 3', while
there is no sign of x (or r). Something is going wrong here.

However if I remote the templating:

struct vec2 {
    union { float x, r; };
    union { float y, g; };
};

int main()
{
  vec2 foo = { 2.0f, 3.0f };
  return 0;
}

and example the data in the same manner, I see that one tab has an array of 'x
= 2, r = 2', and the other is 'y = 3, g = 3'.  Is this a known issue? I
discovered this while trying to make use of the popular GLM math library, which
uses unions in this manner to follow the GLSL types spec.

As an aside, I think the display of unions in general (even without the
templates) is not ideal, at first glance it is difficult to make out what the
data is at all, given that it is a) hidden underneath tabs with no names and b)
duplicated. Has there been any thought towards how to better represent this
data in the debugger?

Thanks,
Rich

other version info:
Xcode: 5.1.1 (5B1008)
clang: Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
lldb: lldb-310.2.37</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>