diff --git a/Source/Core/AST/AbsyType.cs b/Source/Core/AST/AbsyType.cs index 335fb48ff..6a03131c7 100644 --- a/Source/Core/AST/AbsyType.cs +++ b/Source/Core/AST/AbsyType.cs @@ -1679,7 +1679,7 @@ public override Type ResolveType(ResolutionContext rc) // otherwise: this name is not declared anywhere rc.Error(this, "undeclared type: {0}", Name); - return this; + return Type.Bool; // resolve to "bool" type so that type resolution can continue safely } private List ResolveArguments(ResolutionContext rc) diff --git a/Test/civl/large-samples/shared-vector.bpl b/Test/civl/large-samples/shared-vector.bpl index aae697472..019f7851b 100644 --- a/Test/civl/large-samples/shared-vector.bpl +++ b/Test/civl/large-samples/shared-vector.bpl @@ -38,6 +38,7 @@ modifies IntArrayPool; } yield procedure {:layer 2} IntArray_Alloc(v: Vec int) returns (loc_iv: Loc) refines Atomic_IntArray_Alloc; +ensures call Yield(loc_iv); preserves call IntArrayDom(); { var {:linear} one_loc_mutex: One Loc; @@ -56,7 +57,7 @@ preserves call IntArrayDom(); call {:layer 2} OldMutexPool := Copy(MutexPool); i := 0; while (i < Vec_Len(v)) - invariant {:layer 2} 0 <= i; + invariant {:layer 2} 0 <= i && i <= Vec_Len(v); invariant {:layer 2} mutexes->dom == values->dom; invariant {:layer 2} mutexes->dom->val == (lambda j: int :: 0 <= j && j < i); invariant {:layer 2} (forall j: int:: 0 <= j && j < i ==> Map_Contains(MutexPool, Map_At(mutexes, j)->val)); diff --git a/Test/civl/large-samples/treiber-stack.bpl b/Test/civl/large-samples/treiber-stack.bpl index 5c67d70ae..0f82bad60 100644 --- a/Test/civl/large-samples/treiber-stack.bpl +++ b/Test/civl/large-samples/treiber-stack.bpl @@ -70,6 +70,8 @@ modifies TreiberPool; } yield procedure {:layer 4} Alloc() returns (loc_t: Loc) refines AtomicAlloc; +ensures call TopInStack(loc_t); +ensures call ReachInStack(loc_t); preserves call StackDom(); { var top: Option LocTreiberNode;