Skip to content

Commit 0c1d0e5

Browse files
committed
fixed old issue
1 parent 80470f6 commit 0c1d0e5

File tree

6 files changed

+14
-12
lines changed

6 files changed

+14
-12
lines changed

Source/Core/AST/Absy.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2721,8 +2721,7 @@ void TypecheckSpec(List<int> layers, Action<TypecheckingContext> f)
27212721
{
27222722
var oldGlobalAccessOnlyInOld = tc.GlobalAccessOnlyInOld;
27232723
if (this is YieldProcedureDecl yieldProcedureDecl &&
2724-
yieldProcedureDecl.HasMoverType &&
2725-
layers.Any(layer => layer < yieldProcedureDecl.Layer))
2724+
(!yieldProcedureDecl.HasMoverType || layers.Any(layer => layer < yieldProcedureDecl.Layer)))
27262725
{
27272726
tc.GlobalAccessOnlyInOld = true;
27282727
}
@@ -3317,12 +3316,13 @@ public override void Typecheck(TypecheckingContext tc)
33173316

33183317
var oldProc = tc.Proc;
33193318
tc.Proc = this;
3320-
tc.GlobalAccessOnlyInOld = !HasMoverType;
33213319
base.Typecheck(tc);
3322-
tc.GlobalAccessOnlyInOld = false;
3320+
Debug.Assert(!tc.GlobalAccessOnlyInOld);
33233321
YieldRequires.ForEach(callCmd => callCmd.Typecheck(tc));
3324-
YieldEnsures.ForEach(callCmd => callCmd.Typecheck(tc));
3322+
tc.GlobalAccessOnlyInOld = true;
33253323
YieldPreserves.ForEach(callCmd => callCmd.Typecheck(tc));
3324+
YieldEnsures.ForEach(callCmd => callCmd.Typecheck(tc));
3325+
tc.GlobalAccessOnlyInOld = false;
33263326
Contract.Assert(tc.Proc == this);
33273327
tc.Proc = oldProc;
33283328
}

Source/Core/AST/Commands/CallCmd.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -590,19 +590,21 @@ public override void Typecheck(TypecheckingContext tc)
590590
}
591591

592592
// typecheck in-parameters
593+
var oldGlobalAccessOnlyInOld = tc.GlobalAccessOnlyInOld;
594+
tc.GlobalAccessOnlyInOld = oldGlobalAccessOnlyInOld || tc.Proc is YieldProcedureDecl && Proc is YieldProcedureDecl;
593595
for (int i = 0; i < Ins.Count; i++)
594596
{
595597
var e = Ins[i];
596598
if (e != null)
597599
{
598-
tc.GlobalAccessOnlyInOld = tc.Proc is YieldProcedureDecl && Proc is YieldProcedureDecl;
599600
tc.ExpectedLayerRange = expectedLayerRanges?[i];
600601
e.Typecheck(tc);
601-
tc.GlobalAccessOnlyInOld = false;
602602
tc.ExpectedLayerRange = null;
603603
}
604604
}
605+
tc.GlobalAccessOnlyInOld = oldGlobalAccessOnlyInOld;
605606

607+
// typecheck out-parameters
606608
for (int i = 0; i < Outs.Count; i++)
607609
{
608610
var e = Outs[i];

Test/civl/regression-tests/yield-pre-post-mover.bpl.expect

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@ yield-pre-post-mover.bpl(15,23): Error: global variable must be accessed inside
55
yield-pre-post-mover.bpl(13,19): Error: global variable must be accessed inside old expression: g
66
yield-pre-post-mover.bpl(16,21): Error: global variable must be accessed inside old expression: g
77
yield-pre-post-mover.bpl(23,9): Error: layer of callee must be less than layer of caller
8-
yield-pre-post-mover.bpl(24,8): Error: layer of callee must be less than layer of caller
98
yield-pre-post-mover.bpl(25,10): Error: layer of callee must be less than layer of caller
9+
yield-pre-post-mover.bpl(24,8): Error: layer of callee must be less than layer of caller
1010
9 type checking errors detected in yield-pre-post-mover.bpl

Test/civl/regression-tests/yield-requires-ensures-errors-2.bpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ preserves x >= n;
88

99
yield procedure {:layer 1} p0(n: int)
1010
requires call yield_x(n == 4);
11-
ensures call yield_x(n == 8);
1211
preserves call yield_x(n == 2);
12+
ensures call yield_x(n == 8);
1313
{
1414
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
yield-requires-ensures-errors-2.bpl(10,24): Error: invalid type for argument 0 in call to yield_x: bool (expected: int)
2-
yield-requires-ensures-errors-2.bpl(11,23): Error: invalid type for argument 0 in call to yield_x: bool (expected: int)
3-
yield-requires-ensures-errors-2.bpl(12,25): Error: invalid type for argument 0 in call to yield_x: bool (expected: int)
2+
yield-requires-ensures-errors-2.bpl(11,25): Error: invalid type for argument 0 in call to yield_x: bool (expected: int)
3+
yield-requires-ensures-errors-2.bpl(12,23): Error: invalid type for argument 0 in call to yield_x: bool (expected: int)
44
3 type checking errors detected in yield-requires-ensures-errors-2.bpl
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
yield-requires-ensures-errors-5.bpl(10,9): Error: layer of callee must be less than layer of caller
2-
yield-requires-ensures-errors-5.bpl(12,8): Error: layer of callee must be less than layer of caller
32
yield-requires-ensures-errors-5.bpl(11,10): Error: layer of callee must be less than layer of caller
3+
yield-requires-ensures-errors-5.bpl(12,8): Error: layer of callee must be less than layer of caller
44
3 type checking errors detected in yield-requires-ensures-errors-5.bpl

0 commit comments

Comments
 (0)