summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar stefanheule <unknown>2012-03-08 02:35:56 -0800
committerGravatar stefanheule <unknown>2012-03-08 02:35:56 -0800
commit589992fa582a62c7fe9e6665ff538d29015c0fc7 (patch)
treefe68cda1d46087f65ae4587ffe6cce6dad552d91
parent336eea5a645941e0e183b27706693772eb46f16e (diff)
Chalice: Add additional assumption about "held" field for "holds(o)" construction.
-rw-r--r--Chalice/src/main/scala/Translator.scala6
1 files changed, 4 insertions, 2 deletions
diff --git a/Chalice/src/main/scala/Translator.scala b/Chalice/src/main/scala/Translator.scala
index cb77d30f..422120d4 100644
--- a/Chalice/src/main/scala/Translator.scala
+++ b/Chalice/src/main/scala/Translator.scala
@@ -1737,8 +1737,9 @@ class ExpressionTranslator(val globals: Globals, preGlobals: Globals, val fpi: F
case _:PermissionExpr => throw new InternalErrorException("permission expression unexpected here: " + e.pos)
case _:Credit => throw new InternalErrorException("credit expression unexpected here")
case Holds(e) =>
- (0 < Heap.select(trrecursive(e), "held")) &&
- !Heap.select(trrecursive(e), "rdheld")
+ var ee = trrecursive(e)
+ (0 < Heap.select(ee, "held")) &&
+ !Heap.select(ee, "rdheld")
case RdHolds(e) =>
Heap.select(trrecursive(e), "rdheld")
case a: Assigned =>
@@ -2018,6 +2019,7 @@ class ExpressionTranslator(val globals: Globals, preGlobals: Globals, val fpi: F
new Boogie.MapSelect(ih, trE, "held")) ::
bassume(0 < new Boogie.MapSelect(ih, trE, "held")) ::
bassume(! new Boogie.MapSelect(ih, trE, "rdheld")) ::
+ bassume(new Boogie.MapSelect(ih, trE, "mu") !=@ bLockBottom) ::
bassume(wf(Heap, Mask, SecMask)) ::
bassume(AreGoodMasks(Mask, SecMask)) ::
bassume(IsGoodState(heapFragment(new Boogie.MapSelect(ih, trE, "held")))) ::