Closed camshaft closed 1 year ago
The CBMC postprocessor cannot parse one item for some (still unknown) reason. Unfortunately, the item it cannot parse is "result", which contains all the properties checked in the program, including traces if their status is "FAILURE" (this is the largest part of CBMC's output).
I've extracted the item but cannot upload it here due to the size limit (25MB, the item is 33MB). Since we're doing parsing on untagged items, I'm not getting useful information about what went wrong during parsing. In total, there are 1086 properties (1064 successful, 22 failed).
I'm using jq
to determine if there is a missing field in a programmatic way, but it appears they're all there. I'll continue debugging tomorrow with another approach.
To be clear, the error message we get when doing on untagged items is "data did not match any variant of untagged enum ParserItem"
.
What I've tried now is to specialize parsing for the "result" item, by deserializing into a struct
rather than a variant of ParserItem
(both are still equivalent). This has achieved a more informative error:
Error("invalid value: integer `960`, expected u8", line: 23367, column: 26)
The line in question is marked below ("width"
field):
"stepType": "assignment",
"thread": 0,
"value": {
"binary": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"data": "0",
"name": "integer",
"type": "unsigned __CPROVER_bitvector[960]",
"width": 960 # <--- this line
}
It wasn't clear to me why serde_json
was expecting a u8
value there, but I recall concrete playback defined width
to be u8
. Going to check that code now.
It's an easy fix. That said, I'm adding some code to get more informative errors in the future.
I'm working on a lock-free, async spsc channel in s2n-quic and wanted to write a kani proof for it. I have a harness written that simply allocates the channel. After running Kani, I get a panic inside the kani-driver crate:
To reproduce, you can run the following command:
with Kani version: 0.20