Skip to content

Commit 6159d34

Browse files
committed
dbg
1 parent 69d8d2a commit 6159d34

File tree

19 files changed

+145
-179
lines changed

19 files changed

+145
-179
lines changed

rust/ql/lib/codeql/rust/elements/internal/AstNodeImpl.qll

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,24 @@ module Impl {
2929
result = getImmediateParent(e)
3030
}
3131

32+
/**
33+
* Holds if `n` is superseded by an attribute macro expansion. That is, `n` is
34+
* an item or a transitive child of an item with an attribute macro expansion.
35+
*/
36+
predicate supersededByAttributeMacroExpansion(AstNode n) {
37+
n.(Item).hasAttributeMacroExpansion()
38+
or
39+
exists(AstNode parent |
40+
n.getParentNode() = parent and
41+
supersededByAttributeMacroExpansion(parent) and
42+
// Don't exclude expansions themselves as they supercede other nodes.
43+
not n = parent.(Item).getAttributeMacroExpansion() and
44+
// Don't consider attributes themselves to be superseded. E.g., in `#[a] fn
45+
// f() {}` the macro expansion supercedes `fn f() {}` but not `#[a]`.
46+
not n instanceof Attr
47+
)
48+
}
49+
3250
class AstNode extends Generated::AstNode {
3351
/**
3452
* Gets the nearest enclosing parent of this node, which is also an `AstNode`,

rust/ql/lib/codeql/rust/elements/internal/VariableImpl.qll

Lines changed: 27 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ private import rust
22
private import codeql.rust.controlflow.ControlFlowGraph
33
private import codeql.rust.internal.PathResolution as PathResolution
44
private import codeql.rust.elements.internal.generated.ParentChild as ParentChild
5+
private import codeql.rust.elements.internal.AstNodeImpl::Impl as AstNodeImpl
56
private import codeql.rust.elements.internal.PathImpl::Impl as PathImpl
67
private import codeql.rust.elements.internal.PathExprBaseImpl::Impl as PathExprBaseImpl
78
private import codeql.rust.elements.internal.FormatTemplateVariableAccessImpl::Impl as FormatTemplateVariableAccessImpl
@@ -104,29 +105,32 @@ module Impl {
104105
cached
105106
predicate variableDecl(AstNode definingNode, Name name, string text) {
106107
Cached::ref() and
107-
exists(SelfParam sp |
108-
name = sp.getName() and
109-
definingNode = name and
110-
text = name.getText() and
111-
// exclude self parameters from functions without a body as these are
112-
// trait method declarations without implementations
113-
not exists(Function f | not f.hasBody() and f.getSelfParam() = sp)
114-
)
115-
or
116-
exists(IdentPat pat |
117-
name = pat.getName() and
118-
(
119-
definingNode = getOutermostEnclosingOrPat(pat)
120-
or
121-
not exists(getOutermostEnclosingOrPat(pat)) and definingNode = name
122-
) and
123-
text = name.getText() and
124-
not PathResolution::identPatIsResolvable(pat) and
125-
// exclude parameters from functions without a body as these are trait method declarations
126-
// without implementations
127-
not exists(Function f | not f.hasBody() and f.getAParam().getPat() = pat) and
128-
// exclude parameters from function pointer types (e.g. `x` in `fn(x: i32) -> i32`)
129-
not exists(FnPtrTypeRepr fp | fp.getParamList().getAParam().getPat() = pat)
108+
not AstNodeImpl::supersededByAttributeMacroExpansion(definingNode) and
109+
(
110+
exists(SelfParam sp |
111+
name = sp.getName() and
112+
definingNode = name and
113+
text = name.getText() and
114+
// exclude self parameters from functions without a body as these are
115+
// trait method declarations without implementations
116+
not exists(Function f | not f.hasBody() and f.getSelfParam() = sp)
117+
)
118+
or
119+
exists(IdentPat pat |
120+
name = pat.getName() and
121+
(
122+
definingNode = getOutermostEnclosingOrPat(pat)
123+
or
124+
not exists(getOutermostEnclosingOrPat(pat)) and definingNode = name
125+
) and
126+
text = name.getText() and
127+
not PathResolution::identPatIsResolvable(pat) and
128+
// exclude parameters from functions without a body as these are trait method declarations
129+
// without implementations
130+
not exists(Function f | not f.hasBody() and f.getAParam().getPat() = pat) and
131+
// exclude parameters from function pointer types (e.g. `x` in `fn(x: i32) -> i32`)
132+
not exists(FnPtrTypeRepr fp | fp.getParamList().getAParam().getPat() = pat)
133+
)
130134
)
131135
}
132136

rust/ql/lib/codeql/rust/internal/Definitions.qll

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ private import codeql.rust.internal.PathResolution
1717

1818
/** An element with an associated definition. */
1919
abstract class Use extends Locatable {
20-
Use() { not this.(AstNode).isFromMacroExpansion() }
21-
2220
/** Gets the definition associated with this element. */
2321
abstract Definition getDefinition();
2422

@@ -37,14 +35,17 @@ private module Cached {
3735
TFormatArgsArgIndex(Expr e) { e = any(FormatArgsArg a).getExpr() } or
3836
TItemNode(ItemNode i)
3937

38+
pragma[nomagic]
39+
private predicate isMacroCallLocation(Location loc) { loc = any(MacroCall m).getLocation() }
40+
4041
/**
4142
* Gets an element, of kind `kind`, that element `use` uses, if any.
4243
*/
4344
cached
4445
Definition definitionOf(Use use, string kind) {
4546
result = use.getDefinition() and
4647
kind = use.getUseType() and
47-
not result.getLocation() = any(MacroCall m).getLocation()
48+
not isMacroCallLocation(result.getLocation())
4849
}
4950
}
5051

rust/ql/lib/codeql/rust/internal/PathResolution.qll

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
private import rust
66
private import codeql.rust.elements.internal.generated.ParentChild
7+
private import codeql.rust.elements.internal.AstNodeImpl::Impl as AstNodeImpl
78
private import codeql.rust.elements.internal.CallExprImpl::Impl as CallExprImpl
89
private import codeql.rust.internal.CachedStages
910
private import codeql.rust.frameworks.stdlib.Builtins as Builtins
@@ -90,24 +91,6 @@ private module UseOption = Option<Use>;
9091

9192
private class UseOption = UseOption::Option;
9293

93-
/**
94-
* Holds if `n` is superseded by an attribute macro expansion. That is, `n` is
95-
* an item or a transitive child of an item with an attribute macro expansion.
96-
*/
97-
predicate supersededByAttributeMacroExpansion(AstNode n) {
98-
n.(Item).hasAttributeMacroExpansion()
99-
or
100-
exists(AstNode parent |
101-
n.getParentNode() = parent and
102-
supersededByAttributeMacroExpansion(parent) and
103-
// Don't exclude expansions themselves as they supercede other nodes.
104-
not n = parent.(Item).getAttributeMacroExpansion() and
105-
// Don't consider attributes themselves to be superseded. E.g., in `#[a] fn
106-
// f() {}` the macro expansion supercedes `fn f() {}` but not `#[a]`.
107-
not n instanceof Attr
108-
)
109-
}
110-
11194
/**
11295
* An item that may be referred to by a path, and which is a node in
11396
* the _item graph_.
@@ -188,7 +171,7 @@ predicate supersededByAttributeMacroExpansion(AstNode n) {
188171
abstract class ItemNode extends Locatable {
189172
ItemNode() {
190173
// Exclude items that are superseded by the expansion of an attribute macro.
191-
not supersededByAttributeMacroExpansion(this)
174+
not AstNodeImpl::supersededByAttributeMacroExpansion(this)
192175
}
193176

194177
/** Gets the (original) name of this item. */
@@ -1528,6 +1511,8 @@ private predicate declares(ItemNode item, Namespace ns, string name) {
15281511
* to constructors in patterns.
15291512
*/
15301513
abstract class PathExt extends AstNode {
1514+
PathExt() { not AstNodeImpl::supersededByAttributeMacroExpansion(this) }
1515+
15311516
abstract string getText();
15321517

15331518
/** Holds if this is an unqualified path with the textual value `name`. */
@@ -1972,7 +1957,10 @@ private ItemNode resolvePathCand(PathExt path) {
19721957
then result instanceof TypeItemNode
19731958
else
19741959
if path instanceof IdentPat
1975-
then result instanceof VariantItemNode or result instanceof StructItemNode
1960+
then
1961+
result instanceof VariantItemNode or
1962+
result instanceof StructItemNode or
1963+
result instanceof ConstItemNode
19761964
else any()
19771965
|
19781966
pathUsesNamespace(path, ns)
@@ -2063,6 +2051,13 @@ private ItemNode resolveUseTreeListItem(Use use, UseTree tree, PathExt path, Suc
20632051
result = q.getASuccessor(name, kind, useOpt)
20642052
)
20652053
)
2054+
// or
2055+
// // use {std::cmp::Ordering::*, AdjustmentHintsMode::*};
2056+
// tree = use.getUseTree() and
2057+
// not tree.hasPath() and
2058+
// isUseTreeSubPathUnqualified(tree, path, _) and
2059+
// result = resolvePathCand(path) and
2060+
// kind.isBoth() // todo
20662061
}
20672062

20682063
pragma[nomagic]
@@ -2089,6 +2084,7 @@ private ItemNode resolveUseTreeListItem(Use use, UseTree tree) {
20892084
result = resolveUseTreeListItem(use, tree, path, _)
20902085
)
20912086
or
2087+
// use foo::{bar, *}
20922088
exists(UseTree midTree |
20932089
// `use foo::{bar, *}`; midTree = `foo` and tree = `*`
20942090
result = resolveUseTreeListItem(use, midTree) and
@@ -2214,8 +2210,12 @@ private module Debug {
22142210
Locatable getRelevantLocatable() {
22152211
exists(string filepath, int startline, int startcolumn, int endline, int endcolumn |
22162212
result.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) and
2217-
filepath.matches("%/main.rs") and
2218-
startline = 800
2213+
// filepath.matches("%/src/tools/rust-analyzer/crates/ide/src/inlay_hints/adjustment.rs") and
2214+
// startline = [6, 227]
2215+
// filepath.matches("%/compiler/rustc_middle/src/ty/layout.rs") and
2216+
// startline = 36
2217+
filepath.matches("%/cranelift-codegen-943c3c0c33bda67e/out/isle_riscv64.rs") and
2218+
startline = 11
22192219
)
22202220
}
22212221

@@ -2230,9 +2230,14 @@ private module Debug {
22302230
path = p.toStringDebug()
22312231
}
22322232

2233+
ItemNode debugUnqualifiedPathLookup(PathExt p, Namespace ns, SuccessorKind kind) {
2234+
p = getRelevantLocatable() and
2235+
result = unqualifiedPathLookup(p, ns, kind)
2236+
}
2237+
22332238
predicate debugItemNode(ItemNode item) { item = getRelevantLocatable() }
22342239

2235-
ItemNode debugResolvePath(PathExt path) {
2240+
ItemNode debugResolvePath(Path path) {
22362241
path = getRelevantLocatable() and
22372242
result = resolvePath(path)
22382243
}

rust/ql/lib/utils/test/PathResolutionInlineExpectationsTest.qll

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
*/
44

55
private import rust
6+
private import codeql.rust.elements.internal.AstNodeImpl::Impl as AstNodeImpl
67
private import codeql.rust.internal.PathResolution
78
private import codeql.rust.internal.TypeInference
89
private import utils.test.InlineExpectationsTest
@@ -37,13 +38,15 @@ private module ResolveTest implements TestSig {
3738
)
3839
}
3940

40-
predicate hasActualResult(Location location, string element, string tag, string value) {
41+
private predicate hasResult(
42+
Location location, string element, string tag, string value, boolean inMacro
43+
) {
4144
exists(AstNode n |
4245
not n = any(Path parent).getQualifier() and
4346
location = n.getLocation() and
4447
n.fromSource() and
4548
not location.getFile().getAbsolutePath().matches("%proc_macro.rs") and
46-
not n.isFromMacroExpansion() and
49+
(if n.isFromMacroExpansion() then inMacro = true else inMacro = false) and
4750
element = n.toString() and
4851
tag = "item"
4952
|
@@ -52,6 +55,14 @@ private module ResolveTest implements TestSig {
5255
item(n.(MethodCallExpr).getStaticTarget(), value)
5356
)
5457
}
58+
59+
predicate hasActualResult(Location location, string element, string tag, string value) {
60+
hasResult(location, element, tag, value, false)
61+
}
62+
63+
predicate hasOptionalResult(Location location, string element, string tag, string value) {
64+
hasResult(location, element, tag, value, true)
65+
}
5566
}
5667

5768
import MakeTest<ResolveTest>

rust/ql/test/library-tests/dataflow/sources/net/CONSISTENCY/PathResolutionConsistency.expected

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,3 @@ multipleCallTargets
77
| test.rs:447:30:447:67 | pinned.poll_read(...) |
88
| test.rs:470:26:470:54 | pinned.poll_fill_buf(...) |
99
| test.rs:519:50:519:66 | ...::from(...) |
10-
| test.rs:519:50:519:66 | ...::from(...) |

rust/ql/test/library-tests/dataflow/sources/net/TaintSources.expected

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,3 @@
1515
| test.rs:332:22:332:50 | ...::new | Flow source 'RemoteSource' of type remote (DEFAULT). |
1616
| test.rs:373:19:373:36 | ...::connect | Flow source 'RemoteSource' of type remote (DEFAULT). |
1717
| test.rs:519:16:519:29 | ...::args | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). |
18-
| test.rs:519:16:519:29 | ...::args | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). |

rust/ql/test/library-tests/dataflow/sources/web_frameworks/InlineFlow.expected

Lines changed: 0 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,12 @@ models
1212
| 11 | Summary: <alloc::string::String>::as_str; Argument[self]; ReturnValue; value |
1313
edges
1414
| test.rs:11:31:11:31 | a | test.rs:13:14:13:14 | a | provenance | |
15-
| test.rs:11:31:11:31 | a | test.rs:13:14:13:14 | a | provenance | |
16-
| test.rs:11:31:11:31 | a | test.rs:13:14:13:23 | a.as_str() | provenance | MaD:11 |
1715
| test.rs:11:31:11:31 | a | test.rs:13:14:13:23 | a.as_str() | provenance | MaD:11 |
1816
| test.rs:11:31:11:31 | a | test.rs:14:14:14:14 | a | provenance | |
19-
| test.rs:11:31:11:31 | a | test.rs:14:14:14:14 | a | provenance | |
2017
| test.rs:11:31:11:31 | a | test.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:10 |
21-
| test.rs:11:31:11:31 | a | test.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:10 |
22-
| test.rs:11:31:11:31 | a | test.rs:15:14:15:14 | a | provenance | |
2318
| test.rs:11:31:11:31 | a | test.rs:15:14:15:14 | a | provenance | |
2419
| test.rs:13:14:13:14 | a | test.rs:13:14:13:23 | a.as_str() | provenance | MaD:11 |
25-
| test.rs:13:14:13:14 | a | test.rs:13:14:13:23 | a.as_str() | provenance | MaD:11 |
2620
| test.rs:14:14:14:14 | a | test.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:10 |
27-
| test.rs:14:14:14:14 | a | test.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:10 |
28-
| test.rs:68:15:68:15 | a | test.rs:70:14:70:14 | a | provenance | |
2921
| test.rs:68:15:68:15 | a | test.rs:70:14:70:14 | a | provenance | |
3022
| test.rs:98:9:98:31 | ...: ...::Path::<...> | test.rs:100:17:100:33 | path.into_inner() | provenance | MaD:9 |
3123
| test.rs:98:9:98:31 | ...: ...::Path::<...> | test.rs:100:17:100:33 | path.into_inner() [tuple.0] | provenance | MaD:6 |
@@ -87,37 +79,21 @@ edges
8779
| test.rs:139:41:139:42 | to | test.rs:98:9:98:31 | ...: ...::Path::<...> | provenance | Src:MaD:5 |
8880
| test.rs:140:45:140:46 | to | test.rs:109:9:109:41 | ...: ...::Path::<...> | provenance | Src:MaD:5 |
8981
| test.rs:242:33:242:35 | map | test.rs:242:38:242:46 | ...: String | provenance | Src:MaD:2 |
90-
| test.rs:242:33:242:35 | map | test.rs:242:38:242:46 | ...: String | provenance | Src:MaD:2 |
9182
| test.rs:242:38:242:46 | ...: String | test.rs:244:18:244:18 | a | provenance | |
92-
| test.rs:242:38:242:46 | ...: String | test.rs:244:18:244:18 | a | provenance | |
93-
| test.rs:250:46:250:49 | then | test.rs:251:25:251:33 | ...: String | provenance | Src:MaD:3 |
9483
| test.rs:250:46:250:49 | then | test.rs:251:25:251:33 | ...: String | provenance | Src:MaD:3 |
9584
| test.rs:251:25:251:33 | ...: String | test.rs:252:22:252:22 | a | provenance | |
96-
| test.rs:251:25:251:33 | ...: String | test.rs:252:22:252:22 | a | provenance | |
97-
| test.rs:259:50:259:57 | and_then | test.rs:260:26:260:32 | ...: u64 | provenance | Src:MaD:1 |
9885
| test.rs:259:50:259:57 | and_then | test.rs:260:26:260:32 | ...: u64 | provenance | Src:MaD:1 |
9986
| test.rs:260:26:260:32 | ...: u64 | test.rs:263:22:263:23 | id | provenance | |
100-
| test.rs:260:26:260:32 | ...: u64 | test.rs:263:22:263:23 | id | provenance | |
10187
| test.rs:272:75:272:77 | map | test.rs:273:15:273:23 | ...: String | provenance | Src:MaD:2 |
102-
| test.rs:272:75:272:77 | map | test.rs:273:15:273:23 | ...: String | provenance | Src:MaD:2 |
103-
| test.rs:273:15:273:23 | ...: String | test.rs:275:22:275:22 | a | provenance | |
10488
| test.rs:273:15:273:23 | ...: String | test.rs:275:22:275:22 | a | provenance | |
10589
nodes
10690
| test.rs:11:31:11:31 | a | semmle.label | a |
107-
| test.rs:11:31:11:31 | a | semmle.label | a |
10891
| test.rs:13:14:13:14 | a | semmle.label | a |
109-
| test.rs:13:14:13:14 | a | semmle.label | a |
110-
| test.rs:13:14:13:23 | a.as_str() | semmle.label | a.as_str() |
11192
| test.rs:13:14:13:23 | a.as_str() | semmle.label | a.as_str() |
11293
| test.rs:14:14:14:14 | a | semmle.label | a |
113-
| test.rs:14:14:14:14 | a | semmle.label | a |
11494
| test.rs:14:14:14:25 | a.as_bytes() | semmle.label | a.as_bytes() |
115-
| test.rs:14:14:14:25 | a.as_bytes() | semmle.label | a.as_bytes() |
116-
| test.rs:15:14:15:14 | a | semmle.label | a |
11795
| test.rs:15:14:15:14 | a | semmle.label | a |
11896
| test.rs:68:15:68:15 | a | semmle.label | a |
119-
| test.rs:68:15:68:15 | a | semmle.label | a |
120-
| test.rs:70:14:70:14 | a | semmle.label | a |
12197
| test.rs:70:14:70:14 | a | semmle.label | a |
12298
| test.rs:98:9:98:31 | ...: ...::Path::<...> | semmle.label | ...: ...::Path::<...> |
12399
| test.rs:100:13:100:13 | a | semmle.label | a |
@@ -162,39 +138,23 @@ nodes
162138
| test.rs:139:41:139:42 | to | semmle.label | to |
163139
| test.rs:140:45:140:46 | to | semmle.label | to |
164140
| test.rs:242:33:242:35 | map | semmle.label | map |
165-
| test.rs:242:33:242:35 | map | semmle.label | map |
166141
| test.rs:242:38:242:46 | ...: String | semmle.label | ...: String |
167-
| test.rs:242:38:242:46 | ...: String | semmle.label | ...: String |
168-
| test.rs:244:18:244:18 | a | semmle.label | a |
169142
| test.rs:244:18:244:18 | a | semmle.label | a |
170143
| test.rs:250:46:250:49 | then | semmle.label | then |
171-
| test.rs:250:46:250:49 | then | semmle.label | then |
172144
| test.rs:251:25:251:33 | ...: String | semmle.label | ...: String |
173-
| test.rs:251:25:251:33 | ...: String | semmle.label | ...: String |
174-
| test.rs:252:22:252:22 | a | semmle.label | a |
175145
| test.rs:252:22:252:22 | a | semmle.label | a |
176146
| test.rs:259:50:259:57 | and_then | semmle.label | and_then |
177-
| test.rs:259:50:259:57 | and_then | semmle.label | and_then |
178147
| test.rs:260:26:260:32 | ...: u64 | semmle.label | ...: u64 |
179-
| test.rs:260:26:260:32 | ...: u64 | semmle.label | ...: u64 |
180-
| test.rs:263:22:263:23 | id | semmle.label | id |
181148
| test.rs:263:22:263:23 | id | semmle.label | id |
182149
| test.rs:272:75:272:77 | map | semmle.label | map |
183-
| test.rs:272:75:272:77 | map | semmle.label | map |
184-
| test.rs:273:15:273:23 | ...: String | semmle.label | ...: String |
185150
| test.rs:273:15:273:23 | ...: String | semmle.label | ...: String |
186151
| test.rs:275:22:275:22 | a | semmle.label | a |
187-
| test.rs:275:22:275:22 | a | semmle.label | a |
188152
subpaths
189153
testFailures
190154
#select
191155
| test.rs:13:14:13:23 | a.as_str() | test.rs:11:31:11:31 | a | test.rs:13:14:13:23 | a.as_str() | $@ | test.rs:11:31:11:31 | a | a |
192-
| test.rs:13:14:13:23 | a.as_str() | test.rs:11:31:11:31 | a | test.rs:13:14:13:23 | a.as_str() | $@ | test.rs:11:31:11:31 | a | a |
193-
| test.rs:14:14:14:25 | a.as_bytes() | test.rs:11:31:11:31 | a | test.rs:14:14:14:25 | a.as_bytes() | $@ | test.rs:11:31:11:31 | a | a |
194156
| test.rs:14:14:14:25 | a.as_bytes() | test.rs:11:31:11:31 | a | test.rs:14:14:14:25 | a.as_bytes() | $@ | test.rs:11:31:11:31 | a | a |
195157
| test.rs:15:14:15:14 | a | test.rs:11:31:11:31 | a | test.rs:15:14:15:14 | a | $@ | test.rs:11:31:11:31 | a | a |
196-
| test.rs:15:14:15:14 | a | test.rs:11:31:11:31 | a | test.rs:15:14:15:14 | a | $@ | test.rs:11:31:11:31 | a | a |
197-
| test.rs:70:14:70:14 | a | test.rs:68:15:68:15 | a | test.rs:70:14:70:14 | a | $@ | test.rs:68:15:68:15 | a | a |
198158
| test.rs:70:14:70:14 | a | test.rs:68:15:68:15 | a | test.rs:70:14:70:14 | a | $@ | test.rs:68:15:68:15 | a | a |
199159
| test.rs:101:14:101:23 | a.as_str() | test.rs:139:41:139:42 | to | test.rs:101:14:101:23 | a.as_str() | $@ | test.rs:139:41:139:42 | to | to |
200160
| test.rs:102:14:102:25 | a.as_bytes() | test.rs:139:41:139:42 | to | test.rs:102:14:102:25 | a.as_bytes() | $@ | test.rs:139:41:139:42 | to | to |
@@ -203,10 +163,6 @@ testFailures
203163
| test.rs:114:14:114:14 | b | test.rs:140:45:140:46 | to | test.rs:114:14:114:14 | b | $@ | test.rs:140:45:140:46 | to | to |
204164
| test.rs:132:14:132:14 | a | test.rs:127:5:127:20 | to | test.rs:132:14:132:14 | a | $@ | test.rs:127:5:127:20 | to | to |
205165
| test.rs:244:18:244:18 | a | test.rs:242:33:242:35 | map | test.rs:244:18:244:18 | a | $@ | test.rs:242:33:242:35 | map | map |
206-
| test.rs:244:18:244:18 | a | test.rs:242:33:242:35 | map | test.rs:244:18:244:18 | a | $@ | test.rs:242:33:242:35 | map | map |
207-
| test.rs:252:22:252:22 | a | test.rs:250:46:250:49 | then | test.rs:252:22:252:22 | a | $@ | test.rs:250:46:250:49 | then | then |
208166
| test.rs:252:22:252:22 | a | test.rs:250:46:250:49 | then | test.rs:252:22:252:22 | a | $@ | test.rs:250:46:250:49 | then | then |
209167
| test.rs:263:22:263:23 | id | test.rs:259:50:259:57 | and_then | test.rs:263:22:263:23 | id | $@ | test.rs:259:50:259:57 | and_then | and_then |
210-
| test.rs:263:22:263:23 | id | test.rs:259:50:259:57 | and_then | test.rs:263:22:263:23 | id | $@ | test.rs:259:50:259:57 | and_then | and_then |
211-
| test.rs:275:22:275:22 | a | test.rs:272:75:272:77 | map | test.rs:275:22:275:22 | a | $@ | test.rs:272:75:272:77 | map | map |
212168
| test.rs:275:22:275:22 | a | test.rs:272:75:272:77 | map | test.rs:275:22:275:22 | a | $@ | test.rs:272:75:272:77 | map | map |

0 commit comments

Comments
 (0)