-
Notifications
You must be signed in to change notification settings - Fork 154
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Verilog generation runs indefinitely #2834
Comments
The compilation gets stuck in an infinite loop when calling normalizeTopLvlBndr on Click here to see the term that is bound to
|
Moving the local definitions to the top level also seems to solve the issue, as the following terminates as expected type Size = 2
topEntity :: Bit
topEntity = head lookupTable
lookupTable :: Vec Size Bit
lookupTable = smap fill $ repeat ()
fill :: forall n. SNat n -> () -> Bit
fill n@(SNat :: SNat n) _ = case compareSNat n (SNat @0) of
SNatLE -> low
SNatGT -> case compareSNat n (SNat @Size) of
SNatLE -> at @(n - 1) @(Size - n) SNat lookupTable
SNatGT -> error "impossible" |
Adding a |
The problem again seems to start in the same place as #2831 (comment) Where
because the subject of the case expression is not a data constructor nor a primitive. As a result, the Clash compiler will evaluate both the subject and the alternatives in "parallel". This then causes the |
Clash seems to diverge on the following reproducer (if being called with the
--verilog
flag).The text was updated successfully, but these errors were encountered: