[cfe-dev] TemplateSpecializationType bug?

Pouet fourtytwo via cfe-dev cfe-dev at lists.llvm.org
Thu Aug 17 09:47:05 PDT 2017


Hi,

I'm quite new to this list, I guess this is the right place to post; if
not, please, let me know.

I'm using clang tooling to get the clang AST from C++11 code. I'm having
trouble with a TemplateSpecializationType in the following source code :
------------------------------------------------------------
-------------------
template<typename _T> struct S;
template<template<_U> class _C, typename _T> struct S<_C<_T>> {};
------------------------------------------------------------
-------------------

The second declaration is a template specialization of the first
declaration which template argument is an instantiation of a template
template parameter (1st template parameter) with the second template
parameter.
Clang AST shows the template argument as being the second template
parameter in the following dump ("clang -Xclang -ast-dump -fsyntax-only
..."), which seems incorrect:
------------------------------------------------------------
-------------------
... (ClassTemplateDecl for 1st declaration of struct S)
`-ClassTemplatePartialSpecializationDecl 0x... <line:..., col:...> ...
struct S definition
  |-TemplateArgument type '<type-parameter-0-1>'
  |-TemplateTemplateParmDecl 0x... <line:..., col:...> ... _C
  | `-TemplateTypeParmDecl 0x... <line:..., col:...> ... typename _U
  |-TemplateTypeParmDecl 0x... <line:..., col:...> ...referenced typename _T
  `-CXXRecordDecl 0x... <line:..., col:...> ... implicit struct S
------------------------------------------------------------
-------------------

On the other hand, in the AST clang builds, it appears that
TemplateArgument type '<type-parameter-0-1>' has type
TemplateSpecializationType whose TemplateName (getTemplateName()) is a
TemplateDecl (getKind() and getAsTemplateDecl()). The TemplateDecl is a
bogus TemplateTemplateParmDecl which has no name, whereas it should be the
"_C" TemplateTemplateParmDecl.

Is this a bug?
Has it been reported?
Should I report it myself? (How should I do?)
I could not find any information. Please let me know.
Note that the source code seems to compile ok (clang does not crash).
Regards
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20170817/d20810c4/attachment.html>


More information about the cfe-dev mailing list