-
Notifications
You must be signed in to change notification settings - Fork 273
Spurious pointer check violation with smt2 backend and z3 4.12.1 #7690
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
Hello, I have been working on this over the last few days, and it just struck me that I haven't provided any sort of update on this one, so let me rectify the situation by providing you with an update of my investigation so far. I had a lengthy play with the file provided in the bug report, toggling between the two different assumptions (by two assumptions, I mean one with the Superficially, there was no difference between the VCCs (produced with There were observable differences however in the SMT2 output produced (using the flag (assert (=> (= ((_ extract 63 56) (ite (= |stk_push::stk!0@2#1| (concat (_ bv10 8) (_ bv0 56))) (concat (_ bv3 8) (_ bv0 56)) |stk_push::stk$object#0..elems|)) (_ bv3 8))(= object_size.2 (_ bv510 64)))) I also observed differences in the My current working hypothesis is that the version of the assumption While this is what I'm speculate for now, I also had a couple of other suggestions of avenues to investigate, so I will be keeping an open mind for possible issues/resolutions to this. As an aside, we have exercised the new SMT2 backend with this code (the one that gets exercised with the |
Hi @remi-delmas-3000 would it be possible to run the code in #7761 against your internal benchmarks and let me know if there's the performance degradation we talked about previously? |
@remi-delmas-3000 By the way, in reference to our discussion yesterday, the maximum array size that gets flattened is const std::size_t MAX_FLATTENED_ARRAY_SIZE=1000; |
Hi @remi-delmas-3000, we still intend to merge the singleton interval simplification and I wanted to touch base to ask if there are any concerns about this from your end. I seem to recall that you mentioned last time that this could potentially raise some performance issues but that was speculative and you wanted to play around with this a bit. Is this still the case? |
@NlightNFotis , I'll do a regression run on my end today and post an update on #7761 |
This program is proved correct with the SAT backend but fails with with SMT2 backend with
--pointer-check --bounds-check
:The analysis using the SMT2 backend succeeds if we change the assumption at line 46:
__CPROVER_assume(UINT8_MAX <= stk_size && stk_size <= UINT8_MAX);
into
or into an assignment
CBMC version: 5.79.0 (cbmc-5.79.0-49-gb34e991f30), Z3 version 4.12.1 - 64 bit
Operating system: macOS
Exact command line resulting in the issue:
cbmc --pointer-check --smt2 stack_push.c
What behaviour did you expect: analysis suceeds
What happened instead: analysis fails
The text was updated successfully, but these errors were encountered: