mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-17 10:46:37 +00:00

It makes sense to track rvalue expressions in the case of special concrete integer values. The most notable special value is zero (later we may find other values). By tracking the origin of 0, we can provide a better explanation for users e.g. in case of division by 0 warnings. When the divisor is a product of a multiplication then now we can show which operand (or both) was (were) zero and why. Differential Revision: https://reviews.llvm.org/D99344
12 lines
458 B
C
12 lines
458 B
C
// RUN: %clang_analyze_cc1 -analyzer-checker=core \
|
|
// RUN: -analyzer-output=text \
|
|
// RUN: -verify %s
|
|
|
|
int track_mul_lhs_0(int x, int y) {
|
|
int p0 = x < 0; // expected-note {{Assuming 'x' is >= 0}} \
|
|
// expected-note {{'p0' initialized to 0}}
|
|
int div = p0 * y; // expected-note {{'div' initialized to 0}}
|
|
return 1 / div; // expected-note {{Division by zero}} \
|
|
// expected-warning {{Division by zero}}
|
|
}
|