Skip to content

pointer comparable assert generated between void* and unsigned long

ID0001559: This issue was created automatically from Mantis Issue 1559. Further discussion may take place here.


Id Project Category View Due Date Updated
ID0001559 Frama-C Plug-in > Eva public 2013-11-19 2014-03-13
Reporter dpariente Assigned To yakobowski Resolution fixed
Priority normal Severity major Reproducibility always
Platform - OS - OS Version -
Product Version Frama-C Fluorine-20130601 Target Version - Fixed in Version Frama-C Neon-20140301

Description :

[STANCE]

The following code: /------------------------------------------/ typedef unsigned long size_t; struct apr_file_t; typedef struct apr_file_t apr_file_t; struct apr_file_t {char *fname ;}; int apr_file_write(apr_file_t *thefile, unsigned long *nbytes); int apr_file_write_full(apr_file_t thefile, unsigned long nbytes, unsigned long bytes_written) { int status; unsigned long a; a = nbytes; status = apr_file_write(thefile,& a); nbytes -= a; if (! (nbytes > (unsigned long)0)) return 0; return 1; } /------------------------------------------/

analyzed by: frama-c.exe -val -main apr_file_write_full -lib-entry foo.c -no-unicode

generates an assert: [kernel] warning: pointer comparison: assert \pointer_comparable((void *)nbytes, (unsigned long)0);

which, once the project is pretty-printed (-print -ocode ...), yields an error on the generated C file: [kernel] user error: no such predicate or logic function \pointer_comparable(void *, unsigned long) in annotation.

(... indeed it might be an issue at Kernel level!)

Attachments

To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information