[LLVMdev] Any way how to instantiate templates even when it is not necessary for the compilation?

Nathan Jeffords blunted2night at gmail.com
Sat May 5 09:11:49 PDT 2012


How would clang know what type to instantiate it with? Would it make sense
to replace T with object, or create a CSharp generic instead in you
translation process?

On Fri, May 4, 2012 at 8:43 AM, <natris at centrum.cz> wrote:

> Hello,
> I am working on a tool which takes c++ header files and based on
> interfaces defined in them generates csharp classes and glue layer for
> interop. For analyzing the c++ code I am currently using clang, which
> parses the headers and writes output into xml via -ast-print-xml (yes, this
> unfortunately means that it is a very old version of clang). I then use
> these xml files to generate the csharp code. Since the header files are
> written in consistent style, it works pretty well.
>
> But new version of headers contains templates. Nothing fancy, usually
> stuff like:
> template
> IMyEnumerator {
> virtual HRESULT GetCurrent(T*item) = 0;
> };
> class IWhateverInterface {
> virtual IMyEnumerator & GetEnumerator() = 0;
> };
> And here lies the problem - since the template IMyEnumerator does not have
> to be instantiated for clang to compile the headers, this Specialization is
> not instantiated and the XML does not contain full CXXRecord of the class.
> I however need to know the full structure because I need to generate the
> glue layer for the enumerator.
>
> It seems to me that this would be quite a common problem for similar tools
> and someone might have stumbled upon it already, and because of this I'd
> like to ask: is there any clean way how to force instantiation of templates
> that do not strictly have to be instantiated? Because if it isn't, this
> means that I will either have to somehow analyze the headers and generate
> code which forces the instantiation (which is not really trivial) or try to
> hack the code somehow to force the instantiation (probably possible but
> certainly not pretty).
>
> Thank you,
> Ondrej
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20120505/eb6a7bec/attachment.html>


More information about the llvm-dev mailing list