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

Richard Smith via cfe-dev cfe-dev at lists.llvm.org
Wed Apr 27 14:08:47 PDT 2016


On Wed, Apr 27, 2016 at 1:47 PM, Kris Rasmussen via cfe-dev <
cfe-dev at lists.llvm.org> wrote:

> I learned that the issue here is that ```BarInt``` is an incomplete type
> because no on has looked at its members. Is there a way to force the
> instantiation at parse/AST traversal time even if it isn't instantiated by
> the code being parsed directly?
>

You could change Clang to do that, but it would be likely to reject a lot
of valid, real code if you did. If your tool has access to the Sema object,
you can use RequireCompleteType to try to complete the definitions of the
classes you need.


> Thanks,
> Kris
>
> On Wed, Apr 27, 2016 at 9:29 AM, Kris Rasmussen <
> kristopher.rasmussen at gmail.com> wrote:
>
>> Hi,
>>
>> 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 {
>>   public:
>>     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.
>>
>> Thanks,
>> Kris
>>
>
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20160427/f3d5d77b/attachment.html>


More information about the cfe-dev mailing list