-
Notifications
You must be signed in to change notification settings - Fork 273
identifier __CPROVER_memory not found #197
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
Thanks. I now see that this is a duplicate of #161. Sorry about that. |
We have a patch that fixes the problem in one of our branches. We'll distil a PR for it asap. |
Looks like the principle cause is implicit pointer casting between |
smowton@5787def fixes this particular case by ensuring all pointer-casting is explicit, and so bytewise reinterpret opcodes are not generated. There may however be other cases where the value set analysis conflates integer and pointer members of the same struct which would lead to the same problem recurring; if that happens we should consider making the pass aware that the source language can't express raw integer addresses, and so in this case anything that would use |
Thanks for looking at this, Chris. I grafted your patch onto current master and it does prevent the crash. Verification of the particular benchmark now completes, but the results are surprising to me. At the moment, I cannot say if this is a genuine finding or some misunderstanding of mine. I will investigate the issue. |
The problem no longer occurs with current master (518124c). Thanks. |
Per https://github.com/diffblue/verification-engine-utils/issues/173 there are more cases where this can happen; therefore |
(Just a note this should be review/QA but I don't have the right to do that on the CBMC tracker) |
Created #335 to try to get this either integrated or commented upon. |
goto-symex's value-set analysis can reach the conclusion that an integer may be cast to a pointer, and so generate a reference to the __CPROVER_memory symbol. This is invalid in Java however, since the symbol is not defined and of course Java cannot express dereferencing a non-pointer type. This change disables generation of __CPROVER_memory references when a Java-typed entry point is found. I couldn't provide a test case against master at this time however because the examples in both of the above bugs now succeed against master, presumably because value-set analysis has been improved and is harder to confuse into introducing a pointer-to-int cast.
…inal_in_HTML_dump SEC-66 : Added ordinals of instructions in GOTO functions in HTML dump.
Hello,
current CBMC master crashes on the attached Java program (distilled
from production code).
Thanks,
Vladimir Klebanov
CBMC version 5.4 64-bit x86_64 linux
Parsing Driver.class
Java main class: Driver
failed to load class
java.lang.String' failed to load class
java.lang.Object'failed to load class
java.lang.Class' failed to load class
java.lang.AssertionError'Converting
Generating GOTO Program
Adding CPROVER library (x86_64)
Removal of function pointers and virtual functions
Partial Inlining
Generic Property Instrumentation
Starting Bounded Model Checking
**** WARNING: no body for function
java::java.lang.Class.desiredAssertionStatus:()Z
**** WARNING: no body for function java::java.lang.Object.:()V
**** WARNING: no body for function java::java.lang.AssertionError.:()V
file Driver.java line 50: identifier __CPROVER_memory not found
The text was updated successfully, but these errors were encountered: