Skip to content

Circular functional dependencies cause loop in typechecker

In the attached file, a dictionary (Id A B) is rewritten with two functional dependencies (A -> B, B -> A) and two errors are added in our constraint bag (rightfully so), but the new workitem is symmetric (Id B A), goes back in the worklist and in the new iteration of the solver we have exactly the same process repeated.

This is a solveInteractWithDepth loop, not a solve_wanteds loop. I think the right thing to do is in doTopReact: (1) first try to apply functional dependencies, (2) then check if an instance matches, and (3) do a ContinueWith or a Stop but never throw the workitem back in the worklist as happens now. I have to discuss this with Simon.

Trac metadata
Trac field Value
Version 7.0.3
Type Bug
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component Compiler (Type checker)
Test case
Differential revisions
BlockedBy
Related
Blocking
CC simonpj@microsoft.com, stevez@cis.upenn.edu
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information