Merge branch 'main' into intmultlong

This commit is contained in:
Geoffrey White
2020-10-20 14:55:53 +01:00
458 changed files with 41213 additions and 11536 deletions

View File

@@ -4,3 +4,5 @@ long j = i * i; //Wrong: due to overflow on the multiplication between ints,
long k = (long) i * i; //Correct: the multiplication is done on longs instead of ints,
//and will not overflow
long l = static_cast<long>(i) * i; //Correct: modern C++

View File

@@ -21,7 +21,7 @@ class Include extends PreprocessorDirective, @ppd_include {
/**
* Gets the token which occurs after `#include`, for example `"filename"`
* or `&lt;filename>`.
* or `<filename>`.
*/
string getIncludeText() { result = getHead() }

View File

@@ -36,7 +36,7 @@ class Parameter extends LocalScopeVariable, @parameter {
* 1. The name given to the parameter at the function's definition or
* (for catch block parameters) at the catch block.
* 2. A name given to the parameter at a function declaration.
* 3. The name "p#i" where i is the index of the parameter.
* 3. The name "(unnamed parameter i)" where i is the index of the parameter.
*/
override string getName() {
exists(VariableDeclarationEntry vde |
@@ -46,7 +46,7 @@ class Parameter extends LocalScopeVariable, @parameter {
)
or
not exists(getANamedDeclarationEntry()) and
result = "p#" + this.getIndex().toString()
result = "(unnamed parameter " + this.getIndex().toString() + ")"
}
override string getAPrimaryQlClass() { result = "Parameter" }
@@ -111,7 +111,8 @@ class Parameter extends LocalScopeVariable, @parameter {
* Holds if this parameter has a name.
*
* In other words, this predicate holds precisely when the result of
* `getName()` is not "p#i" (where `i` is the index of the parameter).
* `getName()` is not "(unnamed parameter i)" (where `i` is the index
* of the parameter).
*/
predicate isNamed() { exists(getANamedDeclarationEntry()) }

View File

@@ -4,47 +4,25 @@
import cpp
import Nullness
import semmle.code.cpp.models.interfaces.ArrayFunction
/**
* Holds if the call `fc` will dereference argument `i`.
*/
predicate callDereferences(FunctionCall fc, int i) {
exists(string name |
fc.getTarget().hasGlobalOrStdName(name) and
exists(ArrayFunction af |
fc.getTarget() = af and
(
name = "bcopy" and i in [0 .. 1]
or
name = "memcpy" and i in [0 .. 1]
or
name = "memmove" and i in [0 .. 1]
or
name = "strcpy" and i in [0 .. 1]
or
name = "strncpy" and i in [0 .. 1]
or
name = "strdup" and i = 0
or
name = "strndup" and i = 0
or
name = "strlen" and i = 0
or
name = "printf" and fc.getArgument(i).getType() instanceof PointerType
or
name = "fprintf" and fc.getArgument(i).getType() instanceof PointerType
or
name = "sprintf" and fc.getArgument(i).getType() instanceof PointerType
or
name = "snprintf" and fc.getArgument(i).getType() instanceof PointerType
or
name = "vprintf" and fc.getArgument(i).getType() instanceof PointerType
or
name = "vfprintf" and fc.getArgument(i).getType() instanceof PointerType
or
name = "vsprintf" and fc.getArgument(i).getType() instanceof PointerType
or
name = "vsnprintf" and fc.getArgument(i).getType() instanceof PointerType
af.hasArrayInput(i) or
af.hasArrayOutput(i)
)
)
or
exists(FormattingFunction ff |
fc.getTarget() = ff and
i >= ff.getFirstFormatArgumentIndex() and
fc.getArgument(i).getType() instanceof PointerType
)
}
/**

File diff suppressed because it is too large Load Diff

View File

@@ -2,6 +2,30 @@ private import DataFlowImplSpecific::Private
private import DataFlowImplSpecific::Public
import Cached
/**
* The cost limits for the `AccessPathFront` to `AccessPathApprox` expansion.
*
* `apLimit` bounds the acceptable fan-out, and `tupleLimit` bounds the
* estimated per-`AccessPathFront` tuple cost. Access paths exceeding both of
* these limits are represented with lower precision during pruning.
*/
predicate accessPathApproxCostLimits(int apLimit, int tupleLimit) {
apLimit = 10 and
tupleLimit = 10000
}
/**
* The cost limits for the `AccessPathApprox` to `AccessPath` expansion.
*
* `apLimit` bounds the acceptable fan-out, and `tupleLimit` bounds the
* estimated per-`AccessPathApprox` tuple cost. Access paths exceeding both of
* these limits are represented with lower precision.
*/
predicate accessPathCostLimits(int apLimit, int tupleLimit) {
apLimit = 5 and
tupleLimit = 1000
}
cached
private module Cached {
/**

View File

@@ -2,6 +2,30 @@ private import DataFlowImplSpecific::Private
private import DataFlowImplSpecific::Public
import Cached
/**
* The cost limits for the `AccessPathFront` to `AccessPathApprox` expansion.
*
* `apLimit` bounds the acceptable fan-out, and `tupleLimit` bounds the
* estimated per-`AccessPathFront` tuple cost. Access paths exceeding both of
* these limits are represented with lower precision during pruning.
*/
predicate accessPathApproxCostLimits(int apLimit, int tupleLimit) {
apLimit = 10 and
tupleLimit = 10000
}
/**
* The cost limits for the `AccessPathApprox` to `AccessPath` expansion.
*
* `apLimit` bounds the acceptable fan-out, and `tupleLimit` bounds the
* estimated per-`AccessPathApprox` tuple cost. Access paths exceeding both of
* these limits are represented with lower precision.
*/
predicate accessPathCostLimits(int apLimit, int tupleLimit) {
apLimit = 5 and
tupleLimit = 1000
}
cached
private module Cached {
/**

View File

@@ -0,0 +1,169 @@
private import cpp
// The `ValueNumbering` library has to be imported right after `cpp` to ensure
// that the cached IR gets the same checksum here as it does in queries that use
// `ValueNumbering` without `DataFlow`.
private import semmle.code.cpp.ir.ValueNumbering
private import semmle.code.cpp.ir.IR
private import semmle.code.cpp.ir.dataflow.DataFlow
private import semmle.code.cpp.ir.dataflow.internal.DataFlowUtil
/**
* Gets a short ID for an IR dataflow node.
* - For `Instruction`s, this is just the result ID of the instruction (e.g. `m128`).
* - For `Operand`s, this is the label of the operand, prefixed with the result ID of the
* instruction and a dot (e.g. `m128.left`).
* - For `Variable`s, this is the qualified name of the variable.
*/
private string nodeId(DataFlow::Node node, int order1, int order2) {
exists(Instruction instruction | instruction = node.asInstruction() |
result = instruction.getResultId() and
order1 = instruction.getBlock().getDisplayIndex() and
order2 = instruction.getDisplayIndexInBlock()
)
or
exists(Operand operand, Instruction instruction |
operand = node.asOperand() and
instruction = operand.getUse()
|
result = instruction.getResultId() + "." + operand.getDumpId() and
order1 = instruction.getBlock().getDisplayIndex() and
order2 = instruction.getDisplayIndexInBlock()
)
or
result = "var(" + node.asVariable().getQualifiedName() + ")" and
order1 = 1000000 and
order2 = 0
}
/**
* Gets the local dataflow from other nodes in the same function to this node.
*/
private string getFromFlow(DataFlow::Node useNode, int order1, int order2) {
exists(DataFlow::Node defNode, string prefix |
(
simpleLocalFlowStep(defNode, useNode) and prefix = ""
or
any(DataFlow::Configuration cfg).isAdditionalFlowStep(defNode, useNode) and
defNode.getEnclosingCallable() = useNode.getEnclosingCallable() and
prefix = "+"
) and
if defNode.asInstruction() = useNode.asOperand().getAnyDef()
then
// Shorthand for flow from the def of this operand.
result = prefix + "def" and
order1 = -1 and
order2 = 0
else
if defNode.asOperand().getUse() = useNode.asInstruction()
then
// Shorthand for flow from an operand of this instruction
result = prefix + defNode.asOperand().getDumpId() and
order1 = -1 and
order2 = defNode.asOperand().getDumpSortOrder()
else result = prefix + nodeId(defNode, order1, order2)
)
}
/**
* Gets the local dataflow from this node to other nodes in the same function.
*/
private string getToFlow(DataFlow::Node defNode, int order1, int order2) {
exists(DataFlow::Node useNode, string prefix |
(
simpleLocalFlowStep(defNode, useNode) and prefix = ""
or
any(DataFlow::Configuration cfg).isAdditionalFlowStep(defNode, useNode) and
defNode.getEnclosingCallable() = useNode.getEnclosingCallable() and
prefix = "+"
) and
if useNode.asInstruction() = defNode.asOperand().getUse()
then
// Shorthand for flow to this operand's instruction.
result = prefix + "result" and
order1 = -1 and
order2 = 0
else result = prefix + nodeId(useNode, order1, order2)
)
}
/**
* Gets the properties of the dataflow node `node`.
*/
private string getNodeProperty(DataFlow::Node node, string key) {
// List dataflow into and out of this node. Flow into this node is printed as `src->@`, and flow
// out of this node is printed as `@->dest`.
key = "flow" and
result =
strictconcat(string flow, boolean to, int order1, int order2 |
flow = getFromFlow(node, order1, order2) + "->@" and to = false
or
flow = "@->" + getToFlow(node, order1, order2) and to = true
|
flow, ", " order by to, order1, order2, flow
)
or
// Is this node a dataflow sink?
key = "sink" and
any(DataFlow::Configuration cfg).isSink(node) and
result = "true"
or
// Is this node a dataflow source?
key = "source" and
any(DataFlow::Configuration cfg).isSource(node) and
result = "true"
or
// Is this node a dataflow barrier, and if so, what kind?
key = "barrier" and
result =
strictconcat(string kind |
any(DataFlow::Configuration cfg).isBarrier(node) and kind = "full"
or
any(DataFlow::Configuration cfg).isBarrierIn(node) and kind = "in"
or
any(DataFlow::Configuration cfg).isBarrierOut(node) and kind = "out"
or
exists(DataFlow::BarrierGuard guard |
any(DataFlow::Configuration cfg).isBarrierGuard(guard) and
node = guard.getAGuardedNode() and
kind = "guard(" + guard.getResultId() + ")"
)
|
kind, ", "
)
or
// Is there partial flow from a source to this node?
// This property will only be emitted if partial flow is enabled by overriding
// `DataFlow::Configration::explorationLimit()`.
key = "pflow" and
result =
strictconcat(DataFlow::PartialPathNode sourceNode, DataFlow::PartialPathNode destNode, int dist,
int order1, int order2 |
any(DataFlow::Configuration cfg).hasPartialFlow(sourceNode, destNode, dist) and
destNode.getNode() = node and
// Only print flow from a source in the same function.
sourceNode.getNode().getEnclosingCallable() = node.getEnclosingCallable()
|
nodeId(sourceNode.getNode(), order1, order2) + "+" + dist.toString(), ", "
order by
order1, order2, dist desc
)
}
/**
* Property provider for local IR dataflow.
*/
class LocalFlowPropertyProvider extends IRPropertyProvider {
override string getOperandProperty(Operand operand, string key) {
exists(DataFlow::Node node |
operand = node.asOperand() and
result = getNodeProperty(node, key)
)
}
override string getInstructionProperty(Instruction instruction, string key) {
exists(DataFlow::Node node |
instruction = node.asInstruction() and
result = getNodeProperty(node, key)
)
}
}

View File

@@ -72,4 +72,9 @@ class IRPropertyProvider extends TIRPropertyProvider {
* Gets the value of the property named `key` for the specified block.
*/
string getBlockProperty(IRBlock block, string key) { none() }
/**
* Gets the value of the property named `key` for the specified operand.
*/
string getOperandProperty(Operand operand, string key) { none() }
}

View File

@@ -804,12 +804,26 @@ class CopyValueInstruction extends CopyInstruction, UnaryInstruction {
final override UnaryOperand getSourceValueOperand() { result = getAnOperand() }
}
/**
* Gets a string describing the location pointed to by the specified address operand.
*/
private string getAddressOperandDescription(AddressOperand operand) {
result = operand.getDef().(VariableAddressInstruction).getIRVariable().toString()
or
not operand.getDef() instanceof VariableAddressInstruction and
result = "?"
}
/**
* An instruction that returns a register result containing a copy of its memory operand.
*/
class LoadInstruction extends CopyInstruction {
LoadInstruction() { getOpcode() instanceof Opcode::Load }
final override string getImmediateString() {
result = getAddressOperandDescription(getSourceAddressOperand())
}
/**
* Gets the operand that provides the address of the value being loaded.
*/
@@ -829,6 +843,10 @@ class LoadInstruction extends CopyInstruction {
class StoreInstruction extends CopyInstruction {
StoreInstruction() { getOpcode() instanceof Opcode::Store }
final override string getImmediateString() {
result = getAddressOperandDescription(getDestinationAddressOperand())
}
/**
* Gets the operand that provides the address of the location to which the value will be stored.
*/
@@ -1501,6 +1519,12 @@ class SwitchInstruction extends Instruction {
class CallInstruction extends Instruction {
CallInstruction() { getOpcode() instanceof Opcode::Call }
final override string getImmediateString() {
result = getStaticCallTarget().toString()
or
not exists(getStaticCallTarget()) and result = "?"
}
/**
* Gets the operand the specifies the target function of the call.
*/

View File

@@ -151,6 +151,11 @@ class Operand extends TOperand {
*/
string getDumpLabel() { result = "" }
/**
* Gets a string that uniquely identifies this operand on its use instruction.
*/
string getDumpId() { result = "" }
/**
* Gets a string describing this operand, suitable for display in IR dumps. This consists of the
* result ID of the instruction consumed by the operand, plus a label identifying the operand
@@ -280,6 +285,8 @@ class NonPhiOperand extends Operand {
final override string getDumpLabel() { result = tag.getLabel() }
final override string getDumpId() { result = tag.getId() }
final override int getDumpSortOrder() { result = tag.getSortOrder() }
/**
@@ -477,6 +484,8 @@ class PhiInputOperand extends MemoryOperand, PhiOperandBase {
result = "from " + getPredecessorBlock().getDisplayIndex().toString() + ":"
}
final override string getDumpId() { result = getPredecessorBlock().getDisplayIndex().toString() }
/**
* Gets the predecessor block from which this value comes.
*/

View File

@@ -50,6 +50,37 @@ private string getAdditionalBlockProperty(IRBlock block, string key) {
exists(IRPropertyProvider provider | result = provider.getBlockProperty(block, key))
}
/**
* Gets the properties of an operand from any active property providers.
*/
private string getAdditionalOperandProperty(Operand operand, string key) {
exists(IRPropertyProvider provider | result = provider.getOperandProperty(operand, key))
}
/**
* Gets a string listing the properties of the operand and their corresponding values. If the
* operand has no properties, this predicate has no result.
*/
private string getOperandPropertyListString(Operand operand) {
result =
strictconcat(string key, string value |
value = getAdditionalOperandProperty(operand, key)
|
key + ":" + value, ", "
)
}
/**
* Gets a string listing the properties of the operand and their corresponding values. The list is
* surrounded by curly braces. If the operand has no properties, this predicate returns an empty
* string.
*/
private string getOperandPropertyString(Operand operand) {
result = "{" + getOperandPropertyListString(operand) + "}"
or
not exists(getOperandPropertyListString(operand)) and result = ""
}
private newtype TPrintableIRNode =
TPrintableIRFunction(IRFunction irFunc) { shouldPrintFunction(irFunc.getFunction()) } or
TPrintableIRBlock(IRBlock block) { shouldPrintFunction(block.getEnclosingFunction()) } or
@@ -190,7 +221,7 @@ private class PrintableInstruction extends PrintableIRNode, TPrintableInstructio
|
resultString = instr.getResultString() and
operationString = instr.getOperationString() and
operandsString = instr.getOperandsString() and
operandsString = getOperandsString() and
columnWidths(block, resultWidth, operationWidth) and
result =
resultString + getPaddingString(resultWidth - resultString.length()) + " = " +
@@ -210,6 +241,22 @@ private class PrintableInstruction extends PrintableIRNode, TPrintableInstructio
result = PrintableIRNode.super.getProperty(key) or
result = getAdditionalInstructionProperty(instr, key)
}
/**
* Gets the string representation of the operand list. This is the same as
* `Instruction::getOperandsString()`, except that each operand is annotated with any properties
* provided by active `IRPropertyProvider` instances.
*/
private string getOperandsString() {
result =
concat(Operand operand |
operand = instr.getAnOperand()
|
operand.getDumpString() + getOperandPropertyString(operand), ", "
order by
operand.getDumpSortOrder()
)
}
}
private predicate columnWidths(IRBlock block, int resultWidth, int operationWidth) {

View File

@@ -40,7 +40,17 @@ abstract class OperandTag extends TOperandTag {
/**
* Gets a label that will appear before the operand when the IR is printed.
*/
string getLabel() { result = "" }
final string getLabel() { if alwaysPrintLabel() then result = getId() + ":" else result = "" }
/**
* Gets an identifier that uniquely identifies this operand within its instruction.
*/
abstract string getId();
/**
* Holds if the operand should always be prefixed with its label in the dump of its instruction.
*/
predicate alwaysPrintLabel() { none() }
}
/**
@@ -69,7 +79,9 @@ class AddressOperandTag extends RegisterOperandTag, TAddressOperand {
final override int getSortOrder() { result = 0 }
final override string getLabel() { result = "&:" }
final override predicate alwaysPrintLabel() { any() }
final override string getId() { result = "&" }
}
AddressOperandTag addressOperand() { result = TAddressOperand() }
@@ -82,6 +94,8 @@ class BufferSizeOperandTag extends RegisterOperandTag, TBufferSizeOperand {
final override string toString() { result = "BufferSize" }
final override int getSortOrder() { result = 1 }
final override string getId() { result = "size" }
}
BufferSizeOperandTag bufferSizeOperand() { result = TBufferSizeOperand() }
@@ -93,6 +107,8 @@ class SideEffectOperandTag extends TypedOperandTag, TSideEffectOperand {
final override string toString() { result = "SideEffect" }
final override int getSortOrder() { result = 2 }
final override string getId() { result = "side_effect" }
}
SideEffectOperandTag sideEffectOperand() { result = TSideEffectOperand() }
@@ -105,6 +121,8 @@ class LoadOperandTag extends TypedOperandTag, TLoadOperand {
final override string toString() { result = "Load" }
final override int getSortOrder() { result = 3 }
final override string getId() { result = "load" }
}
LoadOperandTag loadOperand() { result = TLoadOperand() }
@@ -116,6 +134,8 @@ class StoreValueOperandTag extends RegisterOperandTag, TStoreValueOperand {
final override string toString() { result = "StoreValue" }
final override int getSortOrder() { result = 4 }
final override string getId() { result = "store" }
}
StoreValueOperandTag storeValueOperand() { result = TStoreValueOperand() }
@@ -127,6 +147,8 @@ class UnaryOperandTag extends RegisterOperandTag, TUnaryOperand {
final override string toString() { result = "Unary" }
final override int getSortOrder() { result = 5 }
final override string getId() { result = "unary" }
}
UnaryOperandTag unaryOperand() { result = TUnaryOperand() }
@@ -138,6 +160,8 @@ class LeftOperandTag extends RegisterOperandTag, TLeftOperand {
final override string toString() { result = "Left" }
final override int getSortOrder() { result = 6 }
final override string getId() { result = "left" }
}
LeftOperandTag leftOperand() { result = TLeftOperand() }
@@ -149,6 +173,8 @@ class RightOperandTag extends RegisterOperandTag, TRightOperand {
final override string toString() { result = "Right" }
final override int getSortOrder() { result = 7 }
final override string getId() { result = "right" }
}
RightOperandTag rightOperand() { result = TRightOperand() }
@@ -160,6 +186,8 @@ class ConditionOperandTag extends RegisterOperandTag, TConditionOperand {
final override string toString() { result = "Condition" }
final override int getSortOrder() { result = 8 }
final override string getId() { result = "cond" }
}
ConditionOperandTag conditionOperand() { result = TConditionOperand() }
@@ -172,7 +200,9 @@ class CallTargetOperandTag extends RegisterOperandTag, TCallTargetOperand {
final override int getSortOrder() { result = 10 }
final override string getLabel() { result = "func:" }
final override predicate alwaysPrintLabel() { any() }
final override string getId() { result = "func" }
}
CallTargetOperandTag callTargetOperand() { result = TCallTargetOperand() }
@@ -195,7 +225,9 @@ class ThisArgumentOperandTag extends ArgumentOperandTag, TThisArgumentOperand {
final override int getSortOrder() { result = 11 }
final override string getLabel() { result = "this:" }
final override predicate alwaysPrintLabel() { any() }
final override string getId() { result = "this" }
}
ThisArgumentOperandTag thisArgumentOperand() { result = TThisArgumentOperand() }
@@ -212,9 +244,11 @@ class PositionalArgumentOperandTag extends ArgumentOperandTag, TPositionalArgume
final override int getSortOrder() { result = 12 + argIndex }
final override string getLabel() { result = argIndex.toString() + ":" }
final override predicate alwaysPrintLabel() { any() }
final int getArgIndex() { result = argIndex }
final override string getId() { result = argIndex.toString() }
}
PositionalArgumentOperandTag positionalArgumentOperand(int argIndex) {
@@ -228,7 +262,9 @@ class ChiTotalOperandTag extends ChiOperandTag, TChiTotalOperand {
final override int getSortOrder() { result = 13 }
final override string getLabel() { result = "total:" }
final override predicate alwaysPrintLabel() { any() }
final override string getId() { result = "total" }
}
ChiTotalOperandTag chiTotalOperand() { result = TChiTotalOperand() }
@@ -238,7 +274,9 @@ class ChiPartialOperandTag extends ChiOperandTag, TChiPartialOperand {
final override int getSortOrder() { result = 14 }
final override string getLabel() { result = "partial:" }
final override predicate alwaysPrintLabel() { any() }
final override string getId() { result = "partial" }
}
ChiPartialOperandTag chiPartialOperand() { result = TChiPartialOperand() }
@@ -252,7 +290,9 @@ class AsmOperandTag extends RegisterOperandTag, TAsmOperand {
final override int getSortOrder() { result = 15 + index }
final override string getLabel() { result = index.toString() + ":" }
final override predicate alwaysPrintLabel() { any() }
final override string getId() { result = index.toString() }
}
AsmOperandTag asmOperand(int index) { result = TAsmOperand(index) }

View File

@@ -72,4 +72,9 @@ class IRPropertyProvider extends TIRPropertyProvider {
* Gets the value of the property named `key` for the specified block.
*/
string getBlockProperty(IRBlock block, string key) { none() }
/**
* Gets the value of the property named `key` for the specified operand.
*/
string getOperandProperty(Operand operand, string key) { none() }
}

View File

@@ -804,12 +804,26 @@ class CopyValueInstruction extends CopyInstruction, UnaryInstruction {
final override UnaryOperand getSourceValueOperand() { result = getAnOperand() }
}
/**
* Gets a string describing the location pointed to by the specified address operand.
*/
private string getAddressOperandDescription(AddressOperand operand) {
result = operand.getDef().(VariableAddressInstruction).getIRVariable().toString()
or
not operand.getDef() instanceof VariableAddressInstruction and
result = "?"
}
/**
* An instruction that returns a register result containing a copy of its memory operand.
*/
class LoadInstruction extends CopyInstruction {
LoadInstruction() { getOpcode() instanceof Opcode::Load }
final override string getImmediateString() {
result = getAddressOperandDescription(getSourceAddressOperand())
}
/**
* Gets the operand that provides the address of the value being loaded.
*/
@@ -829,6 +843,10 @@ class LoadInstruction extends CopyInstruction {
class StoreInstruction extends CopyInstruction {
StoreInstruction() { getOpcode() instanceof Opcode::Store }
final override string getImmediateString() {
result = getAddressOperandDescription(getDestinationAddressOperand())
}
/**
* Gets the operand that provides the address of the location to which the value will be stored.
*/
@@ -1501,6 +1519,12 @@ class SwitchInstruction extends Instruction {
class CallInstruction extends Instruction {
CallInstruction() { getOpcode() instanceof Opcode::Call }
final override string getImmediateString() {
result = getStaticCallTarget().toString()
or
not exists(getStaticCallTarget()) and result = "?"
}
/**
* Gets the operand the specifies the target function of the call.
*/

View File

@@ -151,6 +151,11 @@ class Operand extends TOperand {
*/
string getDumpLabel() { result = "" }
/**
* Gets a string that uniquely identifies this operand on its use instruction.
*/
string getDumpId() { result = "" }
/**
* Gets a string describing this operand, suitable for display in IR dumps. This consists of the
* result ID of the instruction consumed by the operand, plus a label identifying the operand
@@ -280,6 +285,8 @@ class NonPhiOperand extends Operand {
final override string getDumpLabel() { result = tag.getLabel() }
final override string getDumpId() { result = tag.getId() }
final override int getDumpSortOrder() { result = tag.getSortOrder() }
/**
@@ -477,6 +484,8 @@ class PhiInputOperand extends MemoryOperand, PhiOperandBase {
result = "from " + getPredecessorBlock().getDisplayIndex().toString() + ":"
}
final override string getDumpId() { result = getPredecessorBlock().getDisplayIndex().toString() }
/**
* Gets the predecessor block from which this value comes.
*/

View File

@@ -50,6 +50,37 @@ private string getAdditionalBlockProperty(IRBlock block, string key) {
exists(IRPropertyProvider provider | result = provider.getBlockProperty(block, key))
}
/**
* Gets the properties of an operand from any active property providers.
*/
private string getAdditionalOperandProperty(Operand operand, string key) {
exists(IRPropertyProvider provider | result = provider.getOperandProperty(operand, key))
}
/**
* Gets a string listing the properties of the operand and their corresponding values. If the
* operand has no properties, this predicate has no result.
*/
private string getOperandPropertyListString(Operand operand) {
result =
strictconcat(string key, string value |
value = getAdditionalOperandProperty(operand, key)
|
key + ":" + value, ", "
)
}
/**
* Gets a string listing the properties of the operand and their corresponding values. The list is
* surrounded by curly braces. If the operand has no properties, this predicate returns an empty
* string.
*/
private string getOperandPropertyString(Operand operand) {
result = "{" + getOperandPropertyListString(operand) + "}"
or
not exists(getOperandPropertyListString(operand)) and result = ""
}
private newtype TPrintableIRNode =
TPrintableIRFunction(IRFunction irFunc) { shouldPrintFunction(irFunc.getFunction()) } or
TPrintableIRBlock(IRBlock block) { shouldPrintFunction(block.getEnclosingFunction()) } or
@@ -190,7 +221,7 @@ private class PrintableInstruction extends PrintableIRNode, TPrintableInstructio
|
resultString = instr.getResultString() and
operationString = instr.getOperationString() and
operandsString = instr.getOperandsString() and
operandsString = getOperandsString() and
columnWidths(block, resultWidth, operationWidth) and
result =
resultString + getPaddingString(resultWidth - resultString.length()) + " = " +
@@ -210,6 +241,22 @@ private class PrintableInstruction extends PrintableIRNode, TPrintableInstructio
result = PrintableIRNode.super.getProperty(key) or
result = getAdditionalInstructionProperty(instr, key)
}
/**
* Gets the string representation of the operand list. This is the same as
* `Instruction::getOperandsString()`, except that each operand is annotated with any properties
* provided by active `IRPropertyProvider` instances.
*/
private string getOperandsString() {
result =
concat(Operand operand |
operand = instr.getAnOperand()
|
operand.getDumpString() + getOperandPropertyString(operand), ", "
order by
operand.getDumpSortOrder()
)
}
}
private predicate columnWidths(IRBlock block, int resultWidth, int operationWidth) {

View File

@@ -72,4 +72,9 @@ class IRPropertyProvider extends TIRPropertyProvider {
* Gets the value of the property named `key` for the specified block.
*/
string getBlockProperty(IRBlock block, string key) { none() }
/**
* Gets the value of the property named `key` for the specified operand.
*/
string getOperandProperty(Operand operand, string key) { none() }
}

View File

@@ -804,12 +804,26 @@ class CopyValueInstruction extends CopyInstruction, UnaryInstruction {
final override UnaryOperand getSourceValueOperand() { result = getAnOperand() }
}
/**
* Gets a string describing the location pointed to by the specified address operand.
*/
private string getAddressOperandDescription(AddressOperand operand) {
result = operand.getDef().(VariableAddressInstruction).getIRVariable().toString()
or
not operand.getDef() instanceof VariableAddressInstruction and
result = "?"
}
/**
* An instruction that returns a register result containing a copy of its memory operand.
*/
class LoadInstruction extends CopyInstruction {
LoadInstruction() { getOpcode() instanceof Opcode::Load }
final override string getImmediateString() {
result = getAddressOperandDescription(getSourceAddressOperand())
}
/**
* Gets the operand that provides the address of the value being loaded.
*/
@@ -829,6 +843,10 @@ class LoadInstruction extends CopyInstruction {
class StoreInstruction extends CopyInstruction {
StoreInstruction() { getOpcode() instanceof Opcode::Store }
final override string getImmediateString() {
result = getAddressOperandDescription(getDestinationAddressOperand())
}
/**
* Gets the operand that provides the address of the location to which the value will be stored.
*/
@@ -1501,6 +1519,12 @@ class SwitchInstruction extends Instruction {
class CallInstruction extends Instruction {
CallInstruction() { getOpcode() instanceof Opcode::Call }
final override string getImmediateString() {
result = getStaticCallTarget().toString()
or
not exists(getStaticCallTarget()) and result = "?"
}
/**
* Gets the operand the specifies the target function of the call.
*/

View File

@@ -151,6 +151,11 @@ class Operand extends TOperand {
*/
string getDumpLabel() { result = "" }
/**
* Gets a string that uniquely identifies this operand on its use instruction.
*/
string getDumpId() { result = "" }
/**
* Gets a string describing this operand, suitable for display in IR dumps. This consists of the
* result ID of the instruction consumed by the operand, plus a label identifying the operand
@@ -280,6 +285,8 @@ class NonPhiOperand extends Operand {
final override string getDumpLabel() { result = tag.getLabel() }
final override string getDumpId() { result = tag.getId() }
final override int getDumpSortOrder() { result = tag.getSortOrder() }
/**
@@ -477,6 +484,8 @@ class PhiInputOperand extends MemoryOperand, PhiOperandBase {
result = "from " + getPredecessorBlock().getDisplayIndex().toString() + ":"
}
final override string getDumpId() { result = getPredecessorBlock().getDisplayIndex().toString() }
/**
* Gets the predecessor block from which this value comes.
*/

View File

@@ -50,6 +50,37 @@ private string getAdditionalBlockProperty(IRBlock block, string key) {
exists(IRPropertyProvider provider | result = provider.getBlockProperty(block, key))
}
/**
* Gets the properties of an operand from any active property providers.
*/
private string getAdditionalOperandProperty(Operand operand, string key) {
exists(IRPropertyProvider provider | result = provider.getOperandProperty(operand, key))
}
/**
* Gets a string listing the properties of the operand and their corresponding values. If the
* operand has no properties, this predicate has no result.
*/
private string getOperandPropertyListString(Operand operand) {
result =
strictconcat(string key, string value |
value = getAdditionalOperandProperty(operand, key)
|
key + ":" + value, ", "
)
}
/**
* Gets a string listing the properties of the operand and their corresponding values. The list is
* surrounded by curly braces. If the operand has no properties, this predicate returns an empty
* string.
*/
private string getOperandPropertyString(Operand operand) {
result = "{" + getOperandPropertyListString(operand) + "}"
or
not exists(getOperandPropertyListString(operand)) and result = ""
}
private newtype TPrintableIRNode =
TPrintableIRFunction(IRFunction irFunc) { shouldPrintFunction(irFunc.getFunction()) } or
TPrintableIRBlock(IRBlock block) { shouldPrintFunction(block.getEnclosingFunction()) } or
@@ -190,7 +221,7 @@ private class PrintableInstruction extends PrintableIRNode, TPrintableInstructio
|
resultString = instr.getResultString() and
operationString = instr.getOperationString() and
operandsString = instr.getOperandsString() and
operandsString = getOperandsString() and
columnWidths(block, resultWidth, operationWidth) and
result =
resultString + getPaddingString(resultWidth - resultString.length()) + " = " +
@@ -210,6 +241,22 @@ private class PrintableInstruction extends PrintableIRNode, TPrintableInstructio
result = PrintableIRNode.super.getProperty(key) or
result = getAdditionalInstructionProperty(instr, key)
}
/**
* Gets the string representation of the operand list. This is the same as
* `Instruction::getOperandsString()`, except that each operand is annotated with any properties
* provided by active `IRPropertyProvider` instances.
*/
private string getOperandsString() {
result =
concat(Operand operand |
operand = instr.getAnOperand()
|
operand.getDumpString() + getOperandPropertyString(operand), ", "
order by
operand.getDumpSortOrder()
)
}
}
private predicate columnWidths(IRBlock block, int resultWidth, int operationWidth) {

View File

@@ -10,45 +10,57 @@ import semmle.code.cpp.models.interfaces.SideEffect
import semmle.code.cpp.models.interfaces.Taint
/**
* The standard functions `memcpy` and `memmove`, and the gcc variant
* `__builtin___memcpy_chk`
* The standard functions `memcpy`, `memmove` and `bcopy`; and the gcc variant
* `__builtin___memcpy_chk`.
*/
class MemcpyFunction extends ArrayFunction, DataFlowFunction, SideEffectFunction, TaintFunction {
class MemcpyFunction extends ArrayFunction, DataFlowFunction, SideEffectFunction {
MemcpyFunction() {
this.hasName("memcpy") or
this.hasName("memmove") or
this.hasName("__builtin___memcpy_chk")
// memcpy(dest, src, num)
// memmove(dest, src, num)
// memmove(dest, src, num, remaining)
this.hasName(["memcpy", "memmove", "__builtin___memcpy_chk"])
or
// bcopy(src, dest, num)
this.hasGlobalOrStdName("bcopy")
}
override predicate hasArrayInput(int bufParam) { bufParam = 1 }
/**
* Gets the index of the parameter that is the source buffer for the copy.
*/
int getParamSrc() { if this.hasGlobalOrStdName("bcopy") then result = 0 else result = 1 }
override predicate hasArrayOutput(int bufParam) { bufParam = 0 }
/**
* Gets the index of the parameter that is the destination buffer for the
* copy.
*/
int getParamDest() { if this.hasGlobalOrStdName("bcopy") then result = 1 else result = 0 }
/**
* Gets the index of the parameter that is the size of the copy (in bytes).
*/
int getParamSize() { result = 2 }
override predicate hasArrayInput(int bufParam) { bufParam = getParamSrc() }
override predicate hasArrayOutput(int bufParam) { bufParam = getParamDest() }
override predicate hasDataFlow(FunctionInput input, FunctionOutput output) {
input.isParameterDeref(1) and
output.isParameterDeref(0)
input.isParameterDeref(getParamSrc()) and
output.isParameterDeref(getParamDest())
or
input.isParameterDeref(1) and
input.isParameterDeref(getParamSrc()) and
output.isReturnValueDeref()
or
input.isParameter(0) and
input.isParameter(getParamDest()) and
output.isReturnValue()
}
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
input.isParameter(2) and
output.isParameterDeref(0)
or
input.isParameter(2) and
output.isReturnValueDeref()
}
override predicate hasArrayWithVariableSize(int bufParam, int countParam) {
(
bufParam = 0 or
bufParam = 1
bufParam = getParamDest() or
bufParam = getParamSrc()
) and
countParam = 2
countParam = getParamSize()
}
override predicate hasOnlySpecificReadSideEffects() { any() }
@@ -56,18 +68,18 @@ class MemcpyFunction extends ArrayFunction, DataFlowFunction, SideEffectFunction
override predicate hasOnlySpecificWriteSideEffects() { any() }
override predicate hasSpecificWriteSideEffect(ParameterIndex i, boolean buffer, boolean mustWrite) {
i = 0 and buffer = true and mustWrite = true
i = getParamDest() and buffer = true and mustWrite = true
}
override predicate hasSpecificReadSideEffect(ParameterIndex i, boolean buffer) {
i = 1 and buffer = true
i = getParamSrc() and buffer = true
}
override ParameterIndex getParameterSizeIndex(ParameterIndex i) {
result = 2 and
result = getParamSize() and
(
i = 0 or
i = 1
i = getParamDest() or
i = getParamSrc()
)
}
}

View File

@@ -1,18 +1,18 @@
#-----| [CopyAssignmentOperator] __va_list_tag& __va_list_tag::operator=(__va_list_tag const&)
#-----| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const __va_list_tag &
#-----| [MoveAssignmentOperator] __va_list_tag& __va_list_tag::operator=(__va_list_tag&&)
#-----| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] __va_list_tag &&
#-----| [Operator,TopLevelFunction] void operator delete(void*)
#-----| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [VoidPointerType] void *
#-----| [Operator,TopLevelFunction] void* operator new(unsigned long)
#-----| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LongType] unsigned long
AddressOf.c:
# 1| [TopLevelFunction] void AddressOf(int)
@@ -114,19 +114,19 @@ ConditionDecl.cpp:
ConstructorCall.cpp:
# 1| [CopyAssignmentOperator] C& C::operator=(C const&)
# 1| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const C &
# 1| [MoveAssignmentOperator] C& C::operator=(C&&)
# 1| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] C &&
# 1| [CopyConstructor] void C::C(C const&)
# 1| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const C &
# 1| [MoveConstructor] void C::C(C&&)
# 1| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] C &&
# 3| [ConversionConstructor] void C::C(int)
# 3| params:
@@ -137,19 +137,19 @@ ConstructorCall.cpp:
# 4| 0: [ReturnStmt] return ...
# 7| [CopyAssignmentOperator] D& D::operator=(D const&)
# 7| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const D &
# 7| [MoveAssignmentOperator] D& D::operator=(D&&)
# 7| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] D &&
# 7| [CopyConstructor] void D::D(D const&)
# 7| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const D &
# 7| [MoveConstructor] void D::D(D&&)
# 7| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] D &&
# 9| [Constructor] void D::D()
# 9| params:
@@ -158,11 +158,11 @@ ConstructorCall.cpp:
# 10| 0: [ReturnStmt] return ...
# 13| [CopyAssignmentOperator] E& E::operator=(E const&)
# 13| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const E &
# 13| [MoveAssignmentOperator] E& E::operator=(E&&)
# 13| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] E &&
# 17| [TopLevelFunction] void ConstructorCall(C*, D*, E*)
# 17| params:
@@ -385,7 +385,7 @@ DestructorCall.cpp:
DynamicCast.cpp:
# 1| [CopyAssignmentOperator] Base& Base::operator=(Base const&)
# 1| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const Base &
#-----| body: [BlockStmt] { ... }
#-----| 0: [ReturnStmt] return ...
@@ -400,17 +400,17 @@ DynamicCast.cpp:
#-----| ValueCategory = prvalue(load)
# 1| [MoveAssignmentOperator] Base& Base::operator=(Base&&)
# 1| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] Base &&
# 1| [Constructor] void Base::Base()
# 1| params:
# 1| [CopyConstructor] void Base::Base(Base const&)
# 1| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const Base &
# 1| [MoveConstructor] void Base::Base(Base&&)
# 1| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] Base &&
# 2| [VirtualFunction] void Base::f()
# 2| params:
@@ -418,7 +418,7 @@ DynamicCast.cpp:
# 2| 0: [ReturnStmt] return ...
# 4| [CopyAssignmentOperator] Derived& Derived::operator=(Derived const&)
# 4| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const Derived &
#-----| body: [BlockStmt] { ... }
#-----| 0: [ExprStmt] ExprStmt
@@ -451,7 +451,7 @@ DynamicCast.cpp:
#-----| 0: [ReferenceDereferenceExpr] (reference dereference)
#-----| Type = [SpecifiedType] const Derived
#-----| ValueCategory = lvalue
# 4| expr: [VariableAccess] p#0
# 4| expr: [VariableAccess] (unnamed parameter 0)
# 4| Type = [LValueReferenceType] const Derived &
# 4| ValueCategory = prvalue(load)
#-----| 1: [ReturnStmt] return ...
@@ -466,17 +466,17 @@ DynamicCast.cpp:
#-----| ValueCategory = prvalue(load)
# 4| [MoveAssignmentOperator] Derived& Derived::operator=(Derived&&)
# 4| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] Derived &&
# 4| [Constructor] void Derived::Derived()
# 4| params:
# 4| [CopyConstructor] void Derived::Derived(Derived const&)
# 4| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const Derived &
# 4| [MoveConstructor] void Derived::Derived(Derived&&)
# 4| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] Derived &&
# 5| [VirtualFunction] void Derived::f()
# 5| params:
@@ -690,11 +690,11 @@ StatementExpr.c:
StaticMemberAccess.cpp:
# 1| [CopyAssignmentOperator] X& X::operator=(X const&)
# 1| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const X &
# 1| [MoveAssignmentOperator] X& X::operator=(X&&)
# 1| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] X &&
# 5| [TopLevelFunction] void StaticMemberAccess(int, X&)
# 5| params:
@@ -749,19 +749,19 @@ Subscript.c:
Throw.cpp:
# 2| [CopyAssignmentOperator] F& F::operator=(F const&)
# 2| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const F &
# 2| [MoveAssignmentOperator] F& F::operator=(F&&)
# 2| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] F &&
# 2| [CopyConstructor] void F::F(F const&)
# 2| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const F &
# 2| [MoveConstructor] void F::F(F&&)
# 2| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] F &&
# 2| initializations:
# 2| body: [BlockStmt] { ... }
@@ -810,11 +810,11 @@ Throw.cpp:
Typeid.cpp:
# 4| [CopyAssignmentOperator] std::type_info& std::type_info::operator=(std::type_info const&)
# 4| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const type_info &
# 4| [MoveAssignmentOperator] std::type_info& std::type_info::operator=(std::type_info&&)
# 4| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] type_info &&
# 7| [ConstMemberFunction] char const* std::type_info::name() const
# 7| params:
@@ -1203,11 +1203,11 @@ macro_etc.c:
union_etc.cpp:
# 2| [CopyAssignmentOperator] S& S::operator=(S const&)
# 2| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const S &
# 2| [MoveAssignmentOperator] S& S::operator=(S&&)
# 2| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] S &&
# 2| [Constructor] void S::S()
# 2| params:
@@ -1216,27 +1216,27 @@ union_etc.cpp:
# 2| 0: [ReturnStmt] return ...
# 2| [CopyConstructor] void S::S(S const&)
# 2| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const S &
# 2| [MoveConstructor] void S::S(S&&)
# 2| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] S &&
# 3| [CopyAssignmentOperator] S::U& S::U::operator=(S::U const public&)
# 3| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const U &
# 3| [MoveAssignmentOperator] S::U& S::U::operator=(S::U&&)
# 3| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] U &&
# 4| [CopyAssignmentOperator] S::C& S::C::operator=(S::C const public&)
# 4| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const C &
# 4| [MoveAssignmentOperator] S::C& S::C::operator=(S::C&&)
# 4| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] C &&
# 6| [VirtualFunction] void S::set_q(int)
# 6| params:
@@ -1259,51 +1259,51 @@ union_etc.cpp:
# 6| 1: [ReturnStmt] return ...
# 9| [CopyAssignmentOperator] C& C::operator=(C const&)
# 9| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const C &
# 9| [MoveAssignmentOperator] C& C::operator=(C&&)
# 9| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] C &&
# 11| [CopyAssignmentOperator] C::S& C::S::operator=(C::S const public&)
# 11| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const S &
# 11| [MoveAssignmentOperator] C::S& C::S::operator=(C::S&&)
# 11| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] S &&
# 12| [CopyAssignmentOperator] C::U& C::U::operator=(C::U const public&)
# 12| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const U &
# 12| [MoveAssignmentOperator] C::U& C::U::operator=(C::U&&)
# 12| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] U &&
# 16| [CopyAssignmentOperator] U& U::operator=(U const&)
# 16| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const U &
# 16| [MoveAssignmentOperator] U& U::operator=(U&&)
# 16| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] U &&
# 17| [CopyAssignmentOperator] U::S& U::S::operator=(U::S const public&)
# 17| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const S &
# 17| [MoveAssignmentOperator] U::S& U::S::operator=(U::S&&)
# 17| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] S &&
# 18| [CopyAssignmentOperator] U::C& U::C::operator=(U::C const public&)
# 18| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const C &
# 18| [MoveAssignmentOperator] U::C& U::C::operator=(U::C&&)
# 18| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] C &&
# 22| [TopLevelFunction] int foo()
# 22| params:
@@ -1405,21 +1405,21 @@ union_etc.cpp:
# 28| ValueCategory = lvalue
# 31| [CopyAssignmentOperator] T& T::operator=(T const&)
# 31| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const T &
# 31| [MoveAssignmentOperator] T& T::operator=(T&&)
# 31| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] T &&
# 31| [Constructor] void T::T()
# 31| params:
# 31| [CopyConstructor] void T::T(T const&)
# 31| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const T &
# 31| [MoveConstructor] void T::T(T&&)
# 31| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] T &&
# 33| [VirtualFunction] void T::set_q(int)
# 33| params:

View File

@@ -1,14 +1,14 @@
| file://:0:0:0:0 | (unnamed parameter 0) | file://:0:0:0:0 | C && | Variable | <none> |
| file://:0:0:0:0 | (unnamed parameter 0) | file://:0:0:0:0 | C && | Variable | <none> |
| file://:0:0:0:0 | (unnamed parameter 0) | file://:0:0:0:0 | D && | Variable | <none> |
| file://:0:0:0:0 | (unnamed parameter 0) | file://:0:0:0:0 | __va_list_tag && | Variable | <none> |
| file://:0:0:0:0 | (unnamed parameter 0) | file://:0:0:0:0 | const C & | Variable | <none> |
| file://:0:0:0:0 | (unnamed parameter 0) | file://:0:0:0:0 | const C & | Variable | <none> |
| file://:0:0:0:0 | (unnamed parameter 0) | file://:0:0:0:0 | const D & | Variable | <none> |
| file://:0:0:0:0 | (unnamed parameter 0) | file://:0:0:0:0 | const __va_list_tag & | Variable | <none> |
| file://:0:0:0:0 | fp_offset | file://:0:0:0:0 | unsigned int | MemberVariable | __va_list_tag |
| file://:0:0:0:0 | gp_offset | file://:0:0:0:0 | unsigned int | MemberVariable | __va_list_tag |
| file://:0:0:0:0 | overflow_arg_area | file://:0:0:0:0 | void * | MemberVariable | __va_list_tag |
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | C && | Variable | <none> |
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | C && | Variable | <none> |
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | D && | Variable | <none> |
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | __va_list_tag && | Variable | <none> |
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | const C & | Variable | <none> |
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | const C & | Variable | <none> |
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | const D & | Variable | <none> |
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | const __va_list_tag & | Variable | <none> |
| file://:0:0:0:0 | reg_save_area | file://:0:0:0:0 | void * | MemberVariable | __va_list_tag |
| foo.h:7:5:7:15 | foo_defined | file://:0:0:0:0 | int | MemberVariable | C |
| foo.h:7:5:7:15 | foo_defined | file://:0:0:0:0 | int | Variable | <none> |

View File

@@ -1,7 +1,7 @@
| a.h:3:8:3:8 | x | x | true |
| file://:0:0:0:0 | (unnamed parameter 0) | (unnamed parameter 0) | false |
| file://:0:0:0:0 | (unnamed parameter 0) | (unnamed parameter 0) | false |
| file://:0:0:0:0 | fp_offset | fp_offset | false |
| file://:0:0:0:0 | gp_offset | gp_offset | false |
| file://:0:0:0:0 | overflow_arg_area | overflow_arg_area | false |
| file://:0:0:0:0 | p#0 | p#0 | false |
| file://:0:0:0:0 | p#0 | p#0 | false |
| file://:0:0:0:0 | reg_save_area | reg_save_area | false |

View File

@@ -26,10 +26,10 @@
| CPP-205.cpp:8:3:8:15 | return ... | |
| CPP-205.cpp:8:10:8:11 | call to fn | |
| CPP-205.cpp:8:13:8:13 | 0 | |
| file://:0:0:0:0 | (unnamed parameter 0) | parameter for __va_list_tag::operator=(__va_list_tag &&) -> __va_list_tag & |
| file://:0:0:0:0 | (unnamed parameter 0) | parameter for __va_list_tag::operator=(const __va_list_tag &) -> __va_list_tag & |
| file://:0:0:0:0 | __super | |
| file://:0:0:0:0 | __va_list_tag | |
| file://:0:0:0:0 | operator= | function __va_list_tag::operator=(__va_list_tag &&) -> __va_list_tag & |
| file://:0:0:0:0 | operator= | function __va_list_tag::operator=(const __va_list_tag &) -> __va_list_tag & |
| file://:0:0:0:0 | p#0 | parameter for __va_list_tag::operator=(__va_list_tag &&) -> __va_list_tag & |
| file://:0:0:0:0 | p#0 | parameter for __va_list_tag::operator=(const __va_list_tag &) -> __va_list_tag & |
| file://:0:0:0:0 | y | |

View File

@@ -1,3 +1,7 @@
| (unnamed parameter 0) | __va_list_tag && | rvalue reference to {struct __va_list_tag} |
| (unnamed parameter 0) | atomic_box<int> && | rvalue reference to {struct atomic_box<int>} |
| (unnamed parameter 0) | const __va_list_tag & | reference to {const {struct __va_list_tag}} |
| (unnamed parameter 0) | const atomic_box<int> & | reference to {const {struct atomic_box<int>}} |
| a | _Atomic(int) | atomic {int} |
| b | _Atomic(int) | atomic {int} |
| c | _Atomic(int) * | pointer to {atomic {int}} |
@@ -13,10 +17,6 @@
| k | _Atomic(int) *_Atomic | atomic {pointer to {atomic {int}}} |
| m | int | int |
| overflow_arg_area | void * | pointer to {void} |
| p#0 | __va_list_tag && | rvalue reference to {struct __va_list_tag} |
| p#0 | atomic_box<int> && | rvalue reference to {struct atomic_box<int>} |
| p#0 | const __va_list_tag & | reference to {const {struct __va_list_tag}} |
| p#0 | const atomic_box<int> & | reference to {const {struct atomic_box<int>}} |
| reg_save_area | void * | pointer to {void} |
| value | _Atomic(T) | atomic {T} |
| value | _Atomic(int) | atomic {int} |

View File

@@ -22,11 +22,11 @@
| blocks.cpp:43:29:43:29 | z | file://:0:0:0:0 | char | char |
| blocks.cpp:45:10:45:10 | c | file://:0:0:0:0 | char | char |
| blocks.cpp:55:7:55:10 | four | file://:0:0:0:0 | int | int |
| file://:0:0:0:0 | (unnamed parameter 0) | file://:0:0:0:0 | Example && | rvalue reference to {struct Example} |
| file://:0:0:0:0 | (unnamed parameter 0) | file://:0:0:0:0 | __va_list_tag && | rvalue reference to {struct __va_list_tag} |
| file://:0:0:0:0 | (unnamed parameter 0) | file://:0:0:0:0 | const Example & | reference to {const {struct Example}} |
| file://:0:0:0:0 | (unnamed parameter 0) | file://:0:0:0:0 | const __va_list_tag & | reference to {const {struct __va_list_tag}} |
| file://:0:0:0:0 | fp_offset | file://:0:0:0:0 | unsigned int | unsigned int |
| file://:0:0:0:0 | gp_offset | file://:0:0:0:0 | unsigned int | unsigned int |
| file://:0:0:0:0 | overflow_arg_area | file://:0:0:0:0 | void * | pointer to {void} |
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | Example && | rvalue reference to {struct Example} |
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | __va_list_tag && | rvalue reference to {struct __va_list_tag} |
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | const Example & | reference to {const {struct Example}} |
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | const __va_list_tag & | reference to {const {struct __va_list_tag}} |
| file://:0:0:0:0 | reg_save_area | file://:0:0:0:0 | void * | pointer to {void} |

View File

@@ -1,5 +1,5 @@
| ODASA-5692.cpp:11:10:11:14 | p#0 | ODASA-5692.cpp:11:18:13:3 | { ... } |
| ODASA-5692.cpp:11:10:11:14 | p#0 | ODASA-5692.cpp:11:18:13:3 | { ... } |
| ODASA-5692.cpp:11:10:11:14 | (unnamed parameter 0) | ODASA-5692.cpp:11:18:13:3 | { ... } |
| ODASA-5692.cpp:11:10:11:14 | (unnamed parameter 0) | ODASA-5692.cpp:11:18:13:3 | { ... } |
| exceptions.cpp:28:20:28:20 | e | exceptions.cpp:28:23:30:9 | { ... } |
| exceptions.cpp:32:16:32:16 | e | exceptions.cpp:32:19:34:5 | { ... } |
| exceptions.cpp:35:16:35:16 | e | exceptions.cpp:35:19:37:5 | { ... } |

View File

@@ -1,7 +1,7 @@
| ODASA-5692.cpp:11:18:13:3 | <handler> | getBlock | ODASA-5692.cpp:11:18:13:3 | { ... } |
| ODASA-5692.cpp:11:18:13:3 | <handler> | getBlock | ODASA-5692.cpp:11:18:13:3 | { ... } |
| ODASA-5692.cpp:11:18:13:3 | <handler> | getParameter | ODASA-5692.cpp:11:10:11:14 | p#0 |
| ODASA-5692.cpp:11:18:13:3 | <handler> | getParameter | ODASA-5692.cpp:11:10:11:14 | p#0 |
| ODASA-5692.cpp:11:18:13:3 | <handler> | getParameter | ODASA-5692.cpp:11:10:11:14 | (unnamed parameter 0) |
| ODASA-5692.cpp:11:18:13:3 | <handler> | getParameter | ODASA-5692.cpp:11:10:11:14 | (unnamed parameter 0) |
| ODASA-5692.cpp:11:18:13:3 | <handler> | getTryStmt | ODASA-5692.cpp:9:3:10:3 | try { ... } |
| ODASA-5692.cpp:11:18:13:3 | <handler> | getTryStmt | ODASA-5692.cpp:9:3:10:3 | try { ... } |
| ODASA-5692.cpp:11:18:13:3 | <handler> | getTryStmt.getACatchClause() | ODASA-5692.cpp:11:18:13:3 | { ... } |

View File

@@ -1,6 +1,6 @@
| c89.c:1:12:1:19 | restrict | restrict |
| c99.c:2:7:2:10 | p#0 | p#0 |
| c99.c:2:23:2:26 | p#1 | p#1 |
| c99.c:2:7:2:10 | (unnamed parameter 0) | (unnamed parameter 0) |
| c99.c:2:23:2:26 | (unnamed parameter 1) | (unnamed parameter 1) |
| file://:0:0:0:0 | fp_offset | fp_offset |
| file://:0:0:0:0 | gp_offset | gp_offset |
| file://:0:0:0:0 | overflow_arg_area | overflow_arg_area |

View File

@@ -27,6 +27,10 @@
| clang_ms.cpp:18:1:18:31 | #pragma |
| file://:0:0:0:0 | |
| file://:0:0:0:0 | (global namespace) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | _Complex __float128 |
| file://:0:0:0:0 | _Complex double |
| file://:0:0:0:0 | _Complex float |
@@ -112,10 +116,6 @@
| file://:0:0:0:0 | optional |
| file://:0:0:0:0 | overflow_arg_area |
| file://:0:0:0:0 | override |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | private |
| file://:0:0:0:0 | protected |
| file://:0:0:0:0 | public |

View File

@@ -1,5 +1,7 @@
| file://:0:0:0:0 | |
| file://:0:0:0:0 | (global namespace) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| 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 |
@@ -84,8 +86,6 @@
| file://:0:0:0:0 | optional |
| file://:0:0:0:0 | overflow_arg_area |
| file://:0:0:0:0 | override |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | private |
| file://:0:0:0:0 | protected |
| file://:0:0:0:0 | public |

View File

@@ -1,8 +1,8 @@
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | <error> |
| file://:0:0:0:0 | fp_offset |
| file://:0:0:0:0 | gp_offset |
| file://:0:0:0:0 | overflow_arg_area |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | reg_save_area |
| test.cpp:3:12:3:12 | <error> |

View File

@@ -1,8 +1,8 @@
| a-source.cpp:2:6:2:7 | b1 | file://:0:0:0:0 | bool |
| c-source.c:4:6:4:7 | b2 | file://:0:0:0:0 | unsigned char |
| file://:0:0:0:0 | (unnamed parameter 0) | file://:0:0:0:0 | __va_list_tag & |
| file://:0:0:0:0 | (unnamed parameter 0) | file://:0:0:0:0 | __va_list_tag && |
| file://:0:0:0:0 | fp_offset | file://:0:0:0:0 | unsigned int |
| file://:0:0:0:0 | gp_offset | file://:0:0:0:0 | unsigned int |
| file://:0:0:0:0 | overflow_arg_area | file://:0:0:0:0 | void * |
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | __va_list_tag & |
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | __va_list_tag && |
| file://:0:0:0:0 | reg_save_area | file://:0:0:0:0 | void * |

View File

@@ -1,7 +1,7 @@
| a-source.cpp:2:9:2:9 | s |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | fp_offset |
| file://:0:0:0:0 | gp_offset |
| file://:0:0:0:0 | overflow_arg_area |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | reg_save_area |

View File

@@ -23,7 +23,7 @@
| defaulttainttracking.cpp:22:20:22:25 | call to getenv | shared.h:5:23:5:31 | sinkparam |
| defaulttainttracking.cpp:22:20:22:25 | call to getenv | shared.h:10:38:10:39 | s2 |
| defaulttainttracking.cpp:38:25:38:30 | call to getenv | defaulttainttracking.cpp:31:40:31:53 | dotted_address |
| defaulttainttracking.cpp:38:25:38:30 | call to getenv | defaulttainttracking.cpp:32:11:32:26 | p#0 |
| defaulttainttracking.cpp:38:25:38:30 | call to getenv | defaulttainttracking.cpp:32:11:32:26 | (unnamed parameter 0) |
| defaulttainttracking.cpp:38:25:38:30 | call to getenv | defaulttainttracking.cpp:38:11:38:21 | env_pointer |
| defaulttainttracking.cpp:38:25:38:30 | call to getenv | defaulttainttracking.cpp:38:25:38:30 | call to getenv |
| defaulttainttracking.cpp:38:25:38:30 | call to getenv | defaulttainttracking.cpp:38:25:38:37 | (void *)... |
@@ -32,7 +32,7 @@
| defaulttainttracking.cpp:38:25:38:30 | call to getenv | defaulttainttracking.cpp:39:36:39:61 | (const char *)... |
| defaulttainttracking.cpp:38:25:38:30 | call to getenv | defaulttainttracking.cpp:39:50:39:61 | & ... |
| defaulttainttracking.cpp:38:25:38:30 | call to getenv | defaulttainttracking.cpp:40:10:40:10 | a |
| defaulttainttracking.cpp:64:10:64:15 | call to getenv | defaulttainttracking.cpp:45:20:45:29 | p#0 |
| defaulttainttracking.cpp:64:10:64:15 | call to getenv | defaulttainttracking.cpp:45:20:45:29 | (unnamed parameter 0) |
| defaulttainttracking.cpp:64:10:64:15 | call to getenv | defaulttainttracking.cpp:52:24:52:24 | p |
| defaulttainttracking.cpp:64:10:64:15 | call to getenv | defaulttainttracking.cpp:57:24:57:24 | p |
| defaulttainttracking.cpp:64:10:64:15 | call to getenv | defaulttainttracking.cpp:58:14:58:14 | p |
@@ -63,7 +63,7 @@
| defaulttainttracking.cpp:69:33:69:38 | call to getenv | defaulttainttracking.cpp:69:33:69:38 | call to getenv |
| defaulttainttracking.cpp:69:33:69:38 | call to getenv | defaulttainttracking.cpp:69:33:69:45 | (const char *)... |
| defaulttainttracking.cpp:69:33:69:38 | call to getenv | shared.h:5:23:5:31 | sinkparam |
| defaulttainttracking.cpp:72:11:72:16 | call to getenv | defaulttainttracking.cpp:45:20:45:29 | p#0 |
| defaulttainttracking.cpp:72:11:72:16 | call to getenv | defaulttainttracking.cpp:45:20:45:29 | (unnamed parameter 0) |
| defaulttainttracking.cpp:72:11:72:16 | call to getenv | defaulttainttracking.cpp:52:24:52:24 | p |
| defaulttainttracking.cpp:72:11:72:16 | call to getenv | defaulttainttracking.cpp:72:11:72:16 | call to getenv |
| defaulttainttracking.cpp:72:11:72:16 | call to getenv | defaulttainttracking.cpp:72:11:72:23 | (const char *)... |
@@ -174,8 +174,8 @@
| globals.cpp:23:15:23:20 | call to getenv | globals.cpp:23:15:23:20 | call to getenv |
| stl.cpp:62:25:62:30 | call to getenv | shared.h:5:23:5:31 | sinkparam |
| stl.cpp:62:25:62:30 | call to getenv | stl.cpp:21:29:21:29 | s |
| stl.cpp:62:25:62:30 | call to getenv | stl.cpp:43:78:43:104 | p#0 |
| stl.cpp:62:25:62:30 | call to getenv | stl.cpp:43:114:43:118 | p#1 |
| stl.cpp:62:25:62:30 | call to getenv | stl.cpp:43:78:43:104 | (unnamed parameter 0) |
| stl.cpp:62:25:62:30 | call to getenv | stl.cpp:43:114:43:118 | (unnamed parameter 1) |
| stl.cpp:62:25:62:30 | call to getenv | stl.cpp:62:25:62:30 | call to getenv |
| stl.cpp:62:25:62:30 | call to getenv | stl.cpp:64:36:64:36 | s |
| stl.cpp:62:25:62:30 | call to getenv | stl.cpp:68:8:68:8 | a |
@@ -271,19 +271,19 @@
| test_diff.cpp:104:12:104:15 | argv | test_diff.cpp:104:12:104:15 | argv |
| test_diff.cpp:104:12:104:15 | argv | test_diff.cpp:104:12:104:19 | ... + ... |
| test_diff.cpp:108:10:108:13 | argv | shared.h:5:23:5:31 | sinkparam |
| test_diff.cpp:108:10:108:13 | argv | test_diff.cpp:24:20:24:29 | p#0 |
| test_diff.cpp:108:10:108:13 | argv | test_diff.cpp:24:20:24:29 | (unnamed parameter 0) |
| test_diff.cpp:108:10:108:13 | argv | test_diff.cpp:29:24:29:24 | p |
| test_diff.cpp:108:10:108:13 | argv | test_diff.cpp:30:14:30:14 | p |
| test_diff.cpp:108:10:108:13 | argv | test_diff.cpp:108:10:108:13 | argv |
| test_diff.cpp:108:10:108:13 | argv | test_diff.cpp:108:10:108:16 | (const char *)... |
| test_diff.cpp:108:10:108:13 | argv | test_diff.cpp:108:10:108:16 | access to array |
| test_diff.cpp:111:10:111:13 | argv | test_diff.cpp:24:20:24:29 | p#0 |
| test_diff.cpp:111:10:111:13 | argv | test_diff.cpp:24:20:24:29 | (unnamed parameter 0) |
| test_diff.cpp:111:10:111:13 | argv | test_diff.cpp:36:24:36:24 | p |
| test_diff.cpp:111:10:111:13 | argv | test_diff.cpp:111:10:111:13 | argv |
| test_diff.cpp:111:10:111:13 | argv | test_diff.cpp:111:10:111:16 | (const char *)... |
| test_diff.cpp:111:10:111:13 | argv | test_diff.cpp:111:10:111:16 | access to array |
| test_diff.cpp:115:11:115:14 | argv | shared.h:5:23:5:31 | sinkparam |
| test_diff.cpp:115:11:115:14 | argv | test_diff.cpp:24:20:24:29 | p#0 |
| test_diff.cpp:115:11:115:14 | argv | test_diff.cpp:24:20:24:29 | (unnamed parameter 0) |
| test_diff.cpp:115:11:115:14 | argv | test_diff.cpp:41:24:41:24 | p |
| test_diff.cpp:115:11:115:14 | argv | test_diff.cpp:42:14:42:14 | p |
| test_diff.cpp:115:11:115:14 | argv | test_diff.cpp:52:24:52:24 | p |
@@ -306,7 +306,7 @@
| test_diff.cpp:121:23:121:26 | argv | test_diff.cpp:121:23:121:29 | (const char *)... |
| test_diff.cpp:121:23:121:26 | argv | test_diff.cpp:121:23:121:29 | access to array |
| test_diff.cpp:124:19:124:22 | argv | shared.h:5:23:5:31 | sinkparam |
| test_diff.cpp:124:19:124:22 | argv | test_diff.cpp:24:20:24:29 | p#0 |
| test_diff.cpp:124:19:124:22 | argv | test_diff.cpp:24:20:24:29 | (unnamed parameter 0) |
| test_diff.cpp:124:19:124:22 | argv | test_diff.cpp:76:24:76:24 | p |
| test_diff.cpp:124:19:124:22 | argv | test_diff.cpp:81:24:81:24 | p |
| test_diff.cpp:124:19:124:22 | argv | test_diff.cpp:82:14:82:14 | p |

View File

@@ -38,7 +38,7 @@
| defaulttainttracking.cpp:208:27:208:32 | call to getenv | defaulttainttracking.cpp:208:23:208:23 | x | AST only |
| globals.cpp:13:15:13:20 | call to getenv | globals.cpp:13:5:13:11 | global1 | AST only |
| globals.cpp:23:15:23:20 | call to getenv | globals.cpp:23:5:23:11 | global2 | AST only |
| stl.cpp:62:25:62:30 | call to getenv | stl.cpp:43:78:43:104 | p#0 | IR only |
| stl.cpp:62:25:62:30 | call to getenv | stl.cpp:43:78:43:104 | (unnamed parameter 0) | IR only |
| stl.cpp:62:25:62:30 | call to getenv | stl.cpp:62:7:62:12 | source | AST only |
| stl.cpp:62:25:62:30 | call to getenv | stl.cpp:64:36:64:36 | s | IR only |
| stl.cpp:62:25:62:30 | call to getenv | stl.cpp:70:16:70:24 | call to basic_string | IR only |

View File

@@ -1,20 +1,20 @@
uniqueEnclosingCallable
uniqueType
uniqueNodeLocation
| BarrierGuard.cpp:2:11:2:13 | p#0 | Node should have one location but has 6. |
| acrossLinkTargets.cpp:2:11:2:13 | p#0 | Node should have one location but has 6. |
| clang.cpp:4:11:4:13 | p#0 | Node should have one location but has 6. |
| clang.cpp:4:27:4:35 | p#0 | Node should have one location but has 2. |
| clang.cpp:4:51:4:53 | p#0 | Node should have one location but has 2. |
| dispatch.cpp:2:11:2:13 | p#0 | Node should have one location but has 6. |
| file://:0:0:0:0 | p#0 | Node should have one location but has 0. |
| file://:0:0:0:0 | p#0 | Node should have one location but has 0. |
| file://:0:0:0:0 | p#0 | Node should have one location but has 0. |
| file://:0:0:0:0 | p#0 | Node should have one location but has 0. |
| globals.cpp:2:11:2:13 | p#0 | Node should have one location but has 6. |
| test.cpp:2:11:2:13 | p#0 | Node should have one location but has 6. |
| test.cpp:2:27:2:35 | p#0 | Node should have one location but has 2. |
| test.cpp:2:51:2:53 | p#0 | Node should have one location but has 2. |
| BarrierGuard.cpp:2:11:2:13 | (unnamed parameter 0) | Node should have one location but has 6. |
| acrossLinkTargets.cpp:2:11:2:13 | (unnamed parameter 0) | Node should have one location but has 6. |
| clang.cpp:4:11:4:13 | (unnamed parameter 0) | Node should have one location but has 6. |
| clang.cpp:4:27:4:35 | (unnamed parameter 0) | Node should have one location but has 2. |
| clang.cpp:4:51:4:53 | (unnamed parameter 0) | Node should have one location but has 2. |
| dispatch.cpp:2:11:2:13 | (unnamed parameter 0) | Node should have one location but has 6. |
| file://:0:0:0:0 | (unnamed parameter 0) | Node should have one location but has 0. |
| file://:0:0:0:0 | (unnamed parameter 0) | Node should have one location but has 0. |
| file://:0:0:0:0 | (unnamed parameter 0) | Node should have one location but has 0. |
| file://:0:0:0:0 | (unnamed parameter 0) | Node should have one location but has 0. |
| globals.cpp:2:11:2:13 | (unnamed parameter 0) | Node should have one location but has 6. |
| test.cpp:2:11:2:13 | (unnamed parameter 0) | Node should have one location but has 6. |
| test.cpp:2:27:2:35 | (unnamed parameter 0) | Node should have one location but has 2. |
| test.cpp:2:51:2:53 | (unnamed parameter 0) | Node should have one location but has 2. |
missingLocation
| Nodes without location: 4 |
uniqueNodeToString

View File

@@ -39,17 +39,8 @@ void sink(int x)
void bar(Outer &b)
{
// The library correctly finds that the four `user_input` sources can make it
// to the `sink` calls, but it also finds some source/sink combinations that
// are impossible. Those false positives here are a consequence of how the
// shared data flow library overapproximates field flow. The library only
// tracks the final two fields (`f` and `inner`) and the length (3) of the field
// access path, and then it tracks that both `a_` and `b_` have followed `f.inner`
// in _some_ access path somewhere in the search. That makes the library conclude
// that there could be flow to `b.inner.f.a_` even when the flow was actually to
// `b.inner.f.b_`.
sink(b.inner.f.a()); // $ast=62:19 $f+:ast=63:19 $ast=64:19 $f+:ast=65:19 $ir=62:19 $f+:ir=63:19 $ir=64:19 $f+:ir=65:19
sink(b.inner.f.b()); // $f+:ast=62:19 $ast=63:19 $f+:ast=64:19 $ast=65:19 $f+:ir=62:19 $ir=63:19 $f+:ir=64:19 $ir=65:19
sink(b.inner.f.a()); // $ast=53:19 $ast=55:19 $ir=53:19 $ir=55:19
sink(b.inner.f.b()); // $ast=54:19 $ast=56:19 $ir=54:19 $ir=56:19
}
void foo()

View File

@@ -1,10 +1,10 @@
uniqueEnclosingCallable
uniqueType
uniqueNodeLocation
| file://:0:0:0:0 | p#0 | Node should have one location but has 0. |
| file://:0:0:0:0 | p#0 | Node should have one location but has 0. |
| file://:0:0:0:0 | p#0 | Node should have one location but has 0. |
| file://:0:0:0:0 | p#0 | Node should have one location but has 0. |
| file://:0:0:0:0 | (unnamed parameter 0) | Node should have one location but has 0. |
| file://:0:0:0:0 | (unnamed parameter 0) | Node should have one location but has 0. |
| file://:0:0:0:0 | (unnamed parameter 0) | Node should have one location but has 0. |
| file://:0:0:0:0 | (unnamed parameter 0) | Node should have one location but has 0. |
missingLocation
| Nodes without location: 4 |
uniqueNodeToString

View File

@@ -34,10 +34,6 @@
| by_reference.cpp:84:14:84:23 | call to user_input | by_reference.cpp:115:27:115:27 | a | AST only |
| by_reference.cpp:88:13:88:22 | call to user_input | by_reference.cpp:131:25:131:25 | a | AST only |
| by_reference.cpp:88:13:88:22 | call to user_input | by_reference.cpp:135:27:135:27 | a | AST only |
| complex.cpp:62:19:62:28 | call to user_input | complex.cpp:52:18:52:18 | call to b | AST only |
| complex.cpp:63:19:63:28 | call to user_input | complex.cpp:51:18:51:18 | call to a | AST only |
| complex.cpp:64:19:64:28 | call to user_input | complex.cpp:52:18:52:18 | call to b | AST only |
| complex.cpp:65:19:65:28 | call to user_input | complex.cpp:51:18:51:18 | call to a | AST only |
| qualifiers.cpp:22:27:22:36 | call to user_input | qualifiers.cpp:23:23:23:23 | a | AST only |
| qualifiers.cpp:27:28:27:37 | call to user_input | qualifiers.cpp:28:23:28:23 | a | AST only |
| qualifiers.cpp:32:35:32:44 | call to user_input | qualifiers.cpp:33:23:33:23 | a | AST only |

View File

@@ -1,4 +0,0 @@
| complex.cpp:51:24:51:121 | // $ast=62:19 $f+:ast=63:19 $ast=64:19 $f+:ast=65:19 $ir=62:19 $f+:ir=63:19 $ir=64:19 $f+:ir=65:19 | Fixed false positive:ir=63:19 |
| complex.cpp:51:24:51:121 | // $ast=62:19 $f+:ast=63:19 $ast=64:19 $f+:ast=65:19 $ir=62:19 $f+:ir=63:19 $ir=64:19 $f+:ir=65:19 | Fixed false positive:ir=65:19 |
| complex.cpp:52:24:52:121 | // $f+:ast=62:19 $ast=63:19 $f+:ast=64:19 $ast=65:19 $f+:ir=62:19 $ir=63:19 $f+:ir=64:19 $ir=65:19 | Fixed false positive:ir=62:19 |
| complex.cpp:52:24:52:121 | // $f+:ast=62:19 $ast=63:19 $f+:ast=64:19 $ast=65:19 $f+:ir=62:19 $ir=63:19 $f+:ir=64:19 $ir=65:19 | Fixed false positive:ir=64:19 |

View File

@@ -140,20 +140,20 @@ edges
| by_reference.cpp:128:15:128:23 | Chi | by_reference.cpp:128:15:128:23 | Chi [a] |
| by_reference.cpp:128:15:128:23 | Chi [a] | by_reference.cpp:136:16:136:16 | a |
| by_reference.cpp:128:15:128:23 | taint_a_ref output argument [array content] | by_reference.cpp:128:15:128:23 | Chi |
| complex.cpp:40:17:40:17 | *b [a_] | complex.cpp:51:18:51:18 | call to a |
| complex.cpp:40:17:40:17 | *b [b_] | complex.cpp:51:16:51:16 | a output argument [b_] |
| complex.cpp:40:17:40:17 | *b [b_] | complex.cpp:52:18:52:18 | call to b |
| complex.cpp:51:16:51:16 | a output argument [b_] | complex.cpp:52:18:52:18 | call to b |
| complex.cpp:62:12:62:12 | setA output argument [a_] | complex.cpp:40:17:40:17 | *b [a_] |
| complex.cpp:62:19:62:28 | call to user_input | complex.cpp:62:12:62:12 | setA output argument [a_] |
| complex.cpp:63:12:63:12 | setB output argument [b_] | complex.cpp:40:17:40:17 | *b [b_] |
| complex.cpp:63:19:63:28 | call to user_input | complex.cpp:63:12:63:12 | setB output argument [b_] |
| complex.cpp:64:12:64:12 | setA output argument [a_] | complex.cpp:40:17:40:17 | *b [a_] |
| complex.cpp:64:12:64:12 | setA output argument [a_] | complex.cpp:65:12:65:12 | setB output argument [a_] |
| complex.cpp:64:19:64:28 | call to user_input | complex.cpp:64:12:64:12 | setA output argument [a_] |
| complex.cpp:65:12:65:12 | setB output argument [a_] | complex.cpp:40:17:40:17 | *b [a_] |
| complex.cpp:65:12:65:12 | setB output argument [b_] | complex.cpp:40:17:40:17 | *b [b_] |
| complex.cpp:65:19:65:28 | call to user_input | complex.cpp:65:12:65:12 | setB output argument [b_] |
| complex.cpp:40:17:40:17 | *b [a_] | complex.cpp:42:18:42:18 | call to a |
| complex.cpp:40:17:40:17 | *b [b_] | complex.cpp:42:16:42:16 | a output argument [b_] |
| complex.cpp:40:17:40:17 | *b [b_] | complex.cpp:43:18:43:18 | call to b |
| complex.cpp:42:16:42:16 | a output argument [b_] | complex.cpp:43:18:43:18 | call to b |
| complex.cpp:53:12:53:12 | setA output argument [a_] | complex.cpp:40:17:40:17 | *b [a_] |
| complex.cpp:53:19:53:28 | call to user_input | complex.cpp:53:12:53:12 | setA output argument [a_] |
| complex.cpp:54:12:54:12 | setB output argument [b_] | complex.cpp:40:17:40:17 | *b [b_] |
| complex.cpp:54:19:54:28 | call to user_input | complex.cpp:54:12:54:12 | setB output argument [b_] |
| complex.cpp:55:12:55:12 | setA output argument [a_] | complex.cpp:40:17:40:17 | *b [a_] |
| complex.cpp:55:12:55:12 | setA output argument [a_] | complex.cpp:56:12:56:12 | setB output argument [a_] |
| complex.cpp:55:19:55:28 | call to user_input | complex.cpp:55:12:55:12 | setA output argument [a_] |
| complex.cpp:56:12:56:12 | setB output argument [a_] | complex.cpp:40:17:40:17 | *b [a_] |
| complex.cpp:56:12:56:12 | setB output argument [b_] | complex.cpp:40:17:40:17 | *b [b_] |
| complex.cpp:56:19:56:28 | call to user_input | complex.cpp:56:12:56:12 | setB output argument [b_] |
| constructors.cpp:26:15:26:15 | *f [a_] | constructors.cpp:28:12:28:12 | call to a |
| constructors.cpp:26:15:26:15 | *f [b_] | constructors.cpp:28:10:28:10 | a output argument [b_] |
| constructors.cpp:26:15:26:15 | *f [b_] | constructors.cpp:29:12:29:12 | call to b |
@@ -371,18 +371,18 @@ nodes
| by_reference.cpp:136:16:136:16 | a | semmle.label | a |
| complex.cpp:40:17:40:17 | *b [a_] | semmle.label | *b [a_] |
| complex.cpp:40:17:40:17 | *b [b_] | semmle.label | *b [b_] |
| complex.cpp:51:16:51:16 | a output argument [b_] | semmle.label | a output argument [b_] |
| complex.cpp:51:18:51:18 | call to a | semmle.label | call to a |
| complex.cpp:52:18:52:18 | call to b | semmle.label | call to b |
| complex.cpp:62:12:62:12 | setA output argument [a_] | semmle.label | setA output argument [a_] |
| complex.cpp:62:19:62:28 | call to user_input | semmle.label | call to user_input |
| complex.cpp:63:12:63:12 | setB output argument [b_] | semmle.label | setB output argument [b_] |
| complex.cpp:63:19:63:28 | call to user_input | semmle.label | call to user_input |
| complex.cpp:64:12:64:12 | setA output argument [a_] | semmle.label | setA output argument [a_] |
| complex.cpp:64:19:64:28 | call to user_input | semmle.label | call to user_input |
| complex.cpp:65:12:65:12 | setB output argument [a_] | semmle.label | setB output argument [a_] |
| complex.cpp:65:12:65:12 | setB output argument [b_] | semmle.label | setB output argument [b_] |
| complex.cpp:65:19:65:28 | call to user_input | semmle.label | call to user_input |
| complex.cpp:42:16:42:16 | a output argument [b_] | semmle.label | a output argument [b_] |
| complex.cpp:42:18:42:18 | call to a | semmle.label | call to a |
| complex.cpp:43:18:43:18 | call to b | semmle.label | call to b |
| complex.cpp:53:12:53:12 | setA output argument [a_] | semmle.label | setA output argument [a_] |
| complex.cpp:53:19:53:28 | call to user_input | semmle.label | call to user_input |
| complex.cpp:54:12:54:12 | setB output argument [b_] | semmle.label | setB output argument [b_] |
| complex.cpp:54:19:54:28 | call to user_input | semmle.label | call to user_input |
| complex.cpp:55:12:55:12 | setA output argument [a_] | semmle.label | setA output argument [a_] |
| complex.cpp:55:19:55:28 | call to user_input | semmle.label | call to user_input |
| complex.cpp:56:12:56:12 | setB output argument [a_] | semmle.label | setB output argument [a_] |
| complex.cpp:56:12:56:12 | setB output argument [b_] | semmle.label | setB output argument [b_] |
| complex.cpp:56:19:56:28 | call to user_input | semmle.label | call to user_input |
| constructors.cpp:26:15:26:15 | *f [a_] | semmle.label | *f [a_] |
| constructors.cpp:26:15:26:15 | *f [b_] | semmle.label | *f [b_] |
| constructors.cpp:28:10:28:10 | a output argument [b_] | semmle.label | a output argument [b_] |
@@ -478,10 +478,10 @@ nodes
| by_reference.cpp:132:14:132:14 | a | by_reference.cpp:96:8:96:17 | call to user_input | by_reference.cpp:132:14:132:14 | a | a flows from $@ | by_reference.cpp:96:8:96:17 | call to user_input | call to user_input |
| by_reference.cpp:134:29:134:29 | a | by_reference.cpp:88:13:88:22 | call to user_input | by_reference.cpp:134:29:134:29 | a | a flows from $@ | by_reference.cpp:88:13:88:22 | call to user_input | call to user_input |
| by_reference.cpp:136:16:136:16 | a | by_reference.cpp:96:8:96:17 | call to user_input | by_reference.cpp:136:16:136:16 | a | a flows from $@ | by_reference.cpp:96:8:96:17 | call to user_input | call to user_input |
| complex.cpp:51:18:51:18 | call to a | complex.cpp:62:19:62:28 | call to user_input | complex.cpp:51:18:51:18 | call to a | call to a flows from $@ | complex.cpp:62:19:62:28 | call to user_input | call to user_input |
| complex.cpp:51:18:51:18 | call to a | complex.cpp:64:19:64:28 | call to user_input | complex.cpp:51:18:51:18 | call to a | call to a flows from $@ | complex.cpp:64:19:64:28 | call to user_input | call to user_input |
| complex.cpp:52:18:52:18 | call to b | complex.cpp:63:19:63:28 | call to user_input | complex.cpp:52:18:52:18 | call to b | call to b flows from $@ | complex.cpp:63:19:63:28 | call to user_input | call to user_input |
| complex.cpp:52:18:52:18 | call to b | complex.cpp:65:19:65:28 | call to user_input | complex.cpp:52:18:52:18 | call to b | call to b flows from $@ | complex.cpp:65:19:65:28 | call to user_input | call to user_input |
| complex.cpp:42:18:42:18 | call to a | complex.cpp:53:19:53:28 | call to user_input | complex.cpp:42:18:42:18 | call to a | call to a flows from $@ | complex.cpp:53:19:53:28 | call to user_input | call to user_input |
| complex.cpp:42:18:42:18 | call to a | complex.cpp:55:19:55:28 | call to user_input | complex.cpp:42:18:42:18 | call to a | call to a flows from $@ | complex.cpp:55:19:55:28 | call to user_input | call to user_input |
| complex.cpp:43:18:43:18 | call to b | complex.cpp:54:19:54:28 | call to user_input | complex.cpp:43:18:43:18 | call to b | call to b flows from $@ | complex.cpp:54:19:54:28 | call to user_input | call to user_input |
| complex.cpp:43:18:43:18 | call to b | complex.cpp:56:19:56:28 | call to user_input | complex.cpp:43:18:43:18 | call to b | call to b flows from $@ | complex.cpp:56:19:56:28 | call to user_input | call to user_input |
| constructors.cpp:28:12:28:12 | call to a | constructors.cpp:34:11:34:20 | call to user_input | constructors.cpp:28:12:28:12 | call to a | call to a flows from $@ | constructors.cpp:34:11:34:20 | call to user_input | call to user_input |
| constructors.cpp:28:12:28:12 | call to a | constructors.cpp:36:11:36:20 | call to user_input | constructors.cpp:28:12:28:12 | call to a | call to a flows from $@ | constructors.cpp:36:11:36:20 | call to user_input | call to user_input |
| constructors.cpp:29:12:29:12 | call to b | constructors.cpp:35:14:35:23 | call to user_input | constructors.cpp:29:12:29:12 | call to b | call to b flows from $@ | constructors.cpp:35:14:35:23 | call to user_input | call to user_input |

View File

@@ -293,28 +293,28 @@
| by_reference.cpp:136:16:136:16 | a | AST only |
| complex.cpp:11:22:11:23 | a_ | AST only |
| complex.cpp:12:22:12:23 | b_ | AST only |
| complex.cpp:51:8:51:8 | b | AST only |
| complex.cpp:51:10:51:14 | inner | AST only |
| complex.cpp:51:16:51:16 | f | AST only |
| complex.cpp:52:8:52:8 | b | AST only |
| complex.cpp:52:10:52:14 | inner | AST only |
| complex.cpp:52:16:52:16 | f | AST only |
| complex.cpp:62:3:62:4 | b1 | AST only |
| complex.cpp:62:6:62:10 | inner | AST only |
| complex.cpp:62:12:62:12 | f | AST only |
| complex.cpp:63:3:63:4 | b2 | AST only |
| complex.cpp:63:6:63:10 | inner | AST only |
| complex.cpp:63:12:63:12 | f | AST only |
| complex.cpp:64:3:64:4 | b3 | AST only |
| complex.cpp:64:6:64:10 | inner | AST only |
| complex.cpp:64:12:64:12 | f | AST only |
| complex.cpp:65:3:65:4 | b3 | AST only |
| complex.cpp:65:6:65:10 | inner | AST only |
| complex.cpp:65:12:65:12 | f | AST only |
| complex.cpp:68:7:68:8 | b1 | AST only |
| complex.cpp:71:7:71:8 | b2 | AST only |
| complex.cpp:74:7:74:8 | b3 | AST only |
| complex.cpp:77:7:77:8 | b4 | AST only |
| complex.cpp:42:8:42:8 | b | AST only |
| complex.cpp:42:10:42:14 | inner | AST only |
| complex.cpp:42:16:42:16 | f | AST only |
| complex.cpp:43:8:43:8 | b | AST only |
| complex.cpp:43:10:43:14 | inner | AST only |
| complex.cpp:43:16:43:16 | f | AST only |
| complex.cpp:53:3:53:4 | b1 | AST only |
| complex.cpp:53:6:53:10 | inner | AST only |
| complex.cpp:53:12:53:12 | f | AST only |
| complex.cpp:54:3:54:4 | b2 | AST only |
| complex.cpp:54:6:54:10 | inner | AST only |
| complex.cpp:54:12:54:12 | f | AST only |
| complex.cpp:55:3:55:4 | b3 | AST only |
| complex.cpp:55:6:55:10 | inner | AST only |
| complex.cpp:55:12:55:12 | f | AST only |
| complex.cpp:56:3:56:4 | b3 | AST only |
| complex.cpp:56:6:56:10 | inner | AST only |
| complex.cpp:56:12:56:12 | f | AST only |
| complex.cpp:59:7:59:8 | b1 | AST only |
| complex.cpp:62:7:62:8 | b2 | AST only |
| complex.cpp:65:7:65:8 | b3 | AST only |
| complex.cpp:68:7:68:8 | b4 | AST only |
| constructors.cpp:20:24:20:25 | a_ | AST only |
| constructors.cpp:21:24:21:25 | b_ | AST only |
| constructors.cpp:28:10:28:10 | f | AST only |

View File

@@ -344,28 +344,28 @@
| 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 |
| complex.cpp:52:8:52:8 | b |
| complex.cpp:52:10:52:14 | inner |
| complex.cpp:52:16:52:16 | f |
| complex.cpp:62:3:62:4 | b1 |
| complex.cpp:62:6:62:10 | inner |
| complex.cpp:62:12:62:12 | f |
| complex.cpp:63:3:63:4 | b2 |
| complex.cpp:63:6:63:10 | inner |
| complex.cpp:63:12:63:12 | f |
| complex.cpp:64:3:64:4 | b3 |
| complex.cpp:64:6:64:10 | inner |
| complex.cpp:64:12:64:12 | f |
| complex.cpp:65:3:65:4 | b3 |
| complex.cpp:65:6:65:10 | inner |
| complex.cpp:65:12:65:12 | f |
| complex.cpp:68:7:68:8 | b1 |
| complex.cpp:71:7:71:8 | b2 |
| complex.cpp:74:7:74:8 | b3 |
| complex.cpp:77:7:77:8 | b4 |
| complex.cpp:42:8:42:8 | b |
| complex.cpp:42:10:42:14 | inner |
| complex.cpp:42:16:42:16 | f |
| complex.cpp:43:8:43:8 | b |
| complex.cpp:43:10:43:14 | inner |
| complex.cpp:43:16:43:16 | f |
| complex.cpp:53:3:53:4 | b1 |
| complex.cpp:53:6:53:10 | inner |
| complex.cpp:53:12:53:12 | f |
| complex.cpp:54:3:54:4 | b2 |
| complex.cpp:54:6:54:10 | inner |
| complex.cpp:54:12:54:12 | f |
| complex.cpp:55:3:55:4 | b3 |
| complex.cpp:55:6:55:10 | inner |
| complex.cpp:55:12:55:12 | f |
| complex.cpp:56:3:56:4 | b3 |
| complex.cpp:56:6:56:10 | inner |
| complex.cpp:56:12:56:12 | f |
| complex.cpp:59:7:59:8 | b1 |
| complex.cpp:62:7:62:8 | b2 |
| complex.cpp:65:7:65:8 | b3 |
| complex.cpp:68:7:68:8 | b4 |
| constructors.cpp:20:24:20:25 | a_ |
| constructors.cpp:20:24:20:25 | this |
| constructors.cpp:21:24:21:25 | b_ |

View File

@@ -51,14 +51,14 @@ edges
| A.cpp:160:29:160:29 | b | A.cpp:160:18:160:60 | call to MyList [head] |
| A.cpp:161:18:161:40 | call to MyList [next, head] | A.cpp:162:38:162:39 | l2 [next, head] |
| A.cpp:161:38:161:39 | l1 [head] | A.cpp:161:18:161:40 | call to MyList [next, head] |
| A.cpp:162:18:162:40 | call to MyList [next, next, ... (3)] | A.cpp:165:10:165:11 | l3 [next, next, ... (3)] |
| A.cpp:162:18:162:40 | call to MyList [next, next, ... (3)] | A.cpp:167:44:167:44 | l [next, next, ... (3)] |
| A.cpp:162:38:162:39 | l2 [next, head] | A.cpp:162:18:162:40 | call to MyList [next, next, ... (3)] |
| A.cpp:165:10:165:11 | l3 [next, next, ... (3)] | A.cpp:165:14:165:17 | next [next, head] |
| A.cpp:162:18:162:40 | call to MyList [next, next, head] | A.cpp:165:10:165:11 | l3 [next, next, head] |
| A.cpp:162:18:162:40 | call to MyList [next, next, head] | A.cpp:167:44:167:44 | l [next, next, head] |
| A.cpp:162:38:162:39 | l2 [next, head] | A.cpp:162:18:162:40 | call to MyList [next, next, head] |
| A.cpp:165:10:165:11 | l3 [next, next, head] | A.cpp:165:14:165:17 | next [next, head] |
| A.cpp:165:14:165:17 | next [next, head] | A.cpp:165:20:165:23 | next [head] |
| A.cpp:165:20:165:23 | next [head] | A.cpp:165:26:165:29 | head |
| A.cpp:167:44:167:44 | l [next, head] | A.cpp:167:47:167:50 | next [head] |
| A.cpp:167:44:167:44 | l [next, next, ... (3)] | A.cpp:167:47:167:50 | next [next, head] |
| A.cpp:167:44:167:44 | l [next, next, head] | A.cpp:167:47:167:50 | next [next, head] |
| A.cpp:167:47:167:50 | next [head] | A.cpp:169:12:169:12 | l [head] |
| A.cpp:167:47:167:50 | next [next, head] | A.cpp:167:44:167:44 | l [next, head] |
| A.cpp:169:12:169:12 | l [head] | A.cpp:169:15:169:18 | head |
@@ -113,14 +113,14 @@ edges
| D.cpp:51:27:51:27 | e | D.cpp:51:8:51:14 | ref arg call to getBox1 [elem] |
| D.cpp:52:14:52:14 | b [box, elem] | D.cpp:21:30:21:31 | b2 [box, elem] |
| D.cpp:56:15:56:24 | new | D.cpp:58:5:58:27 | ... = ... |
| D.cpp:58:5:58:12 | boxfield [post update] [box, elem] | D.cpp:58:5:58:12 | this [post update] [boxfield, box, ... (3)] |
| D.cpp:58:5:58:12 | this [post update] [boxfield, box, ... (3)] | D.cpp:59:5:59:7 | this [boxfield, box, ... (3)] |
| D.cpp:58:5:58:12 | boxfield [post update] [box, elem] | D.cpp:58:5:58:12 | this [post update] [boxfield, box, elem] |
| D.cpp:58:5:58:12 | this [post update] [boxfield, box, elem] | D.cpp:59:5:59:7 | this [boxfield, box, elem] |
| D.cpp:58:5:58:27 | ... = ... | D.cpp:58:15:58:17 | box [post update] [elem] |
| D.cpp:58:15:58:17 | box [post update] [elem] | D.cpp:58:5:58:12 | boxfield [post update] [box, elem] |
| D.cpp:59:5:59:7 | this [boxfield, box, ... (3)] | D.cpp:63:8:63:10 | this [boxfield, box, ... (3)] |
| D.cpp:63:8:63:10 | this [boxfield, box, ... (3)] | D.cpp:64:10:64:17 | this [boxfield, box, ... (3)] |
| D.cpp:59:5:59:7 | this [boxfield, box, elem] | D.cpp:63:8:63:10 | this [boxfield, box, elem] |
| D.cpp:63:8:63:10 | this [boxfield, box, elem] | D.cpp:64:10:64:17 | this [boxfield, box, elem] |
| D.cpp:64:10:64:17 | boxfield [box, elem] | D.cpp:64:20:64:22 | box [elem] |
| D.cpp:64:10:64:17 | this [boxfield, box, ... (3)] | D.cpp:64:10:64:17 | boxfield [box, elem] |
| D.cpp:64:10:64:17 | this [boxfield, box, elem] | D.cpp:64:10:64:17 | boxfield [box, elem] |
| D.cpp:64:20:64:22 | box [elem] | D.cpp:64:25:64:28 | elem |
| E.cpp:19:27:19:27 | p [data, buffer] | E.cpp:21:10:21:10 | p [data, buffer] |
| E.cpp:21:10:21:10 | p [data, buffer] | E.cpp:21:13:21:16 | data [buffer] |
@@ -193,33 +193,33 @@ edges
| arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:10:8:10:15 | * ... |
| arrays.cpp:15:14:15:23 | call to user_input | arrays.cpp:16:8:16:13 | access to array |
| arrays.cpp:15:14:15:23 | call to user_input | arrays.cpp:17:8:17:13 | access to array |
| arrays.cpp:36:3:36:3 | o [post update] [nested, arr, ... (3)] | arrays.cpp:37:8:37:8 | o [nested, arr, ... (3)] |
| arrays.cpp:36:3:36:3 | o [post update] [nested, arr, ... (3)] | arrays.cpp:38:8:38:8 | o [nested, arr, ... (3)] |
| arrays.cpp:36:3:36:3 | o [post update] [nested, arr, data] | arrays.cpp:37:8:37:8 | o [nested, arr, data] |
| arrays.cpp:36:3:36:3 | o [post update] [nested, arr, data] | arrays.cpp:38:8:38:8 | o [nested, arr, data] |
| arrays.cpp:36:3:36:17 | access to array [post update] [data] | arrays.cpp:36:12:36:14 | arr [inner post update] [data] |
| arrays.cpp:36:3:36:37 | ... = ... | arrays.cpp:36:3:36:17 | access to array [post update] [data] |
| arrays.cpp:36:5:36:10 | nested [post update] [arr, data] | arrays.cpp:36:3:36:3 | o [post update] [nested, arr, ... (3)] |
| arrays.cpp:36:5:36:10 | nested [post update] [arr, data] | arrays.cpp:36:3:36:3 | o [post update] [nested, arr, data] |
| arrays.cpp:36:12:36:14 | arr [inner post update] [data] | arrays.cpp:36:5:36:10 | nested [post update] [arr, data] |
| arrays.cpp:36:26:36:35 | call to user_input | arrays.cpp:36:3:36:37 | ... = ... |
| arrays.cpp:37:8:37:8 | o [nested, arr, ... (3)] | arrays.cpp:37:10:37:15 | nested [arr, data] |
| arrays.cpp:37:8:37:8 | o [nested, arr, data] | arrays.cpp:37:10:37:15 | nested [arr, data] |
| arrays.cpp:37:8:37:22 | access to array [data] | arrays.cpp:37:24:37:27 | data |
| arrays.cpp:37:10:37:15 | nested [arr, data] | arrays.cpp:37:17:37:19 | arr [data] |
| arrays.cpp:37:17:37:19 | arr [data] | arrays.cpp:37:8:37:22 | access to array [data] |
| arrays.cpp:38:8:38:8 | o [nested, arr, ... (3)] | arrays.cpp:38:10:38:15 | nested [arr, data] |
| arrays.cpp:38:8:38:8 | o [nested, arr, data] | arrays.cpp:38:10:38:15 | nested [arr, data] |
| arrays.cpp:38:8:38:22 | access to array [data] | arrays.cpp:38:24:38:27 | data |
| arrays.cpp:38:10:38:15 | nested [arr, data] | arrays.cpp:38:17:38:19 | arr [data] |
| arrays.cpp:38:17:38:19 | arr [data] | arrays.cpp:38:8:38:22 | access to array [data] |
| arrays.cpp:42:3:42:3 | o [post update] [indirect, arr, ... (3)] | arrays.cpp:43:8:43:8 | o [indirect, arr, ... (3)] |
| arrays.cpp:42:3:42:3 | o [post update] [indirect, arr, ... (3)] | arrays.cpp:44:8:44:8 | o [indirect, arr, ... (3)] |
| arrays.cpp:42:3:42:3 | o [post update] [indirect, arr, data] | arrays.cpp:43:8:43:8 | o [indirect, arr, data] |
| arrays.cpp:42:3:42:3 | o [post update] [indirect, arr, data] | arrays.cpp:44:8:44:8 | o [indirect, arr, data] |
| arrays.cpp:42:3:42:20 | access to array [post update] [data] | arrays.cpp:42:15:42:17 | arr [inner post update] [data] |
| arrays.cpp:42:3:42:40 | ... = ... | arrays.cpp:42:3:42:20 | access to array [post update] [data] |
| arrays.cpp:42:5:42:12 | indirect [post update] [arr, data] | arrays.cpp:42:3:42:3 | o [post update] [indirect, arr, ... (3)] |
| arrays.cpp:42:5:42:12 | indirect [post update] [arr, data] | arrays.cpp:42:3:42:3 | o [post update] [indirect, arr, data] |
| arrays.cpp:42:15:42:17 | arr [inner post update] [data] | arrays.cpp:42:5:42:12 | indirect [post update] [arr, data] |
| arrays.cpp:42:29:42:38 | call to user_input | arrays.cpp:42:3:42:40 | ... = ... |
| arrays.cpp:43:8:43:8 | o [indirect, arr, ... (3)] | arrays.cpp:43:10:43:17 | indirect [arr, data] |
| arrays.cpp:43:8:43:8 | o [indirect, arr, data] | arrays.cpp:43:10:43:17 | indirect [arr, data] |
| arrays.cpp:43:8:43:25 | access to array [data] | arrays.cpp:43:27:43:30 | data |
| arrays.cpp:43:10:43:17 | indirect [arr, data] | arrays.cpp:43:20:43:22 | arr [data] |
| arrays.cpp:43:20:43:22 | arr [data] | arrays.cpp:43:8:43:25 | access to array [data] |
| arrays.cpp:44:8:44:8 | o [indirect, arr, ... (3)] | arrays.cpp:44:10:44:17 | indirect [arr, data] |
| arrays.cpp:44:8:44:8 | o [indirect, arr, data] | arrays.cpp:44:10:44:17 | indirect [arr, data] |
| arrays.cpp:44:8:44:25 | access to array [data] | arrays.cpp:44:27:44:30 | data |
| arrays.cpp:44:10:44:17 | indirect [arr, data] | arrays.cpp:44:20:44:22 | arr [data] |
| arrays.cpp:44:20:44:22 | arr [data] | arrays.cpp:44:8:44:25 | access to array [data] |
@@ -308,33 +308,34 @@ edges
| by_reference.cpp:135:8:135:13 | pouter [inner_ptr, a] | by_reference.cpp:135:16:135:24 | inner_ptr [a] |
| by_reference.cpp:135:16:135:24 | inner_ptr [a] | by_reference.cpp:135:27:135:27 | a |
| by_reference.cpp:136:8:136:13 | pouter [a] | by_reference.cpp:136:16:136:16 | a |
| complex.cpp:40:17:40:17 | b [inner, f, ... (3)] | complex.cpp:51:8:51:8 | b [inner, f, ... (3)] |
| complex.cpp:40:17:40:17 | b [inner, f, ... (3)] | complex.cpp:52:8:52:8 | b [inner, f, ... (3)] |
| complex.cpp:51:8:51:8 | b [inner, f, ... (3)] | complex.cpp:51:10:51:14 | inner [f, a_] |
| complex.cpp:51:10:51:14 | inner [f, a_] | complex.cpp:51:16:51:16 | f [a_] |
| complex.cpp:51:16:51:16 | f [a_] | complex.cpp:51:18:51:18 | call to a |
| complex.cpp:52:8:52:8 | b [inner, f, ... (3)] | complex.cpp:52:10:52:14 | inner [f, b_] |
| complex.cpp:52:10:52:14 | inner [f, b_] | complex.cpp:52:16:52:16 | f [b_] |
| complex.cpp:52:16:52:16 | f [b_] | complex.cpp:52:18:52:18 | call to b |
| complex.cpp:62:3:62:4 | b1 [post update] [inner, f, ... (3)] | complex.cpp:68:7:68:8 | b1 [inner, f, ... (3)] |
| complex.cpp:62:6:62:10 | inner [post update] [f, a_] | complex.cpp:62:3:62:4 | b1 [post update] [inner, f, ... (3)] |
| complex.cpp:62:12:62:12 | ref arg f [a_] | complex.cpp:62:6:62:10 | inner [post update] [f, a_] |
| complex.cpp:62:19:62:28 | call to user_input | complex.cpp:62:12:62:12 | ref arg f [a_] |
| complex.cpp:63:3:63:4 | b2 [post update] [inner, f, ... (3)] | complex.cpp:71:7:71:8 | b2 [inner, f, ... (3)] |
| complex.cpp:63:6:63:10 | inner [post update] [f, b_] | complex.cpp:63:3:63:4 | b2 [post update] [inner, f, ... (3)] |
| complex.cpp:63:12:63:12 | ref arg f [b_] | complex.cpp:63:6:63:10 | inner [post update] [f, b_] |
| complex.cpp:63:19:63:28 | call to user_input | complex.cpp:63:12:63:12 | ref arg f [b_] |
| complex.cpp:64:3:64:4 | b3 [post update] [inner, f, ... (3)] | complex.cpp:74:7:74:8 | b3 [inner, f, ... (3)] |
| complex.cpp:64:6:64:10 | inner [post update] [f, a_] | complex.cpp:64:3:64:4 | b3 [post update] [inner, f, ... (3)] |
| complex.cpp:64:12:64:12 | ref arg f [a_] | complex.cpp:64:6:64:10 | inner [post update] [f, a_] |
| complex.cpp:64:19:64:28 | call to user_input | complex.cpp:64:12:64:12 | ref arg f [a_] |
| complex.cpp:65:3:65:4 | b3 [post update] [inner, f, ... (3)] | complex.cpp:74:7:74:8 | b3 [inner, f, ... (3)] |
| complex.cpp:65:6:65:10 | inner [post update] [f, b_] | complex.cpp:65:3:65:4 | b3 [post update] [inner, f, ... (3)] |
| complex.cpp:65:12:65:12 | ref arg f [b_] | complex.cpp:65:6:65:10 | inner [post update] [f, b_] |
| complex.cpp:65:19:65:28 | call to user_input | complex.cpp:65:12:65:12 | ref arg f [b_] |
| complex.cpp:68:7:68:8 | b1 [inner, f, ... (3)] | complex.cpp:40:17:40:17 | b [inner, f, ... (3)] |
| complex.cpp:71:7:71:8 | b2 [inner, f, ... (3)] | complex.cpp:40:17:40:17 | b [inner, f, ... (3)] |
| complex.cpp:74:7:74:8 | b3 [inner, f, ... (3)] | complex.cpp:40:17:40:17 | b [inner, f, ... (3)] |
| complex.cpp:40:17:40:17 | b [inner, f, a_] | complex.cpp:42:8:42:8 | b [inner, f, a_] |
| complex.cpp:40:17:40:17 | b [inner, f, b_] | complex.cpp:43:8:43:8 | b [inner, f, b_] |
| complex.cpp:42:8:42:8 | b [inner, f, a_] | complex.cpp:42:10:42:14 | inner [f, a_] |
| complex.cpp:42:10:42:14 | inner [f, a_] | complex.cpp:42:16:42:16 | f [a_] |
| complex.cpp:42:16:42:16 | f [a_] | complex.cpp:42:18:42:18 | call to a |
| complex.cpp:43:8:43:8 | b [inner, f, b_] | complex.cpp:43:10:43:14 | inner [f, b_] |
| complex.cpp:43:10:43:14 | inner [f, b_] | complex.cpp:43:16:43:16 | f [b_] |
| complex.cpp:43:16:43:16 | f [b_] | complex.cpp:43:18:43:18 | call to b |
| complex.cpp:53:3:53:4 | b1 [post update] [inner, f, a_] | complex.cpp:59:7:59:8 | b1 [inner, f, a_] |
| complex.cpp:53:6:53:10 | inner [post update] [f, a_] | complex.cpp:53:3:53:4 | b1 [post update] [inner, f, a_] |
| complex.cpp:53:12:53:12 | ref arg f [a_] | complex.cpp:53:6:53:10 | inner [post update] [f, a_] |
| complex.cpp:53:19:53:28 | call to user_input | complex.cpp:53:12:53:12 | ref arg f [a_] |
| complex.cpp:54:3:54:4 | b2 [post update] [inner, f, b_] | complex.cpp:62:7:62:8 | b2 [inner, f, b_] |
| complex.cpp:54:6:54:10 | inner [post update] [f, b_] | complex.cpp:54:3:54:4 | b2 [post update] [inner, f, b_] |
| complex.cpp:54:12:54:12 | ref arg f [b_] | complex.cpp:54:6:54:10 | inner [post update] [f, b_] |
| complex.cpp:54:19:54:28 | call to user_input | complex.cpp:54:12:54:12 | ref arg f [b_] |
| complex.cpp:55:3:55:4 | b3 [post update] [inner, f, a_] | complex.cpp:65:7:65:8 | b3 [inner, f, a_] |
| complex.cpp:55:6:55:10 | inner [post update] [f, a_] | complex.cpp:55:3:55:4 | b3 [post update] [inner, f, a_] |
| complex.cpp:55:12:55:12 | ref arg f [a_] | complex.cpp:55:6:55:10 | inner [post update] [f, a_] |
| complex.cpp:55:19:55:28 | call to user_input | complex.cpp:55:12:55:12 | ref arg f [a_] |
| complex.cpp:56:3:56:4 | b3 [post update] [inner, f, b_] | complex.cpp:65:7:65:8 | b3 [inner, f, b_] |
| complex.cpp:56:6:56:10 | inner [post update] [f, b_] | complex.cpp:56:3:56:4 | b3 [post update] [inner, f, b_] |
| complex.cpp:56:12:56:12 | ref arg f [b_] | complex.cpp:56:6:56:10 | inner [post update] [f, b_] |
| complex.cpp:56:19:56:28 | call to user_input | complex.cpp:56:12:56:12 | ref arg f [b_] |
| complex.cpp:59:7:59:8 | b1 [inner, f, a_] | complex.cpp:40:17:40:17 | b [inner, f, a_] |
| complex.cpp:62:7:62:8 | b2 [inner, f, b_] | complex.cpp:40:17:40:17 | b [inner, f, b_] |
| complex.cpp:65:7:65:8 | b3 [inner, f, a_] | complex.cpp:40:17:40:17 | b [inner, f, a_] |
| complex.cpp:65:7:65:8 | b3 [inner, f, b_] | complex.cpp:40:17:40:17 | b [inner, f, b_] |
| constructors.cpp:26:15:26:15 | f [a_] | constructors.cpp:28:10:28:10 | f [a_] |
| constructors.cpp:26:15:26:15 | f [b_] | constructors.cpp:29:10:29:10 | f [b_] |
| constructors.cpp:28:10:28:10 | f [a_] | constructors.cpp:28:12:28:12 | call to a |
@@ -386,16 +387,16 @@ edges
| qualifiers.cpp:47:31:47:40 | call to user_input | qualifiers.cpp:47:5:47:42 | ... = ... |
| qualifiers.cpp:48:10:48:14 | outer [inner, a] | qualifiers.cpp:48:16:48:20 | inner [a] |
| qualifiers.cpp:48:16:48:20 | inner [a] | qualifiers.cpp:48:23:48:23 | a |
| realistic.cpp:53:9:53:11 | foo [post update] [bar, baz, ... (4)] | realistic.cpp:61:21:61:23 | foo [bar, baz, ... (4)] |
| realistic.cpp:53:9:53:18 | access to array [post update] [baz, userInput, ... (3)] | realistic.cpp:53:13:53:15 | bar [inner post update] [baz, userInput, ... (3)] |
| realistic.cpp:53:9:53:11 | foo [post update] [bar, baz, userInput, bufferLen] | realistic.cpp:61:21:61:23 | foo [bar, baz, userInput, bufferLen] |
| realistic.cpp:53:9:53:18 | access to array [post update] [baz, userInput, bufferLen] | realistic.cpp:53:13:53:15 | bar [inner post update] [baz, userInput, bufferLen] |
| realistic.cpp:53:9:53:66 | ... = ... | realistic.cpp:53:25:53:33 | userInput [post update] [bufferLen] |
| realistic.cpp:53:13:53:15 | bar [inner post update] [baz, userInput, ... (3)] | realistic.cpp:53:9:53:11 | foo [post update] [bar, baz, ... (4)] |
| realistic.cpp:53:20:53:22 | baz [post update] [userInput, bufferLen] | realistic.cpp:53:9:53:18 | access to array [post update] [baz, userInput, ... (3)] |
| realistic.cpp:53:13:53:15 | bar [inner post update] [baz, userInput, bufferLen] | realistic.cpp:53:9:53:11 | foo [post update] [bar, baz, userInput, bufferLen] |
| realistic.cpp:53:20:53:22 | baz [post update] [userInput, bufferLen] | realistic.cpp:53:9:53:18 | access to array [post update] [baz, userInput, bufferLen] |
| realistic.cpp:53:25:53:33 | userInput [post update] [bufferLen] | realistic.cpp:53:20:53:22 | baz [post update] [userInput, bufferLen] |
| realistic.cpp:53:55:53:64 | call to user_input | realistic.cpp:53:9:53:66 | ... = ... |
| realistic.cpp:61:21:61:23 | foo [bar, baz, ... (4)] | realistic.cpp:61:25:61:27 | bar [baz, userInput, ... (3)] |
| realistic.cpp:61:21:61:30 | access to array [baz, userInput, ... (3)] | realistic.cpp:61:32:61:34 | baz [userInput, bufferLen] |
| realistic.cpp:61:25:61:27 | bar [baz, userInput, ... (3)] | realistic.cpp:61:21:61:30 | access to array [baz, userInput, ... (3)] |
| realistic.cpp:61:21:61:23 | foo [bar, baz, userInput, bufferLen] | realistic.cpp:61:25:61:27 | bar [baz, userInput, bufferLen] |
| realistic.cpp:61:21:61:30 | access to array [baz, userInput, bufferLen] | realistic.cpp:61:32:61:34 | baz [userInput, bufferLen] |
| realistic.cpp:61:25:61:27 | bar [baz, userInput, bufferLen] | realistic.cpp:61:21:61:30 | access to array [baz, userInput, bufferLen] |
| realistic.cpp:61:32:61:34 | baz [userInput, bufferLen] | realistic.cpp:61:37:61:45 | userInput [bufferLen] |
| realistic.cpp:61:37:61:45 | userInput [bufferLen] | realistic.cpp:61:47:61:55 | bufferLen |
| simple.cpp:26:15:26:15 | f [a_] | simple.cpp:28:10:28:10 | f [a_] |
@@ -517,14 +518,14 @@ nodes
| A.cpp:160:29:160:29 | b | semmle.label | b |
| A.cpp:161:18:161:40 | call to MyList [next, head] | semmle.label | call to MyList [next, head] |
| A.cpp:161:38:161:39 | l1 [head] | semmle.label | l1 [head] |
| A.cpp:162:18:162:40 | call to MyList [next, next, ... (3)] | semmle.label | call to MyList [next, next, ... (3)] |
| A.cpp:162:18:162:40 | call to MyList [next, next, head] | semmle.label | call to MyList [next, next, head] |
| A.cpp:162:38:162:39 | l2 [next, head] | semmle.label | l2 [next, head] |
| A.cpp:165:10:165:11 | l3 [next, next, ... (3)] | semmle.label | l3 [next, next, ... (3)] |
| A.cpp:165:10:165:11 | l3 [next, next, head] | semmle.label | l3 [next, next, head] |
| A.cpp:165:14:165:17 | next [next, head] | semmle.label | next [next, head] |
| A.cpp:165:20:165:23 | next [head] | semmle.label | next [head] |
| A.cpp:165:26:165:29 | head | semmle.label | head |
| A.cpp:167:44:167:44 | l [next, head] | semmle.label | l [next, head] |
| A.cpp:167:44:167:44 | l [next, next, ... (3)] | semmle.label | l [next, next, ... (3)] |
| A.cpp:167:44:167:44 | l [next, next, head] | semmle.label | l [next, next, head] |
| A.cpp:167:47:167:50 | next [head] | semmle.label | next [head] |
| A.cpp:167:47:167:50 | next [next, head] | semmle.label | next [next, head] |
| A.cpp:169:12:169:12 | l [head] | semmle.label | l [head] |
@@ -586,13 +587,13 @@ nodes
| D.cpp:52:14:52:14 | b [box, elem] | semmle.label | b [box, elem] |
| D.cpp:56:15:56:24 | new | semmle.label | new |
| D.cpp:58:5:58:12 | boxfield [post update] [box, elem] | semmle.label | boxfield [post update] [box, elem] |
| D.cpp:58:5:58:12 | this [post update] [boxfield, box, ... (3)] | semmle.label | this [post update] [boxfield, box, ... (3)] |
| D.cpp:58:5:58:12 | this [post update] [boxfield, box, elem] | semmle.label | this [post update] [boxfield, box, elem] |
| D.cpp:58:5:58:27 | ... = ... | semmle.label | ... = ... |
| D.cpp:58:15:58:17 | box [post update] [elem] | semmle.label | box [post update] [elem] |
| D.cpp:59:5:59:7 | this [boxfield, box, ... (3)] | semmle.label | this [boxfield, box, ... (3)] |
| D.cpp:63:8:63:10 | this [boxfield, box, ... (3)] | semmle.label | this [boxfield, box, ... (3)] |
| D.cpp:59:5:59:7 | this [boxfield, box, elem] | semmle.label | this [boxfield, box, elem] |
| D.cpp:63:8:63:10 | this [boxfield, box, elem] | semmle.label | this [boxfield, box, elem] |
| D.cpp:64:10:64:17 | boxfield [box, elem] | semmle.label | boxfield [box, elem] |
| D.cpp:64:10:64:17 | this [boxfield, box, ... (3)] | semmle.label | this [boxfield, box, ... (3)] |
| D.cpp:64:10:64:17 | this [boxfield, box, elem] | semmle.label | this [boxfield, box, elem] |
| D.cpp:64:20:64:22 | box [elem] | semmle.label | box [elem] |
| D.cpp:64:25:64:28 | elem | semmle.label | elem |
| E.cpp:19:27:19:27 | p [data, buffer] | semmle.label | p [data, buffer] |
@@ -675,34 +676,34 @@ nodes
| arrays.cpp:15:14:15:23 | call to user_input | semmle.label | call to user_input |
| arrays.cpp:16:8:16:13 | access to array | semmle.label | access to array |
| arrays.cpp:17:8:17:13 | access to array | semmle.label | access to array |
| arrays.cpp:36:3:36:3 | o [post update] [nested, arr, ... (3)] | semmle.label | o [post update] [nested, arr, ... (3)] |
| arrays.cpp:36:3:36:3 | o [post update] [nested, arr, data] | semmle.label | o [post update] [nested, arr, data] |
| arrays.cpp:36:3:36:17 | access to array [post update] [data] | semmle.label | access to array [post update] [data] |
| arrays.cpp:36:3:36:37 | ... = ... | semmle.label | ... = ... |
| arrays.cpp:36:5:36:10 | nested [post update] [arr, data] | semmle.label | nested [post update] [arr, data] |
| arrays.cpp:36:12:36:14 | arr [inner post update] [data] | semmle.label | arr [inner post update] [data] |
| arrays.cpp:36:26:36:35 | call to user_input | semmle.label | call to user_input |
| arrays.cpp:37:8:37:8 | o [nested, arr, ... (3)] | semmle.label | o [nested, arr, ... (3)] |
| arrays.cpp:37:8:37:8 | o [nested, arr, data] | semmle.label | o [nested, arr, data] |
| arrays.cpp:37:8:37:22 | access to array [data] | semmle.label | access to array [data] |
| arrays.cpp:37:10:37:15 | nested [arr, data] | semmle.label | nested [arr, data] |
| arrays.cpp:37:17:37:19 | arr [data] | semmle.label | arr [data] |
| arrays.cpp:37:24:37:27 | data | semmle.label | data |
| arrays.cpp:38:8:38:8 | o [nested, arr, ... (3)] | semmle.label | o [nested, arr, ... (3)] |
| arrays.cpp:38:8:38:8 | o [nested, arr, data] | semmle.label | o [nested, arr, data] |
| arrays.cpp:38:8:38:22 | access to array [data] | semmle.label | access to array [data] |
| arrays.cpp:38:10:38:15 | nested [arr, data] | semmle.label | nested [arr, data] |
| arrays.cpp:38:17:38:19 | arr [data] | semmle.label | arr [data] |
| arrays.cpp:38:24:38:27 | data | semmle.label | data |
| arrays.cpp:42:3:42:3 | o [post update] [indirect, arr, ... (3)] | semmle.label | o [post update] [indirect, arr, ... (3)] |
| arrays.cpp:42:3:42:3 | o [post update] [indirect, arr, data] | semmle.label | o [post update] [indirect, arr, data] |
| arrays.cpp:42:3:42:20 | access to array [post update] [data] | semmle.label | access to array [post update] [data] |
| arrays.cpp:42:3:42:40 | ... = ... | semmle.label | ... = ... |
| arrays.cpp:42:5:42:12 | indirect [post update] [arr, data] | semmle.label | indirect [post update] [arr, data] |
| arrays.cpp:42:15:42:17 | arr [inner post update] [data] | semmle.label | arr [inner post update] [data] |
| arrays.cpp:42:29:42:38 | call to user_input | semmle.label | call to user_input |
| arrays.cpp:43:8:43:8 | o [indirect, arr, ... (3)] | semmle.label | o [indirect, arr, ... (3)] |
| arrays.cpp:43:8:43:8 | o [indirect, arr, data] | semmle.label | o [indirect, arr, data] |
| arrays.cpp:43:8:43:25 | access to array [data] | semmle.label | access to array [data] |
| arrays.cpp:43:10:43:17 | indirect [arr, data] | semmle.label | indirect [arr, data] |
| arrays.cpp:43:20:43:22 | arr [data] | semmle.label | arr [data] |
| arrays.cpp:43:27:43:30 | data | semmle.label | data |
| arrays.cpp:44:8:44:8 | o [indirect, arr, ... (3)] | semmle.label | o [indirect, arr, ... (3)] |
| arrays.cpp:44:8:44:8 | o [indirect, arr, data] | semmle.label | o [indirect, arr, data] |
| arrays.cpp:44:8:44:25 | access to array [data] | semmle.label | access to array [data] |
| arrays.cpp:44:10:44:17 | indirect [arr, data] | semmle.label | indirect [arr, data] |
| arrays.cpp:44:20:44:22 | arr [data] | semmle.label | arr [data] |
@@ -796,34 +797,36 @@ nodes
| by_reference.cpp:135:27:135:27 | a | semmle.label | a |
| by_reference.cpp:136:8:136:13 | pouter [a] | semmle.label | pouter [a] |
| by_reference.cpp:136:16:136:16 | a | semmle.label | a |
| complex.cpp:40:17:40:17 | b [inner, f, ... (3)] | semmle.label | b [inner, f, ... (3)] |
| complex.cpp:51:8:51:8 | b [inner, f, ... (3)] | semmle.label | b [inner, f, ... (3)] |
| complex.cpp:51:10:51:14 | inner [f, a_] | semmle.label | inner [f, a_] |
| complex.cpp:51:16:51:16 | f [a_] | semmle.label | f [a_] |
| complex.cpp:51:18:51:18 | call to a | semmle.label | call to a |
| complex.cpp:52:8:52:8 | b [inner, f, ... (3)] | semmle.label | b [inner, f, ... (3)] |
| complex.cpp:52:10:52:14 | inner [f, b_] | semmle.label | inner [f, b_] |
| complex.cpp:52:16:52:16 | f [b_] | semmle.label | f [b_] |
| complex.cpp:52:18:52:18 | call to b | semmle.label | call to b |
| complex.cpp:62:3:62:4 | b1 [post update] [inner, f, ... (3)] | semmle.label | b1 [post update] [inner, f, ... (3)] |
| complex.cpp:62:6:62:10 | inner [post update] [f, a_] | semmle.label | inner [post update] [f, a_] |
| complex.cpp:62:12:62:12 | ref arg f [a_] | semmle.label | ref arg f [a_] |
| complex.cpp:62:19:62:28 | call to user_input | semmle.label | call to user_input |
| complex.cpp:63:3:63:4 | b2 [post update] [inner, f, ... (3)] | semmle.label | b2 [post update] [inner, f, ... (3)] |
| complex.cpp:63:6:63:10 | inner [post update] [f, b_] | semmle.label | inner [post update] [f, b_] |
| complex.cpp:63:12:63:12 | ref arg f [b_] | semmle.label | ref arg f [b_] |
| complex.cpp:63:19:63:28 | call to user_input | semmle.label | call to user_input |
| complex.cpp:64:3:64:4 | b3 [post update] [inner, f, ... (3)] | semmle.label | b3 [post update] [inner, f, ... (3)] |
| complex.cpp:64:6:64:10 | inner [post update] [f, a_] | semmle.label | inner [post update] [f, a_] |
| complex.cpp:64:12:64:12 | ref arg f [a_] | semmle.label | ref arg f [a_] |
| complex.cpp:64:19:64:28 | call to user_input | semmle.label | call to user_input |
| complex.cpp:65:3:65:4 | b3 [post update] [inner, f, ... (3)] | semmle.label | b3 [post update] [inner, f, ... (3)] |
| complex.cpp:65:6:65:10 | inner [post update] [f, b_] | semmle.label | inner [post update] [f, b_] |
| complex.cpp:65:12:65:12 | ref arg f [b_] | semmle.label | ref arg f [b_] |
| complex.cpp:65:19:65:28 | call to user_input | semmle.label | call to user_input |
| complex.cpp:68:7:68:8 | b1 [inner, f, ... (3)] | semmle.label | b1 [inner, f, ... (3)] |
| complex.cpp:71:7:71:8 | b2 [inner, f, ... (3)] | semmle.label | b2 [inner, f, ... (3)] |
| complex.cpp:74:7:74:8 | b3 [inner, f, ... (3)] | semmle.label | b3 [inner, f, ... (3)] |
| complex.cpp:40:17:40:17 | b [inner, f, a_] | semmle.label | b [inner, f, a_] |
| complex.cpp:40:17:40:17 | b [inner, f, b_] | semmle.label | b [inner, f, b_] |
| complex.cpp:42:8:42:8 | b [inner, f, a_] | semmle.label | b [inner, f, a_] |
| complex.cpp:42:10:42:14 | inner [f, a_] | semmle.label | inner [f, a_] |
| complex.cpp:42:16:42:16 | f [a_] | semmle.label | f [a_] |
| complex.cpp:42:18:42:18 | call to a | semmle.label | call to a |
| complex.cpp:43:8:43:8 | b [inner, f, b_] | semmle.label | b [inner, f, b_] |
| complex.cpp:43:10:43:14 | inner [f, b_] | semmle.label | inner [f, b_] |
| complex.cpp:43:16:43:16 | f [b_] | semmle.label | f [b_] |
| complex.cpp:43:18:43:18 | call to b | semmle.label | call to b |
| complex.cpp:53:3:53:4 | b1 [post update] [inner, f, a_] | semmle.label | b1 [post update] [inner, f, a_] |
| complex.cpp:53:6:53:10 | inner [post update] [f, a_] | semmle.label | inner [post update] [f, a_] |
| complex.cpp:53:12:53:12 | ref arg f [a_] | semmle.label | ref arg f [a_] |
| complex.cpp:53:19:53:28 | call to user_input | semmle.label | call to user_input |
| complex.cpp:54:3:54:4 | b2 [post update] [inner, f, b_] | semmle.label | b2 [post update] [inner, f, b_] |
| complex.cpp:54:6:54:10 | inner [post update] [f, b_] | semmle.label | inner [post update] [f, b_] |
| complex.cpp:54:12:54:12 | ref arg f [b_] | semmle.label | ref arg f [b_] |
| complex.cpp:54:19:54:28 | call to user_input | semmle.label | call to user_input |
| complex.cpp:55:3:55:4 | b3 [post update] [inner, f, a_] | semmle.label | b3 [post update] [inner, f, a_] |
| complex.cpp:55:6:55:10 | inner [post update] [f, a_] | semmle.label | inner [post update] [f, a_] |
| complex.cpp:55:12:55:12 | ref arg f [a_] | semmle.label | ref arg f [a_] |
| complex.cpp:55:19:55:28 | call to user_input | semmle.label | call to user_input |
| complex.cpp:56:3:56:4 | b3 [post update] [inner, f, b_] | semmle.label | b3 [post update] [inner, f, b_] |
| complex.cpp:56:6:56:10 | inner [post update] [f, b_] | semmle.label | inner [post update] [f, b_] |
| complex.cpp:56:12:56:12 | ref arg f [b_] | semmle.label | ref arg f [b_] |
| complex.cpp:56:19:56:28 | call to user_input | semmle.label | call to user_input |
| complex.cpp:59:7:59:8 | b1 [inner, f, a_] | semmle.label | b1 [inner, f, a_] |
| complex.cpp:62:7:62:8 | b2 [inner, f, b_] | semmle.label | b2 [inner, f, b_] |
| complex.cpp:65:7:65:8 | b3 [inner, f, a_] | semmle.label | b3 [inner, f, a_] |
| complex.cpp:65:7:65:8 | b3 [inner, f, b_] | semmle.label | b3 [inner, f, b_] |
| constructors.cpp:26:15:26:15 | f [a_] | semmle.label | f [a_] |
| constructors.cpp:26:15:26:15 | f [b_] | semmle.label | f [b_] |
| constructors.cpp:28:10:28:10 | f [a_] | semmle.label | f [a_] |
@@ -883,16 +886,16 @@ nodes
| qualifiers.cpp:48:10:48:14 | outer [inner, a] | semmle.label | outer [inner, a] |
| qualifiers.cpp:48:16:48:20 | inner [a] | semmle.label | inner [a] |
| qualifiers.cpp:48:23:48:23 | a | semmle.label | a |
| realistic.cpp:53:9:53:11 | foo [post update] [bar, baz, ... (4)] | semmle.label | foo [post update] [bar, baz, ... (4)] |
| realistic.cpp:53:9:53:18 | access to array [post update] [baz, userInput, ... (3)] | semmle.label | access to array [post update] [baz, userInput, ... (3)] |
| realistic.cpp:53:9:53:11 | foo [post update] [bar, baz, userInput, bufferLen] | semmle.label | foo [post update] [bar, baz, userInput, bufferLen] |
| realistic.cpp:53:9:53:18 | access to array [post update] [baz, userInput, bufferLen] | semmle.label | access to array [post update] [baz, userInput, bufferLen] |
| realistic.cpp:53:9:53:66 | ... = ... | semmle.label | ... = ... |
| realistic.cpp:53:13:53:15 | bar [inner post update] [baz, userInput, ... (3)] | semmle.label | bar [inner post update] [baz, userInput, ... (3)] |
| realistic.cpp:53:13:53:15 | bar [inner post update] [baz, userInput, bufferLen] | semmle.label | bar [inner post update] [baz, userInput, bufferLen] |
| realistic.cpp:53:20:53:22 | baz [post update] [userInput, bufferLen] | semmle.label | baz [post update] [userInput, bufferLen] |
| realistic.cpp:53:25:53:33 | userInput [post update] [bufferLen] | semmle.label | userInput [post update] [bufferLen] |
| realistic.cpp:53:55:53:64 | call to user_input | semmle.label | call to user_input |
| realistic.cpp:61:21:61:23 | foo [bar, baz, ... (4)] | semmle.label | foo [bar, baz, ... (4)] |
| realistic.cpp:61:21:61:30 | access to array [baz, userInput, ... (3)] | semmle.label | access to array [baz, userInput, ... (3)] |
| realistic.cpp:61:25:61:27 | bar [baz, userInput, ... (3)] | semmle.label | bar [baz, userInput, ... (3)] |
| realistic.cpp:61:21:61:23 | foo [bar, baz, userInput, bufferLen] | semmle.label | foo [bar, baz, userInput, bufferLen] |
| realistic.cpp:61:21:61:30 | access to array [baz, userInput, bufferLen] | semmle.label | access to array [baz, userInput, bufferLen] |
| realistic.cpp:61:25:61:27 | bar [baz, userInput, bufferLen] | semmle.label | bar [baz, userInput, bufferLen] |
| realistic.cpp:61:32:61:34 | baz [userInput, bufferLen] | semmle.label | baz [userInput, bufferLen] |
| realistic.cpp:61:37:61:45 | userInput [bufferLen] | semmle.label | userInput [bufferLen] |
| realistic.cpp:61:47:61:55 | bufferLen | semmle.label | bufferLen |
@@ -1021,14 +1024,10 @@ nodes
| by_reference.cpp:134:29:134:29 | a | by_reference.cpp:88:13:88:22 | call to user_input | by_reference.cpp:134:29:134:29 | a | a flows from $@ | by_reference.cpp:88:13:88:22 | call to user_input | call to user_input |
| by_reference.cpp:135:27:135:27 | a | by_reference.cpp:88:13:88:22 | call to user_input | by_reference.cpp:135:27:135:27 | a | a flows from $@ | by_reference.cpp:88:13:88:22 | call to user_input | call to user_input |
| by_reference.cpp:136:16:136:16 | a | by_reference.cpp:96:8:96:17 | call to user_input | by_reference.cpp:136:16:136:16 | a | a flows from $@ | by_reference.cpp:96:8:96:17 | call to user_input | call to user_input |
| complex.cpp:51:18:51:18 | call to a | complex.cpp:62:19:62:28 | call to user_input | complex.cpp:51:18:51:18 | call to a | call to a flows from $@ | complex.cpp:62:19:62:28 | call to user_input | call to user_input |
| complex.cpp:51:18:51:18 | call to a | complex.cpp:63:19:63:28 | call to user_input | complex.cpp:51:18:51:18 | call to a | call to a flows from $@ | complex.cpp:63:19:63:28 | call to user_input | call to user_input |
| complex.cpp:51:18:51:18 | call to a | complex.cpp:64:19:64:28 | call to user_input | complex.cpp:51:18:51:18 | call to a | call to a flows from $@ | complex.cpp:64:19:64:28 | call to user_input | call to user_input |
| complex.cpp:51:18:51:18 | call to a | complex.cpp:65:19:65:28 | call to user_input | complex.cpp:51:18:51:18 | call to a | call to a flows from $@ | complex.cpp:65:19:65:28 | call to user_input | call to user_input |
| complex.cpp:52:18:52:18 | call to b | complex.cpp:62:19:62:28 | call to user_input | complex.cpp:52:18:52:18 | call to b | call to b flows from $@ | complex.cpp:62:19:62:28 | call to user_input | call to user_input |
| complex.cpp:52:18:52:18 | call to b | complex.cpp:63:19:63:28 | call to user_input | complex.cpp:52:18:52:18 | call to b | call to b flows from $@ | complex.cpp:63:19:63:28 | call to user_input | call to user_input |
| complex.cpp:52:18:52:18 | call to b | complex.cpp:64:19:64:28 | call to user_input | complex.cpp:52:18:52:18 | call to b | call to b flows from $@ | complex.cpp:64:19:64:28 | call to user_input | call to user_input |
| complex.cpp:52:18:52:18 | call to b | complex.cpp:65:19:65:28 | call to user_input | complex.cpp:52:18:52:18 | call to b | call to b flows from $@ | complex.cpp:65:19:65:28 | call to user_input | call to user_input |
| complex.cpp:42:18:42:18 | call to a | complex.cpp:53:19:53:28 | call to user_input | complex.cpp:42:18:42:18 | call to a | call to a flows from $@ | complex.cpp:53:19:53:28 | call to user_input | call to user_input |
| complex.cpp:42:18:42:18 | call to a | complex.cpp:55:19:55:28 | call to user_input | complex.cpp:42:18:42:18 | call to a | call to a flows from $@ | complex.cpp:55:19:55:28 | call to user_input | call to user_input |
| complex.cpp:43:18:43:18 | call to b | complex.cpp:54:19:54:28 | call to user_input | complex.cpp:43:18:43:18 | call to b | call to b flows from $@ | complex.cpp:54:19:54:28 | call to user_input | call to user_input |
| complex.cpp:43:18:43:18 | call to b | complex.cpp:56:19:56:28 | call to user_input | complex.cpp:43:18:43:18 | call to b | call to b flows from $@ | complex.cpp:56:19:56:28 | call to user_input | call to user_input |
| constructors.cpp:28:12:28:12 | call to a | constructors.cpp:34:11:34:20 | call to user_input | constructors.cpp:28:12:28:12 | call to a | call to a flows from $@ | constructors.cpp:34:11:34:20 | call to user_input | call to user_input |
| constructors.cpp:28:12:28:12 | call to a | constructors.cpp:36:11:36:20 | call to user_input | constructors.cpp:28:12:28:12 | call to a | call to a flows from $@ | constructors.cpp:36:11:36:20 | call to user_input | call to user_input |
| constructors.cpp:29:12:29:12 | call to b | constructors.cpp:35:14:35:23 | call to user_input | constructors.cpp:29:12:29:12 | call to b | call to b flows from $@ | constructors.cpp:35:14:35:23 | call to user_input | call to user_input |

View File

@@ -251,15 +251,15 @@
| copyableclass_declonly.cpp:67:13:67:18 | call to source | copyableclass_declonly.cpp:67:13:67:20 | call to MyCopyableClassDeclOnly | TAINT |
| copyableclass_declonly.cpp:67:13:67:20 | call to MyCopyableClassDeclOnly | copyableclass_declonly.cpp:67:8:67:9 | ref arg s3 | TAINT |
| copyableclass_declonly.cpp:67:13:67:20 | call to MyCopyableClassDeclOnly | copyableclass_declonly.cpp:67:11:67:11 | call to operator= | TAINT |
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | p#0 | |
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | p#0 | |
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | p#0 | |
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | p#0 | |
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | p#0 | |
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | p#0 | |
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | p#0 | |
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | p#0 | |
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | p#0 | |
| file://:0:0:0:0 | (unnamed parameter 0) | file://:0:0:0:0 | (unnamed parameter 0) | |
| file://:0:0:0:0 | (unnamed parameter 0) | file://:0:0:0:0 | (unnamed parameter 0) | |
| file://:0:0:0:0 | (unnamed parameter 0) | file://:0:0:0:0 | (unnamed parameter 0) | |
| file://:0:0:0:0 | (unnamed parameter 0) | file://:0:0:0:0 | (unnamed parameter 0) | |
| file://:0:0:0:0 | (unnamed parameter 0) | file://:0:0:0:0 | (unnamed parameter 0) | |
| file://:0:0:0:0 | (unnamed parameter 0) | file://:0:0:0:0 | (unnamed parameter 0) | |
| file://:0:0:0:0 | (unnamed parameter 0) | file://:0:0:0:0 | (unnamed parameter 0) | |
| file://:0:0:0:0 | (unnamed parameter 0) | file://:0:0:0:0 | (unnamed parameter 0) | |
| file://:0:0:0:0 | (unnamed parameter 0) | file://:0:0:0:0 | (unnamed parameter 0) | |
| format.cpp:16:21:16:21 | s | format.cpp:22:22:22:22 | s | |
| format.cpp:16:31:16:31 | n | format.cpp:22:25:22:25 | n | |
| format.cpp:16:46:16:51 | format | format.cpp:22:28:22:33 | format | |
@@ -5507,8 +5507,6 @@
| taint.cpp:194:10:194:10 | x | taint.cpp:194:9:194:10 | & ... | |
| taint.cpp:194:13:194:18 | source | taint.cpp:194:2:194:7 | call to memcpy | TAINT |
| taint.cpp:194:13:194:18 | source | taint.cpp:194:9:194:10 | ref arg & ... | TAINT |
| taint.cpp:194:21:194:31 | sizeof(int) | taint.cpp:194:2:194:7 | call to memcpy | TAINT |
| taint.cpp:194:21:194:31 | sizeof(int) | taint.cpp:194:9:194:10 | ref arg & ... | TAINT |
| taint.cpp:207:6:207:11 | call to source | taint.cpp:207:2:207:13 | ... = ... | |
| taint.cpp:207:6:207:11 | call to source | taint.cpp:210:7:210:7 | x | |
| taint.cpp:207:6:207:11 | call to source | taint.cpp:213:12:213:12 | x | |

View File

@@ -1,8 +1,8 @@
| file://:0:0:0:0 | (unnamed parameter 0) | 1 | <no init> | 1 | <no assigned> |
| file://:0:0:0:0 | (unnamed parameter 0) | 1 | <no init> | 1 | <no assigned> |
| file://:0:0:0:0 | fp_offset | 1 | <no init> | 1 | <no assigned> |
| file://:0:0:0:0 | gp_offset | 1 | <no init> | 1 | <no assigned> |
| file://:0:0:0:0 | overflow_arg_area | 1 | <no init> | 1 | <no assigned> |
| file://:0:0:0:0 | p#0 | 1 | <no init> | 1 | <no assigned> |
| file://:0:0:0:0 | p#0 | 1 | <no init> | 1 | <no assigned> |
| file://:0:0:0:0 | reg_save_area | 1 | <no init> | 1 | <no assigned> |
| test.cpp:2:21:2:21 | x | 1 | file://:0:0:0:0 initializer for x | 2 | test.cpp:2:25:2:26 10 |
| test.cpp:2:21:2:21 | x | 1 | file://:0:0:0:0 initializer for x | 2 | test.cpp:3:9:3:9 3 |

View File

@@ -1,16 +1,16 @@
| file://:0:0:0:0 | (unnamed parameter 0) | 0 | 0 |
| file://:0:0:0:0 | (unnamed parameter 0) | 0 | 0 |
| file://:0:0:0:0 | (unnamed parameter 0) | 0 | 0 |
| file://:0:0:0:0 | (unnamed parameter 0) | 0 | 0 |
| file://:0:0:0:0 | (unnamed parameter 0) | 0 | 0 |
| file://:0:0:0:0 | (unnamed parameter 0) | 0 | 0 |
| file://:0:0:0:0 | (unnamed parameter 0) | 0 | 0 |
| file://:0:0:0:0 | (unnamed parameter 0) | 0 | 0 |
| file://:0:0:0:0 | (unnamed parameter 0) | 0 | 0 |
| file://:0:0:0:0 | (unnamed parameter 0) | 0 | 0 |
| file://:0:0:0:0 | fp_offset | 0 | 0 |
| file://:0:0:0:0 | gp_offset | 0 | 0 |
| file://:0:0:0:0 | overflow_arg_area | 0 | 0 |
| file://:0:0:0:0 | p#0 | 0 | 0 |
| file://:0:0:0:0 | p#0 | 0 | 0 |
| file://:0:0:0:0 | p#0 | 0 | 0 |
| file://:0:0:0:0 | p#0 | 0 | 0 |
| file://:0:0:0:0 | p#0 | 0 | 0 |
| file://:0:0:0:0 | p#0 | 0 | 0 |
| file://:0:0:0:0 | p#0 | 0 | 0 |
| file://:0:0:0:0 | p#0 | 0 | 0 |
| file://:0:0:0:0 | p#0 | 0 | 0 |
| file://:0:0:0:0 | p#0 | 0 | 0 |
| file://:0:0:0:0 | reg_save_area | 0 | 0 |
| initializers.cpp:8:8:8:12 | a_ptr | 1 | 1 |
| initializers.cpp:9:4:9:4 | a | 1 | 1 |

View File

@@ -1,29 +1,29 @@
| ODASA-5186.cpp:4:8:4:8 | MyClass | MyClass | | declaration:ODASA-5186.cpp:4:8:4:8, definition:ODASA-5186.cpp:4:8:4:8 |
| ODASA-5186.cpp:4:8:4:8 | operator= | operator= | MyClass<int> && p#0 | declaration:ODASA-5186.cpp:4:8:4:8 |
| ODASA-5186.cpp:4:8:4:8 | operator= | operator= | const MyClass<int> & p#0 | declaration:ODASA-5186.cpp:4:8:4:8 |
| ODASA-5186.cpp:4:8:4:8 | operator= | operator= | MyClass<int> && (unnamed parameter 0) | declaration:ODASA-5186.cpp:4:8:4:8 |
| ODASA-5186.cpp:4:8:4:8 | operator= | operator= | const MyClass<int> & (unnamed parameter 0) | declaration:ODASA-5186.cpp:4:8:4:8 |
| ODASA-5186.cpp:5:8:5:8 | operator== | operator== | const MyClass<int> & other | declaration:ODASA-5186.cpp:5:8:5:8, definition:ODASA-5186.cpp:5:8:5:8 |
| ODASA-5186.cpp:5:8:5:17 | operator== | operator== | const MyClass<T> & other | declaration:ODASA-5186.cpp:5:8:5:17, definition:ODASA-5186.cpp:5:8:5:17 |
| ODASA-5186.cpp:8:6:8:9 | test | test | | TopLevelFunction, declaration:ODASA-5186.cpp:8:6:8:9, definition:ODASA-5186.cpp:8:6:8:9, isTopLevel |
| ODASA-5186.hpp:2:8:2:8 | operator= | operator= | NEQ_helper<MyClass<int>> && p#0 | declaration:ODASA-5186.hpp:2:8:2:8 |
| ODASA-5186.hpp:2:8:2:8 | operator= | operator= | const NEQ_helper<MyClass<int>> & p#0 | declaration:ODASA-5186.hpp:2:8:2:8 |
| ODASA-5186.hpp:2:8:2:8 | operator= | operator= | NEQ_helper<MyClass<int>> && (unnamed parameter 0) | declaration:ODASA-5186.hpp:2:8:2:8 |
| ODASA-5186.hpp:2:8:2:8 | operator= | operator= | const NEQ_helper<MyClass<int>> & (unnamed parameter 0) | declaration:ODASA-5186.hpp:2:8:2:8 |
| ODASA-5186.hpp:4:18:4:27 | operator!= | operator!= | const MyClass<int> & x, const MyClass<int> & y | TopLevelFunction, declaration:ODASA-5186.hpp:4:18:4:27, definition:ODASA-5186.hpp:4:18:4:27, isTopLevel |
| ODASA-5186.hpp:4:18:4:27 | operator!= | operator!= | const T & x, const T & y | TopLevelFunction, declaration:ODASA-5186.hpp:4:18:4:27, definition:ODASA-5186.hpp:4:18:4:27, isTopLevel |
| functions.cpp:1:6:1:6 | f | f | int a, int b | TopLevelFunction, declaration:functions.cpp:1:6:1:6, definition:functions.cpp:1:6:1:6, isTopLevel |
| functions.cpp:7:8:7:8 | operator= | operator= | A && p#0 | declaration:functions.cpp:7:8:7:8 |
| functions.cpp:7:8:7:8 | operator= | operator= | const A & p#0 | declaration:functions.cpp:7:8:7:8 |
| functions.cpp:7:8:7:8 | operator= | operator= | A && (unnamed parameter 0) | declaration:functions.cpp:7:8:7:8 |
| functions.cpp:7:8:7:8 | operator= | operator= | const A & (unnamed parameter 0) | declaration:functions.cpp:7:8:7:8 |
| functions.cpp:8:7:8:8 | af | af | | declaration:functions.cpp:8:7:8:8, definition:functions.cpp:8:7:8:8 |
| functions.cpp:11:7:11:8 | ag | ag | | declaration:functions.cpp:11:7:11:8 |
| functions.cpp:14:6:14:6 | g | g | | TopLevelFunction, declaration:functions.cpp:14:6:14:6, declaration:functions.cpp:5:6:5:6, definition:functions.cpp:14:6:14:6, isTopLevel |
| functions.cpp:19:7:19:7 | Name | Name | | declaration:functions.cpp:19:7:19:7 |
| functions.cpp:19:7:19:7 | operator= | operator= | Name && p#0 | declaration:functions.cpp:19:7:19:7 |
| functions.cpp:19:7:19:7 | operator= | operator= | const Name & p#0 | declaration:functions.cpp:19:7:19:7 |
| functions.cpp:23:7:23:7 | Table | Table | const Table & p#0 | declaration:functions.cpp:23:7:23:7 |
| functions.cpp:23:7:23:7 | operator= | operator= | const Table & p#0 | declaration:functions.cpp:23:7:23:7 |
| functions.cpp:19:7:19:7 | operator= | operator= | Name && (unnamed parameter 0) | declaration:functions.cpp:19:7:19:7 |
| functions.cpp:19:7:19:7 | operator= | operator= | const Name & (unnamed parameter 0) | declaration:functions.cpp:19:7:19:7 |
| functions.cpp:23:7:23:7 | Table | Table | const Table & (unnamed parameter 0) | declaration:functions.cpp:23:7:23:7 |
| functions.cpp:23:7:23:7 | operator= | operator= | const Table & (unnamed parameter 0) | declaration:functions.cpp:23:7:23:7 |
| functions.cpp:27:3:27:7 | Table | Table | int s | declaration:functions.cpp:27:3:27:7, definition:functions.cpp:27:3:27:7 |
| functions.cpp:28:3:28:8 | ~Table | ~Table | | declaration:functions.cpp:28:3:28:8, definition:functions.cpp:28:3:28:8 |
| functions.cpp:29:9:29:14 | lookup | lookup | const char * p#0 | declaration:functions.cpp:29:9:29:14 |
| functions.cpp:30:8:30:13 | insert | insert | Name * p#0 | declaration:functions.cpp:30:8:30:13 |
| functions.cpp:33:7:33:7 | operator= | operator= | const MyClass & p#0 | declaration:functions.cpp:33:7:33:7, definition:functions.cpp:33:7:33:7 |
| functions.cpp:29:9:29:14 | lookup | lookup | const char * (unnamed parameter 0) | declaration:functions.cpp:29:9:29:14 |
| functions.cpp:30:8:30:13 | insert | insert | Name * (unnamed parameter 0) | declaration:functions.cpp:30:8:30:13 |
| functions.cpp:33:7:33:7 | operator= | operator= | const MyClass & (unnamed parameter 0) | declaration:functions.cpp:33:7:33:7, definition:functions.cpp:33:7:33:7 |
| functions.cpp:36:2:36:8 | MyClass | MyClass | | declaration:functions.cpp:36:2:36:8 |
| functions.cpp:37:2:37:8 | MyClass | MyClass | int from | declaration:functions.cpp:37:2:37:8 |
| functions.cpp:38:2:38:8 | MyClass | MyClass | const MyClass & from | declaration:functions.cpp:38:2:38:8 |

View File

@@ -1,5 +1,5 @@
| qualifiedNames.cpp:3:25:3:27 | p#0 |
| qualifiedNames.cpp:4:25:4:28 | p#0 |
| qualifiedNames.cpp:3:25:3:27 | (unnamed parameter 0) |
| qualifiedNames.cpp:4:25:4:28 | (unnamed parameter 0) |
| qualifiedNames.cpp:18:18:18:31 | Nested's friend |
| qualifiedNames.cpp:26:9:26:9 | LocalClass |
| qualifiedNames.cpp:26:9:26:9 | operator= |

View File

@@ -1,71 +1,71 @@
#-----| [CopyAssignmentOperator] __va_list_tag& __va_list_tag::operator=(__va_list_tag const&)
#-----| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const __va_list_tag &
#-----| [MoveAssignmentOperator] __va_list_tag& __va_list_tag::operator=(__va_list_tag&&)
#-----| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] __va_list_tag &&
#-----| [Operator,TopLevelFunction] void operator delete(void*)
#-----| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [VoidPointerType] void *
#-----| [Operator,TopLevelFunction] void operator delete(void*, unsigned long)
#-----| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [VoidPointerType] void *
#-----| 1: [Parameter] p#1
#-----| 1: [Parameter] (unnamed parameter 1)
#-----| Type = [LongType] unsigned long
#-----| [Operator,TopLevelFunction] void operator delete(void*, unsigned long, std::align_val_t)
#-----| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [VoidPointerType] void *
#-----| 1: [Parameter] p#1
#-----| 1: [Parameter] (unnamed parameter 1)
#-----| Type = [LongType] unsigned long
#-----| 2: [Parameter] p#2
#-----| 2: [Parameter] (unnamed parameter 2)
#-----| Type = [ScopedEnum] align_val_t
#-----| [Operator,TopLevelFunction] void operator delete[](void*, unsigned long)
#-----| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [VoidPointerType] void *
#-----| 1: [Parameter] p#1
#-----| 1: [Parameter] (unnamed parameter 1)
#-----| Type = [LongType] unsigned long
#-----| [Operator,TopLevelFunction] void operator delete[](void*, unsigned long, std::align_val_t)
#-----| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [VoidPointerType] void *
#-----| 1: [Parameter] p#1
#-----| 1: [Parameter] (unnamed parameter 1)
#-----| Type = [LongType] unsigned long
#-----| 2: [Parameter] p#2
#-----| 2: [Parameter] (unnamed parameter 2)
#-----| Type = [ScopedEnum] align_val_t
#-----| [Operator,TopLevelFunction] void* operator new(unsigned long)
#-----| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LongType] unsigned long
#-----| [Operator,TopLevelFunction] void* operator new(unsigned long, std::align_val_t)
#-----| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LongType] unsigned long
#-----| 1: [Parameter] p#1
#-----| 1: [Parameter] (unnamed parameter 1)
#-----| Type = [ScopedEnum] align_val_t
#-----| [Operator,TopLevelFunction] void* operator new[](unsigned long)
#-----| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LongType] unsigned long
#-----| [Operator,TopLevelFunction] void* operator new[](unsigned long, std::align_val_t)
#-----| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LongType] unsigned long
#-----| 1: [Parameter] p#1
#-----| 1: [Parameter] (unnamed parameter 1)
#-----| Type = [ScopedEnum] align_val_t
bad_asts.cpp:
# 5| [CopyAssignmentOperator] Bad::S& Bad::S::operator=(Bad::S const&)
# 5| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const S &
# 5| [MoveAssignmentOperator] Bad::S& Bad::S::operator=(Bad::S&&)
# 5| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] S &&
# 9| [FunctionTemplateInstantiation,MemberFunction] int Bad::S::MemberFunction<int 6>(int)
# 9| params:
@@ -141,15 +141,15 @@ bad_asts.cpp:
# 17| 2: [ReturnStmt] return ...
# 19| [CopyAssignmentOperator] Bad::Point& Bad::Point::operator=(Bad::Point const&)
# 19| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const Point &
# 19| [MoveAssignmentOperator] Bad::Point& Bad::Point::operator=(Bad::Point&&)
# 19| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] Point &&
# 19| [CopyConstructor] void Bad::Point::Point(Bad::Point const&)
# 19| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const Point &
# 19| initializations:
# 19| 0: [ConstructorFieldInit] constructor init of field x
@@ -168,7 +168,7 @@ bad_asts.cpp:
# 19| 0: [ReturnStmt] return ...
# 19| [MoveConstructor] void Bad::Point::Point(Bad::Point&&)
# 19| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] Point &&
# 22| [Constructor] void Bad::Point::Point()
# 22| params:
@@ -4368,19 +4368,19 @@ ir.cpp:
# 410| 3: [ReturnStmt] return ...
# 412| [CopyAssignmentOperator] Point& Point::operator=(Point const&)
# 412| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const Point &
# 412| [MoveAssignmentOperator] Point& Point::operator=(Point&&)
# 412| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] Point &&
# 417| [CopyAssignmentOperator] Rect& Rect::operator=(Rect const&)
# 417| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const Rect &
# 417| [MoveAssignmentOperator] Rect& Rect::operator=(Rect&&)
# 417| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] Rect &&
# 422| [TopLevelFunction] Point ReturnStruct(Point)
# 422| params:
@@ -5045,11 +5045,11 @@ ir.cpp:
# 523| 3: [ReturnStmt] return ...
# 525| [CopyAssignmentOperator] U& U::operator=(U const&)
# 525| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const U &
# 525| [MoveAssignmentOperator] U& U::operator=(U&&)
# 525| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] U &&
# 530| [TopLevelFunction] void UnionInit(int, float)
# 530| params:
@@ -5332,7 +5332,7 @@ ir.cpp:
# 586| 1: [ReturnStmt] return ...
# 588| [TopLevelFunction] int FuncPtrTarget(int)
# 588| params:
# 588| 0: [Parameter] p#0
# 588| 0: [Parameter] (unnamed parameter 0)
# 588| Type = [IntType] int
# 590| [TopLevelFunction] void SetFuncPtr()
# 590| params:
@@ -5395,25 +5395,25 @@ ir.cpp:
# 595| 4: [ReturnStmt] return ...
# 599| [CopyConstructor] void String::String(String const&)
# 599| params:
# 599| 0: [Parameter] p#0
# 599| 0: [Parameter] (unnamed parameter 0)
# 599| Type = [LValueReferenceType] const String &
# 600| [MoveConstructor] void String::String(String&&)
# 600| params:
# 600| 0: [Parameter] p#0
# 600| 0: [Parameter] (unnamed parameter 0)
# 600| Type = [RValueReferenceType] String &&
# 601| [ConversionConstructor] void String::String(char const*)
# 601| params:
# 601| 0: [Parameter] p#0
# 601| 0: [Parameter] (unnamed parameter 0)
# 601| Type = [PointerType] const char *
# 602| [Destructor] void String::~String()
# 602| params:
# 604| [CopyAssignmentOperator] String& String::operator=(String const&)
# 604| params:
# 604| 0: [Parameter] p#0
# 604| 0: [Parameter] (unnamed parameter 0)
# 604| Type = [LValueReferenceType] const String &
# 605| [MoveAssignmentOperator] String& String::operator=(String&&)
# 605| params:
# 605| 0: [Parameter] p#0
# 605| 0: [Parameter] (unnamed parameter 0)
# 605| Type = [RValueReferenceType] String &&
# 607| [ConstMemberFunction] char const* String::c_str() const
# 607| params:
@@ -5513,19 +5513,19 @@ ir.cpp:
# 626| 3: [ReturnStmt] return ...
# 628| [CopyAssignmentOperator] C& C::operator=(C const&)
# 628| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const C &
# 628| [MoveAssignmentOperator] C& C::operator=(C&&)
# 628| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] C &&
# 628| [CopyConstructor] void C::C(C const&)
# 628| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const C &
# 628| [MoveConstructor] void C::C(C&&)
# 628| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] C &&
# 628| [Destructor] void C::~C()
# 628| params:
@@ -5996,11 +5996,11 @@ ir.cpp:
# 709| ValueCategory = prvalue(load)
# 713| [CopyAssignmentOperator] Outer<long>& Outer<long>::operator=(Outer<long> const&)
# 713| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const Outer<long> &
# 713| [MoveAssignmentOperator] Outer<long>& Outer<long>::operator=(Outer<long>&&)
# 713| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] Outer<long> &&
# 715| [MemberFunction,TemplateFunction] T Outer<T>::Func<U, V>(U, V)
# 715| params:
@@ -6163,7 +6163,7 @@ ir.cpp:
# 743| 1: [ReturnStmt] return ...
# 745| [CopyAssignmentOperator] Base& Base::operator=(Base const&)
# 745| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const Base &
#-----| body: [BlockStmt] { ... }
#-----| 0: [ExprStmt] ExprStmt
@@ -6191,7 +6191,7 @@ ir.cpp:
#-----| -1: [ReferenceDereferenceExpr] (reference dereference)
#-----| Type = [SpecifiedType] const Base
#-----| ValueCategory = lvalue
# 745| expr: [VariableAccess] p#0
# 745| expr: [VariableAccess] (unnamed parameter 0)
# 745| Type = [LValueReferenceType] const Base &
# 745| ValueCategory = prvalue(load)
#-----| 1: [ReturnStmt] return ...
@@ -6206,7 +6206,7 @@ ir.cpp:
#-----| ValueCategory = prvalue(load)
# 745| [CopyConstructor] void Base::Base(Base const&)
# 745| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const Base &
# 745| initializations:
# 745| 0: [ConstructorFieldInit] constructor init of field base_s
@@ -6244,7 +6244,7 @@ ir.cpp:
# 751| ValueCategory = lvalue
# 754| [CopyAssignmentOperator] Middle& Middle::operator=(Middle const&)
# 754| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const Middle &
#-----| body: [BlockStmt] { ... }
#-----| 0: [ExprStmt] ExprStmt
@@ -6277,7 +6277,7 @@ ir.cpp:
#-----| 0: [ReferenceDereferenceExpr] (reference dereference)
#-----| Type = [SpecifiedType] const Middle
#-----| ValueCategory = lvalue
# 754| expr: [VariableAccess] p#0
# 754| expr: [VariableAccess] (unnamed parameter 0)
# 754| Type = [LValueReferenceType] const Middle &
# 754| ValueCategory = prvalue(load)
#-----| 1: [ExprStmt] ExprStmt
@@ -6305,7 +6305,7 @@ ir.cpp:
#-----| -1: [ReferenceDereferenceExpr] (reference dereference)
#-----| Type = [SpecifiedType] const Middle
#-----| ValueCategory = lvalue
# 754| expr: [VariableAccess] p#0
# 754| expr: [VariableAccess] (unnamed parameter 0)
# 754| Type = [LValueReferenceType] const Middle &
# 754| ValueCategory = prvalue(load)
#-----| 2: [ReturnStmt] return ...
@@ -6320,7 +6320,7 @@ ir.cpp:
#-----| ValueCategory = prvalue(load)
# 754| [CopyConstructor] void Middle::Middle(Middle const&)
# 754| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const Middle &
# 757| [Constructor] void Middle::Middle()
# 757| params:
@@ -6355,7 +6355,7 @@ ir.cpp:
# 760| ValueCategory = prvalue
# 763| [CopyAssignmentOperator] Derived& Derived::operator=(Derived const&)
# 763| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const Derived &
#-----| body: [BlockStmt] { ... }
#-----| 0: [ExprStmt] ExprStmt
@@ -6388,7 +6388,7 @@ ir.cpp:
#-----| 0: [ReferenceDereferenceExpr] (reference dereference)
#-----| Type = [SpecifiedType] const Derived
#-----| ValueCategory = lvalue
# 763| expr: [VariableAccess] p#0
# 763| expr: [VariableAccess] (unnamed parameter 0)
# 763| Type = [LValueReferenceType] const Derived &
# 763| ValueCategory = prvalue(load)
#-----| 1: [ExprStmt] ExprStmt
@@ -6416,7 +6416,7 @@ ir.cpp:
#-----| -1: [ReferenceDereferenceExpr] (reference dereference)
#-----| Type = [SpecifiedType] const Derived
#-----| ValueCategory = lvalue
# 763| expr: [VariableAccess] p#0
# 763| expr: [VariableAccess] (unnamed parameter 0)
# 763| Type = [LValueReferenceType] const Derived &
# 763| ValueCategory = prvalue(load)
#-----| 2: [ReturnStmt] return ...
@@ -6431,7 +6431,7 @@ ir.cpp:
#-----| ValueCategory = prvalue(load)
# 763| [CopyConstructor] void Derived::Derived(Derived const&)
# 763| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const Derived &
# 766| [Constructor] void Derived::Derived()
# 766| params:
@@ -6466,11 +6466,11 @@ ir.cpp:
# 769| ValueCategory = prvalue
# 772| [CopyAssignmentOperator] MiddleVB1& MiddleVB1::operator=(MiddleVB1 const&)
# 772| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const MiddleVB1 &
# 772| [CopyConstructor] void MiddleVB1::MiddleVB1(MiddleVB1 const&)
# 772| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const MiddleVB1 &
# 775| [Constructor] void MiddleVB1::MiddleVB1()
# 775| params:
@@ -6505,11 +6505,11 @@ ir.cpp:
# 778| ValueCategory = prvalue
# 781| [CopyAssignmentOperator] MiddleVB2& MiddleVB2::operator=(MiddleVB2 const&)
# 781| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const MiddleVB2 &
# 781| [CopyConstructor] void MiddleVB2::MiddleVB2(MiddleVB2 const&)
# 781| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const MiddleVB2 &
# 784| [Constructor] void MiddleVB2::MiddleVB2()
# 784| params:
@@ -6544,11 +6544,11 @@ ir.cpp:
# 787| ValueCategory = prvalue
# 790| [CopyAssignmentOperator] DerivedVB& DerivedVB::operator=(DerivedVB const&)
# 790| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const DerivedVB &
# 790| [CopyConstructor] void DerivedVB::DerivedVB(DerivedVB const&)
# 790| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const DerivedVB &
# 793| [Constructor] void DerivedVB::DerivedVB()
# 793| params:
@@ -7196,7 +7196,7 @@ ir.cpp:
# 840| 34: [ReturnStmt] return ...
# 842| [CopyAssignmentOperator] PolymorphicBase& PolymorphicBase::operator=(PolymorphicBase const&)
# 842| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const PolymorphicBase &
# 842| [Constructor] void PolymorphicBase::PolymorphicBase()
# 842| params:
@@ -7205,17 +7205,17 @@ ir.cpp:
# 842| 0: [ReturnStmt] return ...
# 842| [CopyConstructor] void PolymorphicBase::PolymorphicBase(PolymorphicBase const&)
# 842| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const PolymorphicBase &
# 843| [Destructor,VirtualFunction] void PolymorphicBase::~PolymorphicBase()
# 843| params:
# 846| [CopyAssignmentOperator] PolymorphicDerived& PolymorphicDerived::operator=(PolymorphicDerived const&)
# 846| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const PolymorphicDerived &
# 846| [MoveAssignmentOperator] PolymorphicDerived& PolymorphicDerived::operator=(PolymorphicDerived&&)
# 846| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] PolymorphicDerived &&
# 846| [Constructor] void PolymorphicDerived::PolymorphicDerived()
# 846| params:
@@ -7227,11 +7227,11 @@ ir.cpp:
# 846| 0: [ReturnStmt] return ...
# 846| [CopyConstructor] void PolymorphicDerived::PolymorphicDerived(PolymorphicDerived const&)
# 846| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const PolymorphicDerived &
# 846| [MoveConstructor] void PolymorphicDerived::PolymorphicDerived(PolymorphicDerived&&)
# 846| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] PolymorphicDerived &&
# 846| [Destructor,VirtualFunction] void PolymorphicDerived::~PolymorphicDerived()
# 846| params:
@@ -7764,111 +7764,111 @@ ir.cpp:
# 916| 2: [ReturnStmt] return ...
# 924| [Operator,TopLevelFunction] void* operator new(size_t, float)
# 924| params:
# 924| 0: [Parameter] p#0
# 924| 0: [Parameter] (unnamed parameter 0)
# 924| Type = [CTypedefType,Size_t] size_t
# 924| 1: [Parameter] p#1
# 924| 1: [Parameter] (unnamed parameter 1)
# 924| Type = [FloatType] float
# 925| [Operator,TopLevelFunction] void* operator new[](size_t, float)
# 925| params:
# 925| 0: [Parameter] p#0
# 925| 0: [Parameter] (unnamed parameter 0)
# 925| Type = [CTypedefType,Size_t] size_t
# 925| 1: [Parameter] p#1
# 925| 1: [Parameter] (unnamed parameter 1)
# 925| Type = [FloatType] float
# 926| [Operator,TopLevelFunction] void* operator new(size_t, std::align_val_t, float)
# 926| params:
# 926| 0: [Parameter] p#0
# 926| 0: [Parameter] (unnamed parameter 0)
# 926| Type = [CTypedefType,Size_t] size_t
# 926| 1: [Parameter] p#1
# 926| 1: [Parameter] (unnamed parameter 1)
# 926| Type = [ScopedEnum] align_val_t
# 926| 2: [Parameter] p#2
# 926| 2: [Parameter] (unnamed parameter 2)
# 926| Type = [FloatType] float
# 927| [Operator,TopLevelFunction] void* operator new[](size_t, std::align_val_t, float)
# 927| params:
# 927| 0: [Parameter] p#0
# 927| 0: [Parameter] (unnamed parameter 0)
# 927| Type = [CTypedefType,Size_t] size_t
# 927| 1: [Parameter] p#1
# 927| 1: [Parameter] (unnamed parameter 1)
# 927| Type = [ScopedEnum] align_val_t
# 927| 2: [Parameter] p#2
# 927| 2: [Parameter] (unnamed parameter 2)
# 927| Type = [FloatType] float
# 928| [Operator,TopLevelFunction] void operator delete(void*, float)
# 928| params:
# 928| 0: [Parameter] p#0
# 928| 0: [Parameter] (unnamed parameter 0)
# 928| Type = [VoidPointerType] void *
# 928| 1: [Parameter] p#1
# 928| 1: [Parameter] (unnamed parameter 1)
# 928| Type = [FloatType] float
# 929| [Operator,TopLevelFunction] void operator delete[](void*, float)
# 929| params:
# 929| 0: [Parameter] p#0
# 929| 0: [Parameter] (unnamed parameter 0)
# 929| Type = [VoidPointerType] void *
# 929| 1: [Parameter] p#1
# 929| 1: [Parameter] (unnamed parameter 1)
# 929| Type = [FloatType] float
# 930| [Operator,TopLevelFunction] void operator delete(void*, std::align_val_t, float)
# 930| params:
# 930| 0: [Parameter] p#0
# 930| 0: [Parameter] (unnamed parameter 0)
# 930| Type = [VoidPointerType] void *
# 930| 1: [Parameter] p#1
# 930| 1: [Parameter] (unnamed parameter 1)
# 930| Type = [ScopedEnum] align_val_t
# 930| 2: [Parameter] p#2
# 930| 2: [Parameter] (unnamed parameter 2)
# 930| Type = [FloatType] float
# 931| [Operator,TopLevelFunction] void operator delete[](void*, std::align_val_t, float)
# 931| params:
# 931| 0: [Parameter] p#0
# 931| 0: [Parameter] (unnamed parameter 0)
# 931| Type = [VoidPointerType] void *
# 931| 1: [Parameter] p#1
# 931| 1: [Parameter] (unnamed parameter 1)
# 931| Type = [ScopedEnum] align_val_t
# 931| 2: [Parameter] p#2
# 931| 2: [Parameter] (unnamed parameter 2)
# 931| Type = [FloatType] float
# 933| [CopyAssignmentOperator] SizedDealloc& SizedDealloc::operator=(SizedDealloc const&)
# 933| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const SizedDealloc &
# 933| [MoveAssignmentOperator] SizedDealloc& SizedDealloc::operator=(SizedDealloc&&)
# 933| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] SizedDealloc &&
# 935| [MemberFunction] void* SizedDealloc::operator new(size_t)
# 935| params:
# 935| 0: [Parameter] p#0
# 935| 0: [Parameter] (unnamed parameter 0)
# 935| Type = [CTypedefType,Size_t] size_t
# 936| [MemberFunction] void* SizedDealloc::operator new[](size_t)
# 936| params:
# 936| 0: [Parameter] p#0
# 936| 0: [Parameter] (unnamed parameter 0)
# 936| Type = [CTypedefType,Size_t] size_t
# 937| [MemberFunction] void SizedDealloc::operator delete(void*, size_t)
# 937| params:
# 937| 0: [Parameter] p#0
# 937| 0: [Parameter] (unnamed parameter 0)
# 937| Type = [VoidPointerType] void *
# 937| 1: [Parameter] p#1
# 937| 1: [Parameter] (unnamed parameter 1)
# 937| Type = [CTypedefType,Size_t] size_t
# 938| [MemberFunction] void SizedDealloc::operator delete[](void*, size_t)
# 938| params:
# 938| 0: [Parameter] p#0
# 938| 0: [Parameter] (unnamed parameter 0)
# 938| Type = [VoidPointerType] void *
# 938| 1: [Parameter] p#1
# 938| 1: [Parameter] (unnamed parameter 1)
# 938| Type = [CTypedefType,Size_t] size_t
# 941| [CopyAssignmentOperator] Overaligned& Overaligned::operator=(Overaligned const&)
# 941| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const Overaligned &
# 941| [MoveAssignmentOperator] Overaligned& Overaligned::operator=(Overaligned&&)
# 941| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] Overaligned &&
# 945| [CopyAssignmentOperator] DefaultCtorWithDefaultParam& DefaultCtorWithDefaultParam::operator=(DefaultCtorWithDefaultParam const&)
# 945| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const DefaultCtorWithDefaultParam &
# 945| [MoveAssignmentOperator] DefaultCtorWithDefaultParam& DefaultCtorWithDefaultParam::operator=(DefaultCtorWithDefaultParam&&)
# 945| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] DefaultCtorWithDefaultParam &&
# 945| [CopyConstructor] void DefaultCtorWithDefaultParam::DefaultCtorWithDefaultParam(DefaultCtorWithDefaultParam const&)
# 945| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const DefaultCtorWithDefaultParam &
# 945| [MoveConstructor] void DefaultCtorWithDefaultParam::DefaultCtorWithDefaultParam(DefaultCtorWithDefaultParam&&)
# 945| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] DefaultCtorWithDefaultParam &&
# 946| [Constructor] void DefaultCtorWithDefaultParam::DefaultCtorWithDefaultParam(double)
# 946| params:
@@ -8438,11 +8438,11 @@ ir.cpp:
# 1030| 5: [ReturnStmt] return ...
# 1032| [CopyAssignmentOperator] EmptyStruct& EmptyStruct::operator=(EmptyStruct const&)
# 1032| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const EmptyStruct &
# 1032| [MoveAssignmentOperator] EmptyStruct& EmptyStruct::operator=(EmptyStruct&&)
# 1032| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] EmptyStruct &&
# 1034| [TopLevelFunction] void EmptyStructInit()
# 1034| params:
@@ -8457,17 +8457,17 @@ ir.cpp:
# 1036| 1: [ReturnStmt] return ...
# 1038| [CopyAssignmentOperator] (lambda [] type at line 1038, col. 12)& (lambda [] type at line 1038, col. 12)::operator=((lambda [] type at line 1038, col. 12) const&)
# 1038| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const lambda [] type at line 1038, col. 12 &
# 1038| [CopyConstructor] void (lambda [] type at line 1038, col. 12)::(constructor)((lambda [] type at line 1038, col. 12) const&)
# 1038| [CopyConstructor] void (lambda [] type at line 1038, col. 12)::(unnamed constructor)((lambda [] type at line 1038, col. 12) const&)
# 1038| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const lambda [] type at line 1038, col. 12 &
# 1038| [MoveConstructor] void (lambda [] type at line 1038, col. 12)::(constructor)((lambda [] type at line 1038, col. 12)&&)
# 1038| [MoveConstructor] void (lambda [] type at line 1038, col. 12)::(unnamed constructor)((lambda [] type at line 1038, col. 12)&&)
# 1038| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] lambda [] type at line 1038, col. 12 &&
# 1038| [Constructor] void (lambda [] type at line 1038, col. 12)::(constructor)()
# 1038| [Constructor] void (lambda [] type at line 1038, col. 12)::(unnamed constructor)()
# 1038| params:
# 1038| [MemberFunction] void (lambda [] type at line 1038, col. 12)::_FUN()
# 1038| params:
@@ -8787,17 +8787,17 @@ ir.cpp:
# 1056| 15: [ReturnStmt] return ...
# 1041| [CopyAssignmentOperator] (void Lambda(int, String const&))::(lambda [] type at line 1041, col. 23)& (void Lambda(int, String const&))::(lambda [] type at line 1041, col. 23)::operator=((void Lambda(int, String const&))::(lambda [] type at line 1041, col. 23) const&)
# 1041| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const lambda [] type at line 1041, col. 23 &
# 1041| [CopyConstructor] void (void Lambda(int, String const&))::(lambda [] type at line 1041, col. 23)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1041, col. 23) const&)
# 1041| [CopyConstructor] void (void Lambda(int, String const&))::(lambda [] type at line 1041, col. 23)::(unnamed constructor)((void Lambda(int, String const&))::(lambda [] type at line 1041, col. 23) const&)
# 1041| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const lambda [] type at line 1041, col. 23 &
# 1041| [MoveConstructor] void (void Lambda(int, String const&))::(lambda [] type at line 1041, col. 23)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1041, col. 23)&&)
# 1041| [MoveConstructor] void (void Lambda(int, String const&))::(lambda [] type at line 1041, col. 23)::(unnamed constructor)((void Lambda(int, String const&))::(lambda [] type at line 1041, col. 23)&&)
# 1041| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] lambda [] type at line 1041, col. 23 &&
# 1041| [Constructor] void (void Lambda(int, String const&))::(lambda [] type at line 1041, col. 23)::(constructor)()
# 1041| [Constructor] void (void Lambda(int, String const&))::(lambda [] type at line 1041, col. 23)::(unnamed constructor)()
# 1041| params:
# 1041| [MemberFunction] char (void Lambda(int, String const&))::(lambda [] type at line 1041, col. 23)::_FUN(float)
# 1041| params:
@@ -8822,17 +8822,17 @@ ir.cpp:
# 1041| ValueCategory = prvalue(load)
# 1043| [CopyAssignmentOperator] (void Lambda(int, String const&))::(lambda [] type at line 1043, col. 21)& (void Lambda(int, String const&))::(lambda [] type at line 1043, col. 21)::operator=((void Lambda(int, String const&))::(lambda [] type at line 1043, col. 21) const&)
# 1043| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const lambda [] type at line 1043, col. 21 &
# 1043| [CopyConstructor] void (void Lambda(int, String const&))::(lambda [] type at line 1043, col. 21)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1043, col. 21) const&)
# 1043| [CopyConstructor] void (void Lambda(int, String const&))::(lambda [] type at line 1043, col. 21)::(unnamed constructor)((void Lambda(int, String const&))::(lambda [] type at line 1043, col. 21) const&)
# 1043| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const lambda [] type at line 1043, col. 21 &
# 1043| [MoveConstructor] void (void Lambda(int, String const&))::(lambda [] type at line 1043, col. 21)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1043, col. 21)&&)
# 1043| [MoveConstructor] void (void Lambda(int, String const&))::(lambda [] type at line 1043, col. 21)::(unnamed constructor)((void Lambda(int, String const&))::(lambda [] type at line 1043, col. 21)&&)
# 1043| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] lambda [] type at line 1043, col. 21 &&
# 1043| [Constructor] void (void Lambda(int, String const&))::(lambda [] type at line 1043, col. 21)::(constructor)()
# 1043| [Constructor] void (void Lambda(int, String const&))::(lambda [] type at line 1043, col. 21)::(unnamed constructor)()
# 1043| params:
# 1043| [ConstMemberFunction] char (void Lambda(int, String const&))::(lambda [] type at line 1043, col. 21)::operator()(float) const
# 1043| params:
@@ -8866,17 +8866,17 @@ ir.cpp:
# 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
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const lambda [] type at line 1045, col. 21 &
# 1045| [CopyConstructor] void (void Lambda(int, String const&))::(lambda [] type at line 1045, col. 21)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1045, col. 21) const&)
# 1045| [CopyConstructor] void (void Lambda(int, String const&))::(lambda [] type at line 1045, col. 21)::(unnamed constructor)((void Lambda(int, String const&))::(lambda [] type at line 1045, col. 21) const&)
# 1045| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const lambda [] type at line 1045, col. 21 &
# 1045| [MoveConstructor] void (void Lambda(int, String const&))::(lambda [] type at line 1045, col. 21)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1045, col. 21)&&)
# 1045| [MoveConstructor] void (void Lambda(int, String const&))::(lambda [] type at line 1045, col. 21)::(unnamed constructor)((void Lambda(int, String const&))::(lambda [] type at line 1045, col. 21)&&)
# 1045| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] lambda [] type at line 1045, col. 21 &&
# 1045| [Constructor] void (void Lambda(int, String const&))::(lambda [] type at line 1045, col. 21)::(constructor)()
# 1045| [Constructor] void (void Lambda(int, String const&))::(lambda [] type at line 1045, col. 21)::(unnamed constructor)()
# 1045| params:
# 1045| [Destructor] void (void Lambda(int, String const&))::(lambda [] type at line 1045, col. 21)::~<unnamed>()
# 1045| params:
@@ -8918,17 +8918,17 @@ ir.cpp:
# 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
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const lambda [] type at line 1047, col. 30 &
# 1047| [CopyConstructor] void (void Lambda(int, String const&))::(lambda [] type at line 1047, col. 30)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1047, col. 30) const&)
# 1047| [CopyConstructor] void (void Lambda(int, String const&))::(lambda [] type at line 1047, col. 30)::(unnamed constructor)((void Lambda(int, String const&))::(lambda [] type at line 1047, col. 30) const&)
# 1047| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const lambda [] type at line 1047, col. 30 &
# 1047| [MoveConstructor] void (void Lambda(int, String const&))::(lambda [] type at line 1047, col. 30)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1047, col. 30)&&)
# 1047| [MoveConstructor] void (void Lambda(int, String const&))::(lambda [] type at line 1047, col. 30)::(unnamed constructor)((void Lambda(int, String const&))::(lambda [] type at line 1047, col. 30)&&)
# 1047| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] lambda [] type at line 1047, col. 30 &&
# 1047| [Constructor] void (void Lambda(int, String const&))::(lambda [] type at line 1047, col. 30)::(constructor)()
# 1047| [Constructor] void (void Lambda(int, String const&))::(lambda [] type at line 1047, col. 30)::(unnamed constructor)()
# 1047| params:
# 1047| [ConstMemberFunction] char (void Lambda(int, String const&))::(lambda [] type at line 1047, col. 30)::operator()(float) const
# 1047| params:
@@ -8957,17 +8957,17 @@ ir.cpp:
# 1047| ValueCategory = prvalue
# 1049| [CopyAssignmentOperator] (void Lambda(int, String const&))::(lambda [] type at line 1049, col. 30)& (void Lambda(int, String const&))::(lambda [] type at line 1049, col. 30)::operator=((void Lambda(int, String const&))::(lambda [] type at line 1049, col. 30) const&)
# 1049| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const lambda [] type at line 1049, col. 30 &
# 1049| [CopyConstructor] void (void Lambda(int, String const&))::(lambda [] type at line 1049, col. 30)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1049, col. 30) const&)
# 1049| [CopyConstructor] void (void Lambda(int, String const&))::(lambda [] type at line 1049, col. 30)::(unnamed constructor)((void Lambda(int, String const&))::(lambda [] type at line 1049, col. 30) const&)
# 1049| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const lambda [] type at line 1049, col. 30 &
# 1049| [MoveConstructor] void (void Lambda(int, String const&))::(lambda [] type at line 1049, col. 30)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1049, col. 30)&&)
# 1049| [MoveConstructor] void (void Lambda(int, String const&))::(lambda [] type at line 1049, col. 30)::(unnamed constructor)((void Lambda(int, String const&))::(lambda [] type at line 1049, col. 30)&&)
# 1049| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] lambda [] type at line 1049, col. 30 &&
# 1049| [Constructor] void (void Lambda(int, String const&))::(lambda [] type at line 1049, col. 30)::(constructor)()
# 1049| [Constructor] void (void Lambda(int, String const&))::(lambda [] type at line 1049, col. 30)::(unnamed constructor)()
# 1049| params:
# 1049| [Destructor] void (void Lambda(int, String const&))::(lambda [] type at line 1049, col. 30)::~<unnamed>()
# 1049| params:
@@ -9007,17 +9007,17 @@ ir.cpp:
# 1049| ValueCategory = prvalue
# 1051| [CopyAssignmentOperator] (void Lambda(int, String const&))::(lambda [] type at line 1051, col. 32)& (void Lambda(int, String const&))::(lambda [] type at line 1051, col. 32)::operator=((void Lambda(int, String const&))::(lambda [] type at line 1051, col. 32) const&)
# 1051| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const lambda [] type at line 1051, col. 32 &
# 1051| [CopyConstructor] void (void Lambda(int, String const&))::(lambda [] type at line 1051, col. 32)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1051, col. 32) const&)
# 1051| [CopyConstructor] void (void Lambda(int, String const&))::(lambda [] type at line 1051, col. 32)::(unnamed constructor)((void Lambda(int, String const&))::(lambda [] type at line 1051, col. 32) const&)
# 1051| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const lambda [] type at line 1051, col. 32 &
# 1051| [MoveConstructor] void (void Lambda(int, String const&))::(lambda [] type at line 1051, col. 32)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1051, col. 32)&&)
# 1051| [MoveConstructor] void (void Lambda(int, String const&))::(lambda [] type at line 1051, col. 32)::(unnamed constructor)((void Lambda(int, String const&))::(lambda [] type at line 1051, col. 32)&&)
# 1051| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] lambda [] type at line 1051, col. 32 &&
# 1051| [Constructor] void (void Lambda(int, String const&))::(lambda [] type at line 1051, col. 32)::(constructor)()
# 1051| [Constructor] void (void Lambda(int, String const&))::(lambda [] type at line 1051, col. 32)::(unnamed constructor)()
# 1051| params:
# 1051| [ConstMemberFunction] char (void Lambda(int, String const&))::(lambda [] type at line 1051, col. 32)::operator()(float) const
# 1051| params:
@@ -9048,17 +9048,17 @@ ir.cpp:
# 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
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const lambda [] type at line 1054, col. 23 &
# 1054| [CopyConstructor] void (void Lambda(int, String const&))::(lambda [] type at line 1054, col. 23)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1054, col. 23) const&)
# 1054| [CopyConstructor] void (void Lambda(int, String const&))::(lambda [] type at line 1054, col. 23)::(unnamed constructor)((void Lambda(int, String const&))::(lambda [] type at line 1054, col. 23) const&)
# 1054| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const lambda [] type at line 1054, col. 23 &
# 1054| [MoveConstructor] void (void Lambda(int, String const&))::(lambda [] type at line 1054, col. 23)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1054, col. 23)&&)
# 1054| [MoveConstructor] void (void Lambda(int, String const&))::(lambda [] type at line 1054, col. 23)::(unnamed constructor)((void Lambda(int, String const&))::(lambda [] type at line 1054, col. 23)&&)
# 1054| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] lambda [] type at line 1054, col. 23 &&
# 1054| [Constructor] void (void Lambda(int, String const&))::(lambda [] type at line 1054, col. 23)::(constructor)()
# 1054| [Constructor] void (void Lambda(int, String const&))::(lambda [] type at line 1054, col. 23)::(unnamed constructor)()
# 1054| params:
# 1054| [ConstMemberFunction] char (void Lambda(int, String const&))::(lambda [] type at line 1054, col. 23)::operator()(float) const
# 1054| params:
@@ -9110,19 +9110,19 @@ ir.cpp:
# 1054| ValueCategory = prvalue(load)
# 1059| [CopyAssignmentOperator] vector<int>& vector<int>::operator=(vector<int> const&)
# 1059| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const vector<int> &
# 1059| [MoveAssignmentOperator] vector<int>& vector<int>::operator=(vector<int>&&)
# 1059| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] vector<int> &&
# 1060| [CopyAssignmentOperator] vector<int>::iterator& vector<int>::iterator::operator=(vector<int>::iterator const public&)
# 1060| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const iterator &
# 1060| [MoveAssignmentOperator] vector<int>::iterator& vector<int>::iterator::operator=(vector<int>::iterator&&)
# 1060| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] iterator &&
# 1062| [MemberFunction] vector<T>::iterator& vector<T>::iterator::operator++()
# 1062| params:
@@ -9319,15 +9319,15 @@ ir.cpp:
# 1129| 5: [ReturnStmt] return ...
# 1126| [TopLevelFunction] int f(float)
# 1126| params:
# 1126| 0: [Parameter] p#0
# 1126| 0: [Parameter] (unnamed parameter 0)
# 1126| Type = [FloatType] float
# 1127| [TopLevelFunction] int z(float)
# 1127| params:
# 1127| 0: [Parameter] p#0
# 1127| 0: [Parameter] (unnamed parameter 0)
# 1127| Type = [FloatType] float
# 1127| [TopLevelFunction] int w(float)
# 1127| params:
# 1127| 0: [Parameter] p#0
# 1127| 0: [Parameter] (unnamed parameter 0)
# 1127| Type = [FloatType] float
# 1137| [TopLevelFunction] void ExternDeclarationsInMacro()
# 1137| params:
@@ -10049,11 +10049,11 @@ ir.cpp:
# 1256| 3: [ReturnStmt] return ...
# 1258| [CopyAssignmentOperator] A& A::operator=(A const&)
# 1258| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const A &
# 1258| [MoveAssignmentOperator] A& A::operator=(A&&)
# 1258| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] A &&
# 1261| [MemberFunction] void A::static_member(A*, int)
# 1261| params:
@@ -10485,9 +10485,9 @@ ir.cpp:
# 1315| ValueCategory = prvalue(load)
# 1318| [Operator,TopLevelFunction] void* operator new(size_t, void*)
# 1318| params:
# 1318| 0: [Parameter] p#0
# 1318| 0: [Parameter] (unnamed parameter 0)
# 1318| Type = [CTypedefType,Size_t] size_t
# 1318| 1: [Parameter] p#1
# 1318| 1: [Parameter] (unnamed parameter 1)
# 1318| Type = [VoidPointerType] void *
# 1320| [TopLevelFunction] void f(int*)
# 1320| params:
@@ -10515,19 +10515,19 @@ ir.cpp:
perf-regression.cpp:
# 4| [CopyAssignmentOperator] Big& Big::operator=(Big const&)
# 4| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const Big &
# 4| [MoveAssignmentOperator] Big& Big::operator=(Big&&)
# 4| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] Big &&
# 4| [CopyConstructor] void Big::Big(Big const&)
# 4| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const Big &
# 4| [MoveConstructor] void Big::Big(Big&&)
# 4| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] Big &&
# 6| [Constructor] void Big::Big()
# 6| params:
@@ -10569,11 +10569,11 @@ struct_init.cpp:
# 2| Type = [VoidPointerType] void *
# 4| [CopyAssignmentOperator] Info& Info::operator=(Info const&)
# 4| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const Info &
# 4| [MoveAssignmentOperator] Info& Info::operator=(Info&&)
# 4| params:
#-----| 0: [Parameter] p#0
#-----| 0: [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] Info &&
# 16| [TopLevelFunction] void let_info_escape(Info*)
# 16| params:

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,17 +1,17 @@
| file://:0:0:0:0 | operator= |
| file://:0:0:0:0 | operator= |
| gnu.cpp:1:13:1:15 | gnu |
| gnu.cpp:2:28:2:28 | (constructor) |
| gnu.cpp:2:28:2:28 | (constructor) |
| gnu.cpp:2:28:2:28 | (constructor) |
| gnu.cpp:2:28:2:28 | (unnamed constructor) |
| gnu.cpp:2:28:2:28 | (unnamed constructor) |
| gnu.cpp:2:28:2:28 | (unnamed constructor) |
| gnu.cpp:2:28:2:28 | operator= |
| gnu.cpp:2:30:2:30 | _FUN |
| gnu.cpp:2:30:2:30 | operator auto (*)(int &)->int |
| gnu.cpp:2:30:2:30 | operator() |
| ms32.cpp:1:13:1:16 | ms32 |
| ms32.cpp:2:28:2:28 | (constructor) |
| ms32.cpp:2:28:2:28 | (constructor) |
| ms32.cpp:2:28:2:28 | (constructor) |
| ms32.cpp:2:28:2:28 | (unnamed constructor) |
| ms32.cpp:2:28:2:28 | (unnamed constructor) |
| ms32.cpp:2:28:2:28 | (unnamed constructor) |
| ms32.cpp:2:28:2:28 | operator= |
| ms32.cpp:2:30:2:30 | _FUN__cdecl |
| ms32.cpp:2:30:2:30 | _FUN__fastcall |
@@ -23,9 +23,9 @@
| ms32.cpp:2:30:2:30 | operator auto (__vectorcall *)(int &)->int |
| ms32.cpp:2:30:2:30 | operator() |
| ms.cpp:1:13:1:14 | ms |
| ms.cpp:2:28:2:28 | (constructor) |
| ms.cpp:2:28:2:28 | (constructor) |
| ms.cpp:2:28:2:28 | (constructor) |
| ms.cpp:2:28:2:28 | (unnamed constructor) |
| ms.cpp:2:28:2:28 | (unnamed constructor) |
| ms.cpp:2:28:2:28 | (unnamed constructor) |
| ms.cpp:2:28:2:28 | operator= |
| ms.cpp:2:30:2:30 | _FUN |
| ms.cpp:2:30:2:30 | _FUN__vectorcall |

View File

@@ -10,12 +10,12 @@
| captures.cpp:2:14:2:14 | definition of x |
| captures.cpp:2:14:2:14 | x |
| captures.cpp:2:17:6:3 | { ... } |
| captures.cpp:3:5:3:5 | (constructor) |
| captures.cpp:3:5:3:5 | (constructor) |
| captures.cpp:3:5:3:5 | (constructor) |
| captures.cpp:3:5:3:5 | declaration of (constructor) |
| captures.cpp:3:5:3:5 | declaration of (constructor) |
| captures.cpp:3:5:3:5 | definition of (constructor) |
| captures.cpp:3:5:3:5 | (unnamed constructor) |
| captures.cpp:3:5:3:5 | (unnamed constructor) |
| captures.cpp:3:5:3:5 | (unnamed constructor) |
| captures.cpp:3:5:3:5 | declaration of (unnamed constructor) |
| captures.cpp:3:5:3:5 | declaration of (unnamed constructor) |
| captures.cpp:3:5:3:5 | definition of (unnamed constructor) |
| captures.cpp:3:5:3:5 | definition of operator= |
| captures.cpp:3:5:3:5 | operator= |
| captures.cpp:3:5:5:5 | [...](...){...} |
@@ -47,12 +47,12 @@
| captures.cpp:8:14:8:14 | definition of x |
| captures.cpp:8:14:8:14 | x |
| captures.cpp:8:17:12:3 | { ... } |
| captures.cpp:9:5:9:5 | (constructor) |
| captures.cpp:9:5:9:5 | (constructor) |
| captures.cpp:9:5:9:5 | (constructor) |
| captures.cpp:9:5:9:5 | declaration of (constructor) |
| captures.cpp:9:5:9:5 | declaration of (constructor) |
| captures.cpp:9:5:9:5 | definition of (constructor) |
| captures.cpp:9:5:9:5 | (unnamed constructor) |
| captures.cpp:9:5:9:5 | (unnamed constructor) |
| captures.cpp:9:5:9:5 | (unnamed constructor) |
| captures.cpp:9:5:9:5 | declaration of (unnamed constructor) |
| captures.cpp:9:5:9:5 | declaration of (unnamed constructor) |
| captures.cpp:9:5:9:5 | definition of (unnamed constructor) |
| captures.cpp:9:5:9:5 | definition of operator= |
| captures.cpp:9:5:9:5 | operator= |
| captures.cpp:9:5:11:5 | [...](...){...} |
@@ -84,12 +84,12 @@
| captures.cpp:14:21:14:21 | definition of x |
| captures.cpp:14:21:14:21 | x |
| captures.cpp:14:24:18:3 | { ... } |
| captures.cpp:15:5:15:5 | (constructor) |
| captures.cpp:15:5:15:5 | (constructor) |
| captures.cpp:15:5:15:5 | (constructor) |
| captures.cpp:15:5:15:5 | declaration of (constructor) |
| captures.cpp:15:5:15:5 | declaration of (constructor) |
| captures.cpp:15:5:15:5 | definition of (constructor) |
| captures.cpp:15:5:15:5 | (unnamed constructor) |
| captures.cpp:15:5:15:5 | (unnamed constructor) |
| captures.cpp:15:5:15:5 | (unnamed constructor) |
| captures.cpp:15:5:15:5 | declaration of (unnamed constructor) |
| captures.cpp:15:5:15:5 | declaration of (unnamed constructor) |
| captures.cpp:15:5:15:5 | definition of (unnamed constructor) |
| captures.cpp:15:5:15:5 | definition of operator= |
| captures.cpp:15:5:15:5 | operator= |
| captures.cpp:15:5:17:5 | [...](...){...} |
@@ -122,16 +122,16 @@
| 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) |
| captures.cpp:22:19:22:19 | (constructor) |
| captures.cpp:22:19:22:19 | (unnamed constructor) |
| captures.cpp:22:19:22:19 | (unnamed constructor) |
| captures.cpp:22:19:22:19 | (unnamed constructor) |
| captures.cpp:22:19:22:19 | Unknown literal |
| captures.cpp:22:19:22:19 | Unknown literal |
| captures.cpp:22:19:22:19 | constructor init of field x |
| captures.cpp:22:19:22:19 | constructor init of field y |
| captures.cpp:22:19:22:19 | declaration of (constructor) |
| captures.cpp:22:19:22:19 | definition of (constructor) |
| captures.cpp:22:19:22:19 | definition of (constructor) |
| captures.cpp:22:19:22:19 | declaration of (unnamed constructor) |
| captures.cpp:22:19:22:19 | definition of (unnamed constructor) |
| captures.cpp:22:19:22:19 | definition of (unnamed constructor) |
| captures.cpp:22:19:22:19 | definition of operator= |
| captures.cpp:22:19:22:19 | operator= |
| captures.cpp:22:19:22:19 | return ... |
@@ -182,14 +182,14 @@
| end_pos.cpp:9:14:11:5 | [...](...){...} |
| end_pos.cpp:9:14:11:5 | initializer for fp |
| end_pos.cpp:9:14:11:5 | {...} |
| end_pos.cpp:9:15:9:15 | (constructor) |
| end_pos.cpp:9:15:9:15 | (constructor) |
| end_pos.cpp:9:15:9:15 | (constructor) |
| end_pos.cpp:9:15:9:15 | (unnamed constructor) |
| end_pos.cpp:9:15:9:15 | (unnamed constructor) |
| end_pos.cpp:9:15:9:15 | (unnamed constructor) |
| end_pos.cpp:9:15:9:15 | Unknown literal |
| end_pos.cpp:9:15:9:15 | constructor init of field ii |
| end_pos.cpp:9:15:9:15 | declaration of (constructor) |
| end_pos.cpp:9:15:9:15 | definition of (constructor) |
| end_pos.cpp:9:15:9:15 | definition of (constructor) |
| end_pos.cpp:9:15:9:15 | declaration of (unnamed constructor) |
| end_pos.cpp:9:15:9:15 | definition of (unnamed constructor) |
| end_pos.cpp:9:15:9:15 | definition of (unnamed constructor) |
| end_pos.cpp:9:15:9:15 | definition of operator= |
| end_pos.cpp:9:15:9:15 | operator= |
| end_pos.cpp:9:15:9:15 | return ... |
@@ -208,6 +208,25 @@
| file://:0:0:0:0 | |
| file://:0:0:0:0 | (global namespace) |
| file://:0:0:0:0 | (reference to) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | ..()(..) |
| file://:0:0:0:0 | ..()(..) |
| file://:0:0:0:0 | ..(*)(..) |
@@ -289,24 +308,5 @@
| file://:0:0:0:0 | operator= |
| file://:0:0:0:0 | operator= |
| file://:0:0:0:0 | overflow_arg_area |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| 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 | void * |

View File

@@ -1,103 +1,103 @@
| <no scope> | false | 154 | 154 | (constructor) |
| <no scope> | false | 157 | 157 | (constructor) |
| <no scope> | false | 164 | 164 | return ... |
| <no scope> | false | 166 | 166 | { ... } |
| <no scope> | false | 167 | 167 | operator= |
| <no scope> | false | 173 | 173 | (constructor) |
| <no scope> | false | 175 | 175 | _FUN |
| <no scope> | false | 184 | 184 | operator auto (*)(int, int)->int |
| <no scope> | false | 190 | 190 | _FUN |
| <no scope> | false | 192 | 192 | return ... |
| <no scope> | false | 194 | 194 | { ... } |
| <no scope> | false | 195 | 195 | operator() |
| <no scope> | false | 206 | 206 | declaration |
| <no scope> | false | 212 | 212 | call to printf |
| <no scope> | false | 220 | 220 | Running with %d and %d\n |
| <no scope> | false | 221 | 221 | array to pointer conversion |
| <no scope> | false | 222 | 222 | (char *)... |
| <no scope> | false | 223 | 223 | x |
| <no scope> | false | 225 | 225 | y |
| <no scope> | false | 227 | 227 | ExprStmt |
| <no scope> | false | 232 | 232 | z |
| <no scope> | false | 234 | 234 | x |
| <no scope> | false | 236 | 236 | y |
| <no scope> | false | 238 | 238 | ... + ... |
| <no scope> | false | 240 | 240 | ... = ... |
| <no scope> | false | 242 | 242 | ExprStmt |
| <no scope> | false | 244 | 244 | call to printf |
| <no scope> | false | 250 | 250 | Returning %d %d\n |
| <no scope> | false | 251 | 251 | array to pointer conversion |
| <no scope> | false | 252 | 252 | (char *)... |
| <no scope> | false | 253 | 253 | z |
| <no scope> | false | 255 | 255 | z |
| <no scope> | false | 257 | 257 | ExprStmt |
| <no scope> | false | 259 | 259 | z |
| <no scope> | false | 261 | 261 | return ... |
| <no scope> | false | 263 | 263 | { ... } |
| <no scope> | true | 164 | 157 | |
| <no scope> | true | 166 | 164 | |
| <no scope> | true | 190 | 184 | |
| <no scope> | true | 192 | 190 | |
| <no scope> | true | 194 | 192 | |
| <no scope> | true | 206 | 227 | |
| <no scope> | true | 212 | 242 | |
| <no scope> | true | 220 | 223 | |
| <no scope> | true | 223 | 225 | |
| <no scope> | true | 225 | 212 | |
| <no scope> | true | 227 | 220 | |
| <no scope> | true | 232 | 240 | |
| <no scope> | true | 234 | 236 | |
| <no scope> | true | 236 | 238 | |
| <no scope> | true | 238 | 232 | |
| <no scope> | true | 240 | 257 | |
| <no scope> | true | 242 | 234 | |
| <no scope> | true | 244 | 261 | |
| <no scope> | true | 250 | 253 | |
| <no scope> | true | 253 | 255 | |
| <no scope> | true | 255 | 244 | |
| <no scope> | true | 257 | 250 | |
| <no scope> | true | 259 | 195 | |
| <no scope> | true | 261 | 259 | |
| <no scope> | true | 263 | 206 | |
| __va_list_tag::operator= | false | 92 | 92 | operator= |
| __va_list_tag::operator= | false | 99 | 99 | operator= |
| main | false | 147 | 147 | main |
| main | false | 269 | 269 | declaration |
| main | false | 271 | 271 | call to printf |
| main | false | 277 | 277 | Some results: %d %d\n |
| main | false | 278 | 278 | array to pointer conversion |
| main | false | 279 | 279 | (char *)... |
| main | false | 282 | 282 | call to operator() |
| main | false | 285 | 285 | [...](...){...} |
| main | false | 287 | 287 | initializer for myLambda |
| main | false | 291 | 291 | myLambda |
| main | false | 293 | 293 | (const lambda [] type at line 12, col. 21)... |
| main | false | 296 | 296 | 5 |
| main | false | 299 | 299 | 6 |
| main | false | 300 | 300 | call to operator() |
| main | false | 302 | 302 | myLambda |
| main | false | 304 | 304 | (const lambda [] type at line 12, col. 21)... |
| main | false | 307 | 307 | 7 |
| main | false | 310 | 310 | 8 |
| main | false | 311 | 311 | ExprStmt |
| main | false | 315 | 315 | 0 |
| main | false | 316 | 316 | return ... |
| main | false | 318 | 318 | { ... } |
| main | true | 269 | 287 | |
| main | true | 271 | 316 | |
| main | true | 277 | 296 | |
| main | true | 282 | 307 | |
| main | true | 285 | 311 | |
| main | true | 287 | 285 | |
| main | true | 291 | 282 | |
| main | true | 296 | 299 | |
| main | true | 299 | 291 | |
| main | true | 300 | 271 | |
| main | true | 302 | 300 | |
| main | true | 307 | 310 | |
| main | true | 310 | 302 | |
| main | true | 311 | 277 | |
| main | true | 315 | 147 | |
| main | true | 316 | 315 | |
| main | true | 318 | 269 | |
| printf | false | 209 | 209 | printf |
| <no scope> | false | 132 | 132 | (unnamed constructor) |
| <no scope> | false | 134 | 134 | (unnamed constructor) |
| <no scope> | false | 143 | 143 | return ... |
| <no scope> | false | 145 | 145 | { ... } |
| <no scope> | false | 146 | 146 | operator= |
| <no scope> | false | 154 | 154 | (unnamed constructor) |
| <no scope> | false | 156 | 156 | _FUN |
| <no scope> | false | 165 | 165 | operator auto (*)(int, int)->int |
| <no scope> | false | 172 | 172 | return ... |
| <no scope> | false | 174 | 174 | _FUN |
| <no scope> | false | 176 | 176 | { ... } |
| <no scope> | false | 180 | 180 | operator() |
| <no scope> | false | 188 | 188 | declaration |
| <no scope> | false | 193 | 193 | ExprStmt |
| <no scope> | false | 199 | 199 | call to printf |
| <no scope> | false | 203 | 203 | Running with %d and %d\n |
| <no scope> | false | 208 | 208 | array to pointer conversion |
| <no scope> | false | 209 | 209 | (char *)... |
| <no scope> | false | 210 | 210 | x |
| <no scope> | false | 212 | 212 | y |
| <no scope> | false | 214 | 214 | ExprStmt |
| <no scope> | false | 216 | 216 | z |
| <no scope> | false | 218 | 218 | x |
| <no scope> | false | 220 | 220 | y |
| <no scope> | false | 222 | 222 | ... + ... |
| <no scope> | false | 224 | 224 | ... = ... |
| <no scope> | false | 226 | 226 | ExprStmt |
| <no scope> | false | 228 | 228 | call to printf |
| <no scope> | false | 232 | 232 | Returning %d %d\n |
| <no scope> | false | 235 | 235 | array to pointer conversion |
| <no scope> | false | 236 | 236 | (char *)... |
| <no scope> | false | 237 | 237 | z |
| <no scope> | false | 239 | 239 | z |
| <no scope> | false | 241 | 241 | return ... |
| <no scope> | false | 243 | 243 | z |
| <no scope> | false | 245 | 245 | { ... } |
| <no scope> | true | 143 | 134 | |
| <no scope> | true | 145 | 143 | |
| <no scope> | true | 172 | 174 | |
| <no scope> | true | 174 | 165 | |
| <no scope> | true | 176 | 172 | |
| <no scope> | true | 188 | 193 | |
| <no scope> | true | 193 | 203 | |
| <no scope> | true | 199 | 214 | |
| <no scope> | true | 203 | 210 | |
| <no scope> | true | 210 | 212 | |
| <no scope> | true | 212 | 199 | |
| <no scope> | true | 214 | 218 | |
| <no scope> | true | 216 | 224 | |
| <no scope> | true | 218 | 220 | |
| <no scope> | true | 220 | 222 | |
| <no scope> | true | 222 | 216 | |
| <no scope> | true | 224 | 226 | |
| <no scope> | true | 226 | 232 | |
| <no scope> | true | 228 | 241 | |
| <no scope> | true | 232 | 237 | |
| <no scope> | true | 237 | 239 | |
| <no scope> | true | 239 | 228 | |
| <no scope> | true | 241 | 243 | |
| <no scope> | true | 243 | 180 | |
| <no scope> | true | 245 | 188 | |
| __va_list_tag::operator= | false | 57 | 57 | operator= |
| __va_list_tag::operator= | false | 63 | 63 | operator= |
| main | false | 126 | 126 | main |
| main | false | 251 | 251 | declaration |
| main | false | 254 | 254 | [...](...){...} |
| main | false | 256 | 256 | initializer for myLambda |
| main | false | 260 | 260 | ExprStmt |
| main | false | 262 | 262 | call to printf |
| main | false | 266 | 266 | Some results: %d %d\n |
| main | false | 269 | 269 | array to pointer conversion |
| main | false | 270 | 270 | (char *)... |
| main | false | 273 | 273 | call to operator() |
| main | false | 275 | 275 | myLambda |
| main | false | 277 | 277 | (const lambda [] type at line 12, col. 21)... |
| main | false | 280 | 280 | 5 |
| main | false | 283 | 283 | 6 |
| main | false | 284 | 284 | call to operator() |
| main | false | 286 | 286 | myLambda |
| main | false | 288 | 288 | (const lambda [] type at line 12, col. 21)... |
| main | false | 291 | 291 | 7 |
| main | false | 294 | 294 | 8 |
| main | false | 295 | 295 | return ... |
| main | false | 299 | 299 | 0 |
| main | false | 300 | 300 | { ... } |
| main | true | 251 | 256 | |
| main | true | 254 | 260 | |
| main | true | 256 | 254 | |
| main | true | 260 | 266 | |
| main | true | 262 | 295 | |
| main | true | 266 | 280 | |
| main | true | 273 | 291 | |
| main | true | 275 | 273 | |
| main | true | 280 | 283 | |
| main | true | 283 | 275 | |
| main | true | 284 | 262 | |
| main | true | 286 | 284 | |
| main | true | 291 | 294 | |
| main | true | 294 | 286 | |
| main | true | 295 | 299 | |
| main | true | 299 | 126 | |
| main | true | 300 | 251 | |
| printf | false | 196 | 196 | printf |

View File

@@ -1,8 +1,8 @@
| file://:0:0:0:0 | { ... } | lambda_cfg.cpp:12:24:12:24 | operator auto (*)(int, int)->int |
| lambda_cfg.cpp:11:16:23:1 | { ... } | lambda_cfg.cpp:11:5:11:8 | main |
| lambda_cfg.cpp:12:5:18:6 | declaration | lambda_cfg.cpp:11:5:11:8 | main |
| lambda_cfg.cpp:12:21:12:21 | return ... | lambda_cfg.cpp:12:21:12:21 | (constructor) |
| lambda_cfg.cpp:12:21:12:21 | { ... } | lambda_cfg.cpp:12:21:12:21 | (constructor) |
| lambda_cfg.cpp:12:21:12:21 | return ... | lambda_cfg.cpp:12:21:12:21 | (unnamed constructor) |
| lambda_cfg.cpp:12:21:12:21 | { ... } | lambda_cfg.cpp:12:21:12:21 | (unnamed constructor) |
| lambda_cfg.cpp:12:24:12:24 | return ... | lambda_cfg.cpp:12:24:12:24 | operator auto (*)(int, int)->int |
| lambda_cfg.cpp:12:46:18:5 | { ... } | lambda_cfg.cpp:12:24:12:24 | operator() |
| lambda_cfg.cpp:13:9:13:14 | declaration | lambda_cfg.cpp:12:24:12:24 | operator() |

View File

@@ -1,9 +1,9 @@
| file://:0:0:0:0 | (unnamed parameter 0) | false |
| file://:0:0:0:0 | (unnamed parameter 0) | false |
| file://:0:0:0:0 | __super | false |
| file://:0:0:0:0 | __va_list_tag | false |
| file://:0:0:0:0 | operator= | false |
| file://:0:0:0:0 | operator= | false |
| file://:0:0:0:0 | p#0 | false |
| file://:0:0:0:0 | p#0 | false |
| test.cpp:0:0:0:0 | test.cpp | false |
| test.cpp:2:1:2:61 | #define FOO class S{int i; void f(void) { int j; return; } }; | false |
| test.cpp:4:1:4:1 | S | false |

View File

@@ -1,4 +1,4 @@
| 0 | arity2.c:1:7:1:9 | p#0 | 1 | 3 |
| 0 | incompatible_decl.c:2:9:2:13 | p#0 | 1 | 3 |
| 0 | main.c:2:9:2:13 | p#0 | 1 | 3 |
| 1 | arity2.c:1:12:1:14 | p#1 | 1 | 1 |
| 0 | arity2.c:1:7:1:9 | (unnamed parameter 0) | 1 | 3 |
| 0 | incompatible_decl.c:2:9:2:13 | (unnamed parameter 0) | 1 | 3 |
| 0 | main.c:2:9:2:13 | (unnamed parameter 0) | 1 | 3 |
| 1 | arity2.c:1:12:1:14 | (unnamed parameter 1) | 1 | 1 |

View File

@@ -1,18 +1,18 @@
| file://:0:0:0:0 | (global namespace) | file://:0:0:0:0 | (unnamed parameter 0) | <none> | false |
| file://:0:0:0:0 | (global namespace) | file://:0:0:0:0 | (unnamed parameter 0) | <none> | false |
| file://:0:0:0:0 | (global namespace) | file://:0:0:0:0 | __va_list_tag | __va_list_tag | true |
| file://:0:0:0:0 | (global namespace) | file://:0:0:0:0 | fp_offset | __va_list_tag::fp_offset | false |
| file://:0:0:0:0 | (global namespace) | file://:0:0:0:0 | gp_offset | __va_list_tag::gp_offset | false |
| file://:0:0:0:0 | (global namespace) | file://:0:0:0:0 | operator= | __va_list_tag::operator= | false |
| file://:0:0:0:0 | (global namespace) | file://:0:0:0:0 | operator= | __va_list_tag::operator= | false |
| file://:0:0:0:0 | (global namespace) | file://:0:0:0:0 | overflow_arg_area | __va_list_tag::overflow_arg_area | false |
| file://:0:0:0:0 | (global namespace) | file://:0:0:0:0 | p#0 | <none> | false |
| file://:0:0:0:0 | (global namespace) | file://:0:0:0:0 | p#0 | <none> | false |
| file://:0:0:0:0 | (global namespace) | file://:0:0:0:0 | reg_save_area | __va_list_tag::reg_save_area | false |
| file://:0:0:0:0 | (global namespace) | namespaces.cpp:40:5:40:13 | globalInt | globalInt | true |
| file://:0:0:0:0 | (global namespace) | namespaces.cpp:42:6:42:18 | globalIntUser | globalIntUser | true |
| file://:0:0:0:0 | <none> | file://:0:0:0:0 | auto | <none> | false |
| file://:0:0:0:0 | B | namespaces.cpp:32:7:32:7 | x | B::x | true |
| namespaces.cpp:11:13:11:13 | C::D | file://:0:0:0:0 | p#0 | <none> | false |
| namespaces.cpp:11:13:11:13 | C::D | file://:0:0:0:0 | p#0 | <none> | false |
| namespaces.cpp:11:13:11:13 | C::D | file://:0:0:0:0 | (unnamed parameter 0) | <none> | false |
| namespaces.cpp:11:13:11:13 | C::D | file://:0:0:0:0 | (unnamed parameter 0) | <none> | false |
| namespaces.cpp:11:13:11:13 | C::D | namespaces.cpp:13:17:13:17 | f | C::D::f | true |
| namespaces.cpp:11:13:11:13 | C::D | namespaces.cpp:15:12:15:12 | E | C::D::E | true |
| namespaces.cpp:11:13:11:13 | C::D | namespaces.cpp:15:12:15:12 | operator= | C::D::E::operator= | false |

View File

@@ -1,11 +1,11 @@
| file://:0:0:0:0 | (global namespace) | file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (global namespace) | file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (global namespace) | file://:0:0:0:0 | __va_list_tag |
| file://:0:0:0:0 | (global namespace) | file://:0:0:0:0 | fp_offset |
| file://:0:0:0:0 | (global namespace) | file://:0:0:0:0 | gp_offset |
| file://:0:0:0:0 | (global namespace) | file://:0:0:0:0 | operator= |
| file://:0:0:0:0 | (global namespace) | file://:0:0:0:0 | operator= |
| file://:0:0:0:0 | (global namespace) | file://:0:0:0:0 | overflow_arg_area |
| file://:0:0:0:0 | (global namespace) | file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | (global namespace) | file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | (global namespace) | file://:0:0:0:0 | reg_save_area |
| file://:0:0:0:0 | (global namespace) | same_name.cpp:2:11:2:11 | c |
| same_name.cpp:4:11:4:21 | namespace_a | same_name.cpp:6:12:6:12 | c |

View File

@@ -1,8 +1,8 @@
| 0 | Foo && | p#0 |
| 0 | const Foo & | p#0 |
| 0 | Foo && | (unnamed parameter 0) |
| 0 | const Foo & | (unnamed parameter 0) |
| 6 | Foo | x |
| 8 | const char * | y |
| 10 | int | z |
| 17 | Foo | p#0 |
| 19 | const char * | p#0 |
| 21 | int | p#0 |
| 17 | Foo | (unnamed parameter 0) |
| 19 | const char * | (unnamed parameter 0) |
| 21 | int | (unnamed parameter 0) |

View File

@@ -2,4 +2,4 @@
| parameters.cpp:18:6:18:13 | Dispatch | 1 | a | true |
| parameters.cpp:18:6:18:13 | Dispatch | 2 | b | true |
| parameters.cpp:18:6:18:13 | Dispatch | 3 | c | true |
| parameters.cpp:18:6:18:13 | Dispatch | 4 | p#4 | false |
| parameters.cpp:18:6:18:13 | Dispatch | 4 | (unnamed parameter 4) | false |

View File

@@ -1,11 +1,11 @@
| pointsto | false | 0 | 0 | set: {gp_offset} |
| pointsto | false | 1 | 1 | set: {fp_offset} |
| pointsto | false | 2 | 2 | set: {overflow_arg_area} |
| pointsto | false | 3 | 3 | set: {reg_save_area} |
| pointsto | false | 4 | 4 | set: {operator=} |
| pointsto | false | 5 | 5 | set: {p#0} |
| pointsto | false | 6 | 6 | set: {operator=} |
| pointsto | false | 7 | 7 | set: {p#0} |
| pointsto | false | 0 | 0 | set: {operator=} |
| pointsto | false | 1 | 1 | set: {(unnamed parameter 0)} |
| pointsto | false | 2 | 2 | set: {operator=} |
| pointsto | false | 3 | 3 | set: {(unnamed parameter 0)} |
| pointsto | false | 4 | 4 | set: {gp_offset} |
| pointsto | false | 5 | 5 | set: {fp_offset} |
| pointsto | false | 6 | 6 | set: {overflow_arg_area} |
| pointsto | false | 7 | 7 | set: {reg_save_area} |
| pointsto | false | 8 | 8 | set: {MyStruct} |
| pointsto | false | 9 | 9 | set: {test} |
| pointsto | false | 10 | 10 | set: {cond} |
@@ -25,151 +25,151 @@
| pointsto | false | 24 | 24 | set: {& ..., & ..., ... = ..., ... = ..., p3, p3, p3, p3, p3, pp1, pp2} |
| pointsto | false | 25 | 25 | set: {v} |
| pointsto | false | 26 | 26 | set: {operator=} |
| pointsto | false | 27 | 27 | set: {p#0} |
| pointsto | false | 27 | 27 | set: {(unnamed parameter 0)} |
| pointsto | false | 28 | 28 | set: {operator=} |
| pointsto | false | 29 | 29 | set: {p#0} |
| pointsto | false | 29 | 29 | set: {(unnamed parameter 0)} |
| pointsto | false | 30 | 30 | set: {data} |
| pointsto | false | 31 | 31 | set: {(unsigned long)..., 10} |
| pointsto | false | 94 | 94 | file://:0:0:0:0\ngp_offset |
| pointsto | false | 96 | 96 | file://:0:0:0:0\nfp_offset |
| pointsto | false | 98 | 98 | file://:0:0:0:0\noverflow_arg_area |
| pointsto | false | 101 | 101 | file://:0:0:0:0\nreg_save_area |
| pointsto | false | 104 | 104 | <no location>\noperator= |
| pointsto | false | 105 | 105 | <no location>\np#0 |
| pointsto | false | 109 | 109 | <no location>\noperator= |
| pointsto | false | 110 | 110 | <no location>\np#0 |
| pointsto | false | 156 | 156 | test.cpp:2:16:2:23\nMyStruct |
| pointsto | false | 161 | 161 | test.cpp:12:6:12:9\ntest |
| pointsto | false | 162 | 162 | test.cpp:12:15:12:18\ncond |
| pointsto | false | 165 | 165 | test.cpp:14:6:14:9\ncond |
| pointsto | false | 166 | 166 | test.cpp:14:6:14:9\n(bool)... |
| pointsto | false | 169 | 169 | test.cpp:7:11:7:12\np1 |
| pointsto | false | 170 | 170 | test.cpp:16:3:16:4\np1 |
| pointsto | false | 171 | 171 | test.cpp:6:10:6:10\na |
| pointsto | false | 172 | 172 | test.cpp:16:9:16:9\na |
| pointsto | false | 173 | 173 | test.cpp:16:8:16:9\n& ... |
| pointsto | false | 174 | 174 | test.cpp:16:3:16:9\n... = ... |
| pointsto | false | 177 | 177 | test.cpp:18:3:18:4\np1 |
| pointsto | false | 178 | 178 | test.cpp:6:13:6:13\nb |
| pointsto | false | 179 | 179 | test.cpp:18:9:18:9\nb |
| pointsto | false | 180 | 180 | test.cpp:18:8:18:9\n& ... |
| pointsto | false | 181 | 181 | test.cpp:18:3:18:9\n... = ... |
| pointsto | false | 185 | 185 | test.cpp:7:16:7:17\np2 |
| pointsto | false | 186 | 186 | test.cpp:20:2:20:3\np2 |
| pointsto | false | 187 | 187 | test.cpp:20:7:20:8\np1 |
| pointsto | false | 188 | 188 | test.cpp:20:2:20:8\n... = ... |
| pointsto | false | 190 | 190 | test.cpp:7:21:7:22\np3 |
| pointsto | false | 191 | 191 | test.cpp:22:2:22:3\np3 |
| pointsto | false | 192 | 192 | test.cpp:6:16:6:16\nc |
| pointsto | false | 193 | 193 | test.cpp:22:8:22:8\nc |
| pointsto | false | 194 | 194 | test.cpp:22:7:22:8\n& ... |
| pointsto | false | 195 | 195 | test.cpp:22:2:22:8\n... = ... |
| pointsto | false | 199 | 199 | test.cpp:8:12:8:14\npp1 |
| pointsto | false | 200 | 200 | test.cpp:23:2:23:4\npp1 |
| pointsto | false | 201 | 201 | test.cpp:23:9:23:10\np3 |
| pointsto | false | 202 | 202 | test.cpp:23:8:23:10\n& ... |
| pointsto | false | 203 | 203 | test.cpp:23:2:23:10\n... = ... |
| pointsto | false | 205 | 205 | test.cpp:24:2:24:3\np3 |
| pointsto | false | 206 | 206 | test.cpp:6:19:6:19\nd |
| pointsto | false | 207 | 207 | test.cpp:24:8:24:8\nd |
| pointsto | false | 208 | 208 | test.cpp:24:7:24:8\n& ... |
| pointsto | false | 209 | 209 | test.cpp:24:2:24:8\n... = ... |
| pointsto | false | 211 | 211 | test.cpp:8:19:8:21\npp2 |
| pointsto | false | 212 | 212 | test.cpp:25:2:25:4\npp2 |
| pointsto | false | 213 | 213 | test.cpp:25:9:25:10\np3 |
| pointsto | false | 214 | 214 | test.cpp:25:8:25:10\n& ... |
| pointsto | false | 215 | 215 | test.cpp:25:2:25:10\n... = ... |
| pointsto | false | 217 | 217 | test.cpp:10:6:10:8\nuse |
| pointsto | false | 221 | 221 | test.cpp:27:6:27:6\na |
| pointsto | false | 222 | 222 | test.cpp:27:9:27:9\nb |
| pointsto | false | 223 | 223 | test.cpp:27:12:27:12\nc |
| pointsto | false | 224 | 224 | test.cpp:27:15:27:15\nd |
| pointsto | false | 225 | 225 | test.cpp:27:18:27:19\np1 |
| pointsto | false | 226 | 226 | test.cpp:27:22:27:23\np2 |
| pointsto | false | 227 | 227 | test.cpp:27:26:27:27\np3 |
| pointsto | false | 228 | 228 | test.cpp:27:30:27:32\npp1 |
| pointsto | false | 229 | 229 | test.cpp:27:35:27:37\npp2 |
| pointsto | false | 233 | 233 | test.cpp:10:19:10:19\nv |
| pointsto | false | 235 | 235 | test.cpp:2:16:2:16\noperator= |
| pointsto | false | 237 | 237 | file://:0:0:0:0\np#0 |
| pointsto | false | 242 | 242 | test.cpp:2:16:2:16\noperator= |
| pointsto | false | 243 | 243 | file://:0:0:0:0\np#0 |
| pointsto | false | 247 | 247 | test.cpp:3:6:3:9\ndata |
| pointsto | false | 250 | 250 | test.cpp:3:11:3:12\n10 |
| pointsto | false | 251 | 251 | test.cpp:3:11:3:12\n(unsigned long)... |
| pointsto | true | 0 | 94 | pt: {gp_offset} -> gp_offset |
| pointsto | true | 1 | 96 | pt: {fp_offset} -> fp_offset |
| pointsto | true | 2 | 98 | pt: {overflow_arg_area} -> overflow_arg_area |
| pointsto | true | 3 | 101 | pt: {reg_save_area} -> reg_save_area |
| pointsto | true | 4 | 104 | pt: {operator=} -> operator= |
| pointsto | true | 5 | 105 | pt: {p#0} -> p#0 |
| pointsto | true | 6 | 109 | pt: {operator=} -> operator= |
| pointsto | true | 7 | 110 | pt: {p#0} -> p#0 |
| pointsto | true | 8 | 156 | pt: {MyStruct} -> MyStruct |
| pointsto | true | 9 | 161 | pt: {test} -> test |
| pointsto | true | 10 | 162 | pt: {cond} -> cond |
| pointsto | true | 11 | 165 | pt: {(bool)..., cond} -> cond |
| pointsto | true | 11 | 166 | pt: {(bool)..., cond} -> (bool)... |
| pointsto | true | 12 | 169 | pt: {p1, p1, p1} -> p1 |
| pointsto | true | 12 | 170 | pt: {p1, p1, p1} -> p1 |
| pointsto | true | 12 | 177 | pt: {p1, p1, p1} -> p1 |
| pointsto | false | 82 | 82 | <no location>\noperator= |
| pointsto | false | 86 | 86 | <no location>\n(unnamed parameter 0) |
| pointsto | false | 87 | 87 | <no location>\noperator= |
| pointsto | false | 89 | 89 | <no location>\n(unnamed parameter 0) |
| pointsto | false | 90 | 90 | file://:0:0:0:0\ngp_offset |
| pointsto | false | 92 | 92 | file://:0:0:0:0\nfp_offset |
| pointsto | false | 94 | 94 | file://:0:0:0:0\noverflow_arg_area |
| pointsto | false | 97 | 97 | file://:0:0:0:0\nreg_save_area |
| pointsto | false | 148 | 148 | test.cpp:2:16:2:23\nMyStruct |
| pointsto | false | 154 | 154 | test.cpp:12:6:12:9\ntest |
| pointsto | false | 155 | 155 | test.cpp:12:15:12:18\ncond |
| pointsto | false | 159 | 159 | test.cpp:14:6:14:9\ncond |
| pointsto | false | 160 | 160 | test.cpp:14:6:14:9\n(bool)... |
| pointsto | false | 162 | 162 | test.cpp:7:11:7:12\np1 |
| pointsto | false | 165 | 165 | test.cpp:16:3:16:4\np1 |
| pointsto | false | 166 | 166 | test.cpp:6:10:6:10\na |
| pointsto | false | 167 | 167 | test.cpp:16:9:16:9\na |
| pointsto | false | 168 | 168 | test.cpp:16:8:16:9\n& ... |
| pointsto | false | 169 | 169 | test.cpp:16:3:16:9\n... = ... |
| pointsto | false | 172 | 172 | test.cpp:18:3:18:4\np1 |
| pointsto | false | 173 | 173 | test.cpp:6:13:6:13\nb |
| pointsto | false | 174 | 174 | test.cpp:18:9:18:9\nb |
| pointsto | false | 175 | 175 | test.cpp:18:8:18:9\n& ... |
| pointsto | false | 176 | 176 | test.cpp:18:3:18:9\n... = ... |
| pointsto | false | 179 | 179 | test.cpp:7:16:7:17\np2 |
| pointsto | false | 180 | 180 | test.cpp:20:2:20:3\np2 |
| pointsto | false | 181 | 181 | test.cpp:20:7:20:8\np1 |
| pointsto | false | 182 | 182 | test.cpp:20:2:20:8\n... = ... |
| pointsto | false | 184 | 184 | test.cpp:7:21:7:22\np3 |
| pointsto | false | 185 | 185 | test.cpp:22:2:22:3\np3 |
| pointsto | false | 186 | 186 | test.cpp:6:16:6:16\nc |
| pointsto | false | 187 | 187 | test.cpp:22:8:22:8\nc |
| pointsto | false | 188 | 188 | test.cpp:22:7:22:8\n& ... |
| pointsto | false | 189 | 189 | test.cpp:22:2:22:8\n... = ... |
| pointsto | false | 191 | 191 | test.cpp:8:12:8:14\npp1 |
| pointsto | false | 194 | 194 | test.cpp:23:2:23:4\npp1 |
| pointsto | false | 195 | 195 | test.cpp:23:9:23:10\np3 |
| pointsto | false | 196 | 196 | test.cpp:23:8:23:10\n& ... |
| pointsto | false | 197 | 197 | test.cpp:23:2:23:10\n... = ... |
| pointsto | false | 199 | 199 | test.cpp:24:2:24:3\np3 |
| pointsto | false | 200 | 200 | test.cpp:6:19:6:19\nd |
| pointsto | false | 201 | 201 | test.cpp:24:8:24:8\nd |
| pointsto | false | 202 | 202 | test.cpp:24:7:24:8\n& ... |
| pointsto | false | 203 | 203 | test.cpp:24:2:24:8\n... = ... |
| pointsto | false | 205 | 205 | test.cpp:8:19:8:21\npp2 |
| pointsto | false | 206 | 206 | test.cpp:25:2:25:4\npp2 |
| pointsto | false | 207 | 207 | test.cpp:25:9:25:10\np3 |
| pointsto | false | 208 | 208 | test.cpp:25:8:25:10\n& ... |
| pointsto | false | 209 | 209 | test.cpp:25:2:25:10\n... = ... |
| pointsto | false | 211 | 211 | test.cpp:10:6:10:8\nuse |
| pointsto | false | 215 | 215 | test.cpp:27:6:27:6\na |
| pointsto | false | 216 | 216 | test.cpp:27:9:27:9\nb |
| pointsto | false | 217 | 217 | test.cpp:27:12:27:12\nc |
| pointsto | false | 218 | 218 | test.cpp:27:15:27:15\nd |
| pointsto | false | 219 | 219 | test.cpp:27:18:27:19\np1 |
| pointsto | false | 220 | 220 | test.cpp:27:22:27:23\np2 |
| pointsto | false | 221 | 221 | test.cpp:27:26:27:27\np3 |
| pointsto | false | 222 | 222 | test.cpp:27:30:27:32\npp1 |
| pointsto | false | 223 | 223 | test.cpp:27:35:27:37\npp2 |
| pointsto | false | 226 | 226 | test.cpp:10:19:10:19\nv |
| pointsto | false | 227 | 227 | test.cpp:2:16:2:16\noperator= |
| pointsto | false | 230 | 230 | file://:0:0:0:0\n(unnamed parameter 0) |
| pointsto | false | 233 | 233 | test.cpp:2:16:2:16\noperator= |
| pointsto | false | 236 | 236 | file://:0:0:0:0\n(unnamed parameter 0) |
| pointsto | false | 240 | 240 | test.cpp:3:6:3:9\ndata |
| pointsto | false | 243 | 243 | test.cpp:3:11:3:12\n10 |
| pointsto | false | 244 | 244 | test.cpp:3:11:3:12\n(unsigned long)... |
| pointsto | true | 0 | 82 | pt: {operator=} -> operator= |
| pointsto | true | 1 | 86 | pt: {(unnamed parameter 0)} -> (unnamed parameter 0) |
| pointsto | true | 2 | 87 | pt: {operator=} -> operator= |
| pointsto | true | 3 | 89 | pt: {(unnamed parameter 0)} -> (unnamed parameter 0) |
| pointsto | true | 4 | 90 | pt: {gp_offset} -> gp_offset |
| pointsto | true | 5 | 92 | pt: {fp_offset} -> fp_offset |
| pointsto | true | 6 | 94 | pt: {overflow_arg_area} -> overflow_arg_area |
| pointsto | true | 7 | 97 | pt: {reg_save_area} -> reg_save_area |
| pointsto | true | 8 | 148 | pt: {MyStruct} -> MyStruct |
| pointsto | true | 9 | 154 | pt: {test} -> test |
| pointsto | true | 10 | 155 | pt: {cond} -> cond |
| pointsto | true | 11 | 159 | pt: {(bool)..., cond} -> cond |
| pointsto | true | 11 | 160 | pt: {(bool)..., cond} -> (bool)... |
| pointsto | true | 12 | 162 | pt: {p1, p1, p1} -> p1 |
| pointsto | true | 12 | 165 | pt: {p1, p1, p1} -> p1 |
| pointsto | true | 12 | 172 | pt: {p1, p1, p1} -> p1 |
| pointsto | true | 13 | 8 | sf |
| pointsto | true | 13 | 16 | sf |
| pointsto | true | 13 | 171 | pt: {a, a} -> a |
| pointsto | true | 13 | 172 | pt: {a, a} -> a |
| pointsto | true | 13 | 166 | pt: {a, a} -> a |
| pointsto | true | 13 | 167 | pt: {a, a} -> a |
| pointsto | true | 14 | 8 | sf |
| pointsto | true | 14 | 16 | sf |
| pointsto | true | 14 | 178 | pt: {b, b} -> b |
| pointsto | true | 14 | 179 | pt: {b, b} -> b |
| pointsto | true | 15 | 185 | pt: {p2, p2} -> p2 |
| pointsto | true | 15 | 186 | pt: {p2, p2} -> p2 |
| pointsto | true | 16 | 173 | pt: {& ..., & ..., ... = ..., ... = ..., ... = ..., p1, p1, p2} -> & ... |
| pointsto | true | 16 | 174 | pt: {& ..., & ..., ... = ..., ... = ..., ... = ..., p1, p1, p2} -> ... = ... |
| pointsto | true | 16 | 180 | pt: {& ..., & ..., ... = ..., ... = ..., ... = ..., p1, p1, p2} -> & ... |
| pointsto | true | 16 | 181 | pt: {& ..., & ..., ... = ..., ... = ..., ... = ..., p1, p1, p2} -> ... = ... |
| pointsto | true | 16 | 187 | pt: {& ..., & ..., ... = ..., ... = ..., ... = ..., p1, p1, p2} -> p1 |
| pointsto | true | 16 | 188 | pt: {& ..., & ..., ... = ..., ... = ..., ... = ..., p1, p1, p2} -> ... = ... |
| pointsto | true | 16 | 225 | pt: {& ..., & ..., ... = ..., ... = ..., ... = ..., p1, p1, p2} -> p1 |
| pointsto | true | 16 | 226 | pt: {& ..., & ..., ... = ..., ... = ..., ... = ..., p1, p1, p2} -> p2 |
| pointsto | true | 14 | 173 | pt: {b, b} -> b |
| pointsto | true | 14 | 174 | pt: {b, b} -> b |
| pointsto | true | 15 | 179 | pt: {p2, p2} -> p2 |
| pointsto | true | 15 | 180 | pt: {p2, p2} -> p2 |
| pointsto | true | 16 | 168 | pt: {& ..., & ..., ... = ..., ... = ..., ... = ..., p1, p1, p2} -> & ... |
| pointsto | true | 16 | 169 | pt: {& ..., & ..., ... = ..., ... = ..., ... = ..., p1, p1, p2} -> ... = ... |
| pointsto | true | 16 | 175 | pt: {& ..., & ..., ... = ..., ... = ..., ... = ..., p1, p1, p2} -> & ... |
| pointsto | true | 16 | 176 | pt: {& ..., & ..., ... = ..., ... = ..., ... = ..., p1, p1, p2} -> ... = ... |
| pointsto | true | 16 | 181 | pt: {& ..., & ..., ... = ..., ... = ..., ... = ..., p1, p1, p2} -> p1 |
| pointsto | true | 16 | 182 | pt: {& ..., & ..., ... = ..., ... = ..., ... = ..., p1, p1, p2} -> ... = ... |
| pointsto | true | 16 | 219 | pt: {& ..., & ..., ... = ..., ... = ..., ... = ..., p1, p1, p2} -> p1 |
| pointsto | true | 16 | 220 | pt: {& ..., & ..., ... = ..., ... = ..., ... = ..., p1, p1, p2} -> p2 |
| pointsto | true | 17 | 8 | sf |
| pointsto | true | 17 | 23 | sf |
| pointsto | true | 17 | 192 | pt: {c, c} -> c |
| pointsto | true | 17 | 193 | pt: {c, c} -> c |
| pointsto | true | 18 | 199 | pt: {pp1, pp1} -> pp1 |
| pointsto | true | 18 | 200 | pt: {pp1, pp1} -> pp1 |
| pointsto | true | 17 | 186 | pt: {c, c} -> c |
| pointsto | true | 17 | 187 | pt: {c, c} -> c |
| pointsto | true | 18 | 191 | pt: {pp1, pp1} -> pp1 |
| pointsto | true | 18 | 194 | pt: {pp1, pp1} -> pp1 |
| pointsto | true | 19 | 8 | sf |
| pointsto | true | 19 | 23 | sf |
| pointsto | true | 19 | 206 | pt: {d, d} -> d |
| pointsto | true | 19 | 207 | pt: {d, d} -> d |
| pointsto | true | 20 | 211 | pt: {pp2, pp2} -> pp2 |
| pointsto | true | 20 | 212 | pt: {pp2, pp2} -> pp2 |
| pointsto | true | 21 | 217 | pt: {use} -> use |
| pointsto | true | 22 | 221 | pt: {a, b, c, d} -> a |
| pointsto | true | 22 | 222 | pt: {a, b, c, d} -> b |
| pointsto | true | 22 | 223 | pt: {a, b, c, d} -> c |
| pointsto | true | 22 | 224 | pt: {a, b, c, d} -> d |
| pointsto | true | 23 | 194 | pt: {& ..., & ..., ... = ..., ... = ..., p3} -> & ... |
| pointsto | true | 23 | 195 | pt: {& ..., & ..., ... = ..., ... = ..., p3} -> ... = ... |
| pointsto | true | 23 | 208 | pt: {& ..., & ..., ... = ..., ... = ..., p3} -> & ... |
| pointsto | true | 23 | 209 | pt: {& ..., & ..., ... = ..., ... = ..., p3} -> ... = ... |
| pointsto | true | 23 | 227 | pt: {& ..., & ..., ... = ..., ... = ..., p3} -> p3 |
| pointsto | true | 24 | 190 | pt: {& ..., & ..., ... = ..., ... = ..., p3, p3, p3, p3, p3, pp1, pp2} -> p3 |
| pointsto | true | 24 | 191 | pt: {& ..., & ..., ... = ..., ... = ..., p3, p3, p3, p3, p3, pp1, pp2} -> p3 |
| pointsto | true | 24 | 201 | pt: {& ..., & ..., ... = ..., ... = ..., p3, p3, p3, p3, p3, pp1, pp2} -> p3 |
| pointsto | true | 24 | 202 | pt: {& ..., & ..., ... = ..., ... = ..., p3, p3, p3, p3, p3, pp1, pp2} -> & ... |
| pointsto | true | 24 | 203 | pt: {& ..., & ..., ... = ..., ... = ..., p3, p3, p3, p3, p3, pp1, pp2} -> ... = ... |
| pointsto | true | 24 | 205 | pt: {& ..., & ..., ... = ..., ... = ..., p3, p3, p3, p3, p3, pp1, pp2} -> p3 |
| pointsto | true | 24 | 213 | pt: {& ..., & ..., ... = ..., ... = ..., p3, p3, p3, p3, p3, pp1, pp2} -> p3 |
| pointsto | true | 24 | 214 | pt: {& ..., & ..., ... = ..., ... = ..., p3, p3, p3, p3, p3, pp1, pp2} -> & ... |
| pointsto | true | 24 | 215 | pt: {& ..., & ..., ... = ..., ... = ..., p3, p3, p3, p3, p3, pp1, pp2} -> ... = ... |
| pointsto | true | 24 | 228 | pt: {& ..., & ..., ... = ..., ... = ..., p3, p3, p3, p3, p3, pp1, pp2} -> pp1 |
| pointsto | true | 24 | 229 | pt: {& ..., & ..., ... = ..., ... = ..., p3, p3, p3, p3, p3, pp1, pp2} -> pp2 |
| pointsto | true | 19 | 200 | pt: {d, d} -> d |
| pointsto | true | 19 | 201 | pt: {d, d} -> d |
| pointsto | true | 20 | 205 | pt: {pp2, pp2} -> pp2 |
| pointsto | true | 20 | 206 | pt: {pp2, pp2} -> pp2 |
| pointsto | true | 21 | 211 | pt: {use} -> use |
| pointsto | true | 22 | 215 | pt: {a, b, c, d} -> a |
| pointsto | true | 22 | 216 | pt: {a, b, c, d} -> b |
| pointsto | true | 22 | 217 | pt: {a, b, c, d} -> c |
| pointsto | true | 22 | 218 | pt: {a, b, c, d} -> d |
| pointsto | true | 23 | 188 | pt: {& ..., & ..., ... = ..., ... = ..., p3} -> & ... |
| pointsto | true | 23 | 189 | pt: {& ..., & ..., ... = ..., ... = ..., p3} -> ... = ... |
| pointsto | true | 23 | 202 | pt: {& ..., & ..., ... = ..., ... = ..., p3} -> & ... |
| pointsto | true | 23 | 203 | pt: {& ..., & ..., ... = ..., ... = ..., p3} -> ... = ... |
| pointsto | true | 23 | 221 | pt: {& ..., & ..., ... = ..., ... = ..., p3} -> p3 |
| pointsto | true | 24 | 184 | pt: {& ..., & ..., ... = ..., ... = ..., p3, p3, p3, p3, p3, pp1, pp2} -> p3 |
| pointsto | true | 24 | 185 | pt: {& ..., & ..., ... = ..., ... = ..., p3, p3, p3, p3, p3, pp1, pp2} -> p3 |
| pointsto | true | 24 | 195 | pt: {& ..., & ..., ... = ..., ... = ..., p3, p3, p3, p3, p3, pp1, pp2} -> p3 |
| pointsto | true | 24 | 196 | pt: {& ..., & ..., ... = ..., ... = ..., p3, p3, p3, p3, p3, pp1, pp2} -> & ... |
| pointsto | true | 24 | 197 | pt: {& ..., & ..., ... = ..., ... = ..., p3, p3, p3, p3, p3, pp1, pp2} -> ... = ... |
| pointsto | true | 24 | 199 | pt: {& ..., & ..., ... = ..., ... = ..., p3, p3, p3, p3, p3, pp1, pp2} -> p3 |
| pointsto | true | 24 | 207 | pt: {& ..., & ..., ... = ..., ... = ..., p3, p3, p3, p3, p3, pp1, pp2} -> p3 |
| pointsto | true | 24 | 208 | pt: {& ..., & ..., ... = ..., ... = ..., p3, p3, p3, p3, p3, pp1, pp2} -> & ... |
| pointsto | true | 24 | 209 | pt: {& ..., & ..., ... = ..., ... = ..., p3, p3, p3, p3, p3, pp1, pp2} -> ... = ... |
| pointsto | true | 24 | 222 | pt: {& ..., & ..., ... = ..., ... = ..., p3, p3, p3, p3, p3, pp1, pp2} -> pp1 |
| pointsto | true | 24 | 223 | pt: {& ..., & ..., ... = ..., ... = ..., p3, p3, p3, p3, p3, pp1, pp2} -> pp2 |
| pointsto | true | 25 | 8 | sf |
| pointsto | true | 25 | 233 | pt: {v} -> v |
| pointsto | true | 26 | 235 | pt: {operator=} -> operator= |
| pointsto | true | 27 | 237 | pt: {p#0} -> p#0 |
| pointsto | true | 28 | 242 | pt: {operator=} -> operator= |
| pointsto | true | 29 | 243 | pt: {p#0} -> p#0 |
| pointsto | true | 30 | 247 | pt: {data} -> data |
| pointsto | true | 31 | 250 | pt: {(unsigned long)..., 10} -> 10 |
| pointsto | true | 31 | 251 | pt: {(unsigned long)..., 10} -> (unsigned long)... |
| pointsto | true | 25 | 226 | pt: {v} -> v |
| pointsto | true | 26 | 227 | pt: {operator=} -> operator= |
| pointsto | true | 27 | 230 | pt: {(unnamed parameter 0)} -> (unnamed parameter 0) |
| pointsto | true | 28 | 233 | pt: {operator=} -> operator= |
| pointsto | true | 29 | 236 | pt: {(unnamed parameter 0)} -> (unnamed parameter 0) |
| pointsto | true | 30 | 240 | pt: {data} -> data |
| pointsto | true | 31 | 243 | pt: {(unsigned long)..., 10} -> 10 |
| pointsto | true | 31 | 244 | pt: {(unsigned long)..., 10} -> (unsigned long)... |

View File

@@ -6,8 +6,8 @@
| 1 | file://:0:0:0:0 | __va_list_tag | file://:0:0:0:0 | operator= |
| 1 | file://:0:0:0:0 | __va_list_tag | file://:0:0:0:0 | overflow_arg_area |
| 1 | file://:0:0:0:0 | __va_list_tag | file://:0:0:0:0 | reg_save_area |
| 1 | file://:0:0:0:0 | operator= | file://:0:0:0:0 | p#0 |
| 1 | file://:0:0:0:0 | operator= | file://:0:0:0:0 | p#0 |
| 1 | file://:0:0:0:0 | operator= | file://:0:0:0:0 | (unnamed parameter 0) |
| 1 | file://:0:0:0:0 | operator= | file://:0:0:0:0 | (unnamed parameter 0) |
| 1 | parents.cpp:2:11:2:13 | foo | parents.cpp:3:13:3:15 | foo::bar |
| 1 | parents.cpp:3:13:3:15 | foo::bar | parents.cpp:4:10:4:10 | f |
| 1 | parents.cpp:4:10:4:10 | f | parents.cpp:4:16:4:16 | i |

View File

@@ -21,11 +21,11 @@
| 4 copy assignment | C::operator=(Cinside_lref c) |
| 4 copy assignment | C::operator=(const volatile C & c) |
| 4 copy assignment | C::operator=(rref c_copy) |
| 4 copy assignment | __va_list_tag::operator=(const __va_list_tag & p#0) |
| 4 copy assignment | __va_list_tag::operator=(const __va_list_tag & (unnamed parameter 0)) |
| 5 move assignment | C::operator=(Ctop_rref c) |
| 5 move assignment | C::operator=(const volatile C && c) |
| 5 move assignment | C::operator=(rref c_move) |
| 5 move assignment | __va_list_tag::operator=(__va_list_tag && p#0) |
| 5 move assignment | __va_list_tag::operator=(__va_list_tag && (unnamed parameter 0)) |
| 6 none of the above | C::operator=(int i) |
| 6 none of the above | C::operator=(volatile C & c_templated) |
| 6 none of the above | C::operator=(volatile C && c_templated) |

View File

@@ -14,8 +14,8 @@ uniqueNodeLocation
| break_labels.c:2:11:2:11 | x | Node should have one location but has 4. |
| 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 | 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. |
| file://:0:0:0:0 | (unnamed parameter 2) | Node should have one location but has 0. |
| file://:0:0:0:0 | (unnamed parameter 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. |

View File

@@ -518,7 +518,31 @@ uniqueNodeLocation
| fieldaccess.cpp:6:6:6:6 | Phi | Node should have one location but has 14. |
| fieldaccess.cpp:6:6:6:6 | ReturnVoid | Node should have one location but has 14. |
| fieldaccess.cpp:6:6:6:6 | SideEffect | Node should have one location but has 14. |
| file://:0:0:0:0 | *p#2 | Node should have one location but has 0. |
| file://:0:0:0:0 | (unnamed parameter 0) | Node should have one location but has 0. |
| file://:0:0:0:0 | (unnamed parameter 0) | Node should have one location but has 0. |
| file://:0:0:0:0 | (unnamed parameter 0) | Node should have one location but has 0. |
| file://:0:0:0:0 | (unnamed parameter 0) | Node should have one location but has 0. |
| file://:0:0:0:0 | (unnamed parameter 0) | Node should have one location but has 0. |
| file://:0:0:0:0 | (unnamed parameter 0) | Node should have one location but has 0. |
| file://:0:0:0:0 | (unnamed parameter 0) | Node should have one location but has 0. |
| file://:0:0:0:0 | (unnamed parameter 0) | Node should have one location but has 0. |
| file://:0:0:0:0 | (unnamed parameter 0) | Node should have one location but has 0. |
| file://:0:0:0:0 | (unnamed parameter 0) | Node should have one location but has 0. |
| file://:0:0:0:0 | (unnamed parameter 0) | Node should have one location but has 0. |
| file://:0:0:0:0 | (unnamed parameter 1) | Node should have one location but has 0. |
| file://:0:0:0:0 | (unnamed parameter 1) | Node should have one location but has 0. |
| file://:0:0:0:0 | (unnamed parameter 1) | Node should have one location but has 0. |
| file://:0:0:0:0 | (unnamed parameter 1) | Node should have one location but has 0. |
| file://:0:0:0:0 | (unnamed parameter 1) | Node should have one location but has 0. |
| file://:0:0:0:0 | (unnamed parameter 1) | Node should have one location but has 0. |
| file://:0:0:0:0 | (unnamed parameter 1) | Node should have one location but has 0. |
| file://:0:0:0:0 | (unnamed parameter 1) | Node should have one location but has 0. |
| file://:0:0:0:0 | (unnamed parameter 2) | Node should have one location but has 0. |
| file://:0:0:0:0 | (unnamed parameter 2) | Node should have one location but has 0. |
| file://:0:0:0:0 | (unnamed parameter 2) | Node should have one location but has 0. |
| file://:0:0:0:0 | (unnamed parameter 2) | Node should have one location but has 0. |
| file://:0:0:0:0 | (unnamed parameter 3) | Node should have one location but has 0. |
| file://:0:0:0:0 | *(unnamed parameter 2) | Node should have one location but has 0. |
| file://:0:0:0:0 | Address | Node should have one location but has 0. |
| file://:0:0:0:0 | Address | Node should have one location but has 0. |
| file://:0:0:0:0 | Address | Node should have one location but has 0. |
@@ -528,30 +552,6 @@ uniqueNodeLocation
| file://:0:0:0:0 | ReturnIndirection | Node should have one location but has 0. |
| file://:0:0:0:0 | SideEffect | Node should have one location but has 0. |
| file://:0:0:0:0 | VariableAddress | Node should have one location but has 0. |
| file://:0:0:0:0 | p#0 | Node should have one location but has 0. |
| file://:0:0:0:0 | p#0 | Node should have one location but has 0. |
| file://:0:0:0:0 | p#0 | Node should have one location but has 0. |
| file://:0:0:0:0 | p#0 | Node should have one location but has 0. |
| file://:0:0:0:0 | p#0 | Node should have one location but has 0. |
| file://:0:0:0:0 | p#0 | Node should have one location but has 0. |
| file://:0:0:0:0 | p#0 | Node should have one location but has 0. |
| file://:0:0:0:0 | p#0 | Node should have one location but has 0. |
| file://:0:0:0:0 | p#0 | Node should have one location but has 0. |
| file://:0:0:0:0 | p#0 | Node should have one location but has 0. |
| file://:0:0:0:0 | p#0 | Node should have one location but has 0. |
| file://:0:0:0:0 | p#1 | Node should have one location but has 0. |
| file://:0:0:0:0 | p#1 | Node should have one location but has 0. |
| file://:0:0:0:0 | p#1 | Node should have one location but has 0. |
| file://:0:0:0:0 | p#1 | Node should have one location but has 0. |
| file://:0:0:0:0 | p#1 | Node should have one location but has 0. |
| file://:0:0:0:0 | p#1 | Node should have one location but has 0. |
| file://:0:0:0:0 | p#1 | Node should have one location but has 0. |
| file://:0:0:0:0 | p#1 | Node should have one location but has 0. |
| 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. |
| 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. |
| file://:0:0:0:0 | p#3 | Node should have one location but has 0. |
| forstmt.cpp:1:6:1:7 | AliasedDefinition | Node should have one location but has 2. |
| forstmt.cpp:1:6:1:7 | AliasedUse | Node should have one location but has 2. |
| forstmt.cpp:1:6:1:7 | Chi | Node should have one location but has 2. |

View File

@@ -1,3 +1,7 @@
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | __va_list_tag |
| file://:0:0:0:0 | auto |
| file://:0:0:0:0 | fp_offset |
@@ -5,10 +9,6 @@
| file://:0:0:0:0 | operator= |
| file://:0:0:0:0 | operator= |
| file://:0:0:0:0 | overflow_arg_area |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | reg_save_area |
| test.cpp:2:16:2:16 | T |
| test.cpp:3:8:3:8 | operator= |

View File

@@ -1,6 +1,8 @@
| file://:0:0:0:0 | |
| file://:0:0:0:0 | 0 |
| file://:0:0:0:0 | (global namespace) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | B |
| file://:0:0:0:0 | X |
| file://:0:0:0:0 | X |
@@ -27,8 +29,6 @@
| file://:0:0:0:0 | operator= |
| file://:0:0:0:0 | operator= |
| file://:0:0:0:0 | overflow_arg_area |
| 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 | void * |
| test.cpp:0:0:0:0 | test.cpp |

View File

@@ -1,3 +1,5 @@
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | __va_list_tag |
| file://:0:0:0:0 | auto |
| file://:0:0:0:0 | d |
@@ -6,16 +8,14 @@
| file://:0:0:0:0 | operator= |
| file://:0:0:0:0 | operator= |
| file://:0:0:0:0 | overflow_arg_area |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | reg_save_area |
| test.cpp:3:24:3:24 | b<a> |
| test.cpp:4:26:4:26 | c<<expression>> |
| test.cpp:4:26:4:26 | c<<unnamed>> |
| test.cpp:5:29:5:29 | e |
| test.cpp:6:26:6:26 | p#0 |
| test.cpp:6:29:6:31 | p#1 |
| test.cpp:6:26:6:26 | (unnamed parameter 0) |
| test.cpp:6:29:6:31 | (unnamed parameter 1) |
| test.cpp:7:20:7:20 | f |
| test.cpp:7:20:7:26 | f |
| test.cpp:7:28:7:28 | p#0 |
| test.cpp:7:31:7:33 | p#1 |
| test.cpp:7:28:7:28 | (unnamed parameter 0) |
| test.cpp:7:31:7:33 | (unnamed parameter 1) |

View File

@@ -4,11 +4,13 @@
| decls.cpp:2:29:2:29 | C<int> |
| decls.cpp:4:19:4:20 | T2 |
| decls.cpp:4:28:4:28 | f |
| decls.cpp:4:30:4:34 | p#0 |
| decls.cpp:4:30:4:34 | p#0 |
| decls.cpp:4:30:4:34 | (unnamed parameter 0) |
| decls.cpp:4:30:4:34 | (unnamed parameter 0) |
| decls.cpp:6:17:6:17 | f |
| decls.cpp:8:18:8:18 | (unnamed template parameter) |
| decls.cpp:8:25:8:25 | g |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | __va_list_tag |
| file://:0:0:0:0 | auto |
| file://:0:0:0:0 | fp_offset |
@@ -16,6 +18,4 @@
| file://:0:0:0:0 | operator= |
| file://:0:0:0:0 | operator= |
| file://:0:0:0:0 | overflow_arg_area |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | reg_save_area |

View File

@@ -3,6 +3,6 @@
| extern.cpp:1:20:1:20 | definition of T |
| extern.cpp:2:5:2:5 | declaration of f |
| extern.cpp:2:5:2:5 | f |
| extern.cpp:2:7:2:7 | (unnamed parameter 0) |
| extern.cpp:2:7:2:7 | declaration of 1st parameter |
| extern.cpp:2:7:2:7 | p#0 |
| extern.cpp:4:1:4:58 | // Currently we don't have an element for this declaration |

View File

@@ -1,3 +1,9 @@
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | C<char>'s friend |
| file://:0:0:0:0 | C<int>'s friend |
| file://:0:0:0:0 | auto |
@@ -6,19 +12,13 @@
| file://:0:0:0:0 | operator= |
| file://:0:0:0:0 | operator= |
| file://:0:0:0:0 | overflow_arg_area |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | reg_save_area |
| friends.cpp:2:19:2:21 | TTT |
| friends.cpp:4:19:4:21 | TTT |
| friends.cpp:4:29:4:29 | f |
| friends.cpp:4:31:4:36 | p#0 |
| friends.cpp:4:31:4:36 | p#0 |
| friends.cpp:4:31:4:36 | p#0 |
| friends.cpp:4:31:4:36 | (unnamed parameter 0) |
| friends.cpp:4:31:4:36 | (unnamed parameter 0) |
| friends.cpp:4:31:4:36 | (unnamed parameter 0) |
| friends.cpp:6:19:6:21 | TTT |
| friends.cpp:7:9:7:9 | C<TTT> |
| friends.cpp:7:9:7:9 | C<TTT> |
@@ -30,6 +30,6 @@
| friends.cpp:7:9:7:9 | operator= |
| friends.cpp:9:17:9:17 | f |
| friends.cpp:9:17:9:19 | C<TTT>'s friend |
| friends.cpp:9:21:9:26 | p#0 |
| friends.cpp:9:21:9:26 | (unnamed parameter 0) |
| friends.cpp:12:17:12:17 | f |
| friends.cpp:13:17:13:17 | f |

View File

@@ -2,6 +2,24 @@
| file://:0:0:0:0 | (composite<int> *)... |
| file://:0:0:0:0 | (composite<int> *)... |
| file://:0:0:0:0 | (global namespace) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | (unnamed parameter 0) |
| file://:0:0:0:0 | ..()(..) |
| file://:0:0:0:0 | ..()(..) |
| file://:0:0:0:0 | ..()(..) |
@@ -130,24 +148,6 @@
| file://:0:0:0:0 | optional |
| file://:0:0:0:0 | overflow_arg_area |
| file://:0:0:0:0 | override |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | p#0 |
| file://:0:0:0:0 | private |
| file://:0:0:0:0 | protected |
| file://:0:0:0:0 | public |
@@ -245,8 +245,8 @@
| test.cpp:2:8:2:26 | grammar_helper_base |
| test.cpp:3:9:3:16 | declaration of undefine |
| test.cpp:3:9:3:16 | undefine |
| test.cpp:3:18:3:20 | (unnamed parameter 0) |
| test.cpp:3:18:3:20 | declaration of 1st parameter |
| test.cpp:3:18:3:20 | p#0 |
| test.cpp:6:20:6:20 | B |
| test.cpp:6:20:6:20 | definition of B |
| test.cpp:7:8:7:8 | declaration of operator= |

View File

@@ -1,11 +1,11 @@
isFromUninstantiatedTemplate
| file://:0:0:0:0 | 0 | isfromtemplateinstantiation.cpp:77:26:77:45 | AnotherTemplateClass<T> |
| file://:0:0:0:0 | (int)... | isfromtemplateinstantiation.cpp:77:26:77:45 | AnotherTemplateClass<T> |
| file://:0:0:0:0 | (unnamed parameter 0) | isfromtemplateinstantiation.cpp:134:29:134:33 | Outer<T> |
| file://:0:0:0:0 | (unnamed parameter 0) | isfromtemplateinstantiation.cpp:134:29:134:33 | Outer<T> |
| file://:0:0:0:0 | declaration of 1st parameter | isfromtemplateinstantiation.cpp:134:29:134:33 | Outer<T> |
| file://:0:0:0:0 | declaration of 1st parameter | isfromtemplateinstantiation.cpp:134:29:134:33 | Outer<T> |
| 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> |
| 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 |

View File

@@ -1,10 +1,10 @@
| file://:0:0:0:0 | (unnamed parameter 0) | | | |
| file://:0:0:0:0 | (unnamed parameter 0) | | | |
| file://:0:0:0:0 | (unnamed parameter 0) | | | |
| file://:0:0:0:0 | (unnamed parameter 0) | | | |
| file://:0:0:0:0 | fp_offset | | | |
| file://:0:0:0:0 | gp_offset | | | |
| file://:0:0:0:0 | overflow_arg_area | | | |
| file://:0:0:0:0 | p#0 | | | |
| file://:0:0:0:0 | p#0 | | | |
| file://:0:0:0:0 | p#0 | | | |
| file://:0:0:0:0 | p#0 | | | |
| file://:0:0:0:0 | reg_save_area | | | |
| variables.cpp:2:13:2:13 | pi | variables.cpp:25:12:25:16 | T | |
| variables.cpp:2:13:2:13 | pi | variables.cpp:25:12:25:16, variables.cpp:37:16:37:24 | float | |

View File

@@ -1,8 +1,8 @@
| file://:0:0:0:0 | (unnamed parameter 0) | Parameter | file://:0:0:0:0 | __va_list_tag && | ReferenceType, base: __va_list_tag |
| file://:0:0:0:0 | (unnamed parameter 0) | Parameter | file://:0:0:0:0 | const __va_list_tag & | ReferenceType, base: const __va_list_tag |
| file://:0:0:0:0 | fp_offset | | file://:0:0:0:0 | unsigned int | IntType |
| file://:0:0:0:0 | gp_offset | | file://:0:0:0:0 | unsigned int | IntType |
| file://:0:0:0:0 | overflow_arg_area | | file://:0:0:0:0 | void * | PointerType, VoidPointerType, base: void |
| file://:0:0:0:0 | p#0 | Parameter | file://:0:0:0:0 | __va_list_tag && | ReferenceType, base: __va_list_tag |
| file://:0:0:0:0 | p#0 | Parameter | file://:0:0:0:0 | const __va_list_tag & | ReferenceType, base: const __va_list_tag |
| file://:0:0:0:0 | reg_save_area | | file://:0:0:0:0 | void * | PointerType, VoidPointerType, base: void |
| types.cpp:1:12:1:12 | i | | file://:0:0:0:0 | int | IntType |
| types.cpp:3:11:3:11 | c | isConst | file://:0:0:0:0 | const int | base: int, isConst |

View File

@@ -1,8 +1,8 @@
| file://:0:0:0:0 | (unnamed parameter 0) | reference to {const {struct __va_list_tag}} | reference to {const {struct __va_list_tag}} |
| file://:0:0:0:0 | (unnamed parameter 0) | rvalue reference to {struct __va_list_tag} | rvalue reference to {struct __va_list_tag} |
| file://:0:0:0:0 | fp_offset | unsigned int | unsigned int |
| file://:0:0:0:0 | gp_offset | unsigned int | unsigned int |
| file://:0:0:0:0 | overflow_arg_area | pointer to {void} | pointer to {void} |
| file://:0:0:0:0 | p#0 | reference to {const {struct __va_list_tag}} | reference to {const {struct __va_list_tag}} |
| file://:0:0:0:0 | p#0 | rvalue reference to {struct __va_list_tag} | rvalue reference to {struct __va_list_tag} |
| file://:0:0:0:0 | reg_save_area | pointer to {void} | pointer to {void} |
| unspecified_type.cpp:2:5:2:7 | vv1 | int | int |
| unspecified_type.cpp:3:11:3:13 | vv2 | const {int} | int |

View File

@@ -1,8 +1,8 @@
| file://:0:0:0:0 | (unnamed parameter 0) | reference to {const {struct __va_list_tag}} | reference to {struct __va_list_tag} |
| file://:0:0:0:0 | (unnamed parameter 0) | rvalue reference to {struct __va_list_tag} | rvalue reference to {struct __va_list_tag} |
| file://:0:0:0:0 | fp_offset | unsigned int | unsigned int |
| file://:0:0:0:0 | gp_offset | unsigned int | unsigned int |
| file://:0:0:0:0 | overflow_arg_area | pointer to {void} | pointer to {void} |
| file://:0:0:0:0 | p#0 | reference to {const {struct __va_list_tag}} | reference to {struct __va_list_tag} |
| file://:0:0:0:0 | p#0 | rvalue reference to {struct __va_list_tag} | rvalue reference to {struct __va_list_tag} |
| file://:0:0:0:0 | reg_save_area | pointer to {void} | pointer to {void} |
| unspecified_type.cpp:2:5:2:7 | vv1 | int | int |
| unspecified_type.cpp:3:11:3:13 | vv2 | const {int} | int |

View File

@@ -30,39 +30,39 @@ test.cpp:
# 3| valnum = unique
# 5| r5_1(glval<int>) = VariableAddress[p0] :
# 5| valnum = r1_5, r5_1, r6_1
# 5| r5_2(int) = Load : &:r5_1, m1_6
# 5| r5_2(int) = Load[p0] : &:r5_1, m1_6
# 5| valnum = m1_6, r5_2, r6_2
# 5| r5_3(glval<int>) = VariableAddress[p1] :
# 5| valnum = r1_7, r5_3, r6_3
# 5| r5_4(int) = Load : &:r5_3, m1_8
# 5| r5_4(int) = Load[p1] : &:r5_3, m1_8
# 5| valnum = m1_8, r5_4, r6_4
# 5| r5_5(int) = Add : r5_2, r5_4
# 5| valnum = m5_7, m6_7, m7_4, r5_5, r6_5, r7_2
# 5| r5_6(glval<int>) = VariableAddress[x] :
# 5| valnum = r2_1, r5_6, r6_6, r7_1
# 5| m5_7(int) = Store : &:r5_6, r5_5
# 5| m5_7(int) = Store[x] : &:r5_6, r5_5
# 5| valnum = m5_7, m6_7, m7_4, r5_5, r6_5, r7_2
# 6| r6_1(glval<int>) = VariableAddress[p0] :
# 6| valnum = r1_5, r5_1, r6_1
# 6| r6_2(int) = Load : &:r6_1, m1_6
# 6| r6_2(int) = Load[p0] : &:r6_1, m1_6
# 6| valnum = m1_6, r5_2, r6_2
# 6| r6_3(glval<int>) = VariableAddress[p1] :
# 6| valnum = r1_7, r5_3, r6_3
# 6| r6_4(int) = Load : &:r6_3, m1_8
# 6| r6_4(int) = Load[p1] : &:r6_3, m1_8
# 6| valnum = m1_8, r5_4, r6_4
# 6| r6_5(int) = Add : r6_2, r6_4
# 6| valnum = m5_7, m6_7, m7_4, r5_5, r6_5, r7_2
# 6| r6_6(glval<int>) = VariableAddress[x] :
# 6| valnum = r2_1, r5_6, r6_6, r7_1
# 6| m6_7(int) = Store : &:r6_6, r6_5
# 6| m6_7(int) = Store[x] : &:r6_6, r6_5
# 6| valnum = m5_7, m6_7, m7_4, r5_5, r6_5, r7_2
# 7| r7_1(glval<int>) = VariableAddress[x] :
# 7| valnum = r2_1, r5_6, r6_6, r7_1
# 7| r7_2(int) = Load : &:r7_1, m6_7
# 7| r7_2(int) = Load[x] : &:r7_1, m6_7
# 7| valnum = m5_7, m6_7, m7_4, r5_5, r6_5, r7_2
# 7| r7_3(glval<int>) = VariableAddress[y] :
# 7| valnum = r2_3, r7_3
# 7| m7_4(int) = Store : &:r7_3, r7_2
# 7| m7_4(int) = Store[y] : &:r7_3, r7_2
# 7| valnum = m5_7, m6_7, m7_4, r5_5, r6_5, r7_2
# 8| v8_1(void) = NoOp :
# 1| v1_9(void) = ReturnVoid :
@@ -100,51 +100,51 @@ test.cpp:
# 14| valnum = unique
# 16| r16_1(glval<int>) = VariableAddress[p0] :
# 16| valnum = r12_5, r16_1, r17_1
# 16| r16_2(int) = Load : &:r16_1, m12_6
# 16| r16_2(int) = Load[p0] : &:r16_1, m12_6
# 16| valnum = m12_6, r16_2, r17_2
# 16| r16_3(glval<int>) = VariableAddress[p1] :
# 16| valnum = r12_7, r16_3, r17_3
# 16| r16_4(int) = Load : &:r16_3, m12_8
# 16| r16_4(int) = Load[p1] : &:r16_3, m12_8
# 16| valnum = m12_8, r16_4, r17_4
# 16| r16_5(int) = Add : r16_2, r16_4
# 16| valnum = r16_5, r17_5
# 16| r16_6(glval<int>) = VariableAddress[global01] :
# 16| valnum = r16_6, r17_6
# 16| r16_7(int) = Load : &:r16_6, ~m12_3
# 16| r16_7(int) = Load[global01] : &:r16_6, ~m12_3
# 16| valnum = r16_7, r17_7
# 16| r16_8(int) = Add : r16_5, r16_7
# 16| valnum = m16_10, m17_10, m18_4, r16_8, r17_8, r18_2
# 16| r16_9(glval<int>) = VariableAddress[x] :
# 16| valnum = r13_1, r16_9, r17_9, r18_1
# 16| m16_10(int) = Store : &:r16_9, r16_8
# 16| m16_10(int) = Store[x] : &:r16_9, r16_8
# 16| valnum = m16_10, m17_10, m18_4, r16_8, r17_8, r18_2
# 17| r17_1(glval<int>) = VariableAddress[p0] :
# 17| valnum = r12_5, r16_1, r17_1
# 17| r17_2(int) = Load : &:r17_1, m12_6
# 17| r17_2(int) = Load[p0] : &:r17_1, m12_6
# 17| valnum = m12_6, r16_2, r17_2
# 17| r17_3(glval<int>) = VariableAddress[p1] :
# 17| valnum = r12_7, r16_3, r17_3
# 17| r17_4(int) = Load : &:r17_3, m12_8
# 17| r17_4(int) = Load[p1] : &:r17_3, m12_8
# 17| valnum = m12_8, r16_4, r17_4
# 17| r17_5(int) = Add : r17_2, r17_4
# 17| valnum = r16_5, r17_5
# 17| r17_6(glval<int>) = VariableAddress[global01] :
# 17| valnum = r16_6, r17_6
# 17| r17_7(int) = Load : &:r17_6, ~m12_3
# 17| r17_7(int) = Load[global01] : &:r17_6, ~m12_3
# 17| valnum = r16_7, r17_7
# 17| r17_8(int) = Add : r17_5, r17_7
# 17| valnum = m16_10, m17_10, m18_4, r16_8, r17_8, r18_2
# 17| r17_9(glval<int>) = VariableAddress[x] :
# 17| valnum = r13_1, r16_9, r17_9, r18_1
# 17| m17_10(int) = Store : &:r17_9, r17_8
# 17| m17_10(int) = Store[x] : &:r17_9, r17_8
# 17| valnum = m16_10, m17_10, m18_4, r16_8, r17_8, r18_2
# 18| r18_1(glval<int>) = VariableAddress[x] :
# 18| valnum = r13_1, r16_9, r17_9, r18_1
# 18| r18_2(int) = Load : &:r18_1, m17_10
# 18| r18_2(int) = Load[x] : &:r18_1, m17_10
# 18| valnum = m16_10, m17_10, m18_4, r16_8, r17_8, r18_2
# 18| r18_3(glval<int>) = VariableAddress[y] :
# 18| valnum = r13_3, r18_3
# 18| m18_4(int) = Store : &:r18_3, r18_2
# 18| m18_4(int) = Store[y] : &:r18_3, r18_2
# 18| valnum = m16_10, m17_10, m18_4, r16_8, r17_8, r18_2
# 19| v19_1(void) = NoOp :
# 12| v12_9(void) = ReturnVoid :
@@ -182,58 +182,58 @@ test.cpp:
# 27| valnum = unique
# 29| r29_1(glval<int>) = VariableAddress[p0] :
# 29| valnum = r25_5, r29_1, r31_1
# 29| r29_2(int) = Load : &:r29_1, m25_6
# 29| r29_2(int) = Load[p0] : &:r29_1, m25_6
# 29| valnum = m25_6, r29_2, r31_2
# 29| r29_3(glval<int>) = VariableAddress[p1] :
# 29| valnum = r25_7, r29_3, r31_3
# 29| r29_4(int) = Load : &:r29_3, m25_8
# 29| r29_4(int) = Load[p1] : &:r29_3, m25_8
# 29| valnum = m25_8, r29_4, r31_4
# 29| r29_5(int) = Add : r29_2, r29_4
# 29| valnum = r29_5, r31_5
# 29| r29_6(glval<int>) = VariableAddress[global02] :
# 29| valnum = r29_6, r31_6
# 29| r29_7(int) = Load : &:r29_6, ~m25_3
# 29| r29_7(int) = Load[global02] : &:r29_6, ~m25_3
# 29| valnum = unique
# 29| r29_8(int) = Add : r29_5, r29_7
# 29| valnum = m29_10, r29_8
# 29| r29_9(glval<int>) = VariableAddress[x] :
# 29| valnum = r26_1, r29_9, r31_9, r32_1
# 29| m29_10(int) = Store : &:r29_9, r29_8
# 29| m29_10(int) = Store[x] : &:r29_9, r29_8
# 29| valnum = m29_10, r29_8
# 30| r30_1(glval<unknown>) = FunctionAddress[change_global02] :
# 30| valnum = unique
# 30| v30_2(void) = Call : func:r30_1
# 30| v30_2(void) = Call[change_global02] : func:r30_1
# 30| m30_3(unknown) = ^CallSideEffect : ~m25_4
# 30| valnum = unique
# 30| m30_4(unknown) = Chi : total:m25_4, partial:m30_3
# 30| valnum = unique
# 31| r31_1(glval<int>) = VariableAddress[p0] :
# 31| valnum = r25_5, r29_1, r31_1
# 31| r31_2(int) = Load : &:r31_1, m25_6
# 31| r31_2(int) = Load[p0] : &:r31_1, m25_6
# 31| valnum = m25_6, r29_2, r31_2
# 31| r31_3(glval<int>) = VariableAddress[p1] :
# 31| valnum = r25_7, r29_3, r31_3
# 31| r31_4(int) = Load : &:r31_3, m25_8
# 31| r31_4(int) = Load[p1] : &:r31_3, m25_8
# 31| valnum = m25_8, r29_4, r31_4
# 31| r31_5(int) = Add : r31_2, r31_4
# 31| valnum = r29_5, r31_5
# 31| r31_6(glval<int>) = VariableAddress[global02] :
# 31| valnum = r29_6, r31_6
# 31| r31_7(int) = Load : &:r31_6, ~m30_4
# 31| r31_7(int) = Load[global02] : &:r31_6, ~m30_4
# 31| valnum = unique
# 31| r31_8(int) = Add : r31_5, r31_7
# 31| valnum = m31_10, m32_4, r31_8, r32_2
# 31| r31_9(glval<int>) = VariableAddress[x] :
# 31| valnum = r26_1, r29_9, r31_9, r32_1
# 31| m31_10(int) = Store : &:r31_9, r31_8
# 31| m31_10(int) = Store[x] : &:r31_9, r31_8
# 31| valnum = m31_10, m32_4, r31_8, r32_2
# 32| r32_1(glval<int>) = VariableAddress[x] :
# 32| valnum = r26_1, r29_9, r31_9, r32_1
# 32| r32_2(int) = Load : &:r32_1, m31_10
# 32| r32_2(int) = Load[x] : &:r32_1, m31_10
# 32| valnum = m31_10, m32_4, r31_8, r32_2
# 32| r32_3(glval<int>) = VariableAddress[y] :
# 32| valnum = r26_3, r32_3
# 32| m32_4(int) = Store : &:r32_3, r32_2
# 32| m32_4(int) = Store[y] : &:r32_3, r32_2
# 32| valnum = m31_10, m32_4, r31_8, r32_2
# 33| v33_1(void) = NoOp :
# 25| v25_9(void) = ReturnVoid :
@@ -261,7 +261,7 @@ test.cpp:
# 39| valnum = r39_9, r44_2
# 39| m39_10(int *) = InitializeParameter[p2] : &:r39_9
# 39| valnum = m39_10, r39_11, r44_3, r44_4
# 39| r39_11(int *) = Load : &:r39_9, m39_10
# 39| r39_11(int *) = Load[p2] : &:r39_9, m39_10
# 39| valnum = m39_10, r39_11, r44_3, r44_4
# 39| m39_12(unknown) = InitializeIndirection[p2] : &:r39_11
# 39| valnum = unique
@@ -279,63 +279,63 @@ test.cpp:
# 41| valnum = unique
# 43| r43_1(glval<int>) = VariableAddress[p0] :
# 43| valnum = r39_5, r43_1, r45_1
# 43| r43_2(int) = Load : &:r43_1, m39_6
# 43| r43_2(int) = Load[p0] : &:r43_1, m39_6
# 43| valnum = m39_6, r43_2, r45_2
# 43| r43_3(glval<int>) = VariableAddress[p1] :
# 43| valnum = r39_7, r43_3, r45_3
# 43| r43_4(int) = Load : &:r43_3, m39_8
# 43| r43_4(int) = Load[p1] : &:r43_3, m39_8
# 43| valnum = m39_8, r43_4, r45_4
# 43| r43_5(int) = Add : r43_2, r43_4
# 43| valnum = r43_5, r45_5
# 43| r43_6(glval<int>) = VariableAddress[global03] :
# 43| valnum = r43_6, r45_6
# 43| r43_7(int) = Load : &:r43_6, ~m39_3
# 43| r43_7(int) = Load[global03] : &:r43_6, ~m39_3
# 43| valnum = r43_7, r45_7
# 43| r43_8(int) = Add : r43_5, r43_7
# 43| valnum = m43_10, m45_10, m46_4, r43_8, r45_8, r46_2
# 43| r43_9(glval<int>) = VariableAddress[x] :
# 43| valnum = r40_1, r43_9, r45_9, r46_1
# 43| m43_10(int) = Store : &:r43_9, r43_8
# 43| m43_10(int) = Store[x] : &:r43_9, r43_8
# 43| valnum = m43_10, m45_10, m46_4, r43_8, r45_8, r46_2
# 44| r44_1(int) = Constant[0] :
# 44| valnum = m44_5, r44_1
# 44| r44_2(glval<int *>) = VariableAddress[p2] :
# 44| valnum = r39_9, r44_2
# 44| r44_3(int *) = Load : &:r44_2, m39_10
# 44| r44_3(int *) = Load[p2] : &:r44_2, m39_10
# 44| valnum = m39_10, r39_11, r44_3, r44_4
# 44| r44_4(glval<int>) = CopyValue : r44_3
# 44| valnum = m39_10, r39_11, r44_3, r44_4
# 44| m44_5(int) = Store : &:r44_4, r44_1
# 44| m44_5(int) = Store[?] : &:r44_4, r44_1
# 44| valnum = m44_5, r44_1
# 44| m44_6(unknown) = Chi : total:m39_12, partial:m44_5
# 44| valnum = unique
# 45| r45_1(glval<int>) = VariableAddress[p0] :
# 45| valnum = r39_5, r43_1, r45_1
# 45| r45_2(int) = Load : &:r45_1, m39_6
# 45| r45_2(int) = Load[p0] : &:r45_1, m39_6
# 45| valnum = m39_6, r43_2, r45_2
# 45| r45_3(glval<int>) = VariableAddress[p1] :
# 45| valnum = r39_7, r43_3, r45_3
# 45| r45_4(int) = Load : &:r45_3, m39_8
# 45| r45_4(int) = Load[p1] : &:r45_3, m39_8
# 45| valnum = m39_8, r43_4, r45_4
# 45| r45_5(int) = Add : r45_2, r45_4
# 45| valnum = r43_5, r45_5
# 45| r45_6(glval<int>) = VariableAddress[global03] :
# 45| valnum = r43_6, r45_6
# 45| r45_7(int) = Load : &:r45_6, ~m39_3
# 45| r45_7(int) = Load[global03] : &:r45_6, ~m39_3
# 45| valnum = r43_7, r45_7
# 45| r45_8(int) = Add : r45_5, r45_7
# 45| valnum = m43_10, m45_10, m46_4, r43_8, r45_8, r46_2
# 45| r45_9(glval<int>) = VariableAddress[x] :
# 45| valnum = r40_1, r43_9, r45_9, r46_1
# 45| m45_10(int) = Store : &:r45_9, r45_8
# 45| m45_10(int) = Store[x] : &:r45_9, r45_8
# 45| valnum = m43_10, m45_10, m46_4, r43_8, r45_8, r46_2
# 46| r46_1(glval<int>) = VariableAddress[x] :
# 46| valnum = r40_1, r43_9, r45_9, r46_1
# 46| r46_2(int) = Load : &:r46_1, m45_10
# 46| r46_2(int) = Load[x] : &:r46_1, m45_10
# 46| valnum = m43_10, m45_10, m46_4, r43_8, r45_8, r46_2
# 46| r46_3(glval<int>) = VariableAddress[y] :
# 46| valnum = r40_3, r46_3
# 46| m46_4(int) = Store : &:r46_3, r46_2
# 46| m46_4(int) = Store[y] : &:r46_3, r46_2
# 46| valnum = m43_10, m45_10, m46_4, r43_8, r45_8, r46_2
# 47| v47_1(void) = NoOp :
# 39| v39_13(void) = ReturnIndirection[p2] : &:r39_11, m44_6
@@ -356,7 +356,7 @@ test.cpp:
# 49| valnum = r49_5, r53_2, r56_6
# 49| m49_6(char *) = InitializeParameter[str] : &:r49_5
# 49| valnum = m49_6, r49_7, r53_3, r56_7
# 49| r49_7(char *) = Load : &:r49_5, m49_6
# 49| r49_7(char *) = Load[str] : &:r49_5, m49_6
# 49| valnum = m49_6, r49_7, r53_3, r56_7
# 49| m49_8(unknown) = InitializeIndirection[str] : &:r49_7
# 49| valnum = unique
@@ -364,7 +364,7 @@ test.cpp:
# 49| valnum = r49_9, r55_1
# 49| m49_10(char *) = InitializeParameter[chars] : &:r49_9
# 49| valnum = m49_10, m55_4, r49_11, r55_2
# 49| r49_11(char *) = Load : &:r49_9, m49_10
# 49| r49_11(char *) = Load[chars] : &:r49_9, m49_10
# 49| valnum = m49_10, m55_4, r49_11, r55_2
# 49| m49_12(unknown) = InitializeIndirection[chars] : &:r49_11
# 49| valnum = unique
@@ -376,7 +376,7 @@ test.cpp:
# 51| valnum = r51_1, r62_1, r65_2
# 51| r51_2(unsigned int) = Constant[0] :
# 51| valnum = m51_3, r51_2
# 51| m51_3(unsigned int) = Store : &:r51_1, r51_2
# 51| m51_3(unsigned int) = Store[result] : &:r51_1, r51_2
# 51| valnum = m51_3, r51_2
#-----| Goto -> Block 1
@@ -385,9 +385,9 @@ test.cpp:
# 53| valnum = m53_1, m65_4, r62_2, r65_3
# 53| r53_2(glval<char *>) = VariableAddress[str] :
# 53| valnum = r49_5, r53_2, r56_6
# 53| r53_3(char *) = Load : &:r53_2, m49_6
# 53| r53_3(char *) = Load[str] : &:r53_2, m49_6
# 53| valnum = m49_6, r49_7, r53_3, r56_7
# 53| r53_4(char) = Load : &:r53_3, ~m49_8
# 53| r53_4(char) = Load[?] : &:r53_3, ~m49_8
# 53| valnum = r53_4, r56_8
# 53| r53_5(int) = Convert : r53_4
# 53| valnum = r53_5, r56_9
@@ -402,11 +402,11 @@ test.cpp:
# 55| Block 2
# 55| r55_1(glval<char *>) = VariableAddress[chars] :
# 55| valnum = r49_9, r55_1
# 55| r55_2(char *) = Load : &:r55_1, m49_10
# 55| r55_2(char *) = Load[chars] : &:r55_1, m49_10
# 55| valnum = m49_10, m55_4, r49_11, r55_2
# 55| r55_3(glval<char *>) = VariableAddress[ptr] :
# 55| valnum = r50_1, r55_3, r56_12, r56_19, r56_2, r59_1
# 55| m55_4(char *) = Store : &:r55_3, r55_2
# 55| m55_4(char *) = Store[ptr] : &:r55_3, r55_2
# 55| valnum = m49_10, m55_4, r49_11, r55_2
#-----| Goto -> Block 3
@@ -415,17 +415,17 @@ test.cpp:
# 56| valnum = m56_1, r56_13, r56_20, r56_3, r59_2
# 56| r56_2(glval<char *>) = VariableAddress[ptr] :
# 56| valnum = r50_1, r55_3, r56_12, r56_19, r56_2, r59_1
# 56| r56_3(char *) = Load : &:r56_2, m56_1
# 56| r56_3(char *) = Load[ptr] : &:r56_2, m56_1
# 56| valnum = m56_1, r56_13, r56_20, r56_3, r59_2
# 56| r56_4(char) = Load : &:r56_3, ~m49_4
# 56| r56_4(char) = Load[?] : &:r56_3, ~m49_4
# 56| valnum = r56_14, r56_4, r59_3
# 56| r56_5(int) = Convert : r56_4
# 56| valnum = r56_15, r56_5, r59_4
# 56| r56_6(glval<char *>) = VariableAddress[str] :
# 56| valnum = r49_5, r53_2, r56_6
# 56| r56_7(char *) = Load : &:r56_6, m49_6
# 56| r56_7(char *) = Load[str] : &:r56_6, m49_6
# 56| valnum = m49_6, r49_7, r53_3, r56_7
# 56| r56_8(char) = Load : &:r56_7, ~m49_8
# 56| r56_8(char) = Load[?] : &:r56_7, ~m49_8
# 56| valnum = r53_4, r56_8
# 56| r56_9(int) = Convert : r56_8
# 56| valnum = r53_5, r56_9
@@ -438,9 +438,9 @@ test.cpp:
# 56| Block 4
# 56| r56_12(glval<char *>) = VariableAddress[ptr] :
# 56| valnum = r50_1, r55_3, r56_12, r56_19, r56_2, r59_1
# 56| r56_13(char *) = Load : &:r56_12, m56_1
# 56| r56_13(char *) = Load[ptr] : &:r56_12, m56_1
# 56| valnum = m56_1, r56_13, r56_20, r56_3, r59_2
# 56| r56_14(char) = Load : &:r56_13, ~m49_4
# 56| r56_14(char) = Load[?] : &:r56_13, ~m49_4
# 56| valnum = r56_14, r56_4, r59_3
# 56| r56_15(int) = Convert : r56_14
# 56| valnum = r56_15, r56_5, r59_4
@@ -455,22 +455,22 @@ test.cpp:
# 56| Block 5
# 56| r56_19(glval<char *>) = VariableAddress[ptr] :
# 56| valnum = r50_1, r55_3, r56_12, r56_19, r56_2, r59_1
# 56| r56_20(char *) = Load : &:r56_19, m56_1
# 56| r56_20(char *) = Load[ptr] : &:r56_19, m56_1
# 56| valnum = m56_1, r56_13, r56_20, r56_3, r59_2
# 56| r56_21(int) = Constant[1] :
# 56| valnum = unique
# 56| r56_22(char *) = PointerAdd[1] : r56_20, r56_21
# 56| valnum = m56_23, r56_22
# 56| m56_23(char *) = Store : &:r56_19, r56_22
# 56| m56_23(char *) = Store[ptr] : &:r56_19, r56_22
# 56| valnum = m56_23, r56_22
#-----| Goto (back edge) -> Block 3
# 59| Block 6
# 59| r59_1(glval<char *>) = VariableAddress[ptr] :
# 59| valnum = r50_1, r55_3, r56_12, r56_19, r56_2, r59_1
# 59| r59_2(char *) = Load : &:r59_1, m56_1
# 59| r59_2(char *) = Load[ptr] : &:r59_1, m56_1
# 59| valnum = m56_1, r56_13, r56_20, r56_3, r59_2
# 59| r59_3(char) = Load : &:r59_2, ~m49_4
# 59| r59_3(char) = Load[?] : &:r59_2, ~m49_4
# 59| valnum = r56_14, r56_4, r59_3
# 59| r59_4(int) = Convert : r59_3
# 59| valnum = r56_15, r56_5, r59_4
@@ -489,13 +489,13 @@ test.cpp:
# 62| Block 8
# 62| r62_1(glval<unsigned int>) = VariableAddress[result] :
# 62| valnum = r51_1, r62_1, r65_2
# 62| r62_2(unsigned int) = Load : &:r62_1, m53_1
# 62| r62_2(unsigned int) = Load[result] : &:r62_1, m53_1
# 62| valnum = m53_1, m65_4, r62_2, r65_3
# 62| r62_3(unsigned int) = Constant[1] :
# 62| valnum = unique
# 62| r62_4(unsigned int) = Add : r62_2, r62_3
# 62| valnum = m62_5, r62_4
# 62| m62_5(unsigned int) = Store : &:r62_1, r62_4
# 62| m62_5(unsigned int) = Store[result] : &:r62_1, r62_4
# 62| valnum = m62_5, r62_4
#-----| Goto (back edge) -> Block 1
@@ -505,9 +505,9 @@ test.cpp:
# 65| valnum = r49_15, r65_1
# 65| r65_2(glval<unsigned int>) = VariableAddress[result] :
# 65| valnum = r51_1, r62_1, r65_2
# 65| r65_3(unsigned int) = Load : &:r65_2, m53_1
# 65| r65_3(unsigned int) = Load[result] : &:r65_2, m53_1
# 65| valnum = m53_1, m65_4, r62_2, r65_3
# 65| m65_4(unsigned int) = Store : &:r65_1, r65_3
# 65| m65_4(unsigned int) = Store[#return] : &:r65_1, r65_3
# 65| valnum = m53_1, m65_4, r62_2, r65_3
# 49| v49_13(void) = ReturnIndirection[str] : &:r49_7, m49_8
# 49| v49_14(void) = ReturnIndirection[chars] : &:r49_11, m49_12
@@ -530,7 +530,7 @@ test.cpp:
# 75| valnum = r75_5, r79_4, r79_9
# 75| m75_6(two_values *) = InitializeParameter[vals] : &:r75_5
# 75| valnum = m75_6, r75_7, r79_10, r79_5
# 75| r75_7(two_values *) = Load : &:r75_5, m75_6
# 75| r75_7(two_values *) = Load[vals] : &:r75_5, m75_6
# 75| valnum = m75_6, r75_7, r79_10, r79_5
# 75| m75_8(unknown) = InitializeIndirection[vals] : &:r75_7
# 75| valnum = unique
@@ -538,7 +538,7 @@ test.cpp:
# 77| valnum = r77_1, r79_1, r80_6
# 77| r77_2(glval<unknown>) = FunctionAddress[getAValue] :
# 77| valnum = unique
# 77| r77_3(int) = Call : func:r77_2
# 77| r77_3(int) = Call[getAValue] : func:r77_2
# 77| valnum = unique
# 77| m77_4(unknown) = ^CallSideEffect : ~m75_4
# 77| valnum = unique
@@ -546,31 +546,31 @@ test.cpp:
# 77| valnum = unique
# 77| r77_6(signed short) = Convert : r77_3
# 77| valnum = m77_7, r77_6, r79_2
# 77| m77_7(signed short) = Store : &:r77_1, r77_6
# 77| m77_7(signed short) = Store[v] : &:r77_1, r77_6
# 77| valnum = m77_7, r77_6, r79_2
# 79| r79_1(glval<signed short>) = VariableAddress[v] :
# 79| valnum = r77_1, r79_1, r80_6
# 79| r79_2(signed short) = Load : &:r79_1, m77_7
# 79| r79_2(signed short) = Load[v] : &:r79_1, m77_7
# 79| valnum = m77_7, r77_6, r79_2
# 79| r79_3(int) = Convert : r79_2
# 79| valnum = unique
# 79| r79_4(glval<two_values *>) = VariableAddress[vals] :
# 79| valnum = r75_5, r79_4, r79_9
# 79| r79_5(two_values *) = Load : &:r79_4, m75_6
# 79| r79_5(two_values *) = Load[vals] : &:r79_4, m75_6
# 79| valnum = m75_6, r75_7, r79_10, r79_5
# 79| r79_6(glval<signed short>) = FieldAddress[val1] : r79_5
# 79| valnum = unique
# 79| r79_7(signed short) = Load : &:r79_6, ~m75_8
# 79| r79_7(signed short) = Load[?] : &:r79_6, ~m75_8
# 79| valnum = unique
# 79| r79_8(int) = Convert : r79_7
# 79| valnum = unique
# 79| r79_9(glval<two_values *>) = VariableAddress[vals] :
# 79| valnum = r75_5, r79_4, r79_9
# 79| r79_10(two_values *) = Load : &:r79_9, m75_6
# 79| r79_10(two_values *) = Load[vals] : &:r79_9, m75_6
# 79| valnum = m75_6, r75_7, r79_10, r79_5
# 79| r79_11(glval<signed short>) = FieldAddress[val2] : r79_10
# 79| valnum = unique
# 79| r79_12(signed short) = Load : &:r79_11, ~m75_8
# 79| r79_12(signed short) = Load[?] : &:r79_11, ~m75_8
# 79| valnum = unique
# 79| r79_13(int) = Convert : r79_12
# 79| valnum = unique
@@ -585,7 +585,7 @@ test.cpp:
# 80| Block 1
# 80| r80_1(glval<unknown>) = FunctionAddress[getAValue] :
# 80| valnum = unique
# 80| r80_2(int) = Call : func:r80_1
# 80| r80_2(int) = Call[getAValue] : func:r80_1
# 80| valnum = unique
# 80| m80_3(unknown) = ^CallSideEffect : ~m77_5
# 80| valnum = unique
@@ -595,7 +595,7 @@ test.cpp:
# 80| valnum = m80_7, r80_5
# 80| r80_6(glval<signed short>) = VariableAddress[v] :
# 80| valnum = r77_1, r79_1, r80_6
# 80| m80_7(signed short) = Store : &:r80_6, r80_5
# 80| m80_7(signed short) = Store[v] : &:r80_6, r80_5
# 80| valnum = m80_7, r80_5
#-----| Goto -> Block 2
@@ -629,7 +629,7 @@ test.cpp:
# 84| valnum = r84_9, r88_1
# 84| m84_10(void *) = InitializeParameter[p] : &:r84_9
# 84| valnum = m84_10, r84_11, r88_2
# 84| r84_11(void *) = Load : &:r84_9, m84_10
# 84| r84_11(void *) = Load[p] : &:r84_9, m84_10
# 84| valnum = m84_10, r84_11, r88_2
# 84| m84_12(unknown) = InitializeIndirection[p] : &:r84_11
# 84| valnum = unique
@@ -639,7 +639,7 @@ test.cpp:
# 86| valnum = unique
# 88| r88_1(glval<void *>) = VariableAddress[p] :
# 88| valnum = r84_9, r88_1
# 88| r88_2(void *) = Load : &:r88_1, m84_10
# 88| r88_2(void *) = Load[p] : &:r88_1, m84_10
# 88| valnum = m84_10, r84_11, r88_2
# 88| r88_3(void *) = Constant[0] :
# 88| valnum = unique
@@ -654,11 +654,11 @@ test.cpp:
# 88| valnum = m88_10, m88_6, r88_8
# 88| r88_7(glval<int>) = VariableAddress[#temp88:7] :
# 88| valnum = r88_13, r88_17, r88_7
# 88| r88_8(int) = Load : &:r88_7, m88_6
# 88| r88_8(int) = Load[#temp88:7] : &:r88_7, m88_6
# 88| valnum = m88_10, m88_6, r88_8
# 88| r88_9(glval<int>) = VariableAddress[v] :
# 88| valnum = r86_1, r88_9
# 88| m88_10(int) = Store : &:r88_9, r88_8
# 88| m88_10(int) = Store[v] : &:r88_9, r88_8
# 88| valnum = m88_10, m88_6, r88_8
# 89| v89_1(void) = NoOp :
# 84| v84_13(void) = ReturnIndirection[p] : &:r84_11, m84_12
@@ -669,22 +669,22 @@ test.cpp:
# 88| Block 2
# 88| r88_11(glval<int>) = VariableAddress[x] :
# 88| valnum = r84_5, r88_11
# 88| r88_12(int) = Load : &:r88_11, m84_6
# 88| r88_12(int) = Load[x] : &:r88_11, m84_6
# 88| valnum = m84_6, m88_14, r88_12
# 88| r88_13(glval<int>) = VariableAddress[#temp88:7] :
# 88| valnum = r88_13, r88_17, r88_7
# 88| m88_14(int) = Store : &:r88_13, r88_12
# 88| m88_14(int) = Store[#temp88:7] : &:r88_13, r88_12
# 88| valnum = m84_6, m88_14, r88_12
#-----| Goto -> Block 1
# 88| Block 3
# 88| r88_15(glval<int>) = VariableAddress[y] :
# 88| valnum = r84_7, r88_15
# 88| r88_16(int) = Load : &:r88_15, m84_8
# 88| r88_16(int) = Load[y] : &:r88_15, m84_8
# 88| valnum = m84_8, m88_18, r88_16
# 88| r88_17(glval<int>) = VariableAddress[#temp88:7] :
# 88| valnum = r88_13, r88_17, r88_7
# 88| m88_18(int) = Store : &:r88_17, r88_16
# 88| m88_18(int) = Store[#temp88:7] : &:r88_17, r88_16
# 88| valnum = m84_8, m88_18, r88_16
#-----| Goto -> Block 1
@@ -703,19 +703,19 @@ test.cpp:
# 92| valnum = m92_4, m92_6, m93_4, r92_2, r92_5, r93_3
# 92| r92_3(glval<int>) = VariableAddress[x] :
# 92| valnum = r92_1, r92_3, r93_2
# 92| m92_4(int) = Store : &:r92_3, r92_2
# 92| m92_4(int) = Store[x] : &:r92_3, r92_2
# 92| valnum = m92_4, m92_6, m93_4, r92_2, r92_5, r93_3
# 92| r92_5(int) = CopyValue : r92_2
# 92| valnum = m92_4, m92_6, m93_4, r92_2, r92_5, r93_3
# 92| m92_6(int) = Store : &:r92_1, r92_5
# 92| m92_6(int) = Store[x] : &:r92_1, r92_5
# 92| valnum = m92_4, m92_6, m93_4, r92_2, r92_5, r93_3
# 93| r93_1(glval<int>) = VariableAddress[#return] :
# 93| valnum = r91_5, r93_1
# 93| r93_2(glval<int>) = VariableAddress[x] :
# 93| valnum = r92_1, r92_3, r93_2
# 93| r93_3(int) = Load : &:r93_2, m92_6
# 93| r93_3(int) = Load[x] : &:r93_2, m92_6
# 93| valnum = m92_4, m92_6, m93_4, r92_2, r92_5, r93_3
# 93| m93_4(int) = Store : &:r93_1, r93_3
# 93| m93_4(int) = Store[#return] : &:r93_1, r93_3
# 93| valnum = m92_4, m92_6, m93_4, r92_2, r92_5, r93_3
# 91| r91_5(glval<int>) = VariableAddress[#return] :
# 91| valnum = r91_5, r93_1
@@ -736,7 +736,7 @@ test.cpp:
# 104| valnum = r104_5, r105_2, r106_2
# 104| m104_6(Derived *) = InitializeParameter[pd] : &:r104_5
# 104| valnum = m104_6, r104_7, r105_3, r106_3
# 104| r104_7(Derived *) = Load : &:r104_5, m104_6
# 104| r104_7(Derived *) = Load[pd] : &:r104_5, m104_6
# 104| valnum = m104_6, r104_7, r105_3, r106_3
# 104| m104_8(unknown) = InitializeIndirection[pd] : &:r104_7
# 104| valnum = unique
@@ -744,45 +744,45 @@ test.cpp:
# 105| valnum = unique
# 105| r105_2(glval<Derived *>) = VariableAddress[pd] :
# 105| valnum = r104_5, r105_2, r106_2
# 105| r105_3(Derived *) = Load : &:r105_2, m104_6
# 105| r105_3(Derived *) = Load[pd] : &:r105_2, m104_6
# 105| valnum = m104_6, r104_7, r105_3, r106_3
# 105| r105_4(Base *) = ConvertToNonVirtualBase[Derived : Base] : r105_3
# 105| valnum = m106_5, r105_4, r106_4, r107_3
# 105| r105_5(glval<int>) = FieldAddress[b] : r105_4
# 105| valnum = r105_5, r107_4
# 105| r105_6(int) = Load : &:r105_5, ~m104_8
# 105| r105_6(int) = Load[?] : &:r105_5, ~m104_8
# 105| valnum = m105_7, m107_6, m109_4, r105_6, r107_5, r109_3
# 105| m105_7(int) = Store : &:r105_1, r105_6
# 105| m105_7(int) = Store[x] : &:r105_1, r105_6
# 105| valnum = m105_7, m107_6, m109_4, r105_6, r107_5, r109_3
# 106| r106_1(glval<Base *>) = VariableAddress[pb] :
# 106| valnum = r106_1, r107_2
# 106| r106_2(glval<Derived *>) = VariableAddress[pd] :
# 106| valnum = r104_5, r105_2, r106_2
# 106| r106_3(Derived *) = Load : &:r106_2, m104_6
# 106| r106_3(Derived *) = Load[pd] : &:r106_2, m104_6
# 106| valnum = m104_6, r104_7, r105_3, r106_3
# 106| r106_4(Base *) = ConvertToNonVirtualBase[Derived : Base] : r106_3
# 106| valnum = m106_5, r105_4, r106_4, r107_3
# 106| m106_5(Base *) = Store : &:r106_1, r106_4
# 106| m106_5(Base *) = Store[pb] : &:r106_1, r106_4
# 106| valnum = m106_5, r105_4, r106_4, r107_3
# 107| r107_1(glval<int>) = VariableAddress[y] :
# 107| valnum = r107_1, r109_2
# 107| r107_2(glval<Base *>) = VariableAddress[pb] :
# 107| valnum = r106_1, r107_2
# 107| r107_3(Base *) = Load : &:r107_2, m106_5
# 107| r107_3(Base *) = Load[pb] : &:r107_2, m106_5
# 107| valnum = m106_5, r105_4, r106_4, r107_3
# 107| r107_4(glval<int>) = FieldAddress[b] : r107_3
# 107| valnum = r105_5, r107_4
# 107| r107_5(int) = Load : &:r107_4, ~m104_8
# 107| r107_5(int) = Load[?] : &:r107_4, ~m104_8
# 107| valnum = m105_7, m107_6, m109_4, r105_6, r107_5, r109_3
# 107| m107_6(int) = Store : &:r107_1, r107_5
# 107| m107_6(int) = Store[y] : &:r107_1, r107_5
# 107| valnum = m105_7, m107_6, m109_4, r105_6, r107_5, r109_3
# 109| r109_1(glval<int>) = VariableAddress[#return] :
# 109| valnum = r104_10, r109_1
# 109| r109_2(glval<int>) = VariableAddress[y] :
# 109| valnum = r107_1, r109_2
# 109| r109_3(int) = Load : &:r109_2, m107_6
# 109| r109_3(int) = Load[y] : &:r109_2, m107_6
# 109| valnum = m105_7, m107_6, m109_4, r105_6, r107_5, r109_3
# 109| m109_4(int) = Store : &:r109_1, r109_3
# 109| m109_4(int) = Store[#return] : &:r109_1, r109_3
# 109| valnum = m105_7, m107_6, m109_4, r105_6, r107_5, r109_3
# 104| v104_9(void) = ReturnIndirection[pd] : &:r104_7, m104_8
# 104| r104_10(glval<int>) = VariableAddress[#return] :
@@ -826,7 +826,7 @@ test.cpp:
# 124| valnum = r124_5, r125_2, r126_2, r128_3, r129_2
# 124| m124_6(A *) = InitializeParameter[pa] : &:r124_5
# 124| valnum = m124_6, r124_7, r125_3, r126_3, r128_4, r129_3
# 124| r124_7(A *) = Load : &:r124_5, m124_6
# 124| r124_7(A *) = Load[pa] : &:r124_5, m124_6
# 124| valnum = m124_6, r124_7, r125_3, r126_3, r128_4, r129_3
# 124| m124_8(unknown) = InitializeIndirection[pa] : &:r124_7
# 124| valnum = unique
@@ -838,37 +838,37 @@ test.cpp:
# 125| valnum = unique
# 125| r125_2(glval<A *>) = VariableAddress[pa] :
# 125| valnum = r124_5, r125_2, r126_2, r128_3, r129_2
# 125| r125_3(A *) = Load : &:r125_2, m124_6
# 125| r125_3(A *) = Load[pa] : &:r125_2, m124_6
# 125| valnum = m124_6, r124_7, r125_3, r126_3, r128_4, r129_3
# 125| r125_4(glval<int>) = FieldAddress[x] : r125_3
# 125| valnum = r125_4, r126_4, r128_5, r129_4
# 125| r125_5(int) = Load : &:r125_4, ~m124_8
# 125| r125_5(int) = Load[?] : &:r125_4, ~m124_8
# 125| valnum = m125_6, m126_6, r125_5, r126_5
# 125| m125_6(int) = Store : &:r125_1, r125_5
# 125| m125_6(int) = Store[b] : &:r125_1, r125_5
# 125| valnum = m125_6, m126_6, r125_5, r126_5
# 126| r126_1(glval<int>) = VariableAddress[c] :
# 126| valnum = unique
# 126| r126_2(glval<A *>) = VariableAddress[pa] :
# 126| valnum = r124_5, r125_2, r126_2, r128_3, r129_2
# 126| r126_3(A *) = Load : &:r126_2, m124_6
# 126| r126_3(A *) = Load[pa] : &:r126_2, m124_6
# 126| valnum = m124_6, r124_7, r125_3, r126_3, r128_4, r129_3
# 126| r126_4(glval<int>) = FieldAddress[x] : r126_3
# 126| valnum = r125_4, r126_4, r128_5, r129_4
# 126| r126_5(int) = Load : &:r126_4, ~m124_8
# 126| r126_5(int) = Load[?] : &:r126_4, ~m124_8
# 126| valnum = m125_6, m126_6, r125_5, r126_5
# 126| m126_6(int) = Store : &:r126_1, r126_5
# 126| m126_6(int) = Store[c] : &:r126_1, r126_5
# 126| valnum = m125_6, m126_6, r125_5, r126_5
# 128| r128_1(glval<int>) = VariableAddress[n] :
# 128| valnum = r124_9, r128_1
# 128| r128_2(int) = Load : &:r128_1, m124_10
# 128| r128_2(int) = Load[n] : &:r128_1, m124_10
# 128| valnum = m124_10, m128_6, m129_6, r128_2, r129_5
# 128| r128_3(glval<A *>) = VariableAddress[pa] :
# 128| valnum = r124_5, r125_2, r126_2, r128_3, r129_2
# 128| r128_4(A *) = Load : &:r128_3, m124_6
# 128| r128_4(A *) = Load[pa] : &:r128_3, m124_6
# 128| valnum = m124_6, r124_7, r125_3, r126_3, r128_4, r129_3
# 128| r128_5(glval<int>) = FieldAddress[x] : r128_4
# 128| valnum = r125_4, r126_4, r128_5, r129_4
# 128| m128_6(int) = Store : &:r128_5, r128_2
# 128| m128_6(int) = Store[?] : &:r128_5, r128_2
# 128| valnum = m124_10, m128_6, m129_6, r128_2, r129_5
# 128| m128_7(unknown) = Chi : total:m124_8, partial:m128_6
# 128| valnum = unique
@@ -876,13 +876,13 @@ test.cpp:
# 129| valnum = unique
# 129| r129_2(glval<A *>) = VariableAddress[pa] :
# 129| valnum = r124_5, r125_2, r126_2, r128_3, r129_2
# 129| r129_3(A *) = Load : &:r129_2, m124_6
# 129| r129_3(A *) = Load[pa] : &:r129_2, m124_6
# 129| valnum = m124_6, r124_7, r125_3, r126_3, r128_4, r129_3
# 129| r129_4(glval<int>) = FieldAddress[x] : r129_3
# 129| valnum = r125_4, r126_4, r128_5, r129_4
# 129| r129_5(int) = Load : &:r129_4, m128_6
# 129| r129_5(int) = Load[?] : &:r129_4, m128_6
# 129| valnum = m124_10, m128_6, m129_6, r128_2, r129_5
# 129| m129_6(int) = Store : &:r129_1, r129_5
# 129| m129_6(int) = Store[d] : &:r129_1, r129_5
# 129| valnum = m124_10, m128_6, m129_6, r128_2, r129_5
# 130| v130_1(void) = NoOp :
# 124| v124_11(void) = ReturnIndirection[pa] : &:r124_7, m128_7
@@ -903,37 +903,37 @@ test.cpp:
# 136| valnum = unique
# 136| r136_2(glval<A *>) = VariableAddress[global_a] :
# 136| valnum = r136_2, r137_2, r139_3, r140_2
# 136| r136_3(A *) = Load : &:r136_2, ~m135_3
# 136| r136_3(A *) = Load[global_a] : &:r136_2, ~m135_3
# 136| valnum = r136_3, r137_3, r139_4
# 136| r136_4(glval<int>) = FieldAddress[x] : r136_3
# 136| valnum = r136_4, r137_4, r139_5
# 136| r136_5(int) = Load : &:r136_4, ~m135_4
# 136| r136_5(int) = Load[?] : &:r136_4, ~m135_4
# 136| valnum = m136_6, m137_6, r136_5, r137_5
# 136| m136_6(int) = Store : &:r136_1, r136_5
# 136| m136_6(int) = Store[b] : &:r136_1, r136_5
# 136| valnum = m136_6, m137_6, r136_5, r137_5
# 137| r137_1(glval<int>) = VariableAddress[c] :
# 137| valnum = unique
# 137| r137_2(glval<A *>) = VariableAddress[global_a] :
# 137| valnum = r136_2, r137_2, r139_3, r140_2
# 137| r137_3(A *) = Load : &:r137_2, ~m135_3
# 137| r137_3(A *) = Load[global_a] : &:r137_2, ~m135_3
# 137| valnum = r136_3, r137_3, r139_4
# 137| r137_4(glval<int>) = FieldAddress[x] : r137_3
# 137| valnum = r136_4, r137_4, r139_5
# 137| r137_5(int) = Load : &:r137_4, ~m135_4
# 137| r137_5(int) = Load[?] : &:r137_4, ~m135_4
# 137| valnum = m136_6, m137_6, r136_5, r137_5
# 137| m137_6(int) = Store : &:r137_1, r137_5
# 137| m137_6(int) = Store[c] : &:r137_1, r137_5
# 137| valnum = m136_6, m137_6, r136_5, r137_5
# 139| r139_1(glval<int>) = VariableAddress[global_n] :
# 139| valnum = unique
# 139| r139_2(int) = Load : &:r139_1, ~m135_3
# 139| r139_2(int) = Load[global_n] : &:r139_1, ~m135_3
# 139| valnum = m139_6, r139_2
# 139| r139_3(glval<A *>) = VariableAddress[global_a] :
# 139| valnum = r136_2, r137_2, r139_3, r140_2
# 139| r139_4(A *) = Load : &:r139_3, ~m135_3
# 139| r139_4(A *) = Load[global_a] : &:r139_3, ~m135_3
# 139| valnum = r136_3, r137_3, r139_4
# 139| r139_5(glval<int>) = FieldAddress[x] : r139_4
# 139| valnum = r136_4, r137_4, r139_5
# 139| m139_6(int) = Store : &:r139_5, r139_2
# 139| m139_6(int) = Store[?] : &:r139_5, r139_2
# 139| valnum = m139_6, r139_2
# 139| m139_7(unknown) = Chi : total:m135_4, partial:m139_6
# 139| valnum = unique
@@ -941,13 +941,13 @@ test.cpp:
# 140| valnum = unique
# 140| r140_2(glval<A *>) = VariableAddress[global_a] :
# 140| valnum = r136_2, r137_2, r139_3, r140_2
# 140| r140_3(A *) = Load : &:r140_2, ~m139_7
# 140| r140_3(A *) = Load[global_a] : &:r140_2, ~m139_7
# 140| valnum = unique
# 140| r140_4(glval<int>) = FieldAddress[x] : r140_3
# 140| valnum = unique
# 140| r140_5(int) = Load : &:r140_4, ~m139_7
# 140| r140_5(int) = Load[?] : &:r140_4, ~m139_7
# 140| valnum = m140_6, r140_5
# 140| m140_6(int) = Store : &:r140_1, r140_5
# 140| m140_6(int) = Store[d] : &:r140_1, r140_5
# 140| valnum = m140_6, r140_5
# 141| v141_1(void) = NoOp :
# 135| v135_5(void) = ReturnVoid :
@@ -967,7 +967,7 @@ test.cpp:
# 143| valnum = r143_5, r144_2, r145_2, r147_3, r149_2
# 143| m143_6(A *) = InitializeParameter[pa] : &:r143_5
# 143| valnum = m143_6, r143_7, r144_3, r145_3, r147_4, r149_3
# 143| r143_7(A *) = Load : &:r143_5, m143_6
# 143| r143_7(A *) = Load[pa] : &:r143_5, m143_6
# 143| valnum = m143_6, r143_7, r144_3, r145_3, r147_4, r149_3
# 143| m143_8(unknown) = InitializeIndirection[pa] : &:r143_7
# 143| valnum = unique
@@ -975,37 +975,37 @@ test.cpp:
# 144| valnum = unique
# 144| r144_2(glval<A *>) = VariableAddress[pa] :
# 144| valnum = r143_5, r144_2, r145_2, r147_3, r149_2
# 144| r144_3(A *) = Load : &:r144_2, m143_6
# 144| r144_3(A *) = Load[pa] : &:r144_2, m143_6
# 144| valnum = m143_6, r143_7, r144_3, r145_3, r147_4, r149_3
# 144| r144_4(glval<int>) = FieldAddress[x] : r144_3
# 144| valnum = r144_4, r149_4
# 144| r144_5(int) = Load : &:r144_4, ~m143_8
# 144| r144_5(int) = Load[?] : &:r144_4, ~m143_8
# 144| valnum = m144_6, m149_6, r144_5, r149_5
# 144| m144_6(int) = Store : &:r144_1, r144_5
# 144| m144_6(int) = Store[b] : &:r144_1, r144_5
# 144| valnum = m144_6, m149_6, r144_5, r149_5
# 145| r145_1(glval<int>) = VariableAddress[c] :
# 145| valnum = unique
# 145| r145_2(glval<A *>) = VariableAddress[pa] :
# 145| valnum = r143_5, r144_2, r145_2, r147_3, r149_2
# 145| r145_3(A *) = Load : &:r145_2, m143_6
# 145| r145_3(A *) = Load[pa] : &:r145_2, m143_6
# 145| valnum = m143_6, r143_7, r144_3, r145_3, r147_4, r149_3
# 145| r145_4(glval<int>) = FieldAddress[y] : r145_3
# 145| valnum = r145_4, r147_5
# 145| r145_5(int) = Load : &:r145_4, ~m143_8
# 145| r145_5(int) = Load[?] : &:r145_4, ~m143_8
# 145| valnum = m145_6, r145_5
# 145| m145_6(int) = Store : &:r145_1, r145_5
# 145| m145_6(int) = Store[c] : &:r145_1, r145_5
# 145| valnum = m145_6, r145_5
# 147| r147_1(glval<int>) = VariableAddress[global_n] :
# 147| valnum = unique
# 147| r147_2(int) = Load : &:r147_1, ~m143_3
# 147| r147_2(int) = Load[global_n] : &:r147_1, ~m143_3
# 147| valnum = m147_6, r147_2
# 147| r147_3(glval<A *>) = VariableAddress[pa] :
# 147| valnum = r143_5, r144_2, r145_2, r147_3, r149_2
# 147| r147_4(A *) = Load : &:r147_3, m143_6
# 147| r147_4(A *) = Load[pa] : &:r147_3, m143_6
# 147| valnum = m143_6, r143_7, r144_3, r145_3, r147_4, r149_3
# 147| r147_5(glval<int>) = FieldAddress[y] : r147_4
# 147| valnum = r145_4, r147_5
# 147| m147_6(int) = Store : &:r147_5, r147_2
# 147| m147_6(int) = Store[?] : &:r147_5, r147_2
# 147| valnum = m147_6, r147_2
# 147| m147_7(unknown) = Chi : total:m143_8, partial:m147_6
# 147| valnum = unique
@@ -1013,13 +1013,13 @@ test.cpp:
# 149| valnum = unique
# 149| r149_2(glval<A *>) = VariableAddress[pa] :
# 149| valnum = r143_5, r144_2, r145_2, r147_3, r149_2
# 149| r149_3(A *) = Load : &:r149_2, m143_6
# 149| r149_3(A *) = Load[pa] : &:r149_2, m143_6
# 149| valnum = m143_6, r143_7, r144_3, r145_3, r147_4, r149_3
# 149| r149_4(glval<int>) = FieldAddress[x] : r149_3
# 149| valnum = r144_4, r149_4
# 149| r149_5(int) = Load : &:r149_4, ~m143_8
# 149| r149_5(int) = Load[?] : &:r149_4, ~m143_8
# 149| valnum = m144_6, m149_6, r144_5, r149_5
# 149| m149_6(int) = Store : &:r149_1, r149_5
# 149| m149_6(int) = Store[d] : &:r149_1, r149_5
# 149| valnum = m144_6, m149_6, r144_5, r149_5
# 150| v150_1(void) = NoOp :
# 143| v143_9(void) = ReturnIndirection[pa] : &:r143_7, m147_7
@@ -1044,37 +1044,37 @@ test.cpp:
# 153| valnum = unique
# 153| r153_2(glval<A *>) = VariableAddress[global_a] :
# 153| valnum = r153_2, r154_2, r156_3, r158_2
# 153| r153_3(A *) = Load : &:r153_2, ~m152_3
# 153| r153_3(A *) = Load[global_a] : &:r153_2, ~m152_3
# 153| valnum = r153_3, r154_3, r156_4
# 153| r153_4(glval<int>) = FieldAddress[x] : r153_3
# 153| valnum = r153_4, r154_4
# 153| r153_5(int) = Load : &:r153_4, ~m152_4
# 153| r153_5(int) = Load[?] : &:r153_4, ~m152_4
# 153| valnum = m153_6, m154_6, r153_5, r154_5
# 153| m153_6(int) = Store : &:r153_1, r153_5
# 153| m153_6(int) = Store[b] : &:r153_1, r153_5
# 153| valnum = m153_6, m154_6, r153_5, r154_5
# 154| r154_1(glval<int>) = VariableAddress[c] :
# 154| valnum = unique
# 154| r154_2(glval<A *>) = VariableAddress[global_a] :
# 154| valnum = r153_2, r154_2, r156_3, r158_2
# 154| r154_3(A *) = Load : &:r154_2, ~m152_3
# 154| r154_3(A *) = Load[global_a] : &:r154_2, ~m152_3
# 154| valnum = r153_3, r154_3, r156_4
# 154| r154_4(glval<int>) = FieldAddress[x] : r154_3
# 154| valnum = r153_4, r154_4
# 154| r154_5(int) = Load : &:r154_4, ~m152_4
# 154| r154_5(int) = Load[?] : &:r154_4, ~m152_4
# 154| valnum = m153_6, m154_6, r153_5, r154_5
# 154| m154_6(int) = Store : &:r154_1, r154_5
# 154| m154_6(int) = Store[c] : &:r154_1, r154_5
# 154| valnum = m153_6, m154_6, r153_5, r154_5
# 156| r156_1(glval<int>) = VariableAddress[n] :
# 156| valnum = r152_5, r156_1
# 156| r156_2(int) = Load : &:r156_1, m152_6
# 156| r156_2(int) = Load[n] : &:r156_1, m152_6
# 156| valnum = m152_6, m156_6, r156_2
# 156| r156_3(glval<A *>) = VariableAddress[global_a] :
# 156| valnum = r153_2, r154_2, r156_3, r158_2
# 156| r156_4(A *) = Load : &:r156_3, ~m152_3
# 156| r156_4(A *) = Load[global_a] : &:r156_3, ~m152_3
# 156| valnum = r153_3, r154_3, r156_4
# 156| r156_5(glval<int>) = FieldAddress[y] : r156_4
# 156| valnum = unique
# 156| m156_6(int) = Store : &:r156_5, r156_2
# 156| m156_6(int) = Store[?] : &:r156_5, r156_2
# 156| valnum = m152_6, m156_6, r156_2
# 156| m156_7(unknown) = Chi : total:m152_4, partial:m156_6
# 156| valnum = unique
@@ -1082,13 +1082,13 @@ test.cpp:
# 158| valnum = unique
# 158| r158_2(glval<A *>) = VariableAddress[global_a] :
# 158| valnum = r153_2, r154_2, r156_3, r158_2
# 158| r158_3(A *) = Load : &:r158_2, ~m156_7
# 158| r158_3(A *) = Load[global_a] : &:r158_2, ~m156_7
# 158| valnum = unique
# 158| r158_4(glval<int>) = FieldAddress[x] : r158_3
# 158| valnum = unique
# 158| r158_5(int) = Load : &:r158_4, ~m156_7
# 158| r158_5(int) = Load[?] : &:r158_4, ~m156_7
# 158| valnum = m158_6, r158_5
# 158| m158_6(int) = Store : &:r158_1, r158_5
# 158| m158_6(int) = Store[d] : &:r158_1, r158_5
# 158| valnum = m158_6, r158_5
# 159| v159_1(void) = NoOp :
# 152| v152_7(void) = ReturnVoid :

View File

@@ -2,9 +2,9 @@
| constexpr.cpp:3:5:3:33 | var_not_constexpr_initialised | false |
| constexpr.cpp:4:11:4:33 | var_not_constexpr_const | false |
| constexpr.cpp:5:5:5:21 | var_not_constexpr | false |
| file://:0:0:0:0 | (unnamed parameter 0) | false |
| file://:0:0:0:0 | (unnamed parameter 0) | false |
| file://:0:0:0:0 | fp_offset | false |
| file://:0:0:0:0 | gp_offset | false |
| file://:0:0:0:0 | overflow_arg_area | false |
| file://:0:0:0:0 | p#0 | false |
| file://:0:0:0:0 | p#0 | false |
| file://:0:0:0:0 | reg_save_area | false |

View File

@@ -1,8 +1,8 @@
| file://:0:0:0:0 | (unnamed parameter 0) | false |
| file://:0:0:0:0 | (unnamed parameter 0) | false |
| file://:0:0:0:0 | fp_offset | false |
| file://:0:0:0:0 | gp_offset | false |
| file://:0:0:0:0 | overflow_arg_area | false |
| file://:0:0:0:0 | p#0 | false |
| file://:0:0:0:0 | p#0 | false |
| file://:0:0:0:0 | reg_save_area | false |
| thread_local.cpp:3:20:3:30 | threadLocal | true |
| thread_local.cpp:4:7:4:21 | not_threadLocal | false |

View File

@@ -1,10 +1,10 @@
| file://:0:0:0:0 | (unnamed parameter 0) | file://:0:0:0:0 | __va_list_tag && | SemanticStackVariable | | |
| file://:0:0:0:0 | (unnamed parameter 0) | file://:0:0:0:0 | address && | SemanticStackVariable | | |
| file://:0:0:0:0 | (unnamed parameter 0) | file://:0:0:0:0 | const __va_list_tag & | SemanticStackVariable | | |
| file://:0:0:0:0 | (unnamed parameter 0) | file://:0:0:0:0 | const address & | SemanticStackVariable | | |
| file://:0:0:0:0 | fp_offset | file://:0:0:0:0 | unsigned int | Field | | |
| file://:0:0:0:0 | gp_offset | file://:0:0:0:0 | unsigned int | Field | | |
| file://:0:0:0:0 | overflow_arg_area | file://:0:0:0:0 | void * | Field | | |
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | __va_list_tag && | SemanticStackVariable | | |
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | address && | SemanticStackVariable | | |
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | const __va_list_tag & | SemanticStackVariable | | |
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | const address & | SemanticStackVariable | | |
| file://:0:0:0:0 | reg_save_area | file://:0:0:0:0 | void * | Field | | |
| variables.cpp:1:12:1:12 | i | file://:0:0:0:0 | int | GlobalVariable | | |
| variables.cpp:1:12:1:12 | i | file://:0:0:0:0 | int | StaticStorageDurationVariable | | |

View File

@@ -1,17 +1,17 @@
| file://:0:0:0:0 | (unnamed parameter 0) | (unnamed parameter 0) | file://:0:0:0:0 | __attribute((vector_size(16))) double | 16 |
| file://:0:0:0:0 | (unnamed parameter 0) | (unnamed parameter 0) | file://:0:0:0:0 | __attribute((vector_size(16))) float | 16 |
| file://:0:0:0:0 | (unnamed parameter 0) | (unnamed parameter 0) | file://:0:0:0:0 | __va_list_tag && | 8 |
| file://:0:0:0:0 | (unnamed parameter 0) | (unnamed parameter 0) | file://:0:0:0:0 | const __va_list_tag & | 8 |
| file://:0:0:0:0 | (unnamed parameter 0) | (unnamed parameter 0) | file://:0:0:0:0 | double * | 8 |
| file://:0:0:0:0 | (unnamed parameter 0) | (unnamed parameter 0) | file://:0:0:0:0 | float * | 8 |
| file://:0:0:0:0 | (unnamed parameter 1) | (unnamed parameter 1) | file://:0:0:0:0 | __attribute((vector_size(16))) double | 16 |
| file://:0:0:0:0 | (unnamed parameter 1) | (unnamed parameter 1) | file://:0:0:0:0 | __attribute((vector_size(16))) double | 16 |
| file://:0:0:0:0 | (unnamed parameter 1) | (unnamed parameter 1) | file://:0:0:0:0 | __attribute((vector_size(16))) float | 16 |
| file://:0:0:0:0 | (unnamed parameter 1) | (unnamed parameter 1) | file://:0:0:0:0 | __attribute((vector_size(16))) float | 16 |
| file://:0:0:0:0 | (unnamed parameter 2) | (unnamed parameter 2) | file://:0:0:0:0 | char | 1 |
| file://:0:0:0:0 | fp_offset | fp_offset | file://:0:0:0:0 | unsigned int | 4 |
| file://:0:0:0:0 | gp_offset | gp_offset | file://:0:0:0:0 | unsigned int | 4 |
| file://:0:0:0:0 | overflow_arg_area | overflow_arg_area | file://:0:0:0:0 | void * | 8 |
| file://:0:0:0:0 | p#0 | p#0 | file://:0:0:0:0 | __attribute((vector_size(16))) double | 16 |
| file://:0:0:0:0 | p#0 | p#0 | file://:0:0:0:0 | __attribute((vector_size(16))) float | 16 |
| file://:0:0:0:0 | p#0 | p#0 | file://:0:0:0:0 | __va_list_tag && | 8 |
| file://:0:0:0:0 | p#0 | p#0 | file://:0:0:0:0 | const __va_list_tag & | 8 |
| file://:0:0:0:0 | p#0 | p#0 | file://:0:0:0:0 | double * | 8 |
| file://:0:0:0:0 | p#0 | p#0 | file://:0:0:0:0 | float * | 8 |
| file://:0:0:0:0 | p#1 | p#1 | file://:0:0:0:0 | __attribute((vector_size(16))) double | 16 |
| file://:0:0:0:0 | p#1 | p#1 | file://:0:0:0:0 | __attribute((vector_size(16))) double | 16 |
| file://:0:0:0:0 | p#1 | p#1 | file://:0:0:0:0 | __attribute((vector_size(16))) float | 16 |
| file://:0:0:0:0 | p#1 | p#1 | file://:0:0:0:0 | __attribute((vector_size(16))) float | 16 |
| file://:0:0:0:0 | p#2 | p#2 | file://:0:0:0:0 | char | 1 |
| file://:0:0:0:0 | reg_save_area | reg_save_area | file://:0:0:0:0 | void * | 8 |
| vector_types.cpp:9:21:9:21 | x | x | vector_types.cpp:6:15:6:17 | v4f | 16 |
| vector_types.cpp:14:18:14:20 | lhs | lhs | vector_types.cpp:6:15:6:17 | v4f | 16 |

View File

@@ -0,0 +1,6 @@
| test.cpp:23:8:23:8 | p | Value may be null; it should be checked before dereferencing. |
| test.cpp:35:10:35:10 | q | Value may be null; it should be checked before dereferencing. |
| test.cpp:43:13:43:13 | q | Value may be null; it should be checked before dereferencing. |
| test.cpp:51:17:51:17 | q | Value may be null; it should be checked before dereferencing. |
| test.cpp:58:8:58:8 | p | Value may be null; it should be checked before dereferencing. |
| test.cpp:67:8:67:8 | p | Value may be null; it should be checked before dereferencing. |

View File

@@ -0,0 +1 @@
Critical/MissingNullTest.ql

Some files were not shown because too many files have changed in this diff Show More