<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 --- - TypedefDecl pointer from TypedefType can point to uninstantiated template typedef"
   href="http://llvm.org/bugs/show_bug.cgi?id=20845">20845</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>TypedefDecl pointer from TypedefType can point to uninstantiated template typedef
          </td>
        </tr>

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

        <tr>
          <th>Version</th>
          <td>trunk
          </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>-New Bugs
          </td>
        </tr>

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

        <tr>
          <th>Reporter</th>
          <td>schindler@virtamed.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvmbugs@cs.uiuc.edu
          </td>
        </tr>

        <tr>
          <th>Classification</th>
          <td>Unclassified
          </td>
        </tr></table>
      <p>
        <div>
        <pre>Consider the following code: 


template<typename T> class Test
{
        typedef int size_type;

        void function(size_type value) {}
};

Test<int> instance;

When traversing the ast, I look at the CXXMethodDecl for
Test<int>::function(...), I do the following: 

auto param= decl->parameters()[0];
auto paramtype = param->getType();
TypedefType* td = paramtype.getTypePtr()->getAs<TypedefType>();
TypedefDecl* tddecl = td->getDecl();

The problem is that tddecl points to the TypedefDecl within the context of
ClassTemplateTecl and not the specific TypedefDecl of the
ClasstemplateSpecializationDecl. In case the typedef is dependent as well, this
problem does not occur. 

This is a problem because I have a clang-based tool where the context of the
TypedefDecl is important.</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>