diff --git a/rust/ql/consistency-queries/PathResolutionConsistency.ql b/rust/ql/consistency-queries/PathResolutionConsistency.ql index 3b2165b712f3..bc1f572eedb3 100644 --- a/rust/ql/consistency-queries/PathResolutionConsistency.ql +++ b/rust/ql/consistency-queries/PathResolutionConsistency.ql @@ -15,8 +15,8 @@ class SourceLocatable extends Locatable { SourceLocatable() { this.fromSource() } } -query predicate multipleCallTargets(SourceLocatable a) { - PathResolutionConsistency::multipleCallTargets(a, _) +query predicate multipleResolvedTargets(SourceLocatable a) { + PathResolutionConsistency::multipleResolvedTargets(a, _) } query predicate multiplePathResolutions(SourceLocatable a) { diff --git a/rust/ql/lib/codeql/rust/elements/internal/OperationImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/OperationImpl.qll index 31e30c8dcb89..3cc84e71de9f 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/OperationImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/OperationImpl.qll @@ -30,6 +30,7 @@ module Impl { op = "!" and path = "core::ops::bit::Not" and method = "not" and borrows = 0 or // Dereference + // todo: handle `core::ops::deref::DerefMut` op = "*" and path = "core::ops::deref::Deref" and method = "deref" and borrows = 1 ) or diff --git a/rust/ql/lib/codeql/rust/frameworks/stdlib/Builtins.qll b/rust/ql/lib/codeql/rust/frameworks/stdlib/Builtins.qll index 9021e5d3643f..6b09ababd741 100644 --- a/rust/ql/lib/codeql/rust/frameworks/stdlib/Builtins.qll +++ b/rust/ql/lib/codeql/rust/frameworks/stdlib/Builtins.qll @@ -162,15 +162,20 @@ class ArrayType extends BuiltinType { override string getDisplayName() { result = "[;]" } } -/** The builtin reference type `&T`. */ -class RefType extends BuiltinType { - RefType() { this.getName() = "Ref" } +/** A builtin reference type `&T` or `&mut T`. */ +abstract private class RefTypeImpl extends BuiltinType { } + +final class RefType = RefTypeImpl; + +/** The builtin shared reference type `&T`. */ +class RefSharedType extends RefTypeImpl { + RefSharedType() { this.getName() = "Ref" } override string getDisplayName() { result = "&" } } -/** The builtin reference type `&mut T`. */ -class RefMutType extends BuiltinType { +/** The builtin mutable reference type `&mut T`. */ +class RefMutType extends RefTypeImpl { RefMutType() { this.getName() = "RefMut" } override string getDisplayName() { result = "&mut" } diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll index 28a72d370ae9..662d95050a25 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll @@ -771,8 +771,12 @@ private TypeItemNode resolveBuiltin(TypeRepr tr) { tr instanceof ArrayTypeRepr and result instanceof Builtins::ArrayType or - tr instanceof RefTypeRepr and - result instanceof Builtins::RefType + tr = + any(RefTypeRepr rtr | + if rtr.isMut() + then result instanceof Builtins::RefMutType + else result instanceof Builtins::RefSharedType + ) or tr.(PtrTypeRepr).isConst() and result instanceof Builtins::PtrConstType diff --git a/rust/ql/lib/codeql/rust/internal/PathResolutionConsistency.qll b/rust/ql/lib/codeql/rust/internal/PathResolutionConsistency.qll index 857afc1f5522..807225d1615a 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolutionConsistency.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolutionConsistency.qll @@ -24,17 +24,10 @@ query predicate multiplePathResolutions(Path p, ItemNode i) { strictcount(ItemNode i0 | i0 = resolvePath(p) and not i0 instanceof Crate) > 1 } -// TODO: Take other calls into account -abstract private class CallExprBase extends InvocationExpr { } - -private class CallExprCallExprBase extends CallExpr, CallExprBase { } - -private class MethodCallExprCallExprBase extends MethodCallExpr, CallExprBase { } - -/** Holds if `call` has multiple static call targets including `target`. */ -query predicate multipleCallTargets(CallExprBase call, Callable target) { - target = call.getResolvedTarget() and - strictcount(call.getResolvedTarget()) > 1 +/** Holds if `ie` has multiple resolved targets including `target`. */ +query predicate multipleResolvedTargets(InvocationExpr ie, Addressable target) { + target = ie.getResolvedTarget() and + strictcount(ie.getResolvedTarget()) > 1 } /** Holds if `fe` resolves to multiple record fields including `field`. */ @@ -62,8 +55,8 @@ int getPathResolutionInconsistencyCounts(string type) { type = "Multiple path resolutions" and result = count(Path p | multiplePathResolutions(p, _) | p) or - type = "Multiple static call targets" and - result = count(CallExprBase call | multipleCallTargets(call, _) | call) + type = "Multiple resolved targets" and + result = count(InvocationExpr ie | multipleResolvedTargets(ie, _) | ie) or type = "Multiple record fields" and result = count(FieldExpr fe | multipleStructFields(fe, _) | fe) diff --git a/rust/ql/lib/codeql/rust/internal/Type.qll b/rust/ql/lib/codeql/rust/internal/Type.qll index b187a64dec15..83dcfff8c3a6 100644 --- a/rust/ql/lib/codeql/rust/internal/Type.qll +++ b/rust/ql/lib/codeql/rust/internal/Type.qll @@ -224,21 +224,33 @@ TypeParamTypeParameter getArrayTypeParameter() { result = any(ArrayType t).getPositionalTypeParameter(0) } -/** - * A reference type. - * - * Reference types like `& i64` are modeled as normal generic types - * with a single type argument. - */ -class RefType extends StructType { - RefType() { this.getStruct() instanceof Builtins::RefType } +abstract class RefType extends StructType { } + +pragma[nomagic] +TypeParamTypeParameter getRefTypeParameter() { + result = any(RefType t).getPositionalTypeParameter(0) +} + +class RefMutType extends RefType { + RefMutType() { this.getStruct() instanceof Builtins::RefMutType } + + override string toString() { result = "&mut" } +} + +pragma[nomagic] +TypeParamTypeParameter getRefMutTypeParameter() { + result = any(RefMutType t).getPositionalTypeParameter(0) +} + +class RefSharedType extends RefType { + RefSharedType() { this.getStruct() instanceof Builtins::RefSharedType } override string toString() { result = "&" } } pragma[nomagic] -TypeParamTypeParameter getRefTypeParameter() { - result = any(RefType t).getPositionalTypeParameter(0) +TypeParamTypeParameter getRefSharedTypeParameter() { + result = any(RefSharedType t).getPositionalTypeParameter(0) } /** diff --git a/rust/ql/lib/codeql/rust/internal/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/TypeInference.qll index ed87b0c71043..9a2b408e2964 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInference.qll @@ -393,7 +393,10 @@ module CertainTypeInference { n2 = ip.getName() and prefix1.isEmpty() and if ip.isRef() - then prefix2 = TypePath::singleton(getRefTypeParameter()) + then + if ip.isMut() + then prefix2 = TypePath::singleton(getRefMutTypeParameter()) + else prefix2 = TypePath::singleton(getRefSharedTypeParameter()) else prefix2.isEmpty() ) } @@ -610,9 +613,14 @@ private predicate typeEquality(AstNode n1, TypePath prefix1, AstNode n2, TypePat prefix2 = TypePath::singleton(inferRefExprType(re).getPositionalTypeParameter(0)) ) or - n1 = n2.(RefPat).getPat() and - prefix1.isEmpty() and - prefix2 = TypePath::singleton(getRefTypeParameter()) + n2 = + any(RefPat rp | + n1 = rp.getPat() and + prefix1.isEmpty() and + if rp.isMut() + then prefix2 = TypePath::singleton(getRefMutTypeParameter()) + else prefix2 = TypePath::singleton(getRefSharedTypeParameter()) + ) or exists(int i, int arity | prefix1.isEmpty() and @@ -1153,6 +1161,34 @@ private predicate isComplexRootStripped(TypePath path, Type type) { type != TNeverType() } +private newtype TBorrowKind = + TNoBorrowKind() or + TSharedBorrowKind() or + TMutBorrowKind() + +private class BorrowKind extends TBorrowKind { + predicate isNoBorrow() { this = TNoBorrowKind() } + + RefType getRefType() { + this = TSharedBorrowKind() and + result instanceof RefSharedType + or + this = TMutBorrowKind() and + result instanceof RefMutType + } + + string toString() { + this = TNoBorrowKind() and + result = "" + or + this = TSharedBorrowKind() and + result = "&" + or + this = TMutBorrowKind() and + result = "&mut" + } +} + /** * Provides logic for resolving calls to methods. * @@ -1195,7 +1231,7 @@ private module MethodResolution { * * `strippedTypePath` points to the type `strippedType` inside `selfType`, * which is the (possibly complex-stripped) root type of `selfType`. For example, - * if `m` has a `&self` parameter, then `strippedTypePath` is `getRefTypeParameter()` + * if `m` has a `&self` parameter, then `strippedTypePath` is `getRefSharedTypeParameter()` * and `strippedType` is the type inside the reference. */ pragma[nomagic] @@ -1405,24 +1441,13 @@ private module MethodResolution { * Same as `getACandidateReceiverTypeAt`, but without borrows. */ pragma[nomagic] - private Type getACandidateReceiverTypeAtNoBorrow(string derefChain, TypePath path) { + Type getACandidateReceiverTypeAtNoBorrow(string derefChain, TypePath path) { result = this.getReceiverTypeAt(path) and derefChain = "" or - this.supportsAutoDerefAndBorrow() and - exists(TypePath path0, Type t0, string derefChain0 | - this.hasNoCompatibleTargetBorrow(derefChain0) and - t0 = this.getACandidateReceiverTypeAtNoBorrow(derefChain0, path0) - | - path0.isCons(getRefTypeParameter(), path) and - result = t0 and - derefChain = derefChain0 + ".ref" - or - path0.isEmpty() and - path = path0 and - t0 = getStringStruct() and - result = getStrStruct() and - derefChain = derefChain0 + ".str" + exists(ImplicitDeref::DerefImplItemNode impl, string derefChain0 | + result = ImplicitDeref::getDereferencedCandidateReceiverType(this, impl, derefChain0, path) and + derefChain = derefChain0 + "." + impl.getId() ) } @@ -1432,7 +1457,9 @@ private module MethodResolution { * by `derefChain` and `borrow` is incompatible with the `self` parameter type. */ pragma[nomagic] - private predicate hasIncompatibleTarget(ImplOrTraitItemNode i, string derefChain, boolean borrow) { + private predicate hasIncompatibleTarget( + ImplOrTraitItemNode i, string derefChain, BorrowKind borrow + ) { ReceiverIsInstantiationOfSelfParam::argIsNotInstantiationOf(MkMethodCallCand(this, derefChain, borrow), i, _) } @@ -1445,7 +1472,7 @@ private module MethodResolution { */ pragma[nomagic] private predicate hasIncompatibleBlanketLikeTarget( - ImplItemNode impl, string derefChain, boolean borrow + ImplItemNode impl, string derefChain, BorrowKind borrow ) { ReceiverIsNotInstantiationOfBlanketLikeSelfParam::argIsNotInstantiationOf(MkMethodCallCand(this, derefChain, borrow), impl, _) @@ -1460,13 +1487,15 @@ private module MethodResolution { */ pragma[nomagic] Type getACandidateReceiverTypeAtSubstituteLookupTraits( - string derefChain, boolean borrow, TypePath path + string derefChain, BorrowKind borrow, TypePath path ) { result = substituteLookupTraits(this.getACandidateReceiverTypeAt(derefChain, borrow, path)) } pragma[nomagic] - private Type getComplexStrippedType(string derefChain, boolean borrow, TypePath strippedTypePath) { + private Type getComplexStrippedType( + string derefChain, BorrowKind borrow, TypePath strippedTypePath + ) { result = this.getACandidateReceiverTypeAtSubstituteLookupTraits(derefChain, borrow, strippedTypePath) and isComplexRootStripped(strippedTypePath, result) @@ -1474,7 +1503,7 @@ private module MethodResolution { bindingset[derefChain, borrow, strippedTypePath, strippedType] private predicate hasNoCompatibleNonBlanketLikeTargetCheck( - string derefChain, boolean borrow, TypePath strippedTypePath, Type strippedType + string derefChain, BorrowKind borrow, TypePath strippedTypePath, Type strippedType ) { forall(ImplOrTraitItemNode i | methodCallNonBlanketCandidate(this, _, i, _, strippedTypePath, strippedType) @@ -1485,7 +1514,7 @@ private module MethodResolution { bindingset[derefChain, borrow, strippedTypePath, strippedType] private predicate hasNoCompatibleTargetCheck( - string derefChain, boolean borrow, TypePath strippedTypePath, Type strippedType + string derefChain, BorrowKind borrow, TypePath strippedTypePath, Type strippedType ) { this.hasNoCompatibleNonBlanketLikeTargetCheck(derefChain, borrow, strippedTypePath, strippedType) and @@ -1496,7 +1525,7 @@ private module MethodResolution { bindingset[derefChain, borrow, strippedTypePath, strippedType] private predicate hasNoCompatibleNonBlanketTargetCheck( - string derefChain, boolean borrow, TypePath strippedTypePath, Type strippedType + string derefChain, BorrowKind borrow, TypePath strippedTypePath, Type strippedType ) { this.hasNoCompatibleNonBlanketLikeTargetCheck(derefChain, borrow, strippedTypePath, strippedType) and @@ -1521,9 +1550,8 @@ private module MethodResolution { derefChain = "" ) and exists(TypePath strippedTypePath, Type strippedType | - not derefChain.matches("%.ref") and // no need to try a borrow if the last thing we did was a deref - strippedType = this.getComplexStrippedType(derefChain, false, strippedTypePath) and - this.hasNoCompatibleTargetCheck(derefChain, false, strippedTypePath, strippedType) + strippedType = this.getComplexStrippedType(derefChain, TNoBorrowKind(), strippedTypePath) and + this.hasNoCompatibleTargetCheck(derefChain, TNoBorrowKind(), strippedTypePath, strippedType) ) } @@ -1541,36 +1569,67 @@ private module MethodResolution { derefChain = "" ) and exists(TypePath strippedTypePath, Type strippedType | - not derefChain.matches("%.ref") and // no need to try a borrow if the last thing we did was a deref - strippedType = this.getComplexStrippedType(derefChain, false, strippedTypePath) and - this.hasNoCompatibleNonBlanketTargetCheck(derefChain, false, strippedTypePath, strippedType) + strippedType = this.getComplexStrippedType(derefChain, TNoBorrowKind(), strippedTypePath) and + this.hasNoCompatibleNonBlanketTargetCheck(derefChain, TNoBorrowKind(), strippedTypePath, + strippedType) ) } /** * Holds if the candidate receiver type represented by `derefChain`, followed - * by a borrow, does not have a matching method target. + * by a shared borrow, does not have a matching method target. */ pragma[nomagic] - predicate hasNoCompatibleTargetBorrow(string derefChain) { + predicate hasNoCompatibleTargetSharedBorrow(string derefChain) { exists(TypePath strippedTypePath, Type strippedType | this.hasNoCompatibleTargetNoBorrow(derefChain) and - strippedType = this.getComplexStrippedType(derefChain, true, strippedTypePath) and - this.hasNoCompatibleNonBlanketLikeTargetCheck(derefChain, true, strippedTypePath, - strippedType) + strippedType = + this.getComplexStrippedType(derefChain, TSharedBorrowKind(), strippedTypePath) and + this.hasNoCompatibleNonBlanketLikeTargetCheck(derefChain, TSharedBorrowKind(), + strippedTypePath, strippedType) + ) + } + + /** + * Holds if the candidate receiver type represented by `derefChain`, followed + * by a `mut` borrow, does not have a matching method target. + */ + pragma[nomagic] + predicate hasNoCompatibleTargetMutBorrow(string derefChain) { + exists(TypePath strippedTypePath, Type strippedType | + this.hasNoCompatibleTargetSharedBorrow(derefChain) and + strippedType = this.getComplexStrippedType(derefChain, TMutBorrowKind(), strippedTypePath) and + this.hasNoCompatibleNonBlanketLikeTargetCheck(derefChain, TMutBorrowKind(), + strippedTypePath, strippedType) ) } /** * Holds if the candidate receiver type represented by `derefChain`, followed - * by a borrow, does not have a matching non-blanket method target. + * by a shared borrow, does not have a matching non-blanket method target. */ pragma[nomagic] - predicate hasNoCompatibleNonBlanketTargetBorrow(string derefChain) { + predicate hasNoCompatibleNonBlanketTargetSharedBorrow(string derefChain) { exists(TypePath strippedTypePath, Type strippedType | this.hasNoCompatibleTargetNoBorrow(derefChain) and - strippedType = this.getComplexStrippedType(derefChain, true, strippedTypePath) and - this.hasNoCompatibleNonBlanketTargetCheck(derefChain, true, strippedTypePath, strippedType) + strippedType = + this.getComplexStrippedType(derefChain, TSharedBorrowKind(), strippedTypePath) and + this.hasNoCompatibleNonBlanketTargetCheck(derefChain, TSharedBorrowKind(), strippedTypePath, + strippedType) + ) + } + + /** + * Holds if the candidate receiver type represented by `derefChain`, followed + * by a `mut` borrow, does not have a matching non-blanket method target. + */ + pragma[nomagic] + predicate hasNoCompatibleNonBlanketTargetMutBorrow(string derefChain) { + exists(TypePath strippedTypePath, Type strippedType | + this.hasNoCompatibleNonBlanketTargetSharedBorrow(derefChain) and + strippedType = this.getComplexStrippedType(derefChain, TMutBorrowKind(), strippedTypePath) and + this.hasNoCompatibleNonBlanketTargetCheck(derefChain, TMutBorrowKind(), strippedTypePath, + strippedType) ) } @@ -1587,20 +1646,29 @@ private module MethodResolution { * [1]: https://doc.rust-lang.org/reference/expressions/method-call-expr.html#r-expr.method.candidate-receivers */ pragma[nomagic] - Type getACandidateReceiverTypeAt(string derefChain, boolean borrow, TypePath path) { + Type getACandidateReceiverTypeAt(string derefChain, BorrowKind borrow, TypePath path) { result = this.getACandidateReceiverTypeAtNoBorrow(derefChain, path) and - borrow = false + borrow = TNoBorrowKind() or - this.supportsAutoDerefAndBorrow() and - this.hasNoCompatibleTargetNoBorrow(derefChain) and - borrow = true and - ( - path.isEmpty() and - result instanceof RefType + exists(RefType rt | + // first try shared borrow + this.supportsAutoDerefAndBorrow() and + this.hasNoCompatibleTargetNoBorrow(derefChain) and + borrow = TSharedBorrowKind() or - exists(TypePath suffix | - result = this.getACandidateReceiverTypeAtNoBorrow(derefChain, suffix) and - path = TypePath::cons(getRefTypeParameter(), suffix) + // then try mutable borrow + this.hasNoCompatibleTargetSharedBorrow(derefChain) and + borrow = TMutBorrowKind() + | + rt = borrow.getRefType() and + ( + path.isEmpty() and + result = rt + or + exists(TypePath suffix | + result = this.getACandidateReceiverTypeAtNoBorrow(derefChain, suffix) and + path = TypePath::cons(rt.getPositionalTypeParameter(0), suffix) + ) ) ) } @@ -1608,10 +1676,10 @@ private module MethodResolution { /** * Gets a method that this call resolves to after having applied a sequence of * dereferences and possibly a borrow on the receiver type, encoded in the string - * `derefChain` and the Boolean `borrow`. + * `derefChain` and the enum `borrow`. */ pragma[nomagic] - Method resolveCallTarget(ImplOrTraitItemNode i, string derefChain, boolean borrow) { + Method resolveCallTarget(ImplOrTraitItemNode i, string derefChain, BorrowKind borrow) { exists(MethodCallCand mcc | mcc = MkMethodCallCand(this, derefChain, borrow) and result = mcc.resolveCallTarget(i) @@ -1619,12 +1687,16 @@ private module MethodResolution { } predicate receiverHasImplicitDeref(AstNode receiver) { - exists(this.resolveCallTarget(_, ".ref", false)) and - receiver = this.getArg(any(ArgumentPosition pos | pos.isSelf())) + exists(ImplicitDeref::DerefImplItemNode impl | + impl.isRefImpl() and + exists(this.resolveCallTarget(_, "." + impl.getId(), TNoBorrowKind())) and + receiver = this.getArg(any(ArgumentPosition pos | pos.isSelf())) + ) } - predicate argumentHasImplicitBorrow(AstNode arg) { - exists(this.resolveCallTarget(_, "", true)) and + predicate argumentHasImplicitBorrow(AstNode arg, BorrowKind borrow) { + exists(this.resolveCallTarget(_, "", borrow)) and + borrow != TNoBorrowKind() and arg = this.getArg(any(ArgumentPosition pos | pos.isSelf())) } } @@ -1733,30 +1805,41 @@ private module MethodResolution { result = super.getOperand(pos.asPosition() + 1) } - private predicate implicitBorrowAt(ArgumentPosition pos) { + private predicate implicitBorrowAt(ArgumentPosition pos, BorrowKind borrow) { exists(int borrows | super.isOverloaded(_, _, borrows) | - pos.isSelf() and borrows >= 1 + pos.isSelf() and + borrows >= 1 and + if this instanceof AssignmentOperation + then borrow = TMutBorrowKind() + else borrow = TSharedBorrowKind() or - pos.asPosition() = 0 and borrows = 2 + pos.asPosition() = 0 and + borrows = 2 and + borrow = TSharedBorrowKind() ) } override Type getArgumentTypeAt(ArgumentPosition pos, TypePath path) { - if this.implicitBorrowAt(pos) - then - result instanceof RefType and + exists(BorrowKind borrow, RefType rt | + this.implicitBorrowAt(pos, borrow) and + rt = borrow.getRefType() + | + result = rt and path.isEmpty() or exists(TypePath path0 | result = inferType(this.getArg(pos), path0) and - path = TypePath::cons(getRefTypeParameter(), path0) + path = TypePath::cons(rt.getPositionalTypeParameter(0), path0) ) - else result = inferType(this.getArg(pos), path) + ) + or + not this.implicitBorrowAt(pos, _) and + result = inferType(this.getArg(pos), path) } - override predicate argumentHasImplicitBorrow(AstNode arg) { + override predicate argumentHasImplicitBorrow(AstNode arg, BorrowKind borrow) { exists(ArgumentPosition pos | - this.implicitBorrowAt(pos) and + this.implicitBorrowAt(pos, borrow) and arg = this.getArg(pos) ) } @@ -1773,7 +1856,7 @@ private module MethodResolution { } private newtype TMethodCallCand = - MkMethodCallCand(MethodCall mc, string derefChain, boolean borrow) { + MkMethodCallCand(MethodCall mc, string derefChain, BorrowKind borrow) { exists(mc.getACandidateReceiverTypeAt(derefChain, borrow, _)) } @@ -1781,7 +1864,7 @@ private module MethodResolution { private class MethodCallCand extends MkMethodCallCand { MethodCall mc_; string derefChain; - boolean borrow; + BorrowKind borrow; MethodCallCand() { this = MkMethodCallCand(mc_, derefChain, borrow) } @@ -1795,11 +1878,14 @@ private module MethodResolution { pragma[nomagic] predicate hasNoCompatibleNonBlanketTarget() { - mc_.hasNoCompatibleNonBlanketTargetBorrow(derefChain) and - borrow = true + mc_.hasNoCompatibleNonBlanketTargetSharedBorrow(derefChain) and + borrow = TSharedBorrowKind() + or + mc_.hasNoCompatibleNonBlanketTargetMutBorrow(derefChain) and + borrow = TMutBorrowKind() or mc_.hasNoCompatibleNonBlanketTargetNoBorrow(derefChain) and - borrow = false + borrow = TNoBorrowKind() } pragma[nomagic] @@ -1870,13 +1956,103 @@ private module MethodResolution { MethodArgsAreInstantiationsOf::argsAreInstantiationsOf(this, i, result) } - predicate hasNoBorrow() { borrow = false } - string toString() { result = mc_.toString() + " [" + derefChain + "; " + borrow + "]" } Location getLocation() { result = mc_.getLocation() } } + module ImplicitDeref { + private import codeql.rust.elements.internal.generated.Raw + private import codeql.rust.elements.internal.generated.Synth + + /** An `impl` block that implements the `Deref` trait. */ + class DerefImplItemNode extends ImplItemNode { + DerefImplItemNode() { this.resolveTraitTy() instanceof DerefTrait } + + /** + * Holds if this `impl` block is the special `Deref` implementation for + * `&T` or `&mut T`: + * + * ```rust + * impl const Deref for &T + * ``` + * + * or + * + * ```rust + * impl const Deref for &mut T + * ``` + */ + predicate isRefImpl() { this.resolveSelfTyBuiltin() instanceof Builtins::RefType } + + /** Gets an internal unique ID used to identify this block amongst all `Deref` impl blocks. */ + int getId() { idOfRaw(Synth::convertAstNodeToRaw(this), result) } + } + + private class DerefImplItemRaw extends Raw::Impl { + DerefImplItemRaw() { this = Synth::convertAstNodeToRaw(any(DerefImplItemNode i)) } + } + + private predicate id(DerefImplItemRaw x, DerefImplItemRaw y) { x = y } + + private predicate idOfRaw(DerefImplItemRaw x, int y) = equivalenceRelation(id/2)(x, y) + + private newtype TMethodCallDerefCand = + MkMethodCallDerefCand(MethodCall mc, string derefChain) { + mc.supportsAutoDerefAndBorrow() and + mc.hasNoCompatibleTargetMutBorrow(derefChain) and + exists(mc.getACandidateReceiverTypeAtNoBorrow(derefChain, _)) + } + + private class MethodCallDerefCand extends MkMethodCallDerefCand { + MethodCall mc_; + string derefChain; + + MethodCallDerefCand() { this = MkMethodCallDerefCand(mc_, derefChain) } + + MethodCall getMethodCall() { result = mc_ } + + Type getTypeAt(TypePath path) { + result = substituteLookupTraits(mc_.getACandidateReceiverTypeAtNoBorrow(derefChain, path)) and + not result = TNeverType() and + not result = TUnknownType() + } + + string toString() { result = mc_.toString() + " [" + derefChain + "]" } + + Location getLocation() { result = mc_.getLocation() } + } + + private module MethodCallSatisfiesConstraintInput implements + SatisfiesConstraintInputSig + { + pragma[nomagic] + predicate relevantConstraint(MethodCallDerefCand mc, Type constraint) { + exists(mc) and + constraint.(TraitType).getTrait() instanceof DerefTrait + } + + predicate useUniversalConditions() { none() } + } + + pragma[nomagic] + private AssociatedTypeTypeParameter getDerefTargetTypeParameter() { + result.getTypeAlias() = any(DerefTrait ft).getTargetType() + } + + pragma[nomagic] + Type getDereferencedCandidateReceiverType( + MethodCall mc, DerefImplItemNode impl, string derefChain, TypePath path + ) { + exists(MethodCallDerefCand mcc, TypePath exprPath | + mcc = MkMethodCallDerefCand(mc, derefChain) and + SatisfiesConstraint::satisfiesConstraintType(mcc, + impl, _, exprPath, result) and + exprPath.isCons(getDerefTargetTypeParameter(), path) + ) + } + } + private module ReceiverSatisfiesBlanketLikeConstraintInput implements BlanketImplementation::SatisfiesBlanketConstraintInputSig { @@ -1884,17 +2060,17 @@ private module MethodResolution { predicate hasBlanketCandidate( MethodCallCand mcc, ImplItemNode impl, TypePath blanketPath, TypeParam blanketTypeParam ) { - exists(MethodCall mc | - mc = mcc.getMethodCall() and + exists(MethodCall mc, BorrowKind borrow | + mcc = MkMethodCallCand(mc, _, borrow) and methodCallBlanketLikeCandidate(mc, _, impl, _, blanketPath, blanketTypeParam) and // Only apply blanket implementations when no other implementations are possible; // this is to account for codebases that use the (unstable) specialization feature // (https://rust-lang.github.io/rfcs/1210-impl-specialization.html) (mcc.hasNoCompatibleNonBlanketTarget() or not impl.isBlanketImplementation()) | - mcc.hasNoBorrow() + borrow.isNoBorrow() or - blanketPath.getHead() = getRefTypeParameter() + blanketPath.getHead() = borrow.getRefType().getPositionalTypeParameter(0) ) } } @@ -2129,10 +2305,8 @@ private module MethodCallMatchingInput implements MatchingWithEnvironmentInputSi class AccessEnvironment = string; bindingset[derefChain, borrow] - private AccessEnvironment encodeDerefChainBorrow(string derefChain, boolean borrow) { - exists(string suffix | if borrow = true then suffix = "borrow" else suffix = "" | - result = derefChain + ";" + suffix - ) + private AccessEnvironment encodeDerefChainBorrow(string derefChain, BorrowKind borrow) { + result = derefChain + ";" + borrow } final private class MethodCallFinal = MethodResolution::MethodCall; @@ -2157,7 +2331,7 @@ private module MethodCallMatchingInput implements MatchingWithEnvironmentInputSi pragma[nomagic] private Type getInferredSelfType(AccessPosition apos, string derefChainBorrow, TypePath path) { - exists(string derefChain, boolean borrow | + exists(string derefChain, BorrowKind borrow | result = this.getACandidateReceiverTypeAt(derefChain, borrow, path) and derefChainBorrow = encodeDerefChainBorrow(derefChain, borrow) and apos.isSelf() @@ -2193,7 +2367,7 @@ private module MethodCallMatchingInput implements MatchingWithEnvironmentInputSi } Declaration getTarget(ImplOrTraitItemNode i, string derefChainBorrow) { - exists(string derefChain, boolean borrow | + exists(string derefChain, BorrowKind borrow | derefChainBorrow = encodeDerefChainBorrow(derefChain, borrow) and result = this.resolveCallTarget(i, derefChain, borrow) // mutual recursion; resolving method calls requires resolving types and vice versa ) @@ -2257,13 +2431,16 @@ private Type inferMethodCallType1(AstNode n, boolean isReturn, TypePath path) { path = path0 or // adjust for implicit deref - apos.isSelf() and - derefChainBorrow = ".ref;" and - path = TypePath::cons(getRefTypeParameter(), path0) + exists(MethodResolution::ImplicitDeref::DerefImplItemNode impl | + impl.isRefImpl() and + apos.isSelf() and + derefChainBorrow = "." + impl.getId() + ";" and + path = TypePath::cons(getRefTypeParameter(), path0) + ) or // adjust for implicit borrow apos.isSelf() and - derefChainBorrow = ";borrow" and + derefChainBorrow = [";&", ";&mut"] and path0.isCons(getRefTypeParameter(), path) ) } @@ -3029,14 +3206,26 @@ private Type inferRefExprType(RefExpr ref) { ref.isMut() and result instanceof PtrMutType or ref.isConst() and result instanceof PtrConstType - else result instanceof RefType + else + if ref.isMut() + then result instanceof RefMutType + else result instanceof RefSharedType } /** Gets the root type of the reference node `ref`. */ pragma[nomagic] private Type inferRefPatType(AstNode ref) { - (ref = any(IdentPat ip | ip.isRef()).getName() or ref instanceof RefPat) and - result instanceof RefType + exists(boolean isMut | + ref = + any(IdentPat ip | + ip.isRef() and + if ip.isMut() then isMut = true else isMut = false + ).getName() + or + ref = any(RefPat rp | if rp.isMut() then isMut = true else isMut = false) + | + if isMut = true then result instanceof RefMutType else result instanceof RefSharedType + ) } pragma[nomagic] @@ -3054,9 +3243,6 @@ private Type inferTryExprType(TryExpr te, TypePath path) { pragma[nomagic] private StructType getStrStruct() { result = TStruct(any(Builtins::Str s)) } -pragma[nomagic] -private StructType getStringStruct() { result = TStruct(any(StringStruct s)) } - pragma[nomagic] private Type inferLiteralType(LiteralExpr le, TypePath path, boolean certain) { path.isEmpty() and @@ -3090,9 +3276,9 @@ private Type inferLiteralType(LiteralExpr le, TypePath path, boolean certain) { or le instanceof StringLiteralExpr and ( - path.isEmpty() and result instanceof RefType + path.isEmpty() and result instanceof RefSharedType or - path = TypePath::singleton(getRefTypeParameter()) and + path = TypePath::singleton(getRefSharedTypeParameter()) and result = getStrStruct() ) and certain = true @@ -3529,7 +3715,7 @@ private module Cached { /** Holds if `n` is implicitly borrowed. */ cached predicate implicitBorrow(AstNode n) { - any(MethodResolution::MethodCall mc).argumentHasImplicitBorrow(n) + any(MethodResolution::MethodCall mc).argumentHasImplicitBorrow(n, _) } /** diff --git a/rust/ql/lib/codeql/rust/internal/TypeMention.qll b/rust/ql/lib/codeql/rust/internal/TypeMention.qll index 3e2ca8111079..c3743c5df42d 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeMention.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeMention.qll @@ -54,13 +54,16 @@ class ArrayTypeReprMention extends TypeMention instanceof ArrayTypeRepr { } class RefTypeReprMention extends TypeMention instanceof RefTypeRepr { + private RefType resolveRootType() { + if super.isMut() then result instanceof RefMutType else result instanceof RefSharedType + } + override Type resolveTypeAt(TypePath path) { - path.isEmpty() and - result instanceof RefType + path.isEmpty() and result = this.resolveRootType() or exists(TypePath suffix | result = super.getTypeRepr().(TypeMention).resolveTypeAt(suffix) and - path = TypePath::cons(getRefTypeParameter(), suffix) + path = TypePath::cons(this.resolveRootType().getPositionalTypeParameter(0), suffix) ) } } @@ -438,16 +441,22 @@ class ShorthandSelfParameterMention extends TypeMention instanceof SelfParam { private Type resolveSelfType(TypePath path) { result = resolveImplOrTraitType(encl, path) } + private RefType resolveSelfRefRootType() { + super.isRef() and + if super.isMut() then result instanceof RefMutType else result instanceof RefSharedType + } + override Type resolveTypeAt(TypePath typePath) { if super.isRef() then // `fn f(&self, ...)` typePath.isEmpty() and - result instanceof RefType + result = this.resolveSelfRefRootType() or exists(TypePath suffix | result = this.resolveSelfType(suffix) and - typePath = TypePath::cons(getRefTypeParameter(), suffix) + typePath = + TypePath::cons(this.resolveSelfRefRootType().getPositionalTypeParameter(0), suffix) ) else // `fn f(self, ...)` diff --git a/rust/ql/src/queries/telemetry/DatabaseQuality.qll b/rust/ql/src/queries/telemetry/DatabaseQuality.qll index 553783498ae1..c4c6341d3c22 100644 --- a/rust/ql/src/queries/telemetry/DatabaseQuality.qll +++ b/rust/ql/src/queries/telemetry/DatabaseQuality.qll @@ -20,25 +20,25 @@ private class RelevantFile extends File { } module CallTargetStats implements StatsSig { - // TODO: Take other calls into account - abstract private class CallExprBase extends InvocationExpr { } - - private class CallExprCallExprBase extends CallExpr, CallExprBase { } - - private class MethodCallExprCallExprBase extends MethodCallExpr, CallExprBase { } - - int getNumberOfOk() { - result = - count(CallExprBase c | c.getFile() instanceof RelevantFile and exists(c.getResolvedTarget())) + /** + * A call-like expression that is relevant for call target statistics. + * + * Note that this also includes tuple struct instantiations and tuple + * variant instantiations. + */ + private class RelevantInvocationExpr extends InvocationExpr { + RelevantInvocationExpr() { + this.getFile() instanceof RelevantFile and + not this instanceof CallExprImpl::DynamicCallExpr and + not this = any(Operation o | not o.isOverloaded(_, _, _)) + } } - additional predicate isNotOkCall(CallExprBase c) { - c.getFile() instanceof RelevantFile and - not exists(c.getResolvedTarget()) and - not c instanceof CallExprImpl::DynamicCallExpr - } + int getNumberOfOk() { result = count(RelevantInvocationExpr e | exists(e.getResolvedTarget())) } + + additional predicate isNotOkCall(RelevantInvocationExpr e) { not exists(e.getResolvedTarget()) } - int getNumberOfNotOk() { result = count(CallExprBase c | isNotOkCall(c)) } + int getNumberOfNotOk() { result = count(RelevantInvocationExpr e | isNotOkCall(e)) } string getOkText() { result = "calls with call target" } diff --git a/rust/ql/test/extractor-tests/macro-expansion/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/extractor-tests/macro-expansion/CONSISTENCY/PathResolutionConsistency.expected deleted file mode 100644 index 141cfc355b9f..000000000000 --- a/rust/ql/test/extractor-tests/macro-expansion/CONSISTENCY/PathResolutionConsistency.expected +++ /dev/null @@ -1,2 +0,0 @@ -multipleCallTargets -| proc_macro.rs:44:27:44:30 | ...::to_tokens(...) | diff --git a/rust/ql/test/library-tests/dataflow/global/inline-flow.expected b/rust/ql/test/library-tests/dataflow/global/inline-flow.expected index 9a3c906ac900..2ffa7e109954 100644 --- a/rust/ql/test/library-tests/dataflow/global/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/global/inline-flow.expected @@ -1,6 +1,7 @@ models | 1 | Summary: <& as core::ops::deref::Deref>::deref; Argument[self].Reference; ReturnValue; value | -| 2 | Summary: futures_executor::local_pool::block_on; Argument[0]; ReturnValue; value | +| 2 | Summary: <_ as core::ops::arith::Mul>::mul; Argument[self]; ReturnValue; taint | +| 3 | Summary: futures_executor::local_pool::block_on; Argument[0]; ReturnValue; value | edges | main.rs:12:28:14:1 | { ... } | main.rs:17:13:17:23 | get_data(...) | provenance | | | main.rs:13:5:13:13 | source(...) | main.rs:12:28:14:1 | { ... } | provenance | | @@ -192,10 +193,11 @@ edges | main.rs:326:17:326:25 | source(...) | main.rs:326:13:326:13 | c | provenance | | | main.rs:334:9:334:9 | a | main.rs:335:10:335:10 | a | provenance | | | main.rs:334:13:334:55 | ...::block_on(...) | main.rs:334:9:334:9 | a | provenance | | -| main.rs:334:41:334:54 | async_source(...) | main.rs:334:13:334:55 | ...::block_on(...) | provenance | MaD:2 | +| main.rs:334:41:334:54 | async_source(...) | main.rs:334:13:334:55 | ...::block_on(...) | provenance | MaD:3 | | main.rs:346:44:348:9 | { ... } | main.rs:383:18:383:38 | t.get_double_number() | provenance | | | main.rs:346:44:348:9 | { ... } | main.rs:387:18:387:50 | ...::get_double_number(...) | provenance | | -| main.rs:347:13:347:29 | self.get_number() | main.rs:346:44:348:9 | { ... } | provenance | | +| main.rs:347:13:347:29 | self.get_number() | main.rs:347:13:347:33 | ... * ... | provenance | MaD:2 | +| main.rs:347:13:347:33 | ... * ... | main.rs:346:44:348:9 | { ... } | provenance | | | main.rs:350:33:352:9 | { ... } | main.rs:391:18:391:37 | ...::get_default(...) | provenance | | | main.rs:351:13:351:21 | source(...) | main.rs:350:33:352:9 | { ... } | provenance | | | main.rs:358:37:360:9 | { ... } | main.rs:347:13:347:29 | self.get_number() | provenance | | @@ -426,6 +428,7 @@ nodes | main.rs:335:10:335:10 | a | semmle.label | a | | main.rs:346:44:348:9 | { ... } | semmle.label | { ... } | | main.rs:347:13:347:29 | self.get_number() | semmle.label | self.get_number() | +| main.rs:347:13:347:33 | ... * ... | semmle.label | ... * ... | | main.rs:350:33:352:9 | { ... } | semmle.label | { ... } | | main.rs:351:13:351:21 | source(...) | semmle.label | source(...) | | main.rs:358:37:360:9 | { ... } | semmle.label | { ... } | diff --git a/rust/ql/test/library-tests/dataflow/global/viableCallable.expected b/rust/ql/test/library-tests/dataflow/global/viableCallable.expected index 66b4abd4649a..8524e35fad50 100644 --- a/rust/ql/test/library-tests/dataflow/global/viableCallable.expected +++ b/rust/ql/test/library-tests/dataflow/global/viableCallable.expected @@ -61,7 +61,6 @@ | main.rs:212:24:212:33 | source(...) | main.rs:1:1:3:1 | fn source | | main.rs:214:5:214:11 | sink(...) | main.rs:5:1:7:1 | fn sink | | main.rs:236:11:236:15 | * ... | {EXTERNAL LOCATION} | fn deref | -| main.rs:236:11:236:15 | * ... | {EXTERNAL LOCATION} | fn deref | | main.rs:242:28:242:36 | source(...) | main.rs:1:1:3:1 | fn source | | main.rs:244:13:244:17 | ... + ... | main.rs:220:5:223:5 | fn add | | main.rs:245:5:245:17 | sink(...) | main.rs:5:1:7:1 | fn sink | @@ -79,7 +78,6 @@ | main.rs:267:5:267:17 | sink(...) | main.rs:5:1:7:1 | fn sink | | main.rs:270:28:270:37 | source(...) | main.rs:1:1:3:1 | fn source | | main.rs:272:13:272:29 | * ... | {EXTERNAL LOCATION} | fn deref | -| main.rs:272:13:272:29 | * ... | {EXTERNAL LOCATION} | fn deref | | main.rs:272:14:272:29 | ...::deref(...) | main.rs:235:5:237:5 | fn deref | | main.rs:273:5:273:11 | sink(...) | main.rs:5:1:7:1 | fn sink | | main.rs:275:28:275:37 | source(...) | main.rs:1:1:3:1 | fn source | @@ -108,6 +106,7 @@ | main.rs:337:33:337:61 | test_async_await_async_part(...) | main.rs:321:1:331:1 | fn test_async_await_async_part | | main.rs:347:13:347:29 | self.get_number() | main.rs:358:9:360:9 | fn get_number | | main.rs:347:13:347:29 | self.get_number() | main.rs:366:9:368:9 | fn get_number | +| main.rs:347:13:347:33 | ... * ... | {EXTERNAL LOCATION} | fn mul | | main.rs:351:13:351:21 | source(...) | main.rs:1:1:3:1 | fn source | | main.rs:359:13:359:21 | source(...) | main.rs:1:1:3:1 | fn source | | main.rs:371:13:371:22 | source(...) | main.rs:1:1:3:1 | fn source | diff --git a/rust/ql/test/library-tests/dataflow/pointers/inline-flow.expected b/rust/ql/test/library-tests/dataflow/pointers/inline-flow.expected index 2c7fbc9381f8..55b07f9efcc9 100644 --- a/rust/ql/test/library-tests/dataflow/pointers/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/pointers/inline-flow.expected @@ -1,5 +1,6 @@ models | 1 | Summary: <& as core::ops::deref::Deref>::deref; Argument[self].Reference; ReturnValue; value | +| 2 | Summary: <&mut as core::ops::deref::Deref>::deref; Argument[self].Reference; ReturnValue; value | edges | main.rs:17:13:17:13 | a | main.rs:18:18:18:18 | a | provenance | | | main.rs:17:17:17:26 | source(...) | main.rs:17:13:17:13 | a | provenance | | @@ -40,17 +41,17 @@ edges | main.rs:59:34:59:34 | p [&ref] | main.rs:59:33:59:34 | * ... | provenance | MaD:1 | | main.rs:73:10:73:10 | [post] b [&ref] | main.rs:74:15:74:15 | b [&ref] | provenance | | | main.rs:73:14:73:23 | source(...) | main.rs:73:10:73:10 | [post] b [&ref] | provenance | | -| main.rs:74:15:74:15 | b [&ref] | main.rs:74:14:74:15 | * ... | provenance | MaD:1 | +| main.rs:74:15:74:15 | b [&ref] | main.rs:74:14:74:15 | * ... | provenance | MaD:2 | | main.rs:90:11:90:16 | [post] &mut a [&ref] | main.rs:90:16:90:16 | [post] a | provenance | | | main.rs:90:16:90:16 | [post] a | main.rs:91:14:91:14 | a | provenance | | | main.rs:90:21:90:30 | source(...) | main.rs:90:11:90:16 | [post] &mut a [&ref] | provenance | | | main.rs:105:10:105:10 | [post] c [&ref] | main.rs:106:15:106:15 | c [&ref] | provenance | | | main.rs:105:14:105:23 | source(...) | main.rs:105:10:105:10 | [post] c [&ref] | provenance | | -| main.rs:106:15:106:15 | c [&ref] | main.rs:106:14:106:15 | * ... | provenance | MaD:1 | +| main.rs:106:15:106:15 | c [&ref] | main.rs:106:14:106:15 | * ... | provenance | MaD:2 | | main.rs:112:13:112:21 | ref mut a | main.rs:112:21:112:21 | a [&ref] | provenance | | | main.rs:112:21:112:21 | a [&ref] | main.rs:113:15:113:15 | a [&ref] | provenance | | | main.rs:112:25:112:34 | source(...) | main.rs:112:13:112:21 | ref mut a | provenance | | -| main.rs:113:15:113:15 | a [&ref] | main.rs:113:14:113:15 | * ... | provenance | MaD:1 | +| main.rs:113:15:113:15 | a [&ref] | main.rs:113:14:113:15 | * ... | provenance | MaD:2 | | main.rs:149:14:149:24 | ...: MyNumber [MyNumber] | main.rs:150:11:150:11 | m [MyNumber] | provenance | | | main.rs:150:11:150:11 | m [MyNumber] | main.rs:151:9:151:34 | ...::MyNumber(...) [MyNumber] | provenance | | | main.rs:151:9:151:34 | ...::MyNumber(...) [MyNumber] | main.rs:151:28:151:33 | number | provenance | | @@ -92,7 +93,7 @@ edges | main.rs:210:17:210:17 | [post] p [&ref] | main.rs:211:15:211:15 | p [&ref] | provenance | | | main.rs:210:20:210:29 | source(...) | main.rs:200:29:200:38 | ...: i64 | provenance | | | main.rs:210:20:210:29 | source(...) | main.rs:210:17:210:17 | [post] p [&ref] | provenance | | -| main.rs:211:15:211:15 | p [&ref] | main.rs:211:14:211:15 | * ... | provenance | MaD:1 | +| main.rs:211:15:211:15 | p [&ref] | main.rs:211:14:211:15 | * ... | provenance | MaD:2 | | main.rs:218:17:218:22 | [post] &mut n [&ref] | main.rs:218:22:218:22 | [post] n | provenance | | | main.rs:218:22:218:22 | [post] n | main.rs:219:14:219:14 | n | provenance | | | main.rs:218:25:218:34 | source(...) | main.rs:200:29:200:38 | ...: i64 | provenance | | diff --git a/rust/ql/test/library-tests/dataflow/sources/file/InlineFlow.expected b/rust/ql/test/library-tests/dataflow/sources/file/InlineFlow.expected index 22bc5f61d77e..f0892f47e1e7 100644 --- a/rust/ql/test/library-tests/dataflow/sources/file/InlineFlow.expected +++ b/rust/ql/test/library-tests/dataflow/sources/file/InlineFlow.expected @@ -37,7 +37,8 @@ models | 36 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_string; Argument[self].Reference; Argument[0].Reference; taint | | 37 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_u8; Argument[self].Reference; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | | 38 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 39 | Summary: ::as_path; Argument[self]; ReturnValue; value | +| 39 | Summary: ::canonicalize; Argument[self].Reference.OptionalBarrier[normalize-path]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 40 | Summary: ::as_path; Argument[self]; ReturnValue; value | edges | test.rs:12:13:12:18 | buffer | test.rs:13:14:13:19 | buffer | provenance | | | test.rs:12:31:12:43 | ...::read | test.rs:12:31:12:43 | ...::read [Ok] | provenance | Src:MaD:11 | @@ -59,12 +60,15 @@ edges | test.rs:22:22:22:52 | TryExpr | test.rs:22:13:22:18 | buffer | provenance | | | test.rs:29:13:29:16 | path | test.rs:30:14:30:17 | path | provenance | | | test.rs:29:13:29:16 | path | test.rs:31:14:31:17 | path | provenance | | +| test.rs:29:13:29:16 | path | test.rs:40:14:40:17 | path | provenance | | | test.rs:29:13:29:16 | path | test.rs:41:14:41:17 | path | provenance | | | test.rs:29:20:29:27 | e.path() | test.rs:29:13:29:16 | path | provenance | | | test.rs:29:22:29:25 | path | test.rs:29:20:29:27 | e.path() | provenance | Src:MaD:4 MaD:4 | | test.rs:30:14:30:17 | path | test.rs:30:14:30:25 | path.clone() | provenance | MaD:20 | | test.rs:31:14:31:17 | path | test.rs:31:14:31:25 | path.clone() | provenance | MaD:20 | -| test.rs:31:14:31:25 | path.clone() | test.rs:31:14:31:35 | ... .as_path() | provenance | MaD:39 | +| test.rs:31:14:31:25 | path.clone() | test.rs:31:14:31:35 | ... .as_path() | provenance | MaD:40 | +| test.rs:40:14:40:17 | path | test.rs:40:14:40:32 | path.canonicalize() [Ok] | provenance | MaD:39 | +| test.rs:40:14:40:32 | path.canonicalize() [Ok] | test.rs:40:14:40:41 | ... .unwrap() | provenance | MaD:38 | | test.rs:43:13:43:21 | file_name | test.rs:44:14:44:22 | file_name | provenance | | | test.rs:43:13:43:21 | file_name | test.rs:49:14:49:22 | file_name | provenance | | | test.rs:43:25:43:37 | e.file_name() | test.rs:43:13:43:21 | file_name | provenance | | @@ -286,6 +290,9 @@ nodes | test.rs:31:14:31:17 | path | semmle.label | path | | test.rs:31:14:31:25 | path.clone() | semmle.label | path.clone() | | test.rs:31:14:31:35 | ... .as_path() | semmle.label | ... .as_path() | +| test.rs:40:14:40:17 | path | semmle.label | path | +| test.rs:40:14:40:32 | path.canonicalize() [Ok] | semmle.label | path.canonicalize() [Ok] | +| test.rs:40:14:40:41 | ... .unwrap() | semmle.label | ... .unwrap() | | test.rs:41:14:41:17 | path | semmle.label | path | | test.rs:43:13:43:21 | file_name | semmle.label | file_name | | test.rs:43:25:43:37 | e.file_name() | semmle.label | e.file_name() | @@ -507,6 +514,7 @@ testFailures | test.rs:23:14:23:19 | buffer | test.rs:22:22:22:39 | ...::read_to_string | test.rs:23:14:23:19 | buffer | $@ | test.rs:22:22:22:39 | ...::read_to_string | ...::read_to_string | | test.rs:30:14:30:25 | path.clone() | test.rs:29:22:29:25 | path | test.rs:30:14:30:25 | path.clone() | $@ | test.rs:29:22:29:25 | path | path | | test.rs:31:14:31:35 | ... .as_path() | test.rs:29:22:29:25 | path | test.rs:31:14:31:35 | ... .as_path() | $@ | test.rs:29:22:29:25 | path | path | +| test.rs:40:14:40:41 | ... .unwrap() | test.rs:29:22:29:25 | path | test.rs:40:14:40:41 | ... .unwrap() | $@ | test.rs:29:22:29:25 | path | path | | test.rs:41:14:41:17 | path | test.rs:29:22:29:25 | path | test.rs:41:14:41:17 | path | $@ | test.rs:29:22:29:25 | path | path | | test.rs:44:14:44:30 | file_name.clone() | test.rs:43:27:43:35 | file_name | test.rs:44:14:44:30 | file_name.clone() | $@ | test.rs:43:27:43:35 | file_name | file_name | | test.rs:49:14:49:22 | file_name | test.rs:43:27:43:35 | file_name | test.rs:49:14:49:22 | file_name | $@ | test.rs:43:27:43:35 | file_name | file_name | diff --git a/rust/ql/test/library-tests/dataflow/sources/file/TaintSources.expected b/rust/ql/test/library-tests/dataflow/sources/file/TaintSources.expected index f7687e025d78..18a6dfdbb0cd 100644 --- a/rust/ql/test/library-tests/dataflow/sources/file/TaintSources.expected +++ b/rust/ql/test/library-tests/dataflow/sources/file/TaintSources.expected @@ -10,6 +10,9 @@ | test.rs:51:52:51:59 | read_dir | Flow source 'FileSource' of type file (DEFAULT). | | test.rs:54:22:54:25 | path | Flow source 'FileSource' of type file (DEFAULT). | | test.rs:55:27:55:35 | file_name | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:57:56:57:63 | read_dir | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:60:22:60:25 | path | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:61:27:61:35 | file_name | Flow source 'FileSource' of type file (DEFAULT). | | test.rs:65:22:65:34 | ...::read_link | Flow source 'FileSource' of type file (DEFAULT). | | test.rs:74:31:74:45 | ...::read | Flow source 'FileSource' of type file (DEFAULT). | | test.rs:79:31:79:45 | ...::read | Flow source 'FileSource' of type file (DEFAULT). | diff --git a/rust/ql/test/library-tests/dataflow/sources/file/test.rs b/rust/ql/test/library-tests/dataflow/sources/file/test.rs index 0124d2a094e0..4aa56a0dd74a 100644 --- a/rust/ql/test/library-tests/dataflow/sources/file/test.rs +++ b/rust/ql/test/library-tests/dataflow/sources/file/test.rs @@ -37,7 +37,7 @@ fn test_fs() -> Result<(), Box> { sink(path.to_path_buf()); // $ MISSING: hasTaintFlow sink(path.file_name().unwrap()); // $ MISSING: hasTaintFlow sink(path.extension().unwrap()); // $ MISSING: hasTaintFlow - sink(path.canonicalize().unwrap()); // $ MISSING: hasTaintFlow + sink(path.canonicalize().unwrap()); // $ hasTaintFlow sink(path); // $ hasTaintFlow let file_name = e.file_name(); // $ Alert[rust/summary/taint-sources] @@ -54,11 +54,11 @@ fn test_fs() -> Result<(), Box> { let path = e.path(); // $ Alert[rust/summary/taint-sources] let file_name = e.file_name(); // $ Alert[rust/summary/taint-sources] } - for entry in std::path::PathBuf::from("directory").read_dir()? { + for entry in std::path::PathBuf::from("directory").read_dir()? { // $ Alert[rust/summary/taint-sources] let e = entry?; - let path = e.path(); // $ MISSING: Alert[rust/summary/taint-sources] - let file_name = e.file_name(); // $ MISSING: Alert[rust/summary/taint-sources] + let path = e.path(); // $ Alert[rust/summary/taint-sources] + let file_name = e.file_name(); // $ Alert[rust/summary/taint-sources] } { diff --git a/rust/ql/test/library-tests/dataflow/sources/net/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/dataflow/sources/net/CONSISTENCY/PathResolutionConsistency.expected index ca5c386b720c..8ca58acd1d06 100644 --- a/rust/ql/test/library-tests/dataflow/sources/net/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/dataflow/sources/net/CONSISTENCY/PathResolutionConsistency.expected @@ -1,9 +1,6 @@ -multipleCallTargets -| test.rs:59:62:59:77 | ...::from(...) | -| test.rs:66:58:66:73 | ...::from(...) | +multipleResolvedTargets | test.rs:389:30:389:67 | pinned.poll_read(...) | | test.rs:416:26:416:54 | pinned.poll_fill_buf(...) | | test.rs:423:27:423:71 | ... .poll_fill_buf(...) | | test.rs:447:30:447:67 | pinned.poll_read(...) | | test.rs:470:26:470:54 | pinned.poll_fill_buf(...) | -| test.rs:519:50:519:66 | ...::from(...) | diff --git a/rust/ql/test/library-tests/dataflow/sources/net/InlineFlow.expected b/rust/ql/test/library-tests/dataflow/sources/net/InlineFlow.expected index 2b39cf16c428..a5a4846284ed 100644 --- a/rust/ql/test/library-tests/dataflow/sources/net/InlineFlow.expected +++ b/rust/ql/test/library-tests/dataflow/sources/net/InlineFlow.expected @@ -1,93 +1,97 @@ models | 1 | Source: ::connect; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote | | 2 | Source: ::send_request; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote | -| 3 | Source: ::connect; ReturnValue.Field[core::result::Result::Ok(0)]; remote | -| 4 | Source: ::connect_timeout; ReturnValue.Field[core::result::Result::Ok(0)]; remote | -| 5 | Source: ::connect; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote | -| 6 | Source: reqwest::blocking::get; ReturnValue.Field[core::result::Result::Ok(0)]; remote | -| 7 | Source: reqwest::get; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote | -| 8 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | -| 9 | Summary: <_ as futures_io::if_std::AsyncBufRead>::poll_fill_buf; Argument[self].Reference; ReturnValue.Field[core::task::poll::Poll::Ready(0)].Field[core::result::Result::Ok(0)]; taint | -| 10 | Summary: <_ as futures_io::if_std::AsyncRead>::poll_read; Argument[self].Reference; Argument[1].Reference; taint | -| 11 | Summary: <_ as futures_util::io::AsyncBufReadExt>::fill_buf; Argument[self].Reference; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 12 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_line; Argument[self].Reference; Argument[0].Reference; taint | -| 13 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_until; Argument[self].Reference; Argument[1].Reference; taint | -| 14 | Summary: <_ as futures_util::io::AsyncReadExt>::read; Argument[self].Reference; Argument[0].Reference; taint | -| 15 | Summary: <_ as futures_util::io::AsyncReadExt>::read_to_end; Argument[self].Reference; Argument[0].Reference; taint | -| 16 | Summary: <_ as std::io::BufRead>::read_line; Argument[self].Reference; Argument[0].Reference; taint | -| 17 | Summary: <_ as std::io::Read>::read; Argument[self].Reference; Argument[0].Reference; taint | -| 18 | Summary: <_ as std::io::Read>::take; Argument[self]; ReturnValue; taint | -| 19 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read; Argument[self].Reference; Argument[0].Reference; taint | -| 20 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | -| 21 | Summary: ::new; Argument[0].Reference; ReturnValue; value | -| 22 | Summary: ::new; Argument[0]; ReturnValue.Field[core::pin::Pin::pointer]; value | -| 23 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 24 | Summary: ::connect; Argument[1]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 25 | Summary: ::new; Argument[0]; ReturnValue; taint | -| 26 | Summary: ::bytes; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 27 | Summary: ::chunk; Argument[self].Reference; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | -| 28 | Summary: ::text; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 29 | Summary: ::bytes; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 30 | Summary: ::text; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 31 | Summary: ::text_with_charset; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 32 | Summary: ::new; Argument[0]; ReturnValue; taint | -| 33 | Summary: ::peek; Argument[self].Reference; Argument[0].Reference; taint | -| 34 | Summary: ::try_read; Argument[self].Reference; Argument[0].Reference; taint | -| 35 | Summary: ::try_read_buf; Argument[self].Reference; Argument[0].Reference; taint | +| 3 | Source: ::new; ReturnValue.Field[core::result::Result::Ok(0)]; remote | +| 4 | Source: ::connect; ReturnValue.Field[core::result::Result::Ok(0)]; remote | +| 5 | Source: ::connect_timeout; ReturnValue.Field[core::result::Result::Ok(0)]; remote | +| 6 | Source: ::connect; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote | +| 7 | Source: reqwest::blocking::get; ReturnValue.Field[core::result::Result::Ok(0)]; remote | +| 8 | Source: reqwest::get; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote | +| 9 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | +| 10 | Summary: <_ as futures_io::if_std::AsyncBufRead>::poll_fill_buf; Argument[self].Reference; ReturnValue.Field[core::task::poll::Poll::Ready(0)].Field[core::result::Result::Ok(0)]; taint | +| 11 | Summary: <_ as futures_io::if_std::AsyncRead>::poll_read; Argument[self].Reference; Argument[1].Reference; taint | +| 12 | Summary: <_ as futures_util::io::AsyncBufReadExt>::fill_buf; Argument[self].Reference; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 13 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_line; Argument[self].Reference; Argument[0].Reference; taint | +| 14 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_until; Argument[self].Reference; Argument[1].Reference; taint | +| 15 | Summary: <_ as futures_util::io::AsyncReadExt>::read; Argument[self].Reference; Argument[0].Reference; taint | +| 16 | Summary: <_ as futures_util::io::AsyncReadExt>::read_to_end; Argument[self].Reference; Argument[0].Reference; taint | +| 17 | Summary: <_ as std::io::BufRead>::read_line; Argument[self].Reference; Argument[0].Reference; taint | +| 18 | Summary: <_ as std::io::Read>::read; Argument[self].Reference; Argument[0].Reference; taint | +| 19 | Summary: <_ as std::io::Read>::read_to_end; Argument[self].Reference; Argument[0].Reference; taint | +| 20 | Summary: <_ as std::io::Read>::read_to_string; Argument[self].Reference; Argument[0].Reference; taint | +| 21 | Summary: <_ as std::io::Read>::take; Argument[self]; ReturnValue; taint | +| 22 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read; Argument[self].Reference; Argument[0].Reference; taint | +| 23 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 24 | Summary: ::new; Argument[0].Reference; ReturnValue; value | +| 25 | Summary: ::new; Argument[0]; ReturnValue.Field[core::pin::Pin::pointer]; value | +| 26 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 27 | Summary: ::connect; Argument[1]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 28 | Summary: ::new; Argument[0]; ReturnValue; taint | +| 29 | Summary: ::bytes; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 30 | Summary: ::chunk; Argument[self].Reference; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | +| 31 | Summary: ::text; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 32 | Summary: ::bytes; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 33 | Summary: ::text; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 34 | Summary: ::text_with_charset; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 35 | Summary: ::reader; Argument[self]; ReturnValue; taint | +| 36 | Summary: ::new; Argument[0]; ReturnValue; taint | +| 37 | Summary: ::peek; Argument[self].Reference; Argument[0].Reference; taint | +| 38 | Summary: ::try_read; Argument[self].Reference; Argument[0].Reference; taint | +| 39 | Summary: ::try_read_buf; Argument[self].Reference; Argument[0].Reference; taint | edges | test.rs:11:9:11:22 | remote_string1 | test.rs:12:10:12:23 | remote_string1 | provenance | | -| test.rs:11:26:11:47 | ...::get | test.rs:11:26:11:62 | ...::get(...) [Ok] | provenance | Src:MaD:6 | +| test.rs:11:26:11:47 | ...::get | test.rs:11:26:11:62 | ...::get(...) [Ok] | provenance | Src:MaD:7 | | test.rs:11:26:11:62 | ...::get(...) [Ok] | test.rs:11:26:11:63 | TryExpr | provenance | | -| test.rs:11:26:11:63 | TryExpr | test.rs:11:26:11:70 | ... .text() [Ok] | provenance | MaD:30 | +| test.rs:11:26:11:63 | TryExpr | test.rs:11:26:11:70 | ... .text() [Ok] | provenance | MaD:33 | | test.rs:11:26:11:70 | ... .text() [Ok] | test.rs:11:26:11:71 | TryExpr | provenance | | | test.rs:11:26:11:71 | TryExpr | test.rs:11:9:11:22 | remote_string1 | provenance | | | test.rs:14:9:14:22 | remote_string2 | test.rs:15:10:15:23 | remote_string2 | provenance | | -| test.rs:14:26:14:47 | ...::get | test.rs:14:26:14:62 | ...::get(...) [Ok] | provenance | Src:MaD:6 | -| test.rs:14:26:14:62 | ...::get(...) [Ok] | test.rs:14:26:14:71 | ... .unwrap() | provenance | MaD:23 | -| test.rs:14:26:14:71 | ... .unwrap() | test.rs:14:26:14:78 | ... .text() [Ok] | provenance | MaD:30 | -| test.rs:14:26:14:78 | ... .text() [Ok] | test.rs:14:26:14:87 | ... .unwrap() | provenance | MaD:23 | +| test.rs:14:26:14:47 | ...::get | test.rs:14:26:14:62 | ...::get(...) [Ok] | provenance | Src:MaD:7 | +| test.rs:14:26:14:62 | ...::get(...) [Ok] | test.rs:14:26:14:71 | ... .unwrap() | provenance | MaD:26 | +| test.rs:14:26:14:71 | ... .unwrap() | test.rs:14:26:14:78 | ... .text() [Ok] | provenance | MaD:33 | +| test.rs:14:26:14:78 | ... .text() [Ok] | test.rs:14:26:14:87 | ... .unwrap() | provenance | MaD:26 | | test.rs:14:26:14:87 | ... .unwrap() | test.rs:14:9:14:22 | remote_string2 | provenance | | | test.rs:17:9:17:22 | remote_string3 | test.rs:18:10:18:23 | remote_string3 | provenance | | -| test.rs:17:26:17:47 | ...::get | test.rs:17:26:17:62 | ...::get(...) [Ok] | provenance | Src:MaD:6 | -| test.rs:17:26:17:62 | ...::get(...) [Ok] | test.rs:17:26:17:71 | ... .unwrap() | provenance | MaD:23 | -| test.rs:17:26:17:71 | ... .unwrap() | test.rs:17:26:17:98 | ... .text_with_charset(...) [Ok] | provenance | MaD:31 | -| test.rs:17:26:17:98 | ... .text_with_charset(...) [Ok] | test.rs:17:26:17:107 | ... .unwrap() | provenance | MaD:23 | +| test.rs:17:26:17:47 | ...::get | test.rs:17:26:17:62 | ...::get(...) [Ok] | provenance | Src:MaD:7 | +| test.rs:17:26:17:62 | ...::get(...) [Ok] | test.rs:17:26:17:71 | ... .unwrap() | provenance | MaD:26 | +| test.rs:17:26:17:71 | ... .unwrap() | test.rs:17:26:17:98 | ... .text_with_charset(...) [Ok] | provenance | MaD:34 | +| test.rs:17:26:17:98 | ... .text_with_charset(...) [Ok] | test.rs:17:26:17:107 | ... .unwrap() | provenance | MaD:26 | | test.rs:17:26:17:107 | ... .unwrap() | test.rs:17:9:17:22 | remote_string3 | provenance | | | test.rs:20:9:20:22 | remote_string4 | test.rs:21:10:21:23 | remote_string4 | provenance | | -| test.rs:20:26:20:47 | ...::get | test.rs:20:26:20:62 | ...::get(...) [Ok] | provenance | Src:MaD:6 | -| test.rs:20:26:20:62 | ...::get(...) [Ok] | test.rs:20:26:20:71 | ... .unwrap() | provenance | MaD:23 | -| test.rs:20:26:20:71 | ... .unwrap() | test.rs:20:26:20:79 | ... .bytes() [Ok] | provenance | MaD:29 | -| test.rs:20:26:20:79 | ... .bytes() [Ok] | test.rs:20:26:20:88 | ... .unwrap() | provenance | MaD:23 | +| test.rs:20:26:20:47 | ...::get | test.rs:20:26:20:62 | ...::get(...) [Ok] | provenance | Src:MaD:7 | +| test.rs:20:26:20:62 | ...::get(...) [Ok] | test.rs:20:26:20:71 | ... .unwrap() | provenance | MaD:26 | +| test.rs:20:26:20:71 | ... .unwrap() | test.rs:20:26:20:79 | ... .bytes() [Ok] | provenance | MaD:32 | +| test.rs:20:26:20:79 | ... .bytes() [Ok] | test.rs:20:26:20:88 | ... .unwrap() | provenance | MaD:26 | | test.rs:20:26:20:88 | ... .unwrap() | test.rs:20:9:20:22 | remote_string4 | provenance | | | test.rs:23:9:23:22 | remote_string5 | test.rs:24:10:24:23 | remote_string5 | provenance | | -| test.rs:23:26:23:37 | ...::get | test.rs:23:26:23:52 | ...::get(...) [future, Ok] | provenance | Src:MaD:7 | +| test.rs:23:26:23:37 | ...::get | test.rs:23:26:23:52 | ...::get(...) [future, Ok] | provenance | Src:MaD:8 | | test.rs:23:26:23:52 | ...::get(...) [future, Ok] | test.rs:23:26:23:58 | await ... [Ok] | provenance | | | test.rs:23:26:23:58 | await ... [Ok] | test.rs:23:26:23:59 | TryExpr | provenance | | -| test.rs:23:26:23:59 | TryExpr | test.rs:23:26:23:66 | ... .text() [future, Ok] | provenance | MaD:28 | +| test.rs:23:26:23:59 | TryExpr | test.rs:23:26:23:66 | ... .text() [future, Ok] | provenance | MaD:31 | | test.rs:23:26:23:66 | ... .text() [future, Ok] | test.rs:23:26:23:72 | await ... [Ok] | provenance | | | test.rs:23:26:23:72 | await ... [Ok] | test.rs:23:26:23:73 | TryExpr | provenance | | | test.rs:23:26:23:73 | TryExpr | test.rs:23:9:23:22 | remote_string5 | provenance | | | test.rs:26:9:26:22 | remote_string6 | test.rs:27:10:27:23 | remote_string6 | provenance | | -| test.rs:26:26:26:37 | ...::get | test.rs:26:26:26:52 | ...::get(...) [future, Ok] | provenance | Src:MaD:7 | +| test.rs:26:26:26:37 | ...::get | test.rs:26:26:26:52 | ...::get(...) [future, Ok] | provenance | Src:MaD:8 | | test.rs:26:26:26:52 | ...::get(...) [future, Ok] | test.rs:26:26:26:58 | await ... [Ok] | provenance | | | test.rs:26:26:26:58 | await ... [Ok] | test.rs:26:26:26:59 | TryExpr | provenance | | -| test.rs:26:26:26:59 | TryExpr | test.rs:26:26:26:67 | ... .bytes() [future, Ok] | provenance | MaD:26 | +| test.rs:26:26:26:59 | TryExpr | test.rs:26:26:26:67 | ... .bytes() [future, Ok] | provenance | MaD:29 | | test.rs:26:26:26:67 | ... .bytes() [future, Ok] | test.rs:26:26:26:73 | await ... [Ok] | provenance | | | test.rs:26:26:26:73 | await ... [Ok] | test.rs:26:26:26:74 | TryExpr | provenance | | | test.rs:26:26:26:74 | TryExpr | test.rs:26:9:26:22 | remote_string6 | provenance | | | test.rs:29:9:29:20 | mut request1 | test.rs:30:10:30:17 | request1 | provenance | | | test.rs:29:9:29:20 | mut request1 | test.rs:31:29:31:36 | request1 | provenance | | -| test.rs:29:24:29:35 | ...::get | test.rs:29:24:29:50 | ...::get(...) [future, Ok] | provenance | Src:MaD:7 | +| test.rs:29:24:29:35 | ...::get | test.rs:29:24:29:50 | ...::get(...) [future, Ok] | provenance | Src:MaD:8 | | test.rs:29:24:29:50 | ...::get(...) [future, Ok] | test.rs:29:24:29:56 | await ... [Ok] | provenance | | | test.rs:29:24:29:56 | await ... [Ok] | test.rs:29:24:29:57 | TryExpr | provenance | | | test.rs:29:24:29:57 | TryExpr | test.rs:29:9:29:20 | mut request1 | provenance | | -| test.rs:30:10:30:17 | request1 | test.rs:30:10:30:25 | request1.chunk() [future, Ok, Some] | provenance | MaD:27 | +| test.rs:30:10:30:17 | request1 | test.rs:30:10:30:25 | request1.chunk() [future, Ok, Some] | provenance | MaD:30 | | test.rs:30:10:30:25 | request1.chunk() [future, Ok, Some] | test.rs:30:10:30:31 | await ... [Ok, Some] | provenance | | | test.rs:30:10:30:31 | await ... [Ok, Some] | test.rs:30:10:30:32 | TryExpr [Some] | provenance | | -| test.rs:30:10:30:32 | TryExpr [Some] | test.rs:30:10:30:41 | ... .unwrap() | provenance | MaD:20 | +| test.rs:30:10:30:32 | TryExpr [Some] | test.rs:30:10:30:41 | ... .unwrap() | provenance | MaD:23 | | test.rs:31:15:31:25 | Some(...) [Some] | test.rs:31:20:31:24 | chunk | provenance | | | test.rs:31:20:31:24 | chunk | test.rs:32:14:32:18 | chunk | provenance | | -| test.rs:31:29:31:36 | request1 | test.rs:31:29:31:44 | request1.chunk() [future, Ok, Some] | provenance | MaD:27 | +| test.rs:31:29:31:36 | request1 | test.rs:31:29:31:44 | request1.chunk() [future, Ok, Some] | provenance | MaD:30 | | test.rs:31:29:31:44 | request1.chunk() [future, Ok, Some] | test.rs:31:29:31:50 | await ... [Ok, Some] | provenance | | | test.rs:31:29:31:50 | await ... [Ok, Some] | test.rs:31:29:31:51 | TryExpr [Some] | provenance | | | test.rs:31:29:31:51 | TryExpr [Some] | test.rs:31:15:31:25 | Some(...) [Some] | provenance | | @@ -105,24 +109,24 @@ edges | test.rs:67:31:67:42 | send_request | test.rs:67:24:67:51 | sender.send_request(...) [future, Ok] | provenance | Src:MaD:2 | | test.rs:68:11:68:18 | response | test.rs:68:10:68:18 | &response | provenance | | | test.rs:155:13:155:22 | mut stream | test.rs:162:17:162:22 | stream | provenance | | -| test.rs:155:26:155:53 | ...::connect | test.rs:155:26:155:62 | ...::connect(...) [Ok] | provenance | Src:MaD:3 | +| test.rs:155:26:155:53 | ...::connect | test.rs:155:26:155:62 | ...::connect(...) [Ok] | provenance | Src:MaD:4 | | test.rs:155:26:155:62 | ...::connect(...) [Ok] | test.rs:155:26:155:63 | TryExpr | provenance | | | test.rs:155:26:155:63 | TryExpr | test.rs:155:13:155:22 | mut stream | provenance | | -| test.rs:162:17:162:22 | stream | test.rs:162:29:162:39 | [post] &mut buffer [&ref] | provenance | MaD:17 | +| test.rs:162:17:162:22 | stream | test.rs:162:29:162:39 | [post] &mut buffer [&ref] | provenance | MaD:18 | | test.rs:162:29:162:39 | [post] &mut buffer [&ref] | test.rs:162:34:162:39 | [post] buffer | provenance | | | test.rs:162:34:162:39 | [post] buffer | test.rs:165:15:165:20 | buffer | provenance | | | test.rs:162:34:162:39 | [post] buffer | test.rs:166:14:166:19 | buffer | provenance | | | test.rs:165:15:165:20 | buffer | test.rs:165:14:165:20 | &buffer | provenance | | -| test.rs:166:14:166:19 | buffer | test.rs:166:14:166:22 | buffer[0] | provenance | MaD:8 | +| test.rs:166:14:166:19 | buffer | test.rs:166:14:166:22 | buffer[0] | provenance | MaD:9 | | test.rs:174:13:174:22 | mut stream | test.rs:182:58:182:63 | stream | provenance | | -| test.rs:174:26:174:61 | ...::connect_timeout | test.rs:174:26:174:105 | ...::connect_timeout(...) [Ok] | provenance | Src:MaD:4 | +| test.rs:174:26:174:61 | ...::connect_timeout | test.rs:174:26:174:105 | ...::connect_timeout(...) [Ok] | provenance | Src:MaD:5 | | test.rs:174:26:174:105 | ...::connect_timeout(...) [Ok] | test.rs:174:26:174:106 | TryExpr | provenance | | | test.rs:174:26:174:106 | TryExpr | test.rs:174:13:174:22 | mut stream | provenance | | | test.rs:182:21:182:30 | mut reader | test.rs:185:27:185:32 | reader | provenance | | -| test.rs:182:34:182:64 | ...::new(...) | test.rs:182:34:182:74 | ... .take(...) | provenance | MaD:18 | +| test.rs:182:34:182:64 | ...::new(...) | test.rs:182:34:182:74 | ... .take(...) | provenance | MaD:21 | | test.rs:182:34:182:74 | ... .take(...) | test.rs:182:21:182:30 | mut reader | provenance | | -| test.rs:182:58:182:63 | stream | test.rs:182:34:182:64 | ...::new(...) | provenance | MaD:32 | -| test.rs:185:27:185:32 | reader | test.rs:185:44:185:52 | [post] &mut line [&ref] | provenance | MaD:16 | +| test.rs:182:58:182:63 | stream | test.rs:182:34:182:64 | ...::new(...) | provenance | MaD:36 | +| test.rs:185:27:185:32 | reader | test.rs:185:44:185:52 | [post] &mut line [&ref] | provenance | MaD:17 | | test.rs:185:44:185:52 | [post] &mut line [&ref] | test.rs:185:49:185:52 | [post] line | provenance | | | test.rs:185:49:185:52 | [post] line | test.rs:192:35:192:38 | line | provenance | | | test.rs:192:35:192:38 | line | test.rs:192:34:192:38 | &line | provenance | | @@ -130,30 +134,53 @@ edges | test.rs:224:9:224:24 | mut tokio_stream | test.rs:236:18:236:29 | tokio_stream | provenance | | | test.rs:224:9:224:24 | mut tokio_stream | test.rs:252:19:252:30 | tokio_stream | provenance | | | test.rs:224:9:224:24 | mut tokio_stream | test.rs:275:19:275:30 | tokio_stream | provenance | | -| test.rs:224:28:224:57 | ...::connect | test.rs:224:28:224:66 | ...::connect(...) [future, Ok] | provenance | Src:MaD:5 | +| test.rs:224:28:224:57 | ...::connect | test.rs:224:28:224:66 | ...::connect(...) [future, Ok] | provenance | Src:MaD:6 | | test.rs:224:28:224:66 | ...::connect(...) [future, Ok] | test.rs:224:28:224:72 | await ... [Ok] | provenance | | | test.rs:224:28:224:72 | await ... [Ok] | test.rs:224:28:224:73 | TryExpr | provenance | | | test.rs:224:28:224:73 | TryExpr | test.rs:224:9:224:24 | mut tokio_stream | provenance | | -| test.rs:232:17:232:28 | tokio_stream | test.rs:232:35:232:46 | [post] &mut buffer1 [&ref] | provenance | MaD:33 | +| test.rs:232:17:232:28 | tokio_stream | test.rs:232:35:232:46 | [post] &mut buffer1 [&ref] | provenance | MaD:37 | | test.rs:232:35:232:46 | [post] &mut buffer1 [&ref] | test.rs:232:40:232:46 | [post] buffer1 | provenance | | | test.rs:232:40:232:46 | [post] buffer1 | test.rs:239:15:239:21 | buffer1 | provenance | | | test.rs:232:40:232:46 | [post] buffer1 | test.rs:240:14:240:20 | buffer1 | provenance | | -| test.rs:236:18:236:29 | tokio_stream | test.rs:236:36:236:47 | [post] &mut buffer2 [&ref] | provenance | MaD:19 | +| test.rs:236:18:236:29 | tokio_stream | test.rs:236:36:236:47 | [post] &mut buffer2 [&ref] | provenance | MaD:22 | | test.rs:236:36:236:47 | [post] &mut buffer2 [&ref] | test.rs:236:41:236:47 | [post] buffer2 | provenance | | | test.rs:236:41:236:47 | [post] buffer2 | test.rs:243:15:243:21 | buffer2 | provenance | | | test.rs:236:41:236:47 | [post] buffer2 | test.rs:244:14:244:20 | buffer2 | provenance | | | test.rs:239:15:239:21 | buffer1 | test.rs:239:14:239:21 | &buffer1 | provenance | | -| test.rs:240:14:240:20 | buffer1 | test.rs:240:14:240:23 | buffer1[0] | provenance | MaD:8 | +| test.rs:240:14:240:20 | buffer1 | test.rs:240:14:240:23 | buffer1[0] | provenance | MaD:9 | | test.rs:243:15:243:21 | buffer2 | test.rs:243:14:243:21 | &buffer2 | provenance | | -| test.rs:244:14:244:20 | buffer2 | test.rs:244:14:244:23 | buffer2[0] | provenance | MaD:8 | -| test.rs:252:19:252:30 | tokio_stream | test.rs:252:41:252:51 | [post] &mut buffer [&ref] | provenance | MaD:34 | +| test.rs:244:14:244:20 | buffer2 | test.rs:244:14:244:23 | buffer2[0] | provenance | MaD:9 | +| test.rs:252:19:252:30 | tokio_stream | test.rs:252:41:252:51 | [post] &mut buffer [&ref] | provenance | MaD:38 | | test.rs:252:41:252:51 | [post] &mut buffer [&ref] | test.rs:252:46:252:51 | [post] buffer | provenance | | | test.rs:252:46:252:51 | [post] buffer | test.rs:259:27:259:32 | buffer | provenance | | | test.rs:259:27:259:32 | buffer | test.rs:259:26:259:32 | &buffer | provenance | | -| test.rs:275:19:275:30 | tokio_stream | test.rs:275:45:275:55 | [post] &mut buffer [&ref] | provenance | MaD:35 | +| test.rs:275:19:275:30 | tokio_stream | test.rs:275:45:275:55 | [post] &mut buffer [&ref] | provenance | MaD:39 | | test.rs:275:45:275:55 | [post] &mut buffer [&ref] | test.rs:275:50:275:55 | [post] buffer | provenance | | | test.rs:275:50:275:55 | [post] buffer | test.rs:282:27:282:32 | buffer | provenance | | | test.rs:282:27:282:32 | buffer | test.rs:282:26:282:32 | &buffer | provenance | | +| test.rs:332:9:332:18 | mut client | test.rs:333:22:333:27 | client | provenance | | +| test.rs:332:22:332:50 | ...::new | test.rs:332:22:332:75 | ...::new(...) [Ok] | provenance | Src:MaD:3 | +| test.rs:332:22:332:75 | ...::new(...) [Ok] | test.rs:332:22:332:84 | ... .unwrap() | provenance | MaD:26 | +| test.rs:332:22:332:84 | ... .unwrap() | test.rs:332:9:332:18 | mut client | provenance | | +| test.rs:333:9:333:18 | mut reader | test.rs:334:11:334:16 | reader | provenance | | +| test.rs:333:9:333:18 | mut reader | test.rs:338:22:338:27 | reader | provenance | | +| test.rs:333:9:333:18 | mut reader | test.rs:344:22:344:27 | reader | provenance | | +| test.rs:333:9:333:18 | mut reader | test.rs:350:22:350:27 | reader | provenance | | +| test.rs:333:22:333:27 | client | test.rs:333:22:333:36 | client.reader() | provenance | MaD:35 | +| test.rs:333:22:333:36 | client.reader() | test.rs:333:9:333:18 | mut reader | provenance | | +| test.rs:334:11:334:16 | reader | test.rs:334:10:334:16 | &reader | provenance | | +| test.rs:338:22:338:27 | reader | test.rs:338:34:338:44 | [post] &mut buffer [&ref] | provenance | MaD:18 | +| test.rs:338:34:338:44 | [post] &mut buffer [&ref] | test.rs:338:39:338:44 | [post] buffer | provenance | | +| test.rs:338:39:338:44 | [post] buffer | test.rs:339:15:339:20 | buffer | provenance | | +| test.rs:339:15:339:20 | buffer | test.rs:339:14:339:20 | &buffer | provenance | | +| test.rs:344:22:344:27 | reader | test.rs:344:41:344:51 | [post] &mut buffer [&ref] | provenance | MaD:19 | +| test.rs:344:41:344:51 | [post] &mut buffer [&ref] | test.rs:344:46:344:51 | [post] buffer | provenance | | +| test.rs:344:46:344:51 | [post] buffer | test.rs:345:15:345:20 | buffer | provenance | | +| test.rs:345:15:345:20 | buffer | test.rs:345:14:345:20 | &buffer | provenance | | +| test.rs:350:22:350:27 | reader | test.rs:350:44:350:54 | [post] &mut buffer [&ref] | provenance | MaD:20 | +| test.rs:350:44:350:54 | [post] &mut buffer [&ref] | test.rs:350:49:350:54 | [post] buffer | provenance | | +| test.rs:350:49:350:54 | [post] buffer | test.rs:351:15:351:20 | buffer | provenance | | +| test.rs:351:15:351:20 | buffer | test.rs:351:14:351:20 | &buffer | provenance | | | test.rs:373:13:373:15 | tcp | test.rs:374:15:374:17 | tcp | provenance | | | test.rs:373:13:373:15 | tcp | test.rs:380:57:380:59 | tcp | provenance | | | test.rs:373:19:373:36 | ...::connect | test.rs:373:19:373:41 | ...::connect(...) [future, Ok] | provenance | Src:MaD:1 | @@ -169,38 +196,38 @@ edges | test.rs:380:26:380:60 | connector.connect(...) [future, Ok] | test.rs:380:26:380:66 | await ... [Ok] | provenance | | | test.rs:380:26:380:66 | await ... [Ok] | test.rs:380:26:380:67 | TryExpr | provenance | | | test.rs:380:26:380:67 | TryExpr | test.rs:380:13:380:22 | mut reader | provenance | | -| test.rs:380:57:380:59 | tcp | test.rs:380:26:380:60 | connector.connect(...) [future, Ok] | provenance | MaD:24 | +| test.rs:380:57:380:59 | tcp | test.rs:380:26:380:60 | connector.connect(...) [future, Ok] | provenance | MaD:27 | | test.rs:381:15:381:20 | reader | test.rs:381:14:381:20 | &reader | provenance | | | test.rs:386:17:386:26 | mut pinned | test.rs:387:19:387:24 | pinned | provenance | | | test.rs:386:17:386:26 | mut pinned | test.rs:389:30:389:35 | pinned | provenance | | | test.rs:386:17:386:26 | mut pinned [Pin, &ref] | test.rs:387:19:387:24 | pinned [Pin, &ref] | provenance | | | test.rs:386:30:386:50 | ...::new(...) | test.rs:386:17:386:26 | mut pinned | provenance | | | test.rs:386:30:386:50 | ...::new(...) [Pin, &ref] | test.rs:386:17:386:26 | mut pinned [Pin, &ref] | provenance | | -| test.rs:386:39:386:49 | &mut reader [&ref] | test.rs:386:30:386:50 | ...::new(...) | provenance | MaD:21 | -| test.rs:386:39:386:49 | &mut reader [&ref] | test.rs:386:30:386:50 | ...::new(...) [Pin, &ref] | provenance | MaD:22 | +| test.rs:386:39:386:49 | &mut reader [&ref] | test.rs:386:30:386:50 | ...::new(...) | provenance | MaD:24 | +| test.rs:386:39:386:49 | &mut reader [&ref] | test.rs:386:30:386:50 | ...::new(...) [Pin, &ref] | provenance | MaD:25 | | test.rs:386:44:386:49 | reader | test.rs:386:39:386:49 | &mut reader [&ref] | provenance | | | test.rs:387:19:387:24 | pinned | test.rs:387:18:387:24 | &pinned | provenance | | | test.rs:387:19:387:24 | pinned [Pin, &ref] | test.rs:387:18:387:24 | &pinned | provenance | | -| test.rs:389:30:389:35 | pinned | test.rs:389:56:389:66 | [post] &mut buffer [&ref] | provenance | MaD:10 | +| test.rs:389:30:389:35 | pinned | test.rs:389:56:389:66 | [post] &mut buffer [&ref] | provenance | MaD:11 | | test.rs:389:56:389:66 | [post] &mut buffer [&ref] | test.rs:389:61:389:66 | [post] buffer | provenance | | | test.rs:389:61:389:66 | [post] buffer | test.rs:391:23:391:28 | buffer | provenance | | | test.rs:389:61:389:66 | [post] buffer | test.rs:392:23:392:28 | buffer | provenance | | | test.rs:389:61:389:66 | [post] buffer | test.rs:392:23:392:33 | buffer[...] | provenance | | | test.rs:391:23:391:28 | buffer | test.rs:391:22:391:28 | &buffer | provenance | | -| test.rs:392:23:392:28 | buffer | test.rs:392:23:392:33 | buffer[...] | provenance | MaD:8 | +| test.rs:392:23:392:28 | buffer | test.rs:392:23:392:33 | buffer[...] | provenance | MaD:9 | | test.rs:392:23:392:33 | buffer[...] | test.rs:392:22:392:33 | &... | provenance | | -| test.rs:399:63:399:73 | &mut reader [&ref] | test.rs:399:76:399:87 | [post] &mut buffer1 [&ref] | provenance | MaD:14 | +| test.rs:399:63:399:73 | &mut reader [&ref] | test.rs:399:76:399:87 | [post] &mut buffer1 [&ref] | provenance | MaD:15 | | test.rs:399:68:399:73 | reader | test.rs:399:63:399:73 | &mut reader [&ref] | provenance | | | test.rs:399:76:399:87 | [post] &mut buffer1 [&ref] | test.rs:399:81:399:87 | [post] buffer1 | provenance | | | test.rs:399:81:399:87 | [post] buffer1 | test.rs:400:19:400:25 | buffer1 | provenance | | | test.rs:399:81:399:87 | [post] buffer1 | test.rs:400:19:400:40 | buffer1[...] | provenance | | -| test.rs:400:19:400:25 | buffer1 | test.rs:400:19:400:40 | buffer1[...] | provenance | MaD:8 | +| test.rs:400:19:400:25 | buffer1 | test.rs:400:19:400:40 | buffer1[...] | provenance | MaD:9 | | test.rs:400:19:400:40 | buffer1[...] | test.rs:400:18:400:40 | &... | provenance | | -| test.rs:403:31:403:36 | reader | test.rs:403:43:403:54 | [post] &mut buffer2 [&ref] | provenance | MaD:14 | +| test.rs:403:31:403:36 | reader | test.rs:403:43:403:54 | [post] &mut buffer2 [&ref] | provenance | MaD:15 | | test.rs:403:43:403:54 | [post] &mut buffer2 [&ref] | test.rs:403:48:403:54 | [post] buffer2 | provenance | | | test.rs:403:48:403:54 | [post] buffer2 | test.rs:405:19:405:25 | buffer2 | provenance | | | test.rs:403:48:403:54 | [post] buffer2 | test.rs:405:19:405:40 | buffer2[...] | provenance | | -| test.rs:405:19:405:25 | buffer2 | test.rs:405:19:405:40 | buffer2[...] | provenance | MaD:8 | +| test.rs:405:19:405:25 | buffer2 | test.rs:405:19:405:40 | buffer2[...] | provenance | MaD:9 | | test.rs:405:19:405:40 | buffer2[...] | test.rs:405:18:405:40 | &... | provenance | | | test.rs:408:13:408:23 | mut reader2 | test.rs:409:15:409:21 | reader2 | provenance | | | test.rs:408:13:408:23 | mut reader2 | test.rs:413:44:413:50 | reader2 | provenance | | @@ -215,30 +242,30 @@ edges | test.rs:408:13:408:23 | mut reader2 | test.rs:493:31:493:37 | reader2 | provenance | | | test.rs:408:13:408:23 | mut reader2 | test.rs:500:31:500:37 | reader2 | provenance | | | test.rs:408:27:408:61 | ...::new(...) | test.rs:408:13:408:23 | mut reader2 | provenance | | -| test.rs:408:55:408:60 | reader | test.rs:408:27:408:61 | ...::new(...) | provenance | MaD:25 | +| test.rs:408:55:408:60 | reader | test.rs:408:27:408:61 | ...::new(...) | provenance | MaD:28 | | test.rs:409:15:409:21 | reader2 | test.rs:409:14:409:21 | &reader2 | provenance | | | test.rs:413:17:413:26 | mut pinned | test.rs:414:19:414:24 | pinned | provenance | | | test.rs:413:17:413:26 | mut pinned | test.rs:416:26:416:31 | pinned | provenance | | | test.rs:413:17:413:26 | mut pinned [Pin, &ref] | test.rs:414:19:414:24 | pinned [Pin, &ref] | provenance | | | test.rs:413:30:413:51 | ...::new(...) | test.rs:413:17:413:26 | mut pinned | provenance | | | test.rs:413:30:413:51 | ...::new(...) [Pin, &ref] | test.rs:413:17:413:26 | mut pinned [Pin, &ref] | provenance | | -| test.rs:413:39:413:50 | &mut reader2 [&ref] | test.rs:413:30:413:51 | ...::new(...) | provenance | MaD:21 | -| test.rs:413:39:413:50 | &mut reader2 [&ref] | test.rs:413:30:413:51 | ...::new(...) [Pin, &ref] | provenance | MaD:22 | +| test.rs:413:39:413:50 | &mut reader2 [&ref] | test.rs:413:30:413:51 | ...::new(...) | provenance | MaD:24 | +| test.rs:413:39:413:50 | &mut reader2 [&ref] | test.rs:413:30:413:51 | ...::new(...) [Pin, &ref] | provenance | MaD:25 | | test.rs:413:44:413:50 | reader2 | test.rs:413:39:413:50 | &mut reader2 [&ref] | provenance | | | test.rs:414:19:414:24 | pinned | test.rs:414:18:414:24 | &pinned | provenance | | | test.rs:414:19:414:24 | pinned [Pin, &ref] | test.rs:414:18:414:24 | &pinned | provenance | | | test.rs:416:17:416:22 | buffer [Ready, Ok] | test.rs:417:20:417:39 | ...::Ready(...) [Ready, Ok] | provenance | | | test.rs:416:17:416:22 | buffer [Ready, Ok] | test.rs:418:23:418:28 | buffer [Ready, Ok] | provenance | | -| test.rs:416:26:416:31 | pinned | test.rs:416:26:416:54 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:9 | +| test.rs:416:26:416:31 | pinned | test.rs:416:26:416:54 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:10 | | test.rs:416:26:416:54 | pinned.poll_fill_buf(...) [Ready, Ok] | test.rs:416:17:416:22 | buffer [Ready, Ok] | provenance | | | test.rs:417:20:417:39 | ...::Ready(...) [Ready, Ok] | test.rs:417:32:417:38 | Ok(...) [Ok] | provenance | | | test.rs:417:32:417:38 | Ok(...) [Ok] | test.rs:417:35:417:37 | buf | provenance | | | test.rs:417:35:417:37 | buf | test.rs:419:22:419:24 | buf | provenance | | | test.rs:418:23:418:28 | buffer [Ready, Ok] | test.rs:418:22:418:28 | &buffer | provenance | | | test.rs:423:17:423:23 | buffer2 [Ready, Ok] | test.rs:424:20:424:26 | buffer2 [Ready, Ok] | provenance | | -| test.rs:423:27:423:48 | ...::new(...) | test.rs:423:27:423:71 | ... .poll_fill_buf(...) [Ready, Ok] | provenance | MaD:9 | +| test.rs:423:27:423:48 | ...::new(...) | test.rs:423:27:423:71 | ... .poll_fill_buf(...) [Ready, Ok] | provenance | MaD:10 | | test.rs:423:27:423:71 | ... .poll_fill_buf(...) [Ready, Ok] | test.rs:423:17:423:23 | buffer2 [Ready, Ok] | provenance | | -| test.rs:423:36:423:47 | &mut reader2 [&ref] | test.rs:423:27:423:48 | ...::new(...) | provenance | MaD:21 | +| test.rs:423:36:423:47 | &mut reader2 [&ref] | test.rs:423:27:423:48 | ...::new(...) | provenance | MaD:24 | | test.rs:423:41:423:47 | reader2 | test.rs:423:36:423:47 | &mut reader2 [&ref] | provenance | | | test.rs:424:20:424:26 | buffer2 [Ready, Ok] | test.rs:425:17:425:36 | ...::Ready(...) [Ready, Ok] | provenance | | | test.rs:424:20:424:26 | buffer2 [Ready, Ok] | test.rs:426:27:426:33 | buffer2 [Ready, Ok] | provenance | | @@ -247,7 +274,7 @@ edges | test.rs:425:32:425:34 | buf | test.rs:427:26:427:28 | buf | provenance | | | test.rs:426:27:426:33 | buffer2 [Ready, Ok] | test.rs:426:26:426:33 | &buffer2 | provenance | | | test.rs:437:17:437:22 | buffer | test.rs:438:18:438:23 | buffer | provenance | | -| test.rs:437:26:437:32 | reader2 | test.rs:437:26:437:43 | reader2.fill_buf() [future, Ok] | provenance | MaD:11 | +| test.rs:437:26:437:32 | reader2 | test.rs:437:26:437:43 | reader2.fill_buf() [future, Ok] | provenance | MaD:12 | | test.rs:437:26:437:43 | reader2.fill_buf() [future, Ok] | test.rs:437:26:437:49 | await ... [Ok] | provenance | | | test.rs:437:26:437:49 | await ... [Ok] | test.rs:437:26:437:50 | TryExpr | provenance | | | test.rs:437:26:437:50 | TryExpr | test.rs:437:17:437:22 | buffer | provenance | | @@ -256,64 +283,64 @@ edges | test.rs:444:17:444:26 | mut pinned [Pin, &ref] | test.rs:445:19:445:24 | pinned [Pin, &ref] | provenance | | | test.rs:444:30:444:51 | ...::new(...) | test.rs:444:17:444:26 | mut pinned | provenance | | | test.rs:444:30:444:51 | ...::new(...) [Pin, &ref] | test.rs:444:17:444:26 | mut pinned [Pin, &ref] | provenance | | -| test.rs:444:39:444:50 | &mut reader2 [&ref] | test.rs:444:30:444:51 | ...::new(...) | provenance | MaD:21 | -| test.rs:444:39:444:50 | &mut reader2 [&ref] | test.rs:444:30:444:51 | ...::new(...) [Pin, &ref] | provenance | MaD:22 | +| test.rs:444:39:444:50 | &mut reader2 [&ref] | test.rs:444:30:444:51 | ...::new(...) | provenance | MaD:24 | +| test.rs:444:39:444:50 | &mut reader2 [&ref] | test.rs:444:30:444:51 | ...::new(...) [Pin, &ref] | provenance | MaD:25 | | test.rs:444:44:444:50 | reader2 | test.rs:444:39:444:50 | &mut reader2 [&ref] | provenance | | | test.rs:445:19:445:24 | pinned | test.rs:445:18:445:24 | &pinned | provenance | | | test.rs:445:19:445:24 | pinned [Pin, &ref] | test.rs:445:18:445:24 | &pinned | provenance | | -| test.rs:447:30:447:35 | pinned | test.rs:447:56:447:66 | [post] &mut buffer [&ref] | provenance | MaD:10 | +| test.rs:447:30:447:35 | pinned | test.rs:447:56:447:66 | [post] &mut buffer [&ref] | provenance | MaD:11 | | test.rs:447:56:447:66 | [post] &mut buffer [&ref] | test.rs:447:61:447:66 | [post] buffer | provenance | | | test.rs:447:61:447:66 | [post] buffer | test.rs:448:19:448:24 | buffer | provenance | | | test.rs:447:61:447:66 | [post] buffer | test.rs:450:23:450:28 | buffer | provenance | | | test.rs:447:61:447:66 | [post] buffer | test.rs:450:23:450:33 | buffer[...] | provenance | | | test.rs:448:19:448:24 | buffer | test.rs:448:18:448:24 | &buffer | provenance | | -| test.rs:450:23:450:28 | buffer | test.rs:450:23:450:33 | buffer[...] | provenance | MaD:8 | +| test.rs:450:23:450:28 | buffer | test.rs:450:23:450:33 | buffer[...] | provenance | MaD:9 | | test.rs:450:23:450:33 | buffer[...] | test.rs:450:22:450:33 | &... | provenance | | -| test.rs:457:63:457:74 | &mut reader2 [&ref] | test.rs:457:77:457:88 | [post] &mut buffer1 [&ref] | provenance | MaD:14 | +| test.rs:457:63:457:74 | &mut reader2 [&ref] | test.rs:457:77:457:88 | [post] &mut buffer1 [&ref] | provenance | MaD:15 | | test.rs:457:68:457:74 | reader2 | test.rs:457:63:457:74 | &mut reader2 [&ref] | provenance | | | test.rs:457:77:457:88 | [post] &mut buffer1 [&ref] | test.rs:457:82:457:88 | [post] buffer1 | provenance | | | test.rs:457:82:457:88 | [post] buffer1 | test.rs:458:19:458:25 | buffer1 | provenance | | | test.rs:457:82:457:88 | [post] buffer1 | test.rs:458:19:458:40 | buffer1[...] | provenance | | -| test.rs:458:19:458:25 | buffer1 | test.rs:458:19:458:40 | buffer1[...] | provenance | MaD:8 | +| test.rs:458:19:458:25 | buffer1 | test.rs:458:19:458:40 | buffer1[...] | provenance | MaD:9 | | test.rs:458:19:458:40 | buffer1[...] | test.rs:458:18:458:40 | &... | provenance | | -| test.rs:461:31:461:37 | reader2 | test.rs:461:44:461:55 | [post] &mut buffer2 [&ref] | provenance | MaD:14 | +| test.rs:461:31:461:37 | reader2 | test.rs:461:44:461:55 | [post] &mut buffer2 [&ref] | provenance | MaD:15 | | test.rs:461:44:461:55 | [post] &mut buffer2 [&ref] | test.rs:461:49:461:55 | [post] buffer2 | provenance | | | test.rs:461:49:461:55 | [post] buffer2 | test.rs:462:19:462:25 | buffer2 | provenance | | | test.rs:461:49:461:55 | [post] buffer2 | test.rs:462:19:462:40 | buffer2[...] | provenance | | -| test.rs:462:19:462:25 | buffer2 | test.rs:462:19:462:40 | buffer2[...] | provenance | MaD:8 | +| test.rs:462:19:462:25 | buffer2 | test.rs:462:19:462:40 | buffer2[...] | provenance | MaD:9 | | test.rs:462:19:462:40 | buffer2[...] | test.rs:462:18:462:40 | &... | provenance | | | test.rs:467:17:467:26 | mut pinned | test.rs:468:19:468:24 | pinned | provenance | | | test.rs:467:17:467:26 | mut pinned | test.rs:470:26:470:31 | pinned | provenance | | | test.rs:467:17:467:26 | mut pinned [Pin, &ref] | test.rs:468:19:468:24 | pinned [Pin, &ref] | provenance | | | test.rs:467:30:467:51 | ...::new(...) | test.rs:467:17:467:26 | mut pinned | provenance | | | test.rs:467:30:467:51 | ...::new(...) [Pin, &ref] | test.rs:467:17:467:26 | mut pinned [Pin, &ref] | provenance | | -| test.rs:467:39:467:50 | &mut reader2 [&ref] | test.rs:467:30:467:51 | ...::new(...) | provenance | MaD:21 | -| test.rs:467:39:467:50 | &mut reader2 [&ref] | test.rs:467:30:467:51 | ...::new(...) [Pin, &ref] | provenance | MaD:22 | +| test.rs:467:39:467:50 | &mut reader2 [&ref] | test.rs:467:30:467:51 | ...::new(...) | provenance | MaD:24 | +| test.rs:467:39:467:50 | &mut reader2 [&ref] | test.rs:467:30:467:51 | ...::new(...) [Pin, &ref] | provenance | MaD:25 | | test.rs:467:44:467:50 | reader2 | test.rs:467:39:467:50 | &mut reader2 [&ref] | provenance | | | test.rs:468:19:468:24 | pinned | test.rs:468:18:468:24 | &pinned | provenance | | | test.rs:468:19:468:24 | pinned [Pin, &ref] | test.rs:468:18:468:24 | &pinned | provenance | | | test.rs:470:17:470:22 | buffer [Ready, Ok] | test.rs:471:19:471:24 | buffer [Ready, Ok] | provenance | | | test.rs:470:17:470:22 | buffer [Ready, Ok] | test.rs:472:20:472:39 | ...::Ready(...) [Ready, Ok] | provenance | | -| test.rs:470:26:470:31 | pinned | test.rs:470:26:470:54 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:9 | +| test.rs:470:26:470:31 | pinned | test.rs:470:26:470:54 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:10 | | test.rs:470:26:470:54 | pinned.poll_fill_buf(...) [Ready, Ok] | test.rs:470:17:470:22 | buffer [Ready, Ok] | provenance | | | test.rs:471:19:471:24 | buffer [Ready, Ok] | test.rs:471:18:471:24 | &buffer | provenance | | | test.rs:472:20:472:39 | ...::Ready(...) [Ready, Ok] | test.rs:472:32:472:38 | Ok(...) [Ok] | provenance | | | test.rs:472:32:472:38 | Ok(...) [Ok] | test.rs:472:35:472:37 | buf | provenance | | | test.rs:472:35:472:37 | buf | test.rs:473:22:473:24 | buf | provenance | | | test.rs:479:17:479:22 | buffer | test.rs:480:18:480:23 | buffer | provenance | | -| test.rs:479:26:479:32 | reader2 | test.rs:479:26:479:43 | reader2.fill_buf() [future, Ok] | provenance | MaD:11 | +| test.rs:479:26:479:32 | reader2 | test.rs:479:26:479:43 | reader2.fill_buf() [future, Ok] | provenance | MaD:12 | | test.rs:479:26:479:43 | reader2.fill_buf() [future, Ok] | test.rs:479:26:479:49 | await ... [Ok] | provenance | | | test.rs:479:26:479:49 | await ... [Ok] | test.rs:479:26:479:50 | TryExpr | provenance | | | test.rs:479:26:479:50 | TryExpr | test.rs:479:17:479:22 | buffer | provenance | | -| test.rs:486:31:486:37 | reader2 | test.rs:486:57:486:65 | [post] &mut line [&ref] | provenance | MaD:13 | +| test.rs:486:31:486:37 | reader2 | test.rs:486:57:486:65 | [post] &mut line [&ref] | provenance | MaD:14 | | test.rs:486:57:486:65 | [post] &mut line [&ref] | test.rs:486:62:486:65 | [post] line | provenance | | | test.rs:486:62:486:65 | [post] line | test.rs:487:19:487:22 | line | provenance | | | test.rs:487:19:487:22 | line | test.rs:487:18:487:22 | &line | provenance | | -| test.rs:493:31:493:37 | reader2 | test.rs:493:49:493:57 | [post] &mut line [&ref] | provenance | MaD:12 | +| test.rs:493:31:493:37 | reader2 | test.rs:493:49:493:57 | [post] &mut line [&ref] | provenance | MaD:13 | | test.rs:493:49:493:57 | [post] &mut line [&ref] | test.rs:493:54:493:57 | [post] line | provenance | | | test.rs:493:54:493:57 | [post] line | test.rs:494:19:494:22 | line | provenance | | | test.rs:494:19:494:22 | line | test.rs:494:18:494:22 | &line | provenance | | -| test.rs:500:31:500:37 | reader2 | test.rs:500:51:500:61 | [post] &mut buffer [&ref] | provenance | MaD:15 | +| test.rs:500:31:500:37 | reader2 | test.rs:500:51:500:61 | [post] &mut buffer [&ref] | provenance | MaD:16 | | test.rs:500:51:500:61 | [post] &mut buffer [&ref] | test.rs:500:56:500:61 | [post] buffer | provenance | | | test.rs:500:56:500:61 | [post] buffer | test.rs:501:19:501:24 | buffer | provenance | | | test.rs:501:19:501:24 | buffer | test.rs:501:18:501:24 | &buffer | provenance | | @@ -449,6 +476,30 @@ nodes | test.rs:275:50:275:55 | [post] buffer | semmle.label | [post] buffer | | test.rs:282:26:282:32 | &buffer | semmle.label | &buffer | | test.rs:282:27:282:32 | buffer | semmle.label | buffer | +| test.rs:332:9:332:18 | mut client | semmle.label | mut client | +| test.rs:332:22:332:50 | ...::new | semmle.label | ...::new | +| test.rs:332:22:332:75 | ...::new(...) [Ok] | semmle.label | ...::new(...) [Ok] | +| test.rs:332:22:332:84 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:333:9:333:18 | mut reader | semmle.label | mut reader | +| test.rs:333:22:333:27 | client | semmle.label | client | +| test.rs:333:22:333:36 | client.reader() | semmle.label | client.reader() | +| test.rs:334:10:334:16 | &reader | semmle.label | &reader | +| test.rs:334:11:334:16 | reader | semmle.label | reader | +| test.rs:338:22:338:27 | reader | semmle.label | reader | +| test.rs:338:34:338:44 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:338:39:338:44 | [post] buffer | semmle.label | [post] buffer | +| test.rs:339:14:339:20 | &buffer | semmle.label | &buffer | +| test.rs:339:15:339:20 | buffer | semmle.label | buffer | +| test.rs:344:22:344:27 | reader | semmle.label | reader | +| test.rs:344:41:344:51 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:344:46:344:51 | [post] buffer | semmle.label | [post] buffer | +| test.rs:345:14:345:20 | &buffer | semmle.label | &buffer | +| test.rs:345:15:345:20 | buffer | semmle.label | buffer | +| test.rs:350:22:350:27 | reader | semmle.label | reader | +| test.rs:350:44:350:54 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:350:49:350:54 | [post] buffer | semmle.label | [post] buffer | +| test.rs:351:14:351:20 | &buffer | semmle.label | &buffer | +| test.rs:351:15:351:20 | buffer | semmle.label | buffer | | test.rs:373:13:373:15 | tcp | semmle.label | tcp | | test.rs:373:19:373:36 | ...::connect | semmle.label | ...::connect | | test.rs:373:19:373:41 | ...::connect(...) [future, Ok] | semmle.label | ...::connect(...) [future, Ok] | @@ -626,6 +677,10 @@ testFailures | test.rs:244:14:244:23 | buffer2[0] | test.rs:224:28:224:57 | ...::connect | test.rs:244:14:244:23 | buffer2[0] | $@ | test.rs:224:28:224:57 | ...::connect | ...::connect | | test.rs:259:26:259:32 | &buffer | test.rs:224:28:224:57 | ...::connect | test.rs:259:26:259:32 | &buffer | $@ | test.rs:224:28:224:57 | ...::connect | ...::connect | | test.rs:282:26:282:32 | &buffer | test.rs:224:28:224:57 | ...::connect | test.rs:282:26:282:32 | &buffer | $@ | test.rs:224:28:224:57 | ...::connect | ...::connect | +| test.rs:334:10:334:16 | &reader | test.rs:332:22:332:50 | ...::new | test.rs:334:10:334:16 | &reader | $@ | test.rs:332:22:332:50 | ...::new | ...::new | +| test.rs:339:14:339:20 | &buffer | test.rs:332:22:332:50 | ...::new | test.rs:339:14:339:20 | &buffer | $@ | test.rs:332:22:332:50 | ...::new | ...::new | +| test.rs:345:14:345:20 | &buffer | test.rs:332:22:332:50 | ...::new | test.rs:345:14:345:20 | &buffer | $@ | test.rs:332:22:332:50 | ...::new | ...::new | +| test.rs:351:14:351:20 | &buffer | test.rs:332:22:332:50 | ...::new | test.rs:351:14:351:20 | &buffer | $@ | test.rs:332:22:332:50 | ...::new | ...::new | | test.rs:374:14:374:17 | &tcp | test.rs:373:19:373:36 | ...::connect | test.rs:374:14:374:17 | &tcp | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | | test.rs:381:14:381:20 | &reader | test.rs:373:19:373:36 | ...::connect | test.rs:381:14:381:20 | &reader | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | | test.rs:387:18:387:24 | &pinned | test.rs:373:19:373:36 | ...::connect | test.rs:387:18:387:24 | &pinned | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | diff --git a/rust/ql/test/library-tests/dataflow/sources/net/test.rs b/rust/ql/test/library-tests/dataflow/sources/net/test.rs index 254a27349d92..12c83c2409be 100644 --- a/rust/ql/test/library-tests/dataflow/sources/net/test.rs +++ b/rust/ql/test/library-tests/dataflow/sources/net/test.rs @@ -331,24 +331,24 @@ fn test_rustls() -> std::io::Result<()> { let config_arc = std::sync::Arc::new(config); let mut client = rustls::ClientConnection::new(config_arc, server_name).unwrap(); // $ Alert[rust/summary/taint-sources] let mut reader = client.reader(); // We cannot resolve the `reader` call because it comes from `Deref`: https://docs.rs/rustls/latest/rustls/client/struct.ClientConnection.html#deref-methods-ConnectionCommon%3CClientConnectionData%3E - sink(&reader); // $ MISSING: hasTaintFlow=config_arc + sink(&reader); // $ hasTaintFlow=config_arc { let mut buffer = [0u8; 100]; let _bytes = reader.read(&mut buffer)?; - sink(&buffer); // $ MISSING: hasTaintFlow=config_arc + sink(&buffer); // $ hasTaintFlow=config_arc } { let mut buffer = Vec::::new(); let _bytes = reader.read_to_end(&mut buffer)?; - sink(&buffer); // $ MISSING: hasTaintFlow=config_arc + sink(&buffer); // $ hasTaintFlow=config_arc } { let mut buffer = String::new(); let _bytes = reader.read_to_string(&mut buffer)?; - sink(&buffer); // $ MISSING: hasTaintFlow=config_arc + sink(&buffer); // $ hasTaintFlow=config_arc } Ok(()) diff --git a/rust/ql/test/library-tests/dataflow/strings/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/dataflow/strings/CONSISTENCY/PathResolutionConsistency.expected deleted file mode 100644 index ccda75006f94..000000000000 --- a/rust/ql/test/library-tests/dataflow/strings/CONSISTENCY/PathResolutionConsistency.expected +++ /dev/null @@ -1,2 +0,0 @@ -multipleCallTargets -| main.rs:52:14:52:29 | ...::from(...) | diff --git a/rust/ql/test/library-tests/path-resolution/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/path-resolution/CONSISTENCY/PathResolutionConsistency.expected index cc34dfd2b7d6..23ac5e722d5c 100644 --- a/rust/ql/test/library-tests/path-resolution/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/path-resolution/CONSISTENCY/PathResolutionConsistency.expected @@ -1,4 +1,4 @@ -multipleCallTargets +multipleResolvedTargets | main.rs:126:9:126:11 | f(...) | | main.rs:366:9:368:16 | ...::f(...) | | main.rs:369:9:371:16 | ...::f(...) | diff --git a/rust/ql/test/library-tests/sensitivedata/test.rs b/rust/ql/test/library-tests/sensitivedata/test.rs index 0f4965ce2856..f8d850beeb80 100644 --- a/rust/ql/test/library-tests/sensitivedata/test.rs +++ b/rust/ql/test/library-tests/sensitivedata/test.rs @@ -287,7 +287,7 @@ fn test_private_info( sink(&info.medical_notes); // $ sensitive=private sink(info.medical_notes[0].as_str()); // $ sensitive=private for n in info.medical_notes.iter() { - sink(n.as_str()); // $ MISSING: sensitive=private + sink(n.as_str()); // $ sensitive=private } sink(info.confidentialMessage.as_str()); // $ sensitive=secret sink(info.confidentialMessage.to_lowercase()); // $ sensitive=secret diff --git a/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected deleted file mode 100644 index 16db4f5c0903..000000000000 --- a/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected +++ /dev/null @@ -1,13 +0,0 @@ -multipleCallTargets -| dereference.rs:69:15:69:24 | e1.deref() | -| dereference.rs:182:17:182:26 | ... .foo() | -| dereference.rs:183:17:183:23 | S.foo() | -| dereference.rs:184:17:184:30 | ... .foo() | -| dereference.rs:186:17:186:25 | S.bar(...) | -| dereference.rs:187:17:187:29 | S.bar(...) | -| main.rs:2634:13:2634:31 | ...::from(...) | -| main.rs:2635:13:2635:31 | ...::from(...) | -| main.rs:2636:13:2636:31 | ...::from(...) | -| main.rs:2642:13:2642:31 | ...::from(...) | -| main.rs:2643:13:2643:31 | ...::from(...) | -| main.rs:2644:13:2644:31 | ...::from(...) | diff --git a/rust/ql/test/library-tests/type-inference/blanket_impl.rs b/rust/ql/test/library-tests/type-inference/blanket_impl.rs index 49fcd8af0a64..b25a0f8cf77a 100644 --- a/rust/ql/test/library-tests/type-inference/blanket_impl.rs +++ b/rust/ql/test/library-tests/type-inference/blanket_impl.rs @@ -53,9 +53,9 @@ mod basic_blanket_impl { println!("{x4:?}"); let x5 = S1::duplicate(&S1); // $ target=Clone1duplicate println!("{x5:?}"); - let x6 = S2.duplicate(); // $ MISSING: target=Clone1duplicate + let x6 = S2.duplicate(); // $ target=Clone1duplicate println!("{x6:?}"); - let x7 = (&S2).duplicate(); // $ MISSING: target=Clone1duplicate + let x7 = (&S2).duplicate(); // $ target=Clone1duplicate println!("{x7:?}"); } } @@ -236,7 +236,7 @@ mod blanket_like_impl { impl MyTrait2 for &&S1 { // MyTrait2RefRefS1::m2 fn m2(self) { - self.m1() // $ MISSING: target=S1::m1 + self.m1() // $ target=S1::m1 } } diff --git a/rust/ql/test/library-tests/type-inference/dereference.rs b/rust/ql/test/library-tests/type-inference/dereference.rs index f84d03a3a4e6..d49fe63c8972 100644 --- a/rust/ql/test/library-tests/type-inference/dereference.rs +++ b/rust/ql/test/library-tests/type-inference/dereference.rs @@ -1,5 +1,6 @@ /// This file contains tests for dereferencing with through the `Deref` trait. use std::ops::Deref; +use std::ops::DerefMut; struct MyIntPointer { value: i64, @@ -27,6 +28,13 @@ impl Deref for MySmartPointer { } } +impl DerefMut for MySmartPointer { + // MySmartPointer::deref_mut + fn deref_mut(&mut self) -> &mut T { + &mut self.value // $ fieldof=MySmartPointer + } +} + struct S(T); impl S { @@ -94,14 +102,18 @@ fn explicit_box_dereference() { fn implicit_dereference() { // Call method on implicitly dereferenced value let x = MyIntPointer { value: 34i64 }; - let _y = x.is_positive(); // $ MISSING: target=is_positive type=_y:bool + let _y = x.is_positive(); // $ target=is_positive type=_y:bool // Call method on implicitly dereferenced value let x = MySmartPointer { value: 34i64 }; - let _y = x.is_positive(); // $ MISSING: target=is_positive type=_y:bool + let _y = x.is_positive(); // $ target=is_positive type=_y:bool let z = MySmartPointer { value: S(0i64) }; - let z_ = z.foo(); // $ MISSING: target=foo type=z_:TRef.i64 + let z_ = z.foo(); // $ target=foo type=z_:TRef.i64 + + let v = Vec::new(); // $ target=new $ MISSING: type=x:T.i32 + let mut x = MySmartPointer { value: v }; + x.push(0); // $ target=push } mod implicit_deref_coercion_cycle { @@ -179,12 +191,12 @@ mod ref_vs_mut_ref { } pub fn test() { - let x = (&S).foo(); // $ target=MyTrait1::foo1 type=x:S $ SPURIOUS: target=MyTrait1::foo2 - let y = S.foo(); // $ target=MyTrait1::foo1 type=y:S $ SPURIOUS: target=MyTrait1::foo2 - let z = (&mut S).foo(); // $ target=MyTrait1::foo2 type=z:i64 $ SPURIOUS: target=MyTrait1::foo1 + let x = (&S).foo(); // $ target=MyTrait1::foo1 type=x:S + let y = S.foo(); // $ target=MyTrait1::foo1 type=y:S + let z = (&mut S).foo(); // $ target=MyTrait1::foo2 type=z:i64 - let x = S.bar(&S); // $ target=MyTrait2::bar1 type=x:S $ SPURIOUS: target=MyTrait2::bar2 - let y = S.bar(&mut S); // $ target=MyTrait2::bar2 type=y:i64 $ SPURIOUS: target=MyTrait2::bar1 + let x = S.bar(&S); // $ target=MyTrait2::bar1 type=x:S + let y = S.bar(&mut S); // $ target=MyTrait2::bar2 type=y:i64 } } @@ -212,7 +224,7 @@ mod rust_reference_example { pub fn main() { let mut f = Foo {}; - f.bar(); // $ SPURIOUS: target=bar1 $ MISSING: target=bar2 + f.bar(); // $ target=bar2 } } diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index f78202969b8a..59bbad5d11cb 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -2626,7 +2626,7 @@ mod loops { let mut strings1 = ["foo", "bar", "baz"]; // $ type=strings1:TArray.TRef.str for s in &strings1 {} // $ type=s:TRef.TRef.str - for s in &mut strings1 {} // $ type=s:TRef.TRef.str + for s in &mut strings1 {} // $ type=s:TRefMut.TRef.str for s in strings1 {} // $ type=s:TRef.str let strings2 = // $ type=strings2:TArray.String @@ -2888,8 +2888,8 @@ pub mod path_buf { let path3 = path2.unwrap(); // $ target=unwrap type=path3:PathBuf let pathbuf1 = PathBuf::new(); // $ target=new certainType=pathbuf1:PathBuf - let pathbuf2 = pathbuf1.canonicalize(); // $ MISSING: target=canonicalize - let pathbuf3 = pathbuf2.unwrap(); // $ MISSING: target=unwrap type=pathbuf3:PathBuf + let pathbuf2 = pathbuf1.canonicalize(); // $ target=canonicalize + let pathbuf3 = pathbuf2.unwrap(); // $ target=unwrap type=pathbuf3:PathBuf } } diff --git a/rust/ql/test/library-tests/type-inference/pattern_matching.rs b/rust/ql/test/library-tests/type-inference/pattern_matching.rs index b7f96cd555b0..33e6b9f09f30 100755 --- a/rust/ql/test/library-tests/type-inference/pattern_matching.rs +++ b/rust/ql/test/library-tests/type-inference/pattern_matching.rs @@ -269,7 +269,7 @@ pub fn identifier_patterns() { let mut ref_mut_val = 5i32; match &mut ref_mut_val { ref mut x => { - let ref_mut_bound = x; // $ type=ref_mut_bound:TRef.TRef.i32 + let ref_mut_bound = x; // $ type=ref_mut_bound:TRefMut.TRefMut.i32 **ref_mut_bound += 1; // $ target=deref target=add_assign println!("Ref mut pattern"); } diff --git a/rust/ql/test/library-tests/type-inference/type-inference.expected b/rust/ql/test/library-tests/type-inference/type-inference.expected index ff3545f0c0fc..950972e38df4 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -275,198 +275,216 @@ inferCertainType | closure.rs:74:31:74:53 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | | closure.rs:74:41:74:41 | _ | | {EXTERNAL LOCATION} | i64 | | closure.rs:74:49:74:52 | true | | {EXTERNAL LOCATION} | bool | -| dereference.rs:12:14:12:18 | SelfParam | | {EXTERNAL LOCATION} | & | -| dereference.rs:12:14:12:18 | SelfParam | TRef | dereference.rs:4:1:6:1 | MyIntPointer | -| dereference.rs:12:29:14:5 | { ... } | | {EXTERNAL LOCATION} | & | -| dereference.rs:12:29:14:5 | { ... } | TRef | {EXTERNAL LOCATION} | i64 | -| dereference.rs:13:9:13:19 | &... | | {EXTERNAL LOCATION} | & | -| dereference.rs:13:10:13:13 | self | | {EXTERNAL LOCATION} | & | -| dereference.rs:13:10:13:13 | self | TRef | dereference.rs:4:1:6:1 | MyIntPointer | -| dereference.rs:25:14:25:18 | SelfParam | | {EXTERNAL LOCATION} | & | -| dereference.rs:25:14:25:18 | SelfParam | TRef | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:25:14:25:18 | SelfParam | TRef.T | dereference.rs:21:6:21:6 | T | -| dereference.rs:25:27:27:5 | { ... } | | {EXTERNAL LOCATION} | & | -| dereference.rs:25:27:27:5 | { ... } | TRef | dereference.rs:21:6:21:6 | T | -| dereference.rs:26:9:26:19 | &... | | {EXTERNAL LOCATION} | & | -| dereference.rs:26:10:26:13 | self | | {EXTERNAL LOCATION} | & | -| dereference.rs:26:10:26:13 | self | TRef | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:26:10:26:13 | self | TRef.T | dereference.rs:21:6:21:6 | T | -| dereference.rs:33:12:33:16 | SelfParam | | {EXTERNAL LOCATION} | & | -| dereference.rs:33:12:33:16 | SelfParam | TRef | dereference.rs:30:1:30:15 | S | -| dereference.rs:33:12:33:16 | SelfParam | TRef.T | dereference.rs:32:6:32:6 | T | -| dereference.rs:33:25:35:5 | { ... } | | {EXTERNAL LOCATION} | & | -| dereference.rs:33:25:35:5 | { ... } | TRef | dereference.rs:32:6:32:6 | T | -| dereference.rs:34:9:34:15 | &... | | {EXTERNAL LOCATION} | & | -| dereference.rs:34:10:34:13 | self | | {EXTERNAL LOCATION} | & | -| dereference.rs:34:10:34:13 | self | TRef | dereference.rs:30:1:30:15 | S | -| dereference.rs:34:10:34:13 | self | TRef.T | dereference.rs:32:6:32:6 | T | -| dereference.rs:38:39:50:1 | { ... } | | {EXTERNAL LOCATION} | () | -| dereference.rs:40:9:40:10 | a1 | | dereference.rs:4:1:6:1 | MyIntPointer | -| dereference.rs:40:14:40:42 | MyIntPointer {...} | | dereference.rs:4:1:6:1 | MyIntPointer | -| dereference.rs:40:36:40:40 | 34i64 | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:41:15:41:16 | a1 | | dereference.rs:4:1:6:1 | MyIntPointer | -| dereference.rs:44:9:44:10 | a2 | | dereference.rs:4:1:6:1 | MyIntPointer | -| dereference.rs:44:14:44:42 | MyIntPointer {...} | | dereference.rs:4:1:6:1 | MyIntPointer | -| dereference.rs:44:36:44:40 | 34i64 | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:45:16:45:17 | a2 | | dereference.rs:4:1:6:1 | MyIntPointer | -| dereference.rs:48:9:48:10 | a3 | | dereference.rs:4:1:6:1 | MyIntPointer | -| dereference.rs:48:14:48:42 | MyIntPointer {...} | | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:13:14:13:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| dereference.rs:13:14:13:18 | SelfParam | TRef | dereference.rs:5:1:7:1 | MyIntPointer | +| dereference.rs:13:29:15:5 | { ... } | | {EXTERNAL LOCATION} | & | +| dereference.rs:13:29:15:5 | { ... } | TRef | {EXTERNAL LOCATION} | i64 | +| dereference.rs:14:9:14:19 | &... | | {EXTERNAL LOCATION} | & | +| dereference.rs:14:10:14:13 | self | | {EXTERNAL LOCATION} | & | +| dereference.rs:14:10:14:13 | self | TRef | dereference.rs:5:1:7:1 | MyIntPointer | +| dereference.rs:26:14:26:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| dereference.rs:26:14:26:18 | SelfParam | TRef | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:26:14:26:18 | SelfParam | TRef.T | dereference.rs:22:6:22:6 | T | +| dereference.rs:26:27:28:5 | { ... } | | {EXTERNAL LOCATION} | & | +| dereference.rs:26:27:28:5 | { ... } | TRef | dereference.rs:22:6:22:6 | T | +| dereference.rs:27:9:27:19 | &... | | {EXTERNAL LOCATION} | & | +| dereference.rs:27:10:27:13 | self | | {EXTERNAL LOCATION} | & | +| dereference.rs:27:10:27:13 | self | TRef | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:27:10:27:13 | self | TRef.T | dereference.rs:22:6:22:6 | T | +| dereference.rs:33:18:33:26 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| dereference.rs:33:18:33:26 | SelfParam | TRefMut | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:33:18:33:26 | SelfParam | TRefMut.T | dereference.rs:31:6:31:6 | T | +| dereference.rs:33:39:35:5 | { ... } | | {EXTERNAL LOCATION} | &mut | +| dereference.rs:33:39:35:5 | { ... } | TRefMut | dereference.rs:31:6:31:6 | T | +| dereference.rs:34:9:34:23 | &mut ... | | {EXTERNAL LOCATION} | &mut | +| dereference.rs:34:14:34:17 | self | | {EXTERNAL LOCATION} | &mut | +| dereference.rs:34:14:34:17 | self | TRefMut | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:34:14:34:17 | self | TRefMut.T | dereference.rs:31:6:31:6 | T | +| dereference.rs:41:12:41:16 | SelfParam | | {EXTERNAL LOCATION} | & | +| dereference.rs:41:12:41:16 | SelfParam | TRef | dereference.rs:38:1:38:15 | S | +| dereference.rs:41:12:41:16 | SelfParam | TRef.T | dereference.rs:40:6:40:6 | T | +| dereference.rs:41:25:43:5 | { ... } | | {EXTERNAL LOCATION} | & | +| dereference.rs:41:25:43:5 | { ... } | TRef | dereference.rs:40:6:40:6 | T | +| dereference.rs:42:9:42:15 | &... | | {EXTERNAL LOCATION} | & | +| dereference.rs:42:10:42:13 | self | | {EXTERNAL LOCATION} | & | +| dereference.rs:42:10:42:13 | self | TRef | dereference.rs:38:1:38:15 | S | +| dereference.rs:42:10:42:13 | self | TRef.T | dereference.rs:40:6:40:6 | T | +| dereference.rs:46:39:58:1 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:48:9:48:10 | a1 | | dereference.rs:5:1:7:1 | MyIntPointer | +| dereference.rs:48:14:48:42 | MyIntPointer {...} | | dereference.rs:5:1:7:1 | MyIntPointer | | dereference.rs:48:36:48:40 | 34i64 | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:49:17:49:18 | a3 | | dereference.rs:4:1:6:1 | MyIntPointer | -| dereference.rs:52:39:64:1 | { ... } | | {EXTERNAL LOCATION} | () | -| dereference.rs:54:9:54:10 | c1 | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:54:14:54:42 | MySmartPointer {...} | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:54:38:54:40 | 'a' | | {EXTERNAL LOCATION} | char | -| dereference.rs:55:15:55:16 | c1 | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:58:9:58:10 | c2 | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:58:14:58:42 | MySmartPointer {...} | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:58:38:58:40 | 'a' | | {EXTERNAL LOCATION} | char | -| dereference.rs:59:16:59:17 | c2 | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:62:9:62:10 | c3 | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:62:14:62:44 | MySmartPointer {...} | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:62:38:62:42 | 34i64 | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:63:17:63:18 | c3 | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:66:31:78:1 | { ... } | | {EXTERNAL LOCATION} | () | -| dereference.rs:68:9:68:10 | e1 | | {EXTERNAL LOCATION} | & | -| dereference.rs:68:14:68:17 | &'a' | | {EXTERNAL LOCATION} | & | -| dereference.rs:68:15:68:17 | 'a' | | {EXTERNAL LOCATION} | char | -| dereference.rs:69:15:69:16 | e1 | | {EXTERNAL LOCATION} | & | -| dereference.rs:72:9:72:10 | e2 | | {EXTERNAL LOCATION} | & | -| dereference.rs:72:14:72:17 | &'a' | | {EXTERNAL LOCATION} | & | -| dereference.rs:72:15:72:17 | 'a' | | {EXTERNAL LOCATION} | char | -| dereference.rs:73:16:73:17 | e2 | | {EXTERNAL LOCATION} | & | -| dereference.rs:76:9:76:10 | e3 | | {EXTERNAL LOCATION} | & | -| dereference.rs:76:14:76:19 | &34i64 | | {EXTERNAL LOCATION} | & | -| dereference.rs:76:15:76:19 | 34i64 | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:77:17:77:18 | e3 | | {EXTERNAL LOCATION} | & | -| dereference.rs:80:31:92:1 | { ... } | | {EXTERNAL LOCATION} | () | -| dereference.rs:82:9:82:10 | g1 | | {EXTERNAL LOCATION} | Box | -| dereference.rs:82:9:82:10 | g1 | A | {EXTERNAL LOCATION} | Global | -| dereference.rs:82:9:82:10 | g1 | T | {EXTERNAL LOCATION} | char | -| dereference.rs:82:25:82:37 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| dereference.rs:82:25:82:37 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| dereference.rs:82:34:82:36 | 'a' | | {EXTERNAL LOCATION} | char | -| dereference.rs:83:15:83:16 | g1 | | {EXTERNAL LOCATION} | Box | -| dereference.rs:83:15:83:16 | g1 | A | {EXTERNAL LOCATION} | Global | -| dereference.rs:83:15:83:16 | g1 | T | {EXTERNAL LOCATION} | char | -| dereference.rs:86:9:86:10 | g2 | | {EXTERNAL LOCATION} | Box | -| dereference.rs:86:9:86:10 | g2 | A | {EXTERNAL LOCATION} | Global | -| dereference.rs:86:9:86:10 | g2 | T | {EXTERNAL LOCATION} | char | -| dereference.rs:86:25:86:37 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| dereference.rs:86:25:86:37 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| dereference.rs:86:34:86:36 | 'a' | | {EXTERNAL LOCATION} | char | -| dereference.rs:87:16:87:17 | g2 | | {EXTERNAL LOCATION} | Box | -| dereference.rs:87:16:87:17 | g2 | A | {EXTERNAL LOCATION} | Global | -| dereference.rs:87:16:87:17 | g2 | T | {EXTERNAL LOCATION} | char | -| dereference.rs:90:9:90:10 | g3 | | {EXTERNAL LOCATION} | Box | -| dereference.rs:90:9:90:10 | g3 | A | {EXTERNAL LOCATION} | Global | -| dereference.rs:90:9:90:10 | g3 | T | {EXTERNAL LOCATION} | i64 | -| dereference.rs:90:24:90:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| dereference.rs:90:24:90:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| dereference.rs:90:33:90:37 | 34i64 | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:91:17:91:18 | g3 | | {EXTERNAL LOCATION} | Box | -| dereference.rs:91:17:91:18 | g3 | A | {EXTERNAL LOCATION} | Global | -| dereference.rs:91:17:91:18 | g3 | T | {EXTERNAL LOCATION} | i64 | -| dereference.rs:94:27:105:1 | { ... } | | {EXTERNAL LOCATION} | () | -| dereference.rs:96:9:96:9 | x | | dereference.rs:4:1:6:1 | MyIntPointer | -| dereference.rs:96:13:96:41 | MyIntPointer {...} | | dereference.rs:4:1:6:1 | MyIntPointer | -| dereference.rs:96:35:96:39 | 34i64 | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:97:14:97:14 | x | | dereference.rs:4:1:6:1 | MyIntPointer | -| dereference.rs:100:9:100:9 | x | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:100:13:100:43 | MySmartPointer {...} | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:100:37:100:41 | 34i64 | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:101:14:101:14 | x | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:103:9:103:9 | z | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:103:13:103:45 | MySmartPointer {...} | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:103:39:103:42 | 0i64 | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:104:14:104:14 | z | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:131:19:139:5 | { ... } | | {EXTERNAL LOCATION} | () | -| dereference.rs:132:17:132:26 | key_to_key | | {EXTERNAL LOCATION} | HashMap | -| dereference.rs:132:17:132:26 | key_to_key | K | {EXTERNAL LOCATION} | & | -| dereference.rs:132:17:132:26 | key_to_key | K.TRef | dereference.rs:110:5:111:21 | Key | -| dereference.rs:132:17:132:26 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | -| dereference.rs:132:17:132:26 | key_to_key | V | {EXTERNAL LOCATION} | & | -| dereference.rs:132:17:132:26 | key_to_key | V.TRef | dereference.rs:110:5:111:21 | Key | -| dereference.rs:132:30:132:57 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | -| dereference.rs:132:30:132:57 | ...::new(...) | K | {EXTERNAL LOCATION} | & | -| dereference.rs:132:30:132:57 | ...::new(...) | K.TRef | dereference.rs:110:5:111:21 | Key | -| dereference.rs:132:30:132:57 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | -| dereference.rs:132:30:132:57 | ...::new(...) | V | {EXTERNAL LOCATION} | & | -| dereference.rs:132:30:132:57 | ...::new(...) | V.TRef | dereference.rs:110:5:111:21 | Key | -| dereference.rs:133:17:133:19 | key | | {EXTERNAL LOCATION} | & | -| dereference.rs:133:23:133:29 | &... | | {EXTERNAL LOCATION} | & | -| dereference.rs:133:24:133:29 | Key {...} | | dereference.rs:110:5:111:21 | Key | -| dereference.rs:134:9:137:9 | if ... {...} | | {EXTERNAL LOCATION} | () | -| dereference.rs:134:32:134:41 | key_to_key | | {EXTERNAL LOCATION} | HashMap | -| dereference.rs:134:32:134:41 | key_to_key | K | {EXTERNAL LOCATION} | & | -| dereference.rs:134:32:134:41 | key_to_key | K.TRef | dereference.rs:110:5:111:21 | Key | -| dereference.rs:134:32:134:41 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | -| dereference.rs:134:32:134:41 | key_to_key | V | {EXTERNAL LOCATION} | & | -| dereference.rs:134:32:134:41 | key_to_key | V.TRef | dereference.rs:110:5:111:21 | Key | -| dereference.rs:134:47:134:49 | key | | {EXTERNAL LOCATION} | & | -| dereference.rs:134:52:137:9 | { ... } | | {EXTERNAL LOCATION} | () | -| dereference.rs:136:13:136:15 | key | | {EXTERNAL LOCATION} | & | -| dereference.rs:138:9:138:18 | key_to_key | | {EXTERNAL LOCATION} | HashMap | -| dereference.rs:138:9:138:18 | key_to_key | K | {EXTERNAL LOCATION} | & | -| dereference.rs:138:9:138:18 | key_to_key | K.TRef | dereference.rs:110:5:111:21 | Key | -| dereference.rs:138:9:138:18 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | -| dereference.rs:138:9:138:18 | key_to_key | V | {EXTERNAL LOCATION} | & | -| dereference.rs:138:9:138:18 | key_to_key | V.TRef | dereference.rs:110:5:111:21 | Key | -| dereference.rs:138:27:138:29 | key | | {EXTERNAL LOCATION} | & | -| dereference.rs:138:32:138:34 | key | | {EXTERNAL LOCATION} | & | -| dereference.rs:144:16:144:19 | SelfParam | | dereference.rs:143:5:145:5 | Self [trait MyTrait1] | -| dereference.rs:151:16:151:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| dereference.rs:151:16:151:19 | SelfParam | TRef | dereference.rs:147:5:147:13 | S | -| dereference.rs:151:27:153:9 | { ... } | | dereference.rs:147:5:147:13 | S | -| dereference.rs:158:16:158:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| dereference.rs:158:16:158:19 | SelfParam | TRef | dereference.rs:147:5:147:13 | S | -| dereference.rs:158:29:160:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:164:16:164:19 | SelfParam | | dereference.rs:163:5:165:5 | Self [trait MyTrait2] | -| dereference.rs:164:22:164:24 | arg | | dereference.rs:163:20:163:21 | T1 | -| dereference.rs:169:16:169:19 | SelfParam | | dereference.rs:147:5:147:13 | S | -| dereference.rs:169:22:169:24 | arg | | {EXTERNAL LOCATION} | & | -| dereference.rs:169:22:169:24 | arg | TRef | dereference.rs:147:5:147:13 | S | -| dereference.rs:169:36:171:9 | { ... } | | dereference.rs:147:5:147:13 | S | -| dereference.rs:176:16:176:19 | SelfParam | | dereference.rs:147:5:147:13 | S | -| dereference.rs:176:22:176:24 | arg | | {EXTERNAL LOCATION} | & | -| dereference.rs:176:22:176:24 | arg | TRef | dereference.rs:147:5:147:13 | S | -| dereference.rs:176:42:178:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:181:19:188:5 | { ... } | | {EXTERNAL LOCATION} | () | -| dereference.rs:182:17:182:20 | (...) | | {EXTERNAL LOCATION} | & | -| dereference.rs:182:18:182:19 | &S | | {EXTERNAL LOCATION} | & | -| dereference.rs:184:17:184:24 | (...) | | {EXTERNAL LOCATION} | & | -| dereference.rs:184:18:184:23 | &mut S | | {EXTERNAL LOCATION} | & | -| dereference.rs:186:23:186:24 | &S | | {EXTERNAL LOCATION} | & | -| dereference.rs:187:23:187:28 | &mut S | | {EXTERNAL LOCATION} | & | -| dereference.rs:196:16:196:20 | SelfParam | | {EXTERNAL LOCATION} | & | -| dereference.rs:196:16:196:20 | SelfParam | TRef | dereference.rs:195:5:197:5 | Self [trait Bar] | -| dereference.rs:201:16:201:24 | SelfParam | | {EXTERNAL LOCATION} | & | -| dereference.rs:201:16:201:24 | SelfParam | TRef | dereference.rs:193:5:193:17 | Foo | -| dereference.rs:201:27:203:9 | { ... } | | {EXTERNAL LOCATION} | () | -| dereference.rs:202:22:202:38 | "In struct impl!\\n" | | {EXTERNAL LOCATION} | & | -| dereference.rs:202:22:202:38 | "In struct impl!\\n" | TRef | {EXTERNAL LOCATION} | str | -| dereference.rs:202:22:202:38 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| dereference.rs:202:22:202:38 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:49:15:49:16 | a1 | | dereference.rs:5:1:7:1 | MyIntPointer | +| dereference.rs:52:9:52:10 | a2 | | dereference.rs:5:1:7:1 | MyIntPointer | +| dereference.rs:52:14:52:42 | MyIntPointer {...} | | dereference.rs:5:1:7:1 | MyIntPointer | +| dereference.rs:52:36:52:40 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:53:16:53:17 | a2 | | dereference.rs:5:1:7:1 | MyIntPointer | +| dereference.rs:56:9:56:10 | a3 | | dereference.rs:5:1:7:1 | MyIntPointer | +| dereference.rs:56:14:56:42 | MyIntPointer {...} | | dereference.rs:5:1:7:1 | MyIntPointer | +| dereference.rs:56:36:56:40 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:57:17:57:18 | a3 | | dereference.rs:5:1:7:1 | MyIntPointer | +| dereference.rs:60:39:72:1 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:62:9:62:10 | c1 | | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:62:14:62:42 | MySmartPointer {...} | | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:62:38:62:40 | 'a' | | {EXTERNAL LOCATION} | char | +| dereference.rs:63:15:63:16 | c1 | | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:66:9:66:10 | c2 | | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:66:14:66:42 | MySmartPointer {...} | | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:66:38:66:40 | 'a' | | {EXTERNAL LOCATION} | char | +| dereference.rs:67:16:67:17 | c2 | | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:70:9:70:10 | c3 | | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:70:14:70:44 | MySmartPointer {...} | | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:70:38:70:42 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:71:17:71:18 | c3 | | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:74:31:86:1 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:76:9:76:10 | e1 | | {EXTERNAL LOCATION} | & | +| dereference.rs:76:14:76:17 | &'a' | | {EXTERNAL LOCATION} | & | +| dereference.rs:76:15:76:17 | 'a' | | {EXTERNAL LOCATION} | char | +| dereference.rs:77:15:77:16 | e1 | | {EXTERNAL LOCATION} | & | +| dereference.rs:80:9:80:10 | e2 | | {EXTERNAL LOCATION} | & | +| dereference.rs:80:14:80:17 | &'a' | | {EXTERNAL LOCATION} | & | +| dereference.rs:80:15:80:17 | 'a' | | {EXTERNAL LOCATION} | char | +| dereference.rs:81:16:81:17 | e2 | | {EXTERNAL LOCATION} | & | +| dereference.rs:84:9:84:10 | e3 | | {EXTERNAL LOCATION} | & | +| dereference.rs:84:14:84:19 | &34i64 | | {EXTERNAL LOCATION} | & | +| dereference.rs:84:15:84:19 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:85:17:85:18 | e3 | | {EXTERNAL LOCATION} | & | +| dereference.rs:88:31:100:1 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:90:9:90:10 | g1 | | {EXTERNAL LOCATION} | Box | +| dereference.rs:90:9:90:10 | g1 | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:90:9:90:10 | g1 | T | {EXTERNAL LOCATION} | char | +| dereference.rs:90:25:90:37 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| dereference.rs:90:25:90:37 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:90:34:90:36 | 'a' | | {EXTERNAL LOCATION} | char | +| dereference.rs:91:15:91:16 | g1 | | {EXTERNAL LOCATION} | Box | +| dereference.rs:91:15:91:16 | g1 | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:91:15:91:16 | g1 | T | {EXTERNAL LOCATION} | char | +| dereference.rs:94:9:94:10 | g2 | | {EXTERNAL LOCATION} | Box | +| dereference.rs:94:9:94:10 | g2 | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:94:9:94:10 | g2 | T | {EXTERNAL LOCATION} | char | +| dereference.rs:94:25:94:37 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| dereference.rs:94:25:94:37 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:94:34:94:36 | 'a' | | {EXTERNAL LOCATION} | char | +| dereference.rs:95:16:95:17 | g2 | | {EXTERNAL LOCATION} | Box | +| dereference.rs:95:16:95:17 | g2 | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:95:16:95:17 | g2 | T | {EXTERNAL LOCATION} | char | +| dereference.rs:98:9:98:10 | g3 | | {EXTERNAL LOCATION} | Box | +| dereference.rs:98:9:98:10 | g3 | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:98:9:98:10 | g3 | T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:98:24:98:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| dereference.rs:98:24:98:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:98:33:98:37 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:99:17:99:18 | g3 | | {EXTERNAL LOCATION} | Box | +| dereference.rs:99:17:99:18 | g3 | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:99:17:99:18 | g3 | T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:102:27:117:1 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:104:9:104:9 | x | | dereference.rs:5:1:7:1 | MyIntPointer | +| dereference.rs:104:13:104:41 | MyIntPointer {...} | | dereference.rs:5:1:7:1 | MyIntPointer | +| dereference.rs:104:35:104:39 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:105:14:105:14 | x | | dereference.rs:5:1:7:1 | MyIntPointer | +| dereference.rs:108:9:108:9 | x | | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:108:13:108:43 | MySmartPointer {...} | | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:108:37:108:41 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:109:14:109:14 | x | | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:111:9:111:9 | z | | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:111:13:111:45 | MySmartPointer {...} | | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:111:39:111:42 | 0i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:112:14:112:14 | z | | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:114:9:114:9 | v | | {EXTERNAL LOCATION} | Vec | +| dereference.rs:114:9:114:9 | v | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:114:13:114:22 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | +| dereference.rs:114:13:114:22 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:115:13:115:13 | x | | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:115:17:115:43 | MySmartPointer {...} | | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:115:41:115:41 | v | | {EXTERNAL LOCATION} | Vec | +| dereference.rs:115:41:115:41 | v | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:116:5:116:5 | x | | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:143:19:151:5 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:144:17:144:26 | key_to_key | | {EXTERNAL LOCATION} | HashMap | +| dereference.rs:144:17:144:26 | key_to_key | K | {EXTERNAL LOCATION} | & | +| dereference.rs:144:17:144:26 | key_to_key | K.TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:144:17:144:26 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | +| dereference.rs:144:17:144:26 | key_to_key | V | {EXTERNAL LOCATION} | & | +| dereference.rs:144:17:144:26 | key_to_key | V.TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:144:30:144:57 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | +| dereference.rs:144:30:144:57 | ...::new(...) | K | {EXTERNAL LOCATION} | & | +| dereference.rs:144:30:144:57 | ...::new(...) | K.TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:144:30:144:57 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | +| dereference.rs:144:30:144:57 | ...::new(...) | V | {EXTERNAL LOCATION} | & | +| dereference.rs:144:30:144:57 | ...::new(...) | V.TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:145:17:145:19 | key | | {EXTERNAL LOCATION} | & | +| dereference.rs:145:23:145:29 | &... | | {EXTERNAL LOCATION} | & | +| dereference.rs:145:24:145:29 | Key {...} | | dereference.rs:122:5:123:21 | Key | +| dereference.rs:146:9:149:9 | if ... {...} | | {EXTERNAL LOCATION} | () | +| dereference.rs:146:32:146:41 | key_to_key | | {EXTERNAL LOCATION} | HashMap | +| dereference.rs:146:32:146:41 | key_to_key | K | {EXTERNAL LOCATION} | & | +| dereference.rs:146:32:146:41 | key_to_key | K.TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:146:32:146:41 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | +| dereference.rs:146:32:146:41 | key_to_key | V | {EXTERNAL LOCATION} | & | +| dereference.rs:146:32:146:41 | key_to_key | V.TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:146:47:146:49 | key | | {EXTERNAL LOCATION} | & | +| dereference.rs:146:52:149:9 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:148:13:148:15 | key | | {EXTERNAL LOCATION} | & | +| dereference.rs:150:9:150:18 | key_to_key | | {EXTERNAL LOCATION} | HashMap | +| dereference.rs:150:9:150:18 | key_to_key | K | {EXTERNAL LOCATION} | & | +| dereference.rs:150:9:150:18 | key_to_key | K.TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:150:9:150:18 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | +| dereference.rs:150:9:150:18 | key_to_key | V | {EXTERNAL LOCATION} | & | +| dereference.rs:150:9:150:18 | key_to_key | V.TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:150:27:150:29 | key | | {EXTERNAL LOCATION} | & | +| dereference.rs:150:32:150:34 | key | | {EXTERNAL LOCATION} | & | +| dereference.rs:156:16:156:19 | SelfParam | | dereference.rs:155:5:157:5 | Self [trait MyTrait1] | +| dereference.rs:163:16:163:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| dereference.rs:163:16:163:19 | SelfParam | TRef | dereference.rs:159:5:159:13 | S | +| dereference.rs:163:27:165:9 | { ... } | | dereference.rs:159:5:159:13 | S | +| dereference.rs:170:16:170:19 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| dereference.rs:170:16:170:19 | SelfParam | TRefMut | dereference.rs:159:5:159:13 | S | +| dereference.rs:170:29:172:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:176:16:176:19 | SelfParam | | dereference.rs:175:5:177:5 | Self [trait MyTrait2] | +| dereference.rs:176:22:176:24 | arg | | dereference.rs:175:20:175:21 | T1 | +| dereference.rs:181:16:181:19 | SelfParam | | dereference.rs:159:5:159:13 | S | +| dereference.rs:181:22:181:24 | arg | | {EXTERNAL LOCATION} | & | +| dereference.rs:181:22:181:24 | arg | TRef | dereference.rs:159:5:159:13 | S | +| dereference.rs:181:36:183:9 | { ... } | | dereference.rs:159:5:159:13 | S | +| dereference.rs:188:16:188:19 | SelfParam | | dereference.rs:159:5:159:13 | S | +| dereference.rs:188:22:188:24 | arg | | {EXTERNAL LOCATION} | &mut | +| dereference.rs:188:22:188:24 | arg | TRefMut | dereference.rs:159:5:159:13 | S | +| dereference.rs:188:42:190:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:193:19:200:5 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:194:17:194:20 | (...) | | {EXTERNAL LOCATION} | & | +| dereference.rs:194:18:194:19 | &S | | {EXTERNAL LOCATION} | & | +| dereference.rs:196:17:196:24 | (...) | | {EXTERNAL LOCATION} | &mut | +| dereference.rs:196:18:196:23 | &mut S | | {EXTERNAL LOCATION} | &mut | +| dereference.rs:198:23:198:24 | &S | | {EXTERNAL LOCATION} | & | +| dereference.rs:199:23:199:28 | &mut S | | {EXTERNAL LOCATION} | &mut | | dereference.rs:208:16:208:20 | SelfParam | | {EXTERNAL LOCATION} | & | -| dereference.rs:208:16:208:20 | SelfParam | TRef | dereference.rs:193:5:193:17 | Foo | -| dereference.rs:208:23:210:9 | { ... } | | {EXTERNAL LOCATION} | () | -| dereference.rs:209:22:209:37 | "In trait impl!\\n" | | {EXTERNAL LOCATION} | & | -| dereference.rs:209:22:209:37 | "In trait impl!\\n" | TRef | {EXTERNAL LOCATION} | str | -| dereference.rs:209:22:209:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| dereference.rs:209:22:209:37 | { ... } | | {EXTERNAL LOCATION} | () | -| dereference.rs:213:19:216:5 | { ... } | | {EXTERNAL LOCATION} | () | -| dereference.rs:214:17:214:17 | f | | dereference.rs:193:5:193:17 | Foo | -| dereference.rs:214:21:214:26 | Foo {...} | | dereference.rs:193:5:193:17 | Foo | -| dereference.rs:215:9:215:9 | f | | dereference.rs:193:5:193:17 | Foo | -| dereference.rs:219:15:228:1 | { ... } | | {EXTERNAL LOCATION} | () | -| dereference.rs:220:5:220:38 | explicit_monomorphic_dereference(...) | | {EXTERNAL LOCATION} | () | -| dereference.rs:221:5:221:38 | explicit_polymorphic_dereference(...) | | {EXTERNAL LOCATION} | () | -| dereference.rs:222:5:222:30 | explicit_ref_dereference(...) | | {EXTERNAL LOCATION} | () | -| dereference.rs:223:5:223:30 | explicit_box_dereference(...) | | {EXTERNAL LOCATION} | () | -| dereference.rs:224:5:224:26 | implicit_dereference(...) | | {EXTERNAL LOCATION} | () | -| dereference.rs:225:5:225:41 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| dereference.rs:226:5:226:26 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| dereference.rs:227:5:227:34 | ...::main(...) | | {EXTERNAL LOCATION} | () | +| dereference.rs:208:16:208:20 | SelfParam | TRef | dereference.rs:207:5:209:5 | Self [trait Bar] | +| dereference.rs:213:16:213:24 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| dereference.rs:213:16:213:24 | SelfParam | TRefMut | dereference.rs:205:5:205:17 | Foo | +| dereference.rs:213:27:215:9 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:214:22:214:38 | "In struct impl!\\n" | | {EXTERNAL LOCATION} | & | +| dereference.rs:214:22:214:38 | "In struct impl!\\n" | TRef | {EXTERNAL LOCATION} | str | +| dereference.rs:214:22:214:38 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| dereference.rs:214:22:214:38 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:220:16:220:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| dereference.rs:220:16:220:20 | SelfParam | TRef | dereference.rs:205:5:205:17 | Foo | +| dereference.rs:220:23:222:9 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:221:22:221:37 | "In trait impl!\\n" | | {EXTERNAL LOCATION} | & | +| dereference.rs:221:22:221:37 | "In trait impl!\\n" | TRef | {EXTERNAL LOCATION} | str | +| dereference.rs:221:22:221:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| dereference.rs:221:22:221:37 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:225:19:228:5 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:226:17:226:17 | f | | dereference.rs:205:5:205:17 | Foo | +| dereference.rs:226:21:226:26 | Foo {...} | | dereference.rs:205:5:205:17 | Foo | +| dereference.rs:227:9:227:9 | f | | dereference.rs:205:5:205:17 | Foo | +| dereference.rs:231:15:240:1 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:232:5:232:38 | explicit_monomorphic_dereference(...) | | {EXTERNAL LOCATION} | () | +| dereference.rs:233:5:233:38 | explicit_polymorphic_dereference(...) | | {EXTERNAL LOCATION} | () | +| dereference.rs:234:5:234:30 | explicit_ref_dereference(...) | | {EXTERNAL LOCATION} | () | +| dereference.rs:235:5:235:30 | explicit_box_dereference(...) | | {EXTERNAL LOCATION} | () | +| dereference.rs:236:5:236:26 | implicit_dereference(...) | | {EXTERNAL LOCATION} | () | +| dereference.rs:237:5:237:41 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| dereference.rs:238:5:238:26 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| dereference.rs:239:5:239:34 | ...::main(...) | | {EXTERNAL LOCATION} | () | | dyn_type.rs:7:10:7:14 | SelfParam | | {EXTERNAL LOCATION} | & | | dyn_type.rs:7:10:7:14 | SelfParam | TRef | dyn_type.rs:5:1:8:1 | Self [trait MyTrait1] | | dyn_type.rs:12:12:12:16 | SelfParam | | {EXTERNAL LOCATION} | & | @@ -1793,19 +1811,19 @@ inferCertainType | main.rs:1374:13:1374:13 | x | T.T42 | main.rs:1332:5:1332:22 | S5 | | main.rs:1374:13:1374:13 | x | T.T42.T5 | main.rs:1307:5:1308:14 | S2 | | main.rs:1376:22:1376:25 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1389:16:1389:24 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1389:16:1389:24 | SelfParam | TRef | main.rs:1387:5:1394:5 | Self [trait MyTrait] | +| main.rs:1389:16:1389:24 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1389:16:1389:24 | SelfParam | TRefMut | main.rs:1387:5:1394:5 | Self [trait MyTrait] | | main.rs:1389:27:1389:31 | value | | main.rs:1387:19:1387:19 | S | -| main.rs:1391:21:1391:29 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1391:21:1391:29 | SelfParam | TRef | main.rs:1387:5:1394:5 | Self [trait MyTrait] | +| main.rs:1391:21:1391:29 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1391:21:1391:29 | SelfParam | TRefMut | main.rs:1387:5:1394:5 | Self [trait MyTrait] | | main.rs:1391:32:1391:36 | value | | main.rs:1387:19:1387:19 | S | | main.rs:1391:42:1393:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1392:13:1392:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1392:13:1392:16 | self | TRef | main.rs:1387:5:1394:5 | Self [trait MyTrait] | +| main.rs:1392:13:1392:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1392:13:1392:16 | self | TRefMut | main.rs:1387:5:1394:5 | Self [trait MyTrait] | | main.rs:1392:22:1392:26 | value | | main.rs:1387:19:1387:19 | S | -| main.rs:1398:16:1398:24 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1398:16:1398:24 | SelfParam | TRef | main.rs:1381:5:1385:5 | MyOption | -| main.rs:1398:16:1398:24 | SelfParam | TRef.T | main.rs:1396:10:1396:10 | T | +| main.rs:1398:16:1398:24 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1398:16:1398:24 | SelfParam | TRefMut | main.rs:1381:5:1385:5 | MyOption | +| main.rs:1398:16:1398:24 | SelfParam | TRefMut.T | main.rs:1396:10:1396:10 | T | | main.rs:1398:27:1398:31 | value | | main.rs:1396:10:1396:10 | T | | main.rs:1398:37:1398:38 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1402:26:1404:9 | { ... } | | main.rs:1381:5:1385:5 | MyOption | @@ -1848,7 +1866,7 @@ inferCertainType | main.rs:1432:17:1432:18 | x4 | | main.rs:1381:5:1385:5 | MyOption | | main.rs:1432:22:1432:36 | ...::new(...) | | main.rs:1381:5:1385:5 | MyOption | | main.rs:1433:9:1433:33 | ...::set(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1433:23:1433:29 | &mut x4 | | {EXTERNAL LOCATION} | & | +| main.rs:1433:23:1433:29 | &mut x4 | | {EXTERNAL LOCATION} | &mut | | main.rs:1433:28:1433:29 | x4 | | main.rs:1381:5:1385:5 | MyOption | | main.rs:1434:18:1434:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1434:18:1434:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | @@ -2042,13 +2060,13 @@ inferCertainType | main.rs:1607:16:1613:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1612:15:1612:17 | &... | | {EXTERNAL LOCATION} | & | | main.rs:1612:16:1612:17 | &x | | {EXTERNAL LOCATION} | & | -| main.rs:1623:17:1623:25 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1623:17:1623:25 | SelfParam | TRef | main.rs:1617:5:1620:5 | MyFlag | +| main.rs:1623:17:1623:25 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1623:17:1623:25 | SelfParam | TRefMut | main.rs:1617:5:1620:5 | MyFlag | | main.rs:1623:28:1625:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1624:13:1624:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1624:13:1624:16 | self | TRef | main.rs:1617:5:1620:5 | MyFlag | -| main.rs:1624:26:1624:29 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1624:26:1624:29 | self | TRef | main.rs:1617:5:1620:5 | MyFlag | +| main.rs:1624:13:1624:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1624:13:1624:16 | self | TRefMut | main.rs:1617:5:1620:5 | MyFlag | +| main.rs:1624:26:1624:29 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1624:26:1624:29 | self | TRefMut | main.rs:1617:5:1620:5 | MyFlag | | main.rs:1631:15:1631:19 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1631:15:1631:19 | SelfParam | TRef | main.rs:1628:5:1628:13 | S | | main.rs:1631:31:1633:9 | { ... } | | {EXTERNAL LOCATION} | & | @@ -2095,7 +2113,7 @@ inferCertainType | main.rs:1654:20:1654:24 | &true | | {EXTERNAL LOCATION} | & | | main.rs:1654:21:1654:24 | true | | {EXTERNAL LOCATION} | bool | | main.rs:1659:9:1659:31 | ...::flip(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1659:22:1659:30 | &mut flag | | {EXTERNAL LOCATION} | & | +| main.rs:1659:22:1659:30 | &mut flag | | {EXTERNAL LOCATION} | &mut | | main.rs:1660:18:1660:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1660:18:1660:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1660:18:1660:29 | ...::_print(...) | | {EXTERNAL LOCATION} | () | @@ -2267,7 +2285,7 @@ inferCertainType | main.rs:1810:31:1812:13 | { ... } | | main.rs:1805:14:1805:23 | T | | main.rs:1816:13:1816:13 | p | | {EXTERNAL LOCATION} | *mut | | main.rs:1816:13:1816:13 | p | TPtrMut | {EXTERNAL LOCATION} | i32 | -| main.rs:1816:27:1816:32 | &mut v | | {EXTERNAL LOCATION} | & | +| main.rs:1816:27:1816:32 | &mut v | | {EXTERNAL LOCATION} | &mut | | main.rs:1817:26:1817:26 | p | | {EXTERNAL LOCATION} | *mut | | main.rs:1817:26:1817:26 | p | TPtrMut | {EXTERNAL LOCATION} | i32 | | main.rs:1818:26:1818:48 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | @@ -2297,15 +2315,15 @@ inferCertainType | main.rs:1860:29:1860:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1861:20:1861:23 | self | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1861:29:1861:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:1868:23:1868:31 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1868:23:1868:31 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1868:23:1868:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1868:23:1868:31 | SelfParam | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1868:34:1868:36 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1868:45:1871:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1869:13:1869:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1869:13:1869:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1869:13:1869:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1869:13:1869:16 | self | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1869:23:1869:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:1870:13:1870:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1870:13:1870:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1870:13:1870:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1870:13:1870:16 | self | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1870:23:1870:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1876:16:1876:19 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1876:22:1876:24 | rhs | | main.rs:1843:5:1848:5 | Vec2 | @@ -2315,15 +2333,15 @@ inferCertainType | main.rs:1878:29:1878:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1879:20:1879:23 | self | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1879:29:1879:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:1886:23:1886:31 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1886:23:1886:31 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1886:23:1886:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1886:23:1886:31 | SelfParam | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1886:34:1886:36 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1886:45:1889:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1887:13:1887:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1887:13:1887:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1887:13:1887:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1887:13:1887:16 | self | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1887:23:1887:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:1888:13:1888:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1888:13:1888:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1888:13:1888:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1888:13:1888:16 | self | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1888:23:1888:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1894:16:1894:19 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1894:22:1894:24 | rhs | | main.rs:1843:5:1848:5 | Vec2 | @@ -2333,15 +2351,15 @@ inferCertainType | main.rs:1896:29:1896:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1897:20:1897:23 | self | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1897:29:1897:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:1903:23:1903:31 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1903:23:1903:31 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1903:23:1903:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1903:23:1903:31 | SelfParam | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1903:34:1903:36 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1903:45:1906:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1904:13:1904:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1904:13:1904:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1904:13:1904:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1904:13:1904:16 | self | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1904:23:1904:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:1905:13:1905:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1905:13:1905:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1905:13:1905:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1905:13:1905:16 | self | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1905:23:1905:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1911:16:1911:19 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1911:22:1911:24 | rhs | | main.rs:1843:5:1848:5 | Vec2 | @@ -2351,15 +2369,15 @@ inferCertainType | main.rs:1913:29:1913:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1914:20:1914:23 | self | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1914:29:1914:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:1920:23:1920:31 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1920:23:1920:31 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1920:23:1920:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1920:23:1920:31 | SelfParam | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1920:34:1920:36 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1920:45:1923:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1921:13:1921:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1921:13:1921:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1921:13:1921:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1921:13:1921:16 | self | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1921:23:1921:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:1922:13:1922:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1922:13:1922:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1922:13:1922:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1922:13:1922:16 | self | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1922:23:1922:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1928:16:1928:19 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1928:22:1928:24 | rhs | | main.rs:1843:5:1848:5 | Vec2 | @@ -2369,15 +2387,15 @@ inferCertainType | main.rs:1930:29:1930:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1931:20:1931:23 | self | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1931:29:1931:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:1937:23:1937:31 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1937:23:1937:31 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1937:23:1937:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1937:23:1937:31 | SelfParam | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1937:34:1937:36 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1937:45:1940:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1938:13:1938:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1938:13:1938:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1938:13:1938:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1938:13:1938:16 | self | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1938:23:1938:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:1939:13:1939:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1939:13:1939:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1939:13:1939:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1939:13:1939:16 | self | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1939:23:1939:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1945:19:1945:22 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1945:25:1945:27 | rhs | | main.rs:1843:5:1848:5 | Vec2 | @@ -2387,15 +2405,15 @@ inferCertainType | main.rs:1947:29:1947:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1948:20:1948:23 | self | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1948:29:1948:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:1954:26:1954:34 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1954:26:1954:34 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1954:26:1954:34 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1954:26:1954:34 | SelfParam | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1954:37:1954:39 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1954:48:1957:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1955:13:1955:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1955:13:1955:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1955:13:1955:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1955:13:1955:16 | self | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1955:23:1955:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:1956:13:1956:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1956:13:1956:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1956:13:1956:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1956:13:1956:16 | self | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1956:23:1956:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1962:18:1962:21 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1962:24:1962:26 | rhs | | main.rs:1843:5:1848:5 | Vec2 | @@ -2405,15 +2423,15 @@ inferCertainType | main.rs:1964:29:1964:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1965:20:1965:23 | self | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1965:29:1965:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:1971:25:1971:33 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1971:25:1971:33 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1971:25:1971:33 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1971:25:1971:33 | SelfParam | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1971:36:1971:38 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1971:47:1974:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1972:13:1972:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1972:13:1972:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1972:13:1972:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1972:13:1972:16 | self | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1972:23:1972:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:1973:13:1973:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1973:13:1973:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1973:13:1973:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1973:13:1973:16 | self | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1973:23:1973:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1979:19:1979:22 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1979:25:1979:27 | rhs | | main.rs:1843:5:1848:5 | Vec2 | @@ -2423,15 +2441,15 @@ inferCertainType | main.rs:1981:29:1981:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1982:20:1982:23 | self | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1982:29:1982:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:1988:26:1988:34 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1988:26:1988:34 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1988:26:1988:34 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1988:26:1988:34 | SelfParam | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1988:37:1988:39 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1988:48:1991:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1989:13:1989:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1989:13:1989:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1989:13:1989:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1989:13:1989:16 | self | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1989:23:1989:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:1990:13:1990:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1990:13:1990:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1990:13:1990:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1990:13:1990:16 | self | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1990:23:1990:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1996:16:1996:19 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1996:22:1996:24 | rhs | | {EXTERNAL LOCATION} | u32 | @@ -2441,15 +2459,15 @@ inferCertainType | main.rs:1998:30:1998:32 | rhs | | {EXTERNAL LOCATION} | u32 | | main.rs:1999:20:1999:23 | self | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1999:30:1999:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:2005:23:2005:31 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2005:23:2005:31 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2005:23:2005:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:2005:23:2005:31 | SelfParam | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2005:34:2005:36 | rhs | | {EXTERNAL LOCATION} | u32 | | main.rs:2005:44:2008:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2006:13:2006:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2006:13:2006:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2006:13:2006:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:2006:13:2006:16 | self | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2006:24:2006:26 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:2007:13:2007:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2007:13:2007:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2007:13:2007:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:2007:13:2007:16 | self | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2007:24:2007:26 | rhs | | {EXTERNAL LOCATION} | u32 | | main.rs:2013:16:2013:19 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2013:22:2013:24 | rhs | | {EXTERNAL LOCATION} | u32 | @@ -2459,15 +2477,15 @@ inferCertainType | main.rs:2015:30:2015:32 | rhs | | {EXTERNAL LOCATION} | u32 | | main.rs:2016:20:2016:23 | self | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2016:30:2016:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:2022:23:2022:31 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2022:23:2022:31 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2022:23:2022:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:2022:23:2022:31 | SelfParam | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2022:34:2022:36 | rhs | | {EXTERNAL LOCATION} | u32 | | main.rs:2022:44:2025:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2023:13:2023:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2023:13:2023:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2023:13:2023:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:2023:13:2023:16 | self | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2023:24:2023:26 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:2024:13:2024:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2024:13:2024:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2024:13:2024:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:2024:13:2024:16 | self | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2024:24:2024:26 | rhs | | {EXTERNAL LOCATION} | u32 | | main.rs:2030:16:2030:19 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2030:30:2035:9 | { ... } | | main.rs:1843:5:1848:5 | Vec2 | @@ -2760,10 +2778,10 @@ inferCertainType | main.rs:2236:9:2236:16 | { ... } | | {EXTERNAL LOCATION} | dyn Future | | main.rs:2236:9:2236:16 | { ... } | dyn(Output) | {EXTERNAL LOCATION} | () | | main.rs:2245:13:2245:42 | SelfParam | | {EXTERNAL LOCATION} | Pin | -| main.rs:2245:13:2245:42 | SelfParam | Ptr | {EXTERNAL LOCATION} | & | -| main.rs:2245:13:2245:42 | SelfParam | Ptr.TRef | main.rs:2239:5:2239:14 | S2 | -| main.rs:2246:13:2246:15 | _cx | | {EXTERNAL LOCATION} | & | -| main.rs:2246:13:2246:15 | _cx | TRef | {EXTERNAL LOCATION} | Context | +| main.rs:2245:13:2245:42 | SelfParam | Ptr | {EXTERNAL LOCATION} | &mut | +| main.rs:2245:13:2245:42 | SelfParam | Ptr.TRefMut | main.rs:2239:5:2239:14 | S2 | +| main.rs:2246:13:2246:15 | _cx | | {EXTERNAL LOCATION} | &mut | +| main.rs:2246:13:2246:15 | _cx | TRefMut | {EXTERNAL LOCATION} | Context | | main.rs:2247:44:2249:9 | { ... } | | {EXTERNAL LOCATION} | Poll | | main.rs:2247:44:2249:9 | { ... } | T | main.rs:2221:5:2221:14 | S1 | | main.rs:2252:41:2254:5 | { ... } | | main.rs:2252:16:2252:39 | impl ... | @@ -2851,14 +2869,14 @@ inferCertainType | main.rs:2370:13:2370:38 | MyVec {...} | | main.rs:2363:5:2366:5 | MyVec | | main.rs:2370:27:2370:36 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | | main.rs:2370:27:2370:36 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2373:17:2373:25 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2373:17:2373:25 | SelfParam | TRef | main.rs:2363:5:2366:5 | MyVec | -| main.rs:2373:17:2373:25 | SelfParam | TRef.T | main.rs:2368:10:2368:10 | T | +| main.rs:2373:17:2373:25 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:2373:17:2373:25 | SelfParam | TRefMut | main.rs:2363:5:2366:5 | MyVec | +| main.rs:2373:17:2373:25 | SelfParam | TRefMut.T | main.rs:2368:10:2368:10 | T | | main.rs:2373:28:2373:32 | value | | main.rs:2368:10:2368:10 | T | | main.rs:2373:38:2375:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2374:13:2374:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2374:13:2374:16 | self | TRef | main.rs:2363:5:2366:5 | MyVec | -| main.rs:2374:13:2374:16 | self | TRef.T | main.rs:2368:10:2368:10 | T | +| main.rs:2374:13:2374:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:2374:13:2374:16 | self | TRefMut | main.rs:2363:5:2366:5 | MyVec | +| main.rs:2374:13:2374:16 | self | TRefMut.T | main.rs:2368:10:2368:10 | T | | main.rs:2374:28:2374:32 | value | | main.rs:2368:10:2368:10 | T | | main.rs:2382:18:2382:22 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2382:18:2382:22 | SelfParam | TRef | main.rs:2363:5:2366:5 | MyVec | @@ -3075,7 +3093,7 @@ inferCertainType | main.rs:2628:19:2628:26 | strings1 | | {EXTERNAL LOCATION} | [;] | | main.rs:2628:28:2628:29 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2629:9:2629:33 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2629:18:2629:30 | &mut strings1 | | {EXTERNAL LOCATION} | & | +| main.rs:2629:18:2629:30 | &mut strings1 | | {EXTERNAL LOCATION} | &mut | | main.rs:2629:23:2629:30 | strings1 | | {EXTERNAL LOCATION} | [;] | | main.rs:2629:32:2629:33 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2630:9:2630:28 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | @@ -3794,13 +3812,13 @@ inferCertainType | pattern_matching.rs:264:22:264:33 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:269:13:269:23 | ref_mut_val | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:269:27:269:30 | 5i32 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:270:11:270:26 | &mut ref_mut_val | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:270:11:270:26 | &mut ref_mut_val | | {EXTERNAL LOCATION} | &mut | | pattern_matching.rs:270:16:270:26 | ref_mut_val | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:271:17:271:17 | x | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:271:17:271:17 | x | | {EXTERNAL LOCATION} | &mut | | pattern_matching.rs:271:22:275:9 | { ... } | | {EXTERNAL LOCATION} | () | -| pattern_matching.rs:272:17:272:29 | ref_mut_bound | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:272:33:272:33 | x | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:273:15:273:27 | ref_mut_bound | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:272:17:272:29 | ref_mut_bound | | {EXTERNAL LOCATION} | &mut | +| pattern_matching.rs:272:33:272:33 | x | | {EXTERNAL LOCATION} | &mut | +| pattern_matching.rs:273:15:273:27 | ref_mut_bound | | {EXTERNAL LOCATION} | &mut | | pattern_matching.rs:274:22:274:38 | "Ref mut pattern\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:274:22:274:38 | "Ref mut pattern\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:274:22:274:38 | ...::_print(...) | | {EXTERNAL LOCATION} | () | @@ -3896,9 +3914,9 @@ inferCertainType | pattern_matching.rs:338:22:338:47 | "Dereferenced binding: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:338:22:338:60 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:338:22:338:60 | { ... } | | {EXTERNAL LOCATION} | () | -| pattern_matching.rs:342:11:342:28 | &mut mutable_value | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:342:11:342:28 | &mut mutable_value | | {EXTERNAL LOCATION} | &mut | | pattern_matching.rs:342:16:342:28 | mutable_value | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:343:9:343:18 | &mut ... | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:343:9:343:18 | &mut ... | | {EXTERNAL LOCATION} | &mut | | pattern_matching.rs:343:18:343:18 | x | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:343:23:346:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:344:17:344:29 | mut_ref_bound | | {EXTERNAL LOCATION} | & | @@ -4472,7 +4490,7 @@ inferCertainType | raw_pointer.rs:54:5:54:32 | raw_pointer_const_deref(...) | | {EXTERNAL LOCATION} | i32 | | raw_pointer.rs:54:29:54:31 | &10 | | {EXTERNAL LOCATION} | & | | raw_pointer.rs:55:5:55:36 | raw_pointer_mut_deref(...) | | {EXTERNAL LOCATION} | i32 | -| raw_pointer.rs:55:27:55:35 | &mut true | | {EXTERNAL LOCATION} | & | +| raw_pointer.rs:55:27:55:35 | &mut true | | {EXTERNAL LOCATION} | &mut | | raw_pointer.rs:55:32:55:35 | true | | {EXTERNAL LOCATION} | bool | | raw_pointer.rs:56:5:56:22 | raw_const_borrow(...) | | {EXTERNAL LOCATION} | () | | raw_pointer.rs:57:5:57:20 | raw_mut_borrow(...) | | {EXTERNAL LOCATION} | () | @@ -4555,13 +4573,18 @@ inferType | blanket_impl.rs:55:18:55:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:55:18:55:25 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:55:20:55:21 | x5 | | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:56:13:56:14 | x6 | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:56:18:56:19 | S2 | | blanket_impl.rs:9:5:10:14 | S2 | +| blanket_impl.rs:56:18:56:31 | S2.duplicate() | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:57:18:57:25 | "{x6:?}\\n" | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:57:18:57:25 | "{x6:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | blanket_impl.rs:57:18:57:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:57:18:57:25 | { ... } | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:57:20:57:21 | x6 | | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:58:13:58:14 | x7 | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:58:18:58:22 | (...) | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:58:18:58:22 | (...) | TRef | blanket_impl.rs:9:5:10:14 | S2 | +| blanket_impl.rs:58:18:58:34 | ... .duplicate() | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:58:19:58:21 | &S2 | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:58:19:58:21 | &S2 | TRef | blanket_impl.rs:9:5:10:14 | S2 | | blanket_impl.rs:58:20:58:21 | S2 | | blanket_impl.rs:9:5:10:14 | S2 | @@ -4569,6 +4592,7 @@ inferType | blanket_impl.rs:59:18:59:25 | "{x7:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | blanket_impl.rs:59:18:59:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:59:18:59:25 | { ... } | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:59:20:59:21 | x7 | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:68:24:68:24 | x | | {EXTERNAL LOCATION} | i64 | | blanket_impl.rs:68:32:68:32 | y | | blanket_impl.rs:67:5:69:5 | Self [trait Trait1] | | blanket_impl.rs:72:24:72:24 | x | | {EXTERNAL LOCATION} | i64 | @@ -5022,362 +5046,388 @@ inferType | closure.rs:74:41:74:41 | _ | | {EXTERNAL LOCATION} | i64 | | closure.rs:74:49:74:52 | true | | {EXTERNAL LOCATION} | bool | | closure.rs:74:56:74:56 | 3 | | {EXTERNAL LOCATION} | i32 | -| dereference.rs:12:14:12:18 | SelfParam | | {EXTERNAL LOCATION} | & | -| dereference.rs:12:14:12:18 | SelfParam | TRef | dereference.rs:4:1:6:1 | MyIntPointer | -| dereference.rs:12:29:14:5 | { ... } | | {EXTERNAL LOCATION} | & | -| dereference.rs:12:29:14:5 | { ... } | TRef | {EXTERNAL LOCATION} | i64 | -| dereference.rs:13:9:13:19 | &... | | {EXTERNAL LOCATION} | & | -| dereference.rs:13:9:13:19 | &... | TRef | {EXTERNAL LOCATION} | i64 | -| dereference.rs:13:10:13:13 | self | | {EXTERNAL LOCATION} | & | -| dereference.rs:13:10:13:13 | self | TRef | dereference.rs:4:1:6:1 | MyIntPointer | -| dereference.rs:13:10:13:19 | self.value | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:25:14:25:18 | SelfParam | | {EXTERNAL LOCATION} | & | -| dereference.rs:25:14:25:18 | SelfParam | TRef | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:25:14:25:18 | SelfParam | TRef.T | dereference.rs:21:6:21:6 | T | -| dereference.rs:25:27:27:5 | { ... } | | {EXTERNAL LOCATION} | & | -| dereference.rs:25:27:27:5 | { ... } | TRef | dereference.rs:21:6:21:6 | T | -| dereference.rs:26:9:26:19 | &... | | {EXTERNAL LOCATION} | & | -| dereference.rs:26:9:26:19 | &... | TRef | dereference.rs:21:6:21:6 | T | -| dereference.rs:26:10:26:13 | self | | {EXTERNAL LOCATION} | & | -| dereference.rs:26:10:26:13 | self | TRef | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:26:10:26:13 | self | TRef.T | dereference.rs:21:6:21:6 | T | -| dereference.rs:26:10:26:19 | self.value | | dereference.rs:21:6:21:6 | T | -| dereference.rs:33:12:33:16 | SelfParam | | {EXTERNAL LOCATION} | & | -| dereference.rs:33:12:33:16 | SelfParam | TRef | dereference.rs:30:1:30:15 | S | -| dereference.rs:33:12:33:16 | SelfParam | TRef.T | dereference.rs:32:6:32:6 | T | -| dereference.rs:33:25:35:5 | { ... } | | {EXTERNAL LOCATION} | & | -| dereference.rs:33:25:35:5 | { ... } | TRef | dereference.rs:32:6:32:6 | T | -| dereference.rs:34:9:34:15 | &... | | {EXTERNAL LOCATION} | & | -| dereference.rs:34:9:34:15 | &... | TRef | dereference.rs:32:6:32:6 | T | -| dereference.rs:34:10:34:13 | self | | {EXTERNAL LOCATION} | & | -| dereference.rs:34:10:34:13 | self | TRef | dereference.rs:30:1:30:15 | S | -| dereference.rs:34:10:34:13 | self | TRef.T | dereference.rs:32:6:32:6 | T | -| dereference.rs:34:10:34:15 | self.0 | | dereference.rs:32:6:32:6 | T | -| dereference.rs:38:39:50:1 | { ... } | | {EXTERNAL LOCATION} | () | -| dereference.rs:40:9:40:10 | a1 | | dereference.rs:4:1:6:1 | MyIntPointer | -| dereference.rs:40:14:40:42 | MyIntPointer {...} | | dereference.rs:4:1:6:1 | MyIntPointer | -| dereference.rs:40:36:40:40 | 34i64 | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:41:9:41:11 | _b1 | | {EXTERNAL LOCATION} | & | -| dereference.rs:41:9:41:11 | _b1 | TRef | {EXTERNAL LOCATION} | i64 | -| dereference.rs:41:15:41:16 | a1 | | dereference.rs:4:1:6:1 | MyIntPointer | -| dereference.rs:41:15:41:24 | a1.deref() | | {EXTERNAL LOCATION} | & | -| dereference.rs:41:15:41:24 | a1.deref() | TRef | {EXTERNAL LOCATION} | i64 | -| dereference.rs:44:9:44:10 | a2 | | dereference.rs:4:1:6:1 | MyIntPointer | -| dereference.rs:44:14:44:42 | MyIntPointer {...} | | dereference.rs:4:1:6:1 | MyIntPointer | -| dereference.rs:44:36:44:40 | 34i64 | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:45:9:45:11 | _b2 | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:45:15:45:17 | * ... | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:45:16:45:17 | a2 | | dereference.rs:4:1:6:1 | MyIntPointer | -| dereference.rs:48:9:48:10 | a3 | | dereference.rs:4:1:6:1 | MyIntPointer | -| dereference.rs:48:14:48:42 | MyIntPointer {...} | | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:13:14:13:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| dereference.rs:13:14:13:18 | SelfParam | TRef | dereference.rs:5:1:7:1 | MyIntPointer | +| dereference.rs:13:29:15:5 | { ... } | | {EXTERNAL LOCATION} | & | +| dereference.rs:13:29:15:5 | { ... } | TRef | {EXTERNAL LOCATION} | i64 | +| dereference.rs:14:9:14:19 | &... | | {EXTERNAL LOCATION} | & | +| dereference.rs:14:9:14:19 | &... | TRef | {EXTERNAL LOCATION} | i64 | +| dereference.rs:14:10:14:13 | self | | {EXTERNAL LOCATION} | & | +| dereference.rs:14:10:14:13 | self | TRef | dereference.rs:5:1:7:1 | MyIntPointer | +| dereference.rs:14:10:14:19 | self.value | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:26:14:26:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| dereference.rs:26:14:26:18 | SelfParam | TRef | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:26:14:26:18 | SelfParam | TRef.T | dereference.rs:22:6:22:6 | T | +| dereference.rs:26:27:28:5 | { ... } | | {EXTERNAL LOCATION} | & | +| dereference.rs:26:27:28:5 | { ... } | TRef | dereference.rs:22:6:22:6 | T | +| dereference.rs:27:9:27:19 | &... | | {EXTERNAL LOCATION} | & | +| dereference.rs:27:9:27:19 | &... | TRef | dereference.rs:22:6:22:6 | T | +| dereference.rs:27:10:27:13 | self | | {EXTERNAL LOCATION} | & | +| dereference.rs:27:10:27:13 | self | TRef | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:27:10:27:13 | self | TRef.T | dereference.rs:22:6:22:6 | T | +| dereference.rs:27:10:27:19 | self.value | | dereference.rs:22:6:22:6 | T | +| dereference.rs:33:18:33:26 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| dereference.rs:33:18:33:26 | SelfParam | TRefMut | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:33:18:33:26 | SelfParam | TRefMut.T | dereference.rs:31:6:31:6 | T | +| dereference.rs:33:39:35:5 | { ... } | | {EXTERNAL LOCATION} | &mut | +| dereference.rs:33:39:35:5 | { ... } | TRefMut | dereference.rs:31:6:31:6 | T | +| dereference.rs:34:9:34:23 | &mut ... | | {EXTERNAL LOCATION} | &mut | +| dereference.rs:34:9:34:23 | &mut ... | TRefMut | dereference.rs:31:6:31:6 | T | +| dereference.rs:34:14:34:17 | self | | {EXTERNAL LOCATION} | &mut | +| dereference.rs:34:14:34:17 | self | TRefMut | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:34:14:34:17 | self | TRefMut.T | dereference.rs:31:6:31:6 | T | +| dereference.rs:34:14:34:23 | self.value | | dereference.rs:31:6:31:6 | T | +| dereference.rs:41:12:41:16 | SelfParam | | {EXTERNAL LOCATION} | & | +| dereference.rs:41:12:41:16 | SelfParam | TRef | dereference.rs:38:1:38:15 | S | +| dereference.rs:41:12:41:16 | SelfParam | TRef.T | dereference.rs:40:6:40:6 | T | +| dereference.rs:41:25:43:5 | { ... } | | {EXTERNAL LOCATION} | & | +| dereference.rs:41:25:43:5 | { ... } | TRef | dereference.rs:40:6:40:6 | T | +| dereference.rs:42:9:42:15 | &... | | {EXTERNAL LOCATION} | & | +| dereference.rs:42:9:42:15 | &... | TRef | dereference.rs:40:6:40:6 | T | +| dereference.rs:42:10:42:13 | self | | {EXTERNAL LOCATION} | & | +| dereference.rs:42:10:42:13 | self | TRef | dereference.rs:38:1:38:15 | S | +| dereference.rs:42:10:42:13 | self | TRef.T | dereference.rs:40:6:40:6 | T | +| dereference.rs:42:10:42:15 | self.0 | | dereference.rs:40:6:40:6 | T | +| dereference.rs:46:39:58:1 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:48:9:48:10 | a1 | | dereference.rs:5:1:7:1 | MyIntPointer | +| dereference.rs:48:14:48:42 | MyIntPointer {...} | | dereference.rs:5:1:7:1 | MyIntPointer | | dereference.rs:48:36:48:40 | 34i64 | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:49:9:49:11 | _b3 | | {EXTERNAL LOCATION} | bool | -| dereference.rs:49:15:49:19 | (...) | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:49:15:49:33 | ... .is_positive() | | {EXTERNAL LOCATION} | bool | -| dereference.rs:49:16:49:18 | * ... | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:49:17:49:18 | a3 | | dereference.rs:4:1:6:1 | MyIntPointer | -| dereference.rs:52:39:64:1 | { ... } | | {EXTERNAL LOCATION} | () | -| dereference.rs:54:9:54:10 | c1 | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:54:9:54:10 | c1 | T | {EXTERNAL LOCATION} | char | -| dereference.rs:54:14:54:42 | MySmartPointer {...} | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:54:14:54:42 | MySmartPointer {...} | T | {EXTERNAL LOCATION} | char | -| dereference.rs:54:38:54:40 | 'a' | | {EXTERNAL LOCATION} | char | -| dereference.rs:55:9:55:11 | _d1 | | {EXTERNAL LOCATION} | & | -| dereference.rs:55:9:55:11 | _d1 | TRef | {EXTERNAL LOCATION} | char | -| dereference.rs:55:15:55:16 | c1 | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:55:15:55:16 | c1 | T | {EXTERNAL LOCATION} | char | -| dereference.rs:55:15:55:24 | c1.deref() | | {EXTERNAL LOCATION} | & | -| dereference.rs:55:15:55:24 | c1.deref() | TRef | {EXTERNAL LOCATION} | char | -| dereference.rs:58:9:58:10 | c2 | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:58:9:58:10 | c2 | T | {EXTERNAL LOCATION} | char | -| dereference.rs:58:14:58:42 | MySmartPointer {...} | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:58:14:58:42 | MySmartPointer {...} | T | {EXTERNAL LOCATION} | char | -| dereference.rs:58:38:58:40 | 'a' | | {EXTERNAL LOCATION} | char | -| dereference.rs:59:9:59:11 | _d2 | | {EXTERNAL LOCATION} | char | -| dereference.rs:59:15:59:17 | * ... | | {EXTERNAL LOCATION} | char | -| dereference.rs:59:16:59:17 | c2 | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:59:16:59:17 | c2 | T | {EXTERNAL LOCATION} | char | -| dereference.rs:62:9:62:10 | c3 | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:62:9:62:10 | c3 | T | {EXTERNAL LOCATION} | i64 | -| dereference.rs:62:14:62:44 | MySmartPointer {...} | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:62:14:62:44 | MySmartPointer {...} | T | {EXTERNAL LOCATION} | i64 | -| dereference.rs:62:38:62:42 | 34i64 | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:63:9:63:11 | _d3 | | {EXTERNAL LOCATION} | bool | -| dereference.rs:63:15:63:19 | (...) | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:63:15:63:33 | ... .is_positive() | | {EXTERNAL LOCATION} | bool | -| dereference.rs:63:16:63:18 | * ... | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:63:17:63:18 | c3 | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:63:17:63:18 | c3 | T | {EXTERNAL LOCATION} | i64 | -| dereference.rs:66:31:78:1 | { ... } | | {EXTERNAL LOCATION} | () | -| dereference.rs:68:9:68:10 | e1 | | {EXTERNAL LOCATION} | & | -| dereference.rs:68:9:68:10 | e1 | TRef | {EXTERNAL LOCATION} | char | -| dereference.rs:68:14:68:17 | &'a' | | {EXTERNAL LOCATION} | & | -| dereference.rs:68:14:68:17 | &'a' | TRef | {EXTERNAL LOCATION} | char | -| dereference.rs:68:15:68:17 | 'a' | | {EXTERNAL LOCATION} | char | -| dereference.rs:69:9:69:11 | _f1 | | {EXTERNAL LOCATION} | & | -| dereference.rs:69:9:69:11 | _f1 | TRef | {EXTERNAL LOCATION} | char | -| dereference.rs:69:15:69:16 | e1 | | {EXTERNAL LOCATION} | & | -| dereference.rs:69:15:69:16 | e1 | TRef | {EXTERNAL LOCATION} | char | -| dereference.rs:69:15:69:24 | e1.deref() | | {EXTERNAL LOCATION} | & | -| dereference.rs:69:15:69:24 | e1.deref() | TRef | {EXTERNAL LOCATION} | char | -| dereference.rs:72:9:72:10 | e2 | | {EXTERNAL LOCATION} | & | -| dereference.rs:72:9:72:10 | e2 | TRef | {EXTERNAL LOCATION} | char | -| dereference.rs:72:14:72:17 | &'a' | | {EXTERNAL LOCATION} | & | -| dereference.rs:72:14:72:17 | &'a' | TRef | {EXTERNAL LOCATION} | char | -| dereference.rs:72:15:72:17 | 'a' | | {EXTERNAL LOCATION} | char | -| dereference.rs:73:9:73:11 | _f2 | | {EXTERNAL LOCATION} | char | -| dereference.rs:73:15:73:17 | * ... | | {EXTERNAL LOCATION} | char | -| dereference.rs:73:16:73:17 | e2 | | {EXTERNAL LOCATION} | & | -| dereference.rs:73:16:73:17 | e2 | TRef | {EXTERNAL LOCATION} | char | -| dereference.rs:76:9:76:10 | e3 | | {EXTERNAL LOCATION} | & | -| dereference.rs:76:9:76:10 | e3 | TRef | {EXTERNAL LOCATION} | i64 | -| dereference.rs:76:14:76:19 | &34i64 | | {EXTERNAL LOCATION} | & | -| dereference.rs:76:14:76:19 | &34i64 | TRef | {EXTERNAL LOCATION} | i64 | -| dereference.rs:76:15:76:19 | 34i64 | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:77:9:77:11 | _f3 | | {EXTERNAL LOCATION} | bool | -| dereference.rs:77:15:77:19 | (...) | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:77:15:77:33 | ... .is_positive() | | {EXTERNAL LOCATION} | bool | -| dereference.rs:77:16:77:18 | * ... | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:77:17:77:18 | e3 | | {EXTERNAL LOCATION} | & | -| dereference.rs:77:17:77:18 | e3 | TRef | {EXTERNAL LOCATION} | i64 | -| dereference.rs:80:31:92:1 | { ... } | | {EXTERNAL LOCATION} | () | -| dereference.rs:82:9:82:10 | g1 | | {EXTERNAL LOCATION} | Box | -| dereference.rs:82:9:82:10 | g1 | A | {EXTERNAL LOCATION} | Global | -| dereference.rs:82:9:82:10 | g1 | T | {EXTERNAL LOCATION} | char | -| dereference.rs:82:25:82:37 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| dereference.rs:82:25:82:37 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| dereference.rs:82:25:82:37 | ...::new(...) | T | {EXTERNAL LOCATION} | char | -| dereference.rs:82:34:82:36 | 'a' | | {EXTERNAL LOCATION} | char | -| dereference.rs:83:9:83:11 | _h1 | | {EXTERNAL LOCATION} | & | -| dereference.rs:83:9:83:11 | _h1 | TRef | {EXTERNAL LOCATION} | char | -| dereference.rs:83:15:83:16 | g1 | | {EXTERNAL LOCATION} | Box | -| dereference.rs:83:15:83:16 | g1 | A | {EXTERNAL LOCATION} | Global | -| dereference.rs:83:15:83:16 | g1 | T | {EXTERNAL LOCATION} | char | -| dereference.rs:83:15:83:24 | g1.deref() | | {EXTERNAL LOCATION} | & | -| dereference.rs:83:15:83:24 | g1.deref() | TRef | {EXTERNAL LOCATION} | char | -| dereference.rs:86:9:86:10 | g2 | | {EXTERNAL LOCATION} | Box | -| dereference.rs:86:9:86:10 | g2 | A | {EXTERNAL LOCATION} | Global | -| dereference.rs:86:9:86:10 | g2 | T | {EXTERNAL LOCATION} | char | -| dereference.rs:86:25:86:37 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| dereference.rs:86:25:86:37 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| dereference.rs:86:25:86:37 | ...::new(...) | T | {EXTERNAL LOCATION} | char | -| dereference.rs:86:34:86:36 | 'a' | | {EXTERNAL LOCATION} | char | -| dereference.rs:87:9:87:11 | _h2 | | {EXTERNAL LOCATION} | char | -| dereference.rs:87:15:87:17 | * ... | | {EXTERNAL LOCATION} | char | -| dereference.rs:87:16:87:17 | g2 | | {EXTERNAL LOCATION} | Box | -| dereference.rs:87:16:87:17 | g2 | A | {EXTERNAL LOCATION} | Global | -| dereference.rs:87:16:87:17 | g2 | T | {EXTERNAL LOCATION} | char | -| dereference.rs:90:9:90:10 | g3 | | {EXTERNAL LOCATION} | Box | -| dereference.rs:90:9:90:10 | g3 | A | {EXTERNAL LOCATION} | Global | -| dereference.rs:90:9:90:10 | g3 | T | {EXTERNAL LOCATION} | i64 | -| dereference.rs:90:24:90:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| dereference.rs:90:24:90:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| dereference.rs:90:24:90:38 | ...::new(...) | T | {EXTERNAL LOCATION} | i64 | -| dereference.rs:90:33:90:37 | 34i64 | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:91:9:91:11 | _h3 | | {EXTERNAL LOCATION} | bool | -| dereference.rs:91:15:91:19 | (...) | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:91:15:91:33 | ... .is_positive() | | {EXTERNAL LOCATION} | bool | -| dereference.rs:91:16:91:18 | * ... | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:91:17:91:18 | g3 | | {EXTERNAL LOCATION} | Box | -| dereference.rs:91:17:91:18 | g3 | A | {EXTERNAL LOCATION} | Global | -| dereference.rs:91:17:91:18 | g3 | T | {EXTERNAL LOCATION} | i64 | -| dereference.rs:94:27:105:1 | { ... } | | {EXTERNAL LOCATION} | () | -| dereference.rs:96:9:96:9 | x | | dereference.rs:4:1:6:1 | MyIntPointer | -| dereference.rs:96:13:96:41 | MyIntPointer {...} | | dereference.rs:4:1:6:1 | MyIntPointer | -| dereference.rs:96:35:96:39 | 34i64 | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:97:14:97:14 | x | | dereference.rs:4:1:6:1 | MyIntPointer | -| dereference.rs:100:9:100:9 | x | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:100:9:100:9 | x | T | {EXTERNAL LOCATION} | i64 | -| dereference.rs:100:13:100:43 | MySmartPointer {...} | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:100:13:100:43 | MySmartPointer {...} | T | {EXTERNAL LOCATION} | i64 | -| dereference.rs:100:37:100:41 | 34i64 | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:101:14:101:14 | x | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:101:14:101:14 | x | T | {EXTERNAL LOCATION} | i64 | -| dereference.rs:103:9:103:9 | z | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:103:9:103:9 | z | T | dereference.rs:30:1:30:15 | S | -| dereference.rs:103:9:103:9 | z | T.T | {EXTERNAL LOCATION} | i64 | -| dereference.rs:103:13:103:45 | MySmartPointer {...} | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:103:13:103:45 | MySmartPointer {...} | T | dereference.rs:30:1:30:15 | S | -| dereference.rs:103:13:103:45 | MySmartPointer {...} | T.T | {EXTERNAL LOCATION} | i64 | -| dereference.rs:103:37:103:43 | S(...) | | dereference.rs:30:1:30:15 | S | -| dereference.rs:103:37:103:43 | S(...) | T | {EXTERNAL LOCATION} | i64 | -| dereference.rs:103:39:103:42 | 0i64 | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:104:14:104:14 | z | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:104:14:104:14 | z | T | dereference.rs:30:1:30:15 | S | -| dereference.rs:104:14:104:14 | z | T.T | {EXTERNAL LOCATION} | i64 | -| dereference.rs:131:19:139:5 | { ... } | | {EXTERNAL LOCATION} | () | -| dereference.rs:132:17:132:26 | key_to_key | | {EXTERNAL LOCATION} | HashMap | -| dereference.rs:132:17:132:26 | key_to_key | K | {EXTERNAL LOCATION} | & | -| dereference.rs:132:17:132:26 | key_to_key | K.TRef | dereference.rs:110:5:111:21 | Key | -| dereference.rs:132:17:132:26 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | -| dereference.rs:132:17:132:26 | key_to_key | V | {EXTERNAL LOCATION} | & | -| dereference.rs:132:17:132:26 | key_to_key | V.TRef | dereference.rs:110:5:111:21 | Key | -| dereference.rs:132:30:132:57 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | -| dereference.rs:132:30:132:57 | ...::new(...) | K | {EXTERNAL LOCATION} | & | -| dereference.rs:132:30:132:57 | ...::new(...) | K.TRef | dereference.rs:110:5:111:21 | Key | -| dereference.rs:132:30:132:57 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | -| dereference.rs:132:30:132:57 | ...::new(...) | V | {EXTERNAL LOCATION} | & | -| dereference.rs:132:30:132:57 | ...::new(...) | V.TRef | dereference.rs:110:5:111:21 | Key | -| dereference.rs:133:17:133:19 | key | | {EXTERNAL LOCATION} | & | -| dereference.rs:133:17:133:19 | key | TRef | dereference.rs:110:5:111:21 | Key | -| dereference.rs:133:17:133:19 | key | TRef | {EXTERNAL LOCATION} | & | -| dereference.rs:133:17:133:19 | key | TRef.TRef | dereference.rs:110:5:111:21 | Key | -| dereference.rs:133:23:133:29 | &... | | {EXTERNAL LOCATION} | & | -| dereference.rs:133:23:133:29 | &... | TRef | dereference.rs:110:5:111:21 | Key | -| dereference.rs:133:23:133:29 | &... | TRef | {EXTERNAL LOCATION} | & | -| dereference.rs:133:23:133:29 | &... | TRef.TRef | dereference.rs:110:5:111:21 | Key | -| dereference.rs:133:24:133:29 | Key {...} | | dereference.rs:110:5:111:21 | Key | -| dereference.rs:134:9:137:9 | if ... {...} | | {EXTERNAL LOCATION} | () | -| dereference.rs:134:16:134:28 | Some(...) | | {EXTERNAL LOCATION} | Option | -| dereference.rs:134:16:134:28 | Some(...) | T | {EXTERNAL LOCATION} | & | -| dereference.rs:134:16:134:28 | Some(...) | T.TRef | dereference.rs:110:5:111:21 | Key | -| dereference.rs:134:16:134:28 | Some(...) | T.TRef | {EXTERNAL LOCATION} | & | -| dereference.rs:134:16:134:28 | Some(...) | T.TRef.TRef | dereference.rs:110:5:111:21 | Key | -| dereference.rs:134:21:134:27 | ref_key | | {EXTERNAL LOCATION} | & | -| dereference.rs:134:21:134:27 | ref_key | TRef | dereference.rs:110:5:111:21 | Key | -| dereference.rs:134:21:134:27 | ref_key | TRef | {EXTERNAL LOCATION} | & | -| dereference.rs:134:21:134:27 | ref_key | TRef.TRef | dereference.rs:110:5:111:21 | Key | -| dereference.rs:134:32:134:41 | key_to_key | | {EXTERNAL LOCATION} | HashMap | -| dereference.rs:134:32:134:41 | key_to_key | K | {EXTERNAL LOCATION} | & | -| dereference.rs:134:32:134:41 | key_to_key | K.TRef | dereference.rs:110:5:111:21 | Key | -| dereference.rs:134:32:134:41 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | -| dereference.rs:134:32:134:41 | key_to_key | V | {EXTERNAL LOCATION} | & | -| dereference.rs:134:32:134:41 | key_to_key | V.TRef | dereference.rs:110:5:111:21 | Key | -| dereference.rs:134:32:134:50 | key_to_key.get(...) | | {EXTERNAL LOCATION} | Option | -| dereference.rs:134:32:134:50 | key_to_key.get(...) | T | {EXTERNAL LOCATION} | & | -| dereference.rs:134:32:134:50 | key_to_key.get(...) | T.TRef | dereference.rs:110:5:111:21 | Key | -| dereference.rs:134:32:134:50 | key_to_key.get(...) | T.TRef | {EXTERNAL LOCATION} | & | -| dereference.rs:134:32:134:50 | key_to_key.get(...) | T.TRef.TRef | dereference.rs:110:5:111:21 | Key | -| dereference.rs:134:47:134:49 | key | | {EXTERNAL LOCATION} | & | -| dereference.rs:134:47:134:49 | key | TRef | dereference.rs:110:5:111:21 | Key | -| dereference.rs:134:47:134:49 | key | TRef | {EXTERNAL LOCATION} | & | -| dereference.rs:134:47:134:49 | key | TRef.TRef | dereference.rs:110:5:111:21 | Key | -| dereference.rs:134:52:137:9 | { ... } | | {EXTERNAL LOCATION} | () | -| dereference.rs:136:13:136:15 | key | | {EXTERNAL LOCATION} | & | -| dereference.rs:136:13:136:15 | key | TRef | dereference.rs:110:5:111:21 | Key | -| dereference.rs:136:13:136:15 | key | TRef | {EXTERNAL LOCATION} | & | -| dereference.rs:136:13:136:15 | key | TRef.TRef | dereference.rs:110:5:111:21 | Key | -| dereference.rs:136:13:136:25 | ... = ... | | {EXTERNAL LOCATION} | () | -| dereference.rs:136:19:136:25 | ref_key | | {EXTERNAL LOCATION} | & | -| dereference.rs:136:19:136:25 | ref_key | TRef | dereference.rs:110:5:111:21 | Key | -| dereference.rs:136:19:136:25 | ref_key | TRef | {EXTERNAL LOCATION} | & | -| dereference.rs:136:19:136:25 | ref_key | TRef.TRef | dereference.rs:110:5:111:21 | Key | -| dereference.rs:138:9:138:18 | key_to_key | | {EXTERNAL LOCATION} | HashMap | -| dereference.rs:138:9:138:18 | key_to_key | K | {EXTERNAL LOCATION} | & | -| dereference.rs:138:9:138:18 | key_to_key | K.TRef | dereference.rs:110:5:111:21 | Key | -| dereference.rs:138:9:138:18 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | -| dereference.rs:138:9:138:18 | key_to_key | V | {EXTERNAL LOCATION} | & | -| dereference.rs:138:9:138:18 | key_to_key | V.TRef | dereference.rs:110:5:111:21 | Key | -| dereference.rs:138:9:138:35 | key_to_key.insert(...) | | {EXTERNAL LOCATION} | Option | -| dereference.rs:138:9:138:35 | key_to_key.insert(...) | T | {EXTERNAL LOCATION} | & | -| dereference.rs:138:9:138:35 | key_to_key.insert(...) | T.TRef | dereference.rs:110:5:111:21 | Key | -| dereference.rs:138:9:138:35 | key_to_key.insert(...) | T.TRef | {EXTERNAL LOCATION} | & | -| dereference.rs:138:9:138:35 | key_to_key.insert(...) | T.TRef.TRef | dereference.rs:110:5:111:21 | Key | -| dereference.rs:138:27:138:29 | key | | {EXTERNAL LOCATION} | & | -| dereference.rs:138:27:138:29 | key | TRef | dereference.rs:110:5:111:21 | Key | -| dereference.rs:138:27:138:29 | key | TRef | {EXTERNAL LOCATION} | & | -| dereference.rs:138:27:138:29 | key | TRef.TRef | dereference.rs:110:5:111:21 | Key | -| dereference.rs:138:32:138:34 | key | | {EXTERNAL LOCATION} | & | -| dereference.rs:138:32:138:34 | key | TRef | dereference.rs:110:5:111:21 | Key | -| dereference.rs:138:32:138:34 | key | TRef | {EXTERNAL LOCATION} | & | -| dereference.rs:138:32:138:34 | key | TRef.TRef | dereference.rs:110:5:111:21 | Key | -| dereference.rs:144:16:144:19 | SelfParam | | dereference.rs:143:5:145:5 | Self [trait MyTrait1] | -| dereference.rs:151:16:151:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| dereference.rs:151:16:151:19 | SelfParam | TRef | dereference.rs:147:5:147:13 | S | -| dereference.rs:151:27:153:9 | { ... } | | dereference.rs:147:5:147:13 | S | -| dereference.rs:152:13:152:13 | S | | dereference.rs:147:5:147:13 | S | -| dereference.rs:158:16:158:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| dereference.rs:158:16:158:19 | SelfParam | TRef | dereference.rs:147:5:147:13 | S | -| dereference.rs:158:29:160:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:159:13:159:14 | 42 | | {EXTERNAL LOCATION} | i32 | -| dereference.rs:159:13:159:14 | 42 | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:164:16:164:19 | SelfParam | | dereference.rs:163:5:165:5 | Self [trait MyTrait2] | -| dereference.rs:164:22:164:24 | arg | | dereference.rs:163:20:163:21 | T1 | -| dereference.rs:169:16:169:19 | SelfParam | | dereference.rs:147:5:147:13 | S | -| dereference.rs:169:22:169:24 | arg | | {EXTERNAL LOCATION} | & | -| dereference.rs:169:22:169:24 | arg | TRef | dereference.rs:147:5:147:13 | S | -| dereference.rs:169:36:171:9 | { ... } | | dereference.rs:147:5:147:13 | S | -| dereference.rs:170:13:170:13 | S | | dereference.rs:147:5:147:13 | S | -| dereference.rs:176:16:176:19 | SelfParam | | dereference.rs:147:5:147:13 | S | -| dereference.rs:176:22:176:24 | arg | | {EXTERNAL LOCATION} | & | -| dereference.rs:176:22:176:24 | arg | TRef | dereference.rs:147:5:147:13 | S | -| dereference.rs:176:42:178:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:177:13:177:14 | 42 | | {EXTERNAL LOCATION} | i32 | -| dereference.rs:177:13:177:14 | 42 | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:181:19:188:5 | { ... } | | {EXTERNAL LOCATION} | () | -| dereference.rs:182:13:182:13 | x | | dereference.rs:147:5:147:13 | S | -| dereference.rs:182:13:182:13 | x | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:182:17:182:20 | (...) | | {EXTERNAL LOCATION} | & | -| dereference.rs:182:17:182:20 | (...) | TRef | dereference.rs:147:5:147:13 | S | -| dereference.rs:182:17:182:26 | ... .foo() | | dereference.rs:147:5:147:13 | S | -| dereference.rs:182:17:182:26 | ... .foo() | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:182:18:182:19 | &S | | {EXTERNAL LOCATION} | & | -| dereference.rs:182:18:182:19 | &S | TRef | dereference.rs:147:5:147:13 | S | -| dereference.rs:182:19:182:19 | S | | dereference.rs:147:5:147:13 | S | -| dereference.rs:183:13:183:13 | y | | dereference.rs:147:5:147:13 | S | -| dereference.rs:183:13:183:13 | y | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:183:17:183:17 | S | | dereference.rs:147:5:147:13 | S | -| dereference.rs:183:17:183:23 | S.foo() | | dereference.rs:147:5:147:13 | S | -| dereference.rs:183:17:183:23 | S.foo() | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:184:13:184:13 | z | | dereference.rs:147:5:147:13 | S | -| dereference.rs:184:13:184:13 | z | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:184:17:184:24 | (...) | | {EXTERNAL LOCATION} | & | -| dereference.rs:184:17:184:24 | (...) | TRef | dereference.rs:147:5:147:13 | S | -| dereference.rs:184:17:184:30 | ... .foo() | | dereference.rs:147:5:147:13 | S | -| dereference.rs:184:17:184:30 | ... .foo() | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:184:18:184:23 | &mut S | | {EXTERNAL LOCATION} | & | -| dereference.rs:184:18:184:23 | &mut S | TRef | dereference.rs:147:5:147:13 | S | -| dereference.rs:184:23:184:23 | S | | dereference.rs:147:5:147:13 | S | -| dereference.rs:186:13:186:13 | x | | dereference.rs:147:5:147:13 | S | -| dereference.rs:186:13:186:13 | x | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:186:17:186:17 | S | | dereference.rs:147:5:147:13 | S | -| dereference.rs:186:17:186:25 | S.bar(...) | | dereference.rs:147:5:147:13 | S | -| dereference.rs:186:17:186:25 | S.bar(...) | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:186:23:186:24 | &S | | {EXTERNAL LOCATION} | & | -| dereference.rs:186:23:186:24 | &S | TRef | dereference.rs:147:5:147:13 | S | -| dereference.rs:186:24:186:24 | S | | dereference.rs:147:5:147:13 | S | -| dereference.rs:187:13:187:13 | y | | dereference.rs:147:5:147:13 | S | -| dereference.rs:187:13:187:13 | y | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:187:17:187:17 | S | | dereference.rs:147:5:147:13 | S | -| dereference.rs:187:17:187:29 | S.bar(...) | | dereference.rs:147:5:147:13 | S | -| dereference.rs:187:17:187:29 | S.bar(...) | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:187:23:187:28 | &mut S | | {EXTERNAL LOCATION} | & | -| dereference.rs:187:23:187:28 | &mut S | TRef | dereference.rs:147:5:147:13 | S | -| dereference.rs:187:28:187:28 | S | | dereference.rs:147:5:147:13 | S | -| dereference.rs:196:16:196:20 | SelfParam | | {EXTERNAL LOCATION} | & | -| dereference.rs:196:16:196:20 | SelfParam | TRef | dereference.rs:195:5:197:5 | Self [trait Bar] | -| dereference.rs:201:16:201:24 | SelfParam | | {EXTERNAL LOCATION} | & | -| dereference.rs:201:16:201:24 | SelfParam | TRef | dereference.rs:193:5:193:17 | Foo | -| dereference.rs:201:27:203:9 | { ... } | | {EXTERNAL LOCATION} | () | -| dereference.rs:202:13:202:39 | MacroExpr | | {EXTERNAL LOCATION} | () | -| dereference.rs:202:22:202:38 | "In struct impl!\\n" | | {EXTERNAL LOCATION} | & | -| dereference.rs:202:22:202:38 | "In struct impl!\\n" | TRef | {EXTERNAL LOCATION} | str | -| dereference.rs:202:22:202:38 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| dereference.rs:202:22:202:38 | MacroBlockExpr | | {EXTERNAL LOCATION} | () | -| dereference.rs:202:22:202:38 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:49:9:49:11 | _b1 | | {EXTERNAL LOCATION} | & | +| dereference.rs:49:9:49:11 | _b1 | TRef | {EXTERNAL LOCATION} | i64 | +| dereference.rs:49:15:49:16 | a1 | | dereference.rs:5:1:7:1 | MyIntPointer | +| dereference.rs:49:15:49:24 | a1.deref() | | {EXTERNAL LOCATION} | & | +| dereference.rs:49:15:49:24 | a1.deref() | TRef | {EXTERNAL LOCATION} | i64 | +| dereference.rs:52:9:52:10 | a2 | | dereference.rs:5:1:7:1 | MyIntPointer | +| dereference.rs:52:14:52:42 | MyIntPointer {...} | | dereference.rs:5:1:7:1 | MyIntPointer | +| dereference.rs:52:36:52:40 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:53:9:53:11 | _b2 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:53:15:53:17 | * ... | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:53:16:53:17 | a2 | | dereference.rs:5:1:7:1 | MyIntPointer | +| dereference.rs:56:9:56:10 | a3 | | dereference.rs:5:1:7:1 | MyIntPointer | +| dereference.rs:56:14:56:42 | MyIntPointer {...} | | dereference.rs:5:1:7:1 | MyIntPointer | +| dereference.rs:56:36:56:40 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:57:9:57:11 | _b3 | | {EXTERNAL LOCATION} | bool | +| dereference.rs:57:15:57:19 | (...) | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:57:15:57:33 | ... .is_positive() | | {EXTERNAL LOCATION} | bool | +| dereference.rs:57:16:57:18 | * ... | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:57:17:57:18 | a3 | | dereference.rs:5:1:7:1 | MyIntPointer | +| dereference.rs:60:39:72:1 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:62:9:62:10 | c1 | | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:62:9:62:10 | c1 | T | {EXTERNAL LOCATION} | char | +| dereference.rs:62:14:62:42 | MySmartPointer {...} | | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:62:14:62:42 | MySmartPointer {...} | T | {EXTERNAL LOCATION} | char | +| dereference.rs:62:38:62:40 | 'a' | | {EXTERNAL LOCATION} | char | +| dereference.rs:63:9:63:11 | _d1 | | {EXTERNAL LOCATION} | & | +| dereference.rs:63:9:63:11 | _d1 | TRef | {EXTERNAL LOCATION} | char | +| dereference.rs:63:15:63:16 | c1 | | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:63:15:63:16 | c1 | T | {EXTERNAL LOCATION} | char | +| dereference.rs:63:15:63:24 | c1.deref() | | {EXTERNAL LOCATION} | & | +| dereference.rs:63:15:63:24 | c1.deref() | TRef | {EXTERNAL LOCATION} | char | +| dereference.rs:66:9:66:10 | c2 | | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:66:9:66:10 | c2 | T | {EXTERNAL LOCATION} | char | +| dereference.rs:66:14:66:42 | MySmartPointer {...} | | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:66:14:66:42 | MySmartPointer {...} | T | {EXTERNAL LOCATION} | char | +| dereference.rs:66:38:66:40 | 'a' | | {EXTERNAL LOCATION} | char | +| dereference.rs:67:9:67:11 | _d2 | | {EXTERNAL LOCATION} | char | +| dereference.rs:67:15:67:17 | * ... | | {EXTERNAL LOCATION} | char | +| dereference.rs:67:16:67:17 | c2 | | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:67:16:67:17 | c2 | T | {EXTERNAL LOCATION} | char | +| dereference.rs:70:9:70:10 | c3 | | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:70:9:70:10 | c3 | T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:70:14:70:44 | MySmartPointer {...} | | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:70:14:70:44 | MySmartPointer {...} | T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:70:38:70:42 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:71:9:71:11 | _d3 | | {EXTERNAL LOCATION} | bool | +| dereference.rs:71:15:71:19 | (...) | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:71:15:71:33 | ... .is_positive() | | {EXTERNAL LOCATION} | bool | +| dereference.rs:71:16:71:18 | * ... | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:71:17:71:18 | c3 | | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:71:17:71:18 | c3 | T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:74:31:86:1 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:76:9:76:10 | e1 | | {EXTERNAL LOCATION} | & | +| dereference.rs:76:9:76:10 | e1 | TRef | {EXTERNAL LOCATION} | char | +| dereference.rs:76:14:76:17 | &'a' | | {EXTERNAL LOCATION} | & | +| dereference.rs:76:14:76:17 | &'a' | TRef | {EXTERNAL LOCATION} | char | +| dereference.rs:76:15:76:17 | 'a' | | {EXTERNAL LOCATION} | char | +| dereference.rs:77:9:77:11 | _f1 | | {EXTERNAL LOCATION} | & | +| dereference.rs:77:9:77:11 | _f1 | TRef | {EXTERNAL LOCATION} | char | +| dereference.rs:77:15:77:16 | e1 | | {EXTERNAL LOCATION} | & | +| dereference.rs:77:15:77:16 | e1 | TRef | {EXTERNAL LOCATION} | char | +| dereference.rs:77:15:77:24 | e1.deref() | | {EXTERNAL LOCATION} | & | +| dereference.rs:77:15:77:24 | e1.deref() | TRef | {EXTERNAL LOCATION} | char | +| dereference.rs:80:9:80:10 | e2 | | {EXTERNAL LOCATION} | & | +| dereference.rs:80:9:80:10 | e2 | TRef | {EXTERNAL LOCATION} | char | +| dereference.rs:80:14:80:17 | &'a' | | {EXTERNAL LOCATION} | & | +| dereference.rs:80:14:80:17 | &'a' | TRef | {EXTERNAL LOCATION} | char | +| dereference.rs:80:15:80:17 | 'a' | | {EXTERNAL LOCATION} | char | +| dereference.rs:81:9:81:11 | _f2 | | {EXTERNAL LOCATION} | char | +| dereference.rs:81:15:81:17 | * ... | | {EXTERNAL LOCATION} | char | +| dereference.rs:81:16:81:17 | e2 | | {EXTERNAL LOCATION} | & | +| dereference.rs:81:16:81:17 | e2 | TRef | {EXTERNAL LOCATION} | char | +| dereference.rs:84:9:84:10 | e3 | | {EXTERNAL LOCATION} | & | +| dereference.rs:84:9:84:10 | e3 | TRef | {EXTERNAL LOCATION} | i64 | +| dereference.rs:84:14:84:19 | &34i64 | | {EXTERNAL LOCATION} | & | +| dereference.rs:84:14:84:19 | &34i64 | TRef | {EXTERNAL LOCATION} | i64 | +| dereference.rs:84:15:84:19 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:85:9:85:11 | _f3 | | {EXTERNAL LOCATION} | bool | +| dereference.rs:85:15:85:19 | (...) | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:85:15:85:33 | ... .is_positive() | | {EXTERNAL LOCATION} | bool | +| dereference.rs:85:16:85:18 | * ... | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:85:17:85:18 | e3 | | {EXTERNAL LOCATION} | & | +| dereference.rs:85:17:85:18 | e3 | TRef | {EXTERNAL LOCATION} | i64 | +| dereference.rs:88:31:100:1 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:90:9:90:10 | g1 | | {EXTERNAL LOCATION} | Box | +| dereference.rs:90:9:90:10 | g1 | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:90:9:90:10 | g1 | T | {EXTERNAL LOCATION} | char | +| dereference.rs:90:25:90:37 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| dereference.rs:90:25:90:37 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:90:25:90:37 | ...::new(...) | T | {EXTERNAL LOCATION} | char | +| dereference.rs:90:34:90:36 | 'a' | | {EXTERNAL LOCATION} | char | +| dereference.rs:91:9:91:11 | _h1 | | {EXTERNAL LOCATION} | & | +| dereference.rs:91:9:91:11 | _h1 | TRef | {EXTERNAL LOCATION} | char | +| dereference.rs:91:15:91:16 | g1 | | {EXTERNAL LOCATION} | Box | +| dereference.rs:91:15:91:16 | g1 | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:91:15:91:16 | g1 | T | {EXTERNAL LOCATION} | char | +| dereference.rs:91:15:91:24 | g1.deref() | | {EXTERNAL LOCATION} | & | +| dereference.rs:91:15:91:24 | g1.deref() | TRef | {EXTERNAL LOCATION} | char | +| dereference.rs:94:9:94:10 | g2 | | {EXTERNAL LOCATION} | Box | +| dereference.rs:94:9:94:10 | g2 | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:94:9:94:10 | g2 | T | {EXTERNAL LOCATION} | char | +| dereference.rs:94:25:94:37 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| dereference.rs:94:25:94:37 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:94:25:94:37 | ...::new(...) | T | {EXTERNAL LOCATION} | char | +| dereference.rs:94:34:94:36 | 'a' | | {EXTERNAL LOCATION} | char | +| dereference.rs:95:9:95:11 | _h2 | | {EXTERNAL LOCATION} | char | +| dereference.rs:95:15:95:17 | * ... | | {EXTERNAL LOCATION} | char | +| dereference.rs:95:16:95:17 | g2 | | {EXTERNAL LOCATION} | Box | +| dereference.rs:95:16:95:17 | g2 | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:95:16:95:17 | g2 | T | {EXTERNAL LOCATION} | char | +| dereference.rs:98:9:98:10 | g3 | | {EXTERNAL LOCATION} | Box | +| dereference.rs:98:9:98:10 | g3 | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:98:9:98:10 | g3 | T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:98:24:98:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| dereference.rs:98:24:98:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:98:24:98:38 | ...::new(...) | T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:98:33:98:37 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:99:9:99:11 | _h3 | | {EXTERNAL LOCATION} | bool | +| dereference.rs:99:15:99:19 | (...) | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:99:15:99:33 | ... .is_positive() | | {EXTERNAL LOCATION} | bool | +| dereference.rs:99:16:99:18 | * ... | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:99:17:99:18 | g3 | | {EXTERNAL LOCATION} | Box | +| dereference.rs:99:17:99:18 | g3 | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:99:17:99:18 | g3 | T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:102:27:117:1 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:104:9:104:9 | x | | dereference.rs:5:1:7:1 | MyIntPointer | +| dereference.rs:104:13:104:41 | MyIntPointer {...} | | dereference.rs:5:1:7:1 | MyIntPointer | +| dereference.rs:104:35:104:39 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:105:9:105:10 | _y | | {EXTERNAL LOCATION} | bool | +| dereference.rs:105:14:105:14 | x | | dereference.rs:5:1:7:1 | MyIntPointer | +| dereference.rs:105:14:105:28 | x.is_positive() | | {EXTERNAL LOCATION} | bool | +| dereference.rs:108:9:108:9 | x | | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:108:9:108:9 | x | T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:108:13:108:43 | MySmartPointer {...} | | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:108:13:108:43 | MySmartPointer {...} | T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:108:37:108:41 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:109:9:109:10 | _y | | {EXTERNAL LOCATION} | bool | +| dereference.rs:109:14:109:14 | x | | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:109:14:109:14 | x | T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:109:14:109:28 | x.is_positive() | | {EXTERNAL LOCATION} | bool | +| dereference.rs:111:9:111:9 | z | | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:111:9:111:9 | z | T | dereference.rs:38:1:38:15 | S | +| dereference.rs:111:9:111:9 | z | T.T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:111:13:111:45 | MySmartPointer {...} | | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:111:13:111:45 | MySmartPointer {...} | T | dereference.rs:38:1:38:15 | S | +| dereference.rs:111:13:111:45 | MySmartPointer {...} | T.T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:111:37:111:43 | S(...) | | dereference.rs:38:1:38:15 | S | +| dereference.rs:111:37:111:43 | S(...) | T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:111:39:111:42 | 0i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:112:9:112:10 | z_ | | {EXTERNAL LOCATION} | & | +| dereference.rs:112:9:112:10 | z_ | TRef | {EXTERNAL LOCATION} | i64 | +| dereference.rs:112:14:112:14 | z | | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:112:14:112:14 | z | T | dereference.rs:38:1:38:15 | S | +| dereference.rs:112:14:112:14 | z | T.T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:112:14:112:20 | z.foo() | | {EXTERNAL LOCATION} | & | +| dereference.rs:112:14:112:20 | z.foo() | TRef | {EXTERNAL LOCATION} | i64 | +| dereference.rs:114:9:114:9 | v | | {EXTERNAL LOCATION} | Vec | +| dereference.rs:114:9:114:9 | v | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:114:13:114:22 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | +| dereference.rs:114:13:114:22 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:115:13:115:13 | x | | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:115:13:115:13 | x | T | {EXTERNAL LOCATION} | Vec | +| dereference.rs:115:13:115:13 | x | T.A | {EXTERNAL LOCATION} | Global | +| dereference.rs:115:17:115:43 | MySmartPointer {...} | | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:115:17:115:43 | MySmartPointer {...} | T | {EXTERNAL LOCATION} | Vec | +| dereference.rs:115:17:115:43 | MySmartPointer {...} | T.A | {EXTERNAL LOCATION} | Global | +| dereference.rs:115:41:115:41 | v | | {EXTERNAL LOCATION} | Vec | +| dereference.rs:115:41:115:41 | v | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:116:5:116:5 | x | | dereference.rs:18:1:20:1 | MySmartPointer | +| dereference.rs:116:5:116:5 | x | T | {EXTERNAL LOCATION} | Vec | +| dereference.rs:116:5:116:5 | x | T.A | {EXTERNAL LOCATION} | Global | +| dereference.rs:116:5:116:13 | x.push(...) | | {EXTERNAL LOCATION} | () | +| dereference.rs:116:12:116:12 | 0 | | {EXTERNAL LOCATION} | i32 | +| dereference.rs:143:19:151:5 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:144:17:144:26 | key_to_key | | {EXTERNAL LOCATION} | HashMap | +| dereference.rs:144:17:144:26 | key_to_key | K | {EXTERNAL LOCATION} | & | +| dereference.rs:144:17:144:26 | key_to_key | K.TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:144:17:144:26 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | +| dereference.rs:144:17:144:26 | key_to_key | V | {EXTERNAL LOCATION} | & | +| dereference.rs:144:17:144:26 | key_to_key | V.TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:144:30:144:57 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | +| dereference.rs:144:30:144:57 | ...::new(...) | K | {EXTERNAL LOCATION} | & | +| dereference.rs:144:30:144:57 | ...::new(...) | K.TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:144:30:144:57 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | +| dereference.rs:144:30:144:57 | ...::new(...) | V | {EXTERNAL LOCATION} | & | +| dereference.rs:144:30:144:57 | ...::new(...) | V.TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:145:17:145:19 | key | | {EXTERNAL LOCATION} | & | +| dereference.rs:145:17:145:19 | key | TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:145:17:145:19 | key | TRef | {EXTERNAL LOCATION} | & | +| dereference.rs:145:17:145:19 | key | TRef.TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:145:23:145:29 | &... | | {EXTERNAL LOCATION} | & | +| dereference.rs:145:23:145:29 | &... | TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:145:23:145:29 | &... | TRef | {EXTERNAL LOCATION} | & | +| dereference.rs:145:23:145:29 | &... | TRef.TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:145:24:145:29 | Key {...} | | dereference.rs:122:5:123:21 | Key | +| dereference.rs:146:9:149:9 | if ... {...} | | {EXTERNAL LOCATION} | () | +| dereference.rs:146:16:146:28 | Some(...) | | {EXTERNAL LOCATION} | Option | +| dereference.rs:146:16:146:28 | Some(...) | T | {EXTERNAL LOCATION} | & | +| dereference.rs:146:16:146:28 | Some(...) | T.TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:146:16:146:28 | Some(...) | T.TRef | {EXTERNAL LOCATION} | & | +| dereference.rs:146:16:146:28 | Some(...) | T.TRef.TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:146:21:146:27 | ref_key | | {EXTERNAL LOCATION} | & | +| dereference.rs:146:21:146:27 | ref_key | TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:146:21:146:27 | ref_key | TRef | {EXTERNAL LOCATION} | & | +| dereference.rs:146:21:146:27 | ref_key | TRef.TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:146:32:146:41 | key_to_key | | {EXTERNAL LOCATION} | HashMap | +| dereference.rs:146:32:146:41 | key_to_key | K | {EXTERNAL LOCATION} | & | +| dereference.rs:146:32:146:41 | key_to_key | K.TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:146:32:146:41 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | +| dereference.rs:146:32:146:41 | key_to_key | V | {EXTERNAL LOCATION} | & | +| dereference.rs:146:32:146:41 | key_to_key | V.TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:146:32:146:50 | key_to_key.get(...) | | {EXTERNAL LOCATION} | Option | +| dereference.rs:146:32:146:50 | key_to_key.get(...) | T | {EXTERNAL LOCATION} | & | +| dereference.rs:146:32:146:50 | key_to_key.get(...) | T.TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:146:32:146:50 | key_to_key.get(...) | T.TRef | {EXTERNAL LOCATION} | & | +| dereference.rs:146:32:146:50 | key_to_key.get(...) | T.TRef.TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:146:47:146:49 | key | | {EXTERNAL LOCATION} | & | +| dereference.rs:146:47:146:49 | key | TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:146:47:146:49 | key | TRef | {EXTERNAL LOCATION} | & | +| dereference.rs:146:47:146:49 | key | TRef.TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:146:52:149:9 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:148:13:148:15 | key | | {EXTERNAL LOCATION} | & | +| dereference.rs:148:13:148:15 | key | TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:148:13:148:15 | key | TRef | {EXTERNAL LOCATION} | & | +| dereference.rs:148:13:148:15 | key | TRef.TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:148:13:148:25 | ... = ... | | {EXTERNAL LOCATION} | () | +| dereference.rs:148:19:148:25 | ref_key | | {EXTERNAL LOCATION} | & | +| dereference.rs:148:19:148:25 | ref_key | TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:148:19:148:25 | ref_key | TRef | {EXTERNAL LOCATION} | & | +| dereference.rs:148:19:148:25 | ref_key | TRef.TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:150:9:150:18 | key_to_key | | {EXTERNAL LOCATION} | HashMap | +| dereference.rs:150:9:150:18 | key_to_key | K | {EXTERNAL LOCATION} | & | +| dereference.rs:150:9:150:18 | key_to_key | K.TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:150:9:150:18 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | +| dereference.rs:150:9:150:18 | key_to_key | V | {EXTERNAL LOCATION} | & | +| dereference.rs:150:9:150:18 | key_to_key | V.TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:150:9:150:35 | key_to_key.insert(...) | | {EXTERNAL LOCATION} | Option | +| dereference.rs:150:9:150:35 | key_to_key.insert(...) | T | {EXTERNAL LOCATION} | & | +| dereference.rs:150:9:150:35 | key_to_key.insert(...) | T.TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:150:9:150:35 | key_to_key.insert(...) | T.TRef | {EXTERNAL LOCATION} | & | +| dereference.rs:150:9:150:35 | key_to_key.insert(...) | T.TRef.TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:150:27:150:29 | key | | {EXTERNAL LOCATION} | & | +| dereference.rs:150:27:150:29 | key | TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:150:27:150:29 | key | TRef | {EXTERNAL LOCATION} | & | +| dereference.rs:150:27:150:29 | key | TRef.TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:150:32:150:34 | key | | {EXTERNAL LOCATION} | & | +| dereference.rs:150:32:150:34 | key | TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:150:32:150:34 | key | TRef | {EXTERNAL LOCATION} | & | +| dereference.rs:150:32:150:34 | key | TRef.TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:156:16:156:19 | SelfParam | | dereference.rs:155:5:157:5 | Self [trait MyTrait1] | +| dereference.rs:163:16:163:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| dereference.rs:163:16:163:19 | SelfParam | TRef | dereference.rs:159:5:159:13 | S | +| dereference.rs:163:27:165:9 | { ... } | | dereference.rs:159:5:159:13 | S | +| dereference.rs:164:13:164:13 | S | | dereference.rs:159:5:159:13 | S | +| dereference.rs:170:16:170:19 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| dereference.rs:170:16:170:19 | SelfParam | TRefMut | dereference.rs:159:5:159:13 | S | +| dereference.rs:170:29:172:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:171:13:171:14 | 42 | | {EXTERNAL LOCATION} | i32 | +| dereference.rs:171:13:171:14 | 42 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:176:16:176:19 | SelfParam | | dereference.rs:175:5:177:5 | Self [trait MyTrait2] | +| dereference.rs:176:22:176:24 | arg | | dereference.rs:175:20:175:21 | T1 | +| dereference.rs:181:16:181:19 | SelfParam | | dereference.rs:159:5:159:13 | S | +| dereference.rs:181:22:181:24 | arg | | {EXTERNAL LOCATION} | & | +| dereference.rs:181:22:181:24 | arg | TRef | dereference.rs:159:5:159:13 | S | +| dereference.rs:181:36:183:9 | { ... } | | dereference.rs:159:5:159:13 | S | +| dereference.rs:182:13:182:13 | S | | dereference.rs:159:5:159:13 | S | +| dereference.rs:188:16:188:19 | SelfParam | | dereference.rs:159:5:159:13 | S | +| dereference.rs:188:22:188:24 | arg | | {EXTERNAL LOCATION} | &mut | +| dereference.rs:188:22:188:24 | arg | TRefMut | dereference.rs:159:5:159:13 | S | +| dereference.rs:188:42:190:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:189:13:189:14 | 42 | | {EXTERNAL LOCATION} | i32 | +| dereference.rs:189:13:189:14 | 42 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:193:19:200:5 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:194:13:194:13 | x | | dereference.rs:159:5:159:13 | S | +| dereference.rs:194:17:194:20 | (...) | | {EXTERNAL LOCATION} | & | +| dereference.rs:194:17:194:20 | (...) | TRef | dereference.rs:159:5:159:13 | S | +| dereference.rs:194:17:194:26 | ... .foo() | | dereference.rs:159:5:159:13 | S | +| dereference.rs:194:18:194:19 | &S | | {EXTERNAL LOCATION} | & | +| dereference.rs:194:18:194:19 | &S | TRef | dereference.rs:159:5:159:13 | S | +| dereference.rs:194:19:194:19 | S | | dereference.rs:159:5:159:13 | S | +| dereference.rs:195:13:195:13 | y | | dereference.rs:159:5:159:13 | S | +| dereference.rs:195:17:195:17 | S | | dereference.rs:159:5:159:13 | S | +| dereference.rs:195:17:195:23 | S.foo() | | dereference.rs:159:5:159:13 | S | +| dereference.rs:196:13:196:13 | z | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:196:17:196:24 | (...) | | {EXTERNAL LOCATION} | &mut | +| dereference.rs:196:17:196:24 | (...) | TRefMut | dereference.rs:159:5:159:13 | S | +| dereference.rs:196:17:196:30 | ... .foo() | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:196:18:196:23 | &mut S | | {EXTERNAL LOCATION} | &mut | +| dereference.rs:196:18:196:23 | &mut S | TRefMut | dereference.rs:159:5:159:13 | S | +| dereference.rs:196:23:196:23 | S | | dereference.rs:159:5:159:13 | S | +| dereference.rs:198:13:198:13 | x | | dereference.rs:159:5:159:13 | S | +| dereference.rs:198:17:198:17 | S | | dereference.rs:159:5:159:13 | S | +| dereference.rs:198:17:198:25 | S.bar(...) | | dereference.rs:159:5:159:13 | S | +| dereference.rs:198:23:198:24 | &S | | {EXTERNAL LOCATION} | & | +| dereference.rs:198:23:198:24 | &S | TRef | dereference.rs:159:5:159:13 | S | +| dereference.rs:198:24:198:24 | S | | dereference.rs:159:5:159:13 | S | +| dereference.rs:199:13:199:13 | y | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:199:17:199:17 | S | | dereference.rs:159:5:159:13 | S | +| dereference.rs:199:17:199:29 | S.bar(...) | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:199:23:199:28 | &mut S | | {EXTERNAL LOCATION} | &mut | +| dereference.rs:199:23:199:28 | &mut S | TRefMut | dereference.rs:159:5:159:13 | S | +| dereference.rs:199:28:199:28 | S | | dereference.rs:159:5:159:13 | S | | dereference.rs:208:16:208:20 | SelfParam | | {EXTERNAL LOCATION} | & | -| dereference.rs:208:16:208:20 | SelfParam | TRef | dereference.rs:193:5:193:17 | Foo | -| dereference.rs:208:23:210:9 | { ... } | | {EXTERNAL LOCATION} | () | -| dereference.rs:209:13:209:38 | MacroExpr | | {EXTERNAL LOCATION} | () | -| dereference.rs:209:22:209:37 | "In trait impl!\\n" | | {EXTERNAL LOCATION} | & | -| dereference.rs:209:22:209:37 | "In trait impl!\\n" | TRef | {EXTERNAL LOCATION} | str | -| dereference.rs:209:22:209:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| dereference.rs:209:22:209:37 | MacroBlockExpr | | {EXTERNAL LOCATION} | () | -| dereference.rs:209:22:209:37 | { ... } | | {EXTERNAL LOCATION} | () | -| dereference.rs:213:19:216:5 | { ... } | | {EXTERNAL LOCATION} | () | -| dereference.rs:214:17:214:17 | f | | dereference.rs:193:5:193:17 | Foo | -| dereference.rs:214:21:214:26 | Foo {...} | | dereference.rs:193:5:193:17 | Foo | -| dereference.rs:215:9:215:9 | f | | dereference.rs:193:5:193:17 | Foo | -| dereference.rs:215:9:215:15 | f.bar() | | {EXTERNAL LOCATION} | () | -| dereference.rs:219:15:228:1 | { ... } | | {EXTERNAL LOCATION} | () | -| dereference.rs:220:5:220:38 | explicit_monomorphic_dereference(...) | | {EXTERNAL LOCATION} | () | -| dereference.rs:221:5:221:38 | explicit_polymorphic_dereference(...) | | {EXTERNAL LOCATION} | () | -| dereference.rs:222:5:222:30 | explicit_ref_dereference(...) | | {EXTERNAL LOCATION} | () | -| dereference.rs:223:5:223:30 | explicit_box_dereference(...) | | {EXTERNAL LOCATION} | () | -| dereference.rs:224:5:224:26 | implicit_dereference(...) | | {EXTERNAL LOCATION} | () | -| dereference.rs:225:5:225:41 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| dereference.rs:226:5:226:26 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| dereference.rs:227:5:227:34 | ...::main(...) | | {EXTERNAL LOCATION} | () | +| dereference.rs:208:16:208:20 | SelfParam | TRef | dereference.rs:207:5:209:5 | Self [trait Bar] | +| dereference.rs:213:16:213:24 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| dereference.rs:213:16:213:24 | SelfParam | TRefMut | dereference.rs:205:5:205:17 | Foo | +| dereference.rs:213:27:215:9 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:214:13:214:39 | MacroExpr | | {EXTERNAL LOCATION} | () | +| dereference.rs:214:22:214:38 | "In struct impl!\\n" | | {EXTERNAL LOCATION} | & | +| dereference.rs:214:22:214:38 | "In struct impl!\\n" | TRef | {EXTERNAL LOCATION} | str | +| dereference.rs:214:22:214:38 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| dereference.rs:214:22:214:38 | MacroBlockExpr | | {EXTERNAL LOCATION} | () | +| dereference.rs:214:22:214:38 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:220:16:220:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| dereference.rs:220:16:220:20 | SelfParam | TRef | dereference.rs:205:5:205:17 | Foo | +| dereference.rs:220:23:222:9 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:221:13:221:38 | MacroExpr | | {EXTERNAL LOCATION} | () | +| dereference.rs:221:22:221:37 | "In trait impl!\\n" | | {EXTERNAL LOCATION} | & | +| dereference.rs:221:22:221:37 | "In trait impl!\\n" | TRef | {EXTERNAL LOCATION} | str | +| dereference.rs:221:22:221:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| dereference.rs:221:22:221:37 | MacroBlockExpr | | {EXTERNAL LOCATION} | () | +| dereference.rs:221:22:221:37 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:225:19:228:5 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:226:17:226:17 | f | | dereference.rs:205:5:205:17 | Foo | +| dereference.rs:226:21:226:26 | Foo {...} | | dereference.rs:205:5:205:17 | Foo | +| dereference.rs:227:9:227:9 | f | | dereference.rs:205:5:205:17 | Foo | +| dereference.rs:227:9:227:15 | f.bar() | | {EXTERNAL LOCATION} | () | +| dereference.rs:231:15:240:1 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:232:5:232:38 | explicit_monomorphic_dereference(...) | | {EXTERNAL LOCATION} | () | +| dereference.rs:233:5:233:38 | explicit_polymorphic_dereference(...) | | {EXTERNAL LOCATION} | () | +| dereference.rs:234:5:234:30 | explicit_ref_dereference(...) | | {EXTERNAL LOCATION} | () | +| dereference.rs:235:5:235:30 | explicit_box_dereference(...) | | {EXTERNAL LOCATION} | () | +| dereference.rs:236:5:236:26 | implicit_dereference(...) | | {EXTERNAL LOCATION} | () | +| dereference.rs:237:5:237:41 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| dereference.rs:238:5:238:26 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| dereference.rs:239:5:239:34 | ...::main(...) | | {EXTERNAL LOCATION} | () | | dyn_type.rs:7:10:7:14 | SelfParam | | {EXTERNAL LOCATION} | & | | dyn_type.rs:7:10:7:14 | SelfParam | TRef | dyn_type.rs:5:1:8:1 | Self [trait MyTrait1] | | dyn_type.rs:12:12:12:16 | SelfParam | | {EXTERNAL LOCATION} | & | @@ -7606,20 +7656,20 @@ inferType | main.rs:1376:17:1376:38 | ... .get_input() | E | {EXTERNAL LOCATION} | bool | | main.rs:1376:17:1376:38 | ... .get_input() | T | {EXTERNAL LOCATION} | bool | | main.rs:1376:22:1376:25 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1389:16:1389:24 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1389:16:1389:24 | SelfParam | TRef | main.rs:1387:5:1394:5 | Self [trait MyTrait] | +| main.rs:1389:16:1389:24 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1389:16:1389:24 | SelfParam | TRefMut | main.rs:1387:5:1394:5 | Self [trait MyTrait] | | main.rs:1389:27:1389:31 | value | | main.rs:1387:19:1387:19 | S | -| main.rs:1391:21:1391:29 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1391:21:1391:29 | SelfParam | TRef | main.rs:1387:5:1394:5 | Self [trait MyTrait] | +| main.rs:1391:21:1391:29 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1391:21:1391:29 | SelfParam | TRefMut | main.rs:1387:5:1394:5 | Self [trait MyTrait] | | main.rs:1391:32:1391:36 | value | | main.rs:1387:19:1387:19 | S | | main.rs:1391:42:1393:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1392:13:1392:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1392:13:1392:16 | self | TRef | main.rs:1387:5:1394:5 | Self [trait MyTrait] | +| main.rs:1392:13:1392:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1392:13:1392:16 | self | TRefMut | main.rs:1387:5:1394:5 | Self [trait MyTrait] | | main.rs:1392:13:1392:27 | self.set(...) | | {EXTERNAL LOCATION} | () | | main.rs:1392:22:1392:26 | value | | main.rs:1387:19:1387:19 | S | -| main.rs:1398:16:1398:24 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1398:16:1398:24 | SelfParam | TRef | main.rs:1381:5:1385:5 | MyOption | -| main.rs:1398:16:1398:24 | SelfParam | TRef.T | main.rs:1396:10:1396:10 | T | +| main.rs:1398:16:1398:24 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1398:16:1398:24 | SelfParam | TRefMut | main.rs:1381:5:1385:5 | MyOption | +| main.rs:1398:16:1398:24 | SelfParam | TRefMut.T | main.rs:1396:10:1396:10 | T | | main.rs:1398:27:1398:31 | value | | main.rs:1396:10:1396:10 | T | | main.rs:1398:37:1398:38 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1402:26:1404:9 | { ... } | | main.rs:1381:5:1385:5 | MyOption | @@ -7688,9 +7738,9 @@ inferType | main.rs:1432:22:1432:36 | ...::new(...) | | main.rs:1381:5:1385:5 | MyOption | | main.rs:1432:22:1432:36 | ...::new(...) | T | main.rs:1416:5:1417:13 | S | | main.rs:1433:9:1433:33 | ...::set(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1433:23:1433:29 | &mut x4 | | {EXTERNAL LOCATION} | & | -| main.rs:1433:23:1433:29 | &mut x4 | TRef | main.rs:1381:5:1385:5 | MyOption | -| main.rs:1433:23:1433:29 | &mut x4 | TRef.T | main.rs:1416:5:1417:13 | S | +| main.rs:1433:23:1433:29 | &mut x4 | | {EXTERNAL LOCATION} | &mut | +| main.rs:1433:23:1433:29 | &mut x4 | TRefMut | main.rs:1381:5:1385:5 | MyOption | +| main.rs:1433:23:1433:29 | &mut x4 | TRefMut.T | main.rs:1416:5:1417:13 | S | | main.rs:1433:28:1433:29 | x4 | | main.rs:1381:5:1385:5 | MyOption | | main.rs:1433:28:1433:29 | x4 | T | main.rs:1416:5:1417:13 | S | | main.rs:1433:32:1433:32 | S | | main.rs:1416:5:1417:13 | S | @@ -8119,16 +8169,16 @@ inferType | main.rs:1612:16:1612:17 | &x | TRef.T | main.rs:1593:5:1593:13 | S | | main.rs:1612:17:1612:17 | x | | main.rs:1595:5:1595:26 | MyStruct | | main.rs:1612:17:1612:17 | x | T | main.rs:1593:5:1593:13 | S | -| main.rs:1623:17:1623:25 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1623:17:1623:25 | SelfParam | TRef | main.rs:1617:5:1620:5 | MyFlag | +| main.rs:1623:17:1623:25 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1623:17:1623:25 | SelfParam | TRefMut | main.rs:1617:5:1620:5 | MyFlag | | main.rs:1623:28:1625:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1624:13:1624:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1624:13:1624:16 | self | TRef | main.rs:1617:5:1620:5 | MyFlag | +| main.rs:1624:13:1624:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1624:13:1624:16 | self | TRefMut | main.rs:1617:5:1620:5 | MyFlag | | main.rs:1624:13:1624:21 | self.bool | | {EXTERNAL LOCATION} | bool | | main.rs:1624:13:1624:34 | ... = ... | | {EXTERNAL LOCATION} | () | | main.rs:1624:25:1624:34 | ! ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1624:26:1624:29 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1624:26:1624:29 | self | TRef | main.rs:1617:5:1620:5 | MyFlag | +| main.rs:1624:26:1624:29 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1624:26:1624:29 | self | TRefMut | main.rs:1617:5:1620:5 | MyFlag | | main.rs:1624:26:1624:34 | self.bool | | {EXTERNAL LOCATION} | bool | | main.rs:1631:15:1631:19 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1631:15:1631:19 | SelfParam | TRef | main.rs:1628:5:1628:13 | S | @@ -8220,8 +8270,8 @@ inferType | main.rs:1658:17:1658:20 | flag | | main.rs:1617:5:1620:5 | MyFlag | | main.rs:1658:24:1658:41 | ...::default(...) | | main.rs:1617:5:1620:5 | MyFlag | | main.rs:1659:9:1659:31 | ...::flip(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1659:22:1659:30 | &mut flag | | {EXTERNAL LOCATION} | & | -| main.rs:1659:22:1659:30 | &mut flag | TRef | main.rs:1617:5:1620:5 | MyFlag | +| main.rs:1659:22:1659:30 | &mut flag | | {EXTERNAL LOCATION} | &mut | +| main.rs:1659:22:1659:30 | &mut flag | TRefMut | main.rs:1617:5:1620:5 | MyFlag | | main.rs:1659:27:1659:30 | flag | | main.rs:1617:5:1620:5 | MyFlag | | main.rs:1660:18:1660:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1660:18:1660:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | @@ -8580,8 +8630,8 @@ inferType | main.rs:1815:21:1815:22 | 42 | | {EXTERNAL LOCATION} | i32 | | main.rs:1816:13:1816:13 | p | | {EXTERNAL LOCATION} | *mut | | main.rs:1816:13:1816:13 | p | TPtrMut | {EXTERNAL LOCATION} | i32 | -| main.rs:1816:27:1816:32 | &mut v | | {EXTERNAL LOCATION} | & | -| main.rs:1816:27:1816:32 | &mut v | TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:1816:27:1816:32 | &mut v | | {EXTERNAL LOCATION} | &mut | +| main.rs:1816:27:1816:32 | &mut v | TRefMut | {EXTERNAL LOCATION} | i32 | | main.rs:1816:32:1816:32 | v | | {EXTERNAL LOCATION} | i32 | | main.rs:1817:13:1817:13 | x | | {EXTERNAL LOCATION} | & | | main.rs:1817:13:1817:13 | x | TRef | {EXTERNAL LOCATION} | i32 | @@ -8649,18 +8699,18 @@ inferType | main.rs:1861:20:1861:33 | ... + ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1861:29:1861:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1861:29:1861:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1868:23:1868:31 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1868:23:1868:31 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1868:23:1868:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1868:23:1868:31 | SelfParam | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1868:34:1868:36 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1868:45:1871:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1869:13:1869:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1869:13:1869:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1869:13:1869:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1869:13:1869:16 | self | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1869:13:1869:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1869:13:1869:27 | ... += ... | | {EXTERNAL LOCATION} | () | | main.rs:1869:23:1869:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1869:23:1869:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1870:13:1870:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1870:13:1870:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1870:13:1870:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1870:13:1870:16 | self | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1870:13:1870:18 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1870:13:1870:27 | ... += ... | | {EXTERNAL LOCATION} | () | | main.rs:1870:23:1870:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | @@ -8679,18 +8729,18 @@ inferType | main.rs:1879:20:1879:33 | ... - ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1879:29:1879:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1879:29:1879:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1886:23:1886:31 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1886:23:1886:31 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1886:23:1886:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1886:23:1886:31 | SelfParam | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1886:34:1886:36 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1886:45:1889:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1887:13:1887:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1887:13:1887:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1887:13:1887:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1887:13:1887:16 | self | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1887:13:1887:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1887:13:1887:27 | ... -= ... | | {EXTERNAL LOCATION} | () | | main.rs:1887:23:1887:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1887:23:1887:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1888:13:1888:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1888:13:1888:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1888:13:1888:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1888:13:1888:16 | self | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1888:13:1888:18 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1888:13:1888:27 | ... -= ... | | {EXTERNAL LOCATION} | () | | main.rs:1888:23:1888:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | @@ -8709,18 +8759,18 @@ inferType | main.rs:1897:20:1897:33 | ... * ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1897:29:1897:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1897:29:1897:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1903:23:1903:31 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1903:23:1903:31 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1903:23:1903:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1903:23:1903:31 | SelfParam | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1903:34:1903:36 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1903:45:1906:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1904:13:1904:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1904:13:1904:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1904:13:1904:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1904:13:1904:16 | self | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1904:13:1904:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1904:13:1904:27 | ... *= ... | | {EXTERNAL LOCATION} | () | | main.rs:1904:23:1904:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1904:23:1904:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1905:13:1905:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1905:13:1905:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1905:13:1905:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1905:13:1905:16 | self | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1905:13:1905:18 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1905:13:1905:27 | ... *= ... | | {EXTERNAL LOCATION} | () | | main.rs:1905:23:1905:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | @@ -8739,18 +8789,18 @@ inferType | main.rs:1914:20:1914:33 | ... / ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1914:29:1914:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1914:29:1914:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1920:23:1920:31 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1920:23:1920:31 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1920:23:1920:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1920:23:1920:31 | SelfParam | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1920:34:1920:36 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1920:45:1923:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1921:13:1921:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1921:13:1921:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1921:13:1921:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1921:13:1921:16 | self | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1921:13:1921:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1921:13:1921:27 | ... /= ... | | {EXTERNAL LOCATION} | () | | main.rs:1921:23:1921:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1921:23:1921:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1922:13:1922:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1922:13:1922:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1922:13:1922:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1922:13:1922:16 | self | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1922:13:1922:18 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1922:13:1922:27 | ... /= ... | | {EXTERNAL LOCATION} | () | | main.rs:1922:23:1922:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | @@ -8769,18 +8819,18 @@ inferType | main.rs:1931:20:1931:33 | ... % ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1931:29:1931:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1931:29:1931:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1937:23:1937:31 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1937:23:1937:31 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1937:23:1937:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1937:23:1937:31 | SelfParam | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1937:34:1937:36 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1937:45:1940:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1938:13:1938:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1938:13:1938:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1938:13:1938:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1938:13:1938:16 | self | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1938:13:1938:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1938:13:1938:27 | ... %= ... | | {EXTERNAL LOCATION} | () | | main.rs:1938:23:1938:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1938:23:1938:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1939:13:1939:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1939:13:1939:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1939:13:1939:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1939:13:1939:16 | self | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1939:13:1939:18 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1939:13:1939:27 | ... %= ... | | {EXTERNAL LOCATION} | () | | main.rs:1939:23:1939:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | @@ -8799,18 +8849,18 @@ inferType | main.rs:1948:20:1948:33 | ... & ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1948:29:1948:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1948:29:1948:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1954:26:1954:34 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1954:26:1954:34 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1954:26:1954:34 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1954:26:1954:34 | SelfParam | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1954:37:1954:39 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1954:48:1957:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1955:13:1955:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1955:13:1955:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1955:13:1955:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1955:13:1955:16 | self | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1955:13:1955:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1955:13:1955:27 | ... &= ... | | {EXTERNAL LOCATION} | () | | main.rs:1955:23:1955:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1955:23:1955:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1956:13:1956:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1956:13:1956:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1956:13:1956:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1956:13:1956:16 | self | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1956:13:1956:18 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1956:13:1956:27 | ... &= ... | | {EXTERNAL LOCATION} | () | | main.rs:1956:23:1956:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | @@ -8829,18 +8879,18 @@ inferType | main.rs:1965:20:1965:33 | ... \| ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1965:29:1965:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1965:29:1965:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1971:25:1971:33 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1971:25:1971:33 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1971:25:1971:33 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1971:25:1971:33 | SelfParam | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1971:36:1971:38 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1971:47:1974:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1972:13:1972:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1972:13:1972:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1972:13:1972:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1972:13:1972:16 | self | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1972:13:1972:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1972:13:1972:27 | ... \|= ... | | {EXTERNAL LOCATION} | () | | main.rs:1972:23:1972:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1972:23:1972:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1973:13:1973:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1973:13:1973:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1973:13:1973:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1973:13:1973:16 | self | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1973:13:1973:18 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1973:13:1973:27 | ... \|= ... | | {EXTERNAL LOCATION} | () | | main.rs:1973:23:1973:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | @@ -8859,18 +8909,18 @@ inferType | main.rs:1982:20:1982:33 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1982:29:1982:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1982:29:1982:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1988:26:1988:34 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1988:26:1988:34 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1988:26:1988:34 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1988:26:1988:34 | SelfParam | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1988:37:1988:39 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1988:48:1991:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1989:13:1989:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1989:13:1989:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1989:13:1989:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1989:13:1989:16 | self | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1989:13:1989:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1989:13:1989:27 | ... ^= ... | | {EXTERNAL LOCATION} | () | | main.rs:1989:23:1989:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1989:23:1989:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1990:13:1990:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1990:13:1990:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1990:13:1990:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1990:13:1990:16 | self | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1990:13:1990:18 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1990:13:1990:27 | ... ^= ... | | {EXTERNAL LOCATION} | () | | main.rs:1990:23:1990:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | @@ -8887,17 +8937,17 @@ inferType | main.rs:1999:20:1999:25 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1999:20:1999:32 | ... << ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1999:30:1999:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:2005:23:2005:31 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2005:23:2005:31 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2005:23:2005:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:2005:23:2005:31 | SelfParam | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2005:34:2005:36 | rhs | | {EXTERNAL LOCATION} | u32 | | main.rs:2005:44:2008:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2006:13:2006:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2006:13:2006:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2006:13:2006:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:2006:13:2006:16 | self | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2006:13:2006:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:2006:13:2006:26 | ... <<= ... | | {EXTERNAL LOCATION} | () | | main.rs:2006:24:2006:26 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:2007:13:2007:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2007:13:2007:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2007:13:2007:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:2007:13:2007:16 | self | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2007:13:2007:18 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:2007:13:2007:26 | ... <<= ... | | {EXTERNAL LOCATION} | () | | main.rs:2007:24:2007:26 | rhs | | {EXTERNAL LOCATION} | u32 | @@ -8913,17 +8963,17 @@ inferType | main.rs:2016:20:2016:25 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:2016:20:2016:32 | ... >> ... | | {EXTERNAL LOCATION} | i64 | | main.rs:2016:30:2016:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:2022:23:2022:31 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2022:23:2022:31 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2022:23:2022:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:2022:23:2022:31 | SelfParam | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2022:34:2022:36 | rhs | | {EXTERNAL LOCATION} | u32 | | main.rs:2022:44:2025:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2023:13:2023:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2023:13:2023:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2023:13:2023:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:2023:13:2023:16 | self | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2023:13:2023:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:2023:13:2023:26 | ... >>= ... | | {EXTERNAL LOCATION} | () | | main.rs:2023:24:2023:26 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:2024:13:2024:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2024:13:2024:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2024:13:2024:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:2024:13:2024:16 | self | TRefMut | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2024:13:2024:18 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:2024:13:2024:26 | ... >>= ... | | {EXTERNAL LOCATION} | () | | main.rs:2024:24:2024:26 | rhs | | {EXTERNAL LOCATION} | u32 | @@ -9380,10 +9430,10 @@ inferType | main.rs:2236:9:2236:16 | { ... } | | {EXTERNAL LOCATION} | dyn Future | | main.rs:2236:9:2236:16 | { ... } | dyn(Output) | {EXTERNAL LOCATION} | () | | main.rs:2245:13:2245:42 | SelfParam | | {EXTERNAL LOCATION} | Pin | -| main.rs:2245:13:2245:42 | SelfParam | Ptr | {EXTERNAL LOCATION} | & | -| main.rs:2245:13:2245:42 | SelfParam | Ptr.TRef | main.rs:2239:5:2239:14 | S2 | -| main.rs:2246:13:2246:15 | _cx | | {EXTERNAL LOCATION} | & | -| main.rs:2246:13:2246:15 | _cx | TRef | {EXTERNAL LOCATION} | Context | +| main.rs:2245:13:2245:42 | SelfParam | Ptr | {EXTERNAL LOCATION} | &mut | +| main.rs:2245:13:2245:42 | SelfParam | Ptr.TRefMut | main.rs:2239:5:2239:14 | S2 | +| main.rs:2246:13:2246:15 | _cx | | {EXTERNAL LOCATION} | &mut | +| main.rs:2246:13:2246:15 | _cx | TRefMut | {EXTERNAL LOCATION} | Context | | main.rs:2247:44:2249:9 | { ... } | | {EXTERNAL LOCATION} | Poll | | main.rs:2247:44:2249:9 | { ... } | T | main.rs:2221:5:2221:14 | S1 | | main.rs:2248:13:2248:38 | ...::Ready(...) | | {EXTERNAL LOCATION} | Poll | @@ -9561,14 +9611,14 @@ inferType | main.rs:2370:27:2370:36 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | | main.rs:2370:27:2370:36 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | | main.rs:2370:27:2370:36 | ...::new(...) | T | main.rs:2368:10:2368:10 | T | -| main.rs:2373:17:2373:25 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2373:17:2373:25 | SelfParam | TRef | main.rs:2363:5:2366:5 | MyVec | -| main.rs:2373:17:2373:25 | SelfParam | TRef.T | main.rs:2368:10:2368:10 | T | +| main.rs:2373:17:2373:25 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:2373:17:2373:25 | SelfParam | TRefMut | main.rs:2363:5:2366:5 | MyVec | +| main.rs:2373:17:2373:25 | SelfParam | TRefMut.T | main.rs:2368:10:2368:10 | T | | main.rs:2373:28:2373:32 | value | | main.rs:2368:10:2368:10 | T | | main.rs:2373:38:2375:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2374:13:2374:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2374:13:2374:16 | self | TRef | main.rs:2363:5:2366:5 | MyVec | -| main.rs:2374:13:2374:16 | self | TRef.T | main.rs:2368:10:2368:10 | T | +| main.rs:2374:13:2374:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:2374:13:2374:16 | self | TRefMut | main.rs:2363:5:2366:5 | MyVec | +| main.rs:2374:13:2374:16 | self | TRefMut.T | main.rs:2368:10:2368:10 | T | | main.rs:2374:13:2374:21 | self.data | | {EXTERNAL LOCATION} | Vec | | main.rs:2374:13:2374:21 | self.data | A | {EXTERNAL LOCATION} | Global | | main.rs:2374:13:2374:21 | self.data | T | main.rs:2368:10:2368:10 | T | @@ -9952,13 +10002,13 @@ inferType | main.rs:2628:19:2628:26 | strings1 | TArray.TRef | {EXTERNAL LOCATION} | str | | main.rs:2628:28:2628:29 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2629:9:2629:33 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2629:13:2629:13 | s | | {EXTERNAL LOCATION} | & | -| main.rs:2629:13:2629:13 | s | TRef | {EXTERNAL LOCATION} | & | -| main.rs:2629:13:2629:13 | s | TRef.TRef | {EXTERNAL LOCATION} | str | -| main.rs:2629:18:2629:30 | &mut strings1 | | {EXTERNAL LOCATION} | & | -| main.rs:2629:18:2629:30 | &mut strings1 | TRef | {EXTERNAL LOCATION} | [;] | -| main.rs:2629:18:2629:30 | &mut strings1 | TRef.TArray | {EXTERNAL LOCATION} | & | -| main.rs:2629:18:2629:30 | &mut strings1 | TRef.TArray.TRef | {EXTERNAL LOCATION} | str | +| main.rs:2629:13:2629:13 | s | | {EXTERNAL LOCATION} | &mut | +| main.rs:2629:13:2629:13 | s | TRefMut | {EXTERNAL LOCATION} | & | +| main.rs:2629:13:2629:13 | s | TRefMut.TRef | {EXTERNAL LOCATION} | str | +| main.rs:2629:18:2629:30 | &mut strings1 | | {EXTERNAL LOCATION} | &mut | +| main.rs:2629:18:2629:30 | &mut strings1 | TRefMut | {EXTERNAL LOCATION} | [;] | +| main.rs:2629:18:2629:30 | &mut strings1 | TRefMut.TArray | {EXTERNAL LOCATION} | & | +| main.rs:2629:18:2629:30 | &mut strings1 | TRefMut.TArray.TRef | {EXTERNAL LOCATION} | str | | main.rs:2629:23:2629:30 | strings1 | | {EXTERNAL LOCATION} | [;] | | main.rs:2629:23:2629:30 | strings1 | TArray | {EXTERNAL LOCATION} | & | | main.rs:2629:23:2629:30 | strings1 | TArray.TRef | {EXTERNAL LOCATION} | str | @@ -10696,7 +10746,18 @@ inferType | main.rs:2888:21:2888:34 | path2.unwrap() | | main.rs:2865:5:2865:25 | PathBuf | | main.rs:2890:13:2890:20 | pathbuf1 | | main.rs:2865:5:2865:25 | PathBuf | | main.rs:2890:24:2890:37 | ...::new(...) | | main.rs:2865:5:2865:25 | PathBuf | +| main.rs:2891:13:2891:20 | pathbuf2 | | {EXTERNAL LOCATION} | Result | +| main.rs:2891:13:2891:20 | pathbuf2 | E | {EXTERNAL LOCATION} | () | +| main.rs:2891:13:2891:20 | pathbuf2 | T | main.rs:2865:5:2865:25 | PathBuf | | main.rs:2891:24:2891:31 | pathbuf1 | | main.rs:2865:5:2865:25 | PathBuf | +| main.rs:2891:24:2891:46 | pathbuf1.canonicalize() | | {EXTERNAL LOCATION} | Result | +| main.rs:2891:24:2891:46 | pathbuf1.canonicalize() | E | {EXTERNAL LOCATION} | () | +| main.rs:2891:24:2891:46 | pathbuf1.canonicalize() | T | main.rs:2865:5:2865:25 | PathBuf | +| main.rs:2892:13:2892:20 | pathbuf3 | | main.rs:2865:5:2865:25 | PathBuf | +| main.rs:2892:24:2892:31 | pathbuf2 | | {EXTERNAL LOCATION} | Result | +| main.rs:2892:24:2892:31 | pathbuf2 | E | {EXTERNAL LOCATION} | () | +| main.rs:2892:24:2892:31 | pathbuf2 | T | main.rs:2865:5:2865:25 | PathBuf | +| main.rs:2892:24:2892:40 | pathbuf2.unwrap() | | main.rs:2865:5:2865:25 | PathBuf | | main.rs:2898:14:2898:18 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2898:14:2898:18 | SelfParam | TRef | main.rs:2897:5:2899:5 | Self [trait MyTrait] | | main.rs:2905:14:2905:18 | SelfParam | | {EXTERNAL LOCATION} | & | @@ -11538,26 +11599,26 @@ inferType | pattern_matching.rs:269:13:269:23 | ref_mut_val | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:269:27:269:30 | 5i32 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:270:5:276:5 | match ... { ... } | | {EXTERNAL LOCATION} | () | -| pattern_matching.rs:270:11:270:26 | &mut ref_mut_val | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:270:11:270:26 | &mut ref_mut_val | TRef | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:270:11:270:26 | &mut ref_mut_val | | {EXTERNAL LOCATION} | &mut | +| pattern_matching.rs:270:11:270:26 | &mut ref_mut_val | TRefMut | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:270:16:270:26 | ref_mut_val | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:271:17:271:17 | x | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:271:17:271:17 | x | TRef | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:271:17:271:17 | x | TRef.TRef | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:271:17:271:17 | x | | {EXTERNAL LOCATION} | &mut | +| pattern_matching.rs:271:17:271:17 | x | TRefMut | {EXTERNAL LOCATION} | &mut | +| pattern_matching.rs:271:17:271:17 | x | TRefMut.TRefMut | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:271:22:275:9 | { ... } | | {EXTERNAL LOCATION} | () | -| pattern_matching.rs:272:17:272:29 | ref_mut_bound | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:272:17:272:29 | ref_mut_bound | TRef | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:272:17:272:29 | ref_mut_bound | TRef.TRef | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:272:33:272:33 | x | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:272:33:272:33 | x | TRef | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:272:33:272:33 | x | TRef.TRef | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:272:17:272:29 | ref_mut_bound | | {EXTERNAL LOCATION} | &mut | +| pattern_matching.rs:272:17:272:29 | ref_mut_bound | TRefMut | {EXTERNAL LOCATION} | &mut | +| pattern_matching.rs:272:17:272:29 | ref_mut_bound | TRefMut.TRefMut | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:272:33:272:33 | x | | {EXTERNAL LOCATION} | &mut | +| pattern_matching.rs:272:33:272:33 | x | TRefMut | {EXTERNAL LOCATION} | &mut | +| pattern_matching.rs:272:33:272:33 | x | TRefMut.TRefMut | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:273:13:273:27 | * ... | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:273:13:273:32 | ... += ... | | {EXTERNAL LOCATION} | () | -| pattern_matching.rs:273:14:273:27 | * ... | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:273:14:273:27 | * ... | TRef | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:273:15:273:27 | ref_mut_bound | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:273:15:273:27 | ref_mut_bound | TRef | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:273:15:273:27 | ref_mut_bound | TRef.TRef | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:273:14:273:27 | * ... | | {EXTERNAL LOCATION} | &mut | +| pattern_matching.rs:273:14:273:27 | * ... | TRefMut | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:273:15:273:27 | ref_mut_bound | | {EXTERNAL LOCATION} | &mut | +| pattern_matching.rs:273:15:273:27 | ref_mut_bound | TRefMut | {EXTERNAL LOCATION} | &mut | +| pattern_matching.rs:273:15:273:27 | ref_mut_bound | TRefMut.TRefMut | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:273:32:273:32 | 1 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:274:22:274:38 | "Ref mut pattern\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:274:22:274:38 | "Ref mut pattern\\n" | TRef | {EXTERNAL LOCATION} | str | @@ -11681,11 +11742,11 @@ inferType | pattern_matching.rs:338:22:338:60 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:338:50:338:60 | deref_bound | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:342:5:347:5 | match ... { ... } | | {EXTERNAL LOCATION} | () | -| pattern_matching.rs:342:11:342:28 | &mut mutable_value | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:342:11:342:28 | &mut mutable_value | TRef | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:342:11:342:28 | &mut mutable_value | | {EXTERNAL LOCATION} | &mut | +| pattern_matching.rs:342:11:342:28 | &mut mutable_value | TRefMut | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:342:16:342:28 | mutable_value | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:343:9:343:18 | &mut ... | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:343:9:343:18 | &mut ... | TRef | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:343:9:343:18 | &mut ... | | {EXTERNAL LOCATION} | &mut | +| pattern_matching.rs:343:9:343:18 | &mut ... | TRefMut | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:343:18:343:18 | x | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:343:18:343:18 | x | TRef | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:343:23:346:9 | { ... } | | {EXTERNAL LOCATION} | () | @@ -12901,8 +12962,8 @@ inferType | raw_pointer.rs:54:29:54:31 | &10 | TRef | {EXTERNAL LOCATION} | i32 | | raw_pointer.rs:54:30:54:31 | 10 | | {EXTERNAL LOCATION} | i32 | | raw_pointer.rs:55:5:55:36 | raw_pointer_mut_deref(...) | | {EXTERNAL LOCATION} | i32 | -| raw_pointer.rs:55:27:55:35 | &mut true | | {EXTERNAL LOCATION} | & | -| raw_pointer.rs:55:27:55:35 | &mut true | TRef | {EXTERNAL LOCATION} | bool | +| raw_pointer.rs:55:27:55:35 | &mut true | | {EXTERNAL LOCATION} | &mut | +| raw_pointer.rs:55:27:55:35 | &mut true | TRefMut | {EXTERNAL LOCATION} | bool | | raw_pointer.rs:55:32:55:35 | true | | {EXTERNAL LOCATION} | bool | | raw_pointer.rs:56:5:56:22 | raw_const_borrow(...) | | {EXTERNAL LOCATION} | () | | raw_pointer.rs:57:5:57:20 | raw_mut_borrow(...) | | {EXTERNAL LOCATION} | () | diff --git a/rust/ql/test/library-tests/variables/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/variables/CONSISTENCY/PathResolutionConsistency.expected deleted file mode 100644 index 6b4022b86e57..000000000000 --- a/rust/ql/test/library-tests/variables/CONSISTENCY/PathResolutionConsistency.expected +++ /dev/null @@ -1,3 +0,0 @@ -multipleCallTargets -| main.rs:91:19:91:40 | ...::from(...) | -| main.rs:113:19:113:40 | ...::from(...) | diff --git a/rust/ql/test/query-tests/diagnostics/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/diagnostics/CONSISTENCY/PathResolutionConsistency.expected deleted file mode 100644 index bb60014263b3..000000000000 --- a/rust/ql/test/query-tests/diagnostics/CONSISTENCY/PathResolutionConsistency.expected +++ /dev/null @@ -1,2 +0,0 @@ -multipleCallTargets -| my_struct.rs:25:19:25:37 | ...::from(...) | diff --git a/rust/ql/test/query-tests/diagnostics/SummaryStatsReduced.expected b/rust/ql/test/query-tests/diagnostics/SummaryStatsReduced.expected index 563e370b4ed3..ed21d9772fce 100644 --- a/rust/ql/test/query-tests/diagnostics/SummaryStatsReduced.expected +++ b/rust/ql/test/query-tests/diagnostics/SummaryStatsReduced.expected @@ -6,7 +6,7 @@ | Files extracted - without errors % | 57 | | Inconsistencies - AST | 0 | | Inconsistencies - CFG | 0 | -| Inconsistencies - Path resolution | 1 | +| Inconsistencies - Path resolution | 0 | | Inconsistencies - SSA | 0 | | Inconsistencies - data flow | 0 | | Lines of code extracted | 60 | diff --git a/rust/ql/test/query-tests/security/CWE-022/TaintedPath.expected b/rust/ql/test/query-tests/security/CWE-022/TaintedPath.expected index df7070c966a7..2e98dadccfb3 100644 --- a/rust/ql/test/query-tests/security/CWE-022/TaintedPath.expected +++ b/rust/ql/test/query-tests/security/CWE-022/TaintedPath.expected @@ -1,7 +1,8 @@ #select | src/main.rs:11:5:11:22 | ...::read_to_string | src/main.rs:7:11:7:19 | file_name | src/main.rs:11:5:11:22 | ...::read_to_string | This path depends on a $@. | src/main.rs:7:11:7:19 | file_name | user-provided value | -| src/main.rs:58:5:58:22 | ...::read_to_string | src/main.rs:50:51:50:59 | file_path | src/main.rs:58:5:58:22 | ...::read_to_string | This path depends on a $@. | src/main.rs:50:51:50:59 | file_path | user-provided value | +| src/main.rs:46:5:46:22 | ...::read_to_string | src/main.rs:38:11:38:19 | file_path | src/main.rs:46:5:46:22 | ...::read_to_string | This path depends on a $@. | src/main.rs:38:11:38:19 | file_path | user-provided value | | src/main.rs:71:5:71:22 | ...::read_to_string | src/main.rs:63:11:63:19 | file_path | src/main.rs:71:5:71:22 | ...::read_to_string | This path depends on a $@. | src/main.rs:63:11:63:19 | file_path | user-provided value | +| src/main.rs:85:5:85:22 | ...::read_to_string | src/main.rs:76:11:76:19 | file_path | src/main.rs:85:5:85:22 | ...::read_to_string | This path depends on a $@. | src/main.rs:76:11:76:19 | file_path | user-provided value | | src/main.rs:99:5:99:22 | ...::read_to_string | src/main.rs:90:11:90:19 | file_path | src/main.rs:99:5:99:22 | ...::read_to_string | This path depends on a $@. | src/main.rs:90:11:90:19 | file_path | user-provided value | | src/main.rs:104:13:104:31 | ...::open | src/main.rs:103:17:103:30 | ...::args | src/main.rs:104:13:104:31 | ...::open | This path depends on a $@. | src/main.rs:103:17:103:30 | ...::args | user-provided value | | src/main.rs:107:13:107:31 | ...::open | src/main.rs:103:17:103:30 | ...::args | src/main.rs:107:13:107:31 | ...::open | This path depends on a $@. | src/main.rs:103:17:103:30 | ...::args | user-provided value | @@ -19,28 +20,36 @@ edges | src/main.rs:9:9:9:17 | file_path | src/main.rs:11:24:11:32 | file_path | provenance | | | src/main.rs:9:21:9:44 | ...::from(...) | src/main.rs:9:9:9:17 | file_path | provenance | | | src/main.rs:9:35:9:43 | file_name | src/main.rs:9:21:9:44 | ...::from(...) | provenance | MaD:9 | -| src/main.rs:9:35:9:43 | file_name | src/main.rs:9:21:9:44 | ...::from(...) | provenance | MaD:14 | +| src/main.rs:9:35:9:43 | file_name | src/main.rs:9:21:9:44 | ...::from(...) | provenance | MaD:15 | | src/main.rs:11:24:11:32 | file_path | src/main.rs:11:5:11:22 | ...::read_to_string | provenance | MaD:6 Sink:MaD:6 | -| src/main.rs:50:51:50:59 | file_path | src/main.rs:52:32:52:40 | file_path | provenance | | -| src/main.rs:52:9:52:17 | file_path [&ref] | src/main.rs:53:21:53:29 | file_path [&ref] | provenance | | -| src/main.rs:52:21:52:41 | ...::new(...) [&ref] | src/main.rs:52:9:52:17 | file_path [&ref] | provenance | | -| src/main.rs:52:31:52:40 | &file_path [&ref] | src/main.rs:52:21:52:41 | ...::new(...) [&ref] | provenance | MaD:13 | -| src/main.rs:52:32:52:40 | file_path | src/main.rs:52:31:52:40 | &file_path [&ref] | provenance | | -| src/main.rs:53:9:53:17 | file_path | src/main.rs:58:24:58:32 | file_path | provenance | | -| src/main.rs:53:21:53:29 | file_path [&ref] | src/main.rs:53:21:53:44 | file_path.canonicalize() [Ok] | provenance | Config | -| src/main.rs:53:21:53:44 | file_path.canonicalize() [Ok] | src/main.rs:53:21:53:53 | ... .unwrap() | provenance | MaD:12 | -| src/main.rs:53:21:53:53 | ... .unwrap() | src/main.rs:53:9:53:17 | file_path | provenance | | -| src/main.rs:58:24:58:32 | file_path | src/main.rs:58:5:58:22 | ...::read_to_string | provenance | MaD:6 Sink:MaD:6 | +| src/main.rs:38:11:38:19 | file_path | src/main.rs:41:52:41:60 | file_path | provenance | | +| src/main.rs:41:9:41:17 | file_path | src/main.rs:46:24:46:32 | file_path | provenance | | +| src/main.rs:41:21:41:62 | public_path.join(...) | src/main.rs:41:9:41:17 | file_path | provenance | | +| src/main.rs:41:38:41:61 | ...::from(...) | src/main.rs:41:21:41:62 | public_path.join(...) | provenance | MaD:13 | +| src/main.rs:41:52:41:60 | file_path | src/main.rs:41:38:41:61 | ...::from(...) | provenance | MaD:9 | +| src/main.rs:41:52:41:60 | file_path | src/main.rs:41:38:41:61 | ...::from(...) | provenance | MaD:15 | +| src/main.rs:46:24:46:32 | file_path | src/main.rs:46:5:46:22 | ...::read_to_string | provenance | MaD:6 Sink:MaD:6 | | src/main.rs:63:11:63:19 | file_path | src/main.rs:66:32:66:40 | file_path | provenance | | | src/main.rs:66:9:66:17 | file_path [&ref] | src/main.rs:71:24:71:32 | file_path [&ref] | provenance | | | src/main.rs:66:21:66:41 | ...::new(...) [&ref] | src/main.rs:66:9:66:17 | file_path [&ref] | provenance | | -| src/main.rs:66:31:66:40 | &file_path [&ref] | src/main.rs:66:21:66:41 | ...::new(...) [&ref] | provenance | MaD:13 | +| src/main.rs:66:31:66:40 | &file_path [&ref] | src/main.rs:66:21:66:41 | ...::new(...) [&ref] | provenance | MaD:14 | | src/main.rs:66:32:66:40 | file_path | src/main.rs:66:31:66:40 | &file_path [&ref] | provenance | | | src/main.rs:71:24:71:32 | file_path [&ref] | src/main.rs:71:5:71:22 | ...::read_to_string | provenance | MaD:6 Sink:MaD:6 | +| src/main.rs:76:11:76:19 | file_path | src/main.rs:79:52:79:60 | file_path | provenance | | +| src/main.rs:79:9:79:17 | file_path | src/main.rs:80:21:80:29 | file_path | provenance | | +| src/main.rs:79:21:79:62 | public_path.join(...) | src/main.rs:79:9:79:17 | file_path | provenance | | +| src/main.rs:79:38:79:61 | ...::from(...) | src/main.rs:79:21:79:62 | public_path.join(...) | provenance | MaD:13 | +| src/main.rs:79:52:79:60 | file_path | src/main.rs:79:38:79:61 | ...::from(...) | provenance | MaD:9 | +| src/main.rs:79:52:79:60 | file_path | src/main.rs:79:38:79:61 | ...::from(...) | provenance | MaD:15 | +| src/main.rs:80:9:80:17 | file_path | src/main.rs:85:24:85:32 | file_path | provenance | | +| src/main.rs:80:21:80:29 | file_path | src/main.rs:80:21:80:44 | file_path.canonicalize() [Ok] | provenance | Config | +| src/main.rs:80:21:80:44 | file_path.canonicalize() [Ok] | src/main.rs:80:21:80:53 | ... .unwrap() | provenance | MaD:12 | +| src/main.rs:80:21:80:53 | ... .unwrap() | src/main.rs:80:9:80:17 | file_path | provenance | | +| src/main.rs:85:24:85:32 | file_path | src/main.rs:85:5:85:22 | ...::read_to_string | provenance | MaD:6 Sink:MaD:6 | | src/main.rs:90:11:90:19 | file_path | src/main.rs:93:32:93:40 | file_path | provenance | | | src/main.rs:93:9:93:17 | file_path [&ref] | src/main.rs:98:21:98:29 | file_path [&ref] | provenance | | | src/main.rs:93:21:93:41 | ...::new(...) [&ref] | src/main.rs:93:9:93:17 | file_path [&ref] | provenance | | -| src/main.rs:93:31:93:40 | &file_path [&ref] | src/main.rs:93:21:93:41 | ...::new(...) [&ref] | provenance | MaD:13 | +| src/main.rs:93:31:93:40 | &file_path [&ref] | src/main.rs:93:21:93:41 | ...::new(...) [&ref] | provenance | MaD:14 | | src/main.rs:93:32:93:40 | file_path | src/main.rs:93:31:93:40 | &file_path [&ref] | provenance | | | src/main.rs:98:9:98:17 | file_path | src/main.rs:99:24:99:32 | file_path | provenance | | | src/main.rs:98:21:98:29 | file_path [&ref] | src/main.rs:98:21:98:44 | file_path.canonicalize() [Ok] | provenance | Config | @@ -82,7 +91,7 @@ edges | src/main.rs:113:39:113:43 | path4 | src/main.rs:113:13:113:37 | ...::open | provenance | MaD:1 Sink:MaD:1 | | src/main.rs:115:9:115:13 | path5 [&ref] | src/main.rs:116:33:116:37 | path5 [&ref] | provenance | | | src/main.rs:115:17:115:44 | ...::new(...) [&ref] | src/main.rs:115:9:115:13 | path5 [&ref] | provenance | | -| src/main.rs:115:38:115:43 | &path1 [&ref] | src/main.rs:115:17:115:44 | ...::new(...) [&ref] | provenance | MaD:13 | +| src/main.rs:115:38:115:43 | &path1 [&ref] | src/main.rs:115:17:115:44 | ...::new(...) [&ref] | provenance | MaD:14 | | src/main.rs:115:39:115:43 | path1 | src/main.rs:115:38:115:43 | &path1 [&ref] | provenance | | | src/main.rs:116:33:116:37 | path5 [&ref] | src/main.rs:116:13:116:31 | ...::open | provenance | MaD:2 Sink:MaD:2 | | src/main.rs:116:33:116:37 | path5 [&ref] | src/main.rs:118:17:118:21 | path5 [&ref] | provenance | | @@ -99,7 +108,7 @@ edges | src/main.rs:170:16:170:29 | ...: ... [&ref] | src/main.rs:174:36:174:43 | path_str [&ref] | provenance | | | src/main.rs:172:9:172:12 | path [&ref] | src/main.rs:173:8:173:11 | path [&ref] | provenance | | | src/main.rs:172:16:172:34 | ...::new(...) [&ref] | src/main.rs:172:9:172:12 | path [&ref] | provenance | | -| src/main.rs:172:26:172:33 | path_str [&ref] | src/main.rs:172:16:172:34 | ...::new(...) [&ref] | provenance | MaD:13 | +| src/main.rs:172:26:172:33 | path_str [&ref] | src/main.rs:172:16:172:34 | ...::new(...) [&ref] | provenance | MaD:14 | | src/main.rs:173:8:173:11 | path [&ref] | src/main.rs:173:13:173:18 | exists | provenance | MaD:3 Sink:MaD:3 | | src/main.rs:173:8:173:11 | path [&ref] | src/main.rs:177:36:177:39 | path [&ref] | provenance | | | src/main.rs:174:36:174:43 | path_str [&ref] | src/main.rs:174:25:174:34 | ...::open | provenance | MaD:2 Sink:MaD:2 | @@ -124,8 +133,9 @@ models | 10 | Summary: <_ as core::iter::traits::iterator::Iterator>::nth; Argument[self].Reference.Element; ReturnValue.Field[core::option::Option::Some(0)]; value | | 11 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | | 12 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 13 | Summary: ::new; Argument[0].Reference; ReturnValue.Reference; value | -| 14 | Summary: ::from; Argument[0]; ReturnValue; taint | +| 13 | Summary: ::join; Argument[0]; ReturnValue; taint | +| 14 | Summary: ::new; Argument[0].Reference; ReturnValue.Reference; value | +| 15 | Summary: ::from; Argument[0]; ReturnValue; taint | nodes | src/main.rs:7:11:7:19 | file_name | semmle.label | file_name | | src/main.rs:9:9:9:17 | file_path | semmle.label | file_path | @@ -133,17 +143,13 @@ nodes | src/main.rs:9:35:9:43 | file_name | semmle.label | file_name | | src/main.rs:11:5:11:22 | ...::read_to_string | semmle.label | ...::read_to_string | | src/main.rs:11:24:11:32 | file_path | semmle.label | file_path | -| src/main.rs:50:51:50:59 | file_path | semmle.label | file_path | -| src/main.rs:52:9:52:17 | file_path [&ref] | semmle.label | file_path [&ref] | -| src/main.rs:52:21:52:41 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] | -| src/main.rs:52:31:52:40 | &file_path [&ref] | semmle.label | &file_path [&ref] | -| src/main.rs:52:32:52:40 | file_path | semmle.label | file_path | -| src/main.rs:53:9:53:17 | file_path | semmle.label | file_path | -| src/main.rs:53:21:53:29 | file_path [&ref] | semmle.label | file_path [&ref] | -| src/main.rs:53:21:53:44 | file_path.canonicalize() [Ok] | semmle.label | file_path.canonicalize() [Ok] | -| src/main.rs:53:21:53:53 | ... .unwrap() | semmle.label | ... .unwrap() | -| src/main.rs:58:5:58:22 | ...::read_to_string | semmle.label | ...::read_to_string | -| src/main.rs:58:24:58:32 | file_path | semmle.label | file_path | +| src/main.rs:38:11:38:19 | file_path | semmle.label | file_path | +| src/main.rs:41:9:41:17 | file_path | semmle.label | file_path | +| src/main.rs:41:21:41:62 | public_path.join(...) | semmle.label | public_path.join(...) | +| src/main.rs:41:38:41:61 | ...::from(...) | semmle.label | ...::from(...) | +| src/main.rs:41:52:41:60 | file_path | semmle.label | file_path | +| src/main.rs:46:5:46:22 | ...::read_to_string | semmle.label | ...::read_to_string | +| src/main.rs:46:24:46:32 | file_path | semmle.label | file_path | | src/main.rs:63:11:63:19 | file_path | semmle.label | file_path | | src/main.rs:66:9:66:17 | file_path [&ref] | semmle.label | file_path [&ref] | | src/main.rs:66:21:66:41 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] | @@ -151,6 +157,17 @@ nodes | src/main.rs:66:32:66:40 | file_path | semmle.label | file_path | | src/main.rs:71:5:71:22 | ...::read_to_string | semmle.label | ...::read_to_string | | src/main.rs:71:24:71:32 | file_path [&ref] | semmle.label | file_path [&ref] | +| src/main.rs:76:11:76:19 | file_path | semmle.label | file_path | +| src/main.rs:79:9:79:17 | file_path | semmle.label | file_path | +| src/main.rs:79:21:79:62 | public_path.join(...) | semmle.label | public_path.join(...) | +| src/main.rs:79:38:79:61 | ...::from(...) | semmle.label | ...::from(...) | +| src/main.rs:79:52:79:60 | file_path | semmle.label | file_path | +| src/main.rs:80:9:80:17 | file_path | semmle.label | file_path | +| src/main.rs:80:21:80:29 | file_path | semmle.label | file_path | +| src/main.rs:80:21:80:44 | file_path.canonicalize() [Ok] | semmle.label | file_path.canonicalize() [Ok] | +| src/main.rs:80:21:80:53 | ... .unwrap() | semmle.label | ... .unwrap() | +| src/main.rs:85:5:85:22 | ...::read_to_string | semmle.label | ...::read_to_string | +| src/main.rs:85:24:85:32 | file_path | semmle.label | file_path | | src/main.rs:90:11:90:19 | file_path | semmle.label | file_path | | src/main.rs:93:9:93:17 | file_path [&ref] | semmle.label | file_path [&ref] | | src/main.rs:93:21:93:41 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] | diff --git a/rust/ql/test/query-tests/security/CWE-022/src/main.rs b/rust/ql/test/query-tests/security/CWE-022/src/main.rs index 7acf036bb6bf..f686fdf1d95b 100644 --- a/rust/ql/test/query-tests/security/CWE-022/src/main.rs +++ b/rust/ql/test/query-tests/security/CWE-022/src/main.rs @@ -30,12 +30,12 @@ fn tainted_path_handler_folder_good(Query(file_path): Query) -> Result, // $ MISSING: Source=remote2 + Query(file_path): Query, // $ Source=remote2 ) -> Result { let public_path = PathBuf::from("/var/www/public_html"); let file_path = public_path.join(PathBuf::from(file_path)); @@ -43,11 +43,11 @@ fn tainted_path_handler_folder_almost_good1( if !file_path.starts_with(public_path) { return Err(Error::from_status(StatusCode::BAD_REQUEST)); } - fs::read_to_string(file_path).map_err(InternalServerError) // $ path-injection-sink MISSING: path-injection-checked Alert[rust/path-injection]=remote2 -- we cannot resolve the `join` call above, because it needs a `PathBuf -> Path` `Deref` + fs::read_to_string(file_path).map_err(InternalServerError) // $ path-injection-sink path-injection-checked Alert[rust/path-injection]=remote2 } //#[handler] -fn tainted_path_handler_folder_good_simpler(Query(file_path): Query) -> Result { // $ Source=remote6 +fn tainted_path_handler_folder_good_simpler(Query(file_path): Query) -> Result { let public_path = "/var/www/public_html"; let file_path = Path::new(&file_path); let file_path = file_path.canonicalize().unwrap(); @@ -55,7 +55,7 @@ fn tainted_path_handler_folder_good_simpler(Query(file_path): Query) -> if !file_path.starts_with(public_path) { return Err(Error::from_status(StatusCode::BAD_REQUEST)); } - fs::read_to_string(file_path).map_err(InternalServerError) // $ path-injection-sink MISSING: path-injection-checked SPURIOUS: Alert[rust/path-injection]=remote6 + fs::read_to_string(file_path).map_err(InternalServerError) // $ path-injection-sink path-injection-checked } //#[handler] @@ -73,7 +73,7 @@ fn tainted_path_handler_folder_almost_good1_simpler( //#[handler] fn tainted_path_handler_folder_almost_good2( - Query(file_path): Query, // $ MISSING: Source=remote4 + Query(file_path): Query, // $ Source=remote4 ) -> Result { let public_path = PathBuf::from("/var/www/public_html"); let file_path = public_path.join(PathBuf::from(file_path)); @@ -82,7 +82,7 @@ fn tainted_path_handler_folder_almost_good2( if file_path.starts_with(public_path) { return Err(Error::from_status(StatusCode::BAD_REQUEST)); } - fs::read_to_string(file_path).map_err(InternalServerError) // $ path-injection-sink MISSING: path-injection-checked Alert[rust/path-injection]=remote4 -- we cannot resolve the `join` call above, because it needs a `PathBuf -> Path` `Deref` + fs::read_to_string(file_path).map_err(InternalServerError) // $ path-injection-sink Alert[rust/path-injection]=remote4 $ MISSING: path-injection-checked } //#[handler] diff --git a/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/PathResolutionConsistency.expected index 34a867e09173..f957ba46e0ff 100644 --- a/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/PathResolutionConsistency.expected @@ -1,30 +1,3 @@ -multipleCallTargets -| mysql.rs:15:24:15:39 | ...::from(...) | -| mysql.rs:16:26:16:85 | ...::from(...) | -| mysql.rs:18:13:18:66 | ...::from(...) | -| mysql.rs:19:30:19:83 | ...::from(...) | -| mysql.rs:100:24:100:39 | ...::from(...) | -| mysql.rs:101:26:101:85 | ...::from(...) | -| mysql.rs:103:13:103:66 | ...::from(...) | -| mysql.rs:104:30:104:83 | ...::from(...) | -| sqlx.rs:46:24:46:44 | ...::from(...) | -| sqlx.rs:47:56:47:76 | ...::from(...) | -| sqlx.rs:48:97:48:117 | ...::from(...) | -| sqlx.rs:50:24:50:83 | ...::from(...) | -| sqlx.rs:51:24:51:77 | ...::from(...) | -| sqlx.rs:55:26:55:79 | ...::from(...) | -| sqlx.rs:61:28:61:81 | ...::from(...) | -| sqlx.rs:99:24:99:44 | ...::from(...) | -| sqlx.rs:100:97:100:117 | ...::from(...) | -| sqlx.rs:101:24:101:77 | ...::from(...) | -| sqlx.rs:102:26:102:79 | ...::from(...) | -| sqlx.rs:103:28:103:81 | ...::from(...) | -| sqlx.rs:172:24:172:44 | ...::from(...) | -| sqlx.rs:173:97:173:117 | ...::from(...) | -| sqlx.rs:174:24:174:77 | ...::from(...) | -| sqlx.rs:175:26:175:79 | ...::from(...) | -| sqlx.rs:176:28:176:82 | ...::from(...) | -| sqlx.rs:202:57:202:85 | ...::from(...) | multiplePathResolutions | mysql.rs:5:37:5:74 | Result::<...> | | mysql.rs:26:20:26:44 | Result::<...> | diff --git a/rust/ql/test/query-tests/security/CWE-117/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-117/CONSISTENCY/PathResolutionConsistency.expected deleted file mode 100644 index c25043e0ef65..000000000000 --- a/rust/ql/test/query-tests/security/CWE-117/CONSISTENCY/PathResolutionConsistency.expected +++ /dev/null @@ -1,2 +0,0 @@ -multipleCallTargets -| main.rs:9:43:9:63 | ...::from(...) | diff --git a/rust/ql/test/query-tests/security/CWE-312/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-312/CONSISTENCY/PathResolutionConsistency.expected index 078bce75133f..580c9cd8202c 100644 --- a/rust/ql/test/query-tests/security/CWE-312/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/query-tests/security/CWE-312/CONSISTENCY/PathResolutionConsistency.expected @@ -1,23 +1,2 @@ -multipleCallTargets -| test_storage.rs:13:10:13:33 | ...::from(...) | -| test_storage.rs:17:10:17:35 | ...::from(...) | -| test_storage.rs:21:10:21:35 | ...::from(...) | -| test_storage.rs:25:10:25:32 | ...::from(...) | -| test_storage.rs:29:10:29:35 | ...::from(...) | +multipleResolvedTargets | test_storage.rs:36:45:36:57 | text.as_ref() | -| test_storage.rs:68:25:68:74 | ...::from(...) | -| test_storage.rs:69:25:69:76 | ...::from(...) | -| test_storage.rs:70:25:70:82 | ...::from(...) | -| test_storage.rs:71:25:71:79 | ...::from(...) | -| test_storage.rs:72:25:72:70 | ...::from(...) | -| test_storage.rs:73:25:73:67 | ...::from(...) | -| test_storage.rs:75:25:75:65 | ...::from(...) | -| test_storage.rs:76:25:76:65 | ...::from(...) | -| test_storage.rs:78:25:78:65 | ...::from(...) | -| test_storage.rs:79:25:79:65 | ...::from(...) | -| test_storage.rs:80:25:80:70 | ...::from(...) | -| test_storage.rs:81:25:81:72 | ...::from(...) | -| test_storage.rs:82:26:82:77 | ...::from(...) | -| test_storage.rs:188:29:188:86 | ...::from(...) | -| test_storage.rs:189:28:189:82 | ...::from(...) | -| test_storage.rs:190:28:190:81 | ...::from(...) | diff --git a/rust/ql/test/query-tests/security/CWE-327/BrokenCryptoAlgorithm/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-327/BrokenCryptoAlgorithm/CONSISTENCY/PathResolutionConsistency.expected index b9925a323cc8..18400b7ab59b 100644 --- a/rust/ql/test/query-tests/security/CWE-327/BrokenCryptoAlgorithm/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/query-tests/security/CWE-327/BrokenCryptoAlgorithm/CONSISTENCY/PathResolutionConsistency.expected @@ -1,2 +1,2 @@ -multipleCallTargets +multipleResolvedTargets | test_cipher.rs:114:23:114:50 | ...::new(...) | diff --git a/rust/ql/test/query-tests/security/CWE-825/AccessAfterLifetime.expected b/rust/ql/test/query-tests/security/CWE-825/AccessAfterLifetime.expected index 5f819dee521b..f768a95011c7 100644 --- a/rust/ql/test/query-tests/security/CWE-825/AccessAfterLifetime.expected +++ b/rust/ql/test/query-tests/security/CWE-825/AccessAfterLifetime.expected @@ -193,10 +193,6 @@ edges | lifetime.rs:798:9:798:12 | &val | lifetime.rs:798:2:798:12 | return ... | provenance | | | lifetime.rs:802:6:802:8 | ptr | lifetime.rs:808:23:808:25 | ptr | provenance | | | lifetime.rs:802:12:802:24 | get_pointer(...) | lifetime.rs:802:6:802:8 | ptr | provenance | | -| lifetime.rs:841:13:841:27 | ...: ... | lifetime.rs:843:12:843:14 | ptr | provenance | | -| lifetime.rs:851:6:851:8 | ptr | lifetime.rs:853:20:853:22 | ptr | provenance | | -| lifetime.rs:851:12:851:23 | &local_value | lifetime.rs:851:6:851:8 | ptr | provenance | | -| lifetime.rs:853:20:853:22 | ptr | lifetime.rs:841:13:841:27 | ...: ... | provenance | | | main.rs:18:9:18:10 | p1 [&ref] | main.rs:21:19:21:20 | p1 | provenance | | | main.rs:18:9:18:10 | p1 [&ref] | main.rs:29:19:29:20 | p1 | provenance | | | main.rs:18:14:18:29 | ...::as_ptr(...) [&ref] | main.rs:18:9:18:10 | p1 [&ref] | provenance | | @@ -412,11 +408,6 @@ nodes | lifetime.rs:802:6:802:8 | ptr | semmle.label | ptr | | lifetime.rs:802:12:802:24 | get_pointer(...) | semmle.label | get_pointer(...) | | lifetime.rs:808:23:808:25 | ptr | semmle.label | ptr | -| lifetime.rs:841:13:841:27 | ...: ... | semmle.label | ...: ... | -| lifetime.rs:843:12:843:14 | ptr | semmle.label | ptr | -| lifetime.rs:851:6:851:8 | ptr | semmle.label | ptr | -| lifetime.rs:851:12:851:23 | &local_value | semmle.label | &local_value | -| lifetime.rs:853:20:853:22 | ptr | semmle.label | ptr | | main.rs:18:9:18:10 | p1 [&ref] | semmle.label | p1 [&ref] | | main.rs:18:14:18:29 | ...::as_ptr(...) [&ref] | semmle.label | ...::as_ptr(...) [&ref] | | main.rs:18:26:18:28 | &b1 | semmle.label | &b1 | diff --git a/rust/ql/test/query-tests/security/CWE-825/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-825/CONSISTENCY/PathResolutionConsistency.expected deleted file mode 100644 index ae227c22e5ae..000000000000 --- a/rust/ql/test/query-tests/security/CWE-825/CONSISTENCY/PathResolutionConsistency.expected +++ /dev/null @@ -1,6 +0,0 @@ -multipleCallTargets -| deallocation.rs:354:11:354:29 | ...::from(...) | -| deallocation.rs:355:11:355:29 | ...::from(...) | -| lifetime.rs:610:13:610:31 | ...::from(...) | -| lifetime.rs:611:13:611:31 | ...::from(...) | -| lifetime.rs:628:13:628:31 | ...::from(...) | diff --git a/rust/ql/test/query-tests/unusedentities/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/unusedentities/CONSISTENCY/PathResolutionConsistency.expected deleted file mode 100644 index 4d2cdee53ce5..000000000000 --- a/rust/ql/test/query-tests/unusedentities/CONSISTENCY/PathResolutionConsistency.expected +++ /dev/null @@ -1,6 +0,0 @@ -multipleCallTargets -| main.rs:14:13:14:29 | ...::from(...) | -| main.rs:15:13:15:29 | ...::from(...) | -| unreachable.rs:165:20:165:42 | ...::from(...) | -| unreachable.rs:171:9:171:15 | ...::from(...) | -| unreachable.rs:177:17:177:25 | ...::from(...) | diff --git a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll index bf107c7d3f55..4d4b8034f19a 100644 --- a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll +++ b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll @@ -1059,9 +1059,10 @@ module Make1 Input1> { pragma[nomagic] private predicate satisfiesConstraintTypeMention1( - HasTypeTree tt, Type constraint, TypePath path, TypePath pathToTypeParamInSub + HasTypeTree tt, TypeAbstraction abs, Type constraint, TypePath path, + TypePath pathToTypeParamInSub ) { - exists(TypeAbstraction abs, TypeMention sub, TypeParameter tp | + exists(TypeMention sub, TypeParameter tp | satisfiesConstraintTypeMention0(tt, constraint, abs, sub, path, tp) and tp = abs.getATypeParameter() and sub.resolveTypeAt(pathToTypeParamInSub) = tp @@ -1073,17 +1074,26 @@ module Make1 Input1> { * with the type `t` at `path`. */ pragma[nomagic] - predicate satisfiesConstraintType(HasTypeTree tt, Type constraint, TypePath path, Type t) { - exists(TypeAbstraction abs | - satisfiesConstraintTypeMention0(tt, constraint, abs, _, path, t) and - not t = abs.getATypeParameter() - ) + predicate satisfiesConstraintType( + HasTypeTree tt, TypeAbstraction abs, Type constraint, TypePath path, Type t + ) { + satisfiesConstraintTypeMention0(tt, constraint, abs, _, path, t) and + not t = abs.getATypeParameter() or exists(TypePath prefix0, TypePath pathToTypeParamInSub, TypePath suffix | - satisfiesConstraintTypeMention1(tt, constraint, prefix0, pathToTypeParamInSub) and + satisfiesConstraintTypeMention1(tt, abs, constraint, prefix0, pathToTypeParamInSub) and tt.getTypeAt(pathToTypeParamInSub.appendInverse(suffix)) = t and path = prefix0.append(suffix) ) + } + + /** + * Holds if the type tree at `tt` satisfies the constraint `constraint` + * with the type `t` at `path`. + */ + pragma[nomagic] + predicate satisfiesConstraintType(HasTypeTree tt, Type constraint, TypePath path, Type t) { + satisfiesConstraintType(tt, _, constraint, path, t) or hasTypeConstraint(tt, constraint, constraint) and t = tt.getTypeAt(path)