mirror of
https://github.com/github/codeql.git
synced 2026-04-27 17:55:19 +02:00
C++: More tests for RedundantNullCheckSimple
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
void test1(int *p) {
|
||||
void test_simple_bad(int *p) {
|
||||
int x;
|
||||
x = *p;
|
||||
if (p == nullptr) { // BAD
|
||||
@@ -6,7 +6,7 @@ void test1(int *p) {
|
||||
}
|
||||
}
|
||||
|
||||
void test2(int *p) {
|
||||
void test_not_same_basic_block(int *p) {
|
||||
int x = *p;
|
||||
if (x > 100)
|
||||
return;
|
||||
@@ -31,3 +31,41 @@ bool check_curslist(ContainsIntPtr *cip) {
|
||||
// an AliasedDefinition instruction.
|
||||
return *cip->intPtr != nullptr; // GOOD
|
||||
}
|
||||
|
||||
void test_no_single_dominator(int *p, bool b) {
|
||||
int x;
|
||||
if (b) {
|
||||
x = *p;
|
||||
} else {
|
||||
x = *p;
|
||||
}
|
||||
if (p == nullptr) { // BAD [NOT DETECTED]
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
int test_postdominator_same_bb(int *p) {
|
||||
int b = (p == nullptr); // BAD
|
||||
// This dereference is a postdominator of the null check, meaning that all
|
||||
// paths from the check to the function exit will pass through it.
|
||||
return *p + b;
|
||||
}
|
||||
|
||||
int test_postdominator(int *p) {
|
||||
int b = (p == nullptr); // BAD [NOT DETECTED]
|
||||
|
||||
if (b) b++; // This line breaks up the basic block
|
||||
|
||||
// This dereference is a postdominator of the null check, meaning that all
|
||||
// paths from the check to the function exit will pass through it.
|
||||
return *p + b;
|
||||
}
|
||||
|
||||
int test_inverted_logic(int *p) {
|
||||
if (p == nullptr) { // BAD [NOT DETECTED]
|
||||
// The check above should probably have been `!=` instead of `==`.
|
||||
return *p;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
| RedundantNullCheckSimple.cpp:4:7:4:7 | Load: p | This null check is redundant because the value is $@ in any case | RedundantNullCheckSimple.cpp:3:7:3:8 | Load: * ... | dereferenced here |
|
||||
| RedundantNullCheckSimple.cpp:13:8:13:8 | Load: p | This null check is redundant because the value is $@ in any case | RedundantNullCheckSimple.cpp:10:11:10:12 | Load: * ... | dereferenced here |
|
||||
| RedundantNullCheckSimple.cpp:48:12:48:12 | Load: p | This null check is redundant because the value is $@ in any case | RedundantNullCheckSimple.cpp:51:10:51:11 | Load: * ... | dereferenced here |
|
||||
|
||||
Reference in New Issue
Block a user