C++: Move Conversions in PrintAST to the side.

This commit is contained in:
Cornelius Riemenschneider
2020-10-26 13:49:02 +01:00
parent 0e5c44e5c4
commit 447ba205b4
3 changed files with 2259 additions and 2220 deletions

View File

@@ -114,9 +114,29 @@ class PrintASTNode extends TPrintASTNode {
/**
* Gets the child node at index `childIndex`. Child indices must be unique,
* but need not be contiguous (but see `getChildByRank`).
* but need not be contiguous.
*/
abstract PrintASTNode getChild(int childIndex);
abstract PrintASTNode getChildInternal(int childIndex);
/**
* Gets the child node at index `childIndex`.
* Adds edges to fully converted expressions, that are not part of the
* regular parent/child relation traversal.
*/
PrintASTNode getChild(int childIndex) {
result = getChildInternal(childIndex)
or
exists(int nonConvertedIndex, int nextIdx, Expr expr |
nextIdx = max(int idx | exists(this.getChildInternal(idx))) + 1 and
exists(getChild(nonConvertedIndex)) and
childIndex - nextIdx = nonConvertedIndex and
expr = getChild(nonConvertedIndex).(ASTNode).getAST()
|
expr.getFullyConverted() instanceof Conversion and
result.(ASTNode).getAST() = expr.getFullyConverted() and
not expr instanceof Conversion
)
}
/**
* Holds if this node should be printed in the output. By default, all nodes
@@ -154,11 +174,29 @@ class PrintASTNode extends TPrintASTNode {
* default, this is just the index of the child, but subclasses can override
* this.
*/
string getChildEdgeLabel(int childIndex) {
string getChildEdgeLabelInternal(int childIndex) {
exists(getChild(childIndex)) and
result = childIndex.toString()
}
/**
* Gets the label for the edge from this node to the specified child,
* including labels for edges to nodes that represent conversions.
*/
string getChildEdgeLabel(int childIndex) {
exists(getChildInternal(childIndex)) and
result = getChildEdgeLabelInternal(childIndex)
or
not exists(getChildInternal(childIndex)) and
exists(getChild(childIndex)) and
exists(int nonConvertedIndex, int nextIdx |
nextIdx = max(int idx | exists(this.getChildInternal(idx))) + 1 and
childIndex - nextIdx = nonConvertedIndex
|
result = getChildEdgeLabelInternal(nonConvertedIndex) + " converted"
)
}
/**
* Gets the `Function` that contains this node.
*/
@@ -205,9 +243,7 @@ class ExprNode extends ASTNode {
ExprNode() { expr = ast }
override ASTNode getChild(int childIndex) {
result.getAST() = expr.getChild(childIndex).getFullyConverted()
}
override ASTNode getChildInternal(int childIndex) { result.getAST() = expr.getChild(childIndex) }
override string getProperty(string key) {
result = super.getProperty(key)
@@ -249,10 +285,11 @@ class ConversionNode extends ExprNode {
override ASTNode getChild(int childIndex) {
childIndex = 0 and
result.getAST() = conv.getExpr()
result.getAST() = conv.getExpr() and
conv.getExpr() instanceof Conversion
}
override string getChildEdgeLabel(int childIndex) { childIndex = 0 and result = "expr" }
override string getChildEdgeLabelInternal(int childIndex) { childIndex = 0 and result = "expr" }
}
/**
@@ -280,7 +317,7 @@ class DeclarationEntryNode extends BaseASTNode, TDeclarationEntryNode {
DeclarationEntryNode() { this = TDeclarationEntryNode(declStmt, ast) }
override PrintASTNode getChild(int childIndex) { none() }
override PrintASTNode getChildInternal(int childIndex) { none() }
override string getProperty(string key) {
result = BaseASTNode.super.getProperty(key)
@@ -296,12 +333,12 @@ class DeclarationEntryNode extends BaseASTNode, TDeclarationEntryNode {
class VariableDeclarationEntryNode extends DeclarationEntryNode {
override VariableDeclarationEntry ast;
override ASTNode getChild(int childIndex) {
override ASTNode getChildInternal(int childIndex) {
childIndex = 0 and
result.getAST() = ast.getVariable().getInitializer()
}
override string getChildEdgeLabel(int childIndex) { childIndex = 0 and result = "init" }
override string getChildEdgeLabelInternal(int childIndex) { childIndex = 0 and result = "init" }
}
/**
@@ -312,11 +349,11 @@ class StmtNode extends ASTNode {
StmtNode() { stmt = ast }
override BaseASTNode getChild(int childIndex) {
override BaseASTNode getChildInternal(int childIndex) {
exists(Locatable child |
child = stmt.getChild(childIndex) and
(
result.getAST() = child.(Expr).getFullyConverted() or
result.getAST() = child.(Expr) or
result.getAST() = child.(Stmt)
)
)
@@ -331,7 +368,7 @@ class DeclStmtNode extends StmtNode {
DeclStmtNode() { declStmt = stmt }
override DeclarationEntryNode getChild(int childIndex) {
override DeclarationEntryNode getChildInternal(int childIndex) {
exists(DeclarationEntry entry |
declStmt.getDeclarationEntry(childIndex) = entry and
result = TDeclarationEntryNode(declStmt, entry)
@@ -347,7 +384,7 @@ class ParameterNode extends ASTNode {
ParameterNode() { param = ast }
final override PrintASTNode getChild(int childIndex) { none() }
final override PrintASTNode getChildInternal(int childIndex) { none() }
final override string getProperty(string key) {
result = super.getProperty(key)
@@ -365,12 +402,12 @@ class InitializerNode extends ASTNode {
InitializerNode() { init = ast }
override ASTNode getChild(int childIndex) {
override ASTNode getChildInternal(int childIndex) {
childIndex = 0 and
result.getAST() = init.getExpr().getFullyConverted()
result.getAST() = init.getExpr()
}
override string getChildEdgeLabel(int childIndex) {
override string getChildEdgeLabelInternal(int childIndex) {
childIndex = 0 and
result = "expr"
}
@@ -388,7 +425,9 @@ class ParametersNode extends PrintASTNode, TParametersNode {
final override Location getLocation() { result = getRepresentativeLocation(func) }
override ASTNode getChild(int childIndex) { result.getAST() = func.getParameter(childIndex) }
override ASTNode getChildInternal(int childIndex) {
result.getAST() = func.getParameter(childIndex)
}
/**
* Gets the `Function` for which this node represents the parameters.
@@ -408,7 +447,7 @@ class ConstructorInitializersNode extends PrintASTNode, TConstructorInitializers
final override Location getLocation() { result = getRepresentativeLocation(ctor) }
final override ASTNode getChild(int childIndex) {
final override ASTNode getChildInternal(int childIndex) {
result.getAST() = ctor.getInitializer(childIndex)
}
@@ -430,7 +469,7 @@ class DestructorDestructionsNode extends PrintASTNode, TDestructorDestructionsNo
final override Location getLocation() { result = getRepresentativeLocation(dtor) }
final override ASTNode getChild(int childIndex) {
final override ASTNode getChildInternal(int childIndex) {
result.getAST() = dtor.getDestruction(childIndex)
}
@@ -450,7 +489,7 @@ class FunctionNode extends ASTNode {
override string toString() { result = qlClass(func) + getIdentityString(func) }
override PrintASTNode getChild(int childIndex) {
override PrintASTNode getChildInternal(int childIndex) {
childIndex = 0 and
result.(ParametersNode).getFunction() = func
or
@@ -464,7 +503,7 @@ class FunctionNode extends ASTNode {
result.(DestructorDestructionsNode).getDestructor() = func
}
override string getChildEdgeLabel(int childIndex) {
override string getChildEdgeLabelInternal(int childIndex) {
childIndex = 0 and result = "params"
or
childIndex = 1 and result = "initializations"
@@ -504,7 +543,7 @@ class ClassAggregateLiteralNode extends ExprNode {
ClassAggregateLiteralNode() { list = ast }
override string getChildEdgeLabel(int childIndex) {
override string getChildEdgeLabelInternal(int childIndex) {
exists(Field field |
list.getFieldExpr(field) = list.getChild(childIndex) and
result = "." + field.getName()
@@ -520,7 +559,7 @@ class ArrayAggregateLiteralNode extends ExprNode {
ArrayAggregateLiteralNode() { list = ast }
override string getChildEdgeLabel(int childIndex) {
override string getChildEdgeLabelInternal(int childIndex) {
exists(int elementIndex |
list.getElementExpr(elementIndex) = list.getChild(childIndex) and
result = "[" + elementIndex.toString() + "]"

View File

@@ -56,12 +56,12 @@ ArrayToPointer.c:
# 9| -1: [VariableAccess] s
# 9| Type = [Struct] S
# 9| ValueCategory = lvalue
# 9| 1: [ArrayToPointerConversion] array to pointer conversion
# 9| 1: [VariableAccess] c
# 9| Type = [ArrayType] char[6]
# 9| ValueCategory = lvalue
# 9| 1 converted: [ArrayToPointerConversion] array to pointer conversion
# 9| Type = [CharPointerType] char *
# 9| ValueCategory = prvalue
# 9| expr: [VariableAccess] c
# 9| Type = [ArrayType] char[6]
# 9| ValueCategory = lvalue
# 10| 3: [ReturnStmt] return ...
Cast.c:
# 1| [TopLevelFunction] void Cast(char*, void*)
@@ -78,13 +78,13 @@ Cast.c:
# 2| 0: [VariableAccess] c
# 2| Type = [CharPointerType] char *
# 2| ValueCategory = lvalue
# 2| 1: [CStyleCast] (char *)...
# 2| 1: [VariableAccess] v
# 2| Type = [VoidPointerType] void *
# 2| ValueCategory = prvalue(load)
# 2| 1 converted: [CStyleCast] (char *)...
# 2| Conversion = [PointerConversion] pointer conversion
# 2| Type = [CharPointerType] char *
# 2| ValueCategory = prvalue
# 2| expr: [VariableAccess] v
# 2| Type = [VoidPointerType] void *
# 2| ValueCategory = prvalue(load)
# 3| 1: [ReturnStmt] return ...
ConditionDecl.cpp:
# 1| [TopLevelFunction] void ConditionDecl()
@@ -102,13 +102,13 @@ ConditionDecl.cpp:
# 3| 0: [ConditionDeclExpr] (condition decl)
# 3| Type = [BoolType] bool
# 3| ValueCategory = prvalue
# 3| 0: [CStyleCast] (bool)...
# 3| 0: [VariableAccess] k
# 3| Type = [IntType] int
# 3| ValueCategory = prvalue(load)
# 3| 0 converted: [CStyleCast] (bool)...
# 3| Conversion = [BoolConversion] conversion to bool
# 3| Type = [BoolType] bool
# 3| ValueCategory = prvalue
# 3| expr: [VariableAccess] k
# 3| Type = [IntType] int
# 3| ValueCategory = prvalue(load)
# 3| 1: [BlockStmt] { ... }
# 5| 2: [ReturnStmt] return ...
ConstructorCall.cpp:
@@ -226,15 +226,15 @@ Conversion1.c:
# 2| 0: [VariableDeclarationEntry] definition of i
# 2| Type = [IntType] int
# 2| init: [Initializer] initializer for i
# 2| expr: [CStyleCast] (int)...
# 2| expr: [Literal] 1
# 2| Type = [IntType] int
# 2| Value = [Literal] 1
# 2| ValueCategory = prvalue
# 2| expr converted: [CStyleCast] (int)...
# 2| Conversion = [IntegralConversion] integral conversion
# 2| Type = [IntType] int
# 2| Value = [CStyleCast] 1
# 2| ValueCategory = prvalue
# 2| expr: [Literal] 1
# 2| Type = [IntType] int
# 2| Value = [Literal] 1
# 2| ValueCategory = prvalue
# 3| 1: [ReturnStmt] return ...
Conversion2.c:
# 1| [TopLevelFunction] void Conversion2(int)
@@ -253,24 +253,24 @@ Conversion2.c:
# 2| Type = [IntType] int
# 2| Value = [AddExpr] 12
# 2| ValueCategory = prvalue
# 2| 0: [CStyleCast] (int)...
# 2| 0: [Literal] 5
# 2| Type = [IntType] int
# 2| Value = [Literal] 5
# 2| ValueCategory = prvalue
# 2| 1: [Literal] 7
# 2| Type = [IntType] int
# 2| Value = [Literal] 7
# 2| ValueCategory = prvalue
# 2| 0 converted: [CStyleCast] (int)...
# 2| Conversion = [IntegralConversion] integral conversion
# 2| Type = [IntType] int
# 2| Value = [CStyleCast] 5
# 2| ValueCategory = prvalue
# 2| expr: [Literal] 5
# 2| Type = [IntType] int
# 2| Value = [Literal] 5
# 2| ValueCategory = prvalue
# 2| 1: [CStyleCast] (int)...
# 2| 1 converted: [CStyleCast] (int)...
# 2| Conversion = [IntegralConversion] integral conversion
# 2| Type = [IntType] int
# 2| Value = [CStyleCast] 7
# 2| ValueCategory = prvalue
# 2| expr: [Literal] 7
# 2| Type = [IntType] int
# 2| Value = [Literal] 7
# 2| ValueCategory = prvalue
# 3| 1: [ReturnStmt] return ...
Conversion3.cpp:
# 1| [TopLevelFunction] void Conversion3(int)
@@ -289,38 +289,38 @@ Conversion3.cpp:
# 2| Type = [IntType] int
# 2| Value = [AddExpr] 8
# 2| ValueCategory = prvalue
# 2| 0: [CStyleCast] (int)...
# 2| 0: [Literal] 5
# 2| Type = [IntType] int
# 2| Value = [Literal] 5
# 2| ValueCategory = prvalue
# 2| 1: [Literal] 7
# 2| Type = [IntType] int
# 2| Value = [Literal] 7
# 2| ValueCategory = prvalue
# 2| 0 converted: [CStyleCast] (int)...
# 2| Conversion = [IntegralConversion] integral conversion
# 2| Type = [IntType] int
# 2| Value = [CStyleCast] 1
# 2| ValueCategory = prvalue
# 2| expr: [CStyleCast] (bool)...
# 2| : [CStyleCast] (bool)...
# 2| Conversion = [BoolConversion] conversion to bool
# 2| Type = [BoolType] bool
# 2| Value = [CStyleCast] 1
# 2| ValueCategory = prvalue
# 2| expr: [CStyleCast] (int)...
# 2| : [CStyleCast] (int)...
# 2| Conversion = [IntegralConversion] integral conversion
# 2| Type = [IntType] int
# 2| Value = [CStyleCast] 1
# 2| ValueCategory = prvalue
# 2| expr: [Literal] 5
# 2| Type = [IntType] int
# 2| Value = [Literal] 5
# 2| ValueCategory = prvalue
# 2| 1: [ParenthesisExpr] (...)
# 2| 1 converted: [ParenthesisExpr] (...)
# 2| Type = [IntType] int
# 2| Value = [ParenthesisExpr] 7
# 2| ValueCategory = prvalue
# 2| expr: [CStyleCast] (int)...
# 2| : [CStyleCast] (int)...
# 2| Conversion = [IntegralConversion] integral conversion
# 2| Type = [IntType] int
# 2| Value = [CStyleCast] 7
# 2| ValueCategory = prvalue
# 2| expr: [Literal] 7
# 2| Type = [IntType] int
# 2| Value = [Literal] 7
# 2| ValueCategory = prvalue
# 3| 1: [ReturnStmt] return ...
Conversion4.c:
# 1| [TopLevelFunction] void Conversion4(int)
@@ -335,19 +335,19 @@ Conversion4.c:
# 2| 0: [VariableAccess] x
# 2| Type = [IntType] int
# 2| ValueCategory = lvalue
# 2| 1: [ParenthesisExpr] (...)
# 2| 1: [Literal] 7
# 2| Type = [IntType] int
# 2| Value = [Literal] 7
# 2| ValueCategory = prvalue
# 2| 1 converted: [ParenthesisExpr] (...)
# 2| Type = [IntType] int
# 2| Value = [ParenthesisExpr] 7
# 2| ValueCategory = prvalue
# 2| expr: [CStyleCast] (int)...
# 2| : [CStyleCast] (int)...
# 2| Conversion = [IntegralConversion] integral conversion
# 2| Type = [IntType] int
# 2| Value = [CStyleCast] 7
# 2| ValueCategory = prvalue
# 2| expr: [Literal] 7
# 2| Type = [IntType] int
# 2| Value = [Literal] 7
# 2| ValueCategory = prvalue
# 3| 1: [ReturnStmt] return ...
# 5| [TopLevelFunction] char* retfn(void*)
# 5| params:
@@ -355,21 +355,21 @@ Conversion4.c:
# 5| Type = [VoidPointerType] void *
# 5| body: [BlockStmt] { ... }
# 6| 0: [ReturnStmt] return ...
# 6| 0: [CStyleCast] (char *)...
# 6| 0: [VariableAccess] v
# 6| Type = [VoidPointerType] void *
# 6| ValueCategory = prvalue(load)
# 6| 0 converted: [CStyleCast] (char *)...
# 6| Conversion = [PointerConversion] pointer conversion
# 6| Type = [CharPointerType] char *
# 6| ValueCategory = prvalue
# 6| expr: [CStyleCast] (void *)...
# 6| : [CStyleCast] (void *)...
# 6| Conversion = [PointerConversion] pointer conversion
# 6| Type = [VoidPointerType] void *
# 6| ValueCategory = prvalue
# 6| expr: [CStyleCast] (int *)...
# 6| : [CStyleCast] (int *)...
# 6| Conversion = [PointerConversion] pointer conversion
# 6| Type = [IntPointerType] int *
# 6| ValueCategory = prvalue
# 6| expr: [VariableAccess] v
# 6| Type = [VoidPointerType] void *
# 6| ValueCategory = prvalue(load)
# 9| [TopLevelFunction] void Conversion4_vardecl(int)
# 9| params:
# 9| 0: [Parameter] x
@@ -379,13 +379,13 @@ Conversion4.c:
# 10| 0: [VariableDeclarationEntry] definition of y
# 10| Type = [LongType] long
# 10| init: [Initializer] initializer for y
# 10| expr: [CStyleCast] (long)...
# 10| expr: [VariableAccess] x
# 10| Type = [IntType] int
# 10| ValueCategory = prvalue(load)
# 10| expr converted: [CStyleCast] (long)...
# 10| Conversion = [IntegralConversion] integral conversion
# 10| Type = [LongType] long
# 10| ValueCategory = prvalue
# 10| expr: [VariableAccess] x
# 10| Type = [IntType] int
# 10| ValueCategory = prvalue(load)
# 11| 1: [ReturnStmt] return ...
DestructorCall.cpp:
# 1| [Constructor] void C::C()
@@ -427,15 +427,15 @@ DynamicCast.cpp:
#-----| Type = [LValueReferenceType] const Base &
#-----| body: [BlockStmt] { ... }
#-----| 0: [ReturnStmt] return ...
#-----| 0: [ReferenceToExpr] (reference to)
#-----| 0: [PointerDereferenceExpr] * ...
#-----| Type = [Class] Base
#-----| ValueCategory = lvalue
#-----| 0: [ThisExpr] this
#-----| Type = [PointerType] Base *
#-----| ValueCategory = prvalue(load)
#-----| 0 converted: [ReferenceToExpr] (reference to)
#-----| Type = [LValueReferenceType] Base &
#-----| ValueCategory = prvalue
#-----| expr: [PointerDereferenceExpr] * ...
#-----| Type = [Class] Base
#-----| ValueCategory = lvalue
#-----| 0: [ThisExpr] this
#-----| Type = [PointerType] Base *
#-----| ValueCategory = prvalue(load)
# 1| [MoveAssignmentOperator] Base& Base::operator=(Base&&)
# 1| params:
#-----| 0: [Parameter] (unnamed parameter 0)
@@ -460,48 +460,48 @@ DynamicCast.cpp:
#-----| Type = [LValueReferenceType] const Derived &
#-----| body: [BlockStmt] { ... }
#-----| 0: [ExprStmt] ExprStmt
#-----| 0: [ReferenceDereferenceExpr] (reference dereference)
# 4| 0: [FunctionCall] call to operator=
# 4| Type = [LValueReferenceType] Base &
# 4| ValueCategory = prvalue
# 4| -1: [ThisExpr] this
# 4| Type = [PointerType] Derived *
# 4| ValueCategory = prvalue(load)
#-----| 0: [CStyleCast] (Base *)...
#-----| Conversion = [BaseClassConversion] base class conversion
#-----| Type = [PointerType] Base *
#-----| ValueCategory = prvalue
# 4| 0: [PointerDereferenceExpr] * ...
# 4| Type = [SpecifiedType] const Base
# 4| ValueCategory = lvalue
# 4| 0: [AddressOfExpr] & ...
# 4| Type = [PointerType] const Derived *
# 4| ValueCategory = prvalue
# 4| 0: [VariableAccess] (unnamed parameter 0)
# 4| Type = [LValueReferenceType] const Derived &
# 4| ValueCategory = prvalue(load)
#-----| 0 converted: [ReferenceDereferenceExpr] (reference dereference)
#-----| Type = [SpecifiedType] const Derived
#-----| ValueCategory = lvalue
#-----| 0 converted: [CStyleCast] (const Base *)...
#-----| Conversion = [BaseClassConversion] base class conversion
#-----| Type = [PointerType] const Base *
#-----| ValueCategory = prvalue
#-----| 0 converted: [ReferenceToExpr] (reference to)
#-----| Type = [LValueReferenceType] const Base &
#-----| ValueCategory = prvalue
#-----| 0 converted: [ReferenceDereferenceExpr] (reference dereference)
#-----| Type = [Class] Base
#-----| ValueCategory = lvalue
# 4| expr: [FunctionCall] call to operator=
# 4| Type = [LValueReferenceType] Base &
# 4| ValueCategory = prvalue
#-----| -1: [CStyleCast] (Base *)...
#-----| Conversion = [BaseClassConversion] base class conversion
#-----| Type = [PointerType] Base *
#-----| ValueCategory = prvalue
# 4| expr: [ThisExpr] this
# 4| Type = [PointerType] Derived *
# 4| ValueCategory = prvalue(load)
#-----| 0: [ReferenceToExpr] (reference to)
#-----| Type = [LValueReferenceType] const Base &
#-----| ValueCategory = prvalue
# 4| expr: [PointerDereferenceExpr] * ...
# 4| Type = [SpecifiedType] const Base
# 4| ValueCategory = lvalue
#-----| 0: [CStyleCast] (const Base *)...
#-----| Conversion = [BaseClassConversion] base class conversion
#-----| Type = [PointerType] const Base *
#-----| ValueCategory = prvalue
# 4| expr: [AddressOfExpr] & ...
# 4| Type = [PointerType] const Derived *
# 4| ValueCategory = prvalue
#-----| 0: [ReferenceDereferenceExpr] (reference dereference)
#-----| Type = [SpecifiedType] const Derived
#-----| ValueCategory = lvalue
# 4| expr: [VariableAccess] (unnamed parameter 0)
# 4| Type = [LValueReferenceType] const Derived &
# 4| ValueCategory = prvalue(load)
#-----| 1: [ReturnStmt] return ...
#-----| 0: [ReferenceToExpr] (reference to)
#-----| 0: [PointerDereferenceExpr] * ...
#-----| Type = [Class] Derived
#-----| ValueCategory = lvalue
#-----| 0: [ThisExpr] this
#-----| Type = [PointerType] Derived *
#-----| ValueCategory = prvalue(load)
#-----| 0 converted: [ReferenceToExpr] (reference to)
#-----| Type = [LValueReferenceType] Derived &
#-----| ValueCategory = prvalue
#-----| expr: [PointerDereferenceExpr] * ...
#-----| Type = [Class] Derived
#-----| ValueCategory = lvalue
#-----| 0: [ThisExpr] this
#-----| Type = [PointerType] Derived *
#-----| ValueCategory = prvalue(load)
# 4| [MoveAssignmentOperator] Derived& Derived::operator=(Derived&&)
# 4| params:
#-----| 0: [Parameter] (unnamed parameter 0)
@@ -534,13 +534,13 @@ DynamicCast.cpp:
# 9| 0: [VariableAccess] d
# 9| Type = [PointerType] Derived *
# 9| ValueCategory = lvalue
# 9| 1: [DynamicCast] dynamic_cast<Derived *>...
# 9| 1: [VariableAccess] bp
# 9| Type = [PointerType] Base *
# 9| ValueCategory = prvalue(load)
# 9| 1 converted: [DynamicCast] dynamic_cast<Derived *>...
# 9| Conversion = [DynamicCast] dynamic_cast
# 9| Type = [PointerType] Derived *
# 9| ValueCategory = prvalue
# 9| expr: [VariableAccess] bp
# 9| Type = [PointerType] Base *
# 9| ValueCategory = prvalue(load)
# 10| 1: [ReturnStmt] return ...
# 12| [TopLevelFunction] void DynamicCastRef(Base&, Derived&)
# 12| params:
@@ -550,35 +550,35 @@ DynamicCast.cpp:
# 12| Type = [LValueReferenceType] Derived &
# 12| body: [BlockStmt] { ... }
# 13| 0: [ExprStmt] ExprStmt
# 13| 0: [ReferenceDereferenceExpr] (reference dereference)
# 13| 0: [FunctionCall] call to operator=
# 13| Type = [LValueReferenceType] Derived &
# 13| ValueCategory = prvalue
# 13| -1: [VariableAccess] d
# 13| Type = [LValueReferenceType] Derived &
# 13| ValueCategory = prvalue(load)
# 13| 0: [ReferenceDereferenceExpr] (reference dereference)
# 13| Type = [Class] Derived
# 13| ValueCategory = lvalue
# 13| 0: [VariableAccess] bp
# 13| Type = [LValueReferenceType] Base &
# 13| ValueCategory = prvalue(load)
# 13| 0 converted: [ReferenceToExpr] (reference to)
# 13| Type = [LValueReferenceType] const Derived &
# 13| ValueCategory = prvalue
# 13| : [CStyleCast] (const Derived)...
# 13| Conversion = [GlvalueConversion] glvalue conversion
# 13| Type = [SpecifiedType] const Derived
# 13| ValueCategory = lvalue
# 13| : [DynamicCast] dynamic_cast<Derived>...
# 13| Conversion = [DynamicCast] dynamic_cast
# 13| Type = [Class] Derived
# 13| ValueCategory = lvalue
# 13| : [ReferenceDereferenceExpr] (reference dereference)
# 13| Type = [Class] Base
# 13| ValueCategory = lvalue
# 13| 0 converted: [ReferenceDereferenceExpr] (reference dereference)
# 13| Type = [Class] Derived
# 13| ValueCategory = lvalue
# 13| expr: [FunctionCall] call to operator=
# 13| Type = [LValueReferenceType] Derived &
# 13| ValueCategory = prvalue
# 13| -1: [ReferenceDereferenceExpr] (reference dereference)
# 13| Type = [Class] Derived
# 13| ValueCategory = lvalue
# 13| expr: [VariableAccess] d
# 13| Type = [LValueReferenceType] Derived &
# 13| ValueCategory = prvalue(load)
# 13| 0: [ReferenceToExpr] (reference to)
# 13| Type = [LValueReferenceType] const Derived &
# 13| ValueCategory = prvalue
# 13| expr: [CStyleCast] (const Derived)...
# 13| Conversion = [GlvalueConversion] glvalue conversion
# 13| Type = [SpecifiedType] const Derived
# 13| ValueCategory = lvalue
# 13| expr: [DynamicCast] dynamic_cast<Derived>...
# 13| Conversion = [DynamicCast] dynamic_cast
# 13| Type = [Class] Derived
# 13| ValueCategory = lvalue
# 13| expr: [ReferenceDereferenceExpr] (reference dereference)
# 13| Type = [Class] Base
# 13| ValueCategory = lvalue
# 13| expr: [VariableAccess] bp
# 13| Type = [LValueReferenceType] Base &
# 13| ValueCategory = prvalue(load)
# 14| 1: [ReturnStmt] return ...
Parenthesis.c:
# 1| [TopLevelFunction] void Parenthesis(int)
@@ -596,23 +596,23 @@ Parenthesis.c:
# 2| 1: [MulExpr] ... * ...
# 2| Type = [IntType] int
# 2| ValueCategory = prvalue
# 2| 0: [ParenthesisExpr] (...)
# 2| 0: [AddExpr] ... + ...
# 2| Type = [IntType] int
# 2| ValueCategory = prvalue
# 2| expr: [AddExpr] ... + ...
# 2| 0: [VariableAccess] i
# 2| Type = [IntType] int
# 2| ValueCategory = prvalue(load)
# 2| 1: [Literal] 1
# 2| Type = [IntType] int
# 2| Value = [Literal] 1
# 2| ValueCategory = prvalue
# 2| 0: [VariableAccess] i
# 2| Type = [IntType] int
# 2| ValueCategory = prvalue(load)
# 2| 1: [Literal] 1
# 2| Type = [IntType] int
# 2| Value = [Literal] 1
# 2| ValueCategory = prvalue
# 2| 1: [Literal] 2
# 2| Type = [IntType] int
# 2| Value = [Literal] 2
# 2| ValueCategory = prvalue
# 2| 0 converted: [ParenthesisExpr] (...)
# 2| Type = [IntType] int
# 2| ValueCategory = prvalue
# 3| 1: [ReturnStmt] return ...
PointerDereference.c:
# 1| [TopLevelFunction] void PointerDereference(int*, int)
@@ -651,12 +651,12 @@ ReferenceDereference.cpp:
# 5| 0: [VariableAccess] j
# 5| Type = [IntType] int
# 5| ValueCategory = lvalue
# 5| 1: [ReferenceDereferenceExpr] (reference dereference)
# 5| 1: [VariableAccess] i
# 5| Type = [LValueReferenceType] int &
# 5| ValueCategory = prvalue(load)
# 5| 1 converted: [ReferenceDereferenceExpr] (reference dereference)
# 5| Type = [IntType] int
# 5| ValueCategory = prvalue(load)
# 5| expr: [VariableAccess] i
# 5| Type = [LValueReferenceType] int &
# 5| ValueCategory = prvalue(load)
# 6| 1: [ReturnStmt] return ...
ReferenceTo.cpp:
# 1| [TopLevelFunction] int& ReferenceTo(int*)
@@ -665,15 +665,15 @@ ReferenceTo.cpp:
# 1| Type = [IntPointerType] int *
# 1| body: [BlockStmt] { ... }
# 2| 0: [ReturnStmt] return ...
# 2| 0: [ReferenceToExpr] (reference to)
# 2| 0: [PointerDereferenceExpr] * ...
# 2| Type = [IntType] int
# 2| ValueCategory = lvalue
# 2| 0: [VariableAccess] i
# 2| Type = [IntPointerType] int *
# 2| ValueCategory = prvalue(load)
# 2| 0 converted: [ReferenceToExpr] (reference to)
# 2| Type = [LValueReferenceType] int &
# 2| ValueCategory = prvalue
# 2| expr: [PointerDereferenceExpr] * ...
# 2| Type = [IntType] int
# 2| ValueCategory = lvalue
# 2| 0: [VariableAccess] i
# 2| Type = [IntPointerType] int *
# 2| ValueCategory = prvalue(load)
Sizeof.c:
# 1| [TopLevelFunction] void Sizeof(int[])
# 1| params:
@@ -684,34 +684,34 @@ Sizeof.c:
# 2| 0: [VariableDeclarationEntry] definition of i
# 2| Type = [IntType] int
# 2| init: [Initializer] initializer for i
# 2| expr: [CStyleCast] (int)...
# 2| expr: [SizeofTypeOperator] sizeof(int)
# 2| Type = [LongType] unsigned long
# 2| Value = [SizeofTypeOperator] 4
# 2| ValueCategory = prvalue
# 2| expr converted: [CStyleCast] (int)...
# 2| Conversion = [IntegralConversion] integral conversion
# 2| Type = [IntType] int
# 2| Value = [CStyleCast] 4
# 2| ValueCategory = prvalue
# 2| expr: [SizeofTypeOperator] sizeof(int)
# 2| Type = [LongType] unsigned long
# 2| Value = [SizeofTypeOperator] 4
# 2| ValueCategory = prvalue
# 3| 1: [DeclStmt] declaration
# 3| 0: [VariableDeclarationEntry] definition of j
# 3| Type = [IntType] int
# 3| init: [Initializer] initializer for j
# 3| expr: [CStyleCast] (int)...
# 3| expr: [SizeofExprOperator] sizeof(<expr>)
# 3| Type = [LongType] unsigned long
# 3| Value = [SizeofExprOperator] 8
# 3| ValueCategory = prvalue
# 3| 0: [VariableAccess] array
# 3| Type = [IntPointerType] int *
# 3| ValueCategory = lvalue
# 3| 0 converted: [ParenthesisExpr] (...)
# 3| Type = [IntPointerType] int *
# 3| ValueCategory = lvalue
# 3| expr converted: [CStyleCast] (int)...
# 3| Conversion = [IntegralConversion] integral conversion
# 3| Type = [IntType] int
# 3| Value = [CStyleCast] 8
# 3| ValueCategory = prvalue
# 3| expr: [SizeofExprOperator] sizeof(<expr>)
# 3| Type = [LongType] unsigned long
# 3| Value = [SizeofExprOperator] 8
# 3| ValueCategory = prvalue
# 3| 0: [ParenthesisExpr] (...)
# 3| Type = [IntPointerType] int *
# 3| ValueCategory = lvalue
# 3| expr: [VariableAccess] array
# 3| Type = [IntPointerType] int *
# 3| ValueCategory = lvalue
# 4| 2: [ReturnStmt] return ...
StatementExpr.c:
# 1| [TopLevelFunction] void StatementExpr()
@@ -751,12 +751,12 @@ StaticMemberAccess.cpp:
# 7| 1: [VariableAccess] i
# 7| Type = [IntType] int
# 7| ValueCategory = prvalue
# 7| -1: [VariableAccess] xref
# 7| Type = [LValueReferenceType] X &
# 7| ValueCategory = prvalue(load)
# 7| -1: [ReferenceDereferenceExpr] (reference dereference)
# 7| Type = [Struct] X
# 7| ValueCategory = lvalue
# 7| expr: [VariableAccess] xref
# 7| Type = [LValueReferenceType] X &
# 7| ValueCategory = prvalue(load)
# 9| 1: [ReturnStmt] return ...
Subscript.c:
# 1| [TopLevelFunction] void Subscript(int[], int)
@@ -817,13 +817,9 @@ Throw.cpp:
# 7| 0: [TryStmt] try { ... }
# 7| 0: [BlockStmt] { ... }
# 8| 0: [IfStmt] if (...) ...
# 8| 0: [CStyleCast] (bool)...
# 8| Conversion = [BoolConversion] conversion to bool
# 8| Type = [BoolType] bool
# 8| ValueCategory = prvalue
# 8| expr: [VariableAccess] i
# 8| Type = [IntType] int
# 8| ValueCategory = prvalue(load)
# 8| 0: [VariableAccess] i
# 8| Type = [IntType] int
# 8| ValueCategory = prvalue(load)
# 9| 1: [ExprStmt] ExprStmt
# 9| 0: [ThrowExpr] throw ...
# 9| Type = [Class] E
@@ -839,6 +835,10 @@ Throw.cpp:
# 11| 0: [ConstructorCall] call to F
# 11| Type = [VoidType] void
# 11| ValueCategory = prvalue
# 8| 0 converted: [CStyleCast] (bool)...
# 8| Conversion = [BoolConversion] conversion to bool
# 8| Type = [BoolType] bool
# 8| ValueCategory = prvalue
# 12| 1: [Handler] <handler>
# 12| 0: [CatchBlock] { ... }
# 13| 0: [ExprStmt] ExprStmt
@@ -962,25 +962,25 @@ Varargs.c:
# 10| 0: [BuiltInVarArgsStart] __builtin_va_start
# 10| Type = [VoidType] void
# 10| ValueCategory = prvalue
# 10| 0: [ArrayToPointerConversion] array to pointer conversion
# 10| Type = [PointerType] __va_list_tag *
# 10| ValueCategory = prvalue
# 10| expr: [VariableAccess] args
# 10| Type = [CTypedefType] va_list
# 10| ValueCategory = lvalue
# 10| 0: [VariableAccess] args
# 10| Type = [CTypedefType] va_list
# 10| ValueCategory = lvalue
# 10| 1: [VariableAccess] text
# 10| Type = [PointerType] const char *
# 10| ValueCategory = lvalue
# 10| 0 converted: [ArrayToPointerConversion] array to pointer conversion
# 10| Type = [PointerType] __va_list_tag *
# 10| ValueCategory = prvalue
# 11| 2: [ExprStmt] ExprStmt
# 11| 0: [BuiltInVarArgsEnd] __builtin_va_end
# 11| Type = [VoidType] void
# 11| ValueCategory = prvalue
# 11| 0: [ArrayToPointerConversion] array to pointer conversion
# 11| 0: [VariableAccess] args
# 11| Type = [CTypedefType] va_list
# 11| ValueCategory = lvalue
# 11| 0 converted: [ArrayToPointerConversion] array to pointer conversion
# 11| Type = [PointerType] __va_list_tag *
# 11| ValueCategory = prvalue
# 11| expr: [VariableAccess] args
# 11| Type = [CTypedefType] va_list
# 11| ValueCategory = lvalue
# 12| 3: [ReturnStmt] return ...
macro_etc.c:
# 3| [TopLevelFunction] int bar(int)
@@ -1070,29 +1070,29 @@ macro_etc.c:
# 27| 0: [VariableAccess] i
# 27| Type = [PlainCharType] char
# 27| ValueCategory = lvalue
# 27| 1: [CStyleCast] (char)...
# 27| 1: [Literal] 0
# 27| Type = [IntType] int
# 27| Value = [Literal] 0
# 27| ValueCategory = prvalue
# 27| 1 converted: [CStyleCast] (char)...
# 27| Conversion = [IntegralConversion] integral conversion
# 27| Type = [PlainCharType] char
# 27| Value = [CStyleCast] 0
# 27| ValueCategory = prvalue
# 27| expr: [Literal] 0
# 27| Type = [IntType] int
# 27| Value = [Literal] 0
# 27| ValueCategory = prvalue
# 27| 1: [LTExpr] ... < ...
# 27| Type = [IntType] int
# 27| ValueCategory = prvalue
# 27| 0: [CStyleCast] (int)...
# 27| Conversion = [IntegralConversion] integral conversion
# 27| Type = [IntType] int
# 27| ValueCategory = prvalue
# 27| expr: [VariableAccess] i
# 27| Type = [PlainCharType] char
# 27| ValueCategory = prvalue(load)
# 27| 0: [VariableAccess] i
# 27| Type = [PlainCharType] char
# 27| ValueCategory = prvalue(load)
# 27| 1: [Literal] 6
# 27| Type = [IntType] int
# 27| Value = [Literal] 6
# 27| ValueCategory = prvalue
# 27| 0 converted: [CStyleCast] (int)...
# 27| Conversion = [IntegralConversion] integral conversion
# 27| Type = [IntType] int
# 27| ValueCategory = prvalue
# 27| 2: [PrefixIncrExpr] ++ ...
# 27| Type = [PlainCharType] char
# 27| ValueCategory = prvalue
@@ -1107,13 +1107,13 @@ macro_etc.c:
# 27| 0: [VariableAccess] t
# 27| Type = [IntType] int
# 27| ValueCategory = lvalue
# 27| 1: [CStyleCast] (int)...
# 27| 1: [VariableAccess] i
# 27| Type = [PlainCharType] char
# 27| ValueCategory = prvalue(load)
# 27| 1 converted: [CStyleCast] (int)...
# 27| Conversion = [IntegralConversion] integral conversion
# 27| Type = [IntType] int
# 27| ValueCategory = prvalue
# 27| expr: [VariableAccess] i
# 27| Type = [PlainCharType] char
# 27| ValueCategory = prvalue(load)
# 28| 7: [ForStmt] for(...;...;...) ...
# 28| 0: [ExprStmt] ExprStmt
# 28| 0: [AssignExpr] ... = ...
@@ -1122,29 +1122,29 @@ macro_etc.c:
# 28| 0: [VariableAccess] i
# 28| Type = [PlainCharType] char
# 28| ValueCategory = lvalue
# 28| 1: [CStyleCast] (char)...
# 28| 1: [Literal] 0
# 28| Type = [IntType] int
# 28| Value = [Literal] 0
# 28| ValueCategory = prvalue
# 28| 1 converted: [CStyleCast] (char)...
# 28| Conversion = [IntegralConversion] integral conversion
# 28| Type = [PlainCharType] char
# 28| Value = [CStyleCast] 0
# 28| ValueCategory = prvalue
# 28| expr: [Literal] 0
# 28| Type = [IntType] int
# 28| Value = [Literal] 0
# 28| ValueCategory = prvalue
# 28| 1: [LTExpr] ... < ...
# 28| Type = [IntType] int
# 28| ValueCategory = prvalue
# 28| 0: [CStyleCast] (int)...
# 28| Conversion = [IntegralConversion] integral conversion
# 28| Type = [IntType] int
# 28| ValueCategory = prvalue
# 28| expr: [VariableAccess] i
# 28| Type = [PlainCharType] char
# 28| ValueCategory = prvalue(load)
# 28| 0: [VariableAccess] i
# 28| Type = [PlainCharType] char
# 28| ValueCategory = prvalue(load)
# 28| 1: [Literal] 6
# 28| Type = [IntType] int
# 28| Value = [Literal] 6
# 28| ValueCategory = prvalue
# 28| 0 converted: [CStyleCast] (int)...
# 28| Conversion = [IntegralConversion] integral conversion
# 28| Type = [IntType] int
# 28| ValueCategory = prvalue
# 28| 2: [PrefixIncrExpr] ++ ...
# 28| Type = [PlainCharType] char
# 28| ValueCategory = prvalue
@@ -1159,13 +1159,13 @@ macro_etc.c:
# 28| 0: [VariableAccess] t
# 28| Type = [IntType] int
# 28| ValueCategory = lvalue
# 28| 1: [CStyleCast] (int)...
# 28| 1: [VariableAccess] i
# 28| Type = [PlainCharType] char
# 28| ValueCategory = prvalue(load)
# 28| 1 converted: [CStyleCast] (int)...
# 28| Conversion = [IntegralConversion] integral conversion
# 28| Type = [IntType] int
# 28| ValueCategory = prvalue
# 28| expr: [VariableAccess] i
# 28| Type = [PlainCharType] char
# 28| ValueCategory = prvalue(load)
# 29| 8: [ExprStmt] ExprStmt
# 29| 0: [AssignExpr] ... = ...
# 29| Type = [CharPointerType] char *
@@ -1173,13 +1173,13 @@ macro_etc.c:
# 29| 0: [VariableAccess] bt
# 29| Type = [CharPointerType] char *
# 29| ValueCategory = lvalue
# 29| 1: [ArrayToPointerConversion] array to pointer conversion
# 29| 1: b
# 29| Type = [ArrayType] char[2]
# 29| Value = [StringLiteral] "b"
# 29| ValueCategory = lvalue
# 29| 1 converted: [ArrayToPointerConversion] array to pointer conversion
# 29| Type = [CharPointerType] char *
# 29| ValueCategory = prvalue
# 29| expr: b
# 29| Type = [ArrayType] char[2]
# 29| Value = [StringLiteral] "b"
# 29| ValueCategory = lvalue
# 30| 9: [ExprStmt] ExprStmt
# 30| 0: [AssignExpr] ... = ...
# 30| Type = [PlainCharType] char
@@ -1187,23 +1187,23 @@ macro_etc.c:
# 30| 0: [ArrayExpr] access to array
# 30| Type = [PlainCharType] char
# 30| ValueCategory = lvalue
# 30| 0: [ArrayToPointerConversion] array to pointer conversion
# 30| Type = [CharPointerType] char *
# 30| ValueCategory = prvalue
# 30| expr: [VariableAccess] arr
# 30| Type = [ArrayType] char[]
# 30| ValueCategory = lvalue
# 30| 0: [VariableAccess] arr
# 30| Type = [ArrayType] char[]
# 30| ValueCategory = lvalue
# 30| 1: [Literal] 0
# 30| Type = [IntType] int
# 30| Value = [Literal] 0
# 30| ValueCategory = prvalue
# 30| 1: [CStyleCast] (char)...
# 30| 0 converted: [ArrayToPointerConversion] array to pointer conversion
# 30| Type = [CharPointerType] char *
# 30| ValueCategory = prvalue
# 30| 1: [VariableAccess] t
# 30| Type = [IntType] int
# 30| ValueCategory = prvalue(load)
# 30| 1 converted: [CStyleCast] (char)...
# 30| Conversion = [IntegralConversion] integral conversion
# 30| Type = [PlainCharType] char
# 30| ValueCategory = prvalue
# 30| expr: [VariableAccess] t
# 30| Type = [IntType] int
# 30| ValueCategory = prvalue(load)
# 31| 10: [ExprStmt] ExprStmt
# 31| 0: [AssignExpr] ... = ...
# 31| Type = [FunctionPointerType] ..(*)(..)
@@ -1221,23 +1221,23 @@ macro_etc.c:
# 32| 0: [VariableAccess] t
# 32| Type = [IntType] int
# 32| ValueCategory = prvalue(load)
# 32| 1: [CStyleCast] (int)...
# 32| 1: [ArrayExpr] access to array
# 32| Type = [PlainCharType] char
# 32| ValueCategory = prvalue(load)
# 32| 0: [VariableAccess] arr
# 32| Type = [ArrayType] char[]
# 32| ValueCategory = lvalue
# 32| 1: [Literal] 1
# 32| Type = [IntType] int
# 32| Value = [Literal] 1
# 32| ValueCategory = prvalue
# 32| 0 converted: [ArrayToPointerConversion] array to pointer conversion
# 32| Type = [CharPointerType] char *
# 32| ValueCategory = prvalue
# 32| 1 converted: [CStyleCast] (int)...
# 32| Conversion = [IntegralConversion] integral conversion
# 32| Type = [IntType] int
# 32| ValueCategory = prvalue
# 32| expr: [ArrayExpr] access to array
# 32| Type = [PlainCharType] char
# 32| ValueCategory = prvalue(load)
# 32| 0: [ArrayToPointerConversion] array to pointer conversion
# 32| Type = [CharPointerType] char *
# 32| ValueCategory = prvalue
# 32| expr: [VariableAccess] arr
# 32| Type = [ArrayType] char[]
# 32| ValueCategory = lvalue
# 32| 1: [Literal] 1
# 32| Type = [IntType] int
# 32| Value = [Literal] 1
# 32| ValueCategory = prvalue
union_etc.cpp:
# 2| [CopyAssignmentOperator] S& S::operator=(S const&)
# 2| params:
@@ -1413,27 +1413,27 @@ union_etc.cpp:
# 27| -1: [VariableAccess] s
# 27| Type = [Struct] S
# 27| ValueCategory = lvalue
# 27| 1: [ParenthesisExpr] (...)
# 27| 1: [AddExpr] ... + ...
# 27| Type = [IntType] int
# 27| ValueCategory = prvalue
# 27| expr: [AddExpr] ... + ...
# 27| 0: [ValueFieldAccess] i
# 27| Type = [IntType] int
# 27| ValueCategory = prvalue
# 27| 0: [ValueFieldAccess] i
# 27| Type = [IntType] int
# 27| ValueCategory = prvalue(load)
# 27| -1: [ValueFieldAccess] c
# 27| Type = [NestedClass] C
# 27| ValueCategory = lvalue
# 27| -1: [VariableAccess] u
# 27| Type = [Union] U
# 27| ValueCategory = lvalue
# 27| 1: [ValueFieldAccess] j
# 27| Type = [IntType] int
# 27| ValueCategory = prvalue(load)
# 27| ValueCategory = prvalue(load)
# 27| -1: [ValueFieldAccess] c
# 27| Type = [NestedClass] C
# 27| ValueCategory = lvalue
# 27| -1: [VariableAccess] u
# 27| Type = [Union] U
# 27| ValueCategory = lvalue
# 27| 1: [ValueFieldAccess] j
# 27| Type = [IntType] int
# 27| ValueCategory = prvalue(load)
# 27| -1: [VariableAccess] u
# 27| Type = [Union] U
# 27| ValueCategory = lvalue
# 27| 1 converted: [ParenthesisExpr] (...)
# 27| Type = [IntType] int
# 27| ValueCategory = prvalue
# 28| 5: [ReturnStmt] return ...
# 28| 0: [ValueFieldAccess] g
# 28| Type = [IntType] int
@@ -1485,63 +1485,63 @@ union_etc.cpp:
# 37| 0: [VariableDeclarationEntry] definition of s
# 37| Type = [PointerType] const T *
# 37| init: [Initializer] initializer for s
# 37| expr: [CStyleCast] (const T *)...
# 37| expr: [AddressOfExpr] & ...
# 37| Type = [PointerType] C *
# 37| ValueCategory = prvalue
# 37| 0: [VariableAccess] c
# 37| Type = [Class] C
# 37| ValueCategory = lvalue
# 37| expr converted: [CStyleCast] (const T *)...
# 37| Conversion = [PointerConversion] pointer conversion
# 37| Type = [PointerType] const T *
# 37| ValueCategory = prvalue
# 37| expr: [AddressOfExpr] & ...
# 37| Type = [PointerType] C *
# 37| ValueCategory = prvalue
# 37| 0: [VariableAccess] c
# 37| Type = [Class] C
# 37| ValueCategory = lvalue
# 38| 1: [DeclStmt] declaration
# 38| 0: [VariableDeclarationEntry] definition of t
# 38| Type = [PointerType] const S *
# 38| init: [Initializer] initializer for t
# 38| expr: [StaticCast] static_cast<const S *>...
# 38| expr: [VariableAccess] s
# 38| Type = [PointerType] const T *
# 38| ValueCategory = prvalue(load)
# 38| expr converted: [StaticCast] static_cast<const S *>...
# 38| Conversion = [BaseClassConversion] base class conversion
# 38| Type = [PointerType] const S *
# 38| ValueCategory = prvalue
# 38| expr: [VariableAccess] s
# 38| Type = [PointerType] const T *
# 38| ValueCategory = prvalue(load)
# 39| 2: [DeclStmt] declaration
# 39| 0: [VariableDeclarationEntry] definition of x
# 39| Type = [PointerType] T *
# 39| init: [Initializer] initializer for x
# 39| expr: [ConstCast] const_cast<T *>...
# 39| expr: [VariableAccess] s
# 39| Type = [PointerType] const T *
# 39| ValueCategory = prvalue(load)
# 39| expr converted: [ConstCast] const_cast<T *>...
# 39| Conversion = [PointerConversion] pointer conversion
# 39| Type = [PointerType] T *
# 39| ValueCategory = prvalue
# 39| expr: [VariableAccess] s
# 39| Type = [PointerType] const T *
# 39| ValueCategory = prvalue(load)
# 40| 3: [DeclStmt] declaration
# 40| 0: [VariableDeclarationEntry] definition of v
# 40| Type = [PointerType] const T *
# 40| init: [Initializer] initializer for v
# 40| expr: [DynamicCast] dynamic_cast<const T *>...
# 40| expr: [VariableAccess] t
# 40| Type = [PointerType] const S *
# 40| ValueCategory = prvalue(load)
# 40| expr converted: [DynamicCast] dynamic_cast<const T *>...
# 40| Conversion = [DynamicCast] dynamic_cast
# 40| Type = [PointerType] const T *
# 40| ValueCategory = prvalue
# 40| expr: [VariableAccess] t
# 40| Type = [PointerType] const S *
# 40| ValueCategory = prvalue(load)
# 41| 4: [DeclStmt] declaration
# 41| 0: [VariableDeclarationEntry] definition of w
# 41| Type = [PointerType] S *
# 41| init: [Initializer] initializer for w
# 41| expr: [ReinterpretCast] reinterpret_cast<S *>...
# 41| expr: [AddressOfExpr] & ...
# 41| Type = [PointerType] C *
# 41| ValueCategory = prvalue
# 41| 0: [VariableAccess] c
# 41| Type = [Class] C
# 41| ValueCategory = lvalue
# 41| expr converted: [ReinterpretCast] reinterpret_cast<S *>...
# 41| Conversion = [PointerConversion] pointer conversion
# 41| Type = [PointerType] S *
# 41| ValueCategory = prvalue
# 41| expr: [AddressOfExpr] & ...
# 41| Type = [PointerType] C *
# 41| ValueCategory = prvalue
# 41| 0: [VariableAccess] c
# 41| Type = [Class] C
# 41| ValueCategory = lvalue
# 42| 5: [ReturnStmt] return ...
# 42| 0: [ValueFieldAccess] b
# 42| Type = [IntType] int
@@ -1549,10 +1549,10 @@ union_etc.cpp:
# 42| -1: [PointerFieldAccess] c
# 42| Type = [NestedClass] C
# 42| ValueCategory = lvalue
# 42| -1: [VariableAccess] x
# 42| Type = [PointerType] T *
# 42| ValueCategory = prvalue(load)
# 42| -1: [CStyleCast] (S *)...
# 42| Conversion = [BaseClassConversion] base class conversion
# 42| Type = [PointerType] S *
# 42| ValueCategory = prvalue
# 42| expr: [VariableAccess] x
# 42| Type = [PointerType] T *
# 42| ValueCategory = prvalue(load)

File diff suppressed because it is too large Load Diff