daniel-petrovic wrote:

> I don't have strong opinions about the approach taken here, but it seems like 
> we're punishing the simple case of a single level of templates in order to 
> better diagnose more pathological cases.

Just a small brain-storming:

As I understand, the current StackHandler.runWithSufficientStackSpace() does 
not  differentiate the recursion level  at the moment : the same checks are 
done for 1 as well as for 1000 levels of recursion.
What if the StackHandler would track the recursion level and do something like:
```
if (recursion_level < threshold_level) [[ likely ]] {
  F(); // just recurse normaly
} else {
  // the current logic
  // if (isStackNearlyExhausted()) [[ unlikely ]]  {...}
}
```
What we want to achieve with this:
 
- up to some small number of recursions just recurse normally ( by assuming we 
will never exceed stack limit on this recursion level)
- for deeper recursions start doing more checks.

Some rough idea: https://godbolt.org/z/ovvMY46zT

Of course, measurements would have to confirm  benefits of such an approach, if 
any at all.

 But for the case it's positive, it would cover all scenarios: cheap for small 
recursion debts and robust for fuzzing.

Just an idea.

https://github.com/llvm/llvm-project/pull/224393
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to