According to a Bugzilla ticket, ArrayBoundCheckerV2 produces a false-positive report.
This patch adds a test demonstrating the current flawed behavior.
Also adds several similar test cases just to be on the safe side.
Details
Diff Detail
- Repository
- rG LLVM Github Monorepo
Event Timeline
clang/test/Analysis/out-of-bounds-false-positive.c | ||
---|---|---|
34 | Hmm, this seems to be quite redundant with the size_t tests. Why is it not enough to have test for one unsigned type? Same comment applies to the tests with the signed types. |
clang/test/Analysis/out-of-bounds-false-positive.c | ||
---|---|---|
34 | In the current implementation - and in any implementation of the checker logic will have to deal with integral-promotion during the simplification of the array indexer expression and the given extent. In fact, this resulted in the bug, which this patch-stack aims to fix. |
clang/test/Analysis/out-of-bounds-false-positive.c | ||
---|---|---|
34 | Okay, makes sense. It's just very painful to have code repetitions, even in the test code. In gtest unittests we can have tests with type parameters to avoid this kind of repetition. But I guess, there is no way to get rid of this repetition in lit tests. |
clang/test/Analysis/out-of-bounds-false-positive.c | ||
---|---|---|
34 | You can imagine duplicating all of this several times, since the constant in the subscript expression could also have different types, such as: unsigned, long, unsigned long, etc. Potentially uncovering bugs. I could introduce a macro, to expand these - but IMO macros in tests ehh. probably reduces readability. |
clang/test/Analysis/out-of-bounds-false-positive.c | ||
---|---|---|
34 | Macros, ehh. Could it work if we instantiated a test function template with the types as parameters? AFAIK, we analyze all instantiations as top level. The problem seems to be with the -verify and matching the expected-warning for each instantiation... |
Hmm, this seems to be quite redundant with the size_t tests. Why is it not enough to have test for one unsigned type?
Are you trying to check for overflow errors? Then I'd expect to have indexes around UINT_MAX and so on.
Same comment applies to the tests with the signed types.