Range of remainder of two positive integers, wrong and missing assertions.
ID0002129: **This issue was created automatically from Mantis Issue 2129. Further discussion may take place here.** --- | **Id** | **Project** | **Category** | **View** | **Due Date** | **Updated** | | --- | --- | --- | --- | --- | --- | | ID0002129 | Frama-C | Plug-in > wp | public | 2015-06-04 | 2015-06-29 | | | | | | | | | --- | --- | --- | --- | --- | --- | | **Reporter** | loic | **Assigned To** | correnson | **Resolution** | no change required | | **Priority** | normal | **Severity** | major | **Reproducibility** | always | | **Platform** | Linux | **OS** | Ubuntu | **OS Version** | 12.04.5 LTS | | **Product Version** | - | **Target Version** | - | **Fixed in Version** | - | ### Description : Nitrogen-20111001 alt-ergo 0.94 False negative and false positive int the following code. /*@ requires 0 <= n; */ void modulo_testcase_0(unsigned n) { /*@ ghost unsigned q = n / 2; */ /*@ ghost unsigned r = n % 2; */ /*@ assert 0 <= n; */ /* OK */ /*@ assert n == 2*q + r; */ /* OK */ /*@ assert 0 <= q; */ /* OK */ /*@ assert 0 <= r < 1; */ /* NOK, cannot be proven */ } /*@ requires 0 <= n && 0 < d; */ void modulo_testcase_1(int n, int d) { /*@ assert n <= d * (n / d); */ /* NOK, cannot be proven */ /*@ ghost int q = n / d; */ /* OK */ /*@ ghost int r = n % d; */ /* OK */ /*@ assert 0 <= r < 1; */ /* NOK, r < d is true */ /*@ assert n <= d * (n / d); */ /* OK */ } ### Steps To Reproduce : frama-c -wp -wp-rte on the code above (also as attachment). ## Attachments - [modulo_testcase.c](/uploads/b725efd4758f124867c970e99d059011/modulo_testcase.c)
issue