<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="/rss.xsl"?><rss version="2.0"><channel><title>VCC Issue Tracker Rss Feed</title><link>http://vcc.codeplex.com/WorkItem/List.aspx</link><description>VCC Issue Tracker Rss Description</description><item><title>Created Issue: objects should be able to own open objects [6647]</title><link>http://vcc.codeplex.com/workitem/6647</link><description>Consider the problem of transferring ownership of an open object from one thread to another. Currently, there is no decent way to do this, because the usual method &amp;#40;transferring ownership through an intermediate object&amp;#41; requires the transferred object to be closed. &lt;br /&gt;&lt;br /&gt;This is yet another argument that we should get rid of the requirement that objects owned by non-threads should be closed.   &lt;br /&gt;</description><author>erniecohen</author><pubDate>Sun, 24 Mar 2013 17:28:58 GMT</pubDate><guid isPermaLink="false">Created Issue: objects should be able to own open objects [6647] 20130324052858P</guid></item><item><title>Commented Issue: Problem with installation in Visual Studio [6646]</title><link>http://vcc.codeplex.com/workitem/6646</link><description>I have installed this release and I am getting the following error &amp;#34;Exception has been thrown by the target of an invocation&amp;#34; when I run VS 2010 or VS 2012. I have uninstalled VCC and the problem is gone. Is it possible to workaround this problem somehow&amp;#63; Should I try an earlier release&amp;#63; I am running Win 7.&lt;br /&gt;Comments: I am talking about the latest release&amp;#58; v2.3.10214.0</description><author>AntonDergunov</author><pubDate>Tue, 19 Mar 2013 15:01:31 GMT</pubDate><guid isPermaLink="false">Commented Issue: Problem with installation in Visual Studio [6646] 20130319030131P</guid></item><item><title>Created Issue: Problem with installation in Visual Studio [6646]</title><link>http://vcc.codeplex.com/workitem/6646</link><description>I have installed this release and I am getting the following error &amp;#34;Exception has been thrown by the target of an invocation&amp;#34; when I run VS 2010 or VS 2012. I have uninstalled VCC and the problem is gone. Is it possible to workaround this problem somehow&amp;#63; Should I try an earlier release&amp;#63; I am running Win 7.&lt;br /&gt;</description><author>AntonDergunov</author><pubDate>Tue, 19 Mar 2013 15:01:03 GMT</pubDate><guid isPermaLink="false">Created Issue: Problem with installation in Visual Studio [6646] 20130319030103P</guid></item><item><title>Edited Issue: unwrapping object listed in atomic clause gets error [6645]</title><link>http://vcc.codeplex.com/workitem/6645</link><description>The following fails with the error&amp;#58;&lt;br /&gt;&amp;#34;assertion &amp;#39;s is closed &amp;#40;for atomic&amp;#40;...&amp;#41;&amp;#41; did not verify.&amp;#34;&lt;br /&gt;It gets the same error if s is made _&amp;#40;read_only&amp;#41;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  _&amp;#40;typedef struct S &amp;#123;&amp;#125; S&amp;#41;&lt;br /&gt;  void test&amp;#40;_&amp;#40;ghost S &amp;#94;s&amp;#41;&amp;#41; &lt;br /&gt;    _&amp;#40;requires &amp;#92;wrapped&amp;#40;s&amp;#41;&amp;#41;&lt;br /&gt;    _&amp;#40;writes s&amp;#41;&lt;br /&gt;  &amp;#123;&lt;br /&gt;    _&amp;#40;atomic s&amp;#41; &amp;#123;&lt;br /&gt;      _&amp;#40;unwrap s&amp;#41;&lt;br /&gt;      _&amp;#40;begin_update&amp;#41;&lt;br /&gt;    &amp;#125;&lt;br /&gt;  &amp;#125;&lt;br /&gt;</description><author>erniecohen</author><pubDate>Mon, 25 Feb 2013 01:50:43 GMT</pubDate><guid isPermaLink="false">Edited Issue: unwrapping object listed in atomic clause gets error [6645] 20130225015043A</guid></item><item><title>Created Issue: unwrapping object listed in atomic clause gets error [6645]</title><link>http://vcc.codeplex.com/workitem/6645</link><description>The following fails with the error&amp;#58;&lt;br /&gt;&amp;#34;assertion &amp;#39;s is closed &amp;#40;for atomic&amp;#40;...&amp;#41;&amp;#41; did not verify.&amp;#34;&lt;br /&gt;It gets the same error if s is made _&amp;#40;read_only&amp;#41;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;_&amp;#40;typedef struct S &amp;#123;&amp;#125; S&amp;#41;&lt;br /&gt;void test&amp;#40;_&amp;#40;ghost S &amp;#94;s&amp;#41;&amp;#41; &lt;br /&gt;&amp;#9;_&amp;#40;requires &amp;#92;wrapped&amp;#40;s&amp;#41;&amp;#41;&lt;br /&gt;&amp;#9;_&amp;#40;writes s&amp;#41;&lt;br /&gt;&amp;#123;&lt;br /&gt;&amp;#9;_&amp;#40;atomic s&amp;#41; &amp;#123;&lt;br /&gt;&amp;#9;&amp;#9;_&amp;#40;unwrap s&amp;#41;&lt;br /&gt;&amp;#9;&amp;#9;_&amp;#40;begin_update&amp;#41;&lt;br /&gt;&amp;#9;&amp;#125;&lt;br /&gt;&amp;#125;&lt;br /&gt;</description><author>erniecohen</author><pubDate>Mon, 25 Feb 2013 01:49:20 GMT</pubDate><guid isPermaLink="false">Created Issue: unwrapping object listed in atomic clause gets error [6645] 20130225014920A</guid></item><item><title>Created Issue: \mine() should allow \objset [6644]</title><link>http://vcc.codeplex.com/workitem/6644</link><description>currently, &amp;#92;mine can take a list of objects, but not an &amp;#92;objset.&lt;br /&gt;</description><author>erniecohen</author><pubDate>Mon, 11 Feb 2013 20:56:56 GMT</pubDate><guid isPermaLink="false">Created Issue: \mine() should allow \objset [6644] 20130211085656P</guid></item><item><title>Created Issue: triggering error when using meta fields in def functions [6643]</title><link>http://vcc.codeplex.com/workitem/6643</link><description>the following function definition gets the error&lt;br /&gt;&lt;br /&gt;&amp;#34;trigger must mention all quantified variables, but does not mention&amp;#58; Q&amp;#35;__vcc_state&amp;#36;1&amp;#94;3.42&amp;#35;tc1&amp;#35;344&amp;#34;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;_&amp;#40;def &amp;#92;bool closed&amp;#40;&amp;#92;object o&amp;#41; &amp;#123;&lt;br /&gt;&amp;#9;return o-&amp;#62;&amp;#92;closed&amp;#59;&lt;br /&gt;&amp;#125;&amp;#41;&lt;br /&gt;</description><author>erniecohen</author><pubDate>Tue, 05 Feb 2013 10:43:12 GMT</pubDate><guid isPermaLink="false">Created Issue: triggering error when using meta fields in def functions [6643] 20130205104312A</guid></item><item><title>Created Issue: \writable should be allowed in postconditions [6642]</title><link>http://vcc.codeplex.com/workitem/6642</link><description>consider a function with a contract that takes an object argument which it writes, and returns either that object or another, fresh object. In either case, the returned object will be writable for the caller, but currently the parser doesn&amp;#39;t allow this. We could strengthen the contract to make the returned object &amp;#92;fresh, but then we would have to actually write to y, which may involve its own drawbacks. &amp;#40;currently, we can hack around this by wrapping y in something and unwrapping, but that&amp;#39;s sort of gross&amp;#41;.&lt;br /&gt;</description><author>erniecohen</author><pubDate>Mon, 04 Feb 2013 18:41:10 GMT</pubDate><guid isPermaLink="false">Created Issue: \writable should be allowed in postconditions [6642] 20130204064110P</guid></item><item><title>Created Issue: strongest solutions for recursive predicates [6641]</title><link>http://vcc.codeplex.com/workitem/6641</link><description>VCC currently requires that pure functions terminate. This is inconvenient for predicates used to define recursive data structures. For example, we would like to define the nodes of a list with a definition like&lt;br /&gt;&lt;br /&gt;node&amp;#40;n,x&amp;#41; &amp;#61;&amp;#61; n &amp;#38;&amp;#38; &amp;#40;x&amp;#61;&amp;#61;n &amp;#124;&amp;#124; node&amp;#40;n-&amp;#62;nxt,x&amp;#41;&amp;#41;&lt;br /&gt;&lt;br /&gt;or proper lists as&lt;br /&gt;&lt;br /&gt;list&amp;#40;n&amp;#41; &amp;#61;&amp;#61; &amp;#40;n &amp;#61;&amp;#61;&amp;#62; list&amp;#40;n-&amp;#62;nxt&amp;#41; &amp;#38;&amp;#38; &amp;#33;node&amp;#40;n,n-&amp;#62;nxt&amp;#41;&amp;#41;&lt;br /&gt;&lt;br /&gt;For VCC&amp;#39;s purposes, it&amp;#39;s not important that we get the strongest solution, just that we get a solution, and thanks to monotonicity, we can guarantee a solution exists.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;</description><author>erniecohen</author><pubDate>Mon, 07 Jan 2013 21:29:46 GMT</pubDate><guid isPermaLink="false">Created Issue: strongest solutions for recursive predicates [6641] 20130107092946P</guid></item><item><title>Created Issue: \naturals not constrained to be nonnegative [6640]</title><link>http://vcc.codeplex.com/workitem/6640</link><description>The following fails to verify without the loop invariant that q &amp;#62;&amp;#61; 0&amp;#58;&lt;br /&gt;&lt;br /&gt;_&amp;#40;void div&amp;#40;&amp;#92;natural n, &amp;#92;natural d _&amp;#40;out &amp;#92;natural q&amp;#41; _&amp;#40;out &amp;#92;natural r&amp;#41;&amp;#41; &lt;br /&gt;  _&amp;#40;requires d &amp;#62; 0&amp;#41;&lt;br /&gt;  _&amp;#40;ensures n &amp;#61;&amp;#61; q &amp;#42; d &amp;#43; r &amp;#38;&amp;#38; r &amp;#60; d&amp;#41;&lt;br /&gt;  _&amp;#40;decreases 0&amp;#41;&lt;br /&gt;&amp;#123;&lt;br /&gt;&amp;#9;q &amp;#61; 0&amp;#59;&lt;br /&gt;&amp;#9;r &amp;#61; n&amp;#59;&lt;br /&gt;&amp;#9;while &amp;#40;r &amp;#62;&amp;#61; d&amp;#41;&lt;br /&gt;&amp;#9;&amp;#9;_&amp;#40;invariant n &amp;#61;&amp;#61; q &amp;#42;d &amp;#43; r&amp;#41;&lt;br /&gt;&amp;#9;&amp;#9;&amp;#47;&amp;#47;_&amp;#40;invariant q &amp;#62;&amp;#61; 0&amp;#41;&lt;br /&gt;&amp;#9;&amp;#9;_&amp;#40;decreases r&amp;#41;&lt;br /&gt;&amp;#9;&amp;#123;&lt;br /&gt;&amp;#9;&amp;#9;q &amp;#61; q &amp;#43; 1&amp;#59;&lt;br /&gt;&amp;#9;&amp;#9;r &amp;#61; r - d&amp;#59;&lt;br /&gt;&amp;#9;&amp;#125;&lt;br /&gt;&amp;#125;&amp;#41;&lt;br /&gt;</description><author>erniecohen</author><pubDate>Mon, 07 Jan 2013 18:17:26 GMT</pubDate><guid isPermaLink="false">Created Issue: \naturals not constrained to be nonnegative [6640] 20130107061726P</guid></item><item><title>Created Issue: postconditions for _(def) functions [6639]</title><link>http://vcc.codeplex.com/workitem/6639</link><description>Officially, a _&amp;#40;def&amp;#41; function should be a pure ghost function with an implicit postcondition derived from its body. This means that it should accommodate additional postconditions. However, while such postconditions are proved, they are currently not available for use when the function itself is called. For example, the following fails to verify, but verifies if the _&amp;#40;def&amp;#41; is replaced with a _&amp;#40;ghost _&amp;#40;pure&amp;#41; &amp;#40;modulo the bug giving the spurious warning about the cycle of pure function calls&amp;#41;&amp;#58;&lt;br /&gt;&lt;br /&gt;_&amp;#40;def &amp;#92;natural test&amp;#40;&amp;#92;natural i&amp;#41; &amp;#123;&lt;br /&gt;&amp;#9;return &amp;#40;i &amp;#63; 1 &amp;#43; test&amp;#40;i-1&amp;#41; &amp;#58; 0&amp;#41;&amp;#59;&lt;br /&gt;&amp;#125;&amp;#41;&lt;br /&gt;&lt;br /&gt;_&amp;#40;def &amp;#92;bool testId&amp;#40;&amp;#92;natural i&amp;#41;&lt;br /&gt;&amp;#9;_&amp;#40;ensures test&amp;#40;i&amp;#41; &amp;#61;&amp;#61; i&amp;#41;&lt;br /&gt;&amp;#9;_&amp;#40;ensures &amp;#92;result&amp;#41;&lt;br /&gt;&amp;#123;&lt;br /&gt;&amp;#9;if &amp;#40;i&amp;#41; _&amp;#40;assert testId&amp;#40;i-1&amp;#41;&amp;#41;&amp;#59;&lt;br /&gt;&amp;#9;return &amp;#92;true&amp;#59;&lt;br /&gt;&amp;#125;&amp;#41;&lt;br /&gt;</description><author>erniecohen</author><pubDate>Sat, 05 Jan 2013 21:37:41 GMT</pubDate><guid isPermaLink="false">Created Issue: postconditions for _(def) functions [6639] 20130105093741P</guid></item><item><title>Edited Issue: spurious warning on cyclic pure function with termination measure [6546]</title><link>http://vcc.codeplex.com/workitem/6546</link><description>If a pure function has a _&amp;#40;decreases&amp;#41; clause, there is no reason to give a warning for a cycle in pure function calls. &amp;#40;Indeed, we should only give a warning if there is a cycle of functions, none of which has a measure.&amp;#41; We could leave the warning in when termination checking is turned off via a switch.&lt;br /&gt;</description><author>erniecohen</author><pubDate>Sat, 05 Jan 2013 21:08:03 GMT</pubDate><guid isPermaLink="false">Edited Issue: spurious warning on cyclic pure function with termination measure [6546] 20130105090803P</guid></item><item><title>Commented Issue: spurious warning on cyclic pure function with termination measure [6546]</title><link>http://vcc.codeplex.com/workitem/6546</link><description>If a pure function has a _&amp;#40;decreases&amp;#41; clause, there is no reason to give a warning for a cycle in pure function calls. &amp;#40;Indeed, we should only give a warning if there is a cycle of functions, none of which has a measure.&amp;#41; We could leave the warning in when termination checking is turned off via a switch.&lt;br /&gt;Comments: &amp;#40;Don&amp;#39;t know why I forgot to reply to Michal&amp;#39;s comment before.&amp;#41;&amp;#10;&amp;#10;I don&amp;#39;t think we can deprecate _&amp;#40;pure&amp;#41; functions, just _&amp;#40;pure&amp;#41; functions without bodies and &amp;#40;possibly implicit&amp;#41; termination measures.</description><author>erniecohen</author><pubDate>Sat, 05 Jan 2013 21:05:32 GMT</pubDate><guid isPermaLink="false">Commented Issue: spurious warning on cyclic pure function with termination measure [6546] 20130105090532P</guid></item><item><title>Commented Issue: perf problem on function call framing [6638]</title><link>http://vcc.codeplex.com/workitem/6638</link><description>Verifying the following exhausts memory&amp;#58;&lt;br /&gt;&lt;br /&gt;void assign&amp;#40;int v, int&amp;#42; pv&amp;#41;&lt;br /&gt;  _&amp;#40;writes pv&amp;#41;&lt;br /&gt;  _&amp;#40;ensures &amp;#42;pv &amp;#61;&amp;#61; v&amp;#41;&amp;#59;&lt;br /&gt;&lt;br /&gt;void test&amp;#40;&amp;#41;&amp;#59;&lt;br /&gt;&lt;br /&gt;void foo&amp;#40;&amp;#41;&lt;br /&gt;&amp;#123;&lt;br /&gt;&lt;br /&gt;  int local_a&amp;#59;&lt;br /&gt;&lt;br /&gt;  assign&amp;#40;3, &amp;#38;local_a&amp;#41;&amp;#59;&lt;br /&gt;&lt;br /&gt;    test&amp;#40;&amp;#41;&amp;#59; &lt;br /&gt;    test&amp;#40;&amp;#41;&amp;#59; &lt;br /&gt;    test&amp;#40;&amp;#41;&amp;#59; &lt;br /&gt;    test&amp;#40;&amp;#41;&amp;#59; &lt;br /&gt;    test&amp;#40;&amp;#41;&amp;#59; &lt;br /&gt;    test&amp;#40;&amp;#41;&amp;#59; &lt;br /&gt;    test&amp;#40;&amp;#41;&amp;#59; &lt;br /&gt;    test&amp;#40;&amp;#41;&amp;#59; &lt;br /&gt;    test&amp;#40;&amp;#41;&amp;#59; &lt;br /&gt;    test&amp;#40;&amp;#41;&amp;#59; &lt;br /&gt;    test&amp;#40;&amp;#41;&amp;#59; &lt;br /&gt;    test&amp;#40;&amp;#41;&amp;#59; &lt;br /&gt;    test&amp;#40;&amp;#41;&amp;#59; &lt;br /&gt;    test&amp;#40;&amp;#41;&amp;#59; &lt;br /&gt;    test&amp;#40;&amp;#41;&amp;#59; &lt;br /&gt;    test&amp;#40;&amp;#41;&amp;#59; &lt;br /&gt;    test&amp;#40;&amp;#41;&amp;#59; &lt;br /&gt;    test&amp;#40;&amp;#41;&amp;#59; &lt;br /&gt;&amp;#125;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Comments: Note, the verification time appears to be growing exponentially in the number of calls to test&amp;#40;&amp;#41;.</description><author>erniecohen</author><pubDate>Thu, 20 Dec 2012 19:16:23 GMT</pubDate><guid isPermaLink="false">Commented Issue: perf problem on function call framing [6638] 20121220071623P</guid></item><item><title>Created Issue: perf problem on function call framing [6638]</title><link>http://vcc.codeplex.com/workitem/6638</link><description>Verifying the following exhausts memory&amp;#58;&lt;br /&gt;&lt;br /&gt;void assign&amp;#40;int v, int&amp;#42; pv&amp;#41;&lt;br /&gt;  _&amp;#40;writes pv&amp;#41;&lt;br /&gt;  _&amp;#40;ensures &amp;#42;pv &amp;#61;&amp;#61; v&amp;#41;&amp;#59;&lt;br /&gt;&lt;br /&gt;void test&amp;#40;&amp;#41;&amp;#59;&lt;br /&gt;&lt;br /&gt;void foo&amp;#40;&amp;#41;&lt;br /&gt;&amp;#123;&lt;br /&gt;&lt;br /&gt;  int local_a&amp;#59;&lt;br /&gt;&lt;br /&gt;  assign&amp;#40;3, &amp;#38;local_a&amp;#41;&amp;#59;&lt;br /&gt;&lt;br /&gt;    test&amp;#40;&amp;#41;&amp;#59; &lt;br /&gt;    test&amp;#40;&amp;#41;&amp;#59; &lt;br /&gt;    test&amp;#40;&amp;#41;&amp;#59; &lt;br /&gt;    test&amp;#40;&amp;#41;&amp;#59; &lt;br /&gt;    test&amp;#40;&amp;#41;&amp;#59; &lt;br /&gt;    test&amp;#40;&amp;#41;&amp;#59; &lt;br /&gt;    test&amp;#40;&amp;#41;&amp;#59; &lt;br /&gt;    test&amp;#40;&amp;#41;&amp;#59; &lt;br /&gt;    test&amp;#40;&amp;#41;&amp;#59; &lt;br /&gt;    test&amp;#40;&amp;#41;&amp;#59; &lt;br /&gt;    test&amp;#40;&amp;#41;&amp;#59; &lt;br /&gt;    test&amp;#40;&amp;#41;&amp;#59; &lt;br /&gt;    test&amp;#40;&amp;#41;&amp;#59; &lt;br /&gt;    test&amp;#40;&amp;#41;&amp;#59; &lt;br /&gt;    test&amp;#40;&amp;#41;&amp;#59; &lt;br /&gt;    test&amp;#40;&amp;#41;&amp;#59; &lt;br /&gt;    test&amp;#40;&amp;#41;&amp;#59; &lt;br /&gt;    test&amp;#40;&amp;#41;&amp;#59; &lt;br /&gt;&amp;#125;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;</description><author>erniecohen</author><pubDate>Tue, 18 Dec 2012 19:06:37 GMT</pubDate><guid isPermaLink="false">Created Issue: perf problem on function call framing [6638] 20121218070637P</guid></item><item><title>Created Issue: parser dies on conjunction of naturals [6637]</title><link>http://vcc.codeplex.com/workitem/6637</link><description>The following bombs VCC&amp;#58;&lt;br /&gt;&lt;br /&gt;void test&amp;#40;&amp;#41; &amp;#123;&lt;br /&gt;&amp;#9;_&amp;#40;ghost &amp;#92;natural x&amp;#41;&lt;br /&gt;&amp;#9;_&amp;#40;assert x &amp;#38;&amp;#38; x&amp;#41;&lt;br /&gt;&amp;#125;&lt;br /&gt;</description><author>erniecohen</author><pubDate>Tue, 11 Dec 2012 20:26:12 GMT</pubDate><guid isPermaLink="false">Created Issue: parser dies on conjunction of naturals [6637] 20121211082612P</guid></item><item><title>Created Issue: the class of objects should be finite [6636]</title><link>http://vcc.codeplex.com/workitem/6636</link><description>One of the challenges of a first-order approach to data structures is guaranteeing termination. For example, one way to formulate data structures is to maintain the reachability relation and insist that it is acyclic. However, this is not enough to guarantee that functions traversing the structure terminate. We have usually coped with this by maintaining additional information, such as the maximum path length from each node. &lt;br /&gt;&lt;br /&gt;A somewhat simpler way to cope with the finiteness problem is to simply assert that every set of concrete objects is finite. It might even pay to do the same for ghost objects, even though we&amp;#39;ve generally hoped to keep alive the flexibility to have an infinite number of objects at the same time, e.g. if we are creating an infinite number of &amp;#96;&amp;#96;virtual&amp;#39;&amp;#39; objects all at once. A third possibility, that does not require changing the logic, is to define a finiteness predicate &amp;#40;on &amp;#92;objset s&amp;#41;, prove suitable properties about it &amp;#40;e.g., that it is closed under the obvious operations&amp;#41;, and use it explicitly in object invariants.&lt;br /&gt;&lt;br /&gt;Note that once we have finiteness, maintaining reachability generally gives us all we need for data structures that can be embedded in DAGs, since the number of reachable nodes gives us a well founded measure for functions that traverse the structure.&lt;br /&gt;</description><author>erniecohen</author><pubDate>Mon, 10 Dec 2012 11:44:59 GMT</pubDate><guid isPermaLink="false">Created Issue: the class of objects should be finite [6636] 20121210114459A</guid></item><item><title>Created Issue: objects should be allowed to own open objects [6635]</title><link>http://vcc.codeplex.com/workitem/6635</link><description>We have always maintained the invariant that only threads could own open objects. This has the advantage that we avoid silly errors arising from someone forgetting to put in an object invariant that says that something it owns is closed. The disadvantage, however, is that it makes objects second-class citizens wrt ownership. For example, if you are doing surgery on a data structure, you might want to capture an intermediate state of that structure with an object invariant that talks about the unwrapped parts of the data structure. More generally, being open is the natural way to indicate that we are using an object as plain old data, so that we don&amp;#39;t have to worry about the sequential uses of the data conflicting with its regular invariants.&lt;br /&gt;&lt;br /&gt;The natural generalization is to allow objects to own open objects, and to use essentially the same behavior as with threads, namely that all changes to fields of open objects are owner-approved. This allows the owner of an open object to say whatever he wants about the fields of the open object.&lt;br /&gt;</description><author>erniecohen</author><pubDate>Wed, 05 Dec 2012 14:34:46 GMT</pubDate><guid isPermaLink="false">Created Issue: objects should be allowed to own open objects [6635] 20121205023446P</guid></item><item><title>Created Issue: change def of _(always) to allow derivative claims [6634]</title><link>http://vcc.codeplex.com/workitem/6634</link><description>Currently, _&amp;#40;always c,p&amp;#41; does not include a writes clause for c. However, a function will often take a derivative claim on c or change its ownership temporarily, either of which require writing c, so the typical spec for a claim is&lt;br /&gt;&lt;br /&gt;_&amp;#40;always c, p&amp;#41;&lt;br /&gt;_&amp;#40;writes c&amp;#41;&lt;br /&gt;_&amp;#40;ensures &amp;#92;unchanged&amp;#40;c-&amp;#62;&amp;#92;claim_count&amp;#41;&amp;#41;&lt;br /&gt;&lt;br /&gt;Since there are essentially no use cases where we want a function to change the claim count of a claim spec&amp;#39;d with _&amp;#40;always&amp;#41;, I propose that we should just make the above contract the new definition of _&amp;#40;always c,p&amp;#41;, i.e. define _&amp;#40;always c,p&amp;#41; as&lt;br /&gt;&lt;br /&gt;_&amp;#40;maintains &amp;#92;wrapped&amp;#40;c&amp;#41; &amp;#38;&amp;#38; &amp;#92;claims&amp;#40;c, p&amp;#41;&amp;#41;&lt;br /&gt;_&amp;#40;writes c&amp;#41;&lt;br /&gt;_&amp;#40;ensures &amp;#92;unchanged&amp;#40;c-&amp;#62;&amp;#92;claim_count&amp;#41;&amp;#41;&lt;br /&gt;_&amp;#40;maintains &amp;#92;assume&amp;#40;active_claim&amp;#40;c&amp;#41;&amp;#41;&amp;#41;&lt;br /&gt;&lt;br /&gt;. Does anybody know of any legacy code that this would break&amp;#63;&lt;br /&gt;</description><author>erniecohen</author><pubDate>Wed, 21 Nov 2012 14:14:21 GMT</pubDate><guid isPermaLink="false">Created Issue: change def of _(always) to allow derivative claims [6634] 20121121021421P</guid></item><item><title>Created Issue: invariants that forbid unwrapping [6633]</title><link>http://vcc.codeplex.com/workitem/6633</link><description>The following fails to verify, because the second invariant forbids unwrapping &amp;#40;in the case that the succ of a List points to itself&amp;#41;&amp;#58;&lt;br /&gt;&lt;br /&gt;typedef struct List List, &amp;#42;PList&amp;#59;&lt;br /&gt;&lt;br /&gt;typedef struct List &amp;#123;&lt;br /&gt;&amp;#9;volatile PList succ&amp;#59;&lt;br /&gt;&amp;#9;_&amp;#40;invariant &amp;#92;on_unwrap&amp;#40;&amp;#92;this,&amp;#92;false&amp;#41;&amp;#41;&lt;br /&gt;&amp;#9;_&amp;#40;invariant succ-&amp;#62;&amp;#92;closed&amp;#41;&lt;br /&gt;&amp;#125; List&amp;#59;&lt;br /&gt;&lt;br /&gt;The purpose of the unwrapping check is to minimize the invariants that have to be checked on an unwrap.&lt;br /&gt;However, in this case, the second invariant doesn&amp;#39;t have to be checked, because an unwrap that breaks the second invariant also breaks the first invariant, which is checked. So we should be changing the unwrapping check so that it assumes that the unwrap preserves all of the checked invariants.&lt;br /&gt;</description><author>erniecohen</author><pubDate>Thu, 15 Nov 2012 16:49:06 GMT</pubDate><guid isPermaLink="false">Created Issue: invariants that forbid unwrapping [6633] 20121115044906P</guid></item></channel></rss>