mirror of
https://github.com/github/codeql.git
synced 2025-12-21 03:06:31 +01:00
[CPP-418] Some assignments and call expressions. Some could not be divined.
This commit is contained in:
committed by
Geoffrey White
parent
113481d096
commit
ecb700c8f4
@@ -30,6 +30,9 @@ abstract class Assignment extends Operation {
|
||||
|
||||
/**
|
||||
* A non-overloaded assignment operation with the operator `=`.
|
||||
* ```
|
||||
* a = b;
|
||||
* ```
|
||||
*/
|
||||
class AssignExpr extends Assignment, @assignexpr {
|
||||
override string getOperator() { result = "=" }
|
||||
@@ -55,6 +58,9 @@ abstract class AssignArithmeticOperation extends AssignOperation { }
|
||||
|
||||
/**
|
||||
* A non-overloaded `+=` assignment expression on a non-pointer lvalue.
|
||||
* ```
|
||||
* a += b;
|
||||
* ```
|
||||
*/
|
||||
class AssignAddExpr extends AssignArithmeticOperation, @assignaddexpr {
|
||||
override string getCanonicalQLClass() { result = "AssignAddExpr" }
|
||||
@@ -64,6 +70,9 @@ class AssignAddExpr extends AssignArithmeticOperation, @assignaddexpr {
|
||||
|
||||
/**
|
||||
* A non-overloaded `-=` assignment expression on a non-pointer lvalue.
|
||||
* ```
|
||||
* a -= b;
|
||||
* ```
|
||||
*/
|
||||
class AssignSubExpr extends AssignArithmeticOperation, @assignsubexpr {
|
||||
override string getCanonicalQLClass() { result = "AssignSubExpr" }
|
||||
@@ -73,6 +82,9 @@ class AssignSubExpr extends AssignArithmeticOperation, @assignsubexpr {
|
||||
|
||||
/**
|
||||
* A non-overloaded `*=` assignment expression.
|
||||
* ```
|
||||
* a *= b;
|
||||
* ```
|
||||
*/
|
||||
class AssignMulExpr extends AssignArithmeticOperation, @assignmulexpr {
|
||||
override string getCanonicalQLClass() { result = "AssignMulExpr" }
|
||||
@@ -82,6 +94,9 @@ class AssignMulExpr extends AssignArithmeticOperation, @assignmulexpr {
|
||||
|
||||
/**
|
||||
* A non-overloaded `/=` assignment expression.
|
||||
* ```
|
||||
* a /= b;
|
||||
* ```
|
||||
*/
|
||||
class AssignDivExpr extends AssignArithmeticOperation, @assigndivexpr {
|
||||
override string getCanonicalQLClass() { result = "AssignDivExpr" }
|
||||
@@ -91,6 +106,9 @@ class AssignDivExpr extends AssignArithmeticOperation, @assigndivexpr {
|
||||
|
||||
/**
|
||||
* A non-overloaded `%=` assignment expression.
|
||||
* ```
|
||||
* a %= b;
|
||||
* ```
|
||||
*/
|
||||
class AssignRemExpr extends AssignArithmeticOperation, @assignremexpr {
|
||||
override string getCanonicalQLClass() { result = "AssignRemExpr" }
|
||||
@@ -105,7 +123,10 @@ class AssignRemExpr extends AssignArithmeticOperation, @assignremexpr {
|
||||
abstract class AssignBitwiseOperation extends AssignOperation { }
|
||||
|
||||
/**
|
||||
* A non-overloaded `&=` assignment expression.
|
||||
* A non-overloaded AND (`&=`) assignment expression.
|
||||
* ```
|
||||
* a &= b;
|
||||
* ```
|
||||
*/
|
||||
class AssignAndExpr extends AssignBitwiseOperation, @assignandexpr {
|
||||
override string getCanonicalQLClass() { result = "AssignAndExpr" }
|
||||
@@ -114,7 +135,10 @@ class AssignAndExpr extends AssignBitwiseOperation, @assignandexpr {
|
||||
}
|
||||
|
||||
/**
|
||||
* A non-overloaded `|=` assignment expression.
|
||||
* A non-overloaded OR (`|=`) assignment expression.
|
||||
* ```
|
||||
* a |= b;
|
||||
* ```
|
||||
*/
|
||||
class AssignOrExpr extends AssignBitwiseOperation, @assignorexpr {
|
||||
override string getCanonicalQLClass() { result = "AssignOrExpr" }
|
||||
@@ -123,7 +147,10 @@ class AssignOrExpr extends AssignBitwiseOperation, @assignorexpr {
|
||||
}
|
||||
|
||||
/**
|
||||
* A non-overloaded `^=` assignment expression.
|
||||
* A non-overloaded XOR (`^=`) assignment expression.
|
||||
* ```
|
||||
* a ^= b;
|
||||
* ```
|
||||
*/
|
||||
class AssignXorExpr extends AssignBitwiseOperation, @assignxorexpr {
|
||||
override string getCanonicalQLClass() { result = "AssignXorExpr" }
|
||||
@@ -133,6 +160,9 @@ class AssignXorExpr extends AssignBitwiseOperation, @assignxorexpr {
|
||||
|
||||
/**
|
||||
* A non-overloaded `<<=` assignment expression.
|
||||
* ```
|
||||
* a <<= b;
|
||||
* ```
|
||||
*/
|
||||
class AssignLShiftExpr extends AssignBitwiseOperation, @assignlshiftexpr {
|
||||
override string getCanonicalQLClass() { result = "AssignLShiftExpr" }
|
||||
@@ -142,6 +172,9 @@ class AssignLShiftExpr extends AssignBitwiseOperation, @assignlshiftexpr {
|
||||
|
||||
/**
|
||||
* A non-overloaded `>>=` assignment expression.
|
||||
* ```
|
||||
* a >>= b;
|
||||
* ```
|
||||
*/
|
||||
class AssignRShiftExpr extends AssignBitwiseOperation, @assignrshiftexpr {
|
||||
override string getCanonicalQLClass() { result = "AssignRShiftExpr" }
|
||||
@@ -151,6 +184,9 @@ class AssignRShiftExpr extends AssignBitwiseOperation, @assignrshiftexpr {
|
||||
|
||||
/**
|
||||
* A non-overloaded `+=` pointer assignment expression.
|
||||
* ```
|
||||
* ptr += index;
|
||||
* ```
|
||||
*/
|
||||
class AssignPointerAddExpr extends AssignOperation, @assignpaddexpr {
|
||||
override string getCanonicalQLClass() { result = "AssignPointerAddExpr" }
|
||||
@@ -160,6 +196,9 @@ class AssignPointerAddExpr extends AssignOperation, @assignpaddexpr {
|
||||
|
||||
/**
|
||||
* A non-overloaded `-=` pointer assignment expression.
|
||||
* ```
|
||||
* ptr -= index;
|
||||
* ```
|
||||
*/
|
||||
class AssignPointerSubExpr extends AssignOperation, @assignpsubexpr {
|
||||
override string getCanonicalQLClass() { result = "AssignPointerSubExpr" }
|
||||
|
||||
@@ -339,6 +339,12 @@ class OverloadedArrayExpr extends FunctionCall {
|
||||
|
||||
/**
|
||||
* A C/C++ call which is performed through a function pointer.
|
||||
*
|
||||
* In the call below, `(*funcptr)` may be simplified to just `funcptr`.
|
||||
* ```
|
||||
* extern int (*funcptr)(int a, int b);
|
||||
* int c = (*funcptr)(1, 2);
|
||||
* ```
|
||||
*/
|
||||
class ExprCall extends Call, @callexpr {
|
||||
/**
|
||||
@@ -361,6 +367,11 @@ class ExprCall extends Call, @callexpr {
|
||||
|
||||
/**
|
||||
* A C/C++ call which is performed through a variable of function pointer type.
|
||||
* ```
|
||||
* int call_via_ptr(int (*pfn)(int)) {
|
||||
* return pfn(5);
|
||||
* }
|
||||
* ```
|
||||
*/
|
||||
class VariableCall extends ExprCall {
|
||||
VariableCall() { this.getExpr() instanceof VariableAccess }
|
||||
@@ -375,6 +386,10 @@ class VariableCall extends ExprCall {
|
||||
|
||||
/**
|
||||
* A call to a constructor.
|
||||
* ```
|
||||
* struct S { S(void); }
|
||||
* S s;
|
||||
* ```
|
||||
*/
|
||||
class ConstructorCall extends FunctionCall {
|
||||
ConstructorCall() { super.getTarget() instanceof Constructor }
|
||||
@@ -386,7 +401,10 @@ class ConstructorCall extends FunctionCall {
|
||||
}
|
||||
|
||||
/**
|
||||
* A C++ `throw` expression.
|
||||
* A C++ `throw` expression.
|
||||
* ```
|
||||
* throw Exc(2);
|
||||
* ```
|
||||
*/
|
||||
class ThrowExpr extends Expr, @throw_expr {
|
||||
/**
|
||||
@@ -404,6 +422,9 @@ class ThrowExpr extends Expr, @throw_expr {
|
||||
|
||||
/**
|
||||
* A C++ `throw` expression with no argument (which causes the current exception to be re-thrown).
|
||||
* ```
|
||||
* throw;
|
||||
* ```
|
||||
*/
|
||||
class ReThrowExpr extends ThrowExpr {
|
||||
ReThrowExpr() { this.getType() instanceof VoidType }
|
||||
@@ -415,6 +436,13 @@ class ReThrowExpr extends ThrowExpr {
|
||||
|
||||
/**
|
||||
* A call to a destructor.
|
||||
* ```
|
||||
struct S { ~S(void); };
|
||||
void foo() {
|
||||
S s;
|
||||
s.~S();
|
||||
}
|
||||
* ```
|
||||
*/
|
||||
class DestructorCall extends FunctionCall {
|
||||
DestructorCall() { super.getTarget() instanceof Destructor }
|
||||
@@ -431,6 +459,11 @@ class DestructorCall extends FunctionCall {
|
||||
* For example, given a plain old data type `pod_t`, the syntax `ptr->~pod_t()` is
|
||||
* a vacuous destructor call, as `~pod_t` isn't actually a function. This can also
|
||||
* occur in instantiated templates, as `ptr->~T()` becomes vacuous when `T` is `int`.
|
||||
* ```
|
||||
* typedef int pod_t;
|
||||
* pod_t *s;
|
||||
* s->~pod_t();
|
||||
* ```
|
||||
*/
|
||||
class VacuousDestructorCall extends Expr, @vacuous_destructor_call {
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user