hokein added a subscriber: rsmith.
hokein added a comment.

> Is this https://github.com/clangd/clangd/issues/554 ? :-)

Yeah, the github issue exposes multiple bugs, this is part of the fix.

The AST of `VarTemplateSpeicalizationDecl` is a bit unusual, given the follow 
code,

  template <typename> bool X = true;
  bool Z = X<int>;



  TranslationUnitDecl 0x8a2ec28 <<invalid sloc>> <invalid sloc>
  |-VarTemplateDecl 0x8a6faf8 </tmp/t.cpp:1:1, col:30> col:26 X
  | |-TemplateTypeParmDecl 0x8a6f9c0 <col:11> col:19 typename depth 0 index 0
  | |-VarDecl 0x8a6fa90 <col:21, col:30> col:26 X 'bool' cinit
  | | `-CXXBoolLiteralExpr 0x8a6fb98 <col:30> 'bool' true
  | `-VarTemplateSpecializationDecl 0x8a6fd08 <col:21, col:30> col:26 used X 
'bool' cinit
  |   |-TemplateArgument type 'int'
  |   | `-BuiltinType 0x8a2ed20 'int'
  |   `-CXXBoolLiteralExpr 0x8a6fb98 <col:30> 'bool' true
  |-VarDecl 0x8a6fbb8 <line:2:1, col:15> col:6 Z 'bool' cinit
  | `-ImplicitCastExpr 0x8a6ff28 <col:10, col:15> 'bool' <LValueToRValue>
  |   `-DeclRefExpr 0x8a6fed8 <col:10, col:15> 'bool' lvalue 
VarTemplateSpecialization 0x8a6fd08 'X' 'bool'
  `-VarTemplateSpecializationDecl 0x8a6fd08 <line:1:21, col:30> col:26 used X 
'bool' cinit   <---- here
    |-TemplateArgument type 'int'
    | `-BuiltinType 0x8a2ed20 'int'
    `-CXXBoolLiteralExpr 0x8a6fb98 <col:30> 'bool' true

Note that the implicitly-instantiated `VarTemplateSpecializationDecl` is one of 
`TranslationUnitDecl::decls()`, this is different than function/class templates 
-- for function/class templates, only *explicit* template specializations will 
be in the `TranslationUnitDecl::decls()`

Related code is at 
https://github.com/llvm/llvm-project/blob/master/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp#L5015.
 @rsmith do you think this is expected? or we should fix that? like making it 
align with function/class templates?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D89098/new/

https://reviews.llvm.org/D89098

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to