@@ -73,11 +73,58 @@ jobs:
73
73
with :
74
74
submodules : true
75
75
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.
77
81
- name : Run Kani Verification
78
82
run : |
79
- scripts/run-kani.sh --kani-args \
83
+ scripts/run-kani.sh --run autoharness -- kani-args \
80
84
--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 \
81
128
--jobs=3 --output-format=terse
82
129
83
130
run-kani-list :
@@ -93,8 +140,14 @@ jobs:
93
140
94
141
# Step 2: Run list on the std library
95
142
- 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
+
98
151
# Step 3: Add output to job summary
99
152
- name : Add Kani List output to job summary
100
153
uses : actions/github-script@v6
@@ -106,3 +159,30 @@ jobs:
106
159
.addHeading('Kani List Output', 2)
107
160
.addRaw(kaniOutput, false)
108
161
.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