You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Which, when called with r != 0 will recursively call itself with the same argument forever.
I tried to explore the tree in the online IDE, but am not familiar enough with the rules to figure out why the second recursive call was allowed. Possibly an issue in SuSLik or Cyclist, I'm not sure.
The text was updated successfully, but these errors were encountered:
So I understand the issue a little better now. The spec for this function is essentially folding the predicate, but does not ensure any relationship between the predicate in the precondition and postcondition. A "fix" could be writing the spec as:
{ a0 < a1; [x, 3] ** x :-> v ** (x + 1) :-> 0 ** (x + 2) :-> r ** dll(r, a, s)<a0> }
void helper (loc r)
{ dll(x, b, {v} ++ s)<a1> }
Maybe such an ordering should automatically be applied to any predicates in pre/postconditions? I'm not sure if that would break things?
Given the following example (with
dll
defined as in the examples):When run with
-c 2
SuSLik outputs:Which, when called with
r != 0
will recursively call itself with the same argument forever.I tried to explore the tree in the online IDE, but am not familiar enough with the rules to figure out why the second recursive call was allowed. Possibly an issue in SuSLik or Cyclist, I'm not sure.
The text was updated successfully, but these errors were encountered: