|
| 1 | +## Release 2025.2 |
| 2 | + |
| 3 | +**Date 28/02/25** |
| 4 | + |
| 5 | +### Changes in Viper Language |
| 6 | + |
| 7 | +- The semantics of permission amounts in functions has changed. When checking function preconditions, concrete permission amounts are ignored; instead, we only distinguish between zero and any positive amounts. Thus, the following assertions all have the same meaning in a function precondition: ``acc(x.f, write)`` or ``acc(x.f, wildcard)`` or ``acc(x.f, 1/2)`` or ``acc(x.f, b ? write : 1/2)`` or ``acc(x.f) && acc(x.f)`` or ``acc(x.f, 2/1)`` all just require checking that a caller has some positive permission amount to ``x.f``. The same is true for predicate permissions. As a result, inside a function, one can no longer assume non-aliasing based on permission amounts. Additionally, when verifying well-definedness of a function, again all permission amounts are ignored (with the exception of distinguishing between zero and something positive as stated before), so one can for example unfold a whole predicate inside a function whose precondition only asks for half that predicate. Programs may still use concrete permission amounts in functions to preserve backward-compatibility, but such amounts will be meaningless and will result in a warning. https://github.com/viperproject/silicon/pull/877 |
| 8 | +- Added a new expression ``asserting (a) in e``, which checks that ``a`` holds and subsequently evaluates to ``e``. https://github.com/viperproject/silver/pull/814 |
| 9 | + |
| 10 | +### API Changes |
| 11 | + |
| 12 | +- The permission amount in the AST nodes for field and predicate access predicates is now optional. If no permission amount is given, the amount defaults to ``wildcard`` in functions and ``write`` anywhere else. |
| 13 | + |
| 14 | +### Bug Fixes |
| 15 | + |
| 16 | +- Several bugfixes in trigger inference https://github.com/viperproject/silver/pull/827 |
| 17 | +- Pretty printing: |
| 18 | + - Termination measures are no longer pretty-printed as ``requires decreases``, which was invalid Viper code https://github.com/viperproject/silver/pull/831 |
| 19 | + - Fixed pretty-printing conditional termination measures https://github.com/viperproject/silver/pull/847 |
| 20 | + - Unambiguous pretty-printing of integer division https://github.com/viperproject/silver/pull/818 |
| 21 | +- Fixed crash in termination check for inhale-exhale-expressions https://github.com/viperproject/silver/pull/822 |
| 22 | +- Fixed missing position information in predicate termination measures https://github.com/viperproject/silver/pull/836 |
| 23 | +- Fixed case where program with annotations was incorrectly rejected by the parser https://github.com/viperproject/silver/pull/842 |
| 24 | + |
| 25 | +### Backend-specific Upgrades/Changes |
| 26 | + |
| 27 | +#### Symbolic Execution Backend (Silicon) |
| 28 | + |
| 29 | +- Soundness fixes: |
| 30 | + - Fixed an unsoundness in package blocks that have no feasible paths https://github.com/viperproject/silicon/pull/899 |
| 31 | + - Fixed unsound definitions of snapshots inside quantifiers with exhaleMode 1 / moreCompleteExhale https://github.com/viperproject/silicon/pull/898 |
| 32 | + - Fixed unsound constraints for wildcard variables in function axioms with exhaleMode 1 / moreCompleteExhale https://github.com/viperproject/silicon/pull/895 |
| 33 | + - Fixed case where wildcard amount could be unsoundly constrained against itself https://github.com/viperproject/silicon/pull/893 |
| 34 | +- Performance improvements: |
| 35 | + - Avoiding generating snapshot definitions that will not be used, reducing potential quantifier instantiations https://github.com/viperproject/silicon/pull/879 |
| 36 | + - State consolidation now also merged quantified chunks https://github.com/viperproject/silicon/pull/860 |
| 37 | + - Fixed potential matching loop in sequence axiomatization https://github.com/viperproject/silicon/pull/885 |
| 38 | + - Simplified and improved copying of macros and function declarations between solvers for parallel branch verification https://github.com/viperproject/silicon/pull/872 |
| 39 | +- Debugger improvements: |
| 40 | + - More informative names for debug labels, showing value expressions for non-quantified chunks https://github.com/viperproject/silicon/pull/884 |
| 41 | + - Improved pretty-printing of quantified chunks in debugger https://github.com/viperproject/silicon/pull/865 |
| 42 | + - Added option to print internal term representation instead of Viper-level expressions https://github.com/viperproject/silicon/pull/884 |
| 43 | + - Added missing old-labels around heap-dependent function applications https://github.com/viperproject/silicon/pull/900 |
| 44 | + - Fixed race condition in assumption ID generation https://github.com/viperproject/silicon/pull/887 |
| 45 | +- Bug fixes: |
| 46 | + - Fixed a rare crash related to wand packaging https://github.com/viperproject/silicon/pull/876 |
| 47 | + |
| 48 | +#### Verification Condition Generation Backend (Carbon) |
| 49 | + |
| 50 | +- Soundness fixes: |
| 51 | + - Fixed incorrect injectivity check for quantified permissions with multiple quantified variables https://github.com/viperproject/carbon/pull/542 |
| 52 | +- Completeness improvements: |
| 53 | + - Improved framing of heap locations protected by predicates that have not been unfolded https://github.com/viperproject/carbon/pull/543 |
| 54 | + - Fixed incompleteness where condition of empty if-block could not trigger quantifiers https://github.com/viperproject/carbon/pull/544 |
| 55 | +- Performance improvements: |
| 56 | + - Fixed potential matching loop in sequence axiomatization https://github.com/viperproject/carbon/pull/536 |
| 57 | + - Improved framing axioms for quantified permissions https://github.com/viperproject/carbon/pull/524 |
| 58 | +- Bug fixes: |
| 59 | + - Fixed Boogie crash when using quantified predicates without parameters https://github.com/viperproject/carbon/pull/541 |
| 60 | + |
| 61 | + |
1 | 62 | ## Release 2024.8
|
2 | 63 |
|
3 | 64 | **Date 31/08/24**
|
|
0 commit comments