mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-27 07:16:06 +00:00

When we report an argument constraint violation, we should track those other arguments that participate in the evaluation of the violation. By default, we depend only on the argument that is constrained, however, there are some special cases like the buffer size constraint that might be encoded in another argument(s). Differential Revision: https://reviews.llvm.org/D101358
34 lines
1.5 KiB
C
34 lines
1.5 KiB
C
// Check the bugpath related to the reports.
|
|
// RUN: %clang_analyze_cc1 %s \
|
|
// RUN: -analyzer-checker=core \
|
|
// RUN: -analyzer-checker=apiModeling.StdCLibraryFunctions \
|
|
// RUN: -analyzer-checker=alpha.unix.StdCLibraryFunctionArgs \
|
|
// RUN: -analyzer-checker=debug.StdCLibraryFunctionsTester \
|
|
// RUN: -analyzer-checker=debug.ExprInspection \
|
|
// RUN: -triple x86_64-unknown-linux-gnu \
|
|
// RUN: -analyzer-output=text \
|
|
// RUN: -verify=bugpath
|
|
|
|
typedef typeof(sizeof(int)) size_t;
|
|
|
|
int __buf_size_arg_constraint(const void *, size_t);
|
|
void test_buf_size_concrete() {
|
|
char buf[3]; // bugpath-note{{'buf' initialized here}}
|
|
int s = 4; // bugpath-note{{'s' initialized to 4}}
|
|
__buf_size_arg_constraint(buf, s); // \
|
|
// bugpath-warning{{Function argument constraint is not satisfied}} \
|
|
// bugpath-note{{}} \
|
|
// bugpath-note{{Function argument constraint is not satisfied}}
|
|
}
|
|
|
|
int __buf_size_arg_constraint_mul(const void *, size_t, size_t);
|
|
void test_buf_size_concrete_with_multiplication() {
|
|
short buf[3]; // bugpath-note{{'buf' initialized here}}
|
|
int s1 = 4; // bugpath-note{{'s1' initialized to 4}}
|
|
int s2 = sizeof(short); // bugpath-note{{'s2' initialized to}}
|
|
__buf_size_arg_constraint_mul(buf, s1, s2); // \
|
|
// bugpath-warning{{Function argument constraint is not satisfied}} \
|
|
// bugpath-note{{}} \
|
|
// bugpath-note{{Function argument constraint is not satisfied}}
|
|
}
|