Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 1 addition & 5 deletions .github/workflows/update-subtree.yml
Original file line number Diff line number Diff line change
Expand Up @@ -214,18 +214,14 @@ jobs:

# Try to automatically patch the VeriFast proofs
pushd verifast-proofs
if bash ./patch-verifast-proofs.sh; then
./patch-verifast-proofs.sh
if ! git diff --quiet; then
git -c user.name=gitbot -c user.email=git@bot \
commit . -m "Update VeriFast proofs"
else
# The original files have not changed; no updates to the VeriFast proofs are necessary.
true
fi
else
# Patching the VeriFast proofs failed; requires manual intervention.
true
fi
popd

- name: Create Pull Request without conflicts
Expand Down
16 changes: 1 addition & 15 deletions .github/workflows/verifast-negative.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,19 +27,5 @@ jobs:
- name: Checkout Repository
uses: actions/checkout@v4

- name: Install VeriFast
run: |
cd ~
curl -OL https://github.com/verifast/verifast/releases/download/25.07/verifast-25.07-linux.tar.gz
# https://github.com/verifast/verifast/attestations/8998468
echo '48d2c53b4a6e4ba6bf03bd6303dbd92a02bfb896253c06266b29739c78bad23b verifast-25.07-linux.tar.gz' | shasum -a 256 -c
tar xf verifast-25.07-linux.tar.gz

- name: Install the Rust toolchain used by VeriFast
run: rustup toolchain install nightly-2025-04-09

- name: Run VeriFast Verification
run: |
export PATH=~/verifast-25.07/bin:$PATH
cd verifast-proofs
bash check-verifast-proofs-negative.sh
run: verifast-proofs/check-verifast-proofs-negative.sh
16 changes: 1 addition & 15 deletions .github/workflows/verifast.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,22 +24,8 @@ jobs:
- name: Checkout Repository
uses: actions/checkout@v4

- name: Install VeriFast
run: |
cd ~
curl -OL https://github.com/verifast/verifast/releases/download/25.07/verifast-25.07-linux.tar.gz
# https://github.com/verifast/verifast/attestations/8998468
echo '48d2c53b4a6e4ba6bf03bd6303dbd92a02bfb896253c06266b29739c78bad23b verifast-25.07-linux.tar.gz' | shasum -a 256 -c
tar xf verifast-25.07-linux.tar.gz

- name: Install the Rust toolchain used by VeriFast
run: rustup toolchain install nightly-2025-04-09

- name: Run VeriFast Verification
run: |
export PATH=~/verifast-25.07/bin:$PATH
cd verifast-proofs
bash check-verifast-proofs.sh
run: verifast-proofs/check-verifast-proofs.sh

notify-btj:
name: Notify @btj
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
set -x -e

if ! git diff --quiet .; then
echo "Working directory not clean. Please stash your changes and try again"
false
else
UPSTREAM=../../../../library/alloc/src/collections/linked_list.rs
git merge-file --diff3 verified/linked_list.rs original/linked_list.rs $UPSTREAM
cp $UPSTREAM original/linked_list.rs
fi
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
set -e -x

export VFVERSION=25.07

! verifast -rustc_args "--edition 2021 --cfg test" -skip_specless_fns verified/lib.rs
! refinement-checker --rustc-args "--edition 2021 --cfg test" original/lib.rs verified/lib.rs
if ! diff ../../../../library/alloc/src/collections/linked_list.rs original/linked_list.rs; then
echo "::error title=Please run verifast-proofs/patch-verifast-proofs.sh::Some VeriFast proofs are out of date; please chdir to verifast-proofs and run patch-verifast-proofs.sh to update them."
false
fi
10 changes: 10 additions & 0 deletions verifast-proofs/alloc/collections/linked_list.rs/update.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
set -x -e

if ! git diff --quiet .; then
echo "Working directory not clean. Please stash your changes and try again"
false
else
UPSTREAM=../../../../library/alloc/src/collections/linked_list.rs
git merge-file --diff3 verified/linked_list.rs original/linked_list.rs $UPSTREAM
cp $UPSTREAM original/linked_list.rs
fi
10 changes: 10 additions & 0 deletions verifast-proofs/alloc/collections/linked_list.rs/verify.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
set -e -x

export VFVERSION=25.07

verifast -rustc_args "--edition 2021 --cfg test" -skip_specless_fns -ignore_unwind_paths -allow_assume verified/lib.rs
refinement-checker --rustc-args "--edition 2021 --cfg test" original/lib.rs verified/lib.rs > /dev/null
if ! diff original/linked_list.rs ../../../../library/alloc/src/collections/linked_list.rs; then
echo "::error title=Please run verifast-proofs/patch-verifast-proofs.sh::Some VeriFast proofs are out of date; please chdir to verifast-proofs and run patch-verifast-proofs.sh to update them."
false
fi
11 changes: 11 additions & 0 deletions verifast-proofs/alloc/raw_vec/mod.rs/update.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
set -x -e

if ! git diff --quiet .; then
echo "Working directory not clean. Please stash your changes and try again"
false
else
UPSTREAM=../../../../library/alloc/src/raw_vec/mod.rs
git merge-file --diff3 with-directives/raw_vec.rs original/raw_vec.rs $UPSTREAM
git merge-file --diff3 verified/raw_vec.rs original/raw_vec.rs $UPSTREAM
cp $UPSTREAM original/raw_vec.rs
fi
11 changes: 11 additions & 0 deletions verifast-proofs/alloc/raw_vec/mod.rs/verify.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
set -e -x

export VFVERSION=25.07

verifast -skip_specless_fns -ignore_unwind_paths -allow_assume verified/lib.rs
refinement-checker with-directives/lib.rs verified/lib.rs > /dev/null
refinement-checker --ignore-directives original/lib.rs with-directives/lib.rs > /dev/null
if ! diff original/raw_vec.rs ../../../../library/alloc/src/raw_vec/mod.rs; then
echo "::error title=Please run verifast-proofs/patch-verifast-proofs.sh::Some VeriFast proofs are out of date; please chdir to verifast-proofs and run patch-verifast-proofs.sh to update them."
false
fi
12 changes: 6 additions & 6 deletions verifast-proofs/check-verifast-proofs-negative.sh
100644 → 100755
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
#!/bin/bash

set -e -x

cd "$(dirname "$0")"
export PATH=`pwd`:$PATH

cd alloc
cd collections
cd linked_list.rs-negative
! verifast -rustc_args "--edition 2021 --cfg test" -skip_specless_fns verified/lib.rs
! refinement-checker --rustc-args "--edition 2021 --cfg test" original/lib.rs verified/lib.rs
if ! diff ../../../../library/alloc/src/collections/linked_list.rs original/linked_list.rs; then
echo "::error title=Please run verifast-proofs/patch-verifast-proofs.sh::Some VeriFast proofs are out of date; please chdir to verifast-proofs and run patch-verifast-proofs.sh to update them."
false
fi
bash verify.sh
cd ..
cd ..
cd ..
21 changes: 8 additions & 13 deletions verifast-proofs/check-verifast-proofs.sh
100644 → 100755
Original file line number Diff line number Diff line change
@@ -1,25 +1,20 @@
#!/bin/bash

set -e -x

cd "$(dirname "$0")"

export PATH=`pwd`:$PATH

cd alloc
cd collections
cd linked_list.rs
verifast -rustc_args "--edition 2021 --cfg test" -skip_specless_fns -ignore_unwind_paths -allow_assume verified/lib.rs
refinement-checker --rustc-args "--edition 2021 --cfg test" original/lib.rs verified/lib.rs > /dev/null
if ! diff original/linked_list.rs ../../../../library/alloc/src/collections/linked_list.rs; then
echo "::error title=Please run verifast-proofs/patch-verifast-proofs.sh::Some VeriFast proofs are out of date; please chdir to verifast-proofs and run patch-verifast-proofs.sh to update them."
false
fi
bash verify.sh
cd ..
cd ..
cd raw_vec
cd mod.rs
verifast -skip_specless_fns -ignore_unwind_paths -allow_assume verified/lib.rs
refinement-checker with-directives/lib.rs verified/lib.rs > /dev/null
refinement-checker --ignore-directives original/lib.rs with-directives/lib.rs > /dev/null
if ! diff original/raw_vec.rs ../../../../library/alloc/src/raw_vec/mod.rs; then
echo "::error title=Please run verifast-proofs/patch-verifast-proofs.sh::Some VeriFast proofs are out of date; please chdir to verifast-proofs and run patch-verifast-proofs.sh to update them."
false
fi
bash verify.sh
cd ..
cd ..
cd ..
29 changes: 16 additions & 13 deletions verifast-proofs/patch-verifast-proofs.sh
100644 → 100755
Original file line number Diff line number Diff line change
@@ -1,21 +1,24 @@
#!/bin/bash

set -e -x

cd "$(dirname "$0")"
export PATH=`pwd`:$PATH

patch_proof() {
if ! git diff --quiet .; then
echo "Directory not clean. Please stash changes and try again"
else
bash update.sh && bash verify.sh || git restore .
fi
}

pushd alloc/collections/linked_list.rs
diff original/linked_list.rs ../../../../library/alloc/src/collections/linked_list.rs > /tmp/linked_list.diff || [ "$?" = 1 ]
patch -p0 verified/linked_list.rs < /tmp/linked_list.diff
patch -p0 original/linked_list.rs < /tmp/linked_list.diff
rm /tmp/linked_list.diff
patch_proof
popd
pushd alloc/collections/linked_list.rs-negative
diff original/linked_list.rs ../../../../library/alloc/src/collections/linked_list.rs > /tmp/linked_list.diff || [ "$?" = 1 ]
patch -p0 verified/linked_list.rs < /tmp/linked_list.diff
patch -p0 original/linked_list.rs < /tmp/linked_list.diff
rm /tmp/linked_list.diff
patch_proof
popd
pushd alloc/raw_vec/mod.rs
diff original/raw_vec.rs ../../../../library/alloc/src/raw_vec/mod.rs > /tmp/raw_vec.diff || [ "$?" = 1 ]
patch -p0 verified/raw_vec.rs < /tmp/raw_vec.diff
patch -p0 with-directives/raw_vec.rs < /tmp/raw_vec.diff
patch -p0 original/raw_vec.rs < /tmp/raw_vec.diff
rm /tmp/raw_vec.diff
patch_proof
popd
5 changes: 5 additions & 0 deletions verifast-proofs/refinement-checker
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/bin/bash

set -e -x
. "$(dirname "$0")/setup-verifast-home"
"$VERIFAST_HOME/bin/refinement-checker" "$@"
53 changes: 53 additions & 0 deletions verifast-proofs/setup-verifast-home
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
set -e -x

: "${VFTOOLCHAINS=$HOME/.verifast/toolchains}"
: "${VERIFAST_HOME=$VFTOOLCHAINS/verifast-$VFVERSION}"

if [[ ! -d "$VERIFAST_HOME" ]]; then

if [[ -z $VFPLATFORM ]]; then
if [[ "$(uname)" == "Darwin" ]]; then
if [[ "$(uname -m)" == "arm64" ]]; then
: "${VFPLATFORM=macos-aarch}"
else
: "${VFPLATFORM=macos}"
fi
else
: "${VFPLATFORM=linux}"
fi
fi

case "$VFVERSION,$VFPLATFORM" in
25.07,macos-aarch)
# https://github.com/verifast/verifast/attestations/8998438
VFHASH=6129fe538fb0b47ddf57e223dd628d991c74d9c835c991dd65871d5dc56c6d3f
RUST_VERSION=nightly-2025-04-09
;;
25.07,linux)
# https://github.com/verifast/verifast/attestations/8998468
VFHASH=48d2c53b4a6e4ba6bf03bd6303dbd92a02bfb896253c06266b29739c78bad23b
RUST_VERSION=nightly-2025-04-09
;;
*)
echo 'Unknown VeriFast version "'"$VFVERSION"'". Please set VFVERSION to a support version'
false
;;
esac

if ! rustup toolchain list | grep $RUST_VERSION; then
rustup toolchain install $RUST_VERSION
fi

VFASSET=verifast-$VFVERSION-$VFPLATFORM.tar.gz
pushd "${TMPDIR:-/tmp}"
if [[ ! -d verifast-$VFVERSION ]]; then
if [[ ! -e $VFASSET ]]; then
curl -OL https://github.com/verifast/verifast/releases/download/$VFVERSION/$VFASSET
fi
echo "$VFHASH $VFASSET" | shasum -a 256 -c
tar xf $VFASSET
fi
mkdir -p "$VFTOOLCHAINS"
mv verifast-$VFVERSION "$VFTOOLCHAINS"
popd
fi
5 changes: 5 additions & 0 deletions verifast-proofs/verifast
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/bin/bash

set -e -x
. "$(dirname "$0")/setup-verifast-home"
"$VERIFAST_HOME/bin/verifast" "$@"
Loading