mirror of
https://github.com/github/codeql.git
synced 2026-04-27 01:35:13 +02:00
Merge pull request #326 from rdmarsh2/rdmarsh/cpp/dead-code-goto
C++: new query for dead code after goto or break
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
| test.cpp:2:2:2:12 | goto ... | This statement makes $@ unreachable. | test.cpp:3:2:3:5 | ExprStmt | ExprStmt |
|
||||
| test.cpp:9:3:9:8 | break; | This statement makes $@ unreachable. | test.cpp:10:3:10:6 | ExprStmt | ExprStmt |
|
||||
| test.cpp:37:3:37:8 | break; | This statement makes $@ unreachable. | test.cpp:38:3:38:11 | return ... | return ... |
|
||||
@@ -0,0 +1 @@
|
||||
Critical/DeadCodeGoto.ql
|
||||
83
cpp/ql/test/query-tests/Critical/DeadCodeGoto/test.cpp
Normal file
83
cpp/ql/test/query-tests/Critical/DeadCodeGoto/test.cpp
Normal file
@@ -0,0 +1,83 @@
|
||||
int test1(int x) {
|
||||
goto label; // BAD
|
||||
x++;
|
||||
label: return x;
|
||||
}
|
||||
|
||||
int test2(int x) {
|
||||
do {
|
||||
break; // BAD
|
||||
x++;
|
||||
} while(false);
|
||||
return x;
|
||||
}
|
||||
|
||||
int test3(int x) {
|
||||
goto label; // GOOD
|
||||
label: x++;
|
||||
return x;
|
||||
}
|
||||
|
||||
int test4(int x) {
|
||||
goto label; // GOOD
|
||||
do {
|
||||
label: x++;
|
||||
} while(false);
|
||||
return x;
|
||||
}
|
||||
|
||||
int test5(int x, int y) {
|
||||
switch(y) {
|
||||
case 0:
|
||||
break; // GOOD
|
||||
case 1:
|
||||
goto label; // GOOD
|
||||
break;
|
||||
case 2:
|
||||
break; // BAD
|
||||
return x;
|
||||
case 3:
|
||||
return x;
|
||||
break; // GOOD
|
||||
case 4:
|
||||
goto label; // GOOD
|
||||
case 5:
|
||||
goto label;; // GOOD
|
||||
default:
|
||||
x++;
|
||||
}
|
||||
label:
|
||||
return x;
|
||||
}
|
||||
|
||||
void test6(int x, int cond) {
|
||||
if (cond) {
|
||||
x++;
|
||||
} else goto end; // GOOD
|
||||
x++;
|
||||
end:
|
||||
}
|
||||
|
||||
void test7(int x, int cond) {
|
||||
if (cond)
|
||||
{
|
||||
goto target;
|
||||
}
|
||||
goto somewhere_else; // GOOD
|
||||
while (x < 10) // not dead code
|
||||
{
|
||||
target:
|
||||
x++;
|
||||
}
|
||||
somewhere_else:
|
||||
switch (1)
|
||||
{
|
||||
goto end;
|
||||
while (x < 10) // not dead code
|
||||
{
|
||||
case 1:
|
||||
x++;
|
||||
} break;
|
||||
}
|
||||
end:
|
||||
}
|
||||
Reference in New Issue
Block a user