@@ -73,11 +73,58 @@ jobs:
7373 with :
7474 submodules : true
7575
76- # Step 2: Run Kani on the std library for selected functions
76+ # Step 2: Run Kani autoharness on the std library for selected functions.
77+ # Uses "--include-pattern" to make sure we do not try to run across all
78+ # possible functions as that may take a lot longer than expected. Instead,
79+ # explicitly list all functions (or prefixes thereof) the proofs of which
80+ # are known to pass.
7781 - name : Run Kani Verification
7882 run : |
79- scripts/run-kani.sh --kani-args \
83+ scripts/run-kani.sh --run autoharness -- kani-args \
8084 --include-pattern alloc::__default_lib_allocator:: \
85+ --include-pattern alloc::layout::Layout::from_size_align \
86+ --include-pattern ascii::ascii_char::AsciiChar::from_u8 \
87+ --include-pattern char::convert::from_u32_unchecked \
88+ --include-pattern "num::nonzero::NonZero::<i8>::count_ones" \
89+ --include-pattern "num::nonzero::NonZero::<i16>::count_ones" \
90+ --include-pattern "num::nonzero::NonZero::<i32>::count_ones" \
91+ --include-pattern "num::nonzero::NonZero::<i64>::count_ones" \
92+ --include-pattern "num::nonzero::NonZero::<i128>::count_ones" \
93+ --include-pattern "num::nonzero::NonZero::<isize>::count_ones" \
94+ --include-pattern "num::nonzero::NonZero::<u8>::count_ones" \
95+ --include-pattern "num::nonzero::NonZero::<u16>::count_ones" \
96+ --include-pattern "num::nonzero::NonZero::<u32>::count_ones" \
97+ --include-pattern "num::nonzero::NonZero::<u64>::count_ones" \
98+ --include-pattern "num::nonzero::NonZero::<u128>::count_ones" \
99+ --include-pattern "num::nonzero::NonZero::<usize>::count_ones" \
100+ --include-pattern "num::nonzero::NonZero::<i8>::rotate_" \
101+ --include-pattern "num::nonzero::NonZero::<i16>::rotate_" \
102+ --include-pattern "num::nonzero::NonZero::<i32>::rotate_" \
103+ --include-pattern "num::nonzero::NonZero::<i64>::rotate_" \
104+ --include-pattern "num::nonzero::NonZero::<i128>::rotate_" \
105+ --include-pattern "num::nonzero::NonZero::<isize>::rotate_" \
106+ --include-pattern "num::nonzero::NonZero::<u8>::rotate_" \
107+ --include-pattern "num::nonzero::NonZero::<u16>::rotate_" \
108+ --include-pattern "num::nonzero::NonZero::<u32>::rotate_" \
109+ --include-pattern "num::nonzero::NonZero::<u64>::rotate_" \
110+ --include-pattern "num::nonzero::NonZero::<u128>::rotate_" \
111+ --include-pattern "num::nonzero::NonZero::<usize>::rotate_" \
112+ --include-pattern ptr::align_offset::mod_inv \
113+ --include-pattern ptr::alignment::Alignment::as_nonzero \
114+ --include-pattern ptr::alignment::Alignment::as_usize \
115+ --include-pattern ptr::alignment::Alignment::log2 \
116+ --include-pattern ptr::alignment::Alignment::mask \
117+ --include-pattern ptr::alignment::Alignment::new \
118+ --include-pattern ptr::alignment::Alignment::new_unchecked \
119+ --include-pattern time::Duration::from_micros \
120+ --include-pattern time::Duration::from_millis \
121+ --include-pattern time::Duration::from_nanos \
122+ --include-pattern time::Duration::from_secs \
123+ --exclude-pattern time::Duration::from_secs_f \
124+ --include-pattern unicode::unicode_data::conversions::to_ \
125+ --exclude-pattern ::precondition_check \
126+ --harness-timeout 5m \
127+ --default-unwind 1000 \
81128 --jobs=3 --output-format=terse
82129
83130 run-kani-list :
@@ -93,8 +140,14 @@ jobs:
93140
94141 # Step 2: Run list on the std library
95142 - name : Run Kani List
96- run : head/scripts/run-kani.sh --run list --path ${{github.workspace}}/head
97-
143+ run : |
144+ head/scripts/run-kani.sh --run list --with-autoharness --path ${{github.workspace}}/head
145+ # remove duplicate white space to reduce file size (GitHub permits at
146+ # most one 1MB)
147+ ls -l ${{github.workspace}}/head/kani-list.md
148+ perl -p -i -e 's/ +/ /g' ${{github.workspace}}/head/kani-list.md
149+ ls -l ${{github.workspace}}/head/kani-list.md
150+
98151 # Step 3: Add output to job summary
99152 - name : Add Kani List output to job summary
100153 uses : actions/github-script@v6
@@ -106,3 +159,30 @@ jobs:
106159 .addHeading('Kani List Output', 2)
107160 .addRaw(kaniOutput, false)
108161 .write();
162+
163+ run-autoharness-analyzer :
164+ name : Kani Autoharness Analyzer
165+ runs-on : ubuntu-latest
166+ steps :
167+ # Step 1: Check out the repository
168+ - name : Checkout Repository
169+ uses : actions/checkout@v4
170+ with :
171+ submodules : true
172+
173+ # Step 2: Run autoharness analyzer on the std library
174+ - name : Run Autoharness Analyzer
175+ run : scripts/run-kani.sh --run autoharness-analyzer
176+
177+ # Step 3: Add output to job summary
178+ - name : Add Autoharness Analyzer output to job summary
179+ run : |
180+ echo "# Autoharness Failure Summary" >> "$GITHUB_STEP_SUMMARY"
181+ echo "## Crate core, all functions" >> "$GITHUB_STEP_SUMMARY"
182+ cat autoharness_analyzer/core_autoharness_data.md >> "$GITHUB_STEP_SUMMARY"
183+ echo "## Crate core, unsafe functions" >> "$GITHUB_STEP_SUMMARY"
184+ cat autoharness_analyzer/core_autoharness_data.md >> "$GITHUB_STEP_SUMMARY"
185+ echo "## Crate std, all functions" >> "$GITHUB_STEP_SUMMARY"
186+ cat autoharness_analyzer/std_autoharness_data.md >> "$GITHUB_STEP_SUMMARY"
187+ echo "## Crate std, unsafe functions" >> "$GITHUB_STEP_SUMMARY"
188+ cat autoharness_analyzer/std_unsafe_autoharness_data.md >> "$GITHUB_STEP_SUMMARY"
0 commit comments