Skip to content

Commit fafdc1d

Browse files
committed
Rust: Add BitwiseOperation library.
1 parent 11480d2 commit fafdc1d

File tree

4 files changed

+44
-10
lines changed

4 files changed

+44
-10
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/**
2+
* Provides classes for bitwise operations.
3+
*/
4+
5+
private import codeql.rust.elements.BinaryExpr
6+
private import codeql.rust.elements.Operation
7+
8+
/**
9+
* A bitwise operation, such as `&`, `<<`, or `|=`.
10+
*/
11+
abstract private class BitwiseOperationImpl extends Operation { }
12+
13+
final class BitwiseOperation = BitwiseOperationImpl;
14+
15+
/**
16+
* A binary bitwise operation, such as `&` or `<<`.
17+
*/
18+
final class BinaryBitwiseOperation extends BinaryExpr, BitwiseOperationImpl {
19+
BinaryBitwiseOperation() { this.getOperatorName() = ["&", "|", "^", "<<", ">>"] }
20+
}
21+
22+
/**
23+
* A bitwise assignment operation, such as `|=` or `<<=`.
24+
*/
25+
final class AssignBitwiseOperation extends BinaryExpr, BitwiseOperationImpl {
26+
AssignBitwiseOperation() { this.getOperatorName() = ["&=", "|=", "^=", "<<=", ">>="] }
27+
}

rust/ql/lib/rust.qll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import codeql.files.FileSystem
66
import codeql.rust.elements.Operation
77
import codeql.rust.elements.ArithmeticOperation
88
import codeql.rust.elements.AssignmentOperation
9+
import codeql.rust.elements.BitwiseOperation
910
import codeql.rust.elements.ComparisonOperation
1011
import codeql.rust.elements.LiteralExprExt
1112
import codeql.rust.elements.LogicalOperation

rust/ql/test/library-tests/operations/Operations.ql

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,12 @@ string describe(Expr op) {
3939
op instanceof AssignArithmeticOperation and result = "AssignArithmeticOperation"
4040
or
4141
op instanceof PrefixArithmeticOperation and result = "PrefixArithmeticOperation"
42+
or
43+
op instanceof BitwiseOperation and result = "BitwiseOperation"
44+
or
45+
op instanceof BinaryBitwiseOperation and result = "BinaryBitwiseOperation"
46+
or
47+
op instanceof AssignBitwiseOperation and result = "AssignBitwiseOperation"
4248
}
4349

4450
module OperationsTest implements TestSig {

rust/ql/test/library-tests/operations/test.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,16 +37,16 @@ fn test_operations(
3737
!a; // $ Operation Op=! Operands=1 PrefixExpr LogicalOperation
3838

3939
// bitwise operations
40-
x & y; // $ Operation Op=& Operands=2 BinaryExpr
41-
x | y; // $ Operation Op=| Operands=2 BinaryExpr
42-
x ^ y; // $ Operation Op=^ Operands=2 BinaryExpr
43-
x << y; // $ Operation Op=<< Operands=2 BinaryExpr
44-
x >> y; // $ Operation Op=>> Operands=2 BinaryExpr
45-
x &= y; // $ Operation Op=&= Operands=2 AssignmentOperation BinaryExpr
46-
x |= y; // $ Operation Op=|= Operands=2 AssignmentOperation BinaryExpr
47-
x ^= y; // $ Operation Op=^= Operands=2 AssignmentOperation BinaryExpr
48-
x <<= y; // $ Operation Op=<<= Operands=2 AssignmentOperation BinaryExpr
49-
x >>= y; // $ Operation Op=>>= Operands=2 AssignmentOperation BinaryExpr
40+
x & y; // $ Operation Op=& Operands=2 BinaryExpr BitwiseOperation BinaryBitwiseOperation
41+
x | y; // $ Operation Op=| Operands=2 BinaryExpr BitwiseOperation BinaryBitwiseOperation
42+
x ^ y; // $ Operation Op=^ Operands=2 BinaryExpr BitwiseOperation BinaryBitwiseOperation
43+
x << y; // $ Operation Op=<< Operands=2 BinaryExpr BitwiseOperation BinaryBitwiseOperation
44+
x >> y; // $ Operation Op=>> Operands=2 BinaryExpr BitwiseOperation BinaryBitwiseOperation
45+
x &= y; // $ Operation Op=&= Operands=2 AssignmentOperation BinaryExpr BitwiseOperation AssignBitwiseOperation
46+
x |= y; // $ Operation Op=|= Operands=2 AssignmentOperation BinaryExpr BitwiseOperation AssignBitwiseOperation
47+
x ^= y; // $ Operation Op=^= Operands=2 AssignmentOperation BinaryExpr BitwiseOperation AssignBitwiseOperation
48+
x <<= y; // $ Operation Op=<<= Operands=2 AssignmentOperation BinaryExpr BitwiseOperation AssignBitwiseOperation
49+
x >>= y; // $ Operation Op=>>= Operands=2 AssignmentOperation BinaryExpr BitwiseOperation AssignBitwiseOperation
5050

5151
// miscellaneous expressions that might be operations
5252
*ptr; // $ Operation Op=* Operands=1 PrefixExpr

0 commit comments

Comments
 (0)