[cfe-dev] Using clang-tool to Exact type names in template specification arguments

David Blaikie via cfe-dev cfe-dev at lists.llvm.org
Wed Aug 12 21:30:28 PDT 2020


Once you have the FunctionDecl you've gone too far and any type sugar
is lost, I believe. (because func<vectors32_t> is the same function as
func<unsigned int[32]> or any other typedef/alias/etc of that type
parameter, etc)

I think you'd have to be able to see the call to the function, and go
from there to find the type as written.

On Wed, Aug 12, 2020 at 8:14 PM Oliver Zhang via cfe-dev
<cfe-dev at lists.llvm.org> wrote:
>
> Hi,
>
> I'm using clang-tool to extract type names in template arguments. For example,
>
>> typedef unsigned int vectors32_t[32];
>> template <typename T>
>> func(T *const vec) {
>>     ...
>> }
>> int main() {
>>     ...
>>     func<vector32_t>(...);
>>     ...
>> }
>
>
> I'd like to get the type name "vector32_t" from func's template argument. So I use clang::FunctionDecl::getTemplateSpecializationArgs() to get func's template argument list, extract the argument from the list, and then try to get the type name for the argument by using clang::TemplateArgument::getAsType().getAsString(). However, "unsigned int [32]" is returned rather than "vector32_t".
>
> Any thoughts on how I can extract the type alias name "vector32_t" in my above example?
>
> Thanks,
> Oliver
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev


More information about the cfe-dev mailing list