mirror of
https://github.com/github/codeql.git
synced 2026-05-01 19:55:15 +02:00
Merge pull request #82 from dave-bartolomeo/dave/NewDelete2
C++: IR generation for `new` and `new[]`
This commit is contained in:
@@ -581,24 +581,13 @@ class ReferenceDereferenceExpr extends Conversion, @ref_indirect {
|
||||
}
|
||||
|
||||
/**
|
||||
* A C++ `new` (non-array) expression.
|
||||
* A C++ `new` or `new[]` expression.
|
||||
*/
|
||||
class NewExpr extends Expr, @new_expr {
|
||||
override string toString() { result = "new" }
|
||||
|
||||
class NewOrNewArrayExpr extends Expr, @any_new_expr {
|
||||
override int getPrecedence() { result = 15 }
|
||||
|
||||
/**
|
||||
* Gets the type that is being allocated.
|
||||
*
|
||||
* For example, for `new int` the result is `int`.
|
||||
*/
|
||||
Type getAllocatedType() {
|
||||
new_allocated_type(underlyingElement(this), unresolveElement(result))
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the `operator new` that allocates storage.
|
||||
* Gets the `operator new` or `operator new[]` that allocates storage.
|
||||
*/
|
||||
Function getAllocator() {
|
||||
expr_allocator(underlyingElement(this), unresolveElement(result), _)
|
||||
@@ -612,6 +601,21 @@ class NewExpr extends Expr, @new_expr {
|
||||
expr_allocator(underlyingElement(this), _, 1)
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the alignment argument passed to the allocation function, if any.
|
||||
*/
|
||||
Expr getAlignmentArgument() {
|
||||
hasAlignedAllocation() and
|
||||
(
|
||||
// If we have an allocator call, the alignment is the second argument to
|
||||
// that call.
|
||||
result = getAllocatorCall().getArgument(1) or
|
||||
// Otherwise, the alignment winds up as child number 3 of the `new`
|
||||
// itself.
|
||||
result = getChild(3)
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the call to a non-default `operator new` that allocates storage, if any.
|
||||
*
|
||||
@@ -652,6 +656,30 @@ class NewExpr extends Expr, @new_expr {
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the type that is being allocated.
|
||||
*
|
||||
* For example, for `new int` the result is `int`.
|
||||
* For `new int[5]` the result is `int[5]`.
|
||||
*/
|
||||
abstract Type getAllocatedType();
|
||||
}
|
||||
|
||||
/**
|
||||
* A C++ `new` (non-array) expression.
|
||||
*/
|
||||
class NewExpr extends NewOrNewArrayExpr, @new_expr {
|
||||
override string toString() { result = "new" }
|
||||
|
||||
/**
|
||||
* Gets the type that is being allocated.
|
||||
*
|
||||
* For example, for `new int` the result is `int`.
|
||||
*/
|
||||
override Type getAllocatedType() {
|
||||
new_allocated_type(underlyingElement(this), unresolveElement(result))
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the call or expression that initializes the allocated object, if any.
|
||||
*
|
||||
@@ -664,17 +692,15 @@ class NewExpr extends Expr, @new_expr {
|
||||
/**
|
||||
* A C++ `new[]` (array) expression.
|
||||
*/
|
||||
class NewArrayExpr extends Expr, @new_array_expr {
|
||||
class NewArrayExpr extends NewOrNewArrayExpr, @new_array_expr {
|
||||
override string toString() { result = "new[]" }
|
||||
|
||||
override int getPrecedence() { result = 15 }
|
||||
|
||||
/**
|
||||
* Gets the type that is being allocated.
|
||||
*
|
||||
* For example, for `new int[5]` the result is `int[5]`.
|
||||
*/
|
||||
Type getAllocatedType() {
|
||||
override Type getAllocatedType() {
|
||||
new_array_allocated_type(underlyingElement(this), unresolveElement(result))
|
||||
}
|
||||
|
||||
@@ -685,56 +711,6 @@ class NewArrayExpr extends Expr, @new_array_expr {
|
||||
result = getType().getUnderlyingType().(PointerType).getBaseType()
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the `operator new[]` that allocates storage.
|
||||
*/
|
||||
Function getAllocator() {
|
||||
expr_allocator(underlyingElement(this), unresolveElement(result), _)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if the allocation function is the version that expects an alignment
|
||||
* argument of type `std::align_val_t`.
|
||||
*/
|
||||
predicate hasAlignedAllocation() {
|
||||
expr_allocator(underlyingElement(this), _, 1)
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the call to a non-default `operator new[]` that allocates storage for the array, if any.
|
||||
*
|
||||
* If the default `operator new[]` is used, then there will be no call.
|
||||
*/
|
||||
FunctionCall getAllocatorCall() { result = this.getChild(0) }
|
||||
|
||||
/**
|
||||
* Gets the `operator delete` that deallocates storage if the initialization
|
||||
* throws an exception, if any.
|
||||
*/
|
||||
Function getDeallocator() {
|
||||
expr_deallocator(underlyingElement(this), unresolveElement(result), _)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if the deallocation function expects a size argument.
|
||||
*/
|
||||
predicate hasSizedDeallocation() {
|
||||
exists(int form |
|
||||
expr_deallocator(underlyingElement(this), _, form) and
|
||||
form.bitAnd(1) != 0 // Bit zero is the "size" bit
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if the deallocation function expects an alignment argument.
|
||||
*/
|
||||
predicate hasAlignedDeallocation() {
|
||||
exists(int form |
|
||||
expr_deallocator(underlyingElement(this), _, form) and
|
||||
form.bitAnd(2) != 0 // Bit one is the "alignment" bit
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the call or expression that initializes the first element of the array, if any.
|
||||
*
|
||||
|
||||
@@ -195,8 +195,11 @@ class Instruction extends Construction::TInstruction {
|
||||
private string getResultTypeString() {
|
||||
exists(string valcat |
|
||||
valcat = getValueCategoryString(resultType.toString()) and
|
||||
if resultType instanceof UnknownType and exists(getResultSize()) then
|
||||
if (resultType instanceof UnknownType and
|
||||
not isGLValue() and
|
||||
exists(getResultSize())) then (
|
||||
result = valcat + "[" + getResultSize().toString() + "]"
|
||||
)
|
||||
else
|
||||
result = valcat
|
||||
)
|
||||
|
||||
@@ -43,6 +43,9 @@ newtype TInstructionTag =
|
||||
SwitchBranchTag() or
|
||||
CallTargetTag() or
|
||||
CallTag() or
|
||||
AllocationSizeTag() or
|
||||
AllocationElementSizeTag() or
|
||||
AllocationExtentConvertTag() or
|
||||
ValueConditionConditionalBranchTag() or
|
||||
ConditionValueTrueTempAddressTag() or
|
||||
ConditionValueTrueConstantTag() or
|
||||
@@ -88,11 +91,15 @@ string getInstructionTagId(TInstructionTag tag) {
|
||||
tag = OnlyInstructionTag() and result = "Only" or // Single instruction (not including implicit Load)
|
||||
tag = InitializerVariableAddressTag() and result = "InitVarAddr" or
|
||||
tag = InitializerStoreTag() and result = "InitStore" or
|
||||
tag = ZeroPadStringConstantTag() and result = "ZeroPadConst" or
|
||||
tag = ZeroPadStringElementIndexTag() and result = "ZeroPadElemIndex" or
|
||||
tag = ZeroPadStringElementAddressTag() and result = "ZeroPadElemAddr" or
|
||||
tag = ZeroPadStringStoreTag() and result = "ZeroPadStore" or
|
||||
tag = AssignOperationLoadTag() and result = "AssignOpLoad" or
|
||||
tag = AssignOperationConvertLeftTag() and result = "AssignOpConvLeft" or
|
||||
tag = AssignOperationOpTag() and result = "AssignOpOp" or
|
||||
tag = AssignOperationConvertResultTag() and result = "AssignOpConvRes" or
|
||||
tag = AssignmentStoreTag() and result = "AssigStore" or
|
||||
tag = AssignmentStoreTag() and result = "AssignStore" or
|
||||
tag = CrementLoadTag() and result = "CrementLoad" or
|
||||
tag = CrementConstantTag() and result = "CrementConst" or
|
||||
tag = CrementOpTag() and result = "CrementOp" or
|
||||
@@ -106,6 +113,9 @@ string getInstructionTagId(TInstructionTag tag) {
|
||||
tag = SwitchBranchTag() and result = "SwitchBranch" or
|
||||
tag = CallTargetTag() and result = "CallTarget" or
|
||||
tag = CallTag() and result = "Call" or
|
||||
tag = AllocationSizeTag() and result = "AllocSize" or
|
||||
tag = AllocationElementSizeTag() and result = "AllocElemSize" or
|
||||
tag = AllocationExtentConvertTag() and result = "AllocExtConv" or
|
||||
tag = ValueConditionConditionalBranchTag() and result = "ValCondCondBranch" or
|
||||
tag = ConditionValueTrueTempAddressTag() and result = "CondValTrueTempAddr" or
|
||||
tag = ConditionValueTrueConstantTag() and result = "CondValTrueConst" or
|
||||
|
||||
@@ -47,12 +47,12 @@ private Element getRealParent(Expr expr) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `expr` should be ignored for the purposes of code generation due to
|
||||
* some property of `expr` itself. Unlike `ignoreExpr()`, this predicate does
|
||||
* not ignore an expression solely because it is a descendant of an ignored
|
||||
* element.
|
||||
* Holds if `expr` and all of its descendants should be ignored for the purposes
|
||||
* of IR generation due to some property of `expr` itself. Unlike
|
||||
* `ignoreExpr()`, this predicate does not ignore an expression solely because
|
||||
* it is a descendant of an ignored element.
|
||||
*/
|
||||
private predicate ignoreExprLocal(Expr expr) {
|
||||
private predicate ignoreExprAndDescendants(Expr expr) {
|
||||
// Ignore parentless expressions
|
||||
not exists(getRealParent(expr)) or
|
||||
// Ignore the constants in SwitchCase, since their values are embedded in the
|
||||
@@ -65,23 +65,32 @@ private predicate ignoreExprLocal(Expr expr) {
|
||||
// node as its qualifier, but that `FieldAccess` does not have a child of its own.
|
||||
// We'll ignore that `FieldAccess`, and supply the receiver as part of the calling
|
||||
// context, much like we do with constructor calls.
|
||||
expr.getParent().(DestructorCall).getParent() instanceof DestructorFieldDestruction
|
||||
expr.getParent().(DestructorCall).getParent() instanceof DestructorFieldDestruction or
|
||||
exists(NewArrayExpr newExpr |
|
||||
// REVIEW: Ignore initializers for `NewArrayExpr` until we determine how to
|
||||
// represent them.
|
||||
newExpr.getInitializer().getFullyConverted() = expr
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `expr` (not including its descendants) should be ignored for the
|
||||
* purposes of IR generation.
|
||||
*/
|
||||
private predicate ignoreExprOnly(Expr expr) {
|
||||
exists(NewOrNewArrayExpr newExpr |
|
||||
// Ignore the allocator call, because we always synthesize it. Don't ignore
|
||||
// its arguments, though, because we use them as part of the synthesis.
|
||||
newExpr.getAllocatorCall() = expr
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `expr` should be ignored for the purposes of IR generation.
|
||||
*/
|
||||
private predicate ignoreExpr(Expr expr) {
|
||||
ignoreExprLocal(expr) or
|
||||
// Ignore all descendants of ignored elements as well.
|
||||
ignoreElement(getRealParent(expr))
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `element` should be ignored for the purposes of IR generation.
|
||||
*/
|
||||
private predicate ignoreElement(Element element) {
|
||||
ignoreExpr(element.(Expr))
|
||||
ignoreExprOnly(expr) or
|
||||
ignoreExprAndDescendants(getRealParent*(expr))
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -155,7 +164,7 @@ predicate ignoreLoad(Expr expr) {
|
||||
|
||||
newtype TTranslatedElement =
|
||||
// An expression that is not being consumed as a condition
|
||||
TTranslatedNonLoadExpr(Expr expr) {
|
||||
TTranslatedValueExpr(Expr expr) {
|
||||
not ignoreExpr(expr) and
|
||||
not isNativeCondition(expr) and
|
||||
not isFlexibleCondition(expr)
|
||||
@@ -216,6 +225,9 @@ newtype TTranslatedElement =
|
||||
exists(ConstructorFieldInit fieldInit |
|
||||
fieldInit.getExpr().getFullyConverted() = expr
|
||||
) or
|
||||
exists(NewExpr newExpr |
|
||||
newExpr.getInitializer().getFullyConverted() = expr
|
||||
) or
|
||||
exists(ThrowExpr throw |
|
||||
throw.getExpr().getFullyConverted() = expr
|
||||
)
|
||||
@@ -298,6 +310,14 @@ newtype TTranslatedElement =
|
||||
exists(DeclStmt declStmt |
|
||||
declStmt.getADeclarationEntry() = entry
|
||||
)
|
||||
} or
|
||||
// An allocator call in a `new` or `new[]` expression
|
||||
TTranslatedAllocatorCall(NewOrNewArrayExpr newExpr) {
|
||||
not ignoreExpr(newExpr)
|
||||
} or
|
||||
// An allocation size for a `new` or `new[]` expression
|
||||
TTranslatedAllocationSize(NewOrNewArrayExpr newExpr) {
|
||||
not ignoreExpr(newExpr)
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -16,33 +16,23 @@ TranslatedExpr getTranslatedExpr(Expr expr) {
|
||||
result.producesExprResult()
|
||||
}
|
||||
|
||||
/**
|
||||
* The IR translation of some part of an expression.
|
||||
* A single `Expr` may consist of multiple `TranslatedExpr` objects. Every
|
||||
* `Expr` has a single `TranslatedCoreExpr`, which produces the result of the
|
||||
* expression before any implicit lvalue-to-rvalue conversion. Any expression
|
||||
* with an lvalue-to-rvalue conversion will also have a `TranslatedLoad` to
|
||||
* perform that conversion on the original result. A few expressions have
|
||||
* additional `TranslatedExpr` objects that compute intermediate values, such
|
||||
* as the `TranslatedAllocatorCall` and `TranslatedAllocationSize` within the
|
||||
* translation of a `NewExpr`.
|
||||
*/
|
||||
abstract class TranslatedExpr extends TranslatedElement {
|
||||
Expr expr;
|
||||
|
||||
override final string toString() {
|
||||
result = expr.toString()
|
||||
}
|
||||
|
||||
override final Locatable getAST() {
|
||||
result = expr
|
||||
}
|
||||
|
||||
final Expr getExpr() {
|
||||
result = expr
|
||||
}
|
||||
|
||||
override final Function getFunction() {
|
||||
result = expr.getEnclosingFunction()
|
||||
}
|
||||
|
||||
final TranslatedFunction getEnclosingFunction() {
|
||||
result = getTranslatedFunction(expr.getEnclosingFunction())
|
||||
}
|
||||
|
||||
final Type getResultType() {
|
||||
result = expr.getType().getUnspecifiedType()
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the instruction that produces the result of the expression.
|
||||
*/
|
||||
abstract Instruction getResult();
|
||||
|
||||
/**
|
||||
@@ -54,9 +44,50 @@ abstract class TranslatedExpr extends TranslatedElement {
|
||||
* TranslatedVariableAccess for `x` does not. The TranslatedVariableAccess
|
||||
* for `y` does produce its result, however, because there is no load on `y`.
|
||||
*/
|
||||
final predicate producesExprResult() {
|
||||
// A load always produces the result of the expression.
|
||||
this instanceof TranslatedLoad or
|
||||
abstract predicate producesExprResult();
|
||||
|
||||
/**
|
||||
* Gets the type of the result produced by this expression.
|
||||
*/
|
||||
final Type getResultType() {
|
||||
result = expr.getType().getUnspecifiedType()
|
||||
}
|
||||
|
||||
override final Locatable getAST() {
|
||||
result = expr
|
||||
}
|
||||
|
||||
override final Function getFunction() {
|
||||
result = expr.getEnclosingFunction()
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the expression from which this `TranslatedExpr` is generated.
|
||||
*/
|
||||
final Expr getExpr() {
|
||||
result = expr
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the `TranslatedFunction` containing this expression.
|
||||
*/
|
||||
final TranslatedFunction getEnclosingFunction() {
|
||||
result = getTranslatedFunction(expr.getEnclosingFunction())
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The IR translation of the "core" part of an expression. This is the part of
|
||||
* the expression that produces the result value of the expression, before any
|
||||
* lvalue-to-rvalue conversion on the result. Every expression has a single
|
||||
* `TranslatedCoreExpr`.
|
||||
*/
|
||||
abstract class TranslatedCoreExpr extends TranslatedExpr {
|
||||
override final string toString() {
|
||||
result = expr.toString()
|
||||
}
|
||||
|
||||
override final predicate producesExprResult() {
|
||||
// If there's no load, then this is the only TranslatedExpr for this
|
||||
// expression.
|
||||
not expr.hasLValueToRValueConversion() or
|
||||
@@ -86,7 +117,7 @@ abstract class TranslatedExpr extends TranslatedElement {
|
||||
}
|
||||
}
|
||||
|
||||
class TranslatedConditionValue extends TranslatedExpr, ConditionContext,
|
||||
class TranslatedConditionValue extends TranslatedCoreExpr, ConditionContext,
|
||||
TTranslatedConditionValue {
|
||||
TranslatedConditionValue() {
|
||||
this = TTranslatedConditionValue(expr)
|
||||
@@ -262,11 +293,19 @@ class TranslatedConditionValue extends TranslatedExpr, ConditionContext,
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* IR translation of an implicit lvalue-to-rvalue conversion on the result of
|
||||
* an expression.
|
||||
*/
|
||||
class TranslatedLoad extends TranslatedExpr, TTranslatedLoad {
|
||||
TranslatedLoad() {
|
||||
this = TTranslatedLoad(expr)
|
||||
}
|
||||
|
||||
override string toString() {
|
||||
result = "Load of " + expr.toString()
|
||||
}
|
||||
|
||||
override Instruction getFirstInstruction() {
|
||||
result = getOperand().getFirstInstruction()
|
||||
}
|
||||
@@ -279,8 +318,11 @@ class TranslatedLoad extends TranslatedExpr, TTranslatedLoad {
|
||||
Type resultType, boolean isGLValue) {
|
||||
tag = LoadTag() and
|
||||
opcode instanceof Opcode::Load and
|
||||
resultType = getResultType() and
|
||||
isGLValue = isResultGLValue()
|
||||
resultType = expr.getType().getUnspecifiedType() and
|
||||
if expr.isGLValueCategory() then
|
||||
isGLValue = true
|
||||
else
|
||||
isGLValue = false
|
||||
}
|
||||
|
||||
override Instruction getInstructionSuccessor(InstructionTag tag,
|
||||
@@ -313,8 +355,13 @@ class TranslatedLoad extends TranslatedExpr, TTranslatedLoad {
|
||||
)
|
||||
}
|
||||
|
||||
private TranslatedExpr getOperand() {
|
||||
result.getExpr() = expr and not result instanceof TranslatedLoad
|
||||
override final predicate producesExprResult() {
|
||||
// A load always produces the result of the expression.
|
||||
any()
|
||||
}
|
||||
|
||||
private TranslatedCoreExpr getOperand() {
|
||||
result.getExpr() = expr
|
||||
}
|
||||
}
|
||||
|
||||
@@ -906,21 +953,24 @@ class TranslatedFunctionAccess extends TranslatedNonConstantExpr {
|
||||
}
|
||||
}
|
||||
|
||||
abstract class TranslatedNonLoadExpr extends TranslatedExpr,
|
||||
TTranslatedNonLoadExpr {
|
||||
TranslatedNonLoadExpr() {
|
||||
this = TTranslatedNonLoadExpr(expr)
|
||||
}
|
||||
}
|
||||
|
||||
abstract class TranslatedNonConstantExpr extends TranslatedNonLoadExpr {
|
||||
/**
|
||||
* IR translation of an expression whose value is not known at compile time.
|
||||
*/
|
||||
abstract class TranslatedNonConstantExpr extends TranslatedCoreExpr {
|
||||
TranslatedNonConstantExpr() {
|
||||
this = TTranslatedValueExpr(expr) and
|
||||
not expr.isConstant()
|
||||
}
|
||||
}
|
||||
|
||||
abstract class TranslatedConstantExpr extends TranslatedNonLoadExpr {
|
||||
/**
|
||||
* IR translation of an expression with a compile-time constant value. This
|
||||
* includes not only literals, but also "integral constant expressions" (e.g.
|
||||
* `1 + 2`).
|
||||
*/
|
||||
abstract class TranslatedConstantExpr extends TranslatedCoreExpr {
|
||||
TranslatedConstantExpr() {
|
||||
this = TTranslatedValueExpr(expr) and
|
||||
expr.isConstant()
|
||||
}
|
||||
|
||||
@@ -998,7 +1048,15 @@ class TranslatedStringLiteral extends TranslatedConstantExpr {
|
||||
}
|
||||
}
|
||||
|
||||
abstract class TranslatedValueExpr extends TranslatedNonConstantExpr {
|
||||
/**
|
||||
* IR translation of an expression that performs a single operation on its
|
||||
* operands and returns the result.
|
||||
*/
|
||||
abstract class TranslatedSingleInstructionExpr extends
|
||||
TranslatedNonConstantExpr {
|
||||
/**
|
||||
* Gets the `Opcode` of the operation to be performed.
|
||||
*/
|
||||
abstract Opcode getOpcode();
|
||||
|
||||
override final predicate hasInstruction(Opcode opcode, InstructionTag tag,
|
||||
@@ -1014,7 +1072,7 @@ abstract class TranslatedValueExpr extends TranslatedNonConstantExpr {
|
||||
}
|
||||
}
|
||||
|
||||
class TranslatedUnaryExpr extends TranslatedValueExpr {
|
||||
class TranslatedUnaryExpr extends TranslatedSingleInstructionExpr {
|
||||
TranslatedUnaryExpr() {
|
||||
expr instanceof NotExpr or
|
||||
expr instanceof ComplementExpr or
|
||||
@@ -1299,7 +1357,10 @@ private Opcode comparisonOpcode(ComparisonOperation expr) {
|
||||
expr instanceof GEExpr and result instanceof Opcode::CompareGE
|
||||
}
|
||||
|
||||
class TranslatedBinaryOperation extends TranslatedValueExpr {
|
||||
/**
|
||||
* IR translation of a simple binary operation.
|
||||
*/
|
||||
class TranslatedBinaryOperation extends TranslatedSingleInstructionExpr {
|
||||
TranslatedBinaryOperation() {
|
||||
expr instanceof BinaryArithmeticOperation or
|
||||
expr instanceof BinaryBitwiseOperation or
|
||||
@@ -1707,26 +1768,11 @@ class TranslatedAssignOperation extends TranslatedAssignment {
|
||||
}
|
||||
|
||||
/**
|
||||
* Represents the IR translation of a call to a function.
|
||||
* The IR translation of a call to a function. The call may be from an actual
|
||||
* call in the source code, or could be a call that is part of the translation
|
||||
* of a higher-level constructor (e.g. the allocator call in a `NewExpr`).
|
||||
*/
|
||||
abstract class TranslatedCall extends TranslatedNonConstantExpr {
|
||||
Call call;
|
||||
|
||||
TranslatedCall() {
|
||||
expr = call
|
||||
}
|
||||
|
||||
override final Instruction getFirstInstruction() {
|
||||
if exists(getQualifier()) then
|
||||
result = getQualifier().getFirstInstruction()
|
||||
else
|
||||
result = getFirstCallTargetInstruction()
|
||||
}
|
||||
|
||||
override final Instruction getResult() {
|
||||
result = getInstruction(CallTag())
|
||||
}
|
||||
|
||||
abstract class TranslatedCall extends TranslatedExpr {
|
||||
override final TranslatedElement getChild(int id) {
|
||||
// We choose the child's id in the order of evaluation.
|
||||
// The qualifier is evaluated before the call target, because the value of
|
||||
@@ -1737,6 +1783,21 @@ abstract class TranslatedCall extends TranslatedNonConstantExpr {
|
||||
result = getArgument(id)
|
||||
}
|
||||
|
||||
override final Instruction getFirstInstruction() {
|
||||
if exists(getQualifier()) then
|
||||
result = getQualifier().getFirstInstruction()
|
||||
else
|
||||
result = getFirstCallTargetInstruction()
|
||||
}
|
||||
|
||||
override predicate hasInstruction(Opcode opcode, InstructionTag tag,
|
||||
Type resultType, boolean isGLValue) {
|
||||
tag = CallTag() and
|
||||
opcode instanceof Opcode::Invoke and
|
||||
resultType = getCallResultType() and
|
||||
isGLValue = false
|
||||
}
|
||||
|
||||
override Instruction getChildSuccessor(TranslatedElement child) {
|
||||
(
|
||||
child = getQualifier() and
|
||||
@@ -1755,14 +1816,6 @@ abstract class TranslatedCall extends TranslatedNonConstantExpr {
|
||||
)
|
||||
}
|
||||
|
||||
override predicate hasInstruction(Opcode opcode, InstructionTag tag,
|
||||
Type resultType, boolean isGLValue) {
|
||||
tag = CallTag() and
|
||||
opcode instanceof Opcode::Invoke and
|
||||
resultType = call.getType().getUnspecifiedType() and
|
||||
isGLValue = false
|
||||
}
|
||||
|
||||
override Instruction getInstructionSuccessor(InstructionTag tag,
|
||||
EdgeKind kind) {
|
||||
kind instanceof GotoEdge and
|
||||
@@ -1789,13 +1842,15 @@ abstract class TranslatedCall extends TranslatedNonConstantExpr {
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if the call has any arguments, not counting the `this` argument.
|
||||
*/
|
||||
final predicate hasArguments() {
|
||||
exists(call.getArgument(0))
|
||||
override final Instruction getResult() {
|
||||
result = getInstruction(CallTag())
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the result type of the call.
|
||||
*/
|
||||
abstract Type getCallResultType();
|
||||
|
||||
/**
|
||||
* Holds if the call has a `this` argument.
|
||||
*/
|
||||
@@ -1834,9 +1889,7 @@ abstract class TranslatedCall extends TranslatedNonConstantExpr {
|
||||
* Gets the `TranslatedExpr` for the qualifier of the call (i.e. the value
|
||||
* that is passed as the `this` argument.
|
||||
*/
|
||||
final TranslatedExpr getQualifier() {
|
||||
result = getTranslatedExpr(call.getQualifier().getFullyConverted())
|
||||
}
|
||||
abstract TranslatedExpr getQualifier();
|
||||
|
||||
/**
|
||||
* Gets the instruction whose result value is the `this` argument of the call.
|
||||
@@ -1852,9 +1905,7 @@ abstract class TranslatedCall extends TranslatedNonConstantExpr {
|
||||
* Gets the argument with the specified `index`. Does not include the `this`
|
||||
* argument.
|
||||
*/
|
||||
final TranslatedExpr getArgument(int index) {
|
||||
result = getTranslatedExpr(call.getArgument(index).getFullyConverted())
|
||||
}
|
||||
abstract TranslatedExpr getArgument(int index);
|
||||
|
||||
/**
|
||||
* If there are any arguments, gets the first instruction of the first
|
||||
@@ -1866,12 +1917,305 @@ abstract class TranslatedCall extends TranslatedNonConstantExpr {
|
||||
else
|
||||
result = getInstruction(CallTag())
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if the call has any arguments, not counting the `this` argument.
|
||||
*/
|
||||
abstract predicate hasArguments();
|
||||
}
|
||||
|
||||
/**
|
||||
* The IR translation of the allocation size argument passed to `operator new`
|
||||
* in a `new` expression.
|
||||
*
|
||||
* We have to synthesize this because not all `NewExpr` nodes have an allocator
|
||||
* call, and even the ones that do pass an `ErrorExpr` as the argument.
|
||||
*/
|
||||
abstract class TranslatedAllocationSize extends TranslatedExpr,
|
||||
TTranslatedAllocationSize {
|
||||
NewOrNewArrayExpr newExpr;
|
||||
|
||||
TranslatedAllocationSize() {
|
||||
this = TTranslatedAllocationSize(newExpr) and
|
||||
expr = newExpr
|
||||
}
|
||||
|
||||
override final string toString() {
|
||||
result = "Allocation size for " + newExpr.toString()
|
||||
}
|
||||
|
||||
override final predicate producesExprResult() {
|
||||
none()
|
||||
}
|
||||
|
||||
override final Instruction getResult() {
|
||||
result = getInstruction(AllocationSizeTag())
|
||||
}
|
||||
}
|
||||
|
||||
TranslatedAllocationSize getTranslatedAllocationSize(NewOrNewArrayExpr newExpr) {
|
||||
result.getAST() = newExpr
|
||||
}
|
||||
|
||||
/**
|
||||
* The IR translation of a constant allocation size.
|
||||
*
|
||||
* The allocation size for a `new` expression is always a constant. The
|
||||
* allocation size for a `new[]` expression is a constant if the array extent
|
||||
* is a compile-time constant.
|
||||
*/
|
||||
class TranslatedConstantAllocationSize extends TranslatedAllocationSize {
|
||||
TranslatedConstantAllocationSize() {
|
||||
not exists(newExpr.(NewArrayExpr).getExtent())
|
||||
}
|
||||
|
||||
override final Instruction getFirstInstruction() {
|
||||
result = getInstruction(AllocationSizeTag())
|
||||
}
|
||||
|
||||
override final predicate hasInstruction(Opcode opcode, InstructionTag tag,
|
||||
Type resultType, boolean isGLValue) {
|
||||
tag = AllocationSizeTag() and
|
||||
opcode instanceof Opcode::Constant and
|
||||
resultType = newExpr.getAllocator().getParameter(0).getType().getUnspecifiedType() and
|
||||
isGLValue = false
|
||||
}
|
||||
|
||||
override final Instruction getInstructionSuccessor(InstructionTag tag,
|
||||
EdgeKind kind) {
|
||||
tag = AllocationSizeTag() and
|
||||
kind instanceof GotoEdge and
|
||||
result = getParent().getChildSuccessor(this)
|
||||
}
|
||||
|
||||
override final TranslatedElement getChild(int id) {
|
||||
none()
|
||||
}
|
||||
|
||||
override final Instruction getChildSuccessor(TranslatedElement child) {
|
||||
none()
|
||||
}
|
||||
|
||||
override final string getInstructionConstantValue(InstructionTag tag) {
|
||||
tag = AllocationSizeTag() and
|
||||
result = newExpr.getAllocatedType().getSize().toString()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The IR translation of a non-constant allocation size.
|
||||
*
|
||||
* This class is used for the allocation size of a `new[]` expression where the
|
||||
* array extent is not known at compile time. It performs the multiplication of
|
||||
* the extent by the element size.
|
||||
*/
|
||||
class TranslatedNonConstantAllocationSize extends TranslatedAllocationSize {
|
||||
NewArrayExpr newArrayExpr;
|
||||
|
||||
TranslatedNonConstantAllocationSize() {
|
||||
newArrayExpr = newExpr and
|
||||
exists(newArrayExpr.getExtent())
|
||||
}
|
||||
|
||||
override final Instruction getFirstInstruction() {
|
||||
result = getExtent().getFirstInstruction()
|
||||
}
|
||||
|
||||
override final predicate hasInstruction(Opcode opcode, InstructionTag tag,
|
||||
Type resultType, boolean isGLValue) {
|
||||
isGLValue = false and
|
||||
resultType = newExpr.getAllocator().getParameter(0).getType().getUnspecifiedType() and
|
||||
(
|
||||
// Convert the extent to `size_t`, because the AST doesn't do this already.
|
||||
tag = AllocationExtentConvertTag() and opcode instanceof Opcode::Convert or
|
||||
tag = AllocationElementSizeTag() and opcode instanceof Opcode::Constant or
|
||||
tag = AllocationSizeTag() and opcode instanceof Opcode::Mul // REVIEW: Overflow?
|
||||
)
|
||||
}
|
||||
|
||||
override final Instruction getInstructionSuccessor(InstructionTag tag,
|
||||
EdgeKind kind) {
|
||||
kind instanceof GotoEdge and
|
||||
(
|
||||
(
|
||||
tag = AllocationExtentConvertTag() and
|
||||
result = getInstruction(AllocationElementSizeTag())
|
||||
) or
|
||||
(
|
||||
tag = AllocationElementSizeTag() and
|
||||
result = getInstruction(AllocationSizeTag())
|
||||
) or
|
||||
(
|
||||
tag = AllocationSizeTag() and
|
||||
result = getParent().getChildSuccessor(this)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
override final TranslatedElement getChild(int id) {
|
||||
id = 0 and result = getExtent()
|
||||
}
|
||||
|
||||
override final Instruction getChildSuccessor(TranslatedElement child) {
|
||||
child = getExtent() and
|
||||
result = getInstruction(AllocationExtentConvertTag())
|
||||
}
|
||||
|
||||
override final string getInstructionConstantValue(InstructionTag tag) {
|
||||
tag = AllocationElementSizeTag() and
|
||||
result = newArrayExpr.getAllocatedElementType().getSize().toString()
|
||||
}
|
||||
|
||||
override final Instruction getInstructionOperand(InstructionTag tag,
|
||||
OperandTag operandTag) {
|
||||
(
|
||||
tag = AllocationSizeTag() and
|
||||
(
|
||||
operandTag instanceof LeftOperand and result = getInstruction(AllocationExtentConvertTag()) or
|
||||
operandTag instanceof RightOperand and result = getInstruction(AllocationElementSizeTag())
|
||||
)
|
||||
) or
|
||||
(
|
||||
tag = AllocationExtentConvertTag() and
|
||||
operandTag instanceof UnaryOperand and
|
||||
result = getExtent().getResult()
|
||||
)
|
||||
}
|
||||
|
||||
private TranslatedExpr getExtent() {
|
||||
result = getTranslatedExpr(newArrayExpr.getExtent().getFullyConverted())
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* IR translation of a direct call to a specific function. Used for both
|
||||
* explicit calls (`TranslatedFunctionCall`) and implicit calls
|
||||
* (`TranslatedAllocatorCall`).
|
||||
*/
|
||||
abstract class TranslatedDirectCall extends TranslatedCall {
|
||||
override final Instruction getFirstCallTargetInstruction() {
|
||||
result = getInstruction(CallTargetTag())
|
||||
}
|
||||
|
||||
override final Instruction getCallTargetResult() {
|
||||
result = getInstruction(CallTargetTag())
|
||||
}
|
||||
|
||||
override predicate hasInstruction(Opcode opcode, InstructionTag tag,
|
||||
Type resultType, boolean isGLValue) {
|
||||
TranslatedCall.super.hasInstruction(opcode, tag, resultType, isGLValue) or
|
||||
(
|
||||
tag = CallTargetTag() and
|
||||
opcode instanceof Opcode::FunctionAddress and
|
||||
// The database does not contain a `FunctionType` for a function unless
|
||||
// its address was taken, so we'll just use glval<Unknown> instead of
|
||||
// glval<FunctionType>.
|
||||
resultType instanceof UnknownType and
|
||||
isGLValue = true
|
||||
)
|
||||
}
|
||||
|
||||
override Instruction getInstructionSuccessor(InstructionTag tag,
|
||||
EdgeKind kind) {
|
||||
result = TranslatedCall.super.getInstructionSuccessor(tag, kind) or
|
||||
(
|
||||
tag = CallTargetTag() and
|
||||
kind instanceof GotoEdge and
|
||||
result = getFirstArgumentOrCallInstruction()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The IR translation of a call to `operator new` as part of a `new` or `new[]`
|
||||
* expression.
|
||||
*/
|
||||
class TranslatedAllocatorCall extends TTranslatedAllocatorCall,
|
||||
TranslatedDirectCall {
|
||||
NewOrNewArrayExpr newExpr;
|
||||
|
||||
TranslatedAllocatorCall() {
|
||||
this = TTranslatedAllocatorCall(newExpr) and
|
||||
expr = newExpr
|
||||
}
|
||||
|
||||
override final string toString() {
|
||||
result = "Allocator call for " + newExpr.toString()
|
||||
}
|
||||
|
||||
override final predicate producesExprResult() {
|
||||
none()
|
||||
}
|
||||
|
||||
override Function getInstructionFunction(InstructionTag tag) {
|
||||
tag = CallTargetTag() and result = newExpr.getAllocator()
|
||||
}
|
||||
|
||||
override final Type getCallResultType() {
|
||||
result = newExpr.getAllocator().getType().getUnspecifiedType()
|
||||
}
|
||||
|
||||
override final TranslatedExpr getQualifier() {
|
||||
none()
|
||||
}
|
||||
|
||||
override final predicate hasArguments() {
|
||||
// All allocator calls have at least one argument.
|
||||
any()
|
||||
}
|
||||
|
||||
override final TranslatedExpr getArgument(int index) {
|
||||
// If the allocator is the default operator new(void*), there will be no
|
||||
// allocator call in the AST. Otherwise, there will be an allocator call
|
||||
// that includes all arguments to the allocator, including the size,
|
||||
// alignment (if any), and placement args. However, the size argument is
|
||||
// an error node, so we need to provide the correct size argument in any
|
||||
// case.
|
||||
if index = 0 then
|
||||
result = getTranslatedAllocationSize(newExpr)
|
||||
else if(index = 1 and newExpr.hasAlignedAllocation()) then
|
||||
result = getTranslatedExpr(newExpr.getAlignmentArgument())
|
||||
else
|
||||
result = getTranslatedExpr(newExpr.getAllocatorCall().getArgument(index))
|
||||
}
|
||||
}
|
||||
|
||||
TranslatedAllocatorCall getTranslatedAllocatorCall(NewOrNewArrayExpr newExpr) {
|
||||
result.getAST() = newExpr
|
||||
}
|
||||
|
||||
/**
|
||||
* The IR translation of a call to a function.
|
||||
*/
|
||||
abstract class TranslatedCallExpr extends TranslatedNonConstantExpr,
|
||||
TranslatedCall {
|
||||
Call call;
|
||||
|
||||
TranslatedCallExpr() {
|
||||
expr = call
|
||||
}
|
||||
|
||||
override final Type getCallResultType() {
|
||||
result = getResultType()
|
||||
}
|
||||
|
||||
override final predicate hasArguments() {
|
||||
exists(call.getArgument(0))
|
||||
}
|
||||
|
||||
override final TranslatedExpr getQualifier() {
|
||||
result = getTranslatedExpr(call.getQualifier().getFullyConverted())
|
||||
}
|
||||
|
||||
override final TranslatedExpr getArgument(int index) {
|
||||
result = getTranslatedExpr(call.getArgument(index).getFullyConverted())
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Represents the IR translation of a call through a function pointer.
|
||||
*/
|
||||
class TranslatedExprCall extends TranslatedCall {
|
||||
class TranslatedExprCall extends TranslatedCallExpr {
|
||||
ExprCall exprCall;
|
||||
|
||||
TranslatedExprCall() {
|
||||
@@ -1886,42 +2230,13 @@ class TranslatedExprCall extends TranslatedCall {
|
||||
/**
|
||||
* Represents the IR translation of a direct function call.
|
||||
*/
|
||||
class TranslatedFunctionCall extends TranslatedCall {
|
||||
class TranslatedFunctionCall extends TranslatedCallExpr, TranslatedDirectCall {
|
||||
FunctionCall funcCall;
|
||||
|
||||
TranslatedFunctionCall() {
|
||||
expr = funcCall
|
||||
}
|
||||
|
||||
override final Instruction getFirstCallTargetInstruction() {
|
||||
result = getInstruction(CallTargetTag())
|
||||
}
|
||||
|
||||
override final Instruction getCallTargetResult() {
|
||||
result = getInstruction(CallTargetTag())
|
||||
}
|
||||
|
||||
override predicate hasInstruction(Opcode opcode, InstructionTag tag,
|
||||
Type resultType, boolean isGLValue) {
|
||||
super.hasInstruction(opcode, tag, resultType, isGLValue) or
|
||||
(
|
||||
tag = CallTargetTag() and
|
||||
opcode instanceof Opcode::FunctionAddress and
|
||||
resultType instanceof BoolType and //HACK
|
||||
isGLValue = false
|
||||
)
|
||||
}
|
||||
|
||||
override Instruction getInstructionSuccessor(InstructionTag tag,
|
||||
EdgeKind kind) {
|
||||
result = super.getInstructionSuccessor(tag, kind) or
|
||||
(
|
||||
tag = CallTargetTag() and
|
||||
kind instanceof GotoEdge and
|
||||
result = getFirstArgumentOrCallInstruction()
|
||||
)
|
||||
}
|
||||
|
||||
override Function getInstructionFunction(InstructionTag tag) {
|
||||
tag = CallTargetTag() and result = funcCall.getTarget()
|
||||
}
|
||||
@@ -2498,3 +2813,103 @@ class TranslatedVarArgCopy extends TranslatedBuiltInOperation {
|
||||
result instanceof Opcode::VarArgCopy
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The IR translation of a `new` or `new[]` expression.
|
||||
*/
|
||||
abstract class TranslatedNewOrNewArrayExpr extends TranslatedNonConstantExpr,
|
||||
InitializationContext {
|
||||
NewOrNewArrayExpr newExpr;
|
||||
|
||||
TranslatedNewOrNewArrayExpr() {
|
||||
expr = newExpr
|
||||
}
|
||||
|
||||
override final TranslatedElement getChild(int id) {
|
||||
id = 0 and result = getAllocatorCall() or
|
||||
id = 1 and result = getInitialization()
|
||||
}
|
||||
|
||||
override final predicate hasInstruction(Opcode opcode, InstructionTag tag,
|
||||
Type resultType, boolean isGLValue) {
|
||||
tag = OnlyInstructionTag() and
|
||||
opcode instanceof Opcode::Convert and
|
||||
resultType = getResultType() and
|
||||
isGLValue = false
|
||||
}
|
||||
|
||||
override final Instruction getFirstInstruction() {
|
||||
result = getAllocatorCall().getFirstInstruction()
|
||||
}
|
||||
|
||||
override final Instruction getResult() {
|
||||
result = getInstruction(OnlyInstructionTag())
|
||||
}
|
||||
|
||||
override final Instruction getInstructionSuccessor(InstructionTag tag,
|
||||
EdgeKind kind) {
|
||||
kind instanceof GotoEdge and
|
||||
tag = OnlyInstructionTag() and
|
||||
if exists(getInitialization()) then
|
||||
result = getInitialization().getFirstInstruction()
|
||||
else
|
||||
result = getParent().getChildSuccessor(this)
|
||||
}
|
||||
|
||||
override final Instruction getChildSuccessor(TranslatedElement child) {
|
||||
child = getAllocatorCall() and result = getInstruction(OnlyInstructionTag()) or
|
||||
child = getInitialization() and result = getParent().getChildSuccessor(this)
|
||||
}
|
||||
|
||||
override final Instruction getInstructionOperand(InstructionTag tag,
|
||||
OperandTag operandTag) {
|
||||
tag = OnlyInstructionTag() and
|
||||
operandTag instanceof UnaryOperand and
|
||||
result = getAllocatorCall().getResult()
|
||||
}
|
||||
|
||||
override final Instruction getTargetAddress() {
|
||||
result = getInstruction(OnlyInstructionTag())
|
||||
}
|
||||
|
||||
private TranslatedAllocatorCall getAllocatorCall() {
|
||||
result = getTranslatedAllocatorCall(newExpr)
|
||||
}
|
||||
|
||||
abstract TranslatedInitialization getInitialization();
|
||||
}
|
||||
|
||||
/**
|
||||
* The IR translation of a `new` expression.
|
||||
*/
|
||||
class TranslatedNewExpr extends TranslatedNewOrNewArrayExpr {
|
||||
TranslatedNewExpr() {
|
||||
newExpr instanceof NewExpr
|
||||
}
|
||||
|
||||
override final Type getTargetType() {
|
||||
result = newExpr.getAllocatedType().getUnspecifiedType()
|
||||
}
|
||||
|
||||
override final TranslatedInitialization getInitialization() {
|
||||
result = getTranslatedInitialization(newExpr.(NewExpr).getInitializer())
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The IR translation of a `new[]` expression.
|
||||
*/
|
||||
class TranslatedNewArrayExpr extends TranslatedNewOrNewArrayExpr {
|
||||
TranslatedNewArrayExpr() {
|
||||
newExpr instanceof NewArrayExpr
|
||||
}
|
||||
|
||||
override final Type getTargetType() {
|
||||
result = newExpr.getAllocatedType().getUnspecifiedType()
|
||||
}
|
||||
|
||||
override final TranslatedInitialization getInitialization() {
|
||||
// REVIEW: Figure out how we want to model array initialization in the IR.
|
||||
none()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -195,8 +195,11 @@ class Instruction extends Construction::TInstruction {
|
||||
private string getResultTypeString() {
|
||||
exists(string valcat |
|
||||
valcat = getValueCategoryString(resultType.toString()) and
|
||||
if resultType instanceof UnknownType and exists(getResultSize()) then
|
||||
if (resultType instanceof UnknownType and
|
||||
not isGLValue() and
|
||||
exists(getResultSize())) then (
|
||||
result = valcat + "[" + getResultSize().toString() + "]"
|
||||
)
|
||||
else
|
||||
result = valcat
|
||||
)
|
||||
|
||||
@@ -195,8 +195,11 @@ class Instruction extends Construction::TInstruction {
|
||||
private string getResultTypeString() {
|
||||
exists(string valcat |
|
||||
valcat = getValueCategoryString(resultType.toString()) and
|
||||
if resultType instanceof UnknownType and exists(getResultSize()) then
|
||||
if (resultType instanceof UnknownType and
|
||||
not isGLValue() and
|
||||
exists(getResultSize())) then (
|
||||
result = valcat + "[" + getResultSize().toString() + "]"
|
||||
)
|
||||
else
|
||||
result = valcat
|
||||
)
|
||||
|
||||
@@ -2,6 +2,38 @@
|
||||
#-----| params:
|
||||
#-----| __va_list_tag::operator=() -> __va_list_tag &
|
||||
#-----| params:
|
||||
#-----| operator new(unsigned long) -> void *
|
||||
#-----| params:
|
||||
#-----| 0: p#0
|
||||
#-----| Type = unsigned long
|
||||
#-----| operator delete(void *, unsigned long) -> void
|
||||
#-----| params:
|
||||
#-----| 0: p#0
|
||||
#-----| Type = void *
|
||||
#-----| 1: p#1
|
||||
#-----| Type = unsigned long
|
||||
#-----| operator new(unsigned long, align_val_t) -> void *
|
||||
#-----| params:
|
||||
#-----| 0: p#0
|
||||
#-----| Type = unsigned long
|
||||
#-----| 1: p#1
|
||||
#-----| Type = align_val_t
|
||||
#-----| operator new[](unsigned long) -> void *
|
||||
#-----| params:
|
||||
#-----| 0: p#0
|
||||
#-----| Type = unsigned long
|
||||
#-----| operator delete[](void *, unsigned long) -> void
|
||||
#-----| params:
|
||||
#-----| 0: p#0
|
||||
#-----| Type = void *
|
||||
#-----| 1: p#1
|
||||
#-----| Type = unsigned long
|
||||
#-----| operator new[](unsigned long, align_val_t) -> void *
|
||||
#-----| params:
|
||||
#-----| 0: p#0
|
||||
#-----| Type = unsigned long
|
||||
#-----| 1: p#1
|
||||
#-----| Type = align_val_t
|
||||
ir.cpp:
|
||||
# 1| Constants() -> void
|
||||
# 1| params:
|
||||
@@ -5957,3 +5989,317 @@ ir.cpp:
|
||||
# 906| Type = int
|
||||
# 906| ValueCategory = prvalue(load)
|
||||
# 907| 2: return ...
|
||||
# 915| operator new(size_t, float) -> void *
|
||||
# 915| params:
|
||||
# 915| 0: p#0
|
||||
# 915| Type = size_t
|
||||
# 915| 1: p#1
|
||||
# 915| Type = float
|
||||
# 916| operator new[](size_t, float) -> void *
|
||||
# 916| params:
|
||||
# 916| 0: p#0
|
||||
# 916| Type = size_t
|
||||
# 916| 1: p#1
|
||||
# 916| Type = float
|
||||
# 917| operator new(size_t, align_val_t, float) -> void *
|
||||
# 917| params:
|
||||
# 917| 0: p#0
|
||||
# 917| Type = size_t
|
||||
# 917| 1: p#1
|
||||
# 917| Type = align_val_t
|
||||
# 917| 2: p#2
|
||||
# 917| Type = float
|
||||
# 918| operator new[](size_t, align_val_t, float) -> void *
|
||||
# 918| params:
|
||||
# 918| 0: p#0
|
||||
# 918| Type = size_t
|
||||
# 918| 1: p#1
|
||||
# 918| Type = align_val_t
|
||||
# 918| 2: p#2
|
||||
# 918| Type = float
|
||||
# 919| operator delete(void *, float) -> void
|
||||
# 919| params:
|
||||
# 919| 0: p#0
|
||||
# 919| Type = void *
|
||||
# 919| 1: p#1
|
||||
# 919| Type = float
|
||||
# 920| operator delete[](void *, float) -> void
|
||||
# 920| params:
|
||||
# 920| 0: p#0
|
||||
# 920| Type = void *
|
||||
# 920| 1: p#1
|
||||
# 920| Type = float
|
||||
# 921| operator delete(void *, align_val_t, float) -> void
|
||||
# 921| params:
|
||||
# 921| 0: p#0
|
||||
# 921| Type = void *
|
||||
# 921| 1: p#1
|
||||
# 921| Type = align_val_t
|
||||
# 921| 2: p#2
|
||||
# 921| Type = float
|
||||
# 922| operator delete[](void *, align_val_t, float) -> void
|
||||
# 922| params:
|
||||
# 922| 0: p#0
|
||||
# 922| Type = void *
|
||||
# 922| 1: p#1
|
||||
# 922| Type = align_val_t
|
||||
# 922| 2: p#2
|
||||
# 922| Type = float
|
||||
# 924| SizedDealloc::operator=(SizedDealloc &&) -> SizedDealloc &
|
||||
# 924| params:
|
||||
#-----| 0: p#0
|
||||
#-----| Type = SizedDealloc &&
|
||||
# 924| SizedDealloc::operator=(const SizedDealloc &) -> SizedDealloc &
|
||||
# 924| params:
|
||||
#-----| 0: p#0
|
||||
#-----| Type = const SizedDealloc &
|
||||
# 926| SizedDealloc::operator new(size_t) -> void *
|
||||
# 926| params:
|
||||
# 926| 0: p#0
|
||||
# 926| Type = size_t
|
||||
# 927| SizedDealloc::operator new[](size_t) -> void *
|
||||
# 927| params:
|
||||
# 927| 0: p#0
|
||||
# 927| Type = size_t
|
||||
# 928| SizedDealloc::operator delete(void *, size_t) -> void
|
||||
# 928| params:
|
||||
# 928| 0: p#0
|
||||
# 928| Type = void *
|
||||
# 928| 1: p#1
|
||||
# 928| Type = size_t
|
||||
# 929| SizedDealloc::operator delete[](void *, size_t) -> void
|
||||
# 929| params:
|
||||
# 929| 0: p#0
|
||||
# 929| Type = void *
|
||||
# 929| 1: p#1
|
||||
# 929| Type = size_t
|
||||
# 932| Overaligned::operator=(Overaligned &&) -> Overaligned &
|
||||
# 932| params:
|
||||
#-----| 0: p#0
|
||||
#-----| Type = Overaligned &&
|
||||
# 932| Overaligned::operator=(const Overaligned &) -> Overaligned &
|
||||
# 932| params:
|
||||
#-----| 0: p#0
|
||||
#-----| Type = const Overaligned &
|
||||
# 936| DefaultCtorWithDefaultParam::DefaultCtorWithDefaultParam(DefaultCtorWithDefaultParam &&) -> void
|
||||
# 936| params:
|
||||
#-----| 0: p#0
|
||||
#-----| Type = DefaultCtorWithDefaultParam &&
|
||||
# 936| DefaultCtorWithDefaultParam::DefaultCtorWithDefaultParam(const DefaultCtorWithDefaultParam &) -> void
|
||||
# 936| params:
|
||||
#-----| 0: p#0
|
||||
#-----| Type = const DefaultCtorWithDefaultParam &
|
||||
# 936| DefaultCtorWithDefaultParam::operator=(DefaultCtorWithDefaultParam &&) -> DefaultCtorWithDefaultParam &
|
||||
# 936| params:
|
||||
#-----| 0: p#0
|
||||
#-----| Type = DefaultCtorWithDefaultParam &&
|
||||
# 936| DefaultCtorWithDefaultParam::operator=(const DefaultCtorWithDefaultParam &) -> DefaultCtorWithDefaultParam &
|
||||
# 936| params:
|
||||
#-----| 0: p#0
|
||||
#-----| Type = const DefaultCtorWithDefaultParam &
|
||||
# 937| DefaultCtorWithDefaultParam::DefaultCtorWithDefaultParam(double) -> void
|
||||
# 937| params:
|
||||
# 937| 0: d
|
||||
# 937| Type = double
|
||||
# 940| OperatorNew() -> void
|
||||
# 940| params:
|
||||
# 940| body: { ... }
|
||||
# 941| 0: ExprStmt
|
||||
# 941| 0: new
|
||||
# 941| Type = int *
|
||||
# 941| ValueCategory = prvalue
|
||||
# 942| 1: ExprStmt
|
||||
# 942| 0: new
|
||||
# 942| Type = int *
|
||||
# 942| ValueCategory = prvalue
|
||||
# 942| 0: call to operator new
|
||||
# 942| Type = void *
|
||||
# 942| ValueCategory = prvalue
|
||||
# 942| 0: <error expr>
|
||||
# 942| Type = unsigned long
|
||||
# 942| ValueCategory = prvalue
|
||||
# 942| 1: 1.0
|
||||
# 942| Type = float
|
||||
# 942| Value = 1.0
|
||||
# 942| ValueCategory = prvalue
|
||||
# 943| 2: ExprStmt
|
||||
# 943| 0: new
|
||||
# 943| Type = int *
|
||||
# 943| ValueCategory = prvalue
|
||||
# 943| 1: 0
|
||||
# 943| Type = int
|
||||
# 943| Value = 0
|
||||
# 943| ValueCategory = prvalue
|
||||
# 944| 3: ExprStmt
|
||||
# 944| 0: new
|
||||
# 944| Type = String *
|
||||
# 944| ValueCategory = prvalue
|
||||
# 944| 1: call to String
|
||||
# 944| Type = void
|
||||
# 944| ValueCategory = prvalue
|
||||
# 945| 4: ExprStmt
|
||||
# 945| 0: new
|
||||
# 945| Type = String *
|
||||
# 945| ValueCategory = prvalue
|
||||
# 945| 0: call to operator new
|
||||
# 945| Type = void *
|
||||
# 945| ValueCategory = prvalue
|
||||
# 945| 0: <error expr>
|
||||
# 945| Type = unsigned long
|
||||
# 945| ValueCategory = prvalue
|
||||
# 945| 1: 1.0
|
||||
# 945| Type = float
|
||||
# 945| Value = 1.0
|
||||
# 945| ValueCategory = prvalue
|
||||
# 945| 1: call to String
|
||||
# 945| Type = void
|
||||
# 945| ValueCategory = prvalue
|
||||
# 945| 0: array to pointer conversion
|
||||
# 945| Type = const char *
|
||||
# 945| ValueCategory = prvalue
|
||||
# 945| expr: hello
|
||||
# 945| Type = const char[6]
|
||||
# 945| Value = "hello"
|
||||
# 945| ValueCategory = lvalue
|
||||
# 946| 5: ExprStmt
|
||||
# 946| 0: new
|
||||
# 946| Type = Overaligned *
|
||||
# 946| ValueCategory = prvalue
|
||||
# 946| 3: 128
|
||||
# 946| Type = align_val_t
|
||||
# 946| Value = 128
|
||||
# 946| ValueCategory = prvalue
|
||||
# 947| 6: ExprStmt
|
||||
# 947| 0: new
|
||||
# 947| Type = Overaligned *
|
||||
# 947| ValueCategory = prvalue
|
||||
# 947| 0: call to operator new
|
||||
# 947| Type = void *
|
||||
# 947| ValueCategory = prvalue
|
||||
# 947| 0: <error expr>
|
||||
# 947| Type = unsigned long
|
||||
# 947| ValueCategory = prvalue
|
||||
# 947| 1: 128
|
||||
# 947| Type = align_val_t
|
||||
# 947| Value = 128
|
||||
# 947| ValueCategory = prvalue
|
||||
# 947| 2: 1.0
|
||||
# 947| Type = float
|
||||
# 947| Value = 1.0
|
||||
# 947| ValueCategory = prvalue
|
||||
# 947| 1: 0
|
||||
# 947| Type = Overaligned
|
||||
# 947| Value = 0
|
||||
# 947| ValueCategory = prvalue
|
||||
# 948| 7: return ...
|
||||
# 950| OperatorNewArray(int) -> void
|
||||
# 950| params:
|
||||
# 950| 0: n
|
||||
# 950| Type = int
|
||||
# 950| body: { ... }
|
||||
# 951| 0: ExprStmt
|
||||
# 951| 0: new[]
|
||||
# 951| Type = int *
|
||||
# 951| ValueCategory = prvalue
|
||||
# 952| 1: ExprStmt
|
||||
# 952| 0: new[]
|
||||
# 952| Type = int *
|
||||
# 952| ValueCategory = prvalue
|
||||
# 952| 2: n
|
||||
# 952| Type = int
|
||||
# 952| ValueCategory = prvalue(load)
|
||||
# 953| 2: ExprStmt
|
||||
# 953| 0: new[]
|
||||
# 953| Type = int *
|
||||
# 953| ValueCategory = prvalue
|
||||
# 953| 0: call to operator new[]
|
||||
# 953| Type = void *
|
||||
# 953| ValueCategory = prvalue
|
||||
# 953| 0: <error expr>
|
||||
# 953| Type = unsigned long
|
||||
# 953| ValueCategory = prvalue
|
||||
# 953| 1: 1.0
|
||||
# 953| Type = float
|
||||
# 953| Value = 1.0
|
||||
# 953| ValueCategory = prvalue
|
||||
# 953| 2: n
|
||||
# 953| Type = int
|
||||
# 953| ValueCategory = prvalue(load)
|
||||
# 954| 3: ExprStmt
|
||||
# 954| 0: new[]
|
||||
# 954| Type = String *
|
||||
# 954| ValueCategory = prvalue
|
||||
# 954| 1: {...}
|
||||
# 954| Type = String[]
|
||||
# 954| ValueCategory = prvalue
|
||||
# 954| 0: call to String
|
||||
# 954| Type = void
|
||||
# 954| ValueCategory = prvalue
|
||||
# 954| 2: n
|
||||
# 954| Type = int
|
||||
# 954| ValueCategory = prvalue(load)
|
||||
# 955| 4: ExprStmt
|
||||
# 955| 0: new[]
|
||||
# 955| Type = Overaligned *
|
||||
# 955| ValueCategory = prvalue
|
||||
# 955| 2: n
|
||||
# 955| Type = int
|
||||
# 955| ValueCategory = prvalue(load)
|
||||
# 955| 3: 128
|
||||
# 955| Type = align_val_t
|
||||
# 955| Value = 128
|
||||
# 955| ValueCategory = prvalue
|
||||
# 956| 5: ExprStmt
|
||||
# 956| 0: new[]
|
||||
# 956| Type = Overaligned *
|
||||
# 956| ValueCategory = prvalue
|
||||
# 956| 0: call to operator new[]
|
||||
# 956| Type = void *
|
||||
# 956| ValueCategory = prvalue
|
||||
# 956| 0: <error expr>
|
||||
# 956| Type = unsigned long
|
||||
# 956| ValueCategory = prvalue
|
||||
# 956| 1: 128
|
||||
# 956| Type = align_val_t
|
||||
# 956| Value = 128
|
||||
# 956| ValueCategory = prvalue
|
||||
# 956| 2: 1.0
|
||||
# 956| Type = float
|
||||
# 956| Value = 1.0
|
||||
# 956| ValueCategory = prvalue
|
||||
# 957| 6: ExprStmt
|
||||
# 957| 0: new[]
|
||||
# 957| Type = DefaultCtorWithDefaultParam *
|
||||
# 957| ValueCategory = prvalue
|
||||
# 957| 1: {...}
|
||||
# 957| Type = DefaultCtorWithDefaultParam[]
|
||||
# 957| ValueCategory = prvalue
|
||||
# 957| 0: call to DefaultCtorWithDefaultParam
|
||||
# 957| Type = void
|
||||
# 957| ValueCategory = prvalue
|
||||
# 957| 2: n
|
||||
# 957| Type = int
|
||||
# 957| ValueCategory = prvalue(load)
|
||||
# 958| 7: ExprStmt
|
||||
# 958| 0: new[]
|
||||
# 958| Type = int *
|
||||
# 958| ValueCategory = prvalue
|
||||
# 958| 1: {...}
|
||||
# 958| Type = int[3]
|
||||
# 958| ValueCategory = prvalue
|
||||
# 958| 0: 0
|
||||
# 958| Type = int
|
||||
# 958| Value = 0
|
||||
# 958| ValueCategory = prvalue
|
||||
# 958| 1: 1
|
||||
# 958| Type = int
|
||||
# 958| Value = 1
|
||||
# 958| ValueCategory = prvalue
|
||||
# 958| 2: 2
|
||||
# 958| Type = int
|
||||
# 958| Value = 2
|
||||
# 958| ValueCategory = prvalue
|
||||
# 958| 2: n
|
||||
# 958| Type = int
|
||||
# 958| ValueCategory = prvalue(load)
|
||||
# 959| 8: return ...
|
||||
|
||||
@@ -1556,58 +1556,58 @@ ir.cpp:
|
||||
|
||||
# 372| Call() -> void
|
||||
# 372| Block 0
|
||||
# 372| v0_0(void) = EnterFunction :
|
||||
# 372| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 373| r0_2(bool) = FunctionAddress[VoidFunc] :
|
||||
# 373| v0_3(void) = Invoke : r0_2
|
||||
# 374| v0_4(void) = NoOp :
|
||||
# 372| v0_5(void) = ReturnVoid :
|
||||
# 372| v0_6(void) = UnmodeledUse : mu*
|
||||
# 372| v0_7(void) = ExitFunction :
|
||||
# 372| v0_0(void) = EnterFunction :
|
||||
# 372| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 373| r0_2(glval<unknown>) = FunctionAddress[VoidFunc] :
|
||||
# 373| v0_3(void) = Invoke : r0_2
|
||||
# 374| v0_4(void) = NoOp :
|
||||
# 372| v0_5(void) = ReturnVoid :
|
||||
# 372| v0_6(void) = UnmodeledUse : mu*
|
||||
# 372| v0_7(void) = ExitFunction :
|
||||
|
||||
# 376| CallAdd(int, int) -> int
|
||||
# 376| Block 0
|
||||
# 376| v0_0(void) = EnterFunction :
|
||||
# 376| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 376| r0_2(glval<int>) = VariableAddress[x] :
|
||||
# 376| m0_3(int) = InitializeParameter[x] : r0_2
|
||||
# 376| r0_4(glval<int>) = VariableAddress[y] :
|
||||
# 376| m0_5(int) = InitializeParameter[y] : r0_4
|
||||
# 377| r0_6(glval<int>) = VariableAddress[#return] :
|
||||
# 377| r0_7(bool) = FunctionAddress[Add] :
|
||||
# 377| r0_8(glval<int>) = VariableAddress[x] :
|
||||
# 377| r0_9(int) = Load : r0_8, m0_3
|
||||
# 377| r0_10(glval<int>) = VariableAddress[y] :
|
||||
# 377| r0_11(int) = Load : r0_10, m0_5
|
||||
# 377| r0_12(int) = Invoke : r0_7, r0_9, r0_11
|
||||
# 377| m0_13(int) = Store : r0_6, r0_12
|
||||
# 376| r0_14(glval<int>) = VariableAddress[#return] :
|
||||
# 376| v0_15(void) = ReturnValue : r0_14, m0_13
|
||||
# 376| v0_16(void) = UnmodeledUse : mu*
|
||||
# 376| v0_17(void) = ExitFunction :
|
||||
# 376| v0_0(void) = EnterFunction :
|
||||
# 376| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 376| r0_2(glval<int>) = VariableAddress[x] :
|
||||
# 376| m0_3(int) = InitializeParameter[x] : r0_2
|
||||
# 376| r0_4(glval<int>) = VariableAddress[y] :
|
||||
# 376| m0_5(int) = InitializeParameter[y] : r0_4
|
||||
# 377| r0_6(glval<int>) = VariableAddress[#return] :
|
||||
# 377| r0_7(glval<unknown>) = FunctionAddress[Add] :
|
||||
# 377| r0_8(glval<int>) = VariableAddress[x] :
|
||||
# 377| r0_9(int) = Load : r0_8, m0_3
|
||||
# 377| r0_10(glval<int>) = VariableAddress[y] :
|
||||
# 377| r0_11(int) = Load : r0_10, m0_5
|
||||
# 377| r0_12(int) = Invoke : r0_7, r0_9, r0_11
|
||||
# 377| m0_13(int) = Store : r0_6, r0_12
|
||||
# 376| r0_14(glval<int>) = VariableAddress[#return] :
|
||||
# 376| v0_15(void) = ReturnValue : r0_14, m0_13
|
||||
# 376| v0_16(void) = UnmodeledUse : mu*
|
||||
# 376| v0_17(void) = ExitFunction :
|
||||
|
||||
# 380| Comma(int, int) -> int
|
||||
# 380| Block 0
|
||||
# 380| v0_0(void) = EnterFunction :
|
||||
# 380| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 380| r0_2(glval<int>) = VariableAddress[x] :
|
||||
# 380| m0_3(int) = InitializeParameter[x] : r0_2
|
||||
# 380| r0_4(glval<int>) = VariableAddress[y] :
|
||||
# 380| m0_5(int) = InitializeParameter[y] : r0_4
|
||||
# 381| r0_6(glval<int>) = VariableAddress[#return] :
|
||||
# 381| r0_7(bool) = FunctionAddress[VoidFunc] :
|
||||
# 381| v0_8(void) = Invoke : r0_7
|
||||
# 381| r0_9(bool) = FunctionAddress[CallAdd] :
|
||||
# 381| r0_10(glval<int>) = VariableAddress[x] :
|
||||
# 381| r0_11(int) = Load : r0_10, m0_3
|
||||
# 381| r0_12(glval<int>) = VariableAddress[y] :
|
||||
# 381| r0_13(int) = Load : r0_12, m0_5
|
||||
# 381| r0_14(int) = Invoke : r0_9, r0_11, r0_13
|
||||
# 381| m0_15(int) = Store : r0_6, r0_14
|
||||
# 380| r0_16(glval<int>) = VariableAddress[#return] :
|
||||
# 380| v0_17(void) = ReturnValue : r0_16, m0_15
|
||||
# 380| v0_18(void) = UnmodeledUse : mu*
|
||||
# 380| v0_19(void) = ExitFunction :
|
||||
# 380| v0_0(void) = EnterFunction :
|
||||
# 380| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 380| r0_2(glval<int>) = VariableAddress[x] :
|
||||
# 380| m0_3(int) = InitializeParameter[x] : r0_2
|
||||
# 380| r0_4(glval<int>) = VariableAddress[y] :
|
||||
# 380| m0_5(int) = InitializeParameter[y] : r0_4
|
||||
# 381| r0_6(glval<int>) = VariableAddress[#return] :
|
||||
# 381| r0_7(glval<unknown>) = FunctionAddress[VoidFunc] :
|
||||
# 381| v0_8(void) = Invoke : r0_7
|
||||
# 381| r0_9(glval<unknown>) = FunctionAddress[CallAdd] :
|
||||
# 381| r0_10(glval<int>) = VariableAddress[x] :
|
||||
# 381| r0_11(int) = Load : r0_10, m0_3
|
||||
# 381| r0_12(glval<int>) = VariableAddress[y] :
|
||||
# 381| r0_13(int) = Load : r0_12, m0_5
|
||||
# 381| r0_14(int) = Invoke : r0_9, r0_11, r0_13
|
||||
# 381| m0_15(int) = Store : r0_6, r0_14
|
||||
# 380| r0_16(glval<int>) = VariableAddress[#return] :
|
||||
# 380| v0_17(void) = ReturnValue : r0_16, m0_15
|
||||
# 380| v0_18(void) = UnmodeledUse : mu*
|
||||
# 380| v0_19(void) = ExitFunction :
|
||||
|
||||
# 384| Switch(int) -> void
|
||||
# 384| Block 0
|
||||
@@ -2113,13 +2113,13 @@ ir.cpp:
|
||||
# 492| v1_3(void) = ExitFunction :
|
||||
|
||||
# 493| Block 2
|
||||
# 493| r2_0(bool) = FunctionAddress[VoidFunc] :
|
||||
# 493| v2_1(void) = Invoke : r2_0
|
||||
# 493| r2_0(glval<unknown>) = FunctionAddress[VoidFunc] :
|
||||
# 493| v2_1(void) = Invoke : r2_0
|
||||
#-----| Goto -> Block 1
|
||||
|
||||
# 493| Block 3
|
||||
# 493| r3_0(bool) = FunctionAddress[VoidFunc] :
|
||||
# 493| v3_1(void) = Invoke : r3_0
|
||||
# 493| r3_0(glval<unknown>) = FunctionAddress[VoidFunc] :
|
||||
# 493| v3_1(void) = Invoke : r3_0
|
||||
#-----| Goto -> Block 1
|
||||
|
||||
# 496| Nullptr() -> void
|
||||
@@ -2519,7 +2519,7 @@ ir.cpp:
|
||||
# 584| Block 0
|
||||
# 584| v0_0(void) = EnterFunction :
|
||||
# 584| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 585| r0_2(bool) = FunctionAddress[VarArgFunction] :
|
||||
# 585| r0_2(glval<unknown>) = FunctionAddress[VarArgFunction] :
|
||||
# 585| r0_3(glval<char[6]>) = StringConstant["%d %s"] :
|
||||
# 585| r0_4(char *) = Convert : r0_3
|
||||
# 585| r0_5(int) = Constant[1] :
|
||||
@@ -2557,19 +2557,19 @@ ir.cpp:
|
||||
# 615| v0_0(void) = EnterFunction :
|
||||
# 615| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 616| r0_2(glval<String>) = VariableAddress[s1] :
|
||||
# 616| r0_3(bool) = FunctionAddress[String] :
|
||||
# 616| r0_3(glval<unknown>) = FunctionAddress[String] :
|
||||
# 616| v0_4(void) = Invoke : r0_3, this:r0_2
|
||||
# 617| r0_5(glval<String>) = VariableAddress[s2] :
|
||||
# 617| r0_6(bool) = FunctionAddress[String] :
|
||||
# 617| r0_6(glval<unknown>) = FunctionAddress[String] :
|
||||
# 617| r0_7(glval<char[6]>) = StringConstant["hello"] :
|
||||
# 617| r0_8(char *) = Convert : r0_7
|
||||
# 617| v0_9(void) = Invoke : r0_6, this:r0_5, r0_8
|
||||
# 618| r0_10(glval<String>) = VariableAddress[s3] :
|
||||
# 618| r0_11(bool) = FunctionAddress[ReturnObject] :
|
||||
# 618| r0_11(glval<unknown>) = FunctionAddress[ReturnObject] :
|
||||
# 618| r0_12(String) = Invoke : r0_11
|
||||
# 618| m0_13(String) = Store : r0_10, r0_12
|
||||
# 619| r0_14(glval<String>) = VariableAddress[s4] :
|
||||
# 619| r0_15(bool) = FunctionAddress[String] :
|
||||
# 619| r0_15(glval<unknown>) = FunctionAddress[String] :
|
||||
# 619| r0_16(glval<char[5]>) = StringConstant["test"] :
|
||||
# 619| r0_17(char *) = Convert : r0_16
|
||||
# 619| v0_18(void) = Invoke : r0_15, this:r0_14, r0_17
|
||||
@@ -2591,16 +2591,16 @@ ir.cpp:
|
||||
# 623| r0_8(glval<String &>) = VariableAddress[r] :
|
||||
# 623| r0_9(String &) = Load : r0_8, m0_3
|
||||
# 623| r0_10(glval<String>) = Convert : r0_9
|
||||
# 623| r0_11(bool) = FunctionAddress[c_str] :
|
||||
# 623| r0_11(glval<unknown>) = FunctionAddress[c_str] :
|
||||
# 623| r0_12(char *) = Invoke : r0_11, this:r0_10
|
||||
# 624| r0_13(glval<String *>) = VariableAddress[p] :
|
||||
# 624| r0_14(String *) = Load : r0_13, m0_5
|
||||
# 624| r0_15(String *) = Convert : r0_14
|
||||
# 624| r0_16(bool) = FunctionAddress[c_str] :
|
||||
# 624| r0_16(glval<unknown>) = FunctionAddress[c_str] :
|
||||
# 624| r0_17(char *) = Invoke : r0_16, this:r0_15
|
||||
# 625| r0_18(glval<String>) = VariableAddress[s] :
|
||||
# 625| r0_19(glval<String>) = Convert : r0_18
|
||||
# 625| r0_20(bool) = FunctionAddress[c_str] :
|
||||
# 625| r0_20(glval<unknown>) = FunctionAddress[c_str] :
|
||||
# 625| r0_21(char *) = Invoke : r0_20, this:r0_19
|
||||
# 626| v0_22(void) = NoOp :
|
||||
# 622| v0_23(void) = ReturnVoid :
|
||||
@@ -2695,25 +2695,25 @@ ir.cpp:
|
||||
|
||||
# 652| C::MethodCalls() -> void
|
||||
# 652| Block 0
|
||||
# 652| v0_0(void) = EnterFunction :
|
||||
# 652| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 652| r0_2(glval<C>) = InitializeThis :
|
||||
# 653| r0_3(C *) = CopyValue : r0_2
|
||||
# 653| r0_4(bool) = FunctionAddress[InstanceMemberFunction] :
|
||||
# 653| r0_5(int) = Constant[0] :
|
||||
# 653| r0_6(int) = Invoke : r0_4, this:r0_3, r0_5
|
||||
# 654| r0_7(C *) = CopyValue : r0_2
|
||||
# 654| r0_8(bool) = FunctionAddress[InstanceMemberFunction] :
|
||||
# 654| r0_9(int) = Constant[1] :
|
||||
# 654| r0_10(int) = Invoke : r0_8, this:r0_7, r0_9
|
||||
#-----| r0_11(C *) = CopyValue : r0_2
|
||||
# 655| r0_12(bool) = FunctionAddress[InstanceMemberFunction] :
|
||||
# 655| r0_13(int) = Constant[2] :
|
||||
# 655| r0_14(int) = Invoke : r0_12, this:r0_11, r0_13
|
||||
# 656| v0_15(void) = NoOp :
|
||||
# 652| v0_16(void) = ReturnVoid :
|
||||
# 652| v0_17(void) = UnmodeledUse : mu*
|
||||
# 652| v0_18(void) = ExitFunction :
|
||||
# 652| v0_0(void) = EnterFunction :
|
||||
# 652| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 652| r0_2(glval<C>) = InitializeThis :
|
||||
# 653| r0_3(C *) = CopyValue : r0_2
|
||||
# 653| r0_4(glval<unknown>) = FunctionAddress[InstanceMemberFunction] :
|
||||
# 653| r0_5(int) = Constant[0] :
|
||||
# 653| r0_6(int) = Invoke : r0_4, this:r0_3, r0_5
|
||||
# 654| r0_7(C *) = CopyValue : r0_2
|
||||
# 654| r0_8(glval<unknown>) = FunctionAddress[InstanceMemberFunction] :
|
||||
# 654| r0_9(int) = Constant[1] :
|
||||
# 654| r0_10(int) = Invoke : r0_8, this:r0_7, r0_9
|
||||
#-----| r0_11(C *) = CopyValue : r0_2
|
||||
# 655| r0_12(glval<unknown>) = FunctionAddress[InstanceMemberFunction] :
|
||||
# 655| r0_13(int) = Constant[2] :
|
||||
# 655| r0_14(int) = Invoke : r0_12, this:r0_11, r0_13
|
||||
# 656| v0_15(void) = NoOp :
|
||||
# 652| v0_16(void) = ReturnVoid :
|
||||
# 652| v0_17(void) = UnmodeledUse : mu*
|
||||
# 652| v0_18(void) = ExitFunction :
|
||||
|
||||
# 658| C::C() -> void
|
||||
# 658| Block 0
|
||||
@@ -2724,7 +2724,7 @@ ir.cpp:
|
||||
# 659| r0_4(int) = Constant[1] :
|
||||
# 659| mu0_5(int) = Store : r0_3, r0_4
|
||||
# 663| r0_6(glval<String>) = FieldAddress[m_b] : r0_2
|
||||
# 663| r0_7(bool) = FunctionAddress[String] :
|
||||
# 663| r0_7(glval<unknown>) = FunctionAddress[String] :
|
||||
# 663| v0_8(void) = Invoke : r0_7, this:r0_6
|
||||
# 660| r0_9(glval<char>) = FieldAddress[m_c] : r0_2
|
||||
# 660| r0_10(char) = Constant[3] :
|
||||
@@ -2733,7 +2733,7 @@ ir.cpp:
|
||||
# 661| r0_13(void *) = Constant[0] :
|
||||
# 661| mu0_14(void *) = Store : r0_12, r0_13
|
||||
# 662| r0_15(glval<String>) = FieldAddress[m_f] : r0_2
|
||||
# 662| r0_16(bool) = FunctionAddress[String] :
|
||||
# 662| r0_16(glval<unknown>) = FunctionAddress[String] :
|
||||
# 662| r0_17(glval<char[5]>) = StringConstant["test"] :
|
||||
# 662| r0_18(char *) = Convert : r0_17
|
||||
# 662| v0_19(void) = Invoke : r0_16, this:r0_15, r0_18
|
||||
@@ -2784,7 +2784,7 @@ ir.cpp:
|
||||
# 687| r0_9(int &) = Load : r0_8, m0_6
|
||||
# 687| m0_10(int &) = Store : r0_7, r0_9
|
||||
# 688| r0_11(glval<String &>) = VariableAddress[r3] :
|
||||
# 688| r0_12(bool) = FunctionAddress[ReturnReference] :
|
||||
# 688| r0_12(glval<unknown>) = FunctionAddress[ReturnReference] :
|
||||
# 688| r0_13(String &) = Invoke : r0_12
|
||||
# 688| r0_14(glval<String>) = Convert : r0_13
|
||||
# 688| m0_15(String &) = Store : r0_11, r0_14
|
||||
@@ -2879,24 +2879,24 @@ ir.cpp:
|
||||
|
||||
# 708| CallMin(int, int) -> int
|
||||
# 708| Block 0
|
||||
# 708| v0_0(void) = EnterFunction :
|
||||
# 708| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 708| r0_2(glval<int>) = VariableAddress[x] :
|
||||
# 708| m0_3(int) = InitializeParameter[x] : r0_2
|
||||
# 708| r0_4(glval<int>) = VariableAddress[y] :
|
||||
# 708| m0_5(int) = InitializeParameter[y] : r0_4
|
||||
# 709| r0_6(glval<int>) = VariableAddress[#return] :
|
||||
# 709| r0_7(bool) = FunctionAddress[min] :
|
||||
# 709| r0_8(glval<int>) = VariableAddress[x] :
|
||||
# 709| r0_9(int) = Load : r0_8, m0_3
|
||||
# 709| r0_10(glval<int>) = VariableAddress[y] :
|
||||
# 709| r0_11(int) = Load : r0_10, m0_5
|
||||
# 709| r0_12(int) = Invoke : r0_7, r0_9, r0_11
|
||||
# 709| m0_13(int) = Store : r0_6, r0_12
|
||||
# 708| r0_14(glval<int>) = VariableAddress[#return] :
|
||||
# 708| v0_15(void) = ReturnValue : r0_14, m0_13
|
||||
# 708| v0_16(void) = UnmodeledUse : mu*
|
||||
# 708| v0_17(void) = ExitFunction :
|
||||
# 708| v0_0(void) = EnterFunction :
|
||||
# 708| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 708| r0_2(glval<int>) = VariableAddress[x] :
|
||||
# 708| m0_3(int) = InitializeParameter[x] : r0_2
|
||||
# 708| r0_4(glval<int>) = VariableAddress[y] :
|
||||
# 708| m0_5(int) = InitializeParameter[y] : r0_4
|
||||
# 709| r0_6(glval<int>) = VariableAddress[#return] :
|
||||
# 709| r0_7(glval<unknown>) = FunctionAddress[min] :
|
||||
# 709| r0_8(glval<int>) = VariableAddress[x] :
|
||||
# 709| r0_9(int) = Load : r0_8, m0_3
|
||||
# 709| r0_10(glval<int>) = VariableAddress[y] :
|
||||
# 709| r0_11(int) = Load : r0_10, m0_5
|
||||
# 709| r0_12(int) = Invoke : r0_7, r0_9, r0_11
|
||||
# 709| m0_13(int) = Store : r0_6, r0_12
|
||||
# 708| r0_14(glval<int>) = VariableAddress[#return] :
|
||||
# 708| v0_15(void) = ReturnValue : r0_14, m0_13
|
||||
# 708| v0_16(void) = UnmodeledUse : mu*
|
||||
# 708| v0_17(void) = ExitFunction :
|
||||
|
||||
# 715| Outer<long>::Func<void *, char>(void *, char) -> long
|
||||
# 715| Block 0
|
||||
@@ -2916,19 +2916,19 @@ ir.cpp:
|
||||
|
||||
# 720| CallNestedTemplateFunc() -> double
|
||||
# 720| Block 0
|
||||
# 720| v0_0(void) = EnterFunction :
|
||||
# 720| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 721| r0_2(glval<double>) = VariableAddress[#return] :
|
||||
# 721| r0_3(bool) = FunctionAddress[Func] :
|
||||
# 721| r0_4(void *) = Constant[0] :
|
||||
# 721| r0_5(char) = Constant[111] :
|
||||
# 721| r0_6(long) = Invoke : r0_3, r0_4, r0_5
|
||||
# 721| r0_7(double) = Convert : r0_6
|
||||
# 721| m0_8(double) = Store : r0_2, r0_7
|
||||
# 720| r0_9(glval<double>) = VariableAddress[#return] :
|
||||
# 720| v0_10(void) = ReturnValue : r0_9, m0_8
|
||||
# 720| v0_11(void) = UnmodeledUse : mu*
|
||||
# 720| v0_12(void) = ExitFunction :
|
||||
# 720| v0_0(void) = EnterFunction :
|
||||
# 720| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 721| r0_2(glval<double>) = VariableAddress[#return] :
|
||||
# 721| r0_3(glval<unknown>) = FunctionAddress[Func] :
|
||||
# 721| r0_4(void *) = Constant[0] :
|
||||
# 721| r0_5(char) = Constant[111] :
|
||||
# 721| r0_6(long) = Invoke : r0_3, r0_4, r0_5
|
||||
# 721| r0_7(double) = Convert : r0_6
|
||||
# 721| m0_8(double) = Store : r0_2, r0_7
|
||||
# 720| r0_9(glval<double>) = VariableAddress[#return] :
|
||||
# 720| v0_10(void) = ReturnValue : r0_9, m0_8
|
||||
# 720| v0_11(void) = UnmodeledUse : mu*
|
||||
# 720| v0_12(void) = ExitFunction :
|
||||
|
||||
# 724| TryCatch(bool) -> void
|
||||
# 724| Block 0
|
||||
@@ -2989,7 +2989,7 @@ ir.cpp:
|
||||
|
||||
# 731| Block 7
|
||||
# 731| r7_0(glval<String>) = VariableAddress[#throw731:19] :
|
||||
# 731| r7_1(bool) = FunctionAddress[String] :
|
||||
# 731| r7_1(glval<unknown>) = FunctionAddress[String] :
|
||||
# 731| r7_2(glval<char[14]>) = StringConstant["String object"] :
|
||||
# 731| r7_3(char *) = Convert : r7_2
|
||||
# 731| v7_4(void) = Invoke : r7_1, this:r7_0, r7_3
|
||||
@@ -3008,14 +3008,14 @@ ir.cpp:
|
||||
#-----| Goto -> Block 10
|
||||
|
||||
# 735| Block 10
|
||||
# 735| r10_0(glval<char *>) = VariableAddress[s] :
|
||||
# 735| m10_1(char *) = InitializeParameter[s] : r10_0
|
||||
# 736| r10_2(glval<String>) = VariableAddress[#throw736:5] :
|
||||
# 736| r10_3(bool) = FunctionAddress[String] :
|
||||
# 736| r10_4(glval<char *>) = VariableAddress[s] :
|
||||
# 736| r10_5(char *) = Load : r10_4, m10_1
|
||||
# 736| v10_6(void) = Invoke : r10_3, this:r10_2, r10_5
|
||||
# 736| v10_7(void) = ThrowValue : r10_2, mu0_1
|
||||
# 735| r10_0(glval<char *>) = VariableAddress[s] :
|
||||
# 735| m10_1(char *) = InitializeParameter[s] : r10_0
|
||||
# 736| r10_2(glval<String>) = VariableAddress[#throw736:5] :
|
||||
# 736| r10_3(glval<unknown>) = FunctionAddress[String] :
|
||||
# 736| r10_4(glval<char *>) = VariableAddress[s] :
|
||||
# 736| r10_5(char *) = Load : r10_4, m10_1
|
||||
# 736| v10_6(void) = Invoke : r10_3, this:r10_2, r10_5
|
||||
# 736| v10_7(void) = ThrowValue : r10_2, mu0_1
|
||||
#-----| Exception -> Block 2
|
||||
|
||||
# 738| Block 11
|
||||
@@ -3041,18 +3041,18 @@ ir.cpp:
|
||||
|
||||
# 745| Base::Base(const Base &) -> void
|
||||
# 745| Block 0
|
||||
# 745| v0_0(void) = EnterFunction :
|
||||
# 745| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 745| r0_2(glval<Base>) = InitializeThis :
|
||||
#-----| r0_3(glval<Base &>) = VariableAddress[p#0] :
|
||||
#-----| m0_4(Base &) = InitializeParameter[p#0] : r0_3
|
||||
# 745| r0_5(glval<String>) = FieldAddress[base_s] : r0_2
|
||||
# 745| r0_6(bool) = FunctionAddress[String] :
|
||||
# 745| v0_7(void) = Invoke : r0_6, this:r0_5
|
||||
# 745| v0_8(void) = NoOp :
|
||||
# 745| v0_9(void) = ReturnVoid :
|
||||
# 745| v0_10(void) = UnmodeledUse : mu*
|
||||
# 745| v0_11(void) = ExitFunction :
|
||||
# 745| v0_0(void) = EnterFunction :
|
||||
# 745| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 745| r0_2(glval<Base>) = InitializeThis :
|
||||
#-----| r0_3(glval<Base &>) = VariableAddress[p#0] :
|
||||
#-----| m0_4(Base &) = InitializeParameter[p#0] : r0_3
|
||||
# 745| r0_5(glval<String>) = FieldAddress[base_s] : r0_2
|
||||
# 745| r0_6(glval<unknown>) = FunctionAddress[String] :
|
||||
# 745| v0_7(void) = Invoke : r0_6, this:r0_5
|
||||
# 745| v0_8(void) = NoOp :
|
||||
# 745| v0_9(void) = ReturnVoid :
|
||||
# 745| v0_10(void) = UnmodeledUse : mu*
|
||||
# 745| v0_11(void) = ExitFunction :
|
||||
|
||||
# 745| Base::operator=(const Base &) -> Base &
|
||||
# 745| Block 0
|
||||
@@ -3063,7 +3063,7 @@ ir.cpp:
|
||||
#-----| m0_4(Base &) = InitializeParameter[p#0] : r0_3
|
||||
#-----| r0_5(Base *) = CopyValue : r0_2
|
||||
#-----| r0_6(glval<String>) = FieldAddress[base_s] : r0_5
|
||||
# 745| r0_7(bool) = FunctionAddress[operator=] :
|
||||
# 745| r0_7(glval<unknown>) = FunctionAddress[operator=] :
|
||||
#-----| r0_8(glval<Base &>) = VariableAddress[p#0] :
|
||||
#-----| r0_9(Base &) = Load : r0_8, m0_4
|
||||
#-----| r0_10(glval<String>) = FieldAddress[base_s] : r0_9
|
||||
@@ -3078,29 +3078,29 @@ ir.cpp:
|
||||
|
||||
# 748| Base::Base() -> void
|
||||
# 748| Block 0
|
||||
# 748| v0_0(void) = EnterFunction :
|
||||
# 748| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 748| r0_2(glval<Base>) = InitializeThis :
|
||||
# 748| r0_3(glval<String>) = FieldAddress[base_s] : r0_2
|
||||
# 748| r0_4(bool) = FunctionAddress[String] :
|
||||
# 748| v0_5(void) = Invoke : r0_4, this:r0_3
|
||||
# 749| v0_6(void) = NoOp :
|
||||
# 748| v0_7(void) = ReturnVoid :
|
||||
# 748| v0_8(void) = UnmodeledUse : mu*
|
||||
# 748| v0_9(void) = ExitFunction :
|
||||
# 748| v0_0(void) = EnterFunction :
|
||||
# 748| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 748| r0_2(glval<Base>) = InitializeThis :
|
||||
# 748| r0_3(glval<String>) = FieldAddress[base_s] : r0_2
|
||||
# 748| r0_4(glval<unknown>) = FunctionAddress[String] :
|
||||
# 748| v0_5(void) = Invoke : r0_4, this:r0_3
|
||||
# 749| v0_6(void) = NoOp :
|
||||
# 748| v0_7(void) = ReturnVoid :
|
||||
# 748| v0_8(void) = UnmodeledUse : mu*
|
||||
# 748| v0_9(void) = ExitFunction :
|
||||
|
||||
# 750| Base::~Base() -> void
|
||||
# 750| Block 0
|
||||
# 750| v0_0(void) = EnterFunction :
|
||||
# 750| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 750| r0_2(glval<Base>) = InitializeThis :
|
||||
# 751| v0_3(void) = NoOp :
|
||||
# 751| r0_4(glval<String>) = FieldAddress[base_s] : r0_2
|
||||
# 751| r0_5(bool) = FunctionAddress[~String] :
|
||||
# 751| v0_6(void) = Invoke : r0_5, this:r0_4
|
||||
# 750| v0_7(void) = ReturnVoid :
|
||||
# 750| v0_8(void) = UnmodeledUse : mu*
|
||||
# 750| v0_9(void) = ExitFunction :
|
||||
# 750| v0_0(void) = EnterFunction :
|
||||
# 750| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 750| r0_2(glval<Base>) = InitializeThis :
|
||||
# 751| v0_3(void) = NoOp :
|
||||
# 751| r0_4(glval<String>) = FieldAddress[base_s] : r0_2
|
||||
# 751| r0_5(glval<unknown>) = FunctionAddress[~String] :
|
||||
# 751| v0_6(void) = Invoke : r0_5, this:r0_4
|
||||
# 750| v0_7(void) = ReturnVoid :
|
||||
# 750| v0_8(void) = UnmodeledUse : mu*
|
||||
# 750| v0_9(void) = ExitFunction :
|
||||
|
||||
# 754| Middle::operator=(const Middle &) -> Middle &
|
||||
# 754| Block 0
|
||||
@@ -3111,14 +3111,14 @@ ir.cpp:
|
||||
#-----| m0_4(Middle &) = InitializeParameter[p#0] : r0_3
|
||||
#-----| r0_5(Middle *) = CopyValue : r0_2
|
||||
#-----| r0_6(Base *) = ConvertToBase[Middle : Base] : r0_5
|
||||
# 754| r0_7(bool) = FunctionAddress[operator=] :
|
||||
# 754| r0_7(glval<unknown>) = FunctionAddress[operator=] :
|
||||
#-----| r0_8(glval<Middle &>) = VariableAddress[p#0] :
|
||||
#-----| r0_9(Middle &) = Load : r0_8, m0_4
|
||||
#-----| r0_10(Base *) = ConvertToBase[Middle : Base] : r0_9
|
||||
# 754| r0_11(Base &) = Invoke : r0_7, this:r0_6, r0_10
|
||||
#-----| r0_12(Middle *) = CopyValue : r0_2
|
||||
#-----| r0_13(glval<String>) = FieldAddress[middle_s] : r0_12
|
||||
# 754| r0_14(bool) = FunctionAddress[operator=] :
|
||||
# 754| r0_14(glval<unknown>) = FunctionAddress[operator=] :
|
||||
#-----| r0_15(glval<Middle &>) = VariableAddress[p#0] :
|
||||
#-----| r0_16(Middle &) = Load : r0_15, m0_4
|
||||
#-----| r0_17(glval<String>) = FieldAddress[middle_s] : r0_16
|
||||
@@ -3133,35 +3133,35 @@ ir.cpp:
|
||||
|
||||
# 757| Middle::Middle() -> void
|
||||
# 757| Block 0
|
||||
# 757| v0_0(void) = EnterFunction :
|
||||
# 757| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 757| r0_2(glval<Middle>) = InitializeThis :
|
||||
# 757| r0_3(glval<Base>) = ConvertToBase[Middle : Base] : r0_2
|
||||
# 757| r0_4(bool) = FunctionAddress[Base] :
|
||||
# 757| v0_5(void) = Invoke : r0_4, this:r0_3
|
||||
# 757| r0_6(glval<String>) = FieldAddress[middle_s] : r0_2
|
||||
# 757| r0_7(bool) = FunctionAddress[String] :
|
||||
# 757| v0_8(void) = Invoke : r0_7, this:r0_6
|
||||
# 758| v0_9(void) = NoOp :
|
||||
# 757| v0_10(void) = ReturnVoid :
|
||||
# 757| v0_11(void) = UnmodeledUse : mu*
|
||||
# 757| v0_12(void) = ExitFunction :
|
||||
# 757| v0_0(void) = EnterFunction :
|
||||
# 757| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 757| r0_2(glval<Middle>) = InitializeThis :
|
||||
# 757| r0_3(glval<Base>) = ConvertToBase[Middle : Base] : r0_2
|
||||
# 757| r0_4(glval<unknown>) = FunctionAddress[Base] :
|
||||
# 757| v0_5(void) = Invoke : r0_4, this:r0_3
|
||||
# 757| r0_6(glval<String>) = FieldAddress[middle_s] : r0_2
|
||||
# 757| r0_7(glval<unknown>) = FunctionAddress[String] :
|
||||
# 757| v0_8(void) = Invoke : r0_7, this:r0_6
|
||||
# 758| v0_9(void) = NoOp :
|
||||
# 757| v0_10(void) = ReturnVoid :
|
||||
# 757| v0_11(void) = UnmodeledUse : mu*
|
||||
# 757| v0_12(void) = ExitFunction :
|
||||
|
||||
# 759| Middle::~Middle() -> void
|
||||
# 759| Block 0
|
||||
# 759| v0_0(void) = EnterFunction :
|
||||
# 759| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 759| r0_2(glval<Middle>) = InitializeThis :
|
||||
# 760| v0_3(void) = NoOp :
|
||||
# 760| r0_4(glval<String>) = FieldAddress[middle_s] : r0_2
|
||||
# 760| r0_5(bool) = FunctionAddress[~String] :
|
||||
# 760| v0_6(void) = Invoke : r0_5, this:r0_4
|
||||
# 760| r0_7(glval<Base>) = ConvertToBase[Middle : Base] : r0_2
|
||||
# 760| r0_8(bool) = FunctionAddress[~Base] :
|
||||
# 760| v0_9(void) = Invoke : r0_8, this:r0_7
|
||||
# 759| v0_10(void) = ReturnVoid :
|
||||
# 759| v0_11(void) = UnmodeledUse : mu*
|
||||
# 759| v0_12(void) = ExitFunction :
|
||||
# 759| v0_0(void) = EnterFunction :
|
||||
# 759| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 759| r0_2(glval<Middle>) = InitializeThis :
|
||||
# 760| v0_3(void) = NoOp :
|
||||
# 760| r0_4(glval<String>) = FieldAddress[middle_s] : r0_2
|
||||
# 760| r0_5(glval<unknown>) = FunctionAddress[~String] :
|
||||
# 760| v0_6(void) = Invoke : r0_5, this:r0_4
|
||||
# 760| r0_7(glval<Base>) = ConvertToBase[Middle : Base] : r0_2
|
||||
# 760| r0_8(glval<unknown>) = FunctionAddress[~Base] :
|
||||
# 760| v0_9(void) = Invoke : r0_8, this:r0_7
|
||||
# 759| v0_10(void) = ReturnVoid :
|
||||
# 759| v0_11(void) = UnmodeledUse : mu*
|
||||
# 759| v0_12(void) = ExitFunction :
|
||||
|
||||
# 763| Derived::operator=(const Derived &) -> Derived &
|
||||
# 763| Block 0
|
||||
@@ -3172,14 +3172,14 @@ ir.cpp:
|
||||
#-----| m0_4(Derived &) = InitializeParameter[p#0] : r0_3
|
||||
#-----| r0_5(Derived *) = CopyValue : r0_2
|
||||
#-----| r0_6(Middle *) = ConvertToBase[Derived : Middle] : r0_5
|
||||
# 763| r0_7(bool) = FunctionAddress[operator=] :
|
||||
# 763| r0_7(glval<unknown>) = FunctionAddress[operator=] :
|
||||
#-----| r0_8(glval<Derived &>) = VariableAddress[p#0] :
|
||||
#-----| r0_9(Derived &) = Load : r0_8, m0_4
|
||||
#-----| r0_10(Middle *) = ConvertToBase[Derived : Middle] : r0_9
|
||||
# 763| r0_11(Middle &) = Invoke : r0_7, this:r0_6, r0_10
|
||||
#-----| r0_12(Derived *) = CopyValue : r0_2
|
||||
#-----| r0_13(glval<String>) = FieldAddress[derived_s] : r0_12
|
||||
# 763| r0_14(bool) = FunctionAddress[operator=] :
|
||||
# 763| r0_14(glval<unknown>) = FunctionAddress[operator=] :
|
||||
#-----| r0_15(glval<Derived &>) = VariableAddress[p#0] :
|
||||
#-----| r0_16(Derived &) = Load : r0_15, m0_4
|
||||
#-----| r0_17(glval<String>) = FieldAddress[derived_s] : r0_16
|
||||
@@ -3198,10 +3198,10 @@ ir.cpp:
|
||||
# 766| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 766| r0_2(glval<Derived>) = InitializeThis :
|
||||
# 766| r0_3(glval<Middle>) = ConvertToBase[Derived : Middle] : r0_2
|
||||
# 766| r0_4(bool) = FunctionAddress[Middle] :
|
||||
# 766| r0_4(glval<unknown>) = FunctionAddress[Middle] :
|
||||
# 766| v0_5(void) = Invoke : r0_4, this:r0_3
|
||||
# 766| r0_6(glval<String>) = FieldAddress[derived_s] : r0_2
|
||||
# 766| r0_7(bool) = FunctionAddress[String] :
|
||||
# 766| r0_7(glval<unknown>) = FunctionAddress[String] :
|
||||
# 766| v0_8(void) = Invoke : r0_7, this:r0_6
|
||||
# 767| v0_9(void) = NoOp :
|
||||
# 766| v0_10(void) = ReturnVoid :
|
||||
@@ -3215,10 +3215,10 @@ ir.cpp:
|
||||
# 768| r0_2(glval<Derived>) = InitializeThis :
|
||||
# 769| v0_3(void) = NoOp :
|
||||
# 769| r0_4(glval<String>) = FieldAddress[derived_s] : r0_2
|
||||
# 769| r0_5(bool) = FunctionAddress[~String] :
|
||||
# 769| r0_5(glval<unknown>) = FunctionAddress[~String] :
|
||||
# 769| v0_6(void) = Invoke : r0_5, this:r0_4
|
||||
# 769| r0_7(glval<Middle>) = ConvertToBase[Derived : Middle] : r0_2
|
||||
# 769| r0_8(bool) = FunctionAddress[~Middle] :
|
||||
# 769| r0_8(glval<unknown>) = FunctionAddress[~Middle] :
|
||||
# 769| v0_9(void) = Invoke : r0_8, this:r0_7
|
||||
# 768| v0_10(void) = ReturnVoid :
|
||||
# 768| v0_11(void) = UnmodeledUse : mu*
|
||||
@@ -3230,10 +3230,10 @@ ir.cpp:
|
||||
# 775| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 775| r0_2(glval<MiddleVB1>) = InitializeThis :
|
||||
# 775| r0_3(glval<Base>) = ConvertToBase[MiddleVB1 : Base] : r0_2
|
||||
# 775| r0_4(bool) = FunctionAddress[Base] :
|
||||
# 775| r0_4(glval<unknown>) = FunctionAddress[Base] :
|
||||
# 775| v0_5(void) = Invoke : r0_4, this:r0_3
|
||||
# 775| r0_6(glval<String>) = FieldAddress[middlevb1_s] : r0_2
|
||||
# 775| r0_7(bool) = FunctionAddress[String] :
|
||||
# 775| r0_7(glval<unknown>) = FunctionAddress[String] :
|
||||
# 775| v0_8(void) = Invoke : r0_7, this:r0_6
|
||||
# 776| v0_9(void) = NoOp :
|
||||
# 775| v0_10(void) = ReturnVoid :
|
||||
@@ -3247,10 +3247,10 @@ ir.cpp:
|
||||
# 777| r0_2(glval<MiddleVB1>) = InitializeThis :
|
||||
# 778| v0_3(void) = NoOp :
|
||||
# 778| r0_4(glval<String>) = FieldAddress[middlevb1_s] : r0_2
|
||||
# 778| r0_5(bool) = FunctionAddress[~String] :
|
||||
# 778| r0_5(glval<unknown>) = FunctionAddress[~String] :
|
||||
# 778| v0_6(void) = Invoke : r0_5, this:r0_4
|
||||
# 778| r0_7(glval<Base>) = ConvertToBase[MiddleVB1 : Base] : r0_2
|
||||
# 778| r0_8(bool) = FunctionAddress[~Base] :
|
||||
# 778| r0_8(glval<unknown>) = FunctionAddress[~Base] :
|
||||
# 778| v0_9(void) = Invoke : r0_8, this:r0_7
|
||||
# 777| v0_10(void) = ReturnVoid :
|
||||
# 777| v0_11(void) = UnmodeledUse : mu*
|
||||
@@ -3262,10 +3262,10 @@ ir.cpp:
|
||||
# 784| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 784| r0_2(glval<MiddleVB2>) = InitializeThis :
|
||||
# 784| r0_3(glval<Base>) = ConvertToBase[MiddleVB2 : Base] : r0_2
|
||||
# 784| r0_4(bool) = FunctionAddress[Base] :
|
||||
# 784| r0_4(glval<unknown>) = FunctionAddress[Base] :
|
||||
# 784| v0_5(void) = Invoke : r0_4, this:r0_3
|
||||
# 784| r0_6(glval<String>) = FieldAddress[middlevb2_s] : r0_2
|
||||
# 784| r0_7(bool) = FunctionAddress[String] :
|
||||
# 784| r0_7(glval<unknown>) = FunctionAddress[String] :
|
||||
# 784| v0_8(void) = Invoke : r0_7, this:r0_6
|
||||
# 785| v0_9(void) = NoOp :
|
||||
# 784| v0_10(void) = ReturnVoid :
|
||||
@@ -3279,10 +3279,10 @@ ir.cpp:
|
||||
# 786| r0_2(glval<MiddleVB2>) = InitializeThis :
|
||||
# 787| v0_3(void) = NoOp :
|
||||
# 787| r0_4(glval<String>) = FieldAddress[middlevb2_s] : r0_2
|
||||
# 787| r0_5(bool) = FunctionAddress[~String] :
|
||||
# 787| r0_5(glval<unknown>) = FunctionAddress[~String] :
|
||||
# 787| v0_6(void) = Invoke : r0_5, this:r0_4
|
||||
# 787| r0_7(glval<Base>) = ConvertToBase[MiddleVB2 : Base] : r0_2
|
||||
# 787| r0_8(bool) = FunctionAddress[~Base] :
|
||||
# 787| r0_8(glval<unknown>) = FunctionAddress[~Base] :
|
||||
# 787| v0_9(void) = Invoke : r0_8, this:r0_7
|
||||
# 786| v0_10(void) = ReturnVoid :
|
||||
# 786| v0_11(void) = UnmodeledUse : mu*
|
||||
@@ -3294,16 +3294,16 @@ ir.cpp:
|
||||
# 793| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 793| r0_2(glval<DerivedVB>) = InitializeThis :
|
||||
# 793| r0_3(glval<Base>) = ConvertToBase[DerivedVB : Base] : r0_2
|
||||
# 793| r0_4(bool) = FunctionAddress[Base] :
|
||||
# 793| r0_4(glval<unknown>) = FunctionAddress[Base] :
|
||||
# 793| v0_5(void) = Invoke : r0_4, this:r0_3
|
||||
# 793| r0_6(glval<MiddleVB1>) = ConvertToBase[DerivedVB : MiddleVB1] : r0_2
|
||||
# 793| r0_7(bool) = FunctionAddress[MiddleVB1] :
|
||||
# 793| r0_7(glval<unknown>) = FunctionAddress[MiddleVB1] :
|
||||
# 793| v0_8(void) = Invoke : r0_7, this:r0_6
|
||||
# 793| r0_9(glval<MiddleVB2>) = ConvertToBase[DerivedVB : MiddleVB2] : r0_2
|
||||
# 793| r0_10(bool) = FunctionAddress[MiddleVB2] :
|
||||
# 793| r0_10(glval<unknown>) = FunctionAddress[MiddleVB2] :
|
||||
# 793| v0_11(void) = Invoke : r0_10, this:r0_9
|
||||
# 793| r0_12(glval<String>) = FieldAddress[derivedvb_s] : r0_2
|
||||
# 793| r0_13(bool) = FunctionAddress[String] :
|
||||
# 793| r0_13(glval<unknown>) = FunctionAddress[String] :
|
||||
# 793| v0_14(void) = Invoke : r0_13, this:r0_12
|
||||
# 794| v0_15(void) = NoOp :
|
||||
# 793| v0_16(void) = ReturnVoid :
|
||||
@@ -3317,16 +3317,16 @@ ir.cpp:
|
||||
# 795| r0_2(glval<DerivedVB>) = InitializeThis :
|
||||
# 796| v0_3(void) = NoOp :
|
||||
# 796| r0_4(glval<String>) = FieldAddress[derivedvb_s] : r0_2
|
||||
# 796| r0_5(bool) = FunctionAddress[~String] :
|
||||
# 796| r0_5(glval<unknown>) = FunctionAddress[~String] :
|
||||
# 796| v0_6(void) = Invoke : r0_5, this:r0_4
|
||||
# 796| r0_7(glval<MiddleVB2>) = ConvertToBase[DerivedVB : MiddleVB2] : r0_2
|
||||
# 796| r0_8(bool) = FunctionAddress[~MiddleVB2] :
|
||||
# 796| r0_8(glval<unknown>) = FunctionAddress[~MiddleVB2] :
|
||||
# 796| v0_9(void) = Invoke : r0_8, this:r0_7
|
||||
# 796| r0_10(glval<MiddleVB1>) = ConvertToBase[DerivedVB : MiddleVB1] : r0_2
|
||||
# 796| r0_11(bool) = FunctionAddress[~MiddleVB1] :
|
||||
# 796| r0_11(glval<unknown>) = FunctionAddress[~MiddleVB1] :
|
||||
# 796| v0_12(void) = Invoke : r0_11, this:r0_10
|
||||
# 796| r0_13(glval<Base>) = ConvertToBase[DerivedVB : Base] : r0_2
|
||||
# 796| r0_14(bool) = FunctionAddress[~Base] :
|
||||
# 796| r0_14(glval<unknown>) = FunctionAddress[~Base] :
|
||||
# 796| v0_15(void) = Invoke : r0_14, this:r0_13
|
||||
# 795| v0_16(void) = ReturnVoid :
|
||||
# 795| v0_17(void) = UnmodeledUse : mu*
|
||||
@@ -3337,13 +3337,13 @@ ir.cpp:
|
||||
# 799| v0_0(void) = EnterFunction :
|
||||
# 799| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 800| r0_2(glval<Base>) = VariableAddress[b] :
|
||||
# 800| r0_3(bool) = FunctionAddress[Base] :
|
||||
# 800| r0_3(glval<unknown>) = FunctionAddress[Base] :
|
||||
# 800| v0_4(void) = Invoke : r0_3, this:r0_2
|
||||
# 801| r0_5(glval<Middle>) = VariableAddress[m] :
|
||||
# 801| r0_6(bool) = FunctionAddress[Middle] :
|
||||
# 801| r0_6(glval<unknown>) = FunctionAddress[Middle] :
|
||||
# 801| v0_7(void) = Invoke : r0_6, this:r0_5
|
||||
# 802| r0_8(glval<Derived>) = VariableAddress[d] :
|
||||
# 802| r0_9(bool) = FunctionAddress[Derived] :
|
||||
# 802| r0_9(glval<unknown>) = FunctionAddress[Derived] :
|
||||
# 802| v0_10(void) = Invoke : r0_9, this:r0_8
|
||||
# 804| r0_11(glval<Base *>) = VariableAddress[pb] :
|
||||
# 804| r0_12(glval<Base>) = VariableAddress[b] :
|
||||
@@ -3355,21 +3355,21 @@ ir.cpp:
|
||||
# 806| r0_18(glval<Derived>) = VariableAddress[d] :
|
||||
# 806| m0_19(Derived *) = Store : r0_17, r0_18
|
||||
# 808| r0_20(glval<Base>) = VariableAddress[b] :
|
||||
# 808| r0_21(bool) = FunctionAddress[operator=] :
|
||||
# 808| r0_21(glval<unknown>) = FunctionAddress[operator=] :
|
||||
# 808| r0_22(glval<Middle>) = VariableAddress[m] :
|
||||
# 808| r0_23(glval<Base>) = ConvertToBase[Middle : Base] : r0_22
|
||||
# 808| r0_24(Base &) = Invoke : r0_21, this:r0_20, r0_23
|
||||
# 809| r0_25(glval<Base>) = VariableAddress[b] :
|
||||
# 809| r0_26(bool) = FunctionAddress[operator=] :
|
||||
# 809| r0_27(bool) = FunctionAddress[Base] :
|
||||
# 809| r0_26(glval<unknown>) = FunctionAddress[operator=] :
|
||||
# 809| r0_27(glval<unknown>) = FunctionAddress[Base] :
|
||||
# 809| r0_28(glval<Middle>) = VariableAddress[m] :
|
||||
# 809| r0_29(glval<Base>) = ConvertToBase[Middle : Base] : r0_28
|
||||
# 809| v0_30(void) = Invoke : r0_27, r0_29
|
||||
# 809| r0_31(Base) = Convert : v0_30
|
||||
# 809| r0_32(Base &) = Invoke : r0_26, this:r0_25, r0_31
|
||||
# 810| r0_33(glval<Base>) = VariableAddress[b] :
|
||||
# 810| r0_34(bool) = FunctionAddress[operator=] :
|
||||
# 810| r0_35(bool) = FunctionAddress[Base] :
|
||||
# 810| r0_34(glval<unknown>) = FunctionAddress[operator=] :
|
||||
# 810| r0_35(glval<unknown>) = FunctionAddress[Base] :
|
||||
# 810| r0_36(glval<Middle>) = VariableAddress[m] :
|
||||
# 810| r0_37(glval<Base>) = ConvertToBase[Middle : Base] : r0_36
|
||||
# 810| v0_38(void) = Invoke : r0_35, r0_37
|
||||
@@ -3396,13 +3396,13 @@ ir.cpp:
|
||||
# 814| r0_59(glval<Base *>) = VariableAddress[pb] :
|
||||
# 814| m0_60(Base *) = Store : r0_59, r0_58
|
||||
# 816| r0_61(glval<Middle>) = VariableAddress[m] :
|
||||
# 816| r0_62(bool) = FunctionAddress[operator=] :
|
||||
# 816| r0_62(glval<unknown>) = FunctionAddress[operator=] :
|
||||
# 816| r0_63(glval<Base>) = VariableAddress[b] :
|
||||
# 816| r0_64(glval<Middle>) = ConvertToDerived[Middle : Base] : r0_63
|
||||
# 816| r0_65(glval<Middle>) = Convert : r0_64
|
||||
# 816| r0_66(Middle &) = Invoke : r0_62, this:r0_61, r0_65
|
||||
# 817| r0_67(glval<Middle>) = VariableAddress[m] :
|
||||
# 817| r0_68(bool) = FunctionAddress[operator=] :
|
||||
# 817| r0_68(glval<unknown>) = FunctionAddress[operator=] :
|
||||
# 817| r0_69(glval<Base>) = VariableAddress[b] :
|
||||
# 817| r0_70(glval<Middle>) = ConvertToDerived[Middle : Base] : r0_69
|
||||
# 817| r0_71(glval<Middle>) = Convert : r0_70
|
||||
@@ -3423,14 +3423,14 @@ ir.cpp:
|
||||
# 820| r0_86(glval<Middle *>) = VariableAddress[pm] :
|
||||
# 820| m0_87(Middle *) = Store : r0_86, r0_85
|
||||
# 822| r0_88(glval<Base>) = VariableAddress[b] :
|
||||
# 822| r0_89(bool) = FunctionAddress[operator=] :
|
||||
# 822| r0_89(glval<unknown>) = FunctionAddress[operator=] :
|
||||
# 822| r0_90(glval<Derived>) = VariableAddress[d] :
|
||||
# 822| r0_91(glval<Middle>) = ConvertToBase[Derived : Middle] : r0_90
|
||||
# 822| r0_92(glval<Base>) = ConvertToBase[Middle : Base] : r0_91
|
||||
# 822| r0_93(Base &) = Invoke : r0_89, this:r0_88, r0_92
|
||||
# 823| r0_94(glval<Base>) = VariableAddress[b] :
|
||||
# 823| r0_95(bool) = FunctionAddress[operator=] :
|
||||
# 823| r0_96(bool) = FunctionAddress[Base] :
|
||||
# 823| r0_95(glval<unknown>) = FunctionAddress[operator=] :
|
||||
# 823| r0_96(glval<unknown>) = FunctionAddress[Base] :
|
||||
# 823| r0_97(glval<Derived>) = VariableAddress[d] :
|
||||
# 823| r0_98(glval<Middle>) = ConvertToBase[Derived : Middle] : r0_97
|
||||
# 823| r0_99(glval<Base>) = ConvertToBase[Middle : Base] : r0_98
|
||||
@@ -3438,8 +3438,8 @@ ir.cpp:
|
||||
# 823| r0_101(Base) = Convert : v0_100
|
||||
# 823| r0_102(Base &) = Invoke : r0_95, this:r0_94, r0_101
|
||||
# 824| r0_103(glval<Base>) = VariableAddress[b] :
|
||||
# 824| r0_104(bool) = FunctionAddress[operator=] :
|
||||
# 824| r0_105(bool) = FunctionAddress[Base] :
|
||||
# 824| r0_104(glval<unknown>) = FunctionAddress[operator=] :
|
||||
# 824| r0_105(glval<unknown>) = FunctionAddress[Base] :
|
||||
# 824| r0_106(glval<Derived>) = VariableAddress[d] :
|
||||
# 824| r0_107(glval<Middle>) = ConvertToBase[Derived : Middle] : r0_106
|
||||
# 824| r0_108(glval<Base>) = ConvertToBase[Middle : Base] : r0_107
|
||||
@@ -3470,14 +3470,14 @@ ir.cpp:
|
||||
# 828| r0_133(glval<Base *>) = VariableAddress[pb] :
|
||||
# 828| m0_134(Base *) = Store : r0_133, r0_132
|
||||
# 830| r0_135(glval<Derived>) = VariableAddress[d] :
|
||||
# 830| r0_136(bool) = FunctionAddress[operator=] :
|
||||
# 830| r0_136(glval<unknown>) = FunctionAddress[operator=] :
|
||||
# 830| r0_137(glval<Base>) = VariableAddress[b] :
|
||||
# 830| r0_138(glval<Middle>) = ConvertToDerived[Middle : Base] : r0_137
|
||||
# 830| r0_139(glval<Derived>) = ConvertToDerived[Derived : Middle] : r0_138
|
||||
# 830| r0_140(glval<Derived>) = Convert : r0_139
|
||||
# 830| r0_141(Derived &) = Invoke : r0_136, this:r0_135, r0_140
|
||||
# 831| r0_142(glval<Derived>) = VariableAddress[d] :
|
||||
# 831| r0_143(bool) = FunctionAddress[operator=] :
|
||||
# 831| r0_143(glval<unknown>) = FunctionAddress[operator=] :
|
||||
# 831| r0_144(glval<Base>) = VariableAddress[b] :
|
||||
# 831| r0_145(glval<Middle>) = ConvertToDerived[Middle : Base] : r0_144
|
||||
# 831| r0_146(glval<Derived>) = ConvertToDerived[Derived : Middle] : r0_145
|
||||
@@ -3537,7 +3537,7 @@ ir.cpp:
|
||||
# 846| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 846| r0_2(glval<PolymorphicDerived>) = InitializeThis :
|
||||
# 846| r0_3(glval<PolymorphicBase>) = ConvertToBase[PolymorphicDerived : PolymorphicBase] : r0_2
|
||||
# 846| r0_4(bool) = FunctionAddress[PolymorphicBase] :
|
||||
# 846| r0_4(glval<unknown>) = FunctionAddress[PolymorphicBase] :
|
||||
# 846| v0_5(void) = Invoke : r0_4, this:r0_3
|
||||
# 846| v0_6(void) = NoOp :
|
||||
# 846| v0_7(void) = ReturnVoid :
|
||||
@@ -3551,7 +3551,7 @@ ir.cpp:
|
||||
# 846| r0_2(glval<PolymorphicDerived>) = InitializeThis :
|
||||
#-----| v0_3(void) = NoOp :
|
||||
# 846| r0_4(glval<PolymorphicBase>) = ConvertToBase[PolymorphicDerived : PolymorphicBase] : r0_2
|
||||
# 846| r0_5(bool) = FunctionAddress[~PolymorphicBase] :
|
||||
# 846| r0_5(glval<unknown>) = FunctionAddress[~PolymorphicBase] :
|
||||
# 846| v0_6(void) = Invoke : r0_5, this:r0_4
|
||||
# 846| v0_7(void) = ReturnVoid :
|
||||
# 846| v0_8(void) = UnmodeledUse : mu*
|
||||
@@ -3562,10 +3562,10 @@ ir.cpp:
|
||||
# 849| v0_0(void) = EnterFunction :
|
||||
# 849| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 850| r0_2(glval<PolymorphicBase>) = VariableAddress[b] :
|
||||
#-----| r0_3(bool) = FunctionAddress[PolymorphicBase] :
|
||||
#-----| r0_3(glval<unknown>) = FunctionAddress[PolymorphicBase] :
|
||||
#-----| v0_4(void) = Invoke : r0_3, this:r0_2
|
||||
# 851| r0_5(glval<PolymorphicDerived>) = VariableAddress[d] :
|
||||
# 851| r0_6(bool) = FunctionAddress[PolymorphicDerived] :
|
||||
# 851| r0_6(glval<unknown>) = FunctionAddress[PolymorphicDerived] :
|
||||
# 851| v0_7(void) = Invoke : r0_6, this:r0_5
|
||||
# 853| r0_8(glval<PolymorphicBase *>) = VariableAddress[pb] :
|
||||
# 853| r0_9(glval<PolymorphicBase>) = VariableAddress[b] :
|
||||
@@ -3611,7 +3611,7 @@ ir.cpp:
|
||||
# 867| v0_0(void) = EnterFunction :
|
||||
# 867| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 867| r0_2(glval<String>) = InitializeThis :
|
||||
# 868| r0_3(bool) = FunctionAddress[String] :
|
||||
# 868| r0_3(glval<unknown>) = FunctionAddress[String] :
|
||||
# 868| r0_4(glval<char[1]>) = StringConstant[""] :
|
||||
# 868| r0_5(char *) = Convert : r0_4
|
||||
# 868| v0_6(void) = Invoke : r0_3, this:r0_2, r0_5
|
||||
@@ -3783,3 +3783,126 @@ ir.cpp:
|
||||
# 906| r3_2(glval<int>) = VariableAddress[#temp906:11] :
|
||||
# 906| m3_3(int) = Store : r3_2, r3_1
|
||||
#-----| Goto -> Block 1
|
||||
|
||||
# 940| OperatorNew() -> void
|
||||
# 940| Block 0
|
||||
# 940| v0_0(void) = EnterFunction :
|
||||
# 940| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 941| r0_2(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 941| r0_3(unsigned long) = Constant[4] :
|
||||
# 941| r0_4(void *) = Invoke : r0_2, r0_3
|
||||
# 941| r0_5(int *) = Convert : r0_4
|
||||
# 942| r0_6(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 942| r0_7(unsigned long) = Constant[4] :
|
||||
# 942| r0_8(float) = Constant[1.0] :
|
||||
# 942| r0_9(void *) = Invoke : r0_6, r0_7, r0_8
|
||||
# 942| r0_10(int *) = Convert : r0_9
|
||||
# 943| r0_11(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 943| r0_12(unsigned long) = Constant[4] :
|
||||
# 943| r0_13(void *) = Invoke : r0_11, r0_12
|
||||
# 943| r0_14(int *) = Convert : r0_13
|
||||
# 943| r0_15(int) = Constant[0] :
|
||||
# 943| mu0_16(int) = Store : r0_14, r0_15
|
||||
# 944| r0_17(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 944| r0_18(unsigned long) = Constant[8] :
|
||||
# 944| r0_19(void *) = Invoke : r0_17, r0_18
|
||||
# 944| r0_20(String *) = Convert : r0_19
|
||||
# 944| r0_21(glval<unknown>) = FunctionAddress[String] :
|
||||
# 944| v0_22(void) = Invoke : r0_21, this:r0_20
|
||||
# 945| r0_23(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 945| r0_24(unsigned long) = Constant[8] :
|
||||
# 945| r0_25(float) = Constant[1.0] :
|
||||
# 945| r0_26(void *) = Invoke : r0_23, r0_24, r0_25
|
||||
# 945| r0_27(String *) = Convert : r0_26
|
||||
# 945| r0_28(glval<unknown>) = FunctionAddress[String] :
|
||||
# 945| r0_29(glval<char[6]>) = StringConstant["hello"] :
|
||||
# 945| r0_30(char *) = Convert : r0_29
|
||||
# 945| v0_31(void) = Invoke : r0_28, this:r0_27, r0_30
|
||||
# 946| r0_32(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 946| r0_33(unsigned long) = Constant[256] :
|
||||
# 946| r0_34(align_val_t) = Constant[128] :
|
||||
# 946| r0_35(void *) = Invoke : r0_32, r0_33, r0_34
|
||||
# 946| r0_36(Overaligned *) = Convert : r0_35
|
||||
# 947| r0_37(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 947| r0_38(unsigned long) = Constant[256] :
|
||||
# 947| r0_39(align_val_t) = Constant[128] :
|
||||
# 947| r0_40(float) = Constant[1.0] :
|
||||
# 947| r0_41(void *) = Invoke : r0_37, r0_38, r0_39, r0_40
|
||||
# 947| r0_42(Overaligned *) = Convert : r0_41
|
||||
# 947| r0_43(Overaligned) = Constant[0] :
|
||||
# 947| mu0_44(Overaligned) = Store : r0_42, r0_43
|
||||
# 948| v0_45(void) = NoOp :
|
||||
# 940| v0_46(void) = ReturnVoid :
|
||||
# 940| v0_47(void) = UnmodeledUse : mu*
|
||||
# 940| v0_48(void) = ExitFunction :
|
||||
|
||||
# 950| OperatorNewArray(int) -> void
|
||||
# 950| Block 0
|
||||
# 950| v0_0(void) = EnterFunction :
|
||||
# 950| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 950| r0_2(glval<int>) = VariableAddress[n] :
|
||||
# 950| m0_3(int) = InitializeParameter[n] : r0_2
|
||||
# 951| r0_4(glval<unknown>) = FunctionAddress[operator new[]] :
|
||||
# 951| r0_5(unsigned long) = Constant[40] :
|
||||
# 951| r0_6(void *) = Invoke : r0_4, r0_5
|
||||
# 951| r0_7(int *) = Convert : r0_6
|
||||
# 952| r0_8(glval<unknown>) = FunctionAddress[operator new[]] :
|
||||
# 952| r0_9(glval<int>) = VariableAddress[n] :
|
||||
# 952| r0_10(int) = Load : r0_9, m0_3
|
||||
# 952| r0_11(unsigned long) = Convert : r0_10
|
||||
# 952| r0_12(unsigned long) = Constant[4] :
|
||||
# 952| r0_13(unsigned long) = Mul : r0_11, r0_12
|
||||
# 952| r0_14(void *) = Invoke : r0_8, r0_13
|
||||
# 952| r0_15(int *) = Convert : r0_14
|
||||
# 953| r0_16(glval<unknown>) = FunctionAddress[operator new[]] :
|
||||
# 953| r0_17(glval<int>) = VariableAddress[n] :
|
||||
# 953| r0_18(int) = Load : r0_17, m0_3
|
||||
# 953| r0_19(unsigned long) = Convert : r0_18
|
||||
# 953| r0_20(unsigned long) = Constant[4] :
|
||||
# 953| r0_21(unsigned long) = Mul : r0_19, r0_20
|
||||
# 953| r0_22(float) = Constant[1.0] :
|
||||
# 953| r0_23(void *) = Invoke : r0_16, r0_21, r0_22
|
||||
# 953| r0_24(int *) = Convert : r0_23
|
||||
# 954| r0_25(glval<unknown>) = FunctionAddress[operator new[]] :
|
||||
# 954| r0_26(glval<int>) = VariableAddress[n] :
|
||||
# 954| r0_27(int) = Load : r0_26, m0_3
|
||||
# 954| r0_28(unsigned long) = Convert : r0_27
|
||||
# 954| r0_29(unsigned long) = Constant[8] :
|
||||
# 954| r0_30(unsigned long) = Mul : r0_28, r0_29
|
||||
# 954| r0_31(void *) = Invoke : r0_25, r0_30
|
||||
# 954| r0_32(String *) = Convert : r0_31
|
||||
# 955| r0_33(glval<unknown>) = FunctionAddress[operator new[]] :
|
||||
# 955| r0_34(glval<int>) = VariableAddress[n] :
|
||||
# 955| r0_35(int) = Load : r0_34, m0_3
|
||||
# 955| r0_36(unsigned long) = Convert : r0_35
|
||||
# 955| r0_37(unsigned long) = Constant[256] :
|
||||
# 955| r0_38(unsigned long) = Mul : r0_36, r0_37
|
||||
# 955| r0_39(align_val_t) = Constant[128] :
|
||||
# 955| r0_40(void *) = Invoke : r0_33, r0_38, r0_39
|
||||
# 955| r0_41(Overaligned *) = Convert : r0_40
|
||||
# 956| r0_42(glval<unknown>) = FunctionAddress[operator new[]] :
|
||||
# 956| r0_43(unsigned long) = Constant[2560] :
|
||||
# 956| r0_44(align_val_t) = Constant[128] :
|
||||
# 956| r0_45(float) = Constant[1.0] :
|
||||
# 956| r0_46(void *) = Invoke : r0_42, r0_43, r0_44, r0_45
|
||||
# 956| r0_47(Overaligned *) = Convert : r0_46
|
||||
# 957| r0_48(glval<unknown>) = FunctionAddress[operator new[]] :
|
||||
# 957| r0_49(glval<int>) = VariableAddress[n] :
|
||||
# 957| r0_50(int) = Load : r0_49, m0_3
|
||||
# 957| r0_51(unsigned long) = Convert : r0_50
|
||||
# 957| r0_52(unsigned long) = Constant[1] :
|
||||
# 957| r0_53(unsigned long) = Mul : r0_51, r0_52
|
||||
# 957| r0_54(void *) = Invoke : r0_48, r0_53
|
||||
# 957| r0_55(DefaultCtorWithDefaultParam *) = Convert : r0_54
|
||||
# 958| r0_56(glval<unknown>) = FunctionAddress[operator new[]] :
|
||||
# 958| r0_57(glval<int>) = VariableAddress[n] :
|
||||
# 958| r0_58(int) = Load : r0_57, m0_3
|
||||
# 958| r0_59(unsigned long) = Convert : r0_58
|
||||
# 958| r0_60(unsigned long) = Constant[4] :
|
||||
# 958| r0_61(unsigned long) = Mul : r0_59, r0_60
|
||||
# 958| r0_62(void *) = Invoke : r0_56, r0_61
|
||||
# 958| r0_63(int *) = Convert : r0_62
|
||||
# 959| v0_64(void) = NoOp :
|
||||
# 950| v0_65(void) = ReturnVoid :
|
||||
# 950| v0_66(void) = UnmodeledUse : mu*
|
||||
# 950| v0_67(void) = ExitFunction :
|
||||
|
||||
@@ -905,3 +905,75 @@ void ConstantConditions(int x) {
|
||||
bool a = true && true;
|
||||
int b = (true) ? x : x;
|
||||
}
|
||||
|
||||
typedef unsigned long size_t;
|
||||
|
||||
namespace std {
|
||||
enum class align_val_t : size_t {};
|
||||
}
|
||||
|
||||
void* operator new(size_t, float);
|
||||
void* operator new[](size_t, float);
|
||||
void* operator new(size_t, std::align_val_t, float);
|
||||
void* operator new[](size_t, std::align_val_t, float);
|
||||
void operator delete(void*, float);
|
||||
void operator delete[](void*, float);
|
||||
void operator delete(void*, std::align_val_t, float);
|
||||
void operator delete[](void*, std::align_val_t, float);
|
||||
|
||||
struct SizedDealloc {
|
||||
char a[32];
|
||||
void* operator new(size_t);
|
||||
void* operator new[](size_t);
|
||||
void operator delete(void*, size_t);
|
||||
void operator delete[](void*, size_t);
|
||||
};
|
||||
|
||||
struct alignas(128) Overaligned {
|
||||
char a[256];
|
||||
};
|
||||
|
||||
struct DefaultCtorWithDefaultParam {
|
||||
DefaultCtorWithDefaultParam(double d = 1.0);
|
||||
};
|
||||
|
||||
void OperatorNew() {
|
||||
new int; // No constructor
|
||||
new(1.0f) int; // Placement new, no constructor
|
||||
new int(); // Zero-init
|
||||
new String(); // Constructor
|
||||
new(1.0f) String("hello"); // Placement new, constructor with args
|
||||
new Overaligned; // Aligned new
|
||||
new(1.0f) Overaligned(); // Placement aligned new with zero-init
|
||||
}
|
||||
|
||||
void OperatorNewArray(int n) {
|
||||
new int[10]; // Constant size
|
||||
new int[n]; // No constructor
|
||||
new(1.0f) int[n]; // Placement new, no constructor
|
||||
new String[n]; // Constructor
|
||||
new Overaligned[n]; // Aligned new
|
||||
new(1.0f) Overaligned[10]; // Aligned placement new
|
||||
new DefaultCtorWithDefaultParam[n];
|
||||
new int[n] { 0, 1, 2 };
|
||||
}
|
||||
|
||||
#if 0
|
||||
void OperatorDelete() {
|
||||
delete static_cast<int*>(nullptr); // No destructor
|
||||
delete static_cast<String*>(nullptr); // Non-virtual destructor, with size.
|
||||
delete static_cast<SizedDealloc*>(nullptr); // No destructor, with size.
|
||||
delete static_cast<Overaligned*>(nullptr); // No destructor, with size and alignment.
|
||||
delete static_cast<PolymorphicBase*>(nullptr); // Virtual destructor
|
||||
}
|
||||
|
||||
void OperatorDeleteArray() {
|
||||
delete[] static_cast<int*>(nullptr); // No destructor
|
||||
delete[] static_cast<String*>(nullptr); // Non-virtual destructor, with size.
|
||||
delete[] static_cast<SizedDealloc*>(nullptr); // No destructor, with size.
|
||||
delete[] static_cast<Overaligned*>(nullptr); // No destructor, with size and alignment.
|
||||
delete[] static_cast<PolymorphicBase*>(nullptr); // Virtual destructor
|
||||
}
|
||||
#endif
|
||||
|
||||
// semmle-extractor-options: -std=c++17
|
||||
|
||||
@@ -1544,58 +1544,58 @@ ir.cpp:
|
||||
|
||||
# 372| Call() -> void
|
||||
# 372| Block 0
|
||||
# 372| v0_0(void) = EnterFunction :
|
||||
# 372| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 373| r0_2(bool) = FunctionAddress[VoidFunc] :
|
||||
# 373| v0_3(void) = Invoke : r0_2
|
||||
# 374| v0_4(void) = NoOp :
|
||||
# 372| v0_5(void) = ReturnVoid :
|
||||
# 372| v0_6(void) = UnmodeledUse : mu*
|
||||
# 372| v0_7(void) = ExitFunction :
|
||||
# 372| v0_0(void) = EnterFunction :
|
||||
# 372| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 373| r0_2(glval<unknown>) = FunctionAddress[VoidFunc] :
|
||||
# 373| v0_3(void) = Invoke : r0_2
|
||||
# 374| v0_4(void) = NoOp :
|
||||
# 372| v0_5(void) = ReturnVoid :
|
||||
# 372| v0_6(void) = UnmodeledUse : mu*
|
||||
# 372| v0_7(void) = ExitFunction :
|
||||
|
||||
# 376| CallAdd(int, int) -> int
|
||||
# 376| Block 0
|
||||
# 376| v0_0(void) = EnterFunction :
|
||||
# 376| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 376| r0_2(glval<int>) = VariableAddress[x] :
|
||||
# 376| mu0_3(int) = InitializeParameter[x] : r0_2
|
||||
# 376| r0_4(glval<int>) = VariableAddress[y] :
|
||||
# 376| mu0_5(int) = InitializeParameter[y] : r0_4
|
||||
# 377| r0_6(glval<int>) = VariableAddress[#return] :
|
||||
# 377| r0_7(bool) = FunctionAddress[Add] :
|
||||
# 377| r0_8(glval<int>) = VariableAddress[x] :
|
||||
# 377| r0_9(int) = Load : r0_8, mu0_1
|
||||
# 377| r0_10(glval<int>) = VariableAddress[y] :
|
||||
# 377| r0_11(int) = Load : r0_10, mu0_1
|
||||
# 377| r0_12(int) = Invoke : r0_7, r0_9, r0_11
|
||||
# 377| mu0_13(int) = Store : r0_6, r0_12
|
||||
# 376| r0_14(glval<int>) = VariableAddress[#return] :
|
||||
# 376| v0_15(void) = ReturnValue : r0_14, mu0_1
|
||||
# 376| v0_16(void) = UnmodeledUse : mu*
|
||||
# 376| v0_17(void) = ExitFunction :
|
||||
# 376| v0_0(void) = EnterFunction :
|
||||
# 376| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 376| r0_2(glval<int>) = VariableAddress[x] :
|
||||
# 376| mu0_3(int) = InitializeParameter[x] : r0_2
|
||||
# 376| r0_4(glval<int>) = VariableAddress[y] :
|
||||
# 376| mu0_5(int) = InitializeParameter[y] : r0_4
|
||||
# 377| r0_6(glval<int>) = VariableAddress[#return] :
|
||||
# 377| r0_7(glval<unknown>) = FunctionAddress[Add] :
|
||||
# 377| r0_8(glval<int>) = VariableAddress[x] :
|
||||
# 377| r0_9(int) = Load : r0_8, mu0_1
|
||||
# 377| r0_10(glval<int>) = VariableAddress[y] :
|
||||
# 377| r0_11(int) = Load : r0_10, mu0_1
|
||||
# 377| r0_12(int) = Invoke : r0_7, r0_9, r0_11
|
||||
# 377| mu0_13(int) = Store : r0_6, r0_12
|
||||
# 376| r0_14(glval<int>) = VariableAddress[#return] :
|
||||
# 376| v0_15(void) = ReturnValue : r0_14, mu0_1
|
||||
# 376| v0_16(void) = UnmodeledUse : mu*
|
||||
# 376| v0_17(void) = ExitFunction :
|
||||
|
||||
# 380| Comma(int, int) -> int
|
||||
# 380| Block 0
|
||||
# 380| v0_0(void) = EnterFunction :
|
||||
# 380| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 380| r0_2(glval<int>) = VariableAddress[x] :
|
||||
# 380| mu0_3(int) = InitializeParameter[x] : r0_2
|
||||
# 380| r0_4(glval<int>) = VariableAddress[y] :
|
||||
# 380| mu0_5(int) = InitializeParameter[y] : r0_4
|
||||
# 381| r0_6(glval<int>) = VariableAddress[#return] :
|
||||
# 381| r0_7(bool) = FunctionAddress[VoidFunc] :
|
||||
# 381| v0_8(void) = Invoke : r0_7
|
||||
# 381| r0_9(bool) = FunctionAddress[CallAdd] :
|
||||
# 381| r0_10(glval<int>) = VariableAddress[x] :
|
||||
# 381| r0_11(int) = Load : r0_10, mu0_1
|
||||
# 381| r0_12(glval<int>) = VariableAddress[y] :
|
||||
# 381| r0_13(int) = Load : r0_12, mu0_1
|
||||
# 381| r0_14(int) = Invoke : r0_9, r0_11, r0_13
|
||||
# 381| mu0_15(int) = Store : r0_6, r0_14
|
||||
# 380| r0_16(glval<int>) = VariableAddress[#return] :
|
||||
# 380| v0_17(void) = ReturnValue : r0_16, mu0_1
|
||||
# 380| v0_18(void) = UnmodeledUse : mu*
|
||||
# 380| v0_19(void) = ExitFunction :
|
||||
# 380| v0_0(void) = EnterFunction :
|
||||
# 380| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 380| r0_2(glval<int>) = VariableAddress[x] :
|
||||
# 380| mu0_3(int) = InitializeParameter[x] : r0_2
|
||||
# 380| r0_4(glval<int>) = VariableAddress[y] :
|
||||
# 380| mu0_5(int) = InitializeParameter[y] : r0_4
|
||||
# 381| r0_6(glval<int>) = VariableAddress[#return] :
|
||||
# 381| r0_7(glval<unknown>) = FunctionAddress[VoidFunc] :
|
||||
# 381| v0_8(void) = Invoke : r0_7
|
||||
# 381| r0_9(glval<unknown>) = FunctionAddress[CallAdd] :
|
||||
# 381| r0_10(glval<int>) = VariableAddress[x] :
|
||||
# 381| r0_11(int) = Load : r0_10, mu0_1
|
||||
# 381| r0_12(glval<int>) = VariableAddress[y] :
|
||||
# 381| r0_13(int) = Load : r0_12, mu0_1
|
||||
# 381| r0_14(int) = Invoke : r0_9, r0_11, r0_13
|
||||
# 381| mu0_15(int) = Store : r0_6, r0_14
|
||||
# 380| r0_16(glval<int>) = VariableAddress[#return] :
|
||||
# 380| v0_17(void) = ReturnValue : r0_16, mu0_1
|
||||
# 380| v0_18(void) = UnmodeledUse : mu*
|
||||
# 380| v0_19(void) = ExitFunction :
|
||||
|
||||
# 384| Switch(int) -> void
|
||||
# 384| Block 0
|
||||
@@ -2096,13 +2096,13 @@ ir.cpp:
|
||||
# 492| v1_3(void) = ExitFunction :
|
||||
|
||||
# 493| Block 2
|
||||
# 493| r2_0(bool) = FunctionAddress[VoidFunc] :
|
||||
# 493| v2_1(void) = Invoke : r2_0
|
||||
# 493| r2_0(glval<unknown>) = FunctionAddress[VoidFunc] :
|
||||
# 493| v2_1(void) = Invoke : r2_0
|
||||
#-----| Goto -> Block 1
|
||||
|
||||
# 493| Block 3
|
||||
# 493| r3_0(bool) = FunctionAddress[VoidFunc] :
|
||||
# 493| v3_1(void) = Invoke : r3_0
|
||||
# 493| r3_0(glval<unknown>) = FunctionAddress[VoidFunc] :
|
||||
# 493| v3_1(void) = Invoke : r3_0
|
||||
#-----| Goto -> Block 1
|
||||
|
||||
# 496| Nullptr() -> void
|
||||
@@ -2500,7 +2500,7 @@ ir.cpp:
|
||||
# 584| Block 0
|
||||
# 584| v0_0(void) = EnterFunction :
|
||||
# 584| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 585| r0_2(bool) = FunctionAddress[VarArgFunction] :
|
||||
# 585| r0_2(glval<unknown>) = FunctionAddress[VarArgFunction] :
|
||||
# 585| r0_3(glval<char[6]>) = StringConstant["%d %s"] :
|
||||
# 585| r0_4(char *) = Convert : r0_3
|
||||
# 585| r0_5(int) = Constant[1] :
|
||||
@@ -2538,19 +2538,19 @@ ir.cpp:
|
||||
# 615| v0_0(void) = EnterFunction :
|
||||
# 615| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 616| r0_2(glval<String>) = VariableAddress[s1] :
|
||||
# 616| r0_3(bool) = FunctionAddress[String] :
|
||||
# 616| r0_3(glval<unknown>) = FunctionAddress[String] :
|
||||
# 616| v0_4(void) = Invoke : r0_3, this:r0_2
|
||||
# 617| r0_5(glval<String>) = VariableAddress[s2] :
|
||||
# 617| r0_6(bool) = FunctionAddress[String] :
|
||||
# 617| r0_6(glval<unknown>) = FunctionAddress[String] :
|
||||
# 617| r0_7(glval<char[6]>) = StringConstant["hello"] :
|
||||
# 617| r0_8(char *) = Convert : r0_7
|
||||
# 617| v0_9(void) = Invoke : r0_6, this:r0_5, r0_8
|
||||
# 618| r0_10(glval<String>) = VariableAddress[s3] :
|
||||
# 618| r0_11(bool) = FunctionAddress[ReturnObject] :
|
||||
# 618| r0_11(glval<unknown>) = FunctionAddress[ReturnObject] :
|
||||
# 618| r0_12(String) = Invoke : r0_11
|
||||
# 618| mu0_13(String) = Store : r0_10, r0_12
|
||||
# 619| r0_14(glval<String>) = VariableAddress[s4] :
|
||||
# 619| r0_15(bool) = FunctionAddress[String] :
|
||||
# 619| r0_15(glval<unknown>) = FunctionAddress[String] :
|
||||
# 619| r0_16(glval<char[5]>) = StringConstant["test"] :
|
||||
# 619| r0_17(char *) = Convert : r0_16
|
||||
# 619| v0_18(void) = Invoke : r0_15, this:r0_14, r0_17
|
||||
@@ -2572,16 +2572,16 @@ ir.cpp:
|
||||
# 623| r0_8(glval<String &>) = VariableAddress[r] :
|
||||
# 623| r0_9(String &) = Load : r0_8, mu0_1
|
||||
# 623| r0_10(glval<String>) = Convert : r0_9
|
||||
# 623| r0_11(bool) = FunctionAddress[c_str] :
|
||||
# 623| r0_11(glval<unknown>) = FunctionAddress[c_str] :
|
||||
# 623| r0_12(char *) = Invoke : r0_11, this:r0_10
|
||||
# 624| r0_13(glval<String *>) = VariableAddress[p] :
|
||||
# 624| r0_14(String *) = Load : r0_13, mu0_1
|
||||
# 624| r0_15(String *) = Convert : r0_14
|
||||
# 624| r0_16(bool) = FunctionAddress[c_str] :
|
||||
# 624| r0_16(glval<unknown>) = FunctionAddress[c_str] :
|
||||
# 624| r0_17(char *) = Invoke : r0_16, this:r0_15
|
||||
# 625| r0_18(glval<String>) = VariableAddress[s] :
|
||||
# 625| r0_19(glval<String>) = Convert : r0_18
|
||||
# 625| r0_20(bool) = FunctionAddress[c_str] :
|
||||
# 625| r0_20(glval<unknown>) = FunctionAddress[c_str] :
|
||||
# 625| r0_21(char *) = Invoke : r0_20, this:r0_19
|
||||
# 626| v0_22(void) = NoOp :
|
||||
# 622| v0_23(void) = ReturnVoid :
|
||||
@@ -2676,25 +2676,25 @@ ir.cpp:
|
||||
|
||||
# 652| C::MethodCalls() -> void
|
||||
# 652| Block 0
|
||||
# 652| v0_0(void) = EnterFunction :
|
||||
# 652| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 652| r0_2(glval<C>) = InitializeThis :
|
||||
# 653| r0_3(C *) = CopyValue : r0_2
|
||||
# 653| r0_4(bool) = FunctionAddress[InstanceMemberFunction] :
|
||||
# 653| r0_5(int) = Constant[0] :
|
||||
# 653| r0_6(int) = Invoke : r0_4, this:r0_3, r0_5
|
||||
# 654| r0_7(C *) = CopyValue : r0_2
|
||||
# 654| r0_8(bool) = FunctionAddress[InstanceMemberFunction] :
|
||||
# 654| r0_9(int) = Constant[1] :
|
||||
# 654| r0_10(int) = Invoke : r0_8, this:r0_7, r0_9
|
||||
#-----| r0_11(C *) = CopyValue : r0_2
|
||||
# 655| r0_12(bool) = FunctionAddress[InstanceMemberFunction] :
|
||||
# 655| r0_13(int) = Constant[2] :
|
||||
# 655| r0_14(int) = Invoke : r0_12, this:r0_11, r0_13
|
||||
# 656| v0_15(void) = NoOp :
|
||||
# 652| v0_16(void) = ReturnVoid :
|
||||
# 652| v0_17(void) = UnmodeledUse : mu*
|
||||
# 652| v0_18(void) = ExitFunction :
|
||||
# 652| v0_0(void) = EnterFunction :
|
||||
# 652| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 652| r0_2(glval<C>) = InitializeThis :
|
||||
# 653| r0_3(C *) = CopyValue : r0_2
|
||||
# 653| r0_4(glval<unknown>) = FunctionAddress[InstanceMemberFunction] :
|
||||
# 653| r0_5(int) = Constant[0] :
|
||||
# 653| r0_6(int) = Invoke : r0_4, this:r0_3, r0_5
|
||||
# 654| r0_7(C *) = CopyValue : r0_2
|
||||
# 654| r0_8(glval<unknown>) = FunctionAddress[InstanceMemberFunction] :
|
||||
# 654| r0_9(int) = Constant[1] :
|
||||
# 654| r0_10(int) = Invoke : r0_8, this:r0_7, r0_9
|
||||
#-----| r0_11(C *) = CopyValue : r0_2
|
||||
# 655| r0_12(glval<unknown>) = FunctionAddress[InstanceMemberFunction] :
|
||||
# 655| r0_13(int) = Constant[2] :
|
||||
# 655| r0_14(int) = Invoke : r0_12, this:r0_11, r0_13
|
||||
# 656| v0_15(void) = NoOp :
|
||||
# 652| v0_16(void) = ReturnVoid :
|
||||
# 652| v0_17(void) = UnmodeledUse : mu*
|
||||
# 652| v0_18(void) = ExitFunction :
|
||||
|
||||
# 658| C::C() -> void
|
||||
# 658| Block 0
|
||||
@@ -2705,7 +2705,7 @@ ir.cpp:
|
||||
# 659| r0_4(int) = Constant[1] :
|
||||
# 659| mu0_5(int) = Store : r0_3, r0_4
|
||||
# 663| r0_6(glval<String>) = FieldAddress[m_b] : r0_2
|
||||
# 663| r0_7(bool) = FunctionAddress[String] :
|
||||
# 663| r0_7(glval<unknown>) = FunctionAddress[String] :
|
||||
# 663| v0_8(void) = Invoke : r0_7, this:r0_6
|
||||
# 660| r0_9(glval<char>) = FieldAddress[m_c] : r0_2
|
||||
# 660| r0_10(char) = Constant[3] :
|
||||
@@ -2714,7 +2714,7 @@ ir.cpp:
|
||||
# 661| r0_13(void *) = Constant[0] :
|
||||
# 661| mu0_14(void *) = Store : r0_12, r0_13
|
||||
# 662| r0_15(glval<String>) = FieldAddress[m_f] : r0_2
|
||||
# 662| r0_16(bool) = FunctionAddress[String] :
|
||||
# 662| r0_16(glval<unknown>) = FunctionAddress[String] :
|
||||
# 662| r0_17(glval<char[5]>) = StringConstant["test"] :
|
||||
# 662| r0_18(char *) = Convert : r0_17
|
||||
# 662| v0_19(void) = Invoke : r0_16, this:r0_15, r0_18
|
||||
@@ -2765,7 +2765,7 @@ ir.cpp:
|
||||
# 687| r0_9(int &) = Load : r0_8, mu0_1
|
||||
# 687| mu0_10(int &) = Store : r0_7, r0_9
|
||||
# 688| r0_11(glval<String &>) = VariableAddress[r3] :
|
||||
# 688| r0_12(bool) = FunctionAddress[ReturnReference] :
|
||||
# 688| r0_12(glval<unknown>) = FunctionAddress[ReturnReference] :
|
||||
# 688| r0_13(String &) = Invoke : r0_12
|
||||
# 688| r0_14(glval<String>) = Convert : r0_13
|
||||
# 688| mu0_15(String &) = Store : r0_11, r0_14
|
||||
@@ -2859,24 +2859,24 @@ ir.cpp:
|
||||
|
||||
# 708| CallMin(int, int) -> int
|
||||
# 708| Block 0
|
||||
# 708| v0_0(void) = EnterFunction :
|
||||
# 708| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 708| r0_2(glval<int>) = VariableAddress[x] :
|
||||
# 708| mu0_3(int) = InitializeParameter[x] : r0_2
|
||||
# 708| r0_4(glval<int>) = VariableAddress[y] :
|
||||
# 708| mu0_5(int) = InitializeParameter[y] : r0_4
|
||||
# 709| r0_6(glval<int>) = VariableAddress[#return] :
|
||||
# 709| r0_7(bool) = FunctionAddress[min] :
|
||||
# 709| r0_8(glval<int>) = VariableAddress[x] :
|
||||
# 709| r0_9(int) = Load : r0_8, mu0_1
|
||||
# 709| r0_10(glval<int>) = VariableAddress[y] :
|
||||
# 709| r0_11(int) = Load : r0_10, mu0_1
|
||||
# 709| r0_12(int) = Invoke : r0_7, r0_9, r0_11
|
||||
# 709| mu0_13(int) = Store : r0_6, r0_12
|
||||
# 708| r0_14(glval<int>) = VariableAddress[#return] :
|
||||
# 708| v0_15(void) = ReturnValue : r0_14, mu0_1
|
||||
# 708| v0_16(void) = UnmodeledUse : mu*
|
||||
# 708| v0_17(void) = ExitFunction :
|
||||
# 708| v0_0(void) = EnterFunction :
|
||||
# 708| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 708| r0_2(glval<int>) = VariableAddress[x] :
|
||||
# 708| mu0_3(int) = InitializeParameter[x] : r0_2
|
||||
# 708| r0_4(glval<int>) = VariableAddress[y] :
|
||||
# 708| mu0_5(int) = InitializeParameter[y] : r0_4
|
||||
# 709| r0_6(glval<int>) = VariableAddress[#return] :
|
||||
# 709| r0_7(glval<unknown>) = FunctionAddress[min] :
|
||||
# 709| r0_8(glval<int>) = VariableAddress[x] :
|
||||
# 709| r0_9(int) = Load : r0_8, mu0_1
|
||||
# 709| r0_10(glval<int>) = VariableAddress[y] :
|
||||
# 709| r0_11(int) = Load : r0_10, mu0_1
|
||||
# 709| r0_12(int) = Invoke : r0_7, r0_9, r0_11
|
||||
# 709| mu0_13(int) = Store : r0_6, r0_12
|
||||
# 708| r0_14(glval<int>) = VariableAddress[#return] :
|
||||
# 708| v0_15(void) = ReturnValue : r0_14, mu0_1
|
||||
# 708| v0_16(void) = UnmodeledUse : mu*
|
||||
# 708| v0_17(void) = ExitFunction :
|
||||
|
||||
# 715| Outer<long>::Func<void *, char>(void *, char) -> long
|
||||
# 715| Block 0
|
||||
@@ -2896,19 +2896,19 @@ ir.cpp:
|
||||
|
||||
# 720| CallNestedTemplateFunc() -> double
|
||||
# 720| Block 0
|
||||
# 720| v0_0(void) = EnterFunction :
|
||||
# 720| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 721| r0_2(glval<double>) = VariableAddress[#return] :
|
||||
# 721| r0_3(bool) = FunctionAddress[Func] :
|
||||
# 721| r0_4(void *) = Constant[0] :
|
||||
# 721| r0_5(char) = Constant[111] :
|
||||
# 721| r0_6(long) = Invoke : r0_3, r0_4, r0_5
|
||||
# 721| r0_7(double) = Convert : r0_6
|
||||
# 721| mu0_8(double) = Store : r0_2, r0_7
|
||||
# 720| r0_9(glval<double>) = VariableAddress[#return] :
|
||||
# 720| v0_10(void) = ReturnValue : r0_9, mu0_1
|
||||
# 720| v0_11(void) = UnmodeledUse : mu*
|
||||
# 720| v0_12(void) = ExitFunction :
|
||||
# 720| v0_0(void) = EnterFunction :
|
||||
# 720| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 721| r0_2(glval<double>) = VariableAddress[#return] :
|
||||
# 721| r0_3(glval<unknown>) = FunctionAddress[Func] :
|
||||
# 721| r0_4(void *) = Constant[0] :
|
||||
# 721| r0_5(char) = Constant[111] :
|
||||
# 721| r0_6(long) = Invoke : r0_3, r0_4, r0_5
|
||||
# 721| r0_7(double) = Convert : r0_6
|
||||
# 721| mu0_8(double) = Store : r0_2, r0_7
|
||||
# 720| r0_9(glval<double>) = VariableAddress[#return] :
|
||||
# 720| v0_10(void) = ReturnValue : r0_9, mu0_1
|
||||
# 720| v0_11(void) = UnmodeledUse : mu*
|
||||
# 720| v0_12(void) = ExitFunction :
|
||||
|
||||
# 724| TryCatch(bool) -> void
|
||||
# 724| Block 0
|
||||
@@ -2969,7 +2969,7 @@ ir.cpp:
|
||||
|
||||
# 731| Block 7
|
||||
# 731| r7_0(glval<String>) = VariableAddress[#throw731:19] :
|
||||
# 731| r7_1(bool) = FunctionAddress[String] :
|
||||
# 731| r7_1(glval<unknown>) = FunctionAddress[String] :
|
||||
# 731| r7_2(glval<char[14]>) = StringConstant["String object"] :
|
||||
# 731| r7_3(char *) = Convert : r7_2
|
||||
# 731| v7_4(void) = Invoke : r7_1, this:r7_0, r7_3
|
||||
@@ -2988,14 +2988,14 @@ ir.cpp:
|
||||
#-----| Goto -> Block 10
|
||||
|
||||
# 735| Block 10
|
||||
# 735| r10_0(glval<char *>) = VariableAddress[s] :
|
||||
# 735| mu10_1(char *) = InitializeParameter[s] : r10_0
|
||||
# 736| r10_2(glval<String>) = VariableAddress[#throw736:5] :
|
||||
# 736| r10_3(bool) = FunctionAddress[String] :
|
||||
# 736| r10_4(glval<char *>) = VariableAddress[s] :
|
||||
# 736| r10_5(char *) = Load : r10_4, mu0_1
|
||||
# 736| v10_6(void) = Invoke : r10_3, this:r10_2, r10_5
|
||||
# 736| v10_7(void) = ThrowValue : r10_2, mu0_1
|
||||
# 735| r10_0(glval<char *>) = VariableAddress[s] :
|
||||
# 735| mu10_1(char *) = InitializeParameter[s] : r10_0
|
||||
# 736| r10_2(glval<String>) = VariableAddress[#throw736:5] :
|
||||
# 736| r10_3(glval<unknown>) = FunctionAddress[String] :
|
||||
# 736| r10_4(glval<char *>) = VariableAddress[s] :
|
||||
# 736| r10_5(char *) = Load : r10_4, mu0_1
|
||||
# 736| v10_6(void) = Invoke : r10_3, this:r10_2, r10_5
|
||||
# 736| v10_7(void) = ThrowValue : r10_2, mu0_1
|
||||
#-----| Exception -> Block 2
|
||||
|
||||
# 738| Block 11
|
||||
@@ -3021,18 +3021,18 @@ ir.cpp:
|
||||
|
||||
# 745| Base::Base(const Base &) -> void
|
||||
# 745| Block 0
|
||||
# 745| v0_0(void) = EnterFunction :
|
||||
# 745| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 745| r0_2(glval<Base>) = InitializeThis :
|
||||
#-----| r0_3(glval<Base &>) = VariableAddress[p#0] :
|
||||
#-----| mu0_4(Base &) = InitializeParameter[p#0] : r0_3
|
||||
# 745| r0_5(glval<String>) = FieldAddress[base_s] : r0_2
|
||||
# 745| r0_6(bool) = FunctionAddress[String] :
|
||||
# 745| v0_7(void) = Invoke : r0_6, this:r0_5
|
||||
# 745| v0_8(void) = NoOp :
|
||||
# 745| v0_9(void) = ReturnVoid :
|
||||
# 745| v0_10(void) = UnmodeledUse : mu*
|
||||
# 745| v0_11(void) = ExitFunction :
|
||||
# 745| v0_0(void) = EnterFunction :
|
||||
# 745| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 745| r0_2(glval<Base>) = InitializeThis :
|
||||
#-----| r0_3(glval<Base &>) = VariableAddress[p#0] :
|
||||
#-----| mu0_4(Base &) = InitializeParameter[p#0] : r0_3
|
||||
# 745| r0_5(glval<String>) = FieldAddress[base_s] : r0_2
|
||||
# 745| r0_6(glval<unknown>) = FunctionAddress[String] :
|
||||
# 745| v0_7(void) = Invoke : r0_6, this:r0_5
|
||||
# 745| v0_8(void) = NoOp :
|
||||
# 745| v0_9(void) = ReturnVoid :
|
||||
# 745| v0_10(void) = UnmodeledUse : mu*
|
||||
# 745| v0_11(void) = ExitFunction :
|
||||
|
||||
# 745| Base::operator=(const Base &) -> Base &
|
||||
# 745| Block 0
|
||||
@@ -3043,7 +3043,7 @@ ir.cpp:
|
||||
#-----| mu0_4(Base &) = InitializeParameter[p#0] : r0_3
|
||||
#-----| r0_5(Base *) = CopyValue : r0_2
|
||||
#-----| r0_6(glval<String>) = FieldAddress[base_s] : r0_5
|
||||
# 745| r0_7(bool) = FunctionAddress[operator=] :
|
||||
# 745| r0_7(glval<unknown>) = FunctionAddress[operator=] :
|
||||
#-----| r0_8(glval<Base &>) = VariableAddress[p#0] :
|
||||
#-----| r0_9(Base &) = Load : r0_8, mu0_1
|
||||
#-----| r0_10(glval<String>) = FieldAddress[base_s] : r0_9
|
||||
@@ -3058,29 +3058,29 @@ ir.cpp:
|
||||
|
||||
# 748| Base::Base() -> void
|
||||
# 748| Block 0
|
||||
# 748| v0_0(void) = EnterFunction :
|
||||
# 748| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 748| r0_2(glval<Base>) = InitializeThis :
|
||||
# 748| r0_3(glval<String>) = FieldAddress[base_s] : r0_2
|
||||
# 748| r0_4(bool) = FunctionAddress[String] :
|
||||
# 748| v0_5(void) = Invoke : r0_4, this:r0_3
|
||||
# 749| v0_6(void) = NoOp :
|
||||
# 748| v0_7(void) = ReturnVoid :
|
||||
# 748| v0_8(void) = UnmodeledUse : mu*
|
||||
# 748| v0_9(void) = ExitFunction :
|
||||
# 748| v0_0(void) = EnterFunction :
|
||||
# 748| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 748| r0_2(glval<Base>) = InitializeThis :
|
||||
# 748| r0_3(glval<String>) = FieldAddress[base_s] : r0_2
|
||||
# 748| r0_4(glval<unknown>) = FunctionAddress[String] :
|
||||
# 748| v0_5(void) = Invoke : r0_4, this:r0_3
|
||||
# 749| v0_6(void) = NoOp :
|
||||
# 748| v0_7(void) = ReturnVoid :
|
||||
# 748| v0_8(void) = UnmodeledUse : mu*
|
||||
# 748| v0_9(void) = ExitFunction :
|
||||
|
||||
# 750| Base::~Base() -> void
|
||||
# 750| Block 0
|
||||
# 750| v0_0(void) = EnterFunction :
|
||||
# 750| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 750| r0_2(glval<Base>) = InitializeThis :
|
||||
# 751| v0_3(void) = NoOp :
|
||||
# 751| r0_4(glval<String>) = FieldAddress[base_s] : r0_2
|
||||
# 751| r0_5(bool) = FunctionAddress[~String] :
|
||||
# 751| v0_6(void) = Invoke : r0_5, this:r0_4
|
||||
# 750| v0_7(void) = ReturnVoid :
|
||||
# 750| v0_8(void) = UnmodeledUse : mu*
|
||||
# 750| v0_9(void) = ExitFunction :
|
||||
# 750| v0_0(void) = EnterFunction :
|
||||
# 750| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 750| r0_2(glval<Base>) = InitializeThis :
|
||||
# 751| v0_3(void) = NoOp :
|
||||
# 751| r0_4(glval<String>) = FieldAddress[base_s] : r0_2
|
||||
# 751| r0_5(glval<unknown>) = FunctionAddress[~String] :
|
||||
# 751| v0_6(void) = Invoke : r0_5, this:r0_4
|
||||
# 750| v0_7(void) = ReturnVoid :
|
||||
# 750| v0_8(void) = UnmodeledUse : mu*
|
||||
# 750| v0_9(void) = ExitFunction :
|
||||
|
||||
# 754| Middle::operator=(const Middle &) -> Middle &
|
||||
# 754| Block 0
|
||||
@@ -3091,14 +3091,14 @@ ir.cpp:
|
||||
#-----| mu0_4(Middle &) = InitializeParameter[p#0] : r0_3
|
||||
#-----| r0_5(Middle *) = CopyValue : r0_2
|
||||
#-----| r0_6(Base *) = ConvertToBase[Middle : Base] : r0_5
|
||||
# 754| r0_7(bool) = FunctionAddress[operator=] :
|
||||
# 754| r0_7(glval<unknown>) = FunctionAddress[operator=] :
|
||||
#-----| r0_8(glval<Middle &>) = VariableAddress[p#0] :
|
||||
#-----| r0_9(Middle &) = Load : r0_8, mu0_1
|
||||
#-----| r0_10(Base *) = ConvertToBase[Middle : Base] : r0_9
|
||||
# 754| r0_11(Base &) = Invoke : r0_7, this:r0_6, r0_10
|
||||
#-----| r0_12(Middle *) = CopyValue : r0_2
|
||||
#-----| r0_13(glval<String>) = FieldAddress[middle_s] : r0_12
|
||||
# 754| r0_14(bool) = FunctionAddress[operator=] :
|
||||
# 754| r0_14(glval<unknown>) = FunctionAddress[operator=] :
|
||||
#-----| r0_15(glval<Middle &>) = VariableAddress[p#0] :
|
||||
#-----| r0_16(Middle &) = Load : r0_15, mu0_1
|
||||
#-----| r0_17(glval<String>) = FieldAddress[middle_s] : r0_16
|
||||
@@ -3113,35 +3113,35 @@ ir.cpp:
|
||||
|
||||
# 757| Middle::Middle() -> void
|
||||
# 757| Block 0
|
||||
# 757| v0_0(void) = EnterFunction :
|
||||
# 757| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 757| r0_2(glval<Middle>) = InitializeThis :
|
||||
# 757| r0_3(glval<Base>) = ConvertToBase[Middle : Base] : r0_2
|
||||
# 757| r0_4(bool) = FunctionAddress[Base] :
|
||||
# 757| v0_5(void) = Invoke : r0_4, this:r0_3
|
||||
# 757| r0_6(glval<String>) = FieldAddress[middle_s] : r0_2
|
||||
# 757| r0_7(bool) = FunctionAddress[String] :
|
||||
# 757| v0_8(void) = Invoke : r0_7, this:r0_6
|
||||
# 758| v0_9(void) = NoOp :
|
||||
# 757| v0_10(void) = ReturnVoid :
|
||||
# 757| v0_11(void) = UnmodeledUse : mu*
|
||||
# 757| v0_12(void) = ExitFunction :
|
||||
# 757| v0_0(void) = EnterFunction :
|
||||
# 757| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 757| r0_2(glval<Middle>) = InitializeThis :
|
||||
# 757| r0_3(glval<Base>) = ConvertToBase[Middle : Base] : r0_2
|
||||
# 757| r0_4(glval<unknown>) = FunctionAddress[Base] :
|
||||
# 757| v0_5(void) = Invoke : r0_4, this:r0_3
|
||||
# 757| r0_6(glval<String>) = FieldAddress[middle_s] : r0_2
|
||||
# 757| r0_7(glval<unknown>) = FunctionAddress[String] :
|
||||
# 757| v0_8(void) = Invoke : r0_7, this:r0_6
|
||||
# 758| v0_9(void) = NoOp :
|
||||
# 757| v0_10(void) = ReturnVoid :
|
||||
# 757| v0_11(void) = UnmodeledUse : mu*
|
||||
# 757| v0_12(void) = ExitFunction :
|
||||
|
||||
# 759| Middle::~Middle() -> void
|
||||
# 759| Block 0
|
||||
# 759| v0_0(void) = EnterFunction :
|
||||
# 759| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 759| r0_2(glval<Middle>) = InitializeThis :
|
||||
# 760| v0_3(void) = NoOp :
|
||||
# 760| r0_4(glval<String>) = FieldAddress[middle_s] : r0_2
|
||||
# 760| r0_5(bool) = FunctionAddress[~String] :
|
||||
# 760| v0_6(void) = Invoke : r0_5, this:r0_4
|
||||
# 760| r0_7(glval<Base>) = ConvertToBase[Middle : Base] : r0_2
|
||||
# 760| r0_8(bool) = FunctionAddress[~Base] :
|
||||
# 760| v0_9(void) = Invoke : r0_8, this:r0_7
|
||||
# 759| v0_10(void) = ReturnVoid :
|
||||
# 759| v0_11(void) = UnmodeledUse : mu*
|
||||
# 759| v0_12(void) = ExitFunction :
|
||||
# 759| v0_0(void) = EnterFunction :
|
||||
# 759| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 759| r0_2(glval<Middle>) = InitializeThis :
|
||||
# 760| v0_3(void) = NoOp :
|
||||
# 760| r0_4(glval<String>) = FieldAddress[middle_s] : r0_2
|
||||
# 760| r0_5(glval<unknown>) = FunctionAddress[~String] :
|
||||
# 760| v0_6(void) = Invoke : r0_5, this:r0_4
|
||||
# 760| r0_7(glval<Base>) = ConvertToBase[Middle : Base] : r0_2
|
||||
# 760| r0_8(glval<unknown>) = FunctionAddress[~Base] :
|
||||
# 760| v0_9(void) = Invoke : r0_8, this:r0_7
|
||||
# 759| v0_10(void) = ReturnVoid :
|
||||
# 759| v0_11(void) = UnmodeledUse : mu*
|
||||
# 759| v0_12(void) = ExitFunction :
|
||||
|
||||
# 763| Derived::operator=(const Derived &) -> Derived &
|
||||
# 763| Block 0
|
||||
@@ -3152,14 +3152,14 @@ ir.cpp:
|
||||
#-----| mu0_4(Derived &) = InitializeParameter[p#0] : r0_3
|
||||
#-----| r0_5(Derived *) = CopyValue : r0_2
|
||||
#-----| r0_6(Middle *) = ConvertToBase[Derived : Middle] : r0_5
|
||||
# 763| r0_7(bool) = FunctionAddress[operator=] :
|
||||
# 763| r0_7(glval<unknown>) = FunctionAddress[operator=] :
|
||||
#-----| r0_8(glval<Derived &>) = VariableAddress[p#0] :
|
||||
#-----| r0_9(Derived &) = Load : r0_8, mu0_1
|
||||
#-----| r0_10(Middle *) = ConvertToBase[Derived : Middle] : r0_9
|
||||
# 763| r0_11(Middle &) = Invoke : r0_7, this:r0_6, r0_10
|
||||
#-----| r0_12(Derived *) = CopyValue : r0_2
|
||||
#-----| r0_13(glval<String>) = FieldAddress[derived_s] : r0_12
|
||||
# 763| r0_14(bool) = FunctionAddress[operator=] :
|
||||
# 763| r0_14(glval<unknown>) = FunctionAddress[operator=] :
|
||||
#-----| r0_15(glval<Derived &>) = VariableAddress[p#0] :
|
||||
#-----| r0_16(Derived &) = Load : r0_15, mu0_1
|
||||
#-----| r0_17(glval<String>) = FieldAddress[derived_s] : r0_16
|
||||
@@ -3178,10 +3178,10 @@ ir.cpp:
|
||||
# 766| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 766| r0_2(glval<Derived>) = InitializeThis :
|
||||
# 766| r0_3(glval<Middle>) = ConvertToBase[Derived : Middle] : r0_2
|
||||
# 766| r0_4(bool) = FunctionAddress[Middle] :
|
||||
# 766| r0_4(glval<unknown>) = FunctionAddress[Middle] :
|
||||
# 766| v0_5(void) = Invoke : r0_4, this:r0_3
|
||||
# 766| r0_6(glval<String>) = FieldAddress[derived_s] : r0_2
|
||||
# 766| r0_7(bool) = FunctionAddress[String] :
|
||||
# 766| r0_7(glval<unknown>) = FunctionAddress[String] :
|
||||
# 766| v0_8(void) = Invoke : r0_7, this:r0_6
|
||||
# 767| v0_9(void) = NoOp :
|
||||
# 766| v0_10(void) = ReturnVoid :
|
||||
@@ -3195,10 +3195,10 @@ ir.cpp:
|
||||
# 768| r0_2(glval<Derived>) = InitializeThis :
|
||||
# 769| v0_3(void) = NoOp :
|
||||
# 769| r0_4(glval<String>) = FieldAddress[derived_s] : r0_2
|
||||
# 769| r0_5(bool) = FunctionAddress[~String] :
|
||||
# 769| r0_5(glval<unknown>) = FunctionAddress[~String] :
|
||||
# 769| v0_6(void) = Invoke : r0_5, this:r0_4
|
||||
# 769| r0_7(glval<Middle>) = ConvertToBase[Derived : Middle] : r0_2
|
||||
# 769| r0_8(bool) = FunctionAddress[~Middle] :
|
||||
# 769| r0_8(glval<unknown>) = FunctionAddress[~Middle] :
|
||||
# 769| v0_9(void) = Invoke : r0_8, this:r0_7
|
||||
# 768| v0_10(void) = ReturnVoid :
|
||||
# 768| v0_11(void) = UnmodeledUse : mu*
|
||||
@@ -3210,10 +3210,10 @@ ir.cpp:
|
||||
# 775| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 775| r0_2(glval<MiddleVB1>) = InitializeThis :
|
||||
# 775| r0_3(glval<Base>) = ConvertToBase[MiddleVB1 : Base] : r0_2
|
||||
# 775| r0_4(bool) = FunctionAddress[Base] :
|
||||
# 775| r0_4(glval<unknown>) = FunctionAddress[Base] :
|
||||
# 775| v0_5(void) = Invoke : r0_4, this:r0_3
|
||||
# 775| r0_6(glval<String>) = FieldAddress[middlevb1_s] : r0_2
|
||||
# 775| r0_7(bool) = FunctionAddress[String] :
|
||||
# 775| r0_7(glval<unknown>) = FunctionAddress[String] :
|
||||
# 775| v0_8(void) = Invoke : r0_7, this:r0_6
|
||||
# 776| v0_9(void) = NoOp :
|
||||
# 775| v0_10(void) = ReturnVoid :
|
||||
@@ -3227,10 +3227,10 @@ ir.cpp:
|
||||
# 777| r0_2(glval<MiddleVB1>) = InitializeThis :
|
||||
# 778| v0_3(void) = NoOp :
|
||||
# 778| r0_4(glval<String>) = FieldAddress[middlevb1_s] : r0_2
|
||||
# 778| r0_5(bool) = FunctionAddress[~String] :
|
||||
# 778| r0_5(glval<unknown>) = FunctionAddress[~String] :
|
||||
# 778| v0_6(void) = Invoke : r0_5, this:r0_4
|
||||
# 778| r0_7(glval<Base>) = ConvertToBase[MiddleVB1 : Base] : r0_2
|
||||
# 778| r0_8(bool) = FunctionAddress[~Base] :
|
||||
# 778| r0_8(glval<unknown>) = FunctionAddress[~Base] :
|
||||
# 778| v0_9(void) = Invoke : r0_8, this:r0_7
|
||||
# 777| v0_10(void) = ReturnVoid :
|
||||
# 777| v0_11(void) = UnmodeledUse : mu*
|
||||
@@ -3242,10 +3242,10 @@ ir.cpp:
|
||||
# 784| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 784| r0_2(glval<MiddleVB2>) = InitializeThis :
|
||||
# 784| r0_3(glval<Base>) = ConvertToBase[MiddleVB2 : Base] : r0_2
|
||||
# 784| r0_4(bool) = FunctionAddress[Base] :
|
||||
# 784| r0_4(glval<unknown>) = FunctionAddress[Base] :
|
||||
# 784| v0_5(void) = Invoke : r0_4, this:r0_3
|
||||
# 784| r0_6(glval<String>) = FieldAddress[middlevb2_s] : r0_2
|
||||
# 784| r0_7(bool) = FunctionAddress[String] :
|
||||
# 784| r0_7(glval<unknown>) = FunctionAddress[String] :
|
||||
# 784| v0_8(void) = Invoke : r0_7, this:r0_6
|
||||
# 785| v0_9(void) = NoOp :
|
||||
# 784| v0_10(void) = ReturnVoid :
|
||||
@@ -3259,10 +3259,10 @@ ir.cpp:
|
||||
# 786| r0_2(glval<MiddleVB2>) = InitializeThis :
|
||||
# 787| v0_3(void) = NoOp :
|
||||
# 787| r0_4(glval<String>) = FieldAddress[middlevb2_s] : r0_2
|
||||
# 787| r0_5(bool) = FunctionAddress[~String] :
|
||||
# 787| r0_5(glval<unknown>) = FunctionAddress[~String] :
|
||||
# 787| v0_6(void) = Invoke : r0_5, this:r0_4
|
||||
# 787| r0_7(glval<Base>) = ConvertToBase[MiddleVB2 : Base] : r0_2
|
||||
# 787| r0_8(bool) = FunctionAddress[~Base] :
|
||||
# 787| r0_8(glval<unknown>) = FunctionAddress[~Base] :
|
||||
# 787| v0_9(void) = Invoke : r0_8, this:r0_7
|
||||
# 786| v0_10(void) = ReturnVoid :
|
||||
# 786| v0_11(void) = UnmodeledUse : mu*
|
||||
@@ -3274,16 +3274,16 @@ ir.cpp:
|
||||
# 793| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 793| r0_2(glval<DerivedVB>) = InitializeThis :
|
||||
# 793| r0_3(glval<Base>) = ConvertToBase[DerivedVB : Base] : r0_2
|
||||
# 793| r0_4(bool) = FunctionAddress[Base] :
|
||||
# 793| r0_4(glval<unknown>) = FunctionAddress[Base] :
|
||||
# 793| v0_5(void) = Invoke : r0_4, this:r0_3
|
||||
# 793| r0_6(glval<MiddleVB1>) = ConvertToBase[DerivedVB : MiddleVB1] : r0_2
|
||||
# 793| r0_7(bool) = FunctionAddress[MiddleVB1] :
|
||||
# 793| r0_7(glval<unknown>) = FunctionAddress[MiddleVB1] :
|
||||
# 793| v0_8(void) = Invoke : r0_7, this:r0_6
|
||||
# 793| r0_9(glval<MiddleVB2>) = ConvertToBase[DerivedVB : MiddleVB2] : r0_2
|
||||
# 793| r0_10(bool) = FunctionAddress[MiddleVB2] :
|
||||
# 793| r0_10(glval<unknown>) = FunctionAddress[MiddleVB2] :
|
||||
# 793| v0_11(void) = Invoke : r0_10, this:r0_9
|
||||
# 793| r0_12(glval<String>) = FieldAddress[derivedvb_s] : r0_2
|
||||
# 793| r0_13(bool) = FunctionAddress[String] :
|
||||
# 793| r0_13(glval<unknown>) = FunctionAddress[String] :
|
||||
# 793| v0_14(void) = Invoke : r0_13, this:r0_12
|
||||
# 794| v0_15(void) = NoOp :
|
||||
# 793| v0_16(void) = ReturnVoid :
|
||||
@@ -3297,16 +3297,16 @@ ir.cpp:
|
||||
# 795| r0_2(glval<DerivedVB>) = InitializeThis :
|
||||
# 796| v0_3(void) = NoOp :
|
||||
# 796| r0_4(glval<String>) = FieldAddress[derivedvb_s] : r0_2
|
||||
# 796| r0_5(bool) = FunctionAddress[~String] :
|
||||
# 796| r0_5(glval<unknown>) = FunctionAddress[~String] :
|
||||
# 796| v0_6(void) = Invoke : r0_5, this:r0_4
|
||||
# 796| r0_7(glval<MiddleVB2>) = ConvertToBase[DerivedVB : MiddleVB2] : r0_2
|
||||
# 796| r0_8(bool) = FunctionAddress[~MiddleVB2] :
|
||||
# 796| r0_8(glval<unknown>) = FunctionAddress[~MiddleVB2] :
|
||||
# 796| v0_9(void) = Invoke : r0_8, this:r0_7
|
||||
# 796| r0_10(glval<MiddleVB1>) = ConvertToBase[DerivedVB : MiddleVB1] : r0_2
|
||||
# 796| r0_11(bool) = FunctionAddress[~MiddleVB1] :
|
||||
# 796| r0_11(glval<unknown>) = FunctionAddress[~MiddleVB1] :
|
||||
# 796| v0_12(void) = Invoke : r0_11, this:r0_10
|
||||
# 796| r0_13(glval<Base>) = ConvertToBase[DerivedVB : Base] : r0_2
|
||||
# 796| r0_14(bool) = FunctionAddress[~Base] :
|
||||
# 796| r0_14(glval<unknown>) = FunctionAddress[~Base] :
|
||||
# 796| v0_15(void) = Invoke : r0_14, this:r0_13
|
||||
# 795| v0_16(void) = ReturnVoid :
|
||||
# 795| v0_17(void) = UnmodeledUse : mu*
|
||||
@@ -3317,13 +3317,13 @@ ir.cpp:
|
||||
# 799| v0_0(void) = EnterFunction :
|
||||
# 799| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 800| r0_2(glval<Base>) = VariableAddress[b] :
|
||||
# 800| r0_3(bool) = FunctionAddress[Base] :
|
||||
# 800| r0_3(glval<unknown>) = FunctionAddress[Base] :
|
||||
# 800| v0_4(void) = Invoke : r0_3, this:r0_2
|
||||
# 801| r0_5(glval<Middle>) = VariableAddress[m] :
|
||||
# 801| r0_6(bool) = FunctionAddress[Middle] :
|
||||
# 801| r0_6(glval<unknown>) = FunctionAddress[Middle] :
|
||||
# 801| v0_7(void) = Invoke : r0_6, this:r0_5
|
||||
# 802| r0_8(glval<Derived>) = VariableAddress[d] :
|
||||
# 802| r0_9(bool) = FunctionAddress[Derived] :
|
||||
# 802| r0_9(glval<unknown>) = FunctionAddress[Derived] :
|
||||
# 802| v0_10(void) = Invoke : r0_9, this:r0_8
|
||||
# 804| r0_11(glval<Base *>) = VariableAddress[pb] :
|
||||
# 804| r0_12(glval<Base>) = VariableAddress[b] :
|
||||
@@ -3335,21 +3335,21 @@ ir.cpp:
|
||||
# 806| r0_18(glval<Derived>) = VariableAddress[d] :
|
||||
# 806| mu0_19(Derived *) = Store : r0_17, r0_18
|
||||
# 808| r0_20(glval<Base>) = VariableAddress[b] :
|
||||
# 808| r0_21(bool) = FunctionAddress[operator=] :
|
||||
# 808| r0_21(glval<unknown>) = FunctionAddress[operator=] :
|
||||
# 808| r0_22(glval<Middle>) = VariableAddress[m] :
|
||||
# 808| r0_23(glval<Base>) = ConvertToBase[Middle : Base] : r0_22
|
||||
# 808| r0_24(Base &) = Invoke : r0_21, this:r0_20, r0_23
|
||||
# 809| r0_25(glval<Base>) = VariableAddress[b] :
|
||||
# 809| r0_26(bool) = FunctionAddress[operator=] :
|
||||
# 809| r0_27(bool) = FunctionAddress[Base] :
|
||||
# 809| r0_26(glval<unknown>) = FunctionAddress[operator=] :
|
||||
# 809| r0_27(glval<unknown>) = FunctionAddress[Base] :
|
||||
# 809| r0_28(glval<Middle>) = VariableAddress[m] :
|
||||
# 809| r0_29(glval<Base>) = ConvertToBase[Middle : Base] : r0_28
|
||||
# 809| v0_30(void) = Invoke : r0_27, r0_29
|
||||
# 809| r0_31(Base) = Convert : v0_30
|
||||
# 809| r0_32(Base &) = Invoke : r0_26, this:r0_25, r0_31
|
||||
# 810| r0_33(glval<Base>) = VariableAddress[b] :
|
||||
# 810| r0_34(bool) = FunctionAddress[operator=] :
|
||||
# 810| r0_35(bool) = FunctionAddress[Base] :
|
||||
# 810| r0_34(glval<unknown>) = FunctionAddress[operator=] :
|
||||
# 810| r0_35(glval<unknown>) = FunctionAddress[Base] :
|
||||
# 810| r0_36(glval<Middle>) = VariableAddress[m] :
|
||||
# 810| r0_37(glval<Base>) = ConvertToBase[Middle : Base] : r0_36
|
||||
# 810| v0_38(void) = Invoke : r0_35, r0_37
|
||||
@@ -3376,13 +3376,13 @@ ir.cpp:
|
||||
# 814| r0_59(glval<Base *>) = VariableAddress[pb] :
|
||||
# 814| mu0_60(Base *) = Store : r0_59, r0_58
|
||||
# 816| r0_61(glval<Middle>) = VariableAddress[m] :
|
||||
# 816| r0_62(bool) = FunctionAddress[operator=] :
|
||||
# 816| r0_62(glval<unknown>) = FunctionAddress[operator=] :
|
||||
# 816| r0_63(glval<Base>) = VariableAddress[b] :
|
||||
# 816| r0_64(glval<Middle>) = ConvertToDerived[Middle : Base] : r0_63
|
||||
# 816| r0_65(glval<Middle>) = Convert : r0_64
|
||||
# 816| r0_66(Middle &) = Invoke : r0_62, this:r0_61, r0_65
|
||||
# 817| r0_67(glval<Middle>) = VariableAddress[m] :
|
||||
# 817| r0_68(bool) = FunctionAddress[operator=] :
|
||||
# 817| r0_68(glval<unknown>) = FunctionAddress[operator=] :
|
||||
# 817| r0_69(glval<Base>) = VariableAddress[b] :
|
||||
# 817| r0_70(glval<Middle>) = ConvertToDerived[Middle : Base] : r0_69
|
||||
# 817| r0_71(glval<Middle>) = Convert : r0_70
|
||||
@@ -3403,14 +3403,14 @@ ir.cpp:
|
||||
# 820| r0_86(glval<Middle *>) = VariableAddress[pm] :
|
||||
# 820| mu0_87(Middle *) = Store : r0_86, r0_85
|
||||
# 822| r0_88(glval<Base>) = VariableAddress[b] :
|
||||
# 822| r0_89(bool) = FunctionAddress[operator=] :
|
||||
# 822| r0_89(glval<unknown>) = FunctionAddress[operator=] :
|
||||
# 822| r0_90(glval<Derived>) = VariableAddress[d] :
|
||||
# 822| r0_91(glval<Middle>) = ConvertToBase[Derived : Middle] : r0_90
|
||||
# 822| r0_92(glval<Base>) = ConvertToBase[Middle : Base] : r0_91
|
||||
# 822| r0_93(Base &) = Invoke : r0_89, this:r0_88, r0_92
|
||||
# 823| r0_94(glval<Base>) = VariableAddress[b] :
|
||||
# 823| r0_95(bool) = FunctionAddress[operator=] :
|
||||
# 823| r0_96(bool) = FunctionAddress[Base] :
|
||||
# 823| r0_95(glval<unknown>) = FunctionAddress[operator=] :
|
||||
# 823| r0_96(glval<unknown>) = FunctionAddress[Base] :
|
||||
# 823| r0_97(glval<Derived>) = VariableAddress[d] :
|
||||
# 823| r0_98(glval<Middle>) = ConvertToBase[Derived : Middle] : r0_97
|
||||
# 823| r0_99(glval<Base>) = ConvertToBase[Middle : Base] : r0_98
|
||||
@@ -3418,8 +3418,8 @@ ir.cpp:
|
||||
# 823| r0_101(Base) = Convert : v0_100
|
||||
# 823| r0_102(Base &) = Invoke : r0_95, this:r0_94, r0_101
|
||||
# 824| r0_103(glval<Base>) = VariableAddress[b] :
|
||||
# 824| r0_104(bool) = FunctionAddress[operator=] :
|
||||
# 824| r0_105(bool) = FunctionAddress[Base] :
|
||||
# 824| r0_104(glval<unknown>) = FunctionAddress[operator=] :
|
||||
# 824| r0_105(glval<unknown>) = FunctionAddress[Base] :
|
||||
# 824| r0_106(glval<Derived>) = VariableAddress[d] :
|
||||
# 824| r0_107(glval<Middle>) = ConvertToBase[Derived : Middle] : r0_106
|
||||
# 824| r0_108(glval<Base>) = ConvertToBase[Middle : Base] : r0_107
|
||||
@@ -3450,14 +3450,14 @@ ir.cpp:
|
||||
# 828| r0_133(glval<Base *>) = VariableAddress[pb] :
|
||||
# 828| mu0_134(Base *) = Store : r0_133, r0_132
|
||||
# 830| r0_135(glval<Derived>) = VariableAddress[d] :
|
||||
# 830| r0_136(bool) = FunctionAddress[operator=] :
|
||||
# 830| r0_136(glval<unknown>) = FunctionAddress[operator=] :
|
||||
# 830| r0_137(glval<Base>) = VariableAddress[b] :
|
||||
# 830| r0_138(glval<Middle>) = ConvertToDerived[Middle : Base] : r0_137
|
||||
# 830| r0_139(glval<Derived>) = ConvertToDerived[Derived : Middle] : r0_138
|
||||
# 830| r0_140(glval<Derived>) = Convert : r0_139
|
||||
# 830| r0_141(Derived &) = Invoke : r0_136, this:r0_135, r0_140
|
||||
# 831| r0_142(glval<Derived>) = VariableAddress[d] :
|
||||
# 831| r0_143(bool) = FunctionAddress[operator=] :
|
||||
# 831| r0_143(glval<unknown>) = FunctionAddress[operator=] :
|
||||
# 831| r0_144(glval<Base>) = VariableAddress[b] :
|
||||
# 831| r0_145(glval<Middle>) = ConvertToDerived[Middle : Base] : r0_144
|
||||
# 831| r0_146(glval<Derived>) = ConvertToDerived[Derived : Middle] : r0_145
|
||||
@@ -3517,7 +3517,7 @@ ir.cpp:
|
||||
# 846| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 846| r0_2(glval<PolymorphicDerived>) = InitializeThis :
|
||||
# 846| r0_3(glval<PolymorphicBase>) = ConvertToBase[PolymorphicDerived : PolymorphicBase] : r0_2
|
||||
# 846| r0_4(bool) = FunctionAddress[PolymorphicBase] :
|
||||
# 846| r0_4(glval<unknown>) = FunctionAddress[PolymorphicBase] :
|
||||
# 846| v0_5(void) = Invoke : r0_4, this:r0_3
|
||||
# 846| v0_6(void) = NoOp :
|
||||
# 846| v0_7(void) = ReturnVoid :
|
||||
@@ -3531,7 +3531,7 @@ ir.cpp:
|
||||
# 846| r0_2(glval<PolymorphicDerived>) = InitializeThis :
|
||||
#-----| v0_3(void) = NoOp :
|
||||
# 846| r0_4(glval<PolymorphicBase>) = ConvertToBase[PolymorphicDerived : PolymorphicBase] : r0_2
|
||||
# 846| r0_5(bool) = FunctionAddress[~PolymorphicBase] :
|
||||
# 846| r0_5(glval<unknown>) = FunctionAddress[~PolymorphicBase] :
|
||||
# 846| v0_6(void) = Invoke : r0_5, this:r0_4
|
||||
# 846| v0_7(void) = ReturnVoid :
|
||||
# 846| v0_8(void) = UnmodeledUse : mu*
|
||||
@@ -3542,10 +3542,10 @@ ir.cpp:
|
||||
# 849| v0_0(void) = EnterFunction :
|
||||
# 849| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 850| r0_2(glval<PolymorphicBase>) = VariableAddress[b] :
|
||||
#-----| r0_3(bool) = FunctionAddress[PolymorphicBase] :
|
||||
#-----| r0_3(glval<unknown>) = FunctionAddress[PolymorphicBase] :
|
||||
#-----| v0_4(void) = Invoke : r0_3, this:r0_2
|
||||
# 851| r0_5(glval<PolymorphicDerived>) = VariableAddress[d] :
|
||||
# 851| r0_6(bool) = FunctionAddress[PolymorphicDerived] :
|
||||
# 851| r0_6(glval<unknown>) = FunctionAddress[PolymorphicDerived] :
|
||||
# 851| v0_7(void) = Invoke : r0_6, this:r0_5
|
||||
# 853| r0_8(glval<PolymorphicBase *>) = VariableAddress[pb] :
|
||||
# 853| r0_9(glval<PolymorphicBase>) = VariableAddress[b] :
|
||||
@@ -3591,7 +3591,7 @@ ir.cpp:
|
||||
# 867| v0_0(void) = EnterFunction :
|
||||
# 867| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 867| r0_2(glval<String>) = InitializeThis :
|
||||
# 868| r0_3(bool) = FunctionAddress[String] :
|
||||
# 868| r0_3(glval<unknown>) = FunctionAddress[String] :
|
||||
# 868| r0_4(glval<char[1]>) = StringConstant[""] :
|
||||
# 868| r0_5(char *) = Convert : r0_4
|
||||
# 868| v0_6(void) = Invoke : r0_3, this:r0_2, r0_5
|
||||
@@ -3762,3 +3762,126 @@ ir.cpp:
|
||||
# 906| r3_2(glval<int>) = VariableAddress[#temp906:11] :
|
||||
# 906| mu3_3(int) = Store : r3_2, r3_1
|
||||
#-----| Goto -> Block 1
|
||||
|
||||
# 940| OperatorNew() -> void
|
||||
# 940| Block 0
|
||||
# 940| v0_0(void) = EnterFunction :
|
||||
# 940| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 941| r0_2(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 941| r0_3(unsigned long) = Constant[4] :
|
||||
# 941| r0_4(void *) = Invoke : r0_2, r0_3
|
||||
# 941| r0_5(int *) = Convert : r0_4
|
||||
# 942| r0_6(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 942| r0_7(unsigned long) = Constant[4] :
|
||||
# 942| r0_8(float) = Constant[1.0] :
|
||||
# 942| r0_9(void *) = Invoke : r0_6, r0_7, r0_8
|
||||
# 942| r0_10(int *) = Convert : r0_9
|
||||
# 943| r0_11(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 943| r0_12(unsigned long) = Constant[4] :
|
||||
# 943| r0_13(void *) = Invoke : r0_11, r0_12
|
||||
# 943| r0_14(int *) = Convert : r0_13
|
||||
# 943| r0_15(int) = Constant[0] :
|
||||
# 943| mu0_16(int) = Store : r0_14, r0_15
|
||||
# 944| r0_17(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 944| r0_18(unsigned long) = Constant[8] :
|
||||
# 944| r0_19(void *) = Invoke : r0_17, r0_18
|
||||
# 944| r0_20(String *) = Convert : r0_19
|
||||
# 944| r0_21(glval<unknown>) = FunctionAddress[String] :
|
||||
# 944| v0_22(void) = Invoke : r0_21, this:r0_20
|
||||
# 945| r0_23(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 945| r0_24(unsigned long) = Constant[8] :
|
||||
# 945| r0_25(float) = Constant[1.0] :
|
||||
# 945| r0_26(void *) = Invoke : r0_23, r0_24, r0_25
|
||||
# 945| r0_27(String *) = Convert : r0_26
|
||||
# 945| r0_28(glval<unknown>) = FunctionAddress[String] :
|
||||
# 945| r0_29(glval<char[6]>) = StringConstant["hello"] :
|
||||
# 945| r0_30(char *) = Convert : r0_29
|
||||
# 945| v0_31(void) = Invoke : r0_28, this:r0_27, r0_30
|
||||
# 946| r0_32(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 946| r0_33(unsigned long) = Constant[256] :
|
||||
# 946| r0_34(align_val_t) = Constant[128] :
|
||||
# 946| r0_35(void *) = Invoke : r0_32, r0_33, r0_34
|
||||
# 946| r0_36(Overaligned *) = Convert : r0_35
|
||||
# 947| r0_37(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 947| r0_38(unsigned long) = Constant[256] :
|
||||
# 947| r0_39(align_val_t) = Constant[128] :
|
||||
# 947| r0_40(float) = Constant[1.0] :
|
||||
# 947| r0_41(void *) = Invoke : r0_37, r0_38, r0_39, r0_40
|
||||
# 947| r0_42(Overaligned *) = Convert : r0_41
|
||||
# 947| r0_43(Overaligned) = Constant[0] :
|
||||
# 947| mu0_44(Overaligned) = Store : r0_42, r0_43
|
||||
# 948| v0_45(void) = NoOp :
|
||||
# 940| v0_46(void) = ReturnVoid :
|
||||
# 940| v0_47(void) = UnmodeledUse : mu*
|
||||
# 940| v0_48(void) = ExitFunction :
|
||||
|
||||
# 950| OperatorNewArray(int) -> void
|
||||
# 950| Block 0
|
||||
# 950| v0_0(void) = EnterFunction :
|
||||
# 950| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 950| r0_2(glval<int>) = VariableAddress[n] :
|
||||
# 950| mu0_3(int) = InitializeParameter[n] : r0_2
|
||||
# 951| r0_4(glval<unknown>) = FunctionAddress[operator new[]] :
|
||||
# 951| r0_5(unsigned long) = Constant[40] :
|
||||
# 951| r0_6(void *) = Invoke : r0_4, r0_5
|
||||
# 951| r0_7(int *) = Convert : r0_6
|
||||
# 952| r0_8(glval<unknown>) = FunctionAddress[operator new[]] :
|
||||
# 952| r0_9(glval<int>) = VariableAddress[n] :
|
||||
# 952| r0_10(int) = Load : r0_9, mu0_1
|
||||
# 952| r0_11(unsigned long) = Convert : r0_10
|
||||
# 952| r0_12(unsigned long) = Constant[4] :
|
||||
# 952| r0_13(unsigned long) = Mul : r0_11, r0_12
|
||||
# 952| r0_14(void *) = Invoke : r0_8, r0_13
|
||||
# 952| r0_15(int *) = Convert : r0_14
|
||||
# 953| r0_16(glval<unknown>) = FunctionAddress[operator new[]] :
|
||||
# 953| r0_17(glval<int>) = VariableAddress[n] :
|
||||
# 953| r0_18(int) = Load : r0_17, mu0_1
|
||||
# 953| r0_19(unsigned long) = Convert : r0_18
|
||||
# 953| r0_20(unsigned long) = Constant[4] :
|
||||
# 953| r0_21(unsigned long) = Mul : r0_19, r0_20
|
||||
# 953| r0_22(float) = Constant[1.0] :
|
||||
# 953| r0_23(void *) = Invoke : r0_16, r0_21, r0_22
|
||||
# 953| r0_24(int *) = Convert : r0_23
|
||||
# 954| r0_25(glval<unknown>) = FunctionAddress[operator new[]] :
|
||||
# 954| r0_26(glval<int>) = VariableAddress[n] :
|
||||
# 954| r0_27(int) = Load : r0_26, mu0_1
|
||||
# 954| r0_28(unsigned long) = Convert : r0_27
|
||||
# 954| r0_29(unsigned long) = Constant[8] :
|
||||
# 954| r0_30(unsigned long) = Mul : r0_28, r0_29
|
||||
# 954| r0_31(void *) = Invoke : r0_25, r0_30
|
||||
# 954| r0_32(String *) = Convert : r0_31
|
||||
# 955| r0_33(glval<unknown>) = FunctionAddress[operator new[]] :
|
||||
# 955| r0_34(glval<int>) = VariableAddress[n] :
|
||||
# 955| r0_35(int) = Load : r0_34, mu0_1
|
||||
# 955| r0_36(unsigned long) = Convert : r0_35
|
||||
# 955| r0_37(unsigned long) = Constant[256] :
|
||||
# 955| r0_38(unsigned long) = Mul : r0_36, r0_37
|
||||
# 955| r0_39(align_val_t) = Constant[128] :
|
||||
# 955| r0_40(void *) = Invoke : r0_33, r0_38, r0_39
|
||||
# 955| r0_41(Overaligned *) = Convert : r0_40
|
||||
# 956| r0_42(glval<unknown>) = FunctionAddress[operator new[]] :
|
||||
# 956| r0_43(unsigned long) = Constant[2560] :
|
||||
# 956| r0_44(align_val_t) = Constant[128] :
|
||||
# 956| r0_45(float) = Constant[1.0] :
|
||||
# 956| r0_46(void *) = Invoke : r0_42, r0_43, r0_44, r0_45
|
||||
# 956| r0_47(Overaligned *) = Convert : r0_46
|
||||
# 957| r0_48(glval<unknown>) = FunctionAddress[operator new[]] :
|
||||
# 957| r0_49(glval<int>) = VariableAddress[n] :
|
||||
# 957| r0_50(int) = Load : r0_49, mu0_1
|
||||
# 957| r0_51(unsigned long) = Convert : r0_50
|
||||
# 957| r0_52(unsigned long) = Constant[1] :
|
||||
# 957| r0_53(unsigned long) = Mul : r0_51, r0_52
|
||||
# 957| r0_54(void *) = Invoke : r0_48, r0_53
|
||||
# 957| r0_55(DefaultCtorWithDefaultParam *) = Convert : r0_54
|
||||
# 958| r0_56(glval<unknown>) = FunctionAddress[operator new[]] :
|
||||
# 958| r0_57(glval<int>) = VariableAddress[n] :
|
||||
# 958| r0_58(int) = Load : r0_57, mu0_1
|
||||
# 958| r0_59(unsigned long) = Convert : r0_58
|
||||
# 958| r0_60(unsigned long) = Constant[4] :
|
||||
# 958| r0_61(unsigned long) = Mul : r0_59, r0_60
|
||||
# 958| r0_62(void *) = Invoke : r0_56, r0_61
|
||||
# 958| r0_63(int *) = Convert : r0_62
|
||||
# 959| v0_64(void) = NoOp :
|
||||
# 950| v0_65(void) = ReturnVoid :
|
||||
# 950| v0_66(void) = UnmodeledUse : mu*
|
||||
# 950| v0_67(void) = ExitFunction :
|
||||
|
||||
@@ -70,6 +70,8 @@
|
||||
| IR: MiddleVB2 | 1 |
|
||||
| IR: NestedInitList | 1 |
|
||||
| IR: Nullptr | 1 |
|
||||
| IR: OperatorNew | 1 |
|
||||
| IR: OperatorNewArray | 1 |
|
||||
| IR: Parameters | 1 |
|
||||
| IR: PointerCompare | 1 |
|
||||
| IR: PointerCrement | 1 |
|
||||
|
||||
@@ -1556,58 +1556,58 @@ ir.cpp:
|
||||
|
||||
# 372| Call() -> void
|
||||
# 372| Block 0
|
||||
# 372| v0_0(void) = EnterFunction :
|
||||
# 372| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 373| r0_2(bool) = FunctionAddress[VoidFunc] :
|
||||
# 373| v0_3(void) = Invoke : r0_2
|
||||
# 374| v0_4(void) = NoOp :
|
||||
# 372| v0_5(void) = ReturnVoid :
|
||||
# 372| v0_6(void) = UnmodeledUse : mu*
|
||||
# 372| v0_7(void) = ExitFunction :
|
||||
# 372| v0_0(void) = EnterFunction :
|
||||
# 372| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 373| r0_2(glval<unknown>) = FunctionAddress[VoidFunc] :
|
||||
# 373| v0_3(void) = Invoke : r0_2
|
||||
# 374| v0_4(void) = NoOp :
|
||||
# 372| v0_5(void) = ReturnVoid :
|
||||
# 372| v0_6(void) = UnmodeledUse : mu*
|
||||
# 372| v0_7(void) = ExitFunction :
|
||||
|
||||
# 376| CallAdd(int, int) -> int
|
||||
# 376| Block 0
|
||||
# 376| v0_0(void) = EnterFunction :
|
||||
# 376| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 376| r0_2(glval<int>) = VariableAddress[x] :
|
||||
# 376| m0_3(int) = InitializeParameter[x] : r0_2
|
||||
# 376| r0_4(glval<int>) = VariableAddress[y] :
|
||||
# 376| m0_5(int) = InitializeParameter[y] : r0_4
|
||||
# 377| r0_6(glval<int>) = VariableAddress[#return] :
|
||||
# 377| r0_7(bool) = FunctionAddress[Add] :
|
||||
# 377| r0_8(glval<int>) = VariableAddress[x] :
|
||||
# 377| r0_9(int) = Load : r0_8, m0_3
|
||||
# 377| r0_10(glval<int>) = VariableAddress[y] :
|
||||
# 377| r0_11(int) = Load : r0_10, m0_5
|
||||
# 377| r0_12(int) = Invoke : r0_7, r0_9, r0_11
|
||||
# 377| m0_13(int) = Store : r0_6, r0_12
|
||||
# 376| r0_14(glval<int>) = VariableAddress[#return] :
|
||||
# 376| v0_15(void) = ReturnValue : r0_14, m0_13
|
||||
# 376| v0_16(void) = UnmodeledUse : mu*
|
||||
# 376| v0_17(void) = ExitFunction :
|
||||
# 376| v0_0(void) = EnterFunction :
|
||||
# 376| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 376| r0_2(glval<int>) = VariableAddress[x] :
|
||||
# 376| m0_3(int) = InitializeParameter[x] : r0_2
|
||||
# 376| r0_4(glval<int>) = VariableAddress[y] :
|
||||
# 376| m0_5(int) = InitializeParameter[y] : r0_4
|
||||
# 377| r0_6(glval<int>) = VariableAddress[#return] :
|
||||
# 377| r0_7(glval<unknown>) = FunctionAddress[Add] :
|
||||
# 377| r0_8(glval<int>) = VariableAddress[x] :
|
||||
# 377| r0_9(int) = Load : r0_8, m0_3
|
||||
# 377| r0_10(glval<int>) = VariableAddress[y] :
|
||||
# 377| r0_11(int) = Load : r0_10, m0_5
|
||||
# 377| r0_12(int) = Invoke : r0_7, r0_9, r0_11
|
||||
# 377| m0_13(int) = Store : r0_6, r0_12
|
||||
# 376| r0_14(glval<int>) = VariableAddress[#return] :
|
||||
# 376| v0_15(void) = ReturnValue : r0_14, m0_13
|
||||
# 376| v0_16(void) = UnmodeledUse : mu*
|
||||
# 376| v0_17(void) = ExitFunction :
|
||||
|
||||
# 380| Comma(int, int) -> int
|
||||
# 380| Block 0
|
||||
# 380| v0_0(void) = EnterFunction :
|
||||
# 380| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 380| r0_2(glval<int>) = VariableAddress[x] :
|
||||
# 380| m0_3(int) = InitializeParameter[x] : r0_2
|
||||
# 380| r0_4(glval<int>) = VariableAddress[y] :
|
||||
# 380| m0_5(int) = InitializeParameter[y] : r0_4
|
||||
# 381| r0_6(glval<int>) = VariableAddress[#return] :
|
||||
# 381| r0_7(bool) = FunctionAddress[VoidFunc] :
|
||||
# 381| v0_8(void) = Invoke : r0_7
|
||||
# 381| r0_9(bool) = FunctionAddress[CallAdd] :
|
||||
# 381| r0_10(glval<int>) = VariableAddress[x] :
|
||||
# 381| r0_11(int) = Load : r0_10, m0_3
|
||||
# 381| r0_12(glval<int>) = VariableAddress[y] :
|
||||
# 381| r0_13(int) = Load : r0_12, m0_5
|
||||
# 381| r0_14(int) = Invoke : r0_9, r0_11, r0_13
|
||||
# 381| m0_15(int) = Store : r0_6, r0_14
|
||||
# 380| r0_16(glval<int>) = VariableAddress[#return] :
|
||||
# 380| v0_17(void) = ReturnValue : r0_16, m0_15
|
||||
# 380| v0_18(void) = UnmodeledUse : mu*
|
||||
# 380| v0_19(void) = ExitFunction :
|
||||
# 380| v0_0(void) = EnterFunction :
|
||||
# 380| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 380| r0_2(glval<int>) = VariableAddress[x] :
|
||||
# 380| m0_3(int) = InitializeParameter[x] : r0_2
|
||||
# 380| r0_4(glval<int>) = VariableAddress[y] :
|
||||
# 380| m0_5(int) = InitializeParameter[y] : r0_4
|
||||
# 381| r0_6(glval<int>) = VariableAddress[#return] :
|
||||
# 381| r0_7(glval<unknown>) = FunctionAddress[VoidFunc] :
|
||||
# 381| v0_8(void) = Invoke : r0_7
|
||||
# 381| r0_9(glval<unknown>) = FunctionAddress[CallAdd] :
|
||||
# 381| r0_10(glval<int>) = VariableAddress[x] :
|
||||
# 381| r0_11(int) = Load : r0_10, m0_3
|
||||
# 381| r0_12(glval<int>) = VariableAddress[y] :
|
||||
# 381| r0_13(int) = Load : r0_12, m0_5
|
||||
# 381| r0_14(int) = Invoke : r0_9, r0_11, r0_13
|
||||
# 381| m0_15(int) = Store : r0_6, r0_14
|
||||
# 380| r0_16(glval<int>) = VariableAddress[#return] :
|
||||
# 380| v0_17(void) = ReturnValue : r0_16, m0_15
|
||||
# 380| v0_18(void) = UnmodeledUse : mu*
|
||||
# 380| v0_19(void) = ExitFunction :
|
||||
|
||||
# 384| Switch(int) -> void
|
||||
# 384| Block 0
|
||||
@@ -2113,13 +2113,13 @@ ir.cpp:
|
||||
# 492| v1_3(void) = ExitFunction :
|
||||
|
||||
# 493| Block 2
|
||||
# 493| r2_0(bool) = FunctionAddress[VoidFunc] :
|
||||
# 493| v2_1(void) = Invoke : r2_0
|
||||
# 493| r2_0(glval<unknown>) = FunctionAddress[VoidFunc] :
|
||||
# 493| v2_1(void) = Invoke : r2_0
|
||||
#-----| Goto -> Block 1
|
||||
|
||||
# 493| Block 3
|
||||
# 493| r3_0(bool) = FunctionAddress[VoidFunc] :
|
||||
# 493| v3_1(void) = Invoke : r3_0
|
||||
# 493| r3_0(glval<unknown>) = FunctionAddress[VoidFunc] :
|
||||
# 493| v3_1(void) = Invoke : r3_0
|
||||
#-----| Goto -> Block 1
|
||||
|
||||
# 496| Nullptr() -> void
|
||||
@@ -2519,7 +2519,7 @@ ir.cpp:
|
||||
# 584| Block 0
|
||||
# 584| v0_0(void) = EnterFunction :
|
||||
# 584| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 585| r0_2(bool) = FunctionAddress[VarArgFunction] :
|
||||
# 585| r0_2(glval<unknown>) = FunctionAddress[VarArgFunction] :
|
||||
# 585| r0_3(glval<char[6]>) = StringConstant["%d %s"] :
|
||||
# 585| r0_4(char *) = Convert : r0_3
|
||||
# 585| r0_5(int) = Constant[1] :
|
||||
@@ -2557,19 +2557,19 @@ ir.cpp:
|
||||
# 615| v0_0(void) = EnterFunction :
|
||||
# 615| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 616| r0_2(glval<String>) = VariableAddress[s1] :
|
||||
# 616| r0_3(bool) = FunctionAddress[String] :
|
||||
# 616| r0_3(glval<unknown>) = FunctionAddress[String] :
|
||||
# 616| v0_4(void) = Invoke : r0_3, this:r0_2
|
||||
# 617| r0_5(glval<String>) = VariableAddress[s2] :
|
||||
# 617| r0_6(bool) = FunctionAddress[String] :
|
||||
# 617| r0_6(glval<unknown>) = FunctionAddress[String] :
|
||||
# 617| r0_7(glval<char[6]>) = StringConstant["hello"] :
|
||||
# 617| r0_8(char *) = Convert : r0_7
|
||||
# 617| v0_9(void) = Invoke : r0_6, this:r0_5, r0_8
|
||||
# 618| r0_10(glval<String>) = VariableAddress[s3] :
|
||||
# 618| r0_11(bool) = FunctionAddress[ReturnObject] :
|
||||
# 618| r0_11(glval<unknown>) = FunctionAddress[ReturnObject] :
|
||||
# 618| r0_12(String) = Invoke : r0_11
|
||||
# 618| m0_13(String) = Store : r0_10, r0_12
|
||||
# 619| r0_14(glval<String>) = VariableAddress[s4] :
|
||||
# 619| r0_15(bool) = FunctionAddress[String] :
|
||||
# 619| r0_15(glval<unknown>) = FunctionAddress[String] :
|
||||
# 619| r0_16(glval<char[5]>) = StringConstant["test"] :
|
||||
# 619| r0_17(char *) = Convert : r0_16
|
||||
# 619| v0_18(void) = Invoke : r0_15, this:r0_14, r0_17
|
||||
@@ -2591,16 +2591,16 @@ ir.cpp:
|
||||
# 623| r0_8(glval<String &>) = VariableAddress[r] :
|
||||
# 623| r0_9(String &) = Load : r0_8, m0_3
|
||||
# 623| r0_10(glval<String>) = Convert : r0_9
|
||||
# 623| r0_11(bool) = FunctionAddress[c_str] :
|
||||
# 623| r0_11(glval<unknown>) = FunctionAddress[c_str] :
|
||||
# 623| r0_12(char *) = Invoke : r0_11, this:r0_10
|
||||
# 624| r0_13(glval<String *>) = VariableAddress[p] :
|
||||
# 624| r0_14(String *) = Load : r0_13, m0_5
|
||||
# 624| r0_15(String *) = Convert : r0_14
|
||||
# 624| r0_16(bool) = FunctionAddress[c_str] :
|
||||
# 624| r0_16(glval<unknown>) = FunctionAddress[c_str] :
|
||||
# 624| r0_17(char *) = Invoke : r0_16, this:r0_15
|
||||
# 625| r0_18(glval<String>) = VariableAddress[s] :
|
||||
# 625| r0_19(glval<String>) = Convert : r0_18
|
||||
# 625| r0_20(bool) = FunctionAddress[c_str] :
|
||||
# 625| r0_20(glval<unknown>) = FunctionAddress[c_str] :
|
||||
# 625| r0_21(char *) = Invoke : r0_20, this:r0_19
|
||||
# 626| v0_22(void) = NoOp :
|
||||
# 622| v0_23(void) = ReturnVoid :
|
||||
@@ -2695,25 +2695,25 @@ ir.cpp:
|
||||
|
||||
# 652| C::MethodCalls() -> void
|
||||
# 652| Block 0
|
||||
# 652| v0_0(void) = EnterFunction :
|
||||
# 652| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 652| r0_2(glval<C>) = InitializeThis :
|
||||
# 653| r0_3(C *) = CopyValue : r0_2
|
||||
# 653| r0_4(bool) = FunctionAddress[InstanceMemberFunction] :
|
||||
# 653| r0_5(int) = Constant[0] :
|
||||
# 653| r0_6(int) = Invoke : r0_4, this:r0_3, r0_5
|
||||
# 654| r0_7(C *) = CopyValue : r0_2
|
||||
# 654| r0_8(bool) = FunctionAddress[InstanceMemberFunction] :
|
||||
# 654| r0_9(int) = Constant[1] :
|
||||
# 654| r0_10(int) = Invoke : r0_8, this:r0_7, r0_9
|
||||
#-----| r0_11(C *) = CopyValue : r0_2
|
||||
# 655| r0_12(bool) = FunctionAddress[InstanceMemberFunction] :
|
||||
# 655| r0_13(int) = Constant[2] :
|
||||
# 655| r0_14(int) = Invoke : r0_12, this:r0_11, r0_13
|
||||
# 656| v0_15(void) = NoOp :
|
||||
# 652| v0_16(void) = ReturnVoid :
|
||||
# 652| v0_17(void) = UnmodeledUse : mu*
|
||||
# 652| v0_18(void) = ExitFunction :
|
||||
# 652| v0_0(void) = EnterFunction :
|
||||
# 652| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 652| r0_2(glval<C>) = InitializeThis :
|
||||
# 653| r0_3(C *) = CopyValue : r0_2
|
||||
# 653| r0_4(glval<unknown>) = FunctionAddress[InstanceMemberFunction] :
|
||||
# 653| r0_5(int) = Constant[0] :
|
||||
# 653| r0_6(int) = Invoke : r0_4, this:r0_3, r0_5
|
||||
# 654| r0_7(C *) = CopyValue : r0_2
|
||||
# 654| r0_8(glval<unknown>) = FunctionAddress[InstanceMemberFunction] :
|
||||
# 654| r0_9(int) = Constant[1] :
|
||||
# 654| r0_10(int) = Invoke : r0_8, this:r0_7, r0_9
|
||||
#-----| r0_11(C *) = CopyValue : r0_2
|
||||
# 655| r0_12(glval<unknown>) = FunctionAddress[InstanceMemberFunction] :
|
||||
# 655| r0_13(int) = Constant[2] :
|
||||
# 655| r0_14(int) = Invoke : r0_12, this:r0_11, r0_13
|
||||
# 656| v0_15(void) = NoOp :
|
||||
# 652| v0_16(void) = ReturnVoid :
|
||||
# 652| v0_17(void) = UnmodeledUse : mu*
|
||||
# 652| v0_18(void) = ExitFunction :
|
||||
|
||||
# 658| C::C() -> void
|
||||
# 658| Block 0
|
||||
@@ -2724,7 +2724,7 @@ ir.cpp:
|
||||
# 659| r0_4(int) = Constant[1] :
|
||||
# 659| mu0_5(int) = Store : r0_3, r0_4
|
||||
# 663| r0_6(glval<String>) = FieldAddress[m_b] : r0_2
|
||||
# 663| r0_7(bool) = FunctionAddress[String] :
|
||||
# 663| r0_7(glval<unknown>) = FunctionAddress[String] :
|
||||
# 663| v0_8(void) = Invoke : r0_7, this:r0_6
|
||||
# 660| r0_9(glval<char>) = FieldAddress[m_c] : r0_2
|
||||
# 660| r0_10(char) = Constant[3] :
|
||||
@@ -2733,7 +2733,7 @@ ir.cpp:
|
||||
# 661| r0_13(void *) = Constant[0] :
|
||||
# 661| mu0_14(void *) = Store : r0_12, r0_13
|
||||
# 662| r0_15(glval<String>) = FieldAddress[m_f] : r0_2
|
||||
# 662| r0_16(bool) = FunctionAddress[String] :
|
||||
# 662| r0_16(glval<unknown>) = FunctionAddress[String] :
|
||||
# 662| r0_17(glval<char[5]>) = StringConstant["test"] :
|
||||
# 662| r0_18(char *) = Convert : r0_17
|
||||
# 662| v0_19(void) = Invoke : r0_16, this:r0_15, r0_18
|
||||
@@ -2784,7 +2784,7 @@ ir.cpp:
|
||||
# 687| r0_9(int &) = Load : r0_8, m0_6
|
||||
# 687| m0_10(int &) = Store : r0_7, r0_9
|
||||
# 688| r0_11(glval<String &>) = VariableAddress[r3] :
|
||||
# 688| r0_12(bool) = FunctionAddress[ReturnReference] :
|
||||
# 688| r0_12(glval<unknown>) = FunctionAddress[ReturnReference] :
|
||||
# 688| r0_13(String &) = Invoke : r0_12
|
||||
# 688| r0_14(glval<String>) = Convert : r0_13
|
||||
# 688| m0_15(String &) = Store : r0_11, r0_14
|
||||
@@ -2879,24 +2879,24 @@ ir.cpp:
|
||||
|
||||
# 708| CallMin(int, int) -> int
|
||||
# 708| Block 0
|
||||
# 708| v0_0(void) = EnterFunction :
|
||||
# 708| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 708| r0_2(glval<int>) = VariableAddress[x] :
|
||||
# 708| m0_3(int) = InitializeParameter[x] : r0_2
|
||||
# 708| r0_4(glval<int>) = VariableAddress[y] :
|
||||
# 708| m0_5(int) = InitializeParameter[y] : r0_4
|
||||
# 709| r0_6(glval<int>) = VariableAddress[#return] :
|
||||
# 709| r0_7(bool) = FunctionAddress[min] :
|
||||
# 709| r0_8(glval<int>) = VariableAddress[x] :
|
||||
# 709| r0_9(int) = Load : r0_8, m0_3
|
||||
# 709| r0_10(glval<int>) = VariableAddress[y] :
|
||||
# 709| r0_11(int) = Load : r0_10, m0_5
|
||||
# 709| r0_12(int) = Invoke : r0_7, r0_9, r0_11
|
||||
# 709| m0_13(int) = Store : r0_6, r0_12
|
||||
# 708| r0_14(glval<int>) = VariableAddress[#return] :
|
||||
# 708| v0_15(void) = ReturnValue : r0_14, m0_13
|
||||
# 708| v0_16(void) = UnmodeledUse : mu*
|
||||
# 708| v0_17(void) = ExitFunction :
|
||||
# 708| v0_0(void) = EnterFunction :
|
||||
# 708| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 708| r0_2(glval<int>) = VariableAddress[x] :
|
||||
# 708| m0_3(int) = InitializeParameter[x] : r0_2
|
||||
# 708| r0_4(glval<int>) = VariableAddress[y] :
|
||||
# 708| m0_5(int) = InitializeParameter[y] : r0_4
|
||||
# 709| r0_6(glval<int>) = VariableAddress[#return] :
|
||||
# 709| r0_7(glval<unknown>) = FunctionAddress[min] :
|
||||
# 709| r0_8(glval<int>) = VariableAddress[x] :
|
||||
# 709| r0_9(int) = Load : r0_8, m0_3
|
||||
# 709| r0_10(glval<int>) = VariableAddress[y] :
|
||||
# 709| r0_11(int) = Load : r0_10, m0_5
|
||||
# 709| r0_12(int) = Invoke : r0_7, r0_9, r0_11
|
||||
# 709| m0_13(int) = Store : r0_6, r0_12
|
||||
# 708| r0_14(glval<int>) = VariableAddress[#return] :
|
||||
# 708| v0_15(void) = ReturnValue : r0_14, m0_13
|
||||
# 708| v0_16(void) = UnmodeledUse : mu*
|
||||
# 708| v0_17(void) = ExitFunction :
|
||||
|
||||
# 715| Outer<long>::Func<void *, char>(void *, char) -> long
|
||||
# 715| Block 0
|
||||
@@ -2916,19 +2916,19 @@ ir.cpp:
|
||||
|
||||
# 720| CallNestedTemplateFunc() -> double
|
||||
# 720| Block 0
|
||||
# 720| v0_0(void) = EnterFunction :
|
||||
# 720| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 721| r0_2(glval<double>) = VariableAddress[#return] :
|
||||
# 721| r0_3(bool) = FunctionAddress[Func] :
|
||||
# 721| r0_4(void *) = Constant[0] :
|
||||
# 721| r0_5(char) = Constant[111] :
|
||||
# 721| r0_6(long) = Invoke : r0_3, r0_4, r0_5
|
||||
# 721| r0_7(double) = Convert : r0_6
|
||||
# 721| m0_8(double) = Store : r0_2, r0_7
|
||||
# 720| r0_9(glval<double>) = VariableAddress[#return] :
|
||||
# 720| v0_10(void) = ReturnValue : r0_9, m0_8
|
||||
# 720| v0_11(void) = UnmodeledUse : mu*
|
||||
# 720| v0_12(void) = ExitFunction :
|
||||
# 720| v0_0(void) = EnterFunction :
|
||||
# 720| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 721| r0_2(glval<double>) = VariableAddress[#return] :
|
||||
# 721| r0_3(glval<unknown>) = FunctionAddress[Func] :
|
||||
# 721| r0_4(void *) = Constant[0] :
|
||||
# 721| r0_5(char) = Constant[111] :
|
||||
# 721| r0_6(long) = Invoke : r0_3, r0_4, r0_5
|
||||
# 721| r0_7(double) = Convert : r0_6
|
||||
# 721| m0_8(double) = Store : r0_2, r0_7
|
||||
# 720| r0_9(glval<double>) = VariableAddress[#return] :
|
||||
# 720| v0_10(void) = ReturnValue : r0_9, m0_8
|
||||
# 720| v0_11(void) = UnmodeledUse : mu*
|
||||
# 720| v0_12(void) = ExitFunction :
|
||||
|
||||
# 724| TryCatch(bool) -> void
|
||||
# 724| Block 0
|
||||
@@ -2989,7 +2989,7 @@ ir.cpp:
|
||||
|
||||
# 731| Block 7
|
||||
# 731| r7_0(glval<String>) = VariableAddress[#throw731:19] :
|
||||
# 731| r7_1(bool) = FunctionAddress[String] :
|
||||
# 731| r7_1(glval<unknown>) = FunctionAddress[String] :
|
||||
# 731| r7_2(glval<char[14]>) = StringConstant["String object"] :
|
||||
# 731| r7_3(char *) = Convert : r7_2
|
||||
# 731| v7_4(void) = Invoke : r7_1, this:r7_0, r7_3
|
||||
@@ -3008,14 +3008,14 @@ ir.cpp:
|
||||
#-----| Goto -> Block 10
|
||||
|
||||
# 735| Block 10
|
||||
# 735| r10_0(glval<char *>) = VariableAddress[s] :
|
||||
# 735| m10_1(char *) = InitializeParameter[s] : r10_0
|
||||
# 736| r10_2(glval<String>) = VariableAddress[#throw736:5] :
|
||||
# 736| r10_3(bool) = FunctionAddress[String] :
|
||||
# 736| r10_4(glval<char *>) = VariableAddress[s] :
|
||||
# 736| r10_5(char *) = Load : r10_4, m10_1
|
||||
# 736| v10_6(void) = Invoke : r10_3, this:r10_2, r10_5
|
||||
# 736| v10_7(void) = ThrowValue : r10_2, mu0_1
|
||||
# 735| r10_0(glval<char *>) = VariableAddress[s] :
|
||||
# 735| m10_1(char *) = InitializeParameter[s] : r10_0
|
||||
# 736| r10_2(glval<String>) = VariableAddress[#throw736:5] :
|
||||
# 736| r10_3(glval<unknown>) = FunctionAddress[String] :
|
||||
# 736| r10_4(glval<char *>) = VariableAddress[s] :
|
||||
# 736| r10_5(char *) = Load : r10_4, m10_1
|
||||
# 736| v10_6(void) = Invoke : r10_3, this:r10_2, r10_5
|
||||
# 736| v10_7(void) = ThrowValue : r10_2, mu0_1
|
||||
#-----| Exception -> Block 2
|
||||
|
||||
# 738| Block 11
|
||||
@@ -3041,18 +3041,18 @@ ir.cpp:
|
||||
|
||||
# 745| Base::Base(const Base &) -> void
|
||||
# 745| Block 0
|
||||
# 745| v0_0(void) = EnterFunction :
|
||||
# 745| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 745| r0_2(glval<Base>) = InitializeThis :
|
||||
#-----| r0_3(glval<Base &>) = VariableAddress[p#0] :
|
||||
#-----| m0_4(Base &) = InitializeParameter[p#0] : r0_3
|
||||
# 745| r0_5(glval<String>) = FieldAddress[base_s] : r0_2
|
||||
# 745| r0_6(bool) = FunctionAddress[String] :
|
||||
# 745| v0_7(void) = Invoke : r0_6, this:r0_5
|
||||
# 745| v0_8(void) = NoOp :
|
||||
# 745| v0_9(void) = ReturnVoid :
|
||||
# 745| v0_10(void) = UnmodeledUse : mu*
|
||||
# 745| v0_11(void) = ExitFunction :
|
||||
# 745| v0_0(void) = EnterFunction :
|
||||
# 745| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 745| r0_2(glval<Base>) = InitializeThis :
|
||||
#-----| r0_3(glval<Base &>) = VariableAddress[p#0] :
|
||||
#-----| m0_4(Base &) = InitializeParameter[p#0] : r0_3
|
||||
# 745| r0_5(glval<String>) = FieldAddress[base_s] : r0_2
|
||||
# 745| r0_6(glval<unknown>) = FunctionAddress[String] :
|
||||
# 745| v0_7(void) = Invoke : r0_6, this:r0_5
|
||||
# 745| v0_8(void) = NoOp :
|
||||
# 745| v0_9(void) = ReturnVoid :
|
||||
# 745| v0_10(void) = UnmodeledUse : mu*
|
||||
# 745| v0_11(void) = ExitFunction :
|
||||
|
||||
# 745| Base::operator=(const Base &) -> Base &
|
||||
# 745| Block 0
|
||||
@@ -3063,7 +3063,7 @@ ir.cpp:
|
||||
#-----| m0_4(Base &) = InitializeParameter[p#0] : r0_3
|
||||
#-----| r0_5(Base *) = CopyValue : r0_2
|
||||
#-----| r0_6(glval<String>) = FieldAddress[base_s] : r0_5
|
||||
# 745| r0_7(bool) = FunctionAddress[operator=] :
|
||||
# 745| r0_7(glval<unknown>) = FunctionAddress[operator=] :
|
||||
#-----| r0_8(glval<Base &>) = VariableAddress[p#0] :
|
||||
#-----| r0_9(Base &) = Load : r0_8, m0_4
|
||||
#-----| r0_10(glval<String>) = FieldAddress[base_s] : r0_9
|
||||
@@ -3078,29 +3078,29 @@ ir.cpp:
|
||||
|
||||
# 748| Base::Base() -> void
|
||||
# 748| Block 0
|
||||
# 748| v0_0(void) = EnterFunction :
|
||||
# 748| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 748| r0_2(glval<Base>) = InitializeThis :
|
||||
# 748| r0_3(glval<String>) = FieldAddress[base_s] : r0_2
|
||||
# 748| r0_4(bool) = FunctionAddress[String] :
|
||||
# 748| v0_5(void) = Invoke : r0_4, this:r0_3
|
||||
# 749| v0_6(void) = NoOp :
|
||||
# 748| v0_7(void) = ReturnVoid :
|
||||
# 748| v0_8(void) = UnmodeledUse : mu*
|
||||
# 748| v0_9(void) = ExitFunction :
|
||||
# 748| v0_0(void) = EnterFunction :
|
||||
# 748| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 748| r0_2(glval<Base>) = InitializeThis :
|
||||
# 748| r0_3(glval<String>) = FieldAddress[base_s] : r0_2
|
||||
# 748| r0_4(glval<unknown>) = FunctionAddress[String] :
|
||||
# 748| v0_5(void) = Invoke : r0_4, this:r0_3
|
||||
# 749| v0_6(void) = NoOp :
|
||||
# 748| v0_7(void) = ReturnVoid :
|
||||
# 748| v0_8(void) = UnmodeledUse : mu*
|
||||
# 748| v0_9(void) = ExitFunction :
|
||||
|
||||
# 750| Base::~Base() -> void
|
||||
# 750| Block 0
|
||||
# 750| v0_0(void) = EnterFunction :
|
||||
# 750| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 750| r0_2(glval<Base>) = InitializeThis :
|
||||
# 751| v0_3(void) = NoOp :
|
||||
# 751| r0_4(glval<String>) = FieldAddress[base_s] : r0_2
|
||||
# 751| r0_5(bool) = FunctionAddress[~String] :
|
||||
# 751| v0_6(void) = Invoke : r0_5, this:r0_4
|
||||
# 750| v0_7(void) = ReturnVoid :
|
||||
# 750| v0_8(void) = UnmodeledUse : mu*
|
||||
# 750| v0_9(void) = ExitFunction :
|
||||
# 750| v0_0(void) = EnterFunction :
|
||||
# 750| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 750| r0_2(glval<Base>) = InitializeThis :
|
||||
# 751| v0_3(void) = NoOp :
|
||||
# 751| r0_4(glval<String>) = FieldAddress[base_s] : r0_2
|
||||
# 751| r0_5(glval<unknown>) = FunctionAddress[~String] :
|
||||
# 751| v0_6(void) = Invoke : r0_5, this:r0_4
|
||||
# 750| v0_7(void) = ReturnVoid :
|
||||
# 750| v0_8(void) = UnmodeledUse : mu*
|
||||
# 750| v0_9(void) = ExitFunction :
|
||||
|
||||
# 754| Middle::operator=(const Middle &) -> Middle &
|
||||
# 754| Block 0
|
||||
@@ -3111,14 +3111,14 @@ ir.cpp:
|
||||
#-----| m0_4(Middle &) = InitializeParameter[p#0] : r0_3
|
||||
#-----| r0_5(Middle *) = CopyValue : r0_2
|
||||
#-----| r0_6(Base *) = ConvertToBase[Middle : Base] : r0_5
|
||||
# 754| r0_7(bool) = FunctionAddress[operator=] :
|
||||
# 754| r0_7(glval<unknown>) = FunctionAddress[operator=] :
|
||||
#-----| r0_8(glval<Middle &>) = VariableAddress[p#0] :
|
||||
#-----| r0_9(Middle &) = Load : r0_8, m0_4
|
||||
#-----| r0_10(Base *) = ConvertToBase[Middle : Base] : r0_9
|
||||
# 754| r0_11(Base &) = Invoke : r0_7, this:r0_6, r0_10
|
||||
#-----| r0_12(Middle *) = CopyValue : r0_2
|
||||
#-----| r0_13(glval<String>) = FieldAddress[middle_s] : r0_12
|
||||
# 754| r0_14(bool) = FunctionAddress[operator=] :
|
||||
# 754| r0_14(glval<unknown>) = FunctionAddress[operator=] :
|
||||
#-----| r0_15(glval<Middle &>) = VariableAddress[p#0] :
|
||||
#-----| r0_16(Middle &) = Load : r0_15, m0_4
|
||||
#-----| r0_17(glval<String>) = FieldAddress[middle_s] : r0_16
|
||||
@@ -3133,35 +3133,35 @@ ir.cpp:
|
||||
|
||||
# 757| Middle::Middle() -> void
|
||||
# 757| Block 0
|
||||
# 757| v0_0(void) = EnterFunction :
|
||||
# 757| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 757| r0_2(glval<Middle>) = InitializeThis :
|
||||
# 757| r0_3(glval<Base>) = ConvertToBase[Middle : Base] : r0_2
|
||||
# 757| r0_4(bool) = FunctionAddress[Base] :
|
||||
# 757| v0_5(void) = Invoke : r0_4, this:r0_3
|
||||
# 757| r0_6(glval<String>) = FieldAddress[middle_s] : r0_2
|
||||
# 757| r0_7(bool) = FunctionAddress[String] :
|
||||
# 757| v0_8(void) = Invoke : r0_7, this:r0_6
|
||||
# 758| v0_9(void) = NoOp :
|
||||
# 757| v0_10(void) = ReturnVoid :
|
||||
# 757| v0_11(void) = UnmodeledUse : mu*
|
||||
# 757| v0_12(void) = ExitFunction :
|
||||
# 757| v0_0(void) = EnterFunction :
|
||||
# 757| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 757| r0_2(glval<Middle>) = InitializeThis :
|
||||
# 757| r0_3(glval<Base>) = ConvertToBase[Middle : Base] : r0_2
|
||||
# 757| r0_4(glval<unknown>) = FunctionAddress[Base] :
|
||||
# 757| v0_5(void) = Invoke : r0_4, this:r0_3
|
||||
# 757| r0_6(glval<String>) = FieldAddress[middle_s] : r0_2
|
||||
# 757| r0_7(glval<unknown>) = FunctionAddress[String] :
|
||||
# 757| v0_8(void) = Invoke : r0_7, this:r0_6
|
||||
# 758| v0_9(void) = NoOp :
|
||||
# 757| v0_10(void) = ReturnVoid :
|
||||
# 757| v0_11(void) = UnmodeledUse : mu*
|
||||
# 757| v0_12(void) = ExitFunction :
|
||||
|
||||
# 759| Middle::~Middle() -> void
|
||||
# 759| Block 0
|
||||
# 759| v0_0(void) = EnterFunction :
|
||||
# 759| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 759| r0_2(glval<Middle>) = InitializeThis :
|
||||
# 760| v0_3(void) = NoOp :
|
||||
# 760| r0_4(glval<String>) = FieldAddress[middle_s] : r0_2
|
||||
# 760| r0_5(bool) = FunctionAddress[~String] :
|
||||
# 760| v0_6(void) = Invoke : r0_5, this:r0_4
|
||||
# 760| r0_7(glval<Base>) = ConvertToBase[Middle : Base] : r0_2
|
||||
# 760| r0_8(bool) = FunctionAddress[~Base] :
|
||||
# 760| v0_9(void) = Invoke : r0_8, this:r0_7
|
||||
# 759| v0_10(void) = ReturnVoid :
|
||||
# 759| v0_11(void) = UnmodeledUse : mu*
|
||||
# 759| v0_12(void) = ExitFunction :
|
||||
# 759| v0_0(void) = EnterFunction :
|
||||
# 759| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 759| r0_2(glval<Middle>) = InitializeThis :
|
||||
# 760| v0_3(void) = NoOp :
|
||||
# 760| r0_4(glval<String>) = FieldAddress[middle_s] : r0_2
|
||||
# 760| r0_5(glval<unknown>) = FunctionAddress[~String] :
|
||||
# 760| v0_6(void) = Invoke : r0_5, this:r0_4
|
||||
# 760| r0_7(glval<Base>) = ConvertToBase[Middle : Base] : r0_2
|
||||
# 760| r0_8(glval<unknown>) = FunctionAddress[~Base] :
|
||||
# 760| v0_9(void) = Invoke : r0_8, this:r0_7
|
||||
# 759| v0_10(void) = ReturnVoid :
|
||||
# 759| v0_11(void) = UnmodeledUse : mu*
|
||||
# 759| v0_12(void) = ExitFunction :
|
||||
|
||||
# 763| Derived::operator=(const Derived &) -> Derived &
|
||||
# 763| Block 0
|
||||
@@ -3172,14 +3172,14 @@ ir.cpp:
|
||||
#-----| m0_4(Derived &) = InitializeParameter[p#0] : r0_3
|
||||
#-----| r0_5(Derived *) = CopyValue : r0_2
|
||||
#-----| r0_6(Middle *) = ConvertToBase[Derived : Middle] : r0_5
|
||||
# 763| r0_7(bool) = FunctionAddress[operator=] :
|
||||
# 763| r0_7(glval<unknown>) = FunctionAddress[operator=] :
|
||||
#-----| r0_8(glval<Derived &>) = VariableAddress[p#0] :
|
||||
#-----| r0_9(Derived &) = Load : r0_8, m0_4
|
||||
#-----| r0_10(Middle *) = ConvertToBase[Derived : Middle] : r0_9
|
||||
# 763| r0_11(Middle &) = Invoke : r0_7, this:r0_6, r0_10
|
||||
#-----| r0_12(Derived *) = CopyValue : r0_2
|
||||
#-----| r0_13(glval<String>) = FieldAddress[derived_s] : r0_12
|
||||
# 763| r0_14(bool) = FunctionAddress[operator=] :
|
||||
# 763| r0_14(glval<unknown>) = FunctionAddress[operator=] :
|
||||
#-----| r0_15(glval<Derived &>) = VariableAddress[p#0] :
|
||||
#-----| r0_16(Derived &) = Load : r0_15, m0_4
|
||||
#-----| r0_17(glval<String>) = FieldAddress[derived_s] : r0_16
|
||||
@@ -3198,10 +3198,10 @@ ir.cpp:
|
||||
# 766| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 766| r0_2(glval<Derived>) = InitializeThis :
|
||||
# 766| r0_3(glval<Middle>) = ConvertToBase[Derived : Middle] : r0_2
|
||||
# 766| r0_4(bool) = FunctionAddress[Middle] :
|
||||
# 766| r0_4(glval<unknown>) = FunctionAddress[Middle] :
|
||||
# 766| v0_5(void) = Invoke : r0_4, this:r0_3
|
||||
# 766| r0_6(glval<String>) = FieldAddress[derived_s] : r0_2
|
||||
# 766| r0_7(bool) = FunctionAddress[String] :
|
||||
# 766| r0_7(glval<unknown>) = FunctionAddress[String] :
|
||||
# 766| v0_8(void) = Invoke : r0_7, this:r0_6
|
||||
# 767| v0_9(void) = NoOp :
|
||||
# 766| v0_10(void) = ReturnVoid :
|
||||
@@ -3215,10 +3215,10 @@ ir.cpp:
|
||||
# 768| r0_2(glval<Derived>) = InitializeThis :
|
||||
# 769| v0_3(void) = NoOp :
|
||||
# 769| r0_4(glval<String>) = FieldAddress[derived_s] : r0_2
|
||||
# 769| r0_5(bool) = FunctionAddress[~String] :
|
||||
# 769| r0_5(glval<unknown>) = FunctionAddress[~String] :
|
||||
# 769| v0_6(void) = Invoke : r0_5, this:r0_4
|
||||
# 769| r0_7(glval<Middle>) = ConvertToBase[Derived : Middle] : r0_2
|
||||
# 769| r0_8(bool) = FunctionAddress[~Middle] :
|
||||
# 769| r0_8(glval<unknown>) = FunctionAddress[~Middle] :
|
||||
# 769| v0_9(void) = Invoke : r0_8, this:r0_7
|
||||
# 768| v0_10(void) = ReturnVoid :
|
||||
# 768| v0_11(void) = UnmodeledUse : mu*
|
||||
@@ -3230,10 +3230,10 @@ ir.cpp:
|
||||
# 775| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 775| r0_2(glval<MiddleVB1>) = InitializeThis :
|
||||
# 775| r0_3(glval<Base>) = ConvertToBase[MiddleVB1 : Base] : r0_2
|
||||
# 775| r0_4(bool) = FunctionAddress[Base] :
|
||||
# 775| r0_4(glval<unknown>) = FunctionAddress[Base] :
|
||||
# 775| v0_5(void) = Invoke : r0_4, this:r0_3
|
||||
# 775| r0_6(glval<String>) = FieldAddress[middlevb1_s] : r0_2
|
||||
# 775| r0_7(bool) = FunctionAddress[String] :
|
||||
# 775| r0_7(glval<unknown>) = FunctionAddress[String] :
|
||||
# 775| v0_8(void) = Invoke : r0_7, this:r0_6
|
||||
# 776| v0_9(void) = NoOp :
|
||||
# 775| v0_10(void) = ReturnVoid :
|
||||
@@ -3247,10 +3247,10 @@ ir.cpp:
|
||||
# 777| r0_2(glval<MiddleVB1>) = InitializeThis :
|
||||
# 778| v0_3(void) = NoOp :
|
||||
# 778| r0_4(glval<String>) = FieldAddress[middlevb1_s] : r0_2
|
||||
# 778| r0_5(bool) = FunctionAddress[~String] :
|
||||
# 778| r0_5(glval<unknown>) = FunctionAddress[~String] :
|
||||
# 778| v0_6(void) = Invoke : r0_5, this:r0_4
|
||||
# 778| r0_7(glval<Base>) = ConvertToBase[MiddleVB1 : Base] : r0_2
|
||||
# 778| r0_8(bool) = FunctionAddress[~Base] :
|
||||
# 778| r0_8(glval<unknown>) = FunctionAddress[~Base] :
|
||||
# 778| v0_9(void) = Invoke : r0_8, this:r0_7
|
||||
# 777| v0_10(void) = ReturnVoid :
|
||||
# 777| v0_11(void) = UnmodeledUse : mu*
|
||||
@@ -3262,10 +3262,10 @@ ir.cpp:
|
||||
# 784| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 784| r0_2(glval<MiddleVB2>) = InitializeThis :
|
||||
# 784| r0_3(glval<Base>) = ConvertToBase[MiddleVB2 : Base] : r0_2
|
||||
# 784| r0_4(bool) = FunctionAddress[Base] :
|
||||
# 784| r0_4(glval<unknown>) = FunctionAddress[Base] :
|
||||
# 784| v0_5(void) = Invoke : r0_4, this:r0_3
|
||||
# 784| r0_6(glval<String>) = FieldAddress[middlevb2_s] : r0_2
|
||||
# 784| r0_7(bool) = FunctionAddress[String] :
|
||||
# 784| r0_7(glval<unknown>) = FunctionAddress[String] :
|
||||
# 784| v0_8(void) = Invoke : r0_7, this:r0_6
|
||||
# 785| v0_9(void) = NoOp :
|
||||
# 784| v0_10(void) = ReturnVoid :
|
||||
@@ -3279,10 +3279,10 @@ ir.cpp:
|
||||
# 786| r0_2(glval<MiddleVB2>) = InitializeThis :
|
||||
# 787| v0_3(void) = NoOp :
|
||||
# 787| r0_4(glval<String>) = FieldAddress[middlevb2_s] : r0_2
|
||||
# 787| r0_5(bool) = FunctionAddress[~String] :
|
||||
# 787| r0_5(glval<unknown>) = FunctionAddress[~String] :
|
||||
# 787| v0_6(void) = Invoke : r0_5, this:r0_4
|
||||
# 787| r0_7(glval<Base>) = ConvertToBase[MiddleVB2 : Base] : r0_2
|
||||
# 787| r0_8(bool) = FunctionAddress[~Base] :
|
||||
# 787| r0_8(glval<unknown>) = FunctionAddress[~Base] :
|
||||
# 787| v0_9(void) = Invoke : r0_8, this:r0_7
|
||||
# 786| v0_10(void) = ReturnVoid :
|
||||
# 786| v0_11(void) = UnmodeledUse : mu*
|
||||
@@ -3294,16 +3294,16 @@ ir.cpp:
|
||||
# 793| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 793| r0_2(glval<DerivedVB>) = InitializeThis :
|
||||
# 793| r0_3(glval<Base>) = ConvertToBase[DerivedVB : Base] : r0_2
|
||||
# 793| r0_4(bool) = FunctionAddress[Base] :
|
||||
# 793| r0_4(glval<unknown>) = FunctionAddress[Base] :
|
||||
# 793| v0_5(void) = Invoke : r0_4, this:r0_3
|
||||
# 793| r0_6(glval<MiddleVB1>) = ConvertToBase[DerivedVB : MiddleVB1] : r0_2
|
||||
# 793| r0_7(bool) = FunctionAddress[MiddleVB1] :
|
||||
# 793| r0_7(glval<unknown>) = FunctionAddress[MiddleVB1] :
|
||||
# 793| v0_8(void) = Invoke : r0_7, this:r0_6
|
||||
# 793| r0_9(glval<MiddleVB2>) = ConvertToBase[DerivedVB : MiddleVB2] : r0_2
|
||||
# 793| r0_10(bool) = FunctionAddress[MiddleVB2] :
|
||||
# 793| r0_10(glval<unknown>) = FunctionAddress[MiddleVB2] :
|
||||
# 793| v0_11(void) = Invoke : r0_10, this:r0_9
|
||||
# 793| r0_12(glval<String>) = FieldAddress[derivedvb_s] : r0_2
|
||||
# 793| r0_13(bool) = FunctionAddress[String] :
|
||||
# 793| r0_13(glval<unknown>) = FunctionAddress[String] :
|
||||
# 793| v0_14(void) = Invoke : r0_13, this:r0_12
|
||||
# 794| v0_15(void) = NoOp :
|
||||
# 793| v0_16(void) = ReturnVoid :
|
||||
@@ -3317,16 +3317,16 @@ ir.cpp:
|
||||
# 795| r0_2(glval<DerivedVB>) = InitializeThis :
|
||||
# 796| v0_3(void) = NoOp :
|
||||
# 796| r0_4(glval<String>) = FieldAddress[derivedvb_s] : r0_2
|
||||
# 796| r0_5(bool) = FunctionAddress[~String] :
|
||||
# 796| r0_5(glval<unknown>) = FunctionAddress[~String] :
|
||||
# 796| v0_6(void) = Invoke : r0_5, this:r0_4
|
||||
# 796| r0_7(glval<MiddleVB2>) = ConvertToBase[DerivedVB : MiddleVB2] : r0_2
|
||||
# 796| r0_8(bool) = FunctionAddress[~MiddleVB2] :
|
||||
# 796| r0_8(glval<unknown>) = FunctionAddress[~MiddleVB2] :
|
||||
# 796| v0_9(void) = Invoke : r0_8, this:r0_7
|
||||
# 796| r0_10(glval<MiddleVB1>) = ConvertToBase[DerivedVB : MiddleVB1] : r0_2
|
||||
# 796| r0_11(bool) = FunctionAddress[~MiddleVB1] :
|
||||
# 796| r0_11(glval<unknown>) = FunctionAddress[~MiddleVB1] :
|
||||
# 796| v0_12(void) = Invoke : r0_11, this:r0_10
|
||||
# 796| r0_13(glval<Base>) = ConvertToBase[DerivedVB : Base] : r0_2
|
||||
# 796| r0_14(bool) = FunctionAddress[~Base] :
|
||||
# 796| r0_14(glval<unknown>) = FunctionAddress[~Base] :
|
||||
# 796| v0_15(void) = Invoke : r0_14, this:r0_13
|
||||
# 795| v0_16(void) = ReturnVoid :
|
||||
# 795| v0_17(void) = UnmodeledUse : mu*
|
||||
@@ -3337,13 +3337,13 @@ ir.cpp:
|
||||
# 799| v0_0(void) = EnterFunction :
|
||||
# 799| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 800| r0_2(glval<Base>) = VariableAddress[b] :
|
||||
# 800| r0_3(bool) = FunctionAddress[Base] :
|
||||
# 800| r0_3(glval<unknown>) = FunctionAddress[Base] :
|
||||
# 800| v0_4(void) = Invoke : r0_3, this:r0_2
|
||||
# 801| r0_5(glval<Middle>) = VariableAddress[m] :
|
||||
# 801| r0_6(bool) = FunctionAddress[Middle] :
|
||||
# 801| r0_6(glval<unknown>) = FunctionAddress[Middle] :
|
||||
# 801| v0_7(void) = Invoke : r0_6, this:r0_5
|
||||
# 802| r0_8(glval<Derived>) = VariableAddress[d] :
|
||||
# 802| r0_9(bool) = FunctionAddress[Derived] :
|
||||
# 802| r0_9(glval<unknown>) = FunctionAddress[Derived] :
|
||||
# 802| v0_10(void) = Invoke : r0_9, this:r0_8
|
||||
# 804| r0_11(glval<Base *>) = VariableAddress[pb] :
|
||||
# 804| r0_12(glval<Base>) = VariableAddress[b] :
|
||||
@@ -3355,21 +3355,21 @@ ir.cpp:
|
||||
# 806| r0_18(glval<Derived>) = VariableAddress[d] :
|
||||
# 806| m0_19(Derived *) = Store : r0_17, r0_18
|
||||
# 808| r0_20(glval<Base>) = VariableAddress[b] :
|
||||
# 808| r0_21(bool) = FunctionAddress[operator=] :
|
||||
# 808| r0_21(glval<unknown>) = FunctionAddress[operator=] :
|
||||
# 808| r0_22(glval<Middle>) = VariableAddress[m] :
|
||||
# 808| r0_23(glval<Base>) = ConvertToBase[Middle : Base] : r0_22
|
||||
# 808| r0_24(Base &) = Invoke : r0_21, this:r0_20, r0_23
|
||||
# 809| r0_25(glval<Base>) = VariableAddress[b] :
|
||||
# 809| r0_26(bool) = FunctionAddress[operator=] :
|
||||
# 809| r0_27(bool) = FunctionAddress[Base] :
|
||||
# 809| r0_26(glval<unknown>) = FunctionAddress[operator=] :
|
||||
# 809| r0_27(glval<unknown>) = FunctionAddress[Base] :
|
||||
# 809| r0_28(glval<Middle>) = VariableAddress[m] :
|
||||
# 809| r0_29(glval<Base>) = ConvertToBase[Middle : Base] : r0_28
|
||||
# 809| v0_30(void) = Invoke : r0_27, r0_29
|
||||
# 809| r0_31(Base) = Convert : v0_30
|
||||
# 809| r0_32(Base &) = Invoke : r0_26, this:r0_25, r0_31
|
||||
# 810| r0_33(glval<Base>) = VariableAddress[b] :
|
||||
# 810| r0_34(bool) = FunctionAddress[operator=] :
|
||||
# 810| r0_35(bool) = FunctionAddress[Base] :
|
||||
# 810| r0_34(glval<unknown>) = FunctionAddress[operator=] :
|
||||
# 810| r0_35(glval<unknown>) = FunctionAddress[Base] :
|
||||
# 810| r0_36(glval<Middle>) = VariableAddress[m] :
|
||||
# 810| r0_37(glval<Base>) = ConvertToBase[Middle : Base] : r0_36
|
||||
# 810| v0_38(void) = Invoke : r0_35, r0_37
|
||||
@@ -3396,13 +3396,13 @@ ir.cpp:
|
||||
# 814| r0_59(glval<Base *>) = VariableAddress[pb] :
|
||||
# 814| m0_60(Base *) = Store : r0_59, r0_58
|
||||
# 816| r0_61(glval<Middle>) = VariableAddress[m] :
|
||||
# 816| r0_62(bool) = FunctionAddress[operator=] :
|
||||
# 816| r0_62(glval<unknown>) = FunctionAddress[operator=] :
|
||||
# 816| r0_63(glval<Base>) = VariableAddress[b] :
|
||||
# 816| r0_64(glval<Middle>) = ConvertToDerived[Middle : Base] : r0_63
|
||||
# 816| r0_65(glval<Middle>) = Convert : r0_64
|
||||
# 816| r0_66(Middle &) = Invoke : r0_62, this:r0_61, r0_65
|
||||
# 817| r0_67(glval<Middle>) = VariableAddress[m] :
|
||||
# 817| r0_68(bool) = FunctionAddress[operator=] :
|
||||
# 817| r0_68(glval<unknown>) = FunctionAddress[operator=] :
|
||||
# 817| r0_69(glval<Base>) = VariableAddress[b] :
|
||||
# 817| r0_70(glval<Middle>) = ConvertToDerived[Middle : Base] : r0_69
|
||||
# 817| r0_71(glval<Middle>) = Convert : r0_70
|
||||
@@ -3423,14 +3423,14 @@ ir.cpp:
|
||||
# 820| r0_86(glval<Middle *>) = VariableAddress[pm] :
|
||||
# 820| m0_87(Middle *) = Store : r0_86, r0_85
|
||||
# 822| r0_88(glval<Base>) = VariableAddress[b] :
|
||||
# 822| r0_89(bool) = FunctionAddress[operator=] :
|
||||
# 822| r0_89(glval<unknown>) = FunctionAddress[operator=] :
|
||||
# 822| r0_90(glval<Derived>) = VariableAddress[d] :
|
||||
# 822| r0_91(glval<Middle>) = ConvertToBase[Derived : Middle] : r0_90
|
||||
# 822| r0_92(glval<Base>) = ConvertToBase[Middle : Base] : r0_91
|
||||
# 822| r0_93(Base &) = Invoke : r0_89, this:r0_88, r0_92
|
||||
# 823| r0_94(glval<Base>) = VariableAddress[b] :
|
||||
# 823| r0_95(bool) = FunctionAddress[operator=] :
|
||||
# 823| r0_96(bool) = FunctionAddress[Base] :
|
||||
# 823| r0_95(glval<unknown>) = FunctionAddress[operator=] :
|
||||
# 823| r0_96(glval<unknown>) = FunctionAddress[Base] :
|
||||
# 823| r0_97(glval<Derived>) = VariableAddress[d] :
|
||||
# 823| r0_98(glval<Middle>) = ConvertToBase[Derived : Middle] : r0_97
|
||||
# 823| r0_99(glval<Base>) = ConvertToBase[Middle : Base] : r0_98
|
||||
@@ -3438,8 +3438,8 @@ ir.cpp:
|
||||
# 823| r0_101(Base) = Convert : v0_100
|
||||
# 823| r0_102(Base &) = Invoke : r0_95, this:r0_94, r0_101
|
||||
# 824| r0_103(glval<Base>) = VariableAddress[b] :
|
||||
# 824| r0_104(bool) = FunctionAddress[operator=] :
|
||||
# 824| r0_105(bool) = FunctionAddress[Base] :
|
||||
# 824| r0_104(glval<unknown>) = FunctionAddress[operator=] :
|
||||
# 824| r0_105(glval<unknown>) = FunctionAddress[Base] :
|
||||
# 824| r0_106(glval<Derived>) = VariableAddress[d] :
|
||||
# 824| r0_107(glval<Middle>) = ConvertToBase[Derived : Middle] : r0_106
|
||||
# 824| r0_108(glval<Base>) = ConvertToBase[Middle : Base] : r0_107
|
||||
@@ -3470,14 +3470,14 @@ ir.cpp:
|
||||
# 828| r0_133(glval<Base *>) = VariableAddress[pb] :
|
||||
# 828| m0_134(Base *) = Store : r0_133, r0_132
|
||||
# 830| r0_135(glval<Derived>) = VariableAddress[d] :
|
||||
# 830| r0_136(bool) = FunctionAddress[operator=] :
|
||||
# 830| r0_136(glval<unknown>) = FunctionAddress[operator=] :
|
||||
# 830| r0_137(glval<Base>) = VariableAddress[b] :
|
||||
# 830| r0_138(glval<Middle>) = ConvertToDerived[Middle : Base] : r0_137
|
||||
# 830| r0_139(glval<Derived>) = ConvertToDerived[Derived : Middle] : r0_138
|
||||
# 830| r0_140(glval<Derived>) = Convert : r0_139
|
||||
# 830| r0_141(Derived &) = Invoke : r0_136, this:r0_135, r0_140
|
||||
# 831| r0_142(glval<Derived>) = VariableAddress[d] :
|
||||
# 831| r0_143(bool) = FunctionAddress[operator=] :
|
||||
# 831| r0_143(glval<unknown>) = FunctionAddress[operator=] :
|
||||
# 831| r0_144(glval<Base>) = VariableAddress[b] :
|
||||
# 831| r0_145(glval<Middle>) = ConvertToDerived[Middle : Base] : r0_144
|
||||
# 831| r0_146(glval<Derived>) = ConvertToDerived[Derived : Middle] : r0_145
|
||||
@@ -3537,7 +3537,7 @@ ir.cpp:
|
||||
# 846| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 846| r0_2(glval<PolymorphicDerived>) = InitializeThis :
|
||||
# 846| r0_3(glval<PolymorphicBase>) = ConvertToBase[PolymorphicDerived : PolymorphicBase] : r0_2
|
||||
# 846| r0_4(bool) = FunctionAddress[PolymorphicBase] :
|
||||
# 846| r0_4(glval<unknown>) = FunctionAddress[PolymorphicBase] :
|
||||
# 846| v0_5(void) = Invoke : r0_4, this:r0_3
|
||||
# 846| v0_6(void) = NoOp :
|
||||
# 846| v0_7(void) = ReturnVoid :
|
||||
@@ -3551,7 +3551,7 @@ ir.cpp:
|
||||
# 846| r0_2(glval<PolymorphicDerived>) = InitializeThis :
|
||||
#-----| v0_3(void) = NoOp :
|
||||
# 846| r0_4(glval<PolymorphicBase>) = ConvertToBase[PolymorphicDerived : PolymorphicBase] : r0_2
|
||||
# 846| r0_5(bool) = FunctionAddress[~PolymorphicBase] :
|
||||
# 846| r0_5(glval<unknown>) = FunctionAddress[~PolymorphicBase] :
|
||||
# 846| v0_6(void) = Invoke : r0_5, this:r0_4
|
||||
# 846| v0_7(void) = ReturnVoid :
|
||||
# 846| v0_8(void) = UnmodeledUse : mu*
|
||||
@@ -3562,10 +3562,10 @@ ir.cpp:
|
||||
# 849| v0_0(void) = EnterFunction :
|
||||
# 849| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 850| r0_2(glval<PolymorphicBase>) = VariableAddress[b] :
|
||||
#-----| r0_3(bool) = FunctionAddress[PolymorphicBase] :
|
||||
#-----| r0_3(glval<unknown>) = FunctionAddress[PolymorphicBase] :
|
||||
#-----| v0_4(void) = Invoke : r0_3, this:r0_2
|
||||
# 851| r0_5(glval<PolymorphicDerived>) = VariableAddress[d] :
|
||||
# 851| r0_6(bool) = FunctionAddress[PolymorphicDerived] :
|
||||
# 851| r0_6(glval<unknown>) = FunctionAddress[PolymorphicDerived] :
|
||||
# 851| v0_7(void) = Invoke : r0_6, this:r0_5
|
||||
# 853| r0_8(glval<PolymorphicBase *>) = VariableAddress[pb] :
|
||||
# 853| r0_9(glval<PolymorphicBase>) = VariableAddress[b] :
|
||||
@@ -3611,7 +3611,7 @@ ir.cpp:
|
||||
# 867| v0_0(void) = EnterFunction :
|
||||
# 867| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 867| r0_2(glval<String>) = InitializeThis :
|
||||
# 868| r0_3(bool) = FunctionAddress[String] :
|
||||
# 868| r0_3(glval<unknown>) = FunctionAddress[String] :
|
||||
# 868| r0_4(glval<char[1]>) = StringConstant[""] :
|
||||
# 868| r0_5(char *) = Convert : r0_4
|
||||
# 868| v0_6(void) = Invoke : r0_3, this:r0_2, r0_5
|
||||
@@ -3783,3 +3783,126 @@ ir.cpp:
|
||||
# 906| r3_2(glval<int>) = VariableAddress[#temp906:11] :
|
||||
# 906| m3_3(int) = Store : r3_2, r3_1
|
||||
#-----| Goto -> Block 1
|
||||
|
||||
# 940| OperatorNew() -> void
|
||||
# 940| Block 0
|
||||
# 940| v0_0(void) = EnterFunction :
|
||||
# 940| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 941| r0_2(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 941| r0_3(unsigned long) = Constant[4] :
|
||||
# 941| r0_4(void *) = Invoke : r0_2, r0_3
|
||||
# 941| r0_5(int *) = Convert : r0_4
|
||||
# 942| r0_6(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 942| r0_7(unsigned long) = Constant[4] :
|
||||
# 942| r0_8(float) = Constant[1.0] :
|
||||
# 942| r0_9(void *) = Invoke : r0_6, r0_7, r0_8
|
||||
# 942| r0_10(int *) = Convert : r0_9
|
||||
# 943| r0_11(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 943| r0_12(unsigned long) = Constant[4] :
|
||||
# 943| r0_13(void *) = Invoke : r0_11, r0_12
|
||||
# 943| r0_14(int *) = Convert : r0_13
|
||||
# 943| r0_15(int) = Constant[0] :
|
||||
# 943| mu0_16(int) = Store : r0_14, r0_15
|
||||
# 944| r0_17(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 944| r0_18(unsigned long) = Constant[8] :
|
||||
# 944| r0_19(void *) = Invoke : r0_17, r0_18
|
||||
# 944| r0_20(String *) = Convert : r0_19
|
||||
# 944| r0_21(glval<unknown>) = FunctionAddress[String] :
|
||||
# 944| v0_22(void) = Invoke : r0_21, this:r0_20
|
||||
# 945| r0_23(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 945| r0_24(unsigned long) = Constant[8] :
|
||||
# 945| r0_25(float) = Constant[1.0] :
|
||||
# 945| r0_26(void *) = Invoke : r0_23, r0_24, r0_25
|
||||
# 945| r0_27(String *) = Convert : r0_26
|
||||
# 945| r0_28(glval<unknown>) = FunctionAddress[String] :
|
||||
# 945| r0_29(glval<char[6]>) = StringConstant["hello"] :
|
||||
# 945| r0_30(char *) = Convert : r0_29
|
||||
# 945| v0_31(void) = Invoke : r0_28, this:r0_27, r0_30
|
||||
# 946| r0_32(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 946| r0_33(unsigned long) = Constant[256] :
|
||||
# 946| r0_34(align_val_t) = Constant[128] :
|
||||
# 946| r0_35(void *) = Invoke : r0_32, r0_33, r0_34
|
||||
# 946| r0_36(Overaligned *) = Convert : r0_35
|
||||
# 947| r0_37(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 947| r0_38(unsigned long) = Constant[256] :
|
||||
# 947| r0_39(align_val_t) = Constant[128] :
|
||||
# 947| r0_40(float) = Constant[1.0] :
|
||||
# 947| r0_41(void *) = Invoke : r0_37, r0_38, r0_39, r0_40
|
||||
# 947| r0_42(Overaligned *) = Convert : r0_41
|
||||
# 947| r0_43(Overaligned) = Constant[0] :
|
||||
# 947| mu0_44(Overaligned) = Store : r0_42, r0_43
|
||||
# 948| v0_45(void) = NoOp :
|
||||
# 940| v0_46(void) = ReturnVoid :
|
||||
# 940| v0_47(void) = UnmodeledUse : mu*
|
||||
# 940| v0_48(void) = ExitFunction :
|
||||
|
||||
# 950| OperatorNewArray(int) -> void
|
||||
# 950| Block 0
|
||||
# 950| v0_0(void) = EnterFunction :
|
||||
# 950| mu0_1(unknown) = UnmodeledDefinition :
|
||||
# 950| r0_2(glval<int>) = VariableAddress[n] :
|
||||
# 950| m0_3(int) = InitializeParameter[n] : r0_2
|
||||
# 951| r0_4(glval<unknown>) = FunctionAddress[operator new[]] :
|
||||
# 951| r0_5(unsigned long) = Constant[40] :
|
||||
# 951| r0_6(void *) = Invoke : r0_4, r0_5
|
||||
# 951| r0_7(int *) = Convert : r0_6
|
||||
# 952| r0_8(glval<unknown>) = FunctionAddress[operator new[]] :
|
||||
# 952| r0_9(glval<int>) = VariableAddress[n] :
|
||||
# 952| r0_10(int) = Load : r0_9, m0_3
|
||||
# 952| r0_11(unsigned long) = Convert : r0_10
|
||||
# 952| r0_12(unsigned long) = Constant[4] :
|
||||
# 952| r0_13(unsigned long) = Mul : r0_11, r0_12
|
||||
# 952| r0_14(void *) = Invoke : r0_8, r0_13
|
||||
# 952| r0_15(int *) = Convert : r0_14
|
||||
# 953| r0_16(glval<unknown>) = FunctionAddress[operator new[]] :
|
||||
# 953| r0_17(glval<int>) = VariableAddress[n] :
|
||||
# 953| r0_18(int) = Load : r0_17, m0_3
|
||||
# 953| r0_19(unsigned long) = Convert : r0_18
|
||||
# 953| r0_20(unsigned long) = Constant[4] :
|
||||
# 953| r0_21(unsigned long) = Mul : r0_19, r0_20
|
||||
# 953| r0_22(float) = Constant[1.0] :
|
||||
# 953| r0_23(void *) = Invoke : r0_16, r0_21, r0_22
|
||||
# 953| r0_24(int *) = Convert : r0_23
|
||||
# 954| r0_25(glval<unknown>) = FunctionAddress[operator new[]] :
|
||||
# 954| r0_26(glval<int>) = VariableAddress[n] :
|
||||
# 954| r0_27(int) = Load : r0_26, m0_3
|
||||
# 954| r0_28(unsigned long) = Convert : r0_27
|
||||
# 954| r0_29(unsigned long) = Constant[8] :
|
||||
# 954| r0_30(unsigned long) = Mul : r0_28, r0_29
|
||||
# 954| r0_31(void *) = Invoke : r0_25, r0_30
|
||||
# 954| r0_32(String *) = Convert : r0_31
|
||||
# 955| r0_33(glval<unknown>) = FunctionAddress[operator new[]] :
|
||||
# 955| r0_34(glval<int>) = VariableAddress[n] :
|
||||
# 955| r0_35(int) = Load : r0_34, m0_3
|
||||
# 955| r0_36(unsigned long) = Convert : r0_35
|
||||
# 955| r0_37(unsigned long) = Constant[256] :
|
||||
# 955| r0_38(unsigned long) = Mul : r0_36, r0_37
|
||||
# 955| r0_39(align_val_t) = Constant[128] :
|
||||
# 955| r0_40(void *) = Invoke : r0_33, r0_38, r0_39
|
||||
# 955| r0_41(Overaligned *) = Convert : r0_40
|
||||
# 956| r0_42(glval<unknown>) = FunctionAddress[operator new[]] :
|
||||
# 956| r0_43(unsigned long) = Constant[2560] :
|
||||
# 956| r0_44(align_val_t) = Constant[128] :
|
||||
# 956| r0_45(float) = Constant[1.0] :
|
||||
# 956| r0_46(void *) = Invoke : r0_42, r0_43, r0_44, r0_45
|
||||
# 956| r0_47(Overaligned *) = Convert : r0_46
|
||||
# 957| r0_48(glval<unknown>) = FunctionAddress[operator new[]] :
|
||||
# 957| r0_49(glval<int>) = VariableAddress[n] :
|
||||
# 957| r0_50(int) = Load : r0_49, m0_3
|
||||
# 957| r0_51(unsigned long) = Convert : r0_50
|
||||
# 957| r0_52(unsigned long) = Constant[1] :
|
||||
# 957| r0_53(unsigned long) = Mul : r0_51, r0_52
|
||||
# 957| r0_54(void *) = Invoke : r0_48, r0_53
|
||||
# 957| r0_55(DefaultCtorWithDefaultParam *) = Convert : r0_54
|
||||
# 958| r0_56(glval<unknown>) = FunctionAddress[operator new[]] :
|
||||
# 958| r0_57(glval<int>) = VariableAddress[n] :
|
||||
# 958| r0_58(int) = Load : r0_57, m0_3
|
||||
# 958| r0_59(unsigned long) = Convert : r0_58
|
||||
# 958| r0_60(unsigned long) = Constant[4] :
|
||||
# 958| r0_61(unsigned long) = Mul : r0_59, r0_60
|
||||
# 958| r0_62(void *) = Invoke : r0_56, r0_61
|
||||
# 958| r0_63(int *) = Convert : r0_62
|
||||
# 959| v0_64(void) = NoOp :
|
||||
# 950| v0_65(void) = ReturnVoid :
|
||||
# 950| v0_66(void) = UnmodeledUse : mu*
|
||||
# 950| v0_67(void) = ExitFunction :
|
||||
|
||||
Reference in New Issue
Block a user