llvm-project/clang/test/Analysis/division-by-zero-track-zero.c
Gabor Marton efa7df1682 [Analyzer] Track RValue expressions
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
2021-03-30 14:48:38 +02:00

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}}
}