ChuanqiXu9 wrote:

> > I tried applying this patch to ROOT/Cling and it fails to build because 
> > something is of the opinion that `std::is_integral<int>::value` is not 
> > true. I don't have time right now to investigate further, but since this is 
> > the only change I did it is highly likely that it's caused by this...
> 
> In that case we need to understand how this patch differs from the one I 
> pasted in phabricator since the one there works for that case I assume.

I had a guess. `{ClassTemplateDecl, VarTemplateDecl, 
FunctionTemplateDecl}::specializations()` will iterate all the specializations. 
However, after this patch, there are maybe some specializations not loaded at 
the time of invocation. Then during the process of iterating 
`specializations()`, it may require to complete the redecl chain to trigger the 
process of loading specializations 
(https://github.com/llvm/llvm-project/blob/2e30e31e1e80184d9b2c8aa98f617b4d1cb56d55/clang/include/clang/AST/DeclTemplate.h#L779-L781).
 Then boom!

To fix this, maybe we need to add a `loadAllExternalSpecializations(Decl*)` 
method to be called before `{ClassTemplateDecl, VarTemplateDecl, 
FunctionTemplateDecl}::specializations()`. But I am not sure if it is really 
the case and I feel better if we can add new things with the corresponding test.

https://github.com/llvm/llvm-project/pull/76774
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to