mirror of
https://github.com/github/codeql.git
synced 2025-12-24 04:36:35 +01:00
Merge branch 'master' into ir-this-parameter-2
Bring in fix for duplicate virtual variables for parameter indirections
This commit is contained in:
@@ -4,6 +4,11 @@
|
||||
|
||||
import cpp
|
||||
|
||||
/**
|
||||
* Gets the number corresponding to the contents of `input` in base-8.
|
||||
* Note: the first character of `input` must be `0`. For example:
|
||||
* `parseOctal("012345") = 5349`.
|
||||
*/
|
||||
bindingset[input]
|
||||
int parseOctal(string input) {
|
||||
input.charAt(0) = "0" and
|
||||
@@ -15,44 +20,77 @@ int parseOctal(string input) {
|
||||
)
|
||||
}
|
||||
|
||||
/** Gets the number corresponding to the "set-user-ID on execute bit" in Unix. */
|
||||
int s_isuid() { result = parseOctal("04000") }
|
||||
|
||||
/** Gets the number corresponding to the "set-group-ID on execute bit" in Unix. */
|
||||
int s_isgid() { result = parseOctal("02000") }
|
||||
|
||||
/** Gets the number corresponding to the sticky bit in Unix. */
|
||||
int s_isvtx() { result = parseOctal("01000") }
|
||||
|
||||
/** Gets the number corresponding to the read permission bit for owner of the file in Unix. */
|
||||
int s_irusr() { result = parseOctal("0400") }
|
||||
|
||||
/** Gets the number corresponding to the write permission bit for owner of the file in Unix. */
|
||||
int s_iwusr() { result = parseOctal("0200") }
|
||||
|
||||
/** Gets the number corresponding to the execute permission bit for owner of the file in Unix. */
|
||||
int s_ixusr() { result = parseOctal("0100") }
|
||||
|
||||
/** Gets the number corresponding to the permissions `S_IRUSR | S_IWUSR | S_IXUSR` in Unix. */
|
||||
int s_irwxu() { result = s_irusr().bitOr(s_iwusr()).bitOr(s_ixusr()) }
|
||||
|
||||
/**
|
||||
* Gets the number corresponding to the read permission bit for the group
|
||||
* owner of the file in Unix.
|
||||
*/
|
||||
int s_irgrp() { result = s_irusr().bitShiftRight(3) }
|
||||
|
||||
/**
|
||||
* Gets the number corresponding to the write permission bit for the group
|
||||
* owner of the file in Unix.
|
||||
*/
|
||||
int s_iwgrp() { result = s_iwusr().bitShiftRight(3) }
|
||||
|
||||
/**
|
||||
* Gets the number corresponding to the execute permission bit for the group
|
||||
* owner of the file in Unix.
|
||||
*/
|
||||
int s_ixgrp() { result = s_ixusr().bitShiftRight(3) }
|
||||
|
||||
/** Gets the number corresponding to the permissions `S_IRGRP | S_IWGRP | S_IXGRP` in Unix. */
|
||||
int s_irwxg() { result = s_irwxu().bitShiftRight(3) }
|
||||
|
||||
/** Gets the number corresponding to the read permission bit for other users in Unix. */
|
||||
int s_iroth() { result = s_irgrp().bitShiftRight(3) }
|
||||
|
||||
/** Gets the number corresponding to the write permission bit for other users in Unix. */
|
||||
int s_iwoth() { result = s_iwgrp().bitShiftRight(3) }
|
||||
|
||||
/** Gets the number corresponding to the execute-or-search permission bit for other users in Unix. */
|
||||
int s_ixoth() { result = s_ixgrp().bitShiftRight(3) }
|
||||
|
||||
/** Gets the number corresponding to the permissions `S_IROTH | S_IWOTH | S_IXOTH` in Unix. */
|
||||
int s_irwxo() { result = s_irwxg().bitShiftRight(3) }
|
||||
|
||||
/**
|
||||
* Gets the number that can be used in a bitwise and with the file status flag
|
||||
* to produce a number representing the file access mode.
|
||||
*/
|
||||
int o_accmode() { result = parseOctal("0003") }
|
||||
|
||||
/** Gets the number corresponding to the read-only file access mode. */
|
||||
int o_rdonly() { result = parseOctal("00") }
|
||||
|
||||
/** Gets the number corresponding to the write-only file access mode. */
|
||||
int o_wronly() { result = parseOctal("01") }
|
||||
|
||||
/** Gets the number corresponding to the read-and-write file access mode. */
|
||||
int o_rdwr() { result = parseOctal("02") }
|
||||
|
||||
/** Gets the number corresponding to the file creation flag O_CREAT on Linux. */
|
||||
int o_creat() { result = parseOctal("0100") }
|
||||
|
||||
/** Gets the number corresponding to the file creation flag O_EXCL on Linux. */
|
||||
int o_excl() { result = parseOctal("0200") }
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
/**
|
||||
* Provides classes and predicates for reasoning about definitions and uses of variables.
|
||||
*/
|
||||
|
||||
import cpp
|
||||
private import semmle.code.cpp.controlflow.StackVariableReachability
|
||||
private import semmle.code.cpp.dataflow.EscapesTree
|
||||
@@ -135,6 +139,7 @@ library class DefOrUse extends ControlFlowNodeBase {
|
||||
}
|
||||
}
|
||||
|
||||
/** A definition of a stack variable. */
|
||||
library class Def extends DefOrUse {
|
||||
Def() { definition(_, this) }
|
||||
|
||||
@@ -149,6 +154,7 @@ private predicate parameterIsOverwritten(Function f, Parameter p) {
|
||||
definitionBarrier(p, _)
|
||||
}
|
||||
|
||||
/** A definition of a parameter. */
|
||||
library class ParameterDef extends DefOrUse {
|
||||
ParameterDef() {
|
||||
// Optimization: parameters that are not overwritten do not require
|
||||
@@ -162,6 +168,7 @@ library class ParameterDef extends DefOrUse {
|
||||
}
|
||||
}
|
||||
|
||||
/** A use of a stack variable. */
|
||||
library class Use extends DefOrUse {
|
||||
Use() { useOfVar(_, this) }
|
||||
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
/**
|
||||
* Provides predicates for detecting whether an expression dereferences a pointer.
|
||||
*/
|
||||
|
||||
import cpp
|
||||
import Nullness
|
||||
|
||||
|
||||
@@ -1,3 +1,8 @@
|
||||
/**
|
||||
* Provides classes and predicates for reasoning about guards and the control
|
||||
* flow elements controlled by those guards.
|
||||
*/
|
||||
|
||||
import cpp
|
||||
import semmle.code.cpp.controlflow.BasicBlocks
|
||||
import semmle.code.cpp.controlflow.SSA
|
||||
|
||||
@@ -1,3 +1,8 @@
|
||||
/**
|
||||
* Provides classes and predicates for reasoning about guards and the control
|
||||
* flow elements controlled by those guards.
|
||||
*/
|
||||
|
||||
import cpp
|
||||
import semmle.code.cpp.ir.IR
|
||||
|
||||
@@ -32,7 +37,7 @@ class GuardCondition extends Expr {
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if this condition controls `block`, meaning that `block` is only
|
||||
* Holds if this condition controls `controlled`, meaning that `controlled` is only
|
||||
* entered if the value of this condition is `testIsTrue`.
|
||||
*
|
||||
* Illustration:
|
||||
@@ -253,7 +258,7 @@ class IRGuardCondition extends Instruction {
|
||||
IRGuardCondition() { branch = get_branch_for_condition(this) }
|
||||
|
||||
/**
|
||||
* Holds if this condition controls `block`, meaning that `block` is only
|
||||
* Holds if this condition controls `controlled`, meaning that `controlled` is only
|
||||
* entered if the value of this condition is `testIsTrue`.
|
||||
*
|
||||
* Illustration:
|
||||
@@ -290,6 +295,10 @@ class IRGuardCondition extends Instruction {
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if the control-flow edge `(pred, succ)` may be taken only if
|
||||
* the value of this condition is `testIsTrue`.
|
||||
*/
|
||||
cached
|
||||
predicate controlsEdge(IRBlock pred, IRBlock succ, boolean testIsTrue) {
|
||||
pred.getASuccessor() = succ and
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
/**
|
||||
* Provides classes and predicates for working with null values and checks for nullness.
|
||||
*/
|
||||
|
||||
import cpp
|
||||
import DefinitionsAndUses
|
||||
|
||||
|
||||
@@ -1,7 +1,15 @@
|
||||
/**
|
||||
* Provides classes and predicates for SSA representation (Static Single Assignment form).
|
||||
*/
|
||||
|
||||
import cpp
|
||||
import semmle.code.cpp.controlflow.Dominance
|
||||
import SSAUtils
|
||||
|
||||
/**
|
||||
* The SSA logic comes in two versions: the standard SSA and range-analysis RangeSSA.
|
||||
* This class provides the standard SSA logic.
|
||||
*/
|
||||
library class StandardSSA extends SSAHelper {
|
||||
StandardSSA() { this = 0 }
|
||||
}
|
||||
@@ -50,11 +58,13 @@ class SsaDefinition extends ControlFlowNodeBase {
|
||||
*/
|
||||
ControlFlowNode getDefinition() { result = this }
|
||||
|
||||
/** Gets the `BasicBlock` containing this definition. */
|
||||
BasicBlock getBasicBlock() { result.contains(getDefinition()) }
|
||||
|
||||
/** Holds if this definition is a phi node for variable `v`. */
|
||||
predicate isPhiNode(StackVariable v) { exists(StandardSSA x | x.phi_node(v, this.(BasicBlock))) }
|
||||
|
||||
/** Gets the location of this definition. */
|
||||
Location getLocation() { result = this.(ControlFlowNode).getLocation() }
|
||||
|
||||
/** Holds if the SSA variable `(this, p)` is defined by parameter `p`. */
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
/**
|
||||
* Provides classes and predicates for use in the SSA library.
|
||||
*/
|
||||
|
||||
import cpp
|
||||
import semmle.code.cpp.controlflow.Dominance
|
||||
import semmle.code.cpp.controlflow.SSA // must be imported for proper caching of SSAHelper
|
||||
|
||||
@@ -1,3 +1,8 @@
|
||||
/**
|
||||
* Provides a library for working with local (intra-procedural) control-flow
|
||||
* reachability involving stack variables.
|
||||
*/
|
||||
|
||||
import cpp
|
||||
|
||||
/**
|
||||
|
||||
@@ -168,6 +168,7 @@ class SubBasicBlock extends ControlFlowNodeBase {
|
||||
/** Gets the first control-flow node in this `SubBasicBlock`. */
|
||||
ControlFlowNode getStart() { result = this }
|
||||
|
||||
/** Gets the function that contains this `SubBasicBlock`. */
|
||||
pragma[noinline]
|
||||
Function getEnclosingFunction() { result = this.getStart().getControlFlowScope() }
|
||||
}
|
||||
|
||||
@@ -116,33 +116,12 @@ class ExprNode extends Node, TExprNode {
|
||||
|
||||
override string toString() { result = expr.toString() }
|
||||
|
||||
override Location getLocation() {
|
||||
result = getExprLocationOverride(expr)
|
||||
or
|
||||
not exists(getExprLocationOverride(expr)) and
|
||||
result = expr.getLocation()
|
||||
}
|
||||
override Location getLocation() { result = expr.getLocation() }
|
||||
|
||||
/** Gets the expression corresponding to this node. */
|
||||
Expr getExpr() { result = expr }
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a location for `e` that's more accurate than `e.getLocation()`, if any.
|
||||
*/
|
||||
private Location getExprLocationOverride(Expr e) {
|
||||
// Base case: the parent has a better location than `e`.
|
||||
e.getLocation() instanceof UnknownExprLocation and
|
||||
result = e.getParent().getLocation() and
|
||||
not result instanceof UnknownLocation
|
||||
or
|
||||
// Recursive case: the parent has a location override that's better than what
|
||||
// `e` has.
|
||||
e.getLocation() instanceof UnknownExprLocation and
|
||||
result = getExprLocationOverride(e.getParent()) and
|
||||
not result instanceof UnknownLocation
|
||||
}
|
||||
|
||||
abstract class ParameterNode extends Node, TNode {
|
||||
/**
|
||||
* Holds if this node is the parameter of `c` at the specified (zero-based)
|
||||
|
||||
@@ -168,6 +168,7 @@ class SubBasicBlock extends ControlFlowNodeBase {
|
||||
/** Gets the first control-flow node in this `SubBasicBlock`. */
|
||||
ControlFlowNode getStart() { result = this }
|
||||
|
||||
/** Gets the function that contains this `SubBasicBlock`. */
|
||||
pragma[noinline]
|
||||
Function getEnclosingFunction() { result = this.getStart().getControlFlowScope() }
|
||||
}
|
||||
|
||||
@@ -53,7 +53,32 @@ class Expr extends StmtParent, @expr {
|
||||
Element getParent() { exprparents(underlyingElement(this), _, unresolveElement(result)) }
|
||||
|
||||
/** Gets the location of this expression. */
|
||||
override Location getLocation() { exprs(underlyingElement(this), _, result) }
|
||||
override Location getLocation() {
|
||||
result = this.getExprLocationOverride()
|
||||
or
|
||||
not exists(this.getExprLocationOverride()) and
|
||||
result = this.getDbLocation()
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a location for this expression that's more accurate than
|
||||
* `getDbLocation()`, if any.
|
||||
*/
|
||||
private Location getExprLocationOverride() {
|
||||
// Base case: the parent has a better location than `this`.
|
||||
this.getDbLocation() instanceof UnknownExprLocation and
|
||||
result = this.getParent().(Expr).getDbLocation() and
|
||||
not result instanceof UnknownLocation
|
||||
or
|
||||
// Recursive case: the parent has a location override that's better than
|
||||
// what `this` has.
|
||||
this.getDbLocation() instanceof UnknownExprLocation and
|
||||
result = this.getParent().(Expr).getExprLocationOverride() and
|
||||
not result instanceof UnknownLocation
|
||||
}
|
||||
|
||||
/** Gets the location of this expressions, raw from the database. */
|
||||
private Location getDbLocation() { exprs(underlyingElement(this), _, result) }
|
||||
|
||||
/** Holds if this is an auxiliary expression generated by the compiler. */
|
||||
predicate isCompilerGenerated() {
|
||||
|
||||
@@ -33,8 +33,7 @@ private predicate predictableInstruction(Instruction instr) {
|
||||
* Note that the list itself is not very principled; it consists of all the
|
||||
* functions listed in the old security library's [default] `isPureFunction`
|
||||
* that have more than one argument, but are not in the old taint tracking
|
||||
* library's `returnArgument` predicate. In addition, `strlen` is included
|
||||
* because it's also a special case in flow to return values.
|
||||
* library's `returnArgument` predicate.
|
||||
*/
|
||||
predicate predictableOnlyFlow(string name) {
|
||||
name = "strcasestr" or
|
||||
@@ -43,7 +42,6 @@ predicate predictableOnlyFlow(string name) {
|
||||
name = "strchrnul" or
|
||||
name = "strcmp" or
|
||||
name = "strcspn" or
|
||||
name = "strlen" or // special case
|
||||
name = "strncmp" or
|
||||
name = "strndup" or
|
||||
name = "strnlen" or
|
||||
|
||||
@@ -90,7 +90,7 @@ class IndirectParameterAllocation extends Allocation, TIndirectParameterAllocati
|
||||
|
||||
final override string getUniqueId() { result = var.getUniqueId() }
|
||||
|
||||
final override IRType getIRType() { result = var.getIRType() }
|
||||
final override IRType getIRType() { result instanceof IRUnknownType }
|
||||
|
||||
final override predicate isReadOnly() { none() }
|
||||
|
||||
|
||||
@@ -913,6 +913,9 @@ private module CachedForDebugging {
|
||||
}
|
||||
|
||||
module SSAConsistency {
|
||||
/**
|
||||
* Holds if a `MemoryOperand` has more than one `MemoryLocation` assigned by alias analysis.
|
||||
*/
|
||||
query predicate multipleOperandMemoryLocations(
|
||||
OldIR::MemoryOperand operand, string message, OldIR::IRFunction func, string funcText
|
||||
) {
|
||||
@@ -925,6 +928,9 @@ module SSAConsistency {
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if a `MemoryLocation` does not have an associated `VirtualVariable`.
|
||||
*/
|
||||
query predicate missingVirtualVariableForMemoryLocation(
|
||||
Alias::MemoryLocation location, string message, OldIR::IRFunction func, string funcText
|
||||
) {
|
||||
@@ -933,4 +939,25 @@ module SSAConsistency {
|
||||
funcText = Language::getIdentityString(func.getFunction()) and
|
||||
message = "Memory location has no virtual variable in function '$@'."
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if a `MemoryLocation` is a member of more than one `VirtualVariable`.
|
||||
*/
|
||||
query predicate multipleVirtualVariablesForMemoryLocation(
|
||||
Alias::MemoryLocation location, string message, OldIR::IRFunction func, string funcText
|
||||
) {
|
||||
exists(int vvarCount |
|
||||
vvarCount = strictcount(location.getVirtualVariable()) and
|
||||
vvarCount > 1 and
|
||||
func = location.getIRFunction() and
|
||||
funcText = Language::getIdentityString(func.getFunction()) and
|
||||
message =
|
||||
"Memory location has " + vvarCount.toString() + " virtual variables in function '$@': (" +
|
||||
concat(Alias::VirtualVariable vvar |
|
||||
vvar = location.getVirtualVariable()
|
||||
|
|
||||
vvar.toString(), ", "
|
||||
) + ")."
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -913,6 +913,9 @@ private module CachedForDebugging {
|
||||
}
|
||||
|
||||
module SSAConsistency {
|
||||
/**
|
||||
* Holds if a `MemoryOperand` has more than one `MemoryLocation` assigned by alias analysis.
|
||||
*/
|
||||
query predicate multipleOperandMemoryLocations(
|
||||
OldIR::MemoryOperand operand, string message, OldIR::IRFunction func, string funcText
|
||||
) {
|
||||
@@ -925,6 +928,9 @@ module SSAConsistency {
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if a `MemoryLocation` does not have an associated `VirtualVariable`.
|
||||
*/
|
||||
query predicate missingVirtualVariableForMemoryLocation(
|
||||
Alias::MemoryLocation location, string message, OldIR::IRFunction func, string funcText
|
||||
) {
|
||||
@@ -933,4 +939,25 @@ module SSAConsistency {
|
||||
funcText = Language::getIdentityString(func.getFunction()) and
|
||||
message = "Memory location has no virtual variable in function '$@'."
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if a `MemoryLocation` is a member of more than one `VirtualVariable`.
|
||||
*/
|
||||
query predicate multipleVirtualVariablesForMemoryLocation(
|
||||
Alias::MemoryLocation location, string message, OldIR::IRFunction func, string funcText
|
||||
) {
|
||||
exists(int vvarCount |
|
||||
vvarCount = strictcount(location.getVirtualVariable()) and
|
||||
vvarCount > 1 and
|
||||
func = location.getIRFunction() and
|
||||
funcText = Language::getIdentityString(func.getFunction()) and
|
||||
message =
|
||||
"Memory location has " + vvarCount.toString() + " virtual variables in function '$@': (" +
|
||||
concat(Alias::VirtualVariable vvar |
|
||||
vvar = location.getVirtualVariable()
|
||||
|
|
||||
vvar.toString(), ", "
|
||||
) + ")."
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,9 +20,7 @@ class PureStrFunction extends AliasFunction, ArrayFunction, TaintFunction, SideE
|
||||
name = "strpbrk" or
|
||||
name = "strcmp" or
|
||||
name = "strcspn" or
|
||||
name = "strlen" or
|
||||
name = "strncmp" or
|
||||
name = "strnlen" or
|
||||
name = "strrchr" or
|
||||
name = "strspn" or
|
||||
name = "strtod" or
|
||||
@@ -30,16 +28,7 @@ class PureStrFunction extends AliasFunction, ArrayFunction, TaintFunction, SideE
|
||||
name = "strtol" or
|
||||
name = "strtoll" or
|
||||
name = "strtoq" or
|
||||
name = "strtoul" or
|
||||
name = "wcslen"
|
||||
)
|
||||
or
|
||||
hasGlobalName(name) and
|
||||
(
|
||||
name = "_mbslen" or
|
||||
name = "_mbslen_l" or
|
||||
name = "_mbstrlen" or
|
||||
name = "_mbstrlen_l"
|
||||
name = "strtoul"
|
||||
)
|
||||
)
|
||||
}
|
||||
@@ -90,6 +79,52 @@ class PureStrFunction extends AliasFunction, ArrayFunction, TaintFunction, SideE
|
||||
}
|
||||
}
|
||||
|
||||
class StrLenFunction extends AliasFunction, ArrayFunction, SideEffectFunction {
|
||||
StrLenFunction() {
|
||||
exists(string name |
|
||||
hasGlobalOrStdName(name) and
|
||||
(
|
||||
name = "strlen" or
|
||||
name = "strnlen" or
|
||||
name = "wcslen"
|
||||
)
|
||||
or
|
||||
hasGlobalName(name) and
|
||||
(
|
||||
name = "_mbslen" or
|
||||
name = "_mbslen_l" or
|
||||
name = "_mbstrlen" or
|
||||
name = "_mbstrlen_l"
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
override predicate hasArrayInput(int bufParam) {
|
||||
getParameter(bufParam).getUnspecifiedType() instanceof PointerType
|
||||
}
|
||||
|
||||
override predicate hasArrayWithNullTerminator(int bufParam) {
|
||||
getParameter(bufParam).getUnspecifiedType() instanceof PointerType
|
||||
}
|
||||
|
||||
override predicate parameterNeverEscapes(int i) {
|
||||
getParameter(i).getUnspecifiedType() instanceof PointerType
|
||||
}
|
||||
|
||||
override predicate parameterEscapesOnlyViaReturn(int i) { none() }
|
||||
|
||||
override predicate parameterIsAlwaysReturned(int i) { none() }
|
||||
|
||||
override predicate hasOnlySpecificReadSideEffects() { any() }
|
||||
|
||||
override predicate hasOnlySpecificWriteSideEffects() { any() }
|
||||
|
||||
override predicate hasSpecificReadSideEffect(ParameterIndex i, boolean buffer) {
|
||||
getParameter(i).getUnspecifiedType() instanceof PointerType and
|
||||
buffer = true
|
||||
}
|
||||
}
|
||||
|
||||
class PureFunction extends TaintFunction, SideEffectFunction {
|
||||
PureFunction() {
|
||||
exists(string name |
|
||||
|
||||
@@ -10,10 +10,7 @@ class Strftime extends TaintFunction, ArrayFunction {
|
||||
input.isParameterDeref(2) or
|
||||
input.isParameterDeref(3)
|
||||
) and
|
||||
(
|
||||
output.isParameterDeref(0) or
|
||||
output.isReturnValue()
|
||||
)
|
||||
output.isParameterDeref(0)
|
||||
}
|
||||
|
||||
override predicate hasArrayWithNullTerminator(int bufParam) { bufParam = 2 }
|
||||
|
||||
@@ -15,6 +15,9 @@ import semmle.code.cpp.models.Models
|
||||
* A library function for which a taint-tracking library should propagate taint
|
||||
* from a parameter or qualifier to an output buffer, return value, or qualifier.
|
||||
*
|
||||
* An expression is tainted if it could be influenced by an attacker to have
|
||||
* an unusual value.
|
||||
*
|
||||
* Note that this does not include direct copying of values; that is covered by
|
||||
* DataFlowModel.qll. If a value is sometimes copied in full, and sometimes
|
||||
* altered (for example copying a string with `strncpy`), this is also considered
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
/*
|
||||
* Support for tracking tainted data through the program.
|
||||
*
|
||||
* Prefer to use `semmle.code.cpp.dataflow.TaintTracking` when designing new queries.
|
||||
*/
|
||||
|
||||
import semmle.code.cpp.ir.dataflow.DefaultTaintTracking
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
/**
|
||||
* DEPRECATED: we now use `semmle.code.cpp.ir.dataflow.DefaultTaintTracking`,
|
||||
* which is based on the IR but designed to behave similarly to this old
|
||||
* libarary.
|
||||
*
|
||||
* Provides the implementation of `semmle.code.cpp.security.TaintTracking`. Do
|
||||
* not import this file directly.
|
||||
*/
|
||||
|
||||
@@ -430,28 +430,28 @@ DynamicCast.cpp:
|
||||
#-----| Conversion = [BaseClassConversion] base class conversion
|
||||
#-----| Type = [PointerType] Base *
|
||||
#-----| ValueCategory = prvalue
|
||||
#-----| expr: [ThisExpr] this
|
||||
#-----| Type = [PointerType] Derived *
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
# 4| expr: [ThisExpr] this
|
||||
# 4| Type = [PointerType] Derived *
|
||||
# 4| ValueCategory = prvalue(load)
|
||||
#-----| 0: [ReferenceToExpr] (reference to)
|
||||
#-----| Type = [LValueReferenceType] const Base &
|
||||
#-----| ValueCategory = prvalue
|
||||
#-----| expr: [PointerDereferenceExpr] * ...
|
||||
#-----| Type = [SpecifiedType] const Base
|
||||
#-----| ValueCategory = lvalue
|
||||
# 4| expr: [PointerDereferenceExpr] * ...
|
||||
# 4| Type = [SpecifiedType] const Base
|
||||
# 4| ValueCategory = lvalue
|
||||
#-----| 0: [CStyleCast] (const Base *)...
|
||||
#-----| Conversion = [BaseClassConversion] base class conversion
|
||||
#-----| Type = [PointerType] const Base *
|
||||
#-----| ValueCategory = prvalue
|
||||
#-----| expr: [AddressOfExpr] & ...
|
||||
#-----| Type = [PointerType] const Derived *
|
||||
#-----| ValueCategory = prvalue
|
||||
# 4| expr: [AddressOfExpr] & ...
|
||||
# 4| Type = [PointerType] const Derived *
|
||||
# 4| ValueCategory = prvalue
|
||||
#-----| 0: [ReferenceDereferenceExpr] (reference dereference)
|
||||
#-----| Type = [SpecifiedType] const Derived
|
||||
#-----| ValueCategory = lvalue
|
||||
#-----| expr: [VariableAccess] p#0
|
||||
#-----| Type = [LValueReferenceType] const Derived &
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
# 4| expr: [VariableAccess] p#0
|
||||
# 4| Type = [LValueReferenceType] const Derived &
|
||||
# 4| ValueCategory = prvalue(load)
|
||||
#-----| 1: [ReturnStmt] return ...
|
||||
#-----| 0: [ReferenceToExpr] (reference to)
|
||||
#-----| Type = [LValueReferenceType] Derived &
|
||||
@@ -1248,9 +1248,9 @@ union_etc.cpp:
|
||||
# 6| 0: [PointerFieldAccess] x
|
||||
# 6| Type = [IntType] int
|
||||
# 6| ValueCategory = lvalue
|
||||
#-----| -1: [ThisExpr] this
|
||||
#-----| Type = [PointerType] S *
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
# 6| -1: [ThisExpr] this
|
||||
# 6| Type = [PointerType] S *
|
||||
# 6| ValueCategory = prvalue(load)
|
||||
# 6| 1: [VariableAccess] val
|
||||
# 6| Type = [IntType] int
|
||||
# 6| ValueCategory = prvalue(load)
|
||||
@@ -1431,9 +1431,9 @@ union_etc.cpp:
|
||||
# 33| 0: [PointerFieldAccess] q
|
||||
# 33| Type = [IntType] int
|
||||
# 33| ValueCategory = lvalue
|
||||
#-----| -1: [ThisExpr] this
|
||||
#-----| Type = [PointerType] T *
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
# 33| -1: [ThisExpr] this
|
||||
# 33| Type = [PointerType] T *
|
||||
# 33| ValueCategory = prvalue(load)
|
||||
# 33| 1: [VariableAccess] val
|
||||
# 33| Type = [IntType] int
|
||||
# 33| ValueCategory = prvalue(load)
|
||||
|
||||
@@ -79,4 +79,4 @@
|
||||
| blocks.cpp:57:12:57:32 | call to expression |
|
||||
| blocks.cpp:57:14:57:30 | ^ { ... } |
|
||||
| blocks.cpp:57:23:57:26 | four |
|
||||
| file://:0:0:0:0 | this |
|
||||
| blocks.cpp:57:23:57:26 | this |
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
| edg.c:12:14:12:51 | (int)... | 0 | 0 |
|
||||
| edg.c:12:14:12:51 | __builtin_offsetof | 1 | 1 |
|
||||
| edg.c:12:14:12:51 | mystruct | 0 | 0 |
|
||||
| edg.c:12:49:12:50 | 0 | 0 | 0 |
|
||||
| edg.c:12:49:12:50 | * ... | 0 | 0 |
|
||||
| edg.c:12:49:12:50 | f2 | 0 | 0 |
|
||||
| edg.c:13:14:13:45 | 0 | 0 | 0 |
|
||||
| edg.c:13:14:13:45 | & ... | 0 | 0 |
|
||||
@@ -10,6 +13,3 @@
|
||||
| edg.c:13:14:13:45 | (size_t)... | 0 | 0 |
|
||||
| edg.c:13:14:13:45 | __INTADDR__ | 1 | 1 |
|
||||
| edg.c:13:43:13:44 | f2 | 0 | 0 |
|
||||
| file://:0:0:0:0 | 0 | 0 | 0 |
|
||||
| file://:0:0:0:0 | * ... | 0 | 0 |
|
||||
| file://:0:0:0:0 | mystruct | 0 | 0 |
|
||||
|
||||
@@ -1,298 +1,298 @@
|
||||
| file://:0:0:0:0 | 0 | | 0 |
|
||||
| file://:0:0:0:0 | 1 | | 1 |
|
||||
| file://:0:0:0:0 | 2 | | 2 |
|
||||
| file://:0:0:0:0 | C1 | | <none> |
|
||||
| file://:0:0:0:0 | C1 | | <none> |
|
||||
| file://:0:0:0:0 | C1 | | <none> |
|
||||
| file://:0:0:0:0 | C1 | | <none> |
|
||||
| file://:0:0:0:0 | C1 | | <none> |
|
||||
| file://:0:0:0:0 | C1 | | <none> |
|
||||
| file://:0:0:0:0 | C1 | | <none> |
|
||||
| file://:0:0:0:0 | C1 | | <none> |
|
||||
| file://:0:0:0:0 | C1 | | <none> |
|
||||
| file://:0:0:0:0 | C1 | | <none> |
|
||||
| file://:0:0:0:0 | C1 | | <none> |
|
||||
| file://:0:0:0:0 | C1 | | <none> |
|
||||
| file://:0:0:0:0 | C2 | | <none> |
|
||||
| file://:0:0:0:0 | C2 | | <none> |
|
||||
| file://:0:0:0:0 | C2 | | <none> |
|
||||
| file://:0:0:0:0 | C2 | | <none> |
|
||||
| file://:0:0:0:0 | C2 | | <none> |
|
||||
| file://:0:0:0:0 | C2 | | <none> |
|
||||
| file://:0:0:0:0 | C3 | | <none> |
|
||||
| file://:0:0:0:0 | C3 | | <none> |
|
||||
| file://:0:0:0:0 | C3 | | <none> |
|
||||
| file://:0:0:0:0 | C3 | | <none> |
|
||||
| file://:0:0:0:0 | C3 | | <none> |
|
||||
| file://:0:0:0:0 | C3 | | <none> |
|
||||
| file://:0:0:0:0 | C4 | | <none> |
|
||||
| file://:0:0:0:0 | C4 | | <none> |
|
||||
| file://:0:0:0:0 | C5 | | <none> |
|
||||
| file://:0:0:0:0 | C5 | | <none> |
|
||||
| file://:0:0:0:0 | a_final_struct | | <none> |
|
||||
| file://:0:0:0:0 | a_struct | | <none> |
|
||||
| file://:0:0:0:0 | a_struct | | <none> |
|
||||
| file://:0:0:0:0 | a_struct | | <none> |
|
||||
| file://:0:0:0:0 | a_struct | | <none> |
|
||||
| file://:0:0:0:0 | a_struct | | <none> |
|
||||
| file://:0:0:0:0 | a_struct | | <none> |
|
||||
| file://:0:0:0:0 | a_struct | | <none> |
|
||||
| file://:0:0:0:0 | a_struct | | <none> |
|
||||
| file://:0:0:0:0 | a_struct | | <none> |
|
||||
| file://:0:0:0:0 | a_struct | | <none> |
|
||||
| file://:0:0:0:0 | a_struct | | <none> |
|
||||
| file://:0:0:0:0 | a_struct | | <none> |
|
||||
| file://:0:0:0:0 | a_struct | | <none> |
|
||||
| file://:0:0:0:0 | a_struct | | <none> |
|
||||
| file://:0:0:0:0 | a_struct | | <none> |
|
||||
| file://:0:0:0:0 | a_struct | | <none> |
|
||||
| file://:0:0:0:0 | a_struct_plus | | <none> |
|
||||
| file://:0:0:0:0 | a_union | | <none> |
|
||||
| file://:0:0:0:0 | a_union | | <none> |
|
||||
| file://:0:0:0:0 | a_union | | <none> |
|
||||
| file://:0:0:0:0 | abstract | | <none> |
|
||||
| file://:0:0:0:0 | abstract | | <none> |
|
||||
| file://:0:0:0:0 | abstract | | <none> |
|
||||
| file://:0:0:0:0 | an_enum | | <none> |
|
||||
| file://:0:0:0:0 | an_enum | | <none> |
|
||||
| file://:0:0:0:0 | an_enum | | <none> |
|
||||
| file://:0:0:0:0 | data | | <none> |
|
||||
| file://:0:0:0:0 | double | | <none> |
|
||||
| file://:0:0:0:0 | double | | <none> |
|
||||
| file://:0:0:0:0 | double | | <none> |
|
||||
| file://:0:0:0:0 | double | | <none> |
|
||||
| file://:0:0:0:0 | empty | | <none> |
|
||||
| file://:0:0:0:0 | empty | | <none> |
|
||||
| file://:0:0:0:0 | empty | | <none> |
|
||||
| file://:0:0:0:0 | empty | | <none> |
|
||||
| file://:0:0:0:0 | empty | | <none> |
|
||||
| file://:0:0:0:0 | empty | | <none> |
|
||||
| file://:0:0:0:0 | empty | | <none> |
|
||||
| file://:0:0:0:0 | empty | | <none> |
|
||||
| file://:0:0:0:0 | empty | | <none> |
|
||||
| file://:0:0:0:0 | empty | | <none> |
|
||||
| file://:0:0:0:0 | empty | | <none> |
|
||||
| file://:0:0:0:0 | empty | | <none> |
|
||||
| file://:0:0:0:0 | empty | | <none> |
|
||||
| file://:0:0:0:0 | empty | | <none> |
|
||||
| file://:0:0:0:0 | empty | | <none> |
|
||||
| file://:0:0:0:0 | empty | | <none> |
|
||||
| file://:0:0:0:0 | empty | | <none> |
|
||||
| file://:0:0:0:0 | empty | | <none> |
|
||||
| file://:0:0:0:0 | empty | | <none> |
|
||||
| file://:0:0:0:0 | empty | | <none> |
|
||||
| file://:0:0:0:0 | empty | | <none> |
|
||||
| file://:0:0:0:0 | empty | | <none> |
|
||||
| file://:0:0:0:0 | empty | | <none> |
|
||||
| file://:0:0:0:0 | empty | | <none> |
|
||||
| file://:0:0:0:0 | empty | | <none> |
|
||||
| file://:0:0:0:0 | empty | | <none> |
|
||||
| file://:0:0:0:0 | empty | | <none> |
|
||||
| file://:0:0:0:0 | empty | | <none> |
|
||||
| file://:0:0:0:0 | empty | | <none> |
|
||||
| file://:0:0:0:0 | empty | | <none> |
|
||||
| file://:0:0:0:0 | empty | | <none> |
|
||||
| file://:0:0:0:0 | empty | | <none> |
|
||||
| file://:0:0:0:0 | empty | | <none> |
|
||||
| file://:0:0:0:0 | empty | | <none> |
|
||||
| file://:0:0:0:0 | empty | | <none> |
|
||||
| file://:0:0:0:0 | float | | <none> |
|
||||
| file://:0:0:0:0 | float | | <none> |
|
||||
| file://:0:0:0:0 | float | | <none> |
|
||||
| file://:0:0:0:0 | float | | <none> |
|
||||
| file://:0:0:0:0 | float | | <none> |
|
||||
| file://:0:0:0:0 | float | | <none> |
|
||||
| file://:0:0:0:0 | has_assign | | <none> |
|
||||
| file://:0:0:0:0 | has_assign | | <none> |
|
||||
| file://:0:0:0:0 | has_assign | | <none> |
|
||||
| file://:0:0:0:0 | has_assign | | <none> |
|
||||
| file://:0:0:0:0 | has_assign | | <none> |
|
||||
| file://:0:0:0:0 | has_copy | | <none> |
|
||||
| file://:0:0:0:0 | has_copy | | <none> |
|
||||
| file://:0:0:0:0 | has_copy | | <none> |
|
||||
| file://:0:0:0:0 | has_copy | | <none> |
|
||||
| file://:0:0:0:0 | has_copy | | <none> |
|
||||
| file://:0:0:0:0 | has_copy | | <none> |
|
||||
| file://:0:0:0:0 | has_copy | | <none> |
|
||||
| file://:0:0:0:0 | has_copy | | <none> |
|
||||
| file://:0:0:0:0 | has_copy | | <none> |
|
||||
| file://:0:0:0:0 | has_copy | | <none> |
|
||||
| file://:0:0:0:0 | has_copy | | <none> |
|
||||
| file://:0:0:0:0 | has_noexcept_destructor | | <none> |
|
||||
| file://:0:0:0:0 | has_noexcept_destructor | | <none> |
|
||||
| file://:0:0:0:0 | has_nothrow_assign | | <none> |
|
||||
| file://:0:0:0:0 | has_nothrow_assign | | <none> |
|
||||
| file://:0:0:0:0 | has_nothrow_constructor | | <none> |
|
||||
| file://:0:0:0:0 | has_nothrow_constructor | | <none> |
|
||||
| file://:0:0:0:0 | has_nothrow_copy | | <none> |
|
||||
| file://:0:0:0:0 | has_user_destructor | | <none> |
|
||||
| file://:0:0:0:0 | has_user_destructor | | <none> |
|
||||
| file://:0:0:0:0 | has_user_destructor | | <none> |
|
||||
| file://:0:0:0:0 | has_user_destructor | | <none> |
|
||||
| file://:0:0:0:0 | has_user_destructor | | <none> |
|
||||
| file://:0:0:0:0 | has_user_destructor | | <none> |
|
||||
| file://:0:0:0:0 | has_user_destructor | | <none> |
|
||||
| file://:0:0:0:0 | has_virtual_destructor | | <none> |
|
||||
| file://:0:0:0:0 | has_virtual_destructor | | <none> |
|
||||
| file://:0:0:0:0 | int | | <none> |
|
||||
| file://:0:0:0:0 | int | | <none> |
|
||||
| file://:0:0:0:0 | int | | <none> |
|
||||
| file://:0:0:0:0 | int | | <none> |
|
||||
| file://:0:0:0:0 | int | | <none> |
|
||||
| file://:0:0:0:0 | int | | <none> |
|
||||
| file://:0:0:0:0 | int | | <none> |
|
||||
| file://:0:0:0:0 | int | | <none> |
|
||||
| file://:0:0:0:0 | int | | <none> |
|
||||
| file://:0:0:0:0 | int | | <none> |
|
||||
| file://:0:0:0:0 | int | | <none> |
|
||||
| file://:0:0:0:0 | int | | <none> |
|
||||
| file://:0:0:0:0 | int | | <none> |
|
||||
| file://:0:0:0:0 | int | | <none> |
|
||||
| file://:0:0:0:0 | int | | <none> |
|
||||
| file://:0:0:0:0 | int | | <none> |
|
||||
| file://:0:0:0:0 | int | | <none> |
|
||||
| file://:0:0:0:0 | int | | <none> |
|
||||
| file://:0:0:0:0 | int | | <none> |
|
||||
| file://:0:0:0:0 | int | | <none> |
|
||||
| file://:0:0:0:0 | int | | <none> |
|
||||
| file://:0:0:0:0 | int | | <none> |
|
||||
| file://:0:0:0:0 | long | | <none> |
|
||||
| file://:0:0:0:0 | long | | <none> |
|
||||
| file://:0:0:0:0 | long | | <none> |
|
||||
| file://:0:0:0:0 | long | | <none> |
|
||||
| file://:0:0:0:0 | method | | <none> |
|
||||
| file://:0:0:0:0 | method | | <none> |
|
||||
| file://:0:0:0:0 | method | | <none> |
|
||||
| file://:0:0:0:0 | method_data | | <none> |
|
||||
| file://:0:0:0:0 | no_has_nothrow_constructor | | <none> |
|
||||
| file://:0:0:0:0 | no_has_nothrow_constructor | | <none> |
|
||||
| ms.cpp:38:41:38:45 | 0 | | 0 |
|
||||
| ms.cpp:88:27:88:45 | __has_assign | empty | 0 |
|
||||
| ms.cpp:88:27:88:45 | empty | | <none> |
|
||||
| ms.cpp:89:27:89:50 | __has_assign | has_assign | 1 |
|
||||
| ms.cpp:89:27:89:50 | has_assign | | <none> |
|
||||
| ms.cpp:91:25:91:41 | __has_copy | empty | 0 |
|
||||
| ms.cpp:91:25:91:41 | empty | | <none> |
|
||||
| ms.cpp:92:25:92:44 | __has_copy | has_copy | 1 |
|
||||
| ms.cpp:92:25:92:44 | has_copy | | <none> |
|
||||
| ms.cpp:94:35:94:61 | __has_nothrow_assign | empty | 1 |
|
||||
| ms.cpp:94:35:94:61 | empty | | <none> |
|
||||
| ms.cpp:95:35:95:66 | __has_nothrow_assign | has_assign | 0 |
|
||||
| ms.cpp:95:35:95:66 | has_assign | | <none> |
|
||||
| ms.cpp:96:35:96:74 | __has_nothrow_assign | has_nothrow_assign | 1 |
|
||||
| ms.cpp:96:35:96:74 | has_nothrow_assign | | <none> |
|
||||
| ms.cpp:98:40:98:71 | __has_nothrow_constructor | empty | 1 |
|
||||
| ms.cpp:98:40:98:71 | empty | | <none> |
|
||||
| ms.cpp:99:40:99:92 | __has_nothrow_constructor | no_has_nothrow_constructor | 0 |
|
||||
| ms.cpp:99:40:99:92 | no_has_nothrow_constructor | | <none> |
|
||||
| ms.cpp:100:40:100:89 | __has_nothrow_constructor | has_nothrow_constructor | 1 |
|
||||
| ms.cpp:100:40:100:89 | has_nothrow_constructor | | <none> |
|
||||
| ms.cpp:102:33:102:57 | __has_nothrow_copy | empty | 1 |
|
||||
| ms.cpp:102:33:102:57 | empty | | <none> |
|
||||
| ms.cpp:103:33:103:60 | __has_nothrow_copy | has_copy | 0 |
|
||||
| ms.cpp:103:33:103:60 | has_copy | | <none> |
|
||||
| ms.cpp:104:33:104:68 | __has_nothrow_copy | has_nothrow_copy | 1 |
|
||||
| ms.cpp:104:33:104:68 | has_nothrow_copy | | <none> |
|
||||
| ms.cpp:106:35:106:61 | __has_trivial_assign | empty | 1 |
|
||||
| ms.cpp:106:35:106:61 | empty | | <none> |
|
||||
| ms.cpp:107:35:107:66 | __has_trivial_assign | has_assign | 0 |
|
||||
| ms.cpp:107:35:107:66 | has_assign | | <none> |
|
||||
| ms.cpp:109:40:109:71 | __has_trivial_constructor | empty | 1 |
|
||||
| ms.cpp:109:40:109:71 | empty | | <none> |
|
||||
| ms.cpp:110:40:110:92 | __has_trivial_constructor | no_has_nothrow_constructor | 0 |
|
||||
| ms.cpp:110:40:110:92 | no_has_nothrow_constructor | | <none> |
|
||||
| ms.cpp:111:40:111:89 | __has_trivial_constructor | has_nothrow_constructor | 0 |
|
||||
| ms.cpp:111:40:111:89 | has_nothrow_constructor | | <none> |
|
||||
| ms.cpp:113:33:113:57 | __has_trivial_copy | empty | 1 |
|
||||
| ms.cpp:113:33:113:57 | empty | | <none> |
|
||||
| ms.cpp:114:33:114:60 | __has_trivial_copy | has_copy | 0 |
|
||||
| ms.cpp:114:33:114:60 | has_copy | | <none> |
|
||||
| ms.cpp:116:36:116:63 | __has_user_destructor | empty | 0 |
|
||||
| ms.cpp:116:36:116:63 | empty | | <none> |
|
||||
| ms.cpp:117:36:117:77 | __has_user_destructor | has_user_destructor | 1 |
|
||||
| ms.cpp:117:36:117:77 | has_user_destructor | | <none> |
|
||||
| ms.cpp:118:36:118:80 | __has_user_destructor | has_virtual_destructor | 1 |
|
||||
| ms.cpp:118:36:118:80 | has_virtual_destructor | | <none> |
|
||||
| ms.cpp:120:39:120:69 | __has_virtual_destructor | empty | 0 |
|
||||
| ms.cpp:120:39:120:69 | empty | | <none> |
|
||||
| ms.cpp:121:39:121:83 | __has_virtual_destructor | has_user_destructor | 0 |
|
||||
| ms.cpp:121:39:121:83 | has_user_destructor | | <none> |
|
||||
| ms.cpp:122:39:122:86 | __has_virtual_destructor | has_virtual_destructor | 1 |
|
||||
| ms.cpp:122:39:122:86 | has_virtual_destructor | | <none> |
|
||||
| ms.cpp:124:28:124:47 | __is_abstract | empty | 0 |
|
||||
| ms.cpp:124:28:124:47 | empty | | <none> |
|
||||
| ms.cpp:125:28:125:50 | __is_abstract | abstract | 1 |
|
||||
| ms.cpp:125:28:125:50 | abstract | | <none> |
|
||||
| ms.cpp:126:28:126:48 | __is_abstract | method | 0 |
|
||||
| ms.cpp:126:28:126:48 | method | | <none> |
|
||||
| ms.cpp:128:27:128:45 | C1 | | <none> |
|
||||
| ms.cpp:128:27:128:45 | C1 | | <none> |
|
||||
| ms.cpp:128:27:128:45 | __is_base_of | C1,C1 | 1 |
|
||||
| ms.cpp:129:27:129:45 | C1 | | <none> |
|
||||
| ms.cpp:129:27:129:45 | C2 | | <none> |
|
||||
| ms.cpp:129:27:129:45 | __is_base_of | C1,C2 | 1 |
|
||||
| ms.cpp:130:27:130:45 | C1 | | <none> |
|
||||
| ms.cpp:130:27:130:45 | C3 | | <none> |
|
||||
| ms.cpp:130:27:130:45 | __is_base_of | C1,C3 | 1 |
|
||||
| ms.cpp:131:27:131:45 | C1 | | <none> |
|
||||
| ms.cpp:131:27:131:45 | C5 | | <none> |
|
||||
| ms.cpp:131:27:131:45 | __is_base_of | C1,C5 | 0 |
|
||||
| ms.cpp:132:27:132:45 | C2 | | <none> |
|
||||
| ms.cpp:132:27:132:45 | C3 | | <none> |
|
||||
| ms.cpp:132:27:132:45 | __is_base_of | C3,C2 | 0 |
|
||||
| ms.cpp:133:27:133:45 | C1 | | <none> |
|
||||
| ms.cpp:133:27:133:45 | C3 | | <none> |
|
||||
| ms.cpp:133:27:133:45 | __is_base_of | C3,C1 | 0 |
|
||||
| ms.cpp:134:27:134:45 | C2 | | <none> |
|
||||
| ms.cpp:134:27:134:45 | C4 | | <none> |
|
||||
| ms.cpp:134:27:134:45 | __is_base_of | C2,C4 | 0 |
|
||||
| ms.cpp:135:27:135:47 | __is_base_of | int,int | 0 |
|
||||
| ms.cpp:135:27:135:47 | int | | <none> |
|
||||
| ms.cpp:135:27:135:47 | int | | <none> |
|
||||
| ms.cpp:136:27:136:48 | __is_base_of | int,long | 0 |
|
||||
| ms.cpp:136:27:136:48 | int | | <none> |
|
||||
| ms.cpp:136:27:136:48 | long | | <none> |
|
||||
| ms.cpp:137:28:137:49 | __is_base_of | long,int | 0 |
|
||||
| ms.cpp:137:28:137:49 | int | | <none> |
|
||||
| ms.cpp:137:28:137:49 | long | | <none> |
|
||||
| ms.cpp:138:28:138:51 | __is_base_of | int,double | 0 |
|
||||
| ms.cpp:138:28:138:51 | double | | <none> |
|
||||
| ms.cpp:138:28:138:51 | int | | <none> |
|
||||
| ms.cpp:139:28:139:51 | __is_base_of | double,int | 0 |
|
||||
| ms.cpp:139:28:139:51 | double | | <none> |
|
||||
| ms.cpp:139:28:139:51 | int | | <none> |
|
||||
| ms.cpp:141:25:141:41 | __is_class | empty | 1 |
|
||||
| ms.cpp:141:25:141:41 | empty | | <none> |
|
||||
| ms.cpp:142:25:142:43 | __is_class | an_enum | 0 |
|
||||
| ms.cpp:142:25:142:43 | an_enum | | <none> |
|
||||
| ms.cpp:143:25:143:43 | __is_class | a_union | 0 |
|
||||
| ms.cpp:143:25:143:43 | a_union | | <none> |
|
||||
| ms.cpp:144:25:144:44 | __is_class | a_struct | 1 |
|
||||
| ms.cpp:144:25:144:44 | a_struct | | <none> |
|
||||
| ms.cpp:145:25:145:39 | __is_class | int | 0 |
|
||||
| ms.cpp:145:25:145:39 | int | | <none> |
|
||||
| ms.cpp:147:34:147:59 | C1 | | <none> |
|
||||
| ms.cpp:147:34:147:59 | C1 | | <none> |
|
||||
| ms.cpp:147:34:147:59 | __is_convertible_to | C1,C1 | 1 |
|
||||
| ms.cpp:148:34:148:59 | C1 | | <none> |
|
||||
| ms.cpp:148:34:148:59 | C2 | | <none> |
|
||||
| ms.cpp:148:34:148:59 | __is_convertible_to | C1,C2 | 0 |
|
||||
| ms.cpp:149:34:149:59 | C1 | | <none> |
|
||||
| ms.cpp:149:34:149:59 | C3 | | <none> |
|
||||
| ms.cpp:149:34:149:59 | __is_convertible_to | C1,C3 | 0 |
|
||||
| ms.cpp:150:34:150:59 | C1 | | <none> |
|
||||
| ms.cpp:150:34:150:59 | C5 | | <none> |
|
||||
| ms.cpp:150:34:150:59 | __is_convertible_to | C1,C5 | 0 |
|
||||
| ms.cpp:151:34:151:59 | C2 | | <none> |
|
||||
| ms.cpp:151:34:151:59 | C3 | | <none> |
|
||||
| ms.cpp:151:34:151:59 | __is_convertible_to | C3,C2 | 0 |
|
||||
| ms.cpp:152:34:152:59 | C1 | | <none> |
|
||||
| ms.cpp:152:34:152:59 | C3 | | <none> |
|
||||
| ms.cpp:152:34:152:59 | __is_convertible_to | C3,C1 | 0 |
|
||||
| ms.cpp:153:34:153:59 | C2 | | <none> |
|
||||
| ms.cpp:153:34:153:59 | C4 | | <none> |
|
||||
| ms.cpp:153:34:153:59 | __is_convertible_to | C2,C4 | 0 |
|
||||
| ms.cpp:154:34:154:61 | __is_convertible_to | int,int | 1 |
|
||||
| ms.cpp:154:34:154:61 | int | | <none> |
|
||||
| ms.cpp:154:34:154:61 | int | | <none> |
|
||||
| ms.cpp:155:34:155:62 | __is_convertible_to | int,long | 1 |
|
||||
| ms.cpp:155:34:155:62 | int | | <none> |
|
||||
| ms.cpp:155:34:155:62 | long | | <none> |
|
||||
| ms.cpp:156:35:156:63 | __is_convertible_to | long,int | 1 |
|
||||
| ms.cpp:156:35:156:63 | int | | <none> |
|
||||
| ms.cpp:156:35:156:63 | long | | <none> |
|
||||
| ms.cpp:157:35:157:65 | __is_convertible_to | int,double | 1 |
|
||||
| ms.cpp:157:35:157:65 | double | | <none> |
|
||||
| ms.cpp:157:35:157:65 | int | | <none> |
|
||||
| ms.cpp:158:35:158:65 | __is_convertible_to | double,int | 1 |
|
||||
| ms.cpp:158:35:158:65 | double | | <none> |
|
||||
| ms.cpp:158:35:158:65 | int | | <none> |
|
||||
| ms.cpp:160:25:160:41 | __is_empty | empty | 1 |
|
||||
| ms.cpp:160:25:160:41 | empty | | <none> |
|
||||
| ms.cpp:161:25:161:42 | __is_empty | method | 1 |
|
||||
| ms.cpp:161:25:161:42 | method | | <none> |
|
||||
| ms.cpp:162:25:162:40 | __is_empty | data | 0 |
|
||||
| ms.cpp:162:25:162:40 | data | | <none> |
|
||||
| ms.cpp:163:25:163:47 | __is_empty | method_data | 0 |
|
||||
| ms.cpp:163:25:163:47 | method_data | | <none> |
|
||||
| ms.cpp:164:25:164:44 | __is_empty | abstract | 0 |
|
||||
| ms.cpp:164:25:164:44 | abstract | | <none> |
|
||||
| ms.cpp:166:24:166:39 | __is_enum | empty | 0 |
|
||||
| ms.cpp:166:24:166:39 | empty | | <none> |
|
||||
| ms.cpp:167:24:167:41 | __is_enum | an_enum | 1 |
|
||||
| ms.cpp:167:24:167:41 | an_enum | | <none> |
|
||||
| ms.cpp:168:24:168:41 | __is_enum | a_union | 0 |
|
||||
| ms.cpp:168:24:168:41 | a_union | | <none> |
|
||||
| ms.cpp:170:31:170:53 | __is_polymorphic | empty | 0 |
|
||||
| ms.cpp:170:31:170:53 | empty | | <none> |
|
||||
| ms.cpp:171:31:171:56 | __is_polymorphic | abstract | 1 |
|
||||
| ms.cpp:171:31:171:56 | abstract | | <none> |
|
||||
| ms.cpp:172:31:172:54 | __is_polymorphic | method | 0 |
|
||||
| ms.cpp:172:31:172:54 | method | | <none> |
|
||||
| ms.cpp:174:25:174:41 | __is_union | empty | 0 |
|
||||
| ms.cpp:174:25:174:41 | empty | | <none> |
|
||||
| ms.cpp:175:25:175:43 | __is_union | an_enum | 0 |
|
||||
| ms.cpp:175:25:175:43 | an_enum | | <none> |
|
||||
| ms.cpp:176:25:176:43 | __is_union | a_union | 1 |
|
||||
| ms.cpp:176:25:176:43 | a_union | | <none> |
|
||||
| ms.cpp:177:25:177:44 | __is_union | a_struct | 0 |
|
||||
| ms.cpp:177:25:177:44 | a_struct | | <none> |
|
||||
| ms.cpp:178:25:178:39 | __is_union | int | 0 |
|
||||
| ms.cpp:178:25:178:39 | int | | <none> |
|
||||
| ms.cpp:180:42:180:79 | __is_trivially_constructible | a_struct | 1 |
|
||||
| ms.cpp:180:42:180:79 | a_struct | | <none> |
|
||||
| ms.cpp:181:42:181:76 | __is_trivially_constructible | empty | 1 |
|
||||
| ms.cpp:181:42:181:76 | empty | | <none> |
|
||||
| ms.cpp:182:42:182:79 | __is_trivially_constructible | has_copy | 0 |
|
||||
| ms.cpp:182:42:182:79 | has_copy | | <none> |
|
||||
| ms.cpp:184:31:184:57 | __is_destructible | a_struct | 1 |
|
||||
| ms.cpp:184:31:184:57 | a_struct | | <none> |
|
||||
| ms.cpp:185:31:185:54 | __is_destructible | empty | 1 |
|
||||
| ms.cpp:185:31:185:54 | empty | | <none> |
|
||||
| ms.cpp:186:31:186:57 | __is_destructible | has_copy | 1 |
|
||||
| ms.cpp:186:31:186:57 | has_copy | | <none> |
|
||||
| ms.cpp:187:31:187:68 | __is_destructible | has_user_destructor | 0 |
|
||||
| ms.cpp:187:31:187:68 | has_user_destructor | | <none> |
|
||||
| ms.cpp:189:39:189:73 | __is_nothrow_destructible | a_struct | 1 |
|
||||
| ms.cpp:189:39:189:73 | a_struct | | <none> |
|
||||
| ms.cpp:190:39:190:70 | __is_nothrow_destructible | empty | 1 |
|
||||
| ms.cpp:190:39:190:70 | empty | | <none> |
|
||||
| ms.cpp:191:39:191:73 | __is_nothrow_destructible | has_copy | 1 |
|
||||
| ms.cpp:191:39:191:73 | has_copy | | <none> |
|
||||
| ms.cpp:192:39:192:84 | __is_nothrow_destructible | has_user_destructor | 0 |
|
||||
| ms.cpp:192:39:192:84 | has_user_destructor | | <none> |
|
||||
| ms.cpp:193:39:193:88 | __is_nothrow_destructible | has_noexcept_destructor | 0 |
|
||||
| ms.cpp:193:39:193:88 | has_noexcept_destructor | | <none> |
|
||||
| ms.cpp:195:41:195:77 | __is_trivially_destructible | a_struct | 1 |
|
||||
| ms.cpp:195:41:195:77 | a_struct | | <none> |
|
||||
| ms.cpp:196:41:196:74 | __is_trivially_destructible | empty | 1 |
|
||||
| ms.cpp:196:41:196:74 | empty | | <none> |
|
||||
| ms.cpp:197:41:197:77 | __is_trivially_destructible | has_copy | 1 |
|
||||
| ms.cpp:197:41:197:77 | has_copy | | <none> |
|
||||
| ms.cpp:198:41:198:88 | __is_trivially_destructible | has_user_destructor | 0 |
|
||||
| ms.cpp:198:41:198:88 | has_user_destructor | | <none> |
|
||||
| ms.cpp:199:41:199:92 | __is_trivially_destructible | has_noexcept_destructor | 0 |
|
||||
| ms.cpp:199:41:199:92 | has_noexcept_destructor | | <none> |
|
||||
| ms.cpp:201:39:201:82 | __is_trivially_assignable | a_struct,a_struct | 1 |
|
||||
| ms.cpp:201:39:201:82 | a_struct | | <none> |
|
||||
| ms.cpp:201:39:201:82 | a_struct | | <none> |
|
||||
| ms.cpp:202:39:202:79 | __is_trivially_assignable | a_struct,empty | 0 |
|
||||
| ms.cpp:202:39:202:79 | a_struct | | <none> |
|
||||
| ms.cpp:202:39:202:79 | empty | | <none> |
|
||||
| ms.cpp:203:39:203:77 | __is_trivially_assignable | a_struct,int | 0 |
|
||||
| ms.cpp:203:39:203:77 | a_struct | | <none> |
|
||||
| ms.cpp:203:39:203:77 | int | | <none> |
|
||||
| ms.cpp:205:37:205:78 | __is_nothrow_assignable | a_struct,a_struct | 1 |
|
||||
| ms.cpp:205:37:205:78 | a_struct | | <none> |
|
||||
| ms.cpp:205:37:205:78 | a_struct | | <none> |
|
||||
| ms.cpp:206:37:206:75 | __is_nothrow_assignable | a_struct,empty | 0 |
|
||||
| ms.cpp:206:37:206:75 | a_struct | | <none> |
|
||||
| ms.cpp:206:37:206:75 | empty | | <none> |
|
||||
| ms.cpp:207:37:207:73 | __is_nothrow_assignable | a_struct,int | 0 |
|
||||
| ms.cpp:207:37:207:73 | a_struct | | <none> |
|
||||
| ms.cpp:207:37:207:73 | int | | <none> |
|
||||
| ms.cpp:209:34:209:63 | __is_standard_layout | a_struct | 1 |
|
||||
| ms.cpp:209:34:209:63 | a_struct | | <none> |
|
||||
| ms.cpp:210:34:210:68 | __is_standard_layout | a_struct_plus | 0 |
|
||||
| ms.cpp:210:34:210:68 | a_struct_plus | | <none> |
|
||||
| ms.cpp:212:37:212:66 | __is_trivially_copyable | empty | 1 |
|
||||
| ms.cpp:212:37:212:66 | empty | | <none> |
|
||||
| ms.cpp:213:37:213:69 | __is_trivially_copyable | has_copy | 0 |
|
||||
| ms.cpp:213:37:213:69 | has_copy | | <none> |
|
||||
| ms.cpp:215:31:215:54 | __is_literal_type | empty | 1 |
|
||||
| ms.cpp:215:31:215:54 | empty | | <none> |
|
||||
| ms.cpp:216:31:216:68 | __is_literal_type | has_user_destructor | 0 |
|
||||
| ms.cpp:216:31:216:68 | has_user_destructor | | <none> |
|
||||
| ms.cpp:218:44:218:80 | __has_trivial_move_constructor | empty | 1 |
|
||||
| ms.cpp:218:44:218:80 | empty | | <none> |
|
||||
| ms.cpp:219:44:219:83 | __has_trivial_move_constructor | has_copy | 0 |
|
||||
| ms.cpp:219:44:219:83 | has_copy | | <none> |
|
||||
| ms.cpp:220:44:220:94 | __has_trivial_move_constructor | has_user_destructor | 1 |
|
||||
| ms.cpp:220:44:220:94 | has_user_destructor | | <none> |
|
||||
| ms.cpp:222:39:222:70 | __has_trivial_move_assign | empty | 1 |
|
||||
| ms.cpp:222:39:222:70 | empty | | <none> |
|
||||
| ms.cpp:223:39:223:73 | __has_trivial_move_assign | has_copy | 1 |
|
||||
| ms.cpp:223:39:223:73 | has_copy | | <none> |
|
||||
| ms.cpp:224:39:224:75 | __has_trivial_move_assign | has_assign | 0 |
|
||||
| ms.cpp:224:39:224:75 | has_assign | | <none> |
|
||||
| ms.cpp:226:39:226:70 | __has_nothrow_move_assign | empty | 1 |
|
||||
| ms.cpp:226:39:226:70 | empty | | <none> |
|
||||
| ms.cpp:227:39:227:73 | __has_nothrow_move_assign | has_copy | 1 |
|
||||
| ms.cpp:227:39:227:73 | has_copy | | <none> |
|
||||
| ms.cpp:228:39:228:75 | __has_nothrow_move_assign | has_assign | 0 |
|
||||
| ms.cpp:228:39:228:75 | has_assign | | <none> |
|
||||
| ms.cpp:229:39:229:83 | __has_nothrow_move_assign | has_nothrow_assign | 1 |
|
||||
| ms.cpp:229:39:229:83 | has_nothrow_assign | | <none> |
|
||||
| ms.cpp:231:32:231:54 | __is_constructible | int | 1 |
|
||||
| ms.cpp:231:32:231:54 | int | | <none> |
|
||||
| ms.cpp:232:32:232:60 | __is_constructible | int,float | 1 |
|
||||
| ms.cpp:232:32:232:60 | float | | <none> |
|
||||
| ms.cpp:232:32:232:60 | int | | <none> |
|
||||
| ms.cpp:233:32:233:66 | __is_constructible | int,float,float | 0 |
|
||||
| ms.cpp:233:32:233:66 | float | | <none> |
|
||||
| ms.cpp:233:32:233:66 | float | | <none> |
|
||||
| ms.cpp:233:32:233:66 | int | | <none> |
|
||||
| ms.cpp:235:40:235:70 | __is_nothrow_constructible | int | 1 |
|
||||
| ms.cpp:235:40:235:70 | int | | <none> |
|
||||
| ms.cpp:236:40:236:76 | __is_nothrow_constructible | int,float | 1 |
|
||||
| ms.cpp:236:40:236:76 | float | | <none> |
|
||||
| ms.cpp:236:40:236:76 | int | | <none> |
|
||||
| ms.cpp:237:40:237:82 | __is_nothrow_constructible | int,float,float | 0 |
|
||||
| ms.cpp:237:40:237:82 | float | | <none> |
|
||||
| ms.cpp:237:40:237:82 | float | | <none> |
|
||||
| ms.cpp:237:40:237:82 | int | | <none> |
|
||||
| ms.cpp:239:29:239:50 | __has_finalizer | empty | 0 |
|
||||
| ms.cpp:239:29:239:50 | empty | | <none> |
|
||||
| ms.cpp:241:27:241:46 | __is_delegate | empty | 0 |
|
||||
| ms.cpp:241:27:241:46 | empty | | <none> |
|
||||
| ms.cpp:243:34:243:60 | __is_interface_class | empty | 0 |
|
||||
| ms.cpp:243:34:243:60 | empty | | <none> |
|
||||
| ms.cpp:245:28:245:48 | __is_ref_array | empty | 0 |
|
||||
| ms.cpp:245:28:245:48 | empty | | <none> |
|
||||
| ms.cpp:247:28:247:48 | __is_ref_class | empty | 0 |
|
||||
| ms.cpp:247:28:247:48 | empty | | <none> |
|
||||
| ms.cpp:249:25:249:42 | __is_sealed | empty | 0 |
|
||||
| ms.cpp:249:25:249:42 | empty | | <none> |
|
||||
| ms.cpp:251:37:251:66 | __is_simple_value_class | empty | 0 |
|
||||
| ms.cpp:251:37:251:66 | empty | | <none> |
|
||||
| ms.cpp:253:30:253:52 | __is_value_class | empty | 0 |
|
||||
| ms.cpp:253:30:253:52 | empty | | <none> |
|
||||
| ms.cpp:255:24:255:43 | __is_final | a_struct | 0 |
|
||||
| ms.cpp:255:24:255:43 | a_struct | | <none> |
|
||||
| ms.cpp:256:24:256:49 | __is_final | a_final_struct | 1 |
|
||||
| ms.cpp:256:24:256:49 | a_final_struct | | <none> |
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
| file://:0:0:0:0 | 0 |
|
||||
| file://:0:0:0:0 | this |
|
||||
| test.cpp:4:9:4:9 | call to f |
|
||||
| test.cpp:4:9:4:9 | f |
|
||||
| test.cpp:4:9:4:9 | this |
|
||||
| test.cpp:4:9:4:11 | call to expression |
|
||||
| test.cpp:10:5:10:11 | call to Foo |
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
| file://:0:0:0:0 | |
|
||||
| file://:0:0:0:0 | (global namespace) |
|
||||
| file://:0:0:0:0 | <error expr> |
|
||||
| file://:0:0:0:0 | <error expr> |
|
||||
| file://:0:0:0:0 | <error> |
|
||||
| file://:0:0:0:0 | There was an error during this compilation |
|
||||
| file://:0:0:0:0 | _Complex __float128 |
|
||||
@@ -125,6 +124,7 @@
|
||||
| test.cpp:2:10:4:1 | { ... } |
|
||||
| test.cpp:3:5:3:15 | if (...) ... |
|
||||
| test.cpp:3:9:3:12 | (condition decl) |
|
||||
| test.cpp:3:9:3:12 | <error expr> |
|
||||
| test.cpp:3:12:3:12 | <error> |
|
||||
| test.cpp:3:12:3:12 | a condition declaration must include an initializer |
|
||||
| test.cpp:3:12:3:12 | declaration of <error> |
|
||||
|
||||
@@ -551,7 +551,7 @@ irGuardsControl
|
||||
| test.c:146:8:146:8 | Load: x | false | 147 | 147 |
|
||||
| test.c:152:10:152:10 | Load: x | true | 152 | 152 |
|
||||
| test.c:152:15:152:15 | Load: y | true | 152 | 152 |
|
||||
| test.cpp:18:8:18:12 | CompareNE: (bool)... | true | 0 | 0 |
|
||||
| test.cpp:18:8:18:12 | CompareNE: (bool)... | true | 19 | 19 |
|
||||
| test.cpp:31:7:31:13 | CompareEQ: ... == ... | false | 34 | 34 |
|
||||
| test.cpp:31:7:31:13 | CompareEQ: ... == ... | true | 30 | 30 |
|
||||
| test.cpp:31:7:31:13 | CompareEQ: ... == ... | true | 32 | 32 |
|
||||
@@ -690,8 +690,8 @@ irGuardsEnsure
|
||||
| test.c:109:9:109:14 | CompareEQ: ... == ... | test.c:109:14:109:14 | Constant: 0 | != | test.c:109:9:109:9 | Load: x | 0 | 113 | 113 |
|
||||
| test.c:109:19:109:23 | CompareLT: ... < ... | test.c:109:19:109:19 | Load: y | >= | test.c:109:23:109:23 | Constant: (long)... | 0 | 113 | 113 |
|
||||
| test.c:109:19:109:23 | CompareLT: ... < ... | test.c:109:23:109:23 | Constant: (long)... | < | test.c:109:19:109:19 | Load: y | 1 | 113 | 113 |
|
||||
| test.cpp:18:8:18:12 | CompareNE: (bool)... | test.cpp:18:8:18:10 | Call: call to get | != | test.cpp:18:8:18:12 | Constant: (bool)... | 0 | 0 | 0 |
|
||||
| test.cpp:18:8:18:12 | CompareNE: (bool)... | test.cpp:18:8:18:12 | Constant: (bool)... | != | test.cpp:18:8:18:10 | Call: call to get | 0 | 0 | 0 |
|
||||
| test.cpp:18:8:18:12 | CompareNE: (bool)... | test.cpp:18:8:18:10 | Call: call to get | != | test.cpp:18:8:18:12 | Constant: (bool)... | 0 | 19 | 19 |
|
||||
| test.cpp:18:8:18:12 | CompareNE: (bool)... | test.cpp:18:8:18:12 | Constant: (bool)... | != | test.cpp:18:8:18:10 | Call: call to get | 0 | 19 | 19 |
|
||||
| test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:7:31:7 | Load: x | != | test.cpp:31:12:31:13 | Constant: - ... | 0 | 34 | 34 |
|
||||
| test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:7:31:7 | Load: x | == | test.cpp:31:12:31:13 | Constant: - ... | 0 | 30 | 30 |
|
||||
| test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:7:31:7 | Load: x | == | test.cpp:31:12:31:13 | Constant: - ... | 0 | 32 | 32 |
|
||||
|
||||
@@ -2,14 +2,8 @@
|
||||
| | cpp_range_based_for | 0 | 1 | file://:0:0:0:0 | (reference dereference) | <none> |
|
||||
| | cpp_range_based_for | 0 | 1 | file://:0:0:0:0 | (reference to) | <none> |
|
||||
| | cpp_range_based_for | 0 | 9 | file://:0:0:0:0 | initializer for (__range) | declaration |
|
||||
| | cpp_range_based_for | 0 | 11 | file://:0:0:0:0 | (__range) | call to begin |
|
||||
| | cpp_range_based_for | 0 | 13 | file://:0:0:0:0 | initializer for (__begin) | (__range) |
|
||||
| | cpp_range_based_for | 0 | 14 | file://:0:0:0:0 | (__range) | call to end |
|
||||
| | cpp_range_based_for | 0 | 16 | file://:0:0:0:0 | initializer for (__end) | (__end) |
|
||||
| | cpp_range_based_for | 0 | 28 | file://:0:0:0:0 | (__begin) | call to operator!= |
|
||||
| | cpp_range_based_for | 0 | 28 | file://:0:0:0:0 | (__begin) | call to operator* |
|
||||
| | cpp_range_based_for | 0 | 28 | file://:0:0:0:0 | (__begin) | call to operator++ |
|
||||
| | cpp_range_based_for | 0 | 28 | file://:0:0:0:0 | (__end) | (__begin) |
|
||||
| cpp | CopyConstructorClass | 28 | 1 | cpp.cpp:28:5:28:24 | CopyConstructorClass | <none> |
|
||||
| cpp | CopyConstructorClass | 30 | 1 | cpp.cpp:30:5:30:24 | CopyConstructorClass | <none> |
|
||||
| cpp | IntVectorIter | 4 | 1 | cpp.cpp:4:7:4:7 | IntVectorIter | <none> |
|
||||
@@ -37,10 +31,16 @@
|
||||
| cpp | cpp_range_based_for | 22 | 7 | cpp.cpp:22:5:23:12 | declaration | vec |
|
||||
| cpp | cpp_range_based_for | 22 | 8 | cpp.cpp:22:18:22:20 | vec | initializer for (__range) |
|
||||
| cpp | cpp_range_based_for | 22 | 10 | cpp.cpp:22:5:23:12 | declaration | (__range) |
|
||||
| cpp | cpp_range_based_for | 22 | 11 | cpp.cpp:22:18:22:18 | (__range) | call to begin |
|
||||
| cpp | cpp_range_based_for | 22 | 12 | cpp.cpp:22:18:22:18 | call to begin | initializer for (__begin) |
|
||||
| cpp | cpp_range_based_for | 22 | 14 | cpp.cpp:22:18:22:18 | (__range) | call to end |
|
||||
| cpp | cpp_range_based_for | 22 | 15 | cpp.cpp:22:18:22:18 | call to end | initializer for (__end) |
|
||||
| cpp | cpp_range_based_for | 22 | 28 | cpp.cpp:22:5:23:12 | declaration | (__begin) |
|
||||
| cpp | cpp_range_based_for | 22 | 28 | cpp.cpp:22:14:22:14 | initializer for i | ExprStmt |
|
||||
| cpp | cpp_range_based_for | 22 | 28 | cpp.cpp:22:18:22:18 | (__begin) | call to operator!= |
|
||||
| cpp | cpp_range_based_for | 22 | 28 | cpp.cpp:22:18:22:18 | (__begin) | call to operator* |
|
||||
| cpp | cpp_range_based_for | 22 | 28 | cpp.cpp:22:18:22:18 | (__begin) | call to operator++ |
|
||||
| cpp | cpp_range_based_for | 22 | 28 | cpp.cpp:22:18:22:18 | (__end) | (__begin) |
|
||||
| cpp | cpp_range_based_for | 22 | 28 | cpp.cpp:22:18:22:18 | call to operator!= | <false> return ... |
|
||||
| cpp | cpp_range_based_for | 22 | 28 | cpp.cpp:22:18:22:18 | call to operator!= | <true> declaration |
|
||||
| cpp | cpp_range_based_for | 22 | 28 | cpp.cpp:22:18:22:18 | call to operator* | initializer for i |
|
||||
|
||||
@@ -2,12 +2,6 @@ uniqueEnclosingCallable
|
||||
uniqueTypeBound
|
||||
uniqueTypeRepr
|
||||
uniqueNodeLocation
|
||||
| dispatch.cpp:60:18:60:29 | call to Bottom | Node should have one location but has 2. |
|
||||
| dispatch.cpp:61:18:61:29 | call to Middle | Node should have one location but has 2. |
|
||||
| dispatch.cpp:65:10:65:21 | call to Bottom | Node should have one location but has 2. |
|
||||
| file://:0:0:0:0 | call to Bottom | Node should have one location but has 2. |
|
||||
| file://:0:0:0:0 | call to Bottom | Node should have one location but has 2. |
|
||||
| file://:0:0:0:0 | call to Middle | Node should have one location but has 2. |
|
||||
missingLocation
|
||||
uniqueNodeToString
|
||||
missingToString
|
||||
|
||||
@@ -12,24 +12,6 @@ uniqueTypeRepr
|
||||
| complex.cpp:25:7:25:7 | constructor init of field inner [post-this] | Node should have one type representation but has 0. |
|
||||
| complex.cpp:25:7:25:7 | constructor init of field inner [pre-this] | Node should have one type representation but has 0. |
|
||||
uniqueNodeLocation
|
||||
| A.cpp:38:7:38:8 | call to C | Node should have one location but has 2. |
|
||||
| A.cpp:39:7:39:8 | call to C | Node should have one location but has 2. |
|
||||
| A.cpp:41:15:41:21 | call to C | Node should have one location but has 2. |
|
||||
| A.cpp:47:12:47:18 | call to C | Node should have one location but has 2. |
|
||||
| A.cpp:57:17:57:23 | call to C | Node should have one location but has 2. |
|
||||
| A.cpp:64:21:64:28 | call to C2 | Node should have one location but has 2. |
|
||||
| A.cpp:73:25:73:32 | call to C2 | Node should have one location but has 2. |
|
||||
| A.cpp:126:12:126:18 | call to C | Node should have one location but has 2. |
|
||||
| A.cpp:142:14:142:20 | call to C | Node should have one location but has 2. |
|
||||
| file://:0:0:0:0 | call to C | Node should have one location but has 2. |
|
||||
| file://:0:0:0:0 | call to C | Node should have one location but has 2. |
|
||||
| file://:0:0:0:0 | call to C | Node should have one location but has 2. |
|
||||
| file://:0:0:0:0 | call to C | Node should have one location but has 2. |
|
||||
| file://:0:0:0:0 | call to C | Node should have one location but has 2. |
|
||||
| file://:0:0:0:0 | call to C | Node should have one location but has 2. |
|
||||
| file://:0:0:0:0 | call to C | Node should have one location but has 2. |
|
||||
| file://:0:0:0:0 | call to C2 | Node should have one location but has 2. |
|
||||
| file://:0:0:0:0 | call to C2 | Node should have one location but has 2. |
|
||||
missingLocation
|
||||
uniqueNodeToString
|
||||
missingToString
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
uniqueEnclosingCallable
|
||||
uniqueTypeBound
|
||||
| by_reference.cpp:106:21:106:41 | Chi | Node should have one type bound but has 2. |
|
||||
| by_reference.cpp:126:21:126:40 | Chi | Node should have one type bound but has 2. |
|
||||
| file://:0:0:0:0 | Chi | Node should have one type bound but has 2. |
|
||||
uniqueTypeRepr
|
||||
uniqueNodeLocation
|
||||
| D.cpp:1:17:1:17 | o | Node should have one location but has 3. |
|
||||
|
||||
@@ -12,33 +12,41 @@
|
||||
| A.cpp:56:10:56:10 | b | AST only |
|
||||
| A.cpp:56:13:56:15 | call to get | AST only |
|
||||
| A.cpp:57:28:57:30 | call to get | AST only |
|
||||
| A.cpp:64:10:64:15 | this | AST only |
|
||||
| A.cpp:64:17:64:18 | b1 | AST only |
|
||||
| A.cpp:65:10:65:11 | b1 | AST only |
|
||||
| A.cpp:65:14:65:14 | c | AST only |
|
||||
| A.cpp:66:10:66:11 | b2 | AST only |
|
||||
| A.cpp:66:14:66:14 | c | AST only |
|
||||
| A.cpp:73:10:73:19 | this | AST only |
|
||||
| A.cpp:73:21:73:22 | b1 | AST only |
|
||||
| A.cpp:74:10:74:11 | b1 | AST only |
|
||||
| A.cpp:74:14:74:14 | c | AST only |
|
||||
| A.cpp:75:10:75:11 | b2 | AST only |
|
||||
| A.cpp:75:14:75:14 | c | AST only |
|
||||
| A.cpp:81:10:81:15 | this | AST only |
|
||||
| A.cpp:81:17:81:18 | b1 | AST only |
|
||||
| A.cpp:81:21:81:21 | c | AST only |
|
||||
| A.cpp:82:12:82:12 | this | AST only |
|
||||
| A.cpp:87:9:87:9 | this | AST only |
|
||||
| A.cpp:90:7:90:8 | b2 | AST only |
|
||||
| A.cpp:90:15:90:15 | c | AST only |
|
||||
| A.cpp:100:9:100:9 | a | AST only |
|
||||
| A.cpp:101:5:101:6 | this | AST only |
|
||||
| A.cpp:101:8:101:9 | c1 | AST only |
|
||||
| A.cpp:107:12:107:13 | c1 | AST only |
|
||||
| A.cpp:107:16:107:16 | a | AST only |
|
||||
| A.cpp:120:12:120:13 | c1 | AST only |
|
||||
| A.cpp:120:16:120:16 | a | AST only |
|
||||
| A.cpp:126:5:126:5 | b | AST only |
|
||||
| A.cpp:131:5:131:6 | this | AST only |
|
||||
| A.cpp:131:8:131:8 | b | AST only |
|
||||
| A.cpp:132:10:132:10 | b | AST only |
|
||||
| A.cpp:132:13:132:13 | c | AST only |
|
||||
| A.cpp:142:10:142:10 | c | AST only |
|
||||
| A.cpp:143:13:143:13 | b | AST only |
|
||||
| A.cpp:151:18:151:18 | b | AST only |
|
||||
| A.cpp:151:21:151:21 | this | AST only |
|
||||
| A.cpp:152:10:152:10 | d | AST only |
|
||||
| A.cpp:152:13:152:13 | b | AST only |
|
||||
| A.cpp:153:10:153:10 | d | AST only |
|
||||
@@ -116,6 +124,7 @@
|
||||
| D.cpp:58:5:58:12 | this | AST only |
|
||||
| D.cpp:58:15:58:17 | box | AST only |
|
||||
| D.cpp:58:20:58:23 | elem | AST only |
|
||||
| D.cpp:59:5:59:7 | this | AST only |
|
||||
| D.cpp:64:10:64:17 | boxfield | AST only |
|
||||
| D.cpp:64:10:64:17 | this | AST only |
|
||||
| D.cpp:64:20:64:22 | box | AST only |
|
||||
@@ -256,16 +265,6 @@
|
||||
| constructors.cpp:43:9:43:9 | g | AST only |
|
||||
| constructors.cpp:46:9:46:9 | h | AST only |
|
||||
| constructors.cpp:49:9:49:9 | i | AST only |
|
||||
| file://:0:0:0:0 | this | AST only |
|
||||
| file://:0:0:0:0 | this | AST only |
|
||||
| file://:0:0:0:0 | this | AST only |
|
||||
| file://:0:0:0:0 | this | AST only |
|
||||
| file://:0:0:0:0 | this | AST only |
|
||||
| file://:0:0:0:0 | this | AST only |
|
||||
| file://:0:0:0:0 | this | AST only |
|
||||
| file://:0:0:0:0 | this | AST only |
|
||||
| file://:0:0:0:0 | this | AST only |
|
||||
| file://:0:0:0:0 | this | AST only |
|
||||
| qualifiers.cpp:9:36:9:36 | a | AST only |
|
||||
| qualifiers.cpp:12:56:12:56 | a | AST only |
|
||||
| qualifiers.cpp:13:57:13:57 | a | AST only |
|
||||
@@ -320,6 +319,7 @@
|
||||
| simple.cpp:65:7:65:7 | i | AST only |
|
||||
| simple.cpp:83:9:83:10 | this | AST only |
|
||||
| simple.cpp:83:12:83:13 | f1 | AST only |
|
||||
| simple.cpp:84:14:84:20 | this | AST only |
|
||||
| struct_init.c:15:8:15:9 | ab | AST only |
|
||||
| struct_init.c:15:12:15:12 | a | AST only |
|
||||
| struct_init.c:16:8:16:9 | ab | AST only |
|
||||
|
||||
@@ -3,11 +3,17 @@
|
||||
| A.cpp:100:5:100:6 | c1 |
|
||||
| A.cpp:142:7:142:7 | b |
|
||||
| A.cpp:143:7:143:10 | this |
|
||||
| A.cpp:183:7:183:10 | this |
|
||||
| A.cpp:184:7:184:10 | this |
|
||||
| B.cpp:35:7:35:10 | this |
|
||||
| B.cpp:36:7:36:10 | this |
|
||||
| B.cpp:46:7:46:10 | this |
|
||||
| C.cpp:24:5:24:8 | this |
|
||||
| D.cpp:9:21:9:24 | this |
|
||||
| D.cpp:11:29:11:32 | this |
|
||||
| D.cpp:16:21:16:23 | this |
|
||||
| D.cpp:18:29:18:31 | this |
|
||||
| D.cpp:57:5:57:12 | this |
|
||||
| aliasing.cpp:9:3:9:3 | s |
|
||||
| aliasing.cpp:13:3:13:3 | s |
|
||||
| aliasing.cpp:17:3:17:3 | s |
|
||||
@@ -24,20 +30,14 @@
|
||||
| by_reference.cpp:16:5:16:8 | this |
|
||||
| by_reference.cpp:84:3:84:7 | inner |
|
||||
| by_reference.cpp:88:3:88:7 | inner |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| complex.cpp:11:22:11:23 | this |
|
||||
| complex.cpp:12:22:12:23 | this |
|
||||
| constructors.cpp:20:24:20:25 | this |
|
||||
| constructors.cpp:21:24:21:25 | this |
|
||||
| qualifiers.cpp:9:30:9:33 | this |
|
||||
| qualifiers.cpp:12:49:12:53 | inner |
|
||||
| qualifiers.cpp:13:51:13:55 | inner |
|
||||
| simple.cpp:20:24:20:25 | this |
|
||||
| simple.cpp:21:24:21:25 | this |
|
||||
| simple.cpp:65:5:65:5 | a |
|
||||
| simple.cpp:83:9:83:10 | f2 |
|
||||
|
||||
@@ -14,28 +14,35 @@
|
||||
| A.cpp:56:10:56:10 | b |
|
||||
| A.cpp:56:13:56:15 | call to get |
|
||||
| A.cpp:57:28:57:30 | call to get |
|
||||
| A.cpp:64:10:64:15 | this |
|
||||
| A.cpp:64:17:64:18 | b1 |
|
||||
| A.cpp:65:10:65:11 | b1 |
|
||||
| A.cpp:65:14:65:14 | c |
|
||||
| A.cpp:66:10:66:11 | b2 |
|
||||
| A.cpp:66:14:66:14 | c |
|
||||
| A.cpp:73:10:73:19 | this |
|
||||
| A.cpp:73:21:73:22 | b1 |
|
||||
| A.cpp:74:10:74:11 | b1 |
|
||||
| A.cpp:74:14:74:14 | c |
|
||||
| A.cpp:75:10:75:11 | b2 |
|
||||
| A.cpp:75:14:75:14 | c |
|
||||
| A.cpp:81:10:81:15 | this |
|
||||
| A.cpp:81:17:81:18 | b1 |
|
||||
| A.cpp:81:21:81:21 | c |
|
||||
| A.cpp:82:12:82:12 | this |
|
||||
| A.cpp:87:9:87:9 | this |
|
||||
| A.cpp:90:7:90:8 | b2 |
|
||||
| A.cpp:90:15:90:15 | c |
|
||||
| A.cpp:100:5:100:6 | c1 |
|
||||
| A.cpp:100:9:100:9 | a |
|
||||
| A.cpp:101:5:101:6 | this |
|
||||
| A.cpp:101:8:101:9 | c1 |
|
||||
| A.cpp:107:12:107:13 | c1 |
|
||||
| A.cpp:107:16:107:16 | a |
|
||||
| A.cpp:120:12:120:13 | c1 |
|
||||
| A.cpp:120:16:120:16 | a |
|
||||
| A.cpp:126:5:126:5 | b |
|
||||
| A.cpp:131:5:131:6 | this |
|
||||
| A.cpp:131:8:131:8 | b |
|
||||
| A.cpp:132:10:132:10 | b |
|
||||
| A.cpp:132:13:132:13 | c |
|
||||
@@ -44,6 +51,7 @@
|
||||
| A.cpp:143:7:143:10 | this |
|
||||
| A.cpp:143:13:143:13 | b |
|
||||
| A.cpp:151:18:151:18 | b |
|
||||
| A.cpp:151:21:151:21 | this |
|
||||
| A.cpp:152:10:152:10 | d |
|
||||
| A.cpp:152:13:152:13 | b |
|
||||
| A.cpp:153:10:153:10 | d |
|
||||
@@ -71,6 +79,7 @@
|
||||
| A.cpp:169:12:169:12 | l |
|
||||
| A.cpp:169:15:169:18 | head |
|
||||
| A.cpp:183:7:183:10 | head |
|
||||
| A.cpp:183:7:183:10 | this |
|
||||
| A.cpp:184:7:184:10 | this |
|
||||
| A.cpp:184:13:184:16 | next |
|
||||
| B.cpp:7:25:7:25 | e |
|
||||
@@ -99,9 +108,13 @@
|
||||
| C.cpp:24:5:24:8 | this |
|
||||
| C.cpp:24:11:24:12 | s3 |
|
||||
| D.cpp:9:21:9:24 | elem |
|
||||
| D.cpp:9:21:9:24 | this |
|
||||
| D.cpp:11:29:11:32 | elem |
|
||||
| D.cpp:11:29:11:32 | this |
|
||||
| D.cpp:16:21:16:23 | box |
|
||||
| D.cpp:16:21:16:23 | this |
|
||||
| D.cpp:18:29:18:31 | box |
|
||||
| D.cpp:18:29:18:31 | this |
|
||||
| D.cpp:22:10:22:11 | b2 |
|
||||
| D.cpp:22:14:22:20 | call to getBox1 |
|
||||
| D.cpp:22:25:22:31 | call to getElem |
|
||||
@@ -122,10 +135,14 @@
|
||||
| D.cpp:51:27:51:27 | e |
|
||||
| D.cpp:52:14:52:14 | b |
|
||||
| D.cpp:57:5:57:12 | boxfield |
|
||||
| D.cpp:57:5:57:12 | this |
|
||||
| D.cpp:58:5:58:12 | boxfield |
|
||||
| D.cpp:58:5:58:12 | this |
|
||||
| D.cpp:58:15:58:17 | box |
|
||||
| D.cpp:58:20:58:23 | elem |
|
||||
| D.cpp:59:5:59:7 | this |
|
||||
| D.cpp:64:10:64:17 | boxfield |
|
||||
| D.cpp:64:10:64:17 | this |
|
||||
| D.cpp:64:20:64:22 | box |
|
||||
| D.cpp:64:25:64:28 | elem |
|
||||
| E.cpp:21:10:21:10 | p |
|
||||
@@ -249,7 +266,9 @@
|
||||
| by_reference.cpp:136:8:136:13 | pouter |
|
||||
| by_reference.cpp:136:16:136:16 | a |
|
||||
| complex.cpp:11:22:11:23 | a_ |
|
||||
| complex.cpp:11:22:11:23 | this |
|
||||
| complex.cpp:12:22:12:23 | b_ |
|
||||
| complex.cpp:12:22:12:23 | this |
|
||||
| complex.cpp:51:8:51:8 | b |
|
||||
| complex.cpp:51:10:51:14 | inner |
|
||||
| complex.cpp:51:16:51:16 | f |
|
||||
@@ -273,38 +292,15 @@
|
||||
| complex.cpp:74:7:74:8 | b3 |
|
||||
| complex.cpp:77:7:77:8 | b4 |
|
||||
| constructors.cpp:20:24:20:25 | a_ |
|
||||
| constructors.cpp:20:24:20:25 | this |
|
||||
| constructors.cpp:21:24:21:25 | b_ |
|
||||
| constructors.cpp:21:24:21:25 | this |
|
||||
| constructors.cpp:28:10:28:10 | f |
|
||||
| constructors.cpp:29:10:29:10 | f |
|
||||
| constructors.cpp:40:9:40:9 | f |
|
||||
| constructors.cpp:43:9:43:9 | g |
|
||||
| constructors.cpp:46:9:46:9 | h |
|
||||
| constructors.cpp:49:9:49:9 | i |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| qualifiers.cpp:9:30:9:33 | this |
|
||||
| qualifiers.cpp:9:36:9:36 | a |
|
||||
| qualifiers.cpp:12:49:12:53 | inner |
|
||||
@@ -348,7 +344,9 @@
|
||||
| qualifiers.cpp:48:16:48:20 | inner |
|
||||
| qualifiers.cpp:48:23:48:23 | a |
|
||||
| simple.cpp:20:24:20:25 | a_ |
|
||||
| simple.cpp:20:24:20:25 | this |
|
||||
| simple.cpp:21:24:21:25 | b_ |
|
||||
| simple.cpp:21:24:21:25 | this |
|
||||
| simple.cpp:28:10:28:10 | f |
|
||||
| simple.cpp:29:10:29:10 | f |
|
||||
| simple.cpp:39:5:39:5 | f |
|
||||
@@ -362,7 +360,9 @@
|
||||
| simple.cpp:65:5:65:5 | a |
|
||||
| simple.cpp:65:7:65:7 | i |
|
||||
| simple.cpp:83:9:83:10 | f2 |
|
||||
| simple.cpp:83:9:83:10 | this |
|
||||
| simple.cpp:83:12:83:13 | f1 |
|
||||
| simple.cpp:84:14:84:20 | this |
|
||||
| struct_init.c:15:8:15:9 | ab |
|
||||
| struct_init.c:15:12:15:12 | a |
|
||||
| struct_init.c:16:8:16:9 | ab |
|
||||
|
||||
@@ -4,5 +4,5 @@
|
||||
| partialdefinitions.cpp:15:4:15:4 | partial def of y | partialdefinitions.cpp:15:4:15:4 | y | partialdefinitions.cpp:15:2:15:10 | ... = ... |
|
||||
| partialdefinitions.cpp:15:6:15:6 | partial def of z | partialdefinitions.cpp:15:6:15:6 | z | partialdefinitions.cpp:15:2:15:10 | ... = ... |
|
||||
| partialdefinitions.cpp:22:29:22:32 | partial def of data | partialdefinitions.cpp:22:29:22:32 | data | partialdefinitions.cpp:22:29:22:40 | ... = ... |
|
||||
| partialdefinitions.cpp:22:29:22:32 | partial def of this | file://:0:0:0:0 | this | partialdefinitions.cpp:22:29:22:40 | ... = ... |
|
||||
| partialdefinitions.cpp:22:29:22:32 | partial def of this | partialdefinitions.cpp:22:29:22:32 | this | partialdefinitions.cpp:22:29:22:40 | ... = ... |
|
||||
| partialdefinitions.cpp:27:3:27:7 | partial def of myInt | partialdefinitions.cpp:27:3:27:7 | myInt | partialdefinitions.cpp:27:9:27:15 | call to setData |
|
||||
|
||||
@@ -136,3 +136,24 @@ void test1()
|
||||
sink(buffer); // tainted [NOT DETECTED]
|
||||
}
|
||||
}
|
||||
|
||||
// ----------
|
||||
|
||||
size_t strlen(const char *s);
|
||||
size_t wcslen(const wchar_t *s);
|
||||
|
||||
void test2()
|
||||
{
|
||||
char *s = string::source();
|
||||
wchar_t *ws = wstring::source();
|
||||
int i;
|
||||
|
||||
sink(strlen(s));
|
||||
sink(wcslen(ws));
|
||||
|
||||
i = strlen(s) + 1;
|
||||
sink(i);
|
||||
|
||||
sink(s[strlen(s) - 1]); // tainted
|
||||
sink(ws + (wcslen(ws) / 2)); // tainted
|
||||
}
|
||||
|
||||
@@ -111,6 +111,26 @@
|
||||
| format.cpp:135:39:135:45 | ref arg & ... | format.cpp:135:40:135:45 | buffer [inner post update] | |
|
||||
| format.cpp:135:39:135:45 | ref arg & ... | format.cpp:136:8:136:13 | buffer | |
|
||||
| format.cpp:135:40:135:45 | buffer | format.cpp:135:39:135:45 | & ... | |
|
||||
| format.cpp:147:12:147:25 | call to source | format.cpp:151:14:151:14 | s | |
|
||||
| format.cpp:147:12:147:25 | call to source | format.cpp:154:13:154:13 | s | |
|
||||
| format.cpp:147:12:147:25 | call to source | format.cpp:157:7:157:7 | s | |
|
||||
| format.cpp:147:12:147:25 | call to source | format.cpp:157:16:157:16 | s | |
|
||||
| format.cpp:148:16:148:30 | call to source | format.cpp:152:14:152:15 | ws | |
|
||||
| format.cpp:148:16:148:30 | call to source | format.cpp:158:7:158:8 | ws | |
|
||||
| format.cpp:148:16:148:30 | call to source | format.cpp:158:20:158:21 | ws | |
|
||||
| format.cpp:154:6:154:11 | call to strlen | format.cpp:154:6:154:18 | ... + ... | TAINT |
|
||||
| format.cpp:154:6:154:18 | ... + ... | format.cpp:154:2:154:18 | ... = ... | |
|
||||
| format.cpp:154:6:154:18 | ... + ... | format.cpp:155:7:155:7 | i | |
|
||||
| format.cpp:154:18:154:18 | 1 | format.cpp:154:6:154:18 | ... + ... | TAINT |
|
||||
| format.cpp:157:7:157:7 | s | format.cpp:157:7:157:22 | access to array | TAINT |
|
||||
| format.cpp:157:9:157:14 | call to strlen | format.cpp:157:9:157:21 | ... - ... | TAINT |
|
||||
| format.cpp:157:9:157:21 | ... - ... | format.cpp:157:7:157:22 | access to array | TAINT |
|
||||
| format.cpp:157:21:157:21 | 1 | format.cpp:157:9:157:21 | ... - ... | TAINT |
|
||||
| format.cpp:158:7:158:8 | ws | format.cpp:158:7:158:27 | ... + ... | TAINT |
|
||||
| format.cpp:158:7:158:27 | ref arg ... + ... | format.cpp:158:7:158:8 | ws [inner post update] | |
|
||||
| format.cpp:158:13:158:18 | call to wcslen | format.cpp:158:13:158:26 | ... / ... | TAINT |
|
||||
| format.cpp:158:13:158:26 | ... / ... | format.cpp:158:7:158:27 | ... + ... | TAINT |
|
||||
| format.cpp:158:26:158:26 | 2 | format.cpp:158:13:158:26 | ... / ... | TAINT |
|
||||
| stl.cpp:67:12:67:17 | call to source | stl.cpp:71:7:71:7 | a | |
|
||||
| stl.cpp:68:16:68:20 | 123 | stl.cpp:68:16:68:21 | call to basic_string | TAINT |
|
||||
| stl.cpp:68:16:68:21 | call to basic_string | stl.cpp:72:7:72:7 | b | |
|
||||
@@ -367,7 +387,7 @@
|
||||
| taint.cpp:228:11:228:11 | this | taint.cpp:228:11:228:11 | constructor init of field t [pre-this] | |
|
||||
| taint.cpp:228:17:228:17 | this | taint.cpp:229:3:229:6 | this | |
|
||||
| taint.cpp:229:3:229:6 | this | taint.cpp:230:3:230:6 | this | |
|
||||
| taint.cpp:230:3:230:6 | this | taint.cpp:231:3:231:11 | this | |
|
||||
| taint.cpp:230:3:230:6 | this | file://:0:0:0:0 | this | |
|
||||
| taint.cpp:235:10:239:2 | [...](...){...} | taint.cpp:240:2:240:2 | b | |
|
||||
| taint.cpp:235:10:239:2 | {...} | taint.cpp:235:10:239:2 | [...](...){...} | |
|
||||
| taint.cpp:235:11:235:11 | Unknown literal | taint.cpp:235:11:235:11 | constructor init of field t | TAINT |
|
||||
|
||||
@@ -8,6 +8,8 @@
|
||||
| format.cpp:100:8:100:13 | buffer | format.cpp:99:30:99:43 | call to source |
|
||||
| format.cpp:105:8:105:13 | buffer | format.cpp:104:31:104:45 | call to source |
|
||||
| format.cpp:110:8:110:14 | wbuffer | format.cpp:109:38:109:52 | call to source |
|
||||
| format.cpp:157:7:157:22 | access to array | format.cpp:147:12:147:25 | call to source |
|
||||
| format.cpp:158:7:158:27 | ... + ... | format.cpp:148:16:148:30 | call to source |
|
||||
| stl.cpp:71:7:71:7 | a | stl.cpp:67:12:67:17 | call to source |
|
||||
| stl.cpp:73:7:73:7 | c | stl.cpp:69:16:69:21 | call to source |
|
||||
| stl.cpp:75:9:75:13 | call to c_str | stl.cpp:69:16:69:21 | call to source |
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
| format.cpp:157:7:157:22 | (int)... | format.cpp:147:12:147:25 | call to source |
|
||||
| format.cpp:157:7:157:22 | access to array | format.cpp:147:12:147:25 | call to source |
|
||||
| format.cpp:158:7:158:27 | ... + ... | format.cpp:148:16:148:30 | call to source |
|
||||
| stl.cpp:71:7:71:7 | (const char *)... | stl.cpp:67:12:67:17 | call to source |
|
||||
| stl.cpp:71:7:71:7 | a | stl.cpp:67:12:67:17 | call to source |
|
||||
| taint.cpp:8:8:8:13 | clean1 | taint.cpp:4:27:4:33 | source1 |
|
||||
|
||||
@@ -11,8 +11,11 @@
|
||||
| addressOf.cpp:38:20:38:20 | i | non-const address |
|
||||
| addressOf.cpp:40:15:40:15 | i | non-const address |
|
||||
| addressOf.cpp:42:19:42:22 | iref | non-const address |
|
||||
| addressOf.cpp:47:12:47:31 | captured | non-const address |
|
||||
| addressOf.cpp:47:19:47:28 | captured | |
|
||||
| addressOf.cpp:48:3:48:4 | f1 | const address |
|
||||
| addressOf.cpp:49:15:49:22 | captured | non-const address |
|
||||
| addressOf.cpp:49:27:49:36 | captured | |
|
||||
| addressOf.cpp:50:3:50:4 | f2 | const address |
|
||||
| addressOf.cpp:51:10:51:17 | captured | |
|
||||
| addressOf.cpp:56:16:56:16 | i | |
|
||||
@@ -29,9 +32,6 @@
|
||||
| addressOf.cpp:71:32:71:34 | obj | |
|
||||
| addressOf.cpp:77:27:77:27 | x | non-const address |
|
||||
| addressOf.cpp:77:48:77:48 | x | |
|
||||
| file://:0:0:0:0 | captured | |
|
||||
| file://:0:0:0:0 | captured | |
|
||||
| file://:0:0:0:0 | captured | non-const address |
|
||||
| indirect_use.cpp:17:32:17:43 | globalIntPtr | non-const address |
|
||||
| indirect_use.cpp:20:14:20:15 | ip | |
|
||||
| indirect_use.cpp:21:17:21:17 | p | |
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
| addressOf.cpp:31:23:31:23 | i | addressOf.cpp:32:19:32:19 | i |
|
||||
| addressOf.cpp:46:17:46:24 | captured | file://:0:0:0:0 | captured |
|
||||
| addressOf.cpp:46:17:46:24 | captured | addressOf.cpp:47:12:47:31 | captured |
|
||||
| addressOf.cpp:55:17:55:17 | i | addressOf.cpp:56:16:56:16 | i |
|
||||
| addressOf.cpp:55:17:55:17 | i | addressOf.cpp:56:19:56:19 | i |
|
||||
| addressOf.cpp:55:17:55:17 | i | addressOf.cpp:56:24:56:24 | i |
|
||||
|
||||
@@ -10,9 +10,9 @@
|
||||
| addressOf.cpp:31:23:31:23 | i | addressOf.cpp:38:20:38:20 | i |
|
||||
| addressOf.cpp:31:23:31:23 | i | addressOf.cpp:40:15:40:15 | i |
|
||||
| addressOf.cpp:40:8:40:11 | iref | addressOf.cpp:42:19:42:22 | iref |
|
||||
| addressOf.cpp:46:17:46:24 | captured | addressOf.cpp:47:12:47:31 | captured |
|
||||
| addressOf.cpp:46:17:46:24 | captured | addressOf.cpp:49:15:49:22 | captured |
|
||||
| addressOf.cpp:46:17:46:24 | captured | addressOf.cpp:51:10:51:17 | captured |
|
||||
| addressOf.cpp:46:17:46:24 | captured | file://:0:0:0:0 | captured |
|
||||
| addressOf.cpp:47:8:47:9 | f1 | addressOf.cpp:48:3:48:4 | f1 |
|
||||
| addressOf.cpp:49:8:49:9 | f2 | addressOf.cpp:50:3:50:4 | f2 |
|
||||
| addressOf.cpp:55:17:55:17 | i | addressOf.cpp:56:16:56:16 | i |
|
||||
|
||||
@@ -86,9 +86,9 @@ bad_asts.cpp:
|
||||
# 10| 1: [PointerFieldAccess] x
|
||||
# 10| Type = [IntType] int
|
||||
# 10| ValueCategory = prvalue(load)
|
||||
#-----| -1: [ThisExpr] this
|
||||
#-----| Type = [PointerType] S *
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
# 10| -1: [ThisExpr] this
|
||||
# 10| Type = [PointerType] S *
|
||||
# 10| ValueCategory = prvalue(load)
|
||||
# 10| 1: [VariableAccess] y
|
||||
# 10| Type = [IntType] int
|
||||
# 10| ValueCategory = prvalue(load)
|
||||
@@ -111,9 +111,9 @@ bad_asts.cpp:
|
||||
# 10| 1: [PointerFieldAccess] x
|
||||
# 10| Type = [IntType] int
|
||||
# 10| ValueCategory = prvalue(load)
|
||||
#-----| -1: [ThisExpr] this
|
||||
#-----| Type = [PointerType] S *
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
# 10| -1: [ThisExpr] this
|
||||
# 10| Type = [PointerType] S *
|
||||
# 10| ValueCategory = prvalue(load)
|
||||
# 10| 1: [VariableAccess] y
|
||||
# 10| Type = [IntType] int
|
||||
# 10| ValueCategory = prvalue(load)
|
||||
@@ -219,9 +219,9 @@ bad_asts.cpp:
|
||||
# 33| 0: [VariableAccess] x
|
||||
# 33| Type = [IntType] int
|
||||
# 33| ValueCategory = lvalue
|
||||
#-----| 1: [ErrorExpr] <error expr>
|
||||
#-----| Type = [ErroneousType] error
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
# 33| 1: [ErrorExpr] <error expr>
|
||||
# 33| Type = [ErroneousType] error
|
||||
# 33| ValueCategory = prvalue(load)
|
||||
# 34| 3: [ReturnStmt] return ...
|
||||
clang.cpp:
|
||||
# 5| [TopLevelFunction] int* globalIntAddress()
|
||||
@@ -5621,9 +5621,9 @@ ir.cpp:
|
||||
# 645| 0: [PointerFieldAccess] m_a
|
||||
# 645| Type = [IntType] int
|
||||
# 645| ValueCategory = lvalue
|
||||
#-----| -1: [ThisExpr] this
|
||||
#-----| Type = [PointerType] C *
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
# 645| -1: [ThisExpr] this
|
||||
# 645| Type = [PointerType] C *
|
||||
# 645| ValueCategory = prvalue(load)
|
||||
# 645| 1: [Literal] 2
|
||||
# 645| Type = [IntType] int
|
||||
# 645| Value = [Literal] 2
|
||||
@@ -5673,9 +5673,9 @@ ir.cpp:
|
||||
# 649| 1: [PointerFieldAccess] m_a
|
||||
# 649| Type = [IntType] int
|
||||
# 649| ValueCategory = prvalue(load)
|
||||
#-----| -1: [ThisExpr] this
|
||||
#-----| Type = [PointerType] C *
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
# 649| -1: [ThisExpr] this
|
||||
# 649| Type = [PointerType] C *
|
||||
# 649| ValueCategory = prvalue(load)
|
||||
# 650| 7: [ReturnStmt] return ...
|
||||
# 652| [MemberFunction] void C::MethodCalls()
|
||||
# 652| params:
|
||||
@@ -5712,9 +5712,9 @@ ir.cpp:
|
||||
# 655| 0: [FunctionCall] call to InstanceMemberFunction
|
||||
# 655| Type = [IntType] int
|
||||
# 655| ValueCategory = prvalue
|
||||
#-----| -1: [ThisExpr] this
|
||||
#-----| Type = [PointerType] C *
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
# 655| -1: [ThisExpr] this
|
||||
# 655| Type = [PointerType] C *
|
||||
# 655| ValueCategory = prvalue(load)
|
||||
# 655| 0: [Literal] 2
|
||||
# 655| Type = [IntType] int
|
||||
# 655| Value = [Literal] 2
|
||||
@@ -6173,27 +6173,27 @@ ir.cpp:
|
||||
# 745| expr: [FunctionCall] call to operator=
|
||||
# 745| Type = [LValueReferenceType] String &
|
||||
# 745| ValueCategory = prvalue
|
||||
#-----| -1: [AddressOfExpr] & ...
|
||||
#-----| Type = [PointerType] String *
|
||||
#-----| ValueCategory = prvalue
|
||||
#-----| 0: [PointerFieldAccess] base_s
|
||||
#-----| Type = [Struct] String
|
||||
#-----| ValueCategory = lvalue
|
||||
#-----| -1: [ThisExpr] this
|
||||
#-----| Type = [PointerType] Base *
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
# 745| -1: [AddressOfExpr] & ...
|
||||
# 745| Type = [PointerType] String *
|
||||
# 745| ValueCategory = prvalue
|
||||
# 745| 0: [PointerFieldAccess] base_s
|
||||
# 745| Type = [Struct] String
|
||||
# 745| ValueCategory = lvalue
|
||||
# 745| -1: [ThisExpr] this
|
||||
# 745| Type = [PointerType] Base *
|
||||
# 745| ValueCategory = prvalue(load)
|
||||
#-----| 0: [ReferenceToExpr] (reference to)
|
||||
#-----| Type = [LValueReferenceType] const String &
|
||||
#-----| ValueCategory = prvalue
|
||||
#-----| expr: [ReferenceFieldAccess] base_s
|
||||
#-----| Type = [Struct] String
|
||||
#-----| ValueCategory = lvalue
|
||||
# 745| expr: [ReferenceFieldAccess] base_s
|
||||
# 745| Type = [Struct] String
|
||||
# 745| ValueCategory = lvalue
|
||||
#-----| -1: [ReferenceDereferenceExpr] (reference dereference)
|
||||
#-----| Type = [SpecifiedType] const Base
|
||||
#-----| ValueCategory = lvalue
|
||||
#-----| expr: [VariableAccess] p#0
|
||||
#-----| Type = [LValueReferenceType] const Base &
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
# 745| expr: [VariableAccess] p#0
|
||||
# 745| Type = [LValueReferenceType] const Base &
|
||||
# 745| ValueCategory = prvalue(load)
|
||||
#-----| 1: [ReturnStmt] return ...
|
||||
#-----| 0: [ReferenceToExpr] (reference to)
|
||||
#-----| Type = [LValueReferenceType] Base &
|
||||
@@ -6258,28 +6258,28 @@ ir.cpp:
|
||||
#-----| Conversion = [BaseClassConversion] base class conversion
|
||||
#-----| Type = [PointerType] Base *
|
||||
#-----| ValueCategory = prvalue
|
||||
#-----| expr: [ThisExpr] this
|
||||
#-----| Type = [PointerType] Middle *
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
# 754| expr: [ThisExpr] this
|
||||
# 754| Type = [PointerType] Middle *
|
||||
# 754| ValueCategory = prvalue(load)
|
||||
#-----| 0: [ReferenceToExpr] (reference to)
|
||||
#-----| Type = [LValueReferenceType] const Base &
|
||||
#-----| ValueCategory = prvalue
|
||||
#-----| expr: [PointerDereferenceExpr] * ...
|
||||
#-----| Type = [SpecifiedType] const Base
|
||||
#-----| ValueCategory = lvalue
|
||||
# 754| expr: [PointerDereferenceExpr] * ...
|
||||
# 754| Type = [SpecifiedType] const Base
|
||||
# 754| ValueCategory = lvalue
|
||||
#-----| 0: [CStyleCast] (const Base *)...
|
||||
#-----| Conversion = [BaseClassConversion] base class conversion
|
||||
#-----| Type = [PointerType] const Base *
|
||||
#-----| ValueCategory = prvalue
|
||||
#-----| expr: [AddressOfExpr] & ...
|
||||
#-----| Type = [PointerType] const Middle *
|
||||
#-----| ValueCategory = prvalue
|
||||
# 754| expr: [AddressOfExpr] & ...
|
||||
# 754| Type = [PointerType] const Middle *
|
||||
# 754| ValueCategory = prvalue
|
||||
#-----| 0: [ReferenceDereferenceExpr] (reference dereference)
|
||||
#-----| Type = [SpecifiedType] const Middle
|
||||
#-----| ValueCategory = lvalue
|
||||
#-----| expr: [VariableAccess] p#0
|
||||
#-----| Type = [LValueReferenceType] const Middle &
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
# 754| expr: [VariableAccess] p#0
|
||||
# 754| Type = [LValueReferenceType] const Middle &
|
||||
# 754| ValueCategory = prvalue(load)
|
||||
#-----| 1: [ExprStmt] ExprStmt
|
||||
#-----| 0: [ReferenceDereferenceExpr] (reference dereference)
|
||||
#-----| Type = [Struct] String
|
||||
@@ -6287,27 +6287,27 @@ ir.cpp:
|
||||
# 754| expr: [FunctionCall] call to operator=
|
||||
# 754| Type = [LValueReferenceType] String &
|
||||
# 754| ValueCategory = prvalue
|
||||
#-----| -1: [AddressOfExpr] & ...
|
||||
#-----| Type = [PointerType] String *
|
||||
#-----| ValueCategory = prvalue
|
||||
#-----| 0: [PointerFieldAccess] middle_s
|
||||
#-----| Type = [Struct] String
|
||||
#-----| ValueCategory = lvalue
|
||||
#-----| -1: [ThisExpr] this
|
||||
#-----| Type = [PointerType] Middle *
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
# 754| -1: [AddressOfExpr] & ...
|
||||
# 754| Type = [PointerType] String *
|
||||
# 754| ValueCategory = prvalue
|
||||
# 754| 0: [PointerFieldAccess] middle_s
|
||||
# 754| Type = [Struct] String
|
||||
# 754| ValueCategory = lvalue
|
||||
# 754| -1: [ThisExpr] this
|
||||
# 754| Type = [PointerType] Middle *
|
||||
# 754| ValueCategory = prvalue(load)
|
||||
#-----| 0: [ReferenceToExpr] (reference to)
|
||||
#-----| Type = [LValueReferenceType] const String &
|
||||
#-----| ValueCategory = prvalue
|
||||
#-----| expr: [ReferenceFieldAccess] middle_s
|
||||
#-----| Type = [Struct] String
|
||||
#-----| ValueCategory = lvalue
|
||||
# 754| expr: [ReferenceFieldAccess] middle_s
|
||||
# 754| Type = [Struct] String
|
||||
# 754| ValueCategory = lvalue
|
||||
#-----| -1: [ReferenceDereferenceExpr] (reference dereference)
|
||||
#-----| Type = [SpecifiedType] const Middle
|
||||
#-----| ValueCategory = lvalue
|
||||
#-----| expr: [VariableAccess] p#0
|
||||
#-----| Type = [LValueReferenceType] const Middle &
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
# 754| expr: [VariableAccess] p#0
|
||||
# 754| Type = [LValueReferenceType] const Middle &
|
||||
# 754| ValueCategory = prvalue(load)
|
||||
#-----| 2: [ReturnStmt] return ...
|
||||
#-----| 0: [ReferenceToExpr] (reference to)
|
||||
#-----| Type = [LValueReferenceType] Middle &
|
||||
@@ -6369,28 +6369,28 @@ ir.cpp:
|
||||
#-----| Conversion = [BaseClassConversion] base class conversion
|
||||
#-----| Type = [PointerType] Middle *
|
||||
#-----| ValueCategory = prvalue
|
||||
#-----| expr: [ThisExpr] this
|
||||
#-----| Type = [PointerType] Derived *
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
# 763| expr: [ThisExpr] this
|
||||
# 763| Type = [PointerType] Derived *
|
||||
# 763| ValueCategory = prvalue(load)
|
||||
#-----| 0: [ReferenceToExpr] (reference to)
|
||||
#-----| Type = [LValueReferenceType] const Middle &
|
||||
#-----| ValueCategory = prvalue
|
||||
#-----| expr: [PointerDereferenceExpr] * ...
|
||||
#-----| Type = [SpecifiedType] const Middle
|
||||
#-----| ValueCategory = lvalue
|
||||
# 763| expr: [PointerDereferenceExpr] * ...
|
||||
# 763| Type = [SpecifiedType] const Middle
|
||||
# 763| ValueCategory = lvalue
|
||||
#-----| 0: [CStyleCast] (const Middle *)...
|
||||
#-----| Conversion = [BaseClassConversion] base class conversion
|
||||
#-----| Type = [PointerType] const Middle *
|
||||
#-----| ValueCategory = prvalue
|
||||
#-----| expr: [AddressOfExpr] & ...
|
||||
#-----| Type = [PointerType] const Derived *
|
||||
#-----| ValueCategory = prvalue
|
||||
# 763| expr: [AddressOfExpr] & ...
|
||||
# 763| Type = [PointerType] const Derived *
|
||||
# 763| ValueCategory = prvalue
|
||||
#-----| 0: [ReferenceDereferenceExpr] (reference dereference)
|
||||
#-----| Type = [SpecifiedType] const Derived
|
||||
#-----| ValueCategory = lvalue
|
||||
#-----| expr: [VariableAccess] p#0
|
||||
#-----| Type = [LValueReferenceType] const Derived &
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
# 763| expr: [VariableAccess] p#0
|
||||
# 763| Type = [LValueReferenceType] const Derived &
|
||||
# 763| ValueCategory = prvalue(load)
|
||||
#-----| 1: [ExprStmt] ExprStmt
|
||||
#-----| 0: [ReferenceDereferenceExpr] (reference dereference)
|
||||
#-----| Type = [Struct] String
|
||||
@@ -6398,27 +6398,27 @@ ir.cpp:
|
||||
# 763| expr: [FunctionCall] call to operator=
|
||||
# 763| Type = [LValueReferenceType] String &
|
||||
# 763| ValueCategory = prvalue
|
||||
#-----| -1: [AddressOfExpr] & ...
|
||||
#-----| Type = [PointerType] String *
|
||||
#-----| ValueCategory = prvalue
|
||||
#-----| 0: [PointerFieldAccess] derived_s
|
||||
#-----| Type = [Struct] String
|
||||
#-----| ValueCategory = lvalue
|
||||
#-----| -1: [ThisExpr] this
|
||||
#-----| Type = [PointerType] Derived *
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
# 763| -1: [AddressOfExpr] & ...
|
||||
# 763| Type = [PointerType] String *
|
||||
# 763| ValueCategory = prvalue
|
||||
# 763| 0: [PointerFieldAccess] derived_s
|
||||
# 763| Type = [Struct] String
|
||||
# 763| ValueCategory = lvalue
|
||||
# 763| -1: [ThisExpr] this
|
||||
# 763| Type = [PointerType] Derived *
|
||||
# 763| ValueCategory = prvalue(load)
|
||||
#-----| 0: [ReferenceToExpr] (reference to)
|
||||
#-----| Type = [LValueReferenceType] const String &
|
||||
#-----| ValueCategory = prvalue
|
||||
#-----| expr: [ReferenceFieldAccess] derived_s
|
||||
#-----| Type = [Struct] String
|
||||
#-----| ValueCategory = lvalue
|
||||
# 763| expr: [ReferenceFieldAccess] derived_s
|
||||
# 763| Type = [Struct] String
|
||||
# 763| ValueCategory = lvalue
|
||||
#-----| -1: [ReferenceDereferenceExpr] (reference dereference)
|
||||
#-----| Type = [SpecifiedType] const Derived
|
||||
#-----| ValueCategory = lvalue
|
||||
#-----| expr: [VariableAccess] p#0
|
||||
#-----| Type = [LValueReferenceType] const Derived &
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
# 763| expr: [VariableAccess] p#0
|
||||
# 763| Type = [LValueReferenceType] const Derived &
|
||||
# 763| ValueCategory = prvalue(load)
|
||||
#-----| 2: [ReturnStmt] return ...
|
||||
#-----| 0: [ReferenceToExpr] (reference to)
|
||||
#-----| Type = [LValueReferenceType] Derived &
|
||||
@@ -8533,15 +8533,15 @@ ir.cpp:
|
||||
# 1043| expr: [ReferenceDereferenceExpr] (reference dereference)
|
||||
# 1043| Type = [SpecifiedType] const String
|
||||
# 1043| ValueCategory = lvalue
|
||||
#-----| expr: [VariableAccess] s
|
||||
#-----| Type = [LValueReferenceType] const String &
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
# 1043| expr: [VariableAccess] s
|
||||
# 1043| Type = [LValueReferenceType] const String &
|
||||
# 1043| ValueCategory = prvalue(load)
|
||||
#-----| .x: [ReferenceToExpr] (reference to)
|
||||
#-----| Type = [LValueReferenceType] int &
|
||||
#-----| ValueCategory = prvalue
|
||||
#-----| expr: [VariableAccess] x
|
||||
#-----| Type = [IntType] int
|
||||
#-----| ValueCategory = lvalue
|
||||
# 1043| expr: [VariableAccess] x
|
||||
# 1043| Type = [IntType] int
|
||||
# 1043| ValueCategory = lvalue
|
||||
# 1044| 3: [ExprStmt] ExprStmt
|
||||
# 1044| 0: [FunctionCall] call to operator()
|
||||
# 1044| Type = [PlainCharType] char
|
||||
@@ -8572,12 +8572,12 @@ ir.cpp:
|
||||
# 1045| 0: [ClassAggregateLiteral] {...}
|
||||
# 1045| Type = [Closure,LocalClass] decltype([...](...){...})
|
||||
# 1045| ValueCategory = prvalue
|
||||
#-----| .s: [ConstructorCall] call to String
|
||||
#-----| Type = [VoidType] void
|
||||
#-----| ValueCategory = prvalue
|
||||
#-----| .x: [VariableAccess] x
|
||||
#-----| Type = [IntType] int
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
# 1045| .s: [ConstructorCall] call to String
|
||||
# 1045| Type = [VoidType] void
|
||||
# 1045| ValueCategory = prvalue
|
||||
# 1045| .x: [VariableAccess] x
|
||||
# 1045| Type = [IntType] int
|
||||
# 1045| ValueCategory = prvalue(load)
|
||||
# 1046| 5: [ExprStmt] ExprStmt
|
||||
# 1046| 0: [FunctionCall] call to operator()
|
||||
# 1046| Type = [PlainCharType] char
|
||||
@@ -8647,9 +8647,9 @@ ir.cpp:
|
||||
# 1049| 0: [ClassAggregateLiteral] {...}
|
||||
# 1049| Type = [Closure,LocalClass] decltype([...](...){...})
|
||||
# 1049| ValueCategory = prvalue
|
||||
#-----| .s: [ConstructorCall] call to String
|
||||
#-----| Type = [VoidType] void
|
||||
#-----| ValueCategory = prvalue
|
||||
# 1049| .s: [ConstructorCall] call to String
|
||||
# 1049| Type = [VoidType] void
|
||||
# 1049| ValueCategory = prvalue
|
||||
# 1050| 9: [ExprStmt] ExprStmt
|
||||
# 1050| 0: [FunctionCall] call to operator()
|
||||
# 1050| Type = [PlainCharType] char
|
||||
@@ -8849,21 +8849,21 @@ ir.cpp:
|
||||
# 1043| -1: [ReferenceDereferenceExpr] (reference dereference)
|
||||
# 1043| Type = [SpecifiedType] const String
|
||||
# 1043| ValueCategory = lvalue
|
||||
#-----| expr: [PointerFieldAccess] s
|
||||
#-----| Type = [LValueReferenceType] const String &
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
#-----| -1: [ThisExpr] this
|
||||
#-----| Type = [PointerType] const lambda [] type at line 1043, col. 21 *
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
# 1043| expr: [PointerFieldAccess] s
|
||||
# 1043| Type = [LValueReferenceType] const String &
|
||||
# 1043| ValueCategory = prvalue(load)
|
||||
# 1043| -1: [ThisExpr] this
|
||||
# 1043| Type = [PointerType] const lambda [] type at line 1043, col. 21 *
|
||||
# 1043| ValueCategory = prvalue(load)
|
||||
# 1043| 1: [ReferenceDereferenceExpr] (reference dereference)
|
||||
# 1043| Type = [IntType] int
|
||||
# 1043| ValueCategory = prvalue(load)
|
||||
#-----| expr: [PointerFieldAccess] x
|
||||
#-----| Type = [LValueReferenceType] int &
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
#-----| -1: [ThisExpr] this
|
||||
#-----| Type = [PointerType] const lambda [] type at line 1043, col. 21 *
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
# 1043| expr: [PointerFieldAccess] x
|
||||
# 1043| Type = [LValueReferenceType] int &
|
||||
# 1043| ValueCategory = prvalue(load)
|
||||
# 1043| -1: [ThisExpr] this
|
||||
# 1043| Type = [PointerType] const lambda [] type at line 1043, col. 21 *
|
||||
# 1043| ValueCategory = prvalue(load)
|
||||
# 1045| [CopyAssignmentOperator] (void Lambda(int, String const&))::(lambda [] type at line 1045, col. 21)& (void Lambda(int, String const&))::(lambda [] type at line 1045, col. 21)::operator=((void Lambda(int, String const&))::(lambda [] type at line 1045, col. 21) const&)
|
||||
# 1045| params:
|
||||
#-----| 0: [Parameter] p#0
|
||||
@@ -8904,18 +8904,18 @@ ir.cpp:
|
||||
# 1045| 0: [FunctionCall] call to c_str
|
||||
# 1045| Type = [PointerType] const char *
|
||||
# 1045| ValueCategory = prvalue
|
||||
#-----| -1: [PointerFieldAccess] s
|
||||
#-----| Type = [SpecifiedType] const String
|
||||
#-----| ValueCategory = lvalue
|
||||
#-----| -1: [ThisExpr] this
|
||||
#-----| Type = [PointerType] const lambda [] type at line 1045, col. 21 *
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
#-----| 1: [PointerFieldAccess] x
|
||||
#-----| Type = [IntType] int
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
#-----| -1: [ThisExpr] this
|
||||
#-----| Type = [PointerType] const lambda [] type at line 1045, col. 21 *
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
# 1045| -1: [PointerFieldAccess] s
|
||||
# 1045| Type = [SpecifiedType] const String
|
||||
# 1045| ValueCategory = lvalue
|
||||
# 1045| -1: [ThisExpr] this
|
||||
# 1045| Type = [PointerType] const lambda [] type at line 1045, col. 21 *
|
||||
# 1045| ValueCategory = prvalue(load)
|
||||
# 1045| 1: [PointerFieldAccess] x
|
||||
# 1045| Type = [IntType] int
|
||||
# 1045| ValueCategory = prvalue(load)
|
||||
# 1045| -1: [ThisExpr] this
|
||||
# 1045| Type = [PointerType] const lambda [] type at line 1045, col. 21 *
|
||||
# 1045| ValueCategory = prvalue(load)
|
||||
# 1047| [CopyAssignmentOperator] (void Lambda(int, String const&))::(lambda [] type at line 1047, col. 30)& (void Lambda(int, String const&))::(lambda [] type at line 1047, col. 30)::operator=((void Lambda(int, String const&))::(lambda [] type at line 1047, col. 30) const&)
|
||||
# 1047| params:
|
||||
#-----| 0: [Parameter] p#0
|
||||
@@ -8945,12 +8945,12 @@ ir.cpp:
|
||||
# 1047| -1: [ReferenceDereferenceExpr] (reference dereference)
|
||||
# 1047| Type = [SpecifiedType] const String
|
||||
# 1047| ValueCategory = lvalue
|
||||
#-----| expr: [PointerFieldAccess] s
|
||||
#-----| Type = [LValueReferenceType] const String &
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
#-----| -1: [ThisExpr] this
|
||||
#-----| Type = [PointerType] const lambda [] type at line 1047, col. 30 *
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
# 1047| expr: [PointerFieldAccess] s
|
||||
# 1047| Type = [LValueReferenceType] const String &
|
||||
# 1047| ValueCategory = prvalue(load)
|
||||
# 1047| -1: [ThisExpr] this
|
||||
# 1047| Type = [PointerType] const lambda [] type at line 1047, col. 30 *
|
||||
# 1047| ValueCategory = prvalue(load)
|
||||
# 1047| 1: [Literal] 0
|
||||
# 1047| Type = [IntType] int
|
||||
# 1047| Value = [Literal] 0
|
||||
@@ -8995,12 +8995,12 @@ ir.cpp:
|
||||
# 1049| 0: [FunctionCall] call to c_str
|
||||
# 1049| Type = [PointerType] const char *
|
||||
# 1049| ValueCategory = prvalue
|
||||
#-----| -1: [PointerFieldAccess] s
|
||||
#-----| Type = [SpecifiedType] const String
|
||||
#-----| ValueCategory = lvalue
|
||||
#-----| -1: [ThisExpr] this
|
||||
#-----| Type = [PointerType] const lambda [] type at line 1049, col. 30 *
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
# 1049| -1: [PointerFieldAccess] s
|
||||
# 1049| Type = [SpecifiedType] const String
|
||||
# 1049| ValueCategory = lvalue
|
||||
# 1049| -1: [ThisExpr] this
|
||||
# 1049| Type = [PointerType] const lambda [] type at line 1049, col. 30 *
|
||||
# 1049| ValueCategory = prvalue(load)
|
||||
# 1049| 1: [Literal] 0
|
||||
# 1049| Type = [IntType] int
|
||||
# 1049| Value = [Literal] 0
|
||||
@@ -9034,18 +9034,18 @@ ir.cpp:
|
||||
# 1051| -1: [ReferenceDereferenceExpr] (reference dereference)
|
||||
# 1051| Type = [SpecifiedType] const String
|
||||
# 1051| ValueCategory = lvalue
|
||||
#-----| expr: [PointerFieldAccess] s
|
||||
#-----| Type = [LValueReferenceType] const String &
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
#-----| -1: [ThisExpr] this
|
||||
#-----| Type = [PointerType] const lambda [] type at line 1051, col. 32 *
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
#-----| 1: [PointerFieldAccess] x
|
||||
#-----| Type = [IntType] int
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
#-----| -1: [ThisExpr] this
|
||||
#-----| Type = [PointerType] const lambda [] type at line 1051, col. 32 *
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
# 1051| expr: [PointerFieldAccess] s
|
||||
# 1051| Type = [LValueReferenceType] const String &
|
||||
# 1051| ValueCategory = prvalue(load)
|
||||
# 1051| -1: [ThisExpr] this
|
||||
# 1051| Type = [PointerType] const lambda [] type at line 1051, col. 32 *
|
||||
# 1051| ValueCategory = prvalue(load)
|
||||
# 1051| 1: [PointerFieldAccess] x
|
||||
# 1051| Type = [IntType] int
|
||||
# 1051| ValueCategory = prvalue(load)
|
||||
# 1051| -1: [ThisExpr] this
|
||||
# 1051| Type = [PointerType] const lambda [] type at line 1051, col. 32 *
|
||||
# 1051| ValueCategory = prvalue(load)
|
||||
# 1054| [CopyAssignmentOperator] (void Lambda(int, String const&))::(lambda [] type at line 1054, col. 23)& (void Lambda(int, String const&))::(lambda [] type at line 1054, col. 23)::operator=((void Lambda(int, String const&))::(lambda [] type at line 1054, col. 23) const&)
|
||||
# 1054| params:
|
||||
#-----| 0: [Parameter] p#0
|
||||
@@ -9075,39 +9075,39 @@ ir.cpp:
|
||||
# 1054| -1: [ReferenceDereferenceExpr] (reference dereference)
|
||||
# 1054| Type = [SpecifiedType] const String
|
||||
# 1054| ValueCategory = lvalue
|
||||
#-----| expr: [PointerFieldAccess] s
|
||||
#-----| Type = [LValueReferenceType] const String &
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
#-----| -1: [ThisExpr] this
|
||||
#-----| Type = [PointerType] const lambda [] type at line 1054, col. 23 *
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
# 1054| expr: [PointerFieldAccess] s
|
||||
# 1054| Type = [LValueReferenceType] const String &
|
||||
# 1054| ValueCategory = prvalue(load)
|
||||
# 1054| -1: [ThisExpr] this
|
||||
# 1054| Type = [PointerType] const lambda [] type at line 1054, col. 23 *
|
||||
# 1054| ValueCategory = prvalue(load)
|
||||
# 1054| 1: [SubExpr] ... - ...
|
||||
# 1054| Type = [IntType] int
|
||||
# 1054| ValueCategory = prvalue
|
||||
# 1054| 0: [AddExpr] ... + ...
|
||||
# 1054| Type = [IntType] int
|
||||
# 1054| ValueCategory = prvalue
|
||||
#-----| 0: [PointerFieldAccess] x
|
||||
#-----| Type = [IntType] int
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
#-----| -1: [ThisExpr] this
|
||||
#-----| Type = [PointerType] const lambda [] type at line 1054, col. 23 *
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
# 1054| 0: [PointerFieldAccess] x
|
||||
# 1054| Type = [IntType] int
|
||||
# 1054| ValueCategory = prvalue(load)
|
||||
# 1054| -1: [ThisExpr] this
|
||||
# 1054| Type = [PointerType] const lambda [] type at line 1054, col. 23 *
|
||||
# 1054| ValueCategory = prvalue(load)
|
||||
# 1054| 1: [PointerFieldAccess] i
|
||||
# 1054| Type = [IntType] int
|
||||
# 1054| ValueCategory = prvalue(load)
|
||||
#-----| -1: [ThisExpr] this
|
||||
#-----| Type = [PointerType] const lambda [] type at line 1054, col. 23 *
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
# 1054| -1: [ThisExpr] this
|
||||
# 1054| Type = [PointerType] const lambda [] type at line 1054, col. 23 *
|
||||
# 1054| ValueCategory = prvalue(load)
|
||||
# 1054| 1: [ReferenceDereferenceExpr] (reference dereference)
|
||||
# 1054| Type = [IntType] int
|
||||
# 1054| ValueCategory = prvalue(load)
|
||||
# 1054| expr: [PointerFieldAccess] j
|
||||
# 1054| Type = [LValueReferenceType] int &
|
||||
# 1054| ValueCategory = prvalue(load)
|
||||
#-----| -1: [ThisExpr] this
|
||||
#-----| Type = [PointerType] const lambda [] type at line 1054, col. 23 *
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
# 1054| -1: [ThisExpr] this
|
||||
# 1054| Type = [PointerType] const lambda [] type at line 1054, col. 23 *
|
||||
# 1054| ValueCategory = prvalue(load)
|
||||
# 1059| [CopyAssignmentOperator] vector<int>& vector<int>::operator=(vector<int> const&)
|
||||
# 1059| params:
|
||||
#-----| 0: [Parameter] p#0
|
||||
@@ -9175,21 +9175,21 @@ ir.cpp:
|
||||
#-----| Conversion = [GlvalueConversion] glvalue conversion
|
||||
#-----| Type = [SpecifiedType] const iterator
|
||||
#-----| ValueCategory = lvalue
|
||||
#-----| expr: [VariableAccess] (__begin)
|
||||
#-----| Type = [NestedStruct] iterator
|
||||
#-----| ValueCategory = lvalue
|
||||
#-----| 0: [VariableAccess] (__end)
|
||||
#-----| Type = [NestedStruct] iterator
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
# 1078| expr: [VariableAccess] (__begin)
|
||||
# 1078| Type = [NestedStruct] iterator
|
||||
# 1078| ValueCategory = lvalue
|
||||
# 1078| 0: [VariableAccess] (__end)
|
||||
# 1078| Type = [NestedStruct] iterator
|
||||
# 1078| ValueCategory = prvalue(load)
|
||||
# 1078| 3: [ReferenceDereferenceExpr] (reference dereference)
|
||||
# 1078| Type = [NestedStruct] iterator
|
||||
# 1078| ValueCategory = lvalue
|
||||
# 1078| expr: [FunctionCall] call to operator++
|
||||
# 1078| Type = [LValueReferenceType] iterator &
|
||||
# 1078| ValueCategory = prvalue
|
||||
#-----| -1: [VariableAccess] (__begin)
|
||||
#-----| Type = [NestedStruct] iterator
|
||||
#-----| ValueCategory = lvalue
|
||||
# 1078| -1: [VariableAccess] (__begin)
|
||||
# 1078| Type = [NestedStruct] iterator
|
||||
# 1078| ValueCategory = lvalue
|
||||
# 1078| 4: [DeclStmt] declaration
|
||||
# 1078| 5: [Block] { ... }
|
||||
# 1079| 0: [IfStmt] if (...) ...
|
||||
@@ -9216,21 +9216,21 @@ ir.cpp:
|
||||
#-----| Conversion = [GlvalueConversion] glvalue conversion
|
||||
#-----| Type = [SpecifiedType] const iterator
|
||||
#-----| ValueCategory = lvalue
|
||||
#-----| expr: [VariableAccess] (__begin)
|
||||
#-----| Type = [NestedStruct] iterator
|
||||
#-----| ValueCategory = lvalue
|
||||
#-----| 0: [VariableAccess] (__end)
|
||||
#-----| Type = [NestedStruct] iterator
|
||||
#-----| ValueCategory = prvalue(load)
|
||||
# 1084| expr: [VariableAccess] (__begin)
|
||||
# 1084| Type = [NestedStruct] iterator
|
||||
# 1084| ValueCategory = lvalue
|
||||
# 1084| 0: [VariableAccess] (__end)
|
||||
# 1084| Type = [NestedStruct] iterator
|
||||
# 1084| ValueCategory = prvalue(load)
|
||||
# 1084| 3: [ReferenceDereferenceExpr] (reference dereference)
|
||||
# 1084| Type = [NestedStruct] iterator
|
||||
# 1084| ValueCategory = lvalue
|
||||
# 1084| expr: [FunctionCall] call to operator++
|
||||
# 1084| Type = [LValueReferenceType] iterator &
|
||||
# 1084| ValueCategory = prvalue
|
||||
#-----| -1: [VariableAccess] (__begin)
|
||||
#-----| Type = [NestedStruct] iterator
|
||||
#-----| ValueCategory = lvalue
|
||||
# 1084| -1: [VariableAccess] (__begin)
|
||||
# 1084| Type = [NestedStruct] iterator
|
||||
# 1084| ValueCategory = lvalue
|
||||
# 1084| 4: [DeclStmt] declaration
|
||||
# 1084| 5: [Block] { ... }
|
||||
# 1085| 0: [IfStmt] if (...) ...
|
||||
@@ -9535,10 +9535,10 @@ ir.cpp:
|
||||
# 1166| 1: [VariableAccess] vi4
|
||||
# 1166| Type = [SpecifiedType] __attribute((vector_size(16UL))) int
|
||||
# 1166| ValueCategory = prvalue(load)
|
||||
#-----| 2: [AddExpr] ... + ...
|
||||
#-----| Type = [IntType] int
|
||||
#-----| Value = [AddExpr] 3
|
||||
#-----| ValueCategory = prvalue
|
||||
# 1166| 2: [AddExpr] ... + ...
|
||||
# 1166| Type = [IntType] int
|
||||
# 1166| Value = [AddExpr] 3
|
||||
# 1166| ValueCategory = prvalue
|
||||
# 1166| 0: [Literal] 3
|
||||
# 1166| Type = [IntType] int
|
||||
# 1166| Value = [Literal] 3
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
multipleOperandMemoryLocations
|
||||
missingVirtualVariableForMemoryLocation
|
||||
multipleVirtualVariablesForMemoryLocation
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
multipleOperandMemoryLocations
|
||||
missingVirtualVariableForMemoryLocation
|
||||
multipleVirtualVariablesForMemoryLocation
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,2 +1,3 @@
|
||||
multipleOperandMemoryLocations
|
||||
missingVirtualVariableForMemoryLocation
|
||||
multipleVirtualVariablesForMemoryLocation
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
multipleOperandMemoryLocations
|
||||
missingVirtualVariableForMemoryLocation
|
||||
multipleVirtualVariablesForMemoryLocation
|
||||
|
||||
@@ -20,7 +20,6 @@ switchInstructionWithoutDefaultEdge
|
||||
notMarkedAsConflated
|
||||
wronglyMarkedAsConflated
|
||||
invalidOverlap
|
||||
| ssa.cpp:301:27:301:30 | SideEffect | MemoryOperand 'SideEffect' has a `getDefinitionOverlap()` of 'MayPartiallyOverlap'. | ssa.cpp:301:5:301:8 | IR: main | int main(int, char**) |
|
||||
missingCanonicalLanguageType
|
||||
multipleCanonicalLanguageTypes
|
||||
missingIRType
|
||||
|
||||
@@ -1446,7 +1446,7 @@ ssa.cpp:
|
||||
# 302| m302_8(unknown) = Chi : total:m301_4, partial:m302_7
|
||||
# 302| v302_9(void) = ^BufferReadSideEffect[1] : &:r302_5, ~m301_10
|
||||
# 302| m302_10(unknown) = ^BufferMayWriteSideEffect[1] : &:r302_5
|
||||
# 302| m302_11(char *) = Chi : total:m301_10, partial:m302_10
|
||||
# 302| m302_11(unknown) = Chi : total:m301_10, partial:m302_10
|
||||
# 303| r303_1(glval<unknown>) = FunctionAddress[unknownFunction] :
|
||||
# 303| r303_2(glval<int>) = VariableAddress[argc] :
|
||||
# 303| r303_3(int) = Load : &:r303_2, m301_6
|
||||
@@ -1457,7 +1457,7 @@ ssa.cpp:
|
||||
# 303| m303_8(unknown) = Chi : total:m302_8, partial:m303_7
|
||||
# 303| v303_9(void) = ^BufferReadSideEffect[1] : &:r303_5, ~m302_11
|
||||
# 303| m303_10(unknown) = ^BufferMayWriteSideEffect[1] : &:r303_5
|
||||
# 303| m303_11(char *) = Chi : total:m302_11, partial:m303_10
|
||||
# 303| m303_11(unknown) = Chi : total:m302_11, partial:m303_10
|
||||
# 304| r304_1(glval<int>) = VariableAddress[#return] :
|
||||
# 304| r304_2(glval<char **>) = VariableAddress[argv] :
|
||||
# 304| r304_3(char **) = Load : &:r304_2, m301_8
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
multipleOperandMemoryLocations
|
||||
missingVirtualVariableForMemoryLocation
|
||||
multipleVirtualVariablesForMemoryLocation
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
multipleOperandMemoryLocations
|
||||
missingVirtualVariableForMemoryLocation
|
||||
multipleVirtualVariablesForMemoryLocation
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
multipleOperandMemoryLocations
|
||||
missingVirtualVariableForMemoryLocation
|
||||
multipleVirtualVariablesForMemoryLocation
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
multipleOperandMemoryLocations
|
||||
missingVirtualVariableForMemoryLocation
|
||||
multipleVirtualVariablesForMemoryLocation
|
||||
|
||||
@@ -32,9 +32,13 @@
|
||||
| captures.cpp:3:15:3:15 | definition of operator() |
|
||||
| captures.cpp:3:15:3:15 | operator() |
|
||||
| captures.cpp:3:15:5:5 | { ... } |
|
||||
| captures.cpp:4:7:4:7 | (captured this) |
|
||||
| captures.cpp:4:7:4:7 | call to a |
|
||||
| captures.cpp:4:7:4:7 | this |
|
||||
| captures.cpp:4:7:4:15 | ExprStmt |
|
||||
| captures.cpp:4:9:4:13 | ... + ... |
|
||||
| captures.cpp:4:9:4:13 | this |
|
||||
| captures.cpp:4:9:4:13 | x |
|
||||
| captures.cpp:4:13:4:13 | 1 |
|
||||
| captures.cpp:5:5:5:5 | return ... |
|
||||
| captures.cpp:6:3:6:3 | return ... |
|
||||
@@ -52,6 +56,8 @@
|
||||
| captures.cpp:9:5:9:5 | definition of operator= |
|
||||
| captures.cpp:9:5:9:5 | operator= |
|
||||
| captures.cpp:9:5:11:5 | [...](...){...} |
|
||||
| captures.cpp:9:5:11:5 | this |
|
||||
| captures.cpp:9:5:11:5 | x |
|
||||
| captures.cpp:9:5:11:5 | {...} |
|
||||
| captures.cpp:9:5:11:6 | ExprStmt |
|
||||
| captures.cpp:9:9:9:9 | definition of operator() |
|
||||
@@ -59,13 +65,17 @@
|
||||
| captures.cpp:9:9:11:5 | { ... } |
|
||||
| captures.cpp:10:7:10:7 | (captured this) |
|
||||
| captures.cpp:10:7:10:7 | (captured this) |
|
||||
| captures.cpp:10:7:10:7 | (captured this) |
|
||||
| captures.cpp:10:7:10:7 | call to b |
|
||||
| captures.cpp:10:7:10:7 | definition of (captured this) |
|
||||
| captures.cpp:10:7:10:7 | this |
|
||||
| captures.cpp:10:7:10:15 | ExprStmt |
|
||||
| captures.cpp:10:9:10:9 | definition of x |
|
||||
| captures.cpp:10:9:10:9 | x |
|
||||
| captures.cpp:10:9:10:9 | x |
|
||||
| captures.cpp:10:9:10:13 | ... + ... |
|
||||
| captures.cpp:10:9:10:13 | this |
|
||||
| captures.cpp:10:9:10:13 | x |
|
||||
| captures.cpp:10:13:10:13 | 1 |
|
||||
| captures.cpp:11:5:11:5 | return ... |
|
||||
| captures.cpp:12:3:12:3 | return ... |
|
||||
@@ -110,6 +120,7 @@
|
||||
| captures.cpp:22:8:22:15 | myLambda |
|
||||
| captures.cpp:22:18:24:3 | [...](...){...} |
|
||||
| captures.cpp:22:18:24:3 | initializer for myLambda |
|
||||
| captures.cpp:22:18:24:3 | y |
|
||||
| captures.cpp:22:18:24:3 | {...} |
|
||||
| captures.cpp:22:19:22:19 | (constructor) |
|
||||
| captures.cpp:22:19:22:19 | (constructor) |
|
||||
@@ -136,6 +147,10 @@
|
||||
| captures.cpp:22:40:24:3 | { ... } |
|
||||
| captures.cpp:23:5:23:21 | return ... |
|
||||
| captures.cpp:23:12:23:16 | ... + ... |
|
||||
| captures.cpp:23:12:23:16 | this |
|
||||
| captures.cpp:23:12:23:16 | this |
|
||||
| captures.cpp:23:12:23:16 | x |
|
||||
| captures.cpp:23:12:23:16 | y |
|
||||
| captures.cpp:23:12:23:20 | ... + ... |
|
||||
| captures.cpp:23:16:23:16 | (reference dereference) |
|
||||
| captures.cpp:23:16:23:16 | definition of y |
|
||||
@@ -191,8 +206,6 @@
|
||||
| end_pos.cpp:10:16:10:16 | 1 |
|
||||
| end_pos.cpp:12:1:12:1 | return ... |
|
||||
| file://:0:0:0:0 | |
|
||||
| file://:0:0:0:0 | (captured this) |
|
||||
| file://:0:0:0:0 | (captured this) |
|
||||
| file://:0:0:0:0 | (global namespace) |
|
||||
| file://:0:0:0:0 | (reference to) |
|
||||
| file://:0:0:0:0 | ..()(..) |
|
||||
@@ -292,17 +305,4 @@
|
||||
| file://:0:0:0:0 | p#0 |
|
||||
| file://:0:0:0:0 | p#0 |
|
||||
| file://:0:0:0:0 | reg_save_area |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | void * |
|
||||
| file://:0:0:0:0 | x |
|
||||
| file://:0:0:0:0 | x |
|
||||
| file://:0:0:0:0 | x |
|
||||
| file://:0:0:0:0 | x |
|
||||
| file://:0:0:0:0 | y |
|
||||
| file://:0:0:0:0 | y |
|
||||
|
||||
@@ -16,7 +16,7 @@ rangeVariables
|
||||
| test.cpp:44:3:46:3 | for(...:...) ... | test.cpp:44:3:44:3 | (__range) | file://:0:0:0:0 | const List<long> & |
|
||||
conditions
|
||||
| test.cpp:8:3:10:3 | for(...:...) ... | file://:0:0:0:0 | ... != ... | file://:0:0:0:0 | (__begin) | file://:0:0:0:0 | (__end) |
|
||||
| test.cpp:28:3:30:3 | for(...:...) ... | test.cpp:28:20:28:20 | call to operator!= | file://:0:0:0:0 | (__begin) | file://:0:0:0:0 | (__end) |
|
||||
| test.cpp:28:3:30:3 | for(...:...) ... | test.cpp:28:20:28:20 | call to operator!= | test.cpp:28:20:28:20 | (__begin) | test.cpp:28:20:28:20 | (__end) |
|
||||
| test.cpp:44:3:46:3 | for(...:...) ... | file://:0:0:0:0 | ... != ... | file://:0:0:0:0 | (__begin) | file://:0:0:0:0 | (__end) |
|
||||
beginVariables
|
||||
| test.cpp:8:3:10:3 | for(...:...) ... | test.cpp:8:3:8:3 | (__begin) | file://:0:0:0:0 | short * |
|
||||
@@ -28,5 +28,5 @@ endVariables
|
||||
| test.cpp:44:3:46:3 | for(...:...) ... | test.cpp:44:3:44:3 | (__end) | file://:0:0:0:0 | long * |
|
||||
updates
|
||||
| test.cpp:8:3:10:3 | for(...:...) ... | file://:0:0:0:0 | ++ ... | file://:0:0:0:0 | (__begin) |
|
||||
| test.cpp:28:3:30:3 | for(...:...) ... | test.cpp:28:20:28:20 | call to operator++ | file://:0:0:0:0 | (__begin) |
|
||||
| test.cpp:28:3:30:3 | for(...:...) ... | test.cpp:28:20:28:20 | call to operator++ | test.cpp:28:20:28:20 | (__begin) |
|
||||
| test.cpp:44:3:46:3 | for(...:...) ... | file://:0:0:0:0 | ++ ... | file://:0:0:0:0 | (__begin) |
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
| exprs.cpp:7:10:7:16 | (reference to) | isPure | | |
|
||||
| exprs.cpp:7:11:7:15 | * ... | isPure | | |
|
||||
| exprs.cpp:7:12:7:15 | this | isPure | | |
|
||||
| exprs.cpp:12:3:12:3 | this | isPure | | |
|
||||
| exprs.cpp:12:3:12:3 | v | isPure | | |
|
||||
| exprs.cpp:12:3:12:5 | ... -- | | mayBeImpure | mayBeGloballyImpure |
|
||||
| exprs.cpp:13:10:13:16 | (...) | isPure | | |
|
||||
@@ -70,4 +71,3 @@
|
||||
| exprs.cpp:34:4:34:4 | t | isPure | | |
|
||||
| exprs.cpp:38:2:38:31 | call to myTemplateFunction | | mayBeImpure | mayBeGloballyImpure |
|
||||
| exprs.cpp:39:2:39:24 | call to myTemplateFunction | | mayBeImpure | mayBeGloballyImpure |
|
||||
| file://:0:0:0:0 | this | isPure | | |
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
| file://:0:0:0:0 | this |
|
||||
| ms.cpp:3:10:3:12 | 0 |
|
||||
| ms.cpp:3:10:3:12 | constructor init of field x |
|
||||
| ms.cpp:3:16:3:40 | static_cast<int>... |
|
||||
| ms.cpp:3:39:3:39 | this |
|
||||
| ms.cpp:3:39:3:39 | x |
|
||||
| ms.cpp:5:3:5:3 | call to S |
|
||||
|
||||
@@ -19,9 +19,9 @@
|
||||
| test.cpp:119:9:119:12 | call to lock | lockCall | test.cpp:119:3:119:6 | this |
|
||||
| test.cpp:119:9:119:12 | call to lock | mustlockCall | test.cpp:119:3:119:6 | this |
|
||||
| test.cpp:120:9:120:14 | call to unlock | unlockCall | test.cpp:120:3:120:6 | this |
|
||||
| test.cpp:122:3:122:6 | call to lock | lockCall | file://:0:0:0:0 | this |
|
||||
| test.cpp:122:3:122:6 | call to lock | mustlockCall | file://:0:0:0:0 | this |
|
||||
| test.cpp:123:3:123:8 | call to unlock | unlockCall | file://:0:0:0:0 | this |
|
||||
| test.cpp:122:3:122:6 | call to lock | lockCall | test.cpp:122:3:122:6 | this |
|
||||
| test.cpp:122:3:122:6 | call to lock | mustlockCall | test.cpp:122:3:122:6 | this |
|
||||
| test.cpp:123:3:123:8 | call to unlock | unlockCall | test.cpp:123:3:123:8 | this |
|
||||
| test.cpp:136:10:136:13 | call to lock | lockCall | test.cpp:136:3:136:7 | this8 |
|
||||
| test.cpp:136:10:136:13 | call to lock | mustlockCall | test.cpp:136:3:136:7 | this8 |
|
||||
| test.cpp:137:10:137:15 | call to unlock | unlockCall | test.cpp:137:3:137:7 | this8 |
|
||||
|
||||
@@ -31,28 +31,18 @@ uniqueTypeRepr
|
||||
uniqueNodeLocation
|
||||
| break_labels.c:2:11:2:11 | i | Node should have one location but has 4. |
|
||||
| break_labels.c:2:11:2:11 | x | Node should have one location but has 4. |
|
||||
| cpp11.cpp:82:17:82:55 | call to Val | Node should have one location but has 2. |
|
||||
| cpp11.cpp:82:17:82:55 | call to Val | Node should have one location but has 2. |
|
||||
| duff.c:2:12:2:12 | i | Node should have one location but has 4. |
|
||||
| duff.c:2:12:2:12 | x | Node should have one location but has 4. |
|
||||
| file://:0:0:0:0 | call to PolymorphicBase | Node should have one location but has 2. |
|
||||
| file://:0:0:0:0 | call to PolymorphicDerived | Node should have one location but has 2. |
|
||||
| file://:0:0:0:0 | call to Val | Node should have one location but has 2. |
|
||||
| file://:0:0:0:0 | call to Val | Node should have one location but has 2. |
|
||||
| file://:0:0:0:0 | call to exn1 | Node should have one location but has 2. |
|
||||
| file://:0:0:0:0 | p#2 | Node should have one location but has 0. |
|
||||
| file://:0:0:0:0 | p#2 | Node should have one location but has 0. |
|
||||
| ifelsestmt.c:37:17:37:17 | x | Node should have one location but has 2. |
|
||||
| ifelsestmt.c:37:24:37:24 | y | Node should have one location but has 2. |
|
||||
| ifstmt.c:27:17:27:17 | x | Node should have one location but has 2. |
|
||||
| ifstmt.c:27:24:27:24 | y | Node should have one location but has 2. |
|
||||
| ir.cpp:850:19:850:19 | call to PolymorphicBase | Node should have one location but has 2. |
|
||||
| ir.cpp:851:22:851:22 | call to PolymorphicDerived | Node should have one location but has 2. |
|
||||
| nodefaultswitchstmt.c:1:12:1:12 | i | Node should have one location but has 4. |
|
||||
| nodefaultswitchstmt.c:1:12:1:12 | x | Node should have one location but has 4. |
|
||||
| switchstmt.c:1:12:1:12 | i | Node should have one location but has 4. |
|
||||
| switchstmt.c:1:12:1:12 | x | Node should have one location but has 4. |
|
||||
| try_catch.cpp:13:5:13:16 | call to exn1 | Node should have one location but has 2. |
|
||||
missingLocation
|
||||
| Nodes without location: 2 |
|
||||
uniqueNodeToString
|
||||
|
||||
@@ -661,7 +661,7 @@ postIsNotPre
|
||||
postHasUniquePre
|
||||
| assignexpr.cpp:9:2:9:12 | Store | PostUpdateNode should have one pre-update node but has 0. |
|
||||
| bad_asts.cpp:15:10:15:12 | Store | PostUpdateNode should have one pre-update node but has 0. |
|
||||
| file://:0:0:0:0 | Store | PostUpdateNode should have one pre-update node but has 0. |
|
||||
| cpp11.cpp:65:19:65:45 | Store | PostUpdateNode should have one pre-update node but has 0. |
|
||||
| ir.cpp:531:14:531:14 | Store | PostUpdateNode should have one pre-update node but has 0. |
|
||||
uniquePostUpdate
|
||||
postIsInSameCallable
|
||||
|
||||
@@ -166,10 +166,6 @@
|
||||
| file://:0:0:0:0 | signed long long |
|
||||
| file://:0:0:0:0 | signed short |
|
||||
| file://:0:0:0:0 | static |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | this |
|
||||
| file://:0:0:0:0 | thread |
|
||||
| file://:0:0:0:0 | unaligned |
|
||||
| file://:0:0:0:0 | unknown |
|
||||
@@ -230,6 +226,8 @@
|
||||
| header.h:10:9:10:24 | composite<int>:: |
|
||||
| header.h:10:9:10:28 | call to eval |
|
||||
| header.h:10:9:10:28 | call to eval |
|
||||
| header.h:10:9:10:28 | this |
|
||||
| header.h:10:9:10:28 | this |
|
||||
| header.h:10:9:10:32 | ExprStmt |
|
||||
| header.h:10:9:10:32 | ExprStmt |
|
||||
| header.h:10:30:10:30 | i |
|
||||
@@ -313,6 +311,8 @@
|
||||
| test.cpp:18:13:18:16 | valx |
|
||||
| test.cpp:19:9:19:13 | actor |
|
||||
| test.cpp:19:9:19:13 | actor |
|
||||
| test.cpp:19:9:19:13 | this |
|
||||
| test.cpp:19:9:19:13 | this |
|
||||
| test.cpp:19:9:19:24 | call to expression |
|
||||
| test.cpp:19:9:19:25 | ExprStmt |
|
||||
| test.cpp:19:9:19:25 | ExprStmt |
|
||||
|
||||
@@ -6,8 +6,6 @@ isFromUninstantiatedTemplate
|
||||
| file://:0:0:0:0 | initializer for MyClassEnumConst | isfromtemplateinstantiation.cpp:77:26:77:45 | AnotherTemplateClass<T> |
|
||||
| file://:0:0:0:0 | p#0 | isfromtemplateinstantiation.cpp:134:29:134:33 | Outer<T> |
|
||||
| file://:0:0:0:0 | p#0 | isfromtemplateinstantiation.cpp:134:29:134:33 | Outer<T> |
|
||||
| file://:0:0:0:0 | this | load.cpp:13:7:13:27 | basic_text_iprimitive<IStream> |
|
||||
| file://:0:0:0:0 | this | load.cpp:22:10:22:13 | load |
|
||||
| isfromtemplateinstantiation.cpp:12:24:12:46 | definition of inner_template_function | isfromtemplateinstantiation.cpp:12:24:12:46 | inner_template_function |
|
||||
| isfromtemplateinstantiation.cpp:12:24:12:46 | inner_template_function | isfromtemplateinstantiation.cpp:12:24:12:46 | inner_template_function |
|
||||
| isfromtemplateinstantiation.cpp:13:1:17:1 | { ... } | isfromtemplateinstantiation.cpp:12:24:12:46 | inner_template_function |
|
||||
@@ -222,6 +220,8 @@ isFromUninstantiatedTemplate
|
||||
| load.cpp:24:9:24:10 | (reference dereference) | load.cpp:22:10:22:13 | load |
|
||||
| load.cpp:24:9:24:10 | is | load.cpp:13:7:13:27 | basic_text_iprimitive<IStream> |
|
||||
| load.cpp:24:9:24:10 | is | load.cpp:22:10:22:13 | load |
|
||||
| load.cpp:24:9:24:10 | this | load.cpp:13:7:13:27 | basic_text_iprimitive<IStream> |
|
||||
| load.cpp:24:9:24:10 | this | load.cpp:22:10:22:13 | load |
|
||||
| load.cpp:24:9:24:15 | ... >> ... | load.cpp:13:7:13:27 | basic_text_iprimitive<IStream> |
|
||||
| load.cpp:24:9:24:15 | ... >> ... | load.cpp:22:10:22:13 | load |
|
||||
| load.cpp:24:9:24:16 | ExprStmt | load.cpp:13:7:13:27 | basic_text_iprimitive<IStream> |
|
||||
@@ -506,6 +506,7 @@ isFromUninstantiatedTemplate
|
||||
| load.cpp:22:19:22:19 | t | I | T | Declaration | |
|
||||
| load.cpp:24:9:24:10 | (reference dereference) | | T | Expr | |
|
||||
| load.cpp:24:9:24:10 | is | | T | Expr | Not ref |
|
||||
| load.cpp:24:9:24:10 | this | | T | Expr | |
|
||||
| load.cpp:24:15:24:15 | (reference dereference) | | T | Expr | |
|
||||
| load.cpp:24:15:24:15 | t | | T | Expr | Not ref |
|
||||
| load.cpp:27:10:27:13 | load | | T | Declaration | |
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
| file://:0:0:0:0 | T |
|
||||
| file://:0:0:0:0 | int |
|
||||
| file://:0:0:0:0 | myClass |
|
||||
| file://:0:0:0:0 | short |
|
||||
| typename.cpp:11:9:11:19 | T |
|
||||
| typename.cpp:11:9:11:19 | short |
|
||||
| typename.cpp:16:9:16:21 | int |
|
||||
| typename.cpp:16:25:16:57 | myClass |
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
| test.cpp:129:13:129:17 | array to pointer conversion | 125:c20-c24 126:c20-c24 129:c13-c17 |
|
||||
| test.cpp:129:13:129:17 | bar | 125:c20-c24 126:c20-c24 129:c13-c17 |
|
||||
| test.cpp:141:12:141:17 | call to getInt | 141:c12-c17 141:c29-c34 |
|
||||
| test.cpp:141:23:141:26 | this | 0:c0-c0 141:c23-c26 |
|
||||
| test.cpp:141:12:141:17 | this | 141:c12-c17 141:c23-c26 |
|
||||
| test.cpp:146:10:146:11 | ih | 146:c10-c11 146:c31-c32 |
|
||||
| test.cpp:146:13:146:25 | call to getDoubledInt | 146:c13-c25 146:c34-c46 |
|
||||
| test.cpp:150:3:150:3 | x | 150:c3-c3 150:c9-c9 151:c3-c3 151:c9-c9 152:c12-c12 |
|
||||
|
||||
Reference in New Issue
Block a user