From d3c778854c2dc792a2dfbd9c5b05d667d18fb4c4 Mon Sep 17 00:00:00 2001 From: qunyanm Date: Wed, 4 Nov 2015 16:27:42 -0800 Subject: Fix issue 104. Use ResolvedExpression to compute subexpressions for DatatypeUpdateExpr if ResovedExpression is not null. --- Source/Dafny/DafnyAst.cs | 12 +++++++++--- Test/dafny4/Bug104.dfy | 12 ++++++++++++ Test/dafny4/Bug104.dfy.expect | 3 +++ 3 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 Test/dafny4/Bug104.dfy create mode 100644 Test/dafny4/Bug104.dfy.expect diff --git a/Source/Dafny/DafnyAst.cs b/Source/Dafny/DafnyAst.cs index 16b29c2b..fdbd484e 100644 --- a/Source/Dafny/DafnyAst.cs +++ b/Source/Dafny/DafnyAst.cs @@ -7800,9 +7800,15 @@ namespace Microsoft.Dafny { public override IEnumerable SubExpressions { get { - yield return Root; - foreach (var update in Updates) { - yield return update.Item3; + if (ResolvedExpression == null) { + yield return Root; + foreach (var update in Updates) { + yield return update.Item3; + } + } else { + foreach (var e in ResolvedExpression.SubExpressions) { + yield return e; + } } } } diff --git a/Test/dafny4/Bug104.dfy b/Test/dafny4/Bug104.dfy new file mode 100644 index 00000000..ffabbb92 --- /dev/null +++ b/Test/dafny4/Bug104.dfy @@ -0,0 +1,12 @@ +// RUN: %dafny /compile:0 "%s" > "%t" +// RUN: %diff "%s.expect" "%t" + +datatype PartRealPartGhost = PartRealPartGhost(x:int, ghost y:int) + +method UpdateField() +{ + var v := PartRealPartGhost(3, 4); + ghost var g := 5; + v := v[y := g]; + v := v.(y := g); +} \ No newline at end of file diff --git a/Test/dafny4/Bug104.dfy.expect b/Test/dafny4/Bug104.dfy.expect new file mode 100644 index 00000000..1cc43cbf --- /dev/null +++ b/Test/dafny4/Bug104.dfy.expect @@ -0,0 +1,3 @@ +Bug104.dfy(10,7): Warning: datatype update syntax D[f := E] is deprecated; the new syntax is D.(f := E) + +Dafny program verifier finished with 2 verified, 0 errors -- cgit v1.2.3