Skip to content

Spurious Overflow Warnings and Imprecision for Guards Involving Signed AND Unsigned Types #1296

@FungOliver

Description

@FungOliver

When comparing a signed integer with an unsigned integer and a constant in a loop. Goblint fails to parse those expressions:

In the following example:

//PARAM:  --enable ana.int.interval   --set ana.activated[+] apron   
#include <stdio.h>
#include <stdlib.h>
#include <time.h>


int main() {
   unsigned int length = 5;
   for ( int i = 0; i < length; i++) {
     if ( i < length + 3){
        assert( i < length+1);
     }
   }
   return 0;
}

I get the following error:

./goblint --enable warn.debug --enable dbg.regression --html  --enable ana.int.interval   --set ana.activated[+] apron    --html tests/regression/98-relational-array-oob/01-random-simple.c
[Warning][Integer > Overflow][CWE-191] Unsigned integer underflow (tests/regression/98-relational-array-oob/01-random-simple.c:9:8-9:36)
[Warning][Integer > Overflow][CWE-191] Unsigned integer underflow (tests/regression/98-relational-array-oob/01-random-simple.c:10:10-10:24)
[Debug][Analyzer] **Invariant failed: expression (unsigned int )i < length + 3U" not understood. (tests/regression/98-relational-array-oob/01-random-simple.c:10:10-10:24)
[Warning][Integer > Overflow][CWE-191] Unsigned integer underflow (tests/regression/98-relational-array-oob/01-random-simple.c:11:9-11:30)
[Debug][Analyzer] Invariant failed: expression "(unsigned int )i < length + 1U" not understood. (tests/regression/98-relational-array-oob/01-random-simple.c:11:9-11:30)
[Warning][Assert] Assertion " i < length+1" is unknown. Expected: SUCCESS -> failed (tests/regression/98-relational-array-oob/01-random-simple.c:11:9-11:30)
[Warning][Integer > Overflow][CWE-190] Signed integer overflow (tests/regression/98-relational-array-oob/01-random-simple.c:9:14-9:19)
[Info][Deadcode] Logical lines of code (LLoC) summary:
  live: 6
  dead: 0
  total lines: 6
Writing xml to temp. file: /tmp/ocaml3807a8tmp
Time needed: 505 ms
See result/index.xml

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions