mirror of
https://github.com/github/codeql.git
synced 2026-04-23 07:45:17 +02:00
Rust: Add basic data flow through arrays
This commit is contained in:
@@ -623,6 +623,15 @@ private class StructFieldContent extends Content, TStructFieldContent {
|
||||
override string toString() { result = s.toString() + "." + field_.toString() }
|
||||
}
|
||||
|
||||
/**
|
||||
* Content stored at an element in an array.
|
||||
*/
|
||||
final private class ArrayElementContent extends VariantContent, TArrayElement {
|
||||
ArrayElementContent() { this = TArrayElement() }
|
||||
|
||||
override string toString() { result = "array[]" }
|
||||
}
|
||||
|
||||
/**
|
||||
* Content stored at a position in a tuple.
|
||||
*
|
||||
@@ -884,6 +893,24 @@ module RustDataFlow implements InputSig<Location> {
|
||||
node1.asExpr() = access.getExpr() and
|
||||
node2.asExpr() = access
|
||||
)
|
||||
or
|
||||
exists(IndexExprCfgNode arr |
|
||||
c instanceof ArrayElementContent and
|
||||
node1.asExpr() = arr.getBase() and
|
||||
node2.asExpr() = arr
|
||||
)
|
||||
or
|
||||
exists(ForExprCfgNode for |
|
||||
c instanceof ArrayElementContent and
|
||||
node1.asExpr() = for.getIterable() and
|
||||
node2.asPat() = for.getPat()
|
||||
)
|
||||
or
|
||||
exists(SlicePatCfgNode pat |
|
||||
c instanceof ArrayElementContent and
|
||||
node1.asPat() = pat and
|
||||
node2.asPat() = pat.getAPat()
|
||||
)
|
||||
)
|
||||
or
|
||||
FlowSummaryImpl::Private::Steps::summaryReadStep(node1.(Node::FlowSummaryNode).getSummaryNode(),
|
||||
@@ -950,7 +977,20 @@ module RustDataFlow implements InputSig<Location> {
|
||||
node2.asExpr() = tuple
|
||||
)
|
||||
or
|
||||
exists(ArrayExprCfgNode arr |
|
||||
c instanceof ArrayElementContent and
|
||||
node1.asExpr() = arr.getAnExpr() and
|
||||
node2.asExpr() = arr
|
||||
)
|
||||
or
|
||||
tupleAssignment(node1, node2.(PostUpdateNode).getPreUpdateNode(), c)
|
||||
or
|
||||
exists(AssignmentExprCfgNode assignment, IndexExprCfgNode index |
|
||||
c instanceof ArrayElementContent and
|
||||
assignment.getLhs() = index and
|
||||
node1.asExpr() = assignment.getRhs() and
|
||||
node2.(PostUpdateNode).getPreUpdateNode().asExpr() = index.getBase()
|
||||
)
|
||||
)
|
||||
or
|
||||
FlowSummaryImpl::Private::Steps::summaryStoreStep(node1.(Node::FlowSummaryNode).getSummaryNode(),
|
||||
@@ -1050,7 +1090,8 @@ private module Cached {
|
||||
TSourceParameterNode(ParamBaseCfgNode p) or
|
||||
TPatNode(PatCfgNode p) or
|
||||
TExprPostUpdateNode(ExprCfgNode e) {
|
||||
isArgumentForCall(e, _, _) or e = any(FieldExprCfgNode access).getExpr()
|
||||
isArgumentForCall(e, _, _) or
|
||||
e = [any(IndexExprCfgNode i).getBase(), any(FieldExprCfgNode access).getExpr()]
|
||||
} or
|
||||
TSsaNode(SsaImpl::DataFlowIntegration::SsaNode node) or
|
||||
TFlowSummaryNode(FlowSummaryImpl::Private::SummaryNode sn)
|
||||
@@ -1135,6 +1176,7 @@ private module Cached {
|
||||
TVariantFieldContent(VariantCanonicalPath v, string field) {
|
||||
field = v.getVariant().getFieldList().(RecordFieldList).getAField().getName().getText()
|
||||
} or
|
||||
TArrayElement() or
|
||||
TTuplePositionContent(int pos) {
|
||||
pos in [0 .. max([
|
||||
any(TuplePat pat).getNumberOfFields(),
|
||||
|
||||
@@ -467,7 +467,8 @@ module Impl {
|
||||
assignmentExprDescendant(mid) and
|
||||
getImmediateParent(e) = mid and
|
||||
not mid.(PrefixExpr).getOperatorName() = "*" and
|
||||
not mid instanceof FieldExpr
|
||||
not mid instanceof FieldExpr and
|
||||
not mid instanceof IndexExpr
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -388,11 +388,14 @@ localStep
|
||||
| main.rs:351:9:351:19 | [SSA] mut_arr | main.rs:352:10:352:16 | mut_arr |
|
||||
| main.rs:351:9:351:19 | mut_arr | main.rs:351:9:351:19 | [SSA] mut_arr |
|
||||
| main.rs:351:23:351:31 | [...] | main.rs:351:9:351:19 | mut_arr |
|
||||
| main.rs:354:5:354:11 | [SSA] mut_arr | main.rs:355:13:355:19 | mut_arr |
|
||||
| main.rs:354:5:354:11 | mut_arr | main.rs:354:5:354:11 | [SSA] mut_arr |
|
||||
| main.rs:352:10:352:16 | [post] mut_arr | main.rs:354:5:354:11 | mut_arr |
|
||||
| main.rs:352:10:352:16 | mut_arr | main.rs:354:5:354:11 | mut_arr |
|
||||
| main.rs:354:5:354:11 | [post] mut_arr | main.rs:355:13:355:19 | mut_arr |
|
||||
| main.rs:354:5:354:11 | mut_arr | main.rs:355:13:355:19 | mut_arr |
|
||||
| main.rs:354:18:354:27 | source(...) | main.rs:354:5:354:14 | mut_arr[1] |
|
||||
| main.rs:355:9:355:9 | [SSA] d | main.rs:356:10:356:10 | d |
|
||||
| main.rs:355:9:355:9 | d | main.rs:355:9:355:9 | [SSA] d |
|
||||
| main.rs:355:13:355:19 | [post] mut_arr | main.rs:357:10:357:16 | mut_arr |
|
||||
| main.rs:355:13:355:19 | mut_arr | main.rs:357:10:357:16 | mut_arr |
|
||||
| main.rs:355:13:355:22 | mut_arr[1] | main.rs:355:9:355:9 | d |
|
||||
storeStep
|
||||
@@ -436,6 +439,27 @@ storeStep
|
||||
| main.rs:276:41:276:41 | 2 | D | main.rs:276:14:276:43 | ...::D {...} |
|
||||
| main.rs:294:18:294:27 | source(...) | C | main.rs:293:14:295:5 | C {...} |
|
||||
| main.rs:296:27:296:27 | 2 | D | main.rs:296:14:296:29 | D {...} |
|
||||
| main.rs:314:17:314:17 | 1 | array[] | main.rs:314:16:314:33 | [...] |
|
||||
| main.rs:314:20:314:20 | 2 | array[] | main.rs:314:16:314:33 | [...] |
|
||||
| main.rs:314:23:314:32 | source(...) | array[] | main.rs:314:16:314:33 | [...] |
|
||||
| main.rs:318:17:318:26 | source(...) | array[] | main.rs:318:16:318:31 | [...] |
|
||||
| main.rs:318:29:318:30 | 10 | array[] | main.rs:318:16:318:31 | [...] |
|
||||
| main.rs:322:17:322:17 | 1 | array[] | main.rs:322:16:322:24 | [...] |
|
||||
| main.rs:322:20:322:20 | 2 | array[] | main.rs:322:16:322:24 | [...] |
|
||||
| main.rs:322:23:322:23 | 3 | array[] | main.rs:322:16:322:24 | [...] |
|
||||
| main.rs:328:17:328:17 | 1 | array[] | main.rs:328:16:328:33 | [...] |
|
||||
| main.rs:328:20:328:20 | 2 | array[] | main.rs:328:16:328:33 | [...] |
|
||||
| main.rs:328:23:328:32 | source(...) | array[] | main.rs:328:16:328:33 | [...] |
|
||||
| main.rs:333:17:333:17 | 1 | array[] | main.rs:333:16:333:24 | [...] |
|
||||
| main.rs:333:20:333:20 | 2 | array[] | main.rs:333:16:333:24 | [...] |
|
||||
| main.rs:333:23:333:23 | 3 | array[] | main.rs:333:16:333:24 | [...] |
|
||||
| main.rs:340:17:340:17 | 1 | array[] | main.rs:340:16:340:33 | [...] |
|
||||
| main.rs:340:20:340:20 | 2 | array[] | main.rs:340:16:340:33 | [...] |
|
||||
| main.rs:340:23:340:32 | source(...) | array[] | main.rs:340:16:340:33 | [...] |
|
||||
| main.rs:351:24:351:24 | 1 | array[] | main.rs:351:23:351:31 | [...] |
|
||||
| main.rs:351:27:351:27 | 2 | array[] | main.rs:351:23:351:31 | [...] |
|
||||
| main.rs:351:30:351:30 | 3 | array[] | main.rs:351:23:351:31 | [...] |
|
||||
| main.rs:354:18:354:27 | source(...) | array[] | main.rs:354:5:354:11 | [post] mut_arr |
|
||||
| main.rs:364:27:364:27 | 0 | Some | main.rs:364:22:364:28 | Some(...) |
|
||||
readStep
|
||||
| file://:0:0:0:0 | [summary param] self in lang:core::_::<crate::option::Option>::unwrap | Some | file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::option::Option::Some(0)] in lang:core::_::<crate::option::Option>::unwrap |
|
||||
@@ -484,3 +508,15 @@ readStep
|
||||
| main.rs:302:28:302:43 | D {...} | D | main.rs:302:41:302:41 | n |
|
||||
| main.rs:305:9:305:24 | C {...} | C | main.rs:305:22:305:22 | n |
|
||||
| main.rs:306:9:306:24 | D {...} | D | main.rs:306:22:306:22 | n |
|
||||
| main.rs:315:14:315:17 | arr1 | array[] | main.rs:315:14:315:20 | arr1[2] |
|
||||
| main.rs:319:14:319:17 | arr2 | array[] | main.rs:319:14:319:20 | arr2[4] |
|
||||
| main.rs:323:14:323:17 | arr3 | array[] | main.rs:323:14:323:20 | arr3[2] |
|
||||
| main.rs:329:15:329:18 | arr1 | array[] | main.rs:329:9:329:10 | n1 |
|
||||
| main.rs:334:15:334:18 | arr2 | array[] | main.rs:334:9:334:10 | n2 |
|
||||
| main.rs:342:9:342:17 | SlicePat | array[] | main.rs:342:10:342:10 | a |
|
||||
| main.rs:342:9:342:17 | SlicePat | array[] | main.rs:342:13:342:13 | b |
|
||||
| main.rs:342:9:342:17 | SlicePat | array[] | main.rs:342:16:342:16 | c |
|
||||
| main.rs:352:10:352:16 | mut_arr | array[] | main.rs:352:10:352:19 | mut_arr[1] |
|
||||
| main.rs:354:5:354:11 | mut_arr | array[] | main.rs:354:5:354:14 | mut_arr[1] |
|
||||
| main.rs:355:13:355:19 | mut_arr | array[] | main.rs:355:13:355:22 | mut_arr[1] |
|
||||
| main.rs:357:10:357:16 | mut_arr | array[] | main.rs:357:10:357:19 | mut_arr[0] |
|
||||
|
||||
@@ -64,6 +64,32 @@ edges
|
||||
| main.rs:298:22:298:22 | n | main.rs:298:34:298:34 | n | provenance | |
|
||||
| main.rs:302:9:302:24 | C {...} [C] | main.rs:302:22:302:22 | n | provenance | |
|
||||
| main.rs:302:22:302:22 | n | main.rs:302:53:302:53 | n | provenance | |
|
||||
| main.rs:314:16:314:33 | [...] [array[]] | main.rs:315:14:315:17 | arr1 [array[]] | provenance | |
|
||||
| main.rs:314:23:314:32 | source(...) | main.rs:314:16:314:33 | [...] [array[]] | provenance | |
|
||||
| main.rs:315:14:315:17 | arr1 [array[]] | main.rs:315:14:315:20 | arr1[2] | provenance | |
|
||||
| main.rs:315:14:315:20 | arr1[2] | main.rs:316:10:316:11 | n1 | provenance | |
|
||||
| main.rs:318:16:318:31 | [...] [array[]] | main.rs:319:14:319:17 | arr2 [array[]] | provenance | |
|
||||
| main.rs:318:17:318:26 | source(...) | main.rs:318:16:318:31 | [...] [array[]] | provenance | |
|
||||
| main.rs:319:14:319:17 | arr2 [array[]] | main.rs:319:14:319:20 | arr2[4] | provenance | |
|
||||
| main.rs:319:14:319:20 | arr2[4] | main.rs:320:10:320:11 | n2 | provenance | |
|
||||
| main.rs:328:16:328:33 | [...] [array[]] | main.rs:329:15:329:18 | arr1 [array[]] | provenance | |
|
||||
| main.rs:328:23:328:32 | source(...) | main.rs:328:16:328:33 | [...] [array[]] | provenance | |
|
||||
| main.rs:329:9:329:10 | n1 | main.rs:330:14:330:15 | n1 | provenance | |
|
||||
| main.rs:329:15:329:18 | arr1 [array[]] | main.rs:329:9:329:10 | n1 | provenance | |
|
||||
| main.rs:340:16:340:33 | [...] [array[]] | main.rs:342:9:342:17 | SlicePat [array[]] | provenance | |
|
||||
| main.rs:340:23:340:32 | source(...) | main.rs:340:16:340:33 | [...] [array[]] | provenance | |
|
||||
| main.rs:342:9:342:17 | SlicePat [array[]] | main.rs:342:10:342:10 | a | provenance | |
|
||||
| main.rs:342:9:342:17 | SlicePat [array[]] | main.rs:342:13:342:13 | b | provenance | |
|
||||
| main.rs:342:9:342:17 | SlicePat [array[]] | main.rs:342:16:342:16 | c | provenance | |
|
||||
| main.rs:342:10:342:10 | a | main.rs:343:18:343:18 | a | provenance | |
|
||||
| main.rs:342:13:342:13 | b | main.rs:344:18:344:18 | b | provenance | |
|
||||
| main.rs:342:16:342:16 | c | main.rs:345:18:345:18 | c | provenance | |
|
||||
| main.rs:354:5:354:11 | [post] mut_arr [array[]] | main.rs:355:13:355:19 | mut_arr [array[]] | provenance | |
|
||||
| main.rs:354:5:354:11 | [post] mut_arr [array[]] | main.rs:357:10:357:16 | mut_arr [array[]] | provenance | |
|
||||
| main.rs:354:18:354:27 | source(...) | main.rs:354:5:354:11 | [post] mut_arr [array[]] | provenance | |
|
||||
| main.rs:355:13:355:19 | mut_arr [array[]] | main.rs:355:13:355:22 | mut_arr[1] | provenance | |
|
||||
| main.rs:355:13:355:22 | mut_arr[1] | main.rs:356:10:356:10 | d | provenance | |
|
||||
| main.rs:357:10:357:16 | mut_arr [array[]] | main.rs:357:10:357:19 | mut_arr[0] | provenance | |
|
||||
nodes
|
||||
| main.rs:15:10:15:18 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:19:13:19:21 | source(...) | semmle.label | source(...) |
|
||||
@@ -147,6 +173,37 @@ nodes
|
||||
| main.rs:302:9:302:24 | C {...} [C] | semmle.label | C {...} [C] |
|
||||
| main.rs:302:22:302:22 | n | semmle.label | n |
|
||||
| main.rs:302:53:302:53 | n | semmle.label | n |
|
||||
| main.rs:314:16:314:33 | [...] [array[]] | semmle.label | [...] [array[]] |
|
||||
| main.rs:314:23:314:32 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:315:14:315:17 | arr1 [array[]] | semmle.label | arr1 [array[]] |
|
||||
| main.rs:315:14:315:20 | arr1[2] | semmle.label | arr1[2] |
|
||||
| main.rs:316:10:316:11 | n1 | semmle.label | n1 |
|
||||
| main.rs:318:16:318:31 | [...] [array[]] | semmle.label | [...] [array[]] |
|
||||
| main.rs:318:17:318:26 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:319:14:319:17 | arr2 [array[]] | semmle.label | arr2 [array[]] |
|
||||
| main.rs:319:14:319:20 | arr2[4] | semmle.label | arr2[4] |
|
||||
| main.rs:320:10:320:11 | n2 | semmle.label | n2 |
|
||||
| main.rs:328:16:328:33 | [...] [array[]] | semmle.label | [...] [array[]] |
|
||||
| main.rs:328:23:328:32 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:329:9:329:10 | n1 | semmle.label | n1 |
|
||||
| main.rs:329:15:329:18 | arr1 [array[]] | semmle.label | arr1 [array[]] |
|
||||
| main.rs:330:14:330:15 | n1 | semmle.label | n1 |
|
||||
| main.rs:340:16:340:33 | [...] [array[]] | semmle.label | [...] [array[]] |
|
||||
| main.rs:340:23:340:32 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:342:9:342:17 | SlicePat [array[]] | semmle.label | SlicePat [array[]] |
|
||||
| main.rs:342:10:342:10 | a | semmle.label | a |
|
||||
| main.rs:342:13:342:13 | b | semmle.label | b |
|
||||
| main.rs:342:16:342:16 | c | semmle.label | c |
|
||||
| main.rs:343:18:343:18 | a | semmle.label | a |
|
||||
| main.rs:344:18:344:18 | b | semmle.label | b |
|
||||
| main.rs:345:18:345:18 | c | semmle.label | c |
|
||||
| main.rs:354:5:354:11 | [post] mut_arr [array[]] | semmle.label | [post] mut_arr [array[]] |
|
||||
| main.rs:354:18:354:27 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:355:13:355:19 | mut_arr [array[]] | semmle.label | mut_arr [array[]] |
|
||||
| main.rs:355:13:355:22 | mut_arr[1] | semmle.label | mut_arr[1] |
|
||||
| main.rs:356:10:356:10 | d | semmle.label | d |
|
||||
| main.rs:357:10:357:16 | mut_arr [array[]] | semmle.label | mut_arr [array[]] |
|
||||
| main.rs:357:10:357:19 | mut_arr[0] | semmle.label | mut_arr[0] |
|
||||
subpaths
|
||||
testFailures
|
||||
#select
|
||||
@@ -172,3 +229,11 @@ testFailures
|
||||
| main.rs:282:81:282:81 | n | main.rs:274:18:274:27 | source(...) | main.rs:282:81:282:81 | n | $@ | main.rs:274:18:274:27 | source(...) | source(...) |
|
||||
| main.rs:298:34:298:34 | n | main.rs:294:18:294:27 | source(...) | main.rs:298:34:298:34 | n | $@ | main.rs:294:18:294:27 | source(...) | source(...) |
|
||||
| main.rs:302:53:302:53 | n | main.rs:294:18:294:27 | source(...) | main.rs:302:53:302:53 | n | $@ | main.rs:294:18:294:27 | source(...) | source(...) |
|
||||
| main.rs:316:10:316:11 | n1 | main.rs:314:23:314:32 | source(...) | main.rs:316:10:316:11 | n1 | $@ | main.rs:314:23:314:32 | source(...) | source(...) |
|
||||
| main.rs:320:10:320:11 | n2 | main.rs:318:17:318:26 | source(...) | main.rs:320:10:320:11 | n2 | $@ | main.rs:318:17:318:26 | source(...) | source(...) |
|
||||
| main.rs:330:14:330:15 | n1 | main.rs:328:23:328:32 | source(...) | main.rs:330:14:330:15 | n1 | $@ | main.rs:328:23:328:32 | source(...) | source(...) |
|
||||
| main.rs:343:18:343:18 | a | main.rs:340:23:340:32 | source(...) | main.rs:343:18:343:18 | a | $@ | main.rs:340:23:340:32 | source(...) | source(...) |
|
||||
| main.rs:344:18:344:18 | b | main.rs:340:23:340:32 | source(...) | main.rs:344:18:344:18 | b | $@ | main.rs:340:23:340:32 | source(...) | source(...) |
|
||||
| main.rs:345:18:345:18 | c | main.rs:340:23:340:32 | source(...) | main.rs:345:18:345:18 | c | $@ | main.rs:340:23:340:32 | source(...) | source(...) |
|
||||
| main.rs:356:10:356:10 | d | main.rs:354:18:354:27 | source(...) | main.rs:356:10:356:10 | d | $@ | main.rs:354:18:354:27 | source(...) | source(...) |
|
||||
| main.rs:357:10:357:19 | mut_arr[0] | main.rs:354:18:354:27 | source(...) | main.rs:357:10:357:19 | mut_arr[0] | $@ | main.rs:354:18:354:27 | source(...) | source(...) |
|
||||
|
||||
@@ -313,11 +313,11 @@ fn custom_record_enum_pattern_match_unqualified() {
|
||||
fn array_lookup() {
|
||||
let arr1 = [1, 2, source(94)];
|
||||
let n1 = arr1[2];
|
||||
sink(n1); // $ MISSING: hasValueFlow=94
|
||||
sink(n1); // $ hasValueFlow=94
|
||||
|
||||
let arr2 = [source(20); 10];
|
||||
let n2 = arr2[4];
|
||||
sink(n2); // $ MISSING: hasValueFlow=20
|
||||
sink(n2); // $ hasValueFlow=20
|
||||
|
||||
let arr3 = [1, 2, 3];
|
||||
let n3 = arr3[2];
|
||||
@@ -327,7 +327,7 @@ fn array_lookup() {
|
||||
fn array_for_loop() {
|
||||
let arr1 = [1, 2, source(43)];
|
||||
for n1 in arr1 {
|
||||
sink(n1); // $ MISSING: hasValueFlow=43
|
||||
sink(n1); // $ hasValueFlow=43
|
||||
}
|
||||
|
||||
let arr2 = [1, 2, 3];
|
||||
@@ -340,9 +340,9 @@ fn array_slice_pattern() {
|
||||
let arr1 = [1, 2, source(43)];
|
||||
match arr1 {
|
||||
[a, b, c] => {
|
||||
sink(a);
|
||||
sink(b);
|
||||
sink(c); // $ MISSING: hasValueFlow=43
|
||||
sink(a); // $ SPURIOUS: hasValueFlow=43
|
||||
sink(b); // $ SPURIOUS: hasValueFlow=43
|
||||
sink(c); // $ hasValueFlow=43
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -353,8 +353,8 @@ fn array_assignment() {
|
||||
|
||||
mut_arr[1] = source(55);
|
||||
let d = mut_arr[1];
|
||||
sink(d); // $ MISSING: hasValueFlow=55
|
||||
sink(mut_arr[0]);
|
||||
sink(d); // $ hasValueFlow=55
|
||||
sink(mut_arr[0]); // $ SPURIOUS: hasValueFlow=55
|
||||
}
|
||||
|
||||
fn main() {
|
||||
|
||||
@@ -137,7 +137,6 @@ definition
|
||||
| variables.rs:482:15:482:23 | SelfParam | variables.rs:482:20:482:23 | self |
|
||||
| variables.rs:486:11:486:14 | SelfParam | variables.rs:486:11:486:14 | self |
|
||||
| variables.rs:501:9:501:13 | a | variables.rs:501:13:501:13 | a |
|
||||
| variables.rs:503:5:503:5 | a | variables.rs:501:13:501:13 | a |
|
||||
| variables.rs:505:5:505:5 | a | variables.rs:501:13:501:13 | a |
|
||||
| variables.rs:510:9:510:9 | x | variables.rs:510:9:510:9 | x |
|
||||
| variables.rs:514:9:514:9 | z | variables.rs:514:9:514:9 | z |
|
||||
@@ -266,7 +265,8 @@ read
|
||||
| variables.rs:482:15:482:23 | SelfParam | variables.rs:482:20:482:23 | self | variables.rs:483:16:483:19 | self |
|
||||
| variables.rs:486:11:486:14 | SelfParam | variables.rs:486:11:486:14 | self | variables.rs:487:9:487:12 | self |
|
||||
| variables.rs:501:9:501:13 | a | variables.rs:501:13:501:13 | a | variables.rs:502:15:502:15 | a |
|
||||
| variables.rs:503:5:503:5 | a | variables.rs:501:13:501:13 | a | variables.rs:504:15:504:15 | a |
|
||||
| variables.rs:501:9:501:13 | a | variables.rs:501:13:501:13 | a | variables.rs:503:5:503:5 | a |
|
||||
| variables.rs:501:9:501:13 | a | variables.rs:501:13:501:13 | a | variables.rs:504:15:504:15 | a |
|
||||
| variables.rs:505:5:505:5 | a | variables.rs:501:13:501:13 | a | variables.rs:506:15:506:15 | a |
|
||||
| variables.rs:510:9:510:9 | x | variables.rs:510:9:510:9 | x | variables.rs:512:15:512:15 | x |
|
||||
| variables.rs:523:10:523:18 | SelfParam | variables.rs:523:15:523:18 | self | variables.rs:524:6:524:9 | self |
|
||||
@@ -371,7 +371,6 @@ firstRead
|
||||
| variables.rs:482:15:482:23 | SelfParam | variables.rs:482:20:482:23 | self | variables.rs:483:16:483:19 | self |
|
||||
| variables.rs:486:11:486:14 | SelfParam | variables.rs:486:11:486:14 | self | variables.rs:487:9:487:12 | self |
|
||||
| variables.rs:501:9:501:13 | a | variables.rs:501:13:501:13 | a | variables.rs:502:15:502:15 | a |
|
||||
| variables.rs:503:5:503:5 | a | variables.rs:501:13:501:13 | a | variables.rs:504:15:504:15 | a |
|
||||
| variables.rs:505:5:505:5 | a | variables.rs:501:13:501:13 | a | variables.rs:506:15:506:15 | a |
|
||||
| variables.rs:510:9:510:9 | x | variables.rs:510:9:510:9 | x | variables.rs:512:15:512:15 | x |
|
||||
| variables.rs:523:10:523:18 | SelfParam | variables.rs:523:15:523:18 | self | variables.rs:524:6:524:9 | self |
|
||||
@@ -476,8 +475,7 @@ lastRead
|
||||
| variables.rs:462:9:462:9 | x | variables.rs:462:9:462:9 | x | variables.rs:472:19:472:19 | x |
|
||||
| variables.rs:482:15:482:23 | SelfParam | variables.rs:482:20:482:23 | self | variables.rs:483:16:483:19 | self |
|
||||
| variables.rs:486:11:486:14 | SelfParam | variables.rs:486:11:486:14 | self | variables.rs:487:9:487:12 | self |
|
||||
| variables.rs:501:9:501:13 | a | variables.rs:501:13:501:13 | a | variables.rs:502:15:502:15 | a |
|
||||
| variables.rs:503:5:503:5 | a | variables.rs:501:13:501:13 | a | variables.rs:504:15:504:15 | a |
|
||||
| variables.rs:501:9:501:13 | a | variables.rs:501:13:501:13 | a | variables.rs:504:15:504:15 | a |
|
||||
| variables.rs:505:5:505:5 | a | variables.rs:501:13:501:13 | a | variables.rs:506:15:506:15 | a |
|
||||
| variables.rs:510:9:510:9 | x | variables.rs:510:9:510:9 | x | variables.rs:512:15:512:15 | x |
|
||||
| variables.rs:523:10:523:18 | SelfParam | variables.rs:523:15:523:18 | self | variables.rs:524:6:524:9 | self |
|
||||
@@ -508,6 +506,8 @@ adjacentReads
|
||||
| variables.rs:462:9:462:9 | x | variables.rs:462:9:462:9 | x | variables.rs:464:19:464:19 | x | variables.rs:472:19:472:19 | x |
|
||||
| variables.rs:462:9:462:9 | x | variables.rs:462:9:462:9 | x | variables.rs:466:19:466:19 | x | variables.rs:470:19:470:19 | x |
|
||||
| variables.rs:462:9:462:9 | x | variables.rs:462:9:462:9 | x | variables.rs:466:19:466:19 | x | variables.rs:472:19:472:19 | x |
|
||||
| variables.rs:501:9:501:13 | a | variables.rs:501:13:501:13 | a | variables.rs:502:15:502:15 | a | variables.rs:503:5:503:5 | a |
|
||||
| variables.rs:501:9:501:13 | a | variables.rs:501:13:501:13 | a | variables.rs:503:5:503:5 | a | variables.rs:504:15:504:15 | a |
|
||||
phi
|
||||
| variables.rs:191:9:191:44 | [match(true)] phi | variables.rs:191:9:191:44 | a3 | variables.rs:191:22:191:23 | a3 |
|
||||
| variables.rs:191:9:191:44 | [match(true)] phi | variables.rs:191:9:191:44 | a3 | variables.rs:191:42:191:43 | a3 |
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
testFailures
|
||||
| variables.rs:503:5:503:5 | a | Unexpected result: write_access=a |
|
||||
| variables.rs:503:15:503:32 | //... | Missing result: read_access=a |
|
||||
failures
|
||||
variable
|
||||
| variables.rs:3:14:3:14 | s |
|
||||
@@ -281,7 +279,6 @@ variableWriteAccess
|
||||
| variables.rs:450:9:450:9 | x | variables.rs:446:13:446:13 | x |
|
||||
| variables.rs:454:9:454:9 | x | variables.rs:446:13:446:13 | x |
|
||||
| variables.rs:496:5:496:5 | a | variables.rs:492:13:492:13 | a |
|
||||
| variables.rs:503:5:503:5 | a | variables.rs:501:13:501:13 | a |
|
||||
| variables.rs:505:5:505:5 | a | variables.rs:501:13:501:13 | a |
|
||||
variableReadAccess
|
||||
| variables.rs:4:20:4:20 | s | variables.rs:3:14:3:14 | s |
|
||||
@@ -419,6 +416,7 @@ variableReadAccess
|
||||
| variables.rs:495:15:495:15 | a | variables.rs:492:13:492:13 | a |
|
||||
| variables.rs:497:15:497:15 | a | variables.rs:492:13:492:13 | a |
|
||||
| variables.rs:502:15:502:15 | a | variables.rs:501:13:501:13 | a |
|
||||
| variables.rs:503:5:503:5 | a | variables.rs:501:13:501:13 | a |
|
||||
| variables.rs:504:15:504:15 | a | variables.rs:501:13:501:13 | a |
|
||||
| variables.rs:506:15:506:15 | a | variables.rs:501:13:501:13 | a |
|
||||
| variables.rs:512:15:512:15 | x | variables.rs:510:9:510:9 | x |
|
||||
|
||||
Reference in New Issue
Block a user