<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 --- - Split up DISubprogram"
   href="https://llvm.org/bugs/show_bug.cgi?id=27352">27352</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>Split up DISubprogram
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>libraries
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>trunk
          </td>
        </tr>

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

        <tr>
          <th>OS</th>
          <td>All
          </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>DebugInfo
          </td>
        </tr>

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

        <tr>
          <th>Reporter</th>
          <td>aprantl@apple.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>There are two types of DISubprogram:

(1) Subprogram definitions (which belong to a compile unit and are attached to
a Function)
(2) Subprogram declarations (which are part of the type hierarchy)

These should really be separate classes. Splitting them up would not just
simplify code and reduce overall awkwardness, but it would also allow us to
save memory by getting rid of extra fields that are not necessary. For example,
declarations don't need a declaration pointer, a list of variables, or a
compile unit.

Ideally the new DISubprogramDecl would be a subclass of DIType instead of
DIScope.
<a href="http://www.llvm.org/docs/doxygen/html/classllvm_1_1DIScope__inherit__graph.png">http://www.llvm.org/docs/doxygen/html/classllvm_1_1DIScope__inherit__graph.png</a></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>