mirror of
https://github.com/github/codeql.git
synced 2025-12-22 19:56:32 +01:00
Merge pull request #14060 from MathiasVP/fix-compare-where-assign-meant-fp
C++: Fix FP in `cpp/compare-where-assign-meant`
This commit is contained in:
@@ -16,6 +16,7 @@ import cpp
|
|||||||
from ExprInVoidContext op
|
from ExprInVoidContext op
|
||||||
where
|
where
|
||||||
not op.isUnevaluated() and
|
not op.isUnevaluated() and
|
||||||
|
not inMacroExpansion(op) and
|
||||||
(
|
(
|
||||||
op instanceof EQExpr
|
op instanceof EQExpr
|
||||||
or
|
or
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
category: minorAnalysis
|
||||||
|
---
|
||||||
|
* The "Comparison where assignment was intended" query (`cpp/compare-where-assign-meant`) no longer reports comparisons that appear in macro expansions.
|
||||||
@@ -6,3 +6,5 @@
|
|||||||
| test.cpp:39:23:39:28 | ... == ... | This '==' operator has no effect. The assignment ('=') operator was probably intended. |
|
| test.cpp:39:23:39:28 | ... == ... | This '==' operator has no effect. The assignment ('=') operator was probably intended. |
|
||||||
| test.cpp:42:23:42:28 | ... == ... | This '==' operator has no effect. The assignment ('=') operator was probably intended. |
|
| test.cpp:42:23:42:28 | ... == ... | This '==' operator has no effect. The assignment ('=') operator was probably intended. |
|
||||||
| test.cpp:51:13:51:13 | call to operator== | This '==' operator has no effect. The assignment ('=') operator was probably intended. |
|
| test.cpp:51:13:51:13 | call to operator== | This '==' operator has no effect. The assignment ('=') operator was probably intended. |
|
||||||
|
| test.cpp:72:3:72:8 | ... == ... | This '==' operator has no effect. The assignment ('=') operator was probably intended. |
|
||||||
|
| test.cpp:73:3:73:12 | ... == ... | This '==' operator has no effect. The assignment ('=') operator was probably intended. |
|
||||||
|
|||||||
@@ -61,3 +61,14 @@ template<typename T1, typename T2>
|
|||||||
auto sfinaeTrick(T1 x1, T2 x2) -> decltype(x1 == x2, bool()) { // GOOD
|
auto sfinaeTrick(T1 x1, T2 x2) -> decltype(x1 == x2, bool()) { // GOOD
|
||||||
return x1 == x2;
|
return x1 == x2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void report_error(const char*);
|
||||||
|
|
||||||
|
#define DOES_NOT_THROW(E) do { try { E; } catch (...) { report_error(""); } } while(0)
|
||||||
|
#define ID(X) (X)
|
||||||
|
|
||||||
|
void test_inside_macro_expansion(int x, int y) {
|
||||||
|
DOES_NOT_THROW(x == y); // GOOD
|
||||||
|
x == y; // BAD
|
||||||
|
x == ID(y); // BAD
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user