erichkeane added a comment.

In D133052#3892650 <https://reviews.llvm.org/D133052#3892650>, @erichkeane 
wrote:

> In D133052#3891768 <https://reviews.llvm.org/D133052#3891768>, @usaxena95 
> wrote:
>
>> My suggestion would be to properly handle cycles in 
>> `CheckConstraintSatisfaction`. This problem goes beyond cycles introduced by 
>> conversion. See #53213 <https://github.com/llvm/llvm-project/issues/53213>, 
>> #44304 <https://github.com/llvm/llvm-project/issues/44304> and #45736 
>> <https://github.com/llvm/llvm-project/issues/45736> 
>> https://godbolt.org/z/hzM6f3qnW. Most of the bugs are due to an assertion 
>> failure while inserting entry into SatisfactionCache.
>>
>> IIUC, failing on cycles would solve all of these issues.
>>
>> My suggestion would be detect cycles in `CheckConstraintSatisfaction`. We 
>> already have a way to check "whether we have seen this evaluation before ?" 
>> in `SatisfactionCache` using `FoldingSet` for `ConstraintSatisfaction`. We 
>> could use a similar set to track the constraints being evaluated. Stop 
>> evaluation when we detect a cycle. Attach appropriate details to the 
>> Satisfaction and fail the constraint.
>
> We cant use the SatisfactionCache 'just yet', we have to have a different 
> stack, but we should fail there. We should NOT fail the constraint, it needs 
> to be a hard-error based on discussion on the reflector. I'm intending to 
> commit a patch to that effect today/monday.
>
> In D133052#3892527 <https://reviews.llvm.org/D133052#3892527>, @usaxena95 
> wrote:
>
>> Coincidentally 2 of the bugs were just fixed in b9a77b56d8 
>> <https://github.com/llvm/llvm-project/commit/b9a77b56d83ac788beb7b1743e510ef8534354ca>.
>>  I do not completely agree with the approach there though. We should be 
>> fixing the root cause instead of circumventing the assert in `InsertNode` by 
>> insert-if-not-present. This is why we have 44304 and 50891 still persistent.
>
> So the problem that I solved was forming a recovery expression during 
> evaluation, this wasn't a 'circumventing' the assert, this was making sure we 
> dont try to double-cache a legitimate recursive-lookup.

Interestingly, just doing it in CheckConstraintSatisfaction 
(~SemaConcept.cpp:385) doesn't seem right, we end up catching the failure 'too 
early', since a FunctionDecl itself goes through there and has its constraints 
checked.  I suspect we actually need to check at the constraint-expr level 
instead (so down a few levels).


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D133052

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

Reply via email to