Issue 61517
Summary CSA evaluates ` clang_analyzer_eval(((a())<(0))||((a())==(0)));` to be TRUE, but function `a()` is a unknown function.
Labels new issue
Assignees
Reporter Geoffrey1014
     CSA evaluates ` clang_analyzer_eval(((a())<(0))||((a())==(0)));`  and `clang_analyzer_eval((((a())>=(0))&&((a())!=(0)))==false);` to be TRUE, but function `a()` is a unknown function.

Compileration options: --analyze -Xclang -analyzer-config  -Xclang  eagerly-assume=false    -Xclang -analyzer-stats     -Xclang -analyzer-checker=core,debug.ExprInspection

See it live: https://godbolt.org/z/dYdqG9fzG

Input:
```c
#include "stdio.h"
#include <stdint.h>
#include <stdbool.h>
void clang_analyzer_eval(int a){}
int a(); 

uint16_t b() {
    if (a() <= 0) {
      clang_analyzer_eval((a() <= 0)==true);
 clang_analyzer_eval(((a())<(0))||((a())==(0)));
 clang_analyzer_eval(((a())+0)<=((0)+0));
 clang_analyzer_eval(((a())+0)<=((0)+1));
 clang_analyzer_eval(((a())+1)<=((0)+1));
 clang_analyzer_eval(((a())+0)<=((0)+2));
 clang_analyzer_eval(((a())+1)<=((0)+2));
 clang_analyzer_eval(((a())+2)<=((0)+2));
 clang_analyzer_eval(((a())-0)<=((0)-0));
      clang_analyzer_eval((!(a() <= 0))==false);
 clang_analyzer_eval((((a())>=(0))&&((a())!=(0)))==false);
 clang_analyzer_eval(true);
      ;
    }
}
```

CSA Output:
```bash
<source>:9:7: warning: UNKNOWN [debug.ExprInspection]
      clang_analyzer_eval((a() <= 0)==true);
 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<source>:10:7: warning: TRUE [debug.ExprInspection]
 clang_analyzer_eval(((a())<(0))||((a())==(0)));
 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<source>:10:7: warning: UNKNOWN [debug.ExprInspection]
 clang_analyzer_eval(((a())<(0))||((a())==(0)));
 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<source>:11:7: warning: UNKNOWN [debug.ExprInspection]
 clang_analyzer_eval(((a())+0)<=((0)+0));
 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<source>:12:7: warning: UNKNOWN [debug.ExprInspection]
      clang_analyzer_eval(((a())+0)<=((0)+1));
 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<source>:13:7: warning: UNKNOWN [debug.ExprInspection]
 clang_analyzer_eval(((a())+1)<=((0)+1));
 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<source>:14:7: warning: UNKNOWN [debug.ExprInspection]
      clang_analyzer_eval(((a())+0)<=((0)+2));
 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<source>:15:7: warning: UNKNOWN [debug.ExprInspection]
 clang_analyzer_eval(((a())+1)<=((0)+2));
 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<source>:16:7: warning: UNKNOWN [debug.ExprInspection]
      clang_analyzer_eval(((a())+2)<=((0)+2));
 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<source>:17:7: warning: UNKNOWN [debug.ExprInspection]
 clang_analyzer_eval(((a())-0)<=((0)-0));
 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<source>:18:7: warning: UNKNOWN [debug.ExprInspection]
      clang_analyzer_eval((!(a() <= 0))==false);
 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<source>:19:7: warning: TRUE [debug.ExprInspection]
 clang_analyzer_eval((((a())>=(0))&&((a())!=(0)))==false);
 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<source>:19:7: warning: UNKNOWN [debug.ExprInspection]
 clang_analyzer_eval((((a())>=(0))&&((a())!=(0)))==false);
 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<source>:20:7: warning: TRUE [debug.ExprInspection]
 clang_analyzer_eval(true);

```

_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to