llvm / llvm-project

The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.
http://llvm.org
Other
28.81k stars 11.91k forks source link

alpha.deadcode.UnreachableCode trivial false positive #39260

Open Abramo-Bagnara opened 5 years ago

Abramo-Bagnara commented 5 years ago
Bugzilla Link 39913
Version trunk
OS Linux
CC @devincoughlin

Extended Description

The typescript below shows the wrong warning and the proof it is wrong:

abramo@igor:/tmp$ cat p.c

include

void g() { printf("reached\n"); }

void f(int btn) { static int x = 0; if (btn == x) { if (btn != 0) { g(); } else { x = 2; } } }

abramo@igor:/tmp$ cat q.c extern void f(int); int main() { f(0); f(2); } abramo@igor:/tmp$ scan-build-8 -enable-checker alpha.deadcode.UnreachableCode gcc p.c q.c scan-build: Using '/usr/lib/llvm-8/bin/clang' for static analysis p.c:11:9: warning: This statement is never executed g(); ^ 1 warning generated. scan-build: 1 bug found. scan-build: Run 'scan-view /tmp/scan-build-2018-12-07-124451-16359-1' to examine bug reports. abramo@igor:/tmp$ ./a.out reached

Abramo-Bagnara commented 5 years ago

assigned to @devincoughlin