[cfe-dev] clang_visitChildren skips template parameters of non-class type
Jacob Carlborg
doob at me.com
Thu Jul 25 00:35:12 PDT 2013
On 2013-07-24 10:45, Matthieu Nottale wrote:
>
> Hi.
>
> With llvm/clang trunk, I'm having an issue when visiting template type
> instanciation using the C API clang_visitChildren: I only see template
> parameters of class type, not of basic type.
>
> With this code:
>
>
>
> template<typename A, typename B> struct TemplB{};
> class Bar {};
>
> int boz(TemplB<char, Bar>);
> int boz2(TemplB<Bar, char>);
>
>
>
>
> I get the following with visitChildren (using a visitor that dump
> kindSpelling, spelling and recurse with indent:
>
> TypedefDecl __builtin_va_list
> ClassTemplate TemplB
> TemplateTypeParameter A
> TemplateTypeParameter B
> ClassDecl Bar
> FunctionDecl boz
> ParmDecl
> TemplateRef TemplB
> TypeRef class Bar
> FunctionDecl boz2
> ParmDecl
> TemplateRef TemplB
> TypeRef class Bar
>
>
> As you can see there is a node for the Bar template parameter, but none
> for the char.
>
> I can access the CXType from the ParmDecl node, but I see no CXType API
> that could get me the template parameters.
>
> clang_getCursorReferenced of the ParmDecl node is itself.
>
> clang_getTypeDeclaration of the type given by clang_getCursorType is a
> StructDecl node with no children (with or without a clang_getCanonicalType)
>
> Is this a bug?
>
> Is there a way I overlooked to access the missing template parameter?
I'm not sure if this is the problem, but as far as I can recall you
cannot get the spelling of a built in type. I just created a function
with a switch-statement that returns the spelling for built in types.
--
/Jacob Carlborg
More information about the cfe-dev
mailing list