mirror of
https://github.com/github/codeql.git
synced 2026-05-26 00:51:25 +02:00
Compare commits
10 Commits
mbg/csharp
...
dbartol/al
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1ef9769e38 | ||
|
|
b692b1b282 | ||
|
|
cedfeee6d7 | ||
|
|
7ff376b346 | ||
|
|
4a131dd8f1 | ||
|
|
f9fa52fe77 | ||
|
|
1ff6c4c090 | ||
|
|
5bd58f044e | ||
|
|
0e766aa99b | ||
|
|
7430fde8c6 |
2
Cargo.lock
generated
2
Cargo.lock
generated
@@ -390,13 +390,11 @@ dependencies = [
|
||||
"ra_ap_base_db",
|
||||
"ra_ap_hir",
|
||||
"ra_ap_hir_def",
|
||||
"ra_ap_hir_expand",
|
||||
"ra_ap_ide_db",
|
||||
"ra_ap_load-cargo",
|
||||
"ra_ap_parser",
|
||||
"ra_ap_paths",
|
||||
"ra_ap_project_model",
|
||||
"ra_ap_span",
|
||||
"ra_ap_syntax",
|
||||
"ra_ap_vfs",
|
||||
"rust-extractor-macros",
|
||||
|
||||
@@ -23,7 +23,7 @@ bazel_dep(name = "bazel_skylib", version = "1.6.1")
|
||||
bazel_dep(name = "abseil-cpp", version = "20240116.0", repo_name = "absl")
|
||||
bazel_dep(name = "nlohmann_json", version = "3.11.3", repo_name = "json")
|
||||
bazel_dep(name = "fmt", version = "10.0.0")
|
||||
bazel_dep(name = "rules_kotlin", version = "2.0.0-codeql.1")
|
||||
bazel_dep(name = "rules_kotlin", version = "1.9.4-codeql.1")
|
||||
bazel_dep(name = "gazelle", version = "0.38.0")
|
||||
bazel_dep(name = "rules_dotnet", version = "0.15.1")
|
||||
bazel_dep(name = "googletest", version = "1.14.0.bcr.1")
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
---
|
||||
category: minorAnalysis
|
||||
---
|
||||
* Added taint flow model for `fopen` and related functions.
|
||||
@@ -80,8 +80,6 @@ private Declaration getAnEnclosingDeclaration(Locatable ast) {
|
||||
or
|
||||
result = ast.(Parameter).getFunction()
|
||||
or
|
||||
result = ast.(Parameter).getCatchBlock().getEnclosingFunction()
|
||||
or
|
||||
result = ast.(Expr).getEnclosingDeclaration()
|
||||
or
|
||||
result = ast.(Initializer).getDeclaration()
|
||||
@@ -512,22 +510,6 @@ class DeclStmtNode extends StmtNode {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A node representing a `Handler`.
|
||||
*/
|
||||
class HandlerNode extends ChildStmtNode {
|
||||
Handler handler;
|
||||
|
||||
HandlerNode() { handler = stmt }
|
||||
|
||||
override BaseAstNode getChildInternal(int childIndex) {
|
||||
result = super.getChildInternal(childIndex)
|
||||
or
|
||||
childIndex = -1 and
|
||||
result.getAst() = handler.getParameter()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A node representing a `Parameter`.
|
||||
*/
|
||||
@@ -772,8 +754,6 @@ private predicate namedStmtChildPredicates(Locatable s, Element e, string pred)
|
||||
or
|
||||
s.(ConstexprIfStmt).getElse() = e and pred = "getElse()"
|
||||
or
|
||||
s.(Handler).getParameter() = e and pred = "getParameter()"
|
||||
or
|
||||
s.(IfStmt).getInitialization() = e and pred = "getInitialization()"
|
||||
or
|
||||
s.(IfStmt).getCondition() = e and pred = "getCondition()"
|
||||
|
||||
@@ -683,8 +683,13 @@ private Overlap getExtentOverlap(MemoryLocation0 def, MemoryLocation0 use) {
|
||||
def.getVirtualVariable() = use.getVirtualVariable() and
|
||||
def instanceof EntireAllocationMemoryLocation and
|
||||
(
|
||||
// EntireAllocationMemoryLocation exactly overlaps itself.
|
||||
use instanceof EntireAllocationMemoryLocation and
|
||||
// EntireAllocationMemoryLocation exactly overlaps any EntireAllocationMemoryLocation for the
|
||||
// same allocation. Checking the allocation, rather than the memory location itself, ensures
|
||||
// that we get the right relationship between the "must" and "may" memory locations for that
|
||||
// allocation.
|
||||
// Note that if one of the locations is a "may" access, the overlap will be downgraded to
|
||||
// `MustTotallyOverlap` or `MayPartialOverlap` in `getOverlap()`.
|
||||
use.(EntireAllocationMemoryLocation).getAnAllocation() = def.getAnAllocation() and
|
||||
result instanceof MustExactlyOverlap
|
||||
or
|
||||
not use instanceof EntireAllocationMemoryLocation and
|
||||
|
||||
@@ -7,7 +7,7 @@ import semmle.code.cpp.models.interfaces.Alias
|
||||
import semmle.code.cpp.models.interfaces.SideEffect
|
||||
|
||||
/** The function `fopen` and friends. */
|
||||
private class Fopen extends Function, AliasFunction, SideEffectFunction, TaintFunction {
|
||||
private class Fopen extends Function, AliasFunction, SideEffectFunction {
|
||||
Fopen() {
|
||||
this.hasGlobalOrStdName(["fopen", "fopen_s", "freopen"])
|
||||
or
|
||||
@@ -47,22 +47,4 @@ private class Fopen extends Function, AliasFunction, SideEffectFunction, TaintFu
|
||||
i = 0 and
|
||||
buffer = true
|
||||
}
|
||||
|
||||
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
|
||||
(
|
||||
this.hasGlobalOrStdName(["fopen", "freopen"]) or
|
||||
this.hasGlobalName(["_wfopen", "_fsopen", "_wfsopen"])
|
||||
) and
|
||||
input.isParameterDeref(0) and
|
||||
output.isReturnValueDeref()
|
||||
or
|
||||
// The out parameter is a pointer to a `FILE*`.
|
||||
this.hasGlobalOrStdName("fopen_s") and
|
||||
input.isParameterDeref(1) and
|
||||
output.isParameterDeref(0, 2)
|
||||
or
|
||||
this.hasGlobalName(["_open", "_wopen"]) and
|
||||
input.isParameterDeref(0) and
|
||||
output.isReturnValue()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -870,8 +870,6 @@ Throw.cpp:
|
||||
# 8| Type = [BoolType] bool
|
||||
# 8| ValueCategory = prvalue
|
||||
# 12| getChild(1): [Handler] <handler>
|
||||
# 12| getParameter(): [Parameter] e
|
||||
# 12| Type = [PointerType] E *
|
||||
# 12| getBlock(): [CatchBlock] { ... }
|
||||
# 13| getStmt(0): [ExprStmt] ExprStmt
|
||||
# 13| getExpr(): [ReThrowExpr] re-throw exception
|
||||
|
||||
@@ -6584,16 +6584,6 @@ WARNING: module 'TaintTracking' has been deprecated and may be removed in future
|
||||
| taint.cpp:767:21:767:24 | ref arg path | taint.cpp:768:8:768:11 | path | |
|
||||
| taint.cpp:768:8:768:11 | path | taint.cpp:768:7:768:11 | * ... | |
|
||||
| taint.cpp:778:37:778:42 | call to source | taint.cpp:779:7:779:9 | obj | |
|
||||
| taint.cpp:785:23:785:28 | source | taint.cpp:785:23:785:28 | source | |
|
||||
| taint.cpp:785:23:785:28 | source | taint.cpp:786:18:786:23 | source | |
|
||||
| taint.cpp:785:23:785:28 | source | taint.cpp:790:15:790:20 | source | |
|
||||
| taint.cpp:786:12:786:16 | call to fopen | taint.cpp:787:7:787:7 | f | |
|
||||
| taint.cpp:786:18:786:23 | source | taint.cpp:786:12:786:16 | call to fopen | TAINT |
|
||||
| taint.cpp:789:8:789:9 | f2 | taint.cpp:790:11:790:12 | f2 | |
|
||||
| taint.cpp:789:8:789:9 | f2 | taint.cpp:791:7:791:8 | f2 | |
|
||||
| taint.cpp:790:10:790:12 | ref arg & ... | taint.cpp:790:11:790:12 | f2 [inner post update] | |
|
||||
| taint.cpp:790:10:790:12 | ref arg & ... | taint.cpp:791:7:791:8 | f2 | |
|
||||
| taint.cpp:790:11:790:12 | f2 | taint.cpp:790:10:790:12 | & ... | |
|
||||
| vector.cpp:16:43:16:49 | source1 | vector.cpp:17:26:17:32 | source1 | |
|
||||
| vector.cpp:16:43:16:49 | source1 | vector.cpp:31:38:31:44 | source1 | |
|
||||
| vector.cpp:17:21:17:33 | call to vector | vector.cpp:19:14:19:14 | v | |
|
||||
|
||||
@@ -777,16 +777,4 @@ TaintInheritingContentObject source(bool);
|
||||
void test_TaintInheritingContent() {
|
||||
TaintInheritingContentObject obj = source(true);
|
||||
sink(obj.flowFromObject); // $ ir MISSING: ast
|
||||
}
|
||||
|
||||
FILE* fopen(const char*, const char*);
|
||||
int fopen_s(FILE** pFile, const char *filename, const char *mode);
|
||||
|
||||
void fopen_test(char* source) {
|
||||
FILE* f = fopen(source, "r");
|
||||
sink(f); // $ ast,ir
|
||||
|
||||
FILE* f2;
|
||||
fopen_s(&f2, source, "r");
|
||||
sink(f2); // $ ast,ir
|
||||
}
|
||||
@@ -9055,8 +9055,6 @@ ir.cpp:
|
||||
# 733| Value = [Literal] 7
|
||||
# 733| ValueCategory = prvalue
|
||||
# 735| getChild(1): [Handler] <handler>
|
||||
# 735| getParameter(): [Parameter] s
|
||||
# 735| Type = [PointerType] const char *
|
||||
# 735| getBlock(): [CatchBlock] { ... }
|
||||
# 736| getStmt(0): [ExprStmt] ExprStmt
|
||||
# 736| getExpr(): [ThrowExpr] throw ...
|
||||
@@ -9069,8 +9067,6 @@ ir.cpp:
|
||||
# 736| Type = [PointerType] const char *
|
||||
# 736| ValueCategory = prvalue(load)
|
||||
# 738| getChild(2): [Handler] <handler>
|
||||
# 738| getParameter(): [Parameter] e
|
||||
# 738| Type = [LValueReferenceType] const String &
|
||||
# 738| getBlock(): [CatchBlock] { ... }
|
||||
# 740| getChild(3): [Handler] <handler>
|
||||
# 740| getBlock(): [CatchAnyBlock] { ... }
|
||||
@@ -12856,8 +12852,6 @@ ir.cpp:
|
||||
# 1200| Value = [Literal] 7
|
||||
# 1200| ValueCategory = prvalue
|
||||
# 1202| getChild(1): [Handler] <handler>
|
||||
# 1202| getParameter(): [Parameter] s
|
||||
# 1202| Type = [PointerType] const char *
|
||||
# 1202| getBlock(): [CatchBlock] { ... }
|
||||
# 1203| getStmt(0): [ExprStmt] ExprStmt
|
||||
# 1203| getExpr(): [ThrowExpr] throw ...
|
||||
@@ -12870,8 +12864,6 @@ ir.cpp:
|
||||
# 1203| Type = [PointerType] const char *
|
||||
# 1203| ValueCategory = prvalue(load)
|
||||
# 1205| getChild(2): [Handler] <handler>
|
||||
# 1205| getParameter(): [Parameter] e
|
||||
# 1205| Type = [LValueReferenceType] const String &
|
||||
# 1205| getBlock(): [CatchBlock] { ... }
|
||||
# 1207| getStmt(1): [ReturnStmt] return ...
|
||||
# 1211| [TopLevelFunction] void VectorTypes(int)
|
||||
@@ -20594,8 +20586,6 @@ ir.cpp:
|
||||
# 2281| Type = [Struct] String
|
||||
# 2281| ValueCategory = lvalue
|
||||
# 2282| getChild(1): [Handler] <handler>
|
||||
# 2282| getParameter(): [Parameter] s
|
||||
# 2282| Type = [PointerType] const char *
|
||||
# 2282| getBlock(): [CatchBlock] { ... }
|
||||
# 2283| getStmt(0): [ExprStmt] ExprStmt
|
||||
# 2283| getExpr(): [ThrowExpr] throw ...
|
||||
@@ -20608,8 +20598,6 @@ ir.cpp:
|
||||
# 2283| Type = [PointerType] const char *
|
||||
# 2283| ValueCategory = prvalue(load)
|
||||
# 2285| getChild(2): [Handler] <handler>
|
||||
# 2285| getParameter(): [Parameter] e
|
||||
# 2285| Type = [LValueReferenceType] const String &
|
||||
# 2285| getBlock(): [CatchBlock] { ... }
|
||||
# 2287| getChild(3): [Handler] <handler>
|
||||
# 2287| getBlock(): [CatchAnyBlock] { ... }
|
||||
@@ -22857,8 +22845,6 @@ ir.cpp:
|
||||
# 2537| Value = [Literal] 42
|
||||
# 2537| ValueCategory = prvalue
|
||||
# 2539| getChild(1): [Handler] <handler>
|
||||
# 2539| getParameter(): [Parameter] (unnamed parameter 0)
|
||||
# 2539| Type = [PlainCharType] char
|
||||
# 2539| getBlock(): [CatchBlock] { ... }
|
||||
# 2541| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor
|
||||
# 2541| Type = [VoidType] void
|
||||
|
||||
@@ -2200,3 +2200,65 @@ ssa.cpp:
|
||||
# 439| r439_15(glval<int>) = VariableAddress[#temp439:13] :
|
||||
# 439| m439_16(int) = Store[#temp439:13] : &:r439_15, r439_14
|
||||
#-----| Goto -> Block 1
|
||||
|
||||
# 442| void NonEscapingParams(void*, void*)
|
||||
# 442| Block 0
|
||||
# 442| v442_1(void) = EnterFunction :
|
||||
# 442| m442_2(unknown) = AliasedDefinition :
|
||||
# 442| m442_3(unknown) = InitializeNonLocal :
|
||||
# 442| m442_4(unknown) = Chi : total:m442_2, partial:m442_3
|
||||
# 442| r442_5(glval<void *>) = VariableAddress[a] :
|
||||
# 442| m442_6(void *) = InitializeParameter[a] : &:r442_5
|
||||
# 442| r442_7(void *) = Load[a] : &:r442_5, m442_6
|
||||
# 442| m442_8(unknown) = InitializeIndirection[a] : &:r442_7
|
||||
# 442| r442_9(glval<void *>) = VariableAddress[b] :
|
||||
# 442| m442_10(void *) = InitializeParameter[b] : &:r442_9
|
||||
# 442| r442_11(void *) = Load[b] : &:r442_9, m442_10
|
||||
# 442| m442_12(unknown) = InitializeIndirection[b] : &:r442_11
|
||||
# 444| v444_1(void) = NoOp :
|
||||
# 442| v442_13(void) = ReturnIndirection[a] : &:r442_7, m442_8
|
||||
# 442| v442_14(void) = ReturnIndirection[b] : &:r442_11, m442_12
|
||||
# 442| v442_15(void) = ReturnVoid :
|
||||
# 442| v442_16(void) = AliasedUse : m442_3
|
||||
# 442| v442_17(void) = ExitFunction :
|
||||
|
||||
# 446| void EscapingParams(void*, void*)
|
||||
# 446| Block 0
|
||||
# 446| v446_1(void) = EnterFunction :
|
||||
# 446| m446_2(unknown) = AliasedDefinition :
|
||||
# 446| m446_3(unknown) = InitializeNonLocal :
|
||||
# 446| m446_4(unknown) = Chi : total:m446_2, partial:m446_3
|
||||
# 446| r446_5(glval<void *>) = VariableAddress[a] :
|
||||
# 446| m446_6(void *) = InitializeParameter[a] : &:r446_5
|
||||
# 446| r446_7(void *) = Load[a] : &:r446_5, m446_6
|
||||
# 446| m446_8(unknown) = InitializeIndirection[a] : &:r446_7
|
||||
# 446| m446_9(unknown) = Chi : total:m446_4, partial:m446_8
|
||||
# 446| r446_10(glval<void *>) = VariableAddress[b] :
|
||||
# 446| m446_11(void *) = InitializeParameter[b] : &:r446_10
|
||||
# 446| r446_12(void *) = Load[b] : &:r446_10, m446_11
|
||||
# 446| m446_13(unknown) = InitializeIndirection[b] : &:r446_12
|
||||
# 446| m446_14(unknown) = Chi : total:m446_9, partial:m446_13
|
||||
# 448| r448_1(glval<unknown>) = FunctionAddress[Escape] :
|
||||
# 448| r448_2(glval<void *>) = VariableAddress[a] :
|
||||
# 448| r448_3(void *) = Load[a] : &:r448_2, m446_6
|
||||
# 448| v448_4(void) = Call[Escape] : func:r448_1, 0:r448_3
|
||||
# 448| m448_5(unknown) = ^CallSideEffect : ~m446_14
|
||||
# 448| m448_6(unknown) = Chi : total:m446_14, partial:m448_5
|
||||
# 448| v448_7(void) = ^BufferReadSideEffect[0] : &:r448_3, ~m448_6
|
||||
# 448| m448_8(unknown) = ^BufferMayWriteSideEffect[0] : &:r448_3
|
||||
# 448| m448_9(unknown) = Chi : total:m448_6, partial:m448_8
|
||||
# 449| r449_1(glval<unknown>) = FunctionAddress[Escape] :
|
||||
# 449| r449_2(glval<void *>) = VariableAddress[b] :
|
||||
# 449| r449_3(void *) = Load[b] : &:r449_2, m446_11
|
||||
# 449| v449_4(void) = Call[Escape] : func:r449_1, 0:r449_3
|
||||
# 449| m449_5(unknown) = ^CallSideEffect : ~m448_9
|
||||
# 449| m449_6(unknown) = Chi : total:m448_9, partial:m449_5
|
||||
# 449| v449_7(void) = ^BufferReadSideEffect[0] : &:r449_3, ~m449_6
|
||||
# 449| m449_8(unknown) = ^BufferMayWriteSideEffect[0] : &:r449_3
|
||||
# 449| m449_9(unknown) = Chi : total:m449_6, partial:m449_8
|
||||
# 450| v450_1(void) = NoOp :
|
||||
# 446| v446_15(void) = ReturnIndirection[a] : &:r446_7, ~m449_9
|
||||
# 446| v446_16(void) = ReturnIndirection[b] : &:r446_12, ~m449_9
|
||||
# 446| v446_17(void) = ReturnVoid :
|
||||
# 446| v446_18(void) = AliasedUse : ~m449_9
|
||||
# 446| v446_19(void) = ExitFunction :
|
||||
|
||||
@@ -2200,3 +2200,65 @@ ssa.cpp:
|
||||
# 439| r439_15(glval<int>) = VariableAddress[#temp439:13] :
|
||||
# 439| m439_16(int) = Store[#temp439:13] : &:r439_15, r439_14
|
||||
#-----| Goto -> Block 1
|
||||
|
||||
# 442| void NonEscapingParams(void*, void*)
|
||||
# 442| Block 0
|
||||
# 442| v442_1(void) = EnterFunction :
|
||||
# 442| m442_2(unknown) = AliasedDefinition :
|
||||
# 442| m442_3(unknown) = InitializeNonLocal :
|
||||
# 442| m442_4(unknown) = Chi : total:m442_2, partial:m442_3
|
||||
# 442| r442_5(glval<void *>) = VariableAddress[a] :
|
||||
# 442| m442_6(void *) = InitializeParameter[a] : &:r442_5
|
||||
# 442| r442_7(void *) = Load[a] : &:r442_5, m442_6
|
||||
# 442| m442_8(unknown) = InitializeIndirection[a] : &:r442_7
|
||||
# 442| r442_9(glval<void *>) = VariableAddress[b] :
|
||||
# 442| m442_10(void *) = InitializeParameter[b] : &:r442_9
|
||||
# 442| r442_11(void *) = Load[b] : &:r442_9, m442_10
|
||||
# 442| m442_12(unknown) = InitializeIndirection[b] : &:r442_11
|
||||
# 444| v444_1(void) = NoOp :
|
||||
# 442| v442_13(void) = ReturnIndirection[a] : &:r442_7, m442_8
|
||||
# 442| v442_14(void) = ReturnIndirection[b] : &:r442_11, m442_12
|
||||
# 442| v442_15(void) = ReturnVoid :
|
||||
# 442| v442_16(void) = AliasedUse : m442_3
|
||||
# 442| v442_17(void) = ExitFunction :
|
||||
|
||||
# 446| void EscapingParams(void*, void*)
|
||||
# 446| Block 0
|
||||
# 446| v446_1(void) = EnterFunction :
|
||||
# 446| m446_2(unknown) = AliasedDefinition :
|
||||
# 446| m446_3(unknown) = InitializeNonLocal :
|
||||
# 446| m446_4(unknown) = Chi : total:m446_2, partial:m446_3
|
||||
# 446| r446_5(glval<void *>) = VariableAddress[a] :
|
||||
# 446| m446_6(void *) = InitializeParameter[a] : &:r446_5
|
||||
# 446| r446_7(void *) = Load[a] : &:r446_5, m446_6
|
||||
# 446| m446_8(unknown) = InitializeIndirection[a] : &:r446_7
|
||||
# 446| m446_9(unknown) = Chi : total:m446_4, partial:m446_8
|
||||
# 446| r446_10(glval<void *>) = VariableAddress[b] :
|
||||
# 446| m446_11(void *) = InitializeParameter[b] : &:r446_10
|
||||
# 446| r446_12(void *) = Load[b] : &:r446_10, m446_11
|
||||
# 446| m446_13(unknown) = InitializeIndirection[b] : &:r446_12
|
||||
# 446| m446_14(unknown) = Chi : total:m446_9, partial:m446_13
|
||||
# 448| r448_1(glval<unknown>) = FunctionAddress[Escape] :
|
||||
# 448| r448_2(glval<void *>) = VariableAddress[a] :
|
||||
# 448| r448_3(void *) = Load[a] : &:r448_2, m446_6
|
||||
# 448| v448_4(void) = Call[Escape] : func:r448_1, 0:r448_3
|
||||
# 448| m448_5(unknown) = ^CallSideEffect : ~m446_14
|
||||
# 448| m448_6(unknown) = Chi : total:m446_14, partial:m448_5
|
||||
# 448| v448_7(void) = ^BufferReadSideEffect[0] : &:r448_3, ~m448_6
|
||||
# 448| m448_8(unknown) = ^BufferMayWriteSideEffect[0] : &:r448_3
|
||||
# 448| m448_9(unknown) = Chi : total:m448_6, partial:m448_8
|
||||
# 449| r449_1(glval<unknown>) = FunctionAddress[Escape] :
|
||||
# 449| r449_2(glval<void *>) = VariableAddress[b] :
|
||||
# 449| r449_3(void *) = Load[b] : &:r449_2, m446_11
|
||||
# 449| v449_4(void) = Call[Escape] : func:r449_1, 0:r449_3
|
||||
# 449| m449_5(unknown) = ^CallSideEffect : ~m448_9
|
||||
# 449| m449_6(unknown) = Chi : total:m448_9, partial:m449_5
|
||||
# 449| v449_7(void) = ^BufferReadSideEffect[0] : &:r449_3, ~m449_6
|
||||
# 449| m449_8(unknown) = ^BufferMayWriteSideEffect[0] : &:r449_3
|
||||
# 449| m449_9(unknown) = Chi : total:m449_6, partial:m449_8
|
||||
# 450| v450_1(void) = NoOp :
|
||||
# 446| v446_15(void) = ReturnIndirection[a] : &:r446_7, ~m449_9
|
||||
# 446| v446_16(void) = ReturnIndirection[b] : &:r446_12, ~m449_9
|
||||
# 446| v446_17(void) = ReturnVoid :
|
||||
# 446| v446_18(void) = AliasedUse : ~m449_9
|
||||
# 446| v446_19(void) = ExitFunction :
|
||||
|
||||
526
cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.expected
Normal file
526
cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.expected
Normal file
@@ -0,0 +1,526 @@
|
||||
| ssa.c:3:14:3:16 | foo | ssa.c:3:14:3:16 | foo | MustExactlyOverlap |
|
||||
| ssa.c:3:14:3:16 | foo | ssa.c:3:14:3:16 | foo[0..4)<int> | MustTotallyOverlap |
|
||||
| ssa.c:3:14:3:16 | foo | ssa.c:3:14:3:16 | foo[4..8)<int> | MustTotallyOverlap |
|
||||
| ssa.c:3:14:3:16 | foo[0..4)<int> | ssa.c:3:14:3:16 | foo | MayPartiallyOverlap |
|
||||
| ssa.c:3:14:3:16 | foo[0..4)<int> | ssa.c:3:14:3:16 | foo[0..4)<int> | MustExactlyOverlap |
|
||||
| ssa.c:3:14:3:16 | foo[4..8)<int> | ssa.c:3:14:3:16 | foo | MayPartiallyOverlap |
|
||||
| ssa.c:3:14:3:16 | foo[4..8)<int> | ssa.c:3:14:3:16 | foo[4..8)<int> | MustExactlyOverlap |
|
||||
| ssa.c:7:7:7:7 | x | ssa.c:7:7:7:7 | x | MustExactlyOverlap |
|
||||
| ssa.c:7:7:7:7 | x | ssa.c:7:7:7:7 | x<int> | MustTotallyOverlap |
|
||||
| ssa.c:7:7:7:7 | x<int> | ssa.c:7:7:7:7 | x | MustTotallyOverlap |
|
||||
| ssa.c:7:7:7:7 | x<int> | ssa.c:7:7:7:7 | x<int> | MustExactlyOverlap |
|
||||
| ssa.c:12:15:12:17 | foo | ssa.c:12:15:12:17 | foo | MustExactlyOverlap |
|
||||
| ssa.c:12:15:12:17 | foo | ssa.c:12:15:12:17 | foo[0..4)<int> | MustTotallyOverlap |
|
||||
| ssa.c:12:15:12:17 | foo | ssa.c:12:15:12:17 | foo[4..8)<int> | MustTotallyOverlap |
|
||||
| ssa.c:12:15:12:17 | foo[0..4)<int> | ssa.c:12:15:12:17 | foo | MayPartiallyOverlap |
|
||||
| ssa.c:12:15:12:17 | foo[0..4)<int> | ssa.c:12:15:12:17 | foo[0..4)<int> | MustExactlyOverlap |
|
||||
| ssa.c:12:15:12:17 | foo[4..8)<int> | ssa.c:12:15:12:17 | foo | MayPartiallyOverlap |
|
||||
| ssa.c:12:15:12:17 | foo[4..8)<int> | ssa.c:12:15:12:17 | foo[4..8)<int> | MustExactlyOverlap |
|
||||
| ssa.c:14:15:14:25 | foo_swapped | ssa.c:14:15:14:25 | foo_swapped | MustExactlyOverlap |
|
||||
| ssa.c:14:15:14:25 | foo_swapped | ssa.c:14:15:14:25 | foo_swapped[0..4)<int> | MustTotallyOverlap |
|
||||
| ssa.c:14:15:14:25 | foo_swapped | ssa.c:14:15:14:25 | foo_swapped[4..8)<int> | MustTotallyOverlap |
|
||||
| ssa.c:14:15:14:25 | foo_swapped[0..4)<int> | ssa.c:14:15:14:25 | foo_swapped | MayPartiallyOverlap |
|
||||
| ssa.c:14:15:14:25 | foo_swapped[0..4)<int> | ssa.c:14:15:14:25 | foo_swapped[0..4)<int> | MustExactlyOverlap |
|
||||
| ssa.c:14:15:14:25 | foo_swapped[4..8)<int> | ssa.c:14:15:14:25 | foo_swapped | MayPartiallyOverlap |
|
||||
| ssa.c:14:15:14:25 | foo_swapped[4..8)<int> | ssa.c:14:15:14:25 | foo_swapped[4..8)<int> | MustExactlyOverlap |
|
||||
| ssa.c:18:7:18:7 | x | ssa.c:18:7:18:7 | x | MustExactlyOverlap |
|
||||
| ssa.c:18:7:18:7 | x | ssa.c:18:7:18:7 | x[0..4)<int> | MustTotallyOverlap |
|
||||
| ssa.c:18:7:18:7 | x | ssa.c:18:7:18:7 | x[4..8)<int> | MustTotallyOverlap |
|
||||
| ssa.c:18:7:18:7 | x[0..4)<int> | ssa.c:18:7:18:7 | x | MayPartiallyOverlap |
|
||||
| ssa.c:18:7:18:7 | x[0..4)<int> | ssa.c:18:7:18:7 | x[0..4)<int> | MustExactlyOverlap |
|
||||
| ssa.c:18:7:18:7 | x[4..8)<int> | ssa.c:18:7:18:7 | x | MayPartiallyOverlap |
|
||||
| ssa.c:18:7:18:7 | x[4..8)<int> | ssa.c:18:7:18:7 | x[4..8)<int> | MustExactlyOverlap |
|
||||
| ssa.c:20:7:20:7 | y | ssa.c:20:7:20:7 | y | MustExactlyOverlap |
|
||||
| ssa.c:20:7:20:7 | y | ssa.c:20:7:20:7 | y[0..4)<int> | MustTotallyOverlap |
|
||||
| ssa.c:20:7:20:7 | y | ssa.c:20:7:20:7 | y[4..8)<int> | MustTotallyOverlap |
|
||||
| ssa.c:20:7:20:7 | y[0..4)<int> | ssa.c:20:7:20:7 | y | MayPartiallyOverlap |
|
||||
| ssa.c:20:7:20:7 | y[0..4)<int> | ssa.c:20:7:20:7 | y[0..4)<int> | MustExactlyOverlap |
|
||||
| ssa.c:20:7:20:7 | y[4..8)<int> | ssa.c:20:7:20:7 | y | MayPartiallyOverlap |
|
||||
| ssa.c:20:7:20:7 | y[4..8)<int> | ssa.c:20:7:20:7 | y[4..8)<int> | MustExactlyOverlap |
|
||||
| ssa.c:29:28:29:28 | f | ssa.c:29:28:29:28 | f | MustExactlyOverlap |
|
||||
| ssa.c:29:28:29:28 | f | ssa.c:29:28:29:28 | f[0..4)<int> | MustTotallyOverlap |
|
||||
| ssa.c:29:28:29:28 | f | ssa.c:29:28:29:28 | f[4..8)<int> | MustTotallyOverlap |
|
||||
| ssa.c:29:28:29:28 | f | ssa.c:29:28:29:28 | f[8..12)<int> | MustTotallyOverlap |
|
||||
| ssa.c:29:28:29:28 | f[0..4)<int> | ssa.c:29:28:29:28 | f | MayPartiallyOverlap |
|
||||
| ssa.c:29:28:29:28 | f[0..4)<int> | ssa.c:29:28:29:28 | f[0..4)<int> | MustExactlyOverlap |
|
||||
| ssa.c:29:28:29:28 | f[4..8)<int> | ssa.c:29:28:29:28 | f | MayPartiallyOverlap |
|
||||
| ssa.c:29:28:29:28 | f[4..8)<int> | ssa.c:29:28:29:28 | f[4..8)<int> | MustExactlyOverlap |
|
||||
| ssa.c:29:28:29:28 | f[8..12)<int> | ssa.c:29:28:29:28 | f | MayPartiallyOverlap |
|
||||
| ssa.c:29:28:29:28 | f[8..12)<int> | ssa.c:29:28:29:28 | f[8..12)<int> | MustExactlyOverlap |
|
||||
| ssa.cpp:13:23:13:23 | *p | ssa.cpp:13:23:13:23 | *p | MustExactlyOverlap |
|
||||
| ssa.cpp:13:23:13:23 | *p | ssa.cpp:13:23:13:23 | *p[0..4)<int> | MustTotallyOverlap |
|
||||
| ssa.cpp:13:23:13:23 | *p | ssa.cpp:13:23:13:23 | *p[4..8)<int> | MustTotallyOverlap |
|
||||
| ssa.cpp:13:23:13:23 | *p | ssa.cpp:13:23:13:23 | ?*p | MustTotallyOverlap |
|
||||
| ssa.cpp:13:23:13:23 | *p[0..4)<int> | ssa.cpp:13:23:13:23 | *p | MayPartiallyOverlap |
|
||||
| ssa.cpp:13:23:13:23 | *p[0..4)<int> | ssa.cpp:13:23:13:23 | *p[0..4)<int> | MustExactlyOverlap |
|
||||
| ssa.cpp:13:23:13:23 | *p[0..4)<int> | ssa.cpp:13:23:13:23 | ?*p | MayPartiallyOverlap |
|
||||
| ssa.cpp:13:23:13:23 | *p[4..8)<int> | ssa.cpp:13:23:13:23 | *p | MayPartiallyOverlap |
|
||||
| ssa.cpp:13:23:13:23 | *p[4..8)<int> | ssa.cpp:13:23:13:23 | *p[4..8)<int> | MustExactlyOverlap |
|
||||
| ssa.cpp:13:23:13:23 | *p[4..8)<int> | ssa.cpp:13:23:13:23 | ?*p | MayPartiallyOverlap |
|
||||
| ssa.cpp:13:23:13:23 | ?*p | ssa.cpp:13:23:13:23 | *p | MayPartiallyOverlap |
|
||||
| ssa.cpp:13:23:13:23 | ?*p | ssa.cpp:13:23:13:23 | *p[0..4)<int> | MayPartiallyOverlap |
|
||||
| ssa.cpp:13:23:13:23 | ?*p | ssa.cpp:13:23:13:23 | *p[4..8)<int> | MayPartiallyOverlap |
|
||||
| ssa.cpp:13:23:13:23 | ?*p | ssa.cpp:13:23:13:23 | ?*p | MayPartiallyOverlap |
|
||||
| ssa.cpp:68:38:68:38 | *p | ssa.cpp:68:38:68:38 | *p | MustExactlyOverlap |
|
||||
| ssa.cpp:68:38:68:38 | *p | ssa.cpp:68:38:68:38 | *p[?..?)<char> | MustTotallyOverlap |
|
||||
| ssa.cpp:68:38:68:38 | *p | ssa.cpp:68:38:68:38 | ?*p | MustTotallyOverlap |
|
||||
| ssa.cpp:68:38:68:38 | *p[?..?)<char> | ssa.cpp:68:38:68:38 | *p | MayPartiallyOverlap |
|
||||
| ssa.cpp:68:38:68:38 | *p[?..?)<char> | ssa.cpp:68:38:68:38 | *p[?..?)<char> | MayPartiallyOverlap |
|
||||
| ssa.cpp:68:38:68:38 | *p[?..?)<char> | ssa.cpp:68:38:68:38 | ?*p | MayPartiallyOverlap |
|
||||
| ssa.cpp:68:38:68:38 | ?*p | ssa.cpp:68:38:68:38 | *p | MayPartiallyOverlap |
|
||||
| ssa.cpp:68:38:68:38 | ?*p | ssa.cpp:68:38:68:38 | *p[?..?)<char> | MayPartiallyOverlap |
|
||||
| ssa.cpp:68:38:68:38 | ?*p | ssa.cpp:68:38:68:38 | ?*p | MayPartiallyOverlap |
|
||||
| ssa.cpp:95:38:95:38 | ?a[0..?)<unknown> | ssa.cpp:95:38:95:38 | ?a[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:95:38:95:38 | ?a[0..?)<unknown> | ssa.cpp:95:38:95:38 | a | MayPartiallyOverlap |
|
||||
| ssa.cpp:95:38:95:38 | ?a[0..?)<unknown> | ssa.cpp:95:38:95:38 | a[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:95:38:95:38 | a | ssa.cpp:95:38:95:38 | ?a[0..?)<unknown> | MustTotallyOverlap |
|
||||
| ssa.cpp:95:38:95:38 | a | ssa.cpp:95:38:95:38 | a | MustExactlyOverlap |
|
||||
| ssa.cpp:95:38:95:38 | a | ssa.cpp:95:38:95:38 | a[0..?)<unknown> | MustTotallyOverlap |
|
||||
| ssa.cpp:95:38:95:38 | a[0..?)<unknown> | ssa.cpp:95:38:95:38 | ?a[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:95:38:95:38 | a[0..?)<unknown> | ssa.cpp:95:38:95:38 | a | MayPartiallyOverlap |
|
||||
| ssa.cpp:95:38:95:38 | a[0..?)<unknown> | ssa.cpp:95:38:95:38 | a[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:100:31:100:31 | a | ssa.cpp:100:31:100:31 | a | MustExactlyOverlap |
|
||||
| ssa.cpp:100:31:100:31 | a | ssa.cpp:100:31:100:31 | a[0..4)<int> | MustTotallyOverlap |
|
||||
| ssa.cpp:100:31:100:31 | a | ssa.cpp:100:31:100:31 | a[4..8)<int> | MustTotallyOverlap |
|
||||
| ssa.cpp:100:31:100:31 | a[0..4)<int> | ssa.cpp:100:31:100:31 | a | MayPartiallyOverlap |
|
||||
| ssa.cpp:100:31:100:31 | a[0..4)<int> | ssa.cpp:100:31:100:31 | a[0..4)<int> | MustExactlyOverlap |
|
||||
| ssa.cpp:100:31:100:31 | a[4..8)<int> | ssa.cpp:100:31:100:31 | a | MayPartiallyOverlap |
|
||||
| ssa.cpp:100:31:100:31 | a[4..8)<int> | ssa.cpp:100:31:100:31 | a[4..8)<int> | MustExactlyOverlap |
|
||||
| ssa.cpp:105:38:105:38 | ?a[0..?)<unknown> | ssa.cpp:105:38:105:38 | ?a[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:105:38:105:38 | ?a[0..?)<unknown> | ssa.cpp:105:38:105:38 | a | MayPartiallyOverlap |
|
||||
| ssa.cpp:105:38:105:38 | ?a[0..?)<unknown> | ssa.cpp:105:38:105:38 | a[0..4)<int> | MayPartiallyOverlap |
|
||||
| ssa.cpp:105:38:105:38 | ?a[0..?)<unknown> | ssa.cpp:105:38:105:38 | a[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:105:38:105:38 | ?a[0..?)<unknown> | ssa.cpp:105:38:105:38 | a[4..8)<int> | MayPartiallyOverlap |
|
||||
| ssa.cpp:105:38:105:38 | a | ssa.cpp:105:38:105:38 | ?a[0..?)<unknown> | MustTotallyOverlap |
|
||||
| ssa.cpp:105:38:105:38 | a | ssa.cpp:105:38:105:38 | a | MustExactlyOverlap |
|
||||
| ssa.cpp:105:38:105:38 | a | ssa.cpp:105:38:105:38 | a[0..4)<int> | MustTotallyOverlap |
|
||||
| ssa.cpp:105:38:105:38 | a | ssa.cpp:105:38:105:38 | a[0..?)<unknown> | MustTotallyOverlap |
|
||||
| ssa.cpp:105:38:105:38 | a | ssa.cpp:105:38:105:38 | a[4..8)<int> | MustTotallyOverlap |
|
||||
| ssa.cpp:105:38:105:38 | a[0..4)<int> | ssa.cpp:105:38:105:38 | ?a[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:105:38:105:38 | a[0..4)<int> | ssa.cpp:105:38:105:38 | a | MayPartiallyOverlap |
|
||||
| ssa.cpp:105:38:105:38 | a[0..4)<int> | ssa.cpp:105:38:105:38 | a[0..4)<int> | MustExactlyOverlap |
|
||||
| ssa.cpp:105:38:105:38 | a[0..4)<int> | ssa.cpp:105:38:105:38 | a[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:105:38:105:38 | a[0..?)<unknown> | ssa.cpp:105:38:105:38 | ?a[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:105:38:105:38 | a[0..?)<unknown> | ssa.cpp:105:38:105:38 | a | MayPartiallyOverlap |
|
||||
| ssa.cpp:105:38:105:38 | a[0..?)<unknown> | ssa.cpp:105:38:105:38 | a[0..4)<int> | MayPartiallyOverlap |
|
||||
| ssa.cpp:105:38:105:38 | a[0..?)<unknown> | ssa.cpp:105:38:105:38 | a[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:105:38:105:38 | a[0..?)<unknown> | ssa.cpp:105:38:105:38 | a[4..8)<int> | MayPartiallyOverlap |
|
||||
| ssa.cpp:105:38:105:38 | a[4..8)<int> | ssa.cpp:105:38:105:38 | ?a[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:105:38:105:38 | a[4..8)<int> | ssa.cpp:105:38:105:38 | a | MayPartiallyOverlap |
|
||||
| ssa.cpp:105:38:105:38 | a[4..8)<int> | ssa.cpp:105:38:105:38 | a[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:105:38:105:38 | a[4..8)<int> | ssa.cpp:105:38:105:38 | a[4..8)<int> | MustExactlyOverlap |
|
||||
| ssa.cpp:112:9:112:9 | a | ssa.cpp:112:9:112:9 | a | MustExactlyOverlap |
|
||||
| ssa.cpp:112:9:112:9 | a | ssa.cpp:112:9:112:9 | a[0..4)<int> | MustTotallyOverlap |
|
||||
| ssa.cpp:112:9:112:9 | a | ssa.cpp:112:9:112:9 | a[4..8)<int> | MustTotallyOverlap |
|
||||
| ssa.cpp:112:9:112:9 | a[0..4)<int> | ssa.cpp:112:9:112:9 | a | MayPartiallyOverlap |
|
||||
| ssa.cpp:112:9:112:9 | a[0..4)<int> | ssa.cpp:112:9:112:9 | a[0..4)<int> | MustExactlyOverlap |
|
||||
| ssa.cpp:112:9:112:9 | a[4..8)<int> | ssa.cpp:112:9:112:9 | a | MayPartiallyOverlap |
|
||||
| ssa.cpp:112:9:112:9 | a[4..8)<int> | ssa.cpp:112:9:112:9 | a[4..8)<int> | MustExactlyOverlap |
|
||||
| ssa.cpp:117:9:117:9 | ?a[0..?)<unknown> | ssa.cpp:117:9:117:9 | ?a[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:117:9:117:9 | ?a[0..?)<unknown> | ssa.cpp:117:9:117:9 | a | MayPartiallyOverlap |
|
||||
| ssa.cpp:117:9:117:9 | ?a[0..?)<unknown> | ssa.cpp:117:9:117:9 | a[0..4)<int> | MayPartiallyOverlap |
|
||||
| ssa.cpp:117:9:117:9 | ?a[0..?)<unknown> | ssa.cpp:117:9:117:9 | a[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:117:9:117:9 | ?a[0..?)<unknown> | ssa.cpp:117:9:117:9 | a[4..8)<int> | MayPartiallyOverlap |
|
||||
| ssa.cpp:117:9:117:9 | a | ssa.cpp:117:9:117:9 | ?a[0..?)<unknown> | MustTotallyOverlap |
|
||||
| ssa.cpp:117:9:117:9 | a | ssa.cpp:117:9:117:9 | a | MustExactlyOverlap |
|
||||
| ssa.cpp:117:9:117:9 | a | ssa.cpp:117:9:117:9 | a[0..4)<int> | MustTotallyOverlap |
|
||||
| ssa.cpp:117:9:117:9 | a | ssa.cpp:117:9:117:9 | a[0..?)<unknown> | MustTotallyOverlap |
|
||||
| ssa.cpp:117:9:117:9 | a | ssa.cpp:117:9:117:9 | a[4..8)<int> | MustTotallyOverlap |
|
||||
| ssa.cpp:117:9:117:9 | a[0..4)<int> | ssa.cpp:117:9:117:9 | ?a[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:117:9:117:9 | a[0..4)<int> | ssa.cpp:117:9:117:9 | a | MayPartiallyOverlap |
|
||||
| ssa.cpp:117:9:117:9 | a[0..4)<int> | ssa.cpp:117:9:117:9 | a[0..4)<int> | MustExactlyOverlap |
|
||||
| ssa.cpp:117:9:117:9 | a[0..4)<int> | ssa.cpp:117:9:117:9 | a[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:117:9:117:9 | a[0..?)<unknown> | ssa.cpp:117:9:117:9 | ?a[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:117:9:117:9 | a[0..?)<unknown> | ssa.cpp:117:9:117:9 | a | MayPartiallyOverlap |
|
||||
| ssa.cpp:117:9:117:9 | a[0..?)<unknown> | ssa.cpp:117:9:117:9 | a[0..4)<int> | MayPartiallyOverlap |
|
||||
| ssa.cpp:117:9:117:9 | a[0..?)<unknown> | ssa.cpp:117:9:117:9 | a[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:117:9:117:9 | a[0..?)<unknown> | ssa.cpp:117:9:117:9 | a[4..8)<int> | MayPartiallyOverlap |
|
||||
| ssa.cpp:117:9:117:9 | a[4..8)<int> | ssa.cpp:117:9:117:9 | ?a[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:117:9:117:9 | a[4..8)<int> | ssa.cpp:117:9:117:9 | a | MayPartiallyOverlap |
|
||||
| ssa.cpp:117:9:117:9 | a[4..8)<int> | ssa.cpp:117:9:117:9 | a[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:117:9:117:9 | a[4..8)<int> | ssa.cpp:117:9:117:9 | a[4..8)<int> | MustExactlyOverlap |
|
||||
| ssa.cpp:123:9:123:9 | a | ssa.cpp:123:9:123:9 | a | MustExactlyOverlap |
|
||||
| ssa.cpp:123:9:123:9 | a | ssa.cpp:123:9:123:9 | a[0..4)<int> | MustTotallyOverlap |
|
||||
| ssa.cpp:123:9:123:9 | a | ssa.cpp:123:9:123:9 | a[4..8)<int> | MustTotallyOverlap |
|
||||
| ssa.cpp:123:9:123:9 | a[0..4)<int> | ssa.cpp:123:9:123:9 | a | MayPartiallyOverlap |
|
||||
| ssa.cpp:123:9:123:9 | a[0..4)<int> | ssa.cpp:123:9:123:9 | a[0..4)<int> | MustExactlyOverlap |
|
||||
| ssa.cpp:123:9:123:9 | a[4..8)<int> | ssa.cpp:123:9:123:9 | a | MayPartiallyOverlap |
|
||||
| ssa.cpp:123:9:123:9 | a[4..8)<int> | ssa.cpp:123:9:123:9 | a[4..8)<int> | MustExactlyOverlap |
|
||||
| ssa.cpp:135:9:135:9 | a | ssa.cpp:135:9:135:9 | a | MustExactlyOverlap |
|
||||
| ssa.cpp:135:9:135:9 | a | ssa.cpp:135:9:135:9 | a[0..4)<int> | MustTotallyOverlap |
|
||||
| ssa.cpp:135:9:135:9 | a | ssa.cpp:135:9:135:9 | a[4..8)<int> | MustTotallyOverlap |
|
||||
| ssa.cpp:135:9:135:9 | a[0..4)<int> | ssa.cpp:135:9:135:9 | a | MayPartiallyOverlap |
|
||||
| ssa.cpp:135:9:135:9 | a[0..4)<int> | ssa.cpp:135:9:135:9 | a[0..4)<int> | MustExactlyOverlap |
|
||||
| ssa.cpp:135:9:135:9 | a[4..8)<int> | ssa.cpp:135:9:135:9 | a | MayPartiallyOverlap |
|
||||
| ssa.cpp:135:9:135:9 | a[4..8)<int> | ssa.cpp:135:9:135:9 | a[4..8)<int> | MustExactlyOverlap |
|
||||
| ssa.cpp:146:9:146:9 | a | ssa.cpp:146:9:146:9 | a | MustExactlyOverlap |
|
||||
| ssa.cpp:146:9:146:9 | a | ssa.cpp:146:9:146:9 | a[0..4)<int> | MustTotallyOverlap |
|
||||
| ssa.cpp:146:9:146:9 | a | ssa.cpp:146:9:146:9 | a[4..8)<int> | MustTotallyOverlap |
|
||||
| ssa.cpp:146:9:146:9 | a[0..4)<int> | ssa.cpp:146:9:146:9 | a | MayPartiallyOverlap |
|
||||
| ssa.cpp:146:9:146:9 | a[0..4)<int> | ssa.cpp:146:9:146:9 | a[0..4)<int> | MustExactlyOverlap |
|
||||
| ssa.cpp:146:9:146:9 | a[4..8)<int> | ssa.cpp:146:9:146:9 | a | MayPartiallyOverlap |
|
||||
| ssa.cpp:146:9:146:9 | a[4..8)<int> | ssa.cpp:146:9:146:9 | a[4..8)<int> | MustExactlyOverlap |
|
||||
| ssa.cpp:157:8:157:8 | a | ssa.cpp:157:8:157:8 | a | MustExactlyOverlap |
|
||||
| ssa.cpp:157:8:157:8 | a | ssa.cpp:157:8:157:8 | a[0..4)<int> | MustTotallyOverlap |
|
||||
| ssa.cpp:157:8:157:8 | a | ssa.cpp:157:8:157:8 | a[0..8)<Point> | MustTotallyOverlap |
|
||||
| ssa.cpp:157:8:157:8 | a | ssa.cpp:157:8:157:8 | a[8..16)<Point> | MustTotallyOverlap |
|
||||
| ssa.cpp:157:8:157:8 | a[0..4)<int> | ssa.cpp:157:8:157:8 | a | MayPartiallyOverlap |
|
||||
| ssa.cpp:157:8:157:8 | a[0..4)<int> | ssa.cpp:157:8:157:8 | a[0..4)<int> | MustExactlyOverlap |
|
||||
| ssa.cpp:157:8:157:8 | a[0..4)<int> | ssa.cpp:157:8:157:8 | a[0..8)<Point> | MayPartiallyOverlap |
|
||||
| ssa.cpp:157:8:157:8 | a[0..8)<Point> | ssa.cpp:157:8:157:8 | a | MayPartiallyOverlap |
|
||||
| ssa.cpp:157:8:157:8 | a[0..8)<Point> | ssa.cpp:157:8:157:8 | a[0..4)<int> | MustTotallyOverlap |
|
||||
| ssa.cpp:157:8:157:8 | a[0..8)<Point> | ssa.cpp:157:8:157:8 | a[0..8)<Point> | MustExactlyOverlap |
|
||||
| ssa.cpp:157:8:157:8 | a[8..16)<Point> | ssa.cpp:157:8:157:8 | a | MayPartiallyOverlap |
|
||||
| ssa.cpp:157:8:157:8 | a[8..16)<Point> | ssa.cpp:157:8:157:8 | a[8..16)<Point> | MustExactlyOverlap |
|
||||
| ssa.cpp:171:28:171:28 | w | ssa.cpp:171:28:171:28 | w | MustExactlyOverlap |
|
||||
| ssa.cpp:171:28:171:28 | w | ssa.cpp:171:28:171:28 | w<int> | MustTotallyOverlap |
|
||||
| ssa.cpp:171:28:171:28 | w<int> | ssa.cpp:171:28:171:28 | w | MustTotallyOverlap |
|
||||
| ssa.cpp:171:28:171:28 | w<int> | ssa.cpp:171:28:171:28 | w<int> | MustExactlyOverlap |
|
||||
| ssa.cpp:179:18:179:18 | *p | ssa.cpp:179:18:179:18 | *p | MustExactlyOverlap |
|
||||
| ssa.cpp:179:18:179:18 | *p | ssa.cpp:179:18:179:18 | *p[0..4)<int> | MustTotallyOverlap |
|
||||
| ssa.cpp:179:18:179:18 | *p | ssa.cpp:179:18:179:18 | ?*p | MustTotallyOverlap |
|
||||
| ssa.cpp:179:18:179:18 | *p[0..4)<int> | ssa.cpp:179:18:179:18 | *p | MayPartiallyOverlap |
|
||||
| ssa.cpp:179:18:179:18 | *p[0..4)<int> | ssa.cpp:179:18:179:18 | *p[0..4)<int> | MustExactlyOverlap |
|
||||
| ssa.cpp:179:18:179:18 | *p[0..4)<int> | ssa.cpp:179:18:179:18 | ?*p | MayPartiallyOverlap |
|
||||
| ssa.cpp:179:18:179:18 | ?*p | ssa.cpp:179:18:179:18 | *p | MayPartiallyOverlap |
|
||||
| ssa.cpp:179:18:179:18 | ?*p | ssa.cpp:179:18:179:18 | *p[0..4)<int> | MayPartiallyOverlap |
|
||||
| ssa.cpp:179:18:179:18 | ?*p | ssa.cpp:179:18:179:18 | ?*p | MayPartiallyOverlap |
|
||||
| ssa.cpp:184:46:184:46 | *a | ssa.cpp:184:46:184:46 | *a | MustExactlyOverlap |
|
||||
| ssa.cpp:184:46:184:46 | *a | ssa.cpp:184:46:184:46 | ?*a | MustTotallyOverlap |
|
||||
| ssa.cpp:184:46:184:46 | ?*a | ssa.cpp:184:46:184:46 | *a | MayPartiallyOverlap |
|
||||
| ssa.cpp:184:46:184:46 | ?*a | ssa.cpp:184:46:184:46 | ?*a | MayPartiallyOverlap |
|
||||
| ssa.cpp:184:63:184:63 | *b | ssa.cpp:184:63:184:63 | *b | MustExactlyOverlap |
|
||||
| ssa.cpp:184:63:184:63 | *b | ssa.cpp:184:63:184:63 | ?*b | MustTotallyOverlap |
|
||||
| ssa.cpp:184:63:184:63 | ?*b | ssa.cpp:184:63:184:63 | *b | MayPartiallyOverlap |
|
||||
| ssa.cpp:184:63:184:63 | ?*b | ssa.cpp:184:63:184:63 | ?*b | MayPartiallyOverlap |
|
||||
| ssa.cpp:184:80:184:80 | *c | ssa.cpp:184:80:184:80 | *c | MustExactlyOverlap |
|
||||
| ssa.cpp:184:80:184:80 | *c | ssa.cpp:184:80:184:80 | *c[0..4)<unsigned int> | MustTotallyOverlap |
|
||||
| ssa.cpp:184:80:184:80 | *c | ssa.cpp:184:80:184:80 | ?*c | MustTotallyOverlap |
|
||||
| ssa.cpp:184:80:184:80 | *c[0..4)<unsigned int> | ssa.cpp:184:80:184:80 | *c | MayPartiallyOverlap |
|
||||
| ssa.cpp:184:80:184:80 | *c[0..4)<unsigned int> | ssa.cpp:184:80:184:80 | *c[0..4)<unsigned int> | MustExactlyOverlap |
|
||||
| ssa.cpp:184:80:184:80 | *c[0..4)<unsigned int> | ssa.cpp:184:80:184:80 | ?*c | MayPartiallyOverlap |
|
||||
| ssa.cpp:184:80:184:80 | ?*c | ssa.cpp:184:80:184:80 | *c | MayPartiallyOverlap |
|
||||
| ssa.cpp:184:80:184:80 | ?*c | ssa.cpp:184:80:184:80 | *c[0..4)<unsigned int> | MayPartiallyOverlap |
|
||||
| ssa.cpp:184:80:184:80 | ?*c | ssa.cpp:184:80:184:80 | ?*c | MayPartiallyOverlap |
|
||||
| ssa.cpp:184:97:184:97 | *d | ssa.cpp:184:97:184:97 | *d | MustExactlyOverlap |
|
||||
| ssa.cpp:184:97:184:97 | *d | ssa.cpp:184:97:184:97 | *d[0..4)<unsigned int> | MustTotallyOverlap |
|
||||
| ssa.cpp:184:97:184:97 | *d | ssa.cpp:184:97:184:97 | ?*d | MustTotallyOverlap |
|
||||
| ssa.cpp:184:97:184:97 | *d[0..4)<unsigned int> | ssa.cpp:184:97:184:97 | *d | MayPartiallyOverlap |
|
||||
| ssa.cpp:184:97:184:97 | *d[0..4)<unsigned int> | ssa.cpp:184:97:184:97 | *d[0..4)<unsigned int> | MustExactlyOverlap |
|
||||
| ssa.cpp:184:97:184:97 | *d[0..4)<unsigned int> | ssa.cpp:184:97:184:97 | ?*d | MayPartiallyOverlap |
|
||||
| ssa.cpp:184:97:184:97 | ?*d | ssa.cpp:184:97:184:97 | *d | MayPartiallyOverlap |
|
||||
| ssa.cpp:184:97:184:97 | ?*d | ssa.cpp:184:97:184:97 | *d[0..4)<unsigned int> | MayPartiallyOverlap |
|
||||
| ssa.cpp:184:97:184:97 | ?*d | ssa.cpp:184:97:184:97 | ?*d | MayPartiallyOverlap |
|
||||
| ssa.cpp:198:25:198:28 | *str1 | ssa.cpp:198:25:198:28 | *str1 | MustExactlyOverlap |
|
||||
| ssa.cpp:198:25:198:28 | *str1 | ssa.cpp:198:25:198:28 | *str1[0..?)<unknown> | MustTotallyOverlap |
|
||||
| ssa.cpp:198:25:198:28 | *str1 | ssa.cpp:198:25:198:28 | ?*str1 | MustTotallyOverlap |
|
||||
| ssa.cpp:198:25:198:28 | *str1[0..?)<unknown> | ssa.cpp:198:25:198:28 | *str1 | MayPartiallyOverlap |
|
||||
| ssa.cpp:198:25:198:28 | *str1[0..?)<unknown> | ssa.cpp:198:25:198:28 | *str1[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:198:25:198:28 | *str1[0..?)<unknown> | ssa.cpp:198:25:198:28 | ?*str1 | MayPartiallyOverlap |
|
||||
| ssa.cpp:198:25:198:28 | ?*str1 | ssa.cpp:198:25:198:28 | *str1 | MayPartiallyOverlap |
|
||||
| ssa.cpp:198:25:198:28 | ?*str1 | ssa.cpp:198:25:198:28 | *str1[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:198:25:198:28 | ?*str1 | ssa.cpp:198:25:198:28 | ?*str1 | MayPartiallyOverlap |
|
||||
| ssa.cpp:198:37:198:40 | *str2 | ssa.cpp:198:37:198:40 | *str2 | MustExactlyOverlap |
|
||||
| ssa.cpp:198:37:198:40 | *str2 | ssa.cpp:198:37:198:40 | *str2[0..?)<unknown> | MustTotallyOverlap |
|
||||
| ssa.cpp:198:37:198:40 | *str2 | ssa.cpp:198:37:198:40 | ?*str2 | MustTotallyOverlap |
|
||||
| ssa.cpp:198:37:198:40 | *str2[0..?)<unknown> | ssa.cpp:198:37:198:40 | *str2 | MayPartiallyOverlap |
|
||||
| ssa.cpp:198:37:198:40 | *str2[0..?)<unknown> | ssa.cpp:198:37:198:40 | *str2[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:198:37:198:40 | *str2[0..?)<unknown> | ssa.cpp:198:37:198:40 | ?*str2 | MayPartiallyOverlap |
|
||||
| ssa.cpp:198:37:198:40 | ?*str2 | ssa.cpp:198:37:198:40 | *str2 | MayPartiallyOverlap |
|
||||
| ssa.cpp:198:37:198:40 | ?*str2 | ssa.cpp:198:37:198:40 | *str2[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:198:37:198:40 | ?*str2 | ssa.cpp:198:37:198:40 | ?*str2 | MayPartiallyOverlap |
|
||||
| ssa.cpp:207:27:207:27 | x | ssa.cpp:207:27:207:27 | x | MustExactlyOverlap |
|
||||
| ssa.cpp:207:27:207:27 | x | ssa.cpp:207:27:207:27 | x[0..?)<unknown> | MustTotallyOverlap |
|
||||
| ssa.cpp:207:27:207:27 | x[0..?)<unknown> | ssa.cpp:207:27:207:27 | x | MayPartiallyOverlap |
|
||||
| ssa.cpp:207:27:207:27 | x[0..?)<unknown> | ssa.cpp:207:27:207:27 | x[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:208:7:208:7 | y | ssa.cpp:208:7:208:7 | y | MustExactlyOverlap |
|
||||
| ssa.cpp:208:7:208:7 | y | ssa.cpp:208:7:208:7 | y[0..?)<unknown> | MustTotallyOverlap |
|
||||
| ssa.cpp:208:7:208:7 | y[0..?)<unknown> | ssa.cpp:208:7:208:7 | y | MayPartiallyOverlap |
|
||||
| ssa.cpp:208:7:208:7 | y[0..?)<unknown> | ssa.cpp:208:7:208:7 | y[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:218:10:218:10 | c | ssa.cpp:218:10:218:10 | c | MustExactlyOverlap |
|
||||
| ssa.cpp:218:10:218:10 | c | ssa.cpp:218:10:218:10 | c<unknown[2]> | MustTotallyOverlap |
|
||||
| ssa.cpp:218:10:218:10 | c<unknown[2]> | ssa.cpp:218:10:218:10 | c | MustTotallyOverlap |
|
||||
| ssa.cpp:218:10:218:10 | c<unknown[2]> | ssa.cpp:218:10:218:10 | c<unknown[2]> | MustExactlyOverlap |
|
||||
| ssa.cpp:219:10:219:10 | d | ssa.cpp:219:10:219:10 | d | MustExactlyOverlap |
|
||||
| ssa.cpp:219:10:219:10 | d | ssa.cpp:219:10:219:10 | d[0..1)<char> | MustTotallyOverlap |
|
||||
| ssa.cpp:219:10:219:10 | d | ssa.cpp:219:10:219:10 | d[1..2)<char> | MustTotallyOverlap |
|
||||
| ssa.cpp:219:10:219:10 | d[0..1)<char> | ssa.cpp:219:10:219:10 | d | MayPartiallyOverlap |
|
||||
| ssa.cpp:219:10:219:10 | d[0..1)<char> | ssa.cpp:219:10:219:10 | d[0..1)<char> | MustExactlyOverlap |
|
||||
| ssa.cpp:219:10:219:10 | d[1..2)<char> | ssa.cpp:219:10:219:10 | d | MayPartiallyOverlap |
|
||||
| ssa.cpp:219:10:219:10 | d[1..2)<char> | ssa.cpp:219:10:219:10 | d[1..2)<char> | MustExactlyOverlap |
|
||||
| ssa.cpp:220:10:220:10 | e | ssa.cpp:220:10:220:10 | e | MustExactlyOverlap |
|
||||
| ssa.cpp:220:10:220:10 | e | ssa.cpp:220:10:220:10 | e[0..1)<char> | MustTotallyOverlap |
|
||||
| ssa.cpp:220:10:220:10 | e | ssa.cpp:220:10:220:10 | e[1..2)<char> | MustTotallyOverlap |
|
||||
| ssa.cpp:220:10:220:10 | e[0..1)<char> | ssa.cpp:220:10:220:10 | e | MayPartiallyOverlap |
|
||||
| ssa.cpp:220:10:220:10 | e[0..1)<char> | ssa.cpp:220:10:220:10 | e[0..1)<char> | MustExactlyOverlap |
|
||||
| ssa.cpp:220:10:220:10 | e[1..2)<char> | ssa.cpp:220:10:220:10 | e | MayPartiallyOverlap |
|
||||
| ssa.cpp:220:10:220:10 | e[1..2)<char> | ssa.cpp:220:10:220:10 | e[1..2)<char> | MustExactlyOverlap |
|
||||
| ssa.cpp:221:10:221:10 | f | ssa.cpp:221:10:221:10 | f | MustExactlyOverlap |
|
||||
| ssa.cpp:221:10:221:10 | f | ssa.cpp:221:10:221:10 | f[0..1)<char> | MustTotallyOverlap |
|
||||
| ssa.cpp:221:10:221:10 | f | ssa.cpp:221:10:221:10 | f[1..3)<unknown[2]> | MustTotallyOverlap |
|
||||
| ssa.cpp:221:10:221:10 | f[0..1)<char> | ssa.cpp:221:10:221:10 | f | MayPartiallyOverlap |
|
||||
| ssa.cpp:221:10:221:10 | f[0..1)<char> | ssa.cpp:221:10:221:10 | f[0..1)<char> | MustExactlyOverlap |
|
||||
| ssa.cpp:221:10:221:10 | f[1..3)<unknown[2]> | ssa.cpp:221:10:221:10 | f | MayPartiallyOverlap |
|
||||
| ssa.cpp:221:10:221:10 | f[1..3)<unknown[2]> | ssa.cpp:221:10:221:10 | f[1..3)<unknown[2]> | MustExactlyOverlap |
|
||||
| ssa.cpp:235:5:235:17 | *#this | ssa.cpp:235:5:235:17 | *#this | MustExactlyOverlap |
|
||||
| ssa.cpp:235:5:235:17 | *#this | ssa.cpp:235:5:235:17 | ?*#this | MustTotallyOverlap |
|
||||
| ssa.cpp:235:5:235:17 | ?*#this | ssa.cpp:235:5:235:17 | *#this | MayPartiallyOverlap |
|
||||
| ssa.cpp:235:5:235:17 | ?*#this | ssa.cpp:235:5:235:17 | ?*#this | MayPartiallyOverlap |
|
||||
| ssa.cpp:236:10:236:10 | *#this | ssa.cpp:236:10:236:10 | *#this | MustExactlyOverlap |
|
||||
| ssa.cpp:236:10:236:10 | *#this | ssa.cpp:236:10:236:10 | ?*#this | MustTotallyOverlap |
|
||||
| ssa.cpp:236:10:236:10 | ?*#this | ssa.cpp:236:10:236:10 | *#this | MayPartiallyOverlap |
|
||||
| ssa.cpp:236:10:236:10 | ?*#this | ssa.cpp:236:10:236:10 | ?*#this | MayPartiallyOverlap |
|
||||
| ssa.cpp:240:17:240:17 | ?c | ssa.cpp:240:17:240:17 | ?c | MayPartiallyOverlap |
|
||||
| ssa.cpp:240:17:240:17 | ?c | ssa.cpp:240:17:240:17 | c | MayPartiallyOverlap |
|
||||
| ssa.cpp:240:17:240:17 | c | ssa.cpp:240:17:240:17 | ?c | MustTotallyOverlap |
|
||||
| ssa.cpp:240:17:240:17 | c | ssa.cpp:240:17:240:17 | c | MustExactlyOverlap |
|
||||
| ssa.cpp:243:17:243:18 | ?c2 | ssa.cpp:243:17:243:18 | ?c2 | MayPartiallyOverlap |
|
||||
| ssa.cpp:243:17:243:18 | ?c2 | ssa.cpp:243:17:243:18 | c2 | MayPartiallyOverlap |
|
||||
| ssa.cpp:243:17:243:18 | c2 | ssa.cpp:243:17:243:18 | ?c2 | MustTotallyOverlap |
|
||||
| ssa.cpp:243:17:243:18 | c2 | ssa.cpp:243:17:243:18 | c2 | MustExactlyOverlap |
|
||||
| ssa.cpp:247:40:247:42 | *src | ssa.cpp:247:40:247:42 | *src | MustExactlyOverlap |
|
||||
| ssa.cpp:247:40:247:42 | *src | ssa.cpp:247:40:247:42 | *src[0..1)<char> | MustTotallyOverlap |
|
||||
| ssa.cpp:247:40:247:42 | *src | ssa.cpp:247:40:247:42 | *src[0..?)<unknown> | MustTotallyOverlap |
|
||||
| ssa.cpp:247:40:247:42 | *src | ssa.cpp:247:40:247:42 | ?*src | MustTotallyOverlap |
|
||||
| ssa.cpp:247:40:247:42 | *src[0..1)<char> | ssa.cpp:247:40:247:42 | *src | MayPartiallyOverlap |
|
||||
| ssa.cpp:247:40:247:42 | *src[0..1)<char> | ssa.cpp:247:40:247:42 | *src[0..1)<char> | MustExactlyOverlap |
|
||||
| ssa.cpp:247:40:247:42 | *src[0..1)<char> | ssa.cpp:247:40:247:42 | *src[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:247:40:247:42 | *src[0..1)<char> | ssa.cpp:247:40:247:42 | ?*src | MayPartiallyOverlap |
|
||||
| ssa.cpp:247:40:247:42 | *src[0..?)<unknown> | ssa.cpp:247:40:247:42 | *src | MayPartiallyOverlap |
|
||||
| ssa.cpp:247:40:247:42 | *src[0..?)<unknown> | ssa.cpp:247:40:247:42 | *src[0..1)<char> | MayPartiallyOverlap |
|
||||
| ssa.cpp:247:40:247:42 | *src[0..?)<unknown> | ssa.cpp:247:40:247:42 | *src[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:247:40:247:42 | *src[0..?)<unknown> | ssa.cpp:247:40:247:42 | ?*src | MayPartiallyOverlap |
|
||||
| ssa.cpp:247:40:247:42 | ?*src | ssa.cpp:247:40:247:42 | *src | MayPartiallyOverlap |
|
||||
| ssa.cpp:247:40:247:42 | ?*src | ssa.cpp:247:40:247:42 | *src[0..1)<char> | MayPartiallyOverlap |
|
||||
| ssa.cpp:247:40:247:42 | ?*src | ssa.cpp:247:40:247:42 | *src[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:247:40:247:42 | ?*src | ssa.cpp:247:40:247:42 | ?*src | MayPartiallyOverlap |
|
||||
| ssa.cpp:248:15:248:28 | ?dynamic{1} | ssa.cpp:248:15:248:28 | ?dynamic{1} | MayPartiallyOverlap |
|
||||
| ssa.cpp:248:15:248:28 | ?dynamic{1} | ssa.cpp:248:15:248:28 | dynamic{1} | MayPartiallyOverlap |
|
||||
| ssa.cpp:248:15:248:28 | ?dynamic{1} | ssa.cpp:248:15:248:28 | dynamic{1}[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:248:15:248:28 | dynamic{1} | ssa.cpp:248:15:248:28 | ?dynamic{1} | MustTotallyOverlap |
|
||||
| ssa.cpp:248:15:248:28 | dynamic{1} | ssa.cpp:248:15:248:28 | dynamic{1} | MustExactlyOverlap |
|
||||
| ssa.cpp:248:15:248:28 | dynamic{1} | ssa.cpp:248:15:248:28 | dynamic{1}[0..?)<unknown> | MustTotallyOverlap |
|
||||
| ssa.cpp:248:15:248:28 | dynamic{1}[0..?)<unknown> | ssa.cpp:248:15:248:28 | ?dynamic{1} | MayPartiallyOverlap |
|
||||
| ssa.cpp:248:15:248:28 | dynamic{1}[0..?)<unknown> | ssa.cpp:248:15:248:28 | dynamic{1} | MayPartiallyOverlap |
|
||||
| ssa.cpp:248:15:248:28 | dynamic{1}[0..?)<unknown> | ssa.cpp:248:15:248:28 | dynamic{1}[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:268:28:268:28 | *s | ssa.cpp:268:28:268:28 | *s | MustExactlyOverlap |
|
||||
| ssa.cpp:268:28:268:28 | *s | ssa.cpp:268:28:268:28 | *s[0..?)<unknown> | MustTotallyOverlap |
|
||||
| ssa.cpp:268:28:268:28 | *s | ssa.cpp:268:28:268:28 | ?*s | MustTotallyOverlap |
|
||||
| ssa.cpp:268:28:268:28 | *s[0..?)<unknown> | ssa.cpp:268:28:268:28 | *s | MayPartiallyOverlap |
|
||||
| ssa.cpp:268:28:268:28 | *s[0..?)<unknown> | ssa.cpp:268:28:268:28 | *s[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:268:28:268:28 | *s[0..?)<unknown> | ssa.cpp:268:28:268:28 | ?*s | MayPartiallyOverlap |
|
||||
| ssa.cpp:268:28:268:28 | ?*s | ssa.cpp:268:28:268:28 | *s | MayPartiallyOverlap |
|
||||
| ssa.cpp:268:28:268:28 | ?*s | ssa.cpp:268:28:268:28 | *s[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:268:28:268:28 | ?*s | ssa.cpp:268:28:268:28 | ?*s | MayPartiallyOverlap |
|
||||
| ssa.cpp:269:15:269:20 | ?dynamic{1} | ssa.cpp:269:15:269:20 | ?dynamic{1} | MayPartiallyOverlap |
|
||||
| ssa.cpp:269:15:269:20 | ?dynamic{1} | ssa.cpp:269:15:269:20 | dynamic{1} | MayPartiallyOverlap |
|
||||
| ssa.cpp:269:15:269:20 | ?dynamic{1} | ssa.cpp:269:15:269:20 | dynamic{1}[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:269:15:269:20 | dynamic{1} | ssa.cpp:269:15:269:20 | ?dynamic{1} | MustTotallyOverlap |
|
||||
| ssa.cpp:269:15:269:20 | dynamic{1} | ssa.cpp:269:15:269:20 | dynamic{1} | MustExactlyOverlap |
|
||||
| ssa.cpp:269:15:269:20 | dynamic{1} | ssa.cpp:269:15:269:20 | dynamic{1}[0..?)<unknown> | MustTotallyOverlap |
|
||||
| ssa.cpp:269:15:269:20 | dynamic{1}[0..?)<unknown> | ssa.cpp:269:15:269:20 | ?dynamic{1} | MayPartiallyOverlap |
|
||||
| ssa.cpp:269:15:269:20 | dynamic{1}[0..?)<unknown> | ssa.cpp:269:15:269:20 | dynamic{1} | MayPartiallyOverlap |
|
||||
| ssa.cpp:269:15:269:20 | dynamic{1}[0..?)<unknown> | ssa.cpp:269:15:269:20 | dynamic{1}[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:274:8:274:9 | pp | ssa.cpp:274:8:274:9 | pp | MustExactlyOverlap |
|
||||
| ssa.cpp:276:9:276:9 | a | ssa.cpp:276:9:276:9 | a | MustExactlyOverlap |
|
||||
| ssa.cpp:276:9:276:9 | a | ssa.cpp:276:9:276:9 | a[0..4)<int> | MustTotallyOverlap |
|
||||
| ssa.cpp:276:9:276:9 | a | ssa.cpp:276:9:276:9 | a[4..8)<int> | MustTotallyOverlap |
|
||||
| ssa.cpp:276:9:276:9 | a[0..4)<int> | ssa.cpp:276:9:276:9 | a | MayPartiallyOverlap |
|
||||
| ssa.cpp:276:9:276:9 | a[0..4)<int> | ssa.cpp:276:9:276:9 | a[0..4)<int> | MustExactlyOverlap |
|
||||
| ssa.cpp:276:9:276:9 | a[4..8)<int> | ssa.cpp:276:9:276:9 | a | MayPartiallyOverlap |
|
||||
| ssa.cpp:276:9:276:9 | a[4..8)<int> | ssa.cpp:276:9:276:9 | a[4..8)<int> | MustExactlyOverlap |
|
||||
| ssa.cpp:286:3:286:3 | *#this | ssa.cpp:286:3:286:3 | *#this | MustExactlyOverlap |
|
||||
| ssa.cpp:286:3:286:3 | *#this | ssa.cpp:286:3:286:3 | ?*#this | MustTotallyOverlap |
|
||||
| ssa.cpp:286:3:286:3 | ?*#this | ssa.cpp:286:3:286:3 | *#this | MayPartiallyOverlap |
|
||||
| ssa.cpp:286:3:286:3 | ?*#this | ssa.cpp:286:3:286:3 | ?*#this | MayPartiallyOverlap |
|
||||
| ssa.cpp:287:3:287:3 | *#this | ssa.cpp:287:3:287:3 | *#this | MustExactlyOverlap |
|
||||
| ssa.cpp:287:3:287:3 | *#this | ssa.cpp:287:3:287:3 | ?*#this | MustTotallyOverlap |
|
||||
| ssa.cpp:287:3:287:3 | ?*#this | ssa.cpp:287:3:287:3 | *#this | MayPartiallyOverlap |
|
||||
| ssa.cpp:287:3:287:3 | ?*#this | ssa.cpp:287:3:287:3 | ?*#this | MayPartiallyOverlap |
|
||||
| ssa.cpp:287:5:287:5 | *(unnamed parameter 0) | ssa.cpp:287:5:287:5 | *(unnamed parameter 0) | MustExactlyOverlap |
|
||||
| ssa.cpp:287:5:287:5 | *(unnamed parameter 0) | ssa.cpp:287:5:287:5 | ?*(unnamed parameter 0) | MustTotallyOverlap |
|
||||
| ssa.cpp:287:5:287:5 | ?*(unnamed parameter 0) | ssa.cpp:287:5:287:5 | *(unnamed parameter 0) | MayPartiallyOverlap |
|
||||
| ssa.cpp:287:5:287:5 | ?*(unnamed parameter 0) | ssa.cpp:287:5:287:5 | ?*(unnamed parameter 0) | MayPartiallyOverlap |
|
||||
| ssa.cpp:288:3:288:3 | *#this | ssa.cpp:288:3:288:3 | *#this | MustExactlyOverlap |
|
||||
| ssa.cpp:288:3:288:3 | *#this | ssa.cpp:288:3:288:3 | ?*#this | MustTotallyOverlap |
|
||||
| ssa.cpp:288:3:288:3 | ?*#this | ssa.cpp:288:3:288:3 | *#this | MayPartiallyOverlap |
|
||||
| ssa.cpp:288:3:288:3 | ?*#this | ssa.cpp:288:3:288:3 | ?*#this | MayPartiallyOverlap |
|
||||
| ssa.cpp:292:14:292:22 | ?dynamic{1} | ssa.cpp:292:14:292:22 | ?dynamic{1} | MayPartiallyOverlap |
|
||||
| ssa.cpp:292:14:292:22 | ?dynamic{1} | ssa.cpp:292:14:292:22 | dynamic{1} | MayPartiallyOverlap |
|
||||
| ssa.cpp:292:14:292:22 | dynamic{1} | ssa.cpp:292:14:292:22 | ?dynamic{1} | MustTotallyOverlap |
|
||||
| ssa.cpp:292:14:292:22 | dynamic{1} | ssa.cpp:292:14:292:22 | dynamic{1} | MustExactlyOverlap |
|
||||
| ssa.cpp:293:14:293:22 | ?dynamic{2} | ssa.cpp:293:14:293:22 | ?dynamic{2} | MayPartiallyOverlap |
|
||||
| ssa.cpp:293:14:293:22 | ?dynamic{2} | ssa.cpp:293:14:293:22 | dynamic{2} | MayPartiallyOverlap |
|
||||
| ssa.cpp:293:14:293:22 | dynamic{2} | ssa.cpp:293:14:293:22 | ?dynamic{2} | MustTotallyOverlap |
|
||||
| ssa.cpp:293:14:293:22 | dynamic{2} | ssa.cpp:293:14:293:22 | dynamic{2} | MustExactlyOverlap |
|
||||
| ssa.cpp:294:12:294:26 | ?dynamic{3} | ssa.cpp:294:12:294:26 | ?dynamic{3} | MayPartiallyOverlap |
|
||||
| ssa.cpp:294:12:294:26 | ?dynamic{3} | ssa.cpp:294:12:294:26 | ?dynamic{3}[0..4)<A> | MayPartiallyOverlap |
|
||||
| ssa.cpp:294:12:294:26 | ?dynamic{3} | ssa.cpp:294:12:294:26 | dynamic{3} | MayPartiallyOverlap |
|
||||
| ssa.cpp:294:12:294:26 | ?dynamic{3} | ssa.cpp:294:12:294:26 | dynamic{3}[0..4)<int> | MayPartiallyOverlap |
|
||||
| ssa.cpp:294:12:294:26 | ?dynamic{3}[0..4)<A> | ssa.cpp:294:12:294:26 | ?dynamic{3} | MayPartiallyOverlap |
|
||||
| ssa.cpp:294:12:294:26 | ?dynamic{3}[0..4)<A> | ssa.cpp:294:12:294:26 | ?dynamic{3}[0..4)<A> | MayPartiallyOverlap |
|
||||
| ssa.cpp:294:12:294:26 | ?dynamic{3}[0..4)<A> | ssa.cpp:294:12:294:26 | dynamic{3} | MayPartiallyOverlap |
|
||||
| ssa.cpp:294:12:294:26 | ?dynamic{3}[0..4)<A> | ssa.cpp:294:12:294:26 | dynamic{3}[0..4)<int> | MayPartiallyOverlap |
|
||||
| ssa.cpp:294:12:294:26 | dynamic{3} | ssa.cpp:294:12:294:26 | ?dynamic{3} | MustTotallyOverlap |
|
||||
| ssa.cpp:294:12:294:26 | dynamic{3} | ssa.cpp:294:12:294:26 | ?dynamic{3}[0..4)<A> | MustTotallyOverlap |
|
||||
| ssa.cpp:294:12:294:26 | dynamic{3} | ssa.cpp:294:12:294:26 | dynamic{3} | MustExactlyOverlap |
|
||||
| ssa.cpp:294:12:294:26 | dynamic{3} | ssa.cpp:294:12:294:26 | dynamic{3}[0..4)<int> | MustTotallyOverlap |
|
||||
| ssa.cpp:294:12:294:26 | dynamic{3}[0..4)<int> | ssa.cpp:294:12:294:26 | ?dynamic{3} | MayPartiallyOverlap |
|
||||
| ssa.cpp:294:12:294:26 | dynamic{3}[0..4)<int> | ssa.cpp:294:12:294:26 | ?dynamic{3}[0..4)<A> | MustTotallyOverlap |
|
||||
| ssa.cpp:294:12:294:26 | dynamic{3}[0..4)<int> | ssa.cpp:294:12:294:26 | dynamic{3} | MayPartiallyOverlap |
|
||||
| ssa.cpp:294:12:294:26 | dynamic{3}[0..4)<int> | ssa.cpp:294:12:294:26 | dynamic{3}[0..4)<int> | MustExactlyOverlap |
|
||||
| ssa.cpp:294:18:294:25 | ?dynamic{3} | ssa.cpp:294:18:294:25 | ?dynamic{3} | MayPartiallyOverlap |
|
||||
| ssa.cpp:294:18:294:25 | ?dynamic{3} | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..4)<A> | MayPartiallyOverlap |
|
||||
| ssa.cpp:294:18:294:25 | ?dynamic{3} | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:294:18:294:25 | ?dynamic{3} | ssa.cpp:294:18:294:25 | dynamic{3} | MayPartiallyOverlap |
|
||||
| ssa.cpp:294:18:294:25 | ?dynamic{3} | ssa.cpp:294:18:294:25 | dynamic{3}[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:294:18:294:25 | ?dynamic{3}[0..4)<A> | ssa.cpp:294:18:294:25 | ?dynamic{3} | MayPartiallyOverlap |
|
||||
| ssa.cpp:294:18:294:25 | ?dynamic{3}[0..4)<A> | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..4)<A> | MayPartiallyOverlap |
|
||||
| ssa.cpp:294:18:294:25 | ?dynamic{3}[0..4)<A> | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:294:18:294:25 | ?dynamic{3}[0..4)<A> | ssa.cpp:294:18:294:25 | dynamic{3} | MayPartiallyOverlap |
|
||||
| ssa.cpp:294:18:294:25 | ?dynamic{3}[0..4)<A> | ssa.cpp:294:18:294:25 | dynamic{3}[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?)<unknown> | ssa.cpp:294:18:294:25 | ?dynamic{3} | MayPartiallyOverlap |
|
||||
| ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?)<unknown> | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..4)<A> | MayPartiallyOverlap |
|
||||
| ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?)<unknown> | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?)<unknown> | ssa.cpp:294:18:294:25 | dynamic{3} | MayPartiallyOverlap |
|
||||
| ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?)<unknown> | ssa.cpp:294:18:294:25 | dynamic{3}[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:294:18:294:25 | dynamic{3} | ssa.cpp:294:18:294:25 | ?dynamic{3} | MustTotallyOverlap |
|
||||
| ssa.cpp:294:18:294:25 | dynamic{3} | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..4)<A> | MustTotallyOverlap |
|
||||
| ssa.cpp:294:18:294:25 | dynamic{3} | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?)<unknown> | MustTotallyOverlap |
|
||||
| ssa.cpp:294:18:294:25 | dynamic{3} | ssa.cpp:294:18:294:25 | dynamic{3} | MustExactlyOverlap |
|
||||
| ssa.cpp:294:18:294:25 | dynamic{3} | ssa.cpp:294:18:294:25 | dynamic{3}[0..?)<unknown> | MustTotallyOverlap |
|
||||
| ssa.cpp:294:18:294:25 | dynamic{3}[0..?)<unknown> | ssa.cpp:294:18:294:25 | ?dynamic{3} | MayPartiallyOverlap |
|
||||
| ssa.cpp:294:18:294:25 | dynamic{3}[0..?)<unknown> | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..4)<A> | MayPartiallyOverlap |
|
||||
| ssa.cpp:294:18:294:25 | dynamic{3}[0..?)<unknown> | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:294:18:294:25 | dynamic{3}[0..?)<unknown> | ssa.cpp:294:18:294:25 | dynamic{3} | MayPartiallyOverlap |
|
||||
| ssa.cpp:294:18:294:25 | dynamic{3}[0..?)<unknown> | ssa.cpp:294:18:294:25 | dynamic{3}[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:295:10:295:14 | ?dynamic{5} | ssa.cpp:295:10:295:14 | ?dynamic{5} | MayPartiallyOverlap |
|
||||
| ssa.cpp:295:10:295:14 | ?dynamic{5} | ssa.cpp:295:10:295:14 | ?dynamic{5}[0..4)<A> | MayPartiallyOverlap |
|
||||
| ssa.cpp:295:10:295:14 | ?dynamic{5} | ssa.cpp:295:10:295:14 | dynamic{5} | MayPartiallyOverlap |
|
||||
| ssa.cpp:295:10:295:14 | ?dynamic{5}[0..4)<A> | ssa.cpp:295:10:295:14 | ?dynamic{5} | MayPartiallyOverlap |
|
||||
| ssa.cpp:295:10:295:14 | ?dynamic{5}[0..4)<A> | ssa.cpp:295:10:295:14 | ?dynamic{5}[0..4)<A> | MayPartiallyOverlap |
|
||||
| ssa.cpp:295:10:295:14 | ?dynamic{5}[0..4)<A> | ssa.cpp:295:10:295:14 | dynamic{5} | MayPartiallyOverlap |
|
||||
| ssa.cpp:295:10:295:14 | dynamic{5} | ssa.cpp:295:10:295:14 | ?dynamic{5} | MustTotallyOverlap |
|
||||
| ssa.cpp:295:10:295:14 | dynamic{5} | ssa.cpp:295:10:295:14 | ?dynamic{5}[0..4)<A> | MustTotallyOverlap |
|
||||
| ssa.cpp:295:10:295:14 | dynamic{5} | ssa.cpp:295:10:295:14 | dynamic{5} | MustExactlyOverlap |
|
||||
| ssa.cpp:301:27:301:30 | *argv | ssa.cpp:301:27:301:30 | *argv | MustExactlyOverlap |
|
||||
| ssa.cpp:301:27:301:30 | *argv | ssa.cpp:301:27:301:30 | *argv[0..8)<decltype(nullptr)> | MustTotallyOverlap |
|
||||
| ssa.cpp:301:27:301:30 | *argv | ssa.cpp:301:27:301:30 | *argv[0..?)<unknown> | MustTotallyOverlap |
|
||||
| ssa.cpp:301:27:301:30 | *argv | ssa.cpp:301:27:301:30 | ?*argv | MustTotallyOverlap |
|
||||
| ssa.cpp:301:27:301:30 | *argv | ssa.cpp:301:27:301:30 | ?*argv[0..?)<unknown> | MustTotallyOverlap |
|
||||
| ssa.cpp:301:27:301:30 | *argv[0..8)<decltype(nullptr)> | ssa.cpp:301:27:301:30 | *argv | MayPartiallyOverlap |
|
||||
| ssa.cpp:301:27:301:30 | *argv[0..8)<decltype(nullptr)> | ssa.cpp:301:27:301:30 | *argv[0..8)<decltype(nullptr)> | MustExactlyOverlap |
|
||||
| ssa.cpp:301:27:301:30 | *argv[0..8)<decltype(nullptr)> | ssa.cpp:301:27:301:30 | *argv[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:301:27:301:30 | *argv[0..8)<decltype(nullptr)> | ssa.cpp:301:27:301:30 | ?*argv | MayPartiallyOverlap |
|
||||
| ssa.cpp:301:27:301:30 | *argv[0..8)<decltype(nullptr)> | ssa.cpp:301:27:301:30 | ?*argv[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:301:27:301:30 | *argv[0..?)<unknown> | ssa.cpp:301:27:301:30 | *argv | MayPartiallyOverlap |
|
||||
| ssa.cpp:301:27:301:30 | *argv[0..?)<unknown> | ssa.cpp:301:27:301:30 | *argv[0..8)<decltype(nullptr)> | MayPartiallyOverlap |
|
||||
| ssa.cpp:301:27:301:30 | *argv[0..?)<unknown> | ssa.cpp:301:27:301:30 | *argv[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:301:27:301:30 | *argv[0..?)<unknown> | ssa.cpp:301:27:301:30 | ?*argv | MayPartiallyOverlap |
|
||||
| ssa.cpp:301:27:301:30 | *argv[0..?)<unknown> | ssa.cpp:301:27:301:30 | ?*argv[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:301:27:301:30 | ?*argv | ssa.cpp:301:27:301:30 | *argv | MayPartiallyOverlap |
|
||||
| ssa.cpp:301:27:301:30 | ?*argv | ssa.cpp:301:27:301:30 | *argv[0..8)<decltype(nullptr)> | MayPartiallyOverlap |
|
||||
| ssa.cpp:301:27:301:30 | ?*argv | ssa.cpp:301:27:301:30 | *argv[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:301:27:301:30 | ?*argv | ssa.cpp:301:27:301:30 | ?*argv | MayPartiallyOverlap |
|
||||
| ssa.cpp:301:27:301:30 | ?*argv | ssa.cpp:301:27:301:30 | ?*argv[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:301:27:301:30 | ?*argv[0..?)<unknown> | ssa.cpp:301:27:301:30 | *argv | MayPartiallyOverlap |
|
||||
| ssa.cpp:301:27:301:30 | ?*argv[0..?)<unknown> | ssa.cpp:301:27:301:30 | *argv[0..8)<decltype(nullptr)> | MayPartiallyOverlap |
|
||||
| ssa.cpp:301:27:301:30 | ?*argv[0..?)<unknown> | ssa.cpp:301:27:301:30 | *argv[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:301:27:301:30 | ?*argv[0..?)<unknown> | ssa.cpp:301:27:301:30 | ?*argv | MayPartiallyOverlap |
|
||||
| ssa.cpp:301:27:301:30 | ?*argv[0..?)<unknown> | ssa.cpp:301:27:301:30 | ?*argv[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:310:8:310:11 | *#this | ssa.cpp:310:8:310:11 | *#this | MustExactlyOverlap |
|
||||
| ssa.cpp:310:8:310:11 | *#this | ssa.cpp:310:8:310:11 | *#this[0..4)<int> | MustTotallyOverlap |
|
||||
| ssa.cpp:310:8:310:11 | *#this | ssa.cpp:310:8:310:11 | ?*#this | MustTotallyOverlap |
|
||||
| ssa.cpp:310:8:310:11 | *#this[0..4)<int> | ssa.cpp:310:8:310:11 | *#this | MayPartiallyOverlap |
|
||||
| ssa.cpp:310:8:310:11 | *#this[0..4)<int> | ssa.cpp:310:8:310:11 | *#this[0..4)<int> | MustExactlyOverlap |
|
||||
| ssa.cpp:310:8:310:11 | *#this[0..4)<int> | ssa.cpp:310:8:310:11 | ?*#this | MayPartiallyOverlap |
|
||||
| ssa.cpp:310:8:310:11 | ?*#this | ssa.cpp:310:8:310:11 | *#this | MayPartiallyOverlap |
|
||||
| ssa.cpp:310:8:310:11 | ?*#this | ssa.cpp:310:8:310:11 | *#this[0..4)<int> | MayPartiallyOverlap |
|
||||
| ssa.cpp:310:8:310:11 | ?*#this | ssa.cpp:310:8:310:11 | ?*#this | MayPartiallyOverlap |
|
||||
| ssa.cpp:319:37:319:37 | *s | ssa.cpp:319:37:319:37 | *s | MustExactlyOverlap |
|
||||
| ssa.cpp:319:37:319:37 | *s | ssa.cpp:319:37:319:37 | *s[0..?)<unknown> | MustTotallyOverlap |
|
||||
| ssa.cpp:319:37:319:37 | *s | ssa.cpp:319:37:319:37 | ?*s | MustTotallyOverlap |
|
||||
| ssa.cpp:319:37:319:37 | *s[0..?)<unknown> | ssa.cpp:319:37:319:37 | *s | MayPartiallyOverlap |
|
||||
| ssa.cpp:319:37:319:37 | *s[0..?)<unknown> | ssa.cpp:319:37:319:37 | *s[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:319:37:319:37 | *s[0..?)<unknown> | ssa.cpp:319:37:319:37 | ?*s | MayPartiallyOverlap |
|
||||
| ssa.cpp:319:37:319:37 | ?*s | ssa.cpp:319:37:319:37 | *s | MayPartiallyOverlap |
|
||||
| ssa.cpp:319:37:319:37 | ?*s | ssa.cpp:319:37:319:37 | *s[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:319:37:319:37 | ?*s | ssa.cpp:319:37:319:37 | ?*s | MayPartiallyOverlap |
|
||||
| ssa.cpp:321:7:321:12 | ?buffer[0..?)<unknown> | ssa.cpp:321:7:321:12 | ?buffer[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:321:7:321:12 | ?buffer[0..?)<unknown> | ssa.cpp:321:7:321:12 | buffer | MayPartiallyOverlap |
|
||||
| ssa.cpp:321:7:321:12 | ?buffer[0..?)<unknown> | ssa.cpp:321:7:321:12 | buffer[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:321:7:321:12 | buffer | ssa.cpp:321:7:321:12 | ?buffer[0..?)<unknown> | MustTotallyOverlap |
|
||||
| ssa.cpp:321:7:321:12 | buffer | ssa.cpp:321:7:321:12 | buffer | MustExactlyOverlap |
|
||||
| ssa.cpp:321:7:321:12 | buffer | ssa.cpp:321:7:321:12 | buffer[0..?)<unknown> | MustTotallyOverlap |
|
||||
| ssa.cpp:321:7:321:12 | buffer[0..?)<unknown> | ssa.cpp:321:7:321:12 | ?buffer[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:321:7:321:12 | buffer[0..?)<unknown> | ssa.cpp:321:7:321:12 | buffer | MayPartiallyOverlap |
|
||||
| ssa.cpp:321:7:321:12 | buffer[0..?)<unknown> | ssa.cpp:321:7:321:12 | buffer[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:322:8:322:11 | ?ptr1[0..?)<unknown> | ssa.cpp:322:8:322:11 | ?ptr1[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:322:8:322:11 | ?ptr1[0..?)<unknown> | ssa.cpp:322:8:322:11 | ptr1 | MayPartiallyOverlap |
|
||||
| ssa.cpp:322:8:322:11 | ?ptr1[0..?)<unknown> | ssa.cpp:322:8:322:11 | ptr1[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:322:8:322:11 | ptr1 | ssa.cpp:322:8:322:11 | ?ptr1[0..?)<unknown> | MustTotallyOverlap |
|
||||
| ssa.cpp:322:8:322:11 | ptr1 | ssa.cpp:322:8:322:11 | ptr1 | MustExactlyOverlap |
|
||||
| ssa.cpp:322:8:322:11 | ptr1 | ssa.cpp:322:8:322:11 | ptr1[0..?)<unknown> | MustTotallyOverlap |
|
||||
| ssa.cpp:322:8:322:11 | ptr1[0..?)<unknown> | ssa.cpp:322:8:322:11 | ?ptr1[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:322:8:322:11 | ptr1[0..?)<unknown> | ssa.cpp:322:8:322:11 | ptr1 | MayPartiallyOverlap |
|
||||
| ssa.cpp:322:8:322:11 | ptr1[0..?)<unknown> | ssa.cpp:322:8:322:11 | ptr1[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:402:7:402:7 | b | ssa.cpp:402:7:402:7 | b | MustExactlyOverlap |
|
||||
| ssa.cpp:402:7:402:7 | b | ssa.cpp:402:7:402:7 | b[0..4)<int> | MustTotallyOverlap |
|
||||
| ssa.cpp:402:7:402:7 | b[0..4)<int> | ssa.cpp:402:7:402:7 | b | MayPartiallyOverlap |
|
||||
| ssa.cpp:402:7:402:7 | b[0..4)<int> | ssa.cpp:402:7:402:7 | b[0..4)<int> | MustExactlyOverlap |
|
||||
| ssa.cpp:403:7:403:7 | c | ssa.cpp:403:7:403:7 | c | MustExactlyOverlap |
|
||||
| ssa.cpp:418:7:418:7 | x | ssa.cpp:418:7:418:7 | x | MustExactlyOverlap |
|
||||
| ssa.cpp:418:7:418:7 | x | ssa.cpp:418:7:418:7 | x[0..4)<int> | MustTotallyOverlap |
|
||||
| ssa.cpp:418:7:418:7 | x | ssa.cpp:418:7:418:7 | x[4..8)<int> | MustTotallyOverlap |
|
||||
| ssa.cpp:418:7:418:7 | x[0..4)<int> | ssa.cpp:418:7:418:7 | x | MayPartiallyOverlap |
|
||||
| ssa.cpp:418:7:418:7 | x[0..4)<int> | ssa.cpp:418:7:418:7 | x[0..4)<int> | MustExactlyOverlap |
|
||||
| ssa.cpp:418:7:418:7 | x[4..8)<int> | ssa.cpp:418:7:418:7 | x | MayPartiallyOverlap |
|
||||
| ssa.cpp:418:7:418:7 | x[4..8)<int> | ssa.cpp:418:7:418:7 | x[4..8)<int> | MustExactlyOverlap |
|
||||
| ssa.cpp:442:37:442:37 | *a | ssa.cpp:442:37:442:37 | *a | MustExactlyOverlap |
|
||||
| ssa.cpp:442:37:442:37 | *a | ssa.cpp:442:37:442:37 | ?*a | MustTotallyOverlap |
|
||||
| ssa.cpp:442:37:442:37 | ?*a | ssa.cpp:442:37:442:37 | *a | MayPartiallyOverlap |
|
||||
| ssa.cpp:442:37:442:37 | ?*a | ssa.cpp:442:37:442:37 | ?*a | MayPartiallyOverlap |
|
||||
| ssa.cpp:442:46:442:46 | *b | ssa.cpp:442:46:442:46 | *b | MustExactlyOverlap |
|
||||
| ssa.cpp:442:46:442:46 | *b | ssa.cpp:442:46:442:46 | ?*b | MustTotallyOverlap |
|
||||
| ssa.cpp:442:46:442:46 | ?*b | ssa.cpp:442:46:442:46 | *b | MayPartiallyOverlap |
|
||||
| ssa.cpp:442:46:442:46 | ?*b | ssa.cpp:442:46:442:46 | ?*b | MayPartiallyOverlap |
|
||||
| ssa.cpp:446:34:446:34 | *a | ssa.cpp:446:34:446:34 | *a | MustExactlyOverlap |
|
||||
| ssa.cpp:446:34:446:34 | *a | ssa.cpp:446:34:446:34 | *a[0..?)<unknown> | MustTotallyOverlap |
|
||||
| ssa.cpp:446:34:446:34 | *a | ssa.cpp:446:34:446:34 | ?*a | MustTotallyOverlap |
|
||||
| ssa.cpp:446:34:446:34 | *a | ssa.cpp:446:34:446:34 | ?*a[0..?)<unknown> | MustTotallyOverlap |
|
||||
| ssa.cpp:446:34:446:34 | *a[0..?)<unknown> | ssa.cpp:446:34:446:34 | *a | MayPartiallyOverlap |
|
||||
| ssa.cpp:446:34:446:34 | *a[0..?)<unknown> | ssa.cpp:446:34:446:34 | *a[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:446:34:446:34 | *a[0..?)<unknown> | ssa.cpp:446:34:446:34 | ?*a | MayPartiallyOverlap |
|
||||
| ssa.cpp:446:34:446:34 | *a[0..?)<unknown> | ssa.cpp:446:34:446:34 | ?*a[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:446:34:446:34 | *a[0..?)<unknown> | ssa.cpp:446:43:446:43 | *b | MayPartiallyOverlap |
|
||||
| ssa.cpp:446:34:446:34 | *a[0..?)<unknown> | ssa.cpp:446:43:446:43 | ?*b | MayPartiallyOverlap |
|
||||
| ssa.cpp:446:34:446:34 | ?*a | ssa.cpp:446:34:446:34 | *a | MayPartiallyOverlap |
|
||||
| ssa.cpp:446:34:446:34 | ?*a | ssa.cpp:446:34:446:34 | *a[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:446:34:446:34 | ?*a | ssa.cpp:446:34:446:34 | ?*a | MayPartiallyOverlap |
|
||||
| ssa.cpp:446:34:446:34 | ?*a | ssa.cpp:446:34:446:34 | ?*a[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:446:34:446:34 | ?*a[0..?)<unknown> | ssa.cpp:446:34:446:34 | *a | MayPartiallyOverlap |
|
||||
| ssa.cpp:446:34:446:34 | ?*a[0..?)<unknown> | ssa.cpp:446:34:446:34 | *a[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:446:34:446:34 | ?*a[0..?)<unknown> | ssa.cpp:446:34:446:34 | ?*a | MayPartiallyOverlap |
|
||||
| ssa.cpp:446:34:446:34 | ?*a[0..?)<unknown> | ssa.cpp:446:34:446:34 | ?*a[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:446:34:446:34 | ?*a[0..?)<unknown> | ssa.cpp:446:43:446:43 | *b | MayPartiallyOverlap |
|
||||
| ssa.cpp:446:34:446:34 | ?*a[0..?)<unknown> | ssa.cpp:446:43:446:43 | ?*b | MayPartiallyOverlap |
|
||||
| ssa.cpp:446:43:446:43 | *b | ssa.cpp:446:43:446:43 | *b | MustExactlyOverlap |
|
||||
| ssa.cpp:446:43:446:43 | *b | ssa.cpp:446:43:446:43 | *b[0..?)<unknown> | MustTotallyOverlap |
|
||||
| ssa.cpp:446:43:446:43 | *b | ssa.cpp:446:43:446:43 | ?*b | MustTotallyOverlap |
|
||||
| ssa.cpp:446:43:446:43 | *b | ssa.cpp:446:43:446:43 | ?*b[0..?)<unknown> | MustTotallyOverlap |
|
||||
| ssa.cpp:446:43:446:43 | *b[0..?)<unknown> | ssa.cpp:446:34:446:34 | *a | MayPartiallyOverlap |
|
||||
| ssa.cpp:446:43:446:43 | *b[0..?)<unknown> | ssa.cpp:446:34:446:34 | ?*a | MayPartiallyOverlap |
|
||||
| ssa.cpp:446:43:446:43 | *b[0..?)<unknown> | ssa.cpp:446:43:446:43 | *b | MayPartiallyOverlap |
|
||||
| ssa.cpp:446:43:446:43 | *b[0..?)<unknown> | ssa.cpp:446:43:446:43 | *b[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:446:43:446:43 | *b[0..?)<unknown> | ssa.cpp:446:43:446:43 | ?*b | MayPartiallyOverlap |
|
||||
| ssa.cpp:446:43:446:43 | *b[0..?)<unknown> | ssa.cpp:446:43:446:43 | ?*b[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:446:43:446:43 | ?*b | ssa.cpp:446:43:446:43 | *b | MayPartiallyOverlap |
|
||||
| ssa.cpp:446:43:446:43 | ?*b | ssa.cpp:446:43:446:43 | *b[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:446:43:446:43 | ?*b | ssa.cpp:446:43:446:43 | ?*b | MayPartiallyOverlap |
|
||||
| ssa.cpp:446:43:446:43 | ?*b | ssa.cpp:446:43:446:43 | ?*b[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:446:43:446:43 | ?*b[0..?)<unknown> | ssa.cpp:446:34:446:34 | *a | MayPartiallyOverlap |
|
||||
| ssa.cpp:446:43:446:43 | ?*b[0..?)<unknown> | ssa.cpp:446:34:446:34 | ?*a | MayPartiallyOverlap |
|
||||
| ssa.cpp:446:43:446:43 | ?*b[0..?)<unknown> | ssa.cpp:446:43:446:43 | *b | MayPartiallyOverlap |
|
||||
| ssa.cpp:446:43:446:43 | ?*b[0..?)<unknown> | ssa.cpp:446:43:446:43 | *b[0..?)<unknown> | MayPartiallyOverlap |
|
||||
| ssa.cpp:446:43:446:43 | ?*b[0..?)<unknown> | ssa.cpp:446:43:446:43 | ?*b | MayPartiallyOverlap |
|
||||
| ssa.cpp:446:43:446:43 | ?*b[0..?)<unknown> | ssa.cpp:446:43:446:43 | ?*b[0..?)<unknown> | MayPartiallyOverlap |
|
||||
5
cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.ql
Normal file
5
cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.ql
Normal file
@@ -0,0 +1,5 @@
|
||||
import semmle.code.cpp.ir.implementation.aliased_ssa.internal.AliasedSSA
|
||||
|
||||
from AllocationMemoryLocation def, AllocationMemoryLocation use, Overlap ovr
|
||||
where ovr = getOverlap(def, use)
|
||||
select def, use, ovr
|
||||
@@ -211,7 +211,7 @@ int ModeledCallTarget(int x) {
|
||||
}
|
||||
|
||||
void InitArray() {
|
||||
char a_pad[32] = "";
|
||||
char a_pad[32] = "";
|
||||
char a_nopad[4] = "foo";
|
||||
char a_infer[] = "blah";
|
||||
char b[2];
|
||||
@@ -306,7 +306,7 @@ int main(int argc, char **argv) {
|
||||
|
||||
class ThisAliasTest {
|
||||
int x, y;
|
||||
|
||||
|
||||
void setX(int arg) {
|
||||
this->x = arg;
|
||||
}
|
||||
@@ -438,3 +438,13 @@ int noreturnTest2(int x) {
|
||||
void Conditional(bool a, int x, int y) {
|
||||
int z = a ? x : y;
|
||||
}
|
||||
|
||||
static void NonEscapingParams(void *a, void *b)
|
||||
{
|
||||
}
|
||||
|
||||
static void EscapingParams(void *a, void *b)
|
||||
{
|
||||
Escape(a);
|
||||
Escape(b);
|
||||
}
|
||||
|
||||
@@ -2044,3 +2044,57 @@ ssa.cpp:
|
||||
# 439| r439_15(glval<int>) = VariableAddress[#temp439:13] :
|
||||
# 439| m439_16(int) = Store[#temp439:13] : &:r439_15, r439_14
|
||||
#-----| Goto -> Block 1
|
||||
|
||||
# 442| void NonEscapingParams(void*, void*)
|
||||
# 442| Block 0
|
||||
# 442| v442_1(void) = EnterFunction :
|
||||
# 442| mu442_2(unknown) = AliasedDefinition :
|
||||
# 442| mu442_3(unknown) = InitializeNonLocal :
|
||||
# 442| r442_4(glval<void *>) = VariableAddress[a] :
|
||||
# 442| m442_5(void *) = InitializeParameter[a] : &:r442_4
|
||||
# 442| r442_6(void *) = Load[a] : &:r442_4, m442_5
|
||||
# 442| mu442_7(unknown) = InitializeIndirection[a] : &:r442_6
|
||||
# 442| r442_8(glval<void *>) = VariableAddress[b] :
|
||||
# 442| m442_9(void *) = InitializeParameter[b] : &:r442_8
|
||||
# 442| r442_10(void *) = Load[b] : &:r442_8, m442_9
|
||||
# 442| mu442_11(unknown) = InitializeIndirection[b] : &:r442_10
|
||||
# 444| v444_1(void) = NoOp :
|
||||
# 442| v442_12(void) = ReturnIndirection[a] : &:r442_6, ~m?
|
||||
# 442| v442_13(void) = ReturnIndirection[b] : &:r442_10, ~m?
|
||||
# 442| v442_14(void) = ReturnVoid :
|
||||
# 442| v442_15(void) = AliasedUse : ~m?
|
||||
# 442| v442_16(void) = ExitFunction :
|
||||
|
||||
# 446| void EscapingParams(void*, void*)
|
||||
# 446| Block 0
|
||||
# 446| v446_1(void) = EnterFunction :
|
||||
# 446| mu446_2(unknown) = AliasedDefinition :
|
||||
# 446| mu446_3(unknown) = InitializeNonLocal :
|
||||
# 446| r446_4(glval<void *>) = VariableAddress[a] :
|
||||
# 446| m446_5(void *) = InitializeParameter[a] : &:r446_4
|
||||
# 446| r446_6(void *) = Load[a] : &:r446_4, m446_5
|
||||
# 446| mu446_7(unknown) = InitializeIndirection[a] : &:r446_6
|
||||
# 446| r446_8(glval<void *>) = VariableAddress[b] :
|
||||
# 446| m446_9(void *) = InitializeParameter[b] : &:r446_8
|
||||
# 446| r446_10(void *) = Load[b] : &:r446_8, m446_9
|
||||
# 446| mu446_11(unknown) = InitializeIndirection[b] : &:r446_10
|
||||
# 448| r448_1(glval<unknown>) = FunctionAddress[Escape] :
|
||||
# 448| r448_2(glval<void *>) = VariableAddress[a] :
|
||||
# 448| r448_3(void *) = Load[a] : &:r448_2, m446_5
|
||||
# 448| v448_4(void) = Call[Escape] : func:r448_1, 0:r448_3
|
||||
# 448| mu448_5(unknown) = ^CallSideEffect : ~m?
|
||||
# 448| v448_6(void) = ^BufferReadSideEffect[0] : &:r448_3, ~m?
|
||||
# 448| mu448_7(unknown) = ^BufferMayWriteSideEffect[0] : &:r448_3
|
||||
# 449| r449_1(glval<unknown>) = FunctionAddress[Escape] :
|
||||
# 449| r449_2(glval<void *>) = VariableAddress[b] :
|
||||
# 449| r449_3(void *) = Load[b] : &:r449_2, m446_9
|
||||
# 449| v449_4(void) = Call[Escape] : func:r449_1, 0:r449_3
|
||||
# 449| mu449_5(unknown) = ^CallSideEffect : ~m?
|
||||
# 449| v449_6(void) = ^BufferReadSideEffect[0] : &:r449_3, ~m?
|
||||
# 449| mu449_7(unknown) = ^BufferMayWriteSideEffect[0] : &:r449_3
|
||||
# 450| v450_1(void) = NoOp :
|
||||
# 446| v446_12(void) = ReturnIndirection[a] : &:r446_6, ~m?
|
||||
# 446| v446_13(void) = ReturnIndirection[b] : &:r446_10, ~m?
|
||||
# 446| v446_14(void) = ReturnVoid :
|
||||
# 446| v446_15(void) = AliasedUse : ~m?
|
||||
# 446| v446_16(void) = ExitFunction :
|
||||
|
||||
@@ -2044,3 +2044,57 @@ ssa.cpp:
|
||||
# 439| r439_15(glval<int>) = VariableAddress[#temp439:13] :
|
||||
# 439| m439_16(int) = Store[#temp439:13] : &:r439_15, r439_14
|
||||
#-----| Goto -> Block 1
|
||||
|
||||
# 442| void NonEscapingParams(void*, void*)
|
||||
# 442| Block 0
|
||||
# 442| v442_1(void) = EnterFunction :
|
||||
# 442| mu442_2(unknown) = AliasedDefinition :
|
||||
# 442| mu442_3(unknown) = InitializeNonLocal :
|
||||
# 442| r442_4(glval<void *>) = VariableAddress[a] :
|
||||
# 442| m442_5(void *) = InitializeParameter[a] : &:r442_4
|
||||
# 442| r442_6(void *) = Load[a] : &:r442_4, m442_5
|
||||
# 442| mu442_7(unknown) = InitializeIndirection[a] : &:r442_6
|
||||
# 442| r442_8(glval<void *>) = VariableAddress[b] :
|
||||
# 442| m442_9(void *) = InitializeParameter[b] : &:r442_8
|
||||
# 442| r442_10(void *) = Load[b] : &:r442_8, m442_9
|
||||
# 442| mu442_11(unknown) = InitializeIndirection[b] : &:r442_10
|
||||
# 444| v444_1(void) = NoOp :
|
||||
# 442| v442_12(void) = ReturnIndirection[a] : &:r442_6, ~m?
|
||||
# 442| v442_13(void) = ReturnIndirection[b] : &:r442_10, ~m?
|
||||
# 442| v442_14(void) = ReturnVoid :
|
||||
# 442| v442_15(void) = AliasedUse : ~m?
|
||||
# 442| v442_16(void) = ExitFunction :
|
||||
|
||||
# 446| void EscapingParams(void*, void*)
|
||||
# 446| Block 0
|
||||
# 446| v446_1(void) = EnterFunction :
|
||||
# 446| mu446_2(unknown) = AliasedDefinition :
|
||||
# 446| mu446_3(unknown) = InitializeNonLocal :
|
||||
# 446| r446_4(glval<void *>) = VariableAddress[a] :
|
||||
# 446| m446_5(void *) = InitializeParameter[a] : &:r446_4
|
||||
# 446| r446_6(void *) = Load[a] : &:r446_4, m446_5
|
||||
# 446| mu446_7(unknown) = InitializeIndirection[a] : &:r446_6
|
||||
# 446| r446_8(glval<void *>) = VariableAddress[b] :
|
||||
# 446| m446_9(void *) = InitializeParameter[b] : &:r446_8
|
||||
# 446| r446_10(void *) = Load[b] : &:r446_8, m446_9
|
||||
# 446| mu446_11(unknown) = InitializeIndirection[b] : &:r446_10
|
||||
# 448| r448_1(glval<unknown>) = FunctionAddress[Escape] :
|
||||
# 448| r448_2(glval<void *>) = VariableAddress[a] :
|
||||
# 448| r448_3(void *) = Load[a] : &:r448_2, m446_5
|
||||
# 448| v448_4(void) = Call[Escape] : func:r448_1, 0:r448_3
|
||||
# 448| mu448_5(unknown) = ^CallSideEffect : ~m?
|
||||
# 448| v448_6(void) = ^BufferReadSideEffect[0] : &:r448_3, ~m?
|
||||
# 448| mu448_7(unknown) = ^BufferMayWriteSideEffect[0] : &:r448_3
|
||||
# 449| r449_1(glval<unknown>) = FunctionAddress[Escape] :
|
||||
# 449| r449_2(glval<void *>) = VariableAddress[b] :
|
||||
# 449| r449_3(void *) = Load[b] : &:r449_2, m446_9
|
||||
# 449| v449_4(void) = Call[Escape] : func:r449_1, 0:r449_3
|
||||
# 449| mu449_5(unknown) = ^CallSideEffect : ~m?
|
||||
# 449| v449_6(void) = ^BufferReadSideEffect[0] : &:r449_3, ~m?
|
||||
# 449| mu449_7(unknown) = ^BufferMayWriteSideEffect[0] : &:r449_3
|
||||
# 450| v450_1(void) = NoOp :
|
||||
# 446| v446_12(void) = ReturnIndirection[a] : &:r446_6, ~m?
|
||||
# 446| v446_13(void) = ReturnIndirection[b] : &:r446_10, ~m?
|
||||
# 446| v446_14(void) = ReturnVoid :
|
||||
# 446| v446_15(void) = AliasedUse : ~m?
|
||||
# 446| v446_16(void) = ExitFunction :
|
||||
|
||||
@@ -1,74 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using Semmle.Util;
|
||||
|
||||
namespace Semmle.Extraction.CSharp.DependencyFetching
|
||||
{
|
||||
public class NugetConfig
|
||||
{
|
||||
internal class NugetFeed : IComparable<NugetFeed>
|
||||
{
|
||||
internal string Value { get; }
|
||||
internal bool DisableTlsCertificateValidation { get; set; }
|
||||
|
||||
internal NugetFeed(string value)
|
||||
{
|
||||
this.Value = value;
|
||||
this.DisableTlsCertificateValidation = true;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return this.Value;
|
||||
}
|
||||
|
||||
public int CompareTo(NugetFeed? other)
|
||||
{
|
||||
return this.Value.CompareTo(other?.Value);
|
||||
}
|
||||
}
|
||||
|
||||
internal IEnumerable<NugetFeed> Feeds { get; }
|
||||
|
||||
public NugetConfig()
|
||||
{
|
||||
this.Feeds = new List<NugetFeed>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes this configuration to a file located at <paramref name="nugetConfigPath"/>.
|
||||
/// </summary>
|
||||
/// <param name="nugetConfigPath">The path of the file to which the configuration should be written to.</param>
|
||||
public void Write(string nugetConfigPath)
|
||||
{
|
||||
var config = "";
|
||||
|
||||
var proxyHost = Environment.GetEnvironmentVariable("CODEQL_PROXY_HOST");
|
||||
var proxyPort = Environment.GetEnvironmentVariable("CODEQL_PROXY_PORT");
|
||||
if (!string.IsNullOrWhiteSpace(proxyHost) && !string.IsNullOrWhiteSpace(proxyPort))
|
||||
{
|
||||
var proxyAddress = $"http://{proxyHost}:{proxyPort}";
|
||||
config = $"""<add key="http_proxy" value="{proxyAddress}" />""";
|
||||
}
|
||||
|
||||
var sb = new StringBuilder();
|
||||
this.Feeds.ForEach((feed, index) => sb.AppendLine($"<add key=\"feed{index}\" value=\"{feed.Value}\" disableTLSCertificateValidation=\"{feed.DisableTlsCertificateValidation}\" />"));
|
||||
|
||||
File.WriteAllText(nugetConfigPath,
|
||||
$"""
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<config>
|
||||
{config}
|
||||
</config>
|
||||
<packageSources>
|
||||
<clear />
|
||||
{sb}
|
||||
</packageSources>
|
||||
</configuration>
|
||||
""");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,7 +3,6 @@ using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
@@ -94,25 +93,12 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
|
||||
|
||||
public HashSet<AssemblyLookupLocation> Restore()
|
||||
{
|
||||
try
|
||||
{
|
||||
var userConfigPath = Path.Join(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".nuget", "NuGet");
|
||||
Directory.CreateDirectory(userConfigPath);
|
||||
|
||||
var userConfig = new NugetConfig();
|
||||
userConfig.Write(Path.Join(userConfigPath, "NuGet.Config"));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.LogError($"Failed to write user nuget.config: {ex}");
|
||||
}
|
||||
|
||||
var assemblyLookupLocations = new HashSet<AssemblyLookupLocation>();
|
||||
var checkNugetFeedResponsiveness = EnvironmentVariables.GetBooleanOptOut(EnvironmentVariableNames.CheckNugetFeedResponsiveness);
|
||||
logger.LogInfo($"Checking NuGet feed responsiveness: {checkNugetFeedResponsiveness}");
|
||||
compilationInfoContainer.CompilationInfos.Add(("NuGet feed responsiveness checked", checkNugetFeedResponsiveness ? "1" : "0"));
|
||||
|
||||
HashSet<NugetConfig.NugetFeed>? explicitFeeds = null;
|
||||
HashSet<string>? explicitFeeds = null;
|
||||
|
||||
try
|
||||
{
|
||||
@@ -189,12 +175,12 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
|
||||
return assemblyLookupLocations;
|
||||
}
|
||||
|
||||
private List<NugetConfig.NugetFeed> GetReachableFallbackNugetFeeds(HashSet<NugetConfig.NugetFeed>? feedsFromNugetConfigs)
|
||||
private List<string> GetReachableFallbackNugetFeeds(HashSet<string>? feedsFromNugetConfigs)
|
||||
{
|
||||
var fallbackFeeds = EnvironmentVariables.GetURLs(EnvironmentVariableNames.FallbackNugetFeeds).Select(feed => new NugetConfig.NugetFeed(feed)).ToHashSet();
|
||||
var fallbackFeeds = EnvironmentVariables.GetURLs(EnvironmentVariableNames.FallbackNugetFeeds).ToHashSet();
|
||||
if (fallbackFeeds.Count == 0)
|
||||
{
|
||||
fallbackFeeds.Add(new NugetConfig.NugetFeed(PublicNugetOrgFeed));
|
||||
fallbackFeeds.Add(PublicNugetOrgFeed);
|
||||
logger.LogInfo($"No fallback Nuget feeds specified. Adding default feed: {PublicNugetOrgFeed}");
|
||||
|
||||
var shouldAddNugetConfigFeeds = EnvironmentVariables.GetBooleanOptOut(EnvironmentVariableNames.AddNugetConfigFeedsToFallback);
|
||||
@@ -307,7 +293,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
|
||||
compilationInfoContainer.CompilationInfos.Add(("Failed project restore with package source error", nugetSourceFailures.ToString()));
|
||||
}
|
||||
|
||||
private AssemblyLookupLocation? DownloadMissingPackagesFromSpecificFeeds(HashSet<NugetConfig.NugetFeed>? feedsFromNugetConfigs)
|
||||
private AssemblyLookupLocation? DownloadMissingPackagesFromSpecificFeeds(HashSet<string>? feedsFromNugetConfigs)
|
||||
{
|
||||
var reachableFallbackFeeds = GetReachableFallbackNugetFeeds(feedsFromNugetConfigs);
|
||||
if (reachableFallbackFeeds.Count > 0)
|
||||
@@ -319,7 +305,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
|
||||
return null;
|
||||
}
|
||||
|
||||
private AssemblyLookupLocation? DownloadMissingPackages(IEnumerable<NugetConfig.NugetFeed>? fallbackNugetFeeds = null)
|
||||
private AssemblyLookupLocation? DownloadMissingPackages(IEnumerable<string>? fallbackNugetFeeds = null)
|
||||
{
|
||||
var alreadyDownloadedPackages = GetRestoredPackageDirectoryNames(PackageDirectory.DirInfo);
|
||||
var alreadyDownloadedLegacyPackages = GetRestoredLegacyPackageNames();
|
||||
@@ -381,14 +367,23 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
|
||||
return missingPackageDirectory.DirInfo.FullName;
|
||||
}
|
||||
|
||||
private string? CreateFallbackNugetConfig(IEnumerable<NugetConfig.NugetFeed> fallbackNugetFeeds, string folderPath)
|
||||
private string? CreateFallbackNugetConfig(IEnumerable<string> fallbackNugetFeeds, string folderPath)
|
||||
{
|
||||
NugetConfig config = new NugetConfig();
|
||||
fallbackNugetFeeds.ForEach((feed, index) => config.Feeds.Append(feed));
|
||||
var sb = new StringBuilder();
|
||||
fallbackNugetFeeds.ForEach((feed, index) => sb.AppendLine($"<add key=\"feed{index}\" value=\"{feed}\" />"));
|
||||
|
||||
var nugetConfigPath = Path.Combine(folderPath, "nuget.config");
|
||||
logger.LogInfo($"Creating fallback nuget.config file {nugetConfigPath}.");
|
||||
config.Write(nugetConfigPath);
|
||||
File.WriteAllText(nugetConfigPath,
|
||||
$"""
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<packageSources>
|
||||
<clear />
|
||||
{sb}
|
||||
</packageSources>
|
||||
</configuration>
|
||||
""");
|
||||
|
||||
return nugetConfigPath;
|
||||
}
|
||||
@@ -591,34 +586,10 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
|
||||
}
|
||||
}
|
||||
|
||||
private bool IsFeedReachable(NugetConfig.NugetFeed feed, int timeoutMilliSeconds, int tryCount, bool allowExceptions = true)
|
||||
private bool IsFeedReachable(string feed, int timeoutMilliSeconds, int tryCount, bool allowExceptions = true)
|
||||
{
|
||||
logger.LogInfo($"Checking if Nuget feed '{feed}' is reachable...");
|
||||
|
||||
// Configure the handler for this check. If `DisableTlsCertificateValidation` is `true` for this feed,
|
||||
// we disable certificate validation.
|
||||
var handler = new HttpClientHandler();
|
||||
|
||||
var proxyHost = Environment.GetEnvironmentVariable("CODEQL_PROXY_HOST");
|
||||
var proxyPort = Environment.GetEnvironmentVariable("CODEQL_PROXY_PORT");
|
||||
if (!string.IsNullOrWhiteSpace(proxyHost) && !string.IsNullOrWhiteSpace(proxyPort))
|
||||
{
|
||||
var proxyAddress = new Uri($"http://{proxyHost}:{proxyPort}");
|
||||
handler.Proxy = new WebProxy(proxyAddress);
|
||||
handler.Proxy.Credentials = new NetworkCredential(Environment.GetEnvironmentVariable("CODEQL_PROXY_USER"), Environment.GetEnvironmentVariable("CODEQL_PROXY_PASSWORD"));
|
||||
|
||||
logger.LogInfo($"Using proxy at {proxyAddress}...");
|
||||
}
|
||||
|
||||
if (feed.DisableTlsCertificateValidation)
|
||||
{
|
||||
logger.LogInfo($"Disabling TLS certificate validation for '{feed}'...");
|
||||
handler.ClientCertificateOptions = ClientCertificateOption.Manual;
|
||||
handler.ServerCertificateCustomValidationCallback =
|
||||
(httpRequestMessage, cert, certChain, policyErrors) => { return true; };
|
||||
}
|
||||
|
||||
using HttpClient client = new(handler);
|
||||
using HttpClient client = new();
|
||||
|
||||
for (var i = 0; i < tryCount; i++)
|
||||
{
|
||||
@@ -626,7 +597,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
|
||||
cts.CancelAfter(timeoutMilliSeconds);
|
||||
try
|
||||
{
|
||||
ExecuteGetRequest(feed.Value, client, cts.Token).GetAwaiter().GetResult();
|
||||
ExecuteGetRequest(feed, client, cts.Token).GetAwaiter().GetResult();
|
||||
logger.LogInfo($"Querying Nuget feed '{feed}' succeeded.");
|
||||
return true;
|
||||
}
|
||||
@@ -644,13 +615,6 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
|
||||
// We're only interested in timeouts.
|
||||
var start = allowExceptions ? "Considering" : "Not considering";
|
||||
logger.LogInfo($"Querying Nuget feed '{feed}' failed in a timely manner. {start} the feed for use. The reason for the failure: {exc.Message}");
|
||||
logger.LogError($"Exception: {exc}");
|
||||
|
||||
if (exc.InnerException != null)
|
||||
{
|
||||
logger.LogError($"Inner exception: {exc.InnerException}");
|
||||
}
|
||||
|
||||
return allowExceptions;
|
||||
}
|
||||
}
|
||||
@@ -678,7 +642,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
|
||||
return (timeoutMilliSeconds, tryCount);
|
||||
}
|
||||
|
||||
private bool CheckFeeds(out HashSet<NugetConfig.NugetFeed> explicitFeeds)
|
||||
private bool CheckFeeds(out HashSet<string> explicitFeeds)
|
||||
{
|
||||
logger.LogInfo("Checking Nuget feeds...");
|
||||
(explicitFeeds, var allFeeds) = GetAllFeeds();
|
||||
@@ -693,7 +657,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
|
||||
|
||||
var (initialTimeout, tryCount) = GetFeedRequestSettings(isFallback: false);
|
||||
|
||||
var allFeedsReachable = explicitFeeds.All(feed => excludedFeeds.Contains(feed.Value) || IsFeedReachable(feed, initialTimeout, tryCount));
|
||||
var allFeedsReachable = explicitFeeds.All(feed => excludedFeeds.Contains(feed) || IsFeedReachable(feed, initialTimeout, tryCount));
|
||||
if (!allFeedsReachable)
|
||||
{
|
||||
logger.LogWarning("Found unreachable Nuget feed in C# analysis with build-mode 'none'. This may cause missing dependencies in the analysis.");
|
||||
@@ -747,12 +711,11 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
|
||||
}
|
||||
}
|
||||
|
||||
private (HashSet<NugetConfig.NugetFeed> explicitFeeds, HashSet<NugetConfig.NugetFeed> allFeeds) GetAllFeeds()
|
||||
private (HashSet<string> explicitFeeds, HashSet<string> allFeeds) GetAllFeeds()
|
||||
{
|
||||
var nugetConfigs = fileProvider.NugetConfigs;
|
||||
var explicitFeeds = nugetConfigs
|
||||
.SelectMany(config => GetFeeds(() => dotnet.GetNugetFeeds(config)))
|
||||
.Select(feed => new NugetConfig.NugetFeed(feed))
|
||||
.ToHashSet();
|
||||
|
||||
if (explicitFeeds.Count > 0)
|
||||
@@ -781,7 +744,6 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
|
||||
})
|
||||
.Where(folder => folder != null)
|
||||
.SelectMany(folder => GetFeeds(() => dotnet.GetNugetFeedsFromFolder(folder!)))
|
||||
.Select(feed => new NugetConfig.NugetFeed(feed))
|
||||
.ToHashSet();
|
||||
|
||||
logger.LogInfo($"Found {allFeeds.Count} Nuget feeds (with inherited ones) in nuget.config files: {string.Join(", ", allFeeds.OrderBy(f => f))}");
|
||||
|
||||
@@ -101,7 +101,7 @@
|
||||
latest version of CodeQL...</div>
|
||||
</div>
|
||||
<div class="Subhead border-0">
|
||||
<a href="query-help/codeql-cwe-coverage/">
|
||||
<a href="codeql-overview/supported-languages-and-frameworks/">
|
||||
<div class="Subhead-heading f4 text-center">CodeQL coverage of CWEs</div>
|
||||
</a>
|
||||
<div class="Subhead-description">Detailed information on the coverage of Common Weakness Enumerations (CWEs) in the latest release...</div>
|
||||
|
||||
@@ -1,16 +1,14 @@
|
||||
module(
|
||||
name = "rules_kotlin",
|
||||
version = "2.0.0-codeql.1",
|
||||
compatibility_level = 1,
|
||||
version = "1.9.4-codeql.1",
|
||||
repo_name = "rules_kotlin",
|
||||
)
|
||||
|
||||
bazel_dep(name = "platforms", version = "0.0.10")
|
||||
bazel_dep(name = "bazel_skylib", version = "1.7.1")
|
||||
bazel_dep(name = "platforms", version = "0.0.6")
|
||||
bazel_dep(name = "bazel_skylib", version = "1.4.2")
|
||||
bazel_dep(name = "rules_java", version = "7.2.0")
|
||||
bazel_dep(name = "rules_python", version = "0.23.1")
|
||||
bazel_dep(name = "rules_cc", version = "0.0.8")
|
||||
bazel_dep(name = "rules_android", version = "0.1.1")
|
||||
|
||||
rules_kotlin_extensions = use_extension(
|
||||
"//src/main/starlark/core/repositories:bzlmod_setup.bzl",
|
||||
@@ -21,9 +19,7 @@ use_repo(
|
||||
"com_github_google_ksp",
|
||||
"com_github_jetbrains_kotlin",
|
||||
"com_github_pinterest_ktlint",
|
||||
"kotlinx_serialization_core_jvm",
|
||||
"kotlinx_serialization_json",
|
||||
"kotlinx_serialization_json_jvm",
|
||||
"rules_android",
|
||||
)
|
||||
|
||||
register_toolchains("//kotlin/internal:default_toolchain")
|
||||
@@ -1,13 +1,13 @@
|
||||
We need to build different extractor variants with different -language-version options, which is not allowed
|
||||
in current kotlin_rules
|
||||
diff --git a/src/main/starlark/core/options/opts.kotlinc.bzl b/src/main/starlark/core/options/opts.kotlinc.bzl
|
||||
index 5e1461b..b93e6aa 100644
|
||||
index 9b15fb8..c0ac2cd 100644
|
||||
--- a/src/main/starlark/core/options/opts.kotlinc.bzl
|
||||
+++ b/src/main/starlark/core/options/opts.kotlinc.bzl
|
||||
@@ -33,6 +33,11 @@ def _map_jdk_release_to_flag(version):
|
||||
@@ -28,6 +28,11 @@ def _map_jvm_target_to_flag(version):
|
||||
return None
|
||||
return ["-Xjdk-release=%s" % version]
|
||||
|
||||
return ["-jvm-target=%s" % version]
|
||||
|
||||
+def _map_language_version_to_flag(version):
|
||||
+ if not version:
|
||||
+ return None
|
||||
@@ -16,9 +16,9 @@ index 5e1461b..b93e6aa 100644
|
||||
_KOPTS_ALL = {
|
||||
"warn": struct(
|
||||
args = dict(
|
||||
@@ -417,6 +422,15 @@ _KOPTS_ALL = {
|
||||
@@ -349,6 +354,15 @@ _KOPTS_ALL = {
|
||||
value_to_flag = None,
|
||||
map_value_to_flag = _map_jdk_release_to_flag,
|
||||
map_value_to_flag = _map_jvm_target_to_flag,
|
||||
),
|
||||
+ "language_version": struct(
|
||||
+ args = dict(
|
||||
@@ -30,5 +30,5 @@ index 5e1461b..b93e6aa 100644
|
||||
+ map_value_to_flag = _map_language_version_to_flag,
|
||||
+ ),
|
||||
}
|
||||
|
||||
# Filters out options that are not available in current compiler release
|
||||
|
||||
# Filters out options that are not available in current compiler release
|
||||
@@ -1,11 +1,9 @@
|
||||
Emitting jdeps is broken for the 2.0.0 kotlin extractor, and we don't need those files.
|
||||
Patching it here rather than passing `--@rules_kotlin//kotlin/settings:jvm_emit_jdeps=false`
|
||||
allows us to not have to specify that option (and therefore pull in `rules_kotlin`) in `semmle-code`.
|
||||
diff --git a/kotlin/settings/BUILD.bazel b/kotlin/settings/BUILD.bazel
|
||||
index 2c93c11..f352b80 100644
|
||||
--- a/kotlin/settings/BUILD.bazel
|
||||
+++ b/kotlin/settings/BUILD.bazel
|
||||
@@ -25,7 +25,7 @@ release_archive(
|
||||
--- a/kotlin/settings/BUILD.bazel 2000-01-01 01:00:00.000000000 +0100
|
||||
+++ b/kotlin/settings/BUILD.bazel 2024-04-10 14:51:16.060085986 +0200
|
||||
@@ -16,7 +16,7 @@
|
||||
# Flag that controls the emission of jdeps files during kotlin jvm compilation.
|
||||
bool_flag(
|
||||
name = "jvm_emit_jdeps",
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"integrity": "sha256-dsD8wsI+33NjIK3tGs2d3guuQY5XMd8Skz2IbLqGt5U=",
|
||||
"url": "https://github.com/bazelbuild/rules_kotlin/releases/download/v1.9.4/rules_kotlin-v1.9.4.tar.gz",
|
||||
"patches": {
|
||||
"codeql_do_not_emit_jdeps.patch": "sha256-x/HsujFlR1FGrgmbAbRZag9V4vKZZinBcs73tgRS478=",
|
||||
"codeql_add_language_version_option.patch": "sha256-qFpP/hIvqGzjJi0h8LAQK0UuWqwlj/oCecZYGqlMVP8="
|
||||
},
|
||||
"patch_strip": 1
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
{
|
||||
"integrity": "sha256-2JcjzJ67t72y66yhr30jg+B0YVZDz5ejZrdYp2t9xEM=",
|
||||
"url": "https://github.com/bazelbuild/rules_kotlin/releases/download/v2.0.0/rules_kotlin-v2.0.0.tar.gz",
|
||||
"patches": {
|
||||
"codeql_do_not_emit_jdeps.patch": "sha256-1ir4Aio1SICxnj1wafQ0GefT/m7bwn2n+SQwq19V3A8=",
|
||||
"codeql_add_language_version_option.patch": "sha256-t8Fm0bYZ4Q4vTqcoXZjyK4WPEoAafjE4whJLNnrnRbg="
|
||||
},
|
||||
"patch_strip": 1
|
||||
}
|
||||
@@ -21,7 +21,7 @@
|
||||
"github:bazelbuild/rules_kotlin"
|
||||
],
|
||||
"versions": [
|
||||
"2.0.0-codeql.1"
|
||||
"1.9.4-codeql.1"
|
||||
],
|
||||
"yanked_versions": {}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,4 @@
|
||||
from typing import (
|
||||
Callable as _Callable,
|
||||
Dict as _Dict,
|
||||
ClassVar as _ClassVar,
|
||||
)
|
||||
from typing import Callable as _Callable, Dict as _Dict, ClassVar as _ClassVar
|
||||
from misc.codegen.lib import schema as _schema
|
||||
import inspect as _inspect
|
||||
from dataclasses import dataclass as _dataclass
|
||||
@@ -275,16 +271,14 @@ class _PropertyAnnotation:
|
||||
|
||||
_ = _PropertyAnnotation()
|
||||
|
||||
drop = object()
|
||||
|
||||
|
||||
def annotate(annotated_cls: type, replace_bases: _Dict[type, type] | None = None) -> _Callable[[type], _PropertyAnnotation]:
|
||||
def annotate(annotated_cls: type) -> _Callable[[type], _PropertyAnnotation]:
|
||||
"""
|
||||
Add or modify schema annotations after a class has been defined previously.
|
||||
Add or modify schema annotations after a class has been defined
|
||||
For the moment, only docstring annotation is supported. In the future, any kind of
|
||||
modification will be allowed.
|
||||
|
||||
The name of the class used for annotation must be `_`.
|
||||
|
||||
`replace_bases` can be used to replace bases on the annotated class.
|
||||
The name of the class used for annotation must be `_`
|
||||
"""
|
||||
def decorator(cls: type) -> _PropertyAnnotation:
|
||||
if cls.__name__ != "_":
|
||||
@@ -293,15 +287,11 @@ def annotate(annotated_cls: type, replace_bases: _Dict[type, type] | None = None
|
||||
annotated_cls.__doc__ = cls.__doc__
|
||||
for p, v in cls.__dict__.get("_pragmas", {}).items():
|
||||
_ClassPragma(p, value=v)(annotated_cls)
|
||||
if replace_bases:
|
||||
annotated_cls.__bases__ = tuple(replace_bases.get(b, b) for b in annotated_cls.__bases__)
|
||||
for a in dir(cls):
|
||||
if a.startswith(_schema.inheritable_pragma_prefix):
|
||||
setattr(annotated_cls, a, getattr(cls, a))
|
||||
for p, a in cls.__annotations__.items():
|
||||
if a is drop:
|
||||
del annotated_cls.__annotations__[p]
|
||||
elif p in annotated_cls.__annotations__:
|
||||
if p in annotated_cls.__annotations__:
|
||||
annotated_cls.__annotations__[p] |= a
|
||||
elif isinstance(a, (_PropertyAnnotation, _PropertyModifierList)):
|
||||
raise _schema.Error(f"annotated property {p} not present in annotated class "
|
||||
|
||||
@@ -884,56 +884,6 @@ def test_annotate_not_underscore():
|
||||
"""
|
||||
|
||||
|
||||
def test_annotate_replace_bases():
|
||||
@load
|
||||
class data:
|
||||
class Root:
|
||||
pass
|
||||
|
||||
class A(Root):
|
||||
pass
|
||||
|
||||
class B(Root):
|
||||
pass
|
||||
|
||||
class C(B):
|
||||
pass
|
||||
|
||||
class Derived(A, B):
|
||||
pass
|
||||
|
||||
@defs.annotate(Derived, replace_bases={B: C})
|
||||
class _:
|
||||
pass
|
||||
assert data.classes == {
|
||||
"Root": schema.Class("Root", derived={"A", "B"}),
|
||||
"A": schema.Class("A", bases=["Root"], derived={"Derived"}),
|
||||
"B": schema.Class("B", bases=["Root"], derived={"C"}),
|
||||
"C": schema.Class("C", bases=["B"], derived={"Derived"}),
|
||||
"Derived": schema.Class("Derived", bases=["A", "C"]),
|
||||
}
|
||||
|
||||
|
||||
def test_annotate_drop_field():
|
||||
@load
|
||||
class data:
|
||||
class Root:
|
||||
x: defs.int
|
||||
y: defs.string
|
||||
z: defs.boolean
|
||||
|
||||
@defs.annotate(Root)
|
||||
class _:
|
||||
y: defs.drop
|
||||
|
||||
assert data.classes == {
|
||||
"Root": schema.Class("Root", properties=[
|
||||
schema.SingleProperty("x", "int"),
|
||||
schema.SingleProperty("z", "boolean"),
|
||||
]),
|
||||
}
|
||||
|
||||
|
||||
def test_test_with_unknown_string():
|
||||
with pytest.raises(schema.Error):
|
||||
@load
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
---
|
||||
category: minorAnalysis
|
||||
---
|
||||
* Modelled that `re.finditer` returns an iterable of `re.Match` objects. This is now understood by the API graph in many cases.
|
||||
@@ -3284,18 +3284,6 @@ module StdlibPrivate {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A base API node for regular expression functions.
|
||||
* Either the `re` module or a compiled regular expression.
|
||||
*/
|
||||
private API::Node re(boolean compiled) {
|
||||
result = API::moduleImport("re") and
|
||||
compiled = false
|
||||
or
|
||||
result = any(RePatternSummary c).getACall().(API::CallNode).getReturn() and
|
||||
compiled = true
|
||||
}
|
||||
|
||||
/**
|
||||
* A flow summary for methods returning a `re.Match` object
|
||||
*
|
||||
@@ -3305,18 +3293,17 @@ module StdlibPrivate {
|
||||
ReMatchSummary() { this = ["re.Match", "compiled re.Match"] }
|
||||
|
||||
override DataFlow::CallCfgNode getACall() {
|
||||
exists(API::Node re, boolean compiled |
|
||||
re = re(compiled) and
|
||||
(
|
||||
compiled = false and
|
||||
this = "re.Match"
|
||||
or
|
||||
compiled = true and
|
||||
this = "compiled re.Match"
|
||||
)
|
||||
|
|
||||
result = re.getMember(["match", "search", "fullmatch"]).getACall()
|
||||
)
|
||||
this = "re.Match" and
|
||||
result = API::moduleImport("re").getMember(["match", "search", "fullmatch"]).getACall()
|
||||
or
|
||||
this = "compiled re.Match" and
|
||||
result =
|
||||
any(RePatternSummary c)
|
||||
.getACall()
|
||||
.(API::CallNode)
|
||||
.getReturn()
|
||||
.getMember(["match", "search", "fullmatch"])
|
||||
.getACall()
|
||||
}
|
||||
|
||||
override DataFlow::ArgumentNode getACallback() { none() }
|
||||
@@ -3353,13 +3340,6 @@ module StdlibPrivate {
|
||||
}
|
||||
}
|
||||
|
||||
/** An API node for a `re.Match` object */
|
||||
private API::Node match() {
|
||||
result = any(ReMatchSummary c).getACall().(API::CallNode).getReturn()
|
||||
or
|
||||
result = re(_).getMember("finditer").getReturn().getASubscript()
|
||||
}
|
||||
|
||||
/**
|
||||
* A flow summary for methods on a `re.Match` object
|
||||
*
|
||||
@@ -3373,7 +3353,15 @@ module StdlibPrivate {
|
||||
methodName in ["expand", "group", "groups", "groupdict"]
|
||||
}
|
||||
|
||||
override DataFlow::CallCfgNode getACall() { result = match().getMember(methodName).getACall() }
|
||||
override DataFlow::CallCfgNode getACall() {
|
||||
result =
|
||||
any(ReMatchSummary c)
|
||||
.getACall()
|
||||
.(API::CallNode)
|
||||
.getReturn()
|
||||
.getMember(methodName)
|
||||
.getACall()
|
||||
}
|
||||
|
||||
override DataFlow::ArgumentNode getACallback() { none() }
|
||||
|
||||
@@ -3475,14 +3463,6 @@ module StdlibPrivate {
|
||||
) and
|
||||
preservesValue = false
|
||||
)
|
||||
or
|
||||
// flow from input string to attribute on match object
|
||||
exists(int arg | arg = methodName.(RegexExecutionMethod).getStringArgIndex() - offset |
|
||||
input in ["Argument[" + arg + "]", "Argument[string:]"] and
|
||||
methodName = "finditer" and
|
||||
output = "ReturnValue.ListElement.Attribute[string]" and
|
||||
preservesValue = true
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,12 +38,6 @@ ensure_tainted(
|
||||
|
||||
compiled_pat.match(ts).string, # $ tainted
|
||||
re.compile(ts).match("safe").re.pattern, # $ tainted
|
||||
|
||||
list(re.finditer(pat, ts))[0].string, # $ tainted
|
||||
[m.string for m in re.finditer(pat, ts)], # $ tainted
|
||||
|
||||
list(re.finditer(pat, ts))[0].groups()[0], # $ MISSING: tainted // this requires list content in type tracking
|
||||
[m.groups()[0] for m in re.finditer(pat, ts)], # $ tainted
|
||||
)
|
||||
ensure_not_tainted(
|
||||
safe_match.expand("Hello \1"),
|
||||
|
||||
@@ -31,5 +31,3 @@ query predicate multipleToString(AstNode n, string s) {
|
||||
}
|
||||
|
||||
query predicate extractionError(ExtractionError error) { any() }
|
||||
|
||||
query predicate extractionWarning(ExtractionWarning error) { any() }
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
---
|
||||
category: minorAnalysis
|
||||
---
|
||||
* The `ExtractionError` class has been split into `ExtractionError` and `ExtractionWarning`, reporting extraction errors and warnings respectively.
|
||||
@@ -18,7 +18,6 @@ private import ast.internal.Scope
|
||||
private import ast.internal.Synthesis
|
||||
private import ast.internal.TreeSitter
|
||||
private import Customizations
|
||||
private import Diagnostics
|
||||
|
||||
cached
|
||||
private module Cached {
|
||||
@@ -167,20 +166,3 @@ class RubyFile extends File {
|
||||
/** Gets the number of lines of comments in this file. */
|
||||
int getNumberOfLinesOfComments() { result = count(int line | this.line(line, true)) }
|
||||
}
|
||||
|
||||
/**
|
||||
* A successfully extracted file, that is, a file that was extracted and
|
||||
* contains no extraction errors or warnings.
|
||||
*/
|
||||
class SuccessfullyExtractedFile extends File {
|
||||
SuccessfullyExtractedFile() {
|
||||
not exists(Diagnostic d |
|
||||
d.getLocation().getFile() = this and
|
||||
(
|
||||
d instanceof ExtractionError
|
||||
or
|
||||
d instanceof ExtractionWarning
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,8 +48,7 @@ class Diagnostic extends @diagnostic {
|
||||
string toString() { result = this.getMessage() }
|
||||
}
|
||||
|
||||
/** A diagnostic that is error severity. */
|
||||
class ExtractionError extends Diagnostic, @diagnostic_error { }
|
||||
|
||||
/** A diagnostic that is warning severity. */
|
||||
class ExtractionWarning extends Diagnostic, @diagnostic_warning { }
|
||||
/** A diagnostic relating to a particular error in extracting a file. */
|
||||
class ExtractionError extends Diagnostic {
|
||||
ExtractionError() { this.getTag() = "parse_error" }
|
||||
}
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
---
|
||||
category: minorAnalysis
|
||||
---
|
||||
* The `rb/diagnostics/extraction-errors` diagnostic query has been split into `rb/diagnostics/extraction-errors` and `rb/diagnostics/extraction-warnings`, counting extraction errors and warnings respectively.
|
||||
@@ -1,19 +0,0 @@
|
||||
/**
|
||||
* @name Extraction warnings
|
||||
* @description List all extraction warnings for files in the source code directory.
|
||||
* @kind diagnostic
|
||||
* @id rb/diagnostics/extraction-warnings
|
||||
*/
|
||||
|
||||
import codeql.ruby.AST
|
||||
import codeql.ruby.Diagnostics
|
||||
|
||||
/** Gets the SARIF severity to associate with a warning. */
|
||||
int getSeverity() { result = 1 }
|
||||
|
||||
from ExtractionWarning warning, File f
|
||||
where
|
||||
f = warning.getLocation().getFile() and
|
||||
exists(f.getRelativePath())
|
||||
select warning, "Extraction warning in " + f + " with message " + warning.getMessage(),
|
||||
getSeverity()
|
||||
@@ -2,15 +2,14 @@
|
||||
* @id rb/summary/number-of-files-extracted-with-errors
|
||||
* @name Total number of Ruby files that were extracted with errors
|
||||
* @description The total number of Ruby code files that we extracted, but where
|
||||
* at least one extraction error (or warning) occurred in the process.
|
||||
* at least one extraction error occurred in the process.
|
||||
* @kind metric
|
||||
* @tags summary
|
||||
*/
|
||||
|
||||
import codeql.ruby.AST
|
||||
import codeql.files.FileSystem
|
||||
import codeql.ruby.Diagnostics
|
||||
|
||||
select count(File f |
|
||||
exists(f.getRelativePath()) and
|
||||
not f instanceof SuccessfullyExtractedFile
|
||||
exists(ExtractionError e | e.getLocation().getFile() = f) and exists(f.getRelativePath())
|
||||
)
|
||||
|
||||
@@ -2,12 +2,14 @@
|
||||
* @id rb/summary/number-of-successfully-extracted-files
|
||||
* @name Total number of Ruby files that were extracted without error
|
||||
* @description The total number of Ruby code files that we extracted without
|
||||
* encountering any extraction errors (or warnings).
|
||||
* encountering any extraction errors
|
||||
* @kind metric
|
||||
* @tags summary
|
||||
*/
|
||||
|
||||
import codeql.ruby.AST
|
||||
import codeql.files.FileSystem
|
||||
import codeql.ruby.Diagnostics
|
||||
|
||||
select count(SuccessfullyExtractedFile f | exists(f.getRelativePath()))
|
||||
select count(File f |
|
||||
not exists(ExtractionError e | e.getLocation().getFile() = f) and exists(f.getRelativePath())
|
||||
)
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
extractionWarning
|
||||
extractionError
|
||||
| src/not_ruby.rb:5:25:5:26 | A parse error occurred. Check the syntax of the file. If the file is invalid, correct the error or exclude the file from analysis. |
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
| src/not_ruby.rb:5:25:5:26 | A parse error occurred. Check the syntax of the file. If the file is invalid, correct the error or exclude the file from analysis. | Extraction failed in src/not_ruby.rb with error A parse error occurred. Check the syntax of the file. If the file is invalid, correct the error or exclude the file from analysis. | 2 |
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
| src/not_ruby.rb:5:25:5:26 | A parse error occurred. Check the syntax of the file. If the file is invalid, correct the error or exclude the file from analysis. | Extraction warning in src/not_ruby.rb with message A parse error occurred. Check the syntax of the file. If the file is invalid, correct the error or exclude the file from analysis. | 1 |
|
||||
@@ -1 +0,0 @@
|
||||
queries/diagnostics/ExtractionWarnings.ql
|
||||
@@ -3,7 +3,7 @@ use std::{fs, path::PathBuf};
|
||||
|
||||
pub mod codegen;
|
||||
mod flags;
|
||||
use codegen::grammar::ast_src::{AstNodeSrc, AstSrc, Field};
|
||||
use codegen::grammar::ast_src::{AstNodeSrc, AstSrc};
|
||||
use std::collections::{BTreeMap, BTreeSet};
|
||||
use std::env;
|
||||
use ungrammar::Grammar;
|
||||
@@ -94,13 +94,7 @@ fn write_schema(
|
||||
}
|
||||
|
||||
empty = false;
|
||||
if field.tp == "predicate" {
|
||||
writeln!(
|
||||
buf,
|
||||
" {}: predicate",
|
||||
property_name(&node.name, &field.name),
|
||||
)?;
|
||||
} else if field.tp == "string" {
|
||||
if field.tp == "string" {
|
||||
writeln!(
|
||||
buf,
|
||||
" {}: optional[string]",
|
||||
@@ -137,21 +131,6 @@ struct FieldInfo {
|
||||
}
|
||||
fn get_fields(node: &AstNodeSrc) -> Vec<FieldInfo> {
|
||||
let mut result = Vec::new();
|
||||
let predicates = [
|
||||
"async", "auto", "const", "default", "gen", "move", "mut", "raw", "ref", "static", "try",
|
||||
"unsafe",
|
||||
];
|
||||
for field in &node.fields {
|
||||
if let Field::Token(name) = field {
|
||||
if predicates.contains(&name.as_str()) {
|
||||
result.push(FieldInfo {
|
||||
name: format!("is_{name}"),
|
||||
tp: "predicate".to_string(),
|
||||
is_many: false,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
match node.name.as_str() {
|
||||
"Name" | "NameRef" | "Lifetime" => {
|
||||
@@ -440,9 +419,8 @@ fn write_extractor(grammar: &AstSrc) -> std::io::Result<String> {
|
||||
"//! Generated by `ast-generator`, do not edit by hand.\n
|
||||
#![cfg_attr(any(), rustfmt::skip)]
|
||||
|
||||
use super::base::{{TextValue, Translator}};
|
||||
use crate::emit_detached;
|
||||
use crate::generated;
|
||||
use super::base::{{TextValue, Translator}};
|
||||
use crate::trap::{{Label, TrapId}};
|
||||
use ra_ap_syntax::ast::{{
|
||||
HasArgList, HasAttrs, HasGenericArgs, HasGenericParams, HasLoopBody, HasModuleItem, HasName,
|
||||
@@ -450,7 +428,7 @@ use ra_ap_syntax::ast::{{
|
||||
}};
|
||||
use ra_ap_syntax::{{ast, AstNode}};
|
||||
|
||||
impl Translator<'_> {{
|
||||
impl Translator {{
|
||||
fn emit_else_branch(&mut self, node: ast::ElseBranch) -> Label<generated::Expr> {{
|
||||
match node {{
|
||||
ast::ElseBranch::IfExpr(inner) => self.emit_if_expr(inner).into(),
|
||||
@@ -502,14 +480,7 @@ impl Translator<'_> {{
|
||||
let type_name = &field.tp;
|
||||
let struct_field_name = &field.name;
|
||||
let class_field_name = property_name(&node.name, &field.name);
|
||||
if field.tp == "predicate" {
|
||||
writeln!(
|
||||
buf,
|
||||
" let {} = node.{}_token().is_some();",
|
||||
class_field_name,
|
||||
&struct_field_name[3..],
|
||||
)?;
|
||||
} else if field.tp == "string" {
|
||||
if field.tp == "string" {
|
||||
writeln!(
|
||||
buf,
|
||||
" let {} = node.try_get_text();",
|
||||
@@ -551,12 +522,7 @@ impl Translator<'_> {{
|
||||
writeln!(buf, " self.emit_location(label, &node);")?;
|
||||
writeln!(
|
||||
buf,
|
||||
" emit_detached!({}, self, node, label);",
|
||||
class_name
|
||||
)?;
|
||||
writeln!(
|
||||
buf,
|
||||
" self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens());"
|
||||
" self.emit_tokens(label.into(), node.syntax().children_with_tokens());"
|
||||
)?;
|
||||
writeln!(buf, " label")?;
|
||||
|
||||
@@ -572,6 +538,9 @@ fn main() -> std::io::Result<()> {
|
||||
.parse()
|
||||
.unwrap();
|
||||
let mut grammar = codegen::grammar::lower(&grammar);
|
||||
grammar
|
||||
.nodes
|
||||
.retain(|x| x.name != "MacroStmts" && x.name != "MacroItems");
|
||||
|
||||
grammar.enums.retain(|x| x.name != "Adt");
|
||||
|
||||
|
||||
@@ -13,14 +13,12 @@ ra_ap_base_db = "0.0.232"
|
||||
ra_ap_hir = "0.0.232"
|
||||
ra_ap_hir_def = "0.0.232"
|
||||
ra_ap_ide_db = "0.0.232"
|
||||
ra_ap_hir_expand = "0.0.232"
|
||||
ra_ap_load-cargo = "0.0.232"
|
||||
ra_ap_paths = "0.0.232"
|
||||
ra_ap_project_model = "0.0.232"
|
||||
ra_ap_syntax = "0.0.232"
|
||||
ra_ap_vfs = "0.0.232"
|
||||
ra_ap_parser = "0.0.232"
|
||||
ra_ap_span = "0.0.232"
|
||||
serde = "1.0.209"
|
||||
serde_with = "3.9.0"
|
||||
stderrlog = "0.6.0"
|
||||
|
||||
2
rust/extractor/src/generated/.generated.list
generated
2
rust/extractor/src/generated/.generated.list
generated
@@ -1,2 +1,2 @@
|
||||
mod.rs 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7
|
||||
top.rs 29bca54c5bf58ebc5bcc1d17de53c3fa23080c403c52e25be4a3c9dcafd26622 29bca54c5bf58ebc5bcc1d17de53c3fa23080c403c52e25be4a3c9dcafd26622
|
||||
top.rs 855f5f0639dfafd8603c9b842f6470ca6d1214bb72391890a1de64db2adebba1 855f5f0639dfafd8603c9b842f6470ca6d1214bb72391890a1de64db2adebba1
|
||||
|
||||
579
rust/extractor/src/generated/top.rs
generated
579
rust/extractor/src/generated/top.rs
generated
@@ -1032,110 +1032,6 @@ impl From<trap::Label<Lifetime>> for trap::Label<Locatable> {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct MacroItems {
|
||||
pub id: trap::TrapId<MacroItems>,
|
||||
pub items: Vec<trap::Label<Item>>,
|
||||
}
|
||||
|
||||
impl trap::TrapEntry for MacroItems {
|
||||
fn extract_id(&mut self) -> trap::TrapId<Self> {
|
||||
std::mem::replace(&mut self.id, trap::TrapId::Star)
|
||||
}
|
||||
|
||||
fn emit(self, id: trap::Label<Self>, out: &mut trap::Writer) {
|
||||
out.add_tuple("macro_items", vec![id.into()]);
|
||||
for (i, v) in self.items.into_iter().enumerate() {
|
||||
out.add_tuple("macro_items_items", vec![id.into(), i.into(), v.into()]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl trap::TrapClass for MacroItems {
|
||||
fn class_name() -> &'static str { "MacroItems" }
|
||||
}
|
||||
|
||||
impl From<trap::Label<MacroItems>> for trap::Label<AstNode> {
|
||||
fn from(value: trap::Label<MacroItems>) -> Self {
|
||||
// SAFETY: this is safe because in the dbscheme MacroItems is a subclass of AstNode
|
||||
unsafe {
|
||||
Self::from_untyped(value.as_untyped())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<trap::Label<MacroItems>> for trap::Label<Element> {
|
||||
fn from(value: trap::Label<MacroItems>) -> Self {
|
||||
// SAFETY: this is safe because in the dbscheme MacroItems is a subclass of Element
|
||||
unsafe {
|
||||
Self::from_untyped(value.as_untyped())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<trap::Label<MacroItems>> for trap::Label<Locatable> {
|
||||
fn from(value: trap::Label<MacroItems>) -> Self {
|
||||
// SAFETY: this is safe because in the dbscheme MacroItems is a subclass of Locatable
|
||||
unsafe {
|
||||
Self::from_untyped(value.as_untyped())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct MacroStmts {
|
||||
pub id: trap::TrapId<MacroStmts>,
|
||||
pub expr: Option<trap::Label<Expr>>,
|
||||
pub statements: Vec<trap::Label<Stmt>>,
|
||||
}
|
||||
|
||||
impl trap::TrapEntry for MacroStmts {
|
||||
fn extract_id(&mut self) -> trap::TrapId<Self> {
|
||||
std::mem::replace(&mut self.id, trap::TrapId::Star)
|
||||
}
|
||||
|
||||
fn emit(self, id: trap::Label<Self>, out: &mut trap::Writer) {
|
||||
out.add_tuple("macro_stmts", vec![id.into()]);
|
||||
if let Some(v) = self.expr {
|
||||
out.add_tuple("macro_stmts_exprs", vec![id.into(), v.into()]);
|
||||
}
|
||||
for (i, v) in self.statements.into_iter().enumerate() {
|
||||
out.add_tuple("macro_stmts_statements", vec![id.into(), i.into(), v.into()]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl trap::TrapClass for MacroStmts {
|
||||
fn class_name() -> &'static str { "MacroStmts" }
|
||||
}
|
||||
|
||||
impl From<trap::Label<MacroStmts>> for trap::Label<AstNode> {
|
||||
fn from(value: trap::Label<MacroStmts>) -> Self {
|
||||
// SAFETY: this is safe because in the dbscheme MacroStmts is a subclass of AstNode
|
||||
unsafe {
|
||||
Self::from_untyped(value.as_untyped())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<trap::Label<MacroStmts>> for trap::Label<Element> {
|
||||
fn from(value: trap::Label<MacroStmts>) -> Self {
|
||||
// SAFETY: this is safe because in the dbscheme MacroStmts is a subclass of Element
|
||||
unsafe {
|
||||
Self::from_untyped(value.as_untyped())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<trap::Label<MacroStmts>> for trap::Label<Locatable> {
|
||||
fn from(value: trap::Label<MacroStmts>) -> Self {
|
||||
// SAFETY: this is safe because in the dbscheme MacroStmts is a subclass of Locatable
|
||||
unsafe {
|
||||
Self::from_untyped(value.as_untyped())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct MatchArm {
|
||||
pub id: trap::TrapId<MatchArm>,
|
||||
@@ -1306,7 +1202,6 @@ impl From<trap::Label<MatchGuard>> for trap::Label<Locatable> {
|
||||
pub struct Meta {
|
||||
pub id: trap::TrapId<Meta>,
|
||||
pub expr: Option<trap::Label<Expr>>,
|
||||
pub is_unsafe: bool,
|
||||
pub path: Option<trap::Label<Path>>,
|
||||
pub token_tree: Option<trap::Label<TokenTree>>,
|
||||
}
|
||||
@@ -1321,9 +1216,6 @@ impl trap::TrapEntry for Meta {
|
||||
if let Some(v) = self.expr {
|
||||
out.add_tuple("meta_exprs", vec![id.into(), v.into()]);
|
||||
}
|
||||
if self.is_unsafe {
|
||||
out.add_tuple("meta_is_unsafe", vec![id.into()]);
|
||||
}
|
||||
if let Some(v) = self.path {
|
||||
out.add_tuple("meta_paths", vec![id.into(), v.into()]);
|
||||
}
|
||||
@@ -2180,7 +2072,6 @@ impl From<trap::Label<ReturnTypeSyntax>> for trap::Label<Locatable> {
|
||||
pub struct SelfParam {
|
||||
pub id: trap::TrapId<SelfParam>,
|
||||
pub attrs: Vec<trap::Label<Attr>>,
|
||||
pub is_mut: bool,
|
||||
pub lifetime: Option<trap::Label<Lifetime>>,
|
||||
pub name: Option<trap::Label<Name>>,
|
||||
pub ty: Option<trap::Label<TypeRef>>,
|
||||
@@ -2196,9 +2087,6 @@ impl trap::TrapEntry for SelfParam {
|
||||
for (i, v) in self.attrs.into_iter().enumerate() {
|
||||
out.add_tuple("self_param_attrs", vec![id.into(), i.into(), v.into()]);
|
||||
}
|
||||
if self.is_mut {
|
||||
out.add_tuple("self_param_is_mut", vec![id.into()]);
|
||||
}
|
||||
if let Some(v) = self.lifetime {
|
||||
out.add_tuple("self_param_lifetimes", vec![id.into(), v.into()]);
|
||||
}
|
||||
@@ -2534,8 +2422,6 @@ impl From<trap::Label<TupleField>> for trap::Label<Locatable> {
|
||||
pub struct TypeBound {
|
||||
pub id: trap::TrapId<TypeBound>,
|
||||
pub generic_param_list: Option<trap::Label<GenericParamList>>,
|
||||
pub is_async: bool,
|
||||
pub is_const: bool,
|
||||
pub lifetime: Option<trap::Label<Lifetime>>,
|
||||
pub ty: Option<trap::Label<TypeRef>>,
|
||||
}
|
||||
@@ -2550,12 +2436,6 @@ impl trap::TrapEntry for TypeBound {
|
||||
if let Some(v) = self.generic_param_list {
|
||||
out.add_tuple("type_bound_generic_param_lists", vec![id.into(), v.into()]);
|
||||
}
|
||||
if self.is_async {
|
||||
out.add_tuple("type_bound_is_async", vec![id.into()]);
|
||||
}
|
||||
if self.is_const {
|
||||
out.add_tuple("type_bound_is_const", vec![id.into()]);
|
||||
}
|
||||
if let Some(v) = self.lifetime {
|
||||
out.add_tuple("type_bound_lifetimes", vec![id.into(), v.into()]);
|
||||
}
|
||||
@@ -3545,12 +3425,6 @@ impl From<trap::Label<BinaryExpr>> for trap::Label<Locatable> {
|
||||
pub struct BlockExpr {
|
||||
pub id: trap::TrapId<BlockExpr>,
|
||||
pub attrs: Vec<trap::Label<Attr>>,
|
||||
pub is_async: bool,
|
||||
pub is_const: bool,
|
||||
pub is_gen: bool,
|
||||
pub is_move: bool,
|
||||
pub is_try: bool,
|
||||
pub is_unsafe: bool,
|
||||
pub label: Option<trap::Label<Label>>,
|
||||
pub stmt_list: Option<trap::Label<StmtList>>,
|
||||
}
|
||||
@@ -3565,24 +3439,6 @@ impl trap::TrapEntry for BlockExpr {
|
||||
for (i, v) in self.attrs.into_iter().enumerate() {
|
||||
out.add_tuple("block_expr_attrs", vec![id.into(), i.into(), v.into()]);
|
||||
}
|
||||
if self.is_async {
|
||||
out.add_tuple("block_expr_is_async", vec![id.into()]);
|
||||
}
|
||||
if self.is_const {
|
||||
out.add_tuple("block_expr_is_const", vec![id.into()]);
|
||||
}
|
||||
if self.is_gen {
|
||||
out.add_tuple("block_expr_is_gen", vec![id.into()]);
|
||||
}
|
||||
if self.is_move {
|
||||
out.add_tuple("block_expr_is_move", vec![id.into()]);
|
||||
}
|
||||
if self.is_try {
|
||||
out.add_tuple("block_expr_is_try", vec![id.into()]);
|
||||
}
|
||||
if self.is_unsafe {
|
||||
out.add_tuple("block_expr_is_unsafe", vec![id.into()]);
|
||||
}
|
||||
if let Some(v) = self.label {
|
||||
out.add_tuple("block_expr_labels", vec![id.into(), v.into()]);
|
||||
}
|
||||
@@ -3759,44 +3615,66 @@ impl From<trap::Label<BreakExpr>> for trap::Label<Locatable> {
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct CallExprBase {
|
||||
_unused: ()
|
||||
pub struct CallExpr {
|
||||
pub id: trap::TrapId<CallExpr>,
|
||||
pub arg_list: Option<trap::Label<ArgList>>,
|
||||
pub attrs: Vec<trap::Label<Attr>>,
|
||||
pub expr: Option<trap::Label<Expr>>,
|
||||
}
|
||||
|
||||
impl trap::TrapClass for CallExprBase {
|
||||
fn class_name() -> &'static str { "CallExprBase" }
|
||||
impl trap::TrapEntry for CallExpr {
|
||||
fn extract_id(&mut self) -> trap::TrapId<Self> {
|
||||
std::mem::replace(&mut self.id, trap::TrapId::Star)
|
||||
}
|
||||
|
||||
fn emit(self, id: trap::Label<Self>, out: &mut trap::Writer) {
|
||||
out.add_tuple("call_exprs", vec![id.into()]);
|
||||
if let Some(v) = self.arg_list {
|
||||
out.add_tuple("call_expr_arg_lists", vec![id.into(), v.into()]);
|
||||
}
|
||||
for (i, v) in self.attrs.into_iter().enumerate() {
|
||||
out.add_tuple("call_expr_attrs", vec![id.into(), i.into(), v.into()]);
|
||||
}
|
||||
if let Some(v) = self.expr {
|
||||
out.add_tuple("call_expr_exprs", vec![id.into(), v.into()]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<trap::Label<CallExprBase>> for trap::Label<AstNode> {
|
||||
fn from(value: trap::Label<CallExprBase>) -> Self {
|
||||
// SAFETY: this is safe because in the dbscheme CallExprBase is a subclass of AstNode
|
||||
impl trap::TrapClass for CallExpr {
|
||||
fn class_name() -> &'static str { "CallExpr" }
|
||||
}
|
||||
|
||||
impl From<trap::Label<CallExpr>> for trap::Label<AstNode> {
|
||||
fn from(value: trap::Label<CallExpr>) -> Self {
|
||||
// SAFETY: this is safe because in the dbscheme CallExpr is a subclass of AstNode
|
||||
unsafe {
|
||||
Self::from_untyped(value.as_untyped())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<trap::Label<CallExprBase>> for trap::Label<Element> {
|
||||
fn from(value: trap::Label<CallExprBase>) -> Self {
|
||||
// SAFETY: this is safe because in the dbscheme CallExprBase is a subclass of Element
|
||||
impl From<trap::Label<CallExpr>> for trap::Label<Element> {
|
||||
fn from(value: trap::Label<CallExpr>) -> Self {
|
||||
// SAFETY: this is safe because in the dbscheme CallExpr is a subclass of Element
|
||||
unsafe {
|
||||
Self::from_untyped(value.as_untyped())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<trap::Label<CallExprBase>> for trap::Label<Expr> {
|
||||
fn from(value: trap::Label<CallExprBase>) -> Self {
|
||||
// SAFETY: this is safe because in the dbscheme CallExprBase is a subclass of Expr
|
||||
impl From<trap::Label<CallExpr>> for trap::Label<Expr> {
|
||||
fn from(value: trap::Label<CallExpr>) -> Self {
|
||||
// SAFETY: this is safe because in the dbscheme CallExpr is a subclass of Expr
|
||||
unsafe {
|
||||
Self::from_untyped(value.as_untyped())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<trap::Label<CallExprBase>> for trap::Label<Locatable> {
|
||||
fn from(value: trap::Label<CallExprBase>) -> Self {
|
||||
// SAFETY: this is safe because in the dbscheme CallExprBase is a subclass of Locatable
|
||||
impl From<trap::Label<CallExpr>> for trap::Label<Locatable> {
|
||||
fn from(value: trap::Label<CallExpr>) -> Self {
|
||||
// SAFETY: this is safe because in the dbscheme CallExpr is a subclass of Locatable
|
||||
unsafe {
|
||||
Self::from_untyped(value.as_untyped())
|
||||
}
|
||||
@@ -3876,11 +3754,6 @@ pub struct ClosureExpr {
|
||||
pub attrs: Vec<trap::Label<Attr>>,
|
||||
pub body: Option<trap::Label<Expr>>,
|
||||
pub closure_binder: Option<trap::Label<ClosureBinder>>,
|
||||
pub is_async: bool,
|
||||
pub is_const: bool,
|
||||
pub is_gen: bool,
|
||||
pub is_move: bool,
|
||||
pub is_static: bool,
|
||||
pub param_list: Option<trap::Label<ParamList>>,
|
||||
pub ret_type: Option<trap::Label<RetType>>,
|
||||
}
|
||||
@@ -3901,21 +3774,6 @@ impl trap::TrapEntry for ClosureExpr {
|
||||
if let Some(v) = self.closure_binder {
|
||||
out.add_tuple("closure_expr_closure_binders", vec![id.into(), v.into()]);
|
||||
}
|
||||
if self.is_async {
|
||||
out.add_tuple("closure_expr_is_async", vec![id.into()]);
|
||||
}
|
||||
if self.is_const {
|
||||
out.add_tuple("closure_expr_is_const", vec![id.into()]);
|
||||
}
|
||||
if self.is_gen {
|
||||
out.add_tuple("closure_expr_is_gen", vec![id.into()]);
|
||||
}
|
||||
if self.is_move {
|
||||
out.add_tuple("closure_expr_is_move", vec![id.into()]);
|
||||
}
|
||||
if self.is_static {
|
||||
out.add_tuple("closure_expr_is_static", vec![id.into()]);
|
||||
}
|
||||
if let Some(v) = self.param_list {
|
||||
out.add_tuple("closure_expr_param_lists", vec![id.into(), v.into()]);
|
||||
}
|
||||
@@ -4085,7 +3943,6 @@ impl From<trap::Label<ConstArg>> for trap::Label<Locatable> {
|
||||
pub struct ConstBlockPat {
|
||||
pub id: trap::TrapId<ConstBlockPat>,
|
||||
pub block_expr: Option<trap::Label<BlockExpr>>,
|
||||
pub is_const: bool,
|
||||
}
|
||||
|
||||
impl trap::TrapEntry for ConstBlockPat {
|
||||
@@ -4098,9 +3955,6 @@ impl trap::TrapEntry for ConstBlockPat {
|
||||
if let Some(v) = self.block_expr {
|
||||
out.add_tuple("const_block_pat_block_exprs", vec![id.into(), v.into()]);
|
||||
}
|
||||
if self.is_const {
|
||||
out.add_tuple("const_block_pat_is_const", vec![id.into()]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4149,7 +4003,6 @@ pub struct ConstParam {
|
||||
pub id: trap::TrapId<ConstParam>,
|
||||
pub attrs: Vec<trap::Label<Attr>>,
|
||||
pub default_val: Option<trap::Label<ConstArg>>,
|
||||
pub is_const: bool,
|
||||
pub name: Option<trap::Label<Name>>,
|
||||
pub ty: Option<trap::Label<TypeRef>>,
|
||||
}
|
||||
@@ -4167,9 +4020,6 @@ impl trap::TrapEntry for ConstParam {
|
||||
if let Some(v) = self.default_val {
|
||||
out.add_tuple("const_param_default_vals", vec![id.into(), v.into()]);
|
||||
}
|
||||
if self.is_const {
|
||||
out.add_tuple("const_param_is_const", vec![id.into()]);
|
||||
}
|
||||
if let Some(v) = self.name {
|
||||
out.add_tuple("const_param_names", vec![id.into(), v.into()]);
|
||||
}
|
||||
@@ -4471,9 +4321,6 @@ impl From<trap::Label<FieldExpr>> for trap::Label<Locatable> {
|
||||
pub struct FnPtrType {
|
||||
pub id: trap::TrapId<FnPtrType>,
|
||||
pub abi: Option<trap::Label<Abi>>,
|
||||
pub is_async: bool,
|
||||
pub is_const: bool,
|
||||
pub is_unsafe: bool,
|
||||
pub param_list: Option<trap::Label<ParamList>>,
|
||||
pub ret_type: Option<trap::Label<RetType>>,
|
||||
}
|
||||
@@ -4488,15 +4335,6 @@ impl trap::TrapEntry for FnPtrType {
|
||||
if let Some(v) = self.abi {
|
||||
out.add_tuple("fn_ptr_type_abis", vec![id.into(), v.into()]);
|
||||
}
|
||||
if self.is_async {
|
||||
out.add_tuple("fn_ptr_type_is_async", vec![id.into()]);
|
||||
}
|
||||
if self.is_const {
|
||||
out.add_tuple("fn_ptr_type_is_const", vec![id.into()]);
|
||||
}
|
||||
if self.is_unsafe {
|
||||
out.add_tuple("fn_ptr_type_is_unsafe", vec![id.into()]);
|
||||
}
|
||||
if let Some(v) = self.param_list {
|
||||
out.add_tuple("fn_ptr_type_param_lists", vec![id.into(), v.into()]);
|
||||
}
|
||||
@@ -4755,8 +4593,6 @@ impl From<trap::Label<FormatArgsExpr>> for trap::Label<Locatable> {
|
||||
pub struct IdentPat {
|
||||
pub id: trap::TrapId<IdentPat>,
|
||||
pub attrs: Vec<trap::Label<Attr>>,
|
||||
pub is_mut: bool,
|
||||
pub is_ref: bool,
|
||||
pub name: Option<trap::Label<Name>>,
|
||||
pub pat: Option<trap::Label<Pat>>,
|
||||
}
|
||||
@@ -4771,12 +4607,6 @@ impl trap::TrapEntry for IdentPat {
|
||||
for (i, v) in self.attrs.into_iter().enumerate() {
|
||||
out.add_tuple("ident_pat_attrs", vec![id.into(), i.into(), v.into()]);
|
||||
}
|
||||
if self.is_mut {
|
||||
out.add_tuple("ident_pat_is_mut", vec![id.into()]);
|
||||
}
|
||||
if self.is_ref {
|
||||
out.add_tuple("ident_pat_is_ref", vec![id.into()]);
|
||||
}
|
||||
if let Some(v) = self.name {
|
||||
out.add_tuple("ident_pat_names", vec![id.into(), v.into()]);
|
||||
}
|
||||
@@ -5824,6 +5654,81 @@ impl From<trap::Label<MatchExpr>> for trap::Label<Locatable> {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct MethodCallExpr {
|
||||
pub id: trap::TrapId<MethodCallExpr>,
|
||||
pub arg_list: Option<trap::Label<ArgList>>,
|
||||
pub attrs: Vec<trap::Label<Attr>>,
|
||||
pub generic_arg_list: Option<trap::Label<GenericArgList>>,
|
||||
pub name_ref: Option<trap::Label<NameRef>>,
|
||||
pub receiver: Option<trap::Label<Expr>>,
|
||||
}
|
||||
|
||||
impl trap::TrapEntry for MethodCallExpr {
|
||||
fn extract_id(&mut self) -> trap::TrapId<Self> {
|
||||
std::mem::replace(&mut self.id, trap::TrapId::Star)
|
||||
}
|
||||
|
||||
fn emit(self, id: trap::Label<Self>, out: &mut trap::Writer) {
|
||||
out.add_tuple("method_call_exprs", vec![id.into()]);
|
||||
if let Some(v) = self.arg_list {
|
||||
out.add_tuple("method_call_expr_arg_lists", vec![id.into(), v.into()]);
|
||||
}
|
||||
for (i, v) in self.attrs.into_iter().enumerate() {
|
||||
out.add_tuple("method_call_expr_attrs", vec![id.into(), i.into(), v.into()]);
|
||||
}
|
||||
if let Some(v) = self.generic_arg_list {
|
||||
out.add_tuple("method_call_expr_generic_arg_lists", vec![id.into(), v.into()]);
|
||||
}
|
||||
if let Some(v) = self.name_ref {
|
||||
out.add_tuple("method_call_expr_name_refs", vec![id.into(), v.into()]);
|
||||
}
|
||||
if let Some(v) = self.receiver {
|
||||
out.add_tuple("method_call_expr_receivers", vec![id.into(), v.into()]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl trap::TrapClass for MethodCallExpr {
|
||||
fn class_name() -> &'static str { "MethodCallExpr" }
|
||||
}
|
||||
|
||||
impl From<trap::Label<MethodCallExpr>> for trap::Label<AstNode> {
|
||||
fn from(value: trap::Label<MethodCallExpr>) -> Self {
|
||||
// SAFETY: this is safe because in the dbscheme MethodCallExpr is a subclass of AstNode
|
||||
unsafe {
|
||||
Self::from_untyped(value.as_untyped())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<trap::Label<MethodCallExpr>> for trap::Label<Element> {
|
||||
fn from(value: trap::Label<MethodCallExpr>) -> Self {
|
||||
// SAFETY: this is safe because in the dbscheme MethodCallExpr is a subclass of Element
|
||||
unsafe {
|
||||
Self::from_untyped(value.as_untyped())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<trap::Label<MethodCallExpr>> for trap::Label<Expr> {
|
||||
fn from(value: trap::Label<MethodCallExpr>) -> Self {
|
||||
// SAFETY: this is safe because in the dbscheme MethodCallExpr is a subclass of Expr
|
||||
unsafe {
|
||||
Self::from_untyped(value.as_untyped())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<trap::Label<MethodCallExpr>> for trap::Label<Locatable> {
|
||||
fn from(value: trap::Label<MethodCallExpr>) -> Self {
|
||||
// SAFETY: this is safe because in the dbscheme MethodCallExpr is a subclass of Locatable
|
||||
unsafe {
|
||||
Self::from_untyped(value.as_untyped())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct NeverType {
|
||||
pub id: trap::TrapId<NeverType>,
|
||||
@@ -6437,8 +6342,6 @@ impl From<trap::Label<PrefixExpr>> for trap::Label<Locatable> {
|
||||
#[derive(Debug)]
|
||||
pub struct PtrType {
|
||||
pub id: trap::TrapId<PtrType>,
|
||||
pub is_const: bool,
|
||||
pub is_mut: bool,
|
||||
pub ty: Option<trap::Label<TypeRef>>,
|
||||
}
|
||||
|
||||
@@ -6449,12 +6352,6 @@ impl trap::TrapEntry for PtrType {
|
||||
|
||||
fn emit(self, id: trap::Label<Self>, out: &mut trap::Writer) {
|
||||
out.add_tuple("ptr_types", vec![id.into()]);
|
||||
if self.is_const {
|
||||
out.add_tuple("ptr_type_is_const", vec![id.into()]);
|
||||
}
|
||||
if self.is_mut {
|
||||
out.add_tuple("ptr_type_is_mut", vec![id.into()]);
|
||||
}
|
||||
if let Some(v) = self.ty {
|
||||
out.add_tuple("ptr_type_ties", vec![id.into(), v.into()]);
|
||||
}
|
||||
@@ -6829,9 +6726,6 @@ pub struct RefExpr {
|
||||
pub id: trap::TrapId<RefExpr>,
|
||||
pub attrs: Vec<trap::Label<Attr>>,
|
||||
pub expr: Option<trap::Label<Expr>>,
|
||||
pub is_const: bool,
|
||||
pub is_mut: bool,
|
||||
pub is_raw: bool,
|
||||
}
|
||||
|
||||
impl trap::TrapEntry for RefExpr {
|
||||
@@ -6847,15 +6741,6 @@ impl trap::TrapEntry for RefExpr {
|
||||
if let Some(v) = self.expr {
|
||||
out.add_tuple("ref_expr_exprs", vec![id.into(), v.into()]);
|
||||
}
|
||||
if self.is_const {
|
||||
out.add_tuple("ref_expr_is_const", vec![id.into()]);
|
||||
}
|
||||
if self.is_mut {
|
||||
out.add_tuple("ref_expr_is_mut", vec![id.into()]);
|
||||
}
|
||||
if self.is_raw {
|
||||
out.add_tuple("ref_expr_is_raw", vec![id.into()]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6902,7 +6787,6 @@ impl From<trap::Label<RefExpr>> for trap::Label<Locatable> {
|
||||
#[derive(Debug)]
|
||||
pub struct RefPat {
|
||||
pub id: trap::TrapId<RefPat>,
|
||||
pub is_mut: bool,
|
||||
pub pat: Option<trap::Label<Pat>>,
|
||||
}
|
||||
|
||||
@@ -6913,9 +6797,6 @@ impl trap::TrapEntry for RefPat {
|
||||
|
||||
fn emit(self, id: trap::Label<Self>, out: &mut trap::Writer) {
|
||||
out.add_tuple("ref_pats", vec![id.into()]);
|
||||
if self.is_mut {
|
||||
out.add_tuple("ref_pat_is_mut", vec![id.into()]);
|
||||
}
|
||||
if let Some(v) = self.pat {
|
||||
out.add_tuple("ref_pat_pats", vec![id.into(), v.into()]);
|
||||
}
|
||||
@@ -6965,7 +6846,6 @@ impl From<trap::Label<RefPat>> for trap::Label<Pat> {
|
||||
#[derive(Debug)]
|
||||
pub struct RefType {
|
||||
pub id: trap::TrapId<RefType>,
|
||||
pub is_mut: bool,
|
||||
pub lifetime: Option<trap::Label<Lifetime>>,
|
||||
pub ty: Option<trap::Label<TypeRef>>,
|
||||
}
|
||||
@@ -6977,9 +6857,6 @@ impl trap::TrapEntry for RefType {
|
||||
|
||||
fn emit(self, id: trap::Label<Self>, out: &mut trap::Writer) {
|
||||
out.add_tuple("ref_types", vec![id.into()]);
|
||||
if self.is_mut {
|
||||
out.add_tuple("ref_type_is_mut", vec![id.into()]);
|
||||
}
|
||||
if let Some(v) = self.lifetime {
|
||||
out.add_tuple("ref_type_lifetimes", vec![id.into(), v.into()]);
|
||||
}
|
||||
@@ -8076,89 +7953,11 @@ impl From<trap::Label<YieldExpr>> for trap::Label<Locatable> {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct CallExpr {
|
||||
pub id: trap::TrapId<CallExpr>,
|
||||
pub arg_list: Option<trap::Label<ArgList>>,
|
||||
pub attrs: Vec<trap::Label<Attr>>,
|
||||
pub expr: Option<trap::Label<Expr>>,
|
||||
}
|
||||
|
||||
impl trap::TrapEntry for CallExpr {
|
||||
fn extract_id(&mut self) -> trap::TrapId<Self> {
|
||||
std::mem::replace(&mut self.id, trap::TrapId::Star)
|
||||
}
|
||||
|
||||
fn emit(self, id: trap::Label<Self>, out: &mut trap::Writer) {
|
||||
out.add_tuple("call_exprs", vec![id.into()]);
|
||||
if let Some(v) = self.arg_list {
|
||||
out.add_tuple("call_expr_base_arg_lists", vec![id.into(), v.into()]);
|
||||
}
|
||||
for (i, v) in self.attrs.into_iter().enumerate() {
|
||||
out.add_tuple("call_expr_base_attrs", vec![id.into(), i.into(), v.into()]);
|
||||
}
|
||||
if let Some(v) = self.expr {
|
||||
out.add_tuple("call_expr_exprs", vec![id.into(), v.into()]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl trap::TrapClass for CallExpr {
|
||||
fn class_name() -> &'static str { "CallExpr" }
|
||||
}
|
||||
|
||||
impl From<trap::Label<CallExpr>> for trap::Label<AstNode> {
|
||||
fn from(value: trap::Label<CallExpr>) -> Self {
|
||||
// SAFETY: this is safe because in the dbscheme CallExpr is a subclass of AstNode
|
||||
unsafe {
|
||||
Self::from_untyped(value.as_untyped())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<trap::Label<CallExpr>> for trap::Label<CallExprBase> {
|
||||
fn from(value: trap::Label<CallExpr>) -> Self {
|
||||
// SAFETY: this is safe because in the dbscheme CallExpr is a subclass of CallExprBase
|
||||
unsafe {
|
||||
Self::from_untyped(value.as_untyped())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<trap::Label<CallExpr>> for trap::Label<Element> {
|
||||
fn from(value: trap::Label<CallExpr>) -> Self {
|
||||
// SAFETY: this is safe because in the dbscheme CallExpr is a subclass of Element
|
||||
unsafe {
|
||||
Self::from_untyped(value.as_untyped())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<trap::Label<CallExpr>> for trap::Label<Expr> {
|
||||
fn from(value: trap::Label<CallExpr>) -> Self {
|
||||
// SAFETY: this is safe because in the dbscheme CallExpr is a subclass of Expr
|
||||
unsafe {
|
||||
Self::from_untyped(value.as_untyped())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<trap::Label<CallExpr>> for trap::Label<Locatable> {
|
||||
fn from(value: trap::Label<CallExpr>) -> Self {
|
||||
// SAFETY: this is safe because in the dbscheme CallExpr is a subclass of Locatable
|
||||
unsafe {
|
||||
Self::from_untyped(value.as_untyped())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct Const {
|
||||
pub id: trap::TrapId<Const>,
|
||||
pub attrs: Vec<trap::Label<Attr>>,
|
||||
pub body: Option<trap::Label<Expr>>,
|
||||
pub is_const: bool,
|
||||
pub is_default: bool,
|
||||
pub name: Option<trap::Label<Name>>,
|
||||
pub ty: Option<trap::Label<TypeRef>>,
|
||||
pub visibility: Option<trap::Label<Visibility>>,
|
||||
@@ -8177,12 +7976,6 @@ impl trap::TrapEntry for Const {
|
||||
if let Some(v) = self.body {
|
||||
out.add_tuple("const_bodies", vec![id.into(), v.into()]);
|
||||
}
|
||||
if self.is_const {
|
||||
out.add_tuple("const_is_const", vec![id.into()]);
|
||||
}
|
||||
if self.is_default {
|
||||
out.add_tuple("const_is_default", vec![id.into()]);
|
||||
}
|
||||
if let Some(v) = self.name {
|
||||
out.add_tuple("const_names", vec![id.into(), v.into()]);
|
||||
}
|
||||
@@ -8347,7 +8140,6 @@ pub struct ExternBlock {
|
||||
pub abi: Option<trap::Label<Abi>>,
|
||||
pub attrs: Vec<trap::Label<Attr>>,
|
||||
pub extern_item_list: Option<trap::Label<ExternItemList>>,
|
||||
pub is_unsafe: bool,
|
||||
}
|
||||
|
||||
impl trap::TrapEntry for ExternBlock {
|
||||
@@ -8366,9 +8158,6 @@ impl trap::TrapEntry for ExternBlock {
|
||||
if let Some(v) = self.extern_item_list {
|
||||
out.add_tuple("extern_block_extern_item_lists", vec![id.into(), v.into()]);
|
||||
}
|
||||
if self.is_unsafe {
|
||||
out.add_tuple("extern_block_is_unsafe", vec![id.into()]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8508,11 +8297,6 @@ pub struct Function {
|
||||
pub attrs: Vec<trap::Label<Attr>>,
|
||||
pub body: Option<trap::Label<BlockExpr>>,
|
||||
pub generic_param_list: Option<trap::Label<GenericParamList>>,
|
||||
pub is_async: bool,
|
||||
pub is_const: bool,
|
||||
pub is_default: bool,
|
||||
pub is_gen: bool,
|
||||
pub is_unsafe: bool,
|
||||
pub name: Option<trap::Label<Name>>,
|
||||
pub param_list: Option<trap::Label<ParamList>>,
|
||||
pub ret_type: Option<trap::Label<RetType>>,
|
||||
@@ -8539,21 +8323,6 @@ impl trap::TrapEntry for Function {
|
||||
if let Some(v) = self.generic_param_list {
|
||||
out.add_tuple("function_generic_param_lists", vec![id.into(), v.into()]);
|
||||
}
|
||||
if self.is_async {
|
||||
out.add_tuple("function_is_async", vec![id.into()]);
|
||||
}
|
||||
if self.is_const {
|
||||
out.add_tuple("function_is_const", vec![id.into()]);
|
||||
}
|
||||
if self.is_default {
|
||||
out.add_tuple("function_is_default", vec![id.into()]);
|
||||
}
|
||||
if self.is_gen {
|
||||
out.add_tuple("function_is_gen", vec![id.into()]);
|
||||
}
|
||||
if self.is_unsafe {
|
||||
out.add_tuple("function_is_unsafe", vec![id.into()]);
|
||||
}
|
||||
if let Some(v) = self.name {
|
||||
out.add_tuple("function_names", vec![id.into(), v.into()]);
|
||||
}
|
||||
@@ -8645,9 +8414,6 @@ pub struct Impl {
|
||||
pub assoc_item_list: Option<trap::Label<AssocItemList>>,
|
||||
pub attrs: Vec<trap::Label<Attr>>,
|
||||
pub generic_param_list: Option<trap::Label<GenericParamList>>,
|
||||
pub is_const: bool,
|
||||
pub is_default: bool,
|
||||
pub is_unsafe: bool,
|
||||
pub self_ty: Option<trap::Label<TypeRef>>,
|
||||
pub trait_: Option<trap::Label<TypeRef>>,
|
||||
pub visibility: Option<trap::Label<Visibility>>,
|
||||
@@ -8670,15 +8436,6 @@ impl trap::TrapEntry for Impl {
|
||||
if let Some(v) = self.generic_param_list {
|
||||
out.add_tuple("impl_generic_param_lists", vec![id.into(), v.into()]);
|
||||
}
|
||||
if self.is_const {
|
||||
out.add_tuple("impl_is_const", vec![id.into()]);
|
||||
}
|
||||
if self.is_default {
|
||||
out.add_tuple("impl_is_default", vec![id.into()]);
|
||||
}
|
||||
if self.is_unsafe {
|
||||
out.add_tuple("impl_is_unsafe", vec![id.into()]);
|
||||
}
|
||||
if let Some(v) = self.self_ty {
|
||||
out.add_tuple("impl_self_ties", vec![id.into(), v.into()]);
|
||||
}
|
||||
@@ -8770,12 +8527,6 @@ impl trap::TrapEntry for MacroCall {
|
||||
}
|
||||
}
|
||||
|
||||
impl MacroCall {
|
||||
pub fn emit_expanded(id: trap::Label<Self>, value: trap::Label<AstNode>, out: &mut trap::Writer) {
|
||||
out.add_tuple("macro_call_expandeds", vec![id.into(), value.into()]);
|
||||
}
|
||||
}
|
||||
|
||||
impl trap::TrapClass for MacroCall {
|
||||
fn class_name() -> &'static str { "MacroCall" }
|
||||
}
|
||||
@@ -9007,90 +8758,6 @@ impl From<trap::Label<MacroRules>> for trap::Label<Stmt> {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct MethodCallExpr {
|
||||
pub id: trap::TrapId<MethodCallExpr>,
|
||||
pub arg_list: Option<trap::Label<ArgList>>,
|
||||
pub attrs: Vec<trap::Label<Attr>>,
|
||||
pub generic_arg_list: Option<trap::Label<GenericArgList>>,
|
||||
pub name_ref: Option<trap::Label<NameRef>>,
|
||||
pub receiver: Option<trap::Label<Expr>>,
|
||||
}
|
||||
|
||||
impl trap::TrapEntry for MethodCallExpr {
|
||||
fn extract_id(&mut self) -> trap::TrapId<Self> {
|
||||
std::mem::replace(&mut self.id, trap::TrapId::Star)
|
||||
}
|
||||
|
||||
fn emit(self, id: trap::Label<Self>, out: &mut trap::Writer) {
|
||||
out.add_tuple("method_call_exprs", vec![id.into()]);
|
||||
if let Some(v) = self.arg_list {
|
||||
out.add_tuple("call_expr_base_arg_lists", vec![id.into(), v.into()]);
|
||||
}
|
||||
for (i, v) in self.attrs.into_iter().enumerate() {
|
||||
out.add_tuple("call_expr_base_attrs", vec![id.into(), i.into(), v.into()]);
|
||||
}
|
||||
if let Some(v) = self.generic_arg_list {
|
||||
out.add_tuple("method_call_expr_generic_arg_lists", vec![id.into(), v.into()]);
|
||||
}
|
||||
if let Some(v) = self.name_ref {
|
||||
out.add_tuple("method_call_expr_name_refs", vec![id.into(), v.into()]);
|
||||
}
|
||||
if let Some(v) = self.receiver {
|
||||
out.add_tuple("method_call_expr_receivers", vec![id.into(), v.into()]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl trap::TrapClass for MethodCallExpr {
|
||||
fn class_name() -> &'static str { "MethodCallExpr" }
|
||||
}
|
||||
|
||||
impl From<trap::Label<MethodCallExpr>> for trap::Label<AstNode> {
|
||||
fn from(value: trap::Label<MethodCallExpr>) -> Self {
|
||||
// SAFETY: this is safe because in the dbscheme MethodCallExpr is a subclass of AstNode
|
||||
unsafe {
|
||||
Self::from_untyped(value.as_untyped())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<trap::Label<MethodCallExpr>> for trap::Label<CallExprBase> {
|
||||
fn from(value: trap::Label<MethodCallExpr>) -> Self {
|
||||
// SAFETY: this is safe because in the dbscheme MethodCallExpr is a subclass of CallExprBase
|
||||
unsafe {
|
||||
Self::from_untyped(value.as_untyped())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<trap::Label<MethodCallExpr>> for trap::Label<Element> {
|
||||
fn from(value: trap::Label<MethodCallExpr>) -> Self {
|
||||
// SAFETY: this is safe because in the dbscheme MethodCallExpr is a subclass of Element
|
||||
unsafe {
|
||||
Self::from_untyped(value.as_untyped())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<trap::Label<MethodCallExpr>> for trap::Label<Expr> {
|
||||
fn from(value: trap::Label<MethodCallExpr>) -> Self {
|
||||
// SAFETY: this is safe because in the dbscheme MethodCallExpr is a subclass of Expr
|
||||
unsafe {
|
||||
Self::from_untyped(value.as_untyped())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<trap::Label<MethodCallExpr>> for trap::Label<Locatable> {
|
||||
fn from(value: trap::Label<MethodCallExpr>) -> Self {
|
||||
// SAFETY: this is safe because in the dbscheme MethodCallExpr is a subclass of Locatable
|
||||
unsafe {
|
||||
Self::from_untyped(value.as_untyped())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct Module {
|
||||
pub id: trap::TrapId<Module>,
|
||||
@@ -9176,8 +8843,6 @@ pub struct Static {
|
||||
pub id: trap::TrapId<Static>,
|
||||
pub attrs: Vec<trap::Label<Attr>>,
|
||||
pub body: Option<trap::Label<Expr>>,
|
||||
pub is_mut: bool,
|
||||
pub is_static: bool,
|
||||
pub name: Option<trap::Label<Name>>,
|
||||
pub ty: Option<trap::Label<TypeRef>>,
|
||||
pub visibility: Option<trap::Label<Visibility>>,
|
||||
@@ -9196,12 +8861,6 @@ impl trap::TrapEntry for Static {
|
||||
if let Some(v) = self.body {
|
||||
out.add_tuple("static_bodies", vec![id.into(), v.into()]);
|
||||
}
|
||||
if self.is_mut {
|
||||
out.add_tuple("static_is_mut", vec![id.into()]);
|
||||
}
|
||||
if self.is_static {
|
||||
out.add_tuple("static_is_static", vec![id.into()]);
|
||||
}
|
||||
if let Some(v) = self.name {
|
||||
out.add_tuple("static_names", vec![id.into(), v.into()]);
|
||||
}
|
||||
@@ -9366,8 +9025,6 @@ pub struct Trait {
|
||||
pub assoc_item_list: Option<trap::Label<AssocItemList>>,
|
||||
pub attrs: Vec<trap::Label<Attr>>,
|
||||
pub generic_param_list: Option<trap::Label<GenericParamList>>,
|
||||
pub is_auto: bool,
|
||||
pub is_unsafe: bool,
|
||||
pub name: Option<trap::Label<Name>>,
|
||||
pub type_bound_list: Option<trap::Label<TypeBoundList>>,
|
||||
pub visibility: Option<trap::Label<Visibility>>,
|
||||
@@ -9390,12 +9047,6 @@ impl trap::TrapEntry for Trait {
|
||||
if let Some(v) = self.generic_param_list {
|
||||
out.add_tuple("trait_generic_param_lists", vec![id.into(), v.into()]);
|
||||
}
|
||||
if self.is_auto {
|
||||
out.add_tuple("trait_is_auto", vec![id.into()]);
|
||||
}
|
||||
if self.is_unsafe {
|
||||
out.add_tuple("trait_is_unsafe", vec![id.into()]);
|
||||
}
|
||||
if let Some(v) = self.name {
|
||||
out.add_tuple("trait_names", vec![id.into(), v.into()]);
|
||||
}
|
||||
@@ -9553,7 +9204,6 @@ pub struct TypeAlias {
|
||||
pub id: trap::TrapId<TypeAlias>,
|
||||
pub attrs: Vec<trap::Label<Attr>>,
|
||||
pub generic_param_list: Option<trap::Label<GenericParamList>>,
|
||||
pub is_default: bool,
|
||||
pub name: Option<trap::Label<Name>>,
|
||||
pub ty: Option<trap::Label<TypeRef>>,
|
||||
pub type_bound_list: Option<trap::Label<TypeBoundList>>,
|
||||
@@ -9574,9 +9224,6 @@ impl trap::TrapEntry for TypeAlias {
|
||||
if let Some(v) = self.generic_param_list {
|
||||
out.add_tuple("type_alias_generic_param_lists", vec![id.into(), v.into()]);
|
||||
}
|
||||
if self.is_default {
|
||||
out.add_tuple("type_alias_is_default", vec![id.into()]);
|
||||
}
|
||||
if let Some(v) = self.name {
|
||||
out.add_tuple("type_alias_names", vec![id.into(), v.into()]);
|
||||
}
|
||||
|
||||
@@ -1,119 +1,92 @@
|
||||
use std::{
|
||||
collections::HashMap,
|
||||
path::{Path, PathBuf},
|
||||
};
|
||||
|
||||
use anyhow::Context;
|
||||
use archive::Archiver;
|
||||
use ra_ap_ide_db::line_index::{LineCol, LineIndex};
|
||||
use ra_ap_project_model::ProjectManifest;
|
||||
use rust_analyzer::{ParseResult, RustAnalyzer};
|
||||
use ra_ap_ide_db::line_index::LineIndex;
|
||||
use ra_ap_parser::Edition;
|
||||
use std::borrow::Cow;
|
||||
mod archive;
|
||||
mod config;
|
||||
pub mod generated;
|
||||
mod rust_analyzer;
|
||||
mod translate;
|
||||
pub mod trap;
|
||||
use ra_ap_syntax::ast::SourceFile;
|
||||
use ra_ap_syntax::{AstNode, SyntaxError, TextRange, TextSize};
|
||||
|
||||
fn from_utf8_lossy(v: &[u8]) -> (Cow<'_, str>, Option<SyntaxError>) {
|
||||
let mut iter = v.utf8_chunks();
|
||||
let (first_valid, first_invalid) = if let Some(chunk) = iter.next() {
|
||||
let valid = chunk.valid();
|
||||
let invalid = chunk.invalid();
|
||||
if invalid.is_empty() {
|
||||
debug_assert_eq!(valid.len(), v.len());
|
||||
return (Cow::Borrowed(valid), None);
|
||||
}
|
||||
(valid, invalid)
|
||||
} else {
|
||||
return (Cow::Borrowed(""), None);
|
||||
};
|
||||
|
||||
const REPLACEMENT: &str = "\u{FFFD}";
|
||||
let error_start = first_valid.len() as u32;
|
||||
let error_end = error_start + first_invalid.len() as u32;
|
||||
let error_range = TextRange::new(TextSize::new(error_start), TextSize::new(error_end));
|
||||
let error = SyntaxError::new("invalid utf-8 sequence".to_owned(), error_range);
|
||||
let mut res = String::with_capacity(v.len());
|
||||
res.push_str(first_valid);
|
||||
|
||||
res.push_str(REPLACEMENT);
|
||||
|
||||
for chunk in iter {
|
||||
res.push_str(chunk.valid());
|
||||
if !chunk.invalid().is_empty() {
|
||||
res.push_str(REPLACEMENT);
|
||||
}
|
||||
}
|
||||
|
||||
(Cow::Owned(res), Some(error))
|
||||
}
|
||||
|
||||
fn extract(
|
||||
rust_analyzer: &mut rust_analyzer::RustAnalyzer,
|
||||
archiver: &Archiver,
|
||||
archiver: &archive::Archiver,
|
||||
traps: &trap::TrapFileProvider,
|
||||
file: &std::path::Path,
|
||||
) {
|
||||
archiver.archive(file);
|
||||
|
||||
let ParseResult {
|
||||
ast,
|
||||
text,
|
||||
errors,
|
||||
file_id,
|
||||
semantics,
|
||||
} = rust_analyzer.parse(file);
|
||||
let line_index = LineIndex::new(text.as_ref());
|
||||
file: std::path::PathBuf,
|
||||
) -> anyhow::Result<()> {
|
||||
let file = std::path::absolute(&file).unwrap_or(file);
|
||||
let file = std::fs::canonicalize(&file).unwrap_or(file);
|
||||
archiver.archive(&file);
|
||||
let input = std::fs::read(&file)?;
|
||||
let (input, err) = from_utf8_lossy(&input);
|
||||
let line_index = LineIndex::new(&input);
|
||||
let display_path = file.to_string_lossy();
|
||||
let mut trap = traps.create("source", file);
|
||||
let label = trap.emit_file(file);
|
||||
let mut translator = translate::Translator::new(
|
||||
trap,
|
||||
display_path.as_ref(),
|
||||
label,
|
||||
line_index,
|
||||
file_id,
|
||||
semantics,
|
||||
);
|
||||
|
||||
for err in errors {
|
||||
translator.emit_parse_error(&ast, &err);
|
||||
let mut trap = traps.create("source", &file);
|
||||
let label = trap.emit_file(&file);
|
||||
let mut translator = translate::Translator::new(trap, label, line_index);
|
||||
if let Some(err) = err {
|
||||
translator.emit_parse_error(display_path.as_ref(), err);
|
||||
}
|
||||
let no_location = (LineCol { line: 0, col: 0 }, LineCol { line: 0, col: 0 });
|
||||
if translator.semantics.is_none() {
|
||||
translator.emit_diagnostic(
|
||||
trap::DiagnosticSeverity::Warning,
|
||||
"semantics".to_owned(),
|
||||
"semantic analyzer unavailable".to_owned(),
|
||||
"semantic analyzer unavailable: macro expansion, call graph, and type inference will be skipped.".to_owned(),
|
||||
no_location,
|
||||
);
|
||||
let parse = ra_ap_syntax::ast::SourceFile::parse(&input, Edition::CURRENT);
|
||||
for err in parse.errors() {
|
||||
translator.emit_parse_error(display_path.as_ref(), err);
|
||||
}
|
||||
translator.emit_source_file(ast);
|
||||
translator.trap.commit().unwrap_or_else(|err| {
|
||||
log::error!(
|
||||
"Failed to write trap file for: {}: {}",
|
||||
display_path,
|
||||
err.to_string()
|
||||
)
|
||||
});
|
||||
if let Some(ast) = SourceFile::cast(parse.syntax_node()) {
|
||||
translator.emit_source_file(ast);
|
||||
} else {
|
||||
log::warn!("Skipped {}", display_path);
|
||||
}
|
||||
translator.trap.commit()?;
|
||||
Ok(())
|
||||
}
|
||||
fn main() -> anyhow::Result<()> {
|
||||
let cfg = config::Config::extract().context("failed to load configuration")?;
|
||||
stderrlog::new()
|
||||
.module(module_path!())
|
||||
.verbosity(1 + cfg.verbose as usize)
|
||||
.verbosity(2 + cfg.verbose as usize)
|
||||
.init()?;
|
||||
|
||||
log::info!("{cfg:?}");
|
||||
let traps = trap::TrapFileProvider::new(&cfg).context("failed to set up trap files")?;
|
||||
let archiver = archive::Archiver {
|
||||
root: cfg.source_archive_dir,
|
||||
};
|
||||
let files: Vec<PathBuf> = cfg
|
||||
.inputs
|
||||
.iter()
|
||||
.map(|file| {
|
||||
let file = std::path::absolute(file).unwrap_or(file.to_path_buf());
|
||||
std::fs::canonicalize(&file).unwrap_or(file)
|
||||
})
|
||||
.collect();
|
||||
let manifests = rust_analyzer::find_project_manifests(&files)?;
|
||||
let mut map: HashMap<&Path, (&ProjectManifest, Vec<&Path>)> = manifests
|
||||
.iter()
|
||||
.map(|x| (x.manifest_path().parent().as_ref(), (x, Vec::new())))
|
||||
.collect();
|
||||
let mut other_files = Vec::new();
|
||||
|
||||
'outer: for file in &files {
|
||||
let mut p = file.as_path();
|
||||
while let Some(parent) = p.parent() {
|
||||
p = parent;
|
||||
if let Some((_, files)) = map.get_mut(parent) {
|
||||
files.push(file);
|
||||
continue 'outer;
|
||||
}
|
||||
}
|
||||
other_files.push(file);
|
||||
}
|
||||
for (manifest, files) in map.values() {
|
||||
if files.is_empty() {
|
||||
break;
|
||||
}
|
||||
let mut rust_analyzer = RustAnalyzer::new(manifest, &cfg.scratch_dir);
|
||||
for file in files {
|
||||
extract(&mut rust_analyzer, &archiver, &traps, file);
|
||||
}
|
||||
}
|
||||
let mut rust_analyzer = RustAnalyzer::WithoutDatabase();
|
||||
for file in other_files {
|
||||
extract(&mut rust_analyzer, &archiver, &traps, file);
|
||||
for file in cfg.inputs {
|
||||
extract(&archiver, &traps, file)?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
|
||||
@@ -1,160 +0,0 @@
|
||||
use itertools::Itertools;
|
||||
use log::info;
|
||||
use ra_ap_base_db::SourceDatabase;
|
||||
use ra_ap_base_db::SourceDatabaseFileInputExt;
|
||||
use ra_ap_hir::Semantics;
|
||||
use ra_ap_ide_db::RootDatabase;
|
||||
use ra_ap_load_cargo::{load_workspace_at, LoadCargoConfig, ProcMacroServerChoice};
|
||||
use ra_ap_paths::Utf8PathBuf;
|
||||
use ra_ap_project_model::CargoConfig;
|
||||
use ra_ap_project_model::ProjectManifest;
|
||||
use ra_ap_project_model::RustLibSource;
|
||||
use ra_ap_span::Edition;
|
||||
use ra_ap_span::EditionedFileId;
|
||||
use ra_ap_span::TextRange;
|
||||
use ra_ap_span::TextSize;
|
||||
use ra_ap_syntax::SourceFile;
|
||||
use ra_ap_syntax::SyntaxError;
|
||||
use ra_ap_vfs::AbsPathBuf;
|
||||
use ra_ap_vfs::Vfs;
|
||||
use ra_ap_vfs::VfsPath;
|
||||
use std::borrow::Cow;
|
||||
use std::path::{Path, PathBuf};
|
||||
use triomphe::Arc;
|
||||
pub enum RustAnalyzer {
|
||||
WithDatabase { db: RootDatabase, vfs: Vfs },
|
||||
WithoutDatabase(),
|
||||
}
|
||||
pub struct ParseResult<'a> {
|
||||
pub ast: SourceFile,
|
||||
pub text: Arc<str>,
|
||||
pub errors: Vec<SyntaxError>,
|
||||
pub file_id: Option<EditionedFileId>,
|
||||
pub semantics: Option<Semantics<'a, RootDatabase>>,
|
||||
}
|
||||
impl RustAnalyzer {
|
||||
pub fn new(project: &ProjectManifest, scratch_dir: &Path) -> Self {
|
||||
let config = CargoConfig {
|
||||
sysroot: Some(RustLibSource::Discover),
|
||||
target_dir: ra_ap_paths::Utf8PathBuf::from_path_buf(scratch_dir.to_path_buf())
|
||||
.map(|x| x.join("target"))
|
||||
.ok(),
|
||||
..Default::default()
|
||||
};
|
||||
let progress = |t| (log::trace!("progress: {}", t));
|
||||
let load_config = LoadCargoConfig {
|
||||
load_out_dirs_from_check: true,
|
||||
with_proc_macro_server: ProcMacroServerChoice::Sysroot,
|
||||
prefill_caches: false,
|
||||
};
|
||||
let manifest = project.manifest_path();
|
||||
|
||||
match load_workspace_at(manifest.as_ref(), &config, &load_config, &progress) {
|
||||
Ok((db, vfs, _macro_server)) => RustAnalyzer::WithDatabase { db, vfs },
|
||||
Err(err) => {
|
||||
log::error!("failed to load workspace for {}: {}", manifest, err);
|
||||
RustAnalyzer::WithoutDatabase()
|
||||
}
|
||||
}
|
||||
}
|
||||
pub fn parse(&mut self, path: &Path) -> ParseResult<'_> {
|
||||
let mut errors = Vec::new();
|
||||
let input = match std::fs::read(path) {
|
||||
Ok(data) => data,
|
||||
Err(e) => {
|
||||
errors.push(SyntaxError::new(
|
||||
format!("Could not read {}: {}", path.to_string_lossy(), e),
|
||||
TextRange::empty(TextSize::default()),
|
||||
));
|
||||
vec![]
|
||||
}
|
||||
};
|
||||
let (input, err) = from_utf8_lossy(&input);
|
||||
|
||||
if let RustAnalyzer::WithDatabase { vfs, db } = self {
|
||||
if let Some(file_id) = Utf8PathBuf::from_path_buf(path.to_path_buf())
|
||||
.ok()
|
||||
.and_then(|x| AbsPathBuf::try_from(x).ok())
|
||||
.map(VfsPath::from)
|
||||
.and_then(|x| vfs.file_id(&x))
|
||||
{
|
||||
db.set_file_text(file_id, &input);
|
||||
let semantics = Semantics::new(db);
|
||||
|
||||
let file_id = EditionedFileId::current_edition(file_id);
|
||||
let source_file = semantics.parse(file_id);
|
||||
errors.extend(
|
||||
db.parse_errors(file_id)
|
||||
.into_iter()
|
||||
.flat_map(|x| x.to_vec()),
|
||||
);
|
||||
return ParseResult {
|
||||
ast: source_file,
|
||||
text: input.as_ref().into(),
|
||||
errors,
|
||||
file_id: Some(file_id),
|
||||
semantics: Some(semantics),
|
||||
};
|
||||
}
|
||||
}
|
||||
let parse = ra_ap_syntax::ast::SourceFile::parse(&input, Edition::CURRENT);
|
||||
errors.extend(parse.errors());
|
||||
errors.extend(err);
|
||||
ParseResult {
|
||||
ast: parse.tree(),
|
||||
text: input.as_ref().into(),
|
||||
errors,
|
||||
file_id: None,
|
||||
semantics: None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn find_project_manifests(
|
||||
files: &[PathBuf],
|
||||
) -> anyhow::Result<Vec<ra_ap_project_model::ProjectManifest>> {
|
||||
let current = std::env::current_dir()?;
|
||||
let abs_files: Vec<_> = files
|
||||
.iter()
|
||||
.map(|path| AbsPathBuf::assert_utf8(current.join(path)))
|
||||
.collect();
|
||||
let ret = ra_ap_project_model::ProjectManifest::discover_all(&abs_files);
|
||||
info!(
|
||||
"found manifests: {}",
|
||||
ret.iter().map(|m| format!("{m}")).join(", ")
|
||||
);
|
||||
Ok(ret)
|
||||
}
|
||||
fn from_utf8_lossy(v: &[u8]) -> (Cow<'_, str>, Option<SyntaxError>) {
|
||||
let mut iter = v.utf8_chunks();
|
||||
let (first_valid, first_invalid) = if let Some(chunk) = iter.next() {
|
||||
let valid = chunk.valid();
|
||||
let invalid = chunk.invalid();
|
||||
if invalid.is_empty() {
|
||||
debug_assert_eq!(valid.len(), v.len());
|
||||
return (Cow::Borrowed(valid), None);
|
||||
}
|
||||
(valid, invalid)
|
||||
} else {
|
||||
return (Cow::Borrowed(""), None);
|
||||
};
|
||||
|
||||
const REPLACEMENT: &str = "\u{FFFD}";
|
||||
let error_start = first_valid.len() as u32;
|
||||
let error_end = error_start + first_invalid.len() as u32;
|
||||
let error_range = TextRange::new(TextSize::new(error_start), TextSize::new(error_end));
|
||||
let error = SyntaxError::new("invalid utf-8 sequence".to_owned(), error_range);
|
||||
let mut res = String::with_capacity(v.len());
|
||||
res.push_str(first_valid);
|
||||
|
||||
res.push_str(REPLACEMENT);
|
||||
|
||||
for chunk in iter {
|
||||
res.push_str(chunk.valid());
|
||||
if !chunk.invalid().is_empty() {
|
||||
res.push_str(REPLACEMENT);
|
||||
}
|
||||
}
|
||||
|
||||
(Cow::Owned(res), Some(error))
|
||||
}
|
||||
@@ -1,30 +1,11 @@
|
||||
use crate::generated::MacroCall;
|
||||
use crate::generated::{self};
|
||||
use crate::generated::{self, AstNode};
|
||||
use crate::trap::{DiagnosticSeverity, TrapFile, TrapId};
|
||||
use crate::trap::{Label, TrapClass};
|
||||
use codeql_extractor::trap::{self};
|
||||
use log::Level;
|
||||
use ra_ap_hir::db::ExpandDatabase;
|
||||
use ra_ap_hir::Semantics;
|
||||
use ra_ap_hir_expand::ExpandTo;
|
||||
use ra_ap_ide_db::line_index::{LineCol, LineIndex};
|
||||
use ra_ap_ide_db::RootDatabase;
|
||||
use ra_ap_parser::SyntaxKind;
|
||||
use ra_ap_span::{EditionedFileId, TextSize};
|
||||
use ra_ap_syntax::ast::RangeItem;
|
||||
use ra_ap_syntax::{
|
||||
ast, AstNode, NodeOrToken, SyntaxElementChildren, SyntaxError, SyntaxNode, SyntaxToken,
|
||||
TextRange,
|
||||
};
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! emit_detached {
|
||||
(MacroCall, $self:ident, $node:ident, $label:ident) => {
|
||||
$self.extract_macro_call_expanded(&$node, $label.into());
|
||||
};
|
||||
($($_:tt)*) => {};
|
||||
}
|
||||
|
||||
use ra_ap_syntax::{ast, NodeOrToken, SyntaxElementChildren, SyntaxError, SyntaxToken, TextRange};
|
||||
pub trait TextValue {
|
||||
fn try_get_text(&self) -> Option<String>;
|
||||
}
|
||||
@@ -75,41 +56,27 @@ impl TextValue for ast::RangePat {
|
||||
self.op_token().map(|x| x.text().to_string())
|
||||
}
|
||||
}
|
||||
|
||||
pub struct Translator<'a> {
|
||||
pub struct Translator {
|
||||
pub trap: TrapFile,
|
||||
path: &'a str,
|
||||
label: trap::Label,
|
||||
line_index: LineIndex,
|
||||
file_id: Option<EditionedFileId>,
|
||||
pub semantics: Option<Semantics<'a, RootDatabase>>,
|
||||
}
|
||||
|
||||
impl<'a> Translator<'a> {
|
||||
pub fn new(
|
||||
trap: TrapFile,
|
||||
path: &'a str,
|
||||
label: trap::Label,
|
||||
line_index: LineIndex,
|
||||
file_id: Option<EditionedFileId>,
|
||||
semantics: Option<Semantics<'a, RootDatabase>>,
|
||||
) -> Translator<'a> {
|
||||
impl Translator {
|
||||
pub fn new(trap: TrapFile, label: trap::Label, line_index: LineIndex) -> Translator {
|
||||
Translator {
|
||||
trap,
|
||||
path,
|
||||
label,
|
||||
line_index,
|
||||
file_id,
|
||||
semantics,
|
||||
}
|
||||
}
|
||||
fn location(&self, range: TextRange) -> (LineCol, LineCol) {
|
||||
pub fn location(&self, range: TextRange) -> (LineCol, LineCol) {
|
||||
let start = self.line_index.line_col(range.start());
|
||||
let range_end = range.end();
|
||||
// QL end positions are inclusive, while TextRange offsets are exclusive and point at the position
|
||||
// right after the last character of the range. We need to shift the end offset one character to the left to
|
||||
// get the right inclusive QL position. Unfortunately, simply subtracting `1` from the end-offset may cause
|
||||
// the offset to point in the middle of a multi-byte character, resulting in a `panic`. Therefore we use `try_line_col`
|
||||
// the offset to point in the middle of a mult-byte character, resulting in a `panic`. Therefore we use `try_line_col`
|
||||
// with decreasing offsets to find the start of the last character included in the range.
|
||||
for i in 1..4 {
|
||||
if let Some(end) = range_end
|
||||
@@ -122,210 +89,39 @@ impl<'a> Translator<'a> {
|
||||
let end = self.line_index.line_col(range_end);
|
||||
(start, end)
|
||||
}
|
||||
|
||||
pub fn text_range_for_node(&mut self, node: &impl ast::AstNode) -> Option<TextRange> {
|
||||
if let Some(semantics) = self.semantics.as_ref() {
|
||||
let file_range = semantics.original_range(node.syntax());
|
||||
let file_id = self.file_id?;
|
||||
if file_id == file_range.file_id {
|
||||
Some(file_range.range)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
} else {
|
||||
Some(node.syntax().text_range())
|
||||
}
|
||||
}
|
||||
pub fn emit_location<T: TrapClass>(&mut self, label: Label<T>, node: &impl ast::AstNode) {
|
||||
if let Some(range) = self.text_range_for_node(node) {
|
||||
let (start, end) = self.location(range);
|
||||
self.trap.emit_location(self.label, label, start, end)
|
||||
} else {
|
||||
self.emit_diagnostic(
|
||||
DiagnosticSeverity::Info,
|
||||
"locations".to_owned(),
|
||||
"missing location for AstNode".to_owned(),
|
||||
"missing location for AstNode".to_owned(),
|
||||
(LineCol { line: 0, col: 0 }, LineCol { line: 0, col: 0 }),
|
||||
);
|
||||
}
|
||||
let (start, end) = self.location(node.syntax().text_range());
|
||||
self.trap.emit_location(self.label, label, start, end)
|
||||
}
|
||||
pub fn emit_location_token(
|
||||
&mut self,
|
||||
label: Label<generated::Token>,
|
||||
parent: &impl ast::AstNode,
|
||||
token: &SyntaxToken,
|
||||
) {
|
||||
let parent_range = parent.syntax().text_range();
|
||||
let token_range = token.text_range();
|
||||
if let Some(clipped_range) = token_range.intersect(parent_range) {
|
||||
if let Some(parent_range2) = self.text_range_for_node(parent) {
|
||||
let token_range = clipped_range + parent_range2.start() - parent_range.start();
|
||||
let (start, end) = self.location(token_range);
|
||||
self.trap.emit_location(self.label, label, start, end)
|
||||
}
|
||||
}
|
||||
pub fn emit_location_token(&mut self, label: Label<generated::Token>, token: &SyntaxToken) {
|
||||
let (start, end) = self.location(token.text_range());
|
||||
self.trap.emit_location(self.label, label, start, end)
|
||||
}
|
||||
pub fn emit_diagnostic(
|
||||
&mut self,
|
||||
severity: DiagnosticSeverity,
|
||||
error_tag: String,
|
||||
error_message: String,
|
||||
full_error_message: String,
|
||||
location: (LineCol, LineCol),
|
||||
) {
|
||||
let (start, end) = location;
|
||||
let level = match severity {
|
||||
DiagnosticSeverity::Debug => Level::Debug,
|
||||
DiagnosticSeverity::Info => Level::Info,
|
||||
DiagnosticSeverity::Warning => Level::Warn,
|
||||
DiagnosticSeverity::Error => Level::Error,
|
||||
};
|
||||
log::log!(
|
||||
level,
|
||||
"{}:{}:{}: {}",
|
||||
self.path,
|
||||
start.line + 1,
|
||||
start.col + 1,
|
||||
&error_message
|
||||
);
|
||||
pub fn emit_parse_error(&mut self, path: &str, err: SyntaxError) {
|
||||
let (start, end) = self.location(err.range());
|
||||
log::warn!("{}:{}:{}: {}", path, start.line + 1, start.col + 1, err);
|
||||
let message = err.to_string();
|
||||
let location = self.trap.emit_location_label(self.label, start, end);
|
||||
self.trap.emit_diagnostic(
|
||||
severity,
|
||||
error_tag,
|
||||
error_message,
|
||||
full_error_message,
|
||||
DiagnosticSeverity::Warning,
|
||||
"parse_error".to_owned(),
|
||||
message.clone(),
|
||||
message,
|
||||
location,
|
||||
);
|
||||
}
|
||||
pub fn emit_parse_error(&mut self, owner: &impl ast::AstNode, err: &SyntaxError) {
|
||||
let owner_range: TextRange = owner.syntax().text_range();
|
||||
let err_range = err.range();
|
||||
if let Some(owner_range2) = self.text_range_for_node(owner) {
|
||||
let location = if let Some(clipped_range) = err_range.intersect(owner_range) {
|
||||
let err_range = clipped_range + owner_range2.start() - owner_range.start();
|
||||
self.location(err_range)
|
||||
} else {
|
||||
self.location(owner_range2)
|
||||
};
|
||||
let message = err.to_string();
|
||||
self.emit_diagnostic(
|
||||
DiagnosticSeverity::Warning,
|
||||
"parse_error".to_owned(),
|
||||
message.clone(),
|
||||
message,
|
||||
location,
|
||||
);
|
||||
}
|
||||
}
|
||||
pub fn emit_tokens(
|
||||
&mut self,
|
||||
parent_node: &impl ast::AstNode,
|
||||
parent_label: Label<generated::AstNode>,
|
||||
children: SyntaxElementChildren,
|
||||
) {
|
||||
pub fn emit_tokens(&mut self, parent: Label<AstNode>, children: SyntaxElementChildren) {
|
||||
for child in children {
|
||||
if let NodeOrToken::Token(token) = child {
|
||||
if token.kind() == SyntaxKind::COMMENT {
|
||||
let label = self.trap.emit(generated::Comment {
|
||||
id: TrapId::Star,
|
||||
parent: parent_label,
|
||||
parent,
|
||||
text: token.text().to_owned(),
|
||||
});
|
||||
self.emit_location_token(label.into(), parent_node, &token);
|
||||
self.emit_location_token(label.into(), &token);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
fn emit_macro_expansion_parse_errors(&mut self, mcall: &ast::MacroCall, expanded: &SyntaxNode) {
|
||||
let semantics = self.semantics.as_ref().unwrap();
|
||||
if let Some(value) = semantics
|
||||
.hir_file_for(expanded)
|
||||
.macro_file()
|
||||
.and_then(|macro_file| {
|
||||
semantics
|
||||
.db
|
||||
.parse_macro_expansion_error(macro_file.macro_call_id)
|
||||
})
|
||||
{
|
||||
if let Some(err) = &value.err {
|
||||
let (message, _error) = err.render_to_string(semantics.db);
|
||||
|
||||
if err.span().anchor.file_id == semantics.hir_file_for(mcall.syntax()) {
|
||||
let location = err.span().range
|
||||
+ semantics
|
||||
.db
|
||||
.ast_id_map(err.span().anchor.file_id.into())
|
||||
.get_erased(err.span().anchor.ast_id)
|
||||
.text_range()
|
||||
.start();
|
||||
self.emit_parse_error(mcall, &SyntaxError::new(message, location));
|
||||
};
|
||||
}
|
||||
for err in value.value.iter() {
|
||||
self.emit_parse_error(mcall, err);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn emit_expanded_as(
|
||||
&mut self,
|
||||
expand_to: ExpandTo,
|
||||
expanded: SyntaxNode,
|
||||
) -> Option<Label<generated::AstNode>> {
|
||||
match expand_to {
|
||||
ra_ap_hir_expand::ExpandTo::Statements => {
|
||||
ast::MacroStmts::cast(expanded).map(|x| self.emit_macro_stmts(x).into())
|
||||
}
|
||||
ra_ap_hir_expand::ExpandTo::Items => {
|
||||
ast::MacroItems::cast(expanded).map(|x| self.emit_macro_items(x).into())
|
||||
}
|
||||
|
||||
ra_ap_hir_expand::ExpandTo::Pattern => {
|
||||
ast::Pat::cast(expanded).map(|x| self.emit_pat(x).into())
|
||||
}
|
||||
ra_ap_hir_expand::ExpandTo::Type => {
|
||||
ast::Type::cast(expanded).map(|x| self.emit_type(x).into())
|
||||
}
|
||||
ra_ap_hir_expand::ExpandTo::Expr => {
|
||||
ast::Expr::cast(expanded).map(|x| self.emit_expr(x).into())
|
||||
}
|
||||
}
|
||||
}
|
||||
pub(crate) fn extract_macro_call_expanded(
|
||||
&mut self,
|
||||
mcall: &ast::MacroCall,
|
||||
label: Label<generated::MacroCall>,
|
||||
) {
|
||||
if let Some(expanded) = self.semantics.as_ref().and_then(|s| s.expand(mcall)) {
|
||||
self.emit_macro_expansion_parse_errors(mcall, &expanded);
|
||||
let expand_to = ra_ap_hir_expand::ExpandTo::from_call_site(mcall);
|
||||
let kind = expanded.kind();
|
||||
if let Some(value) = self.emit_expanded_as(expand_to, expanded) {
|
||||
MacroCall::emit_expanded(label, value, &mut self.trap.writer);
|
||||
} else {
|
||||
let range = self.text_range_for_node(mcall);
|
||||
self.emit_parse_error(mcall, &SyntaxError::new(
|
||||
format!(
|
||||
"macro expansion failed: the macro '{}' expands to {:?} but a {:?} was expected",
|
||||
mcall.path().map(|p| p.to_string()).unwrap_or_default(),
|
||||
kind, expand_to
|
||||
),
|
||||
range.unwrap_or_else(|| TextRange::empty(TextSize::from(0))),
|
||||
));
|
||||
}
|
||||
} else {
|
||||
let range = self.text_range_for_node(mcall);
|
||||
self.emit_parse_error(
|
||||
mcall,
|
||||
&SyntaxError::new(
|
||||
format!(
|
||||
"macro expansion failed: could not resolve macro '{}'",
|
||||
mcall.path().map(|p| p.to_string()).unwrap_or_default()
|
||||
),
|
||||
range.unwrap_or_else(|| TextRange::empty(TextSize::from(0))),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
538
rust/extractor/src/translate/generated.rs
generated
538
rust/extractor/src/translate/generated.rs
generated
File diff suppressed because it is too large
Load Diff
@@ -124,7 +124,7 @@ impl<T: TrapClass> From<Label<T>> for trap::Arg {
|
||||
|
||||
pub struct TrapFile {
|
||||
path: PathBuf,
|
||||
pub writer: Writer,
|
||||
writer: Writer,
|
||||
compression: Compression,
|
||||
}
|
||||
|
||||
@@ -244,7 +244,7 @@ impl TrapFileProvider {
|
||||
}
|
||||
|
||||
pub fn create(&self, category: &str, key: &Path) -> TrapFile {
|
||||
let path = file_paths::path_for(&self.trap_dir.join(category), key, "trap");
|
||||
let path = file_paths::path_for(&self.trap_dir.join(category), key, ".trap");
|
||||
debug!("creating trap file {}", path.display());
|
||||
let mut writer = trap::Writer::new();
|
||||
extractor::populate_empty_location(&mut writer);
|
||||
|
||||
122
rust/ql/.generated.list
generated
122
rust/ql/.generated.list
generated
@@ -14,8 +14,7 @@ lib/codeql/rust/elements/BinaryExpr.qll 394522da3bc3a716fc7bc40c3560143ca840f5d2
|
||||
lib/codeql/rust/elements/BlockExpr.qll b952fd44b89de248931d4089834d2c9406f6f2fc1a3f5c2365156be4e55157cf daccc07ab11ac696679b9fadc99f40b1bf579c90bf6c7cca6e82eaa313932ede
|
||||
lib/codeql/rust/elements/BoxPat.qll 1b2c3fff171aa6aa238c9460b122f26c79e04577cea67fa856de99842ba873d4 0caf8d23ed6e0997a6b8751def27641582151fba6e24fccf798712a4690b42f1
|
||||
lib/codeql/rust/elements/BreakExpr.qll 7ca3807a20e9a9a988d1fd7abebf240325ed422fcb45c719ba46272f031f94db dffb7379d3f3ba220acfbd05eb7bb6cfd9cfda211e9c8b1f5240ca5fa61be3fc
|
||||
lib/codeql/rust/elements/CallExpr.qll f336500ca7a611b164d48b90e80edb0c0d3816792b0ececce659ac1ff1ffeb3e f99a9c55466418ef53860c44d9f2d6161af4b492178ddd9e5870dff742b70ae5
|
||||
lib/codeql/rust/elements/CallExprBase.qll 2846202b5208b541977500286951d96487bf555838c6c16cdd006a71e383745a c789d412bf099c624329379e0c7d94fa0d23ae2edea7a25a2ea0f3c0042ccf62
|
||||
lib/codeql/rust/elements/CallExpr.qll 6760ef2753fcaa9f02860bfeadfd1b1603d0d5b35f5dd72b33a474c206f51a29 55afe003eb51ef28b382af368429930d858d291bb7d76d71149eee1c805731f1
|
||||
lib/codeql/rust/elements/CastExpr.qll ba281bde130f43c486c4ad889539b77fba9e41afdf7980e50b6a8696a1ec7527 61257003d395896ec60729d0bc01da36697615bb725d07141255fbb5c44e50a0
|
||||
lib/codeql/rust/elements/ClosureBinder.qll 977df800f97cc9b03fffb5e5e1fc6acd08a2938e04cb6ad91108784a15b0d510 f6fad4127226fe1dff2f16416d8a7fde5d8ab4a88f30e443ac5e5ff618de3e05
|
||||
lib/codeql/rust/elements/ClosureExpr.qll 8f06357ae134e42c073eef994c83c04b8cf294fe33b286dbd75c0e705ce29d05 9d9e282d965fed723965376801d4afa49444d1d9be9b093d02e276729a2cf7ad
|
||||
@@ -65,20 +64,18 @@ lib/codeql/rust/elements/LiteralExpr.qll 40b67404b7c2b81e5afabc53a2a93e0a503f687
|
||||
lib/codeql/rust/elements/LiteralPat.qll daffb5f380a47543669c8cc92628b0e0de478c3ac82685802c63e8d75a206bed adfe9796598cf6ca4a9170c89ffd871e117f1cea6dd7dd80ecbbb947327a1a5d
|
||||
lib/codeql/rust/elements/Locatable.qll 2855efa4a469b54e0ca85daa89309a8b991cded6f3f10db361010831ba1e11d3 00c3406d14603f90abea11bf074eaf2c0b623a30e29cf6afc3a247cb58b92f0f
|
||||
lib/codeql/rust/elements/LoopExpr.qll 58ade0bc4a01a1cc361363682fde3ea56f4c5fbb4b28f5723ceff52ebaf897d7 fa299162c742bcf3b2211dc20821b312e3c133350c288a050eb26e6f8b5a5c78
|
||||
lib/codeql/rust/elements/MacroCall.qll a39a11d387355f59af3007dcbab3282e2b9e3289c1f8f4c6b96154ddb802f8c3 88d4575e462af2aa780219ba1338a790547fdfc1d267c4b84f1b929f4bc08d05
|
||||
lib/codeql/rust/elements/MacroCall.qll 16933db15c6c0dbb717ef442f751ad8f63c444f36a12f8d56b8a05a3e5f71d1b ac05cbf50e4b06f39f58817cddbeac6f804c2d1e4f60956a960d63d495e7183d
|
||||
lib/codeql/rust/elements/MacroDef.qll acb39275a1a3257084314a46ad4d8477946130f57e401c70c5949ad6aafc5c5f 6a8a8db12a3ec345fede51ca36e8c6acbdce58c5144388bb94f0706416fa152a
|
||||
lib/codeql/rust/elements/MacroExpr.qll ea9fed13f610bab1a2c4541c994510e0cb806530b60beef0d0c36b23e3b620f0 ad11a6bbd3a229ad97a16049cc6b0f3c8740f9f75ea61bbf4eebb072db9b12d2
|
||||
lib/codeql/rust/elements/MacroItems.qll 00a5d41f7bb836d952abbd9382e42f72a9d81e65646a15a460b35ccd07a866c6 00efdb4d701b5599d76096f740da9ec157804865267b7e29bc2a214cbf03763e
|
||||
lib/codeql/rust/elements/MacroPat.qll dbf193b4fb544ac0b5a7dcfc31a6652de7239b6e643ff15b05868b2c142e940c 19b45c0a1eb1198e450c05d564b5d4aa0d6da29e7db84b9521eadf901e20a932
|
||||
lib/codeql/rust/elements/MacroRules.qll a94535506798077043b9c1470992ac4310bf67bcce5f722080886d1b3e6d90d1 bd8e08a7171991abc85100b45267631e66d1b332caf1e5882cd17caee5cf18a3
|
||||
lib/codeql/rust/elements/MacroStmts.qll 6e9a1f90231cb72b27d3ff9479e399a9fba4abd0872a5005ab2fac45d5ca9be0 d6ca3a8254fc45794a93c451a3305c9b4be033a467ad72158d40d6f675a377a0
|
||||
lib/codeql/rust/elements/MacroType.qll e5a153643e49a6be41483ad944550a030e0500764947b4e328cef6fa08c4fbd4 a42332c0a9c5cf7317fc49f3e1049e7751004fcc3efa056bbe058a8bfa2ef0cb
|
||||
lib/codeql/rust/elements/MatchArm.qll c39fd6cc0da24b1ff8d1e42835bcfee7695ad13580e3c7c50acd7c881b1cd894 62a31d2bd125e6aaebefc406e541a641271d3c497a377959f94dd4735b2bfbf8
|
||||
lib/codeql/rust/elements/MatchArmList.qll e6c48fd7419d88e996b82eb45e4aa2686dfd079b283b02be7710192fb2cb93a0 0ec63a0ca56f5f7f80093fd3e77b198b74c6289e67be55dc6a4deb610753c7bd
|
||||
lib/codeql/rust/elements/MatchExpr.qll e9ef1664f020823b6f4bb72d906a9dc0c1ee6432d4a9a13f7dbdbab2b2b1ee4d 38d71e5c487abcb5682293c573343be66e499a6e131bb630604c120d34b7777b
|
||||
lib/codeql/rust/elements/MatchGuard.qll 20754ab2009a7d40b50feece496ff7f38650586d79190ed2a372308594693694 471f8f118317efcf112f4ddfd60125ca2a9d9b3b08e6ee331c430961de7885ff
|
||||
lib/codeql/rust/elements/Meta.qll 9fa3216c86fa55ed5c0c4671708110a6ffc7c0f5d6cda8dda31aaff17f87534d c44ee2754dd71776ffd0a8a7d6c1ae8737c47e998e6bdb8efab5283625807cf4
|
||||
lib/codeql/rust/elements/MethodCallExpr.qll 91b411e0fb1a0547dcad8726db460dccc61bed972741598d5cb3740593fe75a7 538d23b6db115bb699389d29a1829bb0449c08424a1fff80377828eb7ceb2563
|
||||
lib/codeql/rust/elements/MethodCallExpr.qll 0a5cab9f21741f6a38956e6de4f6beb143db5d85ee590f9908dab3da300a6b72 df21eba9cf2823a7b06eb6672dd8249225e7c16d5b6c1c37c1f2a175d9513272
|
||||
lib/codeql/rust/elements/Missing.qll 70e6ac9790314752849c9888443c98223ccfc93a193998b7ce350b2c6ebe8ea4 e2f0623511acaa76b091f748d417714137a8b94f1f2bdbbd177f1c682c786dad
|
||||
lib/codeql/rust/elements/Module.qll 0bc85019177709256f8078d9de2a36f62f848d476225bff7bba1e35f249875c7 3fbb70e0c417a644dd0cada2c364c6e6876cfa16f37960e219c87e49c966c94e
|
||||
lib/codeql/rust/elements/Name.qll 3d7ed16c232912e30e5a075f5087ad344a8f76dcc27bc8f71a80c133802b89d7 036dc3ba0c20eb0907ef6dcc532214aa5de8e0de0fa819eca1fce0355b3741a3
|
||||
@@ -186,7 +183,6 @@ lib/codeql/rust/elements/internal/BlockExprImpl.qll 36ac09e4a6eeeec22919b62b1d00
|
||||
lib/codeql/rust/elements/internal/BoxPatConstructor.qll 153f110ba25fd6c889092bfd16f73bb610fa60d6e0c8965d5f44d2446fcd48a2 9324cf0d8aa29945551bf8ab64801d598f57aab8cd4e19bcd4e9ef8a4a4e06eb
|
||||
lib/codeql/rust/elements/internal/BoxPatImpl.qll d62a3cc1d5bab6bd258f702ec731ec57f0e5ef2672ab9de4b6f3b558078629eb 26b4fabb676adbbdb0d7f81449e493ee49380ea04d131f779714ac2434bb323a
|
||||
lib/codeql/rust/elements/internal/BreakExprConstructor.qll 356be043c28e0b34fdf925a119c945632ee883c6f5ebb9a27003c6a8d250afd9 bb77e66b04bb9489340e7506931559b94285c6904b6f9d2f83b214cba4f3cfd5
|
||||
lib/codeql/rust/elements/internal/CallExprBaseImpl.qll d2749cc1a9d7ee8bf7f34b6c3e0238a576a68e439a8c10a503c164ff45ffcbeb ffc7b0a8841945fe6736b0e1aed7d9ed69185db03dee2b16da121325b39397c7
|
||||
lib/codeql/rust/elements/internal/CallExprConstructor.qll 742b38e862e2cf82fd1ecc4d4fc5b4782a9c7c07f031452b2bae7aa59d5aa13a cad6e0a8be21d91b20ac2ec16cab9c30eae810b452c0f1992ed87d5c7f4144dc
|
||||
lib/codeql/rust/elements/internal/CallExprImpl.qll 7e48610680ba6f2876a1a005ab0743496dd2364b9c44aca441bd33e11317e2d7 bb12c3c28156b40796fe3ba112760f87bb5abb323aab3c5b7bb3e0facaef8d35
|
||||
lib/codeql/rust/elements/internal/CastExprConstructor.qll f3d6e10c4731f38a384675aeab3fba47d17b9e15648293787092bb3247ed808d d738a7751dbadb70aa1dcffcf8af7fa61d4cf8029798369a7e8620013afff4ed
|
||||
@@ -278,14 +274,10 @@ lib/codeql/rust/elements/internal/MacroDefConstructor.qll 382a3bdf46905d112ee491
|
||||
lib/codeql/rust/elements/internal/MacroDefImpl.qll f26e787ffd43e8cb079db01eba04412dbf32c338938acf1bc09a2f094bbdfdfe 044f43bc94fe4b6df22afae32e9f039d1d0d9e85ad9f24b6388be71211c37ce5
|
||||
lib/codeql/rust/elements/internal/MacroExprConstructor.qll b12edb21ea189a1b28d96309c69c3d08e08837621af22edd67ff9416c097d2df d35bc98e7b7b5451930214c0d93dce33a2c7b5b74f36bf99f113f53db1f19c14
|
||||
lib/codeql/rust/elements/internal/MacroExprImpl.qll 92dd9f658a85ae407e055f090385f451084de59190d8a00c7e1fba453c3eced4 89d544634fecdbead2ff06a26fc8132e127dab07f38b9322fa14dc55657b9f1a
|
||||
lib/codeql/rust/elements/internal/MacroItemsConstructor.qll 8e9ab7ec1e0f50a22605d4e993f99a85ca8059fbb506d67bc8f5a281af367b05 2602f9db31ea0c48192c3dde3bb5625a8ed1cae4cd3408729b9e09318d5bd071
|
||||
lib/codeql/rust/elements/internal/MacroItemsImpl.qll 76fd50a1f27336e9efc6d3f73ef4d724f19627cadbaa805d1e14d2cfa4f19899 40c0e512090050b39b69128730f4f4581f51ffd3c687fb52913617bd70a144e9
|
||||
lib/codeql/rust/elements/internal/MacroPatConstructor.qll 24744c1bbe21c1d249a04205fb09795ae38ed106ba1423e86ccbc5e62359eaa2 4fac3f731a1ffd87c1230d561c5236bd28dcde0d1ce0dcd7d7a84ba393669d4a
|
||||
lib/codeql/rust/elements/internal/MacroPatImpl.qll 7470e2d88c38c7300a64986f058ba92bb22b4945438e2e0e268f180c4f267b71 c1507df74fc4c92887f3e0a4f857f54b61f174ffae5b1af6fb70f466175d658b
|
||||
lib/codeql/rust/elements/internal/MacroRulesConstructor.qll dc04726ad59915ec980501c4cd3b3d2ad774f454ddbf138ff5808eba6bd63dea 8d6bf20feb850c47d1176237027ef131f18c5cbb095f6ab8b3ec58cea9bce856
|
||||
lib/codeql/rust/elements/internal/MacroRulesImpl.qll 10c03adfb63ee7a4348ff5cffc6ef5300a531b048f28811a51e940b053e69f68 2498bd64aeaea9849c086abeaa6c248e4ce41b4436155f4bd4840965976d5d54
|
||||
lib/codeql/rust/elements/internal/MacroStmtsConstructor.qll c293815cd69c002ba6de1db6018672654420f3f8bdd143f9d0c620adddd2be02 d376f8f07661a8cad1b10039076fd7fca353dcacf3ca40ed6507b8c874e849ca
|
||||
lib/codeql/rust/elements/internal/MacroStmtsImpl.qll 27faff9da93ad7f22a6236c73ebb4d4631161cf4ec1b82958cdf79c85aa2087c 7e2863eaf50d4b285b9240f2c5ff9497cfb4393c8528a0738d725d00f1a78406
|
||||
lib/codeql/rust/elements/internal/MacroTypeConstructor.qll 0a23573a6f69b38f3d7470050b16197601d67bdd5a4b1a43a155b0b99ccdf6b5 19b623962e8e1f73e55e3ed9712d2a3fe84b9510b99062173902feb2458ec12a
|
||||
lib/codeql/rust/elements/internal/MacroTypeImpl.qll b8711279f09f521b05bb67568c089271b7913f863ee64dfdeec2c502de2cbdc8 51bd9d3a2fb2065bce7b193b485e225ca5c8ba2029e60cab427d43a90baf0880
|
||||
lib/codeql/rust/elements/internal/MatchArmConstructor.qll b41c1d5822d54127ce376ef62c6a5fa60e11697319fc7d9c9c54fd313d784a93 96cca80e5684e5893c0e9c0dff365ef8ad9e15ff648c9969ba42d91f95abea05
|
||||
@@ -312,6 +304,7 @@ lib/codeql/rust/elements/internal/NeverTypeImpl.qll 8c7464cb76f9d081dab318d74381
|
||||
lib/codeql/rust/elements/internal/OffsetOfExprConstructor.qll 616e146562adb3ac0fba4d6f55dd6ce60518ed377c0856f1f09ba49593e7bfab 80518ce90fc6d08011d6f5fc2a543958067739e1b0a6a5f2ed90fc9b1db078f0
|
||||
lib/codeql/rust/elements/internal/OffsetOfExprImpl.qll e52d4596068cc54719438121f7d5afcaab04e0c70168ac5e4df1a3a0969817a6 6ab37e659d79e02fb2685d6802ae124157bf14b6f790b31688f437c87f40f52c
|
||||
lib/codeql/rust/elements/internal/OrPatConstructor.qll 4ef583e07298487c0c4c6d7c76ffcc04b1e5fe58aba0c1da3e2c8446a9e0c92b 980a6bd176ae5e5b11c134569910c5468ba91f480982d846e222d031a6a05f1a
|
||||
lib/codeql/rust/elements/internal/OrPatImpl.qll 0dbc461115f62306e679f69c4354550bc3425d4291aec0124ad8f7a55c779d51 d32ebaa5a3002e87b35949cb624b20377155869ad33aec873326f60f2f0b666d
|
||||
lib/codeql/rust/elements/internal/ParamConstructor.qll b98a2d8969f289fdcc8c0fb11cbd19a3b0c71be038c4a74f5988295a2bae52f0 77d81b31064167945b79b19d9697b57ca24462c3a7cc19e462c4693ce87db532
|
||||
lib/codeql/rust/elements/internal/ParamImpl.qll 8a5101559f5d636b60ab80237057944b537823ce054d760c3dbd58b2acf05a46 e7a08cefeb6a290a975899045b7b19a9624f5a2b0946cba0866b1854cc0c0fb0
|
||||
lib/codeql/rust/elements/internal/ParamListConstructor.qll 3123142ab3cab46fb53d7f3eff6ba2d3ff7a45b78839a53dc1979a9c6a54920e 165f3d777ea257cfcf142cc4ba9a0ebcd1902eb99842b8a6657c87087f3df6fe
|
||||
@@ -463,44 +456,43 @@ lib/codeql/rust/elements/internal/generated/Attr.qll 2e7983b2c462750065ed58cc10c
|
||||
lib/codeql/rust/elements/internal/generated/AwaitExpr.qll 1d71af702a1f397fb231fae3e0642b3deeba0cd5a43c1d8fabdff29cac979340 e0bfa007bdecc5a09a266d449d723ae35f5a24fbdfc11e4e48aeea3ec0c5147c
|
||||
lib/codeql/rust/elements/internal/generated/BecomeExpr.qll 7a211b785a4a2f961242d1d73fd031d381aad809f7b600ce7f7f864518bb7242 17a0388680007871748cfdc6621f700a7c2817b9601e1bd817fb48561e7c63ad
|
||||
lib/codeql/rust/elements/internal/generated/BinaryExpr.qll 64e9bd9c571edd6e5f3e7662b956b1d87fa0354ce6fe95da9caf25ac16b66c68 3fca09fdbe879db2ca3293618896a462e96376a2963d15cce3d5b1baac552fcb
|
||||
lib/codeql/rust/elements/internal/generated/BlockExpr.qll ccfbdc7bd268735a0424ff08dcf37d0e1fed61d5fe0520593c23f2490d400438 0facad59f6aba13ee0c069b691c99f52c04b723a2bfad4da226190c3c42dcabf
|
||||
lib/codeql/rust/elements/internal/generated/BlockExpr.qll 6fc90a80e60f017bf3418e45bcc35b5ddac59b51037c21aed3955d47c147ce4a 1f3f8e5107b0c6de381b7c94aab93dc5fd758a845c6ff9554888df453f1315d0
|
||||
lib/codeql/rust/elements/internal/generated/BoxPat.qll ec946a3e671ab7417e04b0207967adad004df512c570c4f0780ca5816d12d75f b0e64860855c4e85914042b1a51034899ff7cd1b2c6857188de89310a2726ea3
|
||||
lib/codeql/rust/elements/internal/generated/BreakExpr.qll 0f428a8b2f4209b134c2ffc3e1c93c30bc6b0e9c9172f140cefa88c1f77d8690 957b39f38ff6befe9061f55bc0b403c2f1c366dd0cf63b874bae6f8216576d76
|
||||
lib/codeql/rust/elements/internal/generated/CallExpr.qll 23ee64e3bf643cd5e6ff705181d2bb31e1aeaffecb5bdce73836172dbf15f12f 34b280139b1f8f70d78e1432392f03c971be392e8cb68d014eb325d0c101bddd
|
||||
lib/codeql/rust/elements/internal/generated/CallExprBase.qll cce796e36847249f416629bacf3ea146313084de3374587412e66c10d2917b83 c219aa2174321c161a4a742ca0605521687ca9a5ca32db453a5c62db6f7784cc
|
||||
lib/codeql/rust/elements/internal/generated/CallExpr.qll c2700dbd9c33dcc14de10dc72ff49abafdf0952257864d4435cf8ac46849a2ee 7932f725f97ffbe1b050c2622a61a0d56f18c9264a3293466cba9915313495b5
|
||||
lib/codeql/rust/elements/internal/generated/CastExpr.qll d6fbf02e9e202254666082a9116634d0eb933177866ac4c0a57b5e9c4bb4b383 477f67773492e3b82695461d56327c9db05a7d1a67e8d192406265f2ce369670
|
||||
lib/codeql/rust/elements/internal/generated/ClosureBinder.qll 94c0dcdd4cd87d115659d496c88a98354bc7d4ddc0fa27028003bf7688b99987 d59d713b426dbbdb775df9092d176eea031dac1f14e468810f2fc8591399cd19
|
||||
lib/codeql/rust/elements/internal/generated/ClosureExpr.qll a10596deeb7b9799f0c0d9e9dfe43f5ff58ba03a9a444d581a240a99ca06a949 e94c2f6cd0190d108d0b91340227d45fb6b8c8c2c6a0476358fe75ea7f7a7760
|
||||
lib/codeql/rust/elements/internal/generated/ClosureExpr.qll f9047451cb8b53f8b77e1c01f7ef485d5b5a92999e0591c6702062050052fa2f 2252be8b3022c587a8c6ad93b64d856263be7bfe2938c1d063e7cad845dd38e2
|
||||
lib/codeql/rust/elements/internal/generated/Comment.qll cd1ef861e3803618f9f78a4ac00516d50ecfecdca1c1d14304dc5327cbe07a3b 8b67345aeb15beb5895212228761ea3496297846c93fd2127b417406ae87c201
|
||||
lib/codeql/rust/elements/internal/generated/Const.qll 40464df9d8baacbc85bd137c7d1661684c957c407b2363ea60d90946be93de4c a3316beae55f570a5ca4b1172ef8267d7acb1104cc7a5e9efc58d9fc8224500f
|
||||
lib/codeql/rust/elements/internal/generated/Const.qll 0dbea9732880a4583166714d077276ec2b5665fa9772ea4284ee7b3f3d567923 38efc474b76f0b13695e9d9b39d016200c251fd9db48d4a1ab27dcb38946ca72
|
||||
lib/codeql/rust/elements/internal/generated/ConstArg.qll e2451cac6ee464f5b64883d60d534996fcff061a520517ac792116238a11e185 1dd6d4b073b0970448a52bbe2468cd160dfe108971dbf9ae9305900bd22ef146
|
||||
lib/codeql/rust/elements/internal/generated/ConstBlockPat.qll a425a7fd216d35f17a7ff239d431b349721f71f2e52722325755f43df2bb9886 a9aa37ee4f8c9d44ae49c807ac48d5a8a22f7d7d0ae2968ab50371a418ccc48a
|
||||
lib/codeql/rust/elements/internal/generated/ConstParam.qll 26f838dbbd7659cdbf464c2107304b66ad0fbd43370d6b649373c3b9fa4f6576 c658951ba92b919278fa445cd66c3b694f42d76bde49daa50a3128e5d44f647a
|
||||
lib/codeql/rust/elements/internal/generated/ConstBlockPat.qll e90cf24d7f995595111f2b48bd3775d064bc968c24074c122141aa0f058dcb83 a44f6e14da8cc760a0aae947c20ec47fff488da1e9a8dfab58b7dbc42c296fec
|
||||
lib/codeql/rust/elements/internal/generated/ConstParam.qll cc34626ea28b8bf4dbf2c2dd312b778e43a9725722039a8ba393ddd7267a951a e3c2983a794b4d623191db97616c3167b80aa847317685960919e03aac0d044b
|
||||
lib/codeql/rust/elements/internal/generated/ContinueExpr.qll e2010feb14fb6edeb83a991d9357e50edb770172ddfde2e8670b0d3e68169f28 48d09d661e1443002f6d22b8710e22c9c36d9daa9cde09c6366a61e960d717cb
|
||||
lib/codeql/rust/elements/internal/generated/DynTraitType.qll da9dce6347ce385d7468986cf6960b4a6787f017ff5632612a7216ed62bdc9c9 9d0b37221674b597a21bfacbdfc7e08b54381a6adacfe544df154481cd562ed8
|
||||
lib/codeql/rust/elements/internal/generated/Element.qll fb483b636180c699181c8aff83bc471b2c416206694f7028c671015918547663 542d1b9ae80c997974c94db3655887186df3921a8fa3f565eaf292dcfdac3c4c
|
||||
lib/codeql/rust/elements/internal/generated/Enum.qll 4f4cbc9cd758c20d476bc767b916c62ba434d1750067d0ffb63e0821bb95ec86 3da735d54022add50cec0217bbf8ec4cf29b47f4851ee327628bcdd6454989d0
|
||||
lib/codeql/rust/elements/internal/generated/Expr.qll 5fa34f2ed21829a1509417440dae42d416234ff43433002974328e7aabb8f30f 46f3972c7413b7db28a3ea8acb5a50a74b6dd9b658e8725f6953a8829ac912f8
|
||||
lib/codeql/rust/elements/internal/generated/ExprStmt.qll d1112230015fbeb216b43407a268dc2ccd0f9e0836ab2dca4800c51b38fa1d7d 4a80562dcc55efa5e72c6c3b1d6747ab44fe494e76faff2b8f6e9f10a4b08b5b
|
||||
lib/codeql/rust/elements/internal/generated/ExternBlock.qll c292d804a1f8d2cf6a443be701640c4e87410662921e026d3553bc624fd18abd ba6fae821d2502a97dec636e2d70476ad0693bc6185ae50e8391699529bd0ee0
|
||||
lib/codeql/rust/elements/internal/generated/ExternBlock.qll a8ba7dec266603ef1e3908f923a497bd1e206ec729cfd4ad397ef4502fddc745 cc20b5a47466dab52a8d57c1b3c99b09c01420967670c2e75d3f90302ced2dbb
|
||||
lib/codeql/rust/elements/internal/generated/ExternCrate.qll 35fea4e810a896c1656adb4682c4c3bc20283768073e26ae064189ce310433c8 fc504dff79ba758d89b10cd5049539fbc766ee9862ff495066cea26abf0b5e0b
|
||||
lib/codeql/rust/elements/internal/generated/ExternItem.qll 749b064ad60f32197d5b85e25929afe18e56e12f567b73e21e43e2fdf4c447e3 e2c2d423876675cf2dae399ca442aef7b2860319da9bfadeff29f2c6946f8de7
|
||||
lib/codeql/rust/elements/internal/generated/ExternItemList.qll 6bc97fdae6c411cab5c501129c1d6c2321c1011cccb119515d75d07dc55c253b 6b5aa808025c0a4270cac540c07ba6faede1b3c70b8db5fd89ec5d46df9041b2
|
||||
lib/codeql/rust/elements/internal/generated/FieldExpr.qll 3e506b5cb93793ec30f56bb637a600db869fcba6181b068516a671d55c362739 7bbf953696d763ad6b210f378f487ba85b875fa115b22c0c0508599a63633502
|
||||
lib/codeql/rust/elements/internal/generated/FieldList.qll 43c13c6e3c9ba75a7a4cb870fc4f18752001584d48b9df0734055a6ebb789331 7c51b0b13eb02f1286d3365e53a976ba2655c4dbd8e735bc11c8b205c829e1ee
|
||||
lib/codeql/rust/elements/internal/generated/FnPtrType.qll 748d766dbefd19a7d644734c57885eeede66897029bbfe1b87919517f43bfde2 5a7d80acc00e56594ed85026a8ea4923104d2e98c2e42db8c5bcd32ddd164e48
|
||||
lib/codeql/rust/elements/internal/generated/FnPtrType.qll e8e2f159983fb0d9ccc30d62d0e8b679a06c066076eb8f4ca36f3bf12be406fe bc8f2efdf4645a63b9eafbec2f8e5d1008e1decb67f29bdf1eed4c3e2a89c64a
|
||||
lib/codeql/rust/elements/internal/generated/ForExpr.qll 541b62b48911d4999f9ed64ab6c8b9910073ac4add0225761f319677328cf120 976c3a91c9eedfb1e2d9ea76ac501348643b3d23c723d7a777042258d416d091
|
||||
lib/codeql/rust/elements/internal/generated/ForType.qll 3d43d044a1189281f09c55caafb6c8020a836f49e2866077086101925a573cf2 646b59bfd1b428aaf7211f574c49f79cb4c6a79ca151aa0663b2b31480298721
|
||||
lib/codeql/rust/elements/internal/generated/FormatArgsArg.qll e07a1ae310f590003f1b88fada7dcf4847c99adb9d4c838d1c88e66e1da85c5f 0ef7342451fe2cb06e765fb4b33bb8c4a9b927f5edbc8feb5c6ba3655697f447
|
||||
lib/codeql/rust/elements/internal/generated/FormatArgsExpr.qll 40d6daa7d2bafb33798a21d79774dc802cfbd7a31618ac3bd0149399ea2bf893 d1172e2151791228559004792e125fc4625f6a26ffad25f29efb0ad263bf8795
|
||||
lib/codeql/rust/elements/internal/generated/Function.qll c8826307fcb18daf8c59552a5c629a0e59e83e7f676b4a30408a042ecc216a46 ae27a8a709c187ffd6fa7e25e7850555d1be6633d6ee304457a4481135402dcb
|
||||
lib/codeql/rust/elements/internal/generated/Function.qll b239af1a8874802b8a311706c53d56e3ceaad7ed23a7f97d1694bf961b63768b 4bc3c23685fa05820222e472ab1cdb40a271f862727d3bd878d47de9c2e3f485
|
||||
lib/codeql/rust/elements/internal/generated/GenericArg.qll 464da0ba1c5ddcd1be68617167f177773d99b5ac4775ec8ea24d503e789a9099 6faa1033d59baf7c210ac4837a55781cfc054b7acbad8027faf4630dbfa6e101
|
||||
lib/codeql/rust/elements/internal/generated/GenericArgList.qll b8cd936bba6f28344e28c98acf38acb8ef43af6ecf8367d79ed487e5b9da17cb 8b14331261e49d004807285b02fca190aafd62bfb9378b05c7d9c1e95525fe7b
|
||||
lib/codeql/rust/elements/internal/generated/GenericParam.qll a0285123f974f287154b706bf6688b86edf72a4adcec57346c654d962435651b b42c3915e9564b5b5c5282229bf882aa3309de26a77721b2255d6f4235c0cc38
|
||||
lib/codeql/rust/elements/internal/generated/GenericParamList.qll f2d8945bc70cda6929bb6b652f9e3c7707e73fb5e778b21e99dbac594e71285f 7b97da5b6a6504377456bedebddc293d714f90e8fc2ce64199656666d5f749af
|
||||
lib/codeql/rust/elements/internal/generated/IdentPat.qll a1269182132b2f52c5d842e58cbfa1cee49b143fa3766ed9fcf65389bf5137eb 46009fa66065222d865fa4714dd16c0373ffb16d576da45e7bf3a06432bd3a23
|
||||
lib/codeql/rust/elements/internal/generated/IdentPat.qll 557b2b1fe9e719ac6658c06c162f03d5925d848d7fdc4364da850e588a3ca9df 5517fde679c47c0604a0d177c53bed64f83e33e14d1b64f45e3467e3a8be77fb
|
||||
lib/codeql/rust/elements/internal/generated/IfExpr.qll 413dd7a20c6b98c0d2ad2e5b50981c14bf96c1a719ace3e341d78926219a5af7 c9a2d44e3baa6a265a29a683ca3c1683352457987c92f599c5771b4f3b4bafff
|
||||
lib/codeql/rust/elements/internal/generated/Impl.qll e33ef5d3e49e64beca0ca9d5c0ba972d99007e5011eeedc11e67d3fbb569ab4a 5c5d88110864f4fd3d966b1ad973eaabd7a9c5a07adc18bff01dc09395214825
|
||||
lib/codeql/rust/elements/internal/generated/Impl.qll 31fdd707dd8dcec845758b19eddcd4eb5bbd44ddccac83191cebe0c402834a66 ef06985099dee900a9403898f45349619ed138d23fee185137ed0baf679fe7cc
|
||||
lib/codeql/rust/elements/internal/generated/ImplTraitType.qll 3c29684f5ef386b883b79dc9758441d97f090e065be177ffc8240aaf0f3d1e7b 03ea42c2a95cf917ec73d88b7b4ca5e53e10d7b046074f59100c0ec6c2c1ed6d
|
||||
lib/codeql/rust/elements/internal/generated/IndexExpr.qll cf951fc40f6690e966b4dc78fa9a6221aa5c6cade44759dcb52254f799292d11 1572e71918cc4e0b7e028331b6d98c9db23100a3646cd3874d1915e06ab6211d
|
||||
lib/codeql/rust/elements/internal/generated/InferType.qll 23ee25135c59ea5578cdf7c34a41f606e217e7260c3c8f404d12836585d5cad4 400da322fa1be62c4e300ebdf481eb92d4226eb6c316c668da8cc5168065774f
|
||||
@@ -517,20 +509,18 @@ lib/codeql/rust/elements/internal/generated/LiteralExpr.qll f3a564d0a3ed0d915f5a
|
||||
lib/codeql/rust/elements/internal/generated/LiteralPat.qll ecc2bfe559abfce1be873fbf7b61b5728897c9afc3bb3f69551d8320d273da71 42196fb6a4a0ff9b570fd0bdbc920f24744b3f46772efbb46648af7fbfe1fbda
|
||||
lib/codeql/rust/elements/internal/generated/Locatable.qll c897dc1bdd4dfcb6ded83a4a93332ca3d8f421bae02493ea2a0555023071775e b32d242f8c9480dc9b53c1e13a5cb8dcfce575b0373991c082c1db460a3e37b8
|
||||
lib/codeql/rust/elements/internal/generated/LoopExpr.qll 22b755dfaf238ecea722c0c94c399992014e23481ec6fdd61f803bbec012b6f9 08731630c2dc05aa1e0ada222a6057752d9ce737329c62076708828247a358be
|
||||
lib/codeql/rust/elements/internal/generated/MacroCall.qll fc8988696493992cc4fdce8c0e5610c54ee92ea52ebb05262338f8b612353f50 188a2d7a484bd402a521787371e64f6e00e928306c8d437e6b19bf890a7aa14e
|
||||
lib/codeql/rust/elements/internal/generated/MacroCall.qll 8b49d44e6aeac26dc2fc4b9ba03c482c65ebf0cba089d16f9d65e784e48ccbb0 9ecf6e278007adcbdc42ed1c10e7b1c0652b6c64738b780d256c9326afa3b393
|
||||
lib/codeql/rust/elements/internal/generated/MacroDef.qll e9b3f07ba41aa12a8e0bd6ec1437b26a6c363065ce134b6d059478e96c2273a6 87470dea99da1a6afb3a19565291f9382e851ba864b50a995ac6f29589efbd70
|
||||
lib/codeql/rust/elements/internal/generated/MacroExpr.qll 03a1daa41866f51e479ac20f51f8406d04e9946b24f3875e3cf75a6b172c3d35 1ae8ca0ee96bd2be32575d87c07cc999a6ff7770151b66c0e3406f9454153786
|
||||
lib/codeql/rust/elements/internal/generated/MacroItems.qll 894890f61e118b3727d03ca813ae7220a15e45195f2d1d059cb1bba6802128c8 db3854b347f8782a3ec9f9a1439da822727b66f0bd33727383184ab65dbf29ac
|
||||
lib/codeql/rust/elements/internal/generated/MacroPat.qll 9e927e09d47029a3025eaad271c975e73479a80ea933c921381b6c9d751f2866 bdf5c58ca27743eb2e2dae2aeea3f3fc21f8a4f98fe1001598876455c88e8f69
|
||||
lib/codeql/rust/elements/internal/generated/MacroRules.qll 4fbd94f22b5ee0f3e5aaae39c2b9a5e9b7bf878a1017811ca589942f6de92843 49fb69543ee867bae196febea6918e621f335afdf4d3ccbf219965b37c7537b1
|
||||
lib/codeql/rust/elements/internal/generated/MacroStmts.qll cb4f3c2721a4d0c8522e51f567c675f4fc95f39bac8a2bd97e125d5553515ad2 09b5a739ccee75e6c556b34ecd6f78c7dc799029d9bc7df2e6169098d24f0ccd
|
||||
lib/codeql/rust/elements/internal/generated/MacroType.qll c462824df4a002956c036966d15cd0bce206e664888f8d0c7834dedb38b3c0bf 947480f07c40128ef3d00ad4c3a29a685472b3e20a661680c22f6bb318205ed1
|
||||
lib/codeql/rust/elements/internal/generated/MatchArm.qll 8fb740a0f2e308782d9cf390672969cd7cf6e698e5b847fb02ae3fa6c205646f 42bfe8dd94fc24ec925fbd44016df111600f99d1216c9a698631373bb6048830
|
||||
lib/codeql/rust/elements/internal/generated/MatchArmList.qll 13362680c037fe83fef4653562cc10a4429078316b5ec7c47b076336cf4aca2e 41c674293c13eceaca62134ae0c6778541f6a5201cbc5c146f0ba01b898dc267
|
||||
lib/codeql/rust/elements/internal/generated/MatchExpr.qll 689d65f690fe05bc262d0a5bfe69bb4f8a142db387c5765fcc4958a9b49989f8 2979cd2017d0538870d17b2b7592c75cc05b706bd36c9de3e5dc38fa3a957e5b
|
||||
lib/codeql/rust/elements/internal/generated/MatchGuard.qll 521a507883963106780f1782084c581fbcf1179863c7c15438c4db79e30e78dd 6226feffaaa8d828a42ece0c693e616cd375672eb987c3b7ff1ca15fa23c116a
|
||||
lib/codeql/rust/elements/internal/generated/Meta.qll 38fca2c9958b4179de311546fe0850319010aca9cd17c97d57e12b521c5d0947 740f99c9d41044ceebfcc9d29baaa22f59c11a40f45502a34aa587d423c018f8
|
||||
lib/codeql/rust/elements/internal/generated/MethodCallExpr.qll 0966b268c9d71a8007044d608935e0c07d2144eaafef4812ef259d68b00a06f4 b3a5ab7ec79a6cfa55f671288b8c7c946883fd2edc0b3fac68221ab742cf8604
|
||||
lib/codeql/rust/elements/internal/generated/Meta.qll f1ce7cdaf2a6fa3b86f0465e33a9521d254c032468427b276d93276ffd5142be 046d72c868ee2664b8a291de16320238ece9d0612c93c96a0d601e0b6079bf90
|
||||
lib/codeql/rust/elements/internal/generated/MethodCallExpr.qll c2d6faf1f840628dbc5aa59c90dbd8b244f6bd4a7dba25e410047fcde11ff378 2d0251b095bf15b0275d493efdd1f9ce0926a3cff6671bb550a7a672aaf62a30
|
||||
lib/codeql/rust/elements/internal/generated/Missing.qll 16735d91df04a4e1ae52fae25db5f59a044e540755734bbab46b5fbb0fe6b0bd 28ca4e49fb7e6b4734be2f2f69e7c224c570344cc160ef80c5a5cd413e750dad
|
||||
lib/codeql/rust/elements/internal/generated/Module.qll ebae5d8963c9fd569c0fbad1d7770abd3fd2479437f236cbce0505ba9f9af52c fa3c382115fed18a26f1a755d8749a201b9489f82c09448a88fb8e9e1435fe5f
|
||||
lib/codeql/rust/elements/internal/generated/Name.qll 12aad57744b7d1b04454159536409244c47319aedd580acb58ee93ef9d7f837d 63fc67ccc085db22f82576a53489f15216a7c29d5b941b14a965eab481534e2e
|
||||
@@ -543,7 +533,7 @@ lib/codeql/rust/elements/internal/generated/ParamList.qll c808c9d84dd7800573832b
|
||||
lib/codeql/rust/elements/internal/generated/ParenExpr.qll bc0731505bfe88516205ec360582a4222d2681d11342c93e15258590ddee82f2 d4bd6e0c80cf1d63746c88d4bcb3a01d4c75732e5da09e3ebd9437ced227fb60
|
||||
lib/codeql/rust/elements/internal/generated/ParenPat.qll ce24b8f8ecbf0f204af200317405724063887257460c80cf250c39b2fdf37185 e7c87d37e1a0ca7ea03840017e1aa9ddb7f927f1f3b6396c0305b46aeee33db6
|
||||
lib/codeql/rust/elements/internal/generated/ParenType.qll 9cc954d73f8330dcac7b475f97748b63af5c8766dee9d2f2872c0a7e4c903537 c07534c8a9c683c4a9b11d490095647e420de0a0bfc23273eaf6f31b00244273
|
||||
lib/codeql/rust/elements/internal/generated/ParentChild.qll 99038e13a29e95611c11d77d7096577a6169fe806770dfdb9c39c17737e0a13c ad81306bd95d82724aedd186bb47c03910107bec509ef86fe55d07fb85baf6c7
|
||||
lib/codeql/rust/elements/internal/generated/ParentChild.qll ad728d69b3ef9555d71db2274b04a5ba99b4f815120c55032c57d077e0c954ca 64c6406626a14ed3052d3996cc47fc91e435175bd982440d948416cf878400fd
|
||||
lib/codeql/rust/elements/internal/generated/Pat.qll 3605ac062be2f294ee73336e9669027b8b655f4ad55660e1eab35266275154ee 7f9400db2884d336dd1d21df2a8093759c2a110be9bf6482ce8e80ae0fd74ed4
|
||||
lib/codeql/rust/elements/internal/generated/Path.qll 299abce24762a5ab023f3cf1ab9718b83047e171aed42a8092e7a155914b1657 db1a23d18640c548f08c9f94823838b5e019ac85877c7b15df2d1493d1846572
|
||||
lib/codeql/rust/elements/internal/generated/PathExpr.qll 17cdb0a7393258a207450f08e37178fc9d35d167f064ba6015be94246f3dc933 a75fdd280aff6d87e083a92030e041c2eb52b57cf7151d4a6989fcd31d6a64bf
|
||||
@@ -551,11 +541,11 @@ lib/codeql/rust/elements/internal/generated/PathPat.qll 98c9938d6a359fd717829b19
|
||||
lib/codeql/rust/elements/internal/generated/PathSegment.qll 4621597fd86246f788b8f9ca73f6b0f27929fc04261ce3ccf85da1183071431d aadda8bce386a3b7a9c53b98465eedcc4f724e37b8a904c1775af5b7ffb041ee
|
||||
lib/codeql/rust/elements/internal/generated/PathType.qll 45de78e5374d6eb0446e2112ec72d3692c2811df9fa2ad03d0127e426940abe3 622cf70408413a565a0dac58f451035ac1339c8d0ee5b24f630680201cb0aa48
|
||||
lib/codeql/rust/elements/internal/generated/PrefixExpr.qll c9ede5f2deb7b41bc8240969e8554f645057018fe96e7e9ad9c2924c8b14722b 5ae2e3c3dc8fa73e7026ef6534185afa6b0b5051804435d8b741dd3640c864e1
|
||||
lib/codeql/rust/elements/internal/generated/PtrType.qll 40099c5a4041314b66932dfd777c9e2bef90a0711fb8d7c2c2cec764c003ac4a cf8297d93557356a572223d3e8acca701837c4b1f54e8d4351ba195fb7ed27f8
|
||||
lib/codeql/rust/elements/internal/generated/PtrType.qll 5f12b6ad29b4e5ce51c205e2199594ce190e1aa24fbe3ddcfd82317a0b472222 8940e8dcccdf5cfc863aa2f2bc52bbddfa4d9ac8e8b38973cc1ecc1fbe32b3d4
|
||||
lib/codeql/rust/elements/internal/generated/PureSynthConstructors.qll dc03515d678ba052c2ff2dd9f0883e0bce54cac740ba9a15e5173f292c1b6971 dc03515d678ba052c2ff2dd9f0883e0bce54cac740ba9a15e5173f292c1b6971
|
||||
lib/codeql/rust/elements/internal/generated/RangeExpr.qll 23cca03bf43535f33b22a38894f70d669787be4e4f5b8fe5c8f7b964d30e9027 18624cef6c6b679eeace2a98737e472432e0ead354cca02192b4d45330f047c9
|
||||
lib/codeql/rust/elements/internal/generated/RangePat.qll efd93730de217cf50dcba5875595263a5eadf9f7e4e1272401342a094d158614 229b251b3d118932e31e78ac4dfb75f48b766f240f20d436062785606d44467b
|
||||
lib/codeql/rust/elements/internal/generated/Raw.qll dcdd499e48ca8cc43354717791dec6341f744c38a133bb6a35ed44db3a2f16e2 1b9493df5e91be496d6f20ae0d9da5c49268377f7cc31f94bf171a8c387752d4
|
||||
lib/codeql/rust/elements/internal/generated/Raw.qll 783c3d04b798c0a5281baf88aa3ada406492e6e6b8ff41dac658d52c88f95c46 e69891409fc89f0a3a199feb6f1a734bfdd862239a5f6794de0ee811e69fab04
|
||||
lib/codeql/rust/elements/internal/generated/RecordExpr.qll eb6cb662e463f9260efae1a6ce874fa781172063b916ef1963f861e9942d308d 1a21cbccc8f3799ff13281e822818ebfb21d81591720a427cac3625512cb9d40
|
||||
lib/codeql/rust/elements/internal/generated/RecordExprField.qll 7e9f8663d3b74ebbc9603b10c9912f082febba6bd73d344b100bbd3edf837802 fbe6b578e7fd5d5a6f21bbb8c388957ab7210a6a249ec71510a50fb35b319ea1
|
||||
lib/codeql/rust/elements/internal/generated/RecordExprFieldList.qll 179a97211fe7aa6265085d4d54115cdbc0e1cd7c9b2135591e8f36d6432f13d3 dd44bbbc1e83a1ed3a587afb729d7debf7aeb7b63245de181726af13090e50c0
|
||||
@@ -564,27 +554,27 @@ lib/codeql/rust/elements/internal/generated/RecordFieldList.qll d7bb2677338cf420
|
||||
lib/codeql/rust/elements/internal/generated/RecordPat.qll f5f9904fcd8b8fa5fe65b46a68f830021a5e4a68f95ff403151565c3ec770477 56294ed2ff753d8be7742a501b15b5f3f5f20afe0f8171ee6771d049f26489e4
|
||||
lib/codeql/rust/elements/internal/generated/RecordPatField.qll f17b1aa265091fd8309fd90d5c3822d170870e304f160225327de5a844a9aed4 0458e39dbe88060b4b664692cf0b41ebf4364de268d9417658c14c883c9c1b33
|
||||
lib/codeql/rust/elements/internal/generated/RecordPatFieldList.qll 08d4740bbb519f15ab20b694b3c45e396a2a59cce0f68fa4b9698348784cae43 99919809607ae61c707f591ee609c50bcfb90d5b4f9c263f6b8e78658d21b605
|
||||
lib/codeql/rust/elements/internal/generated/RefExpr.qll 7d995884e3dc1c25fc719f5d7253179344d63650e217e9ff6530285fe7a57f64 f2c3c12551deea4964b66553fb9b6423ee16fec53bd63db4796191aa60dc6c66
|
||||
lib/codeql/rust/elements/internal/generated/RefPat.qll 5c4d908f851d89f42cf765007c46ac4199200f9b997f368d5b0e2a435efa82cd 42fd637bc98b5a9275386f1c5fb3ae8c4681987289a89b060991416a25131306
|
||||
lib/codeql/rust/elements/internal/generated/RefType.qll 3603a3e000acc25c5e675bd4bc4a5551b8f63851591e1e9247709e48d1769dc5 91bea4a1d5ef0779d575567253cd007157d3982524e63a7c49c5cae85cb42e5f
|
||||
lib/codeql/rust/elements/internal/generated/RefExpr.qll f75a9550456e8b53044d0aa94b69148cb04950273000ac19eda57a836091670e 24ea42dc26b6b84f5807959e787a0487b7a33ed1f20c24d34af2799110a1902b
|
||||
lib/codeql/rust/elements/internal/generated/RefPat.qll 7483fcf9bf555a0ca60bfdbb91fd1c7344c98cb60506469cab24fddd90450005 b233f86eec76a3916ca5daac4812083f452f26089cabc13811a5600862ac1832
|
||||
lib/codeql/rust/elements/internal/generated/RefType.qll 90b03447b77c9a8ae5317a7f605beac4a3c9251f2e5409681fe8badad41d1dd7 bd96341b52450eb0ab262aa8ffd810ff7b091d4c1ed8576d794d7705af565296
|
||||
lib/codeql/rust/elements/internal/generated/Rename.qll d23f999dab4863f9412e142756f956d79867a3579bd077c56993bdde0a5ac2f1 9256c487d3614bf3d22faa294314f490cf312ab526b8de0882e3a4a371434931
|
||||
lib/codeql/rust/elements/internal/generated/RestPat.qll b3a4206e68cf67a0310a466721e7c4b3ab855e65490d589d3d856ad333b3d5e8 30b471bec377784f61d73ef93e74fc0dcec7f512ac4b8791d1ca65f2bcea14b8
|
||||
lib/codeql/rust/elements/internal/generated/RetType.qll a26860cd526b339b9527c089d126c5486e678dd080e88c60ea2fe641e7d661fd a83c1ce32fd043945ad455b892a60c2a9b6a62d7a5aadf121c4b4056d1dfb094
|
||||
lib/codeql/rust/elements/internal/generated/ReturnExpr.qll c9c05400d326cd8e0da11c3bfa524daa08b2579ecaee80e468076e5dd7911d56 e7694926727220f46a7617b6ca336767450e359c6fa3782e82b1e21d85d37268
|
||||
lib/codeql/rust/elements/internal/generated/ReturnTypeSyntax.qll 34e32623d2c0e848c57ce1892c16f4bc81ccca7df22dc21dad5eb48969224465 ccb07c205468bce06392ff4a150136c0d8ebacfb15d1d96dd599ab020b353f47
|
||||
lib/codeql/rust/elements/internal/generated/SelfParam.qll cf6837c2731b45632f04092079d295eee3e02d19f73c73b3ccbce1abe12203bf 87eaa9d982506904c42030f7173dd01fd52f3edd9d2c8d19b572f6d5454f769b
|
||||
lib/codeql/rust/elements/internal/generated/SelfParam.qll cc9693cd6efd7528584f00696b86e41027e05066f8e8aba1ca25bd7567b971ed 689b4746ab4e82de0b7b6e11350959c5194a1562497a21a831c75c6e325ff468
|
||||
lib/codeql/rust/elements/internal/generated/SlicePat.qll 8b1463758d7b15a0303384c8136a48a8e71ce27da4ba6e421272b9751a988e64 7562d47308f197bc63ade0f114cd23a17e7f60fa696716f6a30fc7b7411642fe
|
||||
lib/codeql/rust/elements/internal/generated/SliceType.qll 98ee8b566be28f392ab9c9507600e8461ad0b48cbbbd422d22548aca691f8330 528d6eabddf49b9dc474971a2f3a6ddb6f2d77dc7f8449140ef54646c1ceb822
|
||||
lib/codeql/rust/elements/internal/generated/SourceFile.qll 55d44c9f09c5ff28c4f715f779a0db74083e1180acaf0d410e63ca07b90d1cb5 78c0af48b0b64aa377413ea4799dfe977602a111208e1d25e4bdfa920dbd7238
|
||||
lib/codeql/rust/elements/internal/generated/Static.qll 5fbd6879858cf356d4bdaa6da475de729c12d44ee99aef12bdefe657fdb885e0 0c8e9ef7a93c59b9346265338e38ae3f2e1265981f2d81aab49bc36cf0589382
|
||||
lib/codeql/rust/elements/internal/generated/Static.qll cae5313e08e4af44c46b2580226993eff639a5257863276e720de2309afff3c3 93fdbd117ecb69fbef5c84632e08483c0faf051f882f1a266215044a0d5bfd94
|
||||
lib/codeql/rust/elements/internal/generated/Stmt.qll 8473ff532dd5cc9d7decaddcd174b94d610f6ca0aec8e473cc051dad9f3db917 6ef7d2b5237c2dbdcacbf7d8b39109d4dc100229f2b28b5c9e3e4fbf673ba72b
|
||||
lib/codeql/rust/elements/internal/generated/StmtList.qll a667193e32341e17400867c6e359878c4e645ef9f5f4d97676afc0283a33a026 a320ed678ee359302e2fc1b70a9476705cd616fcfa44a499d32f0c7715627f73
|
||||
lib/codeql/rust/elements/internal/generated/Struct.qll 4d57f0db12dc7ad3e31e750a24172ef1505406b4dab16386af0674bd18bf8f4b 1a73c83df926b996f629316f74c61ea775be04532ab61b56af904223354f033e
|
||||
lib/codeql/rust/elements/internal/generated/Synth.qll f02ed28dc96e2fd273109ee0564b6c6087b78d43d2a2a38bc4aeb25af79874cd f17c0118aadaf55f10036ace989ec5c925b1a2b8cfc2cbb63176751b26ff2636
|
||||
lib/codeql/rust/elements/internal/generated/SynthConstructors.qll 5d30b6d4f36791637f250734ee38820102c64f196454e20f79e30097da1a8e20 5d30b6d4f36791637f250734ee38820102c64f196454e20f79e30097da1a8e20
|
||||
lib/codeql/rust/elements/internal/generated/Synth.qll 99fa143232f2cfb1ef3f6ed6a51afa634c336361105e37719ce11ca6c74de8ee b3b77e1bdea36022b3be7cef000e7113059eb8b2b1afec26ae1d62e84259143b
|
||||
lib/codeql/rust/elements/internal/generated/SynthConstructors.qll 518b68ccf6d0791bc0c141486261108bb1723e37743fc7f8e4167a1d61660531 518b68ccf6d0791bc0c141486261108bb1723e37743fc7f8e4167a1d61660531
|
||||
lib/codeql/rust/elements/internal/generated/Token.qll 77a91a25ca5669703cf3a4353b591cef4d72caa6b0b9db07bb9e005d69c848d1 2fdffc4882ed3a6ca9ac6d1fb5f1ac5a471ca703e2ffdc642885fa558d6e373b
|
||||
lib/codeql/rust/elements/internal/generated/TokenTree.qll 8577c2b097c1be2f0f7daa5acfcf146f78674a424d99563e08a84dd3e6d91b46 d2f30764e84dbfc0a6a5d3d8a5f935cd432413688cb32da9c94e420fbc10665c
|
||||
lib/codeql/rust/elements/internal/generated/Trait.qll a570fa93d0b78a35766b00d5ca256c102f824564248b9d8b678a981d6eea3e2e d9c7475e5102e21cfdee3b1791f89a4f9cdba5a4200349ff706532b704c02664
|
||||
lib/codeql/rust/elements/internal/generated/Trait.qll 32bdbb4dc9f03488195a90320a947013135cd2fae1b9d62b4f71ed9a4e39a967 5dab0fbec64698bf3cdae04879d3d1665cf82386b7b030ed69e6b20776ffa9fc
|
||||
lib/codeql/rust/elements/internal/generated/TraitAlias.qll 0a3b568100baaca129a12140b0742a1c8e507ef5b2f2c191ff7452c882ba4064 c32e74569f885c683f8d3977682fcbc8b7699b00d5e538cc6b08acdfffa56bc8
|
||||
lib/codeql/rust/elements/internal/generated/TryExpr.qll 75bf9fdda5238155d2268806d415e341fa57f293dcadef003b4a11562c4cd877 935c746f822cf183cdf36bef2332f01e7ce38aa09aa8476d64c1062c5e8f13dd
|
||||
lib/codeql/rust/elements/internal/generated/TupleExpr.qll 75186da7c077287b9a86fc9194221ab565d458c08a5f80b763e73be5b646b29f 0250d75c43e2e6f56cdc8a0c00cc42b3d459ea8d48172d236c8cdf0fe96dfed2
|
||||
@@ -593,9 +583,9 @@ lib/codeql/rust/elements/internal/generated/TupleFieldList.qll 9d4981d04c2ee005e
|
||||
lib/codeql/rust/elements/internal/generated/TuplePat.qll d61163a380f3f2c1709080e2df69a90764509af060e607e27e832862e4dae18c 108b7db493a21fe1fa0db99fceee952aabb0a128eac41e050877ab9136407403
|
||||
lib/codeql/rust/elements/internal/generated/TupleStructPat.qll 87e0acfeb51d48c55648d5af783f5ea006aaeccce990ba26458c6935fbdf7c11 7c761e66ddacb51307e653c6ad45bec3fba8315049fbe6c4503ed19241204d41
|
||||
lib/codeql/rust/elements/internal/generated/TupleType.qll 7fae8e881157a24c4ce4f960269ba8010e227a81d3055b571f861f7196f868e2 18085a19a102df8e2cded938b49709225e89f0ce68b4a003310647bb259a6bd3
|
||||
lib/codeql/rust/elements/internal/generated/TypeAlias.qll af02bb172b6f2d7f5eab8645a5a219eee8a4bbc445838f5739f18ba217c7e608 6d871471d673adae99c8b146f6f7ab204f24d52b5013b4582037a42b279c9f05
|
||||
lib/codeql/rust/elements/internal/generated/TypeAlias.qll c584cd4c6fedc50818e7bd6a3ac8d14ba916e7ae6be179bd2f51f3aff95673ab f4be9e83c9814fec205c606de5afeec836a7ec8d58d8b64fec9126472f2a8c68
|
||||
lib/codeql/rust/elements/internal/generated/TypeArg.qll fe4441b3faa44e542c43a85353347df23d3f74da0c4b17cb0fdc60f5aca9dee7 1473d044e979e7cb6628525ffd454549cd8a37560488c695f534243946cf83bc
|
||||
lib/codeql/rust/elements/internal/generated/TypeBound.qll c4e5a5a919a30f4b334e8218b69fae887bf43e3b87bc63863b2c891beba14ba0 c9d394f31a7cbcfae95d511ad030ed515f51e87697233643b9ac12d6ac61ab18
|
||||
lib/codeql/rust/elements/internal/generated/TypeBound.qll c6f75fd8e99e575c33d424c2c9c85918554bdb87b5f78848c66538df6ad08559 f107ae5edadc3bd1b2e76f0c5ab15d043946ac9d2db62c10132690de7282003c
|
||||
lib/codeql/rust/elements/internal/generated/TypeBoundList.qll 31881cae2f71df5adf7a427357565bc0e7ba58c6a774a9d5835560a34c4db30f 1ff36ba34dd966d945d743781e3a1cccad4bb9fd5d32902dfd0bcad537501a85
|
||||
lib/codeql/rust/elements/internal/generated/TypeParam.qll dd57c5c370b4e3ed87c42c4fccf71b554cf1c588de1a1d1ac4ed5edbc1fb4664 09cd09537c1196f0a84850f654d324c6ad8aeaf9debcc3d9879e23a313ed93d9
|
||||
lib/codeql/rust/elements/internal/generated/TypeRef.qll c4c3bdafe3deb05338f5031c798fa6e72b58301ee7737a785314e72c9c4f091c e6ec0c680bcfe61ff79468de485241a75fbd795b2d501004324b66b003fddbce
|
||||
@@ -615,7 +605,7 @@ lib/codeql/rust/elements/internal/generated/WhileExpr.qll fec8a9211b82a80601bf73
|
||||
lib/codeql/rust/elements/internal/generated/WildcardPat.qll d74b70b57a0a66bfae017a329352a5b27a6b9e73dd5521d627f680e810c6c59e 4b913b548ba27ff3c82fcd32cf996ff329cb57d176d3bebd0fcef394486ea499
|
||||
lib/codeql/rust/elements/internal/generated/YeetExpr.qll cac328200872a35337b4bcb15c851afb4743f82c080f9738d295571eb01d7392 94af734eea08129b587fed849b643e7572800e8330c0b57d727d41abda47930b
|
||||
lib/codeql/rust/elements/internal/generated/YieldExpr.qll 37e5f0c1e373a22bbc53d8b7f2c0e1f476e5be5080b8437c5e964f4e83fad79a 4a9a68643401637bf48e5c2b2f74a6bf0ddcb4ff76f6bffb61d436b685621e85
|
||||
lib/codeql/rust/elements.qll 28718424faf8e099bffc4f408409a9790f58ec0ce5618574a99a3f1118a3002e 28718424faf8e099bffc4f408409a9790f58ec0ce5618574a99a3f1118a3002e
|
||||
lib/codeql/rust/elements.qll 926e6e5f994ef7fcd04854c4d69004d7bfd81950e132c9d3d501b4b2420db222 926e6e5f994ef7fcd04854c4d69004d7bfd81950e132c9d3d501b4b2420db222
|
||||
test/extractor-tests/generated/Abi/Abi.ql 7f6e7dc4af86eca3ebdc79b10373988cd0871bd78b51997d3cffd969105e5fdd 2f936b6ca005c6157c755121584410c03e4a3949c23bee302fbe05ee10ce118f
|
||||
test/extractor-tests/generated/Abi/Abi_getAbiString.ql a496762fcec5a0887b87023bbf93e9b650f02e20113e25c44d6e4281ae8f5335 14109c7ce11ba25e3cd6e7f1b3fcb4cb00622f2a4eac91bfe43145c5f366bc52
|
||||
test/extractor-tests/generated/ArgList/ArgList.ql e412927756e72165d0e7c5c9bd3fca89d08197bbf760db8fb7683c64bb2229bc 043dba8506946fbb87753e22c387987d7eded6ddb963aa067f9e60ef9024d684
|
||||
@@ -654,7 +644,7 @@ test/extractor-tests/generated/BinaryExpr/BinaryExpr_getAttr.ql 26d985ac4b668d78
|
||||
test/extractor-tests/generated/BinaryExpr/BinaryExpr_getLhs.ql c3f19d8a60066ad6b1810291a669473c75b659cd2f6ac3ab9ed3db2203d4145c c05c5e0226e30f923155669ffc79cfe63af1ca464e8dfc85888dda5f7049711b
|
||||
test/extractor-tests/generated/BinaryExpr/BinaryExpr_getOperatorName.ql 33612159be1c111e3306009d0b04579450fc962a81119b6ea4e255d3c409b401 1a0995b298f50242217cfef81dca8ac978e19e06f90a5f4caadcb6f84460fec2
|
||||
test/extractor-tests/generated/BinaryExpr/BinaryExpr_getRhs.ql 3bcd36b678e87d5c29a43b69c54c80468a89aefa7e69481b48158ae794a53160 a629dc1472b3f6fd7c608ff760e83d8e1363db81dfe9a4b2968690c2ba4925ca
|
||||
test/extractor-tests/generated/BlockExpr/BlockExpr.ql 0ab66b190d4e2aa784e61088c4779ef4d08cb4453677ea087c4f9aa369494bc2 1c3b5794008114d1297695d82590220929e3974e27836b2c6062d14b73379a40
|
||||
test/extractor-tests/generated/BlockExpr/BlockExpr.ql 45aba7a94638c343b05560309ecf11e436b1265565072f1cba138bac804e57f2 6d556c1d1f6ac58dc93e542930940f127a7f69181e39275afdc6852d90f12a23
|
||||
test/extractor-tests/generated/BlockExpr/BlockExpr_getAttr.ql 15d4d9853d3262ce6ec629c075c60a76eb112dcafe34b71df0e09b39282223cf 792c498bc7079bb5b93034b8a87db3b275a591d78954e844821aeacffe4258ea
|
||||
test/extractor-tests/generated/BlockExpr/BlockExpr_getLabel.ql de3c28a2677ed71ebd95207aa43ce270765f7f556283f095f1f6296622b80cbc 414ebbb2bfbe4350f933fc3d3636b49a6bb8242e200180780caf95ab8523adb0
|
||||
test/extractor-tests/generated/BlockExpr/BlockExpr_getStmtList.ql 8c391dfeb69bd92c547a2417bf231cc960a8f34845802722214294728772316a f3e847fa594e9d9cf25d09a0396a10176aad1100c1977a24756ff6287a79e69e
|
||||
@@ -674,14 +664,14 @@ test/extractor-tests/generated/CastExpr/CastExpr_getExpr.ql c37186b8f3e3dab8ae28
|
||||
test/extractor-tests/generated/CastExpr/CastExpr_getTy.ql ad5d6e260e1495ba360bd2ade3b60f09705a86a08d618acf8c4aff342c8ee200 c02c1dc65ba9160bc28827e40473915de5403bdc91c16d9d8b6778aa97314a1b
|
||||
test/extractor-tests/generated/ClosureBinder/ClosureBinder.ql 42516df87ac28c814d65f6739b2ede6eaa41c505d64756a3b8c7e0ca79895230 8b840f92ec033a4ef5edbe52bed909d8be0fffddf6d3e4bfaf9a8bc174fa2f2c
|
||||
test/extractor-tests/generated/ClosureBinder/ClosureBinder_getGenericParamList.ql 71010c43a78a7abe8e63c94353f4b7eb97aca011755d200e7087467c1e3b7a68 2c834328f783ec5032544a692f7e23975bac0228b52b9f8fde46ef46a5f22a5f
|
||||
test/extractor-tests/generated/ClosureExpr/ClosureExpr.ql 430d566d8176d7b98d6cde6c35f9420249236eddb084f9c7cbb091cc683ff063 6b8127425cad540a1e407ff7b387f3924253da980f46e5a678aeb2870ba6ec7b
|
||||
test/extractor-tests/generated/ClosureExpr/ClosureExpr.ql d79b1a60e9cd4266f756872f44363d062e8030baae9eb4b1dbaf9465ae88f0ec 46414e0aa4330a42f67083bf866a360fb5e2b234b7df5564559285046311e8e1
|
||||
test/extractor-tests/generated/ClosureExpr/ClosureExpr_getAttr.ql f7f803afa4e2a5976c911fdf8a91ec607c2f998e22531b9c69a63d85579e34c3 1296acd0fb97e1484aa3f1d5ba09d18088001186f3ba5821eb3218a931ca0d54
|
||||
test/extractor-tests/generated/ClosureExpr/ClosureExpr_getBody.ql 22a973a61274e87620e38338b29beef395818b95a88e2261fff197f7a78a8f76 bd28ed426e4d07823044db869aa8022dc81e8599d156e3e0e7cd49be914a1f36
|
||||
test/extractor-tests/generated/ClosureExpr/ClosureExpr_getClosureBinder.ql cbfcf89b8efb5cb9b7bfbea26b5a78b3d4c7994cbf03d5ca60b61ee1b5cb4be5 621431277732ef79c585cb0b7199c49b14c597ee6b594a70d9e6966a09d40a9f
|
||||
test/extractor-tests/generated/ClosureExpr/ClosureExpr_getParamList.ql 68ce501516094512dd5bfed42a785474583a91312f704087cba801b02ba7b834 eacbf89d63159e7decfd84c2a1dc5c067dfce56a8157fbb52bc133e9702d266d
|
||||
test/extractor-tests/generated/ClosureExpr/ClosureExpr_getRetType.ql c95bc7306b2d77aa05a6501b6321e6f1e7a48b7ad422ba082635ab20014288ae fe72d44c9819b42fff49b9092a9fb2bfafde6d3b9e4967547fb5298822f30bc3
|
||||
test/extractor-tests/generated/Comment/Comment.ql 5428b8417a737f88f0d55d87de45c4693d81f03686f03da11dc5369e163d977b 8948c1860cde198d49cff7c74741f554a9e89f8af97bb94de80f3c62e1e29244
|
||||
test/extractor-tests/generated/Const/Const.ql d02d4010c54f2cfcb9251f362c3768740399807eb4fe995373d9a316f14e7a8b 8d277779d3d3ded5cf0829dc9bfd8936f2334d89de4a84e110f0a017224729a5
|
||||
test/extractor-tests/generated/Const/Const.ql db81591df5a8822a578f9445b8444f6ac391efc43c61aab429edb76ab9c0303d 5f7ae3622c03eb151fa5326db785f0ff3fe6f52033fc071d758eac18ea1b5722
|
||||
test/extractor-tests/generated/Const/Const_getAttr.ql bd6296dab00065db39663db8d09fe62146838875206ff9d8595d06d6439f5043 34cb55ca6d1f44e27d82a8b624f16f9408bae2485c85da94cc76327eed168577
|
||||
test/extractor-tests/generated/Const/Const_getBody.ql f50f79b7f42bb1043b79ec96f999fa4740c8014e6969a25812d5d023d7a5a5d8 90e5060ba9757f1021429ed4ec4913bc78747f3fc415456ef7e7fc284b8a0026
|
||||
test/extractor-tests/generated/Const/Const_getName.ql b876a1964bbb857fbe8852fb05f589fba947a494f343e8c96a1171e791aa2b5e 83655b1fbc67a4a1704439726c1138bb6784553e35b6ac16250b807e6cd0f40c
|
||||
@@ -689,9 +679,9 @@ test/extractor-tests/generated/Const/Const_getTy.ql bf9abfd2be9d22193bc6be9916c7
|
||||
test/extractor-tests/generated/Const/Const_getVisibility.ql de6b2e9d887316e279b45fab7887980ca7d93fd32c2259f3a06de2b6e2957c12 2f135cdbbb84b43d282131edb7eb4df6caba61bf7421881a49d4679f0f44f661
|
||||
test/extractor-tests/generated/ConstArg/ConstArg.ql f1422b216eb45819ff41f0c19e0f88aa184ddd3fa2984ba22ec46df398147fc3 d2e4f367848c2bc4f6aef51c1dd8180035c39919430082c83f18a3f324228df3
|
||||
test/extractor-tests/generated/ConstArg/ConstArg_getExpr.ql 317fd83ad51acc3ff3dfab71ebb1385b67d49404c1d7b3804a8ca3c099b84e99 91ecf5ebbfc1aab286dce708680f0be97417f9755676db7479fa6836e50be845
|
||||
test/extractor-tests/generated/ConstBlockPat/ConstBlockPat.ql ee17b4deba9c503130e3ce565102bc8e181770efcb1309be9c822f0a7ba6fc17 638ed17b5c009e71b31f580c4060ba763bd4208c3984b6c032183ab46a4dd43d
|
||||
test/extractor-tests/generated/ConstBlockPat/ConstBlockPat.ql b3e1f8c54af03af3cfe16dcf1831777404e360058f67acc4453c0d4211897d12 6f842cf96153219c7ab0d7d04db9a52b8fec71996d527bce69acb6678e437861
|
||||
test/extractor-tests/generated/ConstBlockPat/ConstBlockPat_getBlockExpr.ql cc06e762e1652e467c7cf02c34f17c621fb3a938f294ee527fa04ed78c8701ec f863f8f6bfc9d169b585ae56b4e4ac0fc1603fd14775450e950cca4d5ea28e8a
|
||||
test/extractor-tests/generated/ConstParam/ConstParam.ql 1c2ec1a00ffc754ade227536f3efe789cdbee714fa003abff5e0221b9b53d08a 6f24ef0b280b18603a6efd217c691c4249898be95dafd5ff5a586cb2f2ecdf40
|
||||
test/extractor-tests/generated/ConstParam/ConstParam.ql f883b198f9c373e2d4c630706af5ba1d8a2f8f4e9847e9a54ca56cc892dbdc34 ad59caac567e80940c7e0f06239a91e7793a57e9e6ab0452535daa1aae3f2a1e
|
||||
test/extractor-tests/generated/ConstParam/ConstParam_getAttr.ql af8949f1ea039a562a3b3561185a85f7f8a871bf27dba0580782f81c62b6508c 2874783b84fdce47b809f953e02c36473cad6a2d3dd1c0f1a9cb14a3e28b9c30
|
||||
test/extractor-tests/generated/ConstParam/ConstParam_getDefaultVal.ql 021630468422c30e7aa623bdf4e97f3076e68087991723c624922b1ee608d173 9fd78738cfd0455be2c655852f6c618e901af80c6b6791396d9683c118a44e91
|
||||
test/extractor-tests/generated/ConstParam/ConstParam_getName.ql e2e9b75dd7ce501793efce75079aabd3851b91aa4d437972693bacd7b04859d8 4d2326b39af870a2ef8b37448f78395cdb5c1e94df88f137ef71f8fd3548cd8e
|
||||
@@ -710,7 +700,7 @@ test/extractor-tests/generated/Enum/Enum_getVisibility.ql 7fdae1b147d3d2ed41e055
|
||||
test/extractor-tests/generated/Enum/Enum_getWhereClause.ql 00be944242a2056cd760a59a04d7a4f95910c122fe8ea6eca3efe44be1386b0c 70107b11fb72ed722afa9464acc4a90916822410d6b8bf3b670f6388a193d27d
|
||||
test/extractor-tests/generated/ExprStmt/ExprStmt.ql 811d3c75a93d081002ecf03f4e299c248f708e3c2708fca9e17b36708da620e5 a4477e67931ba90fd948a7ef778b18b50c8492bae32689356899e7104a6d6794
|
||||
test/extractor-tests/generated/ExprStmt/ExprStmt_getExpr.ql e269bb222317afe1470eee1be822d305fc37c65bca2999da8d24a86fa9337036 088369d6c5b072192290c34c1828b1068aeedaabdae131594ca529bbb1630548
|
||||
test/extractor-tests/generated/ExternBlock/ExternBlock.ql 0c50adb4ce7479100fe46e097801df699911b4888a4919aa7ca337e2ef8a2525 101eee87add6793006bac20a2f7d0e245a1c04cbc81834b6130db083578b0c5f
|
||||
test/extractor-tests/generated/ExternBlock/ExternBlock.ql d28af9f7d0fa29687fb3f420401769612ea5ed320597bddf6653a108ede53049 b4deea6cb1ebda9db6968096e4048f5eeca41261b2c2c30d5d23971301bd2cb0
|
||||
test/extractor-tests/generated/ExternBlock/ExternBlock_getAbi.ql 9b7c7263fcbc84e07361f5b419026a525f781836ede051412b22fb4ddb5d0c6a c3755faa7ffb69ad7d3b4c5d6c7b4d378beca2fa349ea072e3bef4401e18ec99
|
||||
test/extractor-tests/generated/ExternBlock/ExternBlock_getAttr.ql 78ed6a2d31ccab67b02da4792e9d2c7c7084a9f20eb065d83f64cd1c0a603d1b e548d4fa8a3dc1ca4b7d7b893897537237a01242c187ac738493b9f5c4700521
|
||||
test/extractor-tests/generated/ExternBlock/ExternBlock_getExternItemList.ql 2c2b29bdfdc3b27173c068cbaab9946b42053aa14cf371236b4b60ff2e723370 dfc20fc8ef81cdce6f0badd664ef3914d6d49082eb942b1da3f45239b4351e2f
|
||||
@@ -726,7 +716,7 @@ test/extractor-tests/generated/FieldExpr/FieldExpr.ql 1b45da610feb62cee42f7a3866
|
||||
test/extractor-tests/generated/FieldExpr/FieldExpr_getAttr.ql 609c4f1e275d963cf93a364b5ec750de8cb4790abdaa710cb533ff13ab750a4e 8c2aa84b1ea6ef40a7ee39a2168baf1b88323bfbc6b9f184e7b39631765a48dd
|
||||
test/extractor-tests/generated/FieldExpr/FieldExpr_getExpr.ql 57df2d733faf3e3e30ae106d8423aab612ab0ddf8659da008e384130cf1e8023 1e240bee8e83dc26f78d2c55464ca1fb88d773691d47aee9a2182c90f57eb8f1
|
||||
test/extractor-tests/generated/FieldExpr/FieldExpr_getNameRef.ql 8631f5e8bdd72443a1ee3d667ee9136a51ad49dfd206612a36b79686da1beb19 692aef607108b8e3eaa78b8c915f2fd1d310905f8fea770b9694722a9a2a6232
|
||||
test/extractor-tests/generated/FnPtrType/FnPtrType.ql 50b76d678582cd0b8d7cc4a7658d5009d660bafcec6bd9968c9f60a7f547fa23 5bbf2504eb835e231a2355bc5d099322423c49c6af371902cf20a150e360cea7
|
||||
test/extractor-tests/generated/FnPtrType/FnPtrType.ql c8fe0b3c849e37ac2bfbb1658ea3b0081502ed6fffb65454853298ffb2383966 d6732c9fa4e37f42c34369a67147df1a1fd453fdc1aa982c3f59578fd1f3f818
|
||||
test/extractor-tests/generated/FnPtrType/FnPtrType_getAbi.ql de1706382c2980c02dbdd295e0a2320c992afa3f19af0c2378b9980a7cd0c481 a3fa36711949d9d5ac53cc5dd39cb19b397c3f2e47c1d457df470c6e5142f9be
|
||||
test/extractor-tests/generated/FnPtrType/FnPtrType_getParamList.ql 9ea393acf37919e2fd1bbc16e738440e00a56552bf80baef9bfd2a9a405afb93 3b4237b22eea569cef0081eb3ea16b2d0f01f8f070f21e16390267e9cbe0cf57
|
||||
test/extractor-tests/generated/FnPtrType/FnPtrType_getRetType.ql 57f662e4778e1bf4103f061bb8085def0708528f94045c9ff4a95ce802fff13d 924b924c7d766458e956afa0963e6eb1bfc083e5f9aeae64cf2d08929f79612c
|
||||
@@ -746,7 +736,7 @@ test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr.ql 0cd439f61569ecf0
|
||||
test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getArg.ql 8f692486be1546b914b17abdff4a989dfbaa889bfa1fc44597f4357806c1a1dd da9fd237e31e9c8dd0ef0c3c968157815b87d3e8dcdfd74674c988ce2ab6d270
|
||||
test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getAttr.ql 1f9bf1344f942e65c3a3591b6ae04d3f5a2a1a65459bce0d976698de7d8a5958 02acb861d8ab4d32cf144c589881a888c3da5e2ade27e8c85fec3ae45219bb3b
|
||||
test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getTemplate.ql c912ac37275cbe7b3b29607bed1a3190c80779436422c14a475113e1bfd91a54 ef90f67a9b952a38ce557b1afbf0b5ce8551e83ddfaad8309a0c9523e40b5ea7
|
||||
test/extractor-tests/generated/Function/Function.ql 28776a499f21ab36c9dfcb905861cf0bf0a2c51f24d6d9401ca45f67d9f982b0 1ded959dfd9c216975572c4577c6a2d4c56a2d3d4a2dd5b0f3f90adff98d86aa
|
||||
test/extractor-tests/generated/Function/Function.ql 608e1053c5be5a5d36e4be5cd9da5d4398a0a374adf0ded9f6b652c8b9e085f7 133260e1104616b467aa14a7e0237337aadac918f1b08bd1b9b4f1818fd911e9
|
||||
test/extractor-tests/generated/Function/Function_getAbi.ql e5c9c97de036ddd51cae5d99d41847c35c6b2eabbbd145f4467cb501edc606d8 0b81511528bd0ef9e63b19edfc3cb638d8af43eb87d018fad69d6ef8f8221454
|
||||
test/extractor-tests/generated/Function/Function_getAttr.ql 44067ee11bdec8e91774ff10de0704a8c5c1b60816d587378e86bf3d82e1f660 b4bebf9441bda1f2d1e34e9261e07a7468cbabf53cf8047384f3c8b11869f04e
|
||||
test/extractor-tests/generated/Function/Function_getBody.ql cf2716a751e309deba703ee4da70e607aae767c1961d3c0ac5b6728f7791f608 3beaf4032924720cb881ef6618a3dd22316f88635c86cbc1be60e3bdad173e21
|
||||
@@ -760,7 +750,7 @@ test/extractor-tests/generated/GenericArgList/GenericArgList.ql 2d3e37da2c02a88e
|
||||
test/extractor-tests/generated/GenericArgList/GenericArgList_getGenericArg.ql 7f92dc62d814c39bc50dfd46c359540261fe433fcad1752ea2fe139a05071183 9863976c97c1b7c07d5d18d8ffee798b1c1b0223784a61066ee2c9ffc46c4979
|
||||
test/extractor-tests/generated/GenericParamList/GenericParamList.ql 5d04af9be32c5f8bdf9ec679b0acbabd58ff01a20f5543a0c7d4fe5c5773ebba 7e86c4d3ed64b9ef2f928abd22b593d72131862321096722df5150b5202a4a28
|
||||
test/extractor-tests/generated/GenericParamList/GenericParamList_getGenericParam.ql 7866ed49ebfca1cc1fffeec797329a592f52b4431a5d259aeb7120a7f4961c44 16d89dd05d9db1b1997f801d9e5ba2dd9389d13a3031c730414f3daf5fb7b12f
|
||||
test/extractor-tests/generated/IdentPat/IdentPat.ql 1e61edbdff611193bbb497eeba8c35043e1d1c6d3359903be58382b1c95e39e4 6f3a288cc12ee24a9ff21ca2fe544838d66f6481e60539cf7d4a473e628e3c3f
|
||||
test/extractor-tests/generated/IdentPat/IdentPat.ql 8fc54811b0fabda503949557737d14a2e71ec68170b6e42e69fde08ba1a2c39d aff69e979a6084eb4e1d902df2bafd0cde806a41ab8ef83336585a60d4e3a7c8
|
||||
test/extractor-tests/generated/IdentPat/IdentPat_getAttr.ql 02607c8c616dc94152777390f912fc1e6bb420cc3ea687397e31392848942aa7 aeb10434577815d9a9f0f45a1a448656323f05d5321ff07d435ca4a449527d53
|
||||
test/extractor-tests/generated/IdentPat/IdentPat_getName.ql b96a3dbca1bade052cad294d95f95504665ad0b14c7f5f9f8083486d0ee64026 28c851703250c25b518024add1052d3204271db3f89eddf862d9a1e122ee6eb0
|
||||
test/extractor-tests/generated/IdentPat/IdentPat_getPat.ql fea604fee0db39f83a3dadb4583cb53123c63351282bc3387b84f90477be19cb ef2e620ade30e0225f6bf1c84982d1b8f949ee0c2ced5edbd00e5547e0a81a7c
|
||||
@@ -769,7 +759,7 @@ test/extractor-tests/generated/IfExpr/IfExpr_getAttr.ql f5872cdbb21683bed689e753
|
||||
test/extractor-tests/generated/IfExpr/IfExpr_getCondition.ql 5bab301a1d53fe6ee599edfb17f9c7edb2410ec6ea7108b3f4a5f0a8d14316e3 355183b52cca9dc81591a09891dab799150370fff2034ddcbf7b1e4a7cb43482
|
||||
test/extractor-tests/generated/IfExpr/IfExpr_getElse.ql 8674cedf42fb7be513fdf6b9c3988308453ae3baf8051649832e7767b366c12f e064e5f0b8e394b080a05a7bccd57277a229c1f985aa4df37daea26aeade4603
|
||||
test/extractor-tests/generated/IfExpr/IfExpr_getThen.ql 0989ddab2c231c0ee122ae805ffa0d3f0697fb7b6d9e53ee6d32b9140d4b0421 81028f9cd6b417c63091d46a8b85c3b32b1c77eea885f3f93ae12c99685bfe0a
|
||||
test/extractor-tests/generated/Impl/Impl.ql b879d3101c31d57c1b7b794c241678214f65fcb1b33ec45919948809d1d62f6c 769c7a691a8034db4cc12bc8cd8df3a8ae765a3fb83bb6a5efe6e310328d800c
|
||||
test/extractor-tests/generated/Impl/Impl.ql 2969c1fc9dcc836ac7f40f5a2030b6f90f57a87f8a3da72b253da34c0620d4fe 0453150f2818fc002becd34a9d8cb67bf4df93b00d91b5be9fe053a9ed44aed2
|
||||
test/extractor-tests/generated/Impl/Impl_getAssocItemList.ql cf875361c53c081ac967482fd3af8daf735b0bc22f21dcf0936fcf70500a001a 0ad723839fa26d30fa1cd2badd01f9453977eba81add7f0f0a0fcb3adb76b87e
|
||||
test/extractor-tests/generated/Impl/Impl_getAttr.ql 018bdf6d9a9724d4f497d249de7cecd8bda0ac2340bde64b9b3d7c57482e715b cd065899d92aa35aca5d53ef64eadf7bb195d9a4e8ed632378a4e8c550b850cd
|
||||
test/extractor-tests/generated/Impl/Impl_getGenericParamList.ql 88d5cd8fd03cb4cc2887393ee38b2e2315eeef8c4db40a9bd94cf86b95935bdd 9c72828669ccf8f7ca39851bc36a0c426325a91fc428b49681e4bb680d6547a9
|
||||
@@ -818,9 +808,8 @@ test/extractor-tests/generated/LoopExpr/LoopExpr.ql 636c28bff5f8c1ca0fb834f614b3
|
||||
test/extractor-tests/generated/LoopExpr/LoopExpr_getAttr.ql d557c1a34ae8762b32702d6b50e79c25bc506275c33a896b6b94bbbe73d04c49 34846c9eefa0219f4a16e28b518b2afa23f372d0aa03b08d042c5a35375e0cd6
|
||||
test/extractor-tests/generated/LoopExpr/LoopExpr_getLabel.ql 0b77b9d9fb5903d37bce5a2c0d6b276e6269da56fcb37b83cd931872fb88490f c7f09c526e59dcadec13ec9719980d68b8619d630caab2c26b8368b06c1f2cc0
|
||||
test/extractor-tests/generated/LoopExpr/LoopExpr_getLoopBody.ql 0267f54077640f3dfeb38524577e4a1229115eeb1c839398d0c5f460c1d65129 96ec876635b8c561f7add19e57574444f630eae3df9ab9bc33ac180e61f3a7b8
|
||||
test/extractor-tests/generated/MacroCall/MacroCall.ql 9eca338d7bc42dcfc3cfcd7953484d724d4f06b1182c01a426925d9963820e37 25fe9e90c38d3bd0c92c70bf2af01b034e3c375f3dbd1c1b8aab1fc1aae09547
|
||||
test/extractor-tests/generated/MacroCall/MacroCall.ql d8b71880ffbfa0f9efa56c598a9bdd3f91e85129e0f8f2b30be6862556f87fcd 682736663ad11f9fdde165904324a8b2f3cdc59f91196a1accb1cd4cf5fb70d4
|
||||
test/extractor-tests/generated/MacroCall/MacroCall_getAttr.ql c22a2a29d705e85b03a6586d1eda1a2f4f99f95f7dfeb4e6908ec3188b5ad0ad 9b8d9dcc2116a123c15c520a880efab73ade20e08197c64bc3ed0c50902c4672
|
||||
test/extractor-tests/generated/MacroCall/MacroCall_getExpanded.ql 757c4a4c32888e4604044c798a3180aa6d4f73381eec9bc28ba9dc71ffcbd03a 27d5edaa2c1096a24c86744aaad0f006da20d5caa28ccfd8528e7c98aa1bead1
|
||||
test/extractor-tests/generated/MacroCall/MacroCall_getPath.ql 160edc6a001a2d946da6049ffb21a84b9a3756e85f9a2fb0a4d85058124b399a 1e25dd600f19ef89a99f328f86603bce12190220168387c5a88bfb9926da56d9
|
||||
test/extractor-tests/generated/MacroCall/MacroCall_getTokenTree.ql 1cbf6b1ac7fa0910ff299b939743153fc00ad7e28a9a70c69a8297c6841e8238 570380c0dc4b20fe25c0499378569720a6da14bdb058e73d757e174bdd62d0c0
|
||||
test/extractor-tests/generated/MacroDef/MacroDef.ql dde2df9196800d9af9645fe21786e30245bff6cfa58117900582ce1f5c0b859d 6b87bec4e4df8e9b6ed09f18e7b7c20204c39c8d249494cc66d3a06ae39791e4
|
||||
@@ -831,8 +820,6 @@ test/extractor-tests/generated/MacroDef/MacroDef_getName.ql 6bc8a17804f23782e98f
|
||||
test/extractor-tests/generated/MacroDef/MacroDef_getVisibility.ql d858ccaab381432c529bf4a621afc82ea5e4b810b463f2b1f551de79908e14e7 83a85c4f90417ab44570a862642d8f8fc9208e62ba20ca69b32d39a3190381aa
|
||||
test/extractor-tests/generated/MacroExpr/MacroExpr.ql 69445cf24f5bec5c3f11f0ebf13604891bb2c0dffe715612628e5572587c7a6c 5434db79d94e437c86126d9cf20bf1e86e5537f462a57b9bf6b22a2caa95cc40
|
||||
test/extractor-tests/generated/MacroExpr/MacroExpr_getMacroCall.ql 8859743e23b987225a6a1933054a1ed8f5f1442b61a769599e2efd143f4feb9e d2d336135ff4d2ea65e79430dee8d0f69f9d7818a674f5446903d986f3948b92
|
||||
test/extractor-tests/generated/MacroItems/MacroItems.ql 876b5d2a4ce7dcb599e022083ff3f2d57300bcb0ea05f61069d59ad58353ca69 61ea54d4633ef871d3e634069e39fbb2545f7dc2796fa66f8edbacd4e0aa4ef5
|
||||
test/extractor-tests/generated/MacroItems/MacroItems_getItem.ql 53fc2db35a23b9aca6ee327d2a51202d23ddf482e6bdd92c5399b7f3a73959b1 63051c8b7a7bfbe9cc640f775e753c9a82f1eb8472989f7d3c8af94fdf26c7a0
|
||||
test/extractor-tests/generated/MacroPat/MacroPat.ql d9ec72d4d6a7342ee2d9aa7e90227faa31792ca5842fe948d7fdf22597a123b7 74b0f21ef2bb6c13aae74dba1eea97451755110909a083360e2c56cfbc76fd91
|
||||
test/extractor-tests/generated/MacroPat/MacroPat_getMacroCall.ql 398996f0d0f2aa6d3b58d80b26c7d1185b5094d455c6c5c7f075f6d414150aa6 b4662e57cac36ed0e692201f53ba46c3d0826bba99c5cc6dfcb302b44dd2154b
|
||||
test/extractor-tests/generated/MacroRules/MacroRules.ql 0742faf18179fa34e0f43361e9e4b807bfc242d232f6b3664a35e138a47d39c5 10e1cf45f32a27cb46bd61f5dd45416e2c0c9f25e880f6d213597a7d96e19103
|
||||
@@ -840,9 +827,6 @@ test/extractor-tests/generated/MacroRules/MacroRules_getAttr.ql 7de501c724e34655
|
||||
test/extractor-tests/generated/MacroRules/MacroRules_getName.ql 591606e3accae8b8fb49e1218c4867a42724ac209cf99786db0e5d7ea0bf55d5 d2936ef5aa4bbf024372516dde3de578990aafb2b8675bbbf0f72e8b54eb82a8
|
||||
test/extractor-tests/generated/MacroRules/MacroRules_getTokenTree.ql 7598d33c3d86f9ad8629219b90667b2b65e3a1e18c6b0887291df9455a319cab 69d90446743e78e851145683c17677497fe42ed02f61f2b2974e216dc6e05b01
|
||||
test/extractor-tests/generated/MacroRules/MacroRules_getVisibility.ql 5306cc85f470d21ebcbe6e98436334b0bf5ba819a0ae186569ba7e88c31636c6 fcbf5c54e5a904767a6f4d37d853072aa0040738e622c49c9a02dec8739d6587
|
||||
test/extractor-tests/generated/MacroStmts/MacroStmts.ql 991042263ba99acef0972697ce79132e5650b27bf53be2f975a0da1f29940fd8 64c44e65b3c5d3de5f9532b4ff7ce54b39442b37f63da8b10d789b9b52b85a9e
|
||||
test/extractor-tests/generated/MacroStmts/MacroStmts_getExpr.ql 5717f20376600e7bf5e471beae1a7c0084f235f0931f8b3f25d2de94ebb86f8b e4685fd9d45b078a6402c285eed3a15cc4550f6656c8bc5e7e274a88d1c7e9b3
|
||||
test/extractor-tests/generated/MacroStmts/MacroStmts_getStatement.ql 8958b2212776f487869c29314e7d28f5871f5c3dde62fd9d6f87fb9e94204498 6804f5d4c0c5909689bdcdd5b8ec11ca7a8c0399b47695f66d2f99e39561565a
|
||||
test/extractor-tests/generated/MacroType/MacroType.ql 408327fdb4d7cf096536457401cc280f83cd7e4f6fa9aebd65e64031f6c119cf 0c502d25194ab96eb068a85e3f57a9217510a951fa923e9d7a20fd75412bd6da
|
||||
test/extractor-tests/generated/MacroType/MacroType_getMacroCall.ql 565be7a72670218d7999d3f6cec4e704b754c217186243f1b24c334589fa82e2 ba413c712783320188800e2a78738b09c40fe9a6305c08d9e67e971a8fca96ee
|
||||
test/extractor-tests/generated/MatchArm/MatchArm.ql 512aa404c94ba40b859564f07e9dffe6a5e687fafb039556e9145f4f3742981c 529f96e38cede8a26054f8981d4ba1d189c17d14d0f92d622eb20acd8f3d7e5d
|
||||
@@ -859,7 +843,7 @@ test/extractor-tests/generated/MatchExpr/MatchExpr_getExpr.ql 7baaa64071cf2666e3
|
||||
test/extractor-tests/generated/MatchExpr/MatchExpr_getMatchArmList.ql d97055bcb0431e8b258b5ecdd98aa07cb24ece06b0cd658b697cd71da4ede8fc 5e9c03b2665ef6b2af98897996abb2e0a9c18d54eb64588340b8efbcee9793bd
|
||||
test/extractor-tests/generated/MatchGuard/MatchGuard.ql 23e47ec1b13e2d80e31b57894a46ec789d6ab5ed1eb66bdb6bba9bd5ae71d3ef 7302f4a93108a83228e0ebd5b4a1bc6bccc1f6f0f3272054866fa90378c0dcc4
|
||||
test/extractor-tests/generated/MatchGuard/MatchGuard_getCondition.ql 8a79dd46798f111f8d0d5a975380b5cebe5e337267752b77b3718b268ba2773d 6691d8fb483f64fc7e3ad3f46e3129e0a1184d7beb9f83a1000acdbb081c8b5e
|
||||
test/extractor-tests/generated/Meta/Meta.ql 16f163f00ba2bbaa0a8c6f3f6710c860a8f61d02d43321c78e05a10a3606e39b ba982c6bb93ddb4fc2c44d24635bd487128a5b1d1f885214044c989a21f4d05a
|
||||
test/extractor-tests/generated/Meta/Meta.ql 5edf76c32512f29dbe033a02e12aa81e64ae8998b1eb70c414c08fd400f794d1 34ce5338b4a82437ba2db9e4bfb2810dcd37c463b8d667d483c3f7b3c6ca2a99
|
||||
test/extractor-tests/generated/Meta/Meta_getExpr.ql ec9ec61f5be7d65c32775fb5c068daea04f9db7d875293ed99cc1b2481db041f 77a0c52f1cb6ddc8fdb294d637f9eda1b7301ffa3067f0fca6272d894f57d3ee
|
||||
test/extractor-tests/generated/Meta/Meta_getPath.ql aa9d4145a4e613c51b6e4637d57e3b7d0f66e0bb88f4ce959d598870814c06bb 2087e00686d502c0e2e89c88eae0fb354463576a9ae4101320981d3fd79b9078
|
||||
test/extractor-tests/generated/Meta/Meta_getTokenTree.ql 1051c27ffd0d9a20436d684fde529b9ff55abe30d50e1d575b0318951e75bd34 983975672d928fb907676628384c949731da9807bf0c781bb7ec749d25733d2d
|
||||
@@ -921,7 +905,7 @@ test/extractor-tests/generated/PrefixExpr/PrefixExpr.ql 44fb7174365c6deecdc22c72
|
||||
test/extractor-tests/generated/PrefixExpr/PrefixExpr_getAttr.ql fdad6ad5199435ded1e4a9ea6b246e76b904cd73a36aaa4780e84eef91741c5b 75d63940046e62c1efa1151b0cac45b5ec0bab5e39aec2e11d43f6c385e37984
|
||||
test/extractor-tests/generated/PrefixExpr/PrefixExpr_getExpr.ql 2d1d97f6277794871fbb032ea87ac30b1aa902a74cd874720156162057ea202e b1b9880fce07d66df7ec87f12189c37adf9f233a1d0b38a1b09808d052a95642
|
||||
test/extractor-tests/generated/PrefixExpr/PrefixExpr_getOperatorName.ql d27602e77ddf491a278426de65041dda8568f427d1e0ff97c0f23069ae64670e 4e4766e948adf88a6b003ead7d9de1ad26174fe9e30c370f1d3e666aa944df52
|
||||
test/extractor-tests/generated/PtrType/PtrType.ql 6317c79917e024d2162ae9089c17539fae818288f9ba5976fe39d004691dd343 d7e12a58475322a1292777608056ff90d7014b3e3a77bb756e233014d2670f28
|
||||
test/extractor-tests/generated/PtrType/PtrType.ql 6a1cae6f398efe5021e94a945d791da9f01da56a19b25fe7692cbbe7e1a3817c e2d38e534bae46176e26f3941bb0029148cb70b244b61c19d2e9524682f3c5de
|
||||
test/extractor-tests/generated/PtrType/PtrType_getTy.ql 97f5e6197e66c4dcf15d4a62692e30a26979f2902d83354911985d39c8560d1a 0b049b882a33be9746fbb704394a024ac320415cfd1707dc48fe114781558e36
|
||||
test/extractor-tests/generated/RangeExpr/RangeExpr.ql 707c08aab49cc0a22c80a734e663b13ecbbddf0db28b6a25fdbc030a1ce38d6f 1f78950b30485cdde9fe7d9e416ad1dfdac8c5b6bc328172e6e721821c076131
|
||||
test/extractor-tests/generated/RangeExpr/RangeExpr_getAttr.ql 8767e670f88c2115bc61b16195d2c9d02bc074adc4ca57d2aa537c1af9b4c530 4fa51652c60ca7d06bd9ad604107e002603ee2a7b4587636f6b46b8e8060e06c
|
||||
@@ -960,12 +944,12 @@ test/extractor-tests/generated/RecordPatField/RecordPatField_getPat.ql 577187a47
|
||||
test/extractor-tests/generated/RecordPatFieldList/RecordPatFieldList.ql 5a49488f43bbac2349d75b3acbb3bca4440d9b3725434fefd1ba2eda2be6feb2 898177f203181e5e095091b0a3f6a92f1323c80862400cbfd85902d783a9160d
|
||||
test/extractor-tests/generated/RecordPatFieldList/RecordPatFieldList_getField.ql 7c0d190762089af3b6f4fb9ef95561bb2107d7476477bdcfce6b313caa61cab1 17c85ac9670c4faea44a76e9e21184a3d5cabc6c3deba083a0b84fb91e3cbe16
|
||||
test/extractor-tests/generated/RecordPatFieldList/RecordPatFieldList_getRestPat.ql 0caef1f5d09a73a973200e061e09ea5498b855dc19af19c1dc48cd9f20da6857 45c12708b566a5efcc79155b45174fc3ff5a084109043493cffa5216b9054205
|
||||
test/extractor-tests/generated/RefExpr/RefExpr.ql 27d5dceb9e50668e77143ff5c4aa07cbe15aeea9829de70f1ddfe18d83690106 b95058b7a0bad4bddb857794901d9b651b2f9e4dd3554e5349a70a52cbbfaff6
|
||||
test/extractor-tests/generated/RefExpr/RefExpr.ql 6a4d786b68003295ed2cc9a7a9b2f93d6b91f91e4faa7165537e369c3bb0923c 6dd9467a92ce7e966095c01c0356f8429e340e21c036e3ad5665c6442e705580
|
||||
test/extractor-tests/generated/RefExpr/RefExpr_getAttr.ql 477fb3fee61395fabf78f76360ea27656432cb9db62e6f1dab1e9f3c75c83d39 5210f2ac54c082b616d8dcb091659cdad08a5d4ae06bf61193c33f208237482f
|
||||
test/extractor-tests/generated/RefExpr/RefExpr_getExpr.ql 180d6417fd7322cabf4143d0ddd7810f65506b172a5c82484b3ef398041636b2 a291f0bec1ec5b3fa6d088b3d1a658889b9a3521c39ff3bb7a5ab22a56b8b20a
|
||||
test/extractor-tests/generated/RefPat/RefPat.ql ba0f0c0b12394ed80880bea7d80a58791492f1f96a26783c2b19085d11e2fd2b 22aa62c6d4b6e4354f20511f8e6d12e6da9d8b0f0b3509eefe7a0c50f7acfb49
|
||||
test/extractor-tests/generated/RefPat/RefPat.ql 2d2e9b058d66d2183a0795cdd719a36e53d27d9c267eca22e34624c558991250 b95d435925f0bd38a101eb00eab548acbc39a9d7e8fdaa10e1d65f0f72362a9b
|
||||
test/extractor-tests/generated/RefPat/RefPat_getPat.ql 60f5e010b90c2c62d26674323d209b7e46c1c2b968a69765e1b1cde028893111 fe9e7dc6a5459250355336eca0bdf2a0be575b1e34936280fd12a76a004f7b46
|
||||
test/extractor-tests/generated/RefType/RefType.ql f6959c993a8e401a576c785fd1be4b910be218a212eaa9363ebf8f83dc2f1950 686678725a7f9824e74ec6dda294fc2233fd94aced8e2683b7019a1ce81f345d
|
||||
test/extractor-tests/generated/RefType/RefType.ql d5b822b2e4ffd6a85aac88cc37d113d321029ae042cacb66cb63cd7169faa1eb 3a4a866bc02d733236ebb2b32565bf6a00976afbea3cf50ef1d2271e4ebac9a5
|
||||
test/extractor-tests/generated/RefType/RefType_getLifetime.ql 880434f5908752adcc02d3645a48f22399250600c19e43c2da852cb6242e6a0b b8f9b9fab827972fd318d5edcaf37e4c7d0cf92261f9744e258537e6aee5a87a
|
||||
test/extractor-tests/generated/RefType/RefType_getTy.ql 0d5667542ad05a0da1a6a4c36882a39014c4803a76cadb11400d747b603890fd 2e6c3a56f1a7bbb72c181819be72d85c650af1df06f8582ae61bba9e165cf764
|
||||
test/extractor-tests/generated/Rename/Rename.ql c8605e5d8ebb39be238ba26e46861df493d86c9caf9aa9a791ed5ff8d65a812a 7263c2c2565e41c652eda03d1e1ddd030fea79a8e3c967909df9945e30ecbe68
|
||||
@@ -978,7 +962,7 @@ test/extractor-tests/generated/ReturnExpr/ReturnExpr.ql 8e9eba0837a466255e8e249e
|
||||
test/extractor-tests/generated/ReturnExpr/ReturnExpr_getAttr.ql 9fb7e1c79798e4f42e18785f3af17ea75f901a36abf9beb47a1eede69c613ba9 9cdb7cc4a4742865f6c92357973f84cee9229f55ff28081e5d17b6d57d6d275f
|
||||
test/extractor-tests/generated/ReturnExpr/ReturnExpr_getExpr.ql 7d4562efb0d26d92d11f03a0ef80338eb7d5a0c073f1f09cbb8a826f0cef33de 523ebd51b97f957afaf497e5a4d27929eed18e1d276054e3d5a7c5cfe7285c6e
|
||||
test/extractor-tests/generated/ReturnTypeSyntax/ReturnTypeSyntax.ql 976ce33fe3fd34aae2028a11b4accdee122b6d82d07722488c3239f0d2c14609 906bf8c8e7769a1052196bc78947b655158dd3b2903fef2802e2031cffbc1d78
|
||||
test/extractor-tests/generated/SelfParam/SelfParam.ql d051c7a2dd88382e37895f1d691f2702aed7f925d3936f51d49949463e4757c8 37f1f429093be7923a55f8b4f46b37bbf71d0dff3843c4d3686383c2863dee1a
|
||||
test/extractor-tests/generated/SelfParam/SelfParam.ql 61977791634b816d79507478a0be913befc843257fea1d6c564de58ff6d22cce 3e33365f58f59f61e0d190f1bfb101d5fc8f086d24322a7ca464e2a397b90110
|
||||
test/extractor-tests/generated/SelfParam/SelfParam_getAttr.ql 00dd5409c07e9a7b5dc51c1444e24b35d2ac3cab11320396ef70f531a3b65dc0 effbed79ad530a835e85b931389a0c8609a10ee035cb694f2e39b8539f8e54ba
|
||||
test/extractor-tests/generated/SelfParam/SelfParam_getLifetime.ql 0b7c243f609e005dd63fd1b3b9f0096fc13cb98fe113e6f3fefb0d5c414e9a5f f6e06de8bcddfc9bd978c058079e53174edbe7b39f18df3c0bd4e80486808eda
|
||||
test/extractor-tests/generated/SelfParam/SelfParam_getName.ql 69207a57b415ba590e50003d506a64fd1780b27b8832b14f9bd3c909bddb5593 56fa28ba1222f45893237052fa5a9421d960e14fbf1396b2d1049b440c2e5abe
|
||||
@@ -990,7 +974,7 @@ test/extractor-tests/generated/SliceType/SliceType_getTy.ql 0bc70c0e60fc3552584b
|
||||
test/extractor-tests/generated/SourceFile/SourceFile.ql c30a3c2c82be3114f3857295615e2ec1e59c823f0b65ea3918be85e6b7adb921 6a5bbe96f81861c953eb89f77ea64d580f996dca5950f717dd257a0b795453e6
|
||||
test/extractor-tests/generated/SourceFile/SourceFile_getAttr.ql 450404306b3d991b23c60a7bb354631d37925e74dec7cc795452fe3263dc2358 07ffcc91523fd029bd599be28fe2fc909917e22f2b95c4257d3605f54f9d7551
|
||||
test/extractor-tests/generated/SourceFile/SourceFile_getItem.ql f17e44bc0c829b2aadcb6d4ab9c687c10dc8f1afbed4e5190404e574d6ab3107 1cf49a37cc32a67fdc00d16b520daf39143e1b27205c1a610e24d2fe1a464b95
|
||||
test/extractor-tests/generated/Static/Static.ql 605b1c3b5664db0c8738c4159af0958a3d73ee4a180a8e022c1ef6b214d3d26f eb351abb9d55816b9d05c3849913074faf272a8ff267919a3d98d23ae67c7b5b
|
||||
test/extractor-tests/generated/Static/Static.ql 0a704360ff0075d90b0ab68e447892728036b55dd62ac87aba162155a920bfc2 1004434e09a18db400e57e1901555cfc20e7be743d4ec5a07beab5e163822f30
|
||||
test/extractor-tests/generated/Static/Static_getAttr.ql adb0bbf55fb962c0e9d317fd815c09c88793c04f2fb78dfd62c259420c70bc68 d317429171c69c4d5d926c26e97b47f5df87cf0552338f575cd3aeea0e57d2c2
|
||||
test/extractor-tests/generated/Static/Static_getBody.ql e735bbd421e22c67db792671f5cb78291c437621fdfd700e5ef13b5b76b3684d 9148dc9d1899cedf817258a30a274e4f2c34659140090ca2afeb1b6f2f21e52f
|
||||
test/extractor-tests/generated/Static/Static_getName.ql c7537e166d994b6f961547e8b97ab4328b78cbd038a0eb9afaae42e35f6d9cb4 bb5ae24b85cd7a8340a4ce9e9d56ec3be31558051c82257ccb84289291f38a42
|
||||
@@ -1008,7 +992,7 @@ test/extractor-tests/generated/Struct/Struct_getName.ql 8f1d9da4013307b4d23a1ce5
|
||||
test/extractor-tests/generated/Struct/Struct_getVisibility.ql 17139d3f91e02a0fc12ad8443fe166fe11003301fee0c303f13aa6d1138e82d5 07bdc1fbcc0ea40508364ea632fce899cbe734159f5c377ea2029bc41bc9a3b4
|
||||
test/extractor-tests/generated/Struct/Struct_getWhereClause.ql d0db2c9811ed4568359e84255f04f0c75ae65a80d40981a1545d6cddf53e9c09 1133a46bc502757aaab61a8ac94b4a256b590548c5e27ec6a239ffd5a4a81577
|
||||
test/extractor-tests/generated/TokenTree/TokenTree.ql ba2ef197e0566640b57503579f3bc811a16fec56f4817117395bf81da08922a6 2e7b105cb917a444171669eb06f5491a4b222b1f81fa79209a138ab97db85aff
|
||||
test/extractor-tests/generated/Trait/Trait.ql a80249a821a91e11592227126209090ce5ced83a6168136f7c53db61b5bc3914 4555281baf4d9f736a68d28c6c7b788b913933a38503a323783d57db9e8c5c02
|
||||
test/extractor-tests/generated/Trait/Trait.ql a51ba80b65687fb6eb99f36e4f98565b4a9ed9cc97d2c7ad2f09254ec9089b3d 81783aedb5af5a09f470ec0df6694588a4dcf8390b1b1645fb7459d35bc1bc3e
|
||||
test/extractor-tests/generated/Trait/Trait_getAssocItemList.ql 05e6896f60afabf931a244e42f75ee55e09c749954a751d8895846de3121f58f def1f07d9945e8d9b45a659a285b0eb72b37509d20624c88e0a2d34abf7f0c72
|
||||
test/extractor-tests/generated/Trait/Trait_getAttr.ql 9711125fa4fc0212b6357f06d1bc50df50b46168d139b649034296c64d732e21 901b6a9d04055b563f13d8742bd770c76ed1b2ccf9a7236a64de9d6d287fbd52
|
||||
test/extractor-tests/generated/Trait/Trait_getGenericParamList.ql b27ff28e3aff9ec3369bbbcbee40a07a4bd8af40928c8c1cb7dd1e407a88ffee 2b48e2049df18de61ae3026f8ab4c3e9e517f411605328b37a0b71b288826925
|
||||
@@ -1042,7 +1026,7 @@ test/extractor-tests/generated/TupleStructPat/TupleStructPat_getField.ql f3f2e23
|
||||
test/extractor-tests/generated/TupleStructPat/TupleStructPat_getPath.ql 13a06696bbf1fa8d5b73107e28cdba40e93da04b27f9c54381b78a52368d2ad1 5558c35ea9bb371ad90a5b374d7530dd1936f83e6ba656ebfbfd5bd63598e088
|
||||
test/extractor-tests/generated/TupleType/TupleType.ql e5951a30817b8c51fe9cb9435f75bfdca2a1277b2094267d3205e33ef1ee9a9c 9a4d57322ed2cff57057654272981b056f833136f983141b033afaf64e19c117
|
||||
test/extractor-tests/generated/TupleType/TupleType_getField.ql b73a8cdaf6ba46cf9b63d8819239d2d2c06b3496ed4768e8a387a7558178fbd8 6efbcf13c25d0ff3ed0c6d194ba44d2abfa620406badef8184953395fab92bb4
|
||||
test/extractor-tests/generated/TypeAlias/TypeAlias.ql 8fc7144467f3be85ffcc661630cc144a244b636220aca69f1074f8b7221eb32f 692417975c0062d4d324e8a4b5c4a95bc352bfbab03664f671240739d1ddfcfc
|
||||
test/extractor-tests/generated/TypeAlias/TypeAlias.ql be2f90fb1bab4f8b77687f93f0fb7180582a0a3b3bb1a5e9fb77d55c12b01048 7fb298034353d13193e6b2fbb95b2cb2f7fa11c9eff7bd10bd7180f02267883f
|
||||
test/extractor-tests/generated/TypeAlias/TypeAlias_getAttr.ql ecf4b45ef4876e46252785d2e42b11207e65757cdb26e60decafd765e7b03b49 21bb4d635d3d38abd731b9ad1a2b871f8e0788f48a03e9572823abeea0ea9382
|
||||
test/extractor-tests/generated/TypeAlias/TypeAlias_getGenericParamList.ql e7e936458dce5a8c6675485a49e2769b6dbff29c112ed744c880e0fc7ae740ef e5fcf3a33d2416db6b0a73401a3cbc0cece22d0e06794e01a1645f2b3bca9306
|
||||
test/extractor-tests/generated/TypeAlias/TypeAlias_getName.ql 757deb3493764677de3eb1ff7cc119a469482b7277ed01eb8aa0c38b4a8797fb 5efed24a6968544b10ff44bfac7d0432a9621bde0e53b8477563d600d4847825
|
||||
@@ -1052,7 +1036,7 @@ test/extractor-tests/generated/TypeAlias/TypeAlias_getVisibility.ql a1851a78f31a
|
||||
test/extractor-tests/generated/TypeAlias/TypeAlias_getWhereClause.ql 0cd281b7b5d3a76e4ec1938d7dcebb41e24ed54e94f352dcf48cbcdb5d48b353 5898e71246d8ba7517dab1f8d726af02a7add79924c8e6b30ce2c760e1344e8f
|
||||
test/extractor-tests/generated/TypeArg/TypeArg.ql 8019f0eb5a64162df88e7e64ba0355578dad158b884c8eb42b2f10e093e52121 4871ac369925228978a1e16cf1393a449ea846657893d8a760fb46dbd6a0d609
|
||||
test/extractor-tests/generated/TypeArg/TypeArg_getTy.ql 54c291039d88fb460b0bc6bb83938c3be272898512415d08abffea714a000275 3117f1bbc1168b0ff75948459673c50971e3e71b0bb966783a8dc44328803f33
|
||||
test/extractor-tests/generated/TypeBound/TypeBound.ql f49bc5b12f9817d9464c771bd35837c1ae6c8b3162ab6b0fc9b3e6748d18e87a 2535af71fa8e212d6f9b9e10ca0ba7958808dea4d1af432e1d5167a681d7779c
|
||||
test/extractor-tests/generated/TypeBound/TypeBound.ql 8824b2133040a1c39ed74d3b90669e4d8859a9dd52090e3fd71fe0d8ef90c7f0 932a0361678a16c7f538d5ee9133a61c495234de323e1e012f0ae307c8d2170e
|
||||
test/extractor-tests/generated/TypeBound/TypeBound_getGenericParamList.ql 7cf4ce64ea8048b85733fc2de627480465a616d62f57345c25bb62fdfda0ca59 e63b77ed3555b150cebf205016b1cc8d1b10fda315d5a21b3e60753ad602ea8f
|
||||
test/extractor-tests/generated/TypeBound/TypeBound_getLifetime.ql 615b0f5ccbffc425a3fa9480197bfae649c072717697f59d2e9b8112d2ff3fcf 1f969aca15be820eb27fe80317ad7fd4ce60f1a0fbcb4ae98b04828b0aeca632
|
||||
test/extractor-tests/generated/TypeBound/TypeBound_getTy.ql bded40be75f99b97869e5b4701a479db91867a861fb9f2071f4f7df0980ac6a2 6bdb30e50ba3ab7c2976aa602bae54a089019c8b81cab497c962b6b96362fbab
|
||||
|
||||
18
rust/ql/.gitattributes
generated
vendored
18
rust/ql/.gitattributes
generated
vendored
@@ -17,7 +17,6 @@
|
||||
/lib/codeql/rust/elements/BoxPat.qll linguist-generated
|
||||
/lib/codeql/rust/elements/BreakExpr.qll linguist-generated
|
||||
/lib/codeql/rust/elements/CallExpr.qll linguist-generated
|
||||
/lib/codeql/rust/elements/CallExprBase.qll linguist-generated
|
||||
/lib/codeql/rust/elements/CastExpr.qll linguist-generated
|
||||
/lib/codeql/rust/elements/ClosureBinder.qll linguist-generated
|
||||
/lib/codeql/rust/elements/ClosureExpr.qll linguist-generated
|
||||
@@ -70,10 +69,8 @@
|
||||
/lib/codeql/rust/elements/MacroCall.qll linguist-generated
|
||||
/lib/codeql/rust/elements/MacroDef.qll linguist-generated
|
||||
/lib/codeql/rust/elements/MacroExpr.qll linguist-generated
|
||||
/lib/codeql/rust/elements/MacroItems.qll linguist-generated
|
||||
/lib/codeql/rust/elements/MacroPat.qll linguist-generated
|
||||
/lib/codeql/rust/elements/MacroRules.qll linguist-generated
|
||||
/lib/codeql/rust/elements/MacroStmts.qll linguist-generated
|
||||
/lib/codeql/rust/elements/MacroType.qll linguist-generated
|
||||
/lib/codeql/rust/elements/MatchArm.qll linguist-generated
|
||||
/lib/codeql/rust/elements/MatchArmList.qll linguist-generated
|
||||
@@ -188,7 +185,6 @@
|
||||
/lib/codeql/rust/elements/internal/BoxPatConstructor.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/BoxPatImpl.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/BreakExprConstructor.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/CallExprBaseImpl.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/CallExprConstructor.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/CallExprImpl.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/CastExprConstructor.qll linguist-generated
|
||||
@@ -280,14 +276,10 @@
|
||||
/lib/codeql/rust/elements/internal/MacroDefImpl.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/MacroExprConstructor.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/MacroExprImpl.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/MacroItemsConstructor.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/MacroItemsImpl.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/MacroPatConstructor.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/MacroPatImpl.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/MacroRulesConstructor.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/MacroRulesImpl.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/MacroStmtsConstructor.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/MacroStmtsImpl.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/MacroTypeConstructor.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/MacroTypeImpl.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/MatchArmConstructor.qll linguist-generated
|
||||
@@ -314,6 +306,7 @@
|
||||
/lib/codeql/rust/elements/internal/OffsetOfExprConstructor.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/OffsetOfExprImpl.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/OrPatConstructor.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/OrPatImpl.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/ParamConstructor.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/ParamImpl.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/ParamListConstructor.qll linguist-generated
|
||||
@@ -469,7 +462,6 @@
|
||||
/lib/codeql/rust/elements/internal/generated/BoxPat.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/generated/BreakExpr.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/generated/CallExpr.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/generated/CallExprBase.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/generated/CastExpr.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/generated/ClosureBinder.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/generated/ClosureExpr.qll linguist-generated
|
||||
@@ -522,10 +514,8 @@
|
||||
/lib/codeql/rust/elements/internal/generated/MacroCall.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/generated/MacroDef.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/generated/MacroExpr.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/generated/MacroItems.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/generated/MacroPat.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/generated/MacroRules.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/generated/MacroStmts.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/generated/MacroType.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/generated/MatchArm.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/generated/MatchArmList.qll linguist-generated
|
||||
@@ -822,7 +812,6 @@
|
||||
/test/extractor-tests/generated/LoopExpr/LoopExpr_getLoopBody.ql linguist-generated
|
||||
/test/extractor-tests/generated/MacroCall/MacroCall.ql linguist-generated
|
||||
/test/extractor-tests/generated/MacroCall/MacroCall_getAttr.ql linguist-generated
|
||||
/test/extractor-tests/generated/MacroCall/MacroCall_getExpanded.ql linguist-generated
|
||||
/test/extractor-tests/generated/MacroCall/MacroCall_getPath.ql linguist-generated
|
||||
/test/extractor-tests/generated/MacroCall/MacroCall_getTokenTree.ql linguist-generated
|
||||
/test/extractor-tests/generated/MacroDef/MacroDef.ql linguist-generated
|
||||
@@ -833,8 +822,6 @@
|
||||
/test/extractor-tests/generated/MacroDef/MacroDef_getVisibility.ql linguist-generated
|
||||
/test/extractor-tests/generated/MacroExpr/MacroExpr.ql linguist-generated
|
||||
/test/extractor-tests/generated/MacroExpr/MacroExpr_getMacroCall.ql linguist-generated
|
||||
/test/extractor-tests/generated/MacroItems/MacroItems.ql linguist-generated
|
||||
/test/extractor-tests/generated/MacroItems/MacroItems_getItem.ql linguist-generated
|
||||
/test/extractor-tests/generated/MacroPat/MacroPat.ql linguist-generated
|
||||
/test/extractor-tests/generated/MacroPat/MacroPat_getMacroCall.ql linguist-generated
|
||||
/test/extractor-tests/generated/MacroRules/MacroRules.ql linguist-generated
|
||||
@@ -842,9 +829,6 @@
|
||||
/test/extractor-tests/generated/MacroRules/MacroRules_getName.ql linguist-generated
|
||||
/test/extractor-tests/generated/MacroRules/MacroRules_getTokenTree.ql linguist-generated
|
||||
/test/extractor-tests/generated/MacroRules/MacroRules_getVisibility.ql linguist-generated
|
||||
/test/extractor-tests/generated/MacroStmts/MacroStmts.ql linguist-generated
|
||||
/test/extractor-tests/generated/MacroStmts/MacroStmts_getExpr.ql linguist-generated
|
||||
/test/extractor-tests/generated/MacroStmts/MacroStmts_getStatement.ql linguist-generated
|
||||
/test/extractor-tests/generated/MacroType/MacroType.ql linguist-generated
|
||||
/test/extractor-tests/generated/MacroType/MacroType_getMacroCall.ql linguist-generated
|
||||
/test/extractor-tests/generated/MatchArm/MatchArm.ql linguist-generated
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
import codeql.rust.Diagnostics
|
||||
|
||||
query predicate extractionError(ExtractionError ee) { any() }
|
||||
|
||||
query predicate extractionWarning(ExtractionWarning ew) { any() }
|
||||
|
||||
@@ -5,7 +5,6 @@ private import codeql.util.FileSystem
|
||||
private import codeql.rust.elements.SourceFile
|
||||
private import codeql.rust.elements.AstNode
|
||||
private import codeql.rust.elements.Comment
|
||||
private import codeql.rust.Diagnostics
|
||||
|
||||
private module Input implements InputSig {
|
||||
abstract class ContainerBase extends @container {
|
||||
@@ -57,20 +56,3 @@ class File extends Container, Impl::File {
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A successfully extracted file, that is, a file that was extracted and
|
||||
* contains no extraction errors or warnings.
|
||||
*/
|
||||
class SuccessfullyExtractedFile extends File {
|
||||
SuccessfullyExtractedFile() {
|
||||
not exists(Diagnostic d |
|
||||
d.getLocation().getFile() = this and
|
||||
(
|
||||
d instanceof ExtractionError
|
||||
or
|
||||
d instanceof ExtractionWarning
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,8 +48,7 @@ class Diagnostic extends @diagnostic {
|
||||
string toString() { result = this.getMessage() }
|
||||
}
|
||||
|
||||
/** A diagnostic that is error severity. */
|
||||
class ExtractionError extends Diagnostic, @diagnostic_error { }
|
||||
|
||||
/** A diagnostic that is warning severity. */
|
||||
class ExtractionWarning extends Diagnostic, @diagnostic_warning { }
|
||||
/** A diagnostic relating to a particular error in extracting a file. */
|
||||
class ExtractionError extends Diagnostic {
|
||||
ExtractionError() { this.getTag() = "parse_error" }
|
||||
}
|
||||
|
||||
@@ -62,7 +62,7 @@ abstract class ConditionalCompletion extends NormalCompletion {
|
||||
abstract ConditionalCompletion getDual();
|
||||
}
|
||||
|
||||
/** Holds if node `le` has the constant Boolean value `value`. */
|
||||
/** Holds if node `le` has the Boolean constant value `value`. */
|
||||
private predicate isBooleanConstant(LiteralExpr le, Boolean value) {
|
||||
le.getTextValue() = value.toString()
|
||||
}
|
||||
@@ -117,56 +117,13 @@ class BooleanCompletion extends ConditionalCompletion, TBooleanCompletion {
|
||||
override string toString() { result = "boolean(" + value + ")" }
|
||||
}
|
||||
|
||||
/** Holds if `pat` is guaranteed to match. */
|
||||
pragma[nomagic]
|
||||
private predicate isIrrefutablePattern(Pat pat) {
|
||||
(
|
||||
pat instanceof WildcardPat
|
||||
or
|
||||
pat = any(IdentPat ip | not ip.hasPat() and ip = any(Variable v).getPat())
|
||||
or
|
||||
pat instanceof RestPat
|
||||
or
|
||||
// `let` statements without an `else` branch must be irrefutible
|
||||
pat = any(LetStmt let | not let.hasLetElse()).getPat()
|
||||
or
|
||||
// `match` expressions must be irrefutible, so last arm cannot fail
|
||||
pat = any(MatchExpr me).getLastArm().getPat()
|
||||
or
|
||||
// parameter patterns must be irrefutible
|
||||
pat = any(Param p).getPat()
|
||||
) and
|
||||
not pat = any(ForExpr for).getPat() // workaround until `for` loops are desugared
|
||||
or
|
||||
exists(Pat parent | isIrrefutablePattern(parent) |
|
||||
pat = parent.(BoxPat).getPat()
|
||||
or
|
||||
pat = parent.(IdentPat).getPat()
|
||||
or
|
||||
pat = parent.(ParenPat).getPat()
|
||||
or
|
||||
pat = parent.(RecordPat).getRecordPatFieldList().getField(_).getPat()
|
||||
or
|
||||
pat = parent.(RefPat).getPat()
|
||||
or
|
||||
pat = parent.(TuplePat).getAField()
|
||||
or
|
||||
pat = parent.(TupleStructPat).getAField()
|
||||
or
|
||||
pat = parent.(OrPat).getLastPat()
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* A completion that represents the result of a pattern match.
|
||||
*/
|
||||
class MatchCompletion extends TMatchCompletion, ConditionalCompletion {
|
||||
MatchCompletion() { this = TMatchCompletion(value) }
|
||||
|
||||
override predicate isValidForSpecific(AstNode e) {
|
||||
e instanceof Pat and
|
||||
if isIrrefutablePattern(e) then value = true else any()
|
||||
}
|
||||
override predicate isValidForSpecific(AstNode e) { e instanceof Pat }
|
||||
|
||||
override MatchSuccessor getAMatchingSuccessorType() { result.getValue() = value }
|
||||
|
||||
|
||||
@@ -65,6 +65,9 @@ private module CfgImpl =
|
||||
|
||||
import CfgImpl
|
||||
|
||||
/** Holds if `p` is a trivial pattern that is always guaranteed to match. */
|
||||
predicate trivialPat(Pat p) { p instanceof WildcardPat or p instanceof IdentPat }
|
||||
|
||||
class ArrayExprTree extends StandardPostOrderTree, ArrayExpr {
|
||||
override AstNode getChildNode(int i) { result = this.getExpr(i) }
|
||||
}
|
||||
@@ -138,10 +141,11 @@ class LogicalAndTree extends PostOrderTree, LogicalAndExpr {
|
||||
|
||||
class BlockExprTree extends StandardPostOrderTree, BlockExpr {
|
||||
override AstNode getChildNode(int i) {
|
||||
result = this.getStmtList().getStatement(i)
|
||||
result = super.getStmtList().getStatement(i)
|
||||
or
|
||||
i = this.getStmtList().getNumberOfStatements() and
|
||||
result = this.getStmtList().getTailExpr()
|
||||
not exists(super.getStmtList().getStatement(i)) and
|
||||
(exists(super.getStmtList().getStatement(i - 1)) or i = 0) and
|
||||
result = super.getStmtList().getTailExpr()
|
||||
}
|
||||
|
||||
override predicate propagatesAbnormal(AstNode child) { child = this.getChildNode(_) }
|
||||
@@ -179,23 +183,7 @@ class CastExprTree extends StandardPostOrderTree instanceof CastExpr {
|
||||
override AstNode getChildNode(int i) { i = 0 and result = super.getExpr() }
|
||||
}
|
||||
|
||||
class ClosureExprTree extends StandardTree, ClosureExpr {
|
||||
override predicate first(AstNode first) { first = this }
|
||||
|
||||
override predicate last(AstNode last, Completion c) {
|
||||
last = this and
|
||||
completionIsValidFor(c, this)
|
||||
}
|
||||
|
||||
override predicate propagatesAbnormal(AstNode child) { none() }
|
||||
|
||||
override AstNode getChildNode(int i) {
|
||||
result = this.getParamList().getParam(i)
|
||||
or
|
||||
i = this.getParamList().getNumberOfParams() and
|
||||
result = this.getBody()
|
||||
}
|
||||
}
|
||||
class ClosureExprTree extends LeafTree instanceof ClosureExpr { }
|
||||
|
||||
class ContinueExprTree extends LeafTree, ContinueExpr {
|
||||
override predicate last(AstNode last, Completion c) { none() }
|
||||
@@ -215,27 +203,7 @@ class FieldExprTree extends StandardPostOrderTree instanceof FieldExpr {
|
||||
override AstNode getChildNode(int i) { i = 0 and result = super.getExpr() }
|
||||
}
|
||||
|
||||
class FunctionTree extends StandardTree, Function {
|
||||
override predicate first(AstNode first) { first = this }
|
||||
|
||||
override predicate last(AstNode last, Completion c) {
|
||||
last = this and
|
||||
completionIsValidFor(c, this)
|
||||
}
|
||||
|
||||
override predicate propagatesAbnormal(AstNode child) { none() }
|
||||
|
||||
override AstNode getChildNode(int i) {
|
||||
result = this.getParamList().getParam(i)
|
||||
or
|
||||
i = this.getParamList().getNumberOfParams() and
|
||||
result = this.getBody()
|
||||
}
|
||||
}
|
||||
|
||||
class ParamTree extends StandardPostOrderTree, Param {
|
||||
override AstNode getChildNode(int i) { i = 0 and result = this.getPat() }
|
||||
}
|
||||
class FunctionTree extends LeafTree instanceof Function { }
|
||||
|
||||
class IfExprTree extends PostOrderTree instanceof IfExpr {
|
||||
override predicate first(AstNode node) { first(super.getCondition(), node) }
|
||||
@@ -273,14 +241,6 @@ class IfExprTree extends PostOrderTree instanceof IfExpr {
|
||||
}
|
||||
}
|
||||
|
||||
class FormatArgsExprTree extends StandardPostOrderTree, FormatArgsExpr {
|
||||
override AstNode getChildNode(int i) {
|
||||
i = -1 and result = this.getTemplate()
|
||||
or
|
||||
result = this.getArg(i).getExpr()
|
||||
}
|
||||
}
|
||||
|
||||
class IndexExprTree extends StandardPostOrderTree instanceof IndexExpr {
|
||||
override AstNode getChildNode(int i) {
|
||||
i = 0 and result = super.getBase()
|
||||
@@ -289,53 +249,53 @@ class IndexExprTree extends StandardPostOrderTree instanceof IndexExpr {
|
||||
}
|
||||
}
|
||||
|
||||
class ItemTree extends LeafTree, Item {
|
||||
ItemTree() {
|
||||
not this instanceof MacroCall and
|
||||
this = [any(StmtList s).getAStatement(), any(MacroStmts s).getAStatement()]
|
||||
}
|
||||
}
|
||||
class ItemTree extends LeafTree, Item { }
|
||||
|
||||
// `LetExpr` is a pre-order tree such that the pattern itself ends up
|
||||
// dominating successors in the graph in the same way that patterns do in
|
||||
// `match` expressions.
|
||||
class LetExprTree extends StandardPreOrderTree, LetExpr {
|
||||
class LetExprTree extends StandardPreOrderTree instanceof LetExpr {
|
||||
override AstNode getChildNode(int i) { i = 0 and result = super.getPat() }
|
||||
}
|
||||
|
||||
// We handle `let` statements with trivial patterns separately as they don't
|
||||
// lead to non-standard control flow. For instance, in `let a = ...` it is not
|
||||
// interesing to create match edges as it would carry no information.
|
||||
class LetStmtTreeTrivialPat extends StandardPreOrderTree instanceof LetStmt {
|
||||
LetStmtTreeTrivialPat() { trivialPat(super.getPat()) }
|
||||
|
||||
override AstNode getChildNode(int i) {
|
||||
i = 0 and
|
||||
result = this.getExpr()
|
||||
i = 0 and result = super.getInitializer()
|
||||
or
|
||||
i = 1 and
|
||||
result = this.getPat()
|
||||
i = 1 and result = super.getPat()
|
||||
}
|
||||
}
|
||||
|
||||
class LetStmtTree extends PreOrderTree, LetStmt {
|
||||
// `let` statements with interesting patterns that we want to be reflected in
|
||||
// the CFG.
|
||||
class LetStmtTree extends PreOrderTree instanceof LetStmt {
|
||||
LetStmtTree() { not trivialPat(super.getPat()) }
|
||||
|
||||
final override predicate propagatesAbnormal(AstNode child) {
|
||||
child = [this.getInitializer(), this.getLetElse().getBlockExpr()]
|
||||
child = [super.getInitializer(), super.getLetElse().getBlockExpr()]
|
||||
}
|
||||
|
||||
override predicate succ(AstNode pred, AstNode succ, Completion c) {
|
||||
// Edge to start of initializer.
|
||||
pred = this and first(this.getInitializer(), succ) and completionIsSimple(c)
|
||||
or
|
||||
// Edge to pattern when there is no initializer.
|
||||
pred = this and
|
||||
first(this.getPat(), succ) and
|
||||
completionIsSimple(c) and
|
||||
not this.hasInitializer()
|
||||
pred = this and first(super.getInitializer(), succ) and completionIsSimple(c)
|
||||
or
|
||||
// Edge from end of initializer to pattern.
|
||||
last(this.getInitializer(), pred, c) and first(this.getPat(), succ)
|
||||
last(super.getInitializer(), pred, c) and first(super.getPat(), succ)
|
||||
or
|
||||
// Edge from failed pattern to `else` branch.
|
||||
last(this.getPat(), pred, c) and
|
||||
first(this.getLetElse().getBlockExpr(), succ) and
|
||||
last(super.getPat(), pred, c) and
|
||||
first(super.getLetElse().getBlockExpr(), succ) and
|
||||
c.(MatchCompletion).failed()
|
||||
}
|
||||
|
||||
override predicate last(AstNode node, Completion c) {
|
||||
// Edge out of a successfully matched pattern.
|
||||
last(this.getPat(), node, c) and c.(MatchCompletion).succeeded()
|
||||
last(super.getPat(), node, c) and c.(MatchCompletion).succeeded()
|
||||
// NOTE: No edge out of the `else` branch as that is guaranteed to diverge.
|
||||
}
|
||||
}
|
||||
@@ -431,66 +391,36 @@ class ForExprTree extends LoopingExprTree instanceof ForExpr {
|
||||
}
|
||||
}
|
||||
|
||||
class MacroCallTree extends ControlFlowTree, MacroCall {
|
||||
override predicate first(AstNode first) {
|
||||
first(this.getExpanded(), first)
|
||||
or
|
||||
not exists(this.getExpanded()) and first = this
|
||||
}
|
||||
// TODO: replace with expanded macro once the extractor supports it
|
||||
class MacroExprTree extends LeafTree, MacroExpr { }
|
||||
|
||||
override predicate last(AstNode last, Completion c) {
|
||||
last(this.getExpanded(), last, c)
|
||||
or
|
||||
not exists(this.getExpanded()) and
|
||||
last = this and
|
||||
completionIsValidFor(c, last)
|
||||
}
|
||||
class MatchArmTree extends ControlFlowTree instanceof MatchArm {
|
||||
override predicate propagatesAbnormal(AstNode child) { child = super.getExpr() }
|
||||
|
||||
override predicate succ(AstNode pred, AstNode succ, Completion c) { none() }
|
||||
|
||||
override predicate propagatesAbnormal(AstNode child) { child = this.getExpanded() }
|
||||
}
|
||||
|
||||
class MacroExprTree extends StandardPostOrderTree, MacroExpr {
|
||||
override AstNode getChildNode(int i) { i = 0 and result = this.getMacroCall() }
|
||||
}
|
||||
|
||||
class MacroStmtsTree extends StandardPreOrderTree, MacroStmts {
|
||||
override AstNode getChildNode(int i) {
|
||||
result = this.getStatement(i)
|
||||
or
|
||||
i = this.getNumberOfStatements() and
|
||||
result = this.getExpr()
|
||||
}
|
||||
}
|
||||
|
||||
class MatchArmTree extends ControlFlowTree, MatchArm {
|
||||
override predicate propagatesAbnormal(AstNode child) { child = this.getExpr() }
|
||||
|
||||
override predicate first(AstNode node) { first(this.getPat(), node) }
|
||||
override predicate first(AstNode node) { node = super.getPat() }
|
||||
|
||||
override predicate succ(AstNode pred, AstNode succ, Completion c) {
|
||||
// Edge from pattern to guard/arm if match succeeds.
|
||||
last(this.getPat(), pred, c) and
|
||||
pred = super.getPat() and
|
||||
c.(MatchCompletion).succeeded() and
|
||||
(
|
||||
first(this.getGuard().getCondition(), succ)
|
||||
first(super.getGuard().getCondition(), succ)
|
||||
or
|
||||
not this.hasGuard() and first(this.getExpr(), succ)
|
||||
not super.hasGuard() and first(super.getExpr(), succ)
|
||||
)
|
||||
or
|
||||
// Edge from guard to arm if the guard succeeds.
|
||||
last(this.getGuard().getCondition(), pred, c) and
|
||||
first(this.getExpr(), succ) and
|
||||
last(super.getGuard().getCondition(), pred, c) and
|
||||
first(super.getExpr(), succ) and
|
||||
c.(BooleanCompletion).succeeded()
|
||||
}
|
||||
|
||||
override predicate last(AstNode node, Completion c) {
|
||||
last(this.getPat(), node, c) and c.(MatchCompletion).failed()
|
||||
node = super.getPat() and c.(MatchCompletion).failed()
|
||||
or
|
||||
last(this.getGuard().getCondition(), node, c) and c.(BooleanCompletion).failed()
|
||||
last(super.getGuard().getCondition(), node, c) and c.(BooleanCompletion).failed()
|
||||
or
|
||||
last(this.getExpr(), node, c)
|
||||
last(super.getExpr(), node, c)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -503,8 +433,7 @@ class MatchExprTree extends PostOrderTree instanceof MatchExpr {
|
||||
|
||||
override predicate succ(AstNode pred, AstNode succ, Completion c) {
|
||||
// Edge from the scrutinee to the first arm.
|
||||
last(super.getExpr(), pred, c) and
|
||||
first(super.getArm(0).getPat(), succ)
|
||||
last(super.getExpr(), pred, c) and succ = super.getArm(0).getPat()
|
||||
or
|
||||
// Edge from a failed match/guard in one arm to the beginning of the next arm.
|
||||
exists(int i |
|
||||
@@ -518,12 +447,10 @@ class MatchExprTree extends PostOrderTree instanceof MatchExpr {
|
||||
}
|
||||
}
|
||||
|
||||
class MethodCallExprTree extends StandardPostOrderTree, MethodCallExpr {
|
||||
class MethodCallExprTree extends StandardPostOrderTree instanceof MethodCallExpr {
|
||||
override AstNode getChildNode(int i) {
|
||||
i = 0 and
|
||||
result = this.getReceiver()
|
||||
or
|
||||
result = this.getArgList().getArg(i + 1)
|
||||
result = super.getReceiver() and
|
||||
result = super.getArgList().getArg(i + 1)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -547,6 +474,9 @@ class ParenExprTree extends ControlFlowTree, ParenExpr {
|
||||
override predicate succ(AstNode pred, AstNode succ, Completion c) { none() }
|
||||
}
|
||||
|
||||
// This covers all patterns as they all extend `Pat`
|
||||
class PatExprTree extends LeafTree instanceof Pat { }
|
||||
|
||||
class PathExprTree extends LeafTree instanceof PathExpr { }
|
||||
|
||||
class PrefixExprTree extends StandardPostOrderTree instanceof PrefixExpr {
|
||||
@@ -602,166 +532,3 @@ class YieldExprTree extends StandardPostOrderTree instanceof YieldExpr {
|
||||
class YeetExprTree extends StandardPostOrderTree instanceof YeetExpr {
|
||||
override AstNode getChildNode(int i) { i = 0 and result = super.getExpr() }
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides `ControlFlowTree`s for patterns.
|
||||
*
|
||||
* Since patterns destruct values, they are modeled in pre-order, except for
|
||||
* `OrPat`s and `IdentPat`s.
|
||||
*/
|
||||
module PatternTrees {
|
||||
abstract class PreOrderPatTree extends PreOrderTree {
|
||||
abstract Pat getPat(int i);
|
||||
|
||||
private Pat getPatRanked(int i) {
|
||||
result = rank[i + 1](Pat pat, int j | pat = this.getPat(j) | pat order by j)
|
||||
}
|
||||
|
||||
override predicate propagatesAbnormal(AstNode child) { child = this.getPatRanked(_) }
|
||||
|
||||
override predicate succ(AstNode pred, AstNode succ, Completion c) {
|
||||
pred = this and
|
||||
completionIsValidFor(c, this) and
|
||||
c.(MatchCompletion).succeeded() and
|
||||
first(this.getPatRanked(0), succ)
|
||||
or
|
||||
exists(int i | last(this.getPatRanked(i), pred, c) |
|
||||
// Edge from successful pattern to the next
|
||||
c.(MatchCompletion).succeeded() and
|
||||
first(this.getPatRanked(i + 1), succ)
|
||||
)
|
||||
}
|
||||
|
||||
override predicate last(AstNode node, Completion c) {
|
||||
node = this and
|
||||
completionIsValidFor(c, this) and
|
||||
c.(MatchCompletion).failed()
|
||||
or
|
||||
exists(int i | last(this.getPatRanked(i), node, c) |
|
||||
c.(MatchCompletion).failed()
|
||||
or
|
||||
not exists(this.getPatRanked(i + 1)) and
|
||||
completionIsNormal(c)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
abstract class PostOrderPatTree extends PostOrderTree {
|
||||
abstract Pat getPat(int i);
|
||||
|
||||
private Pat getPatRanked(int i) {
|
||||
result = rank[i + 1](Pat pat, int j | pat = this.getPat(j) | pat order by j)
|
||||
}
|
||||
|
||||
override predicate propagatesAbnormal(AstNode child) { child = this.getPatRanked(_) }
|
||||
|
||||
override predicate first(AstNode node) {
|
||||
first(this.getPat(0), node)
|
||||
or
|
||||
not exists(this.getPat(_)) and
|
||||
node = this
|
||||
}
|
||||
|
||||
override predicate succ(AstNode pred, AstNode succ, Completion c) {
|
||||
exists(int i | last(this.getPat(i), pred, c) |
|
||||
// Edge from unsuccessful pattern to the next
|
||||
c.(MatchCompletion).failed() and
|
||||
first(this.getPat(i + 1), succ)
|
||||
or
|
||||
// Edge from successful pattern to this
|
||||
c.(MatchCompletion).succeeded() and
|
||||
succ = this
|
||||
or
|
||||
// Edge from last pattern to this
|
||||
not exists(this.getPat(i + 1)) and
|
||||
succ = this and
|
||||
completionIsNormal(c)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
class IdentPatTree extends PostOrderPatTree, IdentPat {
|
||||
override Pat getPat(int i) { i = 0 and result = this.getPat() }
|
||||
|
||||
override predicate last(AstNode node, Completion c) {
|
||||
super.last(node, c)
|
||||
or
|
||||
last(this.getPat(), node, c) and
|
||||
c.(MatchCompletion).failed()
|
||||
}
|
||||
|
||||
override predicate succ(AstNode pred, AstNode succ, Completion c) {
|
||||
super.succ(pred, succ, c) and
|
||||
not (succ = this and c.(MatchCompletion).failed())
|
||||
}
|
||||
}
|
||||
|
||||
class BoxPatTree extends PreOrderPatTree, BoxPat {
|
||||
override Pat getPat(int i) { i = 0 and result = this.getPat() }
|
||||
}
|
||||
|
||||
class RestPatTree extends LeafTree, RestPat { }
|
||||
|
||||
class LiteralPatTree extends LeafTree, LiteralPat { }
|
||||
|
||||
class MacroPatTree extends PreOrderPatTree, MacroPat {
|
||||
override Pat getPat(int i) { i = 0 and result = this.getMacroCall().getExpanded() }
|
||||
}
|
||||
|
||||
class OrPatTree extends PostOrderPatTree instanceof OrPat {
|
||||
override Pat getPat(int i) { result = OrPat.super.getPat(i) }
|
||||
}
|
||||
|
||||
class ParenPatTree extends ControlFlowTree, ParenPat {
|
||||
private ControlFlowTree pat;
|
||||
|
||||
ParenPatTree() { pat = this.getPat() }
|
||||
|
||||
override predicate propagatesAbnormal(AstNode child) { pat.propagatesAbnormal(child) }
|
||||
|
||||
override predicate first(AstNode first) { pat.first(first) }
|
||||
|
||||
override predicate last(AstNode last, Completion c) { pat.last(last, c) }
|
||||
|
||||
override predicate succ(AstNode pred, AstNode succ, Completion c) { none() }
|
||||
}
|
||||
|
||||
class PathPatTree extends LeafTree, PathPat { }
|
||||
|
||||
class WildcardPatTree extends LeafTree, WildcardPat { }
|
||||
|
||||
class RangePatTree extends PreOrderPatTree, RangePat {
|
||||
override Pat getPat(int i) {
|
||||
i = 0 and result = this.getStart()
|
||||
or
|
||||
i = 1 and result = this.getEnd()
|
||||
}
|
||||
}
|
||||
|
||||
class RecordPatTree extends PreOrderPatTree, RecordPat {
|
||||
override Pat getPat(int i) {
|
||||
result = this.getRecordPatFieldList().getField(i).getPat()
|
||||
or
|
||||
i = this.getRecordPatFieldList().getNumberOfFields() and
|
||||
result = this.getRecordPatFieldList().getRestPat()
|
||||
}
|
||||
}
|
||||
|
||||
class RefPatTree extends PreOrderPatTree, RefPat {
|
||||
override Pat getPat(int i) { i = 0 and result = super.getPat() }
|
||||
}
|
||||
|
||||
class SlicePatTree extends PreOrderPatTree instanceof SlicePat {
|
||||
override Pat getPat(int i) { result = SlicePat.super.getPat(i) }
|
||||
}
|
||||
|
||||
class TuplePatTree extends PreOrderPatTree, TuplePat {
|
||||
override Pat getPat(int i) { result = this.getField(i) }
|
||||
}
|
||||
|
||||
class TupleStructPatTree extends PreOrderPatTree, TupleStructPat {
|
||||
override Pat getPat(int i) { result = this.getField(i) }
|
||||
}
|
||||
|
||||
class ConstBlockPatTree extends LeafTree, ConstBlockPat { } // todo?
|
||||
}
|
||||
|
||||
@@ -12,17 +12,13 @@ abstract class CfgScope extends AstNode {
|
||||
}
|
||||
|
||||
final class FunctionScope extends CfgScope, Function {
|
||||
override predicate scopeFirst(AstNode node) {
|
||||
first(this.(FunctionTree).getFirstChildNode(), node)
|
||||
}
|
||||
override predicate scopeFirst(AstNode node) { first(this.getBody(), node) }
|
||||
|
||||
override predicate scopeLast(AstNode node, Completion c) { last(this.getBody(), node, c) }
|
||||
}
|
||||
|
||||
final class ClosureScope extends CfgScope, ClosureExpr {
|
||||
override predicate scopeFirst(AstNode node) {
|
||||
first(this.(ClosureExprTree).getFirstChildNode(), node)
|
||||
}
|
||||
override predicate scopeFirst(AstNode node) { first(this.getBody(), node) }
|
||||
|
||||
override predicate scopeLast(AstNode node, Completion c) { last(this.getBody(), node, c) }
|
||||
}
|
||||
|
||||
@@ -78,11 +78,6 @@ module ConditionalCompletionSplitting {
|
||||
child = parent.(MatchExpr).getAnArm().getExpr()
|
||||
or
|
||||
child = parent.(BlockExpr).getStmtList().getTailExpr()
|
||||
or
|
||||
child = parent.(PatternTrees::PreOrderPatTree).getPat(_) and
|
||||
childCompletion.(MatchCompletion).failed()
|
||||
or
|
||||
child = parent.(PatternTrees::PostOrderPatTree).getPat(_)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,14 @@ private import rust
|
||||
private import codeql.util.Boolean
|
||||
private import Completion
|
||||
|
||||
newtype TLoopJumpType =
|
||||
TContinueJump() or
|
||||
TBreakJump()
|
||||
|
||||
newtype TLabelType =
|
||||
TLabel(string s) { any(Label l).getLifetime().getText() = s } or
|
||||
TNoLabel()
|
||||
|
||||
cached
|
||||
newtype TSuccessorType =
|
||||
TSuccessorSuccessor() or
|
||||
|
||||
3
rust/ql/lib/codeql/rust/elements.qll
generated
3
rust/ql/lib/codeql/rust/elements.qll
generated
@@ -20,7 +20,6 @@ import codeql.rust.elements.BlockExpr
|
||||
import codeql.rust.elements.BoxPat
|
||||
import codeql.rust.elements.BreakExpr
|
||||
import codeql.rust.elements.CallExpr
|
||||
import codeql.rust.elements.CallExprBase
|
||||
import codeql.rust.elements.CastExpr
|
||||
import codeql.rust.elements.ClosureBinder
|
||||
import codeql.rust.elements.ClosureExpr
|
||||
@@ -73,10 +72,8 @@ import codeql.rust.elements.LoopExpr
|
||||
import codeql.rust.elements.MacroCall
|
||||
import codeql.rust.elements.MacroDef
|
||||
import codeql.rust.elements.MacroExpr
|
||||
import codeql.rust.elements.MacroItems
|
||||
import codeql.rust.elements.MacroPat
|
||||
import codeql.rust.elements.MacroRules
|
||||
import codeql.rust.elements.MacroStmts
|
||||
import codeql.rust.elements.MacroType
|
||||
import codeql.rust.elements.MatchArm
|
||||
import codeql.rust.elements.MatchArmList
|
||||
|
||||
3
rust/ql/lib/codeql/rust/elements/CallExpr.qll
generated
3
rust/ql/lib/codeql/rust/elements/CallExpr.qll
generated
@@ -4,7 +4,8 @@
|
||||
*/
|
||||
|
||||
private import internal.CallExprImpl
|
||||
import codeql.rust.elements.CallExprBase
|
||||
import codeql.rust.elements.ArgList
|
||||
import codeql.rust.elements.Attr
|
||||
import codeql.rust.elements.Expr
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
// generated by codegen, do not edit
|
||||
/**
|
||||
* This module provides the public class `CallExprBase`.
|
||||
*/
|
||||
|
||||
private import internal.CallExprBaseImpl
|
||||
import codeql.rust.elements.ArgList
|
||||
import codeql.rust.elements.Attr
|
||||
import codeql.rust.elements.Expr
|
||||
|
||||
/**
|
||||
* A function or method call expression. See `CallExpr` and `MethodCallExpr` for further details.
|
||||
*/
|
||||
final class CallExprBase = Impl::CallExprBase;
|
||||
1
rust/ql/lib/codeql/rust/elements/MacroCall.qll
generated
1
rust/ql/lib/codeql/rust/elements/MacroCall.qll
generated
@@ -5,7 +5,6 @@
|
||||
|
||||
private import internal.MacroCallImpl
|
||||
import codeql.rust.elements.AssocItem
|
||||
import codeql.rust.elements.AstNode
|
||||
import codeql.rust.elements.Attr
|
||||
import codeql.rust.elements.ExternItem
|
||||
import codeql.rust.elements.Item
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
// generated by codegen, do not edit
|
||||
/**
|
||||
* This module provides the public class `MacroItems`.
|
||||
*/
|
||||
|
||||
private import internal.MacroItemsImpl
|
||||
import codeql.rust.elements.AstNode
|
||||
import codeql.rust.elements.Item
|
||||
|
||||
/**
|
||||
* A sequence of items generated by a `MacroCall`. For example:
|
||||
* ```rust
|
||||
* mod foo{
|
||||
* include!("common_definitions.rs");
|
||||
* }
|
||||
* ```
|
||||
*/
|
||||
final class MacroItems = Impl::MacroItems;
|
||||
@@ -1,19 +0,0 @@
|
||||
// generated by codegen, do not edit
|
||||
/**
|
||||
* This module provides the public class `MacroStmts`.
|
||||
*/
|
||||
|
||||
private import internal.MacroStmtsImpl
|
||||
import codeql.rust.elements.AstNode
|
||||
import codeql.rust.elements.Expr
|
||||
import codeql.rust.elements.Stmt
|
||||
|
||||
/**
|
||||
* A sequence of statements generated by a `MacroCall`. For example:
|
||||
* ```rust
|
||||
* fn main() {
|
||||
* println!("Hello, world!"); // This macro expands into a list of statements
|
||||
* }
|
||||
* ```
|
||||
*/
|
||||
final class MacroStmts = Impl::MacroStmts;
|
||||
@@ -4,7 +4,8 @@
|
||||
*/
|
||||
|
||||
private import internal.MethodCallExprImpl
|
||||
import codeql.rust.elements.CallExprBase
|
||||
import codeql.rust.elements.ArgList
|
||||
import codeql.rust.elements.Attr
|
||||
import codeql.rust.elements.Expr
|
||||
import codeql.rust.elements.GenericArgList
|
||||
import codeql.rust.elements.NameRef
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
// generated by codegen, remove this comment if you wish to edit this file
|
||||
/**
|
||||
* This module provides a hand-modifiable wrapper around the generated class `CallExprBase`.
|
||||
*
|
||||
* INTERNAL: Do not use.
|
||||
*/
|
||||
|
||||
private import codeql.rust.elements.internal.generated.CallExprBase
|
||||
|
||||
/**
|
||||
* INTERNAL: This module contains the customizable definition of `CallExprBase` and should not
|
||||
* be referenced directly.
|
||||
*/
|
||||
module Impl {
|
||||
/**
|
||||
* A function or method call expression. See `CallExpr` and `MethodCallExpr` for further details.
|
||||
*/
|
||||
class CallExprBase extends Generated::CallExprBase { }
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
// generated by codegen, remove this comment if you wish to edit this file
|
||||
/**
|
||||
* This module defines the hook used internally to tweak the characteristic predicate of
|
||||
* `MacroItems` synthesized instances.
|
||||
* INTERNAL: Do not use.
|
||||
*/
|
||||
|
||||
private import codeql.rust.elements.internal.generated.Raw
|
||||
|
||||
/**
|
||||
* The characteristic predicate of `MacroItems` synthesized instances.
|
||||
* INTERNAL: Do not use.
|
||||
*/
|
||||
predicate constructMacroItems(Raw::MacroItems id) { any() }
|
||||
@@ -1,24 +0,0 @@
|
||||
// generated by codegen, remove this comment if you wish to edit this file
|
||||
/**
|
||||
* This module provides a hand-modifiable wrapper around the generated class `MacroItems`.
|
||||
*
|
||||
* INTERNAL: Do not use.
|
||||
*/
|
||||
|
||||
private import codeql.rust.elements.internal.generated.MacroItems
|
||||
|
||||
/**
|
||||
* INTERNAL: This module contains the customizable definition of `MacroItems` and should not
|
||||
* be referenced directly.
|
||||
*/
|
||||
module Impl {
|
||||
/**
|
||||
* A sequence of items generated by a `MacroCall`. For example:
|
||||
* ```rust
|
||||
* mod foo{
|
||||
* include!("common_definitions.rs");
|
||||
* }
|
||||
* ```
|
||||
*/
|
||||
class MacroItems extends Generated::MacroItems { }
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
// generated by codegen, remove this comment if you wish to edit this file
|
||||
/**
|
||||
* This module defines the hook used internally to tweak the characteristic predicate of
|
||||
* `MacroStmts` synthesized instances.
|
||||
* INTERNAL: Do not use.
|
||||
*/
|
||||
|
||||
private import codeql.rust.elements.internal.generated.Raw
|
||||
|
||||
/**
|
||||
* The characteristic predicate of `MacroStmts` synthesized instances.
|
||||
* INTERNAL: Do not use.
|
||||
*/
|
||||
predicate constructMacroStmts(Raw::MacroStmts id) { any() }
|
||||
@@ -1,24 +0,0 @@
|
||||
// generated by codegen, remove this comment if you wish to edit this file
|
||||
/**
|
||||
* This module provides a hand-modifiable wrapper around the generated class `MacroStmts`.
|
||||
*
|
||||
* INTERNAL: Do not use.
|
||||
*/
|
||||
|
||||
private import codeql.rust.elements.internal.generated.MacroStmts
|
||||
|
||||
/**
|
||||
* INTERNAL: This module contains the customizable definition of `MacroStmts` and should not
|
||||
* be referenced directly.
|
||||
*/
|
||||
module Impl {
|
||||
/**
|
||||
* A sequence of statements generated by a `MacroCall`. For example:
|
||||
* ```rust
|
||||
* fn main() {
|
||||
* println!("Hello, world!"); // This macro expands into a list of statements
|
||||
* }
|
||||
* ```
|
||||
*/
|
||||
class MacroStmts extends Generated::MacroStmts { }
|
||||
}
|
||||
@@ -42,11 +42,5 @@ module Impl {
|
||||
* Gets the number of arms of this match expression.
|
||||
*/
|
||||
int getNumberOfArms() { result = this.getMatchArmList().getNumberOfArms() }
|
||||
|
||||
/**
|
||||
* Gets the last arm of this match expression. Due to exhaustiveness checking,
|
||||
* this arm is guaranteed to succeed.
|
||||
*/
|
||||
MatchArm getLastArm() { result = this.getArm(this.getNumberOfArms() - 1) }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
// generated by codegen, remove this comment if you wish to edit this file
|
||||
/**
|
||||
* This module provides a hand-modifiable wrapper around the generated class `OrPat`.
|
||||
*
|
||||
@@ -11,7 +12,6 @@ private import codeql.rust.elements.internal.generated.OrPat
|
||||
* be referenced directly.
|
||||
*/
|
||||
module Impl {
|
||||
// the following QLdoc is generated: if you need to edit it, do it in the schema file
|
||||
/**
|
||||
* An or pattern. For example:
|
||||
* ```rust
|
||||
@@ -20,9 +20,5 @@ module Impl {
|
||||
* }
|
||||
* ```
|
||||
*/
|
||||
class OrPat extends Generated::OrPat {
|
||||
/** Gets the last pattern in this or pattern. */
|
||||
pragma[nomagic]
|
||||
Pat getLastPat() { result = this.getPat(this.getNumberOfPats() - 1) }
|
||||
}
|
||||
class OrPat extends Generated::OrPat { }
|
||||
}
|
||||
|
||||
@@ -53,36 +53,6 @@ module Generated {
|
||||
*/
|
||||
final int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) }
|
||||
|
||||
/**
|
||||
* Holds if this block expression is async.
|
||||
*/
|
||||
predicate isAsync() { Synth::convertBlockExprToRaw(this).(Raw::BlockExpr).isAsync() }
|
||||
|
||||
/**
|
||||
* Holds if this block expression is const.
|
||||
*/
|
||||
predicate isConst() { Synth::convertBlockExprToRaw(this).(Raw::BlockExpr).isConst() }
|
||||
|
||||
/**
|
||||
* Holds if this block expression is gen.
|
||||
*/
|
||||
predicate isGen() { Synth::convertBlockExprToRaw(this).(Raw::BlockExpr).isGen() }
|
||||
|
||||
/**
|
||||
* Holds if this block expression is move.
|
||||
*/
|
||||
predicate isMove() { Synth::convertBlockExprToRaw(this).(Raw::BlockExpr).isMove() }
|
||||
|
||||
/**
|
||||
* Holds if this block expression is try.
|
||||
*/
|
||||
predicate isTry() { Synth::convertBlockExprToRaw(this).(Raw::BlockExpr).isTry() }
|
||||
|
||||
/**
|
||||
* Holds if this block expression is unsafe.
|
||||
*/
|
||||
predicate isUnsafe() { Synth::convertBlockExprToRaw(this).(Raw::BlockExpr).isUnsafe() }
|
||||
|
||||
/**
|
||||
* Gets the label of this block expression, if it exists.
|
||||
*/
|
||||
|
||||
@@ -6,8 +6,10 @@
|
||||
|
||||
private import codeql.rust.elements.internal.generated.Synth
|
||||
private import codeql.rust.elements.internal.generated.Raw
|
||||
import codeql.rust.elements.internal.CallExprBaseImpl::Impl as CallExprBaseImpl
|
||||
import codeql.rust.elements.ArgList
|
||||
import codeql.rust.elements.Attr
|
||||
import codeql.rust.elements.Expr
|
||||
import codeql.rust.elements.internal.ExprImpl::Impl as ExprImpl
|
||||
|
||||
/**
|
||||
* INTERNAL: This module contains the fully generated definition of `CallExpr` and should not
|
||||
@@ -25,9 +27,40 @@ module Generated {
|
||||
* INTERNAL: Do not reference the `Generated::CallExpr` class directly.
|
||||
* Use the subclass `CallExpr`, where the following predicates are available.
|
||||
*/
|
||||
class CallExpr extends Synth::TCallExpr, CallExprBaseImpl::CallExprBase {
|
||||
class CallExpr extends Synth::TCallExpr, ExprImpl::Expr {
|
||||
override string getAPrimaryQlClass() { result = "CallExpr" }
|
||||
|
||||
/**
|
||||
* Gets the argument list of this call expression, if it exists.
|
||||
*/
|
||||
ArgList getArgList() {
|
||||
result =
|
||||
Synth::convertArgListFromRaw(Synth::convertCallExprToRaw(this).(Raw::CallExpr).getArgList())
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `getArgList()` exists.
|
||||
*/
|
||||
final predicate hasArgList() { exists(this.getArgList()) }
|
||||
|
||||
/**
|
||||
* Gets the `index`th attr of this call expression (0-based).
|
||||
*/
|
||||
Attr getAttr(int index) {
|
||||
result =
|
||||
Synth::convertAttrFromRaw(Synth::convertCallExprToRaw(this).(Raw::CallExpr).getAttr(index))
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets any of the attrs of this call expression.
|
||||
*/
|
||||
final Attr getAnAttr() { result = this.getAttr(_) }
|
||||
|
||||
/**
|
||||
* Gets the number of attrs of this call expression.
|
||||
*/
|
||||
final int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) }
|
||||
|
||||
/**
|
||||
* Gets the expression of this call expression, if it exists.
|
||||
*/
|
||||
|
||||
@@ -1,59 +0,0 @@
|
||||
// generated by codegen, do not edit
|
||||
/**
|
||||
* This module provides the generated definition of `CallExprBase`.
|
||||
* INTERNAL: Do not import directly.
|
||||
*/
|
||||
|
||||
private import codeql.rust.elements.internal.generated.Synth
|
||||
private import codeql.rust.elements.internal.generated.Raw
|
||||
import codeql.rust.elements.ArgList
|
||||
import codeql.rust.elements.Attr
|
||||
import codeql.rust.elements.internal.ExprImpl::Impl as ExprImpl
|
||||
|
||||
/**
|
||||
* INTERNAL: This module contains the fully generated definition of `CallExprBase` and should not
|
||||
* be referenced directly.
|
||||
*/
|
||||
module Generated {
|
||||
/**
|
||||
* A function or method call expression. See `CallExpr` and `MethodCallExpr` for further details.
|
||||
* INTERNAL: Do not reference the `Generated::CallExprBase` class directly.
|
||||
* Use the subclass `CallExprBase`, where the following predicates are available.
|
||||
*/
|
||||
class CallExprBase extends Synth::TCallExprBase, ExprImpl::Expr {
|
||||
/**
|
||||
* Gets the argument list of this call expression base, if it exists.
|
||||
*/
|
||||
ArgList getArgList() {
|
||||
result =
|
||||
Synth::convertArgListFromRaw(Synth::convertCallExprBaseToRaw(this)
|
||||
.(Raw::CallExprBase)
|
||||
.getArgList())
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `getArgList()` exists.
|
||||
*/
|
||||
final predicate hasArgList() { exists(this.getArgList()) }
|
||||
|
||||
/**
|
||||
* Gets the `index`th attr of this call expression base (0-based).
|
||||
*/
|
||||
Attr getAttr(int index) {
|
||||
result =
|
||||
Synth::convertAttrFromRaw(Synth::convertCallExprBaseToRaw(this)
|
||||
.(Raw::CallExprBase)
|
||||
.getAttr(index))
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets any of the attrs of this call expression base.
|
||||
*/
|
||||
final Attr getAnAttr() { result = this.getAttr(_) }
|
||||
|
||||
/**
|
||||
* Gets the number of attrs of this call expression base.
|
||||
*/
|
||||
final int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) }
|
||||
}
|
||||
}
|
||||
@@ -83,31 +83,6 @@ module Generated {
|
||||
*/
|
||||
final predicate hasClosureBinder() { exists(this.getClosureBinder()) }
|
||||
|
||||
/**
|
||||
* Holds if this closure expression is async.
|
||||
*/
|
||||
predicate isAsync() { Synth::convertClosureExprToRaw(this).(Raw::ClosureExpr).isAsync() }
|
||||
|
||||
/**
|
||||
* Holds if this closure expression is const.
|
||||
*/
|
||||
predicate isConst() { Synth::convertClosureExprToRaw(this).(Raw::ClosureExpr).isConst() }
|
||||
|
||||
/**
|
||||
* Holds if this closure expression is gen.
|
||||
*/
|
||||
predicate isGen() { Synth::convertClosureExprToRaw(this).(Raw::ClosureExpr).isGen() }
|
||||
|
||||
/**
|
||||
* Holds if this closure expression is move.
|
||||
*/
|
||||
predicate isMove() { Synth::convertClosureExprToRaw(this).(Raw::ClosureExpr).isMove() }
|
||||
|
||||
/**
|
||||
* Holds if this closure expression is static.
|
||||
*/
|
||||
predicate isStatic() { Synth::convertClosureExprToRaw(this).(Raw::ClosureExpr).isStatic() }
|
||||
|
||||
/**
|
||||
* Gets the parameter list of this closure expression, if it exists.
|
||||
*/
|
||||
|
||||
@@ -59,16 +59,6 @@ module Generated {
|
||||
*/
|
||||
final predicate hasBody() { exists(this.getBody()) }
|
||||
|
||||
/**
|
||||
* Holds if this const is const.
|
||||
*/
|
||||
predicate isConst() { Synth::convertConstToRaw(this).(Raw::Const).isConst() }
|
||||
|
||||
/**
|
||||
* Holds if this const is default.
|
||||
*/
|
||||
predicate isDefault() { Synth::convertConstToRaw(this).(Raw::Const).isDefault() }
|
||||
|
||||
/**
|
||||
* Gets the name of this const, if it exists.
|
||||
*/
|
||||
|
||||
@@ -42,10 +42,5 @@ module Generated {
|
||||
* Holds if `getBlockExpr()` exists.
|
||||
*/
|
||||
final predicate hasBlockExpr() { exists(this.getBlockExpr()) }
|
||||
|
||||
/**
|
||||
* Holds if this const block pat is const.
|
||||
*/
|
||||
predicate isConst() { Synth::convertConstBlockPatToRaw(this).(Raw::ConstBlockPat).isConst() }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -63,11 +63,6 @@ module Generated {
|
||||
*/
|
||||
final predicate hasDefaultVal() { exists(this.getDefaultVal()) }
|
||||
|
||||
/**
|
||||
* Holds if this const parameter is const.
|
||||
*/
|
||||
predicate isConst() { Synth::convertConstParamToRaw(this).(Raw::ConstParam).isConst() }
|
||||
|
||||
/**
|
||||
* Gets the name of this const parameter, if it exists.
|
||||
*/
|
||||
|
||||
@@ -74,10 +74,5 @@ module Generated {
|
||||
* Holds if `getExternItemList()` exists.
|
||||
*/
|
||||
final predicate hasExternItemList() { exists(this.getExternItemList()) }
|
||||
|
||||
/**
|
||||
* Holds if this extern block is unsafe.
|
||||
*/
|
||||
predicate isUnsafe() { Synth::convertExternBlockToRaw(this).(Raw::ExternBlock).isUnsafe() }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,21 +40,6 @@ module Generated {
|
||||
*/
|
||||
final predicate hasAbi() { exists(this.getAbi()) }
|
||||
|
||||
/**
|
||||
* Holds if this fn ptr type is async.
|
||||
*/
|
||||
predicate isAsync() { Synth::convertFnPtrTypeToRaw(this).(Raw::FnPtrType).isAsync() }
|
||||
|
||||
/**
|
||||
* Holds if this fn ptr type is const.
|
||||
*/
|
||||
predicate isConst() { Synth::convertFnPtrTypeToRaw(this).(Raw::FnPtrType).isConst() }
|
||||
|
||||
/**
|
||||
* Holds if this fn ptr type is unsafe.
|
||||
*/
|
||||
predicate isUnsafe() { Synth::convertFnPtrTypeToRaw(this).(Raw::FnPtrType).isUnsafe() }
|
||||
|
||||
/**
|
||||
* Gets the parameter list of this fn ptr type, if it exists.
|
||||
*/
|
||||
|
||||
@@ -101,31 +101,6 @@ module Generated {
|
||||
*/
|
||||
final predicate hasGenericParamList() { exists(this.getGenericParamList()) }
|
||||
|
||||
/**
|
||||
* Holds if this function is async.
|
||||
*/
|
||||
predicate isAsync() { Synth::convertFunctionToRaw(this).(Raw::Function).isAsync() }
|
||||
|
||||
/**
|
||||
* Holds if this function is const.
|
||||
*/
|
||||
predicate isConst() { Synth::convertFunctionToRaw(this).(Raw::Function).isConst() }
|
||||
|
||||
/**
|
||||
* Holds if this function is default.
|
||||
*/
|
||||
predicate isDefault() { Synth::convertFunctionToRaw(this).(Raw::Function).isDefault() }
|
||||
|
||||
/**
|
||||
* Holds if this function is gen.
|
||||
*/
|
||||
predicate isGen() { Synth::convertFunctionToRaw(this).(Raw::Function).isGen() }
|
||||
|
||||
/**
|
||||
* Holds if this function is unsafe.
|
||||
*/
|
||||
predicate isUnsafe() { Synth::convertFunctionToRaw(this).(Raw::Function).isUnsafe() }
|
||||
|
||||
/**
|
||||
* Gets the name of this function, if it exists.
|
||||
*/
|
||||
|
||||
@@ -54,16 +54,6 @@ module Generated {
|
||||
*/
|
||||
final int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) }
|
||||
|
||||
/**
|
||||
* Holds if this ident pat is mut.
|
||||
*/
|
||||
predicate isMut() { Synth::convertIdentPatToRaw(this).(Raw::IdentPat).isMut() }
|
||||
|
||||
/**
|
||||
* Holds if this ident pat is reference.
|
||||
*/
|
||||
predicate isRef() { Synth::convertIdentPatToRaw(this).(Raw::IdentPat).isRef() }
|
||||
|
||||
/**
|
||||
* Gets the name of this ident pat, if it exists.
|
||||
*/
|
||||
|
||||
@@ -77,21 +77,6 @@ module Generated {
|
||||
*/
|
||||
final predicate hasGenericParamList() { exists(this.getGenericParamList()) }
|
||||
|
||||
/**
|
||||
* Holds if this impl is const.
|
||||
*/
|
||||
predicate isConst() { Synth::convertImplToRaw(this).(Raw::Impl).isConst() }
|
||||
|
||||
/**
|
||||
* Holds if this impl is default.
|
||||
*/
|
||||
predicate isDefault() { Synth::convertImplToRaw(this).(Raw::Impl).isDefault() }
|
||||
|
||||
/**
|
||||
* Holds if this impl is unsafe.
|
||||
*/
|
||||
predicate isUnsafe() { Synth::convertImplToRaw(this).(Raw::Impl).isUnsafe() }
|
||||
|
||||
/**
|
||||
* Gets the self ty of this impl, if it exists.
|
||||
*/
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
private import codeql.rust.elements.internal.generated.Synth
|
||||
private import codeql.rust.elements.internal.generated.Raw
|
||||
import codeql.rust.elements.internal.AssocItemImpl::Impl as AssocItemImpl
|
||||
import codeql.rust.elements.AstNode
|
||||
import codeql.rust.elements.Attr
|
||||
import codeql.rust.elements.internal.ExternItemImpl::Impl as ExternItemImpl
|
||||
import codeql.rust.elements.internal.ItemImpl::Impl as ItemImpl
|
||||
@@ -77,20 +76,5 @@ module Generated {
|
||||
* Holds if `getTokenTree()` exists.
|
||||
*/
|
||||
final predicate hasTokenTree() { exists(this.getTokenTree()) }
|
||||
|
||||
/**
|
||||
* Gets the expanded of this macro call, if it exists.
|
||||
*/
|
||||
AstNode getExpanded() {
|
||||
result =
|
||||
Synth::convertAstNodeFromRaw(Synth::convertMacroCallToRaw(this)
|
||||
.(Raw::MacroCall)
|
||||
.getExpanded())
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `getExpanded()` exists.
|
||||
*/
|
||||
final predicate hasExpanded() { exists(this.getExpanded()) }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
// generated by codegen, do not edit
|
||||
/**
|
||||
* This module provides the generated definition of `MacroItems`.
|
||||
* INTERNAL: Do not import directly.
|
||||
*/
|
||||
|
||||
private import codeql.rust.elements.internal.generated.Synth
|
||||
private import codeql.rust.elements.internal.generated.Raw
|
||||
import codeql.rust.elements.internal.AstNodeImpl::Impl as AstNodeImpl
|
||||
import codeql.rust.elements.Item
|
||||
|
||||
/**
|
||||
* INTERNAL: This module contains the fully generated definition of `MacroItems` and should not
|
||||
* be referenced directly.
|
||||
*/
|
||||
module Generated {
|
||||
/**
|
||||
* A sequence of items generated by a `MacroCall`. For example:
|
||||
* ```rust
|
||||
* mod foo{
|
||||
* include!("common_definitions.rs");
|
||||
* }
|
||||
* ```
|
||||
* INTERNAL: Do not reference the `Generated::MacroItems` class directly.
|
||||
* Use the subclass `MacroItems`, where the following predicates are available.
|
||||
*/
|
||||
class MacroItems extends Synth::TMacroItems, AstNodeImpl::AstNode {
|
||||
override string getAPrimaryQlClass() { result = "MacroItems" }
|
||||
|
||||
/**
|
||||
* Gets the `index`th item of this macro items (0-based).
|
||||
*/
|
||||
Item getItem(int index) {
|
||||
result =
|
||||
Synth::convertItemFromRaw(Synth::convertMacroItemsToRaw(this)
|
||||
.(Raw::MacroItems)
|
||||
.getItem(index))
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets any of the items of this macro items.
|
||||
*/
|
||||
final Item getAnItem() { result = this.getItem(_) }
|
||||
|
||||
/**
|
||||
* Gets the number of items of this macro items.
|
||||
*/
|
||||
final int getNumberOfItems() { result = count(int i | exists(this.getItem(i))) }
|
||||
}
|
||||
}
|
||||
@@ -1,64 +0,0 @@
|
||||
// generated by codegen, do not edit
|
||||
/**
|
||||
* This module provides the generated definition of `MacroStmts`.
|
||||
* INTERNAL: Do not import directly.
|
||||
*/
|
||||
|
||||
private import codeql.rust.elements.internal.generated.Synth
|
||||
private import codeql.rust.elements.internal.generated.Raw
|
||||
import codeql.rust.elements.internal.AstNodeImpl::Impl as AstNodeImpl
|
||||
import codeql.rust.elements.Expr
|
||||
import codeql.rust.elements.Stmt
|
||||
|
||||
/**
|
||||
* INTERNAL: This module contains the fully generated definition of `MacroStmts` and should not
|
||||
* be referenced directly.
|
||||
*/
|
||||
module Generated {
|
||||
/**
|
||||
* A sequence of statements generated by a `MacroCall`. For example:
|
||||
* ```rust
|
||||
* fn main() {
|
||||
* println!("Hello, world!"); // This macro expands into a list of statements
|
||||
* }
|
||||
* ```
|
||||
* INTERNAL: Do not reference the `Generated::MacroStmts` class directly.
|
||||
* Use the subclass `MacroStmts`, where the following predicates are available.
|
||||
*/
|
||||
class MacroStmts extends Synth::TMacroStmts, AstNodeImpl::AstNode {
|
||||
override string getAPrimaryQlClass() { result = "MacroStmts" }
|
||||
|
||||
/**
|
||||
* Gets the expression of this macro statements, if it exists.
|
||||
*/
|
||||
Expr getExpr() {
|
||||
result =
|
||||
Synth::convertExprFromRaw(Synth::convertMacroStmtsToRaw(this).(Raw::MacroStmts).getExpr())
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `getExpr()` exists.
|
||||
*/
|
||||
final predicate hasExpr() { exists(this.getExpr()) }
|
||||
|
||||
/**
|
||||
* Gets the `index`th statement of this macro statements (0-based).
|
||||
*/
|
||||
Stmt getStatement(int index) {
|
||||
result =
|
||||
Synth::convertStmtFromRaw(Synth::convertMacroStmtsToRaw(this)
|
||||
.(Raw::MacroStmts)
|
||||
.getStatement(index))
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets any of the statements of this macro statements.
|
||||
*/
|
||||
final Stmt getAStatement() { result = this.getStatement(_) }
|
||||
|
||||
/**
|
||||
* Gets the number of statements of this macro statements.
|
||||
*/
|
||||
final int getNumberOfStatements() { result = count(int i | exists(this.getStatement(i))) }
|
||||
}
|
||||
}
|
||||
@@ -39,11 +39,6 @@ module Generated {
|
||||
*/
|
||||
final predicate hasExpr() { exists(this.getExpr()) }
|
||||
|
||||
/**
|
||||
* Holds if this meta is unsafe.
|
||||
*/
|
||||
predicate isUnsafe() { Synth::convertMetaToRaw(this).(Raw::Meta).isUnsafe() }
|
||||
|
||||
/**
|
||||
* Gets the path of this meta, if it exists.
|
||||
*/
|
||||
|
||||
@@ -6,8 +6,10 @@
|
||||
|
||||
private import codeql.rust.elements.internal.generated.Synth
|
||||
private import codeql.rust.elements.internal.generated.Raw
|
||||
import codeql.rust.elements.internal.CallExprBaseImpl::Impl as CallExprBaseImpl
|
||||
import codeql.rust.elements.ArgList
|
||||
import codeql.rust.elements.Attr
|
||||
import codeql.rust.elements.Expr
|
||||
import codeql.rust.elements.internal.ExprImpl::Impl as ExprImpl
|
||||
import codeql.rust.elements.GenericArgList
|
||||
import codeql.rust.elements.NameRef
|
||||
|
||||
@@ -25,9 +27,44 @@ module Generated {
|
||||
* INTERNAL: Do not reference the `Generated::MethodCallExpr` class directly.
|
||||
* Use the subclass `MethodCallExpr`, where the following predicates are available.
|
||||
*/
|
||||
class MethodCallExpr extends Synth::TMethodCallExpr, CallExprBaseImpl::CallExprBase {
|
||||
class MethodCallExpr extends Synth::TMethodCallExpr, ExprImpl::Expr {
|
||||
override string getAPrimaryQlClass() { result = "MethodCallExpr" }
|
||||
|
||||
/**
|
||||
* Gets the argument list of this method call expression, if it exists.
|
||||
*/
|
||||
ArgList getArgList() {
|
||||
result =
|
||||
Synth::convertArgListFromRaw(Synth::convertMethodCallExprToRaw(this)
|
||||
.(Raw::MethodCallExpr)
|
||||
.getArgList())
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `getArgList()` exists.
|
||||
*/
|
||||
final predicate hasArgList() { exists(this.getArgList()) }
|
||||
|
||||
/**
|
||||
* Gets the `index`th attr of this method call expression (0-based).
|
||||
*/
|
||||
Attr getAttr(int index) {
|
||||
result =
|
||||
Synth::convertAttrFromRaw(Synth::convertMethodCallExprToRaw(this)
|
||||
.(Raw::MethodCallExpr)
|
||||
.getAttr(index))
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets any of the attrs of this method call expression.
|
||||
*/
|
||||
final Attr getAnAttr() { result = this.getAttr(_) }
|
||||
|
||||
/**
|
||||
* Gets the number of attrs of this method call expression.
|
||||
*/
|
||||
final int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) }
|
||||
|
||||
/**
|
||||
* Gets the generic argument list of this method call expression, if it exists.
|
||||
*/
|
||||
|
||||
@@ -398,43 +398,6 @@ private module Impl {
|
||||
)
|
||||
}
|
||||
|
||||
private Element getImmediateChildOfMacroItems(MacroItems e, int index, string partialPredicateCall) {
|
||||
exists(int b, int bAstNode, int n, int nItem |
|
||||
b = 0 and
|
||||
bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and
|
||||
n = bAstNode and
|
||||
nItem = n + 1 + max(int i | i = -1 or exists(e.getItem(i)) | i) and
|
||||
(
|
||||
none()
|
||||
or
|
||||
result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall)
|
||||
or
|
||||
result = e.getItem(index - n) and
|
||||
partialPredicateCall = "Item(" + (index - n).toString() + ")"
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
private Element getImmediateChildOfMacroStmts(MacroStmts e, int index, string partialPredicateCall) {
|
||||
exists(int b, int bAstNode, int n, int nExpr, int nStatement |
|
||||
b = 0 and
|
||||
bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and
|
||||
n = bAstNode and
|
||||
nExpr = n + 1 and
|
||||
nStatement = nExpr + 1 + max(int i | i = -1 or exists(e.getStatement(i)) | i) and
|
||||
(
|
||||
none()
|
||||
or
|
||||
result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall)
|
||||
or
|
||||
index = n and result = e.getExpr() and partialPredicateCall = "Expr()"
|
||||
or
|
||||
result = e.getStatement(index - nExpr) and
|
||||
partialPredicateCall = "Statement(" + (index - nExpr).toString() + ")"
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
private Element getImmediateChildOfMatchArm(MatchArm e, int index, string partialPredicateCall) {
|
||||
exists(int b, int bAstNode, int n, int nAttr, int nExpr, int nGuard, int nPat |
|
||||
b = 0 and
|
||||
@@ -1417,15 +1380,14 @@ private module Impl {
|
||||
)
|
||||
}
|
||||
|
||||
private Element getImmediateChildOfCallExprBase(
|
||||
CallExprBase e, int index, string partialPredicateCall
|
||||
) {
|
||||
exists(int b, int bExpr, int n, int nArgList, int nAttr |
|
||||
private Element getImmediateChildOfCallExpr(CallExpr e, int index, string partialPredicateCall) {
|
||||
exists(int b, int bExpr, int n, int nArgList, int nAttr, int nExpr |
|
||||
b = 0 and
|
||||
bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and
|
||||
n = bExpr and
|
||||
nArgList = n + 1 and
|
||||
nAttr = nArgList + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and
|
||||
nExpr = nAttr + 1 and
|
||||
(
|
||||
none()
|
||||
or
|
||||
@@ -1435,6 +1397,8 @@ private module Impl {
|
||||
or
|
||||
result = e.getAttr(index - nArgList) and
|
||||
partialPredicateCall = "Attr(" + (index - nArgList).toString() + ")"
|
||||
or
|
||||
index = nAttr and result = e.getExpr() and partialPredicateCall = "Expr()"
|
||||
)
|
||||
)
|
||||
}
|
||||
@@ -2094,6 +2058,42 @@ private module Impl {
|
||||
)
|
||||
}
|
||||
|
||||
private Element getImmediateChildOfMethodCallExpr(
|
||||
MethodCallExpr e, int index, string partialPredicateCall
|
||||
) {
|
||||
exists(
|
||||
int b, int bExpr, int n, int nArgList, int nAttr, int nGenericArgList, int nNameRef,
|
||||
int nReceiver
|
||||
|
|
||||
b = 0 and
|
||||
bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and
|
||||
n = bExpr and
|
||||
nArgList = n + 1 and
|
||||
nAttr = nArgList + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and
|
||||
nGenericArgList = nAttr + 1 and
|
||||
nNameRef = nGenericArgList + 1 and
|
||||
nReceiver = nNameRef + 1 and
|
||||
(
|
||||
none()
|
||||
or
|
||||
result = getImmediateChildOfExpr(e, index - b, partialPredicateCall)
|
||||
or
|
||||
index = n and result = e.getArgList() and partialPredicateCall = "ArgList()"
|
||||
or
|
||||
result = e.getAttr(index - nArgList) and
|
||||
partialPredicateCall = "Attr(" + (index - nArgList).toString() + ")"
|
||||
or
|
||||
index = nAttr and
|
||||
result = e.getGenericArgList() and
|
||||
partialPredicateCall = "GenericArgList()"
|
||||
or
|
||||
index = nGenericArgList and result = e.getNameRef() and partialPredicateCall = "NameRef()"
|
||||
or
|
||||
index = nNameRef and result = e.getReceiver() and partialPredicateCall = "Receiver()"
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
private Element getImmediateChildOfNeverType(NeverType e, int index, string partialPredicateCall) {
|
||||
exists(int b, int bTypeRef, int n |
|
||||
b = 0 and
|
||||
@@ -2780,23 +2780,6 @@ private module Impl {
|
||||
)
|
||||
}
|
||||
|
||||
private Element getImmediateChildOfCallExpr(CallExpr e, int index, string partialPredicateCall) {
|
||||
exists(int b, int bCallExprBase, int n, int nExpr |
|
||||
b = 0 and
|
||||
bCallExprBase =
|
||||
b + 1 + max(int i | i = -1 or exists(getImmediateChildOfCallExprBase(e, i, _)) | i) and
|
||||
n = bCallExprBase and
|
||||
nExpr = n + 1 and
|
||||
(
|
||||
none()
|
||||
or
|
||||
result = getImmediateChildOfCallExprBase(e, index - b, partialPredicateCall)
|
||||
or
|
||||
index = n and result = e.getExpr() and partialPredicateCall = "Expr()"
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
private Element getImmediateChildOfConst(Const e, int index, string partialPredicateCall) {
|
||||
exists(
|
||||
int b, int bAssocItem, int bItem, int n, int nAttr, int nBody, int nName, int nTy,
|
||||
@@ -3028,8 +3011,7 @@ private module Impl {
|
||||
|
||||
private Element getImmediateChildOfMacroCall(MacroCall e, int index, string partialPredicateCall) {
|
||||
exists(
|
||||
int b, int bAssocItem, int bExternItem, int bItem, int n, int nAttr, int nPath,
|
||||
int nTokenTree, int nExpanded
|
||||
int b, int bAssocItem, int bExternItem, int bItem, int n, int nAttr, int nPath, int nTokenTree
|
||||
|
|
||||
b = 0 and
|
||||
bAssocItem = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAssocItem(e, i, _)) | i) and
|
||||
@@ -3040,7 +3022,6 @@ private module Impl {
|
||||
nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and
|
||||
nPath = nAttr + 1 and
|
||||
nTokenTree = nPath + 1 and
|
||||
nExpanded = nTokenTree + 1 and
|
||||
(
|
||||
none()
|
||||
or
|
||||
@@ -3056,8 +3037,6 @@ private module Impl {
|
||||
index = nAttr and result = e.getPath() and partialPredicateCall = "Path()"
|
||||
or
|
||||
index = nPath and result = e.getTokenTree() and partialPredicateCall = "TokenTree()"
|
||||
or
|
||||
index = nTokenTree and result = e.getExpanded() and partialPredicateCall = "Expanded()"
|
||||
)
|
||||
)
|
||||
}
|
||||
@@ -3117,31 +3096,6 @@ private module Impl {
|
||||
)
|
||||
}
|
||||
|
||||
private Element getImmediateChildOfMethodCallExpr(
|
||||
MethodCallExpr e, int index, string partialPredicateCall
|
||||
) {
|
||||
exists(int b, int bCallExprBase, int n, int nGenericArgList, int nNameRef, int nReceiver |
|
||||
b = 0 and
|
||||
bCallExprBase =
|
||||
b + 1 + max(int i | i = -1 or exists(getImmediateChildOfCallExprBase(e, i, _)) | i) and
|
||||
n = bCallExprBase and
|
||||
nGenericArgList = n + 1 and
|
||||
nNameRef = nGenericArgList + 1 and
|
||||
nReceiver = nNameRef + 1 and
|
||||
(
|
||||
none()
|
||||
or
|
||||
result = getImmediateChildOfCallExprBase(e, index - b, partialPredicateCall)
|
||||
or
|
||||
index = n and result = e.getGenericArgList() and partialPredicateCall = "GenericArgList()"
|
||||
or
|
||||
index = nGenericArgList and result = e.getNameRef() and partialPredicateCall = "NameRef()"
|
||||
or
|
||||
index = nNameRef and result = e.getReceiver() and partialPredicateCall = "Receiver()"
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
private Element getImmediateChildOfModule(Module e, int index, string partialPredicateCall) {
|
||||
exists(int b, int bItem, int n, int nAttr, int nItemList, int nName, int nVisibility |
|
||||
b = 0 and
|
||||
@@ -3481,10 +3435,6 @@ private module Impl {
|
||||
or
|
||||
result = getImmediateChildOfLifetime(e, index, partialAccessor)
|
||||
or
|
||||
result = getImmediateChildOfMacroItems(e, index, partialAccessor)
|
||||
or
|
||||
result = getImmediateChildOfMacroStmts(e, index, partialAccessor)
|
||||
or
|
||||
result = getImmediateChildOfMatchArm(e, index, partialAccessor)
|
||||
or
|
||||
result = getImmediateChildOfMatchArmList(e, index, partialAccessor)
|
||||
@@ -3569,6 +3519,8 @@ private module Impl {
|
||||
or
|
||||
result = getImmediateChildOfBreakExpr(e, index, partialAccessor)
|
||||
or
|
||||
result = getImmediateChildOfCallExpr(e, index, partialAccessor)
|
||||
or
|
||||
result = getImmediateChildOfCastExpr(e, index, partialAccessor)
|
||||
or
|
||||
result = getImmediateChildOfClosureExpr(e, index, partialAccessor)
|
||||
@@ -3629,6 +3581,8 @@ private module Impl {
|
||||
or
|
||||
result = getImmediateChildOfMatchExpr(e, index, partialAccessor)
|
||||
or
|
||||
result = getImmediateChildOfMethodCallExpr(e, index, partialAccessor)
|
||||
or
|
||||
result = getImmediateChildOfNeverType(e, index, partialAccessor)
|
||||
or
|
||||
result = getImmediateChildOfOffsetOfExpr(e, index, partialAccessor)
|
||||
@@ -3701,8 +3655,6 @@ private module Impl {
|
||||
or
|
||||
result = getImmediateChildOfYieldExpr(e, index, partialAccessor)
|
||||
or
|
||||
result = getImmediateChildOfCallExpr(e, index, partialAccessor)
|
||||
or
|
||||
result = getImmediateChildOfConst(e, index, partialAccessor)
|
||||
or
|
||||
result = getImmediateChildOfEnum(e, index, partialAccessor)
|
||||
@@ -3721,8 +3673,6 @@ private module Impl {
|
||||
or
|
||||
result = getImmediateChildOfMacroRules(e, index, partialAccessor)
|
||||
or
|
||||
result = getImmediateChildOfMethodCallExpr(e, index, partialAccessor)
|
||||
or
|
||||
result = getImmediateChildOfModule(e, index, partialAccessor)
|
||||
or
|
||||
result = getImmediateChildOfStatic(e, index, partialAccessor)
|
||||
|
||||
@@ -25,16 +25,6 @@ module Generated {
|
||||
class PtrType extends Synth::TPtrType, TypeRefImpl::TypeRef {
|
||||
override string getAPrimaryQlClass() { result = "PtrType" }
|
||||
|
||||
/**
|
||||
* Holds if this ptr type is const.
|
||||
*/
|
||||
predicate isConst() { Synth::convertPtrTypeToRaw(this).(Raw::PtrType).isConst() }
|
||||
|
||||
/**
|
||||
* Holds if this ptr type is mut.
|
||||
*/
|
||||
predicate isMut() { Synth::convertPtrTypeToRaw(this).(Raw::PtrType).isMut() }
|
||||
|
||||
/**
|
||||
* Gets the ty of this ptr type, if it exists.
|
||||
*/
|
||||
|
||||
@@ -329,47 +329,6 @@ module Raw {
|
||||
string getText() { lifetime_texts(this, result) }
|
||||
}
|
||||
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
* A sequence of items generated by a `MacroCall`. For example:
|
||||
* ```rust
|
||||
* mod foo{
|
||||
* include!("common_definitions.rs");
|
||||
* }
|
||||
* ```
|
||||
*/
|
||||
class MacroItems extends @macro_items, AstNode {
|
||||
override string toString() { result = "MacroItems" }
|
||||
|
||||
/**
|
||||
* Gets the `index`th item of this macro items (0-based).
|
||||
*/
|
||||
Item getItem(int index) { macro_items_items(this, index, result) }
|
||||
}
|
||||
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
* A sequence of statements generated by a `MacroCall`. For example:
|
||||
* ```rust
|
||||
* fn main() {
|
||||
* println!("Hello, world!"); // This macro expands into a list of statements
|
||||
* }
|
||||
* ```
|
||||
*/
|
||||
class MacroStmts extends @macro_stmts, AstNode {
|
||||
override string toString() { result = "MacroStmts" }
|
||||
|
||||
/**
|
||||
* Gets the expression of this macro statements, if it exists.
|
||||
*/
|
||||
Expr getExpr() { macro_stmts_exprs(this, result) }
|
||||
|
||||
/**
|
||||
* Gets the `index`th statement of this macro statements (0-based).
|
||||
*/
|
||||
Stmt getStatement(int index) { macro_stmts_statements(this, index, result) }
|
||||
}
|
||||
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
* A match arm. For example:
|
||||
@@ -462,11 +421,6 @@ module Raw {
|
||||
*/
|
||||
Expr getExpr() { meta_exprs(this, result) }
|
||||
|
||||
/**
|
||||
* Holds if this meta is unsafe.
|
||||
*/
|
||||
predicate isUnsafe() { meta_is_unsafe(this) }
|
||||
|
||||
/**
|
||||
* Gets the path of this meta, if it exists.
|
||||
*/
|
||||
@@ -818,11 +772,6 @@ module Raw {
|
||||
*/
|
||||
Attr getAttr(int index) { self_param_attrs(this, index, result) }
|
||||
|
||||
/**
|
||||
* Holds if this self parameter is mut.
|
||||
*/
|
||||
predicate isMut() { self_param_is_mut(this) }
|
||||
|
||||
/**
|
||||
* Gets the lifetime of this self parameter, if it exists.
|
||||
*/
|
||||
@@ -950,16 +899,6 @@ module Raw {
|
||||
*/
|
||||
GenericParamList getGenericParamList() { type_bound_generic_param_lists(this, result) }
|
||||
|
||||
/**
|
||||
* Holds if this type bound is async.
|
||||
*/
|
||||
predicate isAsync() { type_bound_is_async(this) }
|
||||
|
||||
/**
|
||||
* Holds if this type bound is const.
|
||||
*/
|
||||
predicate isConst() { type_bound_is_const(this) }
|
||||
|
||||
/**
|
||||
* Gets the lifetime of this type bound, if it exists.
|
||||
*/
|
||||
@@ -1381,36 +1320,6 @@ module Raw {
|
||||
*/
|
||||
Attr getAttr(int index) { block_expr_attrs(this, index, result) }
|
||||
|
||||
/**
|
||||
* Holds if this block expression is async.
|
||||
*/
|
||||
predicate isAsync() { block_expr_is_async(this) }
|
||||
|
||||
/**
|
||||
* Holds if this block expression is const.
|
||||
*/
|
||||
predicate isConst() { block_expr_is_const(this) }
|
||||
|
||||
/**
|
||||
* Holds if this block expression is gen.
|
||||
*/
|
||||
predicate isGen() { block_expr_is_gen(this) }
|
||||
|
||||
/**
|
||||
* Holds if this block expression is move.
|
||||
*/
|
||||
predicate isMove() { block_expr_is_move(this) }
|
||||
|
||||
/**
|
||||
* Holds if this block expression is try.
|
||||
*/
|
||||
predicate isTry() { block_expr_is_try(this) }
|
||||
|
||||
/**
|
||||
* Holds if this block expression is unsafe.
|
||||
*/
|
||||
predicate isUnsafe() { block_expr_is_unsafe(this) }
|
||||
|
||||
/**
|
||||
* Gets the label of this block expression, if it exists.
|
||||
*/
|
||||
@@ -1488,18 +1397,31 @@ module Raw {
|
||||
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
* A function or method call expression. See `CallExpr` and `MethodCallExpr` for further details.
|
||||
* A function call expression. For example:
|
||||
* ```rust
|
||||
* foo(42);
|
||||
* foo::<u32, u64>(42);
|
||||
* foo[0](42);
|
||||
* foo(1) = 4;
|
||||
* ```
|
||||
*/
|
||||
class CallExprBase extends @call_expr_base, Expr {
|
||||
/**
|
||||
* Gets the argument list of this call expression base, if it exists.
|
||||
*/
|
||||
ArgList getArgList() { call_expr_base_arg_lists(this, result) }
|
||||
class CallExpr extends @call_expr, Expr {
|
||||
override string toString() { result = "CallExpr" }
|
||||
|
||||
/**
|
||||
* Gets the `index`th attr of this call expression base (0-based).
|
||||
* Gets the argument list of this call expression, if it exists.
|
||||
*/
|
||||
Attr getAttr(int index) { call_expr_base_attrs(this, index, result) }
|
||||
ArgList getArgList() { call_expr_arg_lists(this, result) }
|
||||
|
||||
/**
|
||||
* Gets the `index`th attr of this call expression (0-based).
|
||||
*/
|
||||
Attr getAttr(int index) { call_expr_attrs(this, index, result) }
|
||||
|
||||
/**
|
||||
* Gets the expression of this call expression, if it exists.
|
||||
*/
|
||||
Expr getExpr() { call_expr_exprs(this, result) }
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1559,31 +1481,6 @@ module Raw {
|
||||
*/
|
||||
ClosureBinder getClosureBinder() { closure_expr_closure_binders(this, result) }
|
||||
|
||||
/**
|
||||
* Holds if this closure expression is async.
|
||||
*/
|
||||
predicate isAsync() { closure_expr_is_async(this) }
|
||||
|
||||
/**
|
||||
* Holds if this closure expression is const.
|
||||
*/
|
||||
predicate isConst() { closure_expr_is_const(this) }
|
||||
|
||||
/**
|
||||
* Holds if this closure expression is gen.
|
||||
*/
|
||||
predicate isGen() { closure_expr_is_gen(this) }
|
||||
|
||||
/**
|
||||
* Holds if this closure expression is move.
|
||||
*/
|
||||
predicate isMove() { closure_expr_is_move(this) }
|
||||
|
||||
/**
|
||||
* Holds if this closure expression is static.
|
||||
*/
|
||||
predicate isStatic() { closure_expr_is_static(this) }
|
||||
|
||||
/**
|
||||
* Gets the parameter list of this closure expression, if it exists.
|
||||
*/
|
||||
@@ -1650,11 +1547,6 @@ module Raw {
|
||||
* Gets the block expression of this const block pat, if it exists.
|
||||
*/
|
||||
BlockExpr getBlockExpr() { const_block_pat_block_exprs(this, result) }
|
||||
|
||||
/**
|
||||
* Holds if this const block pat is const.
|
||||
*/
|
||||
predicate isConst() { const_block_pat_is_const(this) }
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1677,11 +1569,6 @@ module Raw {
|
||||
*/
|
||||
ConstArg getDefaultVal() { const_param_default_vals(this, result) }
|
||||
|
||||
/**
|
||||
* Holds if this const parameter is const.
|
||||
*/
|
||||
predicate isConst() { const_param_is_const(this) }
|
||||
|
||||
/**
|
||||
* Gets the name of this const parameter, if it exists.
|
||||
*/
|
||||
@@ -1800,21 +1687,6 @@ module Raw {
|
||||
*/
|
||||
Abi getAbi() { fn_ptr_type_abis(this, result) }
|
||||
|
||||
/**
|
||||
* Holds if this fn ptr type is async.
|
||||
*/
|
||||
predicate isAsync() { fn_ptr_type_is_async(this) }
|
||||
|
||||
/**
|
||||
* Holds if this fn ptr type is const.
|
||||
*/
|
||||
predicate isConst() { fn_ptr_type_is_const(this) }
|
||||
|
||||
/**
|
||||
* Holds if this fn ptr type is unsafe.
|
||||
*/
|
||||
predicate isUnsafe() { fn_ptr_type_is_unsafe(this) }
|
||||
|
||||
/**
|
||||
* Gets the parameter list of this fn ptr type, if it exists.
|
||||
*/
|
||||
@@ -1933,16 +1805,6 @@ module Raw {
|
||||
*/
|
||||
Attr getAttr(int index) { ident_pat_attrs(this, index, result) }
|
||||
|
||||
/**
|
||||
* Holds if this ident pat is mut.
|
||||
*/
|
||||
predicate isMut() { ident_pat_is_mut(this) }
|
||||
|
||||
/**
|
||||
* Holds if this ident pat is reference.
|
||||
*/
|
||||
predicate isRef() { ident_pat_is_ref(this) }
|
||||
|
||||
/**
|
||||
* Gets the name of this ident pat, if it exists.
|
||||
*/
|
||||
@@ -2344,6 +2206,43 @@ module Raw {
|
||||
MatchArmList getMatchArmList() { match_expr_match_arm_lists(this, result) }
|
||||
}
|
||||
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
* A method call expression. For example:
|
||||
* ```rust
|
||||
* x.foo(42);
|
||||
* x.foo::<u32, u64>(42);
|
||||
* ```
|
||||
*/
|
||||
class MethodCallExpr extends @method_call_expr, Expr {
|
||||
override string toString() { result = "MethodCallExpr" }
|
||||
|
||||
/**
|
||||
* Gets the argument list of this method call expression, if it exists.
|
||||
*/
|
||||
ArgList getArgList() { method_call_expr_arg_lists(this, result) }
|
||||
|
||||
/**
|
||||
* Gets the `index`th attr of this method call expression (0-based).
|
||||
*/
|
||||
Attr getAttr(int index) { method_call_expr_attrs(this, index, result) }
|
||||
|
||||
/**
|
||||
* Gets the generic argument list of this method call expression, if it exists.
|
||||
*/
|
||||
GenericArgList getGenericArgList() { method_call_expr_generic_arg_lists(this, result) }
|
||||
|
||||
/**
|
||||
* Gets the name reference of this method call expression, if it exists.
|
||||
*/
|
||||
NameRef getNameRef() { method_call_expr_name_refs(this, result) }
|
||||
|
||||
/**
|
||||
* Gets the receiver of this method call expression, if it exists.
|
||||
*/
|
||||
Expr getReceiver() { method_call_expr_receivers(this, result) }
|
||||
}
|
||||
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
* A NeverType. For example:
|
||||
@@ -2549,16 +2448,6 @@ module Raw {
|
||||
class PtrType extends @ptr_type, TypeRef {
|
||||
override string toString() { result = "PtrType" }
|
||||
|
||||
/**
|
||||
* Holds if this ptr type is const.
|
||||
*/
|
||||
predicate isConst() { ptr_type_is_const(this) }
|
||||
|
||||
/**
|
||||
* Holds if this ptr type is mut.
|
||||
*/
|
||||
predicate isMut() { ptr_type_is_mut(this) }
|
||||
|
||||
/**
|
||||
* Gets the ty of this ptr type, if it exists.
|
||||
*/
|
||||
@@ -2719,21 +2608,6 @@ module Raw {
|
||||
* Gets the expression of this reference expression, if it exists.
|
||||
*/
|
||||
Expr getExpr() { ref_expr_exprs(this, result) }
|
||||
|
||||
/**
|
||||
* Holds if this reference expression is const.
|
||||
*/
|
||||
predicate isConst() { ref_expr_is_const(this) }
|
||||
|
||||
/**
|
||||
* Holds if this reference expression is mut.
|
||||
*/
|
||||
predicate isMut() { ref_expr_is_mut(this) }
|
||||
|
||||
/**
|
||||
* Holds if this reference expression is raw.
|
||||
*/
|
||||
predicate isRaw() { ref_expr_is_raw(this) }
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2749,11 +2623,6 @@ module Raw {
|
||||
class RefPat extends @ref_pat, Pat {
|
||||
override string toString() { result = "RefPat" }
|
||||
|
||||
/**
|
||||
* Holds if this reference pat is mut.
|
||||
*/
|
||||
predicate isMut() { ref_pat_is_mut(this) }
|
||||
|
||||
/**
|
||||
* Gets the pat of this reference pat, if it exists.
|
||||
*/
|
||||
@@ -2770,11 +2639,6 @@ module Raw {
|
||||
class RefType extends @ref_type, TypeRef {
|
||||
override string toString() { result = "RefType" }
|
||||
|
||||
/**
|
||||
* Holds if this reference type is mut.
|
||||
*/
|
||||
predicate isMut() { ref_type_is_mut(this) }
|
||||
|
||||
/**
|
||||
* Gets the lifetime of this reference type, if it exists.
|
||||
*/
|
||||
@@ -3135,25 +2999,6 @@ module Raw {
|
||||
Expr getExpr() { yield_expr_exprs(this, result) }
|
||||
}
|
||||
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
* A function call expression. For example:
|
||||
* ```rust
|
||||
* foo(42);
|
||||
* foo::<u32, u64>(42);
|
||||
* foo[0](42);
|
||||
* foo(1) = 4;
|
||||
* ```
|
||||
*/
|
||||
class CallExpr extends @call_expr, CallExprBase {
|
||||
override string toString() { result = "CallExpr" }
|
||||
|
||||
/**
|
||||
* Gets the expression of this call expression, if it exists.
|
||||
*/
|
||||
Expr getExpr() { call_expr_exprs(this, result) }
|
||||
}
|
||||
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
* A Const. For example:
|
||||
@@ -3174,16 +3019,6 @@ module Raw {
|
||||
*/
|
||||
Expr getBody() { const_bodies(this, result) }
|
||||
|
||||
/**
|
||||
* Holds if this const is const.
|
||||
*/
|
||||
predicate isConst() { const_is_const(this) }
|
||||
|
||||
/**
|
||||
* Holds if this const is default.
|
||||
*/
|
||||
predicate isDefault() { const_is_default(this) }
|
||||
|
||||
/**
|
||||
* Gets the name of this const, if it exists.
|
||||
*/
|
||||
@@ -3265,11 +3100,6 @@ module Raw {
|
||||
* Gets the extern item list of this extern block, if it exists.
|
||||
*/
|
||||
ExternItemList getExternItemList() { extern_block_extern_item_lists(this, result) }
|
||||
|
||||
/**
|
||||
* Holds if this extern block is unsafe.
|
||||
*/
|
||||
predicate isUnsafe() { extern_block_is_unsafe(this) }
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -3339,31 +3169,6 @@ module Raw {
|
||||
*/
|
||||
GenericParamList getGenericParamList() { function_generic_param_lists(this, result) }
|
||||
|
||||
/**
|
||||
* Holds if this function is async.
|
||||
*/
|
||||
predicate isAsync() { function_is_async(this) }
|
||||
|
||||
/**
|
||||
* Holds if this function is const.
|
||||
*/
|
||||
predicate isConst() { function_is_const(this) }
|
||||
|
||||
/**
|
||||
* Holds if this function is default.
|
||||
*/
|
||||
predicate isDefault() { function_is_default(this) }
|
||||
|
||||
/**
|
||||
* Holds if this function is gen.
|
||||
*/
|
||||
predicate isGen() { function_is_gen(this) }
|
||||
|
||||
/**
|
||||
* Holds if this function is unsafe.
|
||||
*/
|
||||
predicate isUnsafe() { function_is_unsafe(this) }
|
||||
|
||||
/**
|
||||
* Gets the name of this function, if it exists.
|
||||
*/
|
||||
@@ -3415,21 +3220,6 @@ module Raw {
|
||||
*/
|
||||
GenericParamList getGenericParamList() { impl_generic_param_lists(this, result) }
|
||||
|
||||
/**
|
||||
* Holds if this impl is const.
|
||||
*/
|
||||
predicate isConst() { impl_is_const(this) }
|
||||
|
||||
/**
|
||||
* Holds if this impl is default.
|
||||
*/
|
||||
predicate isDefault() { impl_is_default(this) }
|
||||
|
||||
/**
|
||||
* Holds if this impl is unsafe.
|
||||
*/
|
||||
predicate isUnsafe() { impl_is_unsafe(this) }
|
||||
|
||||
/**
|
||||
* Gets the self ty of this impl, if it exists.
|
||||
*/
|
||||
@@ -3475,11 +3265,6 @@ module Raw {
|
||||
* Gets the token tree of this macro call, if it exists.
|
||||
*/
|
||||
TokenTree getTokenTree() { macro_call_token_trees(this, result) }
|
||||
|
||||
/**
|
||||
* Gets the expanded of this macro call, if it exists.
|
||||
*/
|
||||
AstNode getExpanded() { macro_call_expandeds(this, result) }
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -3549,33 +3334,6 @@ module Raw {
|
||||
Visibility getVisibility() { macro_rules_visibilities(this, result) }
|
||||
}
|
||||
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
* A method call expression. For example:
|
||||
* ```rust
|
||||
* x.foo(42);
|
||||
* x.foo::<u32, u64>(42);
|
||||
* ```
|
||||
*/
|
||||
class MethodCallExpr extends @method_call_expr, CallExprBase {
|
||||
override string toString() { result = "MethodCallExpr" }
|
||||
|
||||
/**
|
||||
* Gets the generic argument list of this method call expression, if it exists.
|
||||
*/
|
||||
GenericArgList getGenericArgList() { method_call_expr_generic_arg_lists(this, result) }
|
||||
|
||||
/**
|
||||
* Gets the name reference of this method call expression, if it exists.
|
||||
*/
|
||||
NameRef getNameRef() { method_call_expr_name_refs(this, result) }
|
||||
|
||||
/**
|
||||
* Gets the receiver of this method call expression, if it exists.
|
||||
*/
|
||||
Expr getReceiver() { method_call_expr_receivers(this, result) }
|
||||
}
|
||||
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
* A module declaration. For example:
|
||||
@@ -3632,16 +3390,6 @@ module Raw {
|
||||
*/
|
||||
Expr getBody() { static_bodies(this, result) }
|
||||
|
||||
/**
|
||||
* Holds if this static is mut.
|
||||
*/
|
||||
predicate isMut() { static_is_mut(this) }
|
||||
|
||||
/**
|
||||
* Holds if this static is static.
|
||||
*/
|
||||
predicate isStatic() { static_is_static(this) }
|
||||
|
||||
/**
|
||||
* Gets the name of this static, if it exists.
|
||||
*/
|
||||
@@ -3724,16 +3472,6 @@ module Raw {
|
||||
*/
|
||||
GenericParamList getGenericParamList() { trait_generic_param_lists(this, result) }
|
||||
|
||||
/**
|
||||
* Holds if this trait is auto.
|
||||
*/
|
||||
predicate isAuto() { trait_is_auto(this) }
|
||||
|
||||
/**
|
||||
* Holds if this trait is unsafe.
|
||||
*/
|
||||
predicate isUnsafe() { trait_is_unsafe(this) }
|
||||
|
||||
/**
|
||||
* Gets the name of this trait, if it exists.
|
||||
*/
|
||||
@@ -3816,11 +3554,6 @@ module Raw {
|
||||
*/
|
||||
GenericParamList getGenericParamList() { type_alias_generic_param_lists(this, result) }
|
||||
|
||||
/**
|
||||
* Holds if this type alias is default.
|
||||
*/
|
||||
predicate isDefault() { type_alias_is_default(this) }
|
||||
|
||||
/**
|
||||
* Gets the name of this type alias, if it exists.
|
||||
*/
|
||||
|
||||
@@ -58,20 +58,5 @@ module Generated {
|
||||
* Holds if `getExpr()` exists.
|
||||
*/
|
||||
final predicate hasExpr() { exists(this.getExpr()) }
|
||||
|
||||
/**
|
||||
* Holds if this reference expression is const.
|
||||
*/
|
||||
predicate isConst() { Synth::convertRefExprToRaw(this).(Raw::RefExpr).isConst() }
|
||||
|
||||
/**
|
||||
* Holds if this reference expression is mut.
|
||||
*/
|
||||
predicate isMut() { Synth::convertRefExprToRaw(this).(Raw::RefExpr).isMut() }
|
||||
|
||||
/**
|
||||
* Holds if this reference expression is raw.
|
||||
*/
|
||||
predicate isRaw() { Synth::convertRefExprToRaw(this).(Raw::RefExpr).isRaw() }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,11 +28,6 @@ module Generated {
|
||||
class RefPat extends Synth::TRefPat, PatImpl::Pat {
|
||||
override string getAPrimaryQlClass() { result = "RefPat" }
|
||||
|
||||
/**
|
||||
* Holds if this reference pat is mut.
|
||||
*/
|
||||
predicate isMut() { Synth::convertRefPatToRaw(this).(Raw::RefPat).isMut() }
|
||||
|
||||
/**
|
||||
* Gets the pat of this reference pat, if it exists.
|
||||
*/
|
||||
|
||||
@@ -26,11 +26,6 @@ module Generated {
|
||||
class RefType extends Synth::TRefType, TypeRefImpl::TypeRef {
|
||||
override string getAPrimaryQlClass() { result = "RefType" }
|
||||
|
||||
/**
|
||||
* Holds if this reference type is mut.
|
||||
*/
|
||||
predicate isMut() { Synth::convertRefTypeToRaw(this).(Raw::RefType).isMut() }
|
||||
|
||||
/**
|
||||
* Gets the lifetime of this reference type, if it exists.
|
||||
*/
|
||||
|
||||
@@ -46,11 +46,6 @@ module Generated {
|
||||
*/
|
||||
final int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) }
|
||||
|
||||
/**
|
||||
* Holds if this self parameter is mut.
|
||||
*/
|
||||
predicate isMut() { Synth::convertSelfParamToRaw(this).(Raw::SelfParam).isMut() }
|
||||
|
||||
/**
|
||||
* Gets the lifetime of this self parameter, if it exists.
|
||||
*/
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user