mirror of
https://github.com/github/codeql.git
synced 2026-02-11 20:51:06 +01:00
Merge branch 'main' into cpp/mad-barriers
This commit is contained in:
1
.github/workflows/ql-for-ql-build.yml
vendored
1
.github/workflows/ql-for-ql-build.yml
vendored
@@ -27,6 +27,7 @@ jobs:
|
||||
uses: github/codeql-action/init@main
|
||||
with:
|
||||
languages: javascript # does not matter
|
||||
tools: nightly
|
||||
- uses: ./.github/actions/os-version
|
||||
id: os_version
|
||||
### Build the extractor ###
|
||||
|
||||
2
.github/workflows/ql-for-ql-tests.yml
vendored
2
.github/workflows/ql-for-ql-tests.yml
vendored
@@ -30,6 +30,7 @@ jobs:
|
||||
uses: github/codeql-action/init@main
|
||||
with:
|
||||
languages: javascript # does not matter
|
||||
tools: nightly
|
||||
- uses: ./.github/actions/os-version
|
||||
id: os_version
|
||||
- uses: actions/cache@v3
|
||||
@@ -75,6 +76,7 @@ jobs:
|
||||
uses: github/codeql-action/init@main
|
||||
with:
|
||||
languages: javascript # does not matter
|
||||
tools: nightly
|
||||
- uses: ./.github/actions/os-version
|
||||
id: os_version
|
||||
- uses: actions/cache@v3
|
||||
|
||||
@@ -192,6 +192,15 @@ class Element extends ElementBase {
|
||||
*/
|
||||
predicate isAffectedByMacro() { affectedByMacro(this) }
|
||||
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
*
|
||||
* Holds if this element is affected by the expansion of `mi`.
|
||||
*/
|
||||
predicate isAffectedByMacro(MacroInvocation mi) {
|
||||
affectedbymacroexpansion(underlyingElement(this), unresolveElement(mi))
|
||||
}
|
||||
|
||||
private Element getEnclosingElementPref() {
|
||||
enclosingfunction(underlyingElement(this), unresolveElement(result)) or
|
||||
result.(Function) = stmtEnclosingElement(this) or
|
||||
|
||||
@@ -239,6 +239,9 @@ class MacroInvocation extends MacroAccess {
|
||||
macro_argument_unexpanded(underlyingElement(this), i, result)
|
||||
}
|
||||
|
||||
/** Gets the number of arguments for this macro invocation. */
|
||||
int getNumberOfArguments() { result = count(int i | exists(this.getUnexpandedArgument(i)) | i) }
|
||||
|
||||
/**
|
||||
* Gets the `i`th _expanded_ argument of this macro invocation, where the
|
||||
* first argument has `i = 0`. The result has been expanded for macros _and_
|
||||
|
||||
@@ -23,7 +23,7 @@ class Expr extends StmtParent, @expr {
|
||||
predicate hasChild(Expr e, int n) { e = this.getChild(n) }
|
||||
|
||||
/** Gets the enclosing function of this expression, if any. */
|
||||
Function getEnclosingFunction() { result = exprEnclosingElement(this) }
|
||||
override Function getEnclosingFunction() { result = exprEnclosingElement(this) }
|
||||
|
||||
/** Gets the nearest enclosing set of curly braces around this expression in the source, if any. */
|
||||
BlockStmt getEnclosingBlock() { result = this.getEnclosingStmt().getEnclosingBlock() }
|
||||
|
||||
@@ -940,6 +940,16 @@ module SsaCached {
|
||||
SsaImpl::phiHasInputFromBlock(phi, inp, bb)
|
||||
}
|
||||
|
||||
cached
|
||||
predicate uncertainWriteDefinitionInput(Definition uncertain, Definition inp) {
|
||||
SsaImpl::uncertainWriteDefinitionInput(uncertain, inp)
|
||||
}
|
||||
|
||||
cached
|
||||
predicate ssaDefReachesEndOfBlock(IRBlock bb, Definition def) {
|
||||
SsaImpl::ssaDefReachesEndOfBlock(bb, def, _)
|
||||
}
|
||||
|
||||
predicate variableRead = SsaInput::variableRead/4;
|
||||
|
||||
predicate variableWrite = SsaInput::variableWrite/4;
|
||||
@@ -1173,9 +1183,17 @@ class Definition extends SsaImpl::Definition {
|
||||
private Definition getAPhiInputOrPriorDefinition() {
|
||||
result = this.(PhiNode).getAnInput()
|
||||
or
|
||||
SsaImpl::uncertainWriteDefinitionInput(this, result)
|
||||
uncertainWriteDefinitionInput(this, result)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if this SSA definition is live at the end of basic block `bb`.
|
||||
* That is, this definition reaches the end of basic block `bb`, at which
|
||||
* point it is still live, without crossing another SSA definition of the
|
||||
* same source variable.
|
||||
*/
|
||||
predicate isLiveAtEndOfBlock(IRBlock bb) { ssaDefReachesEndOfBlock(bb, this) }
|
||||
|
||||
/**
|
||||
* Gets a definition that ultimately defines this SSA definition and is
|
||||
* not itself a phi node.
|
||||
|
||||
@@ -104,7 +104,11 @@ newtype TInstructionTag =
|
||||
} or
|
||||
SizeofVlaDimensionTag(int index) {
|
||||
exists(VlaDeclStmt v | exists(v.getTransitiveVlaDimensionStmt(index)))
|
||||
}
|
||||
} or
|
||||
AssertionVarAddressTag() or
|
||||
AssertionVarLoadTag() or
|
||||
AssertionOpTag() or
|
||||
AssertionBranchTag()
|
||||
|
||||
class InstructionTag extends TInstructionTag {
|
||||
final string toString() { result = getInstructionTagId(this) }
|
||||
@@ -296,4 +300,12 @@ string getInstructionTagId(TInstructionTag tag) {
|
||||
tag = CoAwaitBranchTag() and result = "CoAwaitBranch"
|
||||
or
|
||||
tag = BoolToIntConversionTag() and result = "BoolToIntConversion"
|
||||
or
|
||||
tag = AssertionVarAddressTag() and result = "AssertionVarAddress"
|
||||
or
|
||||
tag = AssertionVarLoadTag() and result = "AssertionVarLoad"
|
||||
or
|
||||
tag = AssertionOpTag() and result = "AssertionOp"
|
||||
or
|
||||
tag = AssertionBranchTag() and result = "AssertionBranch"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,387 @@
|
||||
private import cpp
|
||||
private import semmle.code.cpp.ir.internal.IRUtilities
|
||||
private import semmle.code.cpp.ir.implementation.internal.OperandTag
|
||||
private import semmle.code.cpp.ir.internal.CppType
|
||||
private import semmle.code.cpp.ir.internal.TempVariableTag
|
||||
private import InstructionTag
|
||||
private import TranslatedElement
|
||||
private import TranslatedStmt
|
||||
private import TranslatedFunction
|
||||
|
||||
/**
|
||||
* Holds if `s` is a statement that may be an expanded assertion in a
|
||||
* release build.
|
||||
*/
|
||||
pragma[nomagic]
|
||||
private predicate stmtCandidate(Stmt s) {
|
||||
not s.isFromUninstantiatedTemplate(_) and
|
||||
(
|
||||
// The expansion of `__analysis_assume(x != 0);` when `__analysis_assume` is
|
||||
// empty is the empty statement.
|
||||
s instanceof EmptyStmt
|
||||
or
|
||||
// The expansion of `assert(x != 0)` when `assert` is `((void)0)` is a zero literal
|
||||
// with a void type.
|
||||
exists(Expr e |
|
||||
e = s.(ExprStmt).getExpr() and
|
||||
e.getValue() = "0" and
|
||||
e.getActualType() instanceof VoidType
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
private predicate macroInvocationLocation(int startline, Function f, MacroInvocation mi) {
|
||||
mi.getMacroName() = ["assert", "__analysis_assume"] and
|
||||
mi.getNumberOfArguments() = 1 and
|
||||
mi.getLocation().hasLocationInfo(_, startline, _, _, _) and
|
||||
f.getEntryPoint().isAffectedByMacro(mi)
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
private predicate stmtParentLocation(int startline, Function f, StmtParent p) {
|
||||
p.getEnclosingFunction() = f and
|
||||
p.getLocation().hasLocationInfo(_, startline, _, _, _)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `mi` is a macro invocation with a name that is known
|
||||
* to correspond to an assertion macro, and the macro invocation
|
||||
* is the only thing on the line.
|
||||
*/
|
||||
pragma[nomagic]
|
||||
private predicate assertion0(MacroInvocation mi, Stmt s, string arg) {
|
||||
stmtCandidate(s) and
|
||||
s =
|
||||
unique(StmtParent p, int startline, Function f |
|
||||
macroInvocationLocation(startline, f, mi) and
|
||||
stmtParentLocation(startline, f, p) and
|
||||
// Also do not count the elements from the expanded macro, i.e., when checking
|
||||
// if `assert(x)` is the only thing on the line we do not count the
|
||||
// generated `((void)0)` expression.
|
||||
not p = mi.getAnExpandedElement()
|
||||
|
|
||||
p
|
||||
) and
|
||||
arg = mi.getUnexpandedArgument(0)
|
||||
}
|
||||
|
||||
private Function getEnclosingFunctionForMacroInvocation(MacroInvocation mi) {
|
||||
exists(Stmt s |
|
||||
assertion0(mi, s, _) and
|
||||
result = s.getEnclosingFunction()
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `arg` has two components and the `i`'th component of the string
|
||||
* `arg` is `s`, and the components are separated by an operation with
|
||||
* opcode `opcode`.
|
||||
*/
|
||||
bindingset[arg]
|
||||
pragma[inline_late]
|
||||
private predicate parseArgument(string arg, string s, int i, Opcode opcode) {
|
||||
s =
|
||||
arg.regexpCapture("([a-zA-Z_][a-zA-Z_0-9]*|[0-9]+)\\s?<=\\s?([a-zA-Z_][a-zA-Z_0-9]*|[0-9]+)",
|
||||
i + 1) and
|
||||
opcode instanceof Opcode::CompareLE
|
||||
or
|
||||
s =
|
||||
arg.regexpCapture("([a-zA-Z_][a-zA-Z_0-9]*|[0-9]+)\\s?>=\\s?([a-zA-Z_][a-zA-Z_0-9]*|[0-9]+)",
|
||||
i + 1) and
|
||||
opcode instanceof Opcode::CompareGE
|
||||
or
|
||||
s =
|
||||
arg.regexpCapture("([a-zA-Z_][a-zA-Z_0-9]*|[0-9]+)\\s?<\\s?([a-zA-Z_][a-zA-Z_0-9]*|[0-9]+)",
|
||||
i + 1) and
|
||||
opcode instanceof Opcode::CompareLT
|
||||
or
|
||||
s =
|
||||
arg.regexpCapture("([a-zA-Z_][a-zA-Z_0-9]*|[0-9]+)\\s?>\\s?([a-zA-Z_][a-zA-Z_0-9]*|[0-9]+)",
|
||||
i + 1) and
|
||||
opcode instanceof Opcode::CompareGT
|
||||
or
|
||||
s =
|
||||
arg.regexpCapture("([a-zA-Z_][a-zA-Z_0-9]*|[0-9]+)\\s?!=\\s?([a-zA-Z_][a-zA-Z_0-9]*|[0-9]+)",
|
||||
i + 1) and
|
||||
opcode instanceof Opcode::CompareNE
|
||||
or
|
||||
s =
|
||||
arg.regexpCapture("([a-zA-Z_][a-zA-Z_0-9]*|[0-9]+)\\s?==\\s?([a-zA-Z_][a-zA-Z_0-9]*|[0-9]+)",
|
||||
i + 1) and
|
||||
opcode instanceof Opcode::CompareEQ
|
||||
}
|
||||
|
||||
private Element getAChildScope(Element scope) { result.getParentScope() = scope }
|
||||
|
||||
private predicate hasAVariable(MacroInvocation mi, Stmt s, Element scope) {
|
||||
assertion0(mi, s, _) and
|
||||
s.getParent() = scope
|
||||
or
|
||||
hasAVariable(mi, s, getAChildScope(scope))
|
||||
}
|
||||
|
||||
private LocalScopeVariable getVariable(MacroInvocation mi, int i) {
|
||||
exists(string operand, string arg, Stmt s |
|
||||
assertion0(mi, s, arg) and
|
||||
parseArgument(arg, operand, i, _) and
|
||||
result =
|
||||
unique(Variable v |
|
||||
v.getLocation().getStartLine() < s.getLocation().getStartLine() and
|
||||
hasAVariable(mi, s, v.getParentScope()) and
|
||||
v.hasName(operand)
|
||||
|
|
||||
v
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if the `i`'th component of the macro invocation `mi` with opcode
|
||||
* `opcode` is a reference to `var`.
|
||||
*/
|
||||
private predicate hasVarAccessMacroArgument(MacroInvocation mi, Variable var, int i, Opcode opcode) {
|
||||
exists(string arg, string s, Function f |
|
||||
arg = mi.getUnexpandedArgument(0) and
|
||||
f = getEnclosingFunctionForMacroInvocation(mi) and
|
||||
parseArgument(arg, s, i, opcode) and
|
||||
var = getVariable(mi, i)
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if the `i`'th component of the macro invocation `mi` with opcode
|
||||
* `opcode` is a constant with the value `k`.
|
||||
*/
|
||||
private predicate hasConstMacroArgument(MacroInvocation mi, int k, int i, Opcode opcode) {
|
||||
exists(string arg, string s |
|
||||
assertion0(mi, _, arg) and
|
||||
s.toInt() = k and
|
||||
parseArgument(arg, s, i, opcode)
|
||||
)
|
||||
}
|
||||
|
||||
predicate hasAssertionOperand(MacroInvocation mi, int i) {
|
||||
hasVarAccessMacroArgument(mi, _, i, _)
|
||||
or
|
||||
hasConstMacroArgument(mi, _, i, _)
|
||||
}
|
||||
|
||||
private predicate hasAssertionOpcode(MacroInvocation mi, Opcode opcode) {
|
||||
hasVarAccessMacroArgument(mi, _, _, opcode)
|
||||
or
|
||||
hasConstMacroArgument(mi, _, _, opcode)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `mi` is a macro invocation that is an assertion that should be generated
|
||||
* in the control-flow graph at `s`.
|
||||
*/
|
||||
predicate assertion(MacroInvocation mi, Stmt s) {
|
||||
assertion0(mi, s, _) and
|
||||
hasAssertionOperand(mi, 0) and
|
||||
hasAssertionOperand(mi, 1)
|
||||
}
|
||||
|
||||
/** The translation of an operand of an assertion. */
|
||||
abstract private class TranslatedAssertionOperand extends TranslatedElement,
|
||||
TTranslatedAssertionOperand
|
||||
{
|
||||
MacroInvocation mi;
|
||||
int index;
|
||||
|
||||
TranslatedAssertionOperand() { this = TTranslatedAssertionOperand(mi, index) }
|
||||
|
||||
MacroInvocation getMacroInvocation() { result = mi }
|
||||
|
||||
/**
|
||||
* Gets the statement that is being replaced by the assertion that uses this
|
||||
* operand.
|
||||
*/
|
||||
Stmt getStmt() { assertion(mi, result) }
|
||||
|
||||
final override Locatable getAst() { result = this.getStmt() }
|
||||
|
||||
final override TranslatedElement getChild(int id) { none() }
|
||||
|
||||
final override Declaration getFunction() { result = this.getStmt().getEnclosingFunction() }
|
||||
|
||||
/** Gets the instruction which holds the result of this operand. */
|
||||
abstract Instruction getResult();
|
||||
|
||||
final override string toString() { result = "Operand of assertion: " + mi }
|
||||
|
||||
/** Gets the index of this operand (i.e., `0` or `1`). */
|
||||
final int getIndex() { result = index }
|
||||
}
|
||||
|
||||
/** An operand of an assertion that is a variable access. */
|
||||
class TranslatedAssertionVarAccess extends TranslatedAssertionOperand {
|
||||
TranslatedAssertionVarAccess() { hasVarAccessMacroArgument(mi, _, index, _) }
|
||||
|
||||
Variable getVariable() { hasVarAccessMacroArgument(mi, result, index, _) }
|
||||
|
||||
final override IRUserVariable getInstructionVariable(InstructionTag tag) {
|
||||
tag = AssertionVarAddressTag() and
|
||||
result.getVariable() = this.getVariable()
|
||||
}
|
||||
|
||||
final override Instruction getFirstInstruction(EdgeKind kind) {
|
||||
result = this.getInstruction(AssertionVarAddressTag()) and kind instanceof GotoEdge
|
||||
}
|
||||
|
||||
final override Instruction getInstructionSuccessorInternal(InstructionTag tag, EdgeKind kind) {
|
||||
tag = AssertionVarAddressTag() and
|
||||
kind instanceof GotoEdge and
|
||||
result = this.getInstruction(AssertionVarLoadTag())
|
||||
or
|
||||
tag = AssertionVarLoadTag() and
|
||||
result = getTranslatedAssertionMacroInvocation(mi).getChildSuccessor(this, kind)
|
||||
}
|
||||
|
||||
final override Instruction getALastInstructionInternal() {
|
||||
result = this.getInstruction(AssertionVarLoadTag())
|
||||
}
|
||||
|
||||
override predicate hasInstruction(Opcode opcode, InstructionTag tag, CppType resultType) {
|
||||
exists(Variable v | v = this.getVariable() |
|
||||
opcode instanceof Opcode::VariableAddress and
|
||||
tag = AssertionVarAddressTag() and
|
||||
resultType = getTypeForGLValue(v.getType())
|
||||
or
|
||||
opcode instanceof Opcode::Load and
|
||||
tag = AssertionVarLoadTag() and
|
||||
resultType = getTypeForPRValue(v.getType())
|
||||
)
|
||||
}
|
||||
|
||||
final override Instruction getInstructionRegisterOperand(InstructionTag tag, OperandTag operandTag) {
|
||||
tag = AssertionVarLoadTag() and
|
||||
operandTag instanceof AddressOperandTag and
|
||||
result = this.getInstruction(AssertionVarAddressTag())
|
||||
}
|
||||
|
||||
final override Instruction getResult() { result = this.getInstruction(AssertionVarLoadTag()) }
|
||||
}
|
||||
|
||||
/** An operand of an assertion that is a constant access. */
|
||||
private class TranslatedAssertionConst extends TranslatedAssertionOperand {
|
||||
TranslatedAssertionConst() { hasConstMacroArgument(mi, _, index, _) }
|
||||
|
||||
int getConst() { hasConstMacroArgument(mi, result, index, _) }
|
||||
|
||||
final override string getInstructionConstantValue(InstructionTag tag) {
|
||||
tag = OnlyInstructionTag() and
|
||||
result = this.getConst().toString()
|
||||
}
|
||||
|
||||
final override Instruction getFirstInstruction(EdgeKind kind) {
|
||||
result = this.getInstruction(OnlyInstructionTag()) and
|
||||
kind instanceof GotoEdge
|
||||
}
|
||||
|
||||
final override Instruction getInstructionSuccessorInternal(InstructionTag tag, EdgeKind kind) {
|
||||
tag = OnlyInstructionTag() and
|
||||
result = getTranslatedAssertionMacroInvocation(mi).getChildSuccessor(this, kind)
|
||||
}
|
||||
|
||||
final override Instruction getALastInstructionInternal() {
|
||||
result = this.getInstruction(OnlyInstructionTag())
|
||||
}
|
||||
|
||||
override predicate hasInstruction(Opcode opcode, InstructionTag tag, CppType resultType) {
|
||||
opcode instanceof Opcode::Constant and
|
||||
tag = OnlyInstructionTag() and
|
||||
resultType = getIntType()
|
||||
}
|
||||
|
||||
final override Instruction getResult() { result = this.getInstruction(OnlyInstructionTag()) }
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the `TranslatedAssertionMacroInvocation` corresponding to the macro
|
||||
* invocation `mi`.
|
||||
*/
|
||||
TranslatedAssertionMacroInvocation getTranslatedAssertionMacroInvocation(MacroInvocation mi) {
|
||||
result.getMacroInvocation() = mi
|
||||
}
|
||||
|
||||
/**
|
||||
* A synthesized assertion which would have otherwise been invisible because the
|
||||
* database represents a release build where assertions are disabled.
|
||||
*/
|
||||
private class TranslatedAssertionMacroInvocation extends TranslatedStmt {
|
||||
MacroInvocation mi;
|
||||
|
||||
TranslatedAssertionMacroInvocation() { assertion(mi, stmt) }
|
||||
|
||||
final override Instruction getFirstInstruction(EdgeKind kind) {
|
||||
result = this.getLeft().getFirstInstruction(kind)
|
||||
}
|
||||
|
||||
TranslatedAssertionOperand getLeft() {
|
||||
result.getMacroInvocation() = mi and
|
||||
result.getIndex() = 0
|
||||
}
|
||||
|
||||
TranslatedAssertionOperand getRight() {
|
||||
result.getMacroInvocation() = mi and
|
||||
result.getIndex() = 1
|
||||
}
|
||||
|
||||
final override Instruction getInstructionSuccessorInternal(InstructionTag tag, EdgeKind kind) {
|
||||
tag = AssertionOpTag() and
|
||||
kind instanceof GotoEdge and
|
||||
result = this.getInstruction(AssertionBranchTag())
|
||||
or
|
||||
tag = AssertionBranchTag() and
|
||||
kind instanceof TrueEdge and
|
||||
result = this.getParent().getChildSuccessor(this, _)
|
||||
}
|
||||
|
||||
final override TranslatedElement getChildInternal(int id) {
|
||||
id = 0 and result = this.getLeft()
|
||||
or
|
||||
id = 1 and result = this.getRight()
|
||||
}
|
||||
|
||||
final override Instruction getALastInstructionInternal() {
|
||||
result = this.getInstruction(AssertionBranchTag())
|
||||
}
|
||||
|
||||
final override predicate hasInstruction(Opcode opcode, InstructionTag tag, CppType resultType) {
|
||||
tag = AssertionOpTag() and
|
||||
resultType = getBoolType() and
|
||||
hasAssertionOpcode(mi, opcode)
|
||||
or
|
||||
tag = AssertionBranchTag() and
|
||||
resultType = getVoidType() and
|
||||
opcode instanceof Opcode::ConditionalBranch
|
||||
}
|
||||
|
||||
final override Instruction getChildSuccessorInternal(TranslatedElement child, EdgeKind kind) {
|
||||
child = this.getLeft() and
|
||||
result = this.getRight().getFirstInstruction(kind)
|
||||
or
|
||||
child = this.getRight() and
|
||||
kind instanceof GotoEdge and
|
||||
result = this.getInstruction(AssertionOpTag())
|
||||
}
|
||||
|
||||
final override Instruction getInstructionRegisterOperand(InstructionTag tag, OperandTag operandTag) {
|
||||
tag = AssertionOpTag() and
|
||||
(
|
||||
operandTag instanceof LeftOperandTag and
|
||||
result = this.getLeft().getResult()
|
||||
or
|
||||
operandTag instanceof RightOperandTag and
|
||||
result = this.getRight().getResult()
|
||||
)
|
||||
or
|
||||
tag = AssertionBranchTag() and
|
||||
operandTag instanceof ConditionOperandTag and
|
||||
result = this.getInstruction(AssertionOpTag())
|
||||
}
|
||||
|
||||
MacroInvocation getMacroInvocation() { result = mi }
|
||||
}
|
||||
@@ -12,6 +12,7 @@ private import TranslatedFunction
|
||||
private import TranslatedStmt
|
||||
private import TranslatedExpr
|
||||
private import IRConstruction
|
||||
private import TranslatedAssertion
|
||||
private import semmle.code.cpp.models.interfaces.SideEffect
|
||||
private import SideEffects
|
||||
|
||||
@@ -138,6 +139,14 @@ private predicate ignoreExprAndDescendants(Expr expr) {
|
||||
// conditionally constructed (until we have a mechanism for calling these only when the
|
||||
// temporary's constructor was run)
|
||||
isConditionalTemporaryDestructorCall(expr)
|
||||
or
|
||||
// An assertion in a release build is often defined as `#define assert(x) ((void)0)`.
|
||||
// We generate a synthetic assertion in release builds, and when we do that the
|
||||
// expression `((void)0)` should not be translated.
|
||||
exists(MacroInvocation mi |
|
||||
assertion(mi, _) and
|
||||
expr = mi.getExpr().getFullyConverted()
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -909,7 +918,8 @@ newtype TTranslatedElement =
|
||||
} or
|
||||
// The side effect that initializes newly-allocated memory.
|
||||
TTranslatedAllocationSideEffect(AllocationExpr expr) { not ignoreSideEffects(expr) } or
|
||||
TTranslatedStaticStorageDurationVarInit(Variable var) { Raw::varHasIRFunc(var) }
|
||||
TTranslatedStaticStorageDurationVarInit(Variable var) { Raw::varHasIRFunc(var) } or
|
||||
TTranslatedAssertionOperand(MacroInvocation mi, int index) { hasAssertionOperand(mi, index) }
|
||||
|
||||
/**
|
||||
* Gets the index of the first explicitly initialized element in `initList`
|
||||
|
||||
@@ -10,6 +10,7 @@ private import TranslatedElement
|
||||
private import TranslatedExpr
|
||||
private import TranslatedFunction
|
||||
private import TranslatedInitialization
|
||||
private import TranslatedAssertion
|
||||
|
||||
TranslatedStmt getTranslatedStmt(Stmt stmt) { result.getAst() = stmt }
|
||||
|
||||
@@ -324,8 +325,16 @@ abstract class TranslatedStmt extends TranslatedElement, TTranslatedStmt {
|
||||
|
||||
class TranslatedEmptyStmt extends TranslatedStmt {
|
||||
TranslatedEmptyStmt() {
|
||||
stmt instanceof EmptyStmt or
|
||||
stmt instanceof LabelStmt or
|
||||
// An assertion macro invocation can expand to
|
||||
// an empty statement in release builds. In that case
|
||||
// we synthesize the check that would have occurred.
|
||||
// This is handled by `TranslatedAssertion.qll` and so
|
||||
// we exclude these statements here.
|
||||
not assertion(_, stmt) and
|
||||
stmt instanceof EmptyStmt
|
||||
or
|
||||
stmt instanceof LabelStmt
|
||||
or
|
||||
stmt instanceof SwitchCase
|
||||
}
|
||||
|
||||
@@ -420,6 +429,15 @@ class TranslatedDeclStmt extends TranslatedStmt {
|
||||
class TranslatedExprStmt extends TranslatedStmt {
|
||||
override ExprStmt stmt;
|
||||
|
||||
TranslatedExprStmt() {
|
||||
// An assertion macro invocation typically expand to the
|
||||
// expression `((void)0)` in release builds. In that case
|
||||
// we synthesize the check that would have occurred.
|
||||
// This is handled by `TranslatedAssertion.qll` and so
|
||||
// we exclude these statements here.
|
||||
not assertion(_, stmt)
|
||||
}
|
||||
|
||||
TranslatedExpr getExpr() { result = getTranslatedExpr(stmt.getExpr().getFullyConverted()) }
|
||||
|
||||
override TranslatedElement getChildInternal(int id) { id = 0 and result = this.getExpr() }
|
||||
|
||||
@@ -20,7 +20,7 @@ class Stmt extends StmtParent, @stmt {
|
||||
predicate hasChild(Element e, int n) { this.getChild(n) = e }
|
||||
|
||||
/** Gets the enclosing function of this statement, if any. */
|
||||
Function getEnclosingFunction() { result = stmtEnclosingElement(this) }
|
||||
override Function getEnclosingFunction() { result = stmtEnclosingElement(this) }
|
||||
|
||||
/**
|
||||
* Gets the nearest enclosing block of this statement in the source, if any.
|
||||
@@ -159,7 +159,10 @@ private class TStmtParent = @stmt or @expr;
|
||||
*
|
||||
* This is normally a statement, but may be a `StmtExpr`.
|
||||
*/
|
||||
class StmtParent extends ControlFlowNode, TStmtParent { }
|
||||
class StmtParent extends ControlFlowNode, TStmtParent {
|
||||
/** Gets the enclosing function of this element, if any. */
|
||||
Function getEnclosingFunction() { none() }
|
||||
}
|
||||
|
||||
/**
|
||||
* A C/C++ 'expression' statement.
|
||||
|
||||
@@ -46,16 +46,14 @@ module SqlTaintedConfig implements DataFlow::ConfigSig {
|
||||
predicate isBarrier(DataFlow::Node node) {
|
||||
node.asExpr().getUnspecifiedType() instanceof IntegralType
|
||||
or
|
||||
// barrier defined using models-as-data
|
||||
barrierNode(node, "sql-injection")
|
||||
}
|
||||
|
||||
predicate isBarrierIn(DataFlow::Node node) {
|
||||
exists(SqlBarrierFunction sql, int arg, FunctionInput input |
|
||||
node.asIndirectArgument() = sql.getACallToThisFunction().getArgument(arg) and
|
||||
input.isParameterDeref(arg) and
|
||||
sql.barrierSqlArgument(input, _)
|
||||
)
|
||||
or
|
||||
// barrier defined using models-as-data
|
||||
barrierNode(node, "sql-injection")
|
||||
}
|
||||
|
||||
predicate observeDiffInformedIncrementalMode() { any() }
|
||||
|
||||
@@ -25131,6 +25131,517 @@ ir.cpp:
|
||||
# 2823| Type = [ArrayType] int[]
|
||||
# 2823| ValueCategory = lvalue
|
||||
# 2824| getStmt(5): [ReturnStmt] return ...
|
||||
# 2830| [TopLevelFunction] void test_assert_simple(int, int, unsigned int, int)
|
||||
# 2830| <params>:
|
||||
# 2830| getParameter(0): [Parameter] x
|
||||
# 2830| Type = [IntType] int
|
||||
# 2830| getParameter(1): [Parameter] y
|
||||
# 2830| Type = [IntType] int
|
||||
# 2830| getParameter(2): [Parameter] u
|
||||
# 2830| Type = [IntType] unsigned int
|
||||
# 2830| getParameter(3): [Parameter] shadowed
|
||||
# 2830| Type = [IntType] int
|
||||
# 2830| getEntryPoint(): [BlockStmt] { ... }
|
||||
# 2831| getStmt(0): [ExprStmt] ExprStmt
|
||||
# 2831| getExpr(): [Literal] 0
|
||||
# 2831| Type = [IntType] int
|
||||
# 2831| Value = [Literal] 0
|
||||
# 2831| ValueCategory = prvalue
|
||||
# 2831| getExpr().getFullyConverted(): [ParenthesisExpr] (...)
|
||||
# 2831| Type = [VoidType] void
|
||||
# 2831| ValueCategory = prvalue
|
||||
# 2831| getExpr(): [CStyleCast] (void)...
|
||||
# 2831| Conversion = [VoidConversion] conversion to void
|
||||
# 2831| Type = [VoidType] void
|
||||
# 2831| ValueCategory = prvalue
|
||||
# 2832| getStmt(1): [ExprStmt] ExprStmt
|
||||
# 2832| getExpr(): [Literal] 0
|
||||
# 2832| Type = [IntType] int
|
||||
# 2832| Value = [Literal] 0
|
||||
# 2832| ValueCategory = prvalue
|
||||
# 2832| getExpr().getFullyConverted(): [ParenthesisExpr] (...)
|
||||
# 2832| Type = [VoidType] void
|
||||
# 2832| ValueCategory = prvalue
|
||||
# 2832| getExpr(): [CStyleCast] (void)...
|
||||
# 2832| Conversion = [VoidConversion] conversion to void
|
||||
# 2832| Type = [VoidType] void
|
||||
# 2832| ValueCategory = prvalue
|
||||
# 2833| getStmt(2): [ExprStmt] ExprStmt
|
||||
# 2833| getExpr(): [Literal] 0
|
||||
# 2833| Type = [IntType] int
|
||||
# 2833| Value = [Literal] 0
|
||||
# 2833| ValueCategory = prvalue
|
||||
# 2833| getExpr().getFullyConverted(): [ParenthesisExpr] (...)
|
||||
# 2833| Type = [VoidType] void
|
||||
# 2833| ValueCategory = prvalue
|
||||
# 2833| getExpr(): [CStyleCast] (void)...
|
||||
# 2833| Conversion = [VoidConversion] conversion to void
|
||||
# 2833| Type = [VoidType] void
|
||||
# 2833| ValueCategory = prvalue
|
||||
# 2835| getStmt(3): [EmptyStmt] ;
|
||||
# 2837| getStmt(4): [ExprStmt] ExprStmt
|
||||
# 2837| getExpr(): [Literal] 0
|
||||
# 2837| Type = [IntType] int
|
||||
# 2837| Value = [Literal] 0
|
||||
# 2837| ValueCategory = prvalue
|
||||
# 2837| getExpr().getFullyConverted(): [ParenthesisExpr] (...)
|
||||
# 2837| Type = [VoidType] void
|
||||
# 2837| ValueCategory = prvalue
|
||||
# 2837| getExpr(): [CStyleCast] (void)...
|
||||
# 2837| Conversion = [VoidConversion] conversion to void
|
||||
# 2837| Type = [VoidType] void
|
||||
# 2837| ValueCategory = prvalue
|
||||
# 2839| getStmt(5): [BlockStmt] { ... }
|
||||
# 2840| getStmt(0): [DeclStmt] declaration
|
||||
# 2840| getDeclarationEntry(0): [VariableDeclarationEntry] definition of shadowed
|
||||
# 2840| Type = [IntType] int
|
||||
# 2840| getVariable().getInitializer(): [Initializer] initializer for shadowed
|
||||
# 2840| getExpr(): [VariableAccess] x
|
||||
# 2840| Type = [IntType] int
|
||||
# 2840| ValueCategory = prvalue(load)
|
||||
# 2841| getStmt(1): [ExprStmt] ExprStmt
|
||||
# 2841| getExpr(): [Literal] 0
|
||||
# 2841| Type = [IntType] int
|
||||
# 2841| Value = [Literal] 0
|
||||
# 2841| ValueCategory = prvalue
|
||||
# 2841| getExpr().getFullyConverted(): [ParenthesisExpr] (...)
|
||||
# 2841| Type = [VoidType] void
|
||||
# 2841| ValueCategory = prvalue
|
||||
# 2841| getExpr(): [CStyleCast] (void)...
|
||||
# 2841| Conversion = [VoidConversion] conversion to void
|
||||
# 2841| Type = [VoidType] void
|
||||
# 2841| ValueCategory = prvalue
|
||||
# 2843| getStmt(6): [ReturnStmt] return ...
|
||||
# 2846| [TemplateFunction,TopLevelFunction] void test_assert_in_template<T>(T, int, unsigned int)
|
||||
# 2846| <params>:
|
||||
# 2846| getParameter(0): [Parameter] x
|
||||
# 2846| Type = [TypeTemplateParameter] T
|
||||
# 2846| getParameter(1): [Parameter] y
|
||||
# 2846| Type = [IntType] int
|
||||
# 2846| getParameter(2): [Parameter] u
|
||||
# 2846| Type = [IntType] unsigned int
|
||||
# 2846| getEntryPoint(): [BlockStmt] { ... }
|
||||
# 2847| getStmt(0): [ExprStmt] ExprStmt
|
||||
# 2847| getExpr(): [Literal] 0
|
||||
# 2847| Type = [IntType] int
|
||||
# 2847| Value = [Literal] 0
|
||||
# 2847| ValueCategory = prvalue
|
||||
# 2847| getExpr().getFullyConverted(): [ParenthesisExpr] (...)
|
||||
# 2847| Type = [VoidType] void
|
||||
# 2847| ValueCategory = prvalue
|
||||
# 2847| getExpr(): [CStyleCast] (void)...
|
||||
# 2847| Conversion = [VoidConversion] conversion to void
|
||||
# 2847| Type = [VoidType] void
|
||||
# 2847| ValueCategory = prvalue
|
||||
# 2848| getStmt(1): [ExprStmt] ExprStmt
|
||||
# 2848| getExpr(): [Literal] 0
|
||||
# 2848| Type = [IntType] int
|
||||
# 2848| Value = [Literal] 0
|
||||
# 2848| ValueCategory = prvalue
|
||||
# 2848| getExpr().getFullyConverted(): [ParenthesisExpr] (...)
|
||||
# 2848| Type = [VoidType] void
|
||||
# 2848| ValueCategory = prvalue
|
||||
# 2848| getExpr(): [CStyleCast] (void)...
|
||||
# 2848| Conversion = [VoidConversion] conversion to void
|
||||
# 2848| Type = [VoidType] void
|
||||
# 2848| ValueCategory = prvalue
|
||||
# 2849| getStmt(2): [ExprStmt] ExprStmt
|
||||
# 2849| getExpr(): [Literal] 0
|
||||
# 2849| Type = [IntType] int
|
||||
# 2849| Value = [Literal] 0
|
||||
# 2849| ValueCategory = prvalue
|
||||
# 2849| getExpr().getFullyConverted(): [ParenthesisExpr] (...)
|
||||
# 2849| Type = [VoidType] void
|
||||
# 2849| ValueCategory = prvalue
|
||||
# 2849| getExpr(): [CStyleCast] (void)...
|
||||
# 2849| Conversion = [VoidConversion] conversion to void
|
||||
# 2849| Type = [VoidType] void
|
||||
# 2849| ValueCategory = prvalue
|
||||
# 2851| getStmt(3): [EmptyStmt] ;
|
||||
# 2853| getStmt(4): [ExprStmt] ExprStmt
|
||||
# 2853| getExpr(): [Literal] 0
|
||||
# 2853| Type = [IntType] int
|
||||
# 2853| Value = [Literal] 0
|
||||
# 2853| ValueCategory = prvalue
|
||||
# 2853| getExpr().getFullyConverted(): [ParenthesisExpr] (...)
|
||||
# 2853| Type = [VoidType] void
|
||||
# 2853| ValueCategory = prvalue
|
||||
# 2853| getExpr(): [CStyleCast] (void)...
|
||||
# 2853| Conversion = [VoidConversion] conversion to void
|
||||
# 2853| Type = [VoidType] void
|
||||
# 2853| ValueCategory = prvalue
|
||||
# 2855| getStmt(5): [BlockStmt] { ... }
|
||||
# 2856| getStmt(0): [DeclStmt] declaration
|
||||
# 2856| getDeclarationEntry(0): [VariableDeclarationEntry] definition of shadowed
|
||||
# 2856| Type = [IntType] int
|
||||
# 2856| getVariable().getInitializer(): [Initializer] initializer for shadowed
|
||||
# 2856| getExpr(): [VariableAccess] x
|
||||
# 2856| Type = [TypeTemplateParameter] T
|
||||
# 2856| ValueCategory = lvalue
|
||||
# 2856| getExpr().getFullyConverted(): [CStyleCast] (int)...
|
||||
# 2856| Type = [IntType] int
|
||||
# 2856| ValueCategory = prvalue
|
||||
# 2857| getStmt(1): [ExprStmt] ExprStmt
|
||||
# 2857| getExpr(): [Literal] 0
|
||||
# 2857| Type = [IntType] int
|
||||
# 2857| Value = [Literal] 0
|
||||
# 2857| ValueCategory = prvalue
|
||||
# 2857| getExpr().getFullyConverted(): [ParenthesisExpr] (...)
|
||||
# 2857| Type = [VoidType] void
|
||||
# 2857| ValueCategory = prvalue
|
||||
# 2857| getExpr(): [CStyleCast] (void)...
|
||||
# 2857| Conversion = [VoidConversion] conversion to void
|
||||
# 2857| Type = [VoidType] void
|
||||
# 2857| ValueCategory = prvalue
|
||||
# 2859| getStmt(6): [ExprStmt] ExprStmt
|
||||
# 2859| getExpr(): [Literal] 0
|
||||
# 2859| Type = [IntType] int
|
||||
# 2859| Value = [Literal] 0
|
||||
# 2859| ValueCategory = prvalue
|
||||
# 2859| getExpr().getFullyConverted(): [ParenthesisExpr] (...)
|
||||
# 2859| Type = [VoidType] void
|
||||
# 2859| ValueCategory = prvalue
|
||||
# 2859| getExpr(): [CStyleCast] (void)...
|
||||
# 2859| Conversion = [VoidConversion] conversion to void
|
||||
# 2859| Type = [VoidType] void
|
||||
# 2859| ValueCategory = prvalue
|
||||
# 2860| getStmt(7): [ReturnStmt] return ...
|
||||
# 2846| [FunctionTemplateInstantiation,TopLevelFunction] void test_assert_in_template<int>(int, int, unsigned int)
|
||||
# 2846| <params>:
|
||||
# 2846| getParameter(0): [Parameter] x
|
||||
# 2846| Type = [IntType] int
|
||||
# 2846| getParameter(1): [Parameter] y
|
||||
# 2846| Type = [IntType] int
|
||||
# 2846| getParameter(2): [Parameter] u
|
||||
# 2846| Type = [IntType] unsigned int
|
||||
# 2846| getEntryPoint(): [BlockStmt] { ... }
|
||||
# 2847| getStmt(0): [ExprStmt] ExprStmt
|
||||
# 2847| getExpr(): [Literal] 0
|
||||
# 2847| Type = [IntType] int
|
||||
# 2847| Value = [Literal] 0
|
||||
# 2847| ValueCategory = prvalue
|
||||
# 2847| getExpr().getFullyConverted(): [ParenthesisExpr] (...)
|
||||
# 2847| Type = [VoidType] void
|
||||
# 2847| ValueCategory = prvalue
|
||||
# 2847| getExpr(): [CStyleCast] (void)...
|
||||
# 2847| Conversion = [VoidConversion] conversion to void
|
||||
# 2847| Type = [VoidType] void
|
||||
# 2847| ValueCategory = prvalue
|
||||
# 2848| getStmt(1): [ExprStmt] ExprStmt
|
||||
# 2848| getExpr(): [Literal] 0
|
||||
# 2848| Type = [IntType] int
|
||||
# 2848| Value = [Literal] 0
|
||||
# 2848| ValueCategory = prvalue
|
||||
# 2848| getExpr().getFullyConverted(): [ParenthesisExpr] (...)
|
||||
# 2848| Type = [VoidType] void
|
||||
# 2848| ValueCategory = prvalue
|
||||
# 2848| getExpr(): [CStyleCast] (void)...
|
||||
# 2848| Conversion = [VoidConversion] conversion to void
|
||||
# 2848| Type = [VoidType] void
|
||||
# 2848| ValueCategory = prvalue
|
||||
# 2849| getStmt(2): [ExprStmt] ExprStmt
|
||||
# 2849| getExpr(): [Literal] 0
|
||||
# 2849| Type = [IntType] int
|
||||
# 2849| Value = [Literal] 0
|
||||
# 2849| ValueCategory = prvalue
|
||||
# 2849| getExpr().getFullyConverted(): [ParenthesisExpr] (...)
|
||||
# 2849| Type = [VoidType] void
|
||||
# 2849| ValueCategory = prvalue
|
||||
# 2849| getExpr(): [CStyleCast] (void)...
|
||||
# 2849| Conversion = [VoidConversion] conversion to void
|
||||
# 2849| Type = [VoidType] void
|
||||
# 2849| ValueCategory = prvalue
|
||||
# 2851| getStmt(3): [EmptyStmt] ;
|
||||
# 2853| getStmt(4): [ExprStmt] ExprStmt
|
||||
# 2853| getExpr(): [Literal] 0
|
||||
# 2853| Type = [IntType] int
|
||||
# 2853| Value = [Literal] 0
|
||||
# 2853| ValueCategory = prvalue
|
||||
# 2853| getExpr().getFullyConverted(): [ParenthesisExpr] (...)
|
||||
# 2853| Type = [VoidType] void
|
||||
# 2853| ValueCategory = prvalue
|
||||
# 2853| getExpr(): [CStyleCast] (void)...
|
||||
# 2853| Conversion = [VoidConversion] conversion to void
|
||||
# 2853| Type = [VoidType] void
|
||||
# 2853| ValueCategory = prvalue
|
||||
# 2855| getStmt(5): [BlockStmt] { ... }
|
||||
# 2856| getStmt(0): [DeclStmt] declaration
|
||||
# 2856| getDeclarationEntry(0): [VariableDeclarationEntry] definition of shadowed
|
||||
# 2856| Type = [IntType] int
|
||||
# 2856| getVariable().getInitializer(): [Initializer] initializer for shadowed
|
||||
# 2856| getExpr(): [VariableAccess] x
|
||||
# 2856| Type = [IntType] int
|
||||
# 2856| ValueCategory = prvalue(load)
|
||||
# 2857| getStmt(1): [ExprStmt] ExprStmt
|
||||
# 2857| getExpr(): [Literal] 0
|
||||
# 2857| Type = [IntType] int
|
||||
# 2857| Value = [Literal] 0
|
||||
# 2857| ValueCategory = prvalue
|
||||
# 2857| getExpr().getFullyConverted(): [ParenthesisExpr] (...)
|
||||
# 2857| Type = [VoidType] void
|
||||
# 2857| ValueCategory = prvalue
|
||||
# 2857| getExpr(): [CStyleCast] (void)...
|
||||
# 2857| Conversion = [VoidConversion] conversion to void
|
||||
# 2857| Type = [VoidType] void
|
||||
# 2857| ValueCategory = prvalue
|
||||
# 2859| getStmt(6): [ExprStmt] ExprStmt
|
||||
# 2859| getExpr(): [Literal] 0
|
||||
# 2859| Type = [IntType] int
|
||||
# 2859| Value = [Literal] 0
|
||||
# 2859| ValueCategory = prvalue
|
||||
# 2859| getExpr().getFullyConverted(): [ParenthesisExpr] (...)
|
||||
# 2859| Type = [VoidType] void
|
||||
# 2859| ValueCategory = prvalue
|
||||
# 2859| getExpr(): [CStyleCast] (void)...
|
||||
# 2859| Conversion = [VoidConversion] conversion to void
|
||||
# 2859| Type = [VoidType] void
|
||||
# 2859| ValueCategory = prvalue
|
||||
# 2860| getStmt(7): [ReturnStmt] return ...
|
||||
# 2846| [FunctionTemplateInstantiation,TopLevelFunction] void test_assert_in_template<short>(short, int, unsigned int)
|
||||
# 2846| <params>:
|
||||
# 2846| getParameter(0): [Parameter] x
|
||||
# 2846| Type = [ShortType] short
|
||||
# 2846| getParameter(1): [Parameter] y
|
||||
# 2846| Type = [IntType] int
|
||||
# 2846| getParameter(2): [Parameter] u
|
||||
# 2846| Type = [IntType] unsigned int
|
||||
# 2846| getEntryPoint(): [BlockStmt] { ... }
|
||||
# 2847| getStmt(0): [ExprStmt] ExprStmt
|
||||
# 2847| getExpr(): [Literal] 0
|
||||
# 2847| Type = [IntType] int
|
||||
# 2847| Value = [Literal] 0
|
||||
# 2847| ValueCategory = prvalue
|
||||
# 2847| getExpr().getFullyConverted(): [ParenthesisExpr] (...)
|
||||
# 2847| Type = [VoidType] void
|
||||
# 2847| ValueCategory = prvalue
|
||||
# 2847| getExpr(): [CStyleCast] (void)...
|
||||
# 2847| Conversion = [VoidConversion] conversion to void
|
||||
# 2847| Type = [VoidType] void
|
||||
# 2847| ValueCategory = prvalue
|
||||
# 2848| getStmt(1): [ExprStmt] ExprStmt
|
||||
# 2848| getExpr(): [Literal] 0
|
||||
# 2848| Type = [IntType] int
|
||||
# 2848| Value = [Literal] 0
|
||||
# 2848| ValueCategory = prvalue
|
||||
# 2848| getExpr().getFullyConverted(): [ParenthesisExpr] (...)
|
||||
# 2848| Type = [VoidType] void
|
||||
# 2848| ValueCategory = prvalue
|
||||
# 2848| getExpr(): [CStyleCast] (void)...
|
||||
# 2848| Conversion = [VoidConversion] conversion to void
|
||||
# 2848| Type = [VoidType] void
|
||||
# 2848| ValueCategory = prvalue
|
||||
# 2849| getStmt(2): [ExprStmt] ExprStmt
|
||||
# 2849| getExpr(): [Literal] 0
|
||||
# 2849| Type = [IntType] int
|
||||
# 2849| Value = [Literal] 0
|
||||
# 2849| ValueCategory = prvalue
|
||||
# 2849| getExpr().getFullyConverted(): [ParenthesisExpr] (...)
|
||||
# 2849| Type = [VoidType] void
|
||||
# 2849| ValueCategory = prvalue
|
||||
# 2849| getExpr(): [CStyleCast] (void)...
|
||||
# 2849| Conversion = [VoidConversion] conversion to void
|
||||
# 2849| Type = [VoidType] void
|
||||
# 2849| ValueCategory = prvalue
|
||||
# 2851| getStmt(3): [EmptyStmt] ;
|
||||
# 2853| getStmt(4): [ExprStmt] ExprStmt
|
||||
# 2853| getExpr(): [Literal] 0
|
||||
# 2853| Type = [IntType] int
|
||||
# 2853| Value = [Literal] 0
|
||||
# 2853| ValueCategory = prvalue
|
||||
# 2853| getExpr().getFullyConverted(): [ParenthesisExpr] (...)
|
||||
# 2853| Type = [VoidType] void
|
||||
# 2853| ValueCategory = prvalue
|
||||
# 2853| getExpr(): [CStyleCast] (void)...
|
||||
# 2853| Conversion = [VoidConversion] conversion to void
|
||||
# 2853| Type = [VoidType] void
|
||||
# 2853| ValueCategory = prvalue
|
||||
# 2855| getStmt(5): [BlockStmt] { ... }
|
||||
# 2856| getStmt(0): [DeclStmt] declaration
|
||||
# 2856| getDeclarationEntry(0): [VariableDeclarationEntry] definition of shadowed
|
||||
# 2856| Type = [IntType] int
|
||||
# 2856| getVariable().getInitializer(): [Initializer] initializer for shadowed
|
||||
# 2856| getExpr(): [VariableAccess] x
|
||||
# 2856| Type = [ShortType] short
|
||||
# 2856| ValueCategory = prvalue(load)
|
||||
# 2856| getExpr().getFullyConverted(): [CStyleCast] (int)...
|
||||
# 2856| Conversion = [IntegralConversion] integral conversion
|
||||
# 2856| Type = [IntType] int
|
||||
# 2856| ValueCategory = prvalue
|
||||
# 2857| getStmt(1): [ExprStmt] ExprStmt
|
||||
# 2857| getExpr(): [Literal] 0
|
||||
# 2857| Type = [IntType] int
|
||||
# 2857| Value = [Literal] 0
|
||||
# 2857| ValueCategory = prvalue
|
||||
# 2857| getExpr().getFullyConverted(): [ParenthesisExpr] (...)
|
||||
# 2857| Type = [VoidType] void
|
||||
# 2857| ValueCategory = prvalue
|
||||
# 2857| getExpr(): [CStyleCast] (void)...
|
||||
# 2857| Conversion = [VoidConversion] conversion to void
|
||||
# 2857| Type = [VoidType] void
|
||||
# 2857| ValueCategory = prvalue
|
||||
# 2859| getStmt(6): [ExprStmt] ExprStmt
|
||||
# 2859| getExpr(): [Literal] 0
|
||||
# 2859| Type = [IntType] int
|
||||
# 2859| Value = [Literal] 0
|
||||
# 2859| ValueCategory = prvalue
|
||||
# 2859| getExpr().getFullyConverted(): [ParenthesisExpr] (...)
|
||||
# 2859| Type = [VoidType] void
|
||||
# 2859| ValueCategory = prvalue
|
||||
# 2859| getExpr(): [CStyleCast] (void)...
|
||||
# 2859| Conversion = [VoidConversion] conversion to void
|
||||
# 2859| Type = [VoidType] void
|
||||
# 2859| ValueCategory = prvalue
|
||||
# 2860| getStmt(7): [ReturnStmt] return ...
|
||||
# 2867| [TopLevelFunction] void (unnamed namespace)::complex_assertions(int, bool, int)
|
||||
# 2867| <params>:
|
||||
# 2867| getParameter(0): [Parameter] x
|
||||
# 2867| Type = [IntType] int
|
||||
# 2867| getParameter(1): [Parameter] b
|
||||
# 2867| Type = [BoolType] bool
|
||||
# 2867| getParameter(2): [Parameter] max
|
||||
# 2867| Type = [IntType] int
|
||||
# 2867| getEntryPoint(): [BlockStmt] { ... }
|
||||
# 2868| getStmt(0): [DeclStmt] declaration
|
||||
# 2868| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y
|
||||
# 2868| Type = [IntType] int
|
||||
# 2868| getVariable().getInitializer(): [Initializer] initializer for y
|
||||
# 2868| getExpr(): [CommaExpr] ... , ...
|
||||
# 2868| Type = [IntType] int
|
||||
# 2868| ValueCategory = prvalue(load)
|
||||
# 2868| getLeftOperand(): [Literal] 0
|
||||
# 2868| Type = [IntType] int
|
||||
# 2868| Value = [Literal] 0
|
||||
# 2868| ValueCategory = prvalue
|
||||
# 2868| getRightOperand(): [VariableAccess] x
|
||||
# 2868| Type = [IntType] int
|
||||
# 2868| ValueCategory = prvalue(load)
|
||||
# 2868| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...)
|
||||
# 2868| Type = [VoidType] void
|
||||
# 2868| ValueCategory = prvalue
|
||||
# 2868| getExpr(): [CStyleCast] (void)...
|
||||
# 2868| Conversion = [VoidConversion] conversion to void
|
||||
# 2868| Type = [VoidType] void
|
||||
# 2868| ValueCategory = prvalue
|
||||
# 2868| getExpr().getFullyConverted(): [ParenthesisExpr] (...)
|
||||
# 2868| Type = [IntType] int
|
||||
# 2868| ValueCategory = prvalue(load)
|
||||
# 2869| getStmt(1): [DeclStmt] declaration
|
||||
# 2869| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z
|
||||
# 2869| Type = [IntType] int
|
||||
# 2869| getVariable().getInitializer(): [Initializer] initializer for z
|
||||
# 2869| getExpr(): [ConditionalExpr] ... ? ... : ...
|
||||
# 2869| Type = [IntType] int
|
||||
# 2869| ValueCategory = prvalue
|
||||
# 2869| getCondition(): [VariableAccess] b
|
||||
# 2869| Type = [BoolType] bool
|
||||
# 2869| ValueCategory = prvalue(load)
|
||||
# 2869| getThen(): [CommaExpr] ... , ...
|
||||
# 2869| Type = [IntType] int
|
||||
# 2869| Value = [CommaExpr] 0
|
||||
# 2869| ValueCategory = prvalue
|
||||
# 2869| getLeftOperand(): [Literal] 0
|
||||
# 2869| Type = [IntType] int
|
||||
# 2869| Value = [Literal] 0
|
||||
# 2869| ValueCategory = prvalue
|
||||
# 2869| getRightOperand(): [Literal] 0
|
||||
# 2869| Type = [IntType] int
|
||||
# 2869| Value = [Literal] 0
|
||||
# 2869| ValueCategory = prvalue
|
||||
# 2869| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...)
|
||||
# 2869| Type = [VoidType] void
|
||||
# 2869| ValueCategory = prvalue
|
||||
# 2869| getExpr(): [CStyleCast] (void)...
|
||||
# 2869| Conversion = [VoidConversion] conversion to void
|
||||
# 2869| Type = [VoidType] void
|
||||
# 2869| ValueCategory = prvalue
|
||||
# 2869| getElse(): [Literal] 1
|
||||
# 2869| Type = [IntType] int
|
||||
# 2869| Value = [Literal] 1
|
||||
# 2869| ValueCategory = prvalue
|
||||
# 2869| getThen().getFullyConverted(): [ParenthesisExpr] (...)
|
||||
# 2869| Type = [IntType] int
|
||||
# 2869| Value = [ParenthesisExpr] 0
|
||||
# 2869| ValueCategory = prvalue
|
||||
# 2871| getStmt(2): [TryStmt] try { ... }
|
||||
# 2871| getStmt(): [BlockStmt] { ... }
|
||||
# 2872| getStmt(0): [ExprStmt] ExprStmt
|
||||
# 2872| getExpr(): [ThrowExpr] throw ...
|
||||
# 2872| Type = [IntType] int
|
||||
# 2872| ValueCategory = prvalue
|
||||
# 2872| getExpr(): [Literal] 41
|
||||
# 2872| Type = [IntType] int
|
||||
# 2872| Value = [Literal] 41
|
||||
# 2872| ValueCategory = prvalue
|
||||
# 2873| getChild(1): [Handler] <handler>
|
||||
# 2873| getParameter(): [Parameter] c
|
||||
# 2873| Type = [IntType] int
|
||||
# 2873| getBlock(): [CatchBlock] { ... }
|
||||
# 2874| getStmt(0): [ExprStmt] ExprStmt
|
||||
# 2874| getExpr(): [Literal] 0
|
||||
# 2874| Type = [IntType] int
|
||||
# 2874| Value = [Literal] 0
|
||||
# 2874| ValueCategory = prvalue
|
||||
# 2874| getExpr().getFullyConverted(): [ParenthesisExpr] (...)
|
||||
# 2874| Type = [VoidType] void
|
||||
# 2874| ValueCategory = prvalue
|
||||
# 2874| getExpr(): [CStyleCast] (void)...
|
||||
# 2874| Conversion = [VoidConversion] conversion to void
|
||||
# 2874| Type = [VoidType] void
|
||||
# 2874| ValueCategory = prvalue
|
||||
# 2875| getStmt(1): [ExprStmt] ExprStmt
|
||||
# 2875| getExpr(): [Literal] 0
|
||||
# 2875| Type = [IntType] int
|
||||
# 2875| Value = [Literal] 0
|
||||
# 2875| ValueCategory = prvalue
|
||||
# 2875| getExpr().getFullyConverted(): [ParenthesisExpr] (...)
|
||||
# 2875| Type = [VoidType] void
|
||||
# 2875| ValueCategory = prvalue
|
||||
# 2875| getExpr(): [CStyleCast] (void)...
|
||||
# 2875| Conversion = [VoidConversion] conversion to void
|
||||
# 2875| Type = [VoidType] void
|
||||
# 2875| ValueCategory = prvalue
|
||||
# 2878| getStmt(3): [ExprStmt] ExprStmt
|
||||
# 2878| getExpr(): [Literal] 0
|
||||
# 2878| Type = [IntType] int
|
||||
# 2878| Value = [Literal] 0
|
||||
# 2878| ValueCategory = prvalue
|
||||
# 2878| getExpr().getFullyConverted(): [ParenthesisExpr] (...)
|
||||
# 2878| Type = [VoidType] void
|
||||
# 2878| ValueCategory = prvalue
|
||||
# 2878| getExpr(): [CStyleCast] (void)...
|
||||
# 2878| Conversion = [VoidConversion] conversion to void
|
||||
# 2878| Type = [VoidType] void
|
||||
# 2878| ValueCategory = prvalue
|
||||
# 2879| getStmt(4): [DeclStmt] declaration
|
||||
# 2879| getDeclarationEntry(0): [VariableDeclarationEntry] definition of shadowed
|
||||
# 2879| Type = [IntType] int
|
||||
# 2881| getStmt(5): [TryStmt] try { ... }
|
||||
# 2881| getStmt(): [BlockStmt] { ... }
|
||||
# 2882| getStmt(0): [ExprStmt] ExprStmt
|
||||
# 2882| getExpr(): [ThrowExpr] throw ...
|
||||
# 2882| Type = [IntType] int
|
||||
# 2882| ValueCategory = prvalue
|
||||
# 2882| getExpr(): [Literal] 41
|
||||
# 2882| Type = [IntType] int
|
||||
# 2882| Value = [Literal] 41
|
||||
# 2882| ValueCategory = prvalue
|
||||
# 2883| getChild(1): [Handler] <handler>
|
||||
# 2883| getParameter(): [Parameter] shadowed
|
||||
# 2883| Type = [IntType] int
|
||||
# 2883| getBlock(): [CatchBlock] { ... }
|
||||
# 2884| getStmt(0): [ExprStmt] ExprStmt
|
||||
# 2884| getExpr(): [Literal] 0
|
||||
# 2884| Type = [IntType] int
|
||||
# 2884| Value = [Literal] 0
|
||||
# 2884| ValueCategory = prvalue
|
||||
# 2884| getExpr().getFullyConverted(): [ParenthesisExpr] (...)
|
||||
# 2884| Type = [VoidType] void
|
||||
# 2884| ValueCategory = prvalue
|
||||
# 2884| getExpr(): [CStyleCast] (void)...
|
||||
# 2884| Conversion = [VoidConversion] conversion to void
|
||||
# 2884| Type = [VoidType] void
|
||||
# 2884| ValueCategory = prvalue
|
||||
# 2886| getStmt(6): [ReturnStmt] return ...
|
||||
ir23.cpp:
|
||||
# 1| [TopLevelFunction] bool consteval_1()
|
||||
# 1| <params>:
|
||||
|
||||
@@ -20741,6 +20741,331 @@ ir.cpp:
|
||||
# 2821| v2821_10(void) = AliasedUse : m2821_3
|
||||
# 2821| v2821_11(void) = ExitFunction :
|
||||
|
||||
# 2830| void test_assert_simple(int, int, unsigned int, int)
|
||||
# 2830| Block 0
|
||||
# 2830| v2830_1(void) = EnterFunction :
|
||||
# 2830| m2830_2(unknown) = AliasedDefinition :
|
||||
# 2830| m2830_3(unknown) = InitializeNonLocal :
|
||||
# 2830| m2830_4(unknown) = Chi : total:m2830_2, partial:m2830_3
|
||||
# 2830| r2830_5(glval<int>) = VariableAddress[x] :
|
||||
# 2830| m2830_6(int) = InitializeParameter[x] : &:r2830_5
|
||||
# 2830| r2830_7(glval<int>) = VariableAddress[y] :
|
||||
# 2830| m2830_8(int) = InitializeParameter[y] : &:r2830_7
|
||||
# 2830| r2830_9(glval<unsigned int>) = VariableAddress[u] :
|
||||
# 2830| m2830_10(unsigned int) = InitializeParameter[u] : &:r2830_9
|
||||
# 2830| r2830_11(glval<int>) = VariableAddress[shadowed] :
|
||||
# 2830| m2830_12(int) = InitializeParameter[shadowed] : &:r2830_11
|
||||
# 2831| r2831_1(glval<int>) = VariableAddress[x] :
|
||||
# 2831| r2831_2(int) = Load[x] : &:r2831_1, m2830_6
|
||||
# 2831| r2831_3(int) = Constant[0] :
|
||||
# 2831| r2831_4(bool) = CompareGT : r2831_2, r2831_3
|
||||
# 2831| v2831_5(void) = ConditionalBranch : r2831_4
|
||||
#-----| True -> Block 1
|
||||
|
||||
# 2832| Block 1
|
||||
# 2832| r2832_1(int) = Constant[0] :
|
||||
# 2832| r2832_2(glval<int>) = VariableAddress[x] :
|
||||
# 2832| r2832_3(int) = Load[x] : &:r2832_2, m2830_6
|
||||
# 2832| r2832_4(bool) = CompareLT : r2832_1, r2832_3
|
||||
# 2832| v2832_5(void) = ConditionalBranch : r2832_4
|
||||
#-----| True -> Block 2
|
||||
|
||||
# 2833| Block 2
|
||||
# 2833| r2833_1(glval<int>) = VariableAddress[x] :
|
||||
# 2833| r2833_2(int) = Load[x] : &:r2833_1, m2830_6
|
||||
# 2833| r2833_3(glval<int>) = VariableAddress[y] :
|
||||
# 2833| r2833_4(int) = Load[y] : &:r2833_3, m2830_8
|
||||
# 2833| r2833_5(bool) = CompareLT : r2833_2, r2833_4
|
||||
# 2833| v2833_6(void) = ConditionalBranch : r2833_5
|
||||
#-----| True -> Block 3
|
||||
|
||||
# 2835| Block 3
|
||||
# 2835| r2835_1(glval<int>) = VariableAddress[x] :
|
||||
# 2835| r2835_2(int) = Load[x] : &:r2835_1, m2830_6
|
||||
# 2835| r2835_3(int) = Constant[2] :
|
||||
# 2835| r2835_4(bool) = CompareNE : r2835_2, r2835_3
|
||||
# 2835| v2835_5(void) = ConditionalBranch : r2835_4
|
||||
#-----| True -> Block 4
|
||||
|
||||
# 2837| Block 4
|
||||
# 2837| r2837_1(glval<unsigned int>) = VariableAddress[u] :
|
||||
# 2837| r2837_2(unsigned int) = Load[u] : &:r2837_1, m2830_10
|
||||
# 2837| r2837_3(glval<int>) = VariableAddress[x] :
|
||||
# 2837| r2837_4(int) = Load[x] : &:r2837_3, m2830_6
|
||||
# 2837| r2837_5(bool) = CompareLT : r2837_2, r2837_4
|
||||
# 2837| v2837_6(void) = ConditionalBranch : r2837_5
|
||||
#-----| True -> Block 5
|
||||
|
||||
# 2840| Block 5
|
||||
# 2840| r2840_1(glval<int>) = VariableAddress[shadowed] :
|
||||
# 2840| r2840_2(glval<int>) = VariableAddress[x] :
|
||||
# 2840| r2840_3(int) = Load[x] : &:r2840_2, m2830_6
|
||||
# 2840| m2840_4(int) = Store[shadowed] : &:r2840_1, r2840_3
|
||||
# 2841| r2841_1(int) = Constant[0] :
|
||||
# 2841| v2841_2(void) = Convert : r2841_1
|
||||
# 2843| v2843_1(void) = NoOp :
|
||||
# 2830| v2830_13(void) = ReturnVoid :
|
||||
# 2830| v2830_14(void) = AliasedUse : m2830_3
|
||||
# 2830| v2830_15(void) = ExitFunction :
|
||||
|
||||
# 2846| void test_assert_in_template<int>(int, int, unsigned int)
|
||||
# 2846| Block 0
|
||||
# 2846| v2846_1(void) = EnterFunction :
|
||||
# 2846| m2846_2(unknown) = AliasedDefinition :
|
||||
# 2846| m2846_3(unknown) = InitializeNonLocal :
|
||||
# 2846| m2846_4(unknown) = Chi : total:m2846_2, partial:m2846_3
|
||||
# 2846| r2846_5(glval<int>) = VariableAddress[x] :
|
||||
# 2846| m2846_6(int) = InitializeParameter[x] : &:r2846_5
|
||||
# 2846| r2846_7(glval<int>) = VariableAddress[y] :
|
||||
# 2846| m2846_8(int) = InitializeParameter[y] : &:r2846_7
|
||||
# 2846| r2846_9(glval<unsigned int>) = VariableAddress[u] :
|
||||
# 2846| m2846_10(unsigned int) = InitializeParameter[u] : &:r2846_9
|
||||
# 2847| r2847_1(glval<int>) = VariableAddress[x] :
|
||||
# 2847| r2847_2(int) = Load[x] : &:r2847_1, m2846_6
|
||||
# 2847| r2847_3(int) = Constant[0] :
|
||||
# 2847| r2847_4(bool) = CompareGT : r2847_2, r2847_3
|
||||
# 2847| v2847_5(void) = ConditionalBranch : r2847_4
|
||||
#-----| True -> Block 1
|
||||
|
||||
# 2848| Block 1
|
||||
# 2848| r2848_1(int) = Constant[0] :
|
||||
# 2848| r2848_2(glval<int>) = VariableAddress[x] :
|
||||
# 2848| r2848_3(int) = Load[x] : &:r2848_2, m2846_6
|
||||
# 2848| r2848_4(bool) = CompareLT : r2848_1, r2848_3
|
||||
# 2848| v2848_5(void) = ConditionalBranch : r2848_4
|
||||
#-----| True -> Block 2
|
||||
|
||||
# 2849| Block 2
|
||||
# 2849| r2849_1(glval<int>) = VariableAddress[x] :
|
||||
# 2849| r2849_2(int) = Load[x] : &:r2849_1, m2846_6
|
||||
# 2849| r2849_3(glval<int>) = VariableAddress[y] :
|
||||
# 2849| r2849_4(int) = Load[y] : &:r2849_3, m2846_8
|
||||
# 2849| r2849_5(bool) = CompareLT : r2849_2, r2849_4
|
||||
# 2849| v2849_6(void) = ConditionalBranch : r2849_5
|
||||
#-----| True -> Block 3
|
||||
|
||||
# 2851| Block 3
|
||||
# 2851| r2851_1(glval<int>) = VariableAddress[x] :
|
||||
# 2851| r2851_2(int) = Load[x] : &:r2851_1, m2846_6
|
||||
# 2851| r2851_3(int) = Constant[2] :
|
||||
# 2851| r2851_4(bool) = CompareNE : r2851_2, r2851_3
|
||||
# 2851| v2851_5(void) = ConditionalBranch : r2851_4
|
||||
#-----| True -> Block 4
|
||||
|
||||
# 2853| Block 4
|
||||
# 2853| r2853_1(glval<unsigned int>) = VariableAddress[u] :
|
||||
# 2853| r2853_2(unsigned int) = Load[u] : &:r2853_1, m2846_10
|
||||
# 2853| r2853_3(glval<int>) = VariableAddress[x] :
|
||||
# 2853| r2853_4(int) = Load[x] : &:r2853_3, m2846_6
|
||||
# 2853| r2853_5(bool) = CompareLT : r2853_2, r2853_4
|
||||
# 2853| v2853_6(void) = ConditionalBranch : r2853_5
|
||||
#-----| True -> Block 5
|
||||
|
||||
# 2856| Block 5
|
||||
# 2856| r2856_1(glval<int>) = VariableAddress[shadowed] :
|
||||
# 2856| r2856_2(glval<int>) = VariableAddress[x] :
|
||||
# 2856| r2856_3(int) = Load[x] : &:r2856_2, m2846_6
|
||||
# 2856| m2856_4(int) = Store[shadowed] : &:r2856_1, r2856_3
|
||||
# 2857| r2857_1(glval<int>) = VariableAddress[shadowed] :
|
||||
# 2857| r2857_2(int) = Load[shadowed] : &:r2857_1, m2856_4
|
||||
# 2857| r2857_3(int) = Constant[0] :
|
||||
# 2857| r2857_4(bool) = CompareGT : r2857_2, r2857_3
|
||||
# 2857| v2857_5(void) = ConditionalBranch : r2857_4
|
||||
#-----| True -> Block 6
|
||||
|
||||
# 2859| Block 6
|
||||
# 2859| r2859_1(glval<int>) = VariableAddress[x] :
|
||||
# 2859| r2859_2(int) = Load[x] : &:r2859_1, m2846_6
|
||||
# 2859| r2859_3(int) = Constant[0] :
|
||||
# 2859| r2859_4(bool) = CompareGT : r2859_2, r2859_3
|
||||
# 2859| v2859_5(void) = ConditionalBranch : r2859_4
|
||||
#-----| True -> Block 7
|
||||
|
||||
# 2860| Block 7
|
||||
# 2860| v2860_1(void) = NoOp :
|
||||
# 2846| v2846_11(void) = ReturnVoid :
|
||||
# 2846| v2846_12(void) = AliasedUse : m2846_3
|
||||
# 2846| v2846_13(void) = ExitFunction :
|
||||
|
||||
# 2846| void test_assert_in_template<short>(short, int, unsigned int)
|
||||
# 2846| Block 0
|
||||
# 2846| v2846_1(void) = EnterFunction :
|
||||
# 2846| m2846_2(unknown) = AliasedDefinition :
|
||||
# 2846| m2846_3(unknown) = InitializeNonLocal :
|
||||
# 2846| m2846_4(unknown) = Chi : total:m2846_2, partial:m2846_3
|
||||
# 2846| r2846_5(glval<short>) = VariableAddress[x] :
|
||||
# 2846| m2846_6(short) = InitializeParameter[x] : &:r2846_5
|
||||
# 2846| r2846_7(glval<int>) = VariableAddress[y] :
|
||||
# 2846| m2846_8(int) = InitializeParameter[y] : &:r2846_7
|
||||
# 2846| r2846_9(glval<unsigned int>) = VariableAddress[u] :
|
||||
# 2846| m2846_10(unsigned int) = InitializeParameter[u] : &:r2846_9
|
||||
# 2847| r2847_1(glval<short>) = VariableAddress[x] :
|
||||
# 2847| r2847_2(short) = Load[x] : &:r2847_1, m2846_6
|
||||
# 2847| r2847_3(int) = Constant[0] :
|
||||
# 2847| r2847_4(bool) = CompareGT : r2847_2, r2847_3
|
||||
# 2847| v2847_5(void) = ConditionalBranch : r2847_4
|
||||
#-----| True -> Block 1
|
||||
|
||||
# 2848| Block 1
|
||||
# 2848| r2848_1(int) = Constant[0] :
|
||||
# 2848| r2848_2(glval<short>) = VariableAddress[x] :
|
||||
# 2848| r2848_3(short) = Load[x] : &:r2848_2, m2846_6
|
||||
# 2848| r2848_4(bool) = CompareLT : r2848_1, r2848_3
|
||||
# 2848| v2848_5(void) = ConditionalBranch : r2848_4
|
||||
#-----| True -> Block 2
|
||||
|
||||
# 2849| Block 2
|
||||
# 2849| r2849_1(glval<short>) = VariableAddress[x] :
|
||||
# 2849| r2849_2(short) = Load[x] : &:r2849_1, m2846_6
|
||||
# 2849| r2849_3(glval<int>) = VariableAddress[y] :
|
||||
# 2849| r2849_4(int) = Load[y] : &:r2849_3, m2846_8
|
||||
# 2849| r2849_5(bool) = CompareLT : r2849_2, r2849_4
|
||||
# 2849| v2849_6(void) = ConditionalBranch : r2849_5
|
||||
#-----| True -> Block 3
|
||||
|
||||
# 2851| Block 3
|
||||
# 2851| r2851_1(glval<short>) = VariableAddress[x] :
|
||||
# 2851| r2851_2(short) = Load[x] : &:r2851_1, m2846_6
|
||||
# 2851| r2851_3(int) = Constant[2] :
|
||||
# 2851| r2851_4(bool) = CompareNE : r2851_2, r2851_3
|
||||
# 2851| v2851_5(void) = ConditionalBranch : r2851_4
|
||||
#-----| True -> Block 4
|
||||
|
||||
# 2853| Block 4
|
||||
# 2853| r2853_1(glval<unsigned int>) = VariableAddress[u] :
|
||||
# 2853| r2853_2(unsigned int) = Load[u] : &:r2853_1, m2846_10
|
||||
# 2853| r2853_3(glval<short>) = VariableAddress[x] :
|
||||
# 2853| r2853_4(short) = Load[x] : &:r2853_3, m2846_6
|
||||
# 2853| r2853_5(bool) = CompareLT : r2853_2, r2853_4
|
||||
# 2853| v2853_6(void) = ConditionalBranch : r2853_5
|
||||
#-----| True -> Block 5
|
||||
|
||||
# 2856| Block 5
|
||||
# 2856| r2856_1(glval<int>) = VariableAddress[shadowed] :
|
||||
# 2856| r2856_2(glval<short>) = VariableAddress[x] :
|
||||
# 2856| r2856_3(short) = Load[x] : &:r2856_2, m2846_6
|
||||
# 2856| r2856_4(int) = Convert : r2856_3
|
||||
# 2856| m2856_5(int) = Store[shadowed] : &:r2856_1, r2856_4
|
||||
# 2857| r2857_1(glval<int>) = VariableAddress[shadowed] :
|
||||
# 2857| r2857_2(int) = Load[shadowed] : &:r2857_1, m2856_5
|
||||
# 2857| r2857_3(int) = Constant[0] :
|
||||
# 2857| r2857_4(bool) = CompareGT : r2857_2, r2857_3
|
||||
# 2857| v2857_5(void) = ConditionalBranch : r2857_4
|
||||
#-----| True -> Block 6
|
||||
|
||||
# 2859| Block 6
|
||||
# 2859| r2859_1(glval<short>) = VariableAddress[x] :
|
||||
# 2859| r2859_2(short) = Load[x] : &:r2859_1, m2846_6
|
||||
# 2859| r2859_3(int) = Constant[0] :
|
||||
# 2859| r2859_4(bool) = CompareGT : r2859_2, r2859_3
|
||||
# 2859| v2859_5(void) = ConditionalBranch : r2859_4
|
||||
#-----| True -> Block 7
|
||||
|
||||
# 2860| Block 7
|
||||
# 2860| v2860_1(void) = NoOp :
|
||||
# 2846| v2846_11(void) = ReturnVoid :
|
||||
# 2846| v2846_12(void) = AliasedUse : m2846_3
|
||||
# 2846| v2846_13(void) = ExitFunction :
|
||||
|
||||
# 2867| void (unnamed namespace)::complex_assertions(int, bool, int)
|
||||
# 2867| Block 0
|
||||
# 2867| v2867_1(void) = EnterFunction :
|
||||
# 2867| m2867_2(unknown) = AliasedDefinition :
|
||||
# 2867| m2867_3(unknown) = InitializeNonLocal :
|
||||
# 2867| m2867_4(unknown) = Chi : total:m2867_2, partial:m2867_3
|
||||
# 2867| r2867_5(glval<int>) = VariableAddress[x] :
|
||||
# 2867| m2867_6(int) = InitializeParameter[x] : &:r2867_5
|
||||
# 2867| r2867_7(glval<bool>) = VariableAddress[b] :
|
||||
# 2867| m2867_8(bool) = InitializeParameter[b] : &:r2867_7
|
||||
# 2867| r2867_9(glval<int>) = VariableAddress[max] :
|
||||
# 2867| m2867_10(int) = InitializeParameter[max] : &:r2867_9
|
||||
# 2868| r2868_1(glval<int>) = VariableAddress[y] :
|
||||
# 2868| r2868_2(int) = Constant[0] :
|
||||
# 2868| v2868_3(void) = Convert : r2868_2
|
||||
# 2868| r2868_4(glval<int>) = VariableAddress[x] :
|
||||
# 2868| r2868_5(int) = Load[x] : &:r2868_4, m2867_6
|
||||
# 2868| r2868_6(int) = CopyValue : r2868_5
|
||||
# 2868| m2868_7(int) = Store[y] : &:r2868_1, r2868_6
|
||||
# 2869| r2869_1(glval<int>) = VariableAddress[z] :
|
||||
# 2869| r2869_2(glval<bool>) = VariableAddress[b] :
|
||||
# 2869| r2869_3(bool) = Load[b] : &:r2869_2, m2867_8
|
||||
# 2869| v2869_4(void) = ConditionalBranch : r2869_3
|
||||
#-----| False -> Block 5
|
||||
#-----| True -> Block 4
|
||||
|
||||
# 2867| Block 1
|
||||
# 2867| v2867_11(void) = AliasedUse : m2867_3
|
||||
# 2867| v2867_12(void) = ExitFunction :
|
||||
|
||||
# 2867| Block 2
|
||||
# 2867| v2867_13(void) = Unwind :
|
||||
#-----| Goto -> Block 1
|
||||
|
||||
# 2869| Block 3
|
||||
# 2869| m2869_5(int) = Phi : from 4:m2869_11, from 5:m2869_14
|
||||
# 2869| r2869_6(glval<int>) = VariableAddress[#temp2869:17] :
|
||||
# 2869| r2869_7(int) = Load[#temp2869:17] : &:r2869_6, m2869_5
|
||||
# 2869| m2869_8(int) = Store[z] : &:r2869_1, r2869_7
|
||||
# 2872| r2872_1(glval<int>) = VariableAddress[#throw2872:13] :
|
||||
# 2872| r2872_2(int) = Constant[41] :
|
||||
# 2872| m2872_3(int) = Store[#throw2872:13] : &:r2872_1, r2872_2
|
||||
# 2872| v2872_4(void) = ThrowValue : &:r2872_1, m2872_3
|
||||
#-----| C++ Exception -> Block 6
|
||||
|
||||
# 2869| Block 4
|
||||
# 2869| r2869_9(int) = Constant[0] :
|
||||
# 2869| r2869_10(glval<int>) = VariableAddress[#temp2869:17] :
|
||||
# 2869| m2869_11(int) = Store[#temp2869:17] : &:r2869_10, r2869_9
|
||||
#-----| Goto -> Block 3
|
||||
|
||||
# 2869| Block 5
|
||||
# 2869| r2869_12(int) = Constant[1] :
|
||||
# 2869| r2869_13(glval<int>) = VariableAddress[#temp2869:17] :
|
||||
# 2869| m2869_14(int) = Store[#temp2869:17] : &:r2869_13, r2869_12
|
||||
#-----| Goto -> Block 3
|
||||
|
||||
# 2873| Block 6
|
||||
# 2873| v2873_1(void) = CatchByType[int] :
|
||||
#-----| C++ Exception -> Block 2
|
||||
#-----| Goto -> Block 7
|
||||
|
||||
# 2873| Block 7
|
||||
# 2873| r2873_2(glval<int>) = VariableAddress[c] :
|
||||
# 2873| m2873_3(int) = InitializeParameter[c] : &:r2873_2
|
||||
# 2874| r2874_1(glval<int>) = VariableAddress[c] :
|
||||
# 2874| r2874_2(int) = Load[c] : &:r2874_1, m2873_3
|
||||
# 2874| r2874_3(int) = Constant[42] :
|
||||
# 2874| r2874_4(bool) = CompareLT : r2874_2, r2874_3
|
||||
# 2874| v2874_5(void) = ConditionalBranch : r2874_4
|
||||
#-----| True -> Block 8
|
||||
|
||||
# 2875| Block 8
|
||||
# 2875| r2875_1(int) = Constant[0] :
|
||||
# 2875| v2875_2(void) = Convert : r2875_1
|
||||
# 2878| r2878_1(int) = Constant[0] :
|
||||
# 2878| v2878_2(void) = Convert : r2878_1
|
||||
# 2879| r2879_1(glval<int>) = VariableAddress[shadowed] :
|
||||
# 2879| m2879_2(int) = Uninitialized[shadowed] : &:r2879_1
|
||||
# 2882| r2882_1(glval<int>) = VariableAddress[#throw2882:13] :
|
||||
# 2882| r2882_2(int) = Constant[41] :
|
||||
# 2882| m2882_3(int) = Store[#throw2882:13] : &:r2882_1, r2882_2
|
||||
# 2882| v2882_4(void) = ThrowValue : &:r2882_1, m2882_3
|
||||
#-----| C++ Exception -> Block 9
|
||||
|
||||
# 2883| Block 9
|
||||
# 2883| v2883_1(void) = CatchByType[int] :
|
||||
#-----| C++ Exception -> Block 2
|
||||
#-----| Goto -> Block 10
|
||||
|
||||
# 2883| Block 10
|
||||
# 2883| r2883_2(glval<int>) = VariableAddress[shadowed] :
|
||||
# 2883| m2883_3(int) = InitializeParameter[shadowed] : &:r2883_2
|
||||
# 2884| r2884_1(int) = Constant[0] :
|
||||
# 2884| v2884_2(void) = Convert : r2884_1
|
||||
# 2886| v2886_1(void) = NoOp :
|
||||
# 2867| v2867_14(void) = ReturnVoid :
|
||||
#-----| Goto -> Block 1
|
||||
|
||||
ir23.cpp:
|
||||
# 1| bool consteval_1()
|
||||
# 1| Block 0
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
import cpp
|
||||
import semmle.code.cpp.ir.IR
|
||||
import semmle.code.cpp.ir.implementation.raw.internal.TranslatedAssertion
|
||||
import utils.test.InlineExpectationsTest
|
||||
|
||||
module Test implements TestSig {
|
||||
string getARelevantTag() { result = "var" }
|
||||
|
||||
predicate hasActualResult(Location location, string element, string tag, string value) {
|
||||
exists(TranslatedAssertionVarAccess tava, Variable v |
|
||||
v = tava.getVariable() and
|
||||
location = tava.getLocation() and
|
||||
tava.toString() = element and
|
||||
tag = "var" and
|
||||
value = v.getLocation().getStartLine().toString() + ":" + v.getName()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
import MakeTest<Test>
|
||||
@@ -2823,4 +2823,67 @@ void vla_sizeof_test5(int len1, size_t len2) {
|
||||
size_t z = sizeof((*&tmp1)[1]);
|
||||
}
|
||||
|
||||
// Common definitions for assertions in release builds
|
||||
#define assert(x) ((void)0)
|
||||
#define __analysis_assume(x)
|
||||
|
||||
void test_assert_simple(int x, int y, unsigned u, int shadowed) {
|
||||
assert(x > 0); // $ var=2830:x
|
||||
assert(0 < x); // $ var=2830:x
|
||||
assert(x < y); // $ var=2830:x var=2830:y
|
||||
|
||||
__analysis_assume(x != 2); // $ var=2830:x
|
||||
|
||||
assert(u < x); // $ var=2830:u var=2830:x
|
||||
|
||||
{
|
||||
int shadowed = x;
|
||||
assert(shadowed > 0); // no assertion generated since the variable is shadowed
|
||||
}
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
void test_assert_in_template(T x, int y, unsigned u) {
|
||||
assert(x > 0); // $ var=2846:x
|
||||
assert(0 < x); // $ var=2846:x
|
||||
assert(x < y); // $ var=2846:x var=2846:y
|
||||
|
||||
__analysis_assume(x != 2); // $ var=2846:x
|
||||
|
||||
assert(u < x); // $ var=2846:u var=2846:x
|
||||
|
||||
{
|
||||
int shadowed = x;
|
||||
assert(shadowed > 0); // $ var=2856:shadowed
|
||||
}
|
||||
assert(x> 0); // $ var=2846:x
|
||||
}
|
||||
|
||||
template void test_assert_in_template<int>(int, int, unsigned);
|
||||
template void test_assert_in_template<short>(short, int, unsigned);
|
||||
namespace {
|
||||
int shadowed;
|
||||
|
||||
void complex_assertions(int x, bool b, int max) {
|
||||
int y = (assert(x > 0), x); // no assertion generated
|
||||
int z = b ? (assert(x != 0), 0) : 1; // no assertion generated
|
||||
|
||||
try {
|
||||
throw 41;
|
||||
} catch (int c) {
|
||||
assert(c < 42); // $ var=2873:c
|
||||
assert(shadowed < 42); // no assertion generated
|
||||
}
|
||||
|
||||
assert(shadowed > 0); // no assertion generated
|
||||
int shadowed;
|
||||
|
||||
try {
|
||||
throw 41;
|
||||
} catch (int shadowed) {
|
||||
assert(shadowed < 42); // no assertion generated
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// semmle-extractor-options: -std=c++20 --clang
|
||||
|
||||
@@ -18880,6 +18880,326 @@ ir.cpp:
|
||||
# 2821| v2821_9(void) = AliasedUse : ~m?
|
||||
# 2821| v2821_10(void) = ExitFunction :
|
||||
|
||||
# 2830| void test_assert_simple(int, int, unsigned int, int)
|
||||
# 2830| Block 0
|
||||
# 2830| v2830_1(void) = EnterFunction :
|
||||
# 2830| mu2830_2(unknown) = AliasedDefinition :
|
||||
# 2830| mu2830_3(unknown) = InitializeNonLocal :
|
||||
# 2830| r2830_4(glval<int>) = VariableAddress[x] :
|
||||
# 2830| mu2830_5(int) = InitializeParameter[x] : &:r2830_4
|
||||
# 2830| r2830_6(glval<int>) = VariableAddress[y] :
|
||||
# 2830| mu2830_7(int) = InitializeParameter[y] : &:r2830_6
|
||||
# 2830| r2830_8(glval<unsigned int>) = VariableAddress[u] :
|
||||
# 2830| mu2830_9(unsigned int) = InitializeParameter[u] : &:r2830_8
|
||||
# 2830| r2830_10(glval<int>) = VariableAddress[shadowed] :
|
||||
# 2830| mu2830_11(int) = InitializeParameter[shadowed] : &:r2830_10
|
||||
# 2831| r2831_1(glval<int>) = VariableAddress[x] :
|
||||
# 2831| r2831_2(int) = Load[x] : &:r2831_1, ~m?
|
||||
# 2831| r2831_3(int) = Constant[0] :
|
||||
# 2831| r2831_4(bool) = CompareGT : r2831_2, r2831_3
|
||||
# 2831| v2831_5(void) = ConditionalBranch : r2831_4
|
||||
#-----| True -> Block 1
|
||||
|
||||
# 2832| Block 1
|
||||
# 2832| r2832_1(int) = Constant[0] :
|
||||
# 2832| r2832_2(glval<int>) = VariableAddress[x] :
|
||||
# 2832| r2832_3(int) = Load[x] : &:r2832_2, ~m?
|
||||
# 2832| r2832_4(bool) = CompareLT : r2832_1, r2832_3
|
||||
# 2832| v2832_5(void) = ConditionalBranch : r2832_4
|
||||
#-----| True -> Block 2
|
||||
|
||||
# 2833| Block 2
|
||||
# 2833| r2833_1(glval<int>) = VariableAddress[x] :
|
||||
# 2833| r2833_2(int) = Load[x] : &:r2833_1, ~m?
|
||||
# 2833| r2833_3(glval<int>) = VariableAddress[y] :
|
||||
# 2833| r2833_4(int) = Load[y] : &:r2833_3, ~m?
|
||||
# 2833| r2833_5(bool) = CompareLT : r2833_2, r2833_4
|
||||
# 2833| v2833_6(void) = ConditionalBranch : r2833_5
|
||||
#-----| True -> Block 3
|
||||
|
||||
# 2835| Block 3
|
||||
# 2835| r2835_1(glval<int>) = VariableAddress[x] :
|
||||
# 2835| r2835_2(int) = Load[x] : &:r2835_1, ~m?
|
||||
# 2835| r2835_3(int) = Constant[2] :
|
||||
# 2835| r2835_4(bool) = CompareNE : r2835_2, r2835_3
|
||||
# 2835| v2835_5(void) = ConditionalBranch : r2835_4
|
||||
#-----| True -> Block 4
|
||||
|
||||
# 2837| Block 4
|
||||
# 2837| r2837_1(glval<unsigned int>) = VariableAddress[u] :
|
||||
# 2837| r2837_2(unsigned int) = Load[u] : &:r2837_1, ~m?
|
||||
# 2837| r2837_3(glval<int>) = VariableAddress[x] :
|
||||
# 2837| r2837_4(int) = Load[x] : &:r2837_3, ~m?
|
||||
# 2837| r2837_5(bool) = CompareLT : r2837_2, r2837_4
|
||||
# 2837| v2837_6(void) = ConditionalBranch : r2837_5
|
||||
#-----| True -> Block 5
|
||||
|
||||
# 2840| Block 5
|
||||
# 2840| r2840_1(glval<int>) = VariableAddress[shadowed] :
|
||||
# 2840| r2840_2(glval<int>) = VariableAddress[x] :
|
||||
# 2840| r2840_3(int) = Load[x] : &:r2840_2, ~m?
|
||||
# 2840| mu2840_4(int) = Store[shadowed] : &:r2840_1, r2840_3
|
||||
# 2841| r2841_1(int) = Constant[0] :
|
||||
# 2841| v2841_2(void) = Convert : r2841_1
|
||||
# 2843| v2843_1(void) = NoOp :
|
||||
# 2830| v2830_12(void) = ReturnVoid :
|
||||
# 2830| v2830_13(void) = AliasedUse : ~m?
|
||||
# 2830| v2830_14(void) = ExitFunction :
|
||||
|
||||
# 2846| void test_assert_in_template<int>(int, int, unsigned int)
|
||||
# 2846| Block 0
|
||||
# 2846| v2846_1(void) = EnterFunction :
|
||||
# 2846| mu2846_2(unknown) = AliasedDefinition :
|
||||
# 2846| mu2846_3(unknown) = InitializeNonLocal :
|
||||
# 2846| r2846_4(glval<int>) = VariableAddress[x] :
|
||||
# 2846| mu2846_5(int) = InitializeParameter[x] : &:r2846_4
|
||||
# 2846| r2846_6(glval<int>) = VariableAddress[y] :
|
||||
# 2846| mu2846_7(int) = InitializeParameter[y] : &:r2846_6
|
||||
# 2846| r2846_8(glval<unsigned int>) = VariableAddress[u] :
|
||||
# 2846| mu2846_9(unsigned int) = InitializeParameter[u] : &:r2846_8
|
||||
# 2847| r2847_1(glval<int>) = VariableAddress[x] :
|
||||
# 2847| r2847_2(int) = Load[x] : &:r2847_1, ~m?
|
||||
# 2847| r2847_3(int) = Constant[0] :
|
||||
# 2847| r2847_4(bool) = CompareGT : r2847_2, r2847_3
|
||||
# 2847| v2847_5(void) = ConditionalBranch : r2847_4
|
||||
#-----| True -> Block 1
|
||||
|
||||
# 2848| Block 1
|
||||
# 2848| r2848_1(int) = Constant[0] :
|
||||
# 2848| r2848_2(glval<int>) = VariableAddress[x] :
|
||||
# 2848| r2848_3(int) = Load[x] : &:r2848_2, ~m?
|
||||
# 2848| r2848_4(bool) = CompareLT : r2848_1, r2848_3
|
||||
# 2848| v2848_5(void) = ConditionalBranch : r2848_4
|
||||
#-----| True -> Block 2
|
||||
|
||||
# 2849| Block 2
|
||||
# 2849| r2849_1(glval<int>) = VariableAddress[x] :
|
||||
# 2849| r2849_2(int) = Load[x] : &:r2849_1, ~m?
|
||||
# 2849| r2849_3(glval<int>) = VariableAddress[y] :
|
||||
# 2849| r2849_4(int) = Load[y] : &:r2849_3, ~m?
|
||||
# 2849| r2849_5(bool) = CompareLT : r2849_2, r2849_4
|
||||
# 2849| v2849_6(void) = ConditionalBranch : r2849_5
|
||||
#-----| True -> Block 3
|
||||
|
||||
# 2851| Block 3
|
||||
# 2851| r2851_1(glval<int>) = VariableAddress[x] :
|
||||
# 2851| r2851_2(int) = Load[x] : &:r2851_1, ~m?
|
||||
# 2851| r2851_3(int) = Constant[2] :
|
||||
# 2851| r2851_4(bool) = CompareNE : r2851_2, r2851_3
|
||||
# 2851| v2851_5(void) = ConditionalBranch : r2851_4
|
||||
#-----| True -> Block 4
|
||||
|
||||
# 2853| Block 4
|
||||
# 2853| r2853_1(glval<unsigned int>) = VariableAddress[u] :
|
||||
# 2853| r2853_2(unsigned int) = Load[u] : &:r2853_1, ~m?
|
||||
# 2853| r2853_3(glval<int>) = VariableAddress[x] :
|
||||
# 2853| r2853_4(int) = Load[x] : &:r2853_3, ~m?
|
||||
# 2853| r2853_5(bool) = CompareLT : r2853_2, r2853_4
|
||||
# 2853| v2853_6(void) = ConditionalBranch : r2853_5
|
||||
#-----| True -> Block 5
|
||||
|
||||
# 2856| Block 5
|
||||
# 2856| r2856_1(glval<int>) = VariableAddress[shadowed] :
|
||||
# 2856| r2856_2(glval<int>) = VariableAddress[x] :
|
||||
# 2856| r2856_3(int) = Load[x] : &:r2856_2, ~m?
|
||||
# 2856| mu2856_4(int) = Store[shadowed] : &:r2856_1, r2856_3
|
||||
# 2857| r2857_1(glval<int>) = VariableAddress[shadowed] :
|
||||
# 2857| r2857_2(int) = Load[shadowed] : &:r2857_1, ~m?
|
||||
# 2857| r2857_3(int) = Constant[0] :
|
||||
# 2857| r2857_4(bool) = CompareGT : r2857_2, r2857_3
|
||||
# 2857| v2857_5(void) = ConditionalBranch : r2857_4
|
||||
#-----| True -> Block 6
|
||||
|
||||
# 2859| Block 6
|
||||
# 2859| r2859_1(glval<int>) = VariableAddress[x] :
|
||||
# 2859| r2859_2(int) = Load[x] : &:r2859_1, ~m?
|
||||
# 2859| r2859_3(int) = Constant[0] :
|
||||
# 2859| r2859_4(bool) = CompareGT : r2859_2, r2859_3
|
||||
# 2859| v2859_5(void) = ConditionalBranch : r2859_4
|
||||
#-----| True -> Block 7
|
||||
|
||||
# 2860| Block 7
|
||||
# 2860| v2860_1(void) = NoOp :
|
||||
# 2846| v2846_10(void) = ReturnVoid :
|
||||
# 2846| v2846_11(void) = AliasedUse : ~m?
|
||||
# 2846| v2846_12(void) = ExitFunction :
|
||||
|
||||
# 2846| void test_assert_in_template<short>(short, int, unsigned int)
|
||||
# 2846| Block 0
|
||||
# 2846| v2846_1(void) = EnterFunction :
|
||||
# 2846| mu2846_2(unknown) = AliasedDefinition :
|
||||
# 2846| mu2846_3(unknown) = InitializeNonLocal :
|
||||
# 2846| r2846_4(glval<short>) = VariableAddress[x] :
|
||||
# 2846| mu2846_5(short) = InitializeParameter[x] : &:r2846_4
|
||||
# 2846| r2846_6(glval<int>) = VariableAddress[y] :
|
||||
# 2846| mu2846_7(int) = InitializeParameter[y] : &:r2846_6
|
||||
# 2846| r2846_8(glval<unsigned int>) = VariableAddress[u] :
|
||||
# 2846| mu2846_9(unsigned int) = InitializeParameter[u] : &:r2846_8
|
||||
# 2847| r2847_1(glval<short>) = VariableAddress[x] :
|
||||
# 2847| r2847_2(short) = Load[x] : &:r2847_1, ~m?
|
||||
# 2847| r2847_3(int) = Constant[0] :
|
||||
# 2847| r2847_4(bool) = CompareGT : r2847_2, r2847_3
|
||||
# 2847| v2847_5(void) = ConditionalBranch : r2847_4
|
||||
#-----| True -> Block 1
|
||||
|
||||
# 2848| Block 1
|
||||
# 2848| r2848_1(int) = Constant[0] :
|
||||
# 2848| r2848_2(glval<short>) = VariableAddress[x] :
|
||||
# 2848| r2848_3(short) = Load[x] : &:r2848_2, ~m?
|
||||
# 2848| r2848_4(bool) = CompareLT : r2848_1, r2848_3
|
||||
# 2848| v2848_5(void) = ConditionalBranch : r2848_4
|
||||
#-----| True -> Block 2
|
||||
|
||||
# 2849| Block 2
|
||||
# 2849| r2849_1(glval<short>) = VariableAddress[x] :
|
||||
# 2849| r2849_2(short) = Load[x] : &:r2849_1, ~m?
|
||||
# 2849| r2849_3(glval<int>) = VariableAddress[y] :
|
||||
# 2849| r2849_4(int) = Load[y] : &:r2849_3, ~m?
|
||||
# 2849| r2849_5(bool) = CompareLT : r2849_2, r2849_4
|
||||
# 2849| v2849_6(void) = ConditionalBranch : r2849_5
|
||||
#-----| True -> Block 3
|
||||
|
||||
# 2851| Block 3
|
||||
# 2851| r2851_1(glval<short>) = VariableAddress[x] :
|
||||
# 2851| r2851_2(short) = Load[x] : &:r2851_1, ~m?
|
||||
# 2851| r2851_3(int) = Constant[2] :
|
||||
# 2851| r2851_4(bool) = CompareNE : r2851_2, r2851_3
|
||||
# 2851| v2851_5(void) = ConditionalBranch : r2851_4
|
||||
#-----| True -> Block 4
|
||||
|
||||
# 2853| Block 4
|
||||
# 2853| r2853_1(glval<unsigned int>) = VariableAddress[u] :
|
||||
# 2853| r2853_2(unsigned int) = Load[u] : &:r2853_1, ~m?
|
||||
# 2853| r2853_3(glval<short>) = VariableAddress[x] :
|
||||
# 2853| r2853_4(short) = Load[x] : &:r2853_3, ~m?
|
||||
# 2853| r2853_5(bool) = CompareLT : r2853_2, r2853_4
|
||||
# 2853| v2853_6(void) = ConditionalBranch : r2853_5
|
||||
#-----| True -> Block 5
|
||||
|
||||
# 2856| Block 5
|
||||
# 2856| r2856_1(glval<int>) = VariableAddress[shadowed] :
|
||||
# 2856| r2856_2(glval<short>) = VariableAddress[x] :
|
||||
# 2856| r2856_3(short) = Load[x] : &:r2856_2, ~m?
|
||||
# 2856| r2856_4(int) = Convert : r2856_3
|
||||
# 2856| mu2856_5(int) = Store[shadowed] : &:r2856_1, r2856_4
|
||||
# 2857| r2857_1(glval<int>) = VariableAddress[shadowed] :
|
||||
# 2857| r2857_2(int) = Load[shadowed] : &:r2857_1, ~m?
|
||||
# 2857| r2857_3(int) = Constant[0] :
|
||||
# 2857| r2857_4(bool) = CompareGT : r2857_2, r2857_3
|
||||
# 2857| v2857_5(void) = ConditionalBranch : r2857_4
|
||||
#-----| True -> Block 6
|
||||
|
||||
# 2859| Block 6
|
||||
# 2859| r2859_1(glval<short>) = VariableAddress[x] :
|
||||
# 2859| r2859_2(short) = Load[x] : &:r2859_1, ~m?
|
||||
# 2859| r2859_3(int) = Constant[0] :
|
||||
# 2859| r2859_4(bool) = CompareGT : r2859_2, r2859_3
|
||||
# 2859| v2859_5(void) = ConditionalBranch : r2859_4
|
||||
#-----| True -> Block 7
|
||||
|
||||
# 2860| Block 7
|
||||
# 2860| v2860_1(void) = NoOp :
|
||||
# 2846| v2846_10(void) = ReturnVoid :
|
||||
# 2846| v2846_11(void) = AliasedUse : ~m?
|
||||
# 2846| v2846_12(void) = ExitFunction :
|
||||
|
||||
# 2867| void (unnamed namespace)::complex_assertions(int, bool, int)
|
||||
# 2867| Block 0
|
||||
# 2867| v2867_1(void) = EnterFunction :
|
||||
# 2867| mu2867_2(unknown) = AliasedDefinition :
|
||||
# 2867| mu2867_3(unknown) = InitializeNonLocal :
|
||||
# 2867| r2867_4(glval<int>) = VariableAddress[x] :
|
||||
# 2867| mu2867_5(int) = InitializeParameter[x] : &:r2867_4
|
||||
# 2867| r2867_6(glval<bool>) = VariableAddress[b] :
|
||||
# 2867| mu2867_7(bool) = InitializeParameter[b] : &:r2867_6
|
||||
# 2867| r2867_8(glval<int>) = VariableAddress[max] :
|
||||
# 2867| mu2867_9(int) = InitializeParameter[max] : &:r2867_8
|
||||
# 2868| r2868_1(glval<int>) = VariableAddress[y] :
|
||||
# 2868| r2868_2(int) = Constant[0] :
|
||||
# 2868| v2868_3(void) = Convert : r2868_2
|
||||
# 2868| r2868_4(glval<int>) = VariableAddress[x] :
|
||||
# 2868| r2868_5(int) = Load[x] : &:r2868_4, ~m?
|
||||
# 2868| r2868_6(int) = CopyValue : r2868_5
|
||||
# 2868| mu2868_7(int) = Store[y] : &:r2868_1, r2868_6
|
||||
# 2869| r2869_1(glval<int>) = VariableAddress[z] :
|
||||
# 2869| r2869_2(glval<bool>) = VariableAddress[b] :
|
||||
# 2869| r2869_3(bool) = Load[b] : &:r2869_2, ~m?
|
||||
# 2869| v2869_4(void) = ConditionalBranch : r2869_3
|
||||
#-----| False -> Block 5
|
||||
#-----| True -> Block 4
|
||||
|
||||
# 2867| Block 1
|
||||
# 2867| v2867_10(void) = AliasedUse : ~m?
|
||||
# 2867| v2867_11(void) = ExitFunction :
|
||||
|
||||
# 2867| Block 2
|
||||
# 2867| v2867_12(void) = Unwind :
|
||||
#-----| Goto -> Block 1
|
||||
|
||||
# 2869| Block 3
|
||||
# 2869| r2869_5(glval<int>) = VariableAddress[#temp2869:17] :
|
||||
# 2869| r2869_6(int) = Load[#temp2869:17] : &:r2869_5, ~m?
|
||||
# 2869| mu2869_7(int) = Store[z] : &:r2869_1, r2869_6
|
||||
# 2872| r2872_1(glval<int>) = VariableAddress[#throw2872:13] :
|
||||
# 2872| r2872_2(int) = Constant[41] :
|
||||
# 2872| mu2872_3(int) = Store[#throw2872:13] : &:r2872_1, r2872_2
|
||||
# 2872| v2872_4(void) = ThrowValue : &:r2872_1, ~m?
|
||||
#-----| C++ Exception -> Block 6
|
||||
|
||||
# 2869| Block 4
|
||||
# 2869| r2869_8(int) = Constant[0] :
|
||||
# 2869| r2869_9(glval<int>) = VariableAddress[#temp2869:17] :
|
||||
# 2869| mu2869_10(int) = Store[#temp2869:17] : &:r2869_9, r2869_8
|
||||
#-----| Goto -> Block 3
|
||||
|
||||
# 2869| Block 5
|
||||
# 2869| r2869_11(int) = Constant[1] :
|
||||
# 2869| r2869_12(glval<int>) = VariableAddress[#temp2869:17] :
|
||||
# 2869| mu2869_13(int) = Store[#temp2869:17] : &:r2869_12, r2869_11
|
||||
#-----| Goto -> Block 3
|
||||
|
||||
# 2873| Block 6
|
||||
# 2873| v2873_1(void) = CatchByType[int] :
|
||||
#-----| C++ Exception -> Block 2
|
||||
#-----| Goto -> Block 7
|
||||
|
||||
# 2873| Block 7
|
||||
# 2873| r2873_2(glval<int>) = VariableAddress[c] :
|
||||
# 2873| mu2873_3(int) = InitializeParameter[c] : &:r2873_2
|
||||
# 2874| r2874_1(glval<int>) = VariableAddress[c] :
|
||||
# 2874| r2874_2(int) = Load[c] : &:r2874_1, ~m?
|
||||
# 2874| r2874_3(int) = Constant[42] :
|
||||
# 2874| r2874_4(bool) = CompareLT : r2874_2, r2874_3
|
||||
# 2874| v2874_5(void) = ConditionalBranch : r2874_4
|
||||
#-----| True -> Block 8
|
||||
|
||||
# 2875| Block 8
|
||||
# 2875| r2875_1(int) = Constant[0] :
|
||||
# 2875| v2875_2(void) = Convert : r2875_1
|
||||
# 2878| r2878_1(int) = Constant[0] :
|
||||
# 2878| v2878_2(void) = Convert : r2878_1
|
||||
# 2879| r2879_1(glval<int>) = VariableAddress[shadowed] :
|
||||
# 2879| mu2879_2(int) = Uninitialized[shadowed] : &:r2879_1
|
||||
# 2882| r2882_1(glval<int>) = VariableAddress[#throw2882:13] :
|
||||
# 2882| r2882_2(int) = Constant[41] :
|
||||
# 2882| mu2882_3(int) = Store[#throw2882:13] : &:r2882_1, r2882_2
|
||||
# 2882| v2882_4(void) = ThrowValue : &:r2882_1, ~m?
|
||||
#-----| C++ Exception -> Block 9
|
||||
|
||||
# 2883| Block 9
|
||||
# 2883| v2883_1(void) = CatchByType[int] :
|
||||
#-----| C++ Exception -> Block 2
|
||||
#-----| Goto -> Block 10
|
||||
|
||||
# 2883| Block 10
|
||||
# 2883| r2883_2(glval<int>) = VariableAddress[shadowed] :
|
||||
# 2883| mu2883_3(int) = InitializeParameter[shadowed] : &:r2883_2
|
||||
# 2884| r2884_1(int) = Constant[0] :
|
||||
# 2884| v2884_2(void) = Convert : r2884_1
|
||||
# 2886| v2886_1(void) = NoOp :
|
||||
# 2867| v2867_13(void) = ReturnVoid :
|
||||
#-----| Goto -> Block 1
|
||||
|
||||
ir23.cpp:
|
||||
# 1| bool consteval_1()
|
||||
# 1| Block 0
|
||||
|
||||
@@ -103,33 +103,37 @@ def make_patches_from_log_file(log_file_lines) -> List[Patch]:
|
||||
line = parse_log_line(raw_line)
|
||||
|
||||
if line == "--- expected":
|
||||
while True:
|
||||
next_line = parse_log_line(next(lines))
|
||||
if next_line == "+++ actual":
|
||||
break
|
||||
try:
|
||||
while True:
|
||||
next_line = parse_log_line(next(lines))
|
||||
if next_line == "+++ actual":
|
||||
break
|
||||
|
||||
lines_changed = []
|
||||
lines_changed = []
|
||||
|
||||
while True:
|
||||
next_line = parse_log_line(next(lines))
|
||||
# it can be the case that
|
||||
if next_line and next_line[0] in (" ", "-", "+", "@"):
|
||||
lines_changed.append(next_line)
|
||||
if "FAILED" in next_line:
|
||||
break
|
||||
while True:
|
||||
next_line = parse_log_line(next(lines))
|
||||
# it can be the case that
|
||||
if next_line and next_line[0] in (" ", "-", "+", "@"):
|
||||
lines_changed.append(next_line)
|
||||
if "FAILED" in next_line:
|
||||
break
|
||||
|
||||
# error line _should_ be next, but sometimes the output gets interleaved...
|
||||
# so we just skip until we find the error line
|
||||
error_line = next_line
|
||||
while True:
|
||||
# internal
|
||||
filename_match = re.fullmatch(r"^##\[error\].*FAILED\(RESULT\) (.*)$", error_line)
|
||||
if not filename_match:
|
||||
# codeql action
|
||||
filename_match = re.fullmatch(r"^.*FAILED\(RESULT\) (.*)$", error_line)
|
||||
if filename_match:
|
||||
break
|
||||
error_line = parse_log_line(next(lines))
|
||||
# error line _should_ be next, but sometimes the output gets interleaved...
|
||||
# so we just skip until we find the error line
|
||||
error_line = next_line
|
||||
while True:
|
||||
# internal
|
||||
filename_match = re.fullmatch(r"^##\[error\].*FAILED\(RESULT\) (.*)$", error_line)
|
||||
if not filename_match:
|
||||
# codeql action
|
||||
filename_match = re.fullmatch(r"^.*FAILED\(RESULT\) (.*)$", error_line)
|
||||
if filename_match:
|
||||
break
|
||||
error_line = parse_log_line(next(lines))
|
||||
except StopIteration:
|
||||
LOGGER.warning("Encountered unexpected end of logs while parsing failure block.")
|
||||
break
|
||||
|
||||
full_path = filename_match.group(1)
|
||||
|
||||
|
||||
@@ -12,68 +12,75 @@ extensions:
|
||||
- ["<_ as core::ops::index::IndexMut>::index_mut", "Argument[self].Reference.Element", "ReturnValue.Reference", "value", "manual"]
|
||||
# Unary operators
|
||||
- ["<_ as core::ops::arith::Neg>::neg", "Argument[self]", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::Neg>::neg", "Argument[self].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::Not>::not", "Argument[self]", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::Not>::not", "Argument[self].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"]
|
||||
# Arithmetic operators
|
||||
- ["<_ as core::ops::arith::Add>::add", "Argument[self]", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::Add>::add", "Argument[0]", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::Add>::add", "Argument[0].Reference", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::Sub>::sub", "Argument[self]", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::Sub>::sub", "Argument[0]", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::Sub>::sub", "Argument[0].Reference", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::Mul>::mul", "Argument[self]", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::Mul>::mul", "Argument[0]", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::Mul>::mul", "Argument[0].Reference", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::Div>::div", "Argument[self]", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::Div>::div", "Argument[0]", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::Div>::div", "Argument[0].Reference", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::Rem>::rem", "Argument[self]", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::Rem>::rem", "Argument[0]", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::Rem>::rem", "Argument[0].Reference", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::Add>::add", "Argument[self,0]", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::Add>::add", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::Sub>::sub", "Argument[self,0]", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::Sub>::sub", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::Mul>::mul", "Argument[self,0]", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::Mul>::mul", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::Div>::div", "Argument[self,0]", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::Div>::div", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::Rem>::rem", "Argument[self,0]", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::Rem>::rem", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"]
|
||||
# Arithmetic assignment expressions
|
||||
- ["<_ as core::ops::arith::AddAssign>::add_assign", "Argument[self].Reference", "Argument[self].Reference", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::AddAssign>::add_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::AddAssign>::add_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::AddAssign>::add_assign", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::AddAssign>::add_assign", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::SubAssign>::sub_assign", "Argument[self].Reference", "Argument[self].Reference", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::SubAssign>::sub_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::SubAssign>::sub_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::SubAssign>::sub_assign", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::SubAssign>::sub_assign", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::MulAssign>::mul_assign", "Argument[self].Reference", "Argument[self].Reference", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::MulAssign>::mul_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::MulAssign>::mul_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::MulAssign>::mul_assign", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::MulAssign>::mul_assign", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::DivAssign>::div_assign", "Argument[self].Reference", "Argument[self].Reference", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::DivAssign>::div_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::DivAssign>::div_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::DivAssign>::div_assign", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::DivAssign>::div_assign", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::RemAssign>::rem_assign", "Argument[self].Reference", "Argument[self].Reference", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::RemAssign>::rem_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::RemAssign>::rem_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::RemAssign>::rem_assign", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::RemAssign>::rem_assign", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"]
|
||||
# Bitwise operators
|
||||
- ["<_ as core::ops::bit::BitAnd>::bitand", "Argument[self]", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::BitAnd>::bitand", "Argument[0]", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::BitAnd>::bitand", "Argument[0].Reference", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::BitOr>::bitor", "Argument[self]", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::BitOr>::bitor", "Argument[0]", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::BitOr>::bitor", "Argument[0].Reference", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::BitXor>::bitxor", "Argument[self]", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::BitXor>::bitxor", "Argument[0]", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::BitXor>::bitxor", "Argument[0].Reference", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::BitAnd>::bitand", "Argument[self,0]", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::BitAnd>::bitand", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::BitOr>::bitor", "Argument[self,0]", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::BitOr>::bitor", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::BitXor>::bitxor", "Argument[self,0]", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::BitXor>::bitxor", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"]
|
||||
# Bitwise assignment operators
|
||||
- ["<_ as core::ops::bit::BitAndAssign>::bitand_assign", "Argument[self].Reference", "Argument[self].Reference", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::BitAndAssign>::bitand_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::BitAndAssign>::bitand_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::BitAndAssign>::bitand_assign", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::BitAndAssign>::bitand_assign", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::BitOrAssign>::bitor_assign", "Argument[self].Reference", "Argument[self].Reference", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::BitOrAssign>::bitor_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::BitOrAssign>::bitor_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::BitOrAssign>::bitor_assign", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::BitOrAssign>::bitor_assign", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::BitXorAssign>::bitxor_assign", "Argument[self].Reference", "Argument[self].Reference", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::BitXorAssign>::bitxor_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::BitXorAssign>::bitxor_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::BitXorAssign>::bitxor_assign", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::BitXorAssign>::bitxor_assign", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"]
|
||||
# Shift operators
|
||||
- ["<_ as core::ops::bit::Shl>::shl", "Argument[self]", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::Shl>::shl", "Argument[0]", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::Shl>::shl", "Argument[0].Reference", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::Shr>::shr", "Argument[self]", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::Shr>::shr", "Argument[0]", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::Shr>::shr", "Argument[0].Reference", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::Shl>::shl", "Argument[self,0]", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::Shl>::shl", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::Shr>::shr", "Argument[self,0]", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::Shr>::shr", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"]
|
||||
# Shift assignment operators
|
||||
- ["<_ as core::ops::bit::ShlAssign>::shl_assign", "Argument[self].Reference", "Argument[self].Reference", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::ShlAssign>::shl_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::ShlAssign>::shl_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::ShlAssign>::shl_assign", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::ShlAssign>::shl_assign", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::ShrAssign>::shr_assign", "Argument[self].Reference", "Argument[self].Reference", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::ShrAssign>::shr_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::ShrAssign>::shr_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::ShrAssign>::shr_assign", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"]
|
||||
- ["<_ as core::ops::bit::ShrAssign>::shr_assign", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"]
|
||||
# Clone
|
||||
- ["<_ as core::clone::Clone>::clone", "Argument[self].Reference", "ReturnValue", "value", "manual"]
|
||||
# Conversions
|
||||
@@ -156,4 +163,4 @@ extensions:
|
||||
data:
|
||||
- ["core::ops::range::RangeInclusive::start"]
|
||||
- ["core::ops::range::RangeInclusive::end"]
|
||||
- ["core::result::Result::Err(0)"]
|
||||
- ["core::result::Result::Err(0)"]
|
||||
|
||||
@@ -117,8 +117,6 @@ module SatisfiesBlanketConstraint<
|
||||
predicate relevantConstraint(ArgumentTypeAndBlanketOffset ato, Type constraint) {
|
||||
relevantConstraint(ato, _, constraint.(TraitType).getTrait())
|
||||
}
|
||||
|
||||
predicate useUniversalConditions() { none() }
|
||||
}
|
||||
|
||||
private module SatisfiesBlanketConstraint =
|
||||
|
||||
@@ -141,17 +141,17 @@ private module Input2 implements InputSig2 {
|
||||
|
||||
TypeMention getABaseTypeMention(Type t) { none() }
|
||||
|
||||
TypeMention getATypeParameterConstraint(TypeParameter tp) {
|
||||
result = tp.(TypeParamTypeParameter).getTypeParam().getATypeBound().getTypeRepr()
|
||||
or
|
||||
result = tp.(SelfTypeParameter).getTrait()
|
||||
or
|
||||
result =
|
||||
tp.(ImplTraitTypeTypeParameter)
|
||||
.getImplTraitTypeRepr()
|
||||
.getTypeBoundList()
|
||||
.getABound()
|
||||
.getTypeRepr()
|
||||
Type getATypeParameterConstraint(TypeParameter tp, TypePath path) {
|
||||
exists(TypeMention tm | result = tm.resolveTypeAt(path) |
|
||||
tm = tp.(TypeParamTypeParameter).getTypeParam().getATypeBound().getTypeRepr() or
|
||||
tm = tp.(SelfTypeParameter).getTrait() or
|
||||
tm =
|
||||
tp.(ImplTraitTypeTypeParameter)
|
||||
.getImplTraitTypeRepr()
|
||||
.getTypeBoundList()
|
||||
.getABound()
|
||||
.getTypeRepr()
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2200,8 +2200,6 @@ private module MethodResolution {
|
||||
exists(mc) and
|
||||
constraint.(TraitType).getTrait() instanceof DerefTrait
|
||||
}
|
||||
|
||||
predicate useUniversalConditions() { none() }
|
||||
}
|
||||
|
||||
private module MethodCallSatisfiesDerefConstraint =
|
||||
@@ -3613,8 +3611,6 @@ private module AwaitSatisfiesConstraintInput implements SatisfiesConstraintInput
|
||||
exists(term) and
|
||||
constraint.(TraitType).getTrait() instanceof FutureTrait
|
||||
}
|
||||
|
||||
predicate useUniversalConditions() { none() }
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
@@ -3811,18 +3807,16 @@ private module ForIterableSatisfiesConstraintInput implements
|
||||
t instanceof IntoIteratorTrait
|
||||
)
|
||||
}
|
||||
|
||||
predicate useUniversalConditions() { none() }
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
private AssociatedTypeTypeParameter getIteratorItemTypeParameter() {
|
||||
result.getTypeAlias() = any(IteratorTrait t).getItemType()
|
||||
result = getAssociatedTypeTypeParameter(any(IteratorTrait t).getItemType())
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
private AssociatedTypeTypeParameter getIntoIteratorItemTypeParameter() {
|
||||
result.getTypeAlias() = any(IntoIteratorTrait t).getItemType()
|
||||
result = getAssociatedTypeTypeParameter(any(IntoIteratorTrait t).getItemType())
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
@@ -3864,8 +3858,6 @@ private module InvokedClosureSatisfiesConstraintInput implements
|
||||
exists(term) and
|
||||
constraint.(TraitType).getTrait() instanceof FnOnceTrait
|
||||
}
|
||||
|
||||
predicate useUniversalConditions() { none() }
|
||||
}
|
||||
|
||||
/** Gets the type of `ce` when viewed as an implementation of `FnOnce`. */
|
||||
|
||||
@@ -19,7 +19,7 @@ private import internal.InlineExpectationsTestImpl as InlineExpectationsTestImpl
|
||||
*/
|
||||
bindingset[name]
|
||||
private predicate callTargetName(CallExpr call, string name) {
|
||||
call.getFunction().(PathExpr).toString().matches(name + "%")
|
||||
call.getFunction().(PathExpr).getPath().getText().matches(name + "%")
|
||||
}
|
||||
|
||||
private module FlowTestImpl implements InputSig<Location, RustDataFlow> {
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
models
|
||||
| 1 | Summary: <& as core::ops::deref::Deref>::deref; Argument[self].Reference; ReturnValue; value |
|
||||
| 2 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[0].Reference; Argument[self].Reference; taint |
|
||||
| 3 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[0]; Argument[self].Reference; taint |
|
||||
| 4 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value |
|
||||
| 2 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[0]; Argument[self].Reference; taint |
|
||||
| 3 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value |
|
||||
edges
|
||||
| main.rs:15:13:15:13 | s | main.rs:16:20:16:20 | s | provenance | |
|
||||
| main.rs:15:17:15:25 | source(...) | main.rs:15:13:15:13 | s | provenance | |
|
||||
@@ -10,14 +9,14 @@ edges
|
||||
| main.rs:16:13:16:15 | arr [element] | main.rs:18:15:18:17 | arr [element] | provenance | |
|
||||
| main.rs:16:19:16:24 | [s; 5] [element] | main.rs:16:13:16:15 | arr [element] | provenance | |
|
||||
| main.rs:16:20:16:20 | s | main.rs:16:19:16:24 | [s; 5] [element] | provenance | |
|
||||
| main.rs:17:14:17:16 | arr [element] | main.rs:17:14:17:19 | arr[2] | provenance | MaD:4 |
|
||||
| main.rs:18:15:18:17 | arr [element] | main.rs:18:15:18:26 | arr.index(...) [&ref] | provenance | MaD:4 |
|
||||
| main.rs:17:14:17:16 | arr [element] | main.rs:17:14:17:19 | arr[2] | provenance | MaD:3 |
|
||||
| main.rs:18:15:18:17 | arr [element] | main.rs:18:15:18:26 | arr.index(...) [&ref] | provenance | MaD:3 |
|
||||
| main.rs:18:15:18:26 | arr.index(...) [&ref] | main.rs:18:14:18:26 | * ... | provenance | MaD:1 |
|
||||
| main.rs:20:13:20:19 | mut arr | main.rs:21:14:21:16 | arr | provenance | |
|
||||
| main.rs:20:13:20:19 | mut arr | main.rs:22:15:22:17 | arr | provenance | |
|
||||
| main.rs:20:23:20:33 | source(...) | main.rs:20:13:20:19 | mut arr | provenance | |
|
||||
| main.rs:21:14:21:16 | arr | main.rs:21:14:21:19 | arr[0] | provenance | MaD:4 |
|
||||
| main.rs:22:15:22:17 | arr | main.rs:22:15:22:26 | arr.index(...) [&ref] | provenance | MaD:4 |
|
||||
| main.rs:21:14:21:16 | arr | main.rs:21:14:21:19 | arr[0] | provenance | MaD:3 |
|
||||
| main.rs:22:15:22:17 | arr | main.rs:22:15:22:26 | arr.index(...) [&ref] | provenance | MaD:3 |
|
||||
| main.rs:22:15:22:26 | arr.index(...) [&ref] | main.rs:22:14:22:26 | * ... | provenance | MaD:1 |
|
||||
| main.rs:24:13:24:13 | s | main.rs:25:20:25:20 | s | provenance | |
|
||||
| main.rs:24:17:24:25 | source(...) | main.rs:24:13:24:13 | s | provenance | |
|
||||
@@ -30,17 +29,15 @@ edges
|
||||
| main.rs:30:19:30:29 | source(...) | main.rs:30:13:30:15 | arr | provenance | |
|
||||
| main.rs:37:9:37:11 | [post] arr [element] | main.rs:38:14:38:16 | arr [element] | provenance | |
|
||||
| main.rs:37:18:37:26 | source(...) | main.rs:37:9:37:11 | [post] arr [element] | provenance | |
|
||||
| main.rs:38:14:38:16 | arr [element] | main.rs:38:14:38:19 | arr[0] | provenance | MaD:4 |
|
||||
| main.rs:38:14:38:16 | arr [element] | main.rs:38:14:38:19 | arr[0] | provenance | MaD:3 |
|
||||
| main.rs:46:9:46:14 | [post] arr[0] | main.rs:47:14:47:16 | arr | provenance | |
|
||||
| main.rs:46:19:46:27 | source(...) | main.rs:46:9:46:14 | [post] arr[0] | provenance | MaD:2 |
|
||||
| main.rs:46:19:46:27 | source(...) | main.rs:46:9:46:14 | [post] arr[0] | provenance | MaD:3 |
|
||||
| main.rs:47:14:47:16 | arr | main.rs:47:14:47:19 | arr[0] | provenance | MaD:4 |
|
||||
| main.rs:47:14:47:16 | arr | main.rs:47:14:47:19 | arr[0] | provenance | MaD:3 |
|
||||
| main.rs:63:18:63:22 | SelfParam [&ref, S] | main.rs:63:56:65:9 | { ... } [&ref, S] | provenance | |
|
||||
| main.rs:76:34:76:44 | ...: Self [S] | main.rs:77:23:77:27 | other [S] | provenance | |
|
||||
| main.rs:77:13:77:18 | [post] self.0 | main.rs:76:23:76:31 | SelfParam [Return] [&ref, S] | provenance | |
|
||||
| main.rs:77:23:77:27 | other [S] | main.rs:77:23:77:29 | other.0 | provenance | |
|
||||
| main.rs:77:23:77:29 | other.0 | main.rs:77:13:77:18 | [post] self.0 | provenance | MaD:2 |
|
||||
| main.rs:77:23:77:29 | other.0 | main.rs:77:13:77:18 | [post] self.0 | provenance | MaD:3 |
|
||||
| main.rs:82:13:82:13 | s | main.rs:83:19:83:19 | s | provenance | |
|
||||
| main.rs:82:17:82:25 | source(...) | main.rs:82:13:82:13 | s | provenance | |
|
||||
| main.rs:83:13:83:13 | s [S] | main.rs:84:14:84:14 | s [S] | provenance | |
|
||||
@@ -67,7 +64,6 @@ edges
|
||||
| main.rs:99:9:99:12 | [post] s[0] [S] | main.rs:99:9:99:9 | [post] s [S] | provenance | |
|
||||
| main.rs:99:17:99:28 | S(...) [S] | main.rs:76:34:76:44 | ...: Self [S] | provenance | |
|
||||
| main.rs:99:17:99:28 | S(...) [S] | main.rs:99:9:99:12 | [post] s[0] [S] | provenance | MaD:2 |
|
||||
| main.rs:99:17:99:28 | S(...) [S] | main.rs:99:9:99:12 | [post] s[0] [S] | provenance | MaD:3 |
|
||||
| main.rs:99:19:99:27 | source(...) | main.rs:99:17:99:28 | S(...) [S] | provenance | |
|
||||
| main.rs:100:14:100:14 | s [S] | main.rs:100:14:100:16 | s.0 | provenance | |
|
||||
| main.rs:104:9:104:23 | [post] * ... [S] | main.rs:104:10:104:23 | [post] s.index_mut(...) [&ref, S] | provenance | |
|
||||
@@ -75,13 +71,11 @@ edges
|
||||
| main.rs:104:10:104:23 | [post] s.index_mut(...) [&ref, S] | main.rs:104:10:104:10 | [post] s [S] | provenance | |
|
||||
| main.rs:104:28:104:39 | S(...) [S] | main.rs:76:34:76:44 | ...: Self [S] | provenance | |
|
||||
| main.rs:104:28:104:39 | S(...) [S] | main.rs:104:9:104:23 | [post] * ... [S] | provenance | MaD:2 |
|
||||
| main.rs:104:28:104:39 | S(...) [S] | main.rs:104:9:104:23 | [post] * ... [S] | provenance | MaD:3 |
|
||||
| main.rs:104:30:104:38 | source(...) | main.rs:104:28:104:39 | S(...) [S] | provenance | |
|
||||
| main.rs:105:9:105:9 | [post] s [S] | main.rs:106:14:106:14 | s [S] | provenance | |
|
||||
| main.rs:105:9:105:12 | [post] s[0] [S] | main.rs:105:9:105:9 | [post] s [S] | provenance | |
|
||||
| main.rs:105:17:105:28 | S(...) [S] | main.rs:76:34:76:44 | ...: Self [S] | provenance | |
|
||||
| main.rs:105:17:105:28 | S(...) [S] | main.rs:105:9:105:12 | [post] s[0] [S] | provenance | MaD:2 |
|
||||
| main.rs:105:17:105:28 | S(...) [S] | main.rs:105:9:105:12 | [post] s[0] [S] | provenance | MaD:3 |
|
||||
| main.rs:105:19:105:27 | source(...) | main.rs:105:17:105:28 | S(...) [S] | provenance | |
|
||||
| main.rs:106:14:106:14 | s [S] | main.rs:106:14:106:16 | s.0 | provenance | |
|
||||
| main.rs:110:10:110:24 | [post] * ... [S] | main.rs:110:11:110:24 | [post] s.index_mut(...) [&ref, S] | provenance | |
|
||||
@@ -89,7 +83,6 @@ edges
|
||||
| main.rs:110:11:110:24 | [post] s.index_mut(...) [&ref, S] | main.rs:110:11:110:11 | [post] s [S] | provenance | |
|
||||
| main.rs:110:38:110:49 | S(...) [S] | main.rs:76:34:76:44 | ...: Self [S] | provenance | |
|
||||
| main.rs:110:38:110:49 | S(...) [S] | main.rs:110:10:110:24 | [post] * ... [S] | provenance | MaD:2 |
|
||||
| main.rs:110:38:110:49 | S(...) [S] | main.rs:110:10:110:24 | [post] * ... [S] | provenance | MaD:3 |
|
||||
| main.rs:110:40:110:48 | source(...) | main.rs:110:38:110:49 | S(...) [S] | provenance | |
|
||||
| main.rs:111:14:111:14 | s [S] | main.rs:111:14:111:16 | s.0 | provenance | |
|
||||
nodes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
models
|
||||
| 1 | Summary: <& as core::ops::deref::Deref>::deref; Argument[self].Reference; ReturnValue; value |
|
||||
| 2 | Summary: <_ as core::ops::arith::Mul>::mul; Argument[self]; ReturnValue; taint |
|
||||
| 2 | Summary: <_ as core::ops::arith::Mul>::mul; Argument[self,0]; 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 | |
|
||||
|
||||
@@ -4,53 +4,52 @@ models
|
||||
| 3 | Summary: <_ as core::cmp::Ord>::clamp; Argument[self,0,1]; ReturnValue; value |
|
||||
| 4 | Summary: <_ as core::cmp::Ord>::max; Argument[self,0]; ReturnValue; value |
|
||||
| 5 | Summary: <_ as core::cmp::Ord>::min; Argument[self,0]; ReturnValue; value |
|
||||
| 6 | Summary: <_ as core::ops::arith::Add>::add; Argument[0].Reference; ReturnValue; taint |
|
||||
| 7 | Summary: <_ as core::ops::arith::Add>::add; Argument[0]; ReturnValue; taint |
|
||||
| 8 | Summary: <alloc::boxed::Box>::into_pin; Argument[0]; ReturnValue.Field[core::pin::Pin::pointer]; value |
|
||||
| 9 | Summary: <alloc::boxed::Box>::new; Argument[0]; ReturnValue.Field[alloc::boxed::Box(0)]; value |
|
||||
| 10 | Summary: <alloc::boxed::Box>::pin; Argument[0]; ReturnValue.Field[core::pin::Pin::pointer].Field[alloc::boxed::Box(0)]; value |
|
||||
| 11 | Summary: <core::i64 as core::clone::Clone>::clone; Argument[self].Reference; ReturnValue; value |
|
||||
| 12 | Summary: <core::i64 as core::clone::Clone>::clone; Argument[self]; ReturnValue; value |
|
||||
| 13 | Summary: <core::option::Option>::map_or; Argument[1].ReturnValue; ReturnValue; value |
|
||||
| 14 | Summary: <core::option::Option>::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value |
|
||||
| 15 | Summary: <core::option::Option>::zip; Argument[0].Field[core::option::Option::Some(0)]; ReturnValue.Field[core::option::Option::Some(0)].Field[1]; value |
|
||||
| 16 | Summary: <core::pin::Pin as core::ops::deref::Deref>::deref; Argument[self].Reference.Field[core::pin::Pin::pointer].Field[alloc::boxed::Box(0)]; ReturnValue.Reference; value |
|
||||
| 17 | Summary: <core::pin::Pin as core::ops::deref::Deref>::deref; Argument[self].Reference.Field[core::pin::Pin::pointer].Reference; ReturnValue.Reference; value |
|
||||
| 18 | Summary: <core::pin::Pin>::into_inner; Argument[0].Field[core::pin::Pin::pointer]; ReturnValue; value |
|
||||
| 19 | Summary: <core::pin::Pin>::into_inner_unchecked; Argument[0].Field[core::pin::Pin::pointer]; ReturnValue; value |
|
||||
| 20 | Summary: <core::pin::Pin>::new; Argument[0].Reference; ReturnValue; value |
|
||||
| 21 | Summary: <core::pin::Pin>::new; Argument[0]; ReturnValue.Field[core::pin::Pin::pointer]; value |
|
||||
| 22 | Summary: <core::pin::Pin>::new_unchecked; Argument[0]; ReturnValue.Field[core::pin::Pin::pointer]; value |
|
||||
| 23 | Summary: <core::result::Result>::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value |
|
||||
| 24 | Summary: core::ptr::read; Argument[0].Reference; ReturnValue; value |
|
||||
| 25 | Summary: core::ptr::write; Argument[1]; Argument[0].Reference; value |
|
||||
| 6 | Summary: <_ as core::ops::arith::Add>::add; Argument[self,0]; ReturnValue; taint |
|
||||
| 7 | Summary: <alloc::boxed::Box>::into_pin; Argument[0]; ReturnValue.Field[core::pin::Pin::pointer]; value |
|
||||
| 8 | Summary: <alloc::boxed::Box>::new; Argument[0]; ReturnValue.Field[alloc::boxed::Box(0)]; value |
|
||||
| 9 | Summary: <alloc::boxed::Box>::pin; Argument[0]; ReturnValue.Field[core::pin::Pin::pointer].Field[alloc::boxed::Box(0)]; value |
|
||||
| 10 | Summary: <core::i64 as core::clone::Clone>::clone; Argument[self].Reference; ReturnValue; value |
|
||||
| 11 | Summary: <core::i64 as core::clone::Clone>::clone; Argument[self]; ReturnValue; value |
|
||||
| 12 | Summary: <core::option::Option>::map_or; Argument[1].ReturnValue; ReturnValue; value |
|
||||
| 13 | Summary: <core::option::Option>::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value |
|
||||
| 14 | Summary: <core::option::Option>::zip; Argument[0].Field[core::option::Option::Some(0)]; ReturnValue.Field[core::option::Option::Some(0)].Field[1]; value |
|
||||
| 15 | Summary: <core::pin::Pin as core::ops::deref::Deref>::deref; Argument[self].Reference.Field[core::pin::Pin::pointer].Field[alloc::boxed::Box(0)]; ReturnValue.Reference; value |
|
||||
| 16 | Summary: <core::pin::Pin as core::ops::deref::Deref>::deref; Argument[self].Reference.Field[core::pin::Pin::pointer].Reference; ReturnValue.Reference; value |
|
||||
| 17 | Summary: <core::pin::Pin>::into_inner; Argument[0].Field[core::pin::Pin::pointer]; ReturnValue; value |
|
||||
| 18 | Summary: <core::pin::Pin>::into_inner_unchecked; Argument[0].Field[core::pin::Pin::pointer]; ReturnValue; value |
|
||||
| 19 | Summary: <core::pin::Pin>::new; Argument[0].Reference; ReturnValue; value |
|
||||
| 20 | Summary: <core::pin::Pin>::new; Argument[0]; ReturnValue.Field[core::pin::Pin::pointer]; value |
|
||||
| 21 | Summary: <core::pin::Pin>::new_unchecked; Argument[0]; ReturnValue.Field[core::pin::Pin::pointer]; value |
|
||||
| 22 | Summary: <core::result::Result>::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value |
|
||||
| 23 | Summary: core::ptr::read; Argument[0].Reference; ReturnValue; value |
|
||||
| 24 | Summary: core::ptr::write; Argument[1]; Argument[0].Reference; value |
|
||||
edges
|
||||
| main.rs:12:9:12:9 | a [Some] | main.rs:13:10:13:10 | a [Some] | provenance | |
|
||||
| main.rs:12:9:12:9 | a [Some] | main.rs:14:13:14:13 | a [Some] | provenance | |
|
||||
| main.rs:12:13:12:28 | Some(...) [Some] | main.rs:12:9:12:9 | a [Some] | provenance | |
|
||||
| main.rs:12:18:12:27 | source(...) | main.rs:12:13:12:28 | Some(...) [Some] | provenance | |
|
||||
| main.rs:13:10:13:10 | a [Some] | main.rs:13:10:13:19 | a.unwrap() | provenance | MaD:14 |
|
||||
| main.rs:13:10:13:10 | a [Some] | main.rs:13:10:13:19 | a.unwrap() | provenance | MaD:13 |
|
||||
| main.rs:14:9:14:9 | b [Some] | main.rs:15:10:15:10 | b [Some] | provenance | |
|
||||
| main.rs:14:13:14:13 | a [Some] | main.rs:14:13:14:21 | a.clone() [Some] | provenance | MaD:2 |
|
||||
| main.rs:14:13:14:21 | a.clone() [Some] | main.rs:14:9:14:9 | b [Some] | provenance | |
|
||||
| main.rs:15:10:15:10 | b [Some] | main.rs:15:10:15:19 | b.unwrap() | provenance | MaD:14 |
|
||||
| main.rs:15:10:15:10 | b [Some] | main.rs:15:10:15:19 | b.unwrap() | provenance | MaD:13 |
|
||||
| main.rs:19:9:19:9 | a [Ok] | main.rs:20:10:20:10 | a [Ok] | provenance | |
|
||||
| main.rs:19:9:19:9 | a [Ok] | main.rs:21:13:21:13 | a [Ok] | provenance | |
|
||||
| main.rs:19:31:19:44 | Ok(...) [Ok] | main.rs:19:9:19:9 | a [Ok] | provenance | |
|
||||
| main.rs:19:34:19:43 | source(...) | main.rs:19:31:19:44 | Ok(...) [Ok] | provenance | |
|
||||
| main.rs:20:10:20:10 | a [Ok] | main.rs:20:10:20:19 | a.unwrap() | provenance | MaD:23 |
|
||||
| main.rs:20:10:20:10 | a [Ok] | main.rs:20:10:20:19 | a.unwrap() | provenance | MaD:22 |
|
||||
| main.rs:21:9:21:9 | b [Ok] | main.rs:22:10:22:10 | b [Ok] | provenance | |
|
||||
| main.rs:21:13:21:13 | a [Ok] | main.rs:21:13:21:21 | a.clone() [Ok] | provenance | MaD:2 |
|
||||
| main.rs:21:13:21:21 | a.clone() [Ok] | main.rs:21:9:21:9 | b [Ok] | provenance | |
|
||||
| main.rs:22:10:22:10 | b [Ok] | main.rs:22:10:22:19 | b.unwrap() | provenance | MaD:23 |
|
||||
| main.rs:22:10:22:10 | b [Ok] | main.rs:22:10:22:19 | b.unwrap() | provenance | MaD:22 |
|
||||
| main.rs:26:9:26:9 | a | main.rs:27:10:27:10 | a | provenance | |
|
||||
| main.rs:26:9:26:9 | a | main.rs:28:13:28:13 | a | provenance | |
|
||||
| main.rs:26:13:26:22 | source(...) | main.rs:26:9:26:9 | a | provenance | |
|
||||
| main.rs:28:9:28:9 | b | main.rs:29:10:29:10 | b | provenance | |
|
||||
| main.rs:28:9:28:9 | b [&ref] | main.rs:29:10:29:10 | b | provenance | |
|
||||
| main.rs:28:13:28:13 | a | main.rs:28:13:28:21 | a.clone() | provenance | MaD:2 |
|
||||
| main.rs:28:13:28:13 | a | main.rs:28:13:28:21 | a.clone() | provenance | MaD:11 |
|
||||
| main.rs:28:13:28:13 | a | main.rs:28:13:28:21 | a.clone() [&ref] | provenance | MaD:12 |
|
||||
| main.rs:28:13:28:13 | a | main.rs:28:13:28:21 | a.clone() | provenance | MaD:10 |
|
||||
| main.rs:28:13:28:13 | a | main.rs:28:13:28:21 | a.clone() [&ref] | provenance | MaD:11 |
|
||||
| main.rs:28:13:28:21 | a.clone() | main.rs:28:9:28:9 | b | provenance | |
|
||||
| main.rs:28:13:28:21 | a.clone() [&ref] | main.rs:28:9:28:9 | b [&ref] | provenance | |
|
||||
| main.rs:43:18:43:22 | SelfParam [&ref, Wrapper] | main.rs:44:26:44:31 | self.n | provenance | |
|
||||
@@ -75,19 +74,18 @@ edges
|
||||
| main.rs:66:22:66:31 | source(...) | main.rs:66:17:66:32 | Some(...) [Some] | provenance | |
|
||||
| main.rs:67:13:67:13 | z [Some, tuple.1] | main.rs:68:15:68:15 | z [Some, tuple.1] | provenance | |
|
||||
| main.rs:67:17:67:24 | a.zip(...) [Some, tuple.1] | main.rs:67:13:67:13 | z [Some, tuple.1] | provenance | |
|
||||
| main.rs:67:23:67:23 | b [Some] | main.rs:67:17:67:24 | a.zip(...) [Some, tuple.1] | provenance | MaD:15 |
|
||||
| main.rs:67:23:67:23 | b [Some] | main.rs:67:17:67:24 | a.zip(...) [Some, tuple.1] | provenance | MaD:14 |
|
||||
| main.rs:68:15:68:15 | z [Some, tuple.1] | main.rs:69:13:69:24 | Some(...) [Some, tuple.1] | provenance | |
|
||||
| main.rs:69:13:69:24 | Some(...) [Some, tuple.1] | main.rs:69:18:69:23 | TuplePat [tuple.1] | provenance | |
|
||||
| main.rs:69:18:69:23 | TuplePat [tuple.1] | main.rs:69:22:69:22 | m | provenance | |
|
||||
| main.rs:69:22:69:22 | m | main.rs:71:22:71:22 | m | provenance | |
|
||||
| main.rs:79:13:79:13 | b | main.rs:80:14:80:14 | b | provenance | |
|
||||
| main.rs:79:17:79:47 | a.map_or(...) | main.rs:79:13:79:13 | b | provenance | |
|
||||
| main.rs:79:33:79:46 | ... + ... | main.rs:79:17:79:47 | a.map_or(...) | provenance | MaD:13 |
|
||||
| main.rs:79:33:79:46 | ... + ... | main.rs:79:17:79:47 | a.map_or(...) | provenance | MaD:12 |
|
||||
| main.rs:79:37:79:46 | source(...) | main.rs:79:33:79:46 | ... + ... | provenance | MaD:6 |
|
||||
| main.rs:79:37:79:46 | source(...) | main.rs:79:33:79:46 | ... + ... | provenance | MaD:7 |
|
||||
| main.rs:92:29:92:29 | [post] y [&ref] | main.rs:93:33:93:33 | y [&ref] | provenance | |
|
||||
| main.rs:92:32:92:41 | source(...) | main.rs:92:29:92:29 | [post] y [&ref] | provenance | MaD:25 |
|
||||
| main.rs:93:33:93:33 | y [&ref] | main.rs:93:18:93:34 | ...::read(...) | provenance | MaD:24 |
|
||||
| main.rs:92:32:92:41 | source(...) | main.rs:92:29:92:29 | [post] y [&ref] | provenance | MaD:24 |
|
||||
| main.rs:93:33:93:33 | y [&ref] | main.rs:93:18:93:34 | ...::read(...) | provenance | MaD:23 |
|
||||
| main.rs:108:13:108:17 | mut i | main.rs:109:34:109:34 | i | provenance | |
|
||||
| main.rs:108:13:108:17 | mut i | main.rs:110:33:110:33 | i | provenance | |
|
||||
| main.rs:108:13:108:17 | mut i | main.rs:111:47:111:47 | i | provenance | |
|
||||
@@ -100,51 +98,51 @@ edges
|
||||
| main.rs:109:13:109:20 | mut pin1 [Pin, &ref] | main.rs:115:31:115:34 | pin1 [Pin, &ref] | provenance | |
|
||||
| main.rs:109:24:109:35 | ...::new(...) | main.rs:109:13:109:20 | mut pin1 | provenance | |
|
||||
| main.rs:109:24:109:35 | ...::new(...) [Pin, &ref] | main.rs:109:13:109:20 | mut pin1 [Pin, &ref] | provenance | |
|
||||
| main.rs:109:33:109:34 | &i [&ref] | main.rs:109:24:109:35 | ...::new(...) | provenance | MaD:20 |
|
||||
| main.rs:109:33:109:34 | &i [&ref] | main.rs:109:24:109:35 | ...::new(...) [Pin, &ref] | provenance | MaD:21 |
|
||||
| main.rs:109:33:109:34 | &i [&ref] | main.rs:109:24:109:35 | ...::new(...) | provenance | MaD:19 |
|
||||
| main.rs:109:33:109:34 | &i [&ref] | main.rs:109:24:109:35 | ...::new(...) [Pin, &ref] | provenance | MaD:20 |
|
||||
| main.rs:109:34:109:34 | i | main.rs:109:33:109:34 | &i [&ref] | provenance | |
|
||||
| main.rs:110:13:110:20 | mut pin2 [Pin, Box(0)] | main.rs:116:15:116:18 | pin2 [Pin, Box(0)] | provenance | |
|
||||
| main.rs:110:24:110:34 | ...::pin(...) [Pin, Box(0)] | main.rs:110:13:110:20 | mut pin2 [Pin, Box(0)] | provenance | |
|
||||
| main.rs:110:33:110:33 | i | main.rs:110:24:110:34 | ...::pin(...) [Pin, Box(0)] | provenance | MaD:10 |
|
||||
| main.rs:110:33:110:33 | i | main.rs:110:24:110:34 | ...::pin(...) [Pin, Box(0)] | provenance | MaD:9 |
|
||||
| main.rs:111:13:111:20 | mut pin3 [Pin, Box(0)] | main.rs:117:15:117:18 | pin3 [Pin, Box(0)] | provenance | |
|
||||
| main.rs:111:24:111:49 | ...::into_pin(...) [Pin, Box(0)] | main.rs:111:13:111:20 | mut pin3 [Pin, Box(0)] | provenance | |
|
||||
| main.rs:111:38:111:48 | ...::new(...) [Box(0)] | main.rs:111:24:111:49 | ...::into_pin(...) [Pin, Box(0)] | provenance | MaD:8 |
|
||||
| main.rs:111:47:111:47 | i | main.rs:111:38:111:48 | ...::new(...) [Box(0)] | provenance | MaD:9 |
|
||||
| main.rs:111:38:111:48 | ...::new(...) [Box(0)] | main.rs:111:24:111:49 | ...::into_pin(...) [Pin, Box(0)] | provenance | MaD:7 |
|
||||
| main.rs:111:47:111:47 | i | main.rs:111:38:111:48 | ...::new(...) [Box(0)] | provenance | MaD:8 |
|
||||
| main.rs:112:13:112:20 | mut pin4 [Pin, &ref] | main.rs:118:15:118:18 | pin4 [Pin, &ref] | provenance | |
|
||||
| main.rs:112:24:112:27 | &mut pinned [&ref] | main.rs:112:24:112:27 | ...::new_unchecked(...) [Pin, &ref] | provenance | MaD:22 |
|
||||
| main.rs:112:24:112:27 | &mut pinned [&ref] | main.rs:112:24:112:27 | ...::new_unchecked(...) [Pin, &ref] | provenance | MaD:21 |
|
||||
| main.rs:112:24:112:27 | ...::new_unchecked(...) [Pin, &ref] | main.rs:112:13:112:20 | mut pin4 [Pin, &ref] | provenance | |
|
||||
| main.rs:112:24:112:27 | mut pinned | main.rs:112:24:112:27 | pinned | provenance | |
|
||||
| main.rs:112:24:112:27 | pinned | main.rs:112:24:112:27 | &mut pinned [&ref] | provenance | |
|
||||
| main.rs:114:15:114:18 | pin1 | main.rs:114:14:114:18 | * ... | provenance | MaD:15 |
|
||||
| main.rs:114:15:114:18 | pin1 | main.rs:114:14:114:18 | * ... | provenance | MaD:16 |
|
||||
| main.rs:114:15:114:18 | pin1 | main.rs:114:14:114:18 | * ... | provenance | MaD:17 |
|
||||
| main.rs:114:15:114:18 | pin1 [Pin, &ref] | main.rs:114:14:114:18 | * ... | provenance | MaD:17 |
|
||||
| main.rs:114:15:114:18 | pin1 [Pin, &ref] | main.rs:114:14:114:18 | * ... | provenance | MaD:16 |
|
||||
| main.rs:115:15:115:35 | ...::into_inner(...) | main.rs:115:14:115:35 | * ... | provenance | MaD:1 |
|
||||
| main.rs:115:15:115:35 | ...::into_inner(...) [&ref] | main.rs:115:14:115:35 | * ... | provenance | MaD:1 |
|
||||
| main.rs:115:31:115:34 | pin1 | main.rs:115:15:115:35 | ...::into_inner(...) | provenance | MaD:18 |
|
||||
| main.rs:115:31:115:34 | pin1 [Pin, &ref] | main.rs:115:15:115:35 | ...::into_inner(...) [&ref] | provenance | MaD:18 |
|
||||
| main.rs:116:15:116:18 | pin2 [Pin, Box(0)] | main.rs:116:14:116:18 | * ... | provenance | MaD:16 |
|
||||
| main.rs:117:15:117:18 | pin3 [Pin, Box(0)] | main.rs:117:14:117:18 | * ... | provenance | MaD:16 |
|
||||
| main.rs:118:15:118:18 | pin4 [Pin, &ref] | main.rs:118:14:118:18 | * ... | provenance | MaD:17 |
|
||||
| main.rs:115:31:115:34 | pin1 | main.rs:115:15:115:35 | ...::into_inner(...) | provenance | MaD:17 |
|
||||
| main.rs:115:31:115:34 | pin1 [Pin, &ref] | main.rs:115:15:115:35 | ...::into_inner(...) [&ref] | provenance | MaD:17 |
|
||||
| main.rs:116:15:116:18 | pin2 [Pin, Box(0)] | main.rs:116:14:116:18 | * ... | provenance | MaD:15 |
|
||||
| main.rs:117:15:117:18 | pin3 [Pin, Box(0)] | main.rs:117:14:117:18 | * ... | provenance | MaD:15 |
|
||||
| main.rs:118:15:118:18 | pin4 [Pin, &ref] | main.rs:118:14:118:18 | * ... | provenance | MaD:16 |
|
||||
| main.rs:122:13:122:18 | mut ms [MyStruct] | main.rs:123:34:123:35 | ms [MyStruct] | provenance | |
|
||||
| main.rs:122:13:122:18 | mut ms [MyStruct] | main.rs:127:14:127:15 | ms [MyStruct] | provenance | |
|
||||
| main.rs:122:22:122:49 | MyStruct {...} [MyStruct] | main.rs:122:13:122:18 | mut ms [MyStruct] | provenance | |
|
||||
| main.rs:122:38:122:47 | source(...) | main.rs:122:22:122:49 | MyStruct {...} [MyStruct] | provenance | |
|
||||
| main.rs:123:13:123:20 | mut pin1 [Pin, &ref, MyStruct] | main.rs:129:30:129:33 | pin1 [Pin, &ref, MyStruct] | provenance | |
|
||||
| main.rs:123:24:123:36 | ...::new(...) [Pin, &ref, MyStruct] | main.rs:123:13:123:20 | mut pin1 [Pin, &ref, MyStruct] | provenance | |
|
||||
| main.rs:123:33:123:35 | &ms [&ref, MyStruct] | main.rs:123:24:123:36 | ...::new(...) [Pin, &ref, MyStruct] | provenance | MaD:21 |
|
||||
| main.rs:123:33:123:35 | &ms [&ref, MyStruct] | main.rs:123:24:123:36 | ...::new(...) [Pin, &ref, MyStruct] | provenance | MaD:20 |
|
||||
| main.rs:123:34:123:35 | ms [MyStruct] | main.rs:123:33:123:35 | &ms [&ref, MyStruct] | provenance | |
|
||||
| main.rs:127:14:127:15 | ms [MyStruct] | main.rs:127:14:127:19 | ms.val | provenance | |
|
||||
| main.rs:129:14:129:34 | ...::into_inner(...) [&ref, MyStruct] | main.rs:129:14:129:38 | ... .val | provenance | |
|
||||
| main.rs:129:30:129:33 | pin1 [Pin, &ref, MyStruct] | main.rs:129:14:129:34 | ...::into_inner(...) [&ref, MyStruct] | provenance | MaD:18 |
|
||||
| main.rs:129:30:129:33 | pin1 [Pin, &ref, MyStruct] | main.rs:129:14:129:34 | ...::into_inner(...) [&ref, MyStruct] | provenance | MaD:17 |
|
||||
| main.rs:136:13:136:18 | mut ms [MyStruct] | main.rs:137:44:137:45 | ms [MyStruct] | provenance | |
|
||||
| main.rs:136:22:136:49 | MyStruct {...} [MyStruct] | main.rs:136:13:136:18 | mut ms [MyStruct] | provenance | |
|
||||
| main.rs:136:38:136:47 | source(...) | main.rs:136:22:136:49 | MyStruct {...} [MyStruct] | provenance | |
|
||||
| main.rs:137:13:137:20 | mut pin5 [Pin, &ref, MyStruct] | main.rs:139:40:139:43 | pin5 [Pin, &ref, MyStruct] | provenance | |
|
||||
| main.rs:137:24:137:46 | ...::new_unchecked(...) [Pin, &ref, MyStruct] | main.rs:137:13:137:20 | mut pin5 [Pin, &ref, MyStruct] | provenance | |
|
||||
| main.rs:137:43:137:45 | &ms [&ref, MyStruct] | main.rs:137:24:137:46 | ...::new_unchecked(...) [Pin, &ref, MyStruct] | provenance | MaD:22 |
|
||||
| main.rs:137:43:137:45 | &ms [&ref, MyStruct] | main.rs:137:24:137:46 | ...::new_unchecked(...) [Pin, &ref, MyStruct] | provenance | MaD:21 |
|
||||
| main.rs:137:44:137:45 | ms [MyStruct] | main.rs:137:43:137:45 | &ms [&ref, MyStruct] | provenance | |
|
||||
| main.rs:139:14:139:44 | ...::into_inner_unchecked(...) [&ref, MyStruct] | main.rs:139:14:139:48 | ... .val | provenance | |
|
||||
| main.rs:139:40:139:43 | pin5 [Pin, &ref, MyStruct] | main.rs:139:14:139:44 | ...::into_inner_unchecked(...) [&ref, MyStruct] | provenance | MaD:19 |
|
||||
| main.rs:139:40:139:43 | pin5 [Pin, &ref, MyStruct] | main.rs:139:14:139:44 | ...::into_inner_unchecked(...) [&ref, MyStruct] | provenance | MaD:18 |
|
||||
| main.rs:153:9:153:9 | a | main.rs:155:13:155:13 | a | provenance | |
|
||||
| main.rs:153:13:153:22 | source(...) | main.rs:153:9:153:9 | a | provenance | |
|
||||
| main.rs:154:9:154:9 | b | main.rs:155:19:155:19 | b | provenance | |
|
||||
|
||||
@@ -9,8 +9,8 @@ models
|
||||
| 8 | Source: <mysql_common::row::Row>::get_opt; ReturnValue.Field[core::option::Option::Some(0)].Field[core::result::Result::Ok(0)]; database |
|
||||
| 9 | Source: <mysql_common::row::Row>::take; ReturnValue.Field[core::option::Option::Some(0)]; database |
|
||||
| 10 | Source: <mysql_common::row::Row>::take_opt; ReturnValue.Field[core::option::Option::Some(0)].Field[core::result::Result::Ok(0)]; database |
|
||||
| 11 | Summary: <_ as core::ops::arith::Add>::add; Argument[0].Reference; ReturnValue; taint |
|
||||
| 12 | Summary: <_ as core::ops::arith::Add>::add; Argument[0]; ReturnValue; taint |
|
||||
| 11 | Summary: <_ as core::ops::arith::Add>::add; Argument[self,0].Field[core::num::wrapping::Wrapping(0)]; ReturnValue.Field[core::num::wrapping::Wrapping(0)]; taint |
|
||||
| 12 | Summary: <_ as core::ops::arith::Add>::add; Argument[self,0]; ReturnValue; taint |
|
||||
| 13 | Summary: <_ as mysql::conn::queryable::Queryable>::query_fold; Argument[2].ReturnValue; ReturnValue.Field[core::result::Result::Ok(0)]; value |
|
||||
| 14 | Summary: <_ as mysql_async::queryable::Queryable>::query_fold; Argument[2].ReturnValue; ReturnValue.Future.Field[core::result::Result::Ok(0)]; value |
|
||||
| 15 | Summary: <core::option::Option>::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value |
|
||||
@@ -54,15 +54,20 @@ edges
|
||||
| test.rs:57:14:57:39 | ...: ... | test.rs:59:22:59:29 | values.1 | provenance | |
|
||||
| test.rs:57:14:57:39 | ...: ... | test.rs:60:22:60:29 | values.2 | provenance | |
|
||||
| test.rs:64:13:64:17 | total | test.rs:68:14:68:18 | total | provenance | |
|
||||
| test.rs:64:13:64:17 | total [Wrapping] | test.rs:68:14:68:18 | total | provenance | |
|
||||
| test.rs:64:21:67:10 | conn.query_fold(...) [Ok, Wrapping] | test.rs:64:21:67:11 | TryExpr [Wrapping] | provenance | |
|
||||
| test.rs:64:21:67:10 | conn.query_fold(...) [Ok] | test.rs:64:21:67:11 | TryExpr | provenance | |
|
||||
| test.rs:64:21:67:11 | TryExpr | test.rs:64:13:64:17 | total | provenance | |
|
||||
| test.rs:64:21:67:11 | TryExpr [Wrapping] | test.rs:64:13:64:17 | total [Wrapping] | provenance | |
|
||||
| test.rs:64:26:64:35 | query_fold | test.rs:64:76:64:83 | ...: i64 | provenance | Src:MaD:2 |
|
||||
| test.rs:64:76:64:83 | ...: i64 | test.rs:65:18:65:20 | row | provenance | |
|
||||
| test.rs:64:76:64:83 | ...: i64 | test.rs:66:19:66:21 | row | provenance | |
|
||||
| test.rs:64:86:67:9 | { ... } | test.rs:64:21:67:10 | conn.query_fold(...) [Ok] | provenance | MaD:13 |
|
||||
| test.rs:64:86:67:9 | { ... } [Wrapping] | test.rs:64:21:67:10 | conn.query_fold(...) [Ok, Wrapping] | provenance | MaD:13 |
|
||||
| test.rs:66:13:66:21 | ... + ... | test.rs:64:86:67:9 | { ... } | provenance | |
|
||||
| test.rs:66:19:66:21 | row | test.rs:66:13:66:21 | ... + ... | provenance | MaD:11 |
|
||||
| test.rs:66:13:66:21 | ... + ... [Wrapping] | test.rs:64:86:67:9 | { ... } [Wrapping] | provenance | |
|
||||
| test.rs:66:19:66:21 | row | test.rs:66:13:66:21 | ... + ... | provenance | MaD:12 |
|
||||
| test.rs:66:19:66:21 | row | test.rs:66:13:66:21 | ... + ... [Wrapping] | provenance | MaD:11 |
|
||||
| test.rs:70:22:70:31 | query_fold | test.rs:70:83:70:105 | ...: ... | provenance | Src:MaD:2 |
|
||||
| test.rs:70:83:70:105 | ...: ... | test.rs:71:17:71:18 | id | provenance | |
|
||||
| test.rs:70:83:70:105 | ...: ... | test.rs:72:17:72:20 | name | provenance | |
|
||||
@@ -95,16 +100,22 @@ edges
|
||||
| test.rs:144:14:144:39 | ...: ... | test.rs:146:22:146:29 | values.1 | provenance | |
|
||||
| test.rs:144:14:144:39 | ...: ... | test.rs:147:22:147:29 | values.2 | provenance | |
|
||||
| test.rs:151:13:151:17 | total | test.rs:155:14:155:18 | total | provenance | |
|
||||
| test.rs:151:13:151:17 | total [Wrapping] | test.rs:155:14:155:18 | total | provenance | |
|
||||
| test.rs:151:21:154:10 | conn.query_fold(...) [future, Ok, Wrapping] | test.rs:151:21:154:16 | await ... [Ok, Wrapping] | provenance | |
|
||||
| test.rs:151:21:154:10 | conn.query_fold(...) [future, Ok] | test.rs:151:21:154:16 | await ... [Ok] | provenance | |
|
||||
| test.rs:151:21:154:16 | await ... [Ok, Wrapping] | test.rs:151:21:154:17 | TryExpr [Wrapping] | provenance | |
|
||||
| test.rs:151:21:154:16 | await ... [Ok] | test.rs:151:21:154:17 | TryExpr | provenance | |
|
||||
| test.rs:151:21:154:17 | TryExpr | test.rs:151:13:151:17 | total | provenance | |
|
||||
| test.rs:151:21:154:17 | TryExpr [Wrapping] | test.rs:151:13:151:17 | total [Wrapping] | provenance | |
|
||||
| test.rs:151:26:151:35 | query_fold | test.rs:151:76:151:83 | ...: i64 | provenance | Src:MaD:4 |
|
||||
| test.rs:151:76:151:83 | ...: i64 | test.rs:152:18:152:20 | row | provenance | |
|
||||
| test.rs:151:76:151:83 | ...: i64 | test.rs:153:19:153:21 | row | provenance | |
|
||||
| test.rs:151:86:154:9 | { ... } | test.rs:151:21:154:10 | conn.query_fold(...) [future, Ok] | provenance | MaD:14 |
|
||||
| test.rs:151:86:154:9 | { ... } [Wrapping] | test.rs:151:21:154:10 | conn.query_fold(...) [future, Ok, Wrapping] | provenance | MaD:14 |
|
||||
| test.rs:153:13:153:21 | ... + ... | test.rs:151:86:154:9 | { ... } | provenance | |
|
||||
| test.rs:153:19:153:21 | row | test.rs:153:13:153:21 | ... + ... | provenance | MaD:11 |
|
||||
| test.rs:153:13:153:21 | ... + ... [Wrapping] | test.rs:151:86:154:9 | { ... } [Wrapping] | provenance | |
|
||||
| test.rs:153:19:153:21 | row | test.rs:153:13:153:21 | ... + ... | provenance | MaD:12 |
|
||||
| test.rs:153:19:153:21 | row | test.rs:153:13:153:21 | ... + ... [Wrapping] | provenance | MaD:11 |
|
||||
| test.rs:157:22:157:31 | query_fold | test.rs:157:83:157:105 | ...: ... | provenance | Src:MaD:4 |
|
||||
| test.rs:157:83:157:105 | ...: ... | test.rs:158:17:158:18 | id | provenance | |
|
||||
| test.rs:157:83:157:105 | ...: ... | test.rs:159:17:159:20 | name | provenance | |
|
||||
@@ -160,13 +171,18 @@ nodes
|
||||
| test.rs:59:22:59:29 | values.1 | semmle.label | values.1 |
|
||||
| test.rs:60:22:60:29 | values.2 | semmle.label | values.2 |
|
||||
| test.rs:64:13:64:17 | total | semmle.label | total |
|
||||
| test.rs:64:13:64:17 | total [Wrapping] | semmle.label | total [Wrapping] |
|
||||
| test.rs:64:21:67:10 | conn.query_fold(...) [Ok, Wrapping] | semmle.label | conn.query_fold(...) [Ok, Wrapping] |
|
||||
| test.rs:64:21:67:10 | conn.query_fold(...) [Ok] | semmle.label | conn.query_fold(...) [Ok] |
|
||||
| test.rs:64:21:67:11 | TryExpr | semmle.label | TryExpr |
|
||||
| test.rs:64:21:67:11 | TryExpr [Wrapping] | semmle.label | TryExpr [Wrapping] |
|
||||
| test.rs:64:26:64:35 | query_fold | semmle.label | query_fold |
|
||||
| test.rs:64:76:64:83 | ...: i64 | semmle.label | ...: i64 |
|
||||
| test.rs:64:86:67:9 | { ... } | semmle.label | { ... } |
|
||||
| test.rs:64:86:67:9 | { ... } [Wrapping] | semmle.label | { ... } [Wrapping] |
|
||||
| test.rs:65:18:65:20 | row | semmle.label | row |
|
||||
| test.rs:66:13:66:21 | ... + ... | semmle.label | ... + ... |
|
||||
| test.rs:66:13:66:21 | ... + ... [Wrapping] | semmle.label | ... + ... [Wrapping] |
|
||||
| test.rs:66:19:66:21 | row | semmle.label | row |
|
||||
| test.rs:68:14:68:18 | total | semmle.label | total |
|
||||
| test.rs:70:22:70:31 | query_fold | semmle.label | query_fold |
|
||||
@@ -208,14 +224,20 @@ nodes
|
||||
| test.rs:146:22:146:29 | values.1 | semmle.label | values.1 |
|
||||
| test.rs:147:22:147:29 | values.2 | semmle.label | values.2 |
|
||||
| test.rs:151:13:151:17 | total | semmle.label | total |
|
||||
| test.rs:151:13:151:17 | total [Wrapping] | semmle.label | total [Wrapping] |
|
||||
| test.rs:151:21:154:10 | conn.query_fold(...) [future, Ok, Wrapping] | semmle.label | conn.query_fold(...) [future, Ok, Wrapping] |
|
||||
| test.rs:151:21:154:10 | conn.query_fold(...) [future, Ok] | semmle.label | conn.query_fold(...) [future, Ok] |
|
||||
| test.rs:151:21:154:16 | await ... [Ok, Wrapping] | semmle.label | await ... [Ok, Wrapping] |
|
||||
| test.rs:151:21:154:16 | await ... [Ok] | semmle.label | await ... [Ok] |
|
||||
| test.rs:151:21:154:17 | TryExpr | semmle.label | TryExpr |
|
||||
| test.rs:151:21:154:17 | TryExpr [Wrapping] | semmle.label | TryExpr [Wrapping] |
|
||||
| test.rs:151:26:151:35 | query_fold | semmle.label | query_fold |
|
||||
| test.rs:151:76:151:83 | ...: i64 | semmle.label | ...: i64 |
|
||||
| test.rs:151:86:154:9 | { ... } | semmle.label | { ... } |
|
||||
| test.rs:151:86:154:9 | { ... } [Wrapping] | semmle.label | { ... } [Wrapping] |
|
||||
| test.rs:152:18:152:20 | row | semmle.label | row |
|
||||
| test.rs:153:13:153:21 | ... + ... | semmle.label | ... + ... |
|
||||
| test.rs:153:13:153:21 | ... + ... [Wrapping] | semmle.label | ... + ... [Wrapping] |
|
||||
| test.rs:153:19:153:21 | row | semmle.label | row |
|
||||
| test.rs:155:14:155:18 | total | semmle.label | total |
|
||||
| test.rs:157:22:157:31 | query_fold | semmle.label | query_fold |
|
||||
|
||||
@@ -1,43 +1,71 @@
|
||||
| main.rs:8:20:8:20 | s | main.rs:8:14:8:20 | FormatArgsExpr |
|
||||
| main.rs:16:5:16:5 | [post] b [implicit borrow] | main.rs:16:5:16:5 | [SSA] b |
|
||||
| main.rs:20:5:20:5 | [post] c [implicit borrow] | main.rs:20:5:20:5 | [SSA] c |
|
||||
| main.rs:31:13:31:13 | a | main.rs:31:13:31:19 | a as u8 |
|
||||
| main.rs:32:10:32:10 | b | main.rs:32:10:32:17 | b as i64 |
|
||||
| main.rs:32:10:32:17 | [post] b as i64 | main.rs:32:10:32:10 | [post] b |
|
||||
| main.rs:37:23:37:23 | i | main.rs:37:17:37:23 | FormatArgsExpr |
|
||||
| main.rs:41:24:41:24 | s | main.rs:41:18:41:24 | FormatArgsExpr |
|
||||
| main.rs:46:23:46:23 | [post] s [implicit borrow] | main.rs:46:23:46:23 | [post] s |
|
||||
| main.rs:46:23:46:23 | s | main.rs:46:23:46:29 | s[...] |
|
||||
| main.rs:46:23:46:29 | s[...] [pre-dereferenced] | main.rs:46:23:46:29 | s[...] |
|
||||
| main.rs:57:24:57:24 | i | main.rs:57:18:57:24 | FormatArgsExpr |
|
||||
| main.rs:62:14:62:16 | [post] arr [implicit borrow] | main.rs:62:14:62:16 | [post] arr |
|
||||
| main.rs:62:14:62:19 | arr[1] [pre-dereferenced] | main.rs:62:14:62:19 | arr[1] |
|
||||
| main.rs:72:24:72:24 | [post] s [implicit borrow] | main.rs:72:24:72:24 | [post] s |
|
||||
| main.rs:72:24:72:27 | s[1] | main.rs:72:18:72:27 | FormatArgsExpr |
|
||||
| main.rs:72:24:72:27 | s[1] [pre-dereferenced] | main.rs:72:24:72:27 | s[1] |
|
||||
| main.rs:77:9:77:12 | [post] arr2 [implicit borrow] | main.rs:77:9:77:12 | [post] arr2 |
|
||||
| main.rs:77:9:77:15 | arr2[1] [pre-dereferenced] | main.rs:77:9:77:15 | arr2[1] |
|
||||
| main.rs:98:14:98:47 | TupleExpr | main.rs:98:14:98:49 | ... .0 |
|
||||
| main.rs:99:14:99:47 | TupleExpr | main.rs:99:14:99:49 | ... .1 |
|
||||
| main.rs:102:14:102:28 | source_tuple(...) | main.rs:102:14:102:30 | ... .0 |
|
||||
| main.rs:103:14:103:28 | source_tuple(...) | main.rs:103:14:103:30 | ... .1 |
|
||||
| main.rs:106:14:106:83 | TupleExpr | main.rs:106:14:106:85 | ... .0 |
|
||||
| main.rs:107:14:107:83 | TupleExpr | main.rs:107:14:107:85 | ... .0 |
|
||||
| main.rs:107:14:107:85 | ... .0 | main.rs:107:14:107:87 | ... .0 |
|
||||
| main.rs:108:14:108:83 | TupleExpr | main.rs:108:14:108:85 | ... .0 |
|
||||
| main.rs:108:14:108:85 | ... .0 | main.rs:108:14:108:87 | ... .1 |
|
||||
| main.rs:109:14:109:83 | TupleExpr | main.rs:109:14:109:85 | ... .1 |
|
||||
| main.rs:110:14:110:83 | TupleExpr | main.rs:110:14:110:85 | ... .1 |
|
||||
| main.rs:110:14:110:85 | ... .1 | main.rs:110:14:110:87 | ... .0 |
|
||||
| main.rs:111:14:111:83 | TupleExpr | main.rs:111:14:111:85 | ... .1 |
|
||||
| main.rs:111:14:111:85 | ... .1 | main.rs:111:14:111:87 | ... .1 |
|
||||
| main.rs:114:14:114:64 | TupleExpr | main.rs:114:14:114:66 | ... .0 |
|
||||
| main.rs:115:14:115:64 | TupleExpr | main.rs:115:14:115:66 | ... .0 |
|
||||
| main.rs:115:14:115:66 | ... .0 | main.rs:115:14:115:68 | ... .0 |
|
||||
| main.rs:116:14:116:64 | TupleExpr | main.rs:116:14:116:66 | ... .0 |
|
||||
| main.rs:116:14:116:66 | ... .0 | main.rs:116:14:116:68 | ... .1 |
|
||||
| main.rs:117:14:117:64 | TupleExpr | main.rs:117:14:117:66 | ... .1 |
|
||||
| main.rs:118:14:118:64 | TupleExpr | main.rs:118:14:118:66 | ... .1 |
|
||||
| main.rs:118:14:118:66 | ... .1 | main.rs:118:14:118:68 | ... .0 |
|
||||
| main.rs:119:14:119:64 | TupleExpr | main.rs:119:14:119:66 | ... .1 |
|
||||
| main.rs:119:14:119:66 | ... .1 | main.rs:119:14:119:68 | ... .1 |
|
||||
| main.rs:17:5:17:5 | [post] b [implicit borrow] | main.rs:17:5:17:5 | [SSA] b |
|
||||
| main.rs:21:5:21:5 | [post] c [implicit borrow] | main.rs:21:5:21:5 | [SSA] c |
|
||||
| main.rs:46:13:46:13 | a | main.rs:46:13:46:19 | a as u8 |
|
||||
| main.rs:47:10:47:10 | b | main.rs:47:10:47:17 | b as i64 |
|
||||
| main.rs:47:10:47:17 | [post] b as i64 | main.rs:47:10:47:10 | [post] b |
|
||||
| main.rs:52:23:52:23 | i | main.rs:52:17:52:23 | FormatArgsExpr |
|
||||
| main.rs:56:24:56:24 | s | main.rs:56:18:56:24 | FormatArgsExpr |
|
||||
| main.rs:61:23:61:23 | [post] s [implicit borrow] | main.rs:61:23:61:23 | [post] s |
|
||||
| main.rs:61:23:61:23 | s | main.rs:61:23:61:29 | s[...] |
|
||||
| main.rs:61:23:61:29 | s[...] [pre-dereferenced] | main.rs:61:23:61:29 | s[...] |
|
||||
| main.rs:72:24:72:24 | i | main.rs:72:18:72:24 | FormatArgsExpr |
|
||||
| main.rs:77:14:77:16 | [post] arr [implicit borrow] | main.rs:77:14:77:16 | [post] arr |
|
||||
| main.rs:77:14:77:19 | arr[1] [pre-dereferenced] | main.rs:77:14:77:19 | arr[1] |
|
||||
| main.rs:87:24:87:24 | [post] s [implicit borrow] | main.rs:87:24:87:24 | [post] s |
|
||||
| main.rs:87:24:87:27 | s[1] | main.rs:87:18:87:27 | FormatArgsExpr |
|
||||
| main.rs:87:24:87:27 | s[1] [pre-dereferenced] | main.rs:87:24:87:27 | s[1] |
|
||||
| main.rs:92:9:92:12 | [post] arr2 [implicit borrow] | main.rs:92:9:92:12 | [post] arr2 |
|
||||
| main.rs:92:9:92:15 | arr2[1] [pre-dereferenced] | main.rs:92:9:92:15 | arr2[1] |
|
||||
| main.rs:113:14:113:47 | TupleExpr | main.rs:113:14:113:49 | ... .0 |
|
||||
| main.rs:114:14:114:47 | TupleExpr | main.rs:114:14:114:49 | ... .1 |
|
||||
| main.rs:117:14:117:28 | source_tuple(...) | main.rs:117:14:117:30 | ... .0 |
|
||||
| main.rs:118:14:118:28 | source_tuple(...) | main.rs:118:14:118:30 | ... .1 |
|
||||
| main.rs:121:14:121:83 | TupleExpr | main.rs:121:14:121:85 | ... .0 |
|
||||
| main.rs:122:14:122:83 | TupleExpr | main.rs:122:14:122:85 | ... .0 |
|
||||
| main.rs:122:14:122:85 | ... .0 | main.rs:122:14:122:87 | ... .0 |
|
||||
| main.rs:123:14:123:83 | TupleExpr | main.rs:123:14:123:85 | ... .0 |
|
||||
| main.rs:123:14:123:85 | ... .0 | main.rs:123:14:123:87 | ... .1 |
|
||||
| main.rs:124:14:124:83 | TupleExpr | main.rs:124:14:124:85 | ... .1 |
|
||||
| main.rs:125:14:125:83 | TupleExpr | main.rs:125:14:125:85 | ... .1 |
|
||||
| main.rs:125:14:125:85 | ... .1 | main.rs:125:14:125:87 | ... .0 |
|
||||
| main.rs:126:14:126:83 | TupleExpr | main.rs:126:14:126:85 | ... .1 |
|
||||
| main.rs:126:14:126:85 | ... .1 | main.rs:126:14:126:87 | ... .1 |
|
||||
| main.rs:129:14:129:64 | TupleExpr | main.rs:129:14:129:66 | ... .0 |
|
||||
| main.rs:130:14:130:64 | TupleExpr | main.rs:130:14:130:66 | ... .0 |
|
||||
| main.rs:130:14:130:66 | ... .0 | main.rs:130:14:130:68 | ... .0 |
|
||||
| main.rs:131:14:131:64 | TupleExpr | main.rs:131:14:131:66 | ... .0 |
|
||||
| main.rs:131:14:131:66 | ... .0 | main.rs:131:14:131:68 | ... .1 |
|
||||
| main.rs:132:14:132:64 | TupleExpr | main.rs:132:14:132:66 | ... .1 |
|
||||
| main.rs:133:14:133:64 | TupleExpr | main.rs:133:14:133:66 | ... .1 |
|
||||
| main.rs:133:14:133:66 | ... .1 | main.rs:133:14:133:68 | ... .0 |
|
||||
| main.rs:134:14:134:64 | TupleExpr | main.rs:134:14:134:66 | ... .1 |
|
||||
| main.rs:134:14:134:66 | ... .1 | main.rs:134:14:134:68 | ... .1 |
|
||||
| main.rs:170:5:170:5 | [post] a [implicit borrow] | main.rs:170:5:170:5 | [post] a |
|
||||
| main.rs:171:5:171:5 | [post] a [implicit borrow] | main.rs:171:5:171:5 | [post] a |
|
||||
| main.rs:172:5:172:5 | [post] a [implicit borrow] | main.rs:172:5:172:5 | [post] a |
|
||||
| main.rs:173:5:173:5 | [post] a [implicit borrow] | main.rs:173:5:173:5 | [post] a |
|
||||
| main.rs:174:5:174:5 | [post] a [implicit borrow] | main.rs:174:5:174:5 | [post] a |
|
||||
| main.rs:175:5:175:5 | [post] a [implicit borrow] | main.rs:175:5:175:5 | [post] a |
|
||||
| main.rs:191:9:191:9 | i | main.rs:191:9:191:18 | i as usize |
|
||||
| main.rs:195:24:195:24 | s | main.rs:195:18:195:24 | FormatArgsExpr |
|
||||
| main.rs:201:21:201:21 | a | main.rs:201:21:201:23 | a.0 |
|
||||
| main.rs:203:9:203:9 | [post] a [implicit borrow] | main.rs:203:9:203:9 | [post] a |
|
||||
| main.rs:204:9:204:9 | [post] a [implicit borrow] | main.rs:204:9:204:9 | [post] a |
|
||||
| main.rs:206:21:206:21 | a | main.rs:206:21:206:23 | a.0 |
|
||||
| main.rs:209:9:209:9 | [post] a [implicit borrow] | main.rs:209:9:209:9 | [SSA] a |
|
||||
| main.rs:210:9:210:9 | [post] a [implicit borrow] | main.rs:210:9:210:9 | [SSA] a |
|
||||
| main.rs:212:21:212:21 | a | main.rs:212:21:212:23 | a.0 |
|
||||
| main.rs:215:9:215:9 | [post] a [implicit borrow] | main.rs:215:9:215:9 | [SSA] a |
|
||||
| main.rs:216:9:216:9 | [post] a [implicit borrow] | main.rs:216:9:216:9 | [SSA] a |
|
||||
| main.rs:218:21:218:21 | a | main.rs:218:21:218:23 | a.0 |
|
||||
| main.rs:221:9:221:9 | [post] a [implicit borrow] | main.rs:221:9:221:9 | [SSA] a |
|
||||
| main.rs:223:21:223:21 | a | main.rs:223:21:223:23 | a.0 |
|
||||
| main.rs:228:21:228:22 | v1 | main.rs:228:21:228:24 | v1.0 |
|
||||
| main.rs:230:21:230:22 | v2 | main.rs:230:21:230:24 | v2.0 |
|
||||
| main.rs:232:21:232:22 | v3 | main.rs:232:21:232:24 | v3.0 |
|
||||
| main.rs:234:21:234:22 | v4 | main.rs:234:21:234:24 | v4.0 |
|
||||
| main.rs:236:21:236:22 | v5 | main.rs:236:21:236:24 | v5.0 |
|
||||
| main.rs:238:21:238:22 | v6 | main.rs:238:21:238:24 | v6.0 |
|
||||
| main.rs:240:21:240:22 | v7 | main.rs:240:21:240:24 | v7.0 |
|
||||
| main.rs:242:21:242:22 | v8 | main.rs:242:21:242:24 | v8.0 |
|
||||
|
||||
@@ -1,126 +1,558 @@
|
||||
models
|
||||
| 1 | Summary: <_ as core::ops::arith::Add>::add; Argument[self]; ReturnValue; taint |
|
||||
| 2 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[0].Reference; Argument[self].Reference; taint |
|
||||
| 3 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[0]; Argument[self].Reference; taint |
|
||||
| 4 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[self].Reference; Argument[self].Reference; taint |
|
||||
| 5 | Summary: <_ as core::ops::arith::Neg>::neg; Argument[self]; ReturnValue; taint |
|
||||
| 6 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value |
|
||||
| 1 | Summary: <_ as core::ops::arith::Add>::add; Argument[self,0].Field[core::num::wrapping::Wrapping(0)]; ReturnValue.Field[core::num::wrapping::Wrapping(0)]; taint |
|
||||
| 2 | Summary: <_ as core::ops::arith::Add>::add; Argument[self,0]; ReturnValue; taint |
|
||||
| 3 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[0].Field[core::num::wrapping::Wrapping(0)]; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; taint |
|
||||
| 4 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[0]; Argument[self].Reference; taint |
|
||||
| 5 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; taint |
|
||||
| 6 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[self].Reference; Argument[self].Reference; taint |
|
||||
| 7 | Summary: <_ as core::ops::arith::Mul>::mul; Argument[self,0]; ReturnValue; taint |
|
||||
| 8 | Summary: <_ as core::ops::arith::MulAssign>::mul_assign; Argument[0]; Argument[self].Reference; taint |
|
||||
| 9 | Summary: <_ as core::ops::arith::MulAssign>::mul_assign; Argument[self].Reference; Argument[self].Reference; taint |
|
||||
| 10 | Summary: <_ as core::ops::arith::Neg>::neg; Argument[self].Field[core::num::wrapping::Wrapping(0)]; ReturnValue.Field[core::num::wrapping::Wrapping(0)]; taint |
|
||||
| 11 | Summary: <_ as core::ops::arith::Neg>::neg; Argument[self]; ReturnValue; taint |
|
||||
| 12 | Summary: <_ as core::ops::arith::Sub>::sub; Argument[self,0]; ReturnValue; taint |
|
||||
| 13 | Summary: <_ as core::ops::arith::SubAssign>::sub_assign; Argument[0]; Argument[self].Reference; taint |
|
||||
| 14 | Summary: <_ as core::ops::arith::SubAssign>::sub_assign; Argument[self].Reference; Argument[self].Reference; taint |
|
||||
| 15 | Summary: <_ as core::ops::bit::BitAnd>::bitand; Argument[self,0].Field[core::num::wrapping::Wrapping(0)]; ReturnValue.Field[core::num::wrapping::Wrapping(0)]; taint |
|
||||
| 16 | Summary: <_ as core::ops::bit::BitAndAssign>::bitand_assign; Argument[0].Field[core::num::wrapping::Wrapping(0)]; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; taint |
|
||||
| 17 | Summary: <_ as core::ops::bit::BitAndAssign>::bitand_assign; Argument[0]; Argument[self].Reference; taint |
|
||||
| 18 | Summary: <_ as core::ops::bit::BitAndAssign>::bitand_assign; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; taint |
|
||||
| 19 | Summary: <_ as core::ops::bit::BitAndAssign>::bitand_assign; Argument[self].Reference; Argument[self].Reference; taint |
|
||||
| 20 | Summary: <_ as core::ops::bit::BitOr>::bitor; Argument[self,0]; ReturnValue; taint |
|
||||
| 21 | Summary: <_ as core::ops::bit::BitXor>::bitxor; Argument[self,0]; ReturnValue; taint |
|
||||
| 22 | Summary: <_ as core::ops::bit::BitXorAssign>::bitxor_assign; Argument[0]; Argument[self].Reference; taint |
|
||||
| 23 | Summary: <_ as core::ops::bit::BitXorAssign>::bitxor_assign; Argument[self].Reference; Argument[self].Reference; taint |
|
||||
| 24 | Summary: <_ as core::ops::bit::Not>::not; Argument[self].Field[core::num::wrapping::Wrapping(0)]; ReturnValue.Field[core::num::wrapping::Wrapping(0)]; taint |
|
||||
| 25 | Summary: <_ as core::ops::bit::Not>::not; Argument[self]; ReturnValue; taint |
|
||||
| 26 | Summary: <_ as core::ops::bit::Shl>::shl; Argument[self,0].Field[core::num::wrapping::Wrapping(0)]; ReturnValue.Field[core::num::wrapping::Wrapping(0)]; taint |
|
||||
| 27 | Summary: <_ as core::ops::bit::Shl>::shl; Argument[self,0]; ReturnValue; taint |
|
||||
| 28 | Summary: <_ as core::ops::bit::ShlAssign>::shl_assign; Argument[0].Field[core::num::wrapping::Wrapping(0)]; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; taint |
|
||||
| 29 | Summary: <_ as core::ops::bit::ShlAssign>::shl_assign; Argument[0]; Argument[self].Reference; taint |
|
||||
| 30 | Summary: <_ as core::ops::bit::ShlAssign>::shl_assign; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; taint |
|
||||
| 31 | Summary: <_ as core::ops::bit::ShlAssign>::shl_assign; Argument[self].Reference; Argument[self].Reference; taint |
|
||||
| 32 | Summary: <_ as core::ops::bit::Shr>::shr; Argument[self,0]; ReturnValue; taint |
|
||||
| 33 | Summary: <_ as core::ops::bit::ShrAssign>::shr_assign; Argument[0]; Argument[self].Reference; taint |
|
||||
| 34 | Summary: <_ as core::ops::bit::ShrAssign>::shr_assign; Argument[self].Reference; Argument[self].Reference; taint |
|
||||
| 35 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value |
|
||||
edges
|
||||
| main.rs:12:9:12:9 | a | main.rs:13:10:13:10 | a | provenance | |
|
||||
| main.rs:12:9:12:9 | a | main.rs:14:14:14:14 | a | provenance | |
|
||||
| main.rs:12:13:12:22 | source(...) | main.rs:12:9:12:9 | a | provenance | |
|
||||
| main.rs:13:10:13:10 | a | main.rs:13:10:13:14 | ... + ... | provenance | MaD:1 |
|
||||
| main.rs:15:9:15:13 | mut b | main.rs:16:5:16:5 | b | provenance | |
|
||||
| main.rs:15:17:15:26 | source(...) | main.rs:15:9:15:13 | mut b | provenance | |
|
||||
| main.rs:16:5:16:5 | b | main.rs:17:10:17:10 | b | provenance | MaD:4 |
|
||||
| main.rs:20:10:20:19 | source(...) | main.rs:21:10:21:10 | c | provenance | MaD:2 |
|
||||
| main.rs:20:10:20:19 | source(...) | main.rs:21:10:21:10 | c | provenance | MaD:3 |
|
||||
| main.rs:25:9:25:9 | a | main.rs:26:11:26:11 | a | provenance | |
|
||||
| main.rs:25:13:25:22 | source(...) | main.rs:25:9:25:9 | a | provenance | |
|
||||
| main.rs:26:11:26:11 | a | main.rs:26:10:26:11 | - ... | provenance | MaD:5 |
|
||||
| main.rs:30:9:30:9 | a | main.rs:31:9:31:9 | b | provenance | |
|
||||
| main.rs:30:13:30:22 | source(...) | main.rs:30:9:30:9 | a | provenance | |
|
||||
| main.rs:31:9:31:9 | b | main.rs:32:10:32:17 | b as i64 | provenance | |
|
||||
| main.rs:45:13:45:13 | s | main.rs:46:23:46:23 | s | provenance | |
|
||||
| main.rs:45:13:45:13 | s | main.rs:46:23:46:29 | s[...] | provenance | |
|
||||
| main.rs:45:17:45:26 | source(...) | main.rs:45:13:45:13 | s | provenance | |
|
||||
| main.rs:46:13:46:18 | sliced [&ref] | main.rs:47:14:47:19 | sliced | provenance | |
|
||||
| main.rs:46:22:46:29 | &... [&ref] | main.rs:46:13:46:18 | sliced [&ref] | provenance | |
|
||||
| main.rs:46:23:46:23 | s | main.rs:46:23:46:29 | s[...] | provenance | MaD:6 |
|
||||
| main.rs:46:23:46:29 | s[...] | main.rs:46:22:46:29 | &... [&ref] | provenance | |
|
||||
| main.rs:61:13:61:15 | arr | main.rs:62:14:62:16 | arr | provenance | |
|
||||
| main.rs:61:19:61:28 | source(...) | main.rs:61:13:61:15 | arr | provenance | |
|
||||
| main.rs:62:14:62:16 | arr | main.rs:62:14:62:19 | arr[1] | provenance | MaD:6 |
|
||||
| main.rs:77:9:77:12 | [post] arr2 [element] | main.rs:78:14:78:17 | arr2 | provenance | |
|
||||
| main.rs:77:19:77:28 | source(...) | main.rs:77:9:77:12 | [post] arr2 [element] | provenance | |
|
||||
| main.rs:98:14:98:47 | TupleExpr [tuple.0] | main.rs:98:14:98:49 | ... .0 | provenance | |
|
||||
| main.rs:98:15:98:30 | source_string(...) | main.rs:98:14:98:47 | TupleExpr [tuple.0] | provenance | |
|
||||
| main.rs:102:14:102:28 | source_tuple(...) | main.rs:102:14:102:30 | ... .0 | provenance | |
|
||||
| main.rs:103:14:103:28 | source_tuple(...) | main.rs:103:14:103:30 | ... .1 | provenance | |
|
||||
| main.rs:108:14:108:83 | TupleExpr [tuple.0, tuple.1] | main.rs:108:14:108:85 | ... .0 [tuple.1] | provenance | |
|
||||
| main.rs:108:14:108:85 | ... .0 [tuple.1] | main.rs:108:14:108:87 | ... .1 | provenance | |
|
||||
| main.rs:108:15:108:48 | TupleExpr [tuple.1] | main.rs:108:14:108:83 | TupleExpr [tuple.0, tuple.1] | provenance | |
|
||||
| main.rs:108:32:108:47 | source_string(...) | main.rs:108:15:108:48 | TupleExpr [tuple.1] | provenance | |
|
||||
| main.rs:114:14:114:64 | TupleExpr [tuple.0] | main.rs:114:14:114:66 | ... .0 | provenance | |
|
||||
| main.rs:114:15:114:29 | source_tuple(...) | main.rs:114:14:114:64 | TupleExpr [tuple.0] | provenance | |
|
||||
| main.rs:115:14:115:64 | TupleExpr [tuple.0] | main.rs:115:14:115:66 | ... .0 | provenance | |
|
||||
| main.rs:115:14:115:66 | ... .0 | main.rs:115:14:115:68 | ... .0 | provenance | |
|
||||
| main.rs:115:15:115:29 | source_tuple(...) | main.rs:115:14:115:64 | TupleExpr [tuple.0] | provenance | |
|
||||
| main.rs:116:14:116:64 | TupleExpr [tuple.0] | main.rs:116:14:116:66 | ... .0 | provenance | |
|
||||
| main.rs:116:14:116:66 | ... .0 | main.rs:116:14:116:68 | ... .1 | provenance | |
|
||||
| main.rs:116:15:116:29 | source_tuple(...) | main.rs:116:14:116:64 | TupleExpr [tuple.0] | provenance | |
|
||||
| main.rs:13:10:13:10 | a | main.rs:13:10:13:14 | ... + ... | provenance | MaD:2 |
|
||||
| main.rs:14:14:14:14 | a | main.rs:14:10:14:14 | ... + ... | provenance | MaD:2 |
|
||||
| main.rs:16:9:16:13 | mut b | main.rs:17:5:17:5 | b | provenance | |
|
||||
| main.rs:16:17:16:26 | source(...) | main.rs:16:9:16:13 | mut b | provenance | |
|
||||
| main.rs:17:5:17:5 | b | main.rs:18:10:18:10 | b | provenance | MaD:6 |
|
||||
| main.rs:21:10:21:19 | source(...) | main.rs:22:10:22:10 | c | provenance | MaD:4 |
|
||||
| main.rs:26:9:26:9 | a | main.rs:27:11:27:11 | a | provenance | |
|
||||
| main.rs:26:13:26:21 | source(...) | main.rs:26:9:26:9 | a | provenance | |
|
||||
| main.rs:27:11:27:11 | a | main.rs:27:10:27:11 | - ... | provenance | MaD:11 |
|
||||
| main.rs:29:11:29:19 | source(...) | main.rs:29:10:29:19 | ! ... | provenance | MaD:25 |
|
||||
| main.rs:31:10:31:18 | source(...) | main.rs:31:10:31:22 | ... - ... | provenance | MaD:12 |
|
||||
| main.rs:32:17:32:25 | source(...) | main.rs:32:10:32:25 | ... - ... | provenance | MaD:12 |
|
||||
| main.rs:34:10:34:18 | source(...) | main.rs:34:10:34:22 | ... * ... | provenance | MaD:7 |
|
||||
| main.rs:35:17:35:25 | source(...) | main.rs:35:10:35:25 | ... * ... | provenance | MaD:7 |
|
||||
| main.rs:37:10:37:18 | source(...) | main.rs:37:10:37:23 | ... << ... | provenance | MaD:27 |
|
||||
| main.rs:38:18:38:26 | source(...) | main.rs:38:10:38:26 | ... << ... | provenance | MaD:27 |
|
||||
| main.rs:40:10:40:18 | source(...) | main.rs:40:10:40:22 | ... ^ ... | provenance | MaD:21 |
|
||||
| main.rs:41:18:41:27 | source(...) | main.rs:41:10:41:27 | ... ^ ... | provenance | MaD:21 |
|
||||
| main.rs:45:9:45:9 | a | main.rs:46:9:46:9 | b | provenance | |
|
||||
| main.rs:45:13:45:22 | source(...) | main.rs:45:9:45:9 | a | provenance | |
|
||||
| main.rs:46:9:46:9 | b | main.rs:47:10:47:17 | b as i64 | provenance | |
|
||||
| main.rs:60:13:60:13 | s | main.rs:61:23:61:23 | s | provenance | |
|
||||
| main.rs:60:13:60:13 | s | main.rs:61:23:61:29 | s[...] | provenance | |
|
||||
| main.rs:60:17:60:26 | source(...) | main.rs:60:13:60:13 | s | provenance | |
|
||||
| main.rs:61:13:61:18 | sliced [&ref] | main.rs:62:14:62:19 | sliced | provenance | |
|
||||
| main.rs:61:22:61:29 | &... [&ref] | main.rs:61:13:61:18 | sliced [&ref] | provenance | |
|
||||
| main.rs:61:23:61:23 | s | main.rs:61:23:61:29 | s[...] | provenance | MaD:35 |
|
||||
| main.rs:61:23:61:29 | s[...] | main.rs:61:22:61:29 | &... [&ref] | provenance | |
|
||||
| main.rs:76:13:76:15 | arr | main.rs:77:14:77:16 | arr | provenance | |
|
||||
| main.rs:76:19:76:28 | source(...) | main.rs:76:13:76:15 | arr | provenance | |
|
||||
| main.rs:77:14:77:16 | arr | main.rs:77:14:77:19 | arr[1] | provenance | MaD:35 |
|
||||
| main.rs:92:9:92:12 | [post] arr2 [element] | main.rs:93:14:93:17 | arr2 | provenance | |
|
||||
| main.rs:92:19:92:28 | source(...) | main.rs:92:9:92:12 | [post] arr2 [element] | provenance | |
|
||||
| main.rs:113:14:113:47 | TupleExpr [tuple.0] | main.rs:113:14:113:49 | ... .0 | provenance | |
|
||||
| main.rs:113:15:113:30 | source_string(...) | main.rs:113:14:113:47 | TupleExpr [tuple.0] | provenance | |
|
||||
| main.rs:117:14:117:28 | source_tuple(...) | main.rs:117:14:117:30 | ... .0 | provenance | |
|
||||
| main.rs:118:14:118:28 | source_tuple(...) | main.rs:118:14:118:30 | ... .1 | provenance | |
|
||||
| main.rs:123:14:123:83 | TupleExpr [tuple.0, tuple.1] | main.rs:123:14:123:85 | ... .0 [tuple.1] | provenance | |
|
||||
| main.rs:123:14:123:85 | ... .0 [tuple.1] | main.rs:123:14:123:87 | ... .1 | provenance | |
|
||||
| main.rs:123:15:123:48 | TupleExpr [tuple.1] | main.rs:123:14:123:83 | TupleExpr [tuple.0, tuple.1] | provenance | |
|
||||
| main.rs:123:32:123:47 | source_string(...) | main.rs:123:15:123:48 | TupleExpr [tuple.1] | provenance | |
|
||||
| main.rs:129:14:129:64 | TupleExpr [tuple.0] | main.rs:129:14:129:66 | ... .0 | provenance | |
|
||||
| main.rs:129:15:129:29 | source_tuple(...) | main.rs:129:14:129:64 | TupleExpr [tuple.0] | provenance | |
|
||||
| main.rs:130:14:130:64 | TupleExpr [tuple.0] | main.rs:130:14:130:66 | ... .0 | provenance | |
|
||||
| main.rs:130:14:130:66 | ... .0 | main.rs:130:14:130:68 | ... .0 | provenance | |
|
||||
| main.rs:130:15:130:29 | source_tuple(...) | main.rs:130:14:130:64 | TupleExpr [tuple.0] | provenance | |
|
||||
| main.rs:131:14:131:64 | TupleExpr [tuple.0] | main.rs:131:14:131:66 | ... .0 | provenance | |
|
||||
| main.rs:131:14:131:66 | ... .0 | main.rs:131:14:131:68 | ... .1 | provenance | |
|
||||
| main.rs:131:15:131:29 | source_tuple(...) | main.rs:131:14:131:64 | TupleExpr [tuple.0] | provenance | |
|
||||
| main.rs:141:10:141:18 | source(...) | main.rs:141:10:141:28 | ... .add(...) | provenance | MaD:2 |
|
||||
| main.rs:143:19:143:27 | source(...) | main.rs:143:10:143:28 | 1i64.add(...) | provenance | MaD:2 |
|
||||
| main.rs:146:10:146:18 | source(...) | main.rs:146:10:146:28 | ... .sub(...) | provenance | MaD:12 |
|
||||
| main.rs:148:19:148:27 | source(...) | main.rs:148:10:148:28 | 1i64.sub(...) | provenance | MaD:12 |
|
||||
| main.rs:151:10:151:18 | source(...) | main.rs:151:10:151:28 | ... .mul(...) | provenance | MaD:7 |
|
||||
| main.rs:153:19:153:27 | source(...) | main.rs:153:10:153:28 | 1i64.mul(...) | provenance | MaD:7 |
|
||||
| main.rs:156:10:156:18 | source(...) | main.rs:156:10:156:28 | ... .shl(...) | provenance | MaD:27 |
|
||||
| main.rs:157:10:157:18 | source(...) | main.rs:157:10:157:25 | ... .shl(...) | provenance | MaD:27 |
|
||||
| main.rs:158:19:158:27 | source(...) | main.rs:158:10:158:28 | 1i64.shl(...) | provenance | MaD:27 |
|
||||
| main.rs:160:10:160:18 | source(...) | main.rs:160:10:160:28 | ... .shr(...) | provenance | MaD:32 |
|
||||
| main.rs:161:10:161:18 | source(...) | main.rs:161:10:161:25 | ... .shr(...) | provenance | MaD:32 |
|
||||
| main.rs:162:19:162:27 | source(...) | main.rs:162:10:162:28 | 1i64.shr(...) | provenance | MaD:32 |
|
||||
| main.rs:164:10:164:18 | source(...) | main.rs:164:10:164:30 | ... .bitor(...) | provenance | MaD:20 |
|
||||
| main.rs:166:21:166:29 | source(...) | main.rs:166:10:166:30 | 1i64.bitor(...) | provenance | MaD:20 |
|
||||
| main.rs:170:5:170:5 | [post] a | main.rs:171:5:171:5 | a | provenance | |
|
||||
| main.rs:170:5:170:5 | [post] a | main.rs:172:5:172:5 | a | provenance | |
|
||||
| main.rs:170:5:170:5 | [post] a | main.rs:173:5:173:5 | a | provenance | |
|
||||
| main.rs:170:5:170:5 | [post] a | main.rs:174:5:174:5 | a | provenance | |
|
||||
| main.rs:170:5:170:5 | [post] a | main.rs:175:5:175:5 | a | provenance | |
|
||||
| main.rs:170:5:170:5 | [post] a | main.rs:176:10:176:10 | a | provenance | |
|
||||
| main.rs:170:18:170:26 | source(...) | main.rs:170:5:170:5 | [post] a | provenance | MaD:4 |
|
||||
| main.rs:171:5:171:5 | [post] a | main.rs:172:5:172:5 | a | provenance | |
|
||||
| main.rs:171:5:171:5 | [post] a | main.rs:173:5:173:5 | a | provenance | |
|
||||
| main.rs:171:5:171:5 | [post] a | main.rs:174:5:174:5 | a | provenance | |
|
||||
| main.rs:171:5:171:5 | [post] a | main.rs:175:5:175:5 | a | provenance | |
|
||||
| main.rs:171:5:171:5 | [post] a | main.rs:176:10:176:10 | a | provenance | |
|
||||
| main.rs:171:5:171:5 | a | main.rs:171:5:171:5 | [post] a | provenance | MaD:14 |
|
||||
| main.rs:171:18:171:26 | source(...) | main.rs:171:5:171:5 | [post] a | provenance | MaD:13 |
|
||||
| main.rs:172:5:172:5 | [post] a | main.rs:173:5:173:5 | a | provenance | |
|
||||
| main.rs:172:5:172:5 | [post] a | main.rs:174:5:174:5 | a | provenance | |
|
||||
| main.rs:172:5:172:5 | [post] a | main.rs:175:5:175:5 | a | provenance | |
|
||||
| main.rs:172:5:172:5 | [post] a | main.rs:176:10:176:10 | a | provenance | |
|
||||
| main.rs:172:5:172:5 | a | main.rs:172:5:172:5 | [post] a | provenance | MaD:9 |
|
||||
| main.rs:172:18:172:26 | source(...) | main.rs:172:5:172:5 | [post] a | provenance | MaD:8 |
|
||||
| main.rs:173:5:173:5 | [post] a | main.rs:174:5:174:5 | a | provenance | |
|
||||
| main.rs:173:5:173:5 | [post] a | main.rs:175:5:175:5 | a | provenance | |
|
||||
| main.rs:173:5:173:5 | [post] a | main.rs:176:10:176:10 | a | provenance | |
|
||||
| main.rs:173:5:173:5 | a | main.rs:173:5:173:5 | [post] a | provenance | MaD:31 |
|
||||
| main.rs:173:18:173:26 | source(...) | main.rs:173:5:173:5 | [post] a | provenance | MaD:29 |
|
||||
| main.rs:174:5:174:5 | [post] a | main.rs:175:5:175:5 | a | provenance | |
|
||||
| main.rs:174:5:174:5 | [post] a | main.rs:176:10:176:10 | a | provenance | |
|
||||
| main.rs:174:5:174:5 | a | main.rs:174:5:174:5 | [post] a | provenance | MaD:34 |
|
||||
| main.rs:174:18:174:26 | source(...) | main.rs:174:5:174:5 | [post] a | provenance | MaD:33 |
|
||||
| main.rs:175:5:175:5 | [post] a | main.rs:176:10:176:10 | a | provenance | |
|
||||
| main.rs:175:5:175:5 | a | main.rs:175:5:175:5 | [post] a | provenance | MaD:23 |
|
||||
| main.rs:175:21:175:29 | source(...) | main.rs:175:5:175:5 | [post] a | provenance | MaD:22 |
|
||||
| main.rs:178:10:178:18 | source(...) | main.rs:178:10:178:24 | ... .neg() | provenance | MaD:11 |
|
||||
| main.rs:179:10:179:18 | source(...) | main.rs:179:10:179:24 | ... .not() | provenance | MaD:25 |
|
||||
| main.rs:199:13:199:17 | mut a [Wrapping] | main.rs:201:21:201:21 | a [Wrapping] | provenance | |
|
||||
| main.rs:199:13:199:17 | mut a [Wrapping] | main.rs:203:9:203:9 | a [Wrapping] | provenance | |
|
||||
| main.rs:199:13:199:17 | mut a [Wrapping] | main.rs:204:9:204:9 | a [Wrapping] | provenance | |
|
||||
| main.rs:199:13:199:17 | mut a [Wrapping] | main.rs:206:21:206:21 | a [Wrapping] | provenance | |
|
||||
| main.rs:199:36:199:61 | Wrapping(...) [Wrapping] | main.rs:199:13:199:17 | mut a [Wrapping] | provenance | |
|
||||
| main.rs:199:45:199:60 | ...::source(...) | main.rs:199:36:199:61 | Wrapping(...) [Wrapping] | provenance | |
|
||||
| main.rs:201:21:201:21 | a [Wrapping] | main.rs:201:21:201:23 | a.0 | provenance | |
|
||||
| main.rs:203:9:203:9 | [post] a | main.rs:204:9:204:9 | a | provenance | |
|
||||
| main.rs:203:9:203:9 | [post] a | main.rs:205:14:205:14 | a | provenance | |
|
||||
| main.rs:203:9:203:9 | [post] a | main.rs:206:21:206:23 | a.0 | provenance | |
|
||||
| main.rs:203:9:203:9 | [post] a [Wrapping] | main.rs:204:9:204:9 | a [Wrapping] | provenance | |
|
||||
| main.rs:203:9:203:9 | [post] a [Wrapping] | main.rs:206:21:206:21 | a [Wrapping] | provenance | |
|
||||
| main.rs:203:9:203:9 | a [Wrapping] | main.rs:203:9:203:9 | [post] a [Wrapping] | provenance | MaD:5 |
|
||||
| main.rs:203:22:203:30 | source(...) | main.rs:203:9:203:9 | [post] a | provenance | MaD:4 |
|
||||
| main.rs:203:22:203:30 | source(...) | main.rs:203:9:203:9 | [post] a [Wrapping] | provenance | MaD:3 |
|
||||
| main.rs:204:9:204:9 | [post] a | main.rs:205:14:205:14 | a | provenance | |
|
||||
| main.rs:204:9:204:9 | [post] a | main.rs:206:21:206:23 | a.0 | provenance | |
|
||||
| main.rs:204:9:204:9 | [post] a [Wrapping] | main.rs:206:21:206:21 | a [Wrapping] | provenance | |
|
||||
| main.rs:204:9:204:9 | a | main.rs:204:9:204:9 | [post] a | provenance | MaD:6 |
|
||||
| main.rs:204:9:204:9 | a | main.rs:204:9:204:9 | [post] a [Wrapping] | provenance | MaD:5 |
|
||||
| main.rs:204:9:204:9 | a [Wrapping] | main.rs:204:9:204:9 | [post] a [Wrapping] | provenance | MaD:5 |
|
||||
| main.rs:204:22:204:47 | Wrapping(...) [Wrapping] | main.rs:204:9:204:9 | [post] a [Wrapping] | provenance | MaD:3 |
|
||||
| main.rs:204:31:204:46 | ...::source(...) | main.rs:204:22:204:47 | Wrapping(...) [Wrapping] | provenance | |
|
||||
| main.rs:206:21:206:21 | a [Wrapping] | main.rs:206:21:206:23 | a.0 | provenance | |
|
||||
| main.rs:208:9:208:9 | a | main.rs:209:9:209:9 | a | provenance | |
|
||||
| main.rs:208:13:208:21 | source(...) | main.rs:208:9:208:9 | a | provenance | |
|
||||
| main.rs:209:9:209:9 | a | main.rs:210:9:210:9 | a | provenance | MaD:6 |
|
||||
| main.rs:209:9:209:9 | a | main.rs:210:9:210:9 | a [Wrapping] | provenance | MaD:5 |
|
||||
| main.rs:209:14:209:22 | source(...) | main.rs:210:9:210:9 | a | provenance | MaD:4 |
|
||||
| main.rs:209:14:209:22 | source(...) | main.rs:210:9:210:9 | a [Wrapping] | provenance | MaD:3 |
|
||||
| main.rs:210:9:210:9 | a | main.rs:211:14:211:14 | a | provenance | MaD:6 |
|
||||
| main.rs:210:9:210:9 | a | main.rs:212:21:212:21 | a [Wrapping] | provenance | MaD:5 |
|
||||
| main.rs:210:9:210:9 | a | main.rs:212:21:212:23 | a.0 | provenance | MaD:6 |
|
||||
| main.rs:210:9:210:9 | a [Wrapping] | main.rs:212:21:212:21 | a [Wrapping] | provenance | MaD:5 |
|
||||
| main.rs:210:14:210:49 | ...::Wrapping(...) [Wrapping] | main.rs:212:21:212:21 | a [Wrapping] | provenance | MaD:3 |
|
||||
| main.rs:210:33:210:48 | ...::source(...) | main.rs:210:14:210:49 | ...::Wrapping(...) [Wrapping] | provenance | |
|
||||
| main.rs:212:21:212:21 | a [Wrapping] | main.rs:212:21:212:23 | a.0 | provenance | |
|
||||
| main.rs:214:9:214:9 | a | main.rs:215:9:215:9 | a | provenance | |
|
||||
| main.rs:214:13:214:21 | source(...) | main.rs:214:9:214:9 | a | provenance | |
|
||||
| main.rs:215:9:215:9 | a | main.rs:216:9:216:9 | a | provenance | MaD:19 |
|
||||
| main.rs:215:9:215:9 | a | main.rs:216:9:216:9 | a [Wrapping] | provenance | MaD:18 |
|
||||
| main.rs:215:14:215:22 | source(...) | main.rs:216:9:216:9 | a | provenance | MaD:17 |
|
||||
| main.rs:215:14:215:22 | source(...) | main.rs:216:9:216:9 | a [Wrapping] | provenance | MaD:16 |
|
||||
| main.rs:216:9:216:9 | a | main.rs:217:14:217:14 | a | provenance | MaD:19 |
|
||||
| main.rs:216:9:216:9 | a | main.rs:218:21:218:21 | a [Wrapping] | provenance | MaD:18 |
|
||||
| main.rs:216:9:216:9 | a | main.rs:218:21:218:23 | a.0 | provenance | MaD:19 |
|
||||
| main.rs:216:9:216:9 | a [Wrapping] | main.rs:218:21:218:21 | a [Wrapping] | provenance | MaD:18 |
|
||||
| main.rs:216:14:216:39 | Wrapping(...) [Wrapping] | main.rs:218:21:218:21 | a [Wrapping] | provenance | MaD:16 |
|
||||
| main.rs:216:23:216:38 | ...::source(...) | main.rs:216:14:216:39 | Wrapping(...) [Wrapping] | provenance | |
|
||||
| main.rs:218:21:218:21 | a [Wrapping] | main.rs:218:21:218:23 | a.0 | provenance | |
|
||||
| main.rs:220:9:220:9 | a | main.rs:221:9:221:9 | a | provenance | |
|
||||
| main.rs:220:13:220:22 | source(...) | main.rs:220:9:220:9 | a | provenance | |
|
||||
| main.rs:221:9:221:9 | a | main.rs:222:14:222:14 | a | provenance | MaD:31 |
|
||||
| main.rs:221:9:221:9 | a | main.rs:223:21:223:21 | a [Wrapping] | provenance | MaD:30 |
|
||||
| main.rs:221:9:221:9 | a | main.rs:223:21:223:23 | a.0 | provenance | MaD:31 |
|
||||
| main.rs:221:15:221:30 | source_usize(...) | main.rs:222:14:222:14 | a | provenance | MaD:29 |
|
||||
| main.rs:221:15:221:30 | source_usize(...) | main.rs:223:21:223:21 | a [Wrapping] | provenance | MaD:28 |
|
||||
| main.rs:221:15:221:30 | source_usize(...) | main.rs:223:21:223:23 | a.0 | provenance | MaD:29 |
|
||||
| main.rs:223:21:223:21 | a [Wrapping] | main.rs:223:21:223:23 | a.0 | provenance | |
|
||||
| main.rs:225:13:225:13 | b [Wrapping] | main.rs:227:18:227:18 | b [Wrapping] | provenance | |
|
||||
| main.rs:225:13:225:13 | b [Wrapping] | main.rs:229:18:229:18 | b [Wrapping] | provenance | |
|
||||
| main.rs:225:13:225:13 | b [Wrapping] | main.rs:231:19:231:19 | b [Wrapping] | provenance | |
|
||||
| main.rs:225:13:225:13 | b [Wrapping] | main.rs:233:18:233:18 | b [Wrapping] | provenance | |
|
||||
| main.rs:225:13:225:13 | b [Wrapping] | main.rs:235:19:235:19 | b [Wrapping] | provenance | |
|
||||
| main.rs:225:13:225:13 | b [Wrapping] | main.rs:237:18:237:18 | b [Wrapping] | provenance | |
|
||||
| main.rs:225:13:225:13 | b [Wrapping] | main.rs:239:18:239:18 | b [Wrapping] | provenance | |
|
||||
| main.rs:225:13:225:13 | b [Wrapping] | main.rs:241:18:241:18 | b [Wrapping] | provenance | |
|
||||
| main.rs:225:32:225:57 | Wrapping(...) [Wrapping] | main.rs:225:13:225:13 | b [Wrapping] | provenance | |
|
||||
| main.rs:225:41:225:56 | ...::source(...) | main.rs:225:32:225:57 | Wrapping(...) [Wrapping] | provenance | |
|
||||
| main.rs:226:13:226:13 | c [Wrapping] | main.rs:227:22:227:22 | c [Wrapping] | provenance | |
|
||||
| main.rs:226:13:226:13 | c [Wrapping] | main.rs:229:24:229:24 | c [Wrapping] | provenance | |
|
||||
| main.rs:226:13:226:13 | c [Wrapping] | main.rs:239:22:239:22 | c [Wrapping] | provenance | |
|
||||
| main.rs:226:32:226:57 | Wrapping(...) [Wrapping] | main.rs:226:13:226:13 | c [Wrapping] | provenance | |
|
||||
| main.rs:226:41:226:56 | ...::source(...) | main.rs:226:32:226:57 | Wrapping(...) [Wrapping] | provenance | |
|
||||
| main.rs:227:13:227:14 | v1 [Wrapping] | main.rs:228:21:228:22 | v1 [Wrapping] | provenance | |
|
||||
| main.rs:227:18:227:18 | b [Wrapping] | main.rs:227:18:227:22 | ... + ... [Wrapping] | provenance | MaD:1 |
|
||||
| main.rs:227:18:227:22 | ... + ... [Wrapping] | main.rs:227:13:227:14 | v1 [Wrapping] | provenance | |
|
||||
| main.rs:227:22:227:22 | c [Wrapping] | main.rs:227:18:227:22 | ... + ... [Wrapping] | provenance | MaD:1 |
|
||||
| main.rs:228:21:228:22 | v1 [Wrapping] | main.rs:228:21:228:24 | v1.0 | provenance | |
|
||||
| main.rs:229:13:229:14 | v2 [Wrapping] | main.rs:230:21:230:22 | v2 [Wrapping] | provenance | |
|
||||
| main.rs:229:18:229:18 | b [Wrapping] | main.rs:229:18:229:25 | b.add(...) [Wrapping] | provenance | MaD:1 |
|
||||
| main.rs:229:18:229:25 | b.add(...) [Wrapping] | main.rs:229:13:229:14 | v2 [Wrapping] | provenance | |
|
||||
| main.rs:229:24:229:24 | c [Wrapping] | main.rs:229:18:229:25 | b.add(...) [Wrapping] | provenance | MaD:1 |
|
||||
| main.rs:230:21:230:22 | v2 [Wrapping] | main.rs:230:21:230:24 | v2.0 | provenance | |
|
||||
| main.rs:231:13:231:14 | v3 [Wrapping] | main.rs:232:21:232:22 | v3 [Wrapping] | provenance | |
|
||||
| main.rs:231:18:231:19 | - ... [Wrapping] | main.rs:231:13:231:14 | v3 [Wrapping] | provenance | |
|
||||
| main.rs:231:19:231:19 | b [Wrapping] | main.rs:231:18:231:19 | - ... [Wrapping] | provenance | MaD:10 |
|
||||
| main.rs:232:21:232:22 | v3 [Wrapping] | main.rs:232:21:232:24 | v3.0 | provenance | |
|
||||
| main.rs:233:13:233:14 | v4 [Wrapping] | main.rs:234:21:234:22 | v4 [Wrapping] | provenance | |
|
||||
| main.rs:233:18:233:18 | b [Wrapping] | main.rs:233:18:233:24 | b.neg() [Wrapping] | provenance | MaD:10 |
|
||||
| main.rs:233:18:233:24 | b.neg() [Wrapping] | main.rs:233:13:233:14 | v4 [Wrapping] | provenance | |
|
||||
| main.rs:234:21:234:22 | v4 [Wrapping] | main.rs:234:21:234:24 | v4.0 | provenance | |
|
||||
| main.rs:235:13:235:14 | v5 [Wrapping] | main.rs:236:21:236:22 | v5 [Wrapping] | provenance | |
|
||||
| main.rs:235:18:235:19 | ! ... [Wrapping] | main.rs:235:13:235:14 | v5 [Wrapping] | provenance | |
|
||||
| main.rs:235:19:235:19 | b [Wrapping] | main.rs:235:18:235:19 | ! ... [Wrapping] | provenance | MaD:24 |
|
||||
| main.rs:236:21:236:22 | v5 [Wrapping] | main.rs:236:21:236:24 | v5.0 | provenance | |
|
||||
| main.rs:237:13:237:14 | v6 [Wrapping] | main.rs:238:21:238:22 | v6 [Wrapping] | provenance | |
|
||||
| main.rs:237:18:237:18 | b [Wrapping] | main.rs:237:18:237:24 | b.not() [Wrapping] | provenance | MaD:24 |
|
||||
| main.rs:237:18:237:24 | b.not() [Wrapping] | main.rs:237:13:237:14 | v6 [Wrapping] | provenance | |
|
||||
| main.rs:238:21:238:22 | v6 [Wrapping] | main.rs:238:21:238:24 | v6.0 | provenance | |
|
||||
| main.rs:239:13:239:14 | v7 [Wrapping] | main.rs:240:21:240:22 | v7 [Wrapping] | provenance | |
|
||||
| main.rs:239:18:239:18 | b [Wrapping] | main.rs:239:18:239:22 | ... & ... [Wrapping] | provenance | MaD:15 |
|
||||
| main.rs:239:18:239:22 | ... & ... [Wrapping] | main.rs:239:13:239:14 | v7 [Wrapping] | provenance | |
|
||||
| main.rs:239:22:239:22 | c [Wrapping] | main.rs:239:18:239:22 | ... & ... [Wrapping] | provenance | MaD:15 |
|
||||
| main.rs:240:21:240:22 | v7 [Wrapping] | main.rs:240:21:240:24 | v7.0 | provenance | |
|
||||
| main.rs:241:13:241:14 | v8 | main.rs:242:21:242:24 | v8.0 | provenance | |
|
||||
| main.rs:241:13:241:14 | v8 [Wrapping] | main.rs:242:21:242:22 | v8 [Wrapping] | provenance | |
|
||||
| main.rs:241:18:241:18 | b [Wrapping] | main.rs:241:18:241:37 | ... << ... [Wrapping] | provenance | MaD:26 |
|
||||
| main.rs:241:18:241:37 | ... << ... | main.rs:241:13:241:14 | v8 | provenance | |
|
||||
| main.rs:241:18:241:37 | ... << ... [Wrapping] | main.rs:241:13:241:14 | v8 [Wrapping] | provenance | |
|
||||
| main.rs:241:23:241:37 | source_usize(...) | main.rs:241:18:241:37 | ... << ... | provenance | MaD:27 |
|
||||
| main.rs:241:23:241:37 | source_usize(...) | main.rs:241:18:241:37 | ... << ... [Wrapping] | provenance | MaD:26 |
|
||||
| main.rs:242:21:242:22 | v8 [Wrapping] | main.rs:242:21:242:24 | v8.0 | provenance | |
|
||||
nodes
|
||||
| main.rs:12:9:12:9 | a | semmle.label | a |
|
||||
| main.rs:12:13:12:22 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:13:10:13:10 | a | semmle.label | a |
|
||||
| main.rs:13:10:13:14 | ... + ... | semmle.label | ... + ... |
|
||||
| main.rs:15:9:15:13 | mut b | semmle.label | mut b |
|
||||
| main.rs:15:17:15:26 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:16:5:16:5 | b | semmle.label | b |
|
||||
| main.rs:17:10:17:10 | b | semmle.label | b |
|
||||
| main.rs:20:10:20:19 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:21:10:21:10 | c | semmle.label | c |
|
||||
| main.rs:25:9:25:9 | a | semmle.label | a |
|
||||
| main.rs:25:13:25:22 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:26:10:26:11 | - ... | semmle.label | - ... |
|
||||
| main.rs:26:11:26:11 | a | semmle.label | a |
|
||||
| main.rs:30:9:30:9 | a | semmle.label | a |
|
||||
| main.rs:30:13:30:22 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:31:9:31:9 | b | semmle.label | b |
|
||||
| main.rs:32:10:32:17 | b as i64 | semmle.label | b as i64 |
|
||||
| main.rs:45:13:45:13 | s | semmle.label | s |
|
||||
| main.rs:45:17:45:26 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:46:13:46:18 | sliced [&ref] | semmle.label | sliced [&ref] |
|
||||
| main.rs:46:22:46:29 | &... [&ref] | semmle.label | &... [&ref] |
|
||||
| main.rs:46:23:46:23 | s | semmle.label | s |
|
||||
| main.rs:46:23:46:29 | s[...] | semmle.label | s[...] |
|
||||
| main.rs:47:14:47:19 | sliced | semmle.label | sliced |
|
||||
| main.rs:61:13:61:15 | arr | semmle.label | arr |
|
||||
| main.rs:61:19:61:28 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:62:14:62:16 | arr | semmle.label | arr |
|
||||
| main.rs:62:14:62:19 | arr[1] | semmle.label | arr[1] |
|
||||
| main.rs:77:9:77:12 | [post] arr2 [element] | semmle.label | [post] arr2 [element] |
|
||||
| main.rs:77:19:77:28 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:78:14:78:17 | arr2 | semmle.label | arr2 |
|
||||
| main.rs:98:14:98:47 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] |
|
||||
| main.rs:98:14:98:49 | ... .0 | semmle.label | ... .0 |
|
||||
| main.rs:98:15:98:30 | source_string(...) | semmle.label | source_string(...) |
|
||||
| main.rs:101:14:101:28 | source_tuple(...) | semmle.label | source_tuple(...) |
|
||||
| main.rs:102:14:102:28 | source_tuple(...) | semmle.label | source_tuple(...) |
|
||||
| main.rs:102:14:102:30 | ... .0 | semmle.label | ... .0 |
|
||||
| main.rs:103:14:103:28 | source_tuple(...) | semmle.label | source_tuple(...) |
|
||||
| main.rs:103:14:103:30 | ... .1 | semmle.label | ... .1 |
|
||||
| main.rs:108:14:108:83 | TupleExpr [tuple.0, tuple.1] | semmle.label | TupleExpr [tuple.0, tuple.1] |
|
||||
| main.rs:108:14:108:85 | ... .0 [tuple.1] | semmle.label | ... .0 [tuple.1] |
|
||||
| main.rs:108:14:108:87 | ... .1 | semmle.label | ... .1 |
|
||||
| main.rs:108:15:108:48 | TupleExpr [tuple.1] | semmle.label | TupleExpr [tuple.1] |
|
||||
| main.rs:108:32:108:47 | source_string(...) | semmle.label | source_string(...) |
|
||||
| main.rs:114:14:114:64 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] |
|
||||
| main.rs:114:14:114:66 | ... .0 | semmle.label | ... .0 |
|
||||
| main.rs:114:15:114:29 | source_tuple(...) | semmle.label | source_tuple(...) |
|
||||
| main.rs:115:14:115:64 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] |
|
||||
| main.rs:115:14:115:66 | ... .0 | semmle.label | ... .0 |
|
||||
| main.rs:115:14:115:68 | ... .0 | semmle.label | ... .0 |
|
||||
| main.rs:115:15:115:29 | source_tuple(...) | semmle.label | source_tuple(...) |
|
||||
| main.rs:116:14:116:64 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] |
|
||||
| main.rs:116:14:116:66 | ... .0 | semmle.label | ... .0 |
|
||||
| main.rs:116:14:116:68 | ... .1 | semmle.label | ... .1 |
|
||||
| main.rs:116:15:116:29 | source_tuple(...) | semmle.label | source_tuple(...) |
|
||||
| main.rs:14:10:14:14 | ... + ... | semmle.label | ... + ... |
|
||||
| main.rs:14:14:14:14 | a | semmle.label | a |
|
||||
| main.rs:16:9:16:13 | mut b | semmle.label | mut b |
|
||||
| main.rs:16:17:16:26 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:17:5:17:5 | b | semmle.label | b |
|
||||
| main.rs:18:10:18:10 | b | semmle.label | b |
|
||||
| main.rs:21:10:21:19 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:22:10:22:10 | c | semmle.label | c |
|
||||
| main.rs:26:9:26:9 | a | semmle.label | a |
|
||||
| main.rs:26:13:26:21 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:27:10:27:11 | - ... | semmle.label | - ... |
|
||||
| main.rs:27:11:27:11 | a | semmle.label | a |
|
||||
| main.rs:29:10:29:19 | ! ... | semmle.label | ! ... |
|
||||
| main.rs:29:11:29:19 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:31:10:31:18 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:31:10:31:22 | ... - ... | semmle.label | ... - ... |
|
||||
| main.rs:32:10:32:25 | ... - ... | semmle.label | ... - ... |
|
||||
| main.rs:32:17:32:25 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:34:10:34:18 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:34:10:34:22 | ... * ... | semmle.label | ... * ... |
|
||||
| main.rs:35:10:35:25 | ... * ... | semmle.label | ... * ... |
|
||||
| main.rs:35:17:35:25 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:37:10:37:18 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:37:10:37:23 | ... << ... | semmle.label | ... << ... |
|
||||
| main.rs:38:10:38:26 | ... << ... | semmle.label | ... << ... |
|
||||
| main.rs:38:18:38:26 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:40:10:40:18 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:40:10:40:22 | ... ^ ... | semmle.label | ... ^ ... |
|
||||
| main.rs:41:10:41:27 | ... ^ ... | semmle.label | ... ^ ... |
|
||||
| main.rs:41:18:41:27 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:45:9:45:9 | a | semmle.label | a |
|
||||
| main.rs:45:13:45:22 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:46:9:46:9 | b | semmle.label | b |
|
||||
| main.rs:47:10:47:17 | b as i64 | semmle.label | b as i64 |
|
||||
| main.rs:60:13:60:13 | s | semmle.label | s |
|
||||
| main.rs:60:17:60:26 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:61:13:61:18 | sliced [&ref] | semmle.label | sliced [&ref] |
|
||||
| main.rs:61:22:61:29 | &... [&ref] | semmle.label | &... [&ref] |
|
||||
| main.rs:61:23:61:23 | s | semmle.label | s |
|
||||
| main.rs:61:23:61:29 | s[...] | semmle.label | s[...] |
|
||||
| main.rs:62:14:62:19 | sliced | semmle.label | sliced |
|
||||
| main.rs:76:13:76:15 | arr | semmle.label | arr |
|
||||
| main.rs:76:19:76:28 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:77:14:77:16 | arr | semmle.label | arr |
|
||||
| main.rs:77:14:77:19 | arr[1] | semmle.label | arr[1] |
|
||||
| main.rs:92:9:92:12 | [post] arr2 [element] | semmle.label | [post] arr2 [element] |
|
||||
| main.rs:92:19:92:28 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:93:14:93:17 | arr2 | semmle.label | arr2 |
|
||||
| main.rs:113:14:113:47 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] |
|
||||
| main.rs:113:14:113:49 | ... .0 | semmle.label | ... .0 |
|
||||
| main.rs:113:15:113:30 | source_string(...) | semmle.label | source_string(...) |
|
||||
| main.rs:116:14:116:28 | source_tuple(...) | semmle.label | source_tuple(...) |
|
||||
| main.rs:117:14:117:28 | source_tuple(...) | semmle.label | source_tuple(...) |
|
||||
| main.rs:117:14:117:30 | ... .0 | semmle.label | ... .0 |
|
||||
| main.rs:118:14:118:28 | source_tuple(...) | semmle.label | source_tuple(...) |
|
||||
| main.rs:118:14:118:30 | ... .1 | semmle.label | ... .1 |
|
||||
| main.rs:123:14:123:83 | TupleExpr [tuple.0, tuple.1] | semmle.label | TupleExpr [tuple.0, tuple.1] |
|
||||
| main.rs:123:14:123:85 | ... .0 [tuple.1] | semmle.label | ... .0 [tuple.1] |
|
||||
| main.rs:123:14:123:87 | ... .1 | semmle.label | ... .1 |
|
||||
| main.rs:123:15:123:48 | TupleExpr [tuple.1] | semmle.label | TupleExpr [tuple.1] |
|
||||
| main.rs:123:32:123:47 | source_string(...) | semmle.label | source_string(...) |
|
||||
| main.rs:129:14:129:64 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] |
|
||||
| main.rs:129:14:129:66 | ... .0 | semmle.label | ... .0 |
|
||||
| main.rs:129:15:129:29 | source_tuple(...) | semmle.label | source_tuple(...) |
|
||||
| main.rs:130:14:130:64 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] |
|
||||
| main.rs:130:14:130:66 | ... .0 | semmle.label | ... .0 |
|
||||
| main.rs:130:14:130:68 | ... .0 | semmle.label | ... .0 |
|
||||
| main.rs:130:15:130:29 | source_tuple(...) | semmle.label | source_tuple(...) |
|
||||
| main.rs:131:14:131:64 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] |
|
||||
| main.rs:131:14:131:66 | ... .0 | semmle.label | ... .0 |
|
||||
| main.rs:131:14:131:68 | ... .1 | semmle.label | ... .1 |
|
||||
| main.rs:131:15:131:29 | source_tuple(...) | semmle.label | source_tuple(...) |
|
||||
| main.rs:141:10:141:18 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:141:10:141:28 | ... .add(...) | semmle.label | ... .add(...) |
|
||||
| main.rs:143:10:143:28 | 1i64.add(...) | semmle.label | 1i64.add(...) |
|
||||
| main.rs:143:19:143:27 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:146:10:146:18 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:146:10:146:28 | ... .sub(...) | semmle.label | ... .sub(...) |
|
||||
| main.rs:148:10:148:28 | 1i64.sub(...) | semmle.label | 1i64.sub(...) |
|
||||
| main.rs:148:19:148:27 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:151:10:151:18 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:151:10:151:28 | ... .mul(...) | semmle.label | ... .mul(...) |
|
||||
| main.rs:153:10:153:28 | 1i64.mul(...) | semmle.label | 1i64.mul(...) |
|
||||
| main.rs:153:19:153:27 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:156:10:156:18 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:156:10:156:28 | ... .shl(...) | semmle.label | ... .shl(...) |
|
||||
| main.rs:157:10:157:18 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:157:10:157:25 | ... .shl(...) | semmle.label | ... .shl(...) |
|
||||
| main.rs:158:10:158:28 | 1i64.shl(...) | semmle.label | 1i64.shl(...) |
|
||||
| main.rs:158:19:158:27 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:160:10:160:18 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:160:10:160:28 | ... .shr(...) | semmle.label | ... .shr(...) |
|
||||
| main.rs:161:10:161:18 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:161:10:161:25 | ... .shr(...) | semmle.label | ... .shr(...) |
|
||||
| main.rs:162:10:162:28 | 1i64.shr(...) | semmle.label | 1i64.shr(...) |
|
||||
| main.rs:162:19:162:27 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:164:10:164:18 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:164:10:164:30 | ... .bitor(...) | semmle.label | ... .bitor(...) |
|
||||
| main.rs:166:10:166:30 | 1i64.bitor(...) | semmle.label | 1i64.bitor(...) |
|
||||
| main.rs:166:21:166:29 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:170:5:170:5 | [post] a | semmle.label | [post] a |
|
||||
| main.rs:170:18:170:26 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:171:5:171:5 | [post] a | semmle.label | [post] a |
|
||||
| main.rs:171:5:171:5 | a | semmle.label | a |
|
||||
| main.rs:171:18:171:26 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:172:5:172:5 | [post] a | semmle.label | [post] a |
|
||||
| main.rs:172:5:172:5 | a | semmle.label | a |
|
||||
| main.rs:172:18:172:26 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:173:5:173:5 | [post] a | semmle.label | [post] a |
|
||||
| main.rs:173:5:173:5 | a | semmle.label | a |
|
||||
| main.rs:173:18:173:26 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:174:5:174:5 | [post] a | semmle.label | [post] a |
|
||||
| main.rs:174:5:174:5 | a | semmle.label | a |
|
||||
| main.rs:174:18:174:26 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:175:5:175:5 | [post] a | semmle.label | [post] a |
|
||||
| main.rs:175:5:175:5 | a | semmle.label | a |
|
||||
| main.rs:175:21:175:29 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:176:10:176:10 | a | semmle.label | a |
|
||||
| main.rs:178:10:178:18 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:178:10:178:24 | ... .neg() | semmle.label | ... .neg() |
|
||||
| main.rs:179:10:179:18 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:179:10:179:24 | ... .not() | semmle.label | ... .not() |
|
||||
| main.rs:199:13:199:17 | mut a [Wrapping] | semmle.label | mut a [Wrapping] |
|
||||
| main.rs:199:36:199:61 | Wrapping(...) [Wrapping] | semmle.label | Wrapping(...) [Wrapping] |
|
||||
| main.rs:199:45:199:60 | ...::source(...) | semmle.label | ...::source(...) |
|
||||
| main.rs:201:21:201:21 | a [Wrapping] | semmle.label | a [Wrapping] |
|
||||
| main.rs:201:21:201:23 | a.0 | semmle.label | a.0 |
|
||||
| main.rs:203:9:203:9 | [post] a | semmle.label | [post] a |
|
||||
| main.rs:203:9:203:9 | [post] a [Wrapping] | semmle.label | [post] a [Wrapping] |
|
||||
| main.rs:203:9:203:9 | a [Wrapping] | semmle.label | a [Wrapping] |
|
||||
| main.rs:203:22:203:30 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:204:9:204:9 | [post] a | semmle.label | [post] a |
|
||||
| main.rs:204:9:204:9 | [post] a [Wrapping] | semmle.label | [post] a [Wrapping] |
|
||||
| main.rs:204:9:204:9 | a | semmle.label | a |
|
||||
| main.rs:204:9:204:9 | a [Wrapping] | semmle.label | a [Wrapping] |
|
||||
| main.rs:204:22:204:47 | Wrapping(...) [Wrapping] | semmle.label | Wrapping(...) [Wrapping] |
|
||||
| main.rs:204:31:204:46 | ...::source(...) | semmle.label | ...::source(...) |
|
||||
| main.rs:205:14:205:14 | a | semmle.label | a |
|
||||
| main.rs:206:21:206:21 | a [Wrapping] | semmle.label | a [Wrapping] |
|
||||
| main.rs:206:21:206:23 | a.0 | semmle.label | a.0 |
|
||||
| main.rs:208:9:208:9 | a | semmle.label | a |
|
||||
| main.rs:208:13:208:21 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:209:9:209:9 | a | semmle.label | a |
|
||||
| main.rs:209:14:209:22 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:210:9:210:9 | a | semmle.label | a |
|
||||
| main.rs:210:9:210:9 | a [Wrapping] | semmle.label | a [Wrapping] |
|
||||
| main.rs:210:14:210:49 | ...::Wrapping(...) [Wrapping] | semmle.label | ...::Wrapping(...) [Wrapping] |
|
||||
| main.rs:210:33:210:48 | ...::source(...) | semmle.label | ...::source(...) |
|
||||
| main.rs:211:14:211:14 | a | semmle.label | a |
|
||||
| main.rs:212:21:212:21 | a [Wrapping] | semmle.label | a [Wrapping] |
|
||||
| main.rs:212:21:212:23 | a.0 | semmle.label | a.0 |
|
||||
| main.rs:214:9:214:9 | a | semmle.label | a |
|
||||
| main.rs:214:13:214:21 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:215:9:215:9 | a | semmle.label | a |
|
||||
| main.rs:215:14:215:22 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:216:9:216:9 | a | semmle.label | a |
|
||||
| main.rs:216:9:216:9 | a [Wrapping] | semmle.label | a [Wrapping] |
|
||||
| main.rs:216:14:216:39 | Wrapping(...) [Wrapping] | semmle.label | Wrapping(...) [Wrapping] |
|
||||
| main.rs:216:23:216:38 | ...::source(...) | semmle.label | ...::source(...) |
|
||||
| main.rs:217:14:217:14 | a | semmle.label | a |
|
||||
| main.rs:218:21:218:21 | a [Wrapping] | semmle.label | a [Wrapping] |
|
||||
| main.rs:218:21:218:23 | a.0 | semmle.label | a.0 |
|
||||
| main.rs:220:9:220:9 | a | semmle.label | a |
|
||||
| main.rs:220:13:220:22 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:221:9:221:9 | a | semmle.label | a |
|
||||
| main.rs:221:15:221:30 | source_usize(...) | semmle.label | source_usize(...) |
|
||||
| main.rs:222:14:222:14 | a | semmle.label | a |
|
||||
| main.rs:223:21:223:21 | a [Wrapping] | semmle.label | a [Wrapping] |
|
||||
| main.rs:223:21:223:23 | a.0 | semmle.label | a.0 |
|
||||
| main.rs:225:13:225:13 | b [Wrapping] | semmle.label | b [Wrapping] |
|
||||
| main.rs:225:32:225:57 | Wrapping(...) [Wrapping] | semmle.label | Wrapping(...) [Wrapping] |
|
||||
| main.rs:225:41:225:56 | ...::source(...) | semmle.label | ...::source(...) |
|
||||
| main.rs:226:13:226:13 | c [Wrapping] | semmle.label | c [Wrapping] |
|
||||
| main.rs:226:32:226:57 | Wrapping(...) [Wrapping] | semmle.label | Wrapping(...) [Wrapping] |
|
||||
| main.rs:226:41:226:56 | ...::source(...) | semmle.label | ...::source(...) |
|
||||
| main.rs:227:13:227:14 | v1 [Wrapping] | semmle.label | v1 [Wrapping] |
|
||||
| main.rs:227:18:227:18 | b [Wrapping] | semmle.label | b [Wrapping] |
|
||||
| main.rs:227:18:227:22 | ... + ... [Wrapping] | semmle.label | ... + ... [Wrapping] |
|
||||
| main.rs:227:22:227:22 | c [Wrapping] | semmle.label | c [Wrapping] |
|
||||
| main.rs:228:21:228:22 | v1 [Wrapping] | semmle.label | v1 [Wrapping] |
|
||||
| main.rs:228:21:228:24 | v1.0 | semmle.label | v1.0 |
|
||||
| main.rs:229:13:229:14 | v2 [Wrapping] | semmle.label | v2 [Wrapping] |
|
||||
| main.rs:229:18:229:18 | b [Wrapping] | semmle.label | b [Wrapping] |
|
||||
| main.rs:229:18:229:25 | b.add(...) [Wrapping] | semmle.label | b.add(...) [Wrapping] |
|
||||
| main.rs:229:24:229:24 | c [Wrapping] | semmle.label | c [Wrapping] |
|
||||
| main.rs:230:21:230:22 | v2 [Wrapping] | semmle.label | v2 [Wrapping] |
|
||||
| main.rs:230:21:230:24 | v2.0 | semmle.label | v2.0 |
|
||||
| main.rs:231:13:231:14 | v3 [Wrapping] | semmle.label | v3 [Wrapping] |
|
||||
| main.rs:231:18:231:19 | - ... [Wrapping] | semmle.label | - ... [Wrapping] |
|
||||
| main.rs:231:19:231:19 | b [Wrapping] | semmle.label | b [Wrapping] |
|
||||
| main.rs:232:21:232:22 | v3 [Wrapping] | semmle.label | v3 [Wrapping] |
|
||||
| main.rs:232:21:232:24 | v3.0 | semmle.label | v3.0 |
|
||||
| main.rs:233:13:233:14 | v4 [Wrapping] | semmle.label | v4 [Wrapping] |
|
||||
| main.rs:233:18:233:18 | b [Wrapping] | semmle.label | b [Wrapping] |
|
||||
| main.rs:233:18:233:24 | b.neg() [Wrapping] | semmle.label | b.neg() [Wrapping] |
|
||||
| main.rs:234:21:234:22 | v4 [Wrapping] | semmle.label | v4 [Wrapping] |
|
||||
| main.rs:234:21:234:24 | v4.0 | semmle.label | v4.0 |
|
||||
| main.rs:235:13:235:14 | v5 [Wrapping] | semmle.label | v5 [Wrapping] |
|
||||
| main.rs:235:18:235:19 | ! ... [Wrapping] | semmle.label | ! ... [Wrapping] |
|
||||
| main.rs:235:19:235:19 | b [Wrapping] | semmle.label | b [Wrapping] |
|
||||
| main.rs:236:21:236:22 | v5 [Wrapping] | semmle.label | v5 [Wrapping] |
|
||||
| main.rs:236:21:236:24 | v5.0 | semmle.label | v5.0 |
|
||||
| main.rs:237:13:237:14 | v6 [Wrapping] | semmle.label | v6 [Wrapping] |
|
||||
| main.rs:237:18:237:18 | b [Wrapping] | semmle.label | b [Wrapping] |
|
||||
| main.rs:237:18:237:24 | b.not() [Wrapping] | semmle.label | b.not() [Wrapping] |
|
||||
| main.rs:238:21:238:22 | v6 [Wrapping] | semmle.label | v6 [Wrapping] |
|
||||
| main.rs:238:21:238:24 | v6.0 | semmle.label | v6.0 |
|
||||
| main.rs:239:13:239:14 | v7 [Wrapping] | semmle.label | v7 [Wrapping] |
|
||||
| main.rs:239:18:239:18 | b [Wrapping] | semmle.label | b [Wrapping] |
|
||||
| main.rs:239:18:239:22 | ... & ... [Wrapping] | semmle.label | ... & ... [Wrapping] |
|
||||
| main.rs:239:22:239:22 | c [Wrapping] | semmle.label | c [Wrapping] |
|
||||
| main.rs:240:21:240:22 | v7 [Wrapping] | semmle.label | v7 [Wrapping] |
|
||||
| main.rs:240:21:240:24 | v7.0 | semmle.label | v7.0 |
|
||||
| main.rs:241:13:241:14 | v8 | semmle.label | v8 |
|
||||
| main.rs:241:13:241:14 | v8 [Wrapping] | semmle.label | v8 [Wrapping] |
|
||||
| main.rs:241:18:241:18 | b [Wrapping] | semmle.label | b [Wrapping] |
|
||||
| main.rs:241:18:241:37 | ... << ... | semmle.label | ... << ... |
|
||||
| main.rs:241:18:241:37 | ... << ... [Wrapping] | semmle.label | ... << ... [Wrapping] |
|
||||
| main.rs:241:23:241:37 | source_usize(...) | semmle.label | source_usize(...) |
|
||||
| main.rs:242:21:242:22 | v8 [Wrapping] | semmle.label | v8 [Wrapping] |
|
||||
| main.rs:242:21:242:24 | v8.0 | semmle.label | v8.0 |
|
||||
subpaths
|
||||
testFailures
|
||||
#select
|
||||
| main.rs:13:10:13:14 | ... + ... | main.rs:12:13:12:22 | source(...) | main.rs:13:10:13:14 | ... + ... | $@ | main.rs:12:13:12:22 | source(...) | source(...) |
|
||||
| main.rs:17:10:17:10 | b | main.rs:15:17:15:26 | source(...) | main.rs:17:10:17:10 | b | $@ | main.rs:15:17:15:26 | source(...) | source(...) |
|
||||
| main.rs:21:10:21:10 | c | main.rs:20:10:20:19 | source(...) | main.rs:21:10:21:10 | c | $@ | main.rs:20:10:20:19 | source(...) | source(...) |
|
||||
| main.rs:26:10:26:11 | - ... | main.rs:25:13:25:22 | source(...) | main.rs:26:10:26:11 | - ... | $@ | main.rs:25:13:25:22 | source(...) | source(...) |
|
||||
| main.rs:32:10:32:17 | b as i64 | main.rs:30:13:30:22 | source(...) | main.rs:32:10:32:17 | b as i64 | $@ | main.rs:30:13:30:22 | source(...) | source(...) |
|
||||
| main.rs:47:14:47:19 | sliced | main.rs:45:17:45:26 | source(...) | main.rs:47:14:47:19 | sliced | $@ | main.rs:45:17:45:26 | source(...) | source(...) |
|
||||
| main.rs:62:14:62:19 | arr[1] | main.rs:61:19:61:28 | source(...) | main.rs:62:14:62:19 | arr[1] | $@ | main.rs:61:19:61:28 | source(...) | source(...) |
|
||||
| main.rs:78:14:78:17 | arr2 | main.rs:77:19:77:28 | source(...) | main.rs:78:14:78:17 | arr2 | $@ | main.rs:77:19:77:28 | source(...) | source(...) |
|
||||
| main.rs:98:14:98:49 | ... .0 | main.rs:98:15:98:30 | source_string(...) | main.rs:98:14:98:49 | ... .0 | $@ | main.rs:98:15:98:30 | source_string(...) | source_string(...) |
|
||||
| main.rs:101:14:101:28 | source_tuple(...) | main.rs:101:14:101:28 | source_tuple(...) | main.rs:101:14:101:28 | source_tuple(...) | $@ | main.rs:101:14:101:28 | source_tuple(...) | source_tuple(...) |
|
||||
| main.rs:102:14:102:30 | ... .0 | main.rs:102:14:102:28 | source_tuple(...) | main.rs:102:14:102:30 | ... .0 | $@ | main.rs:102:14:102:28 | source_tuple(...) | source_tuple(...) |
|
||||
| main.rs:103:14:103:30 | ... .1 | main.rs:103:14:103:28 | source_tuple(...) | main.rs:103:14:103:30 | ... .1 | $@ | main.rs:103:14:103:28 | source_tuple(...) | source_tuple(...) |
|
||||
| main.rs:108:14:108:87 | ... .1 | main.rs:108:32:108:47 | source_string(...) | main.rs:108:14:108:87 | ... .1 | $@ | main.rs:108:32:108:47 | source_string(...) | source_string(...) |
|
||||
| main.rs:114:14:114:66 | ... .0 | main.rs:114:15:114:29 | source_tuple(...) | main.rs:114:14:114:66 | ... .0 | $@ | main.rs:114:15:114:29 | source_tuple(...) | source_tuple(...) |
|
||||
| main.rs:115:14:115:68 | ... .0 | main.rs:115:15:115:29 | source_tuple(...) | main.rs:115:14:115:68 | ... .0 | $@ | main.rs:115:15:115:29 | source_tuple(...) | source_tuple(...) |
|
||||
| main.rs:116:14:116:68 | ... .1 | main.rs:116:15:116:29 | source_tuple(...) | main.rs:116:14:116:68 | ... .1 | $@ | main.rs:116:15:116:29 | source_tuple(...) | source_tuple(...) |
|
||||
| main.rs:14:10:14:14 | ... + ... | main.rs:12:13:12:22 | source(...) | main.rs:14:10:14:14 | ... + ... | $@ | main.rs:12:13:12:22 | source(...) | source(...) |
|
||||
| main.rs:18:10:18:10 | b | main.rs:16:17:16:26 | source(...) | main.rs:18:10:18:10 | b | $@ | main.rs:16:17:16:26 | source(...) | source(...) |
|
||||
| main.rs:22:10:22:10 | c | main.rs:21:10:21:19 | source(...) | main.rs:22:10:22:10 | c | $@ | main.rs:21:10:21:19 | source(...) | source(...) |
|
||||
| main.rs:27:10:27:11 | - ... | main.rs:26:13:26:21 | source(...) | main.rs:27:10:27:11 | - ... | $@ | main.rs:26:13:26:21 | source(...) | source(...) |
|
||||
| main.rs:29:10:29:19 | ! ... | main.rs:29:11:29:19 | source(...) | main.rs:29:10:29:19 | ! ... | $@ | main.rs:29:11:29:19 | source(...) | source(...) |
|
||||
| main.rs:31:10:31:22 | ... - ... | main.rs:31:10:31:18 | source(...) | main.rs:31:10:31:22 | ... - ... | $@ | main.rs:31:10:31:18 | source(...) | source(...) |
|
||||
| main.rs:32:10:32:25 | ... - ... | main.rs:32:17:32:25 | source(...) | main.rs:32:10:32:25 | ... - ... | $@ | main.rs:32:17:32:25 | source(...) | source(...) |
|
||||
| main.rs:34:10:34:22 | ... * ... | main.rs:34:10:34:18 | source(...) | main.rs:34:10:34:22 | ... * ... | $@ | main.rs:34:10:34:18 | source(...) | source(...) |
|
||||
| main.rs:35:10:35:25 | ... * ... | main.rs:35:17:35:25 | source(...) | main.rs:35:10:35:25 | ... * ... | $@ | main.rs:35:17:35:25 | source(...) | source(...) |
|
||||
| main.rs:37:10:37:23 | ... << ... | main.rs:37:10:37:18 | source(...) | main.rs:37:10:37:23 | ... << ... | $@ | main.rs:37:10:37:18 | source(...) | source(...) |
|
||||
| main.rs:38:10:38:26 | ... << ... | main.rs:38:18:38:26 | source(...) | main.rs:38:10:38:26 | ... << ... | $@ | main.rs:38:18:38:26 | source(...) | source(...) |
|
||||
| main.rs:40:10:40:22 | ... ^ ... | main.rs:40:10:40:18 | source(...) | main.rs:40:10:40:22 | ... ^ ... | $@ | main.rs:40:10:40:18 | source(...) | source(...) |
|
||||
| main.rs:41:10:41:27 | ... ^ ... | main.rs:41:18:41:27 | source(...) | main.rs:41:10:41:27 | ... ^ ... | $@ | main.rs:41:18:41:27 | source(...) | source(...) |
|
||||
| main.rs:47:10:47:17 | b as i64 | main.rs:45:13:45:22 | source(...) | main.rs:47:10:47:17 | b as i64 | $@ | main.rs:45:13:45:22 | source(...) | source(...) |
|
||||
| main.rs:62:14:62:19 | sliced | main.rs:60:17:60:26 | source(...) | main.rs:62:14:62:19 | sliced | $@ | main.rs:60:17:60:26 | source(...) | source(...) |
|
||||
| main.rs:77:14:77:19 | arr[1] | main.rs:76:19:76:28 | source(...) | main.rs:77:14:77:19 | arr[1] | $@ | main.rs:76:19:76:28 | source(...) | source(...) |
|
||||
| main.rs:93:14:93:17 | arr2 | main.rs:92:19:92:28 | source(...) | main.rs:93:14:93:17 | arr2 | $@ | main.rs:92:19:92:28 | source(...) | source(...) |
|
||||
| main.rs:113:14:113:49 | ... .0 | main.rs:113:15:113:30 | source_string(...) | main.rs:113:14:113:49 | ... .0 | $@ | main.rs:113:15:113:30 | source_string(...) | source_string(...) |
|
||||
| main.rs:116:14:116:28 | source_tuple(...) | main.rs:116:14:116:28 | source_tuple(...) | main.rs:116:14:116:28 | source_tuple(...) | $@ | main.rs:116:14:116:28 | source_tuple(...) | source_tuple(...) |
|
||||
| main.rs:117:14:117:30 | ... .0 | main.rs:117:14:117:28 | source_tuple(...) | main.rs:117:14:117:30 | ... .0 | $@ | main.rs:117:14:117:28 | source_tuple(...) | source_tuple(...) |
|
||||
| main.rs:118:14:118:30 | ... .1 | main.rs:118:14:118:28 | source_tuple(...) | main.rs:118:14:118:30 | ... .1 | $@ | main.rs:118:14:118:28 | source_tuple(...) | source_tuple(...) |
|
||||
| main.rs:123:14:123:87 | ... .1 | main.rs:123:32:123:47 | source_string(...) | main.rs:123:14:123:87 | ... .1 | $@ | main.rs:123:32:123:47 | source_string(...) | source_string(...) |
|
||||
| main.rs:129:14:129:66 | ... .0 | main.rs:129:15:129:29 | source_tuple(...) | main.rs:129:14:129:66 | ... .0 | $@ | main.rs:129:15:129:29 | source_tuple(...) | source_tuple(...) |
|
||||
| main.rs:130:14:130:68 | ... .0 | main.rs:130:15:130:29 | source_tuple(...) | main.rs:130:14:130:68 | ... .0 | $@ | main.rs:130:15:130:29 | source_tuple(...) | source_tuple(...) |
|
||||
| main.rs:131:14:131:68 | ... .1 | main.rs:131:15:131:29 | source_tuple(...) | main.rs:131:14:131:68 | ... .1 | $@ | main.rs:131:15:131:29 | source_tuple(...) | source_tuple(...) |
|
||||
| main.rs:141:10:141:28 | ... .add(...) | main.rs:141:10:141:18 | source(...) | main.rs:141:10:141:28 | ... .add(...) | $@ | main.rs:141:10:141:18 | source(...) | source(...) |
|
||||
| main.rs:143:10:143:28 | 1i64.add(...) | main.rs:143:19:143:27 | source(...) | main.rs:143:10:143:28 | 1i64.add(...) | $@ | main.rs:143:19:143:27 | source(...) | source(...) |
|
||||
| main.rs:146:10:146:28 | ... .sub(...) | main.rs:146:10:146:18 | source(...) | main.rs:146:10:146:28 | ... .sub(...) | $@ | main.rs:146:10:146:18 | source(...) | source(...) |
|
||||
| main.rs:148:10:148:28 | 1i64.sub(...) | main.rs:148:19:148:27 | source(...) | main.rs:148:10:148:28 | 1i64.sub(...) | $@ | main.rs:148:19:148:27 | source(...) | source(...) |
|
||||
| main.rs:151:10:151:28 | ... .mul(...) | main.rs:151:10:151:18 | source(...) | main.rs:151:10:151:28 | ... .mul(...) | $@ | main.rs:151:10:151:18 | source(...) | source(...) |
|
||||
| main.rs:153:10:153:28 | 1i64.mul(...) | main.rs:153:19:153:27 | source(...) | main.rs:153:10:153:28 | 1i64.mul(...) | $@ | main.rs:153:19:153:27 | source(...) | source(...) |
|
||||
| main.rs:156:10:156:28 | ... .shl(...) | main.rs:156:10:156:18 | source(...) | main.rs:156:10:156:28 | ... .shl(...) | $@ | main.rs:156:10:156:18 | source(...) | source(...) |
|
||||
| main.rs:157:10:157:25 | ... .shl(...) | main.rs:157:10:157:18 | source(...) | main.rs:157:10:157:25 | ... .shl(...) | $@ | main.rs:157:10:157:18 | source(...) | source(...) |
|
||||
| main.rs:158:10:158:28 | 1i64.shl(...) | main.rs:158:19:158:27 | source(...) | main.rs:158:10:158:28 | 1i64.shl(...) | $@ | main.rs:158:19:158:27 | source(...) | source(...) |
|
||||
| main.rs:160:10:160:28 | ... .shr(...) | main.rs:160:10:160:18 | source(...) | main.rs:160:10:160:28 | ... .shr(...) | $@ | main.rs:160:10:160:18 | source(...) | source(...) |
|
||||
| main.rs:161:10:161:25 | ... .shr(...) | main.rs:161:10:161:18 | source(...) | main.rs:161:10:161:25 | ... .shr(...) | $@ | main.rs:161:10:161:18 | source(...) | source(...) |
|
||||
| main.rs:162:10:162:28 | 1i64.shr(...) | main.rs:162:19:162:27 | source(...) | main.rs:162:10:162:28 | 1i64.shr(...) | $@ | main.rs:162:19:162:27 | source(...) | source(...) |
|
||||
| main.rs:164:10:164:30 | ... .bitor(...) | main.rs:164:10:164:18 | source(...) | main.rs:164:10:164:30 | ... .bitor(...) | $@ | main.rs:164:10:164:18 | source(...) | source(...) |
|
||||
| main.rs:166:10:166:30 | 1i64.bitor(...) | main.rs:166:21:166:29 | source(...) | main.rs:166:10:166:30 | 1i64.bitor(...) | $@ | main.rs:166:21:166:29 | source(...) | source(...) |
|
||||
| main.rs:176:10:176:10 | a | main.rs:170:18:170:26 | source(...) | main.rs:176:10:176:10 | a | $@ | main.rs:170:18:170:26 | source(...) | source(...) |
|
||||
| main.rs:176:10:176:10 | a | main.rs:171:18:171:26 | source(...) | main.rs:176:10:176:10 | a | $@ | main.rs:171:18:171:26 | source(...) | source(...) |
|
||||
| main.rs:176:10:176:10 | a | main.rs:172:18:172:26 | source(...) | main.rs:176:10:176:10 | a | $@ | main.rs:172:18:172:26 | source(...) | source(...) |
|
||||
| main.rs:176:10:176:10 | a | main.rs:173:18:173:26 | source(...) | main.rs:176:10:176:10 | a | $@ | main.rs:173:18:173:26 | source(...) | source(...) |
|
||||
| main.rs:176:10:176:10 | a | main.rs:174:18:174:26 | source(...) | main.rs:176:10:176:10 | a | $@ | main.rs:174:18:174:26 | source(...) | source(...) |
|
||||
| main.rs:176:10:176:10 | a | main.rs:175:21:175:29 | source(...) | main.rs:176:10:176:10 | a | $@ | main.rs:175:21:175:29 | source(...) | source(...) |
|
||||
| main.rs:178:10:178:24 | ... .neg() | main.rs:178:10:178:18 | source(...) | main.rs:178:10:178:24 | ... .neg() | $@ | main.rs:178:10:178:18 | source(...) | source(...) |
|
||||
| main.rs:179:10:179:24 | ... .not() | main.rs:179:10:179:18 | source(...) | main.rs:179:10:179:24 | ... .not() | $@ | main.rs:179:10:179:18 | source(...) | source(...) |
|
||||
| main.rs:201:21:201:23 | a.0 | main.rs:199:45:199:60 | ...::source(...) | main.rs:201:21:201:23 | a.0 | $@ | main.rs:199:45:199:60 | ...::source(...) | ...::source(...) |
|
||||
| main.rs:205:14:205:14 | a | main.rs:203:22:203:30 | source(...) | main.rs:205:14:205:14 | a | $@ | main.rs:203:22:203:30 | source(...) | source(...) |
|
||||
| main.rs:206:21:206:23 | a.0 | main.rs:199:45:199:60 | ...::source(...) | main.rs:206:21:206:23 | a.0 | $@ | main.rs:199:45:199:60 | ...::source(...) | ...::source(...) |
|
||||
| main.rs:206:21:206:23 | a.0 | main.rs:203:22:203:30 | source(...) | main.rs:206:21:206:23 | a.0 | $@ | main.rs:203:22:203:30 | source(...) | source(...) |
|
||||
| main.rs:206:21:206:23 | a.0 | main.rs:204:31:204:46 | ...::source(...) | main.rs:206:21:206:23 | a.0 | $@ | main.rs:204:31:204:46 | ...::source(...) | ...::source(...) |
|
||||
| main.rs:211:14:211:14 | a | main.rs:208:13:208:21 | source(...) | main.rs:211:14:211:14 | a | $@ | main.rs:208:13:208:21 | source(...) | source(...) |
|
||||
| main.rs:211:14:211:14 | a | main.rs:209:14:209:22 | source(...) | main.rs:211:14:211:14 | a | $@ | main.rs:209:14:209:22 | source(...) | source(...) |
|
||||
| main.rs:212:21:212:23 | a.0 | main.rs:208:13:208:21 | source(...) | main.rs:212:21:212:23 | a.0 | $@ | main.rs:208:13:208:21 | source(...) | source(...) |
|
||||
| main.rs:212:21:212:23 | a.0 | main.rs:209:14:209:22 | source(...) | main.rs:212:21:212:23 | a.0 | $@ | main.rs:209:14:209:22 | source(...) | source(...) |
|
||||
| main.rs:212:21:212:23 | a.0 | main.rs:210:33:210:48 | ...::source(...) | main.rs:212:21:212:23 | a.0 | $@ | main.rs:210:33:210:48 | ...::source(...) | ...::source(...) |
|
||||
| main.rs:217:14:217:14 | a | main.rs:214:13:214:21 | source(...) | main.rs:217:14:217:14 | a | $@ | main.rs:214:13:214:21 | source(...) | source(...) |
|
||||
| main.rs:217:14:217:14 | a | main.rs:215:14:215:22 | source(...) | main.rs:217:14:217:14 | a | $@ | main.rs:215:14:215:22 | source(...) | source(...) |
|
||||
| main.rs:218:21:218:23 | a.0 | main.rs:214:13:214:21 | source(...) | main.rs:218:21:218:23 | a.0 | $@ | main.rs:214:13:214:21 | source(...) | source(...) |
|
||||
| main.rs:218:21:218:23 | a.0 | main.rs:215:14:215:22 | source(...) | main.rs:218:21:218:23 | a.0 | $@ | main.rs:215:14:215:22 | source(...) | source(...) |
|
||||
| main.rs:218:21:218:23 | a.0 | main.rs:216:23:216:38 | ...::source(...) | main.rs:218:21:218:23 | a.0 | $@ | main.rs:216:23:216:38 | ...::source(...) | ...::source(...) |
|
||||
| main.rs:222:14:222:14 | a | main.rs:220:13:220:22 | source(...) | main.rs:222:14:222:14 | a | $@ | main.rs:220:13:220:22 | source(...) | source(...) |
|
||||
| main.rs:222:14:222:14 | a | main.rs:221:15:221:30 | source_usize(...) | main.rs:222:14:222:14 | a | $@ | main.rs:221:15:221:30 | source_usize(...) | source_usize(...) |
|
||||
| main.rs:223:21:223:23 | a.0 | main.rs:220:13:220:22 | source(...) | main.rs:223:21:223:23 | a.0 | $@ | main.rs:220:13:220:22 | source(...) | source(...) |
|
||||
| main.rs:223:21:223:23 | a.0 | main.rs:221:15:221:30 | source_usize(...) | main.rs:223:21:223:23 | a.0 | $@ | main.rs:221:15:221:30 | source_usize(...) | source_usize(...) |
|
||||
| main.rs:228:21:228:24 | v1.0 | main.rs:225:41:225:56 | ...::source(...) | main.rs:228:21:228:24 | v1.0 | $@ | main.rs:225:41:225:56 | ...::source(...) | ...::source(...) |
|
||||
| main.rs:228:21:228:24 | v1.0 | main.rs:226:41:226:56 | ...::source(...) | main.rs:228:21:228:24 | v1.0 | $@ | main.rs:226:41:226:56 | ...::source(...) | ...::source(...) |
|
||||
| main.rs:230:21:230:24 | v2.0 | main.rs:225:41:225:56 | ...::source(...) | main.rs:230:21:230:24 | v2.0 | $@ | main.rs:225:41:225:56 | ...::source(...) | ...::source(...) |
|
||||
| main.rs:230:21:230:24 | v2.0 | main.rs:226:41:226:56 | ...::source(...) | main.rs:230:21:230:24 | v2.0 | $@ | main.rs:226:41:226:56 | ...::source(...) | ...::source(...) |
|
||||
| main.rs:232:21:232:24 | v3.0 | main.rs:225:41:225:56 | ...::source(...) | main.rs:232:21:232:24 | v3.0 | $@ | main.rs:225:41:225:56 | ...::source(...) | ...::source(...) |
|
||||
| main.rs:234:21:234:24 | v4.0 | main.rs:225:41:225:56 | ...::source(...) | main.rs:234:21:234:24 | v4.0 | $@ | main.rs:225:41:225:56 | ...::source(...) | ...::source(...) |
|
||||
| main.rs:236:21:236:24 | v5.0 | main.rs:225:41:225:56 | ...::source(...) | main.rs:236:21:236:24 | v5.0 | $@ | main.rs:225:41:225:56 | ...::source(...) | ...::source(...) |
|
||||
| main.rs:238:21:238:24 | v6.0 | main.rs:225:41:225:56 | ...::source(...) | main.rs:238:21:238:24 | v6.0 | $@ | main.rs:225:41:225:56 | ...::source(...) | ...::source(...) |
|
||||
| main.rs:240:21:240:24 | v7.0 | main.rs:225:41:225:56 | ...::source(...) | main.rs:240:21:240:24 | v7.0 | $@ | main.rs:225:41:225:56 | ...::source(...) | ...::source(...) |
|
||||
| main.rs:240:21:240:24 | v7.0 | main.rs:226:41:226:56 | ...::source(...) | main.rs:240:21:240:24 | v7.0 | $@ | main.rs:226:41:226:56 | ...::source(...) | ...::source(...) |
|
||||
| main.rs:242:21:242:24 | v8.0 | main.rs:225:41:225:56 | ...::source(...) | main.rs:242:21:242:24 | v8.0 | $@ | main.rs:225:41:225:56 | ...::source(...) | ...::source(...) |
|
||||
| main.rs:242:21:242:24 | v8.0 | main.rs:241:23:241:37 | source_usize(...) | main.rs:242:21:242:24 | v8.0 | $@ | main.rs:241:23:241:37 | source_usize(...) | source_usize(...) |
|
||||
|
||||
@@ -11,6 +11,7 @@ fn sink(s: i64) {
|
||||
fn addition() {
|
||||
let a = source(42);
|
||||
sink(a + 1); // $ hasTaintFlow=42
|
||||
sink(1 + a); // $ hasTaintFlow=42
|
||||
|
||||
let mut b = source(58);
|
||||
b += 2;
|
||||
@@ -21,9 +22,23 @@ fn addition() {
|
||||
sink(c); // $ hasTaintFlow=99
|
||||
}
|
||||
|
||||
fn negation() {
|
||||
let a = source(17);
|
||||
sink(-a); // $ hasTaintFlow=17
|
||||
fn more_ops() {
|
||||
let a = source(1);
|
||||
sink(-a); // $ hasTaintFlow=1
|
||||
|
||||
sink(!source(2)); // $ hasTaintFlow=2
|
||||
|
||||
sink(source(3) - 3); // $ hasTaintFlow=3
|
||||
sink(4i64 - source(4)); // $ hasTaintFlow=4
|
||||
|
||||
sink(source(5) * 5); // $ hasTaintFlow=5
|
||||
sink(6i64 * source(6)); // $ hasTaintFlow=6
|
||||
|
||||
sink(source(7) << 7); // $ hasTaintFlow=7
|
||||
sink(8i64 << source(8)); // $ hasTaintFlow=8
|
||||
|
||||
sink(source(9) ^ 9); // $ hasTaintFlow=9
|
||||
sink(10i64 ^ source(10)); // $ hasTaintFlow=10
|
||||
}
|
||||
|
||||
fn cast() {
|
||||
@@ -120,12 +135,122 @@ mod tuples {
|
||||
}
|
||||
}
|
||||
|
||||
use std::ops::{Add, Sub, Mul, Shl, Shr, BitOr, AddAssign, SubAssign, MulAssign, ShlAssign, ShrAssign, BitXorAssign, Neg, Not};
|
||||
|
||||
fn std_ops() {
|
||||
sink(source(1).add(2i64)); // $ hasTaintFlow=1
|
||||
sink(source(1).add(2)); // $ MISSING: hasTaintFlow=1 --- the missing results here are due to failing to resolve targets for `add` etc where there's no explicit type
|
||||
sink(1i64.add(source(2))); // $ hasTaintFlow=2
|
||||
sink(1.add(source(2))); // $ MISSING: hasTaintFlow=2
|
||||
|
||||
sink(source(1).sub(2i64)); // $ hasTaintFlow=1
|
||||
sink(source(1).sub(2)); // $ MISSING: hasTaintFlow=1
|
||||
sink(1i64.sub(source(2))); // $ hasTaintFlow=2
|
||||
sink(1.sub(source(2))); // $ MISSING: hasTaintFlow=2
|
||||
|
||||
sink(source(1).mul(2i64)); // $ hasTaintFlow=1
|
||||
sink(source(1).mul(2)); // $ MISSING: hasTaintFlow=1
|
||||
sink(1i64.mul(source(2))); // $ hasTaintFlow=2
|
||||
sink(1.mul(source(2))); // $ MISSING: hasTaintFlow=2
|
||||
|
||||
sink(source(1).shl(2i64)); // $ hasTaintFlow=1
|
||||
sink(source(1).shl(2)); // $ hasTaintFlow=1
|
||||
sink(1i64.shl(source(2))); // $ hasTaintFlow=2
|
||||
|
||||
sink(source(1).shr(2i64)); // $ hasTaintFlow=1
|
||||
sink(source(1).shr(2)); // $ hasTaintFlow=1
|
||||
sink(1i64.shr(source(2))); // $ hasTaintFlow=2
|
||||
|
||||
sink(source(1).bitor(2i64)); // $ hasTaintFlow=1
|
||||
sink(source(1).bitor(2)); // $ MISSING: hasTaintFlow=1
|
||||
sink(1i64.bitor(source(2))); // $ hasTaintFlow=2
|
||||
sink(1.bitor(source(2))); // $ MISSING: hasTaintFlow=2
|
||||
|
||||
let mut a: i64 = 1;
|
||||
a.add_assign(source(2));
|
||||
a.sub_assign(source(3));
|
||||
a.mul_assign(source(4));
|
||||
a.shl_assign(source(5));
|
||||
a.shr_assign(source(6));
|
||||
a.bitxor_assign(source(7));
|
||||
sink(a); // $ hasTaintFlow=2 hasTaintFlow=3 hasTaintFlow=4 hasTaintFlow=5 hasTaintFlow=6 hasTaintFlow=7
|
||||
|
||||
sink(source(1).neg()); // $ hasTaintFlow=1
|
||||
sink(source(1).not()); // $ hasTaintFlow=1
|
||||
}
|
||||
|
||||
mod wrapping {
|
||||
use std::num::Wrapping;
|
||||
use std::ops::{Add, AddAssign, Neg, Not};
|
||||
|
||||
fn source(i: i64) -> Wrapping<i64> {
|
||||
Wrapping(i)
|
||||
}
|
||||
|
||||
fn source_usize(i: i64) -> usize {
|
||||
i as usize
|
||||
}
|
||||
|
||||
fn sink(s: Wrapping<i64>) {
|
||||
println!("{}", s);
|
||||
}
|
||||
|
||||
pub fn wrapping() {
|
||||
let mut a: Wrapping<i64> = Wrapping(crate::source(1));
|
||||
sink(a); // $ MISSING: hasTaintFlow=1
|
||||
crate::sink(a.0); // $ hasValueFlow=1
|
||||
|
||||
a.add_assign(source(2));
|
||||
a.add_assign(Wrapping(crate::source(3)));
|
||||
sink(a); // $ hasTaintFlow=2 MISSING: hasTaintFlow=1 hasTaintFlow=3
|
||||
crate::sink(a.0); // $ hasValueFlow=1 hasTaintFlow=2 hasTaintFlow=3
|
||||
|
||||
a = source(4);
|
||||
a += source(5);
|
||||
a += std::num::Wrapping(crate::source(6));
|
||||
sink(a); // $ hasTaintFlow=4 hasTaintFlow=5 MISSING: hasTaintFlow=6
|
||||
crate::sink(a.0); // $ hasTaintFlow=4 hasTaintFlow=5 hasTaintFlow=6
|
||||
|
||||
a = source(7);
|
||||
a &= source(8);
|
||||
a &= Wrapping(crate::source(9));
|
||||
sink(a); // $ hasTaintFlow=7 hasTaintFlow=8 MISSING: hasTaintFlow=9
|
||||
crate::sink(a.0); // $ hasTaintFlow=7 hasTaintFlow=8 hasTaintFlow=9
|
||||
|
||||
a = source(10);
|
||||
a <<= source_usize(11);
|
||||
sink(a); // $ hasTaintFlow=11 hasTaintFlow=10
|
||||
crate::sink(a.0); // $ hasTaintFlow=11 hasTaintFlow=10
|
||||
|
||||
let b: Wrapping<i64> = Wrapping(crate::source(1));
|
||||
let c: Wrapping<i64> = Wrapping(crate::source(2));
|
||||
let v1 = b + c;
|
||||
crate::sink(v1.0); // $ hasTaintFlow=1 hasTaintFlow=2
|
||||
let v2 = b.add(c);
|
||||
crate::sink(v2.0); // $ hasTaintFlow=1 hasTaintFlow=2
|
||||
let v3 = -b;
|
||||
crate::sink(v3.0); // $ hasTaintFlow=1
|
||||
let v4 = b.neg();
|
||||
crate::sink(v4.0); // $ hasTaintFlow=1
|
||||
let v5 = !b;
|
||||
crate::sink(v5.0); // $ hasTaintFlow=1
|
||||
let v6 = b.not();
|
||||
crate::sink(v6.0); // $ hasTaintFlow=1
|
||||
let v7 = b & c;
|
||||
crate::sink(v7.0); // $ hasTaintFlow=1 hasTaintFlow=2
|
||||
let v8 = b << source_usize(3);
|
||||
crate::sink(v8.0); // $ hasTaintFlow=1 hasTaintFlow=3
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
addition();
|
||||
negation();
|
||||
more_ops();
|
||||
cast();
|
||||
string_slice();
|
||||
array_source::array_tainted();
|
||||
array_sink::array_with_taint();
|
||||
tuples::tuples();
|
||||
std_ops();
|
||||
wrapping::wrapping();
|
||||
}
|
||||
|
||||
@@ -938,6 +938,52 @@ mod patterns {
|
||||
}
|
||||
}
|
||||
|
||||
/// Tests for referring to constructors via `Self`
|
||||
mod self_constructors {
|
||||
struct TupleStruct(i32); // $ item=i32
|
||||
|
||||
#[rustfmt::skip]
|
||||
impl TupleStruct { // $ item=TupleStruct
|
||||
#[rustfmt::skip]
|
||||
fn new(x: i32) -> Self { // $ item=i32 item=TupleStruct
|
||||
let _ = Self(0); // $ item=TupleStruct
|
||||
let constructor = Self; // $ item=TupleStruct
|
||||
constructor(x)
|
||||
} // new
|
||||
} // ImplTupleStruct
|
||||
|
||||
struct StructStruct {
|
||||
a: i32, // $ item=i32
|
||||
}
|
||||
|
||||
#[rustfmt::skip]
|
||||
impl StructStruct { // $ item=StructStruct
|
||||
#[rustfmt::skip]
|
||||
fn new(a: i32) -> Self { // $ item=i32 item=StructStruct
|
||||
Self { a } // $ item=StructStruct
|
||||
} // new
|
||||
} // ImplStructStruct
|
||||
|
||||
enum MyEnum {
|
||||
A(
|
||||
i32, // $ item=i32
|
||||
), // MyEnumA
|
||||
}
|
||||
|
||||
#[rustfmt::skip]
|
||||
impl MyEnum { // $ item=MyEnum
|
||||
fn get(self) -> i32{ // $ item=i32
|
||||
match self {
|
||||
Self::A( // $ item=MyEnumA
|
||||
x,
|
||||
) => {
|
||||
x
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
my::nested::nested1::nested2::f(); // $ item=I4
|
||||
my::f(); // $ item=I38
|
||||
|
||||
@@ -33,6 +33,7 @@ mod
|
||||
| main.rs:819:1:871:1 | mod associated_types |
|
||||
| main.rs:877:1:896:1 | mod impl_with_attribute_macro |
|
||||
| main.rs:898:1:939:1 | mod patterns |
|
||||
| main.rs:941:1:985:1 | mod self_constructors |
|
||||
| my2/mod.rs:1:1:1:16 | mod nested2 |
|
||||
| my2/mod.rs:20:1:20:12 | mod my3 |
|
||||
| my2/mod.rs:22:1:23:10 | mod mymod |
|
||||
@@ -73,7 +74,7 @@ resolvePath
|
||||
| main.rs:37:17:37:24 | ...::f | main.rs:26:9:28:9 | fn f |
|
||||
| main.rs:39:17:39:23 | println | {EXTERNAL LOCATION} | MacroRules |
|
||||
| main.rs:40:17:40:17 | f | main.rs:26:9:28:9 | fn f |
|
||||
| main.rs:47:9:47:13 | super | main.rs:1:1:978:2 | SourceFile |
|
||||
| main.rs:47:9:47:13 | super | main.rs:1:1:1024:2 | SourceFile |
|
||||
| main.rs:47:9:47:17 | ...::m1 | main.rs:20:1:44:1 | mod m1 |
|
||||
| main.rs:47:9:47:21 | ...::m2 | main.rs:25:5:43:5 | mod m2 |
|
||||
| main.rs:47:9:47:24 | ...::g | main.rs:30:9:34:9 | fn g |
|
||||
@@ -88,7 +89,7 @@ resolvePath
|
||||
| main.rs:68:17:68:19 | Foo | main.rs:66:9:66:21 | struct Foo |
|
||||
| main.rs:71:13:71:15 | Foo | main.rs:60:5:60:17 | struct Foo |
|
||||
| main.rs:73:5:73:5 | f | main.rs:62:5:69:5 | fn f |
|
||||
| main.rs:75:5:75:8 | self | main.rs:1:1:978:2 | SourceFile |
|
||||
| main.rs:75:5:75:8 | self | main.rs:1:1:1024:2 | SourceFile |
|
||||
| main.rs:75:5:75:11 | ...::i | main.rs:78:1:90:1 | fn i |
|
||||
| main.rs:79:5:79:11 | println | {EXTERNAL LOCATION} | MacroRules |
|
||||
| main.rs:81:13:81:15 | Foo | main.rs:55:1:55:13 | struct Foo |
|
||||
@@ -110,7 +111,7 @@ resolvePath
|
||||
| main.rs:112:9:112:15 | println | {EXTERNAL LOCATION} | MacroRules |
|
||||
| main.rs:118:9:118:15 | println | {EXTERNAL LOCATION} | MacroRules |
|
||||
| main.rs:122:9:122:15 | println | {EXTERNAL LOCATION} | MacroRules |
|
||||
| main.rs:125:13:125:17 | super | main.rs:1:1:978:2 | SourceFile |
|
||||
| main.rs:125:13:125:17 | super | main.rs:1:1:1024:2 | SourceFile |
|
||||
| main.rs:125:13:125:21 | ...::m5 | main.rs:110:1:114:1 | mod m5 |
|
||||
| main.rs:126:9:126:9 | f | main.rs:111:5:113:5 | fn f |
|
||||
| main.rs:126:9:126:9 | f | main.rs:117:5:119:5 | fn f |
|
||||
@@ -477,79 +478,95 @@ resolvePath
|
||||
| main.rs:935:13:935:16 | Some | {EXTERNAL LOCATION} | Some |
|
||||
| main.rs:935:18:935:18 | z | main.rs:922:5:924:12 | Const |
|
||||
| main.rs:935:24:935:24 | z | main.rs:922:5:924:12 | Const |
|
||||
| main.rs:942:5:942:6 | my | main.rs:1:1:1:7 | mod my |
|
||||
| main.rs:942:5:942:14 | ...::nested | my.rs:1:1:1:15 | mod nested |
|
||||
| main.rs:942:5:942:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 |
|
||||
| main.rs:942:5:942:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 |
|
||||
| main.rs:942:5:942:35 | ...::f | my/nested.rs:3:9:5:9 | fn f |
|
||||
| main.rs:943:5:943:6 | my | main.rs:1:1:1:7 | mod my |
|
||||
| main.rs:943:5:943:9 | ...::f | my.rs:5:1:7:1 | fn f |
|
||||
| main.rs:944:5:944:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 |
|
||||
| main.rs:944:5:944:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 |
|
||||
| main.rs:944:5:944:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 |
|
||||
| main.rs:944:5:944:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f |
|
||||
| main.rs:945:5:945:5 | f | my2/nested2.rs:3:9:5:9 | fn f |
|
||||
| main.rs:946:5:946:5 | g | my2/nested2.rs:7:9:9:9 | fn g |
|
||||
| main.rs:947:5:947:9 | crate | main.rs:0:0:0:0 | Crate(main@0.0.1) |
|
||||
| main.rs:947:5:947:12 | ...::h | main.rs:57:1:76:1 | fn h |
|
||||
| main.rs:948:5:948:6 | m1 | main.rs:20:1:44:1 | mod m1 |
|
||||
| main.rs:948:5:948:10 | ...::m2 | main.rs:25:5:43:5 | mod m2 |
|
||||
| main.rs:948:5:948:13 | ...::g | main.rs:30:9:34:9 | fn g |
|
||||
| main.rs:949:5:949:6 | m1 | main.rs:20:1:44:1 | mod m1 |
|
||||
| main.rs:949:5:949:10 | ...::m2 | main.rs:25:5:43:5 | mod m2 |
|
||||
| main.rs:949:5:949:14 | ...::m3 | main.rs:36:9:42:9 | mod m3 |
|
||||
| main.rs:949:5:949:17 | ...::h | main.rs:37:27:41:13 | fn h |
|
||||
| main.rs:950:5:950:6 | m4 | main.rs:46:1:53:1 | mod m4 |
|
||||
| main.rs:950:5:950:9 | ...::i | main.rs:49:5:52:5 | fn i |
|
||||
| main.rs:951:5:951:5 | h | main.rs:57:1:76:1 | fn h |
|
||||
| main.rs:952:5:952:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f |
|
||||
| main.rs:953:5:953:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g |
|
||||
| main.rs:954:5:954:5 | j | main.rs:104:1:108:1 | fn j |
|
||||
| main.rs:955:5:955:6 | m6 | main.rs:116:1:128:1 | mod m6 |
|
||||
| main.rs:955:5:955:9 | ...::g | main.rs:121:5:127:5 | fn g |
|
||||
| main.rs:956:5:956:6 | m7 | main.rs:130:1:149:1 | mod m7 |
|
||||
| main.rs:956:5:956:9 | ...::f | main.rs:141:5:148:5 | fn f |
|
||||
| main.rs:957:5:957:6 | m8 | main.rs:151:1:205:1 | mod m8 |
|
||||
| main.rs:957:5:957:9 | ...::g | main.rs:189:5:204:5 | fn g |
|
||||
| main.rs:958:5:958:6 | m9 | main.rs:207:1:215:1 | mod m9 |
|
||||
| main.rs:958:5:958:9 | ...::f | main.rs:210:5:214:5 | fn f |
|
||||
| main.rs:959:5:959:7 | m11 | main.rs:238:1:275:1 | mod m11 |
|
||||
| main.rs:959:5:959:10 | ...::f | main.rs:243:5:246:5 | fn f |
|
||||
| main.rs:960:5:960:7 | m15 | main.rs:306:1:375:1 | mod m15 |
|
||||
| main.rs:960:5:960:10 | ...::f | main.rs:362:5:374:5 | fn f |
|
||||
| main.rs:961:5:961:7 | m16 | main.rs:377:1:574:1 | mod m16 |
|
||||
| main.rs:961:5:961:10 | ...::f | main.rs:446:5:470:5 | fn f |
|
||||
| main.rs:962:5:962:20 | trait_visibility | main.rs:576:1:626:1 | mod trait_visibility |
|
||||
| main.rs:962:5:962:23 | ...::f | main.rs:603:5:625:5 | fn f |
|
||||
| main.rs:963:5:963:7 | m17 | main.rs:628:1:658:1 | mod m17 |
|
||||
| main.rs:963:5:963:10 | ...::f | main.rs:652:5:657:5 | fn f |
|
||||
| main.rs:964:5:964:11 | nested6 | my2/nested2.rs:14:5:18:5 | mod nested6 |
|
||||
| main.rs:964:5:964:14 | ...::f | my2/nested2.rs:15:9:17:9 | fn f |
|
||||
| main.rs:965:5:965:11 | nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 |
|
||||
| main.rs:965:5:965:14 | ...::f | my2/nested2.rs:23:9:25:9 | fn f |
|
||||
| main.rs:966:5:966:7 | my3 | my2/mod.rs:20:1:20:12 | mod my3 |
|
||||
| main.rs:966:5:966:10 | ...::f | my2/my3/mod.rs:1:1:5:1 | fn f |
|
||||
| main.rs:967:5:967:12 | nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f |
|
||||
| main.rs:968:5:968:12 | my_alias | main.rs:1:1:1:7 | mod my |
|
||||
| main.rs:968:5:968:22 | ...::nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f |
|
||||
| main.rs:969:5:969:7 | m18 | main.rs:660:1:678:1 | mod m18 |
|
||||
| main.rs:969:5:969:12 | ...::m19 | main.rs:665:5:677:5 | mod m19 |
|
||||
| main.rs:969:5:969:17 | ...::m20 | main.rs:670:9:676:9 | mod m20 |
|
||||
| main.rs:969:5:969:20 | ...::g | main.rs:671:13:675:13 | fn g |
|
||||
| main.rs:970:5:970:7 | m23 | main.rs:707:1:732:1 | mod m23 |
|
||||
| main.rs:970:5:970:10 | ...::f | main.rs:727:5:731:5 | fn f |
|
||||
| main.rs:971:5:971:7 | m24 | main.rs:734:1:802:1 | mod m24 |
|
||||
| main.rs:971:5:971:10 | ...::f | main.rs:788:5:801:5 | fn f |
|
||||
| main.rs:972:5:972:8 | zelf | main.rs:0:0:0:0 | Crate(main@0.0.1) |
|
||||
| main.rs:972:5:972:11 | ...::h | main.rs:57:1:76:1 | fn h |
|
||||
| main.rs:973:5:973:13 | z_changed | main.rs:807:1:807:9 | fn z_changed |
|
||||
| main.rs:974:5:974:11 | AStruct | main.rs:809:1:809:17 | struct AStruct |
|
||||
| main.rs:974:5:974:22 | ...::z_on_type | main.rs:813:5:813:17 | fn z_on_type |
|
||||
| main.rs:975:5:975:11 | AStruct | main.rs:809:1:809:17 | struct AStruct |
|
||||
| main.rs:976:5:976:29 | impl_with_attribute_macro | main.rs:877:1:896:1 | mod impl_with_attribute_macro |
|
||||
| main.rs:976:5:976:35 | ...::test | main.rs:892:5:895:5 | fn test |
|
||||
| main.rs:977:5:977:12 | patterns | main.rs:898:1:939:1 | mod patterns |
|
||||
| main.rs:977:5:977:18 | ...::test | main.rs:899:5:913:5 | fn test |
|
||||
| main.rs:943:24:943:26 | i32 | {EXTERNAL LOCATION} | struct i32 |
|
||||
| main.rs:946:10:946:20 | TupleStruct | main.rs:943:5:943:28 | struct TupleStruct |
|
||||
| main.rs:948:19:948:21 | i32 | {EXTERNAL LOCATION} | struct i32 |
|
||||
| main.rs:948:27:948:30 | Self | main.rs:943:5:943:28 | struct TupleStruct |
|
||||
| main.rs:949:21:949:24 | Self | main.rs:943:5:943:28 | struct TupleStruct |
|
||||
| main.rs:950:31:950:34 | Self | main.rs:943:5:943:28 | struct TupleStruct |
|
||||
| main.rs:956:12:956:14 | i32 | {EXTERNAL LOCATION} | struct i32 |
|
||||
| main.rs:960:10:960:21 | StructStruct | main.rs:955:5:957:5 | struct StructStruct |
|
||||
| main.rs:962:19:962:21 | i32 | {EXTERNAL LOCATION} | struct i32 |
|
||||
| main.rs:962:27:962:30 | Self | main.rs:955:5:957:5 | struct StructStruct |
|
||||
| main.rs:963:13:963:16 | Self | main.rs:955:5:957:5 | struct StructStruct |
|
||||
| main.rs:969:13:969:15 | i32 | {EXTERNAL LOCATION} | struct i32 |
|
||||
| main.rs:974:10:974:15 | MyEnum | main.rs:967:5:971:5 | enum MyEnum |
|
||||
| main.rs:975:25:975:27 | i32 | {EXTERNAL LOCATION} | struct i32 |
|
||||
| main.rs:977:17:977:20 | Self | main.rs:967:5:971:5 | enum MyEnum |
|
||||
| main.rs:977:17:977:23 | ...::A | main.rs:968:9:970:9 | A |
|
||||
| main.rs:988:5:988:6 | my | main.rs:1:1:1:7 | mod my |
|
||||
| main.rs:988:5:988:14 | ...::nested | my.rs:1:1:1:15 | mod nested |
|
||||
| main.rs:988:5:988:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 |
|
||||
| main.rs:988:5:988:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 |
|
||||
| main.rs:988:5:988:35 | ...::f | my/nested.rs:3:9:5:9 | fn f |
|
||||
| main.rs:989:5:989:6 | my | main.rs:1:1:1:7 | mod my |
|
||||
| main.rs:989:5:989:9 | ...::f | my.rs:5:1:7:1 | fn f |
|
||||
| main.rs:990:5:990:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 |
|
||||
| main.rs:990:5:990:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 |
|
||||
| main.rs:990:5:990:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 |
|
||||
| main.rs:990:5:990:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f |
|
||||
| main.rs:991:5:991:5 | f | my2/nested2.rs:3:9:5:9 | fn f |
|
||||
| main.rs:992:5:992:5 | g | my2/nested2.rs:7:9:9:9 | fn g |
|
||||
| main.rs:993:5:993:9 | crate | main.rs:0:0:0:0 | Crate(main@0.0.1) |
|
||||
| main.rs:993:5:993:12 | ...::h | main.rs:57:1:76:1 | fn h |
|
||||
| main.rs:994:5:994:6 | m1 | main.rs:20:1:44:1 | mod m1 |
|
||||
| main.rs:994:5:994:10 | ...::m2 | main.rs:25:5:43:5 | mod m2 |
|
||||
| main.rs:994:5:994:13 | ...::g | main.rs:30:9:34:9 | fn g |
|
||||
| main.rs:995:5:995:6 | m1 | main.rs:20:1:44:1 | mod m1 |
|
||||
| main.rs:995:5:995:10 | ...::m2 | main.rs:25:5:43:5 | mod m2 |
|
||||
| main.rs:995:5:995:14 | ...::m3 | main.rs:36:9:42:9 | mod m3 |
|
||||
| main.rs:995:5:995:17 | ...::h | main.rs:37:27:41:13 | fn h |
|
||||
| main.rs:996:5:996:6 | m4 | main.rs:46:1:53:1 | mod m4 |
|
||||
| main.rs:996:5:996:9 | ...::i | main.rs:49:5:52:5 | fn i |
|
||||
| main.rs:997:5:997:5 | h | main.rs:57:1:76:1 | fn h |
|
||||
| main.rs:998:5:998:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f |
|
||||
| main.rs:999:5:999:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g |
|
||||
| main.rs:1000:5:1000:5 | j | main.rs:104:1:108:1 | fn j |
|
||||
| main.rs:1001:5:1001:6 | m6 | main.rs:116:1:128:1 | mod m6 |
|
||||
| main.rs:1001:5:1001:9 | ...::g | main.rs:121:5:127:5 | fn g |
|
||||
| main.rs:1002:5:1002:6 | m7 | main.rs:130:1:149:1 | mod m7 |
|
||||
| main.rs:1002:5:1002:9 | ...::f | main.rs:141:5:148:5 | fn f |
|
||||
| main.rs:1003:5:1003:6 | m8 | main.rs:151:1:205:1 | mod m8 |
|
||||
| main.rs:1003:5:1003:9 | ...::g | main.rs:189:5:204:5 | fn g |
|
||||
| main.rs:1004:5:1004:6 | m9 | main.rs:207:1:215:1 | mod m9 |
|
||||
| main.rs:1004:5:1004:9 | ...::f | main.rs:210:5:214:5 | fn f |
|
||||
| main.rs:1005:5:1005:7 | m11 | main.rs:238:1:275:1 | mod m11 |
|
||||
| main.rs:1005:5:1005:10 | ...::f | main.rs:243:5:246:5 | fn f |
|
||||
| main.rs:1006:5:1006:7 | m15 | main.rs:306:1:375:1 | mod m15 |
|
||||
| main.rs:1006:5:1006:10 | ...::f | main.rs:362:5:374:5 | fn f |
|
||||
| main.rs:1007:5:1007:7 | m16 | main.rs:377:1:574:1 | mod m16 |
|
||||
| main.rs:1007:5:1007:10 | ...::f | main.rs:446:5:470:5 | fn f |
|
||||
| main.rs:1008:5:1008:20 | trait_visibility | main.rs:576:1:626:1 | mod trait_visibility |
|
||||
| main.rs:1008:5:1008:23 | ...::f | main.rs:603:5:625:5 | fn f |
|
||||
| main.rs:1009:5:1009:7 | m17 | main.rs:628:1:658:1 | mod m17 |
|
||||
| main.rs:1009:5:1009:10 | ...::f | main.rs:652:5:657:5 | fn f |
|
||||
| main.rs:1010:5:1010:11 | nested6 | my2/nested2.rs:14:5:18:5 | mod nested6 |
|
||||
| main.rs:1010:5:1010:14 | ...::f | my2/nested2.rs:15:9:17:9 | fn f |
|
||||
| main.rs:1011:5:1011:11 | nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 |
|
||||
| main.rs:1011:5:1011:14 | ...::f | my2/nested2.rs:23:9:25:9 | fn f |
|
||||
| main.rs:1012:5:1012:7 | my3 | my2/mod.rs:20:1:20:12 | mod my3 |
|
||||
| main.rs:1012:5:1012:10 | ...::f | my2/my3/mod.rs:1:1:5:1 | fn f |
|
||||
| main.rs:1013:5:1013:12 | nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f |
|
||||
| main.rs:1014:5:1014:12 | my_alias | main.rs:1:1:1:7 | mod my |
|
||||
| main.rs:1014:5:1014:22 | ...::nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f |
|
||||
| main.rs:1015:5:1015:7 | m18 | main.rs:660:1:678:1 | mod m18 |
|
||||
| main.rs:1015:5:1015:12 | ...::m19 | main.rs:665:5:677:5 | mod m19 |
|
||||
| main.rs:1015:5:1015:17 | ...::m20 | main.rs:670:9:676:9 | mod m20 |
|
||||
| main.rs:1015:5:1015:20 | ...::g | main.rs:671:13:675:13 | fn g |
|
||||
| main.rs:1016:5:1016:7 | m23 | main.rs:707:1:732:1 | mod m23 |
|
||||
| main.rs:1016:5:1016:10 | ...::f | main.rs:727:5:731:5 | fn f |
|
||||
| main.rs:1017:5:1017:7 | m24 | main.rs:734:1:802:1 | mod m24 |
|
||||
| main.rs:1017:5:1017:10 | ...::f | main.rs:788:5:801:5 | fn f |
|
||||
| main.rs:1018:5:1018:8 | zelf | main.rs:0:0:0:0 | Crate(main@0.0.1) |
|
||||
| main.rs:1018:5:1018:11 | ...::h | main.rs:57:1:76:1 | fn h |
|
||||
| main.rs:1019:5:1019:13 | z_changed | main.rs:807:1:807:9 | fn z_changed |
|
||||
| main.rs:1020:5:1020:11 | AStruct | main.rs:809:1:809:17 | struct AStruct |
|
||||
| main.rs:1020:5:1020:22 | ...::z_on_type | main.rs:813:5:813:17 | fn z_on_type |
|
||||
| main.rs:1021:5:1021:11 | AStruct | main.rs:809:1:809:17 | struct AStruct |
|
||||
| main.rs:1022:5:1022:29 | impl_with_attribute_macro | main.rs:877:1:896:1 | mod impl_with_attribute_macro |
|
||||
| main.rs:1022:5:1022:35 | ...::test | main.rs:892:5:895:5 | fn test |
|
||||
| main.rs:1023:5:1023:12 | patterns | main.rs:898:1:939:1 | mod patterns |
|
||||
| main.rs:1023:5:1023:18 | ...::test | main.rs:899:5:913:5 | fn test |
|
||||
| my2/mod.rs:4:5:4:11 | println | {EXTERNAL LOCATION} | MacroRules |
|
||||
| my2/mod.rs:5:5:5:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 |
|
||||
| my2/mod.rs:5:5:5:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 |
|
||||
@@ -575,7 +592,7 @@ resolvePath
|
||||
| my2/my3/mod.rs:3:5:3:5 | g | my2/mod.rs:3:1:6:1 | fn g |
|
||||
| my2/my3/mod.rs:4:5:4:5 | h | main.rs:57:1:76:1 | fn h |
|
||||
| my2/my3/mod.rs:7:5:7:9 | super | my2/mod.rs:1:1:25:34 | SourceFile |
|
||||
| my2/my3/mod.rs:7:5:7:16 | ...::super | main.rs:1:1:978:2 | SourceFile |
|
||||
| my2/my3/mod.rs:7:5:7:16 | ...::super | main.rs:1:1:1024:2 | SourceFile |
|
||||
| my2/my3/mod.rs:7:5:7:19 | ...::h | main.rs:57:1:76:1 | fn h |
|
||||
| my2/my3/mod.rs:8:5:8:9 | super | my2/mod.rs:1:1:25:34 | SourceFile |
|
||||
| my2/my3/mod.rs:8:5:8:12 | ...::g | my2/mod.rs:3:1:6:1 | fn g |
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
multipleResolvedTargets
|
||||
| main.rs:2860:13:2860:17 | x.f() |
|
||||
| main.rs:2871:13:2871:17 | x.f() |
|
||||
|
||||
@@ -95,6 +95,17 @@ mod method_impl {
|
||||
}
|
||||
}
|
||||
|
||||
mod struct_self_call {
|
||||
struct ATupleStruct(i64);
|
||||
|
||||
impl Default for ATupleStruct {
|
||||
fn default() -> Self {
|
||||
let n = Default::default(); // $ target=default type=n:i64
|
||||
Self(n)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mod trait_impl {
|
||||
#[derive(Debug)]
|
||||
struct MyThing {
|
||||
@@ -438,7 +449,7 @@ mod method_non_parametric_trait_impl {
|
||||
|
||||
let thing = MyThing { a: S1 };
|
||||
let i = thing.convert_to(); // $ type=i:S1 target=T::convert_to
|
||||
let j = convert_to(thing); // $ type=j:S1 target=convert_to
|
||||
let j = convert_to(thing); // $ target=convert_to $ MISSING: type=j:S1 -- the blanket implementation `impl<T: MyTrait<S1>> ConvertTo<S1> for T` is currently not included in the constraint analysis
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -59,44 +59,43 @@ edges
|
||||
| main.rs:18:41:18:41 | v | main.rs:32:60:32:60 | v | provenance | |
|
||||
| main.rs:18:41:18:41 | v | main.rs:35:49:35:49 | v | provenance | |
|
||||
| main.rs:20:9:20:10 | l2 | main.rs:21:31:21:32 | l2 | provenance | |
|
||||
| main.rs:20:14:20:54 | ...::from_size_align(...) [Ok] | main.rs:20:14:20:63 | ... .unwrap() | provenance | MaD:44 |
|
||||
| main.rs:20:14:20:54 | ...::from_size_align(...) [Ok] | main.rs:20:14:20:63 | ... .unwrap() | provenance | MaD:42 |
|
||||
| main.rs:20:14:20:63 | ... .unwrap() | main.rs:20:9:20:10 | l2 | provenance | |
|
||||
| main.rs:20:50:20:50 | v | main.rs:20:14:20:54 | ...::from_size_align(...) [Ok] | provenance | MaD:36 |
|
||||
| main.rs:20:50:20:50 | v | main.rs:20:14:20:54 | ...::from_size_align(...) [Ok] | provenance | MaD:34 |
|
||||
| main.rs:21:31:21:32 | l2 | main.rs:21:13:21:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 |
|
||||
| main.rs:21:31:21:32 | l2 | main.rs:22:31:22:32 | l2 | provenance | |
|
||||
| main.rs:21:31:21:32 | l2 | main.rs:23:31:23:32 | l2 | provenance | |
|
||||
| main.rs:21:31:21:32 | l2 | main.rs:24:38:24:39 | l2 | provenance | |
|
||||
| main.rs:22:31:22:32 | l2 | main.rs:22:31:22:44 | l2.align_to(...) [Ok] | provenance | MaD:30 |
|
||||
| main.rs:22:31:22:44 | l2.align_to(...) [Ok] | main.rs:22:31:22:53 | ... .unwrap() | provenance | MaD:44 |
|
||||
| main.rs:22:31:22:32 | l2 | main.rs:22:31:22:44 | l2.align_to(...) [Ok] | provenance | MaD:28 |
|
||||
| main.rs:22:31:22:44 | l2.align_to(...) [Ok] | main.rs:22:31:22:53 | ... .unwrap() | provenance | MaD:42 |
|
||||
| main.rs:22:31:22:53 | ... .unwrap() | main.rs:22:13:22:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 |
|
||||
| main.rs:23:31:23:32 | l2 | main.rs:23:31:23:44 | l2.align_to(...) [Ok] | provenance | MaD:30 |
|
||||
| main.rs:23:31:23:44 | l2.align_to(...) [Ok] | main.rs:23:31:23:53 | ... .unwrap() | provenance | MaD:44 |
|
||||
| main.rs:23:31:23:53 | ... .unwrap() | main.rs:23:31:23:68 | ... .pad_to_align() | provenance | MaD:38 |
|
||||
| main.rs:23:31:23:32 | l2 | main.rs:23:31:23:44 | l2.align_to(...) [Ok] | provenance | MaD:28 |
|
||||
| main.rs:23:31:23:44 | l2.align_to(...) [Ok] | main.rs:23:31:23:53 | ... .unwrap() | provenance | MaD:42 |
|
||||
| main.rs:23:31:23:53 | ... .unwrap() | main.rs:23:31:23:68 | ... .pad_to_align() | provenance | MaD:36 |
|
||||
| main.rs:23:31:23:68 | ... .pad_to_align() | main.rs:23:13:23:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 |
|
||||
| main.rs:24:38:24:39 | l2 | main.rs:24:13:24:36 | ...::alloc_zeroed | provenance | MaD:16 Sink:MaD:16 |
|
||||
| main.rs:29:9:29:10 | l4 | main.rs:30:31:30:32 | l4 | provenance | |
|
||||
| main.rs:29:14:29:64 | ...::from_size_align_unchecked(...) | main.rs:29:9:29:10 | l4 | provenance | |
|
||||
| main.rs:29:60:29:60 | v | main.rs:29:14:29:64 | ...::from_size_align_unchecked(...) | provenance | MaD:37 |
|
||||
| main.rs:29:60:29:60 | v | main.rs:29:14:29:64 | ...::from_size_align_unchecked(...) | provenance | MaD:35 |
|
||||
| main.rs:30:31:30:32 | l4 | main.rs:30:13:30:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 |
|
||||
| main.rs:32:9:32:10 | l5 | main.rs:33:31:33:32 | l5 | provenance | |
|
||||
| main.rs:32:14:32:118 | ...::from_size_align_unchecked(...) | main.rs:32:9:32:10 | l5 | provenance | |
|
||||
| main.rs:32:60:32:60 | v | main.rs:32:60:32:89 | ... * ... | provenance | MaD:27 |
|
||||
| main.rs:32:60:32:89 | ... * ... | main.rs:32:14:32:118 | ...::from_size_align_unchecked(...) | provenance | MaD:37 |
|
||||
| main.rs:32:60:32:60 | v | main.rs:32:60:32:89 | ... * ... | provenance | MaD:25 |
|
||||
| main.rs:32:60:32:89 | ... * ... | main.rs:32:14:32:118 | ...::from_size_align_unchecked(...) | provenance | MaD:35 |
|
||||
| main.rs:33:31:33:32 | l5 | main.rs:33:13:33:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 |
|
||||
| main.rs:35:9:35:10 | s6 | main.rs:36:60:36:61 | s6 | provenance | |
|
||||
| main.rs:35:14:35:54 | ... + ... | main.rs:35:9:35:10 | s6 | provenance | |
|
||||
| main.rs:35:15:35:49 | ... * ... | main.rs:35:14:35:54 | ... + ... | provenance | MaD:24 |
|
||||
| main.rs:35:49:35:49 | v | main.rs:35:15:35:49 | ... * ... | provenance | MaD:26 |
|
||||
| main.rs:35:49:35:49 | v | main.rs:35:15:35:49 | ... * ... | provenance | MaD:25 |
|
||||
| main.rs:36:9:36:10 | l6 | main.rs:37:31:37:32 | l6 | provenance | |
|
||||
| main.rs:36:14:36:65 | ...::from_size_align_unchecked(...) | main.rs:36:9:36:10 | l6 | provenance | |
|
||||
| main.rs:36:60:36:61 | s6 | main.rs:36:14:36:65 | ...::from_size_align_unchecked(...) | provenance | MaD:37 |
|
||||
| main.rs:36:60:36:61 | s6 | main.rs:36:14:36:65 | ...::from_size_align_unchecked(...) | provenance | MaD:35 |
|
||||
| main.rs:37:31:37:32 | l6 | main.rs:37:13:37:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 |
|
||||
| main.rs:37:31:37:32 | l6 | main.rs:39:60:39:61 | l6 | provenance | |
|
||||
| main.rs:39:9:39:10 | l7 | main.rs:40:31:40:32 | l7 | provenance | |
|
||||
| main.rs:39:14:39:72 | ...::from_size_align_unchecked(...) | main.rs:39:9:39:10 | l7 | provenance | |
|
||||
| main.rs:39:60:39:61 | l6 | main.rs:39:60:39:68 | l6.size() | provenance | MaD:41 |
|
||||
| main.rs:39:60:39:68 | l6.size() | main.rs:39:14:39:72 | ...::from_size_align_unchecked(...) | provenance | MaD:37 |
|
||||
| main.rs:39:60:39:61 | l6 | main.rs:39:60:39:68 | l6.size() | provenance | MaD:39 |
|
||||
| main.rs:39:60:39:68 | l6.size() | main.rs:39:14:39:72 | ...::from_size_align_unchecked(...) | provenance | MaD:35 |
|
||||
| main.rs:40:31:40:32 | l7 | main.rs:40:13:40:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 |
|
||||
| main.rs:43:44:43:51 | ...: usize | main.rs:50:41:50:41 | v | provenance | |
|
||||
| main.rs:43:44:43:51 | ...: usize | main.rs:51:41:51:41 | v | provenance | |
|
||||
@@ -104,27 +103,27 @@ edges
|
||||
| main.rs:43:44:43:51 | ...: usize | main.rs:54:48:54:48 | v | provenance | |
|
||||
| main.rs:43:44:43:51 | ...: usize | main.rs:58:34:58:34 | v | provenance | |
|
||||
| main.rs:43:44:43:51 | ...: usize | main.rs:67:46:67:46 | v | provenance | |
|
||||
| main.rs:50:31:50:42 | l2.repeat(...) [Ok, tuple.0] | main.rs:50:31:50:51 | ... .unwrap() [tuple.0] | provenance | MaD:44 |
|
||||
| main.rs:50:31:50:42 | l2.repeat(...) [Ok, tuple.0] | main.rs:50:31:50:51 | ... .unwrap() [tuple.0] | provenance | MaD:42 |
|
||||
| main.rs:50:31:50:51 | ... .unwrap() [tuple.0] | main.rs:50:31:50:53 | ... .0 | provenance | |
|
||||
| main.rs:50:31:50:53 | ... .0 | main.rs:50:13:50:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 |
|
||||
| main.rs:50:41:50:41 | v | main.rs:50:31:50:42 | l2.repeat(...) [Ok, tuple.0] | provenance | MaD:39 |
|
||||
| main.rs:51:31:51:46 | l2.repeat(...) [Ok, tuple.0] | main.rs:51:31:51:55 | ... .unwrap() [tuple.0] | provenance | MaD:44 |
|
||||
| main.rs:50:41:50:41 | v | main.rs:50:31:50:42 | l2.repeat(...) [Ok, tuple.0] | provenance | MaD:37 |
|
||||
| main.rs:51:31:51:46 | l2.repeat(...) [Ok, tuple.0] | main.rs:51:31:51:55 | ... .unwrap() [tuple.0] | provenance | MaD:42 |
|
||||
| main.rs:51:31:51:55 | ... .unwrap() [tuple.0] | main.rs:51:31:51:57 | ... .0 | provenance | |
|
||||
| main.rs:51:31:51:57 | ... .0 | main.rs:51:13:51:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 |
|
||||
| main.rs:51:41:51:41 | v | main.rs:51:41:51:45 | ... + ... | provenance | MaD:24 |
|
||||
| main.rs:51:41:51:45 | ... + ... | main.rs:51:31:51:46 | l2.repeat(...) [Ok, tuple.0] | provenance | MaD:39 |
|
||||
| main.rs:53:31:53:49 | l2.repeat_packed(...) [Ok] | main.rs:53:31:53:58 | ... .unwrap() | provenance | MaD:44 |
|
||||
| main.rs:51:41:51:45 | ... + ... | main.rs:51:31:51:46 | l2.repeat(...) [Ok, tuple.0] | provenance | MaD:37 |
|
||||
| main.rs:53:31:53:49 | l2.repeat_packed(...) [Ok] | main.rs:53:31:53:58 | ... .unwrap() | provenance | MaD:42 |
|
||||
| main.rs:53:31:53:58 | ... .unwrap() | main.rs:53:13:53:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 |
|
||||
| main.rs:53:48:53:48 | v | main.rs:53:31:53:49 | l2.repeat_packed(...) [Ok] | provenance | MaD:40 |
|
||||
| main.rs:54:31:54:54 | l2.repeat_packed(...) [Ok] | main.rs:54:31:54:63 | ... .unwrap() | provenance | MaD:44 |
|
||||
| main.rs:53:48:53:48 | v | main.rs:53:31:53:49 | l2.repeat_packed(...) [Ok] | provenance | MaD:38 |
|
||||
| main.rs:54:31:54:54 | l2.repeat_packed(...) [Ok] | main.rs:54:31:54:63 | ... .unwrap() | provenance | MaD:42 |
|
||||
| main.rs:54:31:54:63 | ... .unwrap() | main.rs:54:13:54:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 |
|
||||
| main.rs:54:48:54:48 | v | main.rs:54:48:54:53 | ... * ... | provenance | MaD:27 |
|
||||
| main.rs:54:48:54:53 | ... * ... | main.rs:54:31:54:54 | l2.repeat_packed(...) [Ok] | provenance | MaD:40 |
|
||||
| main.rs:54:48:54:48 | v | main.rs:54:48:54:53 | ... * ... | provenance | MaD:25 |
|
||||
| main.rs:54:48:54:53 | ... * ... | main.rs:54:31:54:54 | l2.repeat_packed(...) [Ok] | provenance | MaD:38 |
|
||||
| main.rs:58:9:58:20 | TuplePat [tuple.0] | main.rs:58:10:58:11 | k1 | provenance | |
|
||||
| main.rs:58:10:58:11 | k1 | main.rs:59:31:59:32 | k1 | provenance | |
|
||||
| main.rs:58:24:58:35 | l3.repeat(...) [Ok, tuple.0] | main.rs:58:24:58:66 | ... .expect(...) [tuple.0] | provenance | MaD:43 |
|
||||
| main.rs:58:24:58:35 | l3.repeat(...) [Ok, tuple.0] | main.rs:58:24:58:66 | ... .expect(...) [tuple.0] | provenance | MaD:41 |
|
||||
| main.rs:58:24:58:66 | ... .expect(...) [tuple.0] | main.rs:58:9:58:20 | TuplePat [tuple.0] | provenance | |
|
||||
| main.rs:58:34:58:34 | v | main.rs:58:24:58:35 | l3.repeat(...) [Ok, tuple.0] | provenance | MaD:39 |
|
||||
| main.rs:58:34:58:34 | v | main.rs:58:24:58:35 | l3.repeat(...) [Ok, tuple.0] | provenance | MaD:37 |
|
||||
| main.rs:59:31:59:32 | k1 | main.rs:59:13:59:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 |
|
||||
| main.rs:59:31:59:32 | k1 | main.rs:60:34:60:35 | k1 | provenance | |
|
||||
| main.rs:59:31:59:32 | k1 | main.rs:62:24:62:25 | k1 | provenance | |
|
||||
@@ -132,32 +131,32 @@ edges
|
||||
| main.rs:59:31:59:32 | k1 | main.rs:65:31:65:32 | k1 | provenance | |
|
||||
| main.rs:60:9:60:20 | TuplePat [tuple.0] | main.rs:60:10:60:11 | k2 | provenance | |
|
||||
| main.rs:60:10:60:11 | k2 | main.rs:61:31:61:32 | k2 | provenance | |
|
||||
| main.rs:60:24:60:36 | l3.extend(...) [Ok, tuple.0] | main.rs:60:24:60:45 | ... .unwrap() [tuple.0] | provenance | MaD:44 |
|
||||
| main.rs:60:24:60:36 | l3.extend(...) [Ok, tuple.0] | main.rs:60:24:60:45 | ... .unwrap() [tuple.0] | provenance | MaD:42 |
|
||||
| main.rs:60:24:60:45 | ... .unwrap() [tuple.0] | main.rs:60:9:60:20 | TuplePat [tuple.0] | provenance | |
|
||||
| main.rs:60:34:60:35 | k1 | main.rs:60:24:60:36 | l3.extend(...) [Ok, tuple.0] | provenance | MaD:32 |
|
||||
| main.rs:60:34:60:35 | k1 | main.rs:60:24:60:36 | l3.extend(...) [Ok, tuple.0] | provenance | MaD:30 |
|
||||
| main.rs:61:31:61:32 | k2 | main.rs:61:13:61:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 |
|
||||
| main.rs:62:9:62:20 | TuplePat [tuple.0] | main.rs:62:10:62:11 | k3 | provenance | |
|
||||
| main.rs:62:10:62:11 | k3 | main.rs:63:31:63:32 | k3 | provenance | |
|
||||
| main.rs:62:24:62:25 | k1 | main.rs:62:24:62:36 | k1.extend(...) [Ok, tuple.0] | provenance | MaD:33 |
|
||||
| main.rs:62:24:62:36 | k1.extend(...) [Ok, tuple.0] | main.rs:62:24:62:45 | ... .unwrap() [tuple.0] | provenance | MaD:44 |
|
||||
| main.rs:62:24:62:25 | k1 | main.rs:62:24:62:36 | k1.extend(...) [Ok, tuple.0] | provenance | MaD:31 |
|
||||
| main.rs:62:24:62:36 | k1.extend(...) [Ok, tuple.0] | main.rs:62:24:62:45 | ... .unwrap() [tuple.0] | provenance | MaD:42 |
|
||||
| main.rs:62:24:62:45 | ... .unwrap() [tuple.0] | main.rs:62:9:62:20 | TuplePat [tuple.0] | provenance | |
|
||||
| main.rs:63:31:63:32 | k3 | main.rs:63:13:63:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 |
|
||||
| main.rs:64:31:64:50 | l3.extend_packed(...) [Ok] | main.rs:64:31:64:59 | ... .unwrap() | provenance | MaD:44 |
|
||||
| main.rs:64:31:64:50 | l3.extend_packed(...) [Ok] | main.rs:64:31:64:59 | ... .unwrap() | provenance | MaD:42 |
|
||||
| main.rs:64:31:64:59 | ... .unwrap() | main.rs:64:13:64:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 |
|
||||
| main.rs:64:48:64:49 | k1 | main.rs:64:31:64:50 | l3.extend_packed(...) [Ok] | provenance | MaD:34 |
|
||||
| main.rs:65:31:65:32 | k1 | main.rs:65:31:65:50 | k1.extend_packed(...) [Ok] | provenance | MaD:35 |
|
||||
| main.rs:65:31:65:50 | k1.extend_packed(...) [Ok] | main.rs:65:31:65:59 | ... .unwrap() | provenance | MaD:44 |
|
||||
| main.rs:64:48:64:49 | k1 | main.rs:64:31:64:50 | l3.extend_packed(...) [Ok] | provenance | MaD:32 |
|
||||
| main.rs:65:31:65:32 | k1 | main.rs:65:31:65:50 | k1.extend_packed(...) [Ok] | provenance | MaD:33 |
|
||||
| main.rs:65:31:65:50 | k1.extend_packed(...) [Ok] | main.rs:65:31:65:59 | ... .unwrap() | provenance | MaD:42 |
|
||||
| main.rs:65:31:65:59 | ... .unwrap() | main.rs:65:13:65:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 |
|
||||
| main.rs:67:9:67:10 | l4 | main.rs:68:31:68:32 | l4 | provenance | |
|
||||
| main.rs:67:14:67:47 | ...::array::<...>(...) [Ok] | main.rs:67:14:67:56 | ... .unwrap() | provenance | MaD:44 |
|
||||
| main.rs:67:14:67:47 | ...::array::<...>(...) [Ok] | main.rs:67:14:67:56 | ... .unwrap() | provenance | MaD:42 |
|
||||
| main.rs:67:14:67:56 | ... .unwrap() | main.rs:67:9:67:10 | l4 | provenance | |
|
||||
| main.rs:67:46:67:46 | v | main.rs:67:14:67:47 | ...::array::<...>(...) [Ok] | provenance | MaD:31 |
|
||||
| main.rs:67:46:67:46 | v | main.rs:67:14:67:47 | ...::array::<...>(...) [Ok] | provenance | MaD:29 |
|
||||
| main.rs:68:31:68:32 | l4 | main.rs:68:13:68:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 |
|
||||
| main.rs:86:35:86:42 | ...: usize | main.rs:87:54:87:54 | v | provenance | |
|
||||
| main.rs:87:9:87:14 | layout | main.rs:88:31:88:36 | layout | provenance | |
|
||||
| main.rs:87:18:87:58 | ...::from_size_align(...) [Ok] | main.rs:87:18:87:67 | ... .unwrap() | provenance | MaD:44 |
|
||||
| main.rs:87:18:87:58 | ...::from_size_align(...) [Ok] | main.rs:87:18:87:67 | ... .unwrap() | provenance | MaD:42 |
|
||||
| main.rs:87:18:87:67 | ... .unwrap() | main.rs:87:9:87:14 | layout | provenance | |
|
||||
| main.rs:87:54:87:54 | v | main.rs:87:18:87:58 | ...::from_size_align(...) [Ok] | provenance | MaD:36 |
|
||||
| main.rs:87:54:87:54 | v | main.rs:87:18:87:58 | ...::from_size_align(...) [Ok] | provenance | MaD:34 |
|
||||
| main.rs:88:31:88:36 | layout | main.rs:88:13:88:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 |
|
||||
| main.rs:91:38:91:45 | ...: usize | main.rs:92:47:92:47 | v | provenance | |
|
||||
| main.rs:91:38:91:45 | ...: usize | main.rs:101:51:101:51 | v | provenance | |
|
||||
@@ -168,16 +167,16 @@ edges
|
||||
| main.rs:91:38:91:45 | ...: usize | main.rs:161:55:161:55 | v | provenance | |
|
||||
| main.rs:92:9:92:10 | l1 | main.rs:96:35:96:36 | l1 | provenance | |
|
||||
| main.rs:92:9:92:10 | l1 | main.rs:102:35:102:36 | l1 | provenance | |
|
||||
| main.rs:92:14:92:48 | ...::array::<...>(...) [Ok] | main.rs:92:14:92:57 | ... .unwrap() | provenance | MaD:44 |
|
||||
| main.rs:92:14:92:48 | ...::array::<...>(...) [Ok] | main.rs:92:14:92:57 | ... .unwrap() | provenance | MaD:42 |
|
||||
| main.rs:92:14:92:57 | ... .unwrap() | main.rs:92:9:92:10 | l1 | provenance | |
|
||||
| main.rs:92:47:92:47 | v | main.rs:92:14:92:48 | ...::array::<...>(...) [Ok] | provenance | MaD:31 |
|
||||
| main.rs:92:47:92:47 | v | main.rs:92:14:92:48 | ...::array::<...>(...) [Ok] | provenance | MaD:29 |
|
||||
| main.rs:96:35:96:36 | l1 | main.rs:96:17:96:33 | ...::alloc | provenance | MaD:15 Sink:MaD:15 |
|
||||
| main.rs:96:35:96:36 | l1 | main.rs:109:35:109:36 | l1 | provenance | |
|
||||
| main.rs:96:35:96:36 | l1 | main.rs:111:35:111:36 | l1 | provenance | |
|
||||
| main.rs:101:13:101:14 | l3 | main.rs:103:35:103:36 | l3 | provenance | |
|
||||
| main.rs:101:18:101:52 | ...::array::<...>(...) [Ok] | main.rs:101:18:101:61 | ... .unwrap() | provenance | MaD:44 |
|
||||
| main.rs:101:18:101:52 | ...::array::<...>(...) [Ok] | main.rs:101:18:101:61 | ... .unwrap() | provenance | MaD:42 |
|
||||
| main.rs:101:18:101:61 | ... .unwrap() | main.rs:101:13:101:14 | l3 | provenance | |
|
||||
| main.rs:101:51:101:51 | v | main.rs:101:18:101:52 | ...::array::<...>(...) [Ok] | provenance | MaD:31 |
|
||||
| main.rs:101:51:101:51 | v | main.rs:101:18:101:52 | ...::array::<...>(...) [Ok] | provenance | MaD:29 |
|
||||
| main.rs:102:35:102:36 | l1 | main.rs:102:17:102:33 | ...::alloc | provenance | MaD:15 Sink:MaD:15 |
|
||||
| main.rs:102:35:102:36 | l1 | main.rs:109:35:109:36 | l1 | provenance | |
|
||||
| main.rs:102:35:102:36 | l1 | main.rs:111:35:111:36 | l1 | provenance | |
|
||||
@@ -188,28 +187,28 @@ edges
|
||||
| main.rs:111:35:111:36 | l1 | main.rs:111:17:111:33 | ...::alloc | provenance | MaD:15 Sink:MaD:15 |
|
||||
| main.rs:111:35:111:36 | l1 | main.rs:146:35:146:36 | l1 | provenance | |
|
||||
| main.rs:145:13:145:14 | l9 | main.rs:148:35:148:36 | l9 | provenance | |
|
||||
| main.rs:145:18:145:52 | ...::array::<...>(...) [Ok] | main.rs:145:18:145:61 | ... .unwrap() | provenance | MaD:44 |
|
||||
| main.rs:145:18:145:52 | ...::array::<...>(...) [Ok] | main.rs:145:18:145:61 | ... .unwrap() | provenance | MaD:42 |
|
||||
| main.rs:145:18:145:61 | ... .unwrap() | main.rs:145:13:145:14 | l9 | provenance | |
|
||||
| main.rs:145:51:145:51 | v | main.rs:145:18:145:52 | ...::array::<...>(...) [Ok] | provenance | MaD:31 |
|
||||
| main.rs:145:51:145:51 | v | main.rs:145:18:145:52 | ...::array::<...>(...) [Ok] | provenance | MaD:29 |
|
||||
| main.rs:146:35:146:36 | l1 | main.rs:146:17:146:33 | ...::alloc | provenance | MaD:15 Sink:MaD:15 |
|
||||
| main.rs:146:35:146:36 | l1 | main.rs:177:31:177:32 | l1 | provenance | |
|
||||
| main.rs:148:35:148:36 | l9 | main.rs:148:17:148:33 | ...::alloc | provenance | MaD:15 Sink:MaD:15 |
|
||||
| main.rs:151:9:151:11 | l10 | main.rs:152:31:152:33 | l10 | provenance | |
|
||||
| main.rs:151:15:151:69 | ...::array::<...>(...) [Ok] | main.rs:151:15:151:78 | ... .unwrap() | provenance | MaD:44 |
|
||||
| main.rs:151:15:151:69 | ...::array::<...>(...) [Ok] | main.rs:151:15:151:78 | ... .unwrap() | provenance | MaD:42 |
|
||||
| main.rs:151:15:151:78 | ... .unwrap() | main.rs:151:9:151:11 | l10 | provenance | |
|
||||
| main.rs:151:48:151:68 | ...::min(...) | main.rs:151:15:151:69 | ...::array::<...>(...) [Ok] | provenance | MaD:31 |
|
||||
| main.rs:151:62:151:62 | v | main.rs:151:48:151:68 | ...::min(...) | provenance | MaD:46 |
|
||||
| main.rs:151:48:151:68 | ...::min(...) | main.rs:151:15:151:69 | ...::array::<...>(...) [Ok] | provenance | MaD:29 |
|
||||
| main.rs:151:62:151:62 | v | main.rs:151:48:151:68 | ...::min(...) | provenance | MaD:44 |
|
||||
| main.rs:152:31:152:33 | l10 | main.rs:152:13:152:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 |
|
||||
| main.rs:154:9:154:11 | l11 | main.rs:155:31:155:33 | l11 | provenance | |
|
||||
| main.rs:154:15:154:69 | ...::array::<...>(...) [Ok] | main.rs:154:15:154:78 | ... .unwrap() | provenance | MaD:44 |
|
||||
| main.rs:154:15:154:69 | ...::array::<...>(...) [Ok] | main.rs:154:15:154:78 | ... .unwrap() | provenance | MaD:42 |
|
||||
| main.rs:154:15:154:78 | ... .unwrap() | main.rs:154:9:154:11 | l11 | provenance | |
|
||||
| main.rs:154:48:154:68 | ...::max(...) | main.rs:154:15:154:69 | ...::array::<...>(...) [Ok] | provenance | MaD:31 |
|
||||
| main.rs:154:62:154:62 | v | main.rs:154:48:154:68 | ...::max(...) | provenance | MaD:45 |
|
||||
| main.rs:154:48:154:68 | ...::max(...) | main.rs:154:15:154:69 | ...::array::<...>(...) [Ok] | provenance | MaD:29 |
|
||||
| main.rs:154:62:154:62 | v | main.rs:154:48:154:68 | ...::max(...) | provenance | MaD:43 |
|
||||
| main.rs:155:31:155:33 | l11 | main.rs:155:13:155:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 |
|
||||
| main.rs:161:13:161:15 | l13 | main.rs:162:35:162:37 | l13 | provenance | |
|
||||
| main.rs:161:19:161:59 | ...::from_size_align(...) [Ok] | main.rs:161:19:161:68 | ... .unwrap() | provenance | MaD:44 |
|
||||
| main.rs:161:19:161:59 | ...::from_size_align(...) [Ok] | main.rs:161:19:161:68 | ... .unwrap() | provenance | MaD:42 |
|
||||
| main.rs:161:19:161:68 | ... .unwrap() | main.rs:161:13:161:15 | l13 | provenance | |
|
||||
| main.rs:161:55:161:55 | v | main.rs:161:19:161:59 | ...::from_size_align(...) [Ok] | provenance | MaD:36 |
|
||||
| main.rs:161:55:161:55 | v | main.rs:161:19:161:59 | ...::from_size_align(...) [Ok] | provenance | MaD:34 |
|
||||
| main.rs:162:35:162:37 | l13 | main.rs:162:17:162:33 | ...::alloc | provenance | MaD:15 Sink:MaD:15 |
|
||||
| main.rs:162:35:162:37 | l13 | main.rs:169:35:169:37 | l13 | provenance | |
|
||||
| main.rs:169:35:169:37 | l13 | main.rs:169:17:169:33 | ...::alloc | provenance | MaD:15 Sink:MaD:15 |
|
||||
@@ -217,9 +216,9 @@ edges
|
||||
| main.rs:183:29:183:36 | ...: usize | main.rs:192:46:192:46 | v | provenance | |
|
||||
| main.rs:183:29:183:36 | ...: usize | main.rs:202:48:202:48 | v | provenance | |
|
||||
| main.rs:192:9:192:10 | l2 | main.rs:193:38:193:39 | l2 | provenance | |
|
||||
| main.rs:192:14:192:47 | ...::array::<...>(...) [Ok] | main.rs:192:14:192:56 | ... .unwrap() | provenance | MaD:44 |
|
||||
| main.rs:192:14:192:47 | ...::array::<...>(...) [Ok] | main.rs:192:14:192:56 | ... .unwrap() | provenance | MaD:42 |
|
||||
| main.rs:192:14:192:56 | ... .unwrap() | main.rs:192:9:192:10 | l2 | provenance | |
|
||||
| main.rs:192:46:192:46 | v | main.rs:192:14:192:47 | ...::array::<...>(...) [Ok] | provenance | MaD:31 |
|
||||
| main.rs:192:46:192:46 | v | main.rs:192:14:192:47 | ...::array::<...>(...) [Ok] | provenance | MaD:29 |
|
||||
| main.rs:193:38:193:39 | l2 | main.rs:193:32:193:36 | alloc | provenance | MaD:12 Sink:MaD:12 |
|
||||
| main.rs:193:38:193:39 | l2 | main.rs:194:45:194:46 | l2 | provenance | |
|
||||
| main.rs:194:45:194:46 | l2 | main.rs:194:32:194:43 | alloc_zeroed | provenance | MaD:13 Sink:MaD:13 |
|
||||
@@ -258,19 +257,19 @@ edges
|
||||
| main.rs:231:42:231:42 | v | main.rs:231:13:231:40 | ...::with_capacity_in | provenance | MaD:6 Sink:MaD:6 |
|
||||
| main.rs:282:24:282:41 | ...: String | main.rs:283:21:283:30 | user_input | provenance | |
|
||||
| main.rs:283:9:283:17 | num_bytes | main.rs:285:54:285:62 | num_bytes | provenance | |
|
||||
| main.rs:283:21:283:30 | user_input | main.rs:283:21:283:47 | user_input.parse() [Ok] | provenance | MaD:28 |
|
||||
| main.rs:283:21:283:30 | user_input | main.rs:283:21:283:47 | user_input.parse() [Ok] | provenance | MaD:29 |
|
||||
| main.rs:283:21:283:30 | user_input | main.rs:283:21:283:47 | user_input.parse() [Ok] | provenance | MaD:26 |
|
||||
| main.rs:283:21:283:30 | user_input | main.rs:283:21:283:47 | user_input.parse() [Ok] | provenance | MaD:27 |
|
||||
| main.rs:283:21:283:47 | user_input.parse() [Ok] | main.rs:283:21:283:48 | TryExpr | provenance | |
|
||||
| main.rs:283:21:283:48 | TryExpr | main.rs:283:21:283:77 | ... * ... | provenance | MaD:27 |
|
||||
| main.rs:283:21:283:48 | TryExpr | main.rs:283:21:283:77 | ... * ... | provenance | MaD:25 |
|
||||
| main.rs:283:21:283:77 | ... * ... | main.rs:283:9:283:17 | num_bytes | provenance | |
|
||||
| main.rs:285:9:285:14 | layout | main.rs:287:40:287:45 | layout | provenance | |
|
||||
| main.rs:285:18:285:66 | ...::from_size_align(...) [Ok] | main.rs:285:18:285:75 | ... .unwrap() | provenance | MaD:44 |
|
||||
| main.rs:285:18:285:66 | ...::from_size_align(...) [Ok] | main.rs:285:18:285:75 | ... .unwrap() | provenance | MaD:42 |
|
||||
| main.rs:285:18:285:75 | ... .unwrap() | main.rs:285:9:285:14 | layout | provenance | |
|
||||
| main.rs:285:54:285:62 | num_bytes | main.rs:285:18:285:66 | ...::from_size_align(...) [Ok] | provenance | MaD:36 |
|
||||
| main.rs:285:54:285:62 | num_bytes | main.rs:285:18:285:66 | ...::from_size_align(...) [Ok] | provenance | MaD:34 |
|
||||
| main.rs:287:40:287:45 | layout | main.rs:287:22:287:38 | ...::alloc | provenance | MaD:15 Sink:MaD:15 |
|
||||
| main.rs:311:25:311:38 | ...::args | main.rs:311:25:311:40 | ...::args(...) [element] | provenance | Src:MaD:22 |
|
||||
| main.rs:311:25:311:40 | ...::args(...) [element] | main.rs:311:25:311:47 | ... .nth(...) [Some] | provenance | MaD:23 |
|
||||
| main.rs:311:25:311:47 | ... .nth(...) [Some] | main.rs:311:25:311:74 | ... .unwrap_or(...) | provenance | MaD:42 |
|
||||
| main.rs:311:25:311:47 | ... .nth(...) [Some] | main.rs:311:25:311:74 | ... .unwrap_or(...) | provenance | MaD:40 |
|
||||
| main.rs:311:25:311:74 | ... .unwrap_or(...) | main.rs:282:24:282:41 | ...: String | provenance | |
|
||||
| main.rs:320:9:320:9 | v | main.rs:323:34:323:34 | v | provenance | |
|
||||
| main.rs:320:9:320:9 | v | main.rs:324:42:324:42 | v | provenance | |
|
||||
@@ -280,10 +279,10 @@ edges
|
||||
| main.rs:320:9:320:9 | v | main.rs:328:22:328:22 | v | provenance | |
|
||||
| main.rs:320:13:320:26 | ...::args | main.rs:320:13:320:28 | ...::args(...) [element] | provenance | Src:MaD:22 |
|
||||
| main.rs:320:13:320:28 | ...::args(...) [element] | main.rs:320:13:320:35 | ... .nth(...) [Some] | provenance | MaD:23 |
|
||||
| main.rs:320:13:320:35 | ... .nth(...) [Some] | main.rs:320:13:320:65 | ... .unwrap_or(...) | provenance | MaD:42 |
|
||||
| main.rs:320:13:320:65 | ... .unwrap_or(...) | main.rs:320:13:320:82 | ... .parse() [Ok] | provenance | MaD:28 |
|
||||
| main.rs:320:13:320:65 | ... .unwrap_or(...) | main.rs:320:13:320:82 | ... .parse() [Ok] | provenance | MaD:29 |
|
||||
| main.rs:320:13:320:82 | ... .parse() [Ok] | main.rs:320:13:320:91 | ... .unwrap() | provenance | MaD:44 |
|
||||
| main.rs:320:13:320:35 | ... .nth(...) [Some] | main.rs:320:13:320:65 | ... .unwrap_or(...) | provenance | MaD:40 |
|
||||
| main.rs:320:13:320:65 | ... .unwrap_or(...) | main.rs:320:13:320:82 | ... .parse() [Ok] | provenance | MaD:26 |
|
||||
| main.rs:320:13:320:65 | ... .unwrap_or(...) | main.rs:320:13:320:82 | ... .parse() [Ok] | provenance | MaD:27 |
|
||||
| main.rs:320:13:320:82 | ... .parse() [Ok] | main.rs:320:13:320:91 | ... .unwrap() | provenance | MaD:42 |
|
||||
| main.rs:320:13:320:91 | ... .unwrap() | main.rs:320:9:320:9 | v | provenance | |
|
||||
| main.rs:323:34:323:34 | v | main.rs:12:36:12:43 | ...: usize | provenance | |
|
||||
| main.rs:324:42:324:42 | v | main.rs:43:44:43:51 | ...: usize | provenance | |
|
||||
@@ -315,29 +314,27 @@ models
|
||||
| 21 | Sink: libc::unix::realloc; Argument[1]; alloc-size |
|
||||
| 22 | Source: std::env::args; ReturnValue.Element; commandargs |
|
||||
| 23 | Summary: <_ as core::iter::traits::iterator::Iterator>::nth; Argument[self].Reference.Element; ReturnValue.Field[core::option::Option::Some(0)]; value |
|
||||
| 24 | Summary: <_ as core::ops::arith::Add>::add; Argument[self]; ReturnValue; taint |
|
||||
| 25 | Summary: <_ as core::ops::arith::Mul>::mul; Argument[0].Reference; ReturnValue; taint |
|
||||
| 26 | Summary: <_ as core::ops::arith::Mul>::mul; Argument[0]; ReturnValue; taint |
|
||||
| 27 | Summary: <_ as core::ops::arith::Mul>::mul; Argument[self]; ReturnValue; taint |
|
||||
| 28 | Summary: <_ as core::ops::deref::Deref>::deref; Argument[self].Reference; ReturnValue.Reference; taint |
|
||||
| 29 | Summary: <alloc::string::String as core::ops::deref::Deref>::deref; Argument[self]; ReturnValue; value |
|
||||
| 30 | Summary: <core::alloc::layout::Layout>::align_to; Argument[self].Reference; ReturnValue.Field[core::result::Result::Ok(0)]; taint |
|
||||
| 31 | Summary: <core::alloc::layout::Layout>::array; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint |
|
||||
| 32 | Summary: <core::alloc::layout::Layout>::extend; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint |
|
||||
| 33 | Summary: <core::alloc::layout::Layout>::extend; Argument[self].Reference; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint |
|
||||
| 34 | Summary: <core::alloc::layout::Layout>::extend_packed; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint |
|
||||
| 35 | Summary: <core::alloc::layout::Layout>::extend_packed; Argument[self].Reference; ReturnValue.Field[core::result::Result::Ok(0)]; taint |
|
||||
| 36 | Summary: <core::alloc::layout::Layout>::from_size_align; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint |
|
||||
| 37 | Summary: <core::alloc::layout::Layout>::from_size_align_unchecked; Argument[0]; ReturnValue; taint |
|
||||
| 38 | Summary: <core::alloc::layout::Layout>::pad_to_align; Argument[self].Reference; ReturnValue; taint |
|
||||
| 39 | Summary: <core::alloc::layout::Layout>::repeat; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint |
|
||||
| 40 | Summary: <core::alloc::layout::Layout>::repeat_packed; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint |
|
||||
| 41 | Summary: <core::alloc::layout::Layout>::size; Argument[self].Reference; ReturnValue; taint |
|
||||
| 42 | Summary: <core::option::Option>::unwrap_or; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value |
|
||||
| 43 | Summary: <core::result::Result>::expect; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value |
|
||||
| 44 | Summary: <core::result::Result>::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value |
|
||||
| 45 | Summary: core::cmp::max; Argument[0]; ReturnValue; value |
|
||||
| 46 | Summary: core::cmp::min; Argument[0]; ReturnValue; value |
|
||||
| 24 | Summary: <_ as core::ops::arith::Add>::add; Argument[self,0]; ReturnValue; taint |
|
||||
| 25 | Summary: <_ as core::ops::arith::Mul>::mul; Argument[self,0]; ReturnValue; taint |
|
||||
| 26 | Summary: <_ as core::ops::deref::Deref>::deref; Argument[self].Reference; ReturnValue.Reference; taint |
|
||||
| 27 | Summary: <alloc::string::String as core::ops::deref::Deref>::deref; Argument[self]; ReturnValue; value |
|
||||
| 28 | Summary: <core::alloc::layout::Layout>::align_to; Argument[self].Reference; ReturnValue.Field[core::result::Result::Ok(0)]; taint |
|
||||
| 29 | Summary: <core::alloc::layout::Layout>::array; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint |
|
||||
| 30 | Summary: <core::alloc::layout::Layout>::extend; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint |
|
||||
| 31 | Summary: <core::alloc::layout::Layout>::extend; Argument[self].Reference; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint |
|
||||
| 32 | Summary: <core::alloc::layout::Layout>::extend_packed; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint |
|
||||
| 33 | Summary: <core::alloc::layout::Layout>::extend_packed; Argument[self].Reference; ReturnValue.Field[core::result::Result::Ok(0)]; taint |
|
||||
| 34 | Summary: <core::alloc::layout::Layout>::from_size_align; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint |
|
||||
| 35 | Summary: <core::alloc::layout::Layout>::from_size_align_unchecked; Argument[0]; ReturnValue; taint |
|
||||
| 36 | Summary: <core::alloc::layout::Layout>::pad_to_align; Argument[self].Reference; ReturnValue; taint |
|
||||
| 37 | Summary: <core::alloc::layout::Layout>::repeat; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint |
|
||||
| 38 | Summary: <core::alloc::layout::Layout>::repeat_packed; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint |
|
||||
| 39 | Summary: <core::alloc::layout::Layout>::size; Argument[self].Reference; ReturnValue; taint |
|
||||
| 40 | Summary: <core::option::Option>::unwrap_or; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value |
|
||||
| 41 | Summary: <core::result::Result>::expect; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value |
|
||||
| 42 | Summary: <core::result::Result>::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value |
|
||||
| 43 | Summary: core::cmp::max; Argument[0]; ReturnValue; value |
|
||||
| 44 | Summary: core::cmp::min; Argument[0]; ReturnValue; value |
|
||||
nodes
|
||||
| main.rs:12:36:12:43 | ...: usize | semmle.label | ...: usize |
|
||||
| main.rs:18:13:18:31 | ...::realloc | semmle.label | ...::realloc |
|
||||
|
||||
@@ -23,32 +23,32 @@ edges
|
||||
| test_cipher.rs:18:28:18:36 | &... [&ref] | test_cipher.rs:18:9:18:14 | const1 [&ref] | provenance | |
|
||||
| test_cipher.rs:18:29:18:36 | [0u8; 16] | test_cipher.rs:18:28:18:36 | &... [&ref] | provenance | |
|
||||
| test_cipher.rs:19:49:19:79 | ...::from_slice(...) [&ref] | test_cipher.rs:19:30:19:47 | ...::new | provenance | MaD:3 Sink:MaD:3 |
|
||||
| test_cipher.rs:19:73:19:78 | const1 [&ref] | test_cipher.rs:19:49:19:79 | ...::from_slice(...) [&ref] | provenance | MaD:23 |
|
||||
| test_cipher.rs:19:73:19:78 | const1 [&ref] | test_cipher.rs:19:49:19:79 | ...::from_slice(...) [&ref] | provenance | MaD:18 |
|
||||
| test_cipher.rs:25:9:25:14 | const4 [&ref] | test_cipher.rs:26:66:26:71 | const4 [&ref] | provenance | |
|
||||
| test_cipher.rs:25:28:25:36 | &... [&ref] | test_cipher.rs:25:9:25:14 | const4 [&ref] | provenance | |
|
||||
| test_cipher.rs:25:29:25:36 | [0u8; 16] | test_cipher.rs:25:28:25:36 | &... [&ref] | provenance | |
|
||||
| test_cipher.rs:26:42:26:72 | ...::from_slice(...) [&ref] | test_cipher.rs:26:30:26:40 | ...::new | provenance | MaD:4 Sink:MaD:4 |
|
||||
| test_cipher.rs:26:66:26:71 | const4 [&ref] | test_cipher.rs:26:42:26:72 | ...::from_slice(...) [&ref] | provenance | MaD:23 |
|
||||
| test_cipher.rs:26:66:26:71 | const4 [&ref] | test_cipher.rs:26:42:26:72 | ...::from_slice(...) [&ref] | provenance | MaD:18 |
|
||||
| test_cipher.rs:29:9:29:14 | const5 [&ref] | test_cipher.rs:30:95:30:100 | const5 [&ref] | provenance | |
|
||||
| test_cipher.rs:29:28:29:36 | &... [&ref] | test_cipher.rs:29:9:29:14 | const5 [&ref] | provenance | |
|
||||
| test_cipher.rs:29:29:29:36 | [0u8; 16] | test_cipher.rs:29:28:29:36 | &... [&ref] | provenance | |
|
||||
| test_cipher.rs:30:72:30:101 | ...::from_slice(...) [&ref] | test_cipher.rs:30:30:30:40 | ...::new | provenance | MaD:5 Sink:MaD:5 |
|
||||
| test_cipher.rs:30:95:30:100 | const5 [&ref] | test_cipher.rs:30:72:30:101 | ...::from_slice(...) [&ref] | provenance | MaD:23 |
|
||||
| test_cipher.rs:30:95:30:100 | const5 [&ref] | test_cipher.rs:30:72:30:101 | ...::from_slice(...) [&ref] | provenance | MaD:18 |
|
||||
| test_cipher.rs:37:9:37:14 | const7 | test_cipher.rs:38:74:38:79 | const7 | provenance | |
|
||||
| test_cipher.rs:37:27:37:74 | [...] | test_cipher.rs:37:9:37:14 | const7 | provenance | |
|
||||
| test_cipher.rs:38:49:38:80 | ...::from_slice(...) [&ref] | test_cipher.rs:38:30:38:47 | ...::new | provenance | MaD:3 Sink:MaD:3 |
|
||||
| test_cipher.rs:38:73:38:79 | &const7 [&ref] | test_cipher.rs:38:49:38:80 | ...::from_slice(...) [&ref] | provenance | MaD:23 |
|
||||
| test_cipher.rs:38:73:38:79 | &const7 [&ref] | test_cipher.rs:38:49:38:80 | ...::from_slice(...) [&ref] | provenance | MaD:18 |
|
||||
| test_cipher.rs:38:74:38:79 | const7 | test_cipher.rs:38:73:38:79 | &const7 [&ref] | provenance | |
|
||||
| test_cipher.rs:41:9:41:14 | const8 [&ref] | test_cipher.rs:42:73:42:78 | const8 [&ref] | provenance | |
|
||||
| test_cipher.rs:41:28:41:76 | &... [&ref] | test_cipher.rs:41:9:41:14 | const8 [&ref] | provenance | |
|
||||
| test_cipher.rs:41:29:41:76 | [...] | test_cipher.rs:41:28:41:76 | &... [&ref] | provenance | |
|
||||
| test_cipher.rs:42:49:42:79 | ...::from_slice(...) [&ref] | test_cipher.rs:42:30:42:47 | ...::new | provenance | MaD:3 Sink:MaD:3 |
|
||||
| test_cipher.rs:42:73:42:78 | const8 [&ref] | test_cipher.rs:42:49:42:79 | ...::from_slice(...) [&ref] | provenance | MaD:23 |
|
||||
| test_cipher.rs:42:73:42:78 | const8 [&ref] | test_cipher.rs:42:49:42:79 | ...::from_slice(...) [&ref] | provenance | MaD:18 |
|
||||
| test_cipher.rs:50:9:50:15 | const10 [element] | test_cipher.rs:51:75:51:81 | const10 [element] | provenance | |
|
||||
| test_cipher.rs:50:37:50:52 | ...::zeroed | test_cipher.rs:50:37:50:54 | ...::zeroed(...) [element] | provenance | Src:MaD:7 |
|
||||
| test_cipher.rs:50:37:50:54 | ...::zeroed(...) [element] | test_cipher.rs:50:9:50:15 | const10 [element] | provenance | |
|
||||
| test_cipher.rs:51:50:51:82 | ...::from_slice(...) [&ref, element] | test_cipher.rs:51:31:51:48 | ...::new | provenance | MaD:3 Sink:MaD:3 Sink:MaD:3 |
|
||||
| test_cipher.rs:51:74:51:81 | &const10 [&ref, element] | test_cipher.rs:51:50:51:82 | ...::from_slice(...) [&ref, element] | provenance | MaD:23 |
|
||||
| test_cipher.rs:51:74:51:81 | &const10 [&ref, element] | test_cipher.rs:51:50:51:82 | ...::from_slice(...) [&ref, element] | provenance | MaD:18 |
|
||||
| test_cipher.rs:51:75:51:81 | const10 [element] | test_cipher.rs:51:74:51:81 | &const10 [&ref, element] | provenance | |
|
||||
| test_cipher.rs:73:9:73:14 | const2 [&ref] | test_cipher.rs:74:46:74:51 | const2 [&ref] | provenance | |
|
||||
| test_cipher.rs:73:18:73:26 | &... [&ref] | test_cipher.rs:73:9:73:14 | const2 [&ref] | provenance | |
|
||||
@@ -65,14 +65,14 @@ edges
|
||||
| test_cookie.rs:38:9:38:14 | array2 | test_cookie.rs:42:34:42:39 | array2 | provenance | |
|
||||
| test_cookie.rs:38:18:38:37 | ...::from(...) | test_cookie.rs:38:9:38:14 | array2 | provenance | |
|
||||
| test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:18:38:37 | ...::from(...) | provenance | MaD:8 |
|
||||
| test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:18:38:37 | ...::from(...) | provenance | MaD:18 |
|
||||
| test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:18:38:37 | ...::from(...) | provenance | MaD:19 |
|
||||
| test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:18:38:37 | ...::from(...) | provenance | MaD:20 |
|
||||
| test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:18:38:37 | ...::from(...) | provenance | MaD:21 |
|
||||
| test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:18:38:37 | ...::from(...) | provenance | MaD:22 |
|
||||
| test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:18:38:37 | ...::from(...) | provenance | MaD:13 |
|
||||
| test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:18:38:37 | ...::from(...) | provenance | MaD:14 |
|
||||
| test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:18:38:37 | ...::from(...) | provenance | MaD:15 |
|
||||
| test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:18:38:37 | ...::from(...) | provenance | MaD:16 |
|
||||
| test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:18:38:37 | ...::from(...) | provenance | MaD:17 |
|
||||
| test_cookie.rs:42:34:42:39 | array2 | test_cookie.rs:42:14:42:32 | ...::from | provenance | MaD:2 Sink:MaD:2 |
|
||||
| test_cookie.rs:49:9:49:14 | array3 [element] | test_cookie.rs:53:34:53:39 | array3 [element] | provenance | |
|
||||
| test_cookie.rs:49:23:49:25 | 0u8 | test_cookie.rs:49:23:49:29 | ...::from_elem(...) [element] | provenance | MaD:24 |
|
||||
| test_cookie.rs:49:23:49:25 | 0u8 | test_cookie.rs:49:23:49:29 | ...::from_elem(...) [element] | provenance | MaD:19 |
|
||||
| test_cookie.rs:49:23:49:29 | ...::from_elem(...) [element] | test_cookie.rs:49:9:49:14 | array3 [element] | provenance | |
|
||||
| test_cookie.rs:53:34:53:39 | array3 [element] | test_cookie.rs:53:14:53:32 | ...::from | provenance | MaD:2 Sink:MaD:2 |
|
||||
| test_heuristic.rs:44:9:44:16 | const_iv [&ref] | test_heuristic.rs:45:41:45:48 | const_iv | provenance | |
|
||||
@@ -80,15 +80,11 @@ edges
|
||||
| test_heuristic.rs:44:31:44:38 | [0u8; 16] | test_heuristic.rs:44:30:44:38 | &... [&ref] | provenance | |
|
||||
| test_heuristic.rs:64:20:64:27 | [0u8; 16] | test_heuristic.rs:64:19:64:27 | &... | provenance | |
|
||||
| test_heuristic.rs:65:31:65:38 | [0u8; 16] | test_heuristic.rs:65:30:65:38 | &... | provenance | |
|
||||
| test_heuristic.rs:69:32:69:32 | 1 | test_heuristic.rs:69:22:69:32 | ... + ... | provenance | MaD:10 |
|
||||
| test_heuristic.rs:69:32:69:32 | 1 | test_heuristic.rs:69:22:69:32 | ... + ... | provenance | MaD:9 |
|
||||
| test_heuristic.rs:70:23:70:35 | ... << ... | test_heuristic.rs:70:22:70:62 | ... ^ ... | provenance | MaD:15 |
|
||||
| test_heuristic.rs:70:34:70:35 | 32 | test_heuristic.rs:70:23:70:35 | ... << ... | provenance | MaD:17 |
|
||||
| test_heuristic.rs:70:34:70:35 | 32 | test_heuristic.rs:70:23:70:35 | ... << ... | provenance | MaD:16 |
|
||||
| test_heuristic.rs:70:41:70:61 | ... & ... | test_heuristic.rs:70:22:70:62 | ... ^ ... | provenance | MaD:14 |
|
||||
| test_heuristic.rs:70:41:70:61 | ... & ... | test_heuristic.rs:70:22:70:62 | ... ^ ... | provenance | MaD:13 |
|
||||
| test_heuristic.rs:70:52:70:61 | 0xFFFFFFFF | test_heuristic.rs:70:41:70:61 | ... & ... | provenance | MaD:12 |
|
||||
| test_heuristic.rs:70:52:70:61 | 0xFFFFFFFF | test_heuristic.rs:70:41:70:61 | ... & ... | provenance | MaD:11 |
|
||||
| test_heuristic.rs:70:23:70:35 | ... << ... | test_heuristic.rs:70:22:70:62 | ... ^ ... | provenance | MaD:11 |
|
||||
| test_heuristic.rs:70:34:70:35 | 32 | test_heuristic.rs:70:23:70:35 | ... << ... | provenance | MaD:12 |
|
||||
| test_heuristic.rs:70:41:70:61 | ... & ... | test_heuristic.rs:70:22:70:62 | ... ^ ... | provenance | MaD:11 |
|
||||
| test_heuristic.rs:70:52:70:61 | 0xFFFFFFFF | test_heuristic.rs:70:41:70:61 | ... & ... | provenance | MaD:10 |
|
||||
models
|
||||
| 1 | Sink: <_ as crypto_common::KeyInit>::new_from_slice; Argument[0]; credentials-key |
|
||||
| 2 | Sink: <biscotti::crypto::master::Key>::from; Argument[0]; credentials-key |
|
||||
@@ -98,22 +94,17 @@ models
|
||||
| 6 | Sink: <cookie::secure::key::Key>::from; Argument[0].Reference; credentials-key |
|
||||
| 7 | Source: core::mem::zeroed; ReturnValue.Element; constant-source |
|
||||
| 8 | Summary: <_ as core::convert::From>::from; Argument[0]; ReturnValue; taint |
|
||||
| 9 | Summary: <_ as core::ops::arith::Add>::add; Argument[0].Reference; ReturnValue; taint |
|
||||
| 10 | Summary: <_ as core::ops::arith::Add>::add; Argument[0]; ReturnValue; taint |
|
||||
| 11 | Summary: <_ as core::ops::bit::BitAnd>::bitand; Argument[0].Reference; ReturnValue; taint |
|
||||
| 12 | Summary: <_ as core::ops::bit::BitAnd>::bitand; Argument[0]; ReturnValue; taint |
|
||||
| 13 | Summary: <_ as core::ops::bit::BitXor>::bitxor; Argument[0].Reference; ReturnValue; taint |
|
||||
| 14 | Summary: <_ as core::ops::bit::BitXor>::bitxor; Argument[0]; ReturnValue; taint |
|
||||
| 15 | Summary: <_ as core::ops::bit::BitXor>::bitxor; Argument[self]; ReturnValue; taint |
|
||||
| 16 | Summary: <_ as core::ops::bit::Shl>::shl; Argument[0].Reference; ReturnValue; taint |
|
||||
| 17 | Summary: <_ as core::ops::bit::Shl>::shl; Argument[0]; ReturnValue; taint |
|
||||
| 18 | Summary: <alloc::vec::Vec as core::convert::From>::from; Argument[0].Field[alloc::borrow::Cow::Owned(0)]; ReturnValue; value |
|
||||
| 19 | Summary: <alloc::vec::Vec as core::convert::From>::from; Argument[0].Field[alloc::bstr::ByteString(0)]; ReturnValue; value |
|
||||
| 20 | Summary: <alloc::vec::Vec as core::convert::From>::from; Argument[0].Field[alloc::collections::binary_heap::BinaryHeap::data]; ReturnValue; value |
|
||||
| 21 | Summary: <alloc::vec::Vec as core::convert::From>::from; Argument[0].Field[alloc::string::String::vec]; ReturnValue; value |
|
||||
| 22 | Summary: <alloc::vec::Vec as core::convert::From>::from; Argument[0]; ReturnValue; taint |
|
||||
| 23 | Summary: <generic_array::GenericArray>::from_slice; Argument[0].Reference; ReturnValue.Reference; value |
|
||||
| 24 | Summary: alloc::vec::from_elem; Argument[0]; ReturnValue.Element; value |
|
||||
| 9 | Summary: <_ as core::ops::arith::Add>::add; Argument[self,0]; ReturnValue; taint |
|
||||
| 10 | Summary: <_ as core::ops::bit::BitAnd>::bitand; Argument[self,0]; ReturnValue; taint |
|
||||
| 11 | Summary: <_ as core::ops::bit::BitXor>::bitxor; Argument[self,0]; ReturnValue; taint |
|
||||
| 12 | Summary: <_ as core::ops::bit::Shl>::shl; Argument[self,0]; ReturnValue; taint |
|
||||
| 13 | Summary: <alloc::vec::Vec as core::convert::From>::from; Argument[0].Field[alloc::borrow::Cow::Owned(0)]; ReturnValue; value |
|
||||
| 14 | Summary: <alloc::vec::Vec as core::convert::From>::from; Argument[0].Field[alloc::bstr::ByteString(0)]; ReturnValue; value |
|
||||
| 15 | Summary: <alloc::vec::Vec as core::convert::From>::from; Argument[0].Field[alloc::collections::binary_heap::BinaryHeap::data]; ReturnValue; value |
|
||||
| 16 | Summary: <alloc::vec::Vec as core::convert::From>::from; Argument[0].Field[alloc::string::String::vec]; ReturnValue; value |
|
||||
| 17 | Summary: <alloc::vec::Vec as core::convert::From>::from; Argument[0]; ReturnValue; taint |
|
||||
| 18 | Summary: <generic_array::GenericArray>::from_slice; Argument[0].Reference; ReturnValue.Reference; value |
|
||||
| 19 | Summary: alloc::vec::from_elem; Argument[0]; ReturnValue.Element; value |
|
||||
nodes
|
||||
| test_cipher.rs:18:9:18:14 | const1 [&ref] | semmle.label | const1 [&ref] |
|
||||
| test_cipher.rs:18:28:18:36 | &... [&ref] | semmle.label | &... [&ref] |
|
||||
|
||||
@@ -343,7 +343,7 @@ module Make1<LocationSig Location, InputSig1<Location> Input1> {
|
||||
* ```
|
||||
* the type parameter `T` has the constraint `IComparable<T>`.
|
||||
*/
|
||||
TypeMention getATypeParameterConstraint(TypeParameter tp);
|
||||
Type getATypeParameterConstraint(TypeParameter tp, TypePath path);
|
||||
|
||||
/**
|
||||
* Holds if
|
||||
@@ -841,15 +841,6 @@ module Make1<LocationSig Location, InputSig1<Location> Input1> {
|
||||
signature module SatisfiesConstraintInputSig<HasTypeTreeSig HasTypeTree> {
|
||||
/** Holds if it is relevant to know if `term` satisfies `constraint`. */
|
||||
predicate relevantConstraint(HasTypeTree term, Type constraint);
|
||||
|
||||
/**
|
||||
* Holds if constraints that are satisfied through conditions that are
|
||||
* universally quantified type parameters should be used. Such type
|
||||
* parameters might have type parameter constraints, and these are _not_
|
||||
* checked. Hence using these represent a trade-off between too many
|
||||
* constraints and too few constraints being satisfied.
|
||||
*/
|
||||
default predicate useUniversalConditions() { any() }
|
||||
}
|
||||
|
||||
module SatisfiesConstraint<
|
||||
@@ -901,12 +892,14 @@ module Make1<LocationSig Location, InputSig1<Location> Input1> {
|
||||
TypeMention constraintMention
|
||||
) {
|
||||
exists(Type type | hasTypeConstraint(tt, type, constraint) |
|
||||
useUniversalConditions() and // todo: remove, and instead check constraints
|
||||
not exists(countConstraintImplementations(type, constraint)) and
|
||||
conditionSatisfiesConstraintTypeAt(abs, condition, constraintMention, _, _) and
|
||||
resolveTypeMentionRoot(condition) = abs.getATypeParameter() and
|
||||
constraint = resolveTypeMentionRoot(constraintMention)
|
||||
or
|
||||
// TODO: Handle universal conditions properly, which means checking type parameter constraints
|
||||
// Also remember to update logic in `hasNotConstraintMention`
|
||||
//
|
||||
// not exists(countConstraintImplementations(type, constraint)) and
|
||||
// conditionSatisfiesConstraintTypeAt(abs, condition, constraintMention, _, _) and
|
||||
// resolveTypeMentionRoot(condition) = abs.getATypeParameter() and
|
||||
// constraint = resolveTypeMentionRoot(constraintMention)
|
||||
// or
|
||||
countConstraintImplementations(type, constraint) > 0 and
|
||||
rootTypesSatisfaction(type, constraint, abs, condition, constraintMention) and
|
||||
// When there are multiple ways the type could implement the
|
||||
@@ -936,18 +929,17 @@ module Make1<LocationSig Location, InputSig1<Location> Input1> {
|
||||
pragma[nomagic]
|
||||
private predicate hasNotConstraintMention(HasTypeTree tt, Type constraint) {
|
||||
exists(Type type | hasTypeConstraint(tt, type, constraint) |
|
||||
(
|
||||
not useUniversalConditions()
|
||||
or
|
||||
exists(countConstraintImplementations(type, constraint))
|
||||
or
|
||||
forall(TypeAbstraction abs, TypeMention condition, TypeMention constraintMention |
|
||||
conditionSatisfiesConstraintTypeAt(abs, condition, constraintMention, _, _) and
|
||||
resolveTypeMentionRoot(condition) = abs.getATypeParameter()
|
||||
|
|
||||
not constraint = resolveTypeMentionRoot(constraintMention)
|
||||
)
|
||||
) and
|
||||
// TODO: Handle universal conditions properly, which means taking type parameter constraints into account
|
||||
// (
|
||||
// exists(countConstraintImplementations(type, constraint))
|
||||
// or
|
||||
// forall(TypeAbstraction abs, TypeMention condition, TypeMention constraintMention |
|
||||
// conditionSatisfiesConstraintTypeAt(abs, condition, constraintMention, _, _) and
|
||||
// resolveTypeMentionRoot(condition) = abs.getATypeParameter()
|
||||
// |
|
||||
// not constraint = resolveTypeMentionRoot(constraintMention)
|
||||
// )
|
||||
// ) and
|
||||
(
|
||||
countConstraintImplementations(type, constraint) = 0
|
||||
or
|
||||
@@ -1459,13 +1451,10 @@ module Make1<LocationSig Location, InputSig1<Location> Input1> {
|
||||
accessDeclarationPositionMatch(apos, dpos) and
|
||||
constrainedTp = target.getTypeParameter(_) and
|
||||
tp = target.getTypeParameter(_) and
|
||||
tp = getATypeParameterConstraint(constrainedTp, pathToTp) and
|
||||
constrainedTp != tp and
|
||||
constrainedTp = target.getDeclaredType(dpos, pathToConstrained) and
|
||||
exists(TypeMention tm |
|
||||
tm = getATypeParameterConstraint(constrainedTp) and
|
||||
tm.resolveTypeAt(pathToTp) = tp and
|
||||
constraint = resolveTypeMentionRoot(tm)
|
||||
)
|
||||
constraint = getATypeParameterConstraint(constrainedTp, TypePath::nil())
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user