aaron.ballman added a comment.

In D125802#3552047 <https://reviews.llvm.org/D125802#3552047>, @browneee wrote:

> It looks like the leak is rooted at the allocation here:
> https://github.com/llvm/llvm-project/blob/1a155ee7de3b62a2fabee86fb470a1554fadc54d/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp#L3857
>
> The VarTemplateSpecializationDecl is allocated using placement new which uses 
> the AST structure for ownership: 
> https://github.com/llvm/llvm-project/blob/1a155ee7de3b62a2fabee86fb470a1554fadc54d/clang/lib/AST/DeclBase.cpp#L99
>
> The problem is the TemplateArgumentListInfo inside 
> https://github.com/llvm/llvm-project/blob/1a155ee7de3b62a2fabee86fb470a1554fadc54d/clang/include/clang/AST/DeclTemplate.h#L2721
> This object contains a vector which does not use placement new: 
> https://github.com/llvm/llvm-project/blob/1a155ee7de3b62a2fabee86fb470a1554fadc54d/clang/include/clang/AST/TemplateBase.h#L564
>
> Apparently ASTTemplateArgumentListInfo 
> <https://github.com/llvm/llvm-project/blob/1a155ee7de3b62a2fabee86fb470a1554fadc54d/clang/include/clang/AST/TemplateBase.h#L612>
>  should be used instead 
> https://github.com/llvm/llvm-project/blob/1a155ee7de3b62a2fabee86fb470a1554fadc54d/clang/include/clang/AST/TemplateBase.h#L575

Wow, thank you for the fantastic sleuthing! It seems that declaration is nine 
years old, so I'm surprised the leak is only being discovered now and as part 
of this particular test case.

I don't have a particularly easy way to test this locally at the moment -- do 
you know if switching `VarTemplateSpecializationDecl::TemplateArgsInfo` to be a 
`ASTTemplateArgumentListInfo` solves the issue for you?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D125802

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

Reply via email to