[cfe-dev] ClassTemplateSpecializationDecl hasDefinition() == false, how to make it true?

Kris Rasmussen via cfe-dev cfe-dev at lists.llvm.org
Wed Apr 27 09:29:18 PDT 2016


Is anyone able to help me figure out how to ensure
ClassTemplateSpecializationDecls always have definitions so that I can
properly inspect there members with the appropriate type substitutions? I
am visiting template instantiations via
```shouldVisitTemplateInstantiations() { return true; }```, but I'm finding
that they do not always have a definition attached to them.

I'm porting a code generation tool from the python clang bindings to C++
using ClangTool and RecursiveASTVisitor. My tool generates lua bindings
from C++ source code. It needs to generate bindings for template
instantiations, and requires knowledge of the template arguments in order
to do so.

This code will result in a ClassTemplateSpecializationDecl that is missing
its definition (hasDefinition() == false):

  template<typename T>
  class Bar {
    T m_t;
  using BarInt = Bar<int>;

Whereas this code will result in hasDefinition() == true as I want:
  class Foo : public Bar<int> {};

Thanks for any help you can provide! I've searched the net for answers, and
also browsed the clang source code, but I'll admit that I haven't dug
deeply enough yet to figure out exactly which code path is triggering the
instantiations that are missing definitions yet.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20160427/b155f751/attachment.html>

More information about the cfe-dev mailing list