<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 --- - [DebugInfo] Extend vtable debug info metadata to handle MS ABI"
   href="https://llvm.org/bugs/show_bug.cgi?id=28150">28150</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>[DebugInfo] Extend vtable debug info metadata to handle MS ABI
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>clang
          </td>
        </tr>

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

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

        <tr>
          <th>OS</th>
          <td>Windows NT
          </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>LLVM Codegen
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>unassignedclangbugs@nondot.org
          </td>
        </tr>

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

        <tr>
          <th>CC</th>
          <td>amccarth@google.com, amjad.aboud@intel.com, aprantl@apple.com, david.majnemer@gmail.com, dblaikie@gmail.com, llvm-bugs@lists.llvm.org
          </td>
        </tr>

        <tr>
          <th>Blocks</th>
          <td>12283
          </td>
        </tr>

        <tr>
          <th>Classification</th>
          <td>Unclassified
          </td>
        </tr></table>
      <p>
        <div>
        <pre>Currently DISubprograms have these vtable related fields:

- containingType: The parent class. Appears to be redundant with 'scope' for
virtual methods. We could repurpose this to point to the record that actually
contains the vfptr, since the vftable is very frequently not at offset 0 from
'this', and requires non-virtual and virtual adjustments.

- virtuality: Only has none, virtual, and pure_virtual. We might want to extend
this to include a notion of 'introducing', or we could encode that information
some other way.

- virtualIndex: Should be the vftable index obviously. For dwarf this is
relative to the address point, and we can make this the vftable index pretty
easily. CodeView only includes vftable offsets for introducing virtual methods,
so we could set this to a sentinel value (-1) to indicate that the virtual
method was not introduced in this class, and its offset can be found in the
DWARF describing the base class.

Another issue is that we can't assume that the frontend will provide complete
debug info type information for base classes unless we enable
-fstandalone-debug-info. This means we can't walk the entire class hierarchy in
order to generate this information. Each DICompositeType has to be
self-contained. This means we can't figure out which DICompositeType introduced
a virtual method by walking the class hierarchy.</pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>