hokein wrote:

> But my question is: how does the missing call to `MarkAppeared()` leads to 
> the out-of-bounds access? Do we allocate a vector that has the size of 
> `max(Index)` and expect that we have previously marked all template 
> parameters mentioned in the type?

Yes, almost. The template parameter list of the synthesized deduction guide 
consists of two parts:
1) the template parameters of the alias template that appeared in the 
deductions;
2)  the template parameters of the underlying template (RHS of the alias) that 
were not deduced;

MarkAppeared() performs the step 1, the crash is that we don't track the 
template template type parameters, thus we miss this kind of template parameter 
in the list, and we have a reference to it in the synthesized deduction guide 
declaration which could lead to an out-of-bounds access (for this particular 
case, the template parameter list is empty).

> I have tried to turn your example into valid code and it [also 
> crashed](https://gcc.godbolt.org/z/38c3dKG7b). Could we add it to the tests?

Great, thanks! Added.

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

Reply via email to