diff --git a/cpp/ql/src/semmle/code/cpp/Class.qll b/cpp/ql/src/semmle/code/cpp/Class.qll index 08111800331..cda573e366c 100644 --- a/cpp/ql/src/semmle/code/cpp/Class.qll +++ b/cpp/ql/src/semmle/code/cpp/Class.qll @@ -15,6 +15,9 @@ class Class extends UserType { isClass(underlyingElement(this)) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "Class" } + /** Gets a child declaration of this class. */ override Declaration getADeclaration() { result = this.getAMember() } @@ -980,6 +983,9 @@ class VirtualBaseClass extends Class { exists(VirtualClassDerivation cd | cd.getBaseClass() = this) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "VirtualBaseClass" } + /** A virtual class derivation of which this class is the base. */ VirtualClassDerivation getAVirtualDerivation() { result.getBaseClass() = this @@ -1004,6 +1010,9 @@ class ProxyClass extends UserType { usertypes(underlyingElement(this),_,9) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "ProxyClass" } + /** Gets the location of the proxy class. */ override Location getLocation() { result = getTemplateParameter().getDefinitionLocation() diff --git a/cpp/ql/src/semmle/code/cpp/Element.qll b/cpp/ql/src/semmle/code/cpp/Element.qll index 564e8a8e63b..2f211b73100 100644 --- a/cpp/ql/src/semmle/code/cpp/Element.qll +++ b/cpp/ql/src/semmle/code/cpp/Element.qll @@ -52,8 +52,9 @@ pragma[inline] class ElementBase extends @element { /** Gets a textual representation of this element. */ string toString() { none() } - /** Retrieves canonical QL class(es) corresponding to this element. */ - string getCanonicalQLClass() { result = "ElementBase" } + + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "???" } } /** @@ -64,9 +65,6 @@ class Element extends ElementBase { /** Gets the primary file where this element occurs. */ File getFile() { result = this.getLocation().getFile() } - /** Retrieves canonical QL class(es) corresponding to this element. */ - string getCanonicalQLClass() { result = "Element" } - /** * Holds if this element may be from source. * diff --git a/cpp/ql/src/semmle/code/cpp/Enum.qll b/cpp/ql/src/semmle/code/cpp/Enum.qll index b5a06db8879..1d6e52c4574 100644 --- a/cpp/ql/src/semmle/code/cpp/Enum.qll +++ b/cpp/ql/src/semmle/code/cpp/Enum.qll @@ -9,6 +9,9 @@ class Enum extends UserType, IntegralOrEnumType { EnumConstant getAnEnumConstant() { result.getDeclaringEnum() = this } EnumConstant getEnumConstant(int index) { enumconstants(unresolveElement(result),underlyingElement(this),index,_,_,_) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "Enum" } + /** * Gets a descriptive string for the enum. This method is only intended to * be used for debugging purposes. For more information, see the comment @@ -50,6 +53,8 @@ class LocalEnum extends Enum { LocalEnum() { isLocal() } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "LocalEnum" } } /** @@ -61,6 +66,9 @@ class NestedEnum extends Enum { this.isMember() } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "NestedEnum" } + /** Holds if this member is private. */ predicate isPrivate() { this.hasSpecifier("private") } @@ -81,6 +89,8 @@ class ScopedEnum extends Enum { ScopedEnum() { usertypes(underlyingElement(this),_,13) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "ScopedEnum" } } /** @@ -96,6 +106,9 @@ class EnumConstant extends Declaration, @enumconstant { */ Enum getDeclaringEnum() { enumconstants(underlyingElement(this),unresolveElement(result),_,_,_,_) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "EnumConstant" } + override Class getDeclaringType() { result = this.getDeclaringEnum().getDeclaringType() } diff --git a/cpp/ql/src/semmle/code/cpp/Function.qll b/cpp/ql/src/semmle/code/cpp/Function.qll index 2ba96f97479..4c467faa0c1 100644 --- a/cpp/ql/src/semmle/code/cpp/Function.qll +++ b/cpp/ql/src/semmle/code/cpp/Function.qll @@ -707,7 +707,7 @@ class TopLevelFunction extends Function { TopLevelFunction() { not this.isMember() } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "TopLevelFunction" } } @@ -720,7 +720,7 @@ class MemberFunction extends Function { this.isMember() } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "MemberFunction" } /** @@ -774,6 +774,9 @@ class VirtualFunction extends MemberFunction { this.hasSpecifier("virtual") or purefunctions(underlyingElement(this)) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "VirtualFunction" } + /** Holds if this virtual function is pure. */ predicate isPure() { this instanceof PureVirtualFunction } @@ -791,6 +794,8 @@ class PureVirtualFunction extends VirtualFunction { PureVirtualFunction() { purefunctions(underlyingElement(this)) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "PureVirtualFunction" } } /** @@ -802,6 +807,8 @@ class ConstMemberFunction extends MemberFunction { ConstMemberFunction() { this.hasSpecifier("const") } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "ConstMemberFunction" } } /** @@ -811,6 +818,9 @@ class Constructor extends MemberFunction { Constructor() { functions(underlyingElement(this),_,2) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "Constructor" } + /** * Holds if this constructor serves as a default constructor. * @@ -856,6 +866,9 @@ class ConversionConstructor extends Constructor, ImplicitConversionFunction { and not(this instanceof CopyConstructor) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "ConversionConstructor" } + /** Gets the type this `ConversionConstructor` takes as input. */ override Type getSourceType() { result = this.getParameter(0).getType() } @@ -911,6 +924,9 @@ class CopyConstructor extends Constructor { not exists(getATemplateArgument()) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "CopyConstructor" } + /** * Holds if we cannot determine that this constructor will become a copy * constructor in all instantiations. Depending on template parameters of the @@ -959,6 +975,9 @@ class MoveConstructor extends Constructor { not exists(getATemplateArgument()) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "MoveConstructor" } + /** * Holds if we cannot determine that this constructor will become a move * constructor in all instantiations. Depending on template parameters of the @@ -991,6 +1010,9 @@ class NoArgConstructor extends Constructor { class Destructor extends MemberFunction { Destructor() { functions(underlyingElement(this),_,3) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "Destructor" } + /** * Gets a compiler-generated action which destructs a base class or member * variable. @@ -1050,6 +1072,8 @@ class CopyAssignmentOperator extends Operator { not exists(this.getParameter(1)) and not exists(getATemplateArgument()) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "CopyAssignmentOperator" } } @@ -1069,6 +1093,8 @@ class MoveAssignmentOperator extends Operator { not exists(this.getParameter(1)) and not exists(getATemplateArgument()) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "MoveAssignmentOperator" } } @@ -1089,6 +1115,8 @@ class MoveAssignmentOperator extends Operator { class TemplateFunction extends Function { TemplateFunction() { is_function_template(underlyingElement(this)) and exists(getATemplateArgument()) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "TemplateFunction" } /** * Gets a compiler-generated instantiation of this function template. */ @@ -1120,6 +1148,9 @@ class FunctionTemplateInstantiation extends Function { tf.getAnInstantiation() = this } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "FunctionTemplateSpecialization" } + /** * Gets the function template from which this instantiation was instantiated. * @@ -1156,6 +1187,9 @@ class FunctionTemplateSpecialization extends Function { this.isSpecialization() } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "FunctionTemplateSpecialization" } + /** * Gets the primary template for the specialization (the function template * this specializes). diff --git a/cpp/ql/src/semmle/code/cpp/Initializer.qll b/cpp/ql/src/semmle/code/cpp/Initializer.qll index 1cb568d9193..287c2982305 100644 --- a/cpp/ql/src/semmle/code/cpp/Initializer.qll +++ b/cpp/ql/src/semmle/code/cpp/Initializer.qll @@ -6,7 +6,7 @@ import semmle.code.cpp.controlflow.ControlFlowGraph class Initializer extends ControlFlowNode, @initialiser { override Location getLocation() { initialisers(underlyingElement(this),_,_,result) } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "Initializer" } /** Holds if this initializer is explicit in the source. */ diff --git a/cpp/ql/src/semmle/code/cpp/Parameter.qll b/cpp/ql/src/semmle/code/cpp/Parameter.qll index b209aef7939..e25335ca2c6 100644 --- a/cpp/ql/src/semmle/code/cpp/Parameter.qll +++ b/cpp/ql/src/semmle/code/cpp/Parameter.qll @@ -33,7 +33,7 @@ class Parameter extends LocalScopeVariable, @parameter { result = "p#" + this.getIndex().toString()) } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "Parameter" } /** diff --git a/cpp/ql/src/semmle/code/cpp/PrintAST.qll b/cpp/ql/src/semmle/code/cpp/PrintAST.qll index c043282605d..5aeea52f905 100644 --- a/cpp/ql/src/semmle/code/cpp/PrintAST.qll +++ b/cpp/ql/src/semmle/code/cpp/PrintAST.qll @@ -163,6 +163,7 @@ class PrintASTNode extends TPrintASTNode { * A concatenation of all the leaf QL types of `el` */ private string qlClass(ElementBase el) { result = "["+ el.getCanonicalQLClass() + "]: " } +//private string qlClass(ElementBase el) { result = "["+ concat(el.getAQlClass(), ",") + "]: " } /** * A node representing an AST node. diff --git a/cpp/ql/src/semmle/code/cpp/Struct.qll b/cpp/ql/src/semmle/code/cpp/Struct.qll index 6b1f39eb4ca..9a0495fa9a7 100644 --- a/cpp/ql/src/semmle/code/cpp/Struct.qll +++ b/cpp/ql/src/semmle/code/cpp/Struct.qll @@ -8,6 +8,9 @@ class Struct extends Class { Struct() { usertypes(underlyingElement(this),_,1) or usertypes(underlyingElement(this),_,3) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "Struct" } + override string explain() { result = "struct " + this.getName() } override predicate isDeeplyConstBelow() { any() } // No subparts diff --git a/cpp/ql/src/semmle/code/cpp/Type.qll b/cpp/ql/src/semmle/code/cpp/Type.qll index 2a1071ec596..80df677a975 100644 --- a/cpp/ql/src/semmle/code/cpp/Type.qll +++ b/cpp/ql/src/semmle/code/cpp/Type.qll @@ -331,6 +331,8 @@ class UnknownType extends BuiltInType { UnknownType() { builtintypes(underlyingElement(this),_,2,_,_,_) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "UnknownType" } } private predicate isArithmeticType(@builtintype type, int kind) { @@ -485,7 +487,7 @@ class BoolType extends IntegralType { BoolType() { builtintypes(underlyingElement(this),_,4,_,_,_) } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "BoolType" } } @@ -501,7 +503,7 @@ class PlainCharType extends CharType { PlainCharType() { builtintypes(underlyingElement(this),_,5,_,_,_) } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "PlainCharType" } } @@ -512,7 +514,7 @@ class UnsignedCharType extends CharType { UnsignedCharType() { builtintypes(underlyingElement(this),_,6,_,_,_) } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "UnsignedCharType" } } @@ -523,7 +525,7 @@ class SignedCharType extends CharType { SignedCharType() { builtintypes(underlyingElement(this),_,7,_,_,_) } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "SignedCharType" } } @@ -536,7 +538,7 @@ class ShortType extends IntegralType { builtintypes(underlyingElement(this),_,8,_,_,_) or builtintypes(underlyingElement(this),_,9,_,_,_) or builtintypes(underlyingElement(this),_,10,_,_,_) } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "ShortType" } } @@ -549,7 +551,7 @@ class IntType extends IntegralType { builtintypes(underlyingElement(this),_,11,_,_,_) or builtintypes(underlyingElement(this),_,12,_,_,_) or builtintypes(underlyingElement(this),_,13,_,_,_) } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "IntType" } } @@ -562,7 +564,7 @@ class LongType extends IntegralType { builtintypes(underlyingElement(this),_,14,_,_,_) or builtintypes(underlyingElement(this),_,15,_,_,_) or builtintypes(underlyingElement(this),_,16,_,_,_) } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "LongType" } } @@ -575,7 +577,7 @@ class LongLongType extends IntegralType { builtintypes(underlyingElement(this),_,17,_,_,_) or builtintypes(underlyingElement(this),_,18,_,_,_) or builtintypes(underlyingElement(this),_,19,_,_,_) } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "LongLongType" } } @@ -608,7 +610,7 @@ class FloatType extends FloatingPointType { FloatType() { builtintypes(underlyingElement(this),_,24,_,_,_) } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "FloatType" } } @@ -619,7 +621,7 @@ class DoubleType extends FloatingPointType { DoubleType() { builtintypes(underlyingElement(this),_,25,_,_,_) } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "DoubleType" } } @@ -630,7 +632,7 @@ class LongDoubleType extends FloatingPointType { LongDoubleType() { builtintypes(underlyingElement(this),_,26,_,_,_) } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "LongDoubleType" } } @@ -677,7 +679,7 @@ class VoidType extends BuiltInType { VoidType() { builtintypes(underlyingElement(this),_,3,_,_,_) } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "VoidType" } } @@ -692,6 +694,8 @@ class WideCharType extends IntegralType { WideCharType() { builtintypes(underlyingElement(this),_,33,_,_,_) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "WideCharType" } } /** @@ -701,6 +705,8 @@ class Char16Type extends IntegralType { Char16Type() { builtintypes(underlyingElement(this),_,43,_,_,_) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "Char16Type" } } /** @@ -710,6 +716,8 @@ class Char32Type extends IntegralType { Char32Type() { builtintypes(underlyingElement(this),_,44,_,_,_) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "Char32Type" } } /** @@ -723,6 +731,9 @@ class Char32Type extends IntegralType { */ class NullPointerType extends BuiltInType { NullPointerType() { builtintypes(underlyingElement(this),_,34,_,_,_) } + + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "NullPointerType" } } /** @@ -884,6 +895,9 @@ class PointerType extends DerivedType { PointerType() { derivedtypes(underlyingElement(this),_,1,_) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "PointerType" } + override int getPointerIndirectionLevel() { result = 1 + this.getBaseType().getPointerIndirectionLevel() } @@ -931,6 +945,9 @@ class ReferenceType extends DerivedType { */ class LValueReferenceType extends ReferenceType { LValueReferenceType() { derivedtypes(underlyingElement(this),_,2,_) } + + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "LValueReferenceType" } } /** @@ -939,6 +956,9 @@ class LValueReferenceType extends ReferenceType { class RValueReferenceType extends ReferenceType { RValueReferenceType() { derivedtypes(underlyingElement(this),_,8,_) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "RValueReferenceType" } + override string explain() { result = "rvalue " + super.explain() } } @@ -949,6 +969,9 @@ class SpecifiedType extends DerivedType { SpecifiedType() { derivedtypes(underlyingElement(this),_,3,_) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "SpecifiedType" } + override int getSize() { result = this.getBaseType().getSize() } override int getAlignment() { result = this.getBaseType().getAlignment() } @@ -991,7 +1014,7 @@ class ArrayType extends DerivedType { ArrayType() { derivedtypes(underlyingElement(this),_,4,_) } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "ArrayType" } predicate hasArraySize() { arraysizes(underlyingElement(this),_,_,_) } @@ -1082,6 +1105,9 @@ class FunctionPointerType extends FunctionPointerIshType { derivedtypes(underlyingElement(this),_,6,_) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "FunctionPointerType" } + override int getPointerIndirectionLevel() { result = 1 } @@ -1097,6 +1123,9 @@ class FunctionReferenceType extends FunctionPointerIshType { derivedtypes(underlyingElement(this),_,7,_) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "FunctionReferenceType" } + override int getPointerIndirectionLevel() { result = getBaseType().getPointerIndirectionLevel() } @@ -1167,6 +1196,9 @@ class PointerToMemberType extends Type, @ptrtomember { /** a printable representation of this named element */ override string toString() { result = this.getName() } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "PointerToMemberType" } + /** the name of this type */ override string getName() { result = "..:: *" } @@ -1201,6 +1233,9 @@ class RoutineType extends Type, @routinetype { /** a printable representation of this named element */ override string toString() { result = this.getName() } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "RoutineType" } + override string getName() { result = "..()(..)" } Type getParameterType(int n) { routinetypeargs(underlyingElement(this),n,unresolveElement(result)) } @@ -1256,6 +1291,9 @@ class TemplateParameter extends UserType { TemplateParameter() { usertypes(underlyingElement(this), _, 7) or usertypes(underlyingElement(this), _, 8) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "TemplateParameter" } + override predicate involvesTemplateParameter() { any() } @@ -1267,6 +1305,9 @@ class TemplateTemplateParameter extends TemplateParameter TemplateTemplateParameter() { usertypes(underlyingElement(this), _, 8) } + + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "TemplateTemplateParameter" } } /** diff --git a/cpp/ql/src/semmle/code/cpp/TypedefType.qll b/cpp/ql/src/semmle/code/cpp/TypedefType.qll index c7b3591941b..88c8475814d 100644 --- a/cpp/ql/src/semmle/code/cpp/TypedefType.qll +++ b/cpp/ql/src/semmle/code/cpp/TypedefType.qll @@ -8,6 +8,9 @@ class TypedefType extends UserType { TypedefType() { usertypes(underlyingElement(this),_,5) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "TypedefType" } + /** * Gets the base type of this typedef type. */ diff --git a/cpp/ql/src/semmle/code/cpp/Union.qll b/cpp/ql/src/semmle/code/cpp/Union.qll index 0c6faa1537f..b66bf6d19a9 100644 --- a/cpp/ql/src/semmle/code/cpp/Union.qll +++ b/cpp/ql/src/semmle/code/cpp/Union.qll @@ -8,6 +8,9 @@ class Union extends Struct { Union() { usertypes(underlyingElement(this),_,3) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "Union" } + override string explain() { result = "union " + this.getName() } override predicate isDeeplyConstBelow() { any() } // No subparts diff --git a/cpp/ql/src/semmle/code/cpp/Variable.qll b/cpp/ql/src/semmle/code/cpp/Variable.qll index 251ab896b8d..73e99ceaffd 100644 --- a/cpp/ql/src/semmle/code/cpp/Variable.qll +++ b/cpp/ql/src/semmle/code/cpp/Variable.qll @@ -174,7 +174,7 @@ class Variable extends Declaration, @variable { class VariableDeclarationEntry extends DeclarationEntry, @var_decl { override Variable getDeclaration() { result = getVariable() } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "VariableDeclarationEntry" } /** diff --git a/cpp/ql/src/semmle/code/cpp/commons/CommonType.qll b/cpp/ql/src/semmle/code/cpp/commons/CommonType.qll index 4db43a4c48c..c6ef3a9505c 100644 --- a/cpp/ql/src/semmle/code/cpp/commons/CommonType.qll +++ b/cpp/ql/src/semmle/code/cpp/commons/CommonType.qll @@ -7,7 +7,7 @@ class CharPointerType extends PointerType { CharPointerType() { this.getBaseType() instanceof CharType } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "CharPointerType" } } @@ -18,7 +18,7 @@ class IntPointerType extends PointerType { IntPointerType() { this.getBaseType() instanceof IntType } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "IntPointerType" } } @@ -30,7 +30,7 @@ class VoidPointerType extends PointerType { VoidPointerType() { this.getBaseType() instanceof VoidType } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "VoidPointerType" } } @@ -42,7 +42,7 @@ class Size_t extends Type { this.getUnderlyingType() instanceof IntegralType and this.hasName("size_t") } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "Size_t" } } @@ -54,7 +54,7 @@ class Ssize_t extends Type { this.getUnderlyingType() instanceof IntegralType and this.hasName("ssize_t") } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "Ssize_t" } } @@ -66,7 +66,7 @@ class Ptrdiff_t extends Type { this.getUnderlyingType() instanceof IntegralType and this.hasName("ptrdiff_t") } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "Ptrdiff_t" } } @@ -102,7 +102,7 @@ class Wchar_t extends Type { this.getUnderlyingType() instanceof IntegralType and this.hasName("wchar_t") } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "Wchar_t" } } diff --git a/cpp/ql/src/semmle/code/cpp/commons/Printf.qll b/cpp/ql/src/semmle/code/cpp/commons/Printf.qll index 15fc2154837..badb547f404 100644 --- a/cpp/ql/src/semmle/code/cpp/commons/Printf.qll +++ b/cpp/ql/src/semmle/code/cpp/commons/Printf.qll @@ -75,7 +75,7 @@ class UserDefinedFormattingFunction extends FormattingFunction { class FormattingFunctionCall extends Expr { FormattingFunctionCall() { this.(Call).getTarget() instanceof FormattingFunction } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "FormattingFunctionCall" } /** diff --git a/cpp/ql/src/semmle/code/cpp/controlflow/Nullness.qll b/cpp/ql/src/semmle/code/cpp/controlflow/Nullness.qll index 313afd4defe..d223a378d0c 100644 --- a/cpp/ql/src/semmle/code/cpp/controlflow/Nullness.qll +++ b/cpp/ql/src/semmle/code/cpp/controlflow/Nullness.qll @@ -14,7 +14,7 @@ abstract class NullValue extends Expr class Zero extends NullValue { Zero() { this.(Literal).getValue() = "0" } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "Zero" } } diff --git a/cpp/ql/src/semmle/code/cpp/exprs/Access.qll b/cpp/ql/src/semmle/code/cpp/exprs/Access.qll index 9e3718cdb7f..656aca47453 100644 --- a/cpp/ql/src/semmle/code/cpp/exprs/Access.qll +++ b/cpp/ql/src/semmle/code/cpp/exprs/Access.qll @@ -24,7 +24,7 @@ abstract class Access extends Expr, NameQualifiableElement { * A C/C++ enum constant access expression. */ class EnumConstantAccess extends Access, @varaccess { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "EnumConstantAccess" } EnumConstantAccess() { @@ -42,7 +42,7 @@ class EnumConstantAccess extends Access, @varaccess { * A C/C++ variable access expression. */ class VariableAccess extends Access, @varaccess { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "VariableAccess" } VariableAccess() { @@ -139,7 +139,7 @@ class VariableAccess extends Access, @varaccess { * A C/C++ field access expression. */ class FieldAccess extends VariableAccess { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "FieldAccess" } FieldAccess() { exists(Field f | varbind(underlyingElement(this), unresolveElement(f))) } @@ -242,6 +242,9 @@ class FunctionAccess extends Access, @routineexpr { not iscall(underlyingElement(this),_) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "FunctionAccess" } + /** Gets the accessed function. */ override Function getTarget() { funbind(underlyingElement(this), unresolveElement(result)) } @@ -289,7 +292,7 @@ class TypeName extends Expr, @type_operand { * For calls to operator[], which look syntactically identical, see OverloadedArrayExpr. */ class ArrayExpr extends Expr, @subscriptexpr { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "ArrayExpr" } /** diff --git a/cpp/ql/src/semmle/code/cpp/exprs/ArithmeticOperation.qll b/cpp/ql/src/semmle/code/cpp/exprs/ArithmeticOperation.qll index 53058aa12a8..704ffc453d2 100644 --- a/cpp/ql/src/semmle/code/cpp/exprs/ArithmeticOperation.qll +++ b/cpp/ql/src/semmle/code/cpp/exprs/ArithmeticOperation.qll @@ -12,7 +12,7 @@ abstract class UnaryArithmeticOperation extends UnaryOperation { class UnaryMinusExpr extends UnaryArithmeticOperation, @arithnegexpr { override string getOperator() { result = "-" } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "UnaryMinusExpr" } override int getPrecedence() { result = 15 } @@ -24,7 +24,7 @@ class UnaryMinusExpr extends UnaryArithmeticOperation, @arithnegexpr { class UnaryPlusExpr extends UnaryArithmeticOperation, @unaryplusexpr { override string getOperator() { result = "+" } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "UnaryPlusExpr" } override int getPrecedence() { result = 15 } @@ -96,7 +96,7 @@ abstract class PostfixCrementOperation extends CrementOperation { class PrefixIncrExpr extends IncrementOperation, PrefixCrementOperation, @preincrexpr { override string getOperator() { result = "++" } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "PrefixIncrExpr" } override int getPrecedence() { result = 15 } @@ -110,7 +110,7 @@ class PrefixIncrExpr extends IncrementOperation, PrefixCrementOperation, @preinc class PrefixDecrExpr extends DecrementOperation, PrefixCrementOperation, @predecrexpr { override string getOperator() { result = "--" } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "PrefixDecrExpr" } override int getPrecedence() { result = 15 } @@ -124,7 +124,7 @@ class PrefixDecrExpr extends DecrementOperation, PrefixCrementOperation, @predec class PostfixIncrExpr extends IncrementOperation, PostfixCrementOperation, @postincrexpr { override string getOperator() { result = "++" } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "PostfixIncrExpr" } override int getPrecedence() { result = 16 } @@ -140,7 +140,7 @@ class PostfixIncrExpr extends IncrementOperation, PostfixCrementOperation, @post class PostfixDecrExpr extends DecrementOperation, PostfixCrementOperation, @postdecrexpr { override string getOperator() { result = "--" } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "PostfixDecrExpr" } override int getPrecedence() { result = 16 } @@ -174,7 +174,7 @@ abstract class BinaryArithmeticOperation extends BinaryOperation { class AddExpr extends BinaryArithmeticOperation, @addexpr { override string getOperator() { result = "+" } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "AddExpr" } override int getPrecedence() { result = 12 } @@ -186,7 +186,7 @@ class AddExpr extends BinaryArithmeticOperation, @addexpr { class SubExpr extends BinaryArithmeticOperation, @subexpr { override string getOperator() { result = "-" } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "SubExpr" } override int getPrecedence() { result = 12 } @@ -198,7 +198,7 @@ class SubExpr extends BinaryArithmeticOperation, @subexpr { class MulExpr extends BinaryArithmeticOperation, @mulexpr { override string getOperator() { result = "*" } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "MulExpr" } override int getPrecedence() { result = 13 } @@ -210,7 +210,7 @@ class MulExpr extends BinaryArithmeticOperation, @mulexpr { class DivExpr extends BinaryArithmeticOperation, @divexpr { override string getOperator() { result = "/" } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "DivExpr" } override int getPrecedence() { result = 13 } @@ -222,7 +222,7 @@ class DivExpr extends BinaryArithmeticOperation, @divexpr { class RemExpr extends BinaryArithmeticOperation, @remexpr { override string getOperator() { result = "%" } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "RemExpr" } override int getPrecedence() { result = 13 } @@ -308,7 +308,7 @@ abstract class PointerArithmeticOperation extends BinaryArithmeticOperation { class PointerAddExpr extends PointerArithmeticOperation, @paddexpr { override string getOperator() { result = "+" } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "PointerAddExpr" } override int getPrecedence() { result = 12 } @@ -320,7 +320,7 @@ class PointerAddExpr extends PointerArithmeticOperation, @paddexpr { class PointerSubExpr extends PointerArithmeticOperation, @psubexpr { override string getOperator() { result = "-" } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "PointerSubExpr" } override int getPrecedence() { result = 12 } @@ -332,7 +332,7 @@ class PointerSubExpr extends PointerArithmeticOperation, @psubexpr { class PointerDiffExpr extends PointerArithmeticOperation, @pdiffexpr { override string getOperator() { result = "-" } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "PointerDiffExpr" } override int getPrecedence() { result = 12 } diff --git a/cpp/ql/src/semmle/code/cpp/exprs/Assignment.qll b/cpp/ql/src/semmle/code/cpp/exprs/Assignment.qll index b89491259e0..713ecc53bd9 100644 --- a/cpp/ql/src/semmle/code/cpp/exprs/Assignment.qll +++ b/cpp/ql/src/semmle/code/cpp/exprs/Assignment.qll @@ -32,7 +32,7 @@ abstract class Assignment extends Operation { class AssignExpr extends Assignment, @assignexpr { override string getOperator() { result = "=" } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "AssignExpr" } /** Gets a textual representation of this assignment. */ @@ -57,7 +57,7 @@ abstract class AssignArithmeticOperation extends AssignOperation { * A non-overloaded `+=` assignment expression on a non-pointer lvalue. */ class AssignAddExpr extends AssignArithmeticOperation, @assignaddexpr { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "AssignAddExpr" } override string getOperator() { result = "+=" } @@ -67,7 +67,7 @@ class AssignAddExpr extends AssignArithmeticOperation, @assignaddexpr { * A non-overloaded `-=` assignment expression on a non-pointer lvalue. */ class AssignSubExpr extends AssignArithmeticOperation, @assignsubexpr { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "AssignSubExpr" } override string getOperator() { result = "-=" } @@ -77,7 +77,7 @@ class AssignSubExpr extends AssignArithmeticOperation, @assignsubexpr { * A non-overloaded `*=` assignment expression. */ class AssignMulExpr extends AssignArithmeticOperation, @assignmulexpr { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "AssignMulExpr" } override string getOperator() { result = "*=" } @@ -87,7 +87,7 @@ class AssignMulExpr extends AssignArithmeticOperation, @assignmulexpr { * A non-overloaded `/=` assignment expression. */ class AssignDivExpr extends AssignArithmeticOperation, @assigndivexpr { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "AssignDivExpr" } override string getOperator() { result = "/=" } @@ -97,7 +97,7 @@ class AssignDivExpr extends AssignArithmeticOperation, @assigndivexpr { * A non-overloaded `%=` assignment expression. */ class AssignRemExpr extends AssignArithmeticOperation, @assignremexpr { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "AssignRemExpr" } override string getOperator() { result = "%=" } @@ -114,7 +114,7 @@ abstract class AssignBitwiseOperation extends AssignOperation { * A non-overloaded `&=` assignment expression. */ class AssignAndExpr extends AssignBitwiseOperation, @assignandexpr { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "AssignAndExpr" } override string getOperator() { result = "&=" } @@ -124,7 +124,7 @@ class AssignAndExpr extends AssignBitwiseOperation, @assignandexpr { * A non-overloaded `|=` assignment expression. */ class AssignOrExpr extends AssignBitwiseOperation, @assignorexpr { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "AssignOrExpr" } override string getOperator() { result = "|=" } @@ -134,7 +134,7 @@ class AssignOrExpr extends AssignBitwiseOperation, @assignorexpr { * A non-overloaded `^=` assignment expression. */ class AssignXorExpr extends AssignBitwiseOperation, @assignxorexpr { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "AssignXorExpr" } override string getOperator() { result = "^=" } @@ -144,7 +144,7 @@ class AssignXorExpr extends AssignBitwiseOperation, @assignxorexpr { * A non-overloaded `<<=` assignment expression. */ class AssignLShiftExpr extends AssignBitwiseOperation, @assignlshiftexpr { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "AssignLShiftExpr" } override string getOperator() { result = "<<=" } @@ -154,7 +154,7 @@ class AssignLShiftExpr extends AssignBitwiseOperation, @assignlshiftexpr { * A non-overloaded `>>=` assignment expression. */ class AssignRShiftExpr extends AssignBitwiseOperation, @assignrshiftexpr { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "AssignRShiftExpr" } override string getOperator() { result = ">>=" } @@ -164,7 +164,7 @@ class AssignRShiftExpr extends AssignBitwiseOperation, @assignrshiftexpr { * A non-overloaded `+=` pointer assignment expression. */ class AssignPointerAddExpr extends AssignOperation, @assignpaddexpr { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "AssignPointerAddExpr" } override string getOperator() { result = "+=" } @@ -174,7 +174,7 @@ class AssignPointerAddExpr extends AssignOperation, @assignpaddexpr { * A non-overloaded `-=` pointer assignment expression. */ class AssignPointerSubExpr extends AssignOperation, @assignpsubexpr { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "AssignPointerSubExpr" } override string getOperator() { result = "-=" } @@ -196,6 +196,9 @@ class ConditionDeclExpr extends Expr, @condition_decl { deprecated Expr getExpr() { result = this.getChild(0) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "ConditionDeclExpr" } + /** * Gets the compiler-generated variable access that conceptually occurs after * the initialization of the declared variable. diff --git a/cpp/ql/src/semmle/code/cpp/exprs/BitwiseOperation.qll b/cpp/ql/src/semmle/code/cpp/exprs/BitwiseOperation.qll index 774e8099be1..9d5d6883ee6 100644 --- a/cpp/ql/src/semmle/code/cpp/exprs/BitwiseOperation.qll +++ b/cpp/ql/src/semmle/code/cpp/exprs/BitwiseOperation.qll @@ -13,6 +13,9 @@ class ComplementExpr extends UnaryBitwiseOperation, @complementexpr { override string getOperator() { result = "~" } override int getPrecedence() { result = 15 } + + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "ComplementExpr" } } /** @@ -29,6 +32,9 @@ class LShiftExpr extends BinaryBitwiseOperation, @lshiftexpr { override string getOperator() { result = "<<" } override int getPrecedence() { result = 11 } + + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "LShiftExpr" } } /** @@ -38,6 +44,9 @@ class RShiftExpr extends BinaryBitwiseOperation, @rshiftexpr { override string getOperator() { result = ">>" } override int getPrecedence() { result = 11 } + + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "RShiftExpr" } } /** @@ -47,6 +56,9 @@ class BitwiseAndExpr extends BinaryBitwiseOperation, @andexpr { override string getOperator() { result = "&" } override int getPrecedence() { result = 8 } + + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "BitwiseAndExpr" } } /** @@ -56,13 +68,19 @@ class BitwiseOrExpr extends BinaryBitwiseOperation, @orexpr { override string getOperator() { result = "|" } override int getPrecedence() { result = 6 } + + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "BitwiseOrExpr" } } /** - * A C/C++ bitwise or expression. + * A C/C++ bitwise xor expression. */ class BitwiseXorExpr extends BinaryBitwiseOperation, @xorexpr { override string getOperator() { result = "^" } override int getPrecedence() { result = 7 } + + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "BitwiseXorExpr" } } diff --git a/cpp/ql/src/semmle/code/cpp/exprs/BuiltInOperations.qll b/cpp/ql/src/semmle/code/cpp/exprs/BuiltInOperations.qll index 68ecce75ab3..8384ce958d2 100644 --- a/cpp/ql/src/semmle/code/cpp/exprs/BuiltInOperations.qll +++ b/cpp/ql/src/semmle/code/cpp/exprs/BuiltInOperations.qll @@ -11,6 +11,9 @@ abstract class BuiltInOperation extends Expr { */ class BuiltInVarArgsStart extends BuiltInOperation, @vastartexpr { override string toString() { result = "__builtin_va_start" } + + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "BuiltInVarArgsStart" } } /** @@ -18,6 +21,9 @@ class BuiltInVarArgsStart extends BuiltInOperation, @vastartexpr { */ class BuiltInVarArgsEnd extends BuiltInOperation, @vaendexpr { override string toString() { result = "__builtin_va_end" } + + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "BuiltInVarArgsEnd" } } /** @@ -25,6 +31,9 @@ class BuiltInVarArgsEnd extends BuiltInOperation, @vaendexpr { */ class BuiltInVarArg extends BuiltInOperation, @vaargexpr { override string toString() { result = "__builtin_va_arg" } + + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "BuiltInVarArg" } } /** @@ -32,6 +41,9 @@ class BuiltInVarArg extends BuiltInOperation, @vaargexpr { */ class BuiltInVarArgCopy extends BuiltInOperation, @vacopyexpr { override string toString() { result = "__builtin_va_copy" } + + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "BuiltInVarArgCopy" } } /** diff --git a/cpp/ql/src/semmle/code/cpp/exprs/Call.qll b/cpp/ql/src/semmle/code/cpp/exprs/Call.qll index a9a1dfbed95..e2ac145e1a4 100644 --- a/cpp/ql/src/semmle/code/cpp/exprs/Call.qll +++ b/cpp/ql/src/semmle/code/cpp/exprs/Call.qll @@ -149,7 +149,7 @@ class FunctionCall extends Call, @funbindexpr { iscall(underlyingElement(this),_) } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "FunctionCall" } /** Gets an explicit template argument for this call. */ @@ -350,6 +350,9 @@ class ExprCall extends Call, @callexpr { */ Expr getExpr() { result = this.getChild(0) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "ExprCall" } + override Expr getAnArgument() { exists(int i | result = this.getChild(i) and i >= 1) } @@ -370,6 +373,9 @@ class ExprCall extends Call, @callexpr { class VariableCall extends ExprCall { VariableCall() { this.getExpr() instanceof VariableAccess } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "VariableCall" } + /** * Gets the variable which yields the function pointer to call. */ @@ -384,6 +390,9 @@ class VariableCall extends ExprCall { class ConstructorCall extends FunctionCall { ConstructorCall() { super.getTarget() instanceof Constructor } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "ConstructorCall" } + /** Gets the constructor being called. */ override Constructor getTarget() { result = super.getTarget() } } @@ -398,6 +407,9 @@ class ThrowExpr extends Expr, @throw_expr { */ Expr getExpr() { result = this.getChild(0) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "ThrowExpr" } + override string toString() { result = "throw ..." } override int getPrecedence() { result = 1 } @@ -409,6 +421,9 @@ class ThrowExpr extends Expr, @throw_expr { class ReThrowExpr extends ThrowExpr { ReThrowExpr() { this.getType() instanceof VoidType } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "ReThrowExpr" } + override string toString() { result = "re-throw exception " } } @@ -418,6 +433,9 @@ class ReThrowExpr extends ThrowExpr { class DestructorCall extends FunctionCall { DestructorCall() { super.getTarget() instanceof Destructor } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "DestructorCall" } + /** Gets the destructor being called. */ override Destructor getTarget() { result = super.getTarget() } } @@ -435,6 +453,9 @@ class VacuousDestructorCall extends Expr, @vacuous_destructor_call { */ Expr getQualifier() { result = this.getChild(0) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "VacuousDestructorCall" } + override string toString() { result = "(vacuous destructor call)" } } @@ -484,6 +505,9 @@ class ConstructorFieldInit extends ConstructorInit, @ctorfieldinit { /** Gets the field being initialized. */ Field getTarget() { varbind(underlyingElement(this),unresolveElement(result)) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "ConstructorFieldInit" } + /** * Gets the expression to which the field is initialized. * @@ -543,6 +567,9 @@ class DestructorFieldDestruction extends DestructorDestruction, @dtorfielddestru /** Gets the field being destructed. */ Field getTarget() { varbind(underlyingElement(this),unresolveElement(result)) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "DestructorFieldDestruction" } + /** Gets the compiler-generated call to the variable's destructor. */ DestructorCall getExpr() { result = this.getChild(0) } diff --git a/cpp/ql/src/semmle/code/cpp/exprs/Cast.qll b/cpp/ql/src/semmle/code/cpp/exprs/Cast.qll index ea0ab8ccf5e..cc020a959a6 100644 --- a/cpp/ql/src/semmle/code/cpp/exprs/Cast.qll +++ b/cpp/ql/src/semmle/code/cpp/exprs/Cast.qll @@ -155,7 +155,7 @@ class IntegralConversion extends ArithmeticConversion { isIntegralOrEnum(getExpr().getUnspecifiedType()) } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "IntegralConversion" } override string getSemanticConversionString() { @@ -172,6 +172,9 @@ class FloatingPointConversion extends ArithmeticConversion { getExpr().getUnspecifiedType() instanceof FloatingPointType } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "FloatingPointConversion" } + override string getSemanticConversionString() { result = "floating point conversion" } @@ -186,6 +189,9 @@ class FloatingPointToIntegralConversion extends ArithmeticConversion { getExpr().getUnspecifiedType() instanceof FloatingPointType } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "FloatingPointToIntegralConversion" } + override string getSemanticConversionString() { result = "floating point to integral conversion" } @@ -200,6 +206,9 @@ class IntegralToFloatingPointConversion extends ArithmeticConversion { isIntegralOrEnum(getExpr().getUnspecifiedType()) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "IntegralToFloatingPointConversion" } + override string getSemanticConversionString() { result = "integral to floating point conversion" } @@ -218,7 +227,7 @@ class PointerConversion extends Cast { isPointerOrNullPointer(getExpr().getUnspecifiedType()) } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "PointerConversion" } override string getSemanticConversionString() { @@ -249,6 +258,9 @@ class PointerToMemberConversion extends Cast { ) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "PointerToMemberConversion" } + override string getSemanticConversionString() { result = "pointer-to-member conversion" } @@ -264,6 +276,9 @@ class PointerToIntegralConversion extends Cast { isPointerOrNullPointer(getExpr().getUnspecifiedType()) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "PointerToIntegralConversion" } + override string getSemanticConversionString() { result = "pointer to integral conversion" } @@ -279,6 +294,9 @@ class IntegralToPointerConversion extends Cast { isIntegralOrEnum(getExpr().getUnspecifiedType()) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "IntegralToPointerConversion" } + override string getSemanticConversionString() { result = "integral to pointer conversion" } @@ -293,6 +311,9 @@ class BoolConversion extends Cast { conversionkinds(underlyingElement(this), 1) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "BoolConversion" } + override string getSemanticConversionString() { result = "conversion to bool" } @@ -307,6 +328,9 @@ class VoidConversion extends Cast { getUnspecifiedType() instanceof VoidType } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "VoidConversion" } + override string getSemanticConversionString() { result = "conversion to void" } @@ -376,6 +400,9 @@ class BaseClassConversion extends InheritanceConversion { conversionkinds(underlyingElement(this), 2) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "BaseClassConversion" } + override string getSemanticConversionString() { result = "base class conversion" } @@ -405,6 +432,9 @@ class DerivedClassConversion extends InheritanceConversion { conversionkinds(underlyingElement(this), 3) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "DerivedClassConversion" } + override string getSemanticConversionString() { result = "derived class conversion" } @@ -427,6 +457,9 @@ class PointerToMemberBaseClassConversion extends Cast { conversionkinds(underlyingElement(this), 4) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "PointerToMemberBaseClassConversion" } + override string getSemanticConversionString() { result = "pointer-to-member base class conversion" } @@ -441,6 +474,9 @@ class PointerToMemberDerivedClassConversion extends Cast { conversionkinds(underlyingElement(this), 5) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "PointerToMemberDerivedClassConversion" } + override string getSemanticConversionString() { result = "pointer-to-member derived class conversion" } @@ -456,6 +492,9 @@ class GlvalueConversion extends Cast { conversionkinds(underlyingElement(this), 6) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "GlvalueConversion" } + override string getSemanticConversionString() { result = "glvalue conversion" } @@ -480,6 +519,9 @@ class PrvalueAdjustmentConversion extends Cast { conversionkinds(underlyingElement(this), 7) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "PrvalueAdjustmentConversion" } + override string getSemanticConversionString() { result = "prvalue adjustment conversion" } @@ -493,6 +535,9 @@ class DynamicCast extends Cast, @dynamic_cast { override int getPrecedence() { result = 16 } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "DynamicCast" } + override string getSemanticConversionString() { result = "dynamic_cast" } @@ -544,6 +589,9 @@ class TypeidOperator extends Expr, @type_id { */ deprecated Type getSpecifiedType() { result = this.getResultType() } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "TypeidOperator" } + /** * Gets the contained expression, if any (if this typeid contains * a type rather than an expression, there is no result). @@ -571,6 +619,9 @@ class TypeidOperator extends Expr, @type_id { class SizeofPackOperator extends Expr, @sizeof_pack { override string toString() { result = "sizeof...(...)" } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "SizeofPackOperator" } + override predicate mayBeImpure() { none() } @@ -592,7 +643,7 @@ abstract class SizeofOperator extends Expr, @runtime_sizeof { class SizeofExprOperator extends SizeofOperator { SizeofExprOperator() { exists(Expr e | this.getChild(0) = e) } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "SizeofExprOperator" } /** Gets the contained expression. */ @@ -621,6 +672,9 @@ class SizeofExprOperator extends SizeofOperator { class SizeofTypeOperator extends SizeofOperator { SizeofTypeOperator() { sizeof_bind(underlyingElement(this),_) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "SizeofTypeOperator" } + /** Gets the contained type. */ Type getTypeOperand() { sizeof_bind(underlyingElement(this),unresolveElement(result)) } @@ -691,7 +745,7 @@ class ArrayToPointerConversion extends Conversion, @array_to_pointer { /** Gets a textual representation of this conversion. */ override string toString() { result = "array to pointer conversion" } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "ArrayToPointerConversion" } override predicate mayBeImpure() { diff --git a/cpp/ql/src/semmle/code/cpp/exprs/ComparisonOperation.qll b/cpp/ql/src/semmle/code/cpp/exprs/ComparisonOperation.qll index 33fa4526c7e..6b0ec27372c 100644 --- a/cpp/ql/src/semmle/code/cpp/exprs/ComparisonOperation.qll +++ b/cpp/ql/src/semmle/code/cpp/exprs/ComparisonOperation.qll @@ -17,7 +17,7 @@ abstract class EqualityOperation extends ComparisonOperation { * A C/C++ equal expression. */ class EQExpr extends EqualityOperation, @eqexpr { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "EQExpr" } override string getOperator() { result = "==" } @@ -27,7 +27,7 @@ class EQExpr extends EqualityOperation, @eqexpr { * A C/C++ not equal expression. */ class NEExpr extends EqualityOperation, @neexpr { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "NEExpr" } override string getOperator() { result = "!=" } @@ -76,7 +76,7 @@ abstract class RelationalOperation extends ComparisonOperation { * A C/C++ greater than expression. */ class GTExpr extends RelationalOperation, @gtexpr { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "GTExpr" } override string getOperator() { result = ">" } @@ -89,7 +89,7 @@ class GTExpr extends RelationalOperation, @gtexpr { * A C/C++ lesser than expression. */ class LTExpr extends RelationalOperation, @ltexpr { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "LTExpr" } override string getOperator() { result = "<" } @@ -102,7 +102,7 @@ class LTExpr extends RelationalOperation, @ltexpr { * A C/C++ greater than or equal expression. */ class GEExpr extends RelationalOperation, @geexpr { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "GEExpr" } override string getOperator() { result = ">=" } @@ -115,7 +115,7 @@ class GEExpr extends RelationalOperation, @geexpr { * A C/C++ lesser than or equal expression. */ class LEExpr extends RelationalOperation, @leexpr { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "LEExpr" } override string getOperator() { result = "<=" } diff --git a/cpp/ql/src/semmle/code/cpp/exprs/Expr.qll b/cpp/ql/src/semmle/code/cpp/exprs/Expr.qll index de4b29c6508..5add4aeebe8 100644 --- a/cpp/ql/src/semmle/code/cpp/exprs/Expr.qll +++ b/cpp/ql/src/semmle/code/cpp/exprs/Expr.qll @@ -465,6 +465,9 @@ abstract class BinaryOperation extends Operation { */ class ParenthesizedBracedInitializerList extends Expr, @braced_init_list { override string toString() { result = "({...})" } + + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "ParenthesizedBracedInitializerList" } } /** @@ -472,6 +475,9 @@ class ParenthesizedBracedInitializerList extends Expr, @braced_init_list { */ class ParenthesisExpr extends Conversion, @parexpr { override string toString() { result = "(...)" } + + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "ParenthesisExpr" } } /** @@ -479,6 +485,9 @@ class ParenthesisExpr extends Conversion, @parexpr { */ class ErrorExpr extends Expr, @errorexpr { override string toString() { result = "" } + + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "ErrorExpr" } } /** @@ -492,7 +501,7 @@ class AssumeExpr extends Expr, @assume { * A C/C++ comma expression. */ class CommaExpr extends Expr, @commaexpr { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "CommaExpr" } /** @@ -524,7 +533,7 @@ class CommaExpr extends Expr, @commaexpr { * A C/C++ address-of expression. */ class AddressOfExpr extends UnaryOperation, @address_of { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "AddressOfExpr" } /** Gets the function or variable whose address is taken. */ @@ -556,6 +565,9 @@ class AddressOfExpr extends UnaryOperation, @address_of { class ReferenceToExpr extends Conversion, @reference_to { override string toString() { result = "(reference to)" } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "ReferenceToExpr" } + override int getPrecedence() { result = 15 } } @@ -565,7 +577,7 @@ class ReferenceToExpr extends Conversion, @reference_to { * For user-defined types, see OverloadedPointerDereferenceExpr. */ class PointerDereferenceExpr extends UnaryOperation, @indirect { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "PointerDereferenceExpr" } /** @@ -600,6 +612,9 @@ class PointerDereferenceExpr extends UnaryOperation, @indirect { */ class ReferenceDereferenceExpr extends Conversion, @ref_indirect { override string toString() { result = "(reference dereference)" } + + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "ReferenceDereferenceExpr" } } /** @@ -703,7 +718,7 @@ class NewOrNewArrayExpr extends Expr, @any_new_expr { class NewExpr extends NewOrNewArrayExpr, @new_expr { override string toString() { result = "new" } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "NewExpr" } /** @@ -730,7 +745,7 @@ class NewExpr extends NewOrNewArrayExpr, @new_expr { class NewArrayExpr extends NewOrNewArrayExpr, @new_array_expr { override string toString() { result = "new[]" } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "NewArrayExpr" } /** @@ -776,7 +791,7 @@ class NewArrayExpr extends NewOrNewArrayExpr, @new_array_expr { class DeleteExpr extends Expr, @delete_expr { override string toString() { result = "delete" } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "DeleteExpr" } override int getPrecedence() { result = 15 } @@ -847,7 +862,7 @@ class DeleteExpr extends Expr, @delete_expr { class DeleteArrayExpr extends Expr, @delete_array_expr { override string toString() { result = "delete[]" } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "DeleteArrayExpr" } override int getPrecedence() { result = 15 } @@ -923,6 +938,9 @@ class StmtExpr extends Expr, @expr_stmt { */ Stmt getStmt() { result.getParent() = this } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "StmtExpr" } + /** * Gets the result expression of the enclosed statement. For example, * `a+b` is the result expression in this example: @@ -948,7 +966,7 @@ private Expr getStmtResultExpr(Stmt stmt) { class ThisExpr extends Expr, @thisaccess { override string toString() { result = "this" } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "ThisExpr" } override predicate mayBeImpure() { @@ -986,7 +1004,7 @@ class BlockExpr extends Literal { class NoExceptExpr extends Expr, @noexceptexpr { override string toString() { result = "noexcept(...)" } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "NoExceptExpr" } /** diff --git a/cpp/ql/src/semmle/code/cpp/exprs/Lambda.qll b/cpp/ql/src/semmle/code/cpp/exprs/Lambda.qll index 9cc4d0497ed..70962816bb7 100644 --- a/cpp/ql/src/semmle/code/cpp/exprs/Lambda.qll +++ b/cpp/ql/src/semmle/code/cpp/exprs/Lambda.qll @@ -11,6 +11,9 @@ class LambdaExpression extends Expr, @lambdaexpr { result = "[...](...){...}" } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "LambdaExpression" } + /** * Gets an implicitly or explicitly captured value of this lambda expression. */ @@ -75,6 +78,9 @@ class Closure extends Class { exists(LambdaExpression e | this = e.getType()) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "Closure" } + /** Gets the lambda expression of which this is the type. */ LambdaExpression getLambdaExpression() { result.getType() = this @@ -99,6 +105,9 @@ class LambdaCapture extends @lambdacapture { result = getField().toString() } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "LambdaCapture" } + /** * Holds if this capture was made implicitly. */ diff --git a/cpp/ql/src/semmle/code/cpp/exprs/Literal.qll b/cpp/ql/src/semmle/code/cpp/exprs/Literal.qll index e7db8a81eb9..1632ba8dab3 100644 --- a/cpp/ql/src/semmle/code/cpp/exprs/Literal.qll +++ b/cpp/ql/src/semmle/code/cpp/exprs/Literal.qll @@ -13,7 +13,7 @@ class Literal extends Expr, @literal { ) } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "Literal" } override predicate mayBeImpure() { @@ -102,6 +102,9 @@ class CharLiteral extends TextLiteral { this.getValueText().regexpMatch("(?s)\\s*L?'.*") } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "CharLiteral" } + /** * Gets the character of this literal. For example `L'a'` has character `"a"`. */ @@ -120,7 +123,7 @@ class StringLiteral extends TextLiteral // Note that `AggregateLiteral`s can also have an array type, but they derive from // @aggregateliteral rather than @literal. } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "StringLiteral" } } @@ -132,6 +135,9 @@ class OctalLiteral extends Literal { OctalLiteral() { super.getValueText().regexpMatch("\\s*0[0-7]+[uUlL]*\\s*") } + + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "OctalLiteral" } } /** @@ -141,6 +147,9 @@ class HexLiteral extends Literal { HexLiteral() { super.getValueText().regexpMatch("\\s*0[xX][0-9a-fA-F]+[uUlL]*\\s*") } + + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "HexLiteral" } } /** @@ -173,6 +182,9 @@ class ClassAggregateLiteral extends AggregateLiteral { classType = this.getUnspecifiedType() } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "ClassAggregateLiteral" } + /** * Gets the expression within the aggregate literal that is used to initialize * field `field`, if present. @@ -232,6 +244,9 @@ class ArrayAggregateLiteral extends AggregateLiteral { arrayType = this.getUnspecifiedType() } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "ArrayAggregateLiteral" } + /** * Gets the expression within the aggregate literal that is used to initialize * element `elementIndex`, if present. diff --git a/cpp/ql/src/semmle/code/cpp/exprs/LogicalOperation.qll b/cpp/ql/src/semmle/code/cpp/exprs/LogicalOperation.qll index 100200a1c19..01e30228a63 100644 --- a/cpp/ql/src/semmle/code/cpp/exprs/LogicalOperation.qll +++ b/cpp/ql/src/semmle/code/cpp/exprs/LogicalOperation.qll @@ -12,7 +12,7 @@ abstract class UnaryLogicalOperation extends UnaryOperation { class NotExpr extends UnaryLogicalOperation, @notexpr { override string getOperator() { result = "!" } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "NotExpr" } override int getPrecedence() { result = 15 } @@ -41,7 +41,7 @@ abstract class BinaryLogicalOperation extends BinaryOperation { class LogicalAndExpr extends BinaryLogicalOperation, @andlogicalexpr { override string getOperator() { result = "&&" } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "LogicalAndExpr" } override int getPrecedence() { result = 5 } @@ -59,7 +59,7 @@ class LogicalAndExpr extends BinaryLogicalOperation, @andlogicalexpr { class LogicalOrExpr extends BinaryLogicalOperation, @orlogicalexpr { override string getOperator() { result = "||" } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "LogicalOrExpr" } override int getPrecedence() { result = 4 } @@ -80,7 +80,7 @@ class ConditionalExpr extends Operation, @conditionalexpr { expr_cond_guard(underlyingElement(this), unresolveElement(result)) } - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "ConditionalExpr" } /** Gets the 'then' expression of this conditional expression. */ diff --git a/cpp/ql/src/semmle/code/cpp/stmts/Block.qll b/cpp/ql/src/semmle/code/cpp/stmts/Block.qll index a8f0da586f7..28bbef06730 100644 --- a/cpp/ql/src/semmle/code/cpp/stmts/Block.qll +++ b/cpp/ql/src/semmle/code/cpp/stmts/Block.qll @@ -11,7 +11,7 @@ import semmle.code.cpp.stmts.Stmt */ class Block extends Stmt, @stmt_block { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "Block" } /** diff --git a/cpp/ql/src/semmle/code/cpp/stmts/Stmt.qll b/cpp/ql/src/semmle/code/cpp/stmts/Stmt.qll index 0ddf725a72c..2ecd5e551e6 100644 --- a/cpp/ql/src/semmle/code/cpp/stmts/Stmt.qll +++ b/cpp/ql/src/semmle/code/cpp/stmts/Stmt.qll @@ -167,7 +167,7 @@ abstract class StmtParent extends ControlFlowNode { */ class ExprStmt extends Stmt, @stmt_expr { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "ExprStmt" } /** @@ -222,7 +222,7 @@ abstract class ConditionalStmt extends ControlStructure { */ class IfStmt extends ConditionalStmt, @stmt_if { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "IfStmt" } /** @@ -318,7 +318,7 @@ abstract class Loop extends ControlStructure { * ``` */ class WhileStmt extends Loop, @stmt_while { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "WhileStmt" } override Expr getCondition() { result = this.getChild(0) } @@ -387,7 +387,7 @@ class WhileStmt extends Loop, @stmt_while { */ abstract class JumpStmt extends Stmt, @jump { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "JumpStmt" } /** Gets the target of this jump statement. */ @@ -404,7 +404,7 @@ abstract class JumpStmt extends Stmt, @jump { */ class GotoStmt extends JumpStmt, @stmt_goto { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "GotoStmt" } /** @@ -498,7 +498,7 @@ class ComputedGotoStmt extends Stmt, @stmt_assigned_goto { */ class ContinueStmt extends JumpStmt, @stmt_continue { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "ContinueStmt" } override string toString() { result = "continue;" } @@ -530,7 +530,7 @@ private Stmt getEnclosingContinuable(Stmt s) { */ class BreakStmt extends JumpStmt, @stmt_break { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "BreakStmt" } override string toString() { result = "break;" } @@ -562,7 +562,7 @@ private Stmt getEnclosingBreakable(Stmt s) { */ class LabelStmt extends Stmt, @stmt_label { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "LabelStmt" } /** Gets the name of this 'label' statement. */ @@ -591,7 +591,7 @@ class LabelStmt extends Stmt, @stmt_label { */ class ReturnStmt extends Stmt, @stmt_return { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "ReturnStmt" } /** @@ -644,7 +644,7 @@ class ReturnStmt extends Stmt, @stmt_return { */ class DoStmt extends Loop, @stmt_end_test_while { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "DoStmt" } override Expr getCondition() { result = this.getChild(0) } @@ -691,7 +691,7 @@ class DoStmt extends Loop, @stmt_end_test_while { * where `begin_expr` and `end_expr` depend on the type of `xs`. */ class RangeBasedForStmt extends Loop, @stmt_range_based_for { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "RangeBasedForStmt" } /** @@ -787,7 +787,7 @@ class RangeBasedForStmt extends Loop, @stmt_range_based_for { */ class ForStmt extends Loop, @stmt_for { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "ForStmt" } /** @@ -1016,7 +1016,7 @@ private predicate inForUpdate(Expr forUpdate, Expr child) { */ class SwitchCase extends Stmt, @stmt_switch_case { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "SwitchCase" } /** @@ -1379,7 +1379,7 @@ class DefaultCase extends SwitchCase { * ``` */ class SwitchStmt extends ConditionalStmt, @stmt_switch { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "SwitchStmt" } /** @@ -1592,6 +1592,9 @@ class Handler extends Stmt, @stmt_handler { override string toString() { result = "" } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "Handler" } + /** * Gets the block containing the implementation of this handler. */ @@ -1646,7 +1649,7 @@ deprecated class FinallyEnd extends Stmt { */ class TryStmt extends Stmt, @stmt_try_block { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "TryStmt" } override string toString() { result = "try { ... }" } @@ -1726,13 +1729,15 @@ class FunctionTryStmt extends TryStmt { FunctionTryStmt() { not exists(this.getEnclosingBlock()) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "FunctionTryStmt" } } /** * A 'catch block', from either C++'s `catch` or Objective C's `@catch`. */ class CatchBlock extends Block { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "CatchBlock" } CatchBlock() { ishandler(underlyingElement(this)) } @@ -1758,6 +1763,8 @@ class CatchAnyBlock extends CatchBlock { CatchAnyBlock() { not exists(this.getParameter()) } + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "CatchAnyBlock" } } /** @@ -1815,7 +1822,7 @@ class MicrosoftTryFinallyStmt extends MicrosoftTryStmt { */ class DeclStmt extends Stmt, @stmt_decl { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "DeclStmt" } /** @@ -1897,7 +1904,7 @@ class DeclStmt extends Stmt, @stmt_decl { */ class EmptyStmt extends Stmt, @stmt_empty { - /** Retrieves canonical QL class(es) corresponding to this element. */ + /** Canonical QL class corresponding to this element. */ string getCanonicalQLClass() { result = "EmptyStmt" } override string toString() { result = ";" } @@ -1918,6 +1925,9 @@ class AsmStmt extends Stmt, @stmt_asm { override string toString() { result = "asm statement" } + + /** Canonical QL class corresponding to this element. */ + string getCanonicalQLClass() { result = "AsmStmt" } } /** diff --git a/cpp/ql/test/examples/expressions/PrintAST.expected b/cpp/ql/test/examples/expressions/PrintAST.expected index 15dc258bf51..78579a8d6d6 100644 --- a/cpp/ql/test/examples/expressions/PrintAST.expected +++ b/cpp/ql/test/examples/expressions/PrintAST.expected @@ -1,944 +1,944 @@ -#-----| __va_list_tag& __va_list_tag::operator=(__va_list_tag const&) +#-----| [CopyAssignmentOperator]: __va_list_tag& __va_list_tag::operator=(__va_list_tag const&) #-----| params: -#-----| 0: p#0 -#-----| Type = const __va_list_tag & -#-----| __va_list_tag& __va_list_tag::operator=(__va_list_tag&&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const __va_list_tag & +#-----| [MoveAssignmentOperator]: __va_list_tag& __va_list_tag::operator=(__va_list_tag&&) #-----| params: -#-----| 0: p#0 -#-----| Type = __va_list_tag && -#-----| void operator delete(void*) +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: __va_list_tag && +#-----| [TopLevelFunction]: void operator delete(void*) #-----| params: -#-----| 0: p#0 -#-----| Type = void * -#-----| void* operator new(unsigned long) +#-----| 0: [Parameter]: p#0 +#-----| Type = [VoidPointerType]: void * +#-----| [TopLevelFunction]: void* operator new(unsigned long) #-----| params: -#-----| 0: p#0 -#-----| Type = unsigned long +#-----| 0: [Parameter]: p#0 +#-----| Type = [LongType]: unsigned long AddressOf.c: -# 1| void AddressOf(int) +# 1| [TopLevelFunction]: void AddressOf(int) # 1| params: -# 1| 0: i -# 1| Type = int -# 1| body: { ... } -# 2| 0: declaration -# 2| 0: definition of j -# 2| Type = int * -# 2| init: initializer for j -# 2| expr: & ... -# 2| Type = int * +# 1| 0: [Parameter]: i +# 1| Type = [IntType]: int +# 1| body: [Block]: { ... } +# 2| 0: [DeclStmt]: declaration +# 2| 0: [VariableDeclarationEntry]: definition of j +# 2| Type = [IntPointerType]: int * +# 2| init: [Initializer]: initializer for j +# 2| expr: [AddressOfExpr]: & ... +# 2| Type = [IntPointerType]: int * # 2| ValueCategory = prvalue -# 2| 0: i -# 2| Type = int +# 2| 0: [VariableAccess]: i +# 2| Type = [IntType]: int # 2| ValueCategory = lvalue -# 3| 1: return ... +# 3| 1: [ReturnStmt]: return ... ArrayToPointer.c: -# 5| void ArrayToPointer() +# 5| [TopLevelFunction]: void ArrayToPointer() # 5| params: -# 6| body: { ... } -# 7| 0: declaration -# 7| 0: definition of c -# 7| Type = char[] -# 7| init: initializer for c +# 6| body: [Block]: { ... } +# 7| 0: [DeclStmt]: declaration +# 7| 0: [VariableDeclarationEntry]: definition of c +# 7| Type = [ArrayType]: char[] +# 7| init: [Initializer]: initializer for c # 7| expr: hello -# 7| Type = char[6] -# 7| Value = "hello" +# 7| Type = [ArrayType]: char[6] +# 7| Value = [StringLiteral]: "hello" # 7| ValueCategory = lvalue -# 8| 1: declaration -# 8| 0: definition of s -# 8| Type = S -# 9| 2: ExprStmt -# 9| 0: ... = ... -# 9| Type = char * +# 8| 1: [DeclStmt]: declaration +# 8| 0: [VariableDeclarationEntry]: definition of s +# 8| Type = [Struct]: S +# 9| 2: [ExprStmt]: ExprStmt +# 9| 0: [AssignExpr]: ... = ... +# 9| Type = [CharPointerType]: char * # 9| ValueCategory = prvalue -# 9| 0: name -# 9| Type = char * +# 9| 0: [FieldAccess]: name +# 9| Type = [CharPointerType]: char * # 9| ValueCategory = lvalue -# 9| -1: s -# 9| Type = S +# 9| -1: [VariableAccess]: s +# 9| Type = [Struct]: S # 9| ValueCategory = lvalue -# 9| 1: array to pointer conversion -# 9| Type = char * +# 9| 1: [ArrayToPointerConversion]: array to pointer conversion +# 9| Type = [CharPointerType]: char * # 9| ValueCategory = prvalue -# 9| expr: c -# 9| Type = char[6] +# 9| expr: [VariableAccess]: c +# 9| Type = [ArrayType]: char[6] # 9| ValueCategory = lvalue -# 10| 3: return ... +# 10| 3: [ReturnStmt]: return ... Cast.c: -# 1| void Cast(char*, void*) +# 1| [TopLevelFunction]: void Cast(char*, void*) # 1| params: -# 1| 0: c -# 1| Type = char * -# 1| 1: v -# 1| Type = void * -# 1| body: { ... } -# 2| 0: ExprStmt -# 2| 0: ... = ... -# 2| Type = char * +# 1| 0: [Parameter]: c +# 1| Type = [CharPointerType]: char * +# 1| 1: [Parameter]: v +# 1| Type = [VoidPointerType]: void * +# 1| body: [Block]: { ... } +# 2| 0: [ExprStmt]: ExprStmt +# 2| 0: [AssignExpr]: ... = ... +# 2| Type = [CharPointerType]: char * # 2| ValueCategory = prvalue -# 2| 0: c -# 2| Type = char * +# 2| 0: [VariableAccess]: c +# 2| Type = [CharPointerType]: char * # 2| ValueCategory = lvalue -# 2| 1: (char *)... +# 2| 1: [PointerConversion]: (char *)... # 2| Conversion = pointer conversion -# 2| Type = char * +# 2| Type = [CharPointerType]: char * # 2| ValueCategory = prvalue -# 2| expr: v -# 2| Type = void * +# 2| expr: [VariableAccess]: v +# 2| Type = [VoidPointerType]: void * # 2| ValueCategory = prvalue(load) -# 3| 1: return ... +# 3| 1: [ReturnStmt]: return ... ConditionDecl.cpp: -# 1| void ConditionDecl() +# 1| [TopLevelFunction]: void ConditionDecl() # 1| params: -# 1| body: { ... } -# 2| 0: declaration -# 2| 0: definition of j -# 2| Type = int -# 2| init: initializer for j -# 2| expr: 0 -# 2| Type = int -# 2| Value = 0 +# 1| body: [Block]: { ... } +# 2| 0: [DeclStmt]: declaration +# 2| 0: [VariableDeclarationEntry]: definition of j +# 2| Type = [IntType]: int +# 2| init: [Initializer]: initializer for j +# 2| expr: [Zero]: 0 +# 2| Type = [IntType]: int +# 2| Value = [Zero]: 0 # 2| ValueCategory = prvalue -# 3| 1: while (...) ... -# 3| 0: (condition decl) -# 3| Type = bool +# 3| 1: [WhileStmt]: while (...) ... +# 3| 0: [ConditionDeclExpr]: (condition decl) +# 3| Type = [BoolType]: bool # 3| ValueCategory = prvalue -# 3| 0: (bool)... +# 3| 0: [BoolConversion]: (bool)... # 3| Conversion = conversion to bool -# 3| Type = bool +# 3| Type = [BoolType]: bool # 3| ValueCategory = prvalue -# 3| expr: k -# 3| Type = int +# 3| expr: [VariableAccess]: k +# 3| Type = [IntType]: int # 3| ValueCategory = prvalue(load) -# 3| 1: { ... } -# 5| 2: return ... +# 3| 1: [Block]: { ... } +# 5| 2: [ReturnStmt]: return ... ConstructorCall.cpp: -# 1| C& C::operator=(C const&) +# 1| [CopyAssignmentOperator]: C& C::operator=(C const&) # 1| params: -#-----| 0: p#0 -#-----| Type = const C & -# 1| C& C::operator=(C&&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const C & +# 1| [MoveAssignmentOperator]: C& C::operator=(C&&) # 1| params: -#-----| 0: p#0 -#-----| Type = C && -# 1| void C::C(C const&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: C && +# 1| [CopyConstructor]: void C::C(C const&) # 1| params: -#-----| 0: p#0 -#-----| Type = const C & -# 1| void C::C(C&&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const C & +# 1| [MoveConstructor]: void C::C(C&&) # 1| params: -#-----| 0: p#0 -#-----| Type = C && -# 3| void C::C(int) +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: C && +# 3| [ConversionConstructor]: void C::C(int) # 3| params: -# 3| 0: i -# 3| Type = int +# 3| 0: [Parameter]: i +# 3| Type = [IntType]: int # 3| initializations: -# 3| body: { ... } -# 4| 0: return ... -# 7| D& D::operator=(D const&) +# 3| body: [Block]: { ... } +# 4| 0: [ReturnStmt]: return ... +# 7| [CopyAssignmentOperator]: D& D::operator=(D const&) # 7| params: -#-----| 0: p#0 -#-----| Type = const D & -# 7| D& D::operator=(D&&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const D & +# 7| [MoveAssignmentOperator]: D& D::operator=(D&&) # 7| params: -#-----| 0: p#0 -#-----| Type = D && -# 7| void D::D(D const&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: D && +# 7| [CopyConstructor]: void D::D(D const&) # 7| params: -#-----| 0: p#0 -#-----| Type = const D & -# 7| void D::D(D&&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const D & +# 7| [MoveConstructor]: void D::D(D&&) # 7| params: -#-----| 0: p#0 -#-----| Type = D && -# 9| void D::D() +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: D && +# 9| [Constructor]: void D::D() # 9| params: # 9| initializations: -# 9| body: { ... } -# 10| 0: return ... -# 13| E& E::operator=(E const&) +# 9| body: [Block]: { ... } +# 10| 0: [ReturnStmt]: return ... +# 13| [CopyAssignmentOperator]: E& E::operator=(E const&) # 13| params: -#-----| 0: p#0 -#-----| Type = const E & -# 13| E& E::operator=(E&&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const E & +# 13| [MoveAssignmentOperator]: E& E::operator=(E&&) # 13| params: -#-----| 0: p#0 -#-----| Type = E && -# 17| void ConstructorCall(C*, D*, E*) +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: E && +# 17| [TopLevelFunction]: void ConstructorCall(C*, D*, E*) # 17| params: -# 17| 0: c -# 17| Type = C * -# 17| 1: d -# 17| Type = D * -# 17| 2: e -# 17| Type = E * -# 17| body: { ... } -# 18| 0: ExprStmt -# 18| 0: ... = ... -# 18| Type = C * +# 17| 0: [Parameter]: c +# 17| Type = [PointerType]: C * +# 17| 1: [Parameter]: d +# 17| Type = [PointerType]: D * +# 17| 2: [Parameter]: e +# 17| Type = [PointerType]: E * +# 17| body: [Block]: { ... } +# 18| 0: [ExprStmt]: ExprStmt +# 18| 0: [AssignExpr]: ... = ... +# 18| Type = [PointerType]: C * # 18| ValueCategory = lvalue -# 18| 0: c -# 18| Type = C * +# 18| 0: [VariableAccess]: c +# 18| Type = [PointerType]: C * # 18| ValueCategory = lvalue -# 18| 1: new -# 18| Type = C * +# 18| 1: [NewExpr]: new +# 18| Type = [PointerType]: C * # 18| ValueCategory = prvalue -# 18| 1: call to C -# 18| Type = void +# 18| 1: [ConstructorCall]: call to C +# 18| Type = [VoidType]: void # 18| ValueCategory = prvalue -# 18| 0: 5 -# 18| Type = int -# 18| Value = 5 +# 18| 0: [Literal]: 5 +# 18| Type = [IntType]: int +# 18| Value = [Literal]: 5 # 18| ValueCategory = prvalue -# 19| 1: ExprStmt -# 19| 0: ... = ... -# 19| Type = D * +# 19| 1: [ExprStmt]: ExprStmt +# 19| 0: [AssignExpr]: ... = ... +# 19| Type = [PointerType]: D * # 19| ValueCategory = lvalue -# 19| 0: d -# 19| Type = D * +# 19| 0: [VariableAccess]: d +# 19| Type = [PointerType]: D * # 19| ValueCategory = lvalue -# 19| 1: new -# 19| Type = D * +# 19| 1: [NewExpr]: new +# 19| Type = [PointerType]: D * # 19| ValueCategory = prvalue -# 19| 1: call to D -# 19| Type = void +# 19| 1: [ConstructorCall]: call to D +# 19| Type = [VoidType]: void # 19| ValueCategory = prvalue -# 20| 2: ExprStmt -# 20| 0: ... = ... -# 20| Type = E * +# 20| 2: [ExprStmt]: ExprStmt +# 20| 0: [AssignExpr]: ... = ... +# 20| Type = [PointerType]: E * # 20| ValueCategory = lvalue -# 20| 0: e -# 20| Type = E * +# 20| 0: [VariableAccess]: e +# 20| Type = [PointerType]: E * # 20| ValueCategory = lvalue -# 20| 1: new -# 20| Type = E * +# 20| 1: [NewExpr]: new +# 20| Type = [PointerType]: E * # 20| ValueCategory = prvalue -# 20| 1: 0 -# 20| Type = E -# 20| Value = 0 +# 20| 1: [Zero]: 0 +# 20| Type = [Class]: E +# 20| Value = [Zero]: 0 # 20| ValueCategory = prvalue -# 21| 3: return ... +# 21| 3: [ReturnStmt]: return ... Conversion1.c: -# 1| void Conversion1() +# 1| [TopLevelFunction]: void Conversion1() # 1| params: -# 1| body: { ... } -# 2| 0: declaration -# 2| 0: definition of i -# 2| Type = int -# 2| init: initializer for i -# 2| expr: (int)... +# 1| body: [Block]: { ... } +# 2| 0: [DeclStmt]: declaration +# 2| 0: [VariableDeclarationEntry]: definition of i +# 2| Type = [IntType]: int +# 2| init: [Initializer]: initializer for i +# 2| expr: [IntegralConversion]: (int)... # 2| Conversion = integral conversion -# 2| Type = int -# 2| Value = 1 +# 2| Type = [IntType]: int +# 2| Value = [IntegralConversion]: 1 # 2| ValueCategory = prvalue -# 2| expr: 1 -# 2| Type = int -# 2| Value = 1 +# 2| expr: [Literal]: 1 +# 2| Type = [IntType]: int +# 2| Value = [Literal]: 1 # 2| ValueCategory = prvalue -# 3| 1: return ... +# 3| 1: [ReturnStmt]: return ... Conversion2.c: -# 1| void Conversion2(int) +# 1| [TopLevelFunction]: void Conversion2(int) # 1| params: -# 1| 0: x -# 1| Type = int -# 1| body: { ... } -# 2| 0: ExprStmt -# 2| 0: ... = ... -# 2| Type = int +# 1| 0: [Parameter]: x +# 1| Type = [IntType]: int +# 1| body: [Block]: { ... } +# 2| 0: [ExprStmt]: ExprStmt +# 2| 0: [AssignExpr]: ... = ... +# 2| Type = [IntType]: int # 2| ValueCategory = prvalue -# 2| 0: x -# 2| Type = int +# 2| 0: [VariableAccess]: x +# 2| Type = [IntType]: int # 2| ValueCategory = lvalue -# 2| 1: ... + ... -# 2| Type = int -# 2| Value = 12 +# 2| 1: [AddExpr]: ... + ... +# 2| Type = [IntType]: int +# 2| Value = [AddExpr]: 12 # 2| ValueCategory = prvalue -# 2| 0: (int)... +# 2| 0: [IntegralConversion]: (int)... # 2| Conversion = integral conversion -# 2| Type = int -# 2| Value = 5 +# 2| Type = [IntType]: int +# 2| Value = [IntegralConversion]: 5 # 2| ValueCategory = prvalue -# 2| expr: 5 -# 2| Type = int -# 2| Value = 5 +# 2| expr: [Literal]: 5 +# 2| Type = [IntType]: int +# 2| Value = [Literal]: 5 # 2| ValueCategory = prvalue -# 2| 1: (int)... +# 2| 1: [IntegralConversion]: (int)... # 2| Conversion = integral conversion -# 2| Type = int -# 2| Value = 7 +# 2| Type = [IntType]: int +# 2| Value = [IntegralConversion]: 7 # 2| ValueCategory = prvalue -# 2| expr: 7 -# 2| Type = int -# 2| Value = 7 +# 2| expr: [Literal]: 7 +# 2| Type = [IntType]: int +# 2| Value = [Literal]: 7 # 2| ValueCategory = prvalue -# 3| 1: return ... +# 3| 1: [ReturnStmt]: return ... Conversion3.cpp: -# 1| void Conversion3(int) +# 1| [TopLevelFunction]: void Conversion3(int) # 1| params: -# 1| 0: x -# 1| Type = int -# 1| body: { ... } -# 2| 0: ExprStmt -# 2| 0: ... = ... -# 2| Type = int +# 1| 0: [Parameter]: x +# 1| Type = [IntType]: int +# 1| body: [Block]: { ... } +# 2| 0: [ExprStmt]: ExprStmt +# 2| 0: [AssignExpr]: ... = ... +# 2| Type = [IntType]: int # 2| ValueCategory = lvalue -# 2| 0: x -# 2| Type = int +# 2| 0: [VariableAccess]: x +# 2| Type = [IntType]: int # 2| ValueCategory = lvalue -# 2| 1: ... + ... -# 2| Type = int -# 2| Value = 8 +# 2| 1: [AddExpr]: ... + ... +# 2| Type = [IntType]: int +# 2| Value = [AddExpr]: 8 # 2| ValueCategory = prvalue -# 2| 0: (int)... +# 2| 0: [IntegralConversion]: (int)... # 2| Conversion = integral conversion -# 2| Type = int -# 2| Value = 1 +# 2| Type = [IntType]: int +# 2| Value = [IntegralConversion]: 1 # 2| ValueCategory = prvalue -# 2| expr: (bool)... +# 2| expr: [BoolConversion]: (bool)... # 2| Conversion = conversion to bool -# 2| Type = bool -# 2| Value = 1 +# 2| Type = [BoolType]: bool +# 2| Value = [BoolConversion]: 1 # 2| ValueCategory = prvalue -# 2| expr: (int)... +# 2| expr: [IntegralConversion]: (int)... # 2| Conversion = integral conversion -# 2| Type = int -# 2| Value = 1 +# 2| Type = [IntType]: int +# 2| Value = [IntegralConversion]: 1 # 2| ValueCategory = prvalue -# 2| expr: 5 -# 2| Type = int -# 2| Value = 5 +# 2| expr: [Literal]: 5 +# 2| Type = [IntType]: int +# 2| Value = [Literal]: 5 # 2| ValueCategory = prvalue -# 2| 1: (...) -# 2| Type = int -# 2| Value = 7 +# 2| 1: [ParenthesisExpr]: (...) +# 2| Type = [IntType]: int +# 2| Value = [ParenthesisExpr]: 7 # 2| ValueCategory = prvalue -# 2| expr: (int)... +# 2| expr: [IntegralConversion]: (int)... # 2| Conversion = integral conversion -# 2| Type = int -# 2| Value = 7 +# 2| Type = [IntType]: int +# 2| Value = [IntegralConversion]: 7 # 2| ValueCategory = prvalue -# 2| expr: 7 -# 2| Type = int -# 2| Value = 7 +# 2| expr: [Literal]: 7 +# 2| Type = [IntType]: int +# 2| Value = [Literal]: 7 # 2| ValueCategory = prvalue -# 3| 1: return ... +# 3| 1: [ReturnStmt]: return ... Conversion4.c: -# 1| void Conversion4(int) +# 1| [TopLevelFunction]: void Conversion4(int) # 1| params: -# 1| 0: x -# 1| Type = int -# 1| body: { ... } -# 2| 0: ExprStmt -# 2| 0: ... = ... -# 2| Type = int +# 1| 0: [Parameter]: x +# 1| Type = [IntType]: int +# 1| body: [Block]: { ... } +# 2| 0: [ExprStmt]: ExprStmt +# 2| 0: [AssignExpr]: ... = ... +# 2| Type = [IntType]: int # 2| ValueCategory = prvalue -# 2| 0: x -# 2| Type = int +# 2| 0: [VariableAccess]: x +# 2| Type = [IntType]: int # 2| ValueCategory = lvalue -# 2| 1: (...) -# 2| Type = int -# 2| Value = 7 +# 2| 1: [ParenthesisExpr]: (...) +# 2| Type = [IntType]: int +# 2| Value = [ParenthesisExpr]: 7 # 2| ValueCategory = prvalue -# 2| expr: (int)... +# 2| expr: [IntegralConversion]: (int)... # 2| Conversion = integral conversion -# 2| Type = int -# 2| Value = 7 +# 2| Type = [IntType]: int +# 2| Value = [IntegralConversion]: 7 # 2| ValueCategory = prvalue -# 2| expr: 7 -# 2| Type = int -# 2| Value = 7 +# 2| expr: [Literal]: 7 +# 2| Type = [IntType]: int +# 2| Value = [Literal]: 7 # 2| ValueCategory = prvalue -# 3| 1: return ... +# 3| 1: [ReturnStmt]: return ... DestructorCall.cpp: -# 3| void C::~C() +# 3| [Destructor]: void C::~C() # 3| params: -# 3| body: { ... } -# 4| 0: return ... +# 3| body: [Block]: { ... } +# 4| 0: [ReturnStmt]: return ... # 3| destructions: -# 11| void DestructorCall(C*, D*) +# 11| [TopLevelFunction]: void DestructorCall(C*, D*) # 11| params: -# 11| 0: c -# 11| Type = C * -# 11| 1: d -# 11| Type = D * -# 11| body: { ... } -# 12| 0: ExprStmt -# 12| 0: delete -# 12| Type = void +# 11| 0: [Parameter]: c +# 11| Type = [PointerType]: C * +# 11| 1: [Parameter]: d +# 11| Type = [PointerType]: D * +# 11| body: [Block]: { ... } +# 12| 0: [ExprStmt]: ExprStmt +# 12| 0: [DeleteExpr]: delete +# 12| Type = [VoidType]: void # 12| ValueCategory = prvalue -# 12| 1: call to ~C -# 12| Type = void +# 12| 1: [DestructorCall]: call to ~C +# 12| Type = [VoidType]: void # 12| ValueCategory = prvalue -# 12| -1: c -# 12| Type = C * +# 12| -1: [VariableAccess]: c +# 12| Type = [PointerType]: C * # 12| ValueCategory = prvalue(load) -# 13| 1: ExprStmt -# 13| 0: delete -# 13| Type = void +# 13| 1: [ExprStmt]: ExprStmt +# 13| 0: [DeleteExpr]: delete +# 13| Type = [VoidType]: void # 13| ValueCategory = prvalue -# 13| 3: d -# 13| Type = D * +# 13| 3: [VariableAccess]: d +# 13| Type = [PointerType]: D * # 13| ValueCategory = prvalue(load) -# 14| 2: return ... +# 14| 2: [ReturnStmt]: return ... DynamicCast.cpp: -# 1| Base& Base::operator=(Base const&) +# 1| [CopyAssignmentOperator]: Base& Base::operator=(Base const&) # 1| params: -#-----| 0: p#0 -#-----| Type = const Base & -#-----| body: { ... } -#-----| 0: return ... -#-----| 0: (reference to) -#-----| Type = Base & +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const Base & +#-----| body: [Block]: { ... } +#-----| 0: [ReturnStmt]: return ... +#-----| 0: [ReferenceToExpr]: (reference to) +#-----| Type = [LValueReferenceType]: Base & #-----| ValueCategory = prvalue -#-----| expr: * ... -#-----| Type = Base +#-----| expr: [PointerDereferenceExpr]: * ... +#-----| Type = [Class]: Base #-----| ValueCategory = lvalue -#-----| 0: this -#-----| Type = Base * +#-----| 0: [ThisExpr]: this +#-----| Type = [PointerType]: Base * #-----| ValueCategory = prvalue(load) -# 1| Base& Base::operator=(Base&&) +# 1| [MoveAssignmentOperator]: Base& Base::operator=(Base&&) # 1| params: -#-----| 0: p#0 -#-----| Type = Base && -# 1| void Base::Base() +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: Base && +# 1| [Constructor]: void Base::Base() # 1| params: -# 1| void Base::Base(Base const&) +# 1| [CopyConstructor]: void Base::Base(Base const&) # 1| params: -#-----| 0: p#0 -#-----| Type = const Base & -# 1| void Base::Base(Base&&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const Base & +# 1| [MoveConstructor]: void Base::Base(Base&&) # 1| params: -#-----| 0: p#0 -#-----| Type = Base && -# 2| void Base::f() +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: Base && +# 2| [VirtualFunction]: void Base::f() # 2| params: -# 2| body: { ... } -# 2| 0: return ... -# 4| Derived& Derived::operator=(Derived const&) +# 2| body: [Block]: { ... } +# 2| 0: [ReturnStmt]: return ... +# 4| [CopyAssignmentOperator]: Derived& Derived::operator=(Derived const&) # 4| params: -#-----| 0: p#0 -#-----| Type = const Derived & -#-----| body: { ... } -#-----| 0: ExprStmt -#-----| 0: (reference dereference) -#-----| Type = Base +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const Derived & +#-----| body: [Block]: { ... } +#-----| 0: [ExprStmt]: ExprStmt +#-----| 0: [ReferenceDereferenceExpr]: (reference dereference) +#-----| Type = [Class]: Base #-----| ValueCategory = lvalue -# 4| expr: call to operator= -# 4| Type = Base & +# 4| expr: [FunctionCall]: call to operator= +# 4| Type = [LValueReferenceType]: Base & # 4| ValueCategory = prvalue -#-----| -1: (Base *)... +#-----| -1: [BaseClassConversion]: (Base *)... #-----| Conversion = base class conversion -#-----| Type = Base * +#-----| Type = [PointerType]: Base * #-----| ValueCategory = prvalue -#-----| expr: this -#-----| Type = Derived * +#-----| expr: [ThisExpr]: this +#-----| Type = [PointerType]: Derived * #-----| ValueCategory = prvalue(load) -#-----| 0: (reference to) -#-----| Type = const Base & +#-----| 0: [ReferenceToExpr]: (reference to) +#-----| Type = [LValueReferenceType]: const Base & #-----| ValueCategory = prvalue -#-----| expr: * ... -#-----| Type = const Base +#-----| expr: [PointerDereferenceExpr]: * ... +#-----| Type = [SpecifiedType]: const Base #-----| ValueCategory = lvalue -#-----| 0: (const Base *)... +#-----| 0: [BaseClassConversion]: (const Base *)... #-----| Conversion = base class conversion -#-----| Type = const Base * +#-----| Type = [PointerType]: const Base * #-----| ValueCategory = prvalue -#-----| expr: & ... -#-----| Type = const Derived * +#-----| expr: [AddressOfExpr]: & ... +#-----| Type = [PointerType]: const Derived * #-----| ValueCategory = prvalue -#-----| 0: (reference dereference) -#-----| Type = const Derived +#-----| 0: [ReferenceDereferenceExpr]: (reference dereference) +#-----| Type = [SpecifiedType]: const Derived #-----| ValueCategory = lvalue -#-----| expr: p#0 -#-----| Type = const Derived & +#-----| expr: [VariableAccess]: p#0 +#-----| Type = [LValueReferenceType]: const Derived & #-----| ValueCategory = prvalue(load) -#-----| 1: return ... -#-----| 0: (reference to) -#-----| Type = Derived & +#-----| 1: [ReturnStmt]: return ... +#-----| 0: [ReferenceToExpr]: (reference to) +#-----| Type = [LValueReferenceType]: Derived & #-----| ValueCategory = prvalue -#-----| expr: * ... -#-----| Type = Derived +#-----| expr: [PointerDereferenceExpr]: * ... +#-----| Type = [Class]: Derived #-----| ValueCategory = lvalue -#-----| 0: this -#-----| Type = Derived * +#-----| 0: [ThisExpr]: this +#-----| Type = [PointerType]: Derived * #-----| ValueCategory = prvalue(load) -# 4| Derived& Derived::operator=(Derived&&) +# 4| [MoveAssignmentOperator]: Derived& Derived::operator=(Derived&&) # 4| params: -#-----| 0: p#0 -#-----| Type = Derived && -# 4| void Derived::Derived() +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: Derived && +# 4| [Constructor]: void Derived::Derived() # 4| params: -# 4| void Derived::Derived(Derived const&) +# 4| [CopyConstructor]: void Derived::Derived(Derived const&) # 4| params: -#-----| 0: p#0 -#-----| Type = const Derived & -# 4| void Derived::Derived(Derived&&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const Derived & +# 4| [MoveConstructor]: void Derived::Derived(Derived&&) # 4| params: -#-----| 0: p#0 -#-----| Type = Derived && -# 5| void Derived::f() +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: Derived && +# 5| [VirtualFunction]: void Derived::f() # 5| params: -# 5| body: { ... } -# 5| 0: return ... -# 8| void DynamicCast(Base*, Derived*) +# 5| body: [Block]: { ... } +# 5| 0: [ReturnStmt]: return ... +# 8| [TopLevelFunction]: void DynamicCast(Base*, Derived*) # 8| params: -# 8| 0: bp -# 8| Type = Base * -# 8| 1: d -# 8| Type = Derived * -# 8| body: { ... } -# 9| 0: ExprStmt -# 9| 0: ... = ... -# 9| Type = Derived * +# 8| 0: [Parameter]: bp +# 8| Type = [PointerType]: Base * +# 8| 1: [Parameter]: d +# 8| Type = [PointerType]: Derived * +# 8| body: [Block]: { ... } +# 9| 0: [ExprStmt]: ExprStmt +# 9| 0: [AssignExpr]: ... = ... +# 9| Type = [PointerType]: Derived * # 9| ValueCategory = lvalue -# 9| 0: d -# 9| Type = Derived * +# 9| 0: [VariableAccess]: d +# 9| Type = [PointerType]: Derived * # 9| ValueCategory = lvalue -# 9| 1: dynamic_cast... +# 9| 1: [DynamicCast]: dynamic_cast... # 9| Conversion = dynamic_cast -# 9| Type = Derived * +# 9| Type = [PointerType]: Derived * # 9| ValueCategory = prvalue -# 9| expr: bp -# 9| Type = Base * +# 9| expr: [VariableAccess]: bp +# 9| Type = [PointerType]: Base * # 9| ValueCategory = prvalue(load) -# 10| 1: return ... -# 12| void DynamicCastRef(Base&, Derived&) +# 10| 1: [ReturnStmt]: return ... +# 12| [TopLevelFunction]: void DynamicCastRef(Base&, Derived&) # 12| params: -# 12| 0: bp -# 12| Type = Base & -# 12| 1: d -# 12| Type = Derived & -# 12| body: { ... } -# 13| 0: ExprStmt -# 13| 0: (reference dereference) -# 13| Type = Derived +# 12| 0: [Parameter]: bp +# 12| Type = [LValueReferenceType]: Base & +# 12| 1: [Parameter]: d +# 12| Type = [LValueReferenceType]: Derived & +# 12| body: [Block]: { ... } +# 13| 0: [ExprStmt]: ExprStmt +# 13| 0: [ReferenceDereferenceExpr]: (reference dereference) +# 13| Type = [Class]: Derived # 13| ValueCategory = lvalue -# 13| expr: call to operator= -# 13| Type = Derived & +# 13| expr: [FunctionCall]: call to operator= +# 13| Type = [LValueReferenceType]: Derived & # 13| ValueCategory = prvalue -# 13| -1: (reference dereference) -# 13| Type = Derived +# 13| -1: [ReferenceDereferenceExpr]: (reference dereference) +# 13| Type = [Class]: Derived # 13| ValueCategory = lvalue -# 13| expr: d -# 13| Type = Derived & +# 13| expr: [VariableAccess]: d +# 13| Type = [LValueReferenceType]: Derived & # 13| ValueCategory = prvalue(load) -# 13| 0: (reference to) -# 13| Type = const Derived & +# 13| 0: [ReferenceToExpr]: (reference to) +# 13| Type = [LValueReferenceType]: const Derived & # 13| ValueCategory = prvalue -# 13| expr: (const Derived)... +# 13| expr: [GlvalueConversion]: (const Derived)... # 13| Conversion = glvalue conversion -# 13| Type = const Derived +# 13| Type = [SpecifiedType]: const Derived # 13| ValueCategory = lvalue -# 13| expr: dynamic_cast... +# 13| expr: [DynamicCast]: dynamic_cast... # 13| Conversion = dynamic_cast -# 13| Type = Derived +# 13| Type = [Class]: Derived # 13| ValueCategory = lvalue -# 13| expr: (reference dereference) -# 13| Type = Base +# 13| expr: [ReferenceDereferenceExpr]: (reference dereference) +# 13| Type = [Class]: Base # 13| ValueCategory = lvalue -# 13| expr: bp -# 13| Type = Base & +# 13| expr: [VariableAccess]: bp +# 13| Type = [LValueReferenceType]: Base & # 13| ValueCategory = prvalue(load) -# 14| 1: return ... +# 14| 1: [ReturnStmt]: return ... Parenthesis.c: -# 1| void Parenthesis(int) +# 1| [TopLevelFunction]: void Parenthesis(int) # 1| params: -# 1| 0: i -# 1| Type = int -# 1| body: { ... } -# 2| 0: ExprStmt -# 2| 0: ... = ... -# 2| Type = int +# 1| 0: [Parameter]: i +# 1| Type = [IntType]: int +# 1| body: [Block]: { ... } +# 2| 0: [ExprStmt]: ExprStmt +# 2| 0: [AssignExpr]: ... = ... +# 2| Type = [IntType]: int # 2| ValueCategory = prvalue -# 2| 0: i -# 2| Type = int +# 2| 0: [VariableAccess]: i +# 2| Type = [IntType]: int # 2| ValueCategory = lvalue -# 2| 1: ... * ... -# 2| Type = int +# 2| 1: [MulExpr]: ... * ... +# 2| Type = [IntType]: int # 2| ValueCategory = prvalue -# 2| 0: (...) -# 2| Type = int +# 2| 0: [ParenthesisExpr]: (...) +# 2| Type = [IntType]: int # 2| ValueCategory = prvalue -# 2| expr: ... + ... -# 2| Type = int +# 2| expr: [AddExpr]: ... + ... +# 2| Type = [IntType]: int # 2| ValueCategory = prvalue -# 2| 0: i -# 2| Type = int +# 2| 0: [VariableAccess]: i +# 2| Type = [IntType]: int # 2| ValueCategory = prvalue(load) -# 2| 1: 1 -# 2| Type = int -# 2| Value = 1 +# 2| 1: [Literal]: 1 +# 2| Type = [IntType]: int +# 2| Value = [Literal]: 1 # 2| ValueCategory = prvalue -# 2| 1: 2 -# 2| Type = int -# 2| Value = 2 +# 2| 1: [Literal]: 2 +# 2| Type = [IntType]: int +# 2| Value = [Literal]: 2 # 2| ValueCategory = prvalue -# 3| 1: return ... +# 3| 1: [ReturnStmt]: return ... PointerDereference.c: -# 1| void PointerDereference(int*, int) +# 1| [TopLevelFunction]: void PointerDereference(int*, int) # 1| params: -# 1| 0: i -# 1| Type = int * -# 1| 1: j -# 1| Type = int -# 1| body: { ... } -# 2| 0: ExprStmt -# 2| 0: ... = ... -# 2| Type = int +# 1| 0: [Parameter]: i +# 1| Type = [IntPointerType]: int * +# 1| 1: [Parameter]: j +# 1| Type = [IntType]: int +# 1| body: [Block]: { ... } +# 2| 0: [ExprStmt]: ExprStmt +# 2| 0: [AssignExpr]: ... = ... +# 2| Type = [IntType]: int # 2| ValueCategory = prvalue -# 2| 0: j -# 2| Type = int +# 2| 0: [VariableAccess]: j +# 2| Type = [IntType]: int # 2| ValueCategory = lvalue -# 2| 1: * ... -# 2| Type = int +# 2| 1: [PointerDereferenceExpr]: * ... +# 2| Type = [IntType]: int # 2| ValueCategory = prvalue(load) -# 2| 0: i -# 2| Type = int * +# 2| 0: [VariableAccess]: i +# 2| Type = [IntPointerType]: int * # 2| ValueCategory = prvalue(load) -# 3| 1: return ... +# 3| 1: [ReturnStmt]: return ... ReferenceDereference.cpp: -# 4| void ReferenceDereference(int&, int) +# 4| [TopLevelFunction]: void ReferenceDereference(int&, int) # 4| params: -# 4| 0: i -# 4| Type = int & -# 4| 1: j -# 4| Type = int -# 4| body: { ... } -# 5| 0: ExprStmt -# 5| 0: ... = ... -# 5| Type = int +# 4| 0: [Parameter]: i +# 4| Type = [LValueReferenceType]: int & +# 4| 1: [Parameter]: j +# 4| Type = [IntType]: int +# 4| body: [Block]: { ... } +# 5| 0: [ExprStmt]: ExprStmt +# 5| 0: [AssignExpr]: ... = ... +# 5| Type = [IntType]: int # 5| ValueCategory = lvalue -# 5| 0: j -# 5| Type = int +# 5| 0: [VariableAccess]: j +# 5| Type = [IntType]: int # 5| ValueCategory = lvalue -# 5| 1: (reference dereference) -# 5| Type = int +# 5| 1: [ReferenceDereferenceExpr]: (reference dereference) +# 5| Type = [IntType]: int # 5| ValueCategory = prvalue(load) -# 5| expr: i -# 5| Type = int & +# 5| expr: [VariableAccess]: i +# 5| Type = [LValueReferenceType]: int & # 5| ValueCategory = prvalue(load) -# 6| 1: return ... +# 6| 1: [ReturnStmt]: return ... ReferenceTo.cpp: -# 1| int& ReferenceTo(int*) +# 1| [TopLevelFunction]: int& ReferenceTo(int*) # 1| params: -# 1| 0: i -# 1| Type = int * -# 1| body: { ... } -# 2| 0: return ... -# 2| 0: (reference to) -# 2| Type = int & +# 1| 0: [Parameter]: i +# 1| Type = [IntPointerType]: int * +# 1| body: [Block]: { ... } +# 2| 0: [ReturnStmt]: return ... +# 2| 0: [ReferenceToExpr]: (reference to) +# 2| Type = [LValueReferenceType]: int & # 2| ValueCategory = prvalue -# 2| expr: * ... -# 2| Type = int +# 2| expr: [PointerDereferenceExpr]: * ... +# 2| Type = [IntType]: int # 2| ValueCategory = lvalue -# 2| 0: i -# 2| Type = int * +# 2| 0: [VariableAccess]: i +# 2| Type = [IntPointerType]: int * # 2| ValueCategory = prvalue(load) Sizeof.c: -# 1| void Sizeof(int[]) +# 1| [TopLevelFunction]: void Sizeof(int[]) # 1| params: -# 1| 0: array -# 1| Type = int[] -# 1| body: { ... } -# 2| 0: declaration -# 2| 0: definition of i -# 2| Type = int -# 2| init: initializer for i -# 2| expr: (int)... +# 1| 0: [Parameter]: array +# 1| Type = [ArrayType]: int[] +# 1| body: [Block]: { ... } +# 2| 0: [DeclStmt]: declaration +# 2| 0: [VariableDeclarationEntry]: definition of i +# 2| Type = [IntType]: int +# 2| init: [Initializer]: initializer for i +# 2| expr: [IntegralConversion]: (int)... # 2| Conversion = integral conversion -# 2| Type = int -# 2| Value = 4 +# 2| Type = [IntType]: int +# 2| Value = [IntegralConversion]: 4 # 2| ValueCategory = prvalue -# 2| expr: sizeof(int) -# 2| Type = unsigned long -# 2| Value = 4 +# 2| expr: [SizeofTypeOperator]: sizeof(int) +# 2| Type = [LongType]: unsigned long +# 2| Value = [SizeofTypeOperator]: 4 # 2| ValueCategory = prvalue -# 3| 1: declaration -# 3| 0: definition of j -# 3| Type = int -# 3| init: initializer for j -# 3| expr: (int)... +# 3| 1: [DeclStmt]: declaration +# 3| 0: [VariableDeclarationEntry]: definition of j +# 3| Type = [IntType]: int +# 3| init: [Initializer]: initializer for j +# 3| expr: [IntegralConversion]: (int)... # 3| Conversion = integral conversion -# 3| Type = int -# 3| Value = 8 +# 3| Type = [IntType]: int +# 3| Value = [IntegralConversion]: 8 # 3| ValueCategory = prvalue -# 3| expr: sizeof() -# 3| Type = unsigned long -# 3| Value = 8 +# 3| expr: [SizeofExprOperator]: sizeof() +# 3| Type = [LongType]: unsigned long +# 3| Value = [SizeofExprOperator]: 8 # 3| ValueCategory = prvalue -# 3| 0: (...) -# 3| Type = int * +# 3| 0: [ParenthesisExpr]: (...) +# 3| Type = [IntPointerType]: int * # 3| ValueCategory = lvalue -# 3| expr: array -# 3| Type = int * +# 3| expr: [VariableAccess]: array +# 3| Type = [IntPointerType]: int * # 3| ValueCategory = lvalue -# 4| 2: return ... +# 4| 2: [ReturnStmt]: return ... StatementExpr.c: -# 1| void StatementExpr() +# 1| [TopLevelFunction]: void StatementExpr() # 1| params: -# 1| body: { ... } -# 2| 0: declaration -# 2| 0: definition of j -# 2| Type = int -# 2| init: initializer for j -# 2| expr: (statement expression) -# 2| Type = int +# 1| body: [Block]: { ... } +# 2| 0: [DeclStmt]: declaration +# 2| 0: [VariableDeclarationEntry]: definition of j +# 2| Type = [IntType]: int +# 2| init: [Initializer]: initializer for j +# 2| expr: [StmtExpr]: (statement expression) +# 2| Type = [IntType]: int # 2| ValueCategory = prvalue -# 3| 1: return ... +# 3| 1: [ReturnStmt]: return ... StaticMemberAccess.cpp: -# 1| X& X::operator=(X const&) +# 1| [CopyAssignmentOperator]: X& X::operator=(X const&) # 1| params: -#-----| 0: p#0 -#-----| Type = const X & -# 1| X& X::operator=(X&&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const X & +# 1| [MoveAssignmentOperator]: X& X::operator=(X&&) # 1| params: -#-----| 0: p#0 -#-----| Type = X && -# 5| void StaticMemberAccess(int, X&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: X && +# 5| [TopLevelFunction]: void StaticMemberAccess(int, X&) # 5| params: -# 5| 0: i -# 5| Type = int -# 5| 1: xref -# 5| Type = X & -# 5| body: { ... } -# 7| 0: ExprStmt -# 7| 0: ... = ... -# 7| Type = int +# 5| 0: [Parameter]: i +# 5| Type = [IntType]: int +# 5| 1: [Parameter]: xref +# 5| Type = [LValueReferenceType]: X & +# 5| body: [Block]: { ... } +# 7| 0: [ExprStmt]: ExprStmt +# 7| 0: [AssignExpr]: ... = ... +# 7| Type = [IntType]: int # 7| ValueCategory = lvalue -# 7| 0: i -# 7| Type = int +# 7| 0: [VariableAccess]: i +# 7| Type = [IntType]: int # 7| ValueCategory = lvalue -# 7| 1: i -# 7| Type = int +# 7| 1: [VariableAccess]: i +# 7| Type = [IntType]: int # 7| ValueCategory = prvalue -# 7| -1: (reference dereference) -# 7| Type = X +# 7| -1: [ReferenceDereferenceExpr]: (reference dereference) +# 7| Type = [Struct]: X # 7| ValueCategory = lvalue -# 7| expr: xref -# 7| Type = X & +# 7| expr: [VariableAccess]: xref +# 7| Type = [LValueReferenceType]: X & # 7| ValueCategory = prvalue(load) -# 9| 1: return ... +# 9| 1: [ReturnStmt]: return ... Subscript.c: -# 1| void Subscript(int[], int) +# 1| [TopLevelFunction]: void Subscript(int[], int) # 1| params: -# 1| 0: i -# 1| Type = int[] -# 1| 1: j -# 1| Type = int -# 1| body: { ... } -# 2| 0: ExprStmt -# 2| 0: ... = ... -# 2| Type = int +# 1| 0: [Parameter]: i +# 1| Type = [ArrayType]: int[] +# 1| 1: [Parameter]: j +# 1| Type = [IntType]: int +# 1| body: [Block]: { ... } +# 2| 0: [ExprStmt]: ExprStmt +# 2| 0: [AssignExpr]: ... = ... +# 2| Type = [IntType]: int # 2| ValueCategory = prvalue -# 2| 0: j -# 2| Type = int +# 2| 0: [VariableAccess]: j +# 2| Type = [IntType]: int # 2| ValueCategory = lvalue -# 2| 1: access to array -# 2| Type = int +# 2| 1: [ArrayExpr]: access to array +# 2| Type = [IntType]: int # 2| ValueCategory = prvalue(load) -# 2| 0: i -# 2| Type = int * +# 2| 0: [VariableAccess]: i +# 2| Type = [IntPointerType]: int * # 2| ValueCategory = prvalue(load) -# 2| 1: 5 -# 2| Type = int -# 2| Value = 5 +# 2| 1: [Literal]: 5 +# 2| Type = [IntType]: int +# 2| Value = [Literal]: 5 # 2| ValueCategory = prvalue -# 3| 1: return ... +# 3| 1: [ReturnStmt]: return ... Throw.cpp: -# 2| F& F::operator=(F const&) +# 2| [CopyAssignmentOperator]: F& F::operator=(F const&) # 2| params: -#-----| 0: p#0 -#-----| Type = const F & -# 2| F& F::operator=(F&&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const F & +# 2| [MoveAssignmentOperator]: F& F::operator=(F&&) # 2| params: -#-----| 0: p#0 -#-----| Type = F && -# 2| void F::F(F const&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: F && +# 2| [CopyConstructor]: void F::F(F const&) # 2| params: -#-----| 0: p#0 -#-----| Type = const F & -# 2| void F::F(F&&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const F & +# 2| [MoveConstructor]: void F::F(F&&) # 2| params: -#-----| 0: p#0 -#-----| Type = F && +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: F && # 2| initializations: -# 2| body: { ... } -# 2| 0: return ... -# 4| void F::F() +# 2| body: [Block]: { ... } +# 2| 0: [ReturnStmt]: return ... +# 4| [Constructor]: void F::F() # 4| params: # 4| initializations: -# 4| body: { ... } -# 4| 0: return ... -# 6| void Throw(int) +# 4| body: [Block]: { ... } +# 4| 0: [ReturnStmt]: return ... +# 6| [TopLevelFunction]: void Throw(int) # 6| params: -# 6| 0: i -# 6| Type = int -# 6| body: { ... } -# 7| 0: try { ... } -# 7| 0: { ... } -# 8| 0: if (...) ... -# 8| 0: (bool)... +# 6| 0: [Parameter]: i +# 6| Type = [IntType]: int +# 6| body: [Block]: { ... } +# 7| 0: [TryStmt]: try { ... } +# 7| 0: [Block]: { ... } +# 8| 0: [IfStmt]: if (...) ... +# 8| 0: [BoolConversion]: (bool)... # 8| Conversion = conversion to bool -# 8| Type = bool +# 8| Type = [BoolType]: bool # 8| ValueCategory = prvalue -# 8| expr: i -# 8| Type = int +# 8| expr: [VariableAccess]: i +# 8| Type = [IntType]: int # 8| ValueCategory = prvalue(load) -# 9| 1: ExprStmt -# 9| 0: throw ... -# 9| Type = E +# 9| 1: [ExprStmt]: ExprStmt +# 9| 0: [ThrowExpr]: throw ... +# 9| Type = [Class]: E # 9| ValueCategory = prvalue -# 9| 0: 0 -# 9| Type = E -# 9| Value = 0 +# 9| 0: [Zero]: 0 +# 9| Type = [Class]: E +# 9| Value = [Zero]: 0 # 9| ValueCategory = prvalue -# 11| 2: ExprStmt -# 11| 0: throw ... -# 11| Type = F +# 11| 2: [ExprStmt]: ExprStmt +# 11| 0: [ThrowExpr]: throw ... +# 11| Type = [Class]: F # 11| ValueCategory = prvalue -# 11| 0: call to F -# 11| Type = void +# 11| 0: [ConstructorCall]: call to F +# 11| Type = [VoidType]: void # 11| ValueCategory = prvalue -# 12| 1: -# 12| 0: { ... } -# 13| 0: ExprStmt -# 13| 0: re-throw exception -# 13| Type = void +# 12| 1: [Handler]: +# 12| 0: [CatchBlock]: { ... } +# 13| 0: [ExprStmt]: ExprStmt +# 13| 0: [ReThrowExpr]: re-throw exception +# 13| Type = [VoidType]: void # 13| ValueCategory = prvalue Typeid.cpp: -# 4| std::type_info& std::type_info::operator=(std::type_info const&) +# 4| [CopyAssignmentOperator]: std::type_info& std::type_info::operator=(std::type_info const&) # 4| params: -#-----| 0: p#0 -#-----| Type = const type_info & -# 4| std::type_info& std::type_info::operator=(std::type_info&&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const type_info & +# 4| [MoveAssignmentOperator]: std::type_info& std::type_info::operator=(std::type_info&&) # 4| params: -#-----| 0: p#0 -#-----| Type = type_info && -# 7| char const* std::type_info::name() const +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: type_info && +# 7| [ConstMemberFunction]: char const* std::type_info::name() const # 7| params: -# 13| void Base::v() +# 13| [VirtualFunction]: void Base::v() # 13| params: -# 13| body: { ... } -# 13| 0: return ... -# 18| void TypeId(Base*) +# 13| body: [Block]: { ... } +# 13| 0: [ReturnStmt]: return ... +# 18| [TopLevelFunction]: void TypeId(Base*) # 18| params: -# 18| 0: bp -# 18| Type = Base * -# 18| body: { ... } -# 19| 0: declaration -# 19| 0: definition of name -# 19| Type = const char * -# 19| init: initializer for name -# 19| expr: call to name -# 19| Type = const char * +# 18| 0: [Parameter]: bp +# 18| Type = [PointerType]: Base * +# 18| body: [Block]: { ... } +# 19| 0: [DeclStmt]: declaration +# 19| 0: [VariableDeclarationEntry]: definition of name +# 19| Type = [PointerType]: const char * +# 19| init: [Initializer]: initializer for name +# 19| expr: [FunctionCall]: call to name +# 19| Type = [PointerType]: const char * # 19| ValueCategory = prvalue -# 19| -1: typeid ... -# 19| Type = const type_info +# 19| -1: [TypeidOperator]: typeid ... +# 19| Type = [SpecifiedType]: const type_info # 19| ValueCategory = lvalue -# 19| 0: bp -# 19| Type = Base * +# 19| 0: [VariableAccess]: bp +# 19| Type = [PointerType]: Base * # 19| ValueCategory = lvalue -# 20| 1: return ... +# 20| 1: [ReturnStmt]: return ... VacuousDestructorCall.cpp: -# 2| void CallDestructor(T, T*) +# 2| [TemplateFunction]: void CallDestructor(T, T*) # 2| params: -# 2| 0: x -# 2| Type = T -# 2| 1: y -# 2| Type = T * -# 2| body: { ... } -# 3| 0: ExprStmt -# 3| 0: call to expression -# 3| Type = unknown +# 2| 0: [Parameter]: x +# 2| Type = [TemplateParameter]: T +# 2| 1: [Parameter]: y +# 2| Type = [PointerType]: T * +# 2| body: [Block]: { ... } +# 3| 0: [ExprStmt]: ExprStmt +# 3| 0: [ExprCall]: call to expression +# 3| Type = [UnknownType]: unknown # 3| ValueCategory = prvalue -# 3| 0: Unknown literal -# 3| Type = unknown +# 3| 0: [Literal]: Unknown literal +# 3| Type = [UnknownType]: unknown # 3| ValueCategory = prvalue -# 3| -1: x -# 3| Type = T +# 3| -1: [VariableAccess]: x +# 3| Type = [TemplateParameter]: T # 3| ValueCategory = lvalue -# 4| 1: ExprStmt -# 4| 0: call to expression -# 4| Type = unknown +# 4| 1: [ExprStmt]: ExprStmt +# 4| 0: [ExprCall]: call to expression +# 4| Type = [UnknownType]: unknown # 4| ValueCategory = prvalue -# 4| 0: Unknown literal -# 4| Type = unknown +# 4| 0: [Literal]: Unknown literal +# 4| Type = [UnknownType]: unknown # 4| ValueCategory = prvalue -# 4| -1: y -# 4| Type = T * +# 4| -1: [VariableAccess]: y +# 4| Type = [PointerType]: T * # 4| ValueCategory = prvalue(load) -# 5| 2: return ... -# 2| void CallDestructor(int, int*) +# 5| 2: [ReturnStmt]: return ... +# 2| [FunctionTemplateSpecialization]: void CallDestructor(int, int*) # 2| params: -# 2| 0: x -# 2| Type = int -# 2| 1: y -# 2| Type = int * -# 2| body: { ... } -# 3| 0: ExprStmt -# 3| 0: (vacuous destructor call) -# 3| Type = void +# 2| 0: [Parameter]: x +# 2| Type = [IntType]: int +# 2| 1: [Parameter]: y +# 2| Type = [IntPointerType]: int * +# 2| body: [Block]: { ... } +# 3| 0: [ExprStmt]: ExprStmt +# 3| 0: [VacuousDestructorCall]: (vacuous destructor call) +# 3| Type = [VoidType]: void # 3| ValueCategory = prvalue -# 3| 0: x -# 3| Type = int +# 3| 0: [VariableAccess]: x +# 3| Type = [IntType]: int # 3| ValueCategory = lvalue -# 4| 1: ExprStmt -# 4| 0: (vacuous destructor call) -# 4| Type = void +# 4| 1: [ExprStmt]: ExprStmt +# 4| 0: [VacuousDestructorCall]: (vacuous destructor call) +# 4| Type = [VoidType]: void # 4| ValueCategory = prvalue -# 4| 0: y -# 4| Type = int * +# 4| 0: [VariableAccess]: y +# 4| Type = [IntPointerType]: int * # 4| ValueCategory = prvalue(load) -# 5| 2: return ... -# 7| void Vacuous(int) +# 5| 2: [ReturnStmt]: return ... +# 7| [TopLevelFunction]: void Vacuous(int) # 7| params: -# 7| 0: i -# 7| Type = int -# 7| body: { ... } -# 10| 0: ExprStmt -# 10| 0: call to CallDestructor -# 10| Type = void +# 7| 0: [Parameter]: i +# 7| Type = [IntType]: int +# 7| body: [Block]: { ... } +# 10| 0: [ExprStmt]: ExprStmt +# 10| 0: [FunctionCall]: call to CallDestructor +# 10| Type = [VoidType]: void # 10| ValueCategory = prvalue -# 10| 0: i -# 10| Type = int +# 10| 0: [VariableAccess]: i +# 10| Type = [IntType]: int # 10| ValueCategory = prvalue(load) -# 10| 1: & ... -# 10| Type = int * +# 10| 1: [AddressOfExpr]: & ... +# 10| Type = [IntPointerType]: int * # 10| ValueCategory = prvalue -# 10| 0: i -# 10| Type = int +# 10| 0: [VariableAccess]: i +# 10| Type = [IntType]: int # 10| ValueCategory = lvalue -# 11| 1: return ... +# 11| 1: [ReturnStmt]: return ... Varargs.c: -# 8| void VarArgs(char const*) +# 8| [TopLevelFunction]: void VarArgs(char const*) # 8| params: -# 8| 0: text -# 8| Type = const char * -# 8| body: { ... } -# 9| 0: declaration -# 9| 0: definition of args -# 9| Type = va_list -# 10| 1: ExprStmt -# 10| 0: __builtin_va_start -# 10| Type = void +# 8| 0: [Parameter]: text +# 8| Type = [PointerType]: const char * +# 8| body: [Block]: { ... } +# 9| 0: [DeclStmt]: declaration +# 9| 0: [VariableDeclarationEntry]: definition of args +# 9| Type = [TypedefType]: va_list +# 10| 1: [ExprStmt]: ExprStmt +# 10| 0: [BuiltInVarArgsStart]: __builtin_va_start +# 10| Type = [VoidType]: void # 10| ValueCategory = prvalue -# 10| 0: array to pointer conversion -# 10| Type = __va_list_tag * +# 10| 0: [ArrayToPointerConversion]: array to pointer conversion +# 10| Type = [PointerType]: __va_list_tag * # 10| ValueCategory = prvalue -# 10| expr: args -# 10| Type = va_list +# 10| expr: [VariableAccess]: args +# 10| Type = [TypedefType]: va_list # 10| ValueCategory = lvalue -# 10| 1: text -# 10| Type = const char * +# 10| 1: [VariableAccess]: text +# 10| Type = [PointerType]: const char * # 10| ValueCategory = lvalue -# 11| 2: ExprStmt -# 11| 0: __builtin_va_end -# 11| Type = void +# 11| 2: [ExprStmt]: ExprStmt +# 11| 0: [BuiltInVarArgsEnd]: __builtin_va_end +# 11| Type = [VoidType]: void # 11| ValueCategory = prvalue -# 11| 0: array to pointer conversion -# 11| Type = __va_list_tag * +# 11| 0: [ArrayToPointerConversion]: array to pointer conversion +# 11| Type = [PointerType]: __va_list_tag * # 11| ValueCategory = prvalue -# 11| expr: args -# 11| Type = va_list +# 11| expr: [VariableAccess]: args +# 11| Type = [TypedefType]: va_list # 11| ValueCategory = lvalue -# 12| 3: return ... +# 12| 3: [ReturnStmt]: return ... diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index fb90a724eba..76f62d77869 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -1,7830 +1,7619 @@ -#-----| __va_list_tag& __va_list_tag::operator=(__va_list_tag const&) +#-----| [CopyAssignmentOperator]: __va_list_tag& __va_list_tag::operator=(__va_list_tag const&) #-----| params: -#-----| 0: p#0 -#-----| Type = const __va_list_tag & -#-----| __va_list_tag& __va_list_tag::operator=(__va_list_tag&&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const __va_list_tag & +#-----| [MoveAssignmentOperator]: __va_list_tag& __va_list_tag::operator=(__va_list_tag&&) #-----| params: -#-----| 0: p#0 -#-----| Type = __va_list_tag && -#-----| void operator delete(void*, unsigned long) +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: __va_list_tag && +#-----| [TopLevelFunction]: void operator delete(void*, unsigned long) #-----| params: -#-----| 0: p#0 -#-----| Type = void * -#-----| 1: p#1 -#-----| Type = unsigned long -#-----| void operator delete(void*, unsigned long, std::align_val_t) +#-----| 0: [Parameter]: p#0 +#-----| Type = [VoidPointerType]: void * +#-----| 1: [Parameter]: p#1 +#-----| Type = [LongType]: unsigned long +#-----| [TopLevelFunction]: void operator delete[](void*, unsigned long) #-----| params: -#-----| 0: p#0 -#-----| Type = void * -#-----| 1: p#1 -#-----| Type = unsigned long -#-----| 2: p#2 -#-----| Type = align_val_t -#-----| void operator delete[](void*, unsigned long) +#-----| 0: [Parameter]: p#0 +#-----| Type = [VoidPointerType]: void * +#-----| 1: [Parameter]: p#1 +#-----| Type = [LongType]: unsigned long +#-----| [TopLevelFunction]: void* operator new(unsigned long) #-----| params: -#-----| 0: p#0 -#-----| Type = void * -#-----| 1: p#1 -#-----| Type = unsigned long -#-----| void operator delete[](void*, unsigned long, std::align_val_t) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LongType]: unsigned long +#-----| [TopLevelFunction]: void* operator new(unsigned long, std::align_val_t) #-----| params: -#-----| 0: p#0 -#-----| Type = void * -#-----| 1: p#1 -#-----| Type = unsigned long -#-----| 2: p#2 -#-----| Type = align_val_t -#-----| void* operator new(unsigned long) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LongType]: unsigned long +#-----| 1: [Parameter]: p#1 +#-----| Type = [ScopedEnum]: align_val_t +#-----| [TopLevelFunction]: void* operator new[](unsigned long) #-----| params: -#-----| 0: p#0 -#-----| Type = unsigned long -#-----| void* operator new(unsigned long, std::align_val_t) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LongType]: unsigned long +#-----| [TopLevelFunction]: void* operator new[](unsigned long, std::align_val_t) #-----| params: -#-----| 0: p#0 -#-----| Type = unsigned long -#-----| 1: p#1 -#-----| Type = align_val_t -#-----| void* operator new[](unsigned long) -#-----| params: -#-----| 0: p#0 -#-----| Type = unsigned long -#-----| void* operator new[](unsigned long, std::align_val_t) -#-----| params: -#-----| 0: p#0 -#-----| Type = unsigned long -#-----| 1: p#1 -#-----| Type = align_val_t +#-----| 0: [Parameter]: p#0 +#-----| Type = [LongType]: unsigned long +#-----| 1: [Parameter]: p#1 +#-----| Type = [ScopedEnum]: align_val_t bad_asts.cpp: -# 5| Bad::S& Bad::S::operator=(Bad::S const&) +# 5| [CopyAssignmentOperator]: Bad::S& Bad::S::operator=(Bad::S const&) # 5| params: -#-----| 0: p#0 -#-----| Type = const S & -# 5| Bad::S& Bad::S::operator=(Bad::S&&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const S & +# 5| [MoveAssignmentOperator]: Bad::S& Bad::S::operator=(Bad::S&&) # 5| params: -#-----| 0: p#0 -#-----| Type = S && -# 9| int Bad::S::MemberFunction(int) +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: S && +# 9| [MemberFunction]: int Bad::S::MemberFunction(int) # 9| params: -# 9| 0: y -# 9| Type = int -# 9| body: { ... } -# 10| 0: return ... -# 10| 0: ... + ... -# 10| Type = int +# 9| 0: [Parameter]: y +# 9| Type = [IntType]: int +# 9| body: [Block]: { ... } +# 10| 0: [ReturnStmt]: return ... +# 10| 0: [AddExpr]: ... + ... +# 10| Type = [IntType]: int # 10| ValueCategory = prvalue -# 10| 0: ... + ... -# 10| Type = int +# 10| 0: [AddExpr]: ... + ... +# 10| Type = [IntType]: int # 10| ValueCategory = prvalue -# 10| 0: Unknown literal -# 10| Type = int +# 10| 0: [Literal]: Unknown literal +# 10| Type = [IntType]: int # 10| ValueCategory = prvalue -# 10| 1: x -# 10| Type = int +# 10| 1: [FieldAccess]: x +# 10| Type = [IntType]: int # 10| ValueCategory = prvalue(load) -#-----| -1: this -#-----| Type = S * +#-----| -1: [ThisExpr]: this +#-----| Type = [PointerType]: S * #-----| ValueCategory = prvalue(load) -# 10| 1: y -# 10| Type = int +# 10| 1: [VariableAccess]: y +# 10| Type = [IntType]: int # 10| ValueCategory = prvalue(load) -# 9| int MemberFunction(int) +# 9| [TopLevelFunction]: int MemberFunction(int) # 9| params: -# 9| 0: y -# 9| Type = int -# 9| body: { ... } -# 10| 0: return ... -# 10| 0: ... + ... -# 10| Type = int +# 9| 0: [Parameter]: y +# 9| Type = [IntType]: int +# 9| body: [Block]: { ... } +# 10| 0: [ReturnStmt]: return ... +# 10| 0: [AddExpr]: ... + ... +# 10| Type = [IntType]: int # 10| ValueCategory = prvalue -# 10| 0: ... + ... -# 10| Type = int +# 10| 0: [AddExpr]: ... + ... +# 10| Type = [IntType]: int # 10| ValueCategory = prvalue -# 10| 0: 6 -# 10| Type = int -# 10| Value = 6 +# 10| 0: [Literal]: 6 +# 10| Type = [IntType]: int +# 10| Value = [Literal]: 6 # 10| ValueCategory = prvalue -# 10| 1: x -# 10| Type = int +# 10| 1: [FieldAccess]: x +# 10| Type = [IntType]: int # 10| ValueCategory = prvalue(load) -#-----| -1: this -#-----| Type = S * +#-----| -1: [ThisExpr]: this +#-----| Type = [PointerType]: S * #-----| ValueCategory = prvalue(load) -# 10| 1: y -# 10| Type = int +# 10| 1: [VariableAccess]: y +# 10| Type = [IntType]: int # 10| ValueCategory = prvalue(load) -# 14| void Bad::CallBadMemberFunction() +# 14| [TopLevelFunction]: void Bad::CallBadMemberFunction() # 14| params: -# 14| body: { ... } -# 15| 0: declaration -# 15| 0: definition of s -# 15| Type = S -# 15| init: initializer for s -# 15| expr: {...} -# 15| Type = S +# 14| body: [Block]: { ... } +# 15| 0: [DeclStmt]: declaration +# 15| 0: [VariableDeclarationEntry]: definition of s +# 15| Type = [Struct]: S +# 15| init: [Initializer]: initializer for s +# 15| expr: [ClassAggregateLiteral]: {...} +# 15| Type = [Struct]: S # 15| ValueCategory = prvalue -# 16| 1: ExprStmt -# 16| 0: call to MemberFunction -# 16| Type = int +# 16| 1: [ExprStmt]: ExprStmt +# 16| 0: [FunctionCall]: call to MemberFunction +# 16| Type = [IntType]: int # 16| ValueCategory = prvalue -# 16| -1: s -# 16| Type = S +# 16| -1: [VariableAccess]: s +# 16| Type = [Struct]: S # 16| ValueCategory = lvalue -# 16| 0: 1 -# 16| Type = int -# 16| Value = 1 +# 16| 0: [Literal]: 1 +# 16| Type = [IntType]: int +# 16| Value = [Literal]: 1 # 16| ValueCategory = prvalue -# 17| 2: return ... -# 19| Bad::Point& Bad::Point::operator=(Bad::Point const&) +# 17| 2: [ReturnStmt]: return ... +# 19| [CopyAssignmentOperator]: Bad::Point& Bad::Point::operator=(Bad::Point const&) # 19| params: -#-----| 0: p#0 -#-----| Type = const Point & -# 19| Bad::Point& Bad::Point::operator=(Bad::Point&&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const Point & +# 19| [MoveAssignmentOperator]: Bad::Point& Bad::Point::operator=(Bad::Point&&) # 19| params: -#-----| 0: p#0 -#-----| Type = Point && -# 19| void Bad::Point::Point(Bad::Point const&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: Point && +# 19| [CopyConstructor]: void Bad::Point::Point(Bad::Point const&) # 19| params: -#-----| 0: p#0 -#-----| Type = const Point & +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const Point & # 19| initializations: -# 19| 0: constructor init of field x -# 19| Type = int +# 19| 0: [ConstructorFieldInit]: constructor init of field x +# 19| Type = [IntType]: int # 19| ValueCategory = prvalue -# 19| 0: Unknown literal -# 19| Type = int +# 19| 0: [Literal]: Unknown literal +# 19| Type = [IntType]: int # 19| ValueCategory = prvalue -# 19| 1: constructor init of field y -# 19| Type = int +# 19| 1: [ConstructorFieldInit]: constructor init of field y +# 19| Type = [IntType]: int # 19| ValueCategory = prvalue -# 19| 0: Unknown literal -# 19| Type = int +# 19| 0: [Literal]: Unknown literal +# 19| Type = [IntType]: int # 19| ValueCategory = prvalue -# 19| body: { ... } -# 19| 0: return ... -# 19| void Bad::Point::Point(Bad::Point&&) +# 19| body: [Block]: { ... } +# 19| 0: [ReturnStmt]: return ... +# 19| [MoveConstructor]: void Bad::Point::Point(Bad::Point&&) # 19| params: -#-----| 0: p#0 -#-----| Type = Point && -# 22| void Bad::Point::Point() +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: Point && +# 22| [Constructor]: void Bad::Point::Point() # 22| params: # 22| initializations: -# 22| body: { ... } -# 23| 0: return ... -# 26| void Bad::CallCopyConstructor(Bad::Point const&) +# 22| body: [Block]: { ... } +# 23| 0: [ReturnStmt]: return ... +# 26| [TopLevelFunction]: void Bad::CallCopyConstructor(Bad::Point const&) # 26| params: -# 26| 0: a -# 26| Type = const Point & -# 26| body: { ... } -# 27| 0: declaration -# 27| 0: definition of b -# 27| Type = Point -# 27| init: initializer for b -# 27| expr: (Point)... +# 26| 0: [Parameter]: a +# 26| Type = [LValueReferenceType]: const Point & +# 26| body: [Block]: { ... } +# 27| 0: [DeclStmt]: declaration +# 27| 0: [VariableDeclarationEntry]: definition of b +# 27| Type = [Struct]: Point +# 27| init: [Initializer]: initializer for b +# 27| expr: [GlvalueConversion]: (Point)... # 27| Conversion = glvalue conversion -# 27| Type = Point +# 27| Type = [Struct]: Point # 27| ValueCategory = prvalue(load) -# 27| expr: (reference dereference) -# 27| Type = const Point +# 27| expr: [ReferenceDereferenceExpr]: (reference dereference) +# 27| Type = [SpecifiedType]: const Point # 27| ValueCategory = lvalue -# 27| expr: a -# 27| Type = const Point & +# 27| expr: [VariableAccess]: a +# 27| Type = [LValueReferenceType]: const Point & # 27| ValueCategory = prvalue(load) -# 28| 1: return ... -# 30| void Bad::errorExpr() -# 30| params: -# 30| body: { ... } -# 31| 0: declaration -# 31| 0: definition of intref -# 31| Type = int & -# 31| init: initializer for intref -# 31| expr: -# 31| Type = error -# 31| ValueCategory = prvalue -# 32| 1: declaration -# 32| 0: definition of x -# 32| Type = int -# 32| init: initializer for x -# 32| expr: -# 32| Type = error -# 32| ValueCategory = prvalue -# 33| 2: ExprStmt -# 33| 0: ... = ... -# 33| Type = int -# 33| ValueCategory = lvalue -# 33| 0: x -# 33| Type = int -# 33| ValueCategory = lvalue -#-----| 1: -#-----| Type = error -#-----| ValueCategory = prvalue(load) -# 34| 3: return ... -clang.cpp: -# 5| int* globalIntAddress() -# 5| params: -# 5| body: { ... } -# 6| 0: return ... -# 6| 0: __builtin_addressof ... -# 6| Type = int * -# 6| ValueCategory = prvalue -# 6| 0: globalInt -# 6| Type = int -# 6| ValueCategory = lvalue +# 28| 1: [ReturnStmt]: return ... ir.cpp: -# 1| void Constants() +# 1| [TopLevelFunction]: void Constants() # 1| params: -# 1| body: { ... } -# 2| 0: declaration -# 2| 0: definition of c_i -# 2| Type = char -# 2| init: initializer for c_i -# 2| expr: (char)... +# 1| body: [Block]: { ... } +# 2| 0: [DeclStmt]: declaration +# 2| 0: [VariableDeclarationEntry]: definition of c_i +# 2| Type = [PlainCharType]: char +# 2| init: [Initializer]: initializer for c_i +# 2| expr: [IntegralConversion]: (char)... # 2| Conversion = integral conversion -# 2| Type = char -# 2| Value = 1 +# 2| Type = [PlainCharType]: char +# 2| Value = [IntegralConversion]: 1 # 2| ValueCategory = prvalue -# 2| expr: 1 -# 2| Type = int -# 2| Value = 1 +# 2| expr: [Literal]: 1 +# 2| Type = [IntType]: int +# 2| Value = [Literal]: 1 # 2| ValueCategory = prvalue -# 3| 1: declaration -# 3| 0: definition of c_c -# 3| Type = char -# 3| init: initializer for c_c -# 3| expr: 65 -# 3| Type = char -# 3| Value = 65 +# 3| 1: [DeclStmt]: declaration +# 3| 0: [VariableDeclarationEntry]: definition of c_c +# 3| Type = [PlainCharType]: char +# 3| init: [Initializer]: initializer for c_c +# 3| expr: [CharLiteral]: 65 +# 3| Type = [PlainCharType]: char +# 3| Value = [CharLiteral]: 65 # 3| ValueCategory = prvalue -# 5| 2: declaration -# 5| 0: definition of sc_i -# 5| Type = signed char -# 5| init: initializer for sc_i -# 5| expr: (signed char)... +# 5| 2: [DeclStmt]: declaration +# 5| 0: [VariableDeclarationEntry]: definition of sc_i +# 5| Type = [SignedCharType]: signed char +# 5| init: [Initializer]: initializer for sc_i +# 5| expr: [IntegralConversion]: (signed char)... # 5| Conversion = integral conversion -# 5| Type = signed char -# 5| Value = -1 +# 5| Type = [SignedCharType]: signed char +# 5| Value = [IntegralConversion]: -1 # 5| ValueCategory = prvalue -# 5| expr: - ... -# 5| Type = int -# 5| Value = -1 +# 5| expr: [UnaryMinusExpr]: - ... +# 5| Type = [IntType]: int +# 5| Value = [UnaryMinusExpr]: -1 # 5| ValueCategory = prvalue -# 5| 0: 1 -# 5| Type = int -# 5| Value = 1 +# 5| 0: [Literal]: 1 +# 5| Type = [IntType]: int +# 5| Value = [Literal]: 1 # 5| ValueCategory = prvalue -# 6| 3: declaration -# 6| 0: definition of sc_c -# 6| Type = signed char -# 6| init: initializer for sc_c -# 6| expr: (signed char)... +# 6| 3: [DeclStmt]: declaration +# 6| 0: [VariableDeclarationEntry]: definition of sc_c +# 6| Type = [SignedCharType]: signed char +# 6| init: [Initializer]: initializer for sc_c +# 6| expr: [IntegralConversion]: (signed char)... # 6| Conversion = integral conversion -# 6| Type = signed char -# 6| Value = 65 +# 6| Type = [SignedCharType]: signed char +# 6| Value = [IntegralConversion]: 65 # 6| ValueCategory = prvalue -# 6| expr: 65 -# 6| Type = char -# 6| Value = 65 +# 6| expr: [CharLiteral]: 65 +# 6| Type = [PlainCharType]: char +# 6| Value = [CharLiteral]: 65 # 6| ValueCategory = prvalue -# 8| 4: declaration -# 8| 0: definition of uc_i -# 8| Type = unsigned char -# 8| init: initializer for uc_i -# 8| expr: (unsigned char)... +# 8| 4: [DeclStmt]: declaration +# 8| 0: [VariableDeclarationEntry]: definition of uc_i +# 8| Type = [UnsignedCharType]: unsigned char +# 8| init: [Initializer]: initializer for uc_i +# 8| expr: [IntegralConversion]: (unsigned char)... # 8| Conversion = integral conversion -# 8| Type = unsigned char -# 8| Value = 5 +# 8| Type = [UnsignedCharType]: unsigned char +# 8| Value = [IntegralConversion]: 5 # 8| ValueCategory = prvalue -# 8| expr: 5 -# 8| Type = int -# 8| Value = 5 +# 8| expr: [Literal]: 5 +# 8| Type = [IntType]: int +# 8| Value = [Literal]: 5 # 8| ValueCategory = prvalue -# 9| 5: declaration -# 9| 0: definition of uc_c -# 9| Type = unsigned char -# 9| init: initializer for uc_c -# 9| expr: (unsigned char)... +# 9| 5: [DeclStmt]: declaration +# 9| 0: [VariableDeclarationEntry]: definition of uc_c +# 9| Type = [UnsignedCharType]: unsigned char +# 9| init: [Initializer]: initializer for uc_c +# 9| expr: [IntegralConversion]: (unsigned char)... # 9| Conversion = integral conversion -# 9| Type = unsigned char -# 9| Value = 65 +# 9| Type = [UnsignedCharType]: unsigned char +# 9| Value = [IntegralConversion]: 65 # 9| ValueCategory = prvalue -# 9| expr: 65 -# 9| Type = char -# 9| Value = 65 +# 9| expr: [CharLiteral]: 65 +# 9| Type = [PlainCharType]: char +# 9| Value = [CharLiteral]: 65 # 9| ValueCategory = prvalue -# 11| 6: declaration -# 11| 0: definition of s -# 11| Type = short -# 11| init: initializer for s -# 11| expr: (short)... +# 11| 6: [DeclStmt]: declaration +# 11| 0: [VariableDeclarationEntry]: definition of s +# 11| Type = [ShortType]: short +# 11| init: [Initializer]: initializer for s +# 11| expr: [IntegralConversion]: (short)... # 11| Conversion = integral conversion -# 11| Type = short -# 11| Value = 5 +# 11| Type = [ShortType]: short +# 11| Value = [IntegralConversion]: 5 # 11| ValueCategory = prvalue -# 11| expr: 5 -# 11| Type = int -# 11| Value = 5 +# 11| expr: [Literal]: 5 +# 11| Type = [IntType]: int +# 11| Value = [Literal]: 5 # 11| ValueCategory = prvalue -# 12| 7: declaration -# 12| 0: definition of us -# 12| Type = unsigned short -# 12| init: initializer for us -# 12| expr: (unsigned short)... +# 12| 7: [DeclStmt]: declaration +# 12| 0: [VariableDeclarationEntry]: definition of us +# 12| Type = [ShortType]: unsigned short +# 12| init: [Initializer]: initializer for us +# 12| expr: [IntegralConversion]: (unsigned short)... # 12| Conversion = integral conversion -# 12| Type = unsigned short -# 12| Value = 5 +# 12| Type = [ShortType]: unsigned short +# 12| Value = [IntegralConversion]: 5 # 12| ValueCategory = prvalue -# 12| expr: 5 -# 12| Type = int -# 12| Value = 5 +# 12| expr: [Literal]: 5 +# 12| Type = [IntType]: int +# 12| Value = [Literal]: 5 # 12| ValueCategory = prvalue -# 14| 8: declaration -# 14| 0: definition of i -# 14| Type = int -# 14| init: initializer for i -# 14| expr: 5 -# 14| Type = int -# 14| Value = 5 +# 14| 8: [DeclStmt]: declaration +# 14| 0: [VariableDeclarationEntry]: definition of i +# 14| Type = [IntType]: int +# 14| init: [Initializer]: initializer for i +# 14| expr: [Literal]: 5 +# 14| Type = [IntType]: int +# 14| Value = [Literal]: 5 # 14| ValueCategory = prvalue -# 15| 9: declaration -# 15| 0: definition of ui -# 15| Type = unsigned int -# 15| init: initializer for ui -# 15| expr: (unsigned int)... +# 15| 9: [DeclStmt]: declaration +# 15| 0: [VariableDeclarationEntry]: definition of ui +# 15| Type = [IntType]: unsigned int +# 15| init: [Initializer]: initializer for ui +# 15| expr: [IntegralConversion]: (unsigned int)... # 15| Conversion = integral conversion -# 15| Type = unsigned int -# 15| Value = 5 +# 15| Type = [IntType]: unsigned int +# 15| Value = [IntegralConversion]: 5 # 15| ValueCategory = prvalue -# 15| expr: 5 -# 15| Type = int -# 15| Value = 5 +# 15| expr: [Literal]: 5 +# 15| Type = [IntType]: int +# 15| Value = [Literal]: 5 # 15| ValueCategory = prvalue -# 17| 10: declaration -# 17| 0: definition of l -# 17| Type = long -# 17| init: initializer for l -# 17| expr: (long)... +# 17| 10: [DeclStmt]: declaration +# 17| 0: [VariableDeclarationEntry]: definition of l +# 17| Type = [LongType]: long +# 17| init: [Initializer]: initializer for l +# 17| expr: [IntegralConversion]: (long)... # 17| Conversion = integral conversion -# 17| Type = long -# 17| Value = 5 +# 17| Type = [LongType]: long +# 17| Value = [IntegralConversion]: 5 # 17| ValueCategory = prvalue -# 17| expr: 5 -# 17| Type = int -# 17| Value = 5 +# 17| expr: [Literal]: 5 +# 17| Type = [IntType]: int +# 17| Value = [Literal]: 5 # 17| ValueCategory = prvalue -# 18| 11: declaration -# 18| 0: definition of ul -# 18| Type = unsigned long -# 18| init: initializer for ul -# 18| expr: (unsigned long)... +# 18| 11: [DeclStmt]: declaration +# 18| 0: [VariableDeclarationEntry]: definition of ul +# 18| Type = [LongType]: unsigned long +# 18| init: [Initializer]: initializer for ul +# 18| expr: [IntegralConversion]: (unsigned long)... # 18| Conversion = integral conversion -# 18| Type = unsigned long -# 18| Value = 5 +# 18| Type = [LongType]: unsigned long +# 18| Value = [IntegralConversion]: 5 # 18| ValueCategory = prvalue -# 18| expr: 5 -# 18| Type = int -# 18| Value = 5 +# 18| expr: [Literal]: 5 +# 18| Type = [IntType]: int +# 18| Value = [Literal]: 5 # 18| ValueCategory = prvalue -# 20| 12: declaration -# 20| 0: definition of ll_i -# 20| Type = long long -# 20| init: initializer for ll_i -# 20| expr: (long long)... +# 20| 12: [DeclStmt]: declaration +# 20| 0: [VariableDeclarationEntry]: definition of ll_i +# 20| Type = [LongLongType]: long long +# 20| init: [Initializer]: initializer for ll_i +# 20| expr: [IntegralConversion]: (long long)... # 20| Conversion = integral conversion -# 20| Type = long long -# 20| Value = 5 +# 20| Type = [LongLongType]: long long +# 20| Value = [IntegralConversion]: 5 # 20| ValueCategory = prvalue -# 20| expr: 5 -# 20| Type = int -# 20| Value = 5 +# 20| expr: [Literal]: 5 +# 20| Type = [IntType]: int +# 20| Value = [Literal]: 5 # 20| ValueCategory = prvalue -# 21| 13: declaration -# 21| 0: definition of ll_ll -# 21| Type = long long -# 21| init: initializer for ll_ll -# 21| expr: 5 -# 21| Type = long long -# 21| Value = 5 +# 21| 13: [DeclStmt]: declaration +# 21| 0: [VariableDeclarationEntry]: definition of ll_ll +# 21| Type = [LongLongType]: long long +# 21| init: [Initializer]: initializer for ll_ll +# 21| expr: [Literal]: 5 +# 21| Type = [LongLongType]: long long +# 21| Value = [Literal]: 5 # 21| ValueCategory = prvalue -# 22| 14: declaration -# 22| 0: definition of ull_i -# 22| Type = unsigned long long -# 22| init: initializer for ull_i -# 22| expr: (unsigned long long)... +# 22| 14: [DeclStmt]: declaration +# 22| 0: [VariableDeclarationEntry]: definition of ull_i +# 22| Type = [LongLongType]: unsigned long long +# 22| init: [Initializer]: initializer for ull_i +# 22| expr: [IntegralConversion]: (unsigned long long)... # 22| Conversion = integral conversion -# 22| Type = unsigned long long -# 22| Value = 5 +# 22| Type = [LongLongType]: unsigned long long +# 22| Value = [IntegralConversion]: 5 # 22| ValueCategory = prvalue -# 22| expr: 5 -# 22| Type = int -# 22| Value = 5 +# 22| expr: [Literal]: 5 +# 22| Type = [IntType]: int +# 22| Value = [Literal]: 5 # 22| ValueCategory = prvalue -# 23| 15: declaration -# 23| 0: definition of ull_ull -# 23| Type = unsigned long long -# 23| init: initializer for ull_ull -# 23| expr: 5 -# 23| Type = unsigned long long -# 23| Value = 5 +# 23| 15: [DeclStmt]: declaration +# 23| 0: [VariableDeclarationEntry]: definition of ull_ull +# 23| Type = [LongLongType]: unsigned long long +# 23| init: [Initializer]: initializer for ull_ull +# 23| expr: [Literal]: 5 +# 23| Type = [LongLongType]: unsigned long long +# 23| Value = [Literal]: 5 # 23| ValueCategory = prvalue -# 25| 16: declaration -# 25| 0: definition of b_t -# 25| Type = bool -# 25| init: initializer for b_t -# 25| expr: 1 -# 25| Type = bool -# 25| Value = 1 +# 25| 16: [DeclStmt]: declaration +# 25| 0: [VariableDeclarationEntry]: definition of b_t +# 25| Type = [BoolType]: bool +# 25| init: [Initializer]: initializer for b_t +# 25| expr: [Literal]: 1 +# 25| Type = [BoolType]: bool +# 25| Value = [Literal]: 1 # 25| ValueCategory = prvalue -# 26| 17: declaration -# 26| 0: definition of b_f -# 26| Type = bool -# 26| init: initializer for b_f -# 26| expr: 0 -# 26| Type = bool -# 26| Value = 0 +# 26| 17: [DeclStmt]: declaration +# 26| 0: [VariableDeclarationEntry]: definition of b_f +# 26| Type = [BoolType]: bool +# 26| init: [Initializer]: initializer for b_f +# 26| expr: [Zero]: 0 +# 26| Type = [BoolType]: bool +# 26| Value = [Zero]: 0 # 26| ValueCategory = prvalue -# 28| 18: declaration -# 28| 0: definition of wc_i -# 28| Type = wchar_t -# 28| init: initializer for wc_i -# 28| expr: (wchar_t)... +# 28| 18: [DeclStmt]: declaration +# 28| 0: [VariableDeclarationEntry]: definition of wc_i +# 28| Type = [Wchar_t]: wchar_t +# 28| init: [Initializer]: initializer for wc_i +# 28| expr: [IntegralConversion]: (wchar_t)... # 28| Conversion = integral conversion -# 28| Type = wchar_t -# 28| Value = 5 +# 28| Type = [Wchar_t]: wchar_t +# 28| Value = [IntegralConversion]: 5 # 28| ValueCategory = prvalue -# 28| expr: 5 -# 28| Type = int -# 28| Value = 5 +# 28| expr: [Literal]: 5 +# 28| Type = [IntType]: int +# 28| Value = [Literal]: 5 # 28| ValueCategory = prvalue -# 29| 19: declaration -# 29| 0: definition of wc_c -# 29| Type = wchar_t -# 29| init: initializer for wc_c -# 29| expr: 65 -# 29| Type = wchar_t -# 29| Value = 65 +# 29| 19: [DeclStmt]: declaration +# 29| 0: [VariableDeclarationEntry]: definition of wc_c +# 29| Type = [Wchar_t]: wchar_t +# 29| init: [Initializer]: initializer for wc_c +# 29| expr: [CharLiteral]: 65 +# 29| Type = [Wchar_t]: wchar_t +# 29| Value = [CharLiteral]: 65 # 29| ValueCategory = prvalue -# 31| 20: declaration -# 31| 0: definition of c16 -# 31| Type = char16_t -# 31| init: initializer for c16 -# 31| expr: 65 -# 31| Type = char16_t -# 31| Value = 65 +# 31| 20: [DeclStmt]: declaration +# 31| 0: [VariableDeclarationEntry]: definition of c16 +# 31| Type = [Char16Type]: char16_t +# 31| init: [Initializer]: initializer for c16 +# 31| expr: [Literal]: 65 +# 31| Type = [Char16Type]: char16_t +# 31| Value = [Literal]: 65 # 31| ValueCategory = prvalue -# 32| 21: declaration -# 32| 0: definition of c32 -# 32| Type = char32_t -# 32| init: initializer for c32 -# 32| expr: 65 -# 32| Type = char32_t -# 32| Value = 65 +# 32| 21: [DeclStmt]: declaration +# 32| 0: [VariableDeclarationEntry]: definition of c32 +# 32| Type = [Char32Type]: char32_t +# 32| init: [Initializer]: initializer for c32 +# 32| expr: [Literal]: 65 +# 32| Type = [Char32Type]: char32_t +# 32| Value = [Literal]: 65 # 32| ValueCategory = prvalue -# 34| 22: declaration -# 34| 0: definition of f_i -# 34| Type = float -# 34| init: initializer for f_i -# 34| expr: (float)... +# 34| 22: [DeclStmt]: declaration +# 34| 0: [VariableDeclarationEntry]: definition of f_i +# 34| Type = [FloatType]: float +# 34| init: [Initializer]: initializer for f_i +# 34| expr: [IntegralToFloatingPointConversion]: (float)... # 34| Conversion = integral to floating point conversion -# 34| Type = float -# 34| Value = 1.0 +# 34| Type = [FloatType]: float +# 34| Value = [IntegralToFloatingPointConversion]: 1.0 # 34| ValueCategory = prvalue -# 34| expr: 1 -# 34| Type = int -# 34| Value = 1 +# 34| expr: [Literal]: 1 +# 34| Type = [IntType]: int +# 34| Value = [Literal]: 1 # 34| ValueCategory = prvalue -# 35| 23: declaration -# 35| 0: definition of f_f -# 35| Type = float -# 35| init: initializer for f_f -# 35| expr: 1.0 -# 35| Type = float -# 35| Value = 1.0 +# 35| 23: [DeclStmt]: declaration +# 35| 0: [VariableDeclarationEntry]: definition of f_f +# 35| Type = [FloatType]: float +# 35| init: [Initializer]: initializer for f_f +# 35| expr: [Literal]: 1.0 +# 35| Type = [FloatType]: float +# 35| Value = [Literal]: 1.0 # 35| ValueCategory = prvalue -# 36| 24: declaration -# 36| 0: definition of f_d -# 36| Type = float -# 36| init: initializer for f_d -# 36| expr: (float)... +# 36| 24: [DeclStmt]: declaration +# 36| 0: [VariableDeclarationEntry]: definition of f_d +# 36| Type = [FloatType]: float +# 36| init: [Initializer]: initializer for f_d +# 36| expr: [FloatingPointConversion]: (float)... # 36| Conversion = floating point conversion -# 36| Type = float -# 36| Value = 1.0 +# 36| Type = [FloatType]: float +# 36| Value = [FloatingPointConversion]: 1.0 # 36| ValueCategory = prvalue -# 36| expr: 1.0 -# 36| Type = double -# 36| Value = 1.0 +# 36| expr: [Literal]: 1.0 +# 36| Type = [DoubleType]: double +# 36| Value = [Literal]: 1.0 # 36| ValueCategory = prvalue -# 38| 25: declaration -# 38| 0: definition of d_i -# 38| Type = double -# 38| init: initializer for d_i -# 38| expr: (double)... +# 38| 25: [DeclStmt]: declaration +# 38| 0: [VariableDeclarationEntry]: definition of d_i +# 38| Type = [DoubleType]: double +# 38| init: [Initializer]: initializer for d_i +# 38| expr: [IntegralToFloatingPointConversion]: (double)... # 38| Conversion = integral to floating point conversion -# 38| Type = double -# 38| Value = 1.0 +# 38| Type = [DoubleType]: double +# 38| Value = [IntegralToFloatingPointConversion]: 1.0 # 38| ValueCategory = prvalue -# 38| expr: 1 -# 38| Type = int -# 38| Value = 1 +# 38| expr: [Literal]: 1 +# 38| Type = [IntType]: int +# 38| Value = [Literal]: 1 # 38| ValueCategory = prvalue -# 39| 26: declaration -# 39| 0: definition of d_f -# 39| Type = double -# 39| init: initializer for d_f -# 39| expr: (double)... +# 39| 26: [DeclStmt]: declaration +# 39| 0: [VariableDeclarationEntry]: definition of d_f +# 39| Type = [DoubleType]: double +# 39| init: [Initializer]: initializer for d_f +# 39| expr: [FloatingPointConversion]: (double)... # 39| Conversion = floating point conversion -# 39| Type = double -# 39| Value = 1.0 +# 39| Type = [DoubleType]: double +# 39| Value = [FloatingPointConversion]: 1.0 # 39| ValueCategory = prvalue -# 39| expr: 1.0 -# 39| Type = float -# 39| Value = 1.0 +# 39| expr: [Literal]: 1.0 +# 39| Type = [FloatType]: float +# 39| Value = [Literal]: 1.0 # 39| ValueCategory = prvalue -# 40| 27: declaration -# 40| 0: definition of d_d -# 40| Type = double -# 40| init: initializer for d_d -# 40| expr: 1.0 -# 40| Type = double -# 40| Value = 1.0 +# 40| 27: [DeclStmt]: declaration +# 40| 0: [VariableDeclarationEntry]: definition of d_d +# 40| Type = [DoubleType]: double +# 40| init: [Initializer]: initializer for d_d +# 40| expr: [Literal]: 1.0 +# 40| Type = [DoubleType]: double +# 40| Value = [Literal]: 1.0 # 40| ValueCategory = prvalue -# 41| 28: return ... -# 43| void Foo() +# 41| 28: [ReturnStmt]: return ... +# 43| [TopLevelFunction]: void Foo() # 43| params: -# 43| body: { ... } -# 44| 0: declaration -# 44| 0: definition of x -# 44| Type = int -# 44| init: initializer for x -# 44| expr: ... + ... -# 44| Type = int -# 44| Value = 17 +# 43| body: [Block]: { ... } +# 44| 0: [DeclStmt]: declaration +# 44| 0: [VariableDeclarationEntry]: definition of x +# 44| Type = [IntType]: int +# 44| init: [Initializer]: initializer for x +# 44| expr: [AddExpr]: ... + ... +# 44| Type = [IntType]: int +# 44| Value = [AddExpr]: 17 # 44| ValueCategory = prvalue -# 44| 0: 5 -# 44| Type = int -# 44| Value = 5 +# 44| 0: [Literal]: 5 +# 44| Type = [IntType]: int +# 44| Value = [Literal]: 5 # 44| ValueCategory = prvalue -# 44| 1: 12 -# 44| Type = int -# 44| Value = 12 +# 44| 1: [Literal]: 12 +# 44| Type = [IntType]: int +# 44| Value = [Literal]: 12 # 44| ValueCategory = prvalue -# 45| 1: declaration -# 45| 0: definition of y -# 45| Type = short -# 45| init: initializer for y -# 45| expr: (short)... +# 45| 1: [DeclStmt]: declaration +# 45| 0: [VariableDeclarationEntry]: definition of y +# 45| Type = [ShortType]: short +# 45| init: [Initializer]: initializer for y +# 45| expr: [IntegralConversion]: (short)... # 45| Conversion = integral conversion -# 45| Type = short -# 45| Value = 7 +# 45| Type = [ShortType]: short +# 45| Value = [IntegralConversion]: 7 # 45| ValueCategory = prvalue -# 45| expr: 7 -# 45| Type = int -# 45| Value = 7 +# 45| expr: [Literal]: 7 +# 45| Type = [IntType]: int +# 45| Value = [Literal]: 7 # 45| ValueCategory = prvalue -# 46| 2: ExprStmt -# 46| 0: ... = ... -# 46| Type = short +# 46| 2: [ExprStmt]: ExprStmt +# 46| 0: [AssignExpr]: ... = ... +# 46| Type = [ShortType]: short # 46| ValueCategory = lvalue -# 46| 0: y -# 46| Type = short +# 46| 0: [VariableAccess]: y +# 46| Type = [ShortType]: short # 46| ValueCategory = lvalue -# 46| 1: (short)... +# 46| 1: [IntegralConversion]: (short)... # 46| Conversion = integral conversion -# 46| Type = short +# 46| Type = [ShortType]: short # 46| ValueCategory = prvalue -# 46| expr: ... + ... -# 46| Type = int +# 46| expr: [AddExpr]: ... + ... +# 46| Type = [IntType]: int # 46| ValueCategory = prvalue -# 46| 0: x -# 46| Type = int +# 46| 0: [VariableAccess]: x +# 46| Type = [IntType]: int # 46| ValueCategory = prvalue(load) -# 46| 1: (int)... +# 46| 1: [IntegralConversion]: (int)... # 46| Conversion = integral conversion -# 46| Type = int +# 46| Type = [IntType]: int # 46| ValueCategory = prvalue -# 46| expr: y -# 46| Type = short +# 46| expr: [VariableAccess]: y +# 46| Type = [ShortType]: short # 46| ValueCategory = prvalue(load) -# 47| 3: ExprStmt -# 47| 0: ... = ... -# 47| Type = int +# 47| 3: [ExprStmt]: ExprStmt +# 47| 0: [AssignExpr]: ... = ... +# 47| Type = [IntType]: int # 47| ValueCategory = lvalue -# 47| 0: x -# 47| Type = int +# 47| 0: [VariableAccess]: x +# 47| Type = [IntType]: int # 47| ValueCategory = lvalue -# 47| 1: ... * ... -# 47| Type = int +# 47| 1: [MulExpr]: ... * ... +# 47| Type = [IntType]: int # 47| ValueCategory = prvalue -# 47| 0: x -# 47| Type = int +# 47| 0: [VariableAccess]: x +# 47| Type = [IntType]: int # 47| ValueCategory = prvalue(load) -# 47| 1: (int)... +# 47| 1: [IntegralConversion]: (int)... # 47| Conversion = integral conversion -# 47| Type = int +# 47| Type = [IntType]: int # 47| ValueCategory = prvalue -# 47| expr: y -# 47| Type = short +# 47| expr: [VariableAccess]: y +# 47| Type = [ShortType]: short # 47| ValueCategory = prvalue(load) -# 48| 4: return ... -# 50| void IntegerOps(int, int) +# 48| 4: [ReturnStmt]: return ... +# 50| [TopLevelFunction]: void IntegerOps(int, int) # 50| params: -# 50| 0: x -# 50| Type = int -# 50| 1: y -# 50| Type = int -# 50| body: { ... } -# 51| 0: declaration -# 51| 0: definition of z -# 51| Type = int -# 53| 1: ExprStmt -# 53| 0: ... = ... -# 53| Type = int +# 50| 0: [Parameter]: x +# 50| Type = [IntType]: int +# 50| 1: [Parameter]: y +# 50| Type = [IntType]: int +# 50| body: [Block]: { ... } +# 51| 0: [DeclStmt]: declaration +# 51| 0: [VariableDeclarationEntry]: definition of z +# 51| Type = [IntType]: int +# 53| 1: [ExprStmt]: ExprStmt +# 53| 0: [AssignExpr]: ... = ... +# 53| Type = [IntType]: int # 53| ValueCategory = lvalue -# 53| 0: z -# 53| Type = int +# 53| 0: [VariableAccess]: z +# 53| Type = [IntType]: int # 53| ValueCategory = lvalue -# 53| 1: ... + ... -# 53| Type = int +# 53| 1: [AddExpr]: ... + ... +# 53| Type = [IntType]: int # 53| ValueCategory = prvalue -# 53| 0: x -# 53| Type = int +# 53| 0: [VariableAccess]: x +# 53| Type = [IntType]: int # 53| ValueCategory = prvalue(load) -# 53| 1: y -# 53| Type = int +# 53| 1: [VariableAccess]: y +# 53| Type = [IntType]: int # 53| ValueCategory = prvalue(load) -# 54| 2: ExprStmt -# 54| 0: ... = ... -# 54| Type = int +# 54| 2: [ExprStmt]: ExprStmt +# 54| 0: [AssignExpr]: ... = ... +# 54| Type = [IntType]: int # 54| ValueCategory = lvalue -# 54| 0: z -# 54| Type = int +# 54| 0: [VariableAccess]: z +# 54| Type = [IntType]: int # 54| ValueCategory = lvalue -# 54| 1: ... - ... -# 54| Type = int +# 54| 1: [SubExpr]: ... - ... +# 54| Type = [IntType]: int # 54| ValueCategory = prvalue -# 54| 0: x -# 54| Type = int +# 54| 0: [VariableAccess]: x +# 54| Type = [IntType]: int # 54| ValueCategory = prvalue(load) -# 54| 1: y -# 54| Type = int +# 54| 1: [VariableAccess]: y +# 54| Type = [IntType]: int # 54| ValueCategory = prvalue(load) -# 55| 3: ExprStmt -# 55| 0: ... = ... -# 55| Type = int +# 55| 3: [ExprStmt]: ExprStmt +# 55| 0: [AssignExpr]: ... = ... +# 55| Type = [IntType]: int # 55| ValueCategory = lvalue -# 55| 0: z -# 55| Type = int +# 55| 0: [VariableAccess]: z +# 55| Type = [IntType]: int # 55| ValueCategory = lvalue -# 55| 1: ... * ... -# 55| Type = int +# 55| 1: [MulExpr]: ... * ... +# 55| Type = [IntType]: int # 55| ValueCategory = prvalue -# 55| 0: x -# 55| Type = int +# 55| 0: [VariableAccess]: x +# 55| Type = [IntType]: int # 55| ValueCategory = prvalue(load) -# 55| 1: y -# 55| Type = int +# 55| 1: [VariableAccess]: y +# 55| Type = [IntType]: int # 55| ValueCategory = prvalue(load) -# 56| 4: ExprStmt -# 56| 0: ... = ... -# 56| Type = int +# 56| 4: [ExprStmt]: ExprStmt +# 56| 0: [AssignExpr]: ... = ... +# 56| Type = [IntType]: int # 56| ValueCategory = lvalue -# 56| 0: z -# 56| Type = int +# 56| 0: [VariableAccess]: z +# 56| Type = [IntType]: int # 56| ValueCategory = lvalue -# 56| 1: ... / ... -# 56| Type = int +# 56| 1: [DivExpr]: ... / ... +# 56| Type = [IntType]: int # 56| ValueCategory = prvalue -# 56| 0: x -# 56| Type = int +# 56| 0: [VariableAccess]: x +# 56| Type = [IntType]: int # 56| ValueCategory = prvalue(load) -# 56| 1: y -# 56| Type = int +# 56| 1: [VariableAccess]: y +# 56| Type = [IntType]: int # 56| ValueCategory = prvalue(load) -# 57| 5: ExprStmt -# 57| 0: ... = ... -# 57| Type = int +# 57| 5: [ExprStmt]: ExprStmt +# 57| 0: [AssignExpr]: ... = ... +# 57| Type = [IntType]: int # 57| ValueCategory = lvalue -# 57| 0: z -# 57| Type = int +# 57| 0: [VariableAccess]: z +# 57| Type = [IntType]: int # 57| ValueCategory = lvalue -# 57| 1: ... % ... -# 57| Type = int +# 57| 1: [RemExpr]: ... % ... +# 57| Type = [IntType]: int # 57| ValueCategory = prvalue -# 57| 0: x -# 57| Type = int +# 57| 0: [VariableAccess]: x +# 57| Type = [IntType]: int # 57| ValueCategory = prvalue(load) -# 57| 1: y -# 57| Type = int +# 57| 1: [VariableAccess]: y +# 57| Type = [IntType]: int # 57| ValueCategory = prvalue(load) -# 59| 6: ExprStmt -# 59| 0: ... = ... -# 59| Type = int +# 59| 6: [ExprStmt]: ExprStmt +# 59| 0: [AssignExpr]: ... = ... +# 59| Type = [IntType]: int # 59| ValueCategory = lvalue -# 59| 0: z -# 59| Type = int +# 59| 0: [VariableAccess]: z +# 59| Type = [IntType]: int # 59| ValueCategory = lvalue -# 59| 1: ... & ... -# 59| Type = int +# 59| 1: [BitwiseAndExpr]: ... & ... +# 59| Type = [IntType]: int # 59| ValueCategory = prvalue -# 59| 0: x -# 59| Type = int +# 59| 0: [VariableAccess]: x +# 59| Type = [IntType]: int # 59| ValueCategory = prvalue(load) -# 59| 1: y -# 59| Type = int +# 59| 1: [VariableAccess]: y +# 59| Type = [IntType]: int # 59| ValueCategory = prvalue(load) -# 60| 7: ExprStmt -# 60| 0: ... = ... -# 60| Type = int +# 60| 7: [ExprStmt]: ExprStmt +# 60| 0: [AssignExpr]: ... = ... +# 60| Type = [IntType]: int # 60| ValueCategory = lvalue -# 60| 0: z -# 60| Type = int +# 60| 0: [VariableAccess]: z +# 60| Type = [IntType]: int # 60| ValueCategory = lvalue -# 60| 1: ... | ... -# 60| Type = int +# 60| 1: [BitwiseOrExpr]: ... | ... +# 60| Type = [IntType]: int # 60| ValueCategory = prvalue -# 60| 0: x -# 60| Type = int +# 60| 0: [VariableAccess]: x +# 60| Type = [IntType]: int # 60| ValueCategory = prvalue(load) -# 60| 1: y -# 60| Type = int +# 60| 1: [VariableAccess]: y +# 60| Type = [IntType]: int # 60| ValueCategory = prvalue(load) -# 61| 8: ExprStmt -# 61| 0: ... = ... -# 61| Type = int +# 61| 8: [ExprStmt]: ExprStmt +# 61| 0: [AssignExpr]: ... = ... +# 61| Type = [IntType]: int # 61| ValueCategory = lvalue -# 61| 0: z -# 61| Type = int +# 61| 0: [VariableAccess]: z +# 61| Type = [IntType]: int # 61| ValueCategory = lvalue -# 61| 1: ... ^ ... -# 61| Type = int +# 61| 1: [BitwiseXorExpr]: ... ^ ... +# 61| Type = [IntType]: int # 61| ValueCategory = prvalue -# 61| 0: x -# 61| Type = int +# 61| 0: [VariableAccess]: x +# 61| Type = [IntType]: int # 61| ValueCategory = prvalue(load) -# 61| 1: y -# 61| Type = int +# 61| 1: [VariableAccess]: y +# 61| Type = [IntType]: int # 61| ValueCategory = prvalue(load) -# 63| 9: ExprStmt -# 63| 0: ... = ... -# 63| Type = int +# 63| 9: [ExprStmt]: ExprStmt +# 63| 0: [AssignExpr]: ... = ... +# 63| Type = [IntType]: int # 63| ValueCategory = lvalue -# 63| 0: z -# 63| Type = int +# 63| 0: [VariableAccess]: z +# 63| Type = [IntType]: int # 63| ValueCategory = lvalue -# 63| 1: ... << ... -# 63| Type = int +# 63| 1: [LShiftExpr]: ... << ... +# 63| Type = [IntType]: int # 63| ValueCategory = prvalue -# 63| 0: x -# 63| Type = int +# 63| 0: [VariableAccess]: x +# 63| Type = [IntType]: int # 63| ValueCategory = prvalue(load) -# 63| 1: y -# 63| Type = int +# 63| 1: [VariableAccess]: y +# 63| Type = [IntType]: int # 63| ValueCategory = prvalue(load) -# 64| 10: ExprStmt -# 64| 0: ... = ... -# 64| Type = int +# 64| 10: [ExprStmt]: ExprStmt +# 64| 0: [AssignExpr]: ... = ... +# 64| Type = [IntType]: int # 64| ValueCategory = lvalue -# 64| 0: z -# 64| Type = int +# 64| 0: [VariableAccess]: z +# 64| Type = [IntType]: int # 64| ValueCategory = lvalue -# 64| 1: ... >> ... -# 64| Type = int +# 64| 1: [RShiftExpr]: ... >> ... +# 64| Type = [IntType]: int # 64| ValueCategory = prvalue -# 64| 0: x -# 64| Type = int +# 64| 0: [VariableAccess]: x +# 64| Type = [IntType]: int # 64| ValueCategory = prvalue(load) -# 64| 1: y -# 64| Type = int +# 64| 1: [VariableAccess]: y +# 64| Type = [IntType]: int # 64| ValueCategory = prvalue(load) -# 66| 11: ExprStmt -# 66| 0: ... = ... -# 66| Type = int +# 66| 11: [ExprStmt]: ExprStmt +# 66| 0: [AssignExpr]: ... = ... +# 66| Type = [IntType]: int # 66| ValueCategory = lvalue -# 66| 0: z -# 66| Type = int +# 66| 0: [VariableAccess]: z +# 66| Type = [IntType]: int # 66| ValueCategory = lvalue -# 66| 1: x -# 66| Type = int +# 66| 1: [VariableAccess]: x +# 66| Type = [IntType]: int # 66| ValueCategory = prvalue(load) -# 68| 12: ExprStmt -# 68| 0: ... += ... -# 68| Type = int +# 68| 12: [ExprStmt]: ExprStmt +# 68| 0: [AssignAddExpr]: ... += ... +# 68| Type = [IntType]: int # 68| ValueCategory = lvalue -# 68| 0: z -# 68| Type = int +# 68| 0: [VariableAccess]: z +# 68| Type = [IntType]: int # 68| ValueCategory = lvalue -# 68| 1: x -# 68| Type = int +# 68| 1: [VariableAccess]: x +# 68| Type = [IntType]: int # 68| ValueCategory = prvalue(load) -# 69| 13: ExprStmt -# 69| 0: ... -= ... -# 69| Type = int +# 69| 13: [ExprStmt]: ExprStmt +# 69| 0: [AssignSubExpr]: ... -= ... +# 69| Type = [IntType]: int # 69| ValueCategory = lvalue -# 69| 0: z -# 69| Type = int +# 69| 0: [VariableAccess]: z +# 69| Type = [IntType]: int # 69| ValueCategory = lvalue -# 69| 1: x -# 69| Type = int +# 69| 1: [VariableAccess]: x +# 69| Type = [IntType]: int # 69| ValueCategory = prvalue(load) -# 70| 14: ExprStmt -# 70| 0: ... *= ... -# 70| Type = int +# 70| 14: [ExprStmt]: ExprStmt +# 70| 0: [AssignMulExpr]: ... *= ... +# 70| Type = [IntType]: int # 70| ValueCategory = lvalue -# 70| 0: z -# 70| Type = int +# 70| 0: [VariableAccess]: z +# 70| Type = [IntType]: int # 70| ValueCategory = lvalue -# 70| 1: x -# 70| Type = int +# 70| 1: [VariableAccess]: x +# 70| Type = [IntType]: int # 70| ValueCategory = prvalue(load) -# 71| 15: ExprStmt -# 71| 0: ... /= ... -# 71| Type = int +# 71| 15: [ExprStmt]: ExprStmt +# 71| 0: [AssignDivExpr]: ... /= ... +# 71| Type = [IntType]: int # 71| ValueCategory = lvalue -# 71| 0: z -# 71| Type = int +# 71| 0: [VariableAccess]: z +# 71| Type = [IntType]: int # 71| ValueCategory = lvalue -# 71| 1: x -# 71| Type = int +# 71| 1: [VariableAccess]: x +# 71| Type = [IntType]: int # 71| ValueCategory = prvalue(load) -# 72| 16: ExprStmt -# 72| 0: ... %= ... -# 72| Type = int +# 72| 16: [ExprStmt]: ExprStmt +# 72| 0: [AssignRemExpr]: ... %= ... +# 72| Type = [IntType]: int # 72| ValueCategory = lvalue -# 72| 0: z -# 72| Type = int +# 72| 0: [VariableAccess]: z +# 72| Type = [IntType]: int # 72| ValueCategory = lvalue -# 72| 1: x -# 72| Type = int +# 72| 1: [VariableAccess]: x +# 72| Type = [IntType]: int # 72| ValueCategory = prvalue(load) -# 74| 17: ExprStmt -# 74| 0: ... &= ... -# 74| Type = int +# 74| 17: [ExprStmt]: ExprStmt +# 74| 0: [AssignAndExpr]: ... &= ... +# 74| Type = [IntType]: int # 74| ValueCategory = lvalue -# 74| 0: z -# 74| Type = int +# 74| 0: [VariableAccess]: z +# 74| Type = [IntType]: int # 74| ValueCategory = lvalue -# 74| 1: x -# 74| Type = int +# 74| 1: [VariableAccess]: x +# 74| Type = [IntType]: int # 74| ValueCategory = prvalue(load) -# 75| 18: ExprStmt -# 75| 0: ... |= ... -# 75| Type = int +# 75| 18: [ExprStmt]: ExprStmt +# 75| 0: [AssignOrExpr]: ... |= ... +# 75| Type = [IntType]: int # 75| ValueCategory = lvalue -# 75| 0: z -# 75| Type = int +# 75| 0: [VariableAccess]: z +# 75| Type = [IntType]: int # 75| ValueCategory = lvalue -# 75| 1: x -# 75| Type = int +# 75| 1: [VariableAccess]: x +# 75| Type = [IntType]: int # 75| ValueCategory = prvalue(load) -# 76| 19: ExprStmt -# 76| 0: ... ^= ... -# 76| Type = int +# 76| 19: [ExprStmt]: ExprStmt +# 76| 0: [AssignXorExpr]: ... ^= ... +# 76| Type = [IntType]: int # 76| ValueCategory = lvalue -# 76| 0: z -# 76| Type = int +# 76| 0: [VariableAccess]: z +# 76| Type = [IntType]: int # 76| ValueCategory = lvalue -# 76| 1: x -# 76| Type = int +# 76| 1: [VariableAccess]: x +# 76| Type = [IntType]: int # 76| ValueCategory = prvalue(load) -# 78| 20: ExprStmt -# 78| 0: ... <<= ... -# 78| Type = int +# 78| 20: [ExprStmt]: ExprStmt +# 78| 0: [AssignLShiftExpr]: ... <<= ... +# 78| Type = [IntType]: int # 78| ValueCategory = lvalue -# 78| 0: z -# 78| Type = int +# 78| 0: [VariableAccess]: z +# 78| Type = [IntType]: int # 78| ValueCategory = lvalue -# 78| 1: x -# 78| Type = int +# 78| 1: [VariableAccess]: x +# 78| Type = [IntType]: int # 78| ValueCategory = prvalue(load) -# 79| 21: ExprStmt -# 79| 0: ... >>= ... -# 79| Type = int +# 79| 21: [ExprStmt]: ExprStmt +# 79| 0: [AssignRShiftExpr]: ... >>= ... +# 79| Type = [IntType]: int # 79| ValueCategory = lvalue -# 79| 0: z -# 79| Type = int +# 79| 0: [VariableAccess]: z +# 79| Type = [IntType]: int # 79| ValueCategory = lvalue -# 79| 1: x -# 79| Type = int +# 79| 1: [VariableAccess]: x +# 79| Type = [IntType]: int # 79| ValueCategory = prvalue(load) -# 81| 22: ExprStmt -# 81| 0: ... = ... -# 81| Type = int +# 81| 22: [ExprStmt]: ExprStmt +# 81| 0: [AssignExpr]: ... = ... +# 81| Type = [IntType]: int # 81| ValueCategory = lvalue -# 81| 0: z -# 81| Type = int +# 81| 0: [VariableAccess]: z +# 81| Type = [IntType]: int # 81| ValueCategory = lvalue -# 81| 1: + ... -# 81| Type = int +# 81| 1: [UnaryPlusExpr]: + ... +# 81| Type = [IntType]: int # 81| ValueCategory = prvalue -# 81| 0: x -# 81| Type = int +# 81| 0: [VariableAccess]: x +# 81| Type = [IntType]: int # 81| ValueCategory = prvalue(load) -# 82| 23: ExprStmt -# 82| 0: ... = ... -# 82| Type = int +# 82| 23: [ExprStmt]: ExprStmt +# 82| 0: [AssignExpr]: ... = ... +# 82| Type = [IntType]: int # 82| ValueCategory = lvalue -# 82| 0: z -# 82| Type = int +# 82| 0: [VariableAccess]: z +# 82| Type = [IntType]: int # 82| ValueCategory = lvalue -# 82| 1: - ... -# 82| Type = int +# 82| 1: [UnaryMinusExpr]: - ... +# 82| Type = [IntType]: int # 82| ValueCategory = prvalue -# 82| 0: x -# 82| Type = int +# 82| 0: [VariableAccess]: x +# 82| Type = [IntType]: int # 82| ValueCategory = prvalue(load) -# 83| 24: ExprStmt -# 83| 0: ... = ... -# 83| Type = int +# 83| 24: [ExprStmt]: ExprStmt +# 83| 0: [AssignExpr]: ... = ... +# 83| Type = [IntType]: int # 83| ValueCategory = lvalue -# 83| 0: z -# 83| Type = int +# 83| 0: [VariableAccess]: z +# 83| Type = [IntType]: int # 83| ValueCategory = lvalue -# 83| 1: ~ ... -# 83| Type = int +# 83| 1: [ComplementExpr]: ~ ... +# 83| Type = [IntType]: int # 83| ValueCategory = prvalue -# 83| 0: x -# 83| Type = int +# 83| 0: [VariableAccess]: x +# 83| Type = [IntType]: int # 83| ValueCategory = prvalue(load) -# 84| 25: ExprStmt -# 84| 0: ... = ... -# 84| Type = int +# 84| 25: [ExprStmt]: ExprStmt +# 84| 0: [AssignExpr]: ... = ... +# 84| Type = [IntType]: int # 84| ValueCategory = lvalue -# 84| 0: z -# 84| Type = int +# 84| 0: [VariableAccess]: z +# 84| Type = [IntType]: int # 84| ValueCategory = lvalue -# 84| 1: (int)... +# 84| 1: [IntegralConversion]: (int)... # 84| Conversion = integral conversion -# 84| Type = int +# 84| Type = [IntType]: int # 84| ValueCategory = prvalue -# 84| expr: ! ... -# 84| Type = bool +# 84| expr: [NotExpr]: ! ... +# 84| Type = [BoolType]: bool # 84| ValueCategory = prvalue -# 84| 0: (bool)... +# 84| 0: [BoolConversion]: (bool)... # 84| Conversion = conversion to bool -# 84| Type = bool +# 84| Type = [BoolType]: bool # 84| ValueCategory = prvalue -# 84| expr: x -# 84| Type = int +# 84| expr: [VariableAccess]: x +# 84| Type = [IntType]: int # 84| ValueCategory = prvalue(load) -# 85| 26: return ... -# 87| void IntegerCompare(int, int) +# 85| 26: [ReturnStmt]: return ... +# 87| [TopLevelFunction]: void IntegerCompare(int, int) # 87| params: -# 87| 0: x -# 87| Type = int -# 87| 1: y -# 87| Type = int -# 87| body: { ... } -# 88| 0: declaration -# 88| 0: definition of b -# 88| Type = bool -# 90| 1: ExprStmt -# 90| 0: ... = ... -# 90| Type = bool +# 87| 0: [Parameter]: x +# 87| Type = [IntType]: int +# 87| 1: [Parameter]: y +# 87| Type = [IntType]: int +# 87| body: [Block]: { ... } +# 88| 0: [DeclStmt]: declaration +# 88| 0: [VariableDeclarationEntry]: definition of b +# 88| Type = [BoolType]: bool +# 90| 1: [ExprStmt]: ExprStmt +# 90| 0: [AssignExpr]: ... = ... +# 90| Type = [BoolType]: bool # 90| ValueCategory = lvalue -# 90| 0: b -# 90| Type = bool +# 90| 0: [VariableAccess]: b +# 90| Type = [BoolType]: bool # 90| ValueCategory = lvalue -# 90| 1: ... == ... -# 90| Type = bool +# 90| 1: [EQExpr]: ... == ... +# 90| Type = [BoolType]: bool # 90| ValueCategory = prvalue -# 90| 0: x -# 90| Type = int +# 90| 0: [VariableAccess]: x +# 90| Type = [IntType]: int # 90| ValueCategory = prvalue(load) -# 90| 1: y -# 90| Type = int +# 90| 1: [VariableAccess]: y +# 90| Type = [IntType]: int # 90| ValueCategory = prvalue(load) -# 91| 2: ExprStmt -# 91| 0: ... = ... -# 91| Type = bool +# 91| 2: [ExprStmt]: ExprStmt +# 91| 0: [AssignExpr]: ... = ... +# 91| Type = [BoolType]: bool # 91| ValueCategory = lvalue -# 91| 0: b -# 91| Type = bool +# 91| 0: [VariableAccess]: b +# 91| Type = [BoolType]: bool # 91| ValueCategory = lvalue -# 91| 1: ... != ... -# 91| Type = bool +# 91| 1: [NEExpr]: ... != ... +# 91| Type = [BoolType]: bool # 91| ValueCategory = prvalue -# 91| 0: x -# 91| Type = int +# 91| 0: [VariableAccess]: x +# 91| Type = [IntType]: int # 91| ValueCategory = prvalue(load) -# 91| 1: y -# 91| Type = int +# 91| 1: [VariableAccess]: y +# 91| Type = [IntType]: int # 91| ValueCategory = prvalue(load) -# 92| 3: ExprStmt -# 92| 0: ... = ... -# 92| Type = bool +# 92| 3: [ExprStmt]: ExprStmt +# 92| 0: [AssignExpr]: ... = ... +# 92| Type = [BoolType]: bool # 92| ValueCategory = lvalue -# 92| 0: b -# 92| Type = bool +# 92| 0: [VariableAccess]: b +# 92| Type = [BoolType]: bool # 92| ValueCategory = lvalue -# 92| 1: ... < ... -# 92| Type = bool +# 92| 1: [LTExpr]: ... < ... +# 92| Type = [BoolType]: bool # 92| ValueCategory = prvalue -# 92| 0: x -# 92| Type = int +# 92| 0: [VariableAccess]: x +# 92| Type = [IntType]: int # 92| ValueCategory = prvalue(load) -# 92| 1: y -# 92| Type = int +# 92| 1: [VariableAccess]: y +# 92| Type = [IntType]: int # 92| ValueCategory = prvalue(load) -# 93| 4: ExprStmt -# 93| 0: ... = ... -# 93| Type = bool +# 93| 4: [ExprStmt]: ExprStmt +# 93| 0: [AssignExpr]: ... = ... +# 93| Type = [BoolType]: bool # 93| ValueCategory = lvalue -# 93| 0: b -# 93| Type = bool +# 93| 0: [VariableAccess]: b +# 93| Type = [BoolType]: bool # 93| ValueCategory = lvalue -# 93| 1: ... > ... -# 93| Type = bool +# 93| 1: [GTExpr]: ... > ... +# 93| Type = [BoolType]: bool # 93| ValueCategory = prvalue -# 93| 0: x -# 93| Type = int +# 93| 0: [VariableAccess]: x +# 93| Type = [IntType]: int # 93| ValueCategory = prvalue(load) -# 93| 1: y -# 93| Type = int +# 93| 1: [VariableAccess]: y +# 93| Type = [IntType]: int # 93| ValueCategory = prvalue(load) -# 94| 5: ExprStmt -# 94| 0: ... = ... -# 94| Type = bool +# 94| 5: [ExprStmt]: ExprStmt +# 94| 0: [AssignExpr]: ... = ... +# 94| Type = [BoolType]: bool # 94| ValueCategory = lvalue -# 94| 0: b -# 94| Type = bool +# 94| 0: [VariableAccess]: b +# 94| Type = [BoolType]: bool # 94| ValueCategory = lvalue -# 94| 1: ... <= ... -# 94| Type = bool +# 94| 1: [LEExpr]: ... <= ... +# 94| Type = [BoolType]: bool # 94| ValueCategory = prvalue -# 94| 0: x -# 94| Type = int +# 94| 0: [VariableAccess]: x +# 94| Type = [IntType]: int # 94| ValueCategory = prvalue(load) -# 94| 1: y -# 94| Type = int +# 94| 1: [VariableAccess]: y +# 94| Type = [IntType]: int # 94| ValueCategory = prvalue(load) -# 95| 6: ExprStmt -# 95| 0: ... = ... -# 95| Type = bool +# 95| 6: [ExprStmt]: ExprStmt +# 95| 0: [AssignExpr]: ... = ... +# 95| Type = [BoolType]: bool # 95| ValueCategory = lvalue -# 95| 0: b -# 95| Type = bool +# 95| 0: [VariableAccess]: b +# 95| Type = [BoolType]: bool # 95| ValueCategory = lvalue -# 95| 1: ... >= ... -# 95| Type = bool +# 95| 1: [GEExpr]: ... >= ... +# 95| Type = [BoolType]: bool # 95| ValueCategory = prvalue -# 95| 0: x -# 95| Type = int +# 95| 0: [VariableAccess]: x +# 95| Type = [IntType]: int # 95| ValueCategory = prvalue(load) -# 95| 1: y -# 95| Type = int +# 95| 1: [VariableAccess]: y +# 95| Type = [IntType]: int # 95| ValueCategory = prvalue(load) -# 96| 7: return ... -# 98| void IntegerCrement(int) +# 96| 7: [ReturnStmt]: return ... +# 98| [TopLevelFunction]: void IntegerCrement(int) # 98| params: -# 98| 0: x -# 98| Type = int -# 98| body: { ... } -# 99| 0: declaration -# 99| 0: definition of y -# 99| Type = int -# 101| 1: ExprStmt -# 101| 0: ... = ... -# 101| Type = int +# 98| 0: [Parameter]: x +# 98| Type = [IntType]: int +# 98| body: [Block]: { ... } +# 99| 0: [DeclStmt]: declaration +# 99| 0: [VariableDeclarationEntry]: definition of y +# 99| Type = [IntType]: int +# 101| 1: [ExprStmt]: ExprStmt +# 101| 0: [AssignExpr]: ... = ... +# 101| Type = [IntType]: int # 101| ValueCategory = lvalue -# 101| 0: y -# 101| Type = int +# 101| 0: [VariableAccess]: y +# 101| Type = [IntType]: int # 101| ValueCategory = lvalue -# 101| 1: ++ ... -# 101| Type = int +# 101| 1: [PrefixIncrExpr]: ++ ... +# 101| Type = [IntType]: int # 101| ValueCategory = prvalue -# 101| 0: x -# 101| Type = int +# 101| 0: [VariableAccess]: x +# 101| Type = [IntType]: int # 101| ValueCategory = lvalue -# 102| 2: ExprStmt -# 102| 0: ... = ... -# 102| Type = int +# 102| 2: [ExprStmt]: ExprStmt +# 102| 0: [AssignExpr]: ... = ... +# 102| Type = [IntType]: int # 102| ValueCategory = lvalue -# 102| 0: y -# 102| Type = int +# 102| 0: [VariableAccess]: y +# 102| Type = [IntType]: int # 102| ValueCategory = lvalue -# 102| 1: -- ... -# 102| Type = int +# 102| 1: [PrefixDecrExpr]: -- ... +# 102| Type = [IntType]: int # 102| ValueCategory = prvalue -# 102| 0: x -# 102| Type = int +# 102| 0: [VariableAccess]: x +# 102| Type = [IntType]: int # 102| ValueCategory = lvalue -# 103| 3: ExprStmt -# 103| 0: ... = ... -# 103| Type = int +# 103| 3: [ExprStmt]: ExprStmt +# 103| 0: [AssignExpr]: ... = ... +# 103| Type = [IntType]: int # 103| ValueCategory = lvalue -# 103| 0: y -# 103| Type = int +# 103| 0: [VariableAccess]: y +# 103| Type = [IntType]: int # 103| ValueCategory = lvalue -# 103| 1: ... ++ -# 103| Type = int +# 103| 1: [PostfixIncrExpr]: ... ++ +# 103| Type = [IntType]: int # 103| ValueCategory = prvalue -# 103| 0: x -# 103| Type = int +# 103| 0: [VariableAccess]: x +# 103| Type = [IntType]: int # 103| ValueCategory = lvalue -# 104| 4: ExprStmt -# 104| 0: ... = ... -# 104| Type = int +# 104| 4: [ExprStmt]: ExprStmt +# 104| 0: [AssignExpr]: ... = ... +# 104| Type = [IntType]: int # 104| ValueCategory = lvalue -# 104| 0: y -# 104| Type = int +# 104| 0: [VariableAccess]: y +# 104| Type = [IntType]: int # 104| ValueCategory = lvalue -# 104| 1: ... -- -# 104| Type = int +# 104| 1: [PostfixDecrExpr]: ... -- +# 104| Type = [IntType]: int # 104| ValueCategory = prvalue -# 104| 0: x -# 104| Type = int +# 104| 0: [VariableAccess]: x +# 104| Type = [IntType]: int # 104| ValueCategory = lvalue -# 105| 5: return ... -# 107| void IntegerCrement_LValue(int) +# 105| 5: [ReturnStmt]: return ... +# 107| [TopLevelFunction]: void IntegerCrement_LValue(int) # 107| params: -# 107| 0: x -# 107| Type = int -# 107| body: { ... } -# 108| 0: declaration -# 108| 0: definition of p -# 108| Type = int * -# 110| 1: ExprStmt -# 110| 0: ... = ... -# 110| Type = int * +# 107| 0: [Parameter]: x +# 107| Type = [IntType]: int +# 107| body: [Block]: { ... } +# 108| 0: [DeclStmt]: declaration +# 108| 0: [VariableDeclarationEntry]: definition of p +# 108| Type = [IntPointerType]: int * +# 110| 1: [ExprStmt]: ExprStmt +# 110| 0: [AssignExpr]: ... = ... +# 110| Type = [IntPointerType]: int * # 110| ValueCategory = lvalue -# 110| 0: p -# 110| Type = int * +# 110| 0: [VariableAccess]: p +# 110| Type = [IntPointerType]: int * # 110| ValueCategory = lvalue -# 110| 1: & ... -# 110| Type = int * +# 110| 1: [AddressOfExpr]: & ... +# 110| Type = [IntPointerType]: int * # 110| ValueCategory = prvalue -# 110| 0: (...) -# 110| Type = int +# 110| 0: [ParenthesisExpr]: (...) +# 110| Type = [IntType]: int # 110| ValueCategory = lvalue -# 110| expr: ++ ... -# 110| Type = int +# 110| expr: [PrefixIncrExpr]: ++ ... +# 110| Type = [IntType]: int # 110| ValueCategory = lvalue -# 110| 0: x -# 110| Type = int +# 110| 0: [VariableAccess]: x +# 110| Type = [IntType]: int # 110| ValueCategory = lvalue -# 111| 2: ExprStmt -# 111| 0: ... = ... -# 111| Type = int * +# 111| 2: [ExprStmt]: ExprStmt +# 111| 0: [AssignExpr]: ... = ... +# 111| Type = [IntPointerType]: int * # 111| ValueCategory = lvalue -# 111| 0: p -# 111| Type = int * +# 111| 0: [VariableAccess]: p +# 111| Type = [IntPointerType]: int * # 111| ValueCategory = lvalue -# 111| 1: & ... -# 111| Type = int * +# 111| 1: [AddressOfExpr]: & ... +# 111| Type = [IntPointerType]: int * # 111| ValueCategory = prvalue -# 111| 0: (...) -# 111| Type = int +# 111| 0: [ParenthesisExpr]: (...) +# 111| Type = [IntType]: int # 111| ValueCategory = lvalue -# 111| expr: -- ... -# 111| Type = int +# 111| expr: [PrefixDecrExpr]: -- ... +# 111| Type = [IntType]: int # 111| ValueCategory = lvalue -# 111| 0: x -# 111| Type = int +# 111| 0: [VariableAccess]: x +# 111| Type = [IntType]: int # 111| ValueCategory = lvalue -# 112| 3: return ... -# 114| void FloatOps(double, double) +# 112| 3: [ReturnStmt]: return ... +# 114| [TopLevelFunction]: void FloatOps(double, double) # 114| params: -# 114| 0: x -# 114| Type = double -# 114| 1: y -# 114| Type = double -# 114| body: { ... } -# 115| 0: declaration -# 115| 0: definition of z -# 115| Type = double -# 117| 1: ExprStmt -# 117| 0: ... = ... -# 117| Type = double +# 114| 0: [Parameter]: x +# 114| Type = [DoubleType]: double +# 114| 1: [Parameter]: y +# 114| Type = [DoubleType]: double +# 114| body: [Block]: { ... } +# 115| 0: [DeclStmt]: declaration +# 115| 0: [VariableDeclarationEntry]: definition of z +# 115| Type = [DoubleType]: double +# 117| 1: [ExprStmt]: ExprStmt +# 117| 0: [AssignExpr]: ... = ... +# 117| Type = [DoubleType]: double # 117| ValueCategory = lvalue -# 117| 0: z -# 117| Type = double +# 117| 0: [VariableAccess]: z +# 117| Type = [DoubleType]: double # 117| ValueCategory = lvalue -# 117| 1: ... + ... -# 117| Type = double +# 117| 1: [AddExpr]: ... + ... +# 117| Type = [DoubleType]: double # 117| ValueCategory = prvalue -# 117| 0: x -# 117| Type = double +# 117| 0: [VariableAccess]: x +# 117| Type = [DoubleType]: double # 117| ValueCategory = prvalue(load) -# 117| 1: y -# 117| Type = double +# 117| 1: [VariableAccess]: y +# 117| Type = [DoubleType]: double # 117| ValueCategory = prvalue(load) -# 118| 2: ExprStmt -# 118| 0: ... = ... -# 118| Type = double +# 118| 2: [ExprStmt]: ExprStmt +# 118| 0: [AssignExpr]: ... = ... +# 118| Type = [DoubleType]: double # 118| ValueCategory = lvalue -# 118| 0: z -# 118| Type = double +# 118| 0: [VariableAccess]: z +# 118| Type = [DoubleType]: double # 118| ValueCategory = lvalue -# 118| 1: ... - ... -# 118| Type = double +# 118| 1: [SubExpr]: ... - ... +# 118| Type = [DoubleType]: double # 118| ValueCategory = prvalue -# 118| 0: x -# 118| Type = double +# 118| 0: [VariableAccess]: x +# 118| Type = [DoubleType]: double # 118| ValueCategory = prvalue(load) -# 118| 1: y -# 118| Type = double +# 118| 1: [VariableAccess]: y +# 118| Type = [DoubleType]: double # 118| ValueCategory = prvalue(load) -# 119| 3: ExprStmt -# 119| 0: ... = ... -# 119| Type = double +# 119| 3: [ExprStmt]: ExprStmt +# 119| 0: [AssignExpr]: ... = ... +# 119| Type = [DoubleType]: double # 119| ValueCategory = lvalue -# 119| 0: z -# 119| Type = double +# 119| 0: [VariableAccess]: z +# 119| Type = [DoubleType]: double # 119| ValueCategory = lvalue -# 119| 1: ... * ... -# 119| Type = double +# 119| 1: [MulExpr]: ... * ... +# 119| Type = [DoubleType]: double # 119| ValueCategory = prvalue -# 119| 0: x -# 119| Type = double +# 119| 0: [VariableAccess]: x +# 119| Type = [DoubleType]: double # 119| ValueCategory = prvalue(load) -# 119| 1: y -# 119| Type = double +# 119| 1: [VariableAccess]: y +# 119| Type = [DoubleType]: double # 119| ValueCategory = prvalue(load) -# 120| 4: ExprStmt -# 120| 0: ... = ... -# 120| Type = double +# 120| 4: [ExprStmt]: ExprStmt +# 120| 0: [AssignExpr]: ... = ... +# 120| Type = [DoubleType]: double # 120| ValueCategory = lvalue -# 120| 0: z -# 120| Type = double +# 120| 0: [VariableAccess]: z +# 120| Type = [DoubleType]: double # 120| ValueCategory = lvalue -# 120| 1: ... / ... -# 120| Type = double +# 120| 1: [DivExpr]: ... / ... +# 120| Type = [DoubleType]: double # 120| ValueCategory = prvalue -# 120| 0: x -# 120| Type = double +# 120| 0: [VariableAccess]: x +# 120| Type = [DoubleType]: double # 120| ValueCategory = prvalue(load) -# 120| 1: y -# 120| Type = double +# 120| 1: [VariableAccess]: y +# 120| Type = [DoubleType]: double # 120| ValueCategory = prvalue(load) -# 122| 5: ExprStmt -# 122| 0: ... = ... -# 122| Type = double +# 122| 5: [ExprStmt]: ExprStmt +# 122| 0: [AssignExpr]: ... = ... +# 122| Type = [DoubleType]: double # 122| ValueCategory = lvalue -# 122| 0: z -# 122| Type = double +# 122| 0: [VariableAccess]: z +# 122| Type = [DoubleType]: double # 122| ValueCategory = lvalue -# 122| 1: x -# 122| Type = double +# 122| 1: [VariableAccess]: x +# 122| Type = [DoubleType]: double # 122| ValueCategory = prvalue(load) -# 124| 6: ExprStmt -# 124| 0: ... += ... -# 124| Type = double +# 124| 6: [ExprStmt]: ExprStmt +# 124| 0: [AssignAddExpr]: ... += ... +# 124| Type = [DoubleType]: double # 124| ValueCategory = lvalue -# 124| 0: z -# 124| Type = double +# 124| 0: [VariableAccess]: z +# 124| Type = [DoubleType]: double # 124| ValueCategory = lvalue -# 124| 1: x -# 124| Type = double +# 124| 1: [VariableAccess]: x +# 124| Type = [DoubleType]: double # 124| ValueCategory = prvalue(load) -# 125| 7: ExprStmt -# 125| 0: ... -= ... -# 125| Type = double +# 125| 7: [ExprStmt]: ExprStmt +# 125| 0: [AssignSubExpr]: ... -= ... +# 125| Type = [DoubleType]: double # 125| ValueCategory = lvalue -# 125| 0: z -# 125| Type = double +# 125| 0: [VariableAccess]: z +# 125| Type = [DoubleType]: double # 125| ValueCategory = lvalue -# 125| 1: x -# 125| Type = double +# 125| 1: [VariableAccess]: x +# 125| Type = [DoubleType]: double # 125| ValueCategory = prvalue(load) -# 126| 8: ExprStmt -# 126| 0: ... *= ... -# 126| Type = double +# 126| 8: [ExprStmt]: ExprStmt +# 126| 0: [AssignMulExpr]: ... *= ... +# 126| Type = [DoubleType]: double # 126| ValueCategory = lvalue -# 126| 0: z -# 126| Type = double +# 126| 0: [VariableAccess]: z +# 126| Type = [DoubleType]: double # 126| ValueCategory = lvalue -# 126| 1: x -# 126| Type = double +# 126| 1: [VariableAccess]: x +# 126| Type = [DoubleType]: double # 126| ValueCategory = prvalue(load) -# 127| 9: ExprStmt -# 127| 0: ... /= ... -# 127| Type = double +# 127| 9: [ExprStmt]: ExprStmt +# 127| 0: [AssignDivExpr]: ... /= ... +# 127| Type = [DoubleType]: double # 127| ValueCategory = lvalue -# 127| 0: z -# 127| Type = double +# 127| 0: [VariableAccess]: z +# 127| Type = [DoubleType]: double # 127| ValueCategory = lvalue -# 127| 1: x -# 127| Type = double +# 127| 1: [VariableAccess]: x +# 127| Type = [DoubleType]: double # 127| ValueCategory = prvalue(load) -# 129| 10: ExprStmt -# 129| 0: ... = ... -# 129| Type = double +# 129| 10: [ExprStmt]: ExprStmt +# 129| 0: [AssignExpr]: ... = ... +# 129| Type = [DoubleType]: double # 129| ValueCategory = lvalue -# 129| 0: z -# 129| Type = double +# 129| 0: [VariableAccess]: z +# 129| Type = [DoubleType]: double # 129| ValueCategory = lvalue -# 129| 1: + ... -# 129| Type = double +# 129| 1: [UnaryPlusExpr]: + ... +# 129| Type = [DoubleType]: double # 129| ValueCategory = prvalue -# 129| 0: x -# 129| Type = double +# 129| 0: [VariableAccess]: x +# 129| Type = [DoubleType]: double # 129| ValueCategory = prvalue(load) -# 130| 11: ExprStmt -# 130| 0: ... = ... -# 130| Type = double +# 130| 11: [ExprStmt]: ExprStmt +# 130| 0: [AssignExpr]: ... = ... +# 130| Type = [DoubleType]: double # 130| ValueCategory = lvalue -# 130| 0: z -# 130| Type = double +# 130| 0: [VariableAccess]: z +# 130| Type = [DoubleType]: double # 130| ValueCategory = lvalue -# 130| 1: - ... -# 130| Type = double +# 130| 1: [UnaryMinusExpr]: - ... +# 130| Type = [DoubleType]: double # 130| ValueCategory = prvalue -# 130| 0: x -# 130| Type = double +# 130| 0: [VariableAccess]: x +# 130| Type = [DoubleType]: double # 130| ValueCategory = prvalue(load) -# 131| 12: return ... -# 133| void FloatCompare(double, double) +# 131| 12: [ReturnStmt]: return ... +# 133| [TopLevelFunction]: void FloatCompare(double, double) # 133| params: -# 133| 0: x -# 133| Type = double -# 133| 1: y -# 133| Type = double -# 133| body: { ... } -# 134| 0: declaration -# 134| 0: definition of b -# 134| Type = bool -# 136| 1: ExprStmt -# 136| 0: ... = ... -# 136| Type = bool +# 133| 0: [Parameter]: x +# 133| Type = [DoubleType]: double +# 133| 1: [Parameter]: y +# 133| Type = [DoubleType]: double +# 133| body: [Block]: { ... } +# 134| 0: [DeclStmt]: declaration +# 134| 0: [VariableDeclarationEntry]: definition of b +# 134| Type = [BoolType]: bool +# 136| 1: [ExprStmt]: ExprStmt +# 136| 0: [AssignExpr]: ... = ... +# 136| Type = [BoolType]: bool # 136| ValueCategory = lvalue -# 136| 0: b -# 136| Type = bool +# 136| 0: [VariableAccess]: b +# 136| Type = [BoolType]: bool # 136| ValueCategory = lvalue -# 136| 1: ... == ... -# 136| Type = bool +# 136| 1: [EQExpr]: ... == ... +# 136| Type = [BoolType]: bool # 136| ValueCategory = prvalue -# 136| 0: x -# 136| Type = double +# 136| 0: [VariableAccess]: x +# 136| Type = [DoubleType]: double # 136| ValueCategory = prvalue(load) -# 136| 1: y -# 136| Type = double +# 136| 1: [VariableAccess]: y +# 136| Type = [DoubleType]: double # 136| ValueCategory = prvalue(load) -# 137| 2: ExprStmt -# 137| 0: ... = ... -# 137| Type = bool +# 137| 2: [ExprStmt]: ExprStmt +# 137| 0: [AssignExpr]: ... = ... +# 137| Type = [BoolType]: bool # 137| ValueCategory = lvalue -# 137| 0: b -# 137| Type = bool +# 137| 0: [VariableAccess]: b +# 137| Type = [BoolType]: bool # 137| ValueCategory = lvalue -# 137| 1: ... != ... -# 137| Type = bool +# 137| 1: [NEExpr]: ... != ... +# 137| Type = [BoolType]: bool # 137| ValueCategory = prvalue -# 137| 0: x -# 137| Type = double +# 137| 0: [VariableAccess]: x +# 137| Type = [DoubleType]: double # 137| ValueCategory = prvalue(load) -# 137| 1: y -# 137| Type = double +# 137| 1: [VariableAccess]: y +# 137| Type = [DoubleType]: double # 137| ValueCategory = prvalue(load) -# 138| 3: ExprStmt -# 138| 0: ... = ... -# 138| Type = bool +# 138| 3: [ExprStmt]: ExprStmt +# 138| 0: [AssignExpr]: ... = ... +# 138| Type = [BoolType]: bool # 138| ValueCategory = lvalue -# 138| 0: b -# 138| Type = bool +# 138| 0: [VariableAccess]: b +# 138| Type = [BoolType]: bool # 138| ValueCategory = lvalue -# 138| 1: ... < ... -# 138| Type = bool +# 138| 1: [LTExpr]: ... < ... +# 138| Type = [BoolType]: bool # 138| ValueCategory = prvalue -# 138| 0: x -# 138| Type = double +# 138| 0: [VariableAccess]: x +# 138| Type = [DoubleType]: double # 138| ValueCategory = prvalue(load) -# 138| 1: y -# 138| Type = double +# 138| 1: [VariableAccess]: y +# 138| Type = [DoubleType]: double # 138| ValueCategory = prvalue(load) -# 139| 4: ExprStmt -# 139| 0: ... = ... -# 139| Type = bool +# 139| 4: [ExprStmt]: ExprStmt +# 139| 0: [AssignExpr]: ... = ... +# 139| Type = [BoolType]: bool # 139| ValueCategory = lvalue -# 139| 0: b -# 139| Type = bool +# 139| 0: [VariableAccess]: b +# 139| Type = [BoolType]: bool # 139| ValueCategory = lvalue -# 139| 1: ... > ... -# 139| Type = bool +# 139| 1: [GTExpr]: ... > ... +# 139| Type = [BoolType]: bool # 139| ValueCategory = prvalue -# 139| 0: x -# 139| Type = double +# 139| 0: [VariableAccess]: x +# 139| Type = [DoubleType]: double # 139| ValueCategory = prvalue(load) -# 139| 1: y -# 139| Type = double +# 139| 1: [VariableAccess]: y +# 139| Type = [DoubleType]: double # 139| ValueCategory = prvalue(load) -# 140| 5: ExprStmt -# 140| 0: ... = ... -# 140| Type = bool +# 140| 5: [ExprStmt]: ExprStmt +# 140| 0: [AssignExpr]: ... = ... +# 140| Type = [BoolType]: bool # 140| ValueCategory = lvalue -# 140| 0: b -# 140| Type = bool +# 140| 0: [VariableAccess]: b +# 140| Type = [BoolType]: bool # 140| ValueCategory = lvalue -# 140| 1: ... <= ... -# 140| Type = bool +# 140| 1: [LEExpr]: ... <= ... +# 140| Type = [BoolType]: bool # 140| ValueCategory = prvalue -# 140| 0: x -# 140| Type = double +# 140| 0: [VariableAccess]: x +# 140| Type = [DoubleType]: double # 140| ValueCategory = prvalue(load) -# 140| 1: y -# 140| Type = double +# 140| 1: [VariableAccess]: y +# 140| Type = [DoubleType]: double # 140| ValueCategory = prvalue(load) -# 141| 6: ExprStmt -# 141| 0: ... = ... -# 141| Type = bool +# 141| 6: [ExprStmt]: ExprStmt +# 141| 0: [AssignExpr]: ... = ... +# 141| Type = [BoolType]: bool # 141| ValueCategory = lvalue -# 141| 0: b -# 141| Type = bool +# 141| 0: [VariableAccess]: b +# 141| Type = [BoolType]: bool # 141| ValueCategory = lvalue -# 141| 1: ... >= ... -# 141| Type = bool +# 141| 1: [GEExpr]: ... >= ... +# 141| Type = [BoolType]: bool # 141| ValueCategory = prvalue -# 141| 0: x -# 141| Type = double +# 141| 0: [VariableAccess]: x +# 141| Type = [DoubleType]: double # 141| ValueCategory = prvalue(load) -# 141| 1: y -# 141| Type = double +# 141| 1: [VariableAccess]: y +# 141| Type = [DoubleType]: double # 141| ValueCategory = prvalue(load) -# 142| 7: return ... -# 144| void FloatCrement(float) +# 142| 7: [ReturnStmt]: return ... +# 144| [TopLevelFunction]: void FloatCrement(float) # 144| params: -# 144| 0: x -# 144| Type = float -# 144| body: { ... } -# 145| 0: declaration -# 145| 0: definition of y -# 145| Type = float -# 147| 1: ExprStmt -# 147| 0: ... = ... -# 147| Type = float +# 144| 0: [Parameter]: x +# 144| Type = [FloatType]: float +# 144| body: [Block]: { ... } +# 145| 0: [DeclStmt]: declaration +# 145| 0: [VariableDeclarationEntry]: definition of y +# 145| Type = [FloatType]: float +# 147| 1: [ExprStmt]: ExprStmt +# 147| 0: [AssignExpr]: ... = ... +# 147| Type = [FloatType]: float # 147| ValueCategory = lvalue -# 147| 0: y -# 147| Type = float +# 147| 0: [VariableAccess]: y +# 147| Type = [FloatType]: float # 147| ValueCategory = lvalue -# 147| 1: ++ ... -# 147| Type = float +# 147| 1: [PrefixIncrExpr]: ++ ... +# 147| Type = [FloatType]: float # 147| ValueCategory = prvalue -# 147| 0: x -# 147| Type = float +# 147| 0: [VariableAccess]: x +# 147| Type = [FloatType]: float # 147| ValueCategory = lvalue -# 148| 2: ExprStmt -# 148| 0: ... = ... -# 148| Type = float +# 148| 2: [ExprStmt]: ExprStmt +# 148| 0: [AssignExpr]: ... = ... +# 148| Type = [FloatType]: float # 148| ValueCategory = lvalue -# 148| 0: y -# 148| Type = float +# 148| 0: [VariableAccess]: y +# 148| Type = [FloatType]: float # 148| ValueCategory = lvalue -# 148| 1: -- ... -# 148| Type = float +# 148| 1: [PrefixDecrExpr]: -- ... +# 148| Type = [FloatType]: float # 148| ValueCategory = prvalue -# 148| 0: x -# 148| Type = float +# 148| 0: [VariableAccess]: x +# 148| Type = [FloatType]: float # 148| ValueCategory = lvalue -# 149| 3: ExprStmt -# 149| 0: ... = ... -# 149| Type = float +# 149| 3: [ExprStmt]: ExprStmt +# 149| 0: [AssignExpr]: ... = ... +# 149| Type = [FloatType]: float # 149| ValueCategory = lvalue -# 149| 0: y -# 149| Type = float +# 149| 0: [VariableAccess]: y +# 149| Type = [FloatType]: float # 149| ValueCategory = lvalue -# 149| 1: ... ++ -# 149| Type = float +# 149| 1: [PostfixIncrExpr]: ... ++ +# 149| Type = [FloatType]: float # 149| ValueCategory = prvalue -# 149| 0: x -# 149| Type = float +# 149| 0: [VariableAccess]: x +# 149| Type = [FloatType]: float # 149| ValueCategory = lvalue -# 150| 4: ExprStmt -# 150| 0: ... = ... -# 150| Type = float +# 150| 4: [ExprStmt]: ExprStmt +# 150| 0: [AssignExpr]: ... = ... +# 150| Type = [FloatType]: float # 150| ValueCategory = lvalue -# 150| 0: y -# 150| Type = float +# 150| 0: [VariableAccess]: y +# 150| Type = [FloatType]: float # 150| ValueCategory = lvalue -# 150| 1: ... -- -# 150| Type = float +# 150| 1: [PostfixDecrExpr]: ... -- +# 150| Type = [FloatType]: float # 150| ValueCategory = prvalue -# 150| 0: x -# 150| Type = float +# 150| 0: [VariableAccess]: x +# 150| Type = [FloatType]: float # 150| ValueCategory = lvalue -# 151| 5: return ... -# 153| void PointerOps(int*, int) +# 151| 5: [ReturnStmt]: return ... +# 153| [TopLevelFunction]: void PointerOps(int*, int) # 153| params: -# 153| 0: p -# 153| Type = int * -# 153| 1: i -# 153| Type = int -# 153| body: { ... } -# 154| 0: declaration -# 154| 0: definition of q -# 154| Type = int * -# 155| 1: declaration -# 155| 0: definition of b -# 155| Type = bool -# 157| 2: ExprStmt -# 157| 0: ... = ... -# 157| Type = int * +# 153| 0: [Parameter]: p +# 153| Type = [IntPointerType]: int * +# 153| 1: [Parameter]: i +# 153| Type = [IntType]: int +# 153| body: [Block]: { ... } +# 154| 0: [DeclStmt]: declaration +# 154| 0: [VariableDeclarationEntry]: definition of q +# 154| Type = [IntPointerType]: int * +# 155| 1: [DeclStmt]: declaration +# 155| 0: [VariableDeclarationEntry]: definition of b +# 155| Type = [BoolType]: bool +# 157| 2: [ExprStmt]: ExprStmt +# 157| 0: [AssignExpr]: ... = ... +# 157| Type = [IntPointerType]: int * # 157| ValueCategory = lvalue -# 157| 0: q -# 157| Type = int * +# 157| 0: [VariableAccess]: q +# 157| Type = [IntPointerType]: int * # 157| ValueCategory = lvalue -# 157| 1: ... + ... -# 157| Type = int * +# 157| 1: [PointerAddExpr]: ... + ... +# 157| Type = [IntPointerType]: int * # 157| ValueCategory = prvalue -# 157| 0: p -# 157| Type = int * +# 157| 0: [VariableAccess]: p +# 157| Type = [IntPointerType]: int * # 157| ValueCategory = prvalue(load) -# 157| 1: i -# 157| Type = int +# 157| 1: [VariableAccess]: i +# 157| Type = [IntType]: int # 157| ValueCategory = prvalue(load) -# 158| 3: ExprStmt -# 158| 0: ... = ... -# 158| Type = int * +# 158| 3: [ExprStmt]: ExprStmt +# 158| 0: [AssignExpr]: ... = ... +# 158| Type = [IntPointerType]: int * # 158| ValueCategory = lvalue -# 158| 0: q -# 158| Type = int * +# 158| 0: [VariableAccess]: q +# 158| Type = [IntPointerType]: int * # 158| ValueCategory = lvalue -# 158| 1: ... + ... -# 158| Type = int * +# 158| 1: [PointerAddExpr]: ... + ... +# 158| Type = [IntPointerType]: int * # 158| ValueCategory = prvalue -# 158| 0: i -# 158| Type = int +# 158| 0: [VariableAccess]: i +# 158| Type = [IntType]: int # 158| ValueCategory = prvalue(load) -# 158| 1: p -# 158| Type = int * +# 158| 1: [VariableAccess]: p +# 158| Type = [IntPointerType]: int * # 158| ValueCategory = prvalue(load) -# 159| 4: ExprStmt -# 159| 0: ... = ... -# 159| Type = int * +# 159| 4: [ExprStmt]: ExprStmt +# 159| 0: [AssignExpr]: ... = ... +# 159| Type = [IntPointerType]: int * # 159| ValueCategory = lvalue -# 159| 0: q -# 159| Type = int * +# 159| 0: [VariableAccess]: q +# 159| Type = [IntPointerType]: int * # 159| ValueCategory = lvalue -# 159| 1: ... - ... -# 159| Type = int * +# 159| 1: [PointerSubExpr]: ... - ... +# 159| Type = [IntPointerType]: int * # 159| ValueCategory = prvalue -# 159| 0: p -# 159| Type = int * +# 159| 0: [VariableAccess]: p +# 159| Type = [IntPointerType]: int * # 159| ValueCategory = prvalue(load) -# 159| 1: i -# 159| Type = int +# 159| 1: [VariableAccess]: i +# 159| Type = [IntType]: int # 159| ValueCategory = prvalue(load) -# 160| 5: ExprStmt -# 160| 0: ... = ... -# 160| Type = int +# 160| 5: [ExprStmt]: ExprStmt +# 160| 0: [AssignExpr]: ... = ... +# 160| Type = [IntType]: int # 160| ValueCategory = lvalue -# 160| 0: i -# 160| Type = int +# 160| 0: [VariableAccess]: i +# 160| Type = [IntType]: int # 160| ValueCategory = lvalue -# 160| 1: (int)... +# 160| 1: [IntegralConversion]: (int)... # 160| Conversion = integral conversion -# 160| Type = int +# 160| Type = [IntType]: int # 160| ValueCategory = prvalue -# 160| expr: ... - ... -# 160| Type = long +# 160| expr: [PointerDiffExpr]: ... - ... +# 160| Type = [LongType]: long # 160| ValueCategory = prvalue -# 160| 0: p -# 160| Type = int * +# 160| 0: [VariableAccess]: p +# 160| Type = [IntPointerType]: int * # 160| ValueCategory = prvalue(load) -# 160| 1: q -# 160| Type = int * +# 160| 1: [VariableAccess]: q +# 160| Type = [IntPointerType]: int * # 160| ValueCategory = prvalue(load) -# 162| 6: ExprStmt -# 162| 0: ... = ... -# 162| Type = int * +# 162| 6: [ExprStmt]: ExprStmt +# 162| 0: [AssignExpr]: ... = ... +# 162| Type = [IntPointerType]: int * # 162| ValueCategory = lvalue -# 162| 0: q -# 162| Type = int * +# 162| 0: [VariableAccess]: q +# 162| Type = [IntPointerType]: int * # 162| ValueCategory = lvalue -# 162| 1: p -# 162| Type = int * +# 162| 1: [VariableAccess]: p +# 162| Type = [IntPointerType]: int * # 162| ValueCategory = prvalue(load) -# 164| 7: ExprStmt -# 164| 0: ... += ... -# 164| Type = int * +# 164| 7: [ExprStmt]: ExprStmt +# 164| 0: [AssignPointerAddExpr]: ... += ... +# 164| Type = [IntPointerType]: int * # 164| ValueCategory = lvalue -# 164| 0: q -# 164| Type = int * +# 164| 0: [VariableAccess]: q +# 164| Type = [IntPointerType]: int * # 164| ValueCategory = lvalue -# 164| 1: i -# 164| Type = int +# 164| 1: [VariableAccess]: i +# 164| Type = [IntType]: int # 164| ValueCategory = prvalue(load) -# 165| 8: ExprStmt -# 165| 0: ... -= ... -# 165| Type = int * +# 165| 8: [ExprStmt]: ExprStmt +# 165| 0: [AssignPointerSubExpr]: ... -= ... +# 165| Type = [IntPointerType]: int * # 165| ValueCategory = lvalue -# 165| 0: q -# 165| Type = int * +# 165| 0: [VariableAccess]: q +# 165| Type = [IntPointerType]: int * # 165| ValueCategory = lvalue -# 165| 1: i -# 165| Type = int +# 165| 1: [VariableAccess]: i +# 165| Type = [IntType]: int # 165| ValueCategory = prvalue(load) -# 167| 9: ExprStmt -# 167| 0: ... = ... -# 167| Type = bool +# 167| 9: [ExprStmt]: ExprStmt +# 167| 0: [AssignExpr]: ... = ... +# 167| Type = [BoolType]: bool # 167| ValueCategory = lvalue -# 167| 0: b -# 167| Type = bool +# 167| 0: [VariableAccess]: b +# 167| Type = [BoolType]: bool # 167| ValueCategory = lvalue -# 167| 1: (bool)... +# 167| 1: [BoolConversion]: (bool)... # 167| Conversion = conversion to bool -# 167| Type = bool +# 167| Type = [BoolType]: bool # 167| ValueCategory = prvalue -# 167| expr: p -# 167| Type = int * +# 167| expr: [VariableAccess]: p +# 167| Type = [IntPointerType]: int * # 167| ValueCategory = prvalue(load) -# 168| 10: ExprStmt -# 168| 0: ... = ... -# 168| Type = bool +# 168| 10: [ExprStmt]: ExprStmt +# 168| 0: [AssignExpr]: ... = ... +# 168| Type = [BoolType]: bool # 168| ValueCategory = lvalue -# 168| 0: b -# 168| Type = bool +# 168| 0: [VariableAccess]: b +# 168| Type = [BoolType]: bool # 168| ValueCategory = lvalue -# 168| 1: ! ... -# 168| Type = bool +# 168| 1: [NotExpr]: ! ... +# 168| Type = [BoolType]: bool # 168| ValueCategory = prvalue -# 168| 0: (bool)... +# 168| 0: [BoolConversion]: (bool)... # 168| Conversion = conversion to bool -# 168| Type = bool +# 168| Type = [BoolType]: bool # 168| ValueCategory = prvalue -# 168| expr: p -# 168| Type = int * +# 168| expr: [VariableAccess]: p +# 168| Type = [IntPointerType]: int * # 168| ValueCategory = prvalue(load) -# 169| 11: return ... -# 171| void ArrayAccess(int*, int) +# 169| 11: [ReturnStmt]: return ... +# 171| [TopLevelFunction]: void ArrayAccess(int*, int) # 171| params: -# 171| 0: p -# 171| Type = int * -# 171| 1: i -# 171| Type = int -# 171| body: { ... } -# 172| 0: declaration -# 172| 0: definition of x -# 172| Type = int -# 174| 1: ExprStmt -# 174| 0: ... = ... -# 174| Type = int +# 171| 0: [Parameter]: p +# 171| Type = [IntPointerType]: int * +# 171| 1: [Parameter]: i +# 171| Type = [IntType]: int +# 171| body: [Block]: { ... } +# 172| 0: [DeclStmt]: declaration +# 172| 0: [VariableDeclarationEntry]: definition of x +# 172| Type = [IntType]: int +# 174| 1: [ExprStmt]: ExprStmt +# 174| 0: [AssignExpr]: ... = ... +# 174| Type = [IntType]: int # 174| ValueCategory = lvalue -# 174| 0: x -# 174| Type = int +# 174| 0: [VariableAccess]: x +# 174| Type = [IntType]: int # 174| ValueCategory = lvalue -# 174| 1: access to array -# 174| Type = int +# 174| 1: [ArrayExpr]: access to array +# 174| Type = [IntType]: int # 174| ValueCategory = prvalue(load) -# 174| 0: p -# 174| Type = int * +# 174| 0: [VariableAccess]: p +# 174| Type = [IntPointerType]: int * # 174| ValueCategory = prvalue(load) -# 174| 1: i -# 174| Type = int +# 174| 1: [VariableAccess]: i +# 174| Type = [IntType]: int # 174| ValueCategory = prvalue(load) -# 175| 2: ExprStmt -# 175| 0: ... = ... -# 175| Type = int +# 175| 2: [ExprStmt]: ExprStmt +# 175| 0: [AssignExpr]: ... = ... +# 175| Type = [IntType]: int # 175| ValueCategory = lvalue -# 175| 0: x -# 175| Type = int +# 175| 0: [VariableAccess]: x +# 175| Type = [IntType]: int # 175| ValueCategory = lvalue -# 175| 1: access to array -# 175| Type = int +# 175| 1: [ArrayExpr]: access to array +# 175| Type = [IntType]: int # 175| ValueCategory = prvalue(load) -# 175| 0: p -# 175| Type = int * +# 175| 0: [VariableAccess]: p +# 175| Type = [IntPointerType]: int * # 175| ValueCategory = prvalue(load) -# 175| 1: i -# 175| Type = int +# 175| 1: [VariableAccess]: i +# 175| Type = [IntType]: int # 175| ValueCategory = prvalue(load) -# 177| 3: ExprStmt -# 177| 0: ... = ... -# 177| Type = int +# 177| 3: [ExprStmt]: ExprStmt +# 177| 0: [AssignExpr]: ... = ... +# 177| Type = [IntType]: int # 177| ValueCategory = lvalue -# 177| 0: access to array -# 177| Type = int +# 177| 0: [ArrayExpr]: access to array +# 177| Type = [IntType]: int # 177| ValueCategory = lvalue -# 177| 0: p -# 177| Type = int * +# 177| 0: [VariableAccess]: p +# 177| Type = [IntPointerType]: int * # 177| ValueCategory = prvalue(load) -# 177| 1: i -# 177| Type = int +# 177| 1: [VariableAccess]: i +# 177| Type = [IntType]: int # 177| ValueCategory = prvalue(load) -# 177| 1: x -# 177| Type = int +# 177| 1: [VariableAccess]: x +# 177| Type = [IntType]: int # 177| ValueCategory = prvalue(load) -# 178| 4: ExprStmt -# 178| 0: ... = ... -# 178| Type = int +# 178| 4: [ExprStmt]: ExprStmt +# 178| 0: [AssignExpr]: ... = ... +# 178| Type = [IntType]: int # 178| ValueCategory = lvalue -# 178| 0: access to array -# 178| Type = int +# 178| 0: [ArrayExpr]: access to array +# 178| Type = [IntType]: int # 178| ValueCategory = lvalue -# 178| 0: p -# 178| Type = int * +# 178| 0: [VariableAccess]: p +# 178| Type = [IntPointerType]: int * # 178| ValueCategory = prvalue(load) -# 178| 1: i -# 178| Type = int +# 178| 1: [VariableAccess]: i +# 178| Type = [IntType]: int # 178| ValueCategory = prvalue(load) -# 178| 1: x -# 178| Type = int +# 178| 1: [VariableAccess]: x +# 178| Type = [IntType]: int # 178| ValueCategory = prvalue(load) -# 180| 5: declaration -# 180| 0: definition of a -# 180| Type = int[10] -# 181| 6: ExprStmt -# 181| 0: ... = ... -# 181| Type = int +# 180| 5: [DeclStmt]: declaration +# 180| 0: [VariableDeclarationEntry]: definition of a +# 180| Type = [ArrayType]: int[10] +# 181| 6: [ExprStmt]: ExprStmt +# 181| 0: [AssignExpr]: ... = ... +# 181| Type = [IntType]: int # 181| ValueCategory = lvalue -# 181| 0: x -# 181| Type = int +# 181| 0: [VariableAccess]: x +# 181| Type = [IntType]: int # 181| ValueCategory = lvalue -# 181| 1: access to array -# 181| Type = int +# 181| 1: [ArrayExpr]: access to array +# 181| Type = [IntType]: int # 181| ValueCategory = prvalue(load) -# 181| 0: array to pointer conversion -# 181| Type = int * +# 181| 0: [ArrayToPointerConversion]: array to pointer conversion +# 181| Type = [IntPointerType]: int * # 181| ValueCategory = prvalue -# 181| expr: a -# 181| Type = int[10] +# 181| expr: [VariableAccess]: a +# 181| Type = [ArrayType]: int[10] # 181| ValueCategory = lvalue -# 181| 1: i -# 181| Type = int +# 181| 1: [VariableAccess]: i +# 181| Type = [IntType]: int # 181| ValueCategory = prvalue(load) -# 182| 7: ExprStmt -# 182| 0: ... = ... -# 182| Type = int +# 182| 7: [ExprStmt]: ExprStmt +# 182| 0: [AssignExpr]: ... = ... +# 182| Type = [IntType]: int # 182| ValueCategory = lvalue -# 182| 0: x -# 182| Type = int +# 182| 0: [VariableAccess]: x +# 182| Type = [IntType]: int # 182| ValueCategory = lvalue -# 182| 1: access to array -# 182| Type = int +# 182| 1: [ArrayExpr]: access to array +# 182| Type = [IntType]: int # 182| ValueCategory = prvalue(load) -# 182| 0: array to pointer conversion -# 182| Type = int * +# 182| 0: [ArrayToPointerConversion]: array to pointer conversion +# 182| Type = [IntPointerType]: int * # 182| ValueCategory = prvalue -# 182| expr: a -# 182| Type = int[10] +# 182| expr: [VariableAccess]: a +# 182| Type = [ArrayType]: int[10] # 182| ValueCategory = lvalue -# 182| 1: i -# 182| Type = int +# 182| 1: [VariableAccess]: i +# 182| Type = [IntType]: int # 182| ValueCategory = prvalue(load) -# 183| 8: ExprStmt -# 183| 0: ... = ... -# 183| Type = int +# 183| 8: [ExprStmt]: ExprStmt +# 183| 0: [AssignExpr]: ... = ... +# 183| Type = [IntType]: int # 183| ValueCategory = lvalue -# 183| 0: access to array -# 183| Type = int +# 183| 0: [ArrayExpr]: access to array +# 183| Type = [IntType]: int # 183| ValueCategory = lvalue -# 183| 0: array to pointer conversion -# 183| Type = int * +# 183| 0: [ArrayToPointerConversion]: array to pointer conversion +# 183| Type = [IntPointerType]: int * # 183| ValueCategory = prvalue -# 183| expr: a -# 183| Type = int[10] +# 183| expr: [VariableAccess]: a +# 183| Type = [ArrayType]: int[10] # 183| ValueCategory = lvalue -# 183| 1: i -# 183| Type = int +# 183| 1: [VariableAccess]: i +# 183| Type = [IntType]: int # 183| ValueCategory = prvalue(load) -# 183| 1: x -# 183| Type = int +# 183| 1: [VariableAccess]: x +# 183| Type = [IntType]: int # 183| ValueCategory = prvalue(load) -# 184| 9: ExprStmt -# 184| 0: ... = ... -# 184| Type = int +# 184| 9: [ExprStmt]: ExprStmt +# 184| 0: [AssignExpr]: ... = ... +# 184| Type = [IntType]: int # 184| ValueCategory = lvalue -# 184| 0: access to array -# 184| Type = int +# 184| 0: [ArrayExpr]: access to array +# 184| Type = [IntType]: int # 184| ValueCategory = lvalue -# 184| 0: array to pointer conversion -# 184| Type = int * +# 184| 0: [ArrayToPointerConversion]: array to pointer conversion +# 184| Type = [IntPointerType]: int * # 184| ValueCategory = prvalue -# 184| expr: a -# 184| Type = int[10] +# 184| expr: [VariableAccess]: a +# 184| Type = [ArrayType]: int[10] # 184| ValueCategory = lvalue -# 184| 1: i -# 184| Type = int +# 184| 1: [VariableAccess]: i +# 184| Type = [IntType]: int # 184| ValueCategory = prvalue(load) -# 184| 1: x -# 184| Type = int +# 184| 1: [VariableAccess]: x +# 184| Type = [IntType]: int # 184| ValueCategory = prvalue(load) -# 185| 10: return ... -# 187| void StringLiteral(int) +# 185| 10: [ReturnStmt]: return ... +# 187| [TopLevelFunction]: void StringLiteral(int) # 187| params: -# 187| 0: i -# 187| Type = int -# 187| body: { ... } -# 188| 0: declaration -# 188| 0: definition of c -# 188| Type = char -# 188| init: initializer for c -# 188| expr: access to array -# 188| Type = char +# 187| 0: [Parameter]: i +# 187| Type = [IntType]: int +# 187| body: [Block]: { ... } +# 188| 0: [DeclStmt]: declaration +# 188| 0: [VariableDeclarationEntry]: definition of c +# 188| Type = [PlainCharType]: char +# 188| init: [Initializer]: initializer for c +# 188| expr: [ArrayExpr]: access to array +# 188| Type = [PlainCharType]: char # 188| ValueCategory = prvalue(load) -# 188| 0: array to pointer conversion -# 188| Type = const char * +# 188| 0: [ArrayToPointerConversion]: array to pointer conversion +# 188| Type = [PointerType]: const char * # 188| ValueCategory = prvalue # 188| expr: Foo -# 188| Type = const char[4] -# 188| Value = "Foo" +# 188| Type = [ArrayType]: const char[4] +# 188| Value = [StringLiteral]: "Foo" # 188| ValueCategory = lvalue -# 188| 1: i -# 188| Type = int +# 188| 1: [VariableAccess]: i +# 188| Type = [IntType]: int # 188| ValueCategory = prvalue(load) -# 189| 1: declaration -# 189| 0: definition of pwc -# 189| Type = wchar_t * -# 189| init: initializer for pwc -# 189| expr: (wchar_t *)... +# 189| 1: [DeclStmt]: declaration +# 189| 0: [VariableDeclarationEntry]: definition of pwc +# 189| Type = [PointerType]: wchar_t * +# 189| init: [Initializer]: initializer for pwc +# 189| expr: [PointerConversion]: (wchar_t *)... # 189| Conversion = pointer conversion -# 189| Type = wchar_t * +# 189| Type = [PointerType]: wchar_t * # 189| ValueCategory = prvalue -# 189| expr: array to pointer conversion -# 189| Type = const wchar_t * +# 189| expr: [ArrayToPointerConversion]: array to pointer conversion +# 189| Type = [PointerType]: const wchar_t * # 189| ValueCategory = prvalue # 189| expr: Bar -# 189| Type = const wchar_t[4] -# 189| Value = "Bar" +# 189| Type = [ArrayType]: const wchar_t[4] +# 189| Value = [StringLiteral]: "Bar" # 189| ValueCategory = lvalue -# 190| 2: declaration -# 190| 0: definition of wc -# 190| Type = wchar_t -# 190| init: initializer for wc -# 190| expr: access to array -# 190| Type = wchar_t +# 190| 2: [DeclStmt]: declaration +# 190| 0: [VariableDeclarationEntry]: definition of wc +# 190| Type = [Wchar_t]: wchar_t +# 190| init: [Initializer]: initializer for wc +# 190| expr: [ArrayExpr]: access to array +# 190| Type = [Wchar_t]: wchar_t # 190| ValueCategory = prvalue(load) -# 190| 0: pwc -# 190| Type = wchar_t * +# 190| 0: [VariableAccess]: pwc +# 190| Type = [PointerType]: wchar_t * # 190| ValueCategory = prvalue(load) -# 190| 1: i -# 190| Type = int +# 190| 1: [VariableAccess]: i +# 190| Type = [IntType]: int # 190| ValueCategory = prvalue(load) -# 191| 3: return ... -# 193| void PointerCompare(int*, int*) +# 191| 3: [ReturnStmt]: return ... +# 193| [TopLevelFunction]: void PointerCompare(int*, int*) # 193| params: -# 193| 0: p -# 193| Type = int * -# 193| 1: q -# 193| Type = int * -# 193| body: { ... } -# 194| 0: declaration -# 194| 0: definition of b -# 194| Type = bool -# 196| 1: ExprStmt -# 196| 0: ... = ... -# 196| Type = bool +# 193| 0: [Parameter]: p +# 193| Type = [IntPointerType]: int * +# 193| 1: [Parameter]: q +# 193| Type = [IntPointerType]: int * +# 193| body: [Block]: { ... } +# 194| 0: [DeclStmt]: declaration +# 194| 0: [VariableDeclarationEntry]: definition of b +# 194| Type = [BoolType]: bool +# 196| 1: [ExprStmt]: ExprStmt +# 196| 0: [AssignExpr]: ... = ... +# 196| Type = [BoolType]: bool # 196| ValueCategory = lvalue -# 196| 0: b -# 196| Type = bool +# 196| 0: [VariableAccess]: b +# 196| Type = [BoolType]: bool # 196| ValueCategory = lvalue -# 196| 1: ... == ... -# 196| Type = bool +# 196| 1: [EQExpr]: ... == ... +# 196| Type = [BoolType]: bool # 196| ValueCategory = prvalue -# 196| 0: p -# 196| Type = int * +# 196| 0: [VariableAccess]: p +# 196| Type = [IntPointerType]: int * # 196| ValueCategory = prvalue(load) -# 196| 1: q -# 196| Type = int * +# 196| 1: [VariableAccess]: q +# 196| Type = [IntPointerType]: int * # 196| ValueCategory = prvalue(load) -# 197| 2: ExprStmt -# 197| 0: ... = ... -# 197| Type = bool +# 197| 2: [ExprStmt]: ExprStmt +# 197| 0: [AssignExpr]: ... = ... +# 197| Type = [BoolType]: bool # 197| ValueCategory = lvalue -# 197| 0: b -# 197| Type = bool +# 197| 0: [VariableAccess]: b +# 197| Type = [BoolType]: bool # 197| ValueCategory = lvalue -# 197| 1: ... != ... -# 197| Type = bool +# 197| 1: [NEExpr]: ... != ... +# 197| Type = [BoolType]: bool # 197| ValueCategory = prvalue -# 197| 0: p -# 197| Type = int * +# 197| 0: [VariableAccess]: p +# 197| Type = [IntPointerType]: int * # 197| ValueCategory = prvalue(load) -# 197| 1: q -# 197| Type = int * +# 197| 1: [VariableAccess]: q +# 197| Type = [IntPointerType]: int * # 197| ValueCategory = prvalue(load) -# 198| 3: ExprStmt -# 198| 0: ... = ... -# 198| Type = bool +# 198| 3: [ExprStmt]: ExprStmt +# 198| 0: [AssignExpr]: ... = ... +# 198| Type = [BoolType]: bool # 198| ValueCategory = lvalue -# 198| 0: b -# 198| Type = bool +# 198| 0: [VariableAccess]: b +# 198| Type = [BoolType]: bool # 198| ValueCategory = lvalue -# 198| 1: ... < ... -# 198| Type = bool +# 198| 1: [LTExpr]: ... < ... +# 198| Type = [BoolType]: bool # 198| ValueCategory = prvalue -# 198| 0: p -# 198| Type = int * +# 198| 0: [VariableAccess]: p +# 198| Type = [IntPointerType]: int * # 198| ValueCategory = prvalue(load) -# 198| 1: q -# 198| Type = int * +# 198| 1: [VariableAccess]: q +# 198| Type = [IntPointerType]: int * # 198| ValueCategory = prvalue(load) -# 199| 4: ExprStmt -# 199| 0: ... = ... -# 199| Type = bool +# 199| 4: [ExprStmt]: ExprStmt +# 199| 0: [AssignExpr]: ... = ... +# 199| Type = [BoolType]: bool # 199| ValueCategory = lvalue -# 199| 0: b -# 199| Type = bool +# 199| 0: [VariableAccess]: b +# 199| Type = [BoolType]: bool # 199| ValueCategory = lvalue -# 199| 1: ... > ... -# 199| Type = bool +# 199| 1: [GTExpr]: ... > ... +# 199| Type = [BoolType]: bool # 199| ValueCategory = prvalue -# 199| 0: p -# 199| Type = int * +# 199| 0: [VariableAccess]: p +# 199| Type = [IntPointerType]: int * # 199| ValueCategory = prvalue(load) -# 199| 1: q -# 199| Type = int * +# 199| 1: [VariableAccess]: q +# 199| Type = [IntPointerType]: int * # 199| ValueCategory = prvalue(load) -# 200| 5: ExprStmt -# 200| 0: ... = ... -# 200| Type = bool +# 200| 5: [ExprStmt]: ExprStmt +# 200| 0: [AssignExpr]: ... = ... +# 200| Type = [BoolType]: bool # 200| ValueCategory = lvalue -# 200| 0: b -# 200| Type = bool +# 200| 0: [VariableAccess]: b +# 200| Type = [BoolType]: bool # 200| ValueCategory = lvalue -# 200| 1: ... <= ... -# 200| Type = bool +# 200| 1: [LEExpr]: ... <= ... +# 200| Type = [BoolType]: bool # 200| ValueCategory = prvalue -# 200| 0: p -# 200| Type = int * +# 200| 0: [VariableAccess]: p +# 200| Type = [IntPointerType]: int * # 200| ValueCategory = prvalue(load) -# 200| 1: q -# 200| Type = int * +# 200| 1: [VariableAccess]: q +# 200| Type = [IntPointerType]: int * # 200| ValueCategory = prvalue(load) -# 201| 6: ExprStmt -# 201| 0: ... = ... -# 201| Type = bool +# 201| 6: [ExprStmt]: ExprStmt +# 201| 0: [AssignExpr]: ... = ... +# 201| Type = [BoolType]: bool # 201| ValueCategory = lvalue -# 201| 0: b -# 201| Type = bool +# 201| 0: [VariableAccess]: b +# 201| Type = [BoolType]: bool # 201| ValueCategory = lvalue -# 201| 1: ... >= ... -# 201| Type = bool +# 201| 1: [GEExpr]: ... >= ... +# 201| Type = [BoolType]: bool # 201| ValueCategory = prvalue -# 201| 0: p -# 201| Type = int * +# 201| 0: [VariableAccess]: p +# 201| Type = [IntPointerType]: int * # 201| ValueCategory = prvalue(load) -# 201| 1: q -# 201| Type = int * +# 201| 1: [VariableAccess]: q +# 201| Type = [IntPointerType]: int * # 201| ValueCategory = prvalue(load) -# 202| 7: return ... -# 204| void PointerCrement(int*) +# 202| 7: [ReturnStmt]: return ... +# 204| [TopLevelFunction]: void PointerCrement(int*) # 204| params: -# 204| 0: p -# 204| Type = int * -# 204| body: { ... } -# 205| 0: declaration -# 205| 0: definition of q -# 205| Type = int * -# 207| 1: ExprStmt -# 207| 0: ... = ... -# 207| Type = int * +# 204| 0: [Parameter]: p +# 204| Type = [IntPointerType]: int * +# 204| body: [Block]: { ... } +# 205| 0: [DeclStmt]: declaration +# 205| 0: [VariableDeclarationEntry]: definition of q +# 205| Type = [IntPointerType]: int * +# 207| 1: [ExprStmt]: ExprStmt +# 207| 0: [AssignExpr]: ... = ... +# 207| Type = [IntPointerType]: int * # 207| ValueCategory = lvalue -# 207| 0: q -# 207| Type = int * +# 207| 0: [VariableAccess]: q +# 207| Type = [IntPointerType]: int * # 207| ValueCategory = lvalue -# 207| 1: ++ ... -# 207| Type = int * +# 207| 1: [PrefixIncrExpr]: ++ ... +# 207| Type = [IntPointerType]: int * # 207| ValueCategory = prvalue -# 207| 0: p -# 207| Type = int * +# 207| 0: [VariableAccess]: p +# 207| Type = [IntPointerType]: int * # 207| ValueCategory = lvalue -# 208| 2: ExprStmt -# 208| 0: ... = ... -# 208| Type = int * +# 208| 2: [ExprStmt]: ExprStmt +# 208| 0: [AssignExpr]: ... = ... +# 208| Type = [IntPointerType]: int * # 208| ValueCategory = lvalue -# 208| 0: q -# 208| Type = int * +# 208| 0: [VariableAccess]: q +# 208| Type = [IntPointerType]: int * # 208| ValueCategory = lvalue -# 208| 1: -- ... -# 208| Type = int * +# 208| 1: [PrefixDecrExpr]: -- ... +# 208| Type = [IntPointerType]: int * # 208| ValueCategory = prvalue -# 208| 0: p -# 208| Type = int * +# 208| 0: [VariableAccess]: p +# 208| Type = [IntPointerType]: int * # 208| ValueCategory = lvalue -# 209| 3: ExprStmt -# 209| 0: ... = ... -# 209| Type = int * +# 209| 3: [ExprStmt]: ExprStmt +# 209| 0: [AssignExpr]: ... = ... +# 209| Type = [IntPointerType]: int * # 209| ValueCategory = lvalue -# 209| 0: q -# 209| Type = int * +# 209| 0: [VariableAccess]: q +# 209| Type = [IntPointerType]: int * # 209| ValueCategory = lvalue -# 209| 1: ... ++ -# 209| Type = int * +# 209| 1: [PostfixIncrExpr]: ... ++ +# 209| Type = [IntPointerType]: int * # 209| ValueCategory = prvalue -# 209| 0: p -# 209| Type = int * +# 209| 0: [VariableAccess]: p +# 209| Type = [IntPointerType]: int * # 209| ValueCategory = lvalue -# 210| 4: ExprStmt -# 210| 0: ... = ... -# 210| Type = int * +# 210| 4: [ExprStmt]: ExprStmt +# 210| 0: [AssignExpr]: ... = ... +# 210| Type = [IntPointerType]: int * # 210| ValueCategory = lvalue -# 210| 0: q -# 210| Type = int * +# 210| 0: [VariableAccess]: q +# 210| Type = [IntPointerType]: int * # 210| ValueCategory = lvalue -# 210| 1: ... -- -# 210| Type = int * +# 210| 1: [PostfixDecrExpr]: ... -- +# 210| Type = [IntPointerType]: int * # 210| ValueCategory = prvalue -# 210| 0: p -# 210| Type = int * +# 210| 0: [VariableAccess]: p +# 210| Type = [IntPointerType]: int * # 210| ValueCategory = lvalue -# 211| 5: return ... -# 213| void CompoundAssignment() +# 211| 5: [ReturnStmt]: return ... +# 213| [TopLevelFunction]: void CompoundAssignment() # 213| params: -# 213| body: { ... } -# 215| 0: declaration -# 215| 0: definition of x -# 215| Type = int -# 215| init: initializer for x -# 215| expr: 5 -# 215| Type = int -# 215| Value = 5 +# 213| body: [Block]: { ... } +# 215| 0: [DeclStmt]: declaration +# 215| 0: [VariableDeclarationEntry]: definition of x +# 215| Type = [IntType]: int +# 215| init: [Initializer]: initializer for x +# 215| expr: [Literal]: 5 +# 215| Type = [IntType]: int +# 215| Value = [Literal]: 5 # 215| ValueCategory = prvalue -# 216| 1: ExprStmt -# 216| 0: ... += ... -# 216| Type = int +# 216| 1: [ExprStmt]: ExprStmt +# 216| 0: [AssignAddExpr]: ... += ... +# 216| Type = [IntType]: int # 216| ValueCategory = lvalue -# 216| 0: x -# 216| Type = int +# 216| 0: [VariableAccess]: x +# 216| Type = [IntType]: int # 216| ValueCategory = lvalue -# 216| 1: 7 -# 216| Type = int -# 216| Value = 7 +# 216| 1: [Literal]: 7 +# 216| Type = [IntType]: int +# 216| Value = [Literal]: 7 # 216| ValueCategory = prvalue -# 219| 2: declaration -# 219| 0: definition of y -# 219| Type = short -# 219| init: initializer for y -# 219| expr: (short)... +# 219| 2: [DeclStmt]: declaration +# 219| 0: [VariableDeclarationEntry]: definition of y +# 219| Type = [ShortType]: short +# 219| init: [Initializer]: initializer for y +# 219| expr: [IntegralConversion]: (short)... # 219| Conversion = integral conversion -# 219| Type = short -# 219| Value = 5 +# 219| Type = [ShortType]: short +# 219| Value = [IntegralConversion]: 5 # 219| ValueCategory = prvalue -# 219| expr: 5 -# 219| Type = int -# 219| Value = 5 +# 219| expr: [Literal]: 5 +# 219| Type = [IntType]: int +# 219| Value = [Literal]: 5 # 219| ValueCategory = prvalue -# 220| 3: ExprStmt -# 220| 0: ... += ... -# 220| Type = short +# 220| 3: [ExprStmt]: ExprStmt +# 220| 0: [AssignAddExpr]: ... += ... +# 220| Type = [ShortType]: short # 220| ValueCategory = lvalue -# 220| 0: y -# 220| Type = short +# 220| 0: [VariableAccess]: y +# 220| Type = [ShortType]: short # 220| ValueCategory = lvalue -# 220| 1: x -# 220| Type = int +# 220| 1: [VariableAccess]: x +# 220| Type = [IntType]: int # 220| ValueCategory = prvalue(load) -# 223| 4: ExprStmt -# 223| 0: ... <<= ... -# 223| Type = short +# 223| 4: [ExprStmt]: ExprStmt +# 223| 0: [AssignLShiftExpr]: ... <<= ... +# 223| Type = [ShortType]: short # 223| ValueCategory = lvalue -# 223| 0: y -# 223| Type = short +# 223| 0: [VariableAccess]: y +# 223| Type = [ShortType]: short # 223| ValueCategory = lvalue -# 223| 1: 1 -# 223| Type = int -# 223| Value = 1 +# 223| 1: [Literal]: 1 +# 223| Type = [IntType]: int +# 223| Value = [Literal]: 1 # 223| ValueCategory = prvalue -# 226| 5: declaration -# 226| 0: definition of z -# 226| Type = long -# 226| init: initializer for z -# 226| expr: (long)... +# 226| 5: [DeclStmt]: declaration +# 226| 0: [VariableDeclarationEntry]: definition of z +# 226| Type = [LongType]: long +# 226| init: [Initializer]: initializer for z +# 226| expr: [IntegralConversion]: (long)... # 226| Conversion = integral conversion -# 226| Type = long -# 226| Value = 7 +# 226| Type = [LongType]: long +# 226| Value = [IntegralConversion]: 7 # 226| ValueCategory = prvalue -# 226| expr: 7 -# 226| Type = int -# 226| Value = 7 +# 226| expr: [Literal]: 7 +# 226| Type = [IntType]: int +# 226| Value = [Literal]: 7 # 226| ValueCategory = prvalue -# 227| 6: ExprStmt -# 227| 0: ... += ... -# 227| Type = long +# 227| 6: [ExprStmt]: ExprStmt +# 227| 0: [AssignAddExpr]: ... += ... +# 227| Type = [LongType]: long # 227| ValueCategory = lvalue -# 227| 0: z -# 227| Type = long +# 227| 0: [VariableAccess]: z +# 227| Type = [LongType]: long # 227| ValueCategory = lvalue -# 227| 1: 2.0 -# 227| Type = float -# 227| Value = 2.0 +# 227| 1: [Literal]: 2.0 +# 227| Type = [FloatType]: float +# 227| Value = [Literal]: 2.0 # 227| ValueCategory = prvalue -# 228| 7: return ... -# 230| void UninitializedVariables() +# 228| 7: [ReturnStmt]: return ... +# 230| [TopLevelFunction]: void UninitializedVariables() # 230| params: -# 230| body: { ... } -# 231| 0: declaration -# 231| 0: definition of x -# 231| Type = int -# 232| 1: declaration -# 232| 0: definition of y -# 232| Type = int -# 232| init: initializer for y -# 232| expr: x -# 232| Type = int +# 230| body: [Block]: { ... } +# 231| 0: [DeclStmt]: declaration +# 231| 0: [VariableDeclarationEntry]: definition of x +# 231| Type = [IntType]: int +# 232| 1: [DeclStmt]: declaration +# 232| 0: [VariableDeclarationEntry]: definition of y +# 232| Type = [IntType]: int +# 232| init: [Initializer]: initializer for y +# 232| expr: [VariableAccess]: x +# 232| Type = [IntType]: int # 232| ValueCategory = prvalue(load) -# 233| 2: return ... -# 235| int Parameters(int, int) +# 233| 2: [ReturnStmt]: return ... +# 235| [TopLevelFunction]: int Parameters(int, int) # 235| params: -# 235| 0: x -# 235| Type = int -# 235| 1: y -# 235| Type = int -# 235| body: { ... } -# 236| 0: return ... -# 236| 0: ... % ... -# 236| Type = int +# 235| 0: [Parameter]: x +# 235| Type = [IntType]: int +# 235| 1: [Parameter]: y +# 235| Type = [IntType]: int +# 235| body: [Block]: { ... } +# 236| 0: [ReturnStmt]: return ... +# 236| 0: [RemExpr]: ... % ... +# 236| Type = [IntType]: int # 236| ValueCategory = prvalue -# 236| 0: x -# 236| Type = int +# 236| 0: [VariableAccess]: x +# 236| Type = [IntType]: int # 236| ValueCategory = prvalue(load) -# 236| 1: y -# 236| Type = int +# 236| 1: [VariableAccess]: y +# 236| Type = [IntType]: int # 236| ValueCategory = prvalue(load) -# 239| void IfStatements(bool, int, int) +# 239| [TopLevelFunction]: void IfStatements(bool, int, int) # 239| params: -# 239| 0: b -# 239| Type = bool -# 239| 1: x -# 239| Type = int -# 239| 2: y -# 239| Type = int -# 239| body: { ... } -# 240| 0: if (...) ... -# 240| 0: b -# 240| Type = bool +# 239| 0: [Parameter]: b +# 239| Type = [BoolType]: bool +# 239| 1: [Parameter]: x +# 239| Type = [IntType]: int +# 239| 2: [Parameter]: y +# 239| Type = [IntType]: int +# 239| body: [Block]: { ... } +# 240| 0: [IfStmt]: if (...) ... +# 240| 0: [VariableAccess]: b +# 240| Type = [BoolType]: bool # 240| ValueCategory = prvalue(load) -# 240| 1: { ... } -# 243| 1: if (...) ... -# 243| 0: b -# 243| Type = bool +# 240| 1: [Block]: { ... } +# 243| 1: [IfStmt]: if (...) ... +# 243| 0: [VariableAccess]: b +# 243| Type = [BoolType]: bool # 243| ValueCategory = prvalue(load) -# 243| 1: { ... } -# 244| 0: ExprStmt -# 244| 0: ... = ... -# 244| Type = int +# 243| 1: [Block]: { ... } +# 244| 0: [ExprStmt]: ExprStmt +# 244| 0: [AssignExpr]: ... = ... +# 244| Type = [IntType]: int # 244| ValueCategory = lvalue -# 244| 0: x -# 244| Type = int +# 244| 0: [VariableAccess]: x +# 244| Type = [IntType]: int # 244| ValueCategory = lvalue -# 244| 1: y -# 244| Type = int +# 244| 1: [VariableAccess]: y +# 244| Type = [IntType]: int # 244| ValueCategory = prvalue(load) -# 247| 2: if (...) ... -# 247| 0: ... < ... -# 247| Type = bool +# 247| 2: [IfStmt]: if (...) ... +# 247| 0: [LTExpr]: ... < ... +# 247| Type = [BoolType]: bool # 247| ValueCategory = prvalue -# 247| 0: x -# 247| Type = int +# 247| 0: [VariableAccess]: x +# 247| Type = [IntType]: int # 247| ValueCategory = prvalue(load) -# 247| 1: 7 -# 247| Type = int -# 247| Value = 7 +# 247| 1: [Literal]: 7 +# 247| Type = [IntType]: int +# 247| Value = [Literal]: 7 # 247| ValueCategory = prvalue -# 248| 1: ExprStmt -# 248| 0: ... = ... -# 248| Type = int +# 248| 1: [ExprStmt]: ExprStmt +# 248| 0: [AssignExpr]: ... = ... +# 248| Type = [IntType]: int # 248| ValueCategory = lvalue -# 248| 0: x -# 248| Type = int +# 248| 0: [VariableAccess]: x +# 248| Type = [IntType]: int # 248| ValueCategory = lvalue -# 248| 1: 2 -# 248| Type = int -# 248| Value = 2 +# 248| 1: [Literal]: 2 +# 248| Type = [IntType]: int +# 248| Value = [Literal]: 2 # 248| ValueCategory = prvalue -# 250| 2: ExprStmt -# 250| 0: ... = ... -# 250| Type = int +# 250| 2: [ExprStmt]: ExprStmt +# 250| 0: [AssignExpr]: ... = ... +# 250| Type = [IntType]: int # 250| ValueCategory = lvalue -# 250| 0: x -# 250| Type = int +# 250| 0: [VariableAccess]: x +# 250| Type = [IntType]: int # 250| ValueCategory = lvalue -# 250| 1: 7 -# 250| Type = int -# 250| Value = 7 +# 250| 1: [Literal]: 7 +# 250| Type = [IntType]: int +# 250| Value = [Literal]: 7 # 250| ValueCategory = prvalue -# 251| 3: return ... -# 253| void WhileStatements(int) +# 251| 3: [ReturnStmt]: return ... +# 253| [TopLevelFunction]: void WhileStatements(int) # 253| params: -# 253| 0: n -# 253| Type = int -# 253| body: { ... } -# 254| 0: while (...) ... -# 254| 0: ... > ... -# 254| Type = bool +# 253| 0: [Parameter]: n +# 253| Type = [IntType]: int +# 253| body: [Block]: { ... } +# 254| 0: [WhileStmt]: while (...) ... +# 254| 0: [GTExpr]: ... > ... +# 254| Type = [BoolType]: bool # 254| ValueCategory = prvalue -# 254| 0: n -# 254| Type = int +# 254| 0: [VariableAccess]: n +# 254| Type = [IntType]: int # 254| ValueCategory = prvalue(load) -# 254| 1: 0 -# 254| Type = int -# 254| Value = 0 +# 254| 1: [Zero]: 0 +# 254| Type = [IntType]: int +# 254| Value = [Zero]: 0 # 254| ValueCategory = prvalue -# 254| 1: { ... } -# 255| 0: ExprStmt -# 255| 0: ... -= ... -# 255| Type = int +# 254| 1: [Block]: { ... } +# 255| 0: [ExprStmt]: ExprStmt +# 255| 0: [AssignSubExpr]: ... -= ... +# 255| Type = [IntType]: int # 255| ValueCategory = lvalue -# 255| 0: n -# 255| Type = int +# 255| 0: [VariableAccess]: n +# 255| Type = [IntType]: int # 255| ValueCategory = lvalue -# 255| 1: 1 -# 255| Type = int -# 255| Value = 1 +# 255| 1: [Literal]: 1 +# 255| Type = [IntType]: int +# 255| Value = [Literal]: 1 # 255| ValueCategory = prvalue -# 257| 1: return ... -# 259| void DoStatements(int) +# 257| 1: [ReturnStmt]: return ... +# 259| [TopLevelFunction]: void DoStatements(int) # 259| params: -# 259| 0: n -# 259| Type = int -# 259| body: { ... } -# 260| 0: do (...) ... -# 262| 0: ... > ... -# 262| Type = bool +# 259| 0: [Parameter]: n +# 259| Type = [IntType]: int +# 259| body: [Block]: { ... } +# 260| 0: [DoStmt]: do (...) ... +# 262| 0: [GTExpr]: ... > ... +# 262| Type = [BoolType]: bool # 262| ValueCategory = prvalue -# 262| 0: n -# 262| Type = int +# 262| 0: [VariableAccess]: n +# 262| Type = [IntType]: int # 262| ValueCategory = prvalue(load) -# 262| 1: 0 -# 262| Type = int -# 262| Value = 0 +# 262| 1: [Zero]: 0 +# 262| Type = [IntType]: int +# 262| Value = [Zero]: 0 # 262| ValueCategory = prvalue -# 260| 1: { ... } -# 261| 0: ExprStmt -# 261| 0: ... -= ... -# 261| Type = int +# 260| 1: [Block]: { ... } +# 261| 0: [ExprStmt]: ExprStmt +# 261| 0: [AssignSubExpr]: ... -= ... +# 261| Type = [IntType]: int # 261| ValueCategory = lvalue -# 261| 0: n -# 261| Type = int +# 261| 0: [VariableAccess]: n +# 261| Type = [IntType]: int # 261| ValueCategory = lvalue -# 261| 1: 1 -# 261| Type = int -# 261| Value = 1 +# 261| 1: [Literal]: 1 +# 261| Type = [IntType]: int +# 261| Value = [Literal]: 1 # 261| ValueCategory = prvalue -# 263| 1: return ... -# 265| void For_Empty() +# 263| 1: [ReturnStmt]: return ... +# 265| [TopLevelFunction]: void For_Empty() # 265| params: -# 265| body: { ... } -# 266| 0: declaration -# 266| 0: definition of j -# 266| Type = int -# 267| 1: for(...;...;...) ... -# 267| 3: { ... } -# 268| 0: ; -# 272| void For_Init() +# 265| body: [Block]: { ... } +# 266| 0: [DeclStmt]: declaration +# 266| 0: [VariableDeclarationEntry]: definition of j +# 266| Type = [IntType]: int +# 267| 1: [ForStmt]: for(...;...;...) ... +# 267| 3: [Block]: { ... } +# 268| 0: [EmptyStmt]: ; +# 272| [TopLevelFunction]: void For_Init() # 272| params: -# 272| body: { ... } -# 273| 0: for(...;...;...) ... -# 273| 0: declaration -# 273| 0: definition of i -# 273| Type = int -# 273| init: initializer for i -# 273| expr: 0 -# 273| Type = int -# 273| Value = 0 +# 272| body: [Block]: { ... } +# 273| 0: [ForStmt]: for(...;...;...) ... +# 273| 0: [DeclStmt]: declaration +# 273| 0: [VariableDeclarationEntry]: definition of i +# 273| Type = [IntType]: int +# 273| init: [Initializer]: initializer for i +# 273| expr: [Zero]: 0 +# 273| Type = [IntType]: int +# 273| Value = [Zero]: 0 # 273| ValueCategory = prvalue -# 273| 3: { ... } -# 274| 0: ; -# 278| void For_Condition() +# 273| 3: [Block]: { ... } +# 274| 0: [EmptyStmt]: ; +# 278| [TopLevelFunction]: void For_Condition() # 278| params: -# 278| body: { ... } -# 279| 0: declaration -# 279| 0: definition of i -# 279| Type = int -# 279| init: initializer for i -# 279| expr: 0 -# 279| Type = int -# 279| Value = 0 +# 278| body: [Block]: { ... } +# 279| 0: [DeclStmt]: declaration +# 279| 0: [VariableDeclarationEntry]: definition of i +# 279| Type = [IntType]: int +# 279| init: [Initializer]: initializer for i +# 279| expr: [Zero]: 0 +# 279| Type = [IntType]: int +# 279| Value = [Zero]: 0 # 279| ValueCategory = prvalue -# 280| 1: for(...;...;...) ... -# 280| 1: ... < ... -# 280| Type = bool +# 280| 1: [ForStmt]: for(...;...;...) ... +# 280| 1: [LTExpr]: ... < ... +# 280| Type = [BoolType]: bool # 280| ValueCategory = prvalue -# 280| 0: i -# 280| Type = int +# 280| 0: [VariableAccess]: i +# 280| Type = [IntType]: int # 280| ValueCategory = prvalue(load) -# 280| 1: 10 -# 280| Type = int -# 280| Value = 10 +# 280| 1: [Literal]: 10 +# 280| Type = [IntType]: int +# 280| Value = [Literal]: 10 # 280| ValueCategory = prvalue -# 280| 3: { ... } -# 281| 0: ; -# 283| 2: return ... -# 285| void For_Update() +# 280| 3: [Block]: { ... } +# 281| 0: [EmptyStmt]: ; +# 283| 2: [ReturnStmt]: return ... +# 285| [TopLevelFunction]: void For_Update() # 285| params: -# 285| body: { ... } -# 286| 0: declaration -# 286| 0: definition of i -# 286| Type = int -# 286| init: initializer for i -# 286| expr: 0 -# 286| Type = int -# 286| Value = 0 +# 285| body: [Block]: { ... } +# 286| 0: [DeclStmt]: declaration +# 286| 0: [VariableDeclarationEntry]: definition of i +# 286| Type = [IntType]: int +# 286| init: [Initializer]: initializer for i +# 286| expr: [Zero]: 0 +# 286| Type = [IntType]: int +# 286| Value = [Zero]: 0 # 286| ValueCategory = prvalue -# 287| 1: for(...;...;...) ... -# 287| 2: ... += ... -# 287| Type = int +# 287| 1: [ForStmt]: for(...;...;...) ... +# 287| 2: [AssignAddExpr]: ... += ... +# 287| Type = [IntType]: int # 287| ValueCategory = lvalue -# 287| 0: i -# 287| Type = int +# 287| 0: [VariableAccess]: i +# 287| Type = [IntType]: int # 287| ValueCategory = lvalue -# 287| 1: 1 -# 287| Type = int -# 287| Value = 1 +# 287| 1: [Literal]: 1 +# 287| Type = [IntType]: int +# 287| Value = [Literal]: 1 # 287| ValueCategory = prvalue -# 287| 3: { ... } -# 288| 0: ; -# 292| void For_InitCondition() +# 287| 3: [Block]: { ... } +# 288| 0: [EmptyStmt]: ; +# 292| [TopLevelFunction]: void For_InitCondition() # 292| params: -# 292| body: { ... } -# 293| 0: for(...;...;...) ... -# 293| 0: declaration -# 293| 0: definition of i -# 293| Type = int -# 293| init: initializer for i -# 293| expr: 0 -# 293| Type = int -# 293| Value = 0 +# 292| body: [Block]: { ... } +# 293| 0: [ForStmt]: for(...;...;...) ... +# 293| 0: [DeclStmt]: declaration +# 293| 0: [VariableDeclarationEntry]: definition of i +# 293| Type = [IntType]: int +# 293| init: [Initializer]: initializer for i +# 293| expr: [Zero]: 0 +# 293| Type = [IntType]: int +# 293| Value = [Zero]: 0 # 293| ValueCategory = prvalue -# 293| 1: ... < ... -# 293| Type = bool +# 293| 1: [LTExpr]: ... < ... +# 293| Type = [BoolType]: bool # 293| ValueCategory = prvalue -# 293| 0: i -# 293| Type = int +# 293| 0: [VariableAccess]: i +# 293| Type = [IntType]: int # 293| ValueCategory = prvalue(load) -# 293| 1: 10 -# 293| Type = int -# 293| Value = 10 +# 293| 1: [Literal]: 10 +# 293| Type = [IntType]: int +# 293| Value = [Literal]: 10 # 293| ValueCategory = prvalue -# 293| 3: { ... } -# 294| 0: ; -# 296| 1: return ... -# 298| void For_InitUpdate() +# 293| 3: [Block]: { ... } +# 294| 0: [EmptyStmt]: ; +# 296| 1: [ReturnStmt]: return ... +# 298| [TopLevelFunction]: void For_InitUpdate() # 298| params: -# 298| body: { ... } -# 299| 0: for(...;...;...) ... -# 299| 0: declaration -# 299| 0: definition of i -# 299| Type = int -# 299| init: initializer for i -# 299| expr: 0 -# 299| Type = int -# 299| Value = 0 +# 298| body: [Block]: { ... } +# 299| 0: [ForStmt]: for(...;...;...) ... +# 299| 0: [DeclStmt]: declaration +# 299| 0: [VariableDeclarationEntry]: definition of i +# 299| Type = [IntType]: int +# 299| init: [Initializer]: initializer for i +# 299| expr: [Zero]: 0 +# 299| Type = [IntType]: int +# 299| Value = [Zero]: 0 # 299| ValueCategory = prvalue -# 299| 2: ... += ... -# 299| Type = int +# 299| 2: [AssignAddExpr]: ... += ... +# 299| Type = [IntType]: int # 299| ValueCategory = lvalue -# 299| 0: i -# 299| Type = int +# 299| 0: [VariableAccess]: i +# 299| Type = [IntType]: int # 299| ValueCategory = lvalue -# 299| 1: 1 -# 299| Type = int -# 299| Value = 1 +# 299| 1: [Literal]: 1 +# 299| Type = [IntType]: int +# 299| Value = [Literal]: 1 # 299| ValueCategory = prvalue -# 299| 3: { ... } -# 300| 0: ; -# 304| void For_ConditionUpdate() +# 299| 3: [Block]: { ... } +# 300| 0: [EmptyStmt]: ; +# 304| [TopLevelFunction]: void For_ConditionUpdate() # 304| params: -# 304| body: { ... } -# 305| 0: declaration -# 305| 0: definition of i -# 305| Type = int -# 305| init: initializer for i -# 305| expr: 0 -# 305| Type = int -# 305| Value = 0 +# 304| body: [Block]: { ... } +# 305| 0: [DeclStmt]: declaration +# 305| 0: [VariableDeclarationEntry]: definition of i +# 305| Type = [IntType]: int +# 305| init: [Initializer]: initializer for i +# 305| expr: [Zero]: 0 +# 305| Type = [IntType]: int +# 305| Value = [Zero]: 0 # 305| ValueCategory = prvalue -# 306| 1: for(...;...;...) ... -# 306| 1: ... < ... -# 306| Type = bool +# 306| 1: [ForStmt]: for(...;...;...) ... +# 306| 1: [LTExpr]: ... < ... +# 306| Type = [BoolType]: bool # 306| ValueCategory = prvalue -# 306| 0: i -# 306| Type = int +# 306| 0: [VariableAccess]: i +# 306| Type = [IntType]: int # 306| ValueCategory = prvalue(load) -# 306| 1: 10 -# 306| Type = int -# 306| Value = 10 +# 306| 1: [Literal]: 10 +# 306| Type = [IntType]: int +# 306| Value = [Literal]: 10 # 306| ValueCategory = prvalue -# 306| 2: ... += ... -# 306| Type = int +# 306| 2: [AssignAddExpr]: ... += ... +# 306| Type = [IntType]: int # 306| ValueCategory = lvalue -# 306| 0: i -# 306| Type = int +# 306| 0: [VariableAccess]: i +# 306| Type = [IntType]: int # 306| ValueCategory = lvalue -# 306| 1: 1 -# 306| Type = int -# 306| Value = 1 +# 306| 1: [Literal]: 1 +# 306| Type = [IntType]: int +# 306| Value = [Literal]: 1 # 306| ValueCategory = prvalue -# 306| 3: { ... } -# 307| 0: ; -# 309| 2: return ... -# 311| void For_InitConditionUpdate() +# 306| 3: [Block]: { ... } +# 307| 0: [EmptyStmt]: ; +# 309| 2: [ReturnStmt]: return ... +# 311| [TopLevelFunction]: void For_InitConditionUpdate() # 311| params: -# 311| body: { ... } -# 312| 0: for(...;...;...) ... -# 312| 0: declaration -# 312| 0: definition of i -# 312| Type = int -# 312| init: initializer for i -# 312| expr: 0 -# 312| Type = int -# 312| Value = 0 +# 311| body: [Block]: { ... } +# 312| 0: [ForStmt]: for(...;...;...) ... +# 312| 0: [DeclStmt]: declaration +# 312| 0: [VariableDeclarationEntry]: definition of i +# 312| Type = [IntType]: int +# 312| init: [Initializer]: initializer for i +# 312| expr: [Zero]: 0 +# 312| Type = [IntType]: int +# 312| Value = [Zero]: 0 # 312| ValueCategory = prvalue -# 312| 1: ... < ... -# 312| Type = bool +# 312| 1: [LTExpr]: ... < ... +# 312| Type = [BoolType]: bool # 312| ValueCategory = prvalue -# 312| 0: i -# 312| Type = int +# 312| 0: [VariableAccess]: i +# 312| Type = [IntType]: int # 312| ValueCategory = prvalue(load) -# 312| 1: 10 -# 312| Type = int -# 312| Value = 10 +# 312| 1: [Literal]: 10 +# 312| Type = [IntType]: int +# 312| Value = [Literal]: 10 # 312| ValueCategory = prvalue -# 312| 2: ... += ... -# 312| Type = int +# 312| 2: [AssignAddExpr]: ... += ... +# 312| Type = [IntType]: int # 312| ValueCategory = lvalue -# 312| 0: i -# 312| Type = int +# 312| 0: [VariableAccess]: i +# 312| Type = [IntType]: int # 312| ValueCategory = lvalue -# 312| 1: 1 -# 312| Type = int -# 312| Value = 1 +# 312| 1: [Literal]: 1 +# 312| Type = [IntType]: int +# 312| Value = [Literal]: 1 # 312| ValueCategory = prvalue -# 312| 3: { ... } -# 313| 0: ; -# 315| 1: return ... -# 317| void For_Break() +# 312| 3: [Block]: { ... } +# 313| 0: [EmptyStmt]: ; +# 315| 1: [ReturnStmt]: return ... +# 317| [TopLevelFunction]: void For_Break() # 317| params: -# 317| body: { ... } -# 318| 0: for(...;...;...) ... -# 318| 0: declaration -# 318| 0: definition of i -# 318| Type = int -# 318| init: initializer for i -# 318| expr: 0 -# 318| Type = int -# 318| Value = 0 +# 317| body: [Block]: { ... } +# 318| 0: [ForStmt]: for(...;...;...) ... +# 318| 0: [DeclStmt]: declaration +# 318| 0: [VariableDeclarationEntry]: definition of i +# 318| Type = [IntType]: int +# 318| init: [Initializer]: initializer for i +# 318| expr: [Zero]: 0 +# 318| Type = [IntType]: int +# 318| Value = [Zero]: 0 # 318| ValueCategory = prvalue -# 318| 1: ... < ... -# 318| Type = bool +# 318| 1: [LTExpr]: ... < ... +# 318| Type = [BoolType]: bool # 318| ValueCategory = prvalue -# 318| 0: i -# 318| Type = int +# 318| 0: [VariableAccess]: i +# 318| Type = [IntType]: int # 318| ValueCategory = prvalue(load) -# 318| 1: 10 -# 318| Type = int -# 318| Value = 10 +# 318| 1: [Literal]: 10 +# 318| Type = [IntType]: int +# 318| Value = [Literal]: 10 # 318| ValueCategory = prvalue -# 318| 2: ... += ... -# 318| Type = int +# 318| 2: [AssignAddExpr]: ... += ... +# 318| Type = [IntType]: int # 318| ValueCategory = lvalue -# 318| 0: i -# 318| Type = int +# 318| 0: [VariableAccess]: i +# 318| Type = [IntType]: int # 318| ValueCategory = lvalue -# 318| 1: 1 -# 318| Type = int -# 318| Value = 1 +# 318| 1: [Literal]: 1 +# 318| Type = [IntType]: int +# 318| Value = [Literal]: 1 # 318| ValueCategory = prvalue -# 318| 3: { ... } -# 319| 0: if (...) ... -# 319| 0: ... == ... -# 319| Type = bool +# 318| 3: [Block]: { ... } +# 319| 0: [IfStmt]: if (...) ... +# 319| 0: [EQExpr]: ... == ... +# 319| Type = [BoolType]: bool # 319| ValueCategory = prvalue -# 319| 0: i -# 319| Type = int +# 319| 0: [VariableAccess]: i +# 319| Type = [IntType]: int # 319| ValueCategory = prvalue(load) -# 319| 1: 5 -# 319| Type = int -# 319| Value = 5 +# 319| 1: [Literal]: 5 +# 319| Type = [IntType]: int +# 319| Value = [Literal]: 5 # 319| ValueCategory = prvalue -# 319| 1: { ... } -# 320| 0: break; -# 322| 1: label ...: -# 323| 2: return ... -# 325| void For_Continue_Update() +# 319| 1: [Block]: { ... } +# 320| 0: [BreakStmt]: break; +# 322| 1: [LabelStmt]: label ...: +# 323| 2: [ReturnStmt]: return ... +# 325| [TopLevelFunction]: void For_Continue_Update() # 325| params: -# 325| body: { ... } -# 326| 0: for(...;...;...) ... -# 326| 0: declaration -# 326| 0: definition of i -# 326| Type = int -# 326| init: initializer for i -# 326| expr: 0 -# 326| Type = int -# 326| Value = 0 +# 325| body: [Block]: { ... } +# 326| 0: [ForStmt]: for(...;...;...) ... +# 326| 0: [DeclStmt]: declaration +# 326| 0: [VariableDeclarationEntry]: definition of i +# 326| Type = [IntType]: int +# 326| init: [Initializer]: initializer for i +# 326| expr: [Zero]: 0 +# 326| Type = [IntType]: int +# 326| Value = [Zero]: 0 # 326| ValueCategory = prvalue -# 326| 1: ... < ... -# 326| Type = bool +# 326| 1: [LTExpr]: ... < ... +# 326| Type = [BoolType]: bool # 326| ValueCategory = prvalue -# 326| 0: i -# 326| Type = int +# 326| 0: [VariableAccess]: i +# 326| Type = [IntType]: int # 326| ValueCategory = prvalue(load) -# 326| 1: 10 -# 326| Type = int -# 326| Value = 10 +# 326| 1: [Literal]: 10 +# 326| Type = [IntType]: int +# 326| Value = [Literal]: 10 # 326| ValueCategory = prvalue -# 326| 2: ... += ... -# 326| Type = int +# 326| 2: [AssignAddExpr]: ... += ... +# 326| Type = [IntType]: int # 326| ValueCategory = lvalue -# 326| 0: i -# 326| Type = int +# 326| 0: [VariableAccess]: i +# 326| Type = [IntType]: int # 326| ValueCategory = lvalue -# 326| 1: 1 -# 326| Type = int -# 326| Value = 1 +# 326| 1: [Literal]: 1 +# 326| Type = [IntType]: int +# 326| Value = [Literal]: 1 # 326| ValueCategory = prvalue -# 326| 3: { ... } -# 327| 0: if (...) ... -# 327| 0: ... == ... -# 327| Type = bool +# 326| 3: [Block]: { ... } +# 327| 0: [IfStmt]: if (...) ... +# 327| 0: [EQExpr]: ... == ... +# 327| Type = [BoolType]: bool # 327| ValueCategory = prvalue -# 327| 0: i -# 327| Type = int +# 327| 0: [VariableAccess]: i +# 327| Type = [IntType]: int # 327| ValueCategory = prvalue(load) -# 327| 1: 5 -# 327| Type = int -# 327| Value = 5 +# 327| 1: [Literal]: 5 +# 327| Type = [IntType]: int +# 327| Value = [Literal]: 5 # 327| ValueCategory = prvalue -# 327| 1: { ... } -# 328| 0: continue; -# 326| 1: label ...: -# 331| 1: return ... -# 333| void For_Continue_NoUpdate() +# 327| 1: [Block]: { ... } +# 328| 0: [ContinueStmt]: continue; +# 326| 1: [LabelStmt]: label ...: +# 331| 1: [ReturnStmt]: return ... +# 333| [TopLevelFunction]: void For_Continue_NoUpdate() # 333| params: -# 333| body: { ... } -# 334| 0: for(...;...;...) ... -# 334| 0: declaration -# 334| 0: definition of i -# 334| Type = int -# 334| init: initializer for i -# 334| expr: 0 -# 334| Type = int -# 334| Value = 0 +# 333| body: [Block]: { ... } +# 334| 0: [ForStmt]: for(...;...;...) ... +# 334| 0: [DeclStmt]: declaration +# 334| 0: [VariableDeclarationEntry]: definition of i +# 334| Type = [IntType]: int +# 334| init: [Initializer]: initializer for i +# 334| expr: [Zero]: 0 +# 334| Type = [IntType]: int +# 334| Value = [Zero]: 0 # 334| ValueCategory = prvalue -# 334| 1: ... < ... -# 334| Type = bool +# 334| 1: [LTExpr]: ... < ... +# 334| Type = [BoolType]: bool # 334| ValueCategory = prvalue -# 334| 0: i -# 334| Type = int +# 334| 0: [VariableAccess]: i +# 334| Type = [IntType]: int # 334| ValueCategory = prvalue(load) -# 334| 1: 10 -# 334| Type = int -# 334| Value = 10 +# 334| 1: [Literal]: 10 +# 334| Type = [IntType]: int +# 334| Value = [Literal]: 10 # 334| ValueCategory = prvalue -# 334| 3: { ... } -# 335| 0: if (...) ... -# 335| 0: ... == ... -# 335| Type = bool +# 334| 3: [Block]: { ... } +# 335| 0: [IfStmt]: if (...) ... +# 335| 0: [EQExpr]: ... == ... +# 335| Type = [BoolType]: bool # 335| ValueCategory = prvalue -# 335| 0: i -# 335| Type = int +# 335| 0: [VariableAccess]: i +# 335| Type = [IntType]: int # 335| ValueCategory = prvalue(load) -# 335| 1: 5 -# 335| Type = int -# 335| Value = 5 +# 335| 1: [Literal]: 5 +# 335| Type = [IntType]: int +# 335| Value = [Literal]: 5 # 335| ValueCategory = prvalue -# 335| 1: { ... } -# 336| 0: continue; -# 334| 1: label ...: -# 339| 1: return ... -# 341| int Dereference(int*) +# 335| 1: [Block]: { ... } +# 336| 0: [ContinueStmt]: continue; +# 334| 1: [LabelStmt]: label ...: +# 339| 1: [ReturnStmt]: return ... +# 341| [TopLevelFunction]: int Dereference(int*) # 341| params: -# 341| 0: p -# 341| Type = int * -# 341| body: { ... } -# 342| 0: ExprStmt -# 342| 0: ... = ... -# 342| Type = int +# 341| 0: [Parameter]: p +# 341| Type = [IntPointerType]: int * +# 341| body: [Block]: { ... } +# 342| 0: [ExprStmt]: ExprStmt +# 342| 0: [AssignExpr]: ... = ... +# 342| Type = [IntType]: int # 342| ValueCategory = lvalue -# 342| 0: * ... -# 342| Type = int +# 342| 0: [PointerDereferenceExpr]: * ... +# 342| Type = [IntType]: int # 342| ValueCategory = lvalue -# 342| 0: p -# 342| Type = int * +# 342| 0: [VariableAccess]: p +# 342| Type = [IntPointerType]: int * # 342| ValueCategory = prvalue(load) -# 342| 1: 1 -# 342| Type = int -# 342| Value = 1 +# 342| 1: [Literal]: 1 +# 342| Type = [IntType]: int +# 342| Value = [Literal]: 1 # 342| ValueCategory = prvalue -# 343| 1: return ... -# 343| 0: * ... -# 343| Type = int +# 343| 1: [ReturnStmt]: return ... +# 343| 0: [PointerDereferenceExpr]: * ... +# 343| Type = [IntType]: int # 343| ValueCategory = prvalue(load) -# 343| 0: p -# 343| Type = int * +# 343| 0: [VariableAccess]: p +# 343| Type = [IntPointerType]: int * # 343| ValueCategory = prvalue(load) -# 348| int* AddressOf() +# 348| [TopLevelFunction]: int* AddressOf() # 348| params: -# 348| body: { ... } -# 349| 0: return ... -# 349| 0: & ... -# 349| Type = int * +# 348| body: [Block]: { ... } +# 349| 0: [ReturnStmt]: return ... +# 349| 0: [AddressOfExpr]: & ... +# 349| Type = [IntPointerType]: int * # 349| ValueCategory = prvalue -# 349| 0: g -# 349| Type = int +# 349| 0: [VariableAccess]: g +# 349| Type = [IntType]: int # 349| ValueCategory = lvalue -# 352| void Break(int) +# 352| [TopLevelFunction]: void Break(int) # 352| params: -# 352| 0: n -# 352| Type = int -# 352| body: { ... } -# 353| 0: while (...) ... -# 353| 0: ... > ... -# 353| Type = bool +# 352| 0: [Parameter]: n +# 352| Type = [IntType]: int +# 352| body: [Block]: { ... } +# 353| 0: [WhileStmt]: while (...) ... +# 353| 0: [GTExpr]: ... > ... +# 353| Type = [BoolType]: bool # 353| ValueCategory = prvalue -# 353| 0: n -# 353| Type = int +# 353| 0: [VariableAccess]: n +# 353| Type = [IntType]: int # 353| ValueCategory = prvalue(load) -# 353| 1: 0 -# 353| Type = int -# 353| Value = 0 +# 353| 1: [Zero]: 0 +# 353| Type = [IntType]: int +# 353| Value = [Zero]: 0 # 353| ValueCategory = prvalue -# 353| 1: { ... } -# 354| 0: if (...) ... -# 354| 0: ... == ... -# 354| Type = bool +# 353| 1: [Block]: { ... } +# 354| 0: [IfStmt]: if (...) ... +# 354| 0: [EQExpr]: ... == ... +# 354| Type = [BoolType]: bool # 354| ValueCategory = prvalue -# 354| 0: n -# 354| Type = int +# 354| 0: [VariableAccess]: n +# 354| Type = [IntType]: int # 354| ValueCategory = prvalue(load) -# 354| 1: 1 -# 354| Type = int -# 354| Value = 1 +# 354| 1: [Literal]: 1 +# 354| Type = [IntType]: int +# 354| Value = [Literal]: 1 # 354| ValueCategory = prvalue -# 355| 1: break; -# 356| 1: ExprStmt -# 356| 0: ... -= ... -# 356| Type = int +# 355| 1: [BreakStmt]: break; +# 356| 1: [ExprStmt]: ExprStmt +# 356| 0: [AssignSubExpr]: ... -= ... +# 356| Type = [IntType]: int # 356| ValueCategory = lvalue -# 356| 0: n -# 356| Type = int +# 356| 0: [VariableAccess]: n +# 356| Type = [IntType]: int # 356| ValueCategory = lvalue -# 356| 1: 1 -# 356| Type = int -# 356| Value = 1 +# 356| 1: [Literal]: 1 +# 356| Type = [IntType]: int +# 356| Value = [Literal]: 1 # 356| ValueCategory = prvalue -# 357| 1: label ...: -# 358| 2: return ... -# 360| void Continue(int) +# 357| 1: [LabelStmt]: label ...: +# 358| 2: [ReturnStmt]: return ... +# 360| [TopLevelFunction]: void Continue(int) # 360| params: -# 360| 0: n -# 360| Type = int -# 360| body: { ... } -# 361| 0: do (...) ... -# 366| 0: ... > ... -# 366| Type = bool +# 360| 0: [Parameter]: n +# 360| Type = [IntType]: int +# 360| body: [Block]: { ... } +# 361| 0: [DoStmt]: do (...) ... +# 366| 0: [GTExpr]: ... > ... +# 366| Type = [BoolType]: bool # 366| ValueCategory = prvalue -# 366| 0: n -# 366| Type = int +# 366| 0: [VariableAccess]: n +# 366| Type = [IntType]: int # 366| ValueCategory = prvalue(load) -# 366| 1: 0 -# 366| Type = int -# 366| Value = 0 +# 366| 1: [Zero]: 0 +# 366| Type = [IntType]: int +# 366| Value = [Zero]: 0 # 366| ValueCategory = prvalue -# 361| 1: { ... } -# 362| 0: if (...) ... -# 362| 0: ... == ... -# 362| Type = bool +# 361| 1: [Block]: { ... } +# 362| 0: [IfStmt]: if (...) ... +# 362| 0: [EQExpr]: ... == ... +# 362| Type = [BoolType]: bool # 362| ValueCategory = prvalue -# 362| 0: n -# 362| Type = int +# 362| 0: [VariableAccess]: n +# 362| Type = [IntType]: int # 362| ValueCategory = prvalue(load) -# 362| 1: 1 -# 362| Type = int -# 362| Value = 1 +# 362| 1: [Literal]: 1 +# 362| Type = [IntType]: int +# 362| Value = [Literal]: 1 # 362| ValueCategory = prvalue -# 362| 1: { ... } -# 363| 0: continue; -# 365| 1: ExprStmt -# 365| 0: ... -= ... -# 365| Type = int +# 362| 1: [Block]: { ... } +# 363| 0: [ContinueStmt]: continue; +# 365| 1: [ExprStmt]: ExprStmt +# 365| 0: [AssignSubExpr]: ... -= ... +# 365| Type = [IntType]: int # 365| ValueCategory = lvalue -# 365| 0: n -# 365| Type = int +# 365| 0: [VariableAccess]: n +# 365| Type = [IntType]: int # 365| ValueCategory = lvalue -# 365| 1: 1 -# 365| Type = int -# 365| Value = 1 +# 365| 1: [Literal]: 1 +# 365| Type = [IntType]: int +# 365| Value = [Literal]: 1 # 365| ValueCategory = prvalue -# 361| 2: label ...: -# 367| 1: return ... -# 369| void VoidFunc() +# 361| 2: [LabelStmt]: label ...: +# 367| 1: [ReturnStmt]: return ... +# 369| [TopLevelFunction]: void VoidFunc() # 369| params: -# 370| int Add(int, int) +# 370| [TopLevelFunction]: int Add(int, int) # 370| params: -# 370| 0: x -# 370| Type = int -# 370| 1: y -# 370| Type = int -# 372| void Call() +# 370| 0: [Parameter]: x +# 370| Type = [IntType]: int +# 370| 1: [Parameter]: y +# 370| Type = [IntType]: int +# 372| [TopLevelFunction]: void Call() # 372| params: -# 372| body: { ... } -# 373| 0: ExprStmt -# 373| 0: call to VoidFunc -# 373| Type = void +# 372| body: [Block]: { ... } +# 373| 0: [ExprStmt]: ExprStmt +# 373| 0: [FunctionCall]: call to VoidFunc +# 373| Type = [VoidType]: void # 373| ValueCategory = prvalue -# 374| 1: return ... -# 376| int CallAdd(int, int) +# 374| 1: [ReturnStmt]: return ... +# 376| [TopLevelFunction]: int CallAdd(int, int) # 376| params: -# 376| 0: x -# 376| Type = int -# 376| 1: y -# 376| Type = int -# 376| body: { ... } -# 377| 0: return ... -# 377| 0: call to Add -# 377| Type = int +# 376| 0: [Parameter]: x +# 376| Type = [IntType]: int +# 376| 1: [Parameter]: y +# 376| Type = [IntType]: int +# 376| body: [Block]: { ... } +# 377| 0: [ReturnStmt]: return ... +# 377| 0: [FunctionCall]: call to Add +# 377| Type = [IntType]: int # 377| ValueCategory = prvalue -# 377| 0: x -# 377| Type = int +# 377| 0: [VariableAccess]: x +# 377| Type = [IntType]: int # 377| ValueCategory = prvalue(load) -# 377| 1: y -# 377| Type = int +# 377| 1: [VariableAccess]: y +# 377| Type = [IntType]: int # 377| ValueCategory = prvalue(load) -# 380| int Comma(int, int) +# 380| [TopLevelFunction]: int Comma(int, int) # 380| params: -# 380| 0: x -# 380| Type = int -# 380| 1: y -# 380| Type = int -# 380| body: { ... } -# 381| 0: return ... -# 381| 0: ... , ... -# 381| Type = int +# 380| 0: [Parameter]: x +# 380| Type = [IntType]: int +# 380| 1: [Parameter]: y +# 380| Type = [IntType]: int +# 380| body: [Block]: { ... } +# 381| 0: [ReturnStmt]: return ... +# 381| 0: [CommaExpr]: ... , ... +# 381| Type = [IntType]: int # 381| ValueCategory = prvalue -# 381| 0: call to VoidFunc -# 381| Type = void +# 381| 0: [FunctionCall]: call to VoidFunc +# 381| Type = [VoidType]: void # 381| ValueCategory = prvalue -# 381| 1: call to CallAdd -# 381| Type = int +# 381| 1: [FunctionCall]: call to CallAdd +# 381| Type = [IntType]: int # 381| ValueCategory = prvalue -# 381| 0: x -# 381| Type = int +# 381| 0: [VariableAccess]: x +# 381| Type = [IntType]: int # 381| ValueCategory = prvalue(load) -# 381| 1: y -# 381| Type = int +# 381| 1: [VariableAccess]: y +# 381| Type = [IntType]: int # 381| ValueCategory = prvalue(load) -# 384| void Switch(int) +# 384| [TopLevelFunction]: void Switch(int) # 384| params: -# 384| 0: x -# 384| Type = int -# 384| body: { ... } -# 385| 0: declaration -# 385| 0: definition of y -# 385| Type = int -# 386| 1: switch (...) ... -# 386| 0: x -# 386| Type = int +# 384| 0: [Parameter]: x +# 384| Type = [IntType]: int +# 384| body: [Block]: { ... } +# 385| 0: [DeclStmt]: declaration +# 385| 0: [VariableDeclarationEntry]: definition of y +# 385| Type = [IntType]: int +# 386| 1: [SwitchStmt]: switch (...) ... +# 386| 0: [VariableAccess]: x +# 386| Type = [IntType]: int # 386| ValueCategory = prvalue(load) -# 386| 1: { ... } -# 387| 0: ExprStmt -# 387| 0: ... = ... -# 387| Type = int +# 386| 1: [Block]: { ... } +# 387| 0: [ExprStmt]: ExprStmt +# 387| 0: [AssignExpr]: ... = ... +# 387| Type = [IntType]: int # 387| ValueCategory = lvalue -# 387| 0: y -# 387| Type = int +# 387| 0: [VariableAccess]: y +# 387| Type = [IntType]: int # 387| ValueCategory = lvalue -# 387| 1: 1234 -# 387| Type = int -# 387| Value = 1234 +# 387| 1: [Literal]: 1234 +# 387| Type = [IntType]: int +# 387| Value = [Literal]: 1234 # 387| ValueCategory = prvalue -# 389| 1: case ...: -# 389| 0: - ... -# 389| Type = int -# 389| Value = -1 +# 389| 1: [SwitchCase]: case ...: +# 389| 0: [UnaryMinusExpr]: - ... +# 389| Type = [IntType]: int +# 389| Value = [UnaryMinusExpr]: -1 # 389| ValueCategory = prvalue -# 389| 0: 1 -# 389| Type = int -# 389| Value = 1 +# 389| 0: [Literal]: 1 +# 389| Type = [IntType]: int +# 389| Value = [Literal]: 1 # 389| ValueCategory = prvalue -# 390| 2: ExprStmt -# 390| 0: ... = ... -# 390| Type = int +# 390| 2: [ExprStmt]: ExprStmt +# 390| 0: [AssignExpr]: ... = ... +# 390| Type = [IntType]: int # 390| ValueCategory = lvalue -# 390| 0: y -# 390| Type = int +# 390| 0: [VariableAccess]: y +# 390| Type = [IntType]: int # 390| ValueCategory = lvalue -# 390| 1: - ... -# 390| Type = int -# 390| Value = -1 +# 390| 1: [UnaryMinusExpr]: - ... +# 390| Type = [IntType]: int +# 390| Value = [UnaryMinusExpr]: -1 # 390| ValueCategory = prvalue -# 390| 0: 1 -# 390| Type = int -# 390| Value = 1 +# 390| 0: [Literal]: 1 +# 390| Type = [IntType]: int +# 390| Value = [Literal]: 1 # 390| ValueCategory = prvalue -# 391| 3: break; -# 393| 4: case ...: -# 393| 0: 1 -# 393| Type = int -# 393| Value = 1 +# 391| 3: [BreakStmt]: break; +# 393| 4: [SwitchCase]: case ...: +# 393| 0: [Literal]: 1 +# 393| Type = [IntType]: int +# 393| Value = [Literal]: 1 # 393| ValueCategory = prvalue -# 394| 5: case ...: -# 394| 0: 2 -# 394| Type = int -# 394| Value = 2 +# 394| 5: [SwitchCase]: case ...: +# 394| 0: [Literal]: 2 +# 394| Type = [IntType]: int +# 394| Value = [Literal]: 2 # 394| ValueCategory = prvalue -# 395| 6: ExprStmt -# 395| 0: ... = ... -# 395| Type = int +# 395| 6: [ExprStmt]: ExprStmt +# 395| 0: [AssignExpr]: ... = ... +# 395| Type = [IntType]: int # 395| ValueCategory = lvalue -# 395| 0: y -# 395| Type = int +# 395| 0: [VariableAccess]: y +# 395| Type = [IntType]: int # 395| ValueCategory = lvalue -# 395| 1: 1 -# 395| Type = int -# 395| Value = 1 +# 395| 1: [Literal]: 1 +# 395| Type = [IntType]: int +# 395| Value = [Literal]: 1 # 395| ValueCategory = prvalue -# 396| 7: break; -# 398| 8: case ...: -# 398| 0: 3 -# 398| Type = int -# 398| Value = 3 +# 396| 7: [BreakStmt]: break; +# 398| 8: [SwitchCase]: case ...: +# 398| 0: [Literal]: 3 +# 398| Type = [IntType]: int +# 398| Value = [Literal]: 3 # 398| ValueCategory = prvalue -# 399| 9: ExprStmt -# 399| 0: ... = ... -# 399| Type = int +# 399| 9: [ExprStmt]: ExprStmt +# 399| 0: [AssignExpr]: ... = ... +# 399| Type = [IntType]: int # 399| ValueCategory = lvalue -# 399| 0: y -# 399| Type = int +# 399| 0: [VariableAccess]: y +# 399| Type = [IntType]: int # 399| ValueCategory = lvalue -# 399| 1: 3 -# 399| Type = int -# 399| Value = 3 +# 399| 1: [Literal]: 3 +# 399| Type = [IntType]: int +# 399| Value = [Literal]: 3 # 399| ValueCategory = prvalue -# 400| 10: case ...: -# 400| 0: 4 -# 400| Type = int -# 400| Value = 4 +# 400| 10: [SwitchCase]: case ...: +# 400| 0: [Literal]: 4 +# 400| Type = [IntType]: int +# 400| Value = [Literal]: 4 # 400| ValueCategory = prvalue -# 401| 11: ExprStmt -# 401| 0: ... = ... -# 401| Type = int +# 401| 11: [ExprStmt]: ExprStmt +# 401| 0: [AssignExpr]: ... = ... +# 401| Type = [IntType]: int # 401| ValueCategory = lvalue -# 401| 0: y -# 401| Type = int +# 401| 0: [VariableAccess]: y +# 401| Type = [IntType]: int # 401| ValueCategory = lvalue -# 401| 1: 4 -# 401| Type = int -# 401| Value = 4 +# 401| 1: [Literal]: 4 +# 401| Type = [IntType]: int +# 401| Value = [Literal]: 4 # 401| ValueCategory = prvalue -# 402| 12: break; -# 404| 13: default: -# 405| 14: ExprStmt -# 405| 0: ... = ... -# 405| Type = int +# 402| 12: [BreakStmt]: break; +# 404| 13: [SwitchCase]: default: +# 405| 14: [ExprStmt]: ExprStmt +# 405| 0: [AssignExpr]: ... = ... +# 405| Type = [IntType]: int # 405| ValueCategory = lvalue -# 405| 0: y -# 405| Type = int +# 405| 0: [VariableAccess]: y +# 405| Type = [IntType]: int # 405| ValueCategory = lvalue -# 405| 1: 0 -# 405| Type = int -# 405| Value = 0 +# 405| 1: [Zero]: 0 +# 405| Type = [IntType]: int +# 405| Value = [Zero]: 0 # 405| ValueCategory = prvalue -# 406| 15: break; -# 408| 16: ExprStmt -# 408| 0: ... = ... -# 408| Type = int +# 406| 15: [BreakStmt]: break; +# 408| 16: [ExprStmt]: ExprStmt +# 408| 0: [AssignExpr]: ... = ... +# 408| Type = [IntType]: int # 408| ValueCategory = lvalue -# 408| 0: y -# 408| Type = int +# 408| 0: [VariableAccess]: y +# 408| Type = [IntType]: int # 408| ValueCategory = lvalue -# 408| 1: 5678 -# 408| Type = int -# 408| Value = 5678 +# 408| 1: [Literal]: 5678 +# 408| Type = [IntType]: int +# 408| Value = [Literal]: 5678 # 408| ValueCategory = prvalue -# 409| 2: label ...: -# 410| 3: return ... -# 412| Point& Point::operator=(Point const&) +# 409| 2: [LabelStmt]: label ...: +# 410| 3: [ReturnStmt]: return ... +# 412| [CopyAssignmentOperator]: Point& Point::operator=(Point const&) # 412| params: -#-----| 0: p#0 -#-----| Type = const Point & -# 412| Point& Point::operator=(Point&&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const Point & +# 412| [MoveAssignmentOperator]: Point& Point::operator=(Point&&) # 412| params: -#-----| 0: p#0 -#-----| Type = Point && -# 417| Rect& Rect::operator=(Rect const&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: Point && +# 417| [CopyAssignmentOperator]: Rect& Rect::operator=(Rect const&) # 417| params: -#-----| 0: p#0 -#-----| Type = const Rect & -# 417| Rect& Rect::operator=(Rect&&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const Rect & +# 417| [MoveAssignmentOperator]: Rect& Rect::operator=(Rect&&) # 417| params: -#-----| 0: p#0 -#-----| Type = Rect && -# 422| Point ReturnStruct(Point) +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: Rect && +# 422| [TopLevelFunction]: Point ReturnStruct(Point) # 422| params: -# 422| 0: pt -# 422| Type = Point -# 422| body: { ... } -# 423| 0: return ... -# 423| 0: pt -# 423| Type = Point +# 422| 0: [Parameter]: pt +# 422| Type = [Struct]: Point +# 422| body: [Block]: { ... } +# 423| 0: [ReturnStmt]: return ... +# 423| 0: [VariableAccess]: pt +# 423| Type = [Struct]: Point # 423| ValueCategory = prvalue(load) -# 426| void FieldAccess() +# 426| [TopLevelFunction]: void FieldAccess() # 426| params: -# 426| body: { ... } -# 427| 0: declaration -# 427| 0: definition of pt -# 427| Type = Point -# 428| 1: ExprStmt -# 428| 0: ... = ... -# 428| Type = int +# 426| body: [Block]: { ... } +# 427| 0: [DeclStmt]: declaration +# 427| 0: [VariableDeclarationEntry]: definition of pt +# 427| Type = [Struct]: Point +# 428| 1: [ExprStmt]: ExprStmt +# 428| 0: [AssignExpr]: ... = ... +# 428| Type = [IntType]: int # 428| ValueCategory = lvalue -# 428| 0: x -# 428| Type = int +# 428| 0: [FieldAccess]: x +# 428| Type = [IntType]: int # 428| ValueCategory = lvalue -# 428| -1: pt -# 428| Type = Point +# 428| -1: [VariableAccess]: pt +# 428| Type = [Struct]: Point # 428| ValueCategory = lvalue -# 428| 1: 5 -# 428| Type = int -# 428| Value = 5 +# 428| 1: [Literal]: 5 +# 428| Type = [IntType]: int +# 428| Value = [Literal]: 5 # 428| ValueCategory = prvalue -# 429| 2: ExprStmt -# 429| 0: ... = ... -# 429| Type = int +# 429| 2: [ExprStmt]: ExprStmt +# 429| 0: [AssignExpr]: ... = ... +# 429| Type = [IntType]: int # 429| ValueCategory = lvalue -# 429| 0: y -# 429| Type = int +# 429| 0: [FieldAccess]: y +# 429| Type = [IntType]: int # 429| ValueCategory = lvalue -# 429| -1: pt -# 429| Type = Point +# 429| -1: [VariableAccess]: pt +# 429| Type = [Struct]: Point # 429| ValueCategory = lvalue -# 429| 1: x -# 429| Type = int +# 429| 1: [FieldAccess]: x +# 429| Type = [IntType]: int # 429| ValueCategory = prvalue(load) -# 429| -1: pt -# 429| Type = Point +# 429| -1: [VariableAccess]: pt +# 429| Type = [Struct]: Point # 429| ValueCategory = lvalue -# 430| 3: declaration -# 430| 0: definition of p -# 430| Type = int * -# 430| init: initializer for p -# 430| expr: & ... -# 430| Type = int * +# 430| 3: [DeclStmt]: declaration +# 430| 0: [VariableDeclarationEntry]: definition of p +# 430| Type = [IntPointerType]: int * +# 430| init: [Initializer]: initializer for p +# 430| expr: [AddressOfExpr]: & ... +# 430| Type = [IntPointerType]: int * # 430| ValueCategory = prvalue -# 430| 0: y -# 430| Type = int +# 430| 0: [FieldAccess]: y +# 430| Type = [IntType]: int # 430| ValueCategory = lvalue -# 430| -1: pt -# 430| Type = Point +# 430| -1: [VariableAccess]: pt +# 430| Type = [Struct]: Point # 430| ValueCategory = lvalue -# 431| 4: return ... -# 433| void LogicalOr(bool, bool) +# 431| 4: [ReturnStmt]: return ... +# 433| [TopLevelFunction]: void LogicalOr(bool, bool) # 433| params: -# 433| 0: a -# 433| Type = bool -# 433| 1: b -# 433| Type = bool -# 433| body: { ... } -# 434| 0: declaration -# 434| 0: definition of x -# 434| Type = int -# 435| 1: if (...) ... -# 435| 0: ... || ... -# 435| Type = bool +# 433| 0: [Parameter]: a +# 433| Type = [BoolType]: bool +# 433| 1: [Parameter]: b +# 433| Type = [BoolType]: bool +# 433| body: [Block]: { ... } +# 434| 0: [DeclStmt]: declaration +# 434| 0: [VariableDeclarationEntry]: definition of x +# 434| Type = [IntType]: int +# 435| 1: [IfStmt]: if (...) ... +# 435| 0: [LogicalOrExpr]: ... || ... +# 435| Type = [BoolType]: bool # 435| ValueCategory = prvalue -# 435| 0: a -# 435| Type = bool +# 435| 0: [VariableAccess]: a +# 435| Type = [BoolType]: bool # 435| ValueCategory = prvalue(load) -# 435| 1: b -# 435| Type = bool +# 435| 1: [VariableAccess]: b +# 435| Type = [BoolType]: bool # 435| ValueCategory = prvalue(load) -# 435| 1: { ... } -# 436| 0: ExprStmt -# 436| 0: ... = ... -# 436| Type = int +# 435| 1: [Block]: { ... } +# 436| 0: [ExprStmt]: ExprStmt +# 436| 0: [AssignExpr]: ... = ... +# 436| Type = [IntType]: int # 436| ValueCategory = lvalue -# 436| 0: x -# 436| Type = int +# 436| 0: [VariableAccess]: x +# 436| Type = [IntType]: int # 436| ValueCategory = lvalue -# 436| 1: 7 -# 436| Type = int -# 436| Value = 7 +# 436| 1: [Literal]: 7 +# 436| Type = [IntType]: int +# 436| Value = [Literal]: 7 # 436| ValueCategory = prvalue -# 439| 2: if (...) ... -# 439| 0: ... || ... -# 439| Type = bool +# 439| 2: [IfStmt]: if (...) ... +# 439| 0: [LogicalOrExpr]: ... || ... +# 439| Type = [BoolType]: bool # 439| ValueCategory = prvalue -# 439| 0: a -# 439| Type = bool +# 439| 0: [VariableAccess]: a +# 439| Type = [BoolType]: bool # 439| ValueCategory = prvalue(load) -# 439| 1: b -# 439| Type = bool +# 439| 1: [VariableAccess]: b +# 439| Type = [BoolType]: bool # 439| ValueCategory = prvalue(load) -# 439| 1: { ... } -# 440| 0: ExprStmt -# 440| 0: ... = ... -# 440| Type = int +# 439| 1: [Block]: { ... } +# 440| 0: [ExprStmt]: ExprStmt +# 440| 0: [AssignExpr]: ... = ... +# 440| Type = [IntType]: int # 440| ValueCategory = lvalue -# 440| 0: x -# 440| Type = int +# 440| 0: [VariableAccess]: x +# 440| Type = [IntType]: int # 440| ValueCategory = lvalue -# 440| 1: 1 -# 440| Type = int -# 440| Value = 1 +# 440| 1: [Literal]: 1 +# 440| Type = [IntType]: int +# 440| Value = [Literal]: 1 # 440| ValueCategory = prvalue -# 442| 2: { ... } -# 443| 0: ExprStmt -# 443| 0: ... = ... -# 443| Type = int +# 442| 2: [Block]: { ... } +# 443| 0: [ExprStmt]: ExprStmt +# 443| 0: [AssignExpr]: ... = ... +# 443| Type = [IntType]: int # 443| ValueCategory = lvalue -# 443| 0: x -# 443| Type = int +# 443| 0: [VariableAccess]: x +# 443| Type = [IntType]: int # 443| ValueCategory = lvalue -# 443| 1: 5 -# 443| Type = int -# 443| Value = 5 +# 443| 1: [Literal]: 5 +# 443| Type = [IntType]: int +# 443| Value = [Literal]: 5 # 443| ValueCategory = prvalue -# 445| 3: return ... -# 447| void LogicalAnd(bool, bool) +# 445| 3: [ReturnStmt]: return ... +# 447| [TopLevelFunction]: void LogicalAnd(bool, bool) # 447| params: -# 447| 0: a -# 447| Type = bool -# 447| 1: b -# 447| Type = bool -# 447| body: { ... } -# 448| 0: declaration -# 448| 0: definition of x -# 448| Type = int -# 449| 1: if (...) ... -# 449| 0: ... && ... -# 449| Type = bool +# 447| 0: [Parameter]: a +# 447| Type = [BoolType]: bool +# 447| 1: [Parameter]: b +# 447| Type = [BoolType]: bool +# 447| body: [Block]: { ... } +# 448| 0: [DeclStmt]: declaration +# 448| 0: [VariableDeclarationEntry]: definition of x +# 448| Type = [IntType]: int +# 449| 1: [IfStmt]: if (...) ... +# 449| 0: [LogicalAndExpr]: ... && ... +# 449| Type = [BoolType]: bool # 449| ValueCategory = prvalue -# 449| 0: a -# 449| Type = bool +# 449| 0: [VariableAccess]: a +# 449| Type = [BoolType]: bool # 449| ValueCategory = prvalue(load) -# 449| 1: b -# 449| Type = bool +# 449| 1: [VariableAccess]: b +# 449| Type = [BoolType]: bool # 449| ValueCategory = prvalue(load) -# 449| 1: { ... } -# 450| 0: ExprStmt -# 450| 0: ... = ... -# 450| Type = int +# 449| 1: [Block]: { ... } +# 450| 0: [ExprStmt]: ExprStmt +# 450| 0: [AssignExpr]: ... = ... +# 450| Type = [IntType]: int # 450| ValueCategory = lvalue -# 450| 0: x -# 450| Type = int +# 450| 0: [VariableAccess]: x +# 450| Type = [IntType]: int # 450| ValueCategory = lvalue -# 450| 1: 7 -# 450| Type = int -# 450| Value = 7 +# 450| 1: [Literal]: 7 +# 450| Type = [IntType]: int +# 450| Value = [Literal]: 7 # 450| ValueCategory = prvalue -# 453| 2: if (...) ... -# 453| 0: ... && ... -# 453| Type = bool +# 453| 2: [IfStmt]: if (...) ... +# 453| 0: [LogicalAndExpr]: ... && ... +# 453| Type = [BoolType]: bool # 453| ValueCategory = prvalue -# 453| 0: a -# 453| Type = bool +# 453| 0: [VariableAccess]: a +# 453| Type = [BoolType]: bool # 453| ValueCategory = prvalue(load) -# 453| 1: b -# 453| Type = bool +# 453| 1: [VariableAccess]: b +# 453| Type = [BoolType]: bool # 453| ValueCategory = prvalue(load) -# 453| 1: { ... } -# 454| 0: ExprStmt -# 454| 0: ... = ... -# 454| Type = int +# 453| 1: [Block]: { ... } +# 454| 0: [ExprStmt]: ExprStmt +# 454| 0: [AssignExpr]: ... = ... +# 454| Type = [IntType]: int # 454| ValueCategory = lvalue -# 454| 0: x -# 454| Type = int +# 454| 0: [VariableAccess]: x +# 454| Type = [IntType]: int # 454| ValueCategory = lvalue -# 454| 1: 1 -# 454| Type = int -# 454| Value = 1 +# 454| 1: [Literal]: 1 +# 454| Type = [IntType]: int +# 454| Value = [Literal]: 1 # 454| ValueCategory = prvalue -# 456| 2: { ... } -# 457| 0: ExprStmt -# 457| 0: ... = ... -# 457| Type = int +# 456| 2: [Block]: { ... } +# 457| 0: [ExprStmt]: ExprStmt +# 457| 0: [AssignExpr]: ... = ... +# 457| Type = [IntType]: int # 457| ValueCategory = lvalue -# 457| 0: x -# 457| Type = int +# 457| 0: [VariableAccess]: x +# 457| Type = [IntType]: int # 457| ValueCategory = lvalue -# 457| 1: 5 -# 457| Type = int -# 457| Value = 5 +# 457| 1: [Literal]: 5 +# 457| Type = [IntType]: int +# 457| Value = [Literal]: 5 # 457| ValueCategory = prvalue -# 459| 3: return ... -# 461| void LogicalNot(bool, bool) +# 459| 3: [ReturnStmt]: return ... +# 461| [TopLevelFunction]: void LogicalNot(bool, bool) # 461| params: -# 461| 0: a -# 461| Type = bool -# 461| 1: b -# 461| Type = bool -# 461| body: { ... } -# 462| 0: declaration -# 462| 0: definition of x -# 462| Type = int -# 463| 1: if (...) ... -# 463| 0: ! ... -# 463| Type = bool +# 461| 0: [Parameter]: a +# 461| Type = [BoolType]: bool +# 461| 1: [Parameter]: b +# 461| Type = [BoolType]: bool +# 461| body: [Block]: { ... } +# 462| 0: [DeclStmt]: declaration +# 462| 0: [VariableDeclarationEntry]: definition of x +# 462| Type = [IntType]: int +# 463| 1: [IfStmt]: if (...) ... +# 463| 0: [NotExpr]: ! ... +# 463| Type = [BoolType]: bool # 463| ValueCategory = prvalue -# 463| 0: a -# 463| Type = bool +# 463| 0: [VariableAccess]: a +# 463| Type = [BoolType]: bool # 463| ValueCategory = prvalue(load) -# 463| 1: { ... } -# 464| 0: ExprStmt -# 464| 0: ... = ... -# 464| Type = int +# 463| 1: [Block]: { ... } +# 464| 0: [ExprStmt]: ExprStmt +# 464| 0: [AssignExpr]: ... = ... +# 464| Type = [IntType]: int # 464| ValueCategory = lvalue -# 464| 0: x -# 464| Type = int +# 464| 0: [VariableAccess]: x +# 464| Type = [IntType]: int # 464| ValueCategory = lvalue -# 464| 1: 1 -# 464| Type = int -# 464| Value = 1 +# 464| 1: [Literal]: 1 +# 464| Type = [IntType]: int +# 464| Value = [Literal]: 1 # 464| ValueCategory = prvalue -# 467| 2: if (...) ... -# 467| 0: ! ... -# 467| Type = bool +# 467| 2: [IfStmt]: if (...) ... +# 467| 0: [NotExpr]: ! ... +# 467| Type = [BoolType]: bool # 467| ValueCategory = prvalue -# 467| 0: (...) -# 467| Type = bool +# 467| 0: [ParenthesisExpr]: (...) +# 467| Type = [BoolType]: bool # 467| ValueCategory = prvalue -# 467| expr: ... && ... -# 467| Type = bool +# 467| expr: [LogicalAndExpr]: ... && ... +# 467| Type = [BoolType]: bool # 467| ValueCategory = prvalue -# 467| 0: a -# 467| Type = bool +# 467| 0: [VariableAccess]: a +# 467| Type = [BoolType]: bool # 467| ValueCategory = prvalue(load) -# 467| 1: b -# 467| Type = bool +# 467| 1: [VariableAccess]: b +# 467| Type = [BoolType]: bool # 467| ValueCategory = prvalue(load) -# 467| 1: { ... } -# 468| 0: ExprStmt -# 468| 0: ... = ... -# 468| Type = int +# 467| 1: [Block]: { ... } +# 468| 0: [ExprStmt]: ExprStmt +# 468| 0: [AssignExpr]: ... = ... +# 468| Type = [IntType]: int # 468| ValueCategory = lvalue -# 468| 0: x -# 468| Type = int +# 468| 0: [VariableAccess]: x +# 468| Type = [IntType]: int # 468| ValueCategory = lvalue -# 468| 1: 2 -# 468| Type = int -# 468| Value = 2 +# 468| 1: [Literal]: 2 +# 468| Type = [IntType]: int +# 468| Value = [Literal]: 2 # 468| ValueCategory = prvalue -# 470| 2: { ... } -# 471| 0: ExprStmt -# 471| 0: ... = ... -# 471| Type = int +# 470| 2: [Block]: { ... } +# 471| 0: [ExprStmt]: ExprStmt +# 471| 0: [AssignExpr]: ... = ... +# 471| Type = [IntType]: int # 471| ValueCategory = lvalue -# 471| 0: x -# 471| Type = int +# 471| 0: [VariableAccess]: x +# 471| Type = [IntType]: int # 471| ValueCategory = lvalue -# 471| 1: 3 -# 471| Type = int -# 471| Value = 3 +# 471| 1: [Literal]: 3 +# 471| Type = [IntType]: int +# 471| Value = [Literal]: 3 # 471| ValueCategory = prvalue -# 473| 3: return ... -# 475| void ConditionValues(bool, bool) +# 473| 3: [ReturnStmt]: return ... +# 475| [TopLevelFunction]: void ConditionValues(bool, bool) # 475| params: -# 475| 0: a -# 475| Type = bool -# 475| 1: b -# 475| Type = bool -# 475| body: { ... } -# 476| 0: declaration -# 476| 0: definition of x -# 476| Type = bool -# 477| 1: ExprStmt -# 477| 0: ... = ... -# 477| Type = bool +# 475| 0: [Parameter]: a +# 475| Type = [BoolType]: bool +# 475| 1: [Parameter]: b +# 475| Type = [BoolType]: bool +# 475| body: [Block]: { ... } +# 476| 0: [DeclStmt]: declaration +# 476| 0: [VariableDeclarationEntry]: definition of x +# 476| Type = [BoolType]: bool +# 477| 1: [ExprStmt]: ExprStmt +# 477| 0: [AssignExpr]: ... = ... +# 477| Type = [BoolType]: bool # 477| ValueCategory = lvalue -# 477| 0: x -# 477| Type = bool +# 477| 0: [VariableAccess]: x +# 477| Type = [BoolType]: bool # 477| ValueCategory = lvalue -# 477| 1: ... && ... -# 477| Type = bool +# 477| 1: [LogicalAndExpr]: ... && ... +# 477| Type = [BoolType]: bool # 477| ValueCategory = prvalue -# 477| 0: a -# 477| Type = bool +# 477| 0: [VariableAccess]: a +# 477| Type = [BoolType]: bool # 477| ValueCategory = prvalue(load) -# 477| 1: b -# 477| Type = bool +# 477| 1: [VariableAccess]: b +# 477| Type = [BoolType]: bool # 477| ValueCategory = prvalue(load) -# 478| 2: ExprStmt -# 478| 0: ... = ... -# 478| Type = bool +# 478| 2: [ExprStmt]: ExprStmt +# 478| 0: [AssignExpr]: ... = ... +# 478| Type = [BoolType]: bool # 478| ValueCategory = lvalue -# 478| 0: x -# 478| Type = bool +# 478| 0: [VariableAccess]: x +# 478| Type = [BoolType]: bool # 478| ValueCategory = lvalue -# 478| 1: ... || ... -# 478| Type = bool +# 478| 1: [LogicalOrExpr]: ... || ... +# 478| Type = [BoolType]: bool # 478| ValueCategory = prvalue -# 478| 0: a -# 478| Type = bool +# 478| 0: [VariableAccess]: a +# 478| Type = [BoolType]: bool # 478| ValueCategory = prvalue(load) -# 478| 1: b -# 478| Type = bool +# 478| 1: [VariableAccess]: b +# 478| Type = [BoolType]: bool # 478| ValueCategory = prvalue(load) -# 479| 3: ExprStmt -# 479| 0: ... = ... -# 479| Type = bool +# 479| 3: [ExprStmt]: ExprStmt +# 479| 0: [AssignExpr]: ... = ... +# 479| Type = [BoolType]: bool # 479| ValueCategory = lvalue -# 479| 0: x -# 479| Type = bool +# 479| 0: [VariableAccess]: x +# 479| Type = [BoolType]: bool # 479| ValueCategory = lvalue -# 479| 1: ! ... -# 479| Type = bool +# 479| 1: [NotExpr]: ! ... +# 479| Type = [BoolType]: bool # 479| ValueCategory = prvalue -# 479| 0: (...) -# 479| Type = bool +# 479| 0: [ParenthesisExpr]: (...) +# 479| Type = [BoolType]: bool # 479| ValueCategory = prvalue -# 479| expr: ... || ... -# 479| Type = bool +# 479| expr: [LogicalOrExpr]: ... || ... +# 479| Type = [BoolType]: bool # 479| ValueCategory = prvalue -# 479| 0: a -# 479| Type = bool +# 479| 0: [VariableAccess]: a +# 479| Type = [BoolType]: bool # 479| ValueCategory = prvalue(load) -# 479| 1: b -# 479| Type = bool +# 479| 1: [VariableAccess]: b +# 479| Type = [BoolType]: bool # 479| ValueCategory = prvalue(load) -# 480| 4: return ... -# 482| void Conditional(bool, int, int) +# 480| 4: [ReturnStmt]: return ... +# 482| [TopLevelFunction]: void Conditional(bool, int, int) # 482| params: -# 482| 0: a -# 482| Type = bool -# 482| 1: x -# 482| Type = int -# 482| 2: y -# 482| Type = int -# 482| body: { ... } -# 483| 0: declaration -# 483| 0: definition of z -# 483| Type = int -# 483| init: initializer for z -# 483| expr: ... ? ... : ... -# 483| Type = int +# 482| 0: [Parameter]: a +# 482| Type = [BoolType]: bool +# 482| 1: [Parameter]: x +# 482| Type = [IntType]: int +# 482| 2: [Parameter]: y +# 482| Type = [IntType]: int +# 482| body: [Block]: { ... } +# 483| 0: [DeclStmt]: declaration +# 483| 0: [VariableDeclarationEntry]: definition of z +# 483| Type = [IntType]: int +# 483| init: [Initializer]: initializer for z +# 483| expr: [ConditionalExpr]: ... ? ... : ... +# 483| Type = [IntType]: int # 483| ValueCategory = prvalue -# 483| 0: a -# 483| Type = bool +# 483| 0: [VariableAccess]: a +# 483| Type = [BoolType]: bool # 483| ValueCategory = prvalue(load) -# 483| 1: x -# 483| Type = int +# 483| 1: [VariableAccess]: x +# 483| Type = [IntType]: int # 483| ValueCategory = prvalue(load) -# 483| 2: y -# 483| Type = int +# 483| 2: [VariableAccess]: y +# 483| Type = [IntType]: int # 483| ValueCategory = prvalue(load) -# 484| 1: return ... -# 486| void Conditional_LValue(bool) +# 484| 1: [ReturnStmt]: return ... +# 486| [TopLevelFunction]: void Conditional_LValue(bool) # 486| params: -# 486| 0: a -# 486| Type = bool -# 486| body: { ... } -# 487| 0: declaration -# 487| 0: definition of x -# 487| Type = int -# 488| 1: declaration -# 488| 0: definition of y -# 488| Type = int -# 489| 2: ExprStmt -# 489| 0: ... = ... -# 489| Type = int +# 486| 0: [Parameter]: a +# 486| Type = [BoolType]: bool +# 486| body: [Block]: { ... } +# 487| 0: [DeclStmt]: declaration +# 487| 0: [VariableDeclarationEntry]: definition of x +# 487| Type = [IntType]: int +# 488| 1: [DeclStmt]: declaration +# 488| 0: [VariableDeclarationEntry]: definition of y +# 488| Type = [IntType]: int +# 489| 2: [ExprStmt]: ExprStmt +# 489| 0: [AssignExpr]: ... = ... +# 489| Type = [IntType]: int # 489| ValueCategory = lvalue -# 489| 0: (...) -# 489| Type = int +# 489| 0: [ParenthesisExpr]: (...) +# 489| Type = [IntType]: int # 489| ValueCategory = lvalue -# 489| expr: ... ? ... : ... -# 489| Type = int +# 489| expr: [ConditionalExpr]: ... ? ... : ... +# 489| Type = [IntType]: int # 489| ValueCategory = lvalue -# 489| 0: a -# 489| Type = bool +# 489| 0: [VariableAccess]: a +# 489| Type = [BoolType]: bool # 489| ValueCategory = prvalue(load) -# 489| 1: x -# 489| Type = int +# 489| 1: [VariableAccess]: x +# 489| Type = [IntType]: int # 489| ValueCategory = lvalue -# 489| 2: y -# 489| Type = int +# 489| 2: [VariableAccess]: y +# 489| Type = [IntType]: int # 489| ValueCategory = lvalue -# 489| 1: 5 -# 489| Type = int -# 489| Value = 5 +# 489| 1: [Literal]: 5 +# 489| Type = [IntType]: int +# 489| Value = [Literal]: 5 # 489| ValueCategory = prvalue -# 490| 3: return ... -# 492| void Conditional_Void(bool) +# 490| 3: [ReturnStmt]: return ... +# 492| [TopLevelFunction]: void Conditional_Void(bool) # 492| params: -# 492| 0: a -# 492| Type = bool -# 492| body: { ... } -# 493| 0: ExprStmt -# 493| 0: ... ? ... : ... -# 493| Type = void +# 492| 0: [Parameter]: a +# 492| Type = [BoolType]: bool +# 492| body: [Block]: { ... } +# 493| 0: [ExprStmt]: ExprStmt +# 493| 0: [ConditionalExpr]: ... ? ... : ... +# 493| Type = [VoidType]: void # 493| ValueCategory = prvalue -# 493| 0: a -# 493| Type = bool +# 493| 0: [VariableAccess]: a +# 493| Type = [BoolType]: bool # 493| ValueCategory = prvalue(load) -# 493| 1: call to VoidFunc -# 493| Type = void +# 493| 1: [FunctionCall]: call to VoidFunc +# 493| Type = [VoidType]: void # 493| ValueCategory = prvalue -# 493| 2: call to VoidFunc -# 493| Type = void +# 493| 2: [FunctionCall]: call to VoidFunc +# 493| Type = [VoidType]: void # 493| ValueCategory = prvalue -# 494| 1: return ... -# 496| void Nullptr() +# 494| 1: [ReturnStmt]: return ... +# 496| [TopLevelFunction]: void Nullptr() # 496| params: -# 496| body: { ... } -# 497| 0: declaration -# 497| 0: definition of p -# 497| Type = int * -# 497| init: initializer for p -# 497| expr: (int *)... +# 496| body: [Block]: { ... } +# 497| 0: [DeclStmt]: declaration +# 497| 0: [VariableDeclarationEntry]: definition of p +# 497| Type = [IntPointerType]: int * +# 497| init: [Initializer]: initializer for p +# 497| expr: [PointerConversion]: (int *)... # 497| Conversion = pointer conversion -# 497| Type = int * -# 497| Value = 0 +# 497| Type = [IntPointerType]: int * +# 497| Value = [PointerConversion]: 0 # 497| ValueCategory = prvalue -# 497| expr: 0 -# 497| Type = decltype(nullptr) -# 497| Value = 0 +# 497| expr: [Zero]: 0 +# 497| Type = [NullPointerType]: decltype(nullptr) +# 497| Value = [Zero]: 0 # 497| ValueCategory = prvalue -# 498| 1: declaration -# 498| 0: definition of q -# 498| Type = int * -# 498| init: initializer for q -# 498| expr: (int *)... +# 498| 1: [DeclStmt]: declaration +# 498| 0: [VariableDeclarationEntry]: definition of q +# 498| Type = [IntPointerType]: int * +# 498| init: [Initializer]: initializer for q +# 498| expr: [IntegralToPointerConversion]: (int *)... # 498| Conversion = integral to pointer conversion -# 498| Type = int * -# 498| Value = 0 +# 498| Type = [IntPointerType]: int * +# 498| Value = [IntegralToPointerConversion]: 0 # 498| ValueCategory = prvalue -# 498| expr: 0 -# 498| Type = int -# 498| Value = 0 +# 498| expr: [Zero]: 0 +# 498| Type = [IntType]: int +# 498| Value = [Zero]: 0 # 498| ValueCategory = prvalue -# 499| 2: ExprStmt -# 499| 0: ... = ... -# 499| Type = int * +# 499| 2: [ExprStmt]: ExprStmt +# 499| 0: [AssignExpr]: ... = ... +# 499| Type = [IntPointerType]: int * # 499| ValueCategory = lvalue -# 499| 0: p -# 499| Type = int * +# 499| 0: [VariableAccess]: p +# 499| Type = [IntPointerType]: int * # 499| ValueCategory = lvalue -# 499| 1: (int *)... +# 499| 1: [PointerConversion]: (int *)... # 499| Conversion = pointer conversion -# 499| Type = int * -# 499| Value = 0 +# 499| Type = [IntPointerType]: int * +# 499| Value = [PointerConversion]: 0 # 499| ValueCategory = prvalue -# 499| expr: 0 -# 499| Type = decltype(nullptr) -# 499| Value = 0 +# 499| expr: [Zero]: 0 +# 499| Type = [NullPointerType]: decltype(nullptr) +# 499| Value = [Zero]: 0 # 499| ValueCategory = prvalue -# 500| 3: ExprStmt -# 500| 0: ... = ... -# 500| Type = int * +# 500| 3: [ExprStmt]: ExprStmt +# 500| 0: [AssignExpr]: ... = ... +# 500| Type = [IntPointerType]: int * # 500| ValueCategory = lvalue -# 500| 0: q -# 500| Type = int * +# 500| 0: [VariableAccess]: q +# 500| Type = [IntPointerType]: int * # 500| ValueCategory = lvalue -# 500| 1: (int *)... +# 500| 1: [IntegralToPointerConversion]: (int *)... # 500| Conversion = integral to pointer conversion -# 500| Type = int * -# 500| Value = 0 +# 500| Type = [IntPointerType]: int * +# 500| Value = [IntegralToPointerConversion]: 0 # 500| ValueCategory = prvalue -# 500| expr: 0 -# 500| Type = int -# 500| Value = 0 +# 500| expr: [Zero]: 0 +# 500| Type = [IntType]: int +# 500| Value = [Zero]: 0 # 500| ValueCategory = prvalue -# 501| 4: return ... -# 503| void InitList(int, float) +# 501| 4: [ReturnStmt]: return ... +# 503| [TopLevelFunction]: void InitList(int, float) # 503| params: -# 503| 0: x -# 503| Type = int -# 503| 1: f -# 503| Type = float -# 503| body: { ... } -# 504| 0: declaration -# 504| 0: definition of pt1 -# 504| Type = Point -# 504| init: initializer for pt1 -# 504| expr: {...} -# 504| Type = Point +# 503| 0: [Parameter]: x +# 503| Type = [IntType]: int +# 503| 1: [Parameter]: f +# 503| Type = [FloatType]: float +# 503| body: [Block]: { ... } +# 504| 0: [DeclStmt]: declaration +# 504| 0: [VariableDeclarationEntry]: definition of pt1 +# 504| Type = [Struct]: Point +# 504| init: [Initializer]: initializer for pt1 +# 504| expr: [ClassAggregateLiteral]: {...} +# 504| Type = [Struct]: Point # 504| ValueCategory = prvalue -# 504| .x: x -# 504| Type = int +# 504| .x: [VariableAccess]: x +# 504| Type = [IntType]: int # 504| ValueCategory = prvalue(load) -# 504| .y: (int)... +# 504| .y: [FloatingPointToIntegralConversion]: (int)... # 504| Conversion = floating point to integral conversion -# 504| Type = int +# 504| Type = [IntType]: int # 504| ValueCategory = prvalue -# 504| expr: f -# 504| Type = float +# 504| expr: [VariableAccess]: f +# 504| Type = [FloatType]: float # 504| ValueCategory = prvalue(load) -# 505| 1: declaration -# 505| 0: definition of pt2 -# 505| Type = Point -# 505| init: initializer for pt2 -# 505| expr: {...} -# 505| Type = Point +# 505| 1: [DeclStmt]: declaration +# 505| 0: [VariableDeclarationEntry]: definition of pt2 +# 505| Type = [Struct]: Point +# 505| init: [Initializer]: initializer for pt2 +# 505| expr: [ClassAggregateLiteral]: {...} +# 505| Type = [Struct]: Point # 505| ValueCategory = prvalue -# 505| .x: x -# 505| Type = int +# 505| .x: [VariableAccess]: x +# 505| Type = [IntType]: int # 505| ValueCategory = prvalue(load) -# 506| 2: declaration -# 506| 0: definition of pt3 -# 506| Type = Point -# 506| init: initializer for pt3 -# 506| expr: {...} -# 506| Type = Point +# 506| 2: [DeclStmt]: declaration +# 506| 0: [VariableDeclarationEntry]: definition of pt3 +# 506| Type = [Struct]: Point +# 506| init: [Initializer]: initializer for pt3 +# 506| expr: [ClassAggregateLiteral]: {...} +# 506| Type = [Struct]: Point # 506| ValueCategory = prvalue -# 508| 3: declaration -# 508| 0: definition of x1 -# 508| Type = int -# 508| init: initializer for x1 -# 508| expr: 1 -# 508| Type = int -# 508| Value = 1 +# 508| 3: [DeclStmt]: declaration +# 508| 0: [VariableDeclarationEntry]: definition of x1 +# 508| Type = [IntType]: int +# 508| init: [Initializer]: initializer for x1 +# 508| expr: [Literal]: 1 +# 508| Type = [IntType]: int +# 508| Value = [Literal]: 1 # 508| ValueCategory = prvalue -# 509| 4: declaration -# 509| 0: definition of x2 -# 509| Type = int -# 509| init: initializer for x2 -# 509| expr: 0 -# 509| Type = int -# 509| Value = 0 +# 509| 4: [DeclStmt]: declaration +# 509| 0: [VariableDeclarationEntry]: definition of x2 +# 509| Type = [IntType]: int +# 509| init: [Initializer]: initializer for x2 +# 509| expr: [Zero]: 0 +# 509| Type = [IntType]: int +# 509| Value = [Zero]: 0 # 509| ValueCategory = prvalue -# 510| 5: return ... -# 512| void NestedInitList(int, float) +# 510| 5: [ReturnStmt]: return ... +# 512| [TopLevelFunction]: void NestedInitList(int, float) # 512| params: -# 512| 0: x -# 512| Type = int -# 512| 1: f -# 512| Type = float -# 512| body: { ... } -# 513| 0: declaration -# 513| 0: definition of r1 -# 513| Type = Rect -# 513| init: initializer for r1 -# 513| expr: {...} -# 513| Type = Rect +# 512| 0: [Parameter]: x +# 512| Type = [IntType]: int +# 512| 1: [Parameter]: f +# 512| Type = [FloatType]: float +# 512| body: [Block]: { ... } +# 513| 0: [DeclStmt]: declaration +# 513| 0: [VariableDeclarationEntry]: definition of r1 +# 513| Type = [Struct]: Rect +# 513| init: [Initializer]: initializer for r1 +# 513| expr: [ClassAggregateLiteral]: {...} +# 513| Type = [Struct]: Rect # 513| ValueCategory = prvalue -# 514| 1: declaration -# 514| 0: definition of r2 -# 514| Type = Rect -# 514| init: initializer for r2 -# 514| expr: {...} -# 514| Type = Rect +# 514| 1: [DeclStmt]: declaration +# 514| 0: [VariableDeclarationEntry]: definition of r2 +# 514| Type = [Struct]: Rect +# 514| init: [Initializer]: initializer for r2 +# 514| expr: [ClassAggregateLiteral]: {...} +# 514| Type = [Struct]: Rect # 514| ValueCategory = prvalue -# 514| .topLeft: {...} -# 514| Type = Point +# 514| .topLeft: [ClassAggregateLiteral]: {...} +# 514| Type = [Struct]: Point # 514| ValueCategory = prvalue -# 514| .x: x -# 514| Type = int +# 514| .x: [VariableAccess]: x +# 514| Type = [IntType]: int # 514| ValueCategory = prvalue(load) -# 514| .y: (int)... +# 514| .y: [FloatingPointToIntegralConversion]: (int)... # 514| Conversion = floating point to integral conversion -# 514| Type = int +# 514| Type = [IntType]: int # 514| ValueCategory = prvalue -# 514| expr: f -# 514| Type = float +# 514| expr: [VariableAccess]: f +# 514| Type = [FloatType]: float # 514| ValueCategory = prvalue(load) -# 515| 2: declaration -# 515| 0: definition of r3 -# 515| Type = Rect -# 515| init: initializer for r3 -# 515| expr: {...} -# 515| Type = Rect +# 515| 2: [DeclStmt]: declaration +# 515| 0: [VariableDeclarationEntry]: definition of r3 +# 515| Type = [Struct]: Rect +# 515| init: [Initializer]: initializer for r3 +# 515| expr: [ClassAggregateLiteral]: {...} +# 515| Type = [Struct]: Rect # 515| ValueCategory = prvalue -# 515| .topLeft: {...} -# 515| Type = Point +# 515| .topLeft: [ClassAggregateLiteral]: {...} +# 515| Type = [Struct]: Point # 515| ValueCategory = prvalue -# 515| .x: x -# 515| Type = int +# 515| .x: [VariableAccess]: x +# 515| Type = [IntType]: int # 515| ValueCategory = prvalue(load) -# 515| .y: (int)... +# 515| .y: [FloatingPointToIntegralConversion]: (int)... # 515| Conversion = floating point to integral conversion -# 515| Type = int +# 515| Type = [IntType]: int # 515| ValueCategory = prvalue -# 515| expr: f -# 515| Type = float +# 515| expr: [VariableAccess]: f +# 515| Type = [FloatType]: float # 515| ValueCategory = prvalue(load) -# 515| .bottomRight: {...} -# 515| Type = Point +# 515| .bottomRight: [ClassAggregateLiteral]: {...} +# 515| Type = [Struct]: Point # 515| ValueCategory = prvalue -# 515| .x: x -# 515| Type = int +# 515| .x: [VariableAccess]: x +# 515| Type = [IntType]: int # 515| ValueCategory = prvalue(load) -# 515| .y: (int)... +# 515| .y: [FloatingPointToIntegralConversion]: (int)... # 515| Conversion = floating point to integral conversion -# 515| Type = int +# 515| Type = [IntType]: int # 515| ValueCategory = prvalue -# 515| expr: f -# 515| Type = float +# 515| expr: [VariableAccess]: f +# 515| Type = [FloatType]: float # 515| ValueCategory = prvalue(load) -# 516| 3: declaration -# 516| 0: definition of r4 -# 516| Type = Rect -# 516| init: initializer for r4 -# 516| expr: {...} -# 516| Type = Rect +# 516| 3: [DeclStmt]: declaration +# 516| 0: [VariableDeclarationEntry]: definition of r4 +# 516| Type = [Struct]: Rect +# 516| init: [Initializer]: initializer for r4 +# 516| expr: [ClassAggregateLiteral]: {...} +# 516| Type = [Struct]: Rect # 516| ValueCategory = prvalue -# 516| .topLeft: {...} -# 516| Type = Point +# 516| .topLeft: [ClassAggregateLiteral]: {...} +# 516| Type = [Struct]: Point # 516| ValueCategory = prvalue -# 516| .x: x -# 516| Type = int +# 516| .x: [VariableAccess]: x +# 516| Type = [IntType]: int # 516| ValueCategory = prvalue(load) -# 516| .bottomRight: {...} -# 516| Type = Point +# 516| .bottomRight: [ClassAggregateLiteral]: {...} +# 516| Type = [Struct]: Point # 516| ValueCategory = prvalue -# 516| .x: x -# 516| Type = int +# 516| .x: [VariableAccess]: x +# 516| Type = [IntType]: int # 516| ValueCategory = prvalue(load) -# 517| 4: return ... -# 519| void ArrayInit(int, float) +# 517| 4: [ReturnStmt]: return ... +# 519| [TopLevelFunction]: void ArrayInit(int, float) # 519| params: -# 519| 0: x -# 519| Type = int -# 519| 1: f -# 519| Type = float -# 519| body: { ... } -# 520| 0: declaration -# 520| 0: definition of a1 -# 520| Type = int[3] -# 520| init: initializer for a1 -# 520| expr: {...} -# 520| Type = int[3] +# 519| 0: [Parameter]: x +# 519| Type = [IntType]: int +# 519| 1: [Parameter]: f +# 519| Type = [FloatType]: float +# 519| body: [Block]: { ... } +# 520| 0: [DeclStmt]: declaration +# 520| 0: [VariableDeclarationEntry]: definition of a1 +# 520| Type = [ArrayType]: int[3] +# 520| init: [Initializer]: initializer for a1 +# 520| expr: [ArrayAggregateLiteral]: {...} +# 520| Type = [ArrayType]: int[3] # 520| ValueCategory = prvalue -# 521| 1: declaration -# 521| 0: definition of a2 -# 521| Type = int[3] -# 521| init: initializer for a2 -# 521| expr: {...} -# 521| Type = int[3] +# 521| 1: [DeclStmt]: declaration +# 521| 0: [VariableDeclarationEntry]: definition of a2 +# 521| Type = [ArrayType]: int[3] +# 521| init: [Initializer]: initializer for a2 +# 521| expr: [ArrayAggregateLiteral]: {...} +# 521| Type = [ArrayType]: int[3] # 521| ValueCategory = prvalue -# 521| [0]: x -# 521| Type = int +# 521| [0]: [VariableAccess]: x +# 521| Type = [IntType]: int # 521| ValueCategory = prvalue(load) -# 521| [1]: (int)... +# 521| [1]: [FloatingPointToIntegralConversion]: (int)... # 521| Conversion = floating point to integral conversion -# 521| Type = int +# 521| Type = [IntType]: int # 521| ValueCategory = prvalue -# 521| expr: f -# 521| Type = float +# 521| expr: [VariableAccess]: f +# 521| Type = [FloatType]: float # 521| ValueCategory = prvalue(load) -# 521| [2]: 0 -# 521| Type = int -# 521| Value = 0 +# 521| [2]: [Zero]: 0 +# 521| Type = [IntType]: int +# 521| Value = [Zero]: 0 # 521| ValueCategory = prvalue -# 522| 2: declaration -# 522| 0: definition of a3 -# 522| Type = int[3] -# 522| init: initializer for a3 -# 522| expr: {...} -# 522| Type = int[3] +# 522| 2: [DeclStmt]: declaration +# 522| 0: [VariableDeclarationEntry]: definition of a3 +# 522| Type = [ArrayType]: int[3] +# 522| init: [Initializer]: initializer for a3 +# 522| expr: [ArrayAggregateLiteral]: {...} +# 522| Type = [ArrayType]: int[3] # 522| ValueCategory = prvalue -# 522| [0]: x -# 522| Type = int +# 522| [0]: [VariableAccess]: x +# 522| Type = [IntType]: int # 522| ValueCategory = prvalue(load) -# 523| 3: return ... -# 525| U& U::operator=(U const&) +# 523| 3: [ReturnStmt]: return ... +# 525| [CopyAssignmentOperator]: U& U::operator=(U const&) # 525| params: -#-----| 0: p#0 -#-----| Type = const U & -# 525| U& U::operator=(U&&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const U & +# 525| [MoveAssignmentOperator]: U& U::operator=(U&&) # 525| params: -#-----| 0: p#0 -#-----| Type = U && -# 530| void UnionInit(int, float) +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: U && +# 530| [TopLevelFunction]: void UnionInit(int, float) # 530| params: -# 530| 0: x -# 530| Type = int -# 530| 1: f -# 530| Type = float -# 530| body: { ... } -# 531| 0: declaration -# 531| 0: definition of u1 -# 531| Type = U -# 531| init: initializer for u1 -# 531| expr: {...} -# 531| Type = U +# 530| 0: [Parameter]: x +# 530| Type = [IntType]: int +# 530| 1: [Parameter]: f +# 530| Type = [FloatType]: float +# 530| body: [Block]: { ... } +# 531| 0: [DeclStmt]: declaration +# 531| 0: [VariableDeclarationEntry]: definition of u1 +# 531| Type = [Union]: U +# 531| init: [Initializer]: initializer for u1 +# 531| expr: [ClassAggregateLiteral]: {...} +# 531| Type = [Union]: U # 531| ValueCategory = prvalue -# 531| .d: (double)... +# 531| .d: [FloatingPointConversion]: (double)... # 531| Conversion = floating point conversion -# 531| Type = double +# 531| Type = [DoubleType]: double # 531| ValueCategory = prvalue -# 531| expr: f -# 531| Type = float +# 531| expr: [VariableAccess]: f +# 531| Type = [FloatType]: float # 531| ValueCategory = prvalue(load) -# 533| 1: return ... -# 535| void EarlyReturn(int, int) +# 533| 1: [ReturnStmt]: return ... +# 535| [TopLevelFunction]: void EarlyReturn(int, int) # 535| params: -# 535| 0: x -# 535| Type = int -# 535| 1: y -# 535| Type = int -# 535| body: { ... } -# 536| 0: if (...) ... -# 536| 0: ... < ... -# 536| Type = bool +# 535| 0: [Parameter]: x +# 535| Type = [IntType]: int +# 535| 1: [Parameter]: y +# 535| Type = [IntType]: int +# 535| body: [Block]: { ... } +# 536| 0: [IfStmt]: if (...) ... +# 536| 0: [LTExpr]: ... < ... +# 536| Type = [BoolType]: bool # 536| ValueCategory = prvalue -# 536| 0: x -# 536| Type = int +# 536| 0: [VariableAccess]: x +# 536| Type = [IntType]: int # 536| ValueCategory = prvalue(load) -# 536| 1: y -# 536| Type = int +# 536| 1: [VariableAccess]: y +# 536| Type = [IntType]: int # 536| ValueCategory = prvalue(load) -# 536| 1: { ... } -# 537| 0: return ... -# 540| 1: ExprStmt -# 540| 0: ... = ... -# 540| Type = int +# 536| 1: [Block]: { ... } +# 537| 0: [ReturnStmt]: return ... +# 540| 1: [ExprStmt]: ExprStmt +# 540| 0: [AssignExpr]: ... = ... +# 540| Type = [IntType]: int # 540| ValueCategory = lvalue -# 540| 0: y -# 540| Type = int +# 540| 0: [VariableAccess]: y +# 540| Type = [IntType]: int # 540| ValueCategory = lvalue -# 540| 1: x -# 540| Type = int +# 540| 1: [VariableAccess]: x +# 540| Type = [IntType]: int # 540| ValueCategory = prvalue(load) -# 541| 2: return ... -# 543| int EarlyReturnValue(int, int) +# 541| 2: [ReturnStmt]: return ... +# 543| [TopLevelFunction]: int EarlyReturnValue(int, int) # 543| params: -# 543| 0: x -# 543| Type = int -# 543| 1: y -# 543| Type = int -# 543| body: { ... } -# 544| 0: if (...) ... -# 544| 0: ... < ... -# 544| Type = bool +# 543| 0: [Parameter]: x +# 543| Type = [IntType]: int +# 543| 1: [Parameter]: y +# 543| Type = [IntType]: int +# 543| body: [Block]: { ... } +# 544| 0: [IfStmt]: if (...) ... +# 544| 0: [LTExpr]: ... < ... +# 544| Type = [BoolType]: bool # 544| ValueCategory = prvalue -# 544| 0: x -# 544| Type = int +# 544| 0: [VariableAccess]: x +# 544| Type = [IntType]: int # 544| ValueCategory = prvalue(load) -# 544| 1: y -# 544| Type = int +# 544| 1: [VariableAccess]: y +# 544| Type = [IntType]: int # 544| ValueCategory = prvalue(load) -# 544| 1: { ... } -# 545| 0: return ... -# 545| 0: x -# 545| Type = int +# 544| 1: [Block]: { ... } +# 545| 0: [ReturnStmt]: return ... +# 545| 0: [VariableAccess]: x +# 545| Type = [IntType]: int # 545| ValueCategory = prvalue(load) -# 548| 1: return ... -# 548| 0: ... + ... -# 548| Type = int +# 548| 1: [ReturnStmt]: return ... +# 548| 0: [AddExpr]: ... + ... +# 548| Type = [IntType]: int # 548| ValueCategory = prvalue -# 548| 0: x -# 548| Type = int +# 548| 0: [VariableAccess]: x +# 548| Type = [IntType]: int # 548| ValueCategory = prvalue(load) -# 548| 1: y -# 548| Type = int +# 548| 1: [VariableAccess]: y +# 548| Type = [IntType]: int # 548| ValueCategory = prvalue(load) -# 551| int CallViaFuncPtr(int(*)(int)) +# 551| [TopLevelFunction]: int CallViaFuncPtr(int(*)(int)) # 551| params: -# 551| 0: pfn -# 551| Type = ..(*)(..) -# 551| body: { ... } -# 552| 0: return ... -# 552| 0: call to expression -# 552| Type = int +# 551| 0: [Parameter]: pfn +# 551| Type = [FunctionPointerType]: ..(*)(..) +# 551| body: [Block]: { ... } +# 552| 0: [ReturnStmt]: return ... +# 552| 0: [VariableCall]: call to expression +# 552| Type = [IntType]: int # 552| ValueCategory = prvalue -# 552| 0: pfn -# 552| Type = ..(*)(..) +# 552| 0: [VariableAccess]: pfn +# 552| Type = [FunctionPointerType]: ..(*)(..) # 552| ValueCategory = prvalue(load) -# 552| 1: 5 -# 552| Type = int -# 552| Value = 5 +# 552| 1: [Literal]: 5 +# 552| Type = [IntType]: int +# 552| Value = [Literal]: 5 # 552| ValueCategory = prvalue -# 560| int EnumSwitch(E) +# 560| [TopLevelFunction]: int EnumSwitch(E) # 560| params: -# 560| 0: e -# 560| Type = E -# 560| body: { ... } -# 561| 0: switch (...) ... -# 561| 0: (int)... +# 560| 0: [Parameter]: e +# 560| Type = [TypedefType]: E +# 560| body: [Block]: { ... } +# 561| 0: [SwitchStmt]: switch (...) ... +# 561| 0: [IntegralConversion]: (int)... # 561| Conversion = integral conversion -# 561| Type = int +# 561| Type = [IntType]: int # 561| ValueCategory = prvalue -# 561| expr: e -# 561| Type = E +# 561| expr: [VariableAccess]: e +# 561| Type = [TypedefType]: E # 561| ValueCategory = prvalue(load) -# 561| 1: { ... } -# 562| 0: case ...: -# 562| 0: (int)... +# 561| 1: [Block]: { ... } +# 562| 0: [SwitchCase]: case ...: +# 562| 0: [IntegralConversion]: (int)... # 562| Conversion = integral conversion -# 562| Type = int -# 562| Value = 0 +# 562| Type = [IntType]: int +# 562| Value = [IntegralConversion]: 0 # 562| ValueCategory = prvalue -# 562| expr: E_0 -# 562| Type = E -# 562| Value = 0 +# 562| expr: [EnumConstantAccess]: E_0 +# 562| Type = [Enum]: E +# 562| Value = [EnumConstantAccess]: 0 # 562| ValueCategory = prvalue -# 563| 1: return ... -# 563| 0: 0 -# 563| Type = int -# 563| Value = 0 +# 563| 1: [ReturnStmt]: return ... +# 563| 0: [Zero]: 0 +# 563| Type = [IntType]: int +# 563| Value = [Zero]: 0 # 563| ValueCategory = prvalue -# 564| 2: case ...: -# 564| 0: (int)... +# 564| 2: [SwitchCase]: case ...: +# 564| 0: [IntegralConversion]: (int)... # 564| Conversion = integral conversion -# 564| Type = int -# 564| Value = 1 +# 564| Type = [IntType]: int +# 564| Value = [IntegralConversion]: 1 # 564| ValueCategory = prvalue -# 564| expr: E_1 -# 564| Type = E -# 564| Value = 1 +# 564| expr: [EnumConstantAccess]: E_1 +# 564| Type = [Enum]: E +# 564| Value = [EnumConstantAccess]: 1 # 564| ValueCategory = prvalue -# 565| 3: return ... -# 565| 0: 1 -# 565| Type = int -# 565| Value = 1 +# 565| 3: [ReturnStmt]: return ... +# 565| 0: [Literal]: 1 +# 565| Type = [IntType]: int +# 565| Value = [Literal]: 1 # 565| ValueCategory = prvalue -# 566| 4: default: -# 567| 5: return ... -# 567| 0: - ... -# 567| Type = int -# 567| Value = -1 +# 566| 4: [SwitchCase]: default: +# 567| 5: [ReturnStmt]: return ... +# 567| 0: [UnaryMinusExpr]: - ... +# 567| Type = [IntType]: int +# 567| Value = [UnaryMinusExpr]: -1 # 567| ValueCategory = prvalue -# 567| 0: 1 -# 567| Type = int -# 567| Value = 1 +# 567| 0: [Literal]: 1 +# 567| Type = [IntType]: int +# 567| Value = [Literal]: 1 # 567| ValueCategory = prvalue -# 571| void InitArray() +# 571| [TopLevelFunction]: void InitArray() # 571| params: -# 571| body: { ... } -# 572| 0: declaration -# 572| 0: definition of a_pad -# 572| Type = char[32] -# 572| init: initializer for a_pad +# 571| body: [Block]: { ... } +# 572| 0: [DeclStmt]: declaration +# 572| 0: [VariableDeclarationEntry]: definition of a_pad +# 572| Type = [ArrayType]: char[32] +# 572| init: [Initializer]: initializer for a_pad # 572| expr: -# 572| Type = const char[1] -# 572| Value = "" +# 572| Type = [ArrayType]: const char[1] +# 572| Value = [StringLiteral]: "" # 572| ValueCategory = lvalue -# 573| 1: declaration -# 573| 0: definition of a_nopad -# 573| Type = char[4] -# 573| init: initializer for a_nopad +# 573| 1: [DeclStmt]: declaration +# 573| 0: [VariableDeclarationEntry]: definition of a_nopad +# 573| Type = [ArrayType]: char[4] +# 573| init: [Initializer]: initializer for a_nopad # 573| expr: foo -# 573| Type = const char[4] -# 573| Value = "foo" +# 573| Type = [ArrayType]: const char[4] +# 573| Value = [StringLiteral]: "foo" # 573| ValueCategory = lvalue -# 574| 2: declaration -# 574| 0: definition of a_infer -# 574| Type = char[] -# 574| init: initializer for a_infer +# 574| 2: [DeclStmt]: declaration +# 574| 0: [VariableDeclarationEntry]: definition of a_infer +# 574| Type = [ArrayType]: char[] +# 574| init: [Initializer]: initializer for a_infer # 574| expr: blah -# 574| Type = const char[5] -# 574| Value = "blah" +# 574| Type = [ArrayType]: const char[5] +# 574| Value = [StringLiteral]: "blah" # 574| ValueCategory = lvalue -# 575| 3: declaration -# 575| 0: definition of b -# 575| Type = char[2] -# 576| 4: declaration -# 576| 0: definition of c -# 576| Type = char[2] -# 576| init: initializer for c -# 576| expr: {...} -# 576| Type = char[2] +# 575| 3: [DeclStmt]: declaration +# 575| 0: [VariableDeclarationEntry]: definition of b +# 575| Type = [ArrayType]: char[2] +# 576| 4: [DeclStmt]: declaration +# 576| 0: [VariableDeclarationEntry]: definition of c +# 576| Type = [ArrayType]: char[2] +# 576| init: [Initializer]: initializer for c +# 576| expr: [ArrayAggregateLiteral]: {...} +# 576| Type = [ArrayType]: char[2] # 576| ValueCategory = prvalue -# 577| 5: declaration -# 577| 0: definition of d -# 577| Type = char[2] -# 577| init: initializer for d -# 577| expr: {...} -# 577| Type = char[2] +# 577| 5: [DeclStmt]: declaration +# 577| 0: [VariableDeclarationEntry]: definition of d +# 577| Type = [ArrayType]: char[2] +# 577| init: [Initializer]: initializer for d +# 577| expr: [ArrayAggregateLiteral]: {...} +# 577| Type = [ArrayType]: char[2] # 577| ValueCategory = prvalue -# 577| [0]: (char)... +# 577| [0]: [IntegralConversion]: (char)... # 577| Conversion = integral conversion -# 577| Type = char -# 577| Value = 0 +# 577| Type = [PlainCharType]: char +# 577| Value = [IntegralConversion]: 0 # 577| ValueCategory = prvalue -# 577| expr: 0 -# 577| Type = int -# 577| Value = 0 +# 577| expr: [Zero]: 0 +# 577| Type = [IntType]: int +# 577| Value = [Zero]: 0 # 577| ValueCategory = prvalue -# 578| 6: declaration -# 578| 0: definition of e -# 578| Type = char[2] -# 578| init: initializer for e -# 578| expr: {...} -# 578| Type = char[2] +# 578| 6: [DeclStmt]: declaration +# 578| 0: [VariableDeclarationEntry]: definition of e +# 578| Type = [ArrayType]: char[2] +# 578| init: [Initializer]: initializer for e +# 578| expr: [ArrayAggregateLiteral]: {...} +# 578| Type = [ArrayType]: char[2] # 578| ValueCategory = prvalue -# 578| [0]: (char)... +# 578| [0]: [IntegralConversion]: (char)... # 578| Conversion = integral conversion -# 578| Type = char -# 578| Value = 0 +# 578| Type = [PlainCharType]: char +# 578| Value = [IntegralConversion]: 0 # 578| ValueCategory = prvalue -# 578| expr: 0 -# 578| Type = int -# 578| Value = 0 +# 578| expr: [Zero]: 0 +# 578| Type = [IntType]: int +# 578| Value = [Zero]: 0 # 578| ValueCategory = prvalue -# 578| [1]: (char)... +# 578| [1]: [IntegralConversion]: (char)... # 578| Conversion = integral conversion -# 578| Type = char -# 578| Value = 1 +# 578| Type = [PlainCharType]: char +# 578| Value = [IntegralConversion]: 1 # 578| ValueCategory = prvalue -# 578| expr: 1 -# 578| Type = int -# 578| Value = 1 +# 578| expr: [Literal]: 1 +# 578| Type = [IntType]: int +# 578| Value = [Literal]: 1 # 578| ValueCategory = prvalue -# 579| 7: declaration -# 579| 0: definition of f -# 579| Type = char[3] -# 579| init: initializer for f -# 579| expr: {...} -# 579| Type = char[3] +# 579| 7: [DeclStmt]: declaration +# 579| 0: [VariableDeclarationEntry]: definition of f +# 579| Type = [ArrayType]: char[3] +# 579| init: [Initializer]: initializer for f +# 579| expr: [ArrayAggregateLiteral]: {...} +# 579| Type = [ArrayType]: char[3] # 579| ValueCategory = prvalue -# 579| [0]: (char)... +# 579| [0]: [IntegralConversion]: (char)... # 579| Conversion = integral conversion -# 579| Type = char -# 579| Value = 0 +# 579| Type = [PlainCharType]: char +# 579| Value = [IntegralConversion]: 0 # 579| ValueCategory = prvalue -# 579| expr: 0 -# 579| Type = int -# 579| Value = 0 +# 579| expr: [Zero]: 0 +# 579| Type = [IntType]: int +# 579| Value = [Zero]: 0 # 579| ValueCategory = prvalue -# 580| 8: return ... -# 582| void VarArgFunction(char const*) +# 580| 8: [ReturnStmt]: return ... +# 582| [TopLevelFunction]: void VarArgFunction(char const*) # 582| params: -# 582| 0: s -# 582| Type = const char * -# 584| void VarArgs() +# 582| 0: [Parameter]: s +# 582| Type = [PointerType]: const char * +# 584| [TopLevelFunction]: void VarArgs() # 584| params: -# 584| body: { ... } -# 585| 0: ExprStmt -# 585| 0: call to VarArgFunction -# 585| Type = void +# 584| body: [Block]: { ... } +# 585| 0: [ExprStmt]: ExprStmt +# 585| 0: [FunctionCall]: call to VarArgFunction +# 585| Type = [VoidType]: void # 585| ValueCategory = prvalue -# 585| 0: array to pointer conversion -# 585| Type = const char * +# 585| 0: [ArrayToPointerConversion]: array to pointer conversion +# 585| Type = [PointerType]: const char * # 585| ValueCategory = prvalue # 585| expr: %d %s -# 585| Type = const char[6] -# 585| Value = "%d %s" +# 585| Type = [ArrayType]: const char[6] +# 585| Value = [StringLiteral]: "%d %s" # 585| ValueCategory = lvalue -# 585| 1: 1 -# 585| Type = int -# 585| Value = 1 +# 585| 1: [Literal]: 1 +# 585| Type = [IntType]: int +# 585| Value = [Literal]: 1 # 585| ValueCategory = prvalue -# 585| 2: array to pointer conversion -# 585| Type = const char * +# 585| 2: [ArrayToPointerConversion]: array to pointer conversion +# 585| Type = [PointerType]: const char * # 585| ValueCategory = prvalue # 585| expr: string -# 585| Type = const char[7] -# 585| Value = "string" +# 585| Type = [ArrayType]: const char[7] +# 585| Value = [StringLiteral]: "string" # 585| ValueCategory = lvalue -# 586| 1: return ... -# 588| int FuncPtrTarget(int) +# 586| 1: [ReturnStmt]: return ... +# 588| [TopLevelFunction]: int FuncPtrTarget(int) # 588| params: -# 588| 0: p#0 -# 588| Type = int -# 590| void SetFuncPtr() +# 588| 0: [Parameter]: p#0 +# 588| Type = [IntType]: int +# 590| [TopLevelFunction]: void SetFuncPtr() # 590| params: -# 590| body: { ... } -# 591| 0: declaration -# 591| 0: definition of pfn -# 591| Type = ..(*)(..) -# 591| init: initializer for pfn -# 591| expr: FuncPtrTarget -# 591| Type = ..(*)(..) +# 590| body: [Block]: { ... } +# 591| 0: [DeclStmt]: declaration +# 591| 0: [VariableDeclarationEntry]: definition of pfn +# 591| Type = [FunctionPointerType]: ..(*)(..) +# 591| init: [Initializer]: initializer for pfn +# 591| expr: [FunctionAccess]: FuncPtrTarget +# 591| Type = [FunctionPointerType]: ..(*)(..) # 591| ValueCategory = prvalue(load) -# 592| 1: ExprStmt -# 592| 0: ... = ... -# 592| Type = ..(*)(..) +# 592| 1: [ExprStmt]: ExprStmt +# 592| 0: [AssignExpr]: ... = ... +# 592| Type = [FunctionPointerType]: ..(*)(..) # 592| ValueCategory = lvalue -# 592| 0: pfn -# 592| Type = ..(*)(..) +# 592| 0: [VariableAccess]: pfn +# 592| Type = [FunctionPointerType]: ..(*)(..) # 592| ValueCategory = lvalue -# 592| 1: & ... -# 592| Type = ..(*)(..) +# 592| 1: [AddressOfExpr]: & ... +# 592| Type = [FunctionPointerType]: ..(*)(..) # 592| ValueCategory = prvalue -# 592| 0: FuncPtrTarget -# 592| Type = ..()(..) +# 592| 0: [FunctionAccess]: FuncPtrTarget +# 592| Type = [RoutineType]: ..()(..) # 592| ValueCategory = lvalue -# 593| 2: ExprStmt -# 593| 0: ... = ... -# 593| Type = ..(*)(..) +# 593| 2: [ExprStmt]: ExprStmt +# 593| 0: [AssignExpr]: ... = ... +# 593| Type = [FunctionPointerType]: ..(*)(..) # 593| ValueCategory = lvalue -# 593| 0: pfn -# 593| Type = ..(*)(..) +# 593| 0: [VariableAccess]: pfn +# 593| Type = [FunctionPointerType]: ..(*)(..) # 593| ValueCategory = lvalue -# 593| 1: * ... -# 593| Type = ..(*)(..) +# 593| 1: [PointerDereferenceExpr]: * ... +# 593| Type = [FunctionPointerType]: ..(*)(..) # 593| ValueCategory = prvalue(load) -# 593| 0: FuncPtrTarget -# 593| Type = ..(*)(..) +# 593| 0: [FunctionAccess]: FuncPtrTarget +# 593| Type = [FunctionPointerType]: ..(*)(..) # 593| ValueCategory = prvalue(load) -# 594| 3: ExprStmt -# 594| 0: ... = ... -# 594| Type = ..(*)(..) +# 594| 3: [ExprStmt]: ExprStmt +# 594| 0: [AssignExpr]: ... = ... +# 594| Type = [FunctionPointerType]: ..(*)(..) # 594| ValueCategory = lvalue -# 594| 0: pfn -# 594| Type = ..(*)(..) +# 594| 0: [VariableAccess]: pfn +# 594| Type = [FunctionPointerType]: ..(*)(..) # 594| ValueCategory = lvalue -# 594| 1: * ... -# 594| Type = ..(*)(..) +# 594| 1: [PointerDereferenceExpr]: * ... +# 594| Type = [FunctionPointerType]: ..(*)(..) # 594| ValueCategory = prvalue(load) -# 594| 0: * ... -# 594| Type = ..(*)(..) +# 594| 0: [PointerDereferenceExpr]: * ... +# 594| Type = [FunctionPointerType]: ..(*)(..) # 594| ValueCategory = prvalue(load) -# 594| 0: * ... -# 594| Type = ..(*)(..) +# 594| 0: [PointerDereferenceExpr]: * ... +# 594| Type = [FunctionPointerType]: ..(*)(..) # 594| ValueCategory = prvalue(load) -# 594| 0: & ... -# 594| Type = ..(*)(..) +# 594| 0: [AddressOfExpr]: & ... +# 594| Type = [FunctionPointerType]: ..(*)(..) # 594| ValueCategory = prvalue -# 594| 0: FuncPtrTarget -# 594| Type = ..()(..) +# 594| 0: [FunctionAccess]: FuncPtrTarget +# 594| Type = [RoutineType]: ..()(..) # 594| ValueCategory = lvalue -# 595| 4: return ... -# 599| void String::String(String const&) +# 595| 4: [ReturnStmt]: return ... +# 599| [CopyConstructor]: void String::String(String const&) # 599| params: -# 599| 0: p#0 -# 599| Type = const String & -# 600| void String::String(String&&) +# 599| 0: [Parameter]: p#0 +# 599| Type = [LValueReferenceType]: const String & +# 600| [MoveConstructor]: void String::String(String&&) # 600| params: -# 600| 0: p#0 -# 600| Type = String && -# 601| void String::String(char const*) +# 600| 0: [Parameter]: p#0 +# 600| Type = [RValueReferenceType]: String && +# 601| [ConversionConstructor]: void String::String(char const*) # 601| params: -# 601| 0: p#0 -# 601| Type = const char * -# 602| void String::~String() +# 601| 0: [Parameter]: p#0 +# 601| Type = [PointerType]: const char * +# 602| [Destructor]: void String::~String() # 602| params: -# 604| String& String::operator=(String const&) +# 604| [CopyAssignmentOperator]: String& String::operator=(String const&) # 604| params: -# 604| 0: p#0 -# 604| Type = const String & -# 605| String& String::operator=(String&&) +# 604| 0: [Parameter]: p#0 +# 604| Type = [LValueReferenceType]: const String & +# 605| [MoveAssignmentOperator]: String& String::operator=(String&&) # 605| params: -# 605| 0: p#0 -# 605| Type = String && -# 607| char const* String::c_str() const +# 605| 0: [Parameter]: p#0 +# 605| Type = [RValueReferenceType]: String && +# 607| [ConstMemberFunction]: char const* String::c_str() const # 607| params: -# 613| String ReturnObject() +# 613| [TopLevelFunction]: String ReturnObject() # 613| params: -# 615| void DeclareObject() +# 615| [TopLevelFunction]: void DeclareObject() # 615| params: -# 615| body: { ... } -# 616| 0: declaration -# 616| 0: definition of s1 -# 616| Type = String -# 616| init: initializer for s1 -# 616| expr: call to String -# 616| Type = void +# 615| body: [Block]: { ... } +# 616| 0: [DeclStmt]: declaration +# 616| 0: [VariableDeclarationEntry]: definition of s1 +# 616| Type = [Struct]: String +# 616| init: [Initializer]: initializer for s1 +# 616| expr: [ConstructorCall]: call to String +# 616| Type = [VoidType]: void # 616| ValueCategory = prvalue -# 617| 1: declaration -# 617| 0: definition of s2 -# 617| Type = String -# 617| init: initializer for s2 -# 617| expr: call to String -# 617| Type = void +# 617| 1: [DeclStmt]: declaration +# 617| 0: [VariableDeclarationEntry]: definition of s2 +# 617| Type = [Struct]: String +# 617| init: [Initializer]: initializer for s2 +# 617| expr: [ConstructorCall]: call to String +# 617| Type = [VoidType]: void # 617| ValueCategory = prvalue -# 617| 0: array to pointer conversion -# 617| Type = const char * +# 617| 0: [ArrayToPointerConversion]: array to pointer conversion +# 617| Type = [PointerType]: const char * # 617| ValueCategory = prvalue # 617| expr: hello -# 617| Type = const char[6] -# 617| Value = "hello" +# 617| Type = [ArrayType]: const char[6] +# 617| Value = [StringLiteral]: "hello" # 617| ValueCategory = lvalue -# 618| 2: declaration -# 618| 0: definition of s3 -# 618| Type = String -# 618| init: initializer for s3 -# 618| expr: call to ReturnObject -# 618| Type = String +# 618| 2: [DeclStmt]: declaration +# 618| 0: [VariableDeclarationEntry]: definition of s3 +# 618| Type = [Struct]: String +# 618| init: [Initializer]: initializer for s3 +# 618| expr: [FunctionCall]: call to ReturnObject +# 618| Type = [Struct]: String # 618| ValueCategory = prvalue -# 619| 3: declaration -# 619| 0: definition of s4 -# 619| Type = String -# 619| init: initializer for s4 -# 619| expr: call to String -# 619| Type = void +# 619| 3: [DeclStmt]: declaration +# 619| 0: [VariableDeclarationEntry]: definition of s4 +# 619| Type = [Struct]: String +# 619| init: [Initializer]: initializer for s4 +# 619| expr: [ConstructorCall]: call to String +# 619| Type = [VoidType]: void # 619| ValueCategory = prvalue -# 619| 0: array to pointer conversion -# 619| Type = const char * +# 619| 0: [ArrayToPointerConversion]: array to pointer conversion +# 619| Type = [PointerType]: const char * # 619| ValueCategory = prvalue # 619| expr: test -# 619| Type = const char[5] -# 619| Value = "test" +# 619| Type = [ArrayType]: const char[5] +# 619| Value = [StringLiteral]: "test" # 619| ValueCategory = lvalue -# 620| 4: return ... -# 622| void CallMethods(String&, String*, String) +# 620| 4: [ReturnStmt]: return ... +# 622| [TopLevelFunction]: void CallMethods(String&, String*, String) # 622| params: -# 622| 0: r -# 622| Type = String & -# 622| 1: p -# 622| Type = String * -# 622| 2: s -# 622| Type = String -# 622| body: { ... } -# 623| 0: ExprStmt -# 623| 0: call to c_str -# 623| Type = const char * +# 622| 0: [Parameter]: r +# 622| Type = [LValueReferenceType]: String & +# 622| 1: [Parameter]: p +# 622| Type = [PointerType]: String * +# 622| 2: [Parameter]: s +# 622| Type = [Struct]: String +# 622| body: [Block]: { ... } +# 623| 0: [ExprStmt]: ExprStmt +# 623| 0: [FunctionCall]: call to c_str +# 623| Type = [PointerType]: const char * # 623| ValueCategory = prvalue -# 623| -1: (const String)... +# 623| -1: [GlvalueConversion]: (const String)... # 623| Conversion = glvalue conversion -# 623| Type = const String +# 623| Type = [SpecifiedType]: const String # 623| ValueCategory = lvalue -# 623| expr: (reference dereference) -# 623| Type = String +# 623| expr: [ReferenceDereferenceExpr]: (reference dereference) +# 623| Type = [Struct]: String # 623| ValueCategory = lvalue -# 623| expr: r -# 623| Type = String & +# 623| expr: [VariableAccess]: r +# 623| Type = [LValueReferenceType]: String & # 623| ValueCategory = prvalue(load) -# 624| 1: ExprStmt -# 624| 0: call to c_str -# 624| Type = const char * +# 624| 1: [ExprStmt]: ExprStmt +# 624| 0: [FunctionCall]: call to c_str +# 624| Type = [PointerType]: const char * # 624| ValueCategory = prvalue -# 624| -1: (const String *)... +# 624| -1: [PointerConversion]: (const String *)... # 624| Conversion = pointer conversion -# 624| Type = const String * +# 624| Type = [PointerType]: const String * # 624| ValueCategory = prvalue -# 624| expr: p -# 624| Type = String * +# 624| expr: [VariableAccess]: p +# 624| Type = [PointerType]: String * # 624| ValueCategory = prvalue(load) -# 625| 2: ExprStmt -# 625| 0: call to c_str -# 625| Type = const char * +# 625| 2: [ExprStmt]: ExprStmt +# 625| 0: [FunctionCall]: call to c_str +# 625| Type = [PointerType]: const char * # 625| ValueCategory = prvalue -# 625| -1: (const String)... +# 625| -1: [GlvalueConversion]: (const String)... # 625| Conversion = glvalue conversion -# 625| Type = const String +# 625| Type = [SpecifiedType]: const String # 625| ValueCategory = lvalue -# 625| expr: s -# 625| Type = String +# 625| expr: [VariableAccess]: s +# 625| Type = [Struct]: String # 625| ValueCategory = lvalue -# 626| 3: return ... -# 628| C& C::operator=(C const&) +# 626| 3: [ReturnStmt]: return ... +# 628| [CopyAssignmentOperator]: C& C::operator=(C const&) # 628| params: -#-----| 0: p#0 -#-----| Type = const C & -# 628| C& C::operator=(C&&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const C & +# 628| [MoveAssignmentOperator]: C& C::operator=(C&&) # 628| params: -#-----| 0: p#0 -#-----| Type = C && -# 628| void C::C(C const&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: C && +# 628| [CopyConstructor]: void C::C(C const&) # 628| params: -#-----| 0: p#0 -#-----| Type = const C & -# 628| void C::C(C&&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const C & +# 628| [MoveConstructor]: void C::C(C&&) # 628| params: -#-----| 0: p#0 -#-----| Type = C && -# 628| void C::~C() +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: C && +# 628| [Destructor]: void C::~C() # 628| params: -# 630| int C::StaticMemberFunction(int) +# 630| [MemberFunction]: int C::StaticMemberFunction(int) # 630| params: -# 630| 0: x -# 630| Type = int -# 630| body: { ... } -# 631| 0: return ... -# 631| 0: x -# 631| Type = int +# 630| 0: [Parameter]: x +# 630| Type = [IntType]: int +# 630| body: [Block]: { ... } +# 631| 0: [ReturnStmt]: return ... +# 631| 0: [VariableAccess]: x +# 631| Type = [IntType]: int # 631| ValueCategory = prvalue(load) -# 634| int C::InstanceMemberFunction(int) +# 634| [MemberFunction]: int C::InstanceMemberFunction(int) # 634| params: -# 634| 0: x -# 634| Type = int -# 634| body: { ... } -# 635| 0: return ... -# 635| 0: x -# 635| Type = int +# 634| 0: [Parameter]: x +# 634| Type = [IntType]: int +# 634| body: [Block]: { ... } +# 635| 0: [ReturnStmt]: return ... +# 635| 0: [VariableAccess]: x +# 635| Type = [IntType]: int # 635| ValueCategory = prvalue(load) -# 638| int C::VirtualMemberFunction(int) +# 638| [VirtualFunction]: int C::VirtualMemberFunction(int) # 638| params: -# 638| 0: x -# 638| Type = int -# 638| body: { ... } -# 639| 0: return ... -# 639| 0: x -# 639| Type = int +# 638| 0: [Parameter]: x +# 638| Type = [IntType]: int +# 638| body: [Block]: { ... } +# 639| 0: [ReturnStmt]: return ... +# 639| 0: [VariableAccess]: x +# 639| Type = [IntType]: int # 639| ValueCategory = prvalue(load) -# 642| void C::FieldAccess() +# 642| [MemberFunction]: void C::FieldAccess() # 642| params: -# 642| body: { ... } -# 643| 0: ExprStmt -# 643| 0: ... = ... -# 643| Type = int +# 642| body: [Block]: { ... } +# 643| 0: [ExprStmt]: ExprStmt +# 643| 0: [AssignExpr]: ... = ... +# 643| Type = [IntType]: int # 643| ValueCategory = lvalue -# 643| 0: m_a -# 643| Type = int +# 643| 0: [FieldAccess]: m_a +# 643| Type = [IntType]: int # 643| ValueCategory = lvalue -# 643| -1: this -# 643| Type = C * +# 643| -1: [ThisExpr]: this +# 643| Type = [PointerType]: C * # 643| ValueCategory = prvalue(load) -# 643| 1: 0 -# 643| Type = int -# 643| Value = 0 +# 643| 1: [Zero]: 0 +# 643| Type = [IntType]: int +# 643| Value = [Zero]: 0 # 643| ValueCategory = prvalue -# 644| 1: ExprStmt -# 644| 0: ... = ... -# 644| Type = int +# 644| 1: [ExprStmt]: ExprStmt +# 644| 0: [AssignExpr]: ... = ... +# 644| Type = [IntType]: int # 644| ValueCategory = lvalue -# 644| 0: m_a -# 644| Type = int +# 644| 0: [FieldAccess]: m_a +# 644| Type = [IntType]: int # 644| ValueCategory = lvalue -# 644| -1: (...) -# 644| Type = C +# 644| -1: [ParenthesisExpr]: (...) +# 644| Type = [Class]: C # 644| ValueCategory = lvalue -# 644| expr: * ... -# 644| Type = C +# 644| expr: [PointerDereferenceExpr]: * ... +# 644| Type = [Class]: C # 644| ValueCategory = lvalue -# 644| 0: this -# 644| Type = C * +# 644| 0: [ThisExpr]: this +# 644| Type = [PointerType]: C * # 644| ValueCategory = prvalue(load) -# 644| 1: 1 -# 644| Type = int -# 644| Value = 1 +# 644| 1: [Literal]: 1 +# 644| Type = [IntType]: int +# 644| Value = [Literal]: 1 # 644| ValueCategory = prvalue -# 645| 2: ExprStmt -# 645| 0: ... = ... -# 645| Type = int +# 645| 2: [ExprStmt]: ExprStmt +# 645| 0: [AssignExpr]: ... = ... +# 645| Type = [IntType]: int # 645| ValueCategory = lvalue -# 645| 0: m_a -# 645| Type = int +# 645| 0: [FieldAccess]: m_a +# 645| Type = [IntType]: int # 645| ValueCategory = lvalue -#-----| -1: this -#-----| Type = C * +#-----| -1: [ThisExpr]: this +#-----| Type = [PointerType]: C * #-----| ValueCategory = prvalue(load) -# 645| 1: 2 -# 645| Type = int -# 645| Value = 2 +# 645| 1: [Literal]: 2 +# 645| Type = [IntType]: int +# 645| Value = [Literal]: 2 # 645| ValueCategory = prvalue -# 646| 3: declaration -# 646| 0: definition of x -# 646| Type = int -# 647| 4: ExprStmt -# 647| 0: ... = ... -# 647| Type = int +# 646| 3: [DeclStmt]: declaration +# 646| 0: [VariableDeclarationEntry]: definition of x +# 646| Type = [IntType]: int +# 647| 4: [ExprStmt]: ExprStmt +# 647| 0: [AssignExpr]: ... = ... +# 647| Type = [IntType]: int # 647| ValueCategory = lvalue -# 647| 0: x -# 647| Type = int +# 647| 0: [VariableAccess]: x +# 647| Type = [IntType]: int # 647| ValueCategory = lvalue -# 647| 1: m_a -# 647| Type = int +# 647| 1: [FieldAccess]: m_a +# 647| Type = [IntType]: int # 647| ValueCategory = prvalue(load) -# 647| -1: this -# 647| Type = C * +# 647| -1: [ThisExpr]: this +# 647| Type = [PointerType]: C * # 647| ValueCategory = prvalue(load) -# 648| 5: ExprStmt -# 648| 0: ... = ... -# 648| Type = int +# 648| 5: [ExprStmt]: ExprStmt +# 648| 0: [AssignExpr]: ... = ... +# 648| Type = [IntType]: int # 648| ValueCategory = lvalue -# 648| 0: x -# 648| Type = int +# 648| 0: [VariableAccess]: x +# 648| Type = [IntType]: int # 648| ValueCategory = lvalue -# 648| 1: m_a -# 648| Type = int +# 648| 1: [FieldAccess]: m_a +# 648| Type = [IntType]: int # 648| ValueCategory = prvalue(load) -# 648| -1: (...) -# 648| Type = C +# 648| -1: [ParenthesisExpr]: (...) +# 648| Type = [Class]: C # 648| ValueCategory = lvalue -# 648| expr: * ... -# 648| Type = C +# 648| expr: [PointerDereferenceExpr]: * ... +# 648| Type = [Class]: C # 648| ValueCategory = lvalue -# 648| 0: this -# 648| Type = C * +# 648| 0: [ThisExpr]: this +# 648| Type = [PointerType]: C * # 648| ValueCategory = prvalue(load) -# 649| 6: ExprStmt -# 649| 0: ... = ... -# 649| Type = int +# 649| 6: [ExprStmt]: ExprStmt +# 649| 0: [AssignExpr]: ... = ... +# 649| Type = [IntType]: int # 649| ValueCategory = lvalue -# 649| 0: x -# 649| Type = int +# 649| 0: [VariableAccess]: x +# 649| Type = [IntType]: int # 649| ValueCategory = lvalue -# 649| 1: m_a -# 649| Type = int +# 649| 1: [FieldAccess]: m_a +# 649| Type = [IntType]: int # 649| ValueCategory = prvalue(load) -#-----| -1: this -#-----| Type = C * +#-----| -1: [ThisExpr]: this +#-----| Type = [PointerType]: C * #-----| ValueCategory = prvalue(load) -# 650| 7: return ... -# 652| void C::MethodCalls() +# 650| 7: [ReturnStmt]: return ... +# 652| [MemberFunction]: void C::MethodCalls() # 652| params: -# 652| body: { ... } -# 653| 0: ExprStmt -# 653| 0: call to InstanceMemberFunction -# 653| Type = int +# 652| body: [Block]: { ... } +# 653| 0: [ExprStmt]: ExprStmt +# 653| 0: [FunctionCall]: call to InstanceMemberFunction +# 653| Type = [IntType]: int # 653| ValueCategory = prvalue -# 653| -1: this -# 653| Type = C * +# 653| -1: [ThisExpr]: this +# 653| Type = [PointerType]: C * # 653| ValueCategory = prvalue(load) -# 653| 0: 0 -# 653| Type = int -# 653| Value = 0 +# 653| 0: [Zero]: 0 +# 653| Type = [IntType]: int +# 653| Value = [Zero]: 0 # 653| ValueCategory = prvalue -# 654| 1: ExprStmt -# 654| 0: call to InstanceMemberFunction -# 654| Type = int +# 654| 1: [ExprStmt]: ExprStmt +# 654| 0: [FunctionCall]: call to InstanceMemberFunction +# 654| Type = [IntType]: int # 654| ValueCategory = prvalue -# 654| -1: (...) -# 654| Type = C +# 654| -1: [ParenthesisExpr]: (...) +# 654| Type = [Class]: C # 654| ValueCategory = lvalue -# 654| expr: * ... -# 654| Type = C +# 654| expr: [PointerDereferenceExpr]: * ... +# 654| Type = [Class]: C # 654| ValueCategory = lvalue -# 654| 0: this -# 654| Type = C * +# 654| 0: [ThisExpr]: this +# 654| Type = [PointerType]: C * # 654| ValueCategory = prvalue(load) -# 654| 0: 1 -# 654| Type = int -# 654| Value = 1 +# 654| 0: [Literal]: 1 +# 654| Type = [IntType]: int +# 654| Value = [Literal]: 1 # 654| ValueCategory = prvalue -# 655| 2: ExprStmt -# 655| 0: call to InstanceMemberFunction -# 655| Type = int +# 655| 2: [ExprStmt]: ExprStmt +# 655| 0: [FunctionCall]: call to InstanceMemberFunction +# 655| Type = [IntType]: int # 655| ValueCategory = prvalue -#-----| -1: this -#-----| Type = C * +#-----| -1: [ThisExpr]: this +#-----| Type = [PointerType]: C * #-----| ValueCategory = prvalue(load) -# 655| 0: 2 -# 655| Type = int -# 655| Value = 2 +# 655| 0: [Literal]: 2 +# 655| Type = [IntType]: int +# 655| Value = [Literal]: 2 # 655| ValueCategory = prvalue -# 656| 3: return ... -# 658| void C::C() +# 656| 3: [ReturnStmt]: return ... +# 658| [Constructor]: void C::C() # 658| params: # 658| initializations: -# 659| 0: constructor init of field m_a -# 659| Type = int +# 659| 0: [ConstructorFieldInit]: constructor init of field m_a +# 659| Type = [IntType]: int # 659| ValueCategory = prvalue -# 659| 0: 1 -# 659| Type = int -# 659| Value = 1 +# 659| 0: [Literal]: 1 +# 659| Type = [IntType]: int +# 659| Value = [Literal]: 1 # 659| ValueCategory = prvalue -# 663| 1: constructor init of field m_b -# 663| Type = String +# 663| 1: [ConstructorFieldInit]: constructor init of field m_b +# 663| Type = [Struct]: String # 663| ValueCategory = prvalue -# 663| 0: call to String -# 663| Type = void +# 663| 0: [ConstructorCall]: call to String +# 663| Type = [VoidType]: void # 663| ValueCategory = prvalue -# 660| 2: constructor init of field m_c -# 660| Type = char +# 660| 2: [ConstructorFieldInit]: constructor init of field m_c +# 660| Type = [PlainCharType]: char # 660| ValueCategory = prvalue -# 660| 0: (char)... +# 660| 0: [IntegralConversion]: (char)... # 660| Conversion = integral conversion -# 660| Type = char -# 660| Value = 3 +# 660| Type = [PlainCharType]: char +# 660| Value = [IntegralConversion]: 3 # 660| ValueCategory = prvalue -# 660| expr: 3 -# 660| Type = int -# 660| Value = 3 +# 660| expr: [Literal]: 3 +# 660| Type = [IntType]: int +# 660| Value = [Literal]: 3 # 660| ValueCategory = prvalue -# 661| 3: constructor init of field m_e -# 661| Type = void * +# 661| 3: [ConstructorFieldInit]: constructor init of field m_e +# 661| Type = [VoidPointerType]: void * # 661| ValueCategory = prvalue -# 661| 0: 0 -# 661| Type = void * -# 661| Value = 0 +# 661| 0: [Zero]: 0 +# 661| Type = [VoidPointerType]: void * +# 661| Value = [Zero]: 0 # 661| ValueCategory = prvalue -# 662| 4: constructor init of field m_f -# 662| Type = String +# 662| 4: [ConstructorFieldInit]: constructor init of field m_f +# 662| Type = [Struct]: String # 662| ValueCategory = prvalue -# 662| 0: call to String -# 662| Type = void +# 662| 0: [ConstructorCall]: call to String +# 662| Type = [VoidType]: void # 662| ValueCategory = prvalue -# 662| 0: array to pointer conversion -# 662| Type = const char * +# 662| 0: [ArrayToPointerConversion]: array to pointer conversion +# 662| Type = [PointerType]: const char * # 662| ValueCategory = prvalue # 662| expr: test -# 662| Type = const char[5] -# 662| Value = "test" +# 662| Type = [ArrayType]: const char[5] +# 662| Value = [StringLiteral]: "test" # 662| ValueCategory = lvalue -# 663| body: { ... } -# 664| 0: return ... -# 675| int DerefReference(int&) +# 663| body: [Block]: { ... } +# 664| 0: [ReturnStmt]: return ... +# 675| [TopLevelFunction]: int DerefReference(int&) # 675| params: -# 675| 0: r -# 675| Type = int & -# 675| body: { ... } -# 676| 0: return ... -# 676| 0: (reference dereference) -# 676| Type = int +# 675| 0: [Parameter]: r +# 675| Type = [LValueReferenceType]: int & +# 675| body: [Block]: { ... } +# 676| 0: [ReturnStmt]: return ... +# 676| 0: [ReferenceDereferenceExpr]: (reference dereference) +# 676| Type = [IntType]: int # 676| ValueCategory = prvalue(load) -# 676| expr: r -# 676| Type = int & +# 676| expr: [VariableAccess]: r +# 676| Type = [LValueReferenceType]: int & # 676| ValueCategory = prvalue(load) -# 679| int& TakeReference() +# 679| [TopLevelFunction]: int& TakeReference() # 679| params: -# 679| body: { ... } -# 680| 0: return ... -# 680| 0: (reference to) -# 680| Type = int & +# 679| body: [Block]: { ... } +# 680| 0: [ReturnStmt]: return ... +# 680| 0: [ReferenceToExpr]: (reference to) +# 680| Type = [LValueReferenceType]: int & # 680| ValueCategory = prvalue -# 680| expr: g -# 680| Type = int +# 680| expr: [VariableAccess]: g +# 680| Type = [IntType]: int # 680| ValueCategory = lvalue -# 683| String& ReturnReference() +# 683| [TopLevelFunction]: String& ReturnReference() # 683| params: -# 685| void InitReference(int) +# 685| [TopLevelFunction]: void InitReference(int) # 685| params: -# 685| 0: x -# 685| Type = int -# 685| body: { ... } -# 686| 0: declaration -# 686| 0: definition of r -# 686| Type = int & -# 686| init: initializer for r -# 686| expr: (reference to) -# 686| Type = int & +# 685| 0: [Parameter]: x +# 685| Type = [IntType]: int +# 685| body: [Block]: { ... } +# 686| 0: [DeclStmt]: declaration +# 686| 0: [VariableDeclarationEntry]: definition of r +# 686| Type = [LValueReferenceType]: int & +# 686| init: [Initializer]: initializer for r +# 686| expr: [ReferenceToExpr]: (reference to) +# 686| Type = [LValueReferenceType]: int & # 686| ValueCategory = prvalue -# 686| expr: x -# 686| Type = int +# 686| expr: [VariableAccess]: x +# 686| Type = [IntType]: int # 686| ValueCategory = lvalue -# 687| 1: declaration -# 687| 0: definition of r2 -# 687| Type = int & -# 687| init: initializer for r2 -# 687| expr: (reference to) -# 687| Type = int & +# 687| 1: [DeclStmt]: declaration +# 687| 0: [VariableDeclarationEntry]: definition of r2 +# 687| Type = [LValueReferenceType]: int & +# 687| init: [Initializer]: initializer for r2 +# 687| expr: [ReferenceToExpr]: (reference to) +# 687| Type = [LValueReferenceType]: int & # 687| ValueCategory = prvalue -# 687| expr: (reference dereference) -# 687| Type = int +# 687| expr: [ReferenceDereferenceExpr]: (reference dereference) +# 687| Type = [IntType]: int # 687| ValueCategory = lvalue -# 687| expr: r -# 687| Type = int & +# 687| expr: [VariableAccess]: r +# 687| Type = [LValueReferenceType]: int & # 687| ValueCategory = prvalue(load) -# 688| 2: declaration -# 688| 0: definition of r3 -# 688| Type = const String & -# 688| init: initializer for r3 -# 688| expr: (reference to) -# 688| Type = const String & +# 688| 2: [DeclStmt]: declaration +# 688| 0: [VariableDeclarationEntry]: definition of r3 +# 688| Type = [LValueReferenceType]: const String & +# 688| init: [Initializer]: initializer for r3 +# 688| expr: [ReferenceToExpr]: (reference to) +# 688| Type = [LValueReferenceType]: const String & # 688| ValueCategory = prvalue -# 688| expr: (const String)... +# 688| expr: [GlvalueConversion]: (const String)... # 688| Conversion = glvalue conversion -# 688| Type = const String +# 688| Type = [SpecifiedType]: const String # 688| ValueCategory = lvalue -# 688| expr: (reference dereference) -# 688| Type = String +# 688| expr: [ReferenceDereferenceExpr]: (reference dereference) +# 688| Type = [Struct]: String # 688| ValueCategory = lvalue -# 688| expr: call to ReturnReference -# 688| Type = String & +# 688| expr: [FunctionCall]: call to ReturnReference +# 688| Type = [LValueReferenceType]: String & # 688| ValueCategory = prvalue -# 689| 3: return ... -# 691| void ArrayReferences() +# 689| 3: [ReturnStmt]: return ... +# 691| [TopLevelFunction]: void ArrayReferences() # 691| params: -# 691| body: { ... } -# 692| 0: declaration -# 692| 0: definition of a -# 692| Type = int[10] -# 693| 1: declaration -# 693| 0: definition of ra -# 693| Type = int(&)[10] -# 693| init: initializer for ra -# 693| expr: (reference to) -# 693| Type = int(&)[10] +# 691| body: [Block]: { ... } +# 692| 0: [DeclStmt]: declaration +# 692| 0: [VariableDeclarationEntry]: definition of a +# 692| Type = [ArrayType]: int[10] +# 693| 1: [DeclStmt]: declaration +# 693| 0: [VariableDeclarationEntry]: definition of ra +# 693| Type = [LValueReferenceType]: int(&)[10] +# 693| init: [Initializer]: initializer for ra +# 693| expr: [ReferenceToExpr]: (reference to) +# 693| Type = [LValueReferenceType]: int(&)[10] # 693| ValueCategory = prvalue -# 693| expr: a -# 693| Type = int[10] +# 693| expr: [VariableAccess]: a +# 693| Type = [ArrayType]: int[10] # 693| ValueCategory = lvalue -# 694| 2: declaration -# 694| 0: definition of x -# 694| Type = int -# 694| init: initializer for x -# 694| expr: access to array -# 694| Type = int +# 694| 2: [DeclStmt]: declaration +# 694| 0: [VariableDeclarationEntry]: definition of x +# 694| Type = [IntType]: int +# 694| init: [Initializer]: initializer for x +# 694| expr: [ArrayExpr]: access to array +# 694| Type = [IntType]: int # 694| ValueCategory = prvalue(load) -# 694| 0: array to pointer conversion -# 694| Type = int * +# 694| 0: [ArrayToPointerConversion]: array to pointer conversion +# 694| Type = [IntPointerType]: int * # 694| ValueCategory = prvalue -# 694| expr: (reference dereference) -# 694| Type = int[10] +# 694| expr: [ReferenceDereferenceExpr]: (reference dereference) +# 694| Type = [ArrayType]: int[10] # 694| ValueCategory = lvalue -# 694| expr: ra -# 694| Type = int(&)[10] +# 694| expr: [VariableAccess]: ra +# 694| Type = [LValueReferenceType]: int(&)[10] # 694| ValueCategory = prvalue(load) -# 694| 1: 5 -# 694| Type = int -# 694| Value = 5 +# 694| 1: [Literal]: 5 +# 694| Type = [IntType]: int +# 694| Value = [Literal]: 5 # 694| ValueCategory = prvalue -# 695| 3: return ... -# 697| void FunctionReferences() +# 695| 3: [ReturnStmt]: return ... +# 697| [TopLevelFunction]: void FunctionReferences() # 697| params: -# 697| body: { ... } -# 698| 0: declaration -# 698| 0: definition of rfn -# 698| Type = ..(&)(..) -# 698| init: initializer for rfn -# 698| expr: (reference to) -# 698| Type = ..(&)(..) +# 697| body: [Block]: { ... } +# 698| 0: [DeclStmt]: declaration +# 698| 0: [VariableDeclarationEntry]: definition of rfn +# 698| Type = [FunctionReferenceType]: ..(&)(..) +# 698| init: [Initializer]: initializer for rfn +# 698| expr: [ReferenceToExpr]: (reference to) +# 698| Type = [FunctionReferenceType]: ..(&)(..) # 698| ValueCategory = prvalue -# 698| expr: FuncPtrTarget -# 698| Type = ..()(..) +# 698| expr: [FunctionAccess]: FuncPtrTarget +# 698| Type = [RoutineType]: ..()(..) # 698| ValueCategory = lvalue -# 699| 1: declaration -# 699| 0: definition of pfn -# 699| Type = ..(*)(..) -# 699| init: initializer for pfn -# 699| expr: (reference dereference) -# 699| Type = ..(*)(..) +# 699| 1: [DeclStmt]: declaration +# 699| 0: [VariableDeclarationEntry]: definition of pfn +# 699| Type = [FunctionPointerType]: ..(*)(..) +# 699| init: [Initializer]: initializer for pfn +# 699| expr: [ReferenceDereferenceExpr]: (reference dereference) +# 699| Type = [FunctionPointerType]: ..(*)(..) # 699| ValueCategory = prvalue(load) -# 699| expr: rfn -# 699| Type = ..(&)(..) +# 699| expr: [VariableAccess]: rfn +# 699| Type = [FunctionReferenceType]: ..(&)(..) # 699| ValueCategory = prvalue(load) -# 700| 2: ExprStmt -# 700| 0: call to expression -# 700| Type = int +# 700| 2: [ExprStmt]: ExprStmt +# 700| 0: [VariableCall]: call to expression +# 700| Type = [IntType]: int # 700| ValueCategory = prvalue -# 700| 0: (reference dereference) -# 700| Type = ..(*)(..) +# 700| 0: [ReferenceDereferenceExpr]: (reference dereference) +# 700| Type = [FunctionPointerType]: ..(*)(..) # 700| ValueCategory = prvalue(load) -# 700| expr: rfn -# 700| Type = ..(&)(..) +# 700| expr: [VariableAccess]: rfn +# 700| Type = [FunctionReferenceType]: ..(&)(..) # 700| ValueCategory = prvalue(load) -# 700| 1: 5 -# 700| Type = int -# 700| Value = 5 +# 700| 1: [Literal]: 5 +# 700| Type = [IntType]: int +# 700| Value = [Literal]: 5 # 700| ValueCategory = prvalue -# 701| 3: return ... -# 704| T min(T, T) +# 701| 3: [ReturnStmt]: return ... +# 704| [TemplateFunction]: T min(T, T) # 704| params: -# 704| 0: x -# 704| Type = T -# 704| 1: y -# 704| Type = T -# 704| body: { ... } -# 705| 0: return ... -# 705| 0: ... ? ... : ... -# 705| Type = unknown +# 704| 0: [Parameter]: x +# 704| Type = [TemplateParameter]: T +# 704| 1: [Parameter]: y +# 704| Type = [TemplateParameter]: T +# 704| body: [Block]: { ... } +# 705| 0: [ReturnStmt]: return ... +# 705| 0: [ConditionalExpr]: ... ? ... : ... +# 705| Type = [UnknownType]: unknown # 705| ValueCategory = prvalue -# 705| 0: (bool)... +# 705| 0: [BoolConversion]: (bool)... # 705| Conversion = conversion to bool -# 705| Type = bool +# 705| Type = [BoolType]: bool # 705| ValueCategory = prvalue -# 705| expr: (...) -# 705| Type = unknown +# 705| expr: [ParenthesisExpr]: (...) +# 705| Type = [UnknownType]: unknown # 705| ValueCategory = prvalue -# 705| expr: ... < ... -# 705| Type = unknown +# 705| expr: [LTExpr]: ... < ... +# 705| Type = [UnknownType]: unknown # 705| ValueCategory = prvalue -# 705| 0: x -# 705| Type = T +# 705| 0: [VariableAccess]: x +# 705| Type = [TemplateParameter]: T # 705| ValueCategory = lvalue -# 705| 1: y -# 705| Type = T +# 705| 1: [VariableAccess]: y +# 705| Type = [TemplateParameter]: T # 705| ValueCategory = lvalue -# 705| 1: x -# 705| Type = T +# 705| 1: [VariableAccess]: x +# 705| Type = [TemplateParameter]: T # 705| ValueCategory = lvalue -# 705| 2: y -# 705| Type = T +# 705| 2: [VariableAccess]: y +# 705| Type = [TemplateParameter]: T # 705| ValueCategory = lvalue -# 704| int min(int, int) +# 704| [FunctionTemplateSpecialization]: int min(int, int) # 704| params: -# 704| 0: x -# 704| Type = int -# 704| 1: y -# 704| Type = int -# 704| body: { ... } -# 705| 0: return ... -# 705| 0: ... ? ... : ... -# 705| Type = int +# 704| 0: [Parameter]: x +# 704| Type = [IntType]: int +# 704| 1: [Parameter]: y +# 704| Type = [IntType]: int +# 704| body: [Block]: { ... } +# 705| 0: [ReturnStmt]: return ... +# 705| 0: [ConditionalExpr]: ... ? ... : ... +# 705| Type = [IntType]: int # 705| ValueCategory = prvalue -# 705| 0: (...) -# 705| Type = bool +# 705| 0: [ParenthesisExpr]: (...) +# 705| Type = [BoolType]: bool # 705| ValueCategory = prvalue -# 705| expr: ... < ... -# 705| Type = bool +# 705| expr: [LTExpr]: ... < ... +# 705| Type = [BoolType]: bool # 705| ValueCategory = prvalue -# 705| 0: x -# 705| Type = int +# 705| 0: [VariableAccess]: x +# 705| Type = [IntType]: int # 705| ValueCategory = prvalue(load) -# 705| 1: y -# 705| Type = int +# 705| 1: [VariableAccess]: y +# 705| Type = [IntType]: int # 705| ValueCategory = prvalue(load) -# 705| 1: x -# 705| Type = int +# 705| 1: [VariableAccess]: x +# 705| Type = [IntType]: int # 705| ValueCategory = prvalue(load) -# 705| 2: y -# 705| Type = int +# 705| 2: [VariableAccess]: y +# 705| Type = [IntType]: int # 705| ValueCategory = prvalue(load) -# 708| int CallMin(int, int) +# 708| [TopLevelFunction]: int CallMin(int, int) # 708| params: -# 708| 0: x -# 708| Type = int -# 708| 1: y -# 708| Type = int -# 708| body: { ... } -# 709| 0: return ... -# 709| 0: call to min -# 709| Type = int +# 708| 0: [Parameter]: x +# 708| Type = [IntType]: int +# 708| 1: [Parameter]: y +# 708| Type = [IntType]: int +# 708| body: [Block]: { ... } +# 709| 0: [ReturnStmt]: return ... +# 709| 0: [FunctionCall]: call to min +# 709| Type = [IntType]: int # 709| ValueCategory = prvalue -# 709| 0: x -# 709| Type = int +# 709| 0: [VariableAccess]: x +# 709| Type = [IntType]: int # 709| ValueCategory = prvalue(load) -# 709| 1: y -# 709| Type = int +# 709| 1: [VariableAccess]: y +# 709| Type = [IntType]: int # 709| ValueCategory = prvalue(load) -# 713| Outer& Outer::operator=(Outer const&) +# 713| [CopyAssignmentOperator]: Outer& Outer::operator=(Outer const&) # 713| params: -#-----| 0: p#0 -#-----| Type = const Outer & -# 713| Outer& Outer::operator=(Outer&&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const Outer & +# 713| [MoveAssignmentOperator]: Outer& Outer::operator=(Outer&&) # 713| params: -#-----| 0: p#0 -#-----| Type = Outer && -# 715| T Outer::Func(U, V) +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: Outer && +# 715| [TemplateFunction]: T Outer::Func(U, V) # 715| params: -# 715| 0: x -# 715| Type = U -# 715| 1: y -# 715| Type = V -# 715| body: { ... } -# 716| 0: return ... -# 716| 0: 0 -# 716| Type = T -# 716| Value = 0 +# 715| 0: [Parameter]: x +# 715| Type = [TemplateParameter]: U +# 715| 1: [Parameter]: y +# 715| Type = [TemplateParameter]: V +# 715| body: [Block]: { ... } +# 716| 0: [ReturnStmt]: return ... +# 716| 0: [Zero]: 0 +# 716| Type = [TemplateParameter]: T +# 716| Value = [Zero]: 0 # 716| ValueCategory = prvalue -# 715| long Outer::Func(U, V) +# 715| [TemplateFunction]: long Outer::Func(U, V) # 715| params: -# 715| 0: x -# 715| Type = U -# 715| 1: y -# 715| Type = V -# 715| long Outer::Func(void*, char) +# 715| 0: [Parameter]: x +# 715| Type = [TemplateParameter]: U +# 715| 1: [Parameter]: y +# 715| Type = [TemplateParameter]: V +# 715| [FunctionTemplateSpecialization]: long Outer::Func(void*, char) # 715| params: -# 715| 0: x -# 715| Type = void * -# 715| 1: y -# 715| Type = char -# 715| body: { ... } -# 716| 0: return ... -# 716| 0: 0 -# 716| Type = long -# 716| Value = 0 +# 715| 0: [Parameter]: x +# 715| Type = [VoidPointerType]: void * +# 715| 1: [Parameter]: y +# 715| Type = [PlainCharType]: char +# 715| body: [Block]: { ... } +# 716| 0: [ReturnStmt]: return ... +# 716| 0: [Zero]: 0 +# 716| Type = [LongType]: long +# 716| Value = [Zero]: 0 # 716| ValueCategory = prvalue -# 720| double CallNestedTemplateFunc() +# 720| [TopLevelFunction]: double CallNestedTemplateFunc() # 720| params: -# 720| body: { ... } -# 721| 0: return ... -# 721| 0: (double)... +# 720| body: [Block]: { ... } +# 721| 0: [ReturnStmt]: return ... +# 721| 0: [IntegralToFloatingPointConversion]: (double)... # 721| Conversion = integral to floating point conversion -# 721| Type = double +# 721| Type = [DoubleType]: double # 721| ValueCategory = prvalue -# 721| expr: call to Func -# 721| Type = long +# 721| expr: [FunctionCall]: call to Func +# 721| Type = [LongType]: long # 721| ValueCategory = prvalue -# 721| 0: (void *)... +# 721| 0: [PointerConversion]: (void *)... # 721| Conversion = pointer conversion -# 721| Type = void * -# 721| Value = 0 +# 721| Type = [VoidPointerType]: void * +# 721| Value = [PointerConversion]: 0 # 721| ValueCategory = prvalue -# 721| expr: 0 -# 721| Type = decltype(nullptr) -# 721| Value = 0 +# 721| expr: [Zero]: 0 +# 721| Type = [NullPointerType]: decltype(nullptr) +# 721| Value = [Zero]: 0 # 721| ValueCategory = prvalue -# 721| 1: 111 -# 721| Type = char -# 721| Value = 111 +# 721| 1: [CharLiteral]: 111 +# 721| Type = [PlainCharType]: char +# 721| Value = [CharLiteral]: 111 # 721| ValueCategory = prvalue -# 724| void TryCatch(bool) +# 724| [TopLevelFunction]: void TryCatch(bool) # 724| params: -# 724| 0: b -# 724| Type = bool -# 724| body: { ... } -# 725| 0: try { ... } -# 725| 0: { ... } -# 726| 0: declaration -# 726| 0: definition of x -# 726| Type = int -# 726| init: initializer for x -# 726| expr: 5 -# 726| Type = int -# 726| Value = 5 +# 724| 0: [Parameter]: b +# 724| Type = [BoolType]: bool +# 724| body: [Block]: { ... } +# 725| 0: [TryStmt]: try { ... } +# 725| 0: [Block]: { ... } +# 726| 0: [DeclStmt]: declaration +# 726| 0: [VariableDeclarationEntry]: definition of x +# 726| Type = [IntType]: int +# 726| init: [Initializer]: initializer for x +# 726| expr: [Literal]: 5 +# 726| Type = [IntType]: int +# 726| Value = [Literal]: 5 # 726| ValueCategory = prvalue -# 727| 1: if (...) ... -# 727| 0: b -# 727| Type = bool +# 727| 1: [IfStmt]: if (...) ... +# 727| 0: [VariableAccess]: b +# 727| Type = [BoolType]: bool # 727| ValueCategory = prvalue(load) -# 727| 1: { ... } -# 728| 0: ExprStmt -# 728| 0: throw ... -# 728| Type = const char * +# 727| 1: [Block]: { ... } +# 728| 0: [ExprStmt]: ExprStmt +# 728| 0: [ThrowExpr]: throw ... +# 728| Type = [PointerType]: const char * # 728| ValueCategory = prvalue -# 728| 0: array to pointer conversion -# 728| Type = const char * +# 728| 0: [ArrayToPointerConversion]: array to pointer conversion +# 728| Type = [PointerType]: const char * # 728| ValueCategory = prvalue # 728| expr: string literal -# 728| Type = const char[15] -# 728| Value = "string literal" +# 728| Type = [ArrayType]: const char[15] +# 728| Value = [StringLiteral]: "string literal" # 728| ValueCategory = lvalue -# 730| 2: if (...) ... -# 730| 0: ... < ... -# 730| Type = bool +# 730| 2: [IfStmt]: if (...) ... +# 730| 0: [LTExpr]: ... < ... +# 730| Type = [BoolType]: bool # 730| ValueCategory = prvalue -# 730| 0: x -# 730| Type = int +# 730| 0: [VariableAccess]: x +# 730| Type = [IntType]: int # 730| ValueCategory = prvalue(load) -# 730| 1: 2 -# 730| Type = int -# 730| Value = 2 +# 730| 1: [Literal]: 2 +# 730| Type = [IntType]: int +# 730| Value = [Literal]: 2 # 730| ValueCategory = prvalue -# 730| 1: { ... } -# 731| 0: ExprStmt -# 731| 0: ... = ... -# 731| Type = int +# 730| 1: [Block]: { ... } +# 731| 0: [ExprStmt]: ExprStmt +# 731| 0: [AssignExpr]: ... = ... +# 731| Type = [IntType]: int # 731| ValueCategory = lvalue -# 731| 0: x -# 731| Type = int +# 731| 0: [VariableAccess]: x +# 731| Type = [IntType]: int # 731| ValueCategory = lvalue -# 731| 1: ... ? ... : ... -# 731| Type = int +# 731| 1: [ConditionalExpr]: ... ? ... : ... +# 731| Type = [IntType]: int # 731| ValueCategory = prvalue -# 731| 0: b -# 731| Type = bool +# 731| 0: [VariableAccess]: b +# 731| Type = [BoolType]: bool # 731| ValueCategory = prvalue(load) -# 731| 1: 7 -# 731| Type = int -# 731| Value = 7 +# 731| 1: [Literal]: 7 +# 731| Type = [IntType]: int +# 731| Value = [Literal]: 7 # 731| ValueCategory = prvalue -# 731| 2: throw ... -# 731| Type = String +# 731| 2: [ThrowExpr]: throw ... +# 731| Type = [Struct]: String # 731| ValueCategory = prvalue -# 731| 0: call to String -# 731| Type = void +# 731| 0: [ConstructorCall]: call to String +# 731| Type = [VoidType]: void # 731| ValueCategory = prvalue -# 731| 0: array to pointer conversion -# 731| Type = const char * +# 731| 0: [ArrayToPointerConversion]: array to pointer conversion +# 731| Type = [PointerType]: const char * # 731| ValueCategory = prvalue # 731| expr: String object -# 731| Type = const char[14] -# 731| Value = "String object" +# 731| Type = [ArrayType]: const char[14] +# 731| Value = [StringLiteral]: "String object" # 731| ValueCategory = lvalue -# 733| 2: ExprStmt -# 733| 0: ... = ... -# 733| Type = int +# 733| 2: [ExprStmt]: ExprStmt +# 733| 0: [AssignExpr]: ... = ... +# 733| Type = [IntType]: int # 733| ValueCategory = lvalue -# 733| 0: x -# 733| Type = int +# 733| 0: [VariableAccess]: x +# 733| Type = [IntType]: int # 733| ValueCategory = lvalue -# 733| 1: 7 -# 733| Type = int -# 733| Value = 7 +# 733| 1: [Literal]: 7 +# 733| Type = [IntType]: int +# 733| Value = [Literal]: 7 # 733| ValueCategory = prvalue -# 735| 1: -# 735| 0: { ... } -# 736| 0: ExprStmt -# 736| 0: throw ... -# 736| Type = String +# 735| 1: [Handler]: +# 735| 0: [CatchBlock]: { ... } +# 736| 0: [ExprStmt]: ExprStmt +# 736| 0: [ThrowExpr]: throw ... +# 736| Type = [Struct]: String # 736| ValueCategory = prvalue -# 736| 0: call to String -# 736| Type = void +# 736| 0: [ConstructorCall]: call to String +# 736| Type = [VoidType]: void # 736| ValueCategory = prvalue -# 736| 0: s -# 736| Type = const char * +# 736| 0: [VariableAccess]: s +# 736| Type = [PointerType]: const char * # 736| ValueCategory = prvalue(load) -# 738| 2: -# 738| 0: { ... } -# 740| 3: -# 740| 0: { ... } -# 741| 0: ExprStmt -# 741| 0: re-throw exception -# 741| Type = void +# 738| 2: [Handler]: +# 738| 0: [CatchBlock]: { ... } +# 740| 3: [Handler]: +# 740| 0: [CatchAnyBlock]: { ... } +# 741| 0: [ExprStmt]: ExprStmt +# 741| 0: [ReThrowExpr]: re-throw exception +# 741| Type = [VoidType]: void # 741| ValueCategory = prvalue -# 743| 1: return ... -# 745| Base& Base::operator=(Base const&) +# 743| 1: [ReturnStmt]: return ... +# 745| [CopyAssignmentOperator]: Base& Base::operator=(Base const&) # 745| params: -#-----| 0: p#0 -#-----| Type = const Base & -#-----| body: { ... } -#-----| 0: ExprStmt -#-----| 0: (reference dereference) -#-----| Type = String +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const Base & +#-----| body: [Block]: { ... } +#-----| 0: [ExprStmt]: ExprStmt +#-----| 0: [ReferenceDereferenceExpr]: (reference dereference) +#-----| Type = [Struct]: String #-----| ValueCategory = lvalue -# 745| expr: call to operator= -# 745| Type = String & +# 745| expr: [FunctionCall]: call to operator= +# 745| Type = [LValueReferenceType]: String & # 745| ValueCategory = prvalue -#-----| -1: & ... -#-----| Type = String * +#-----| -1: [AddressOfExpr]: & ... +#-----| Type = [PointerType]: String * #-----| ValueCategory = prvalue -#-----| 0: base_s -#-----| Type = String +#-----| 0: [FieldAccess]: base_s +#-----| Type = [Struct]: String #-----| ValueCategory = lvalue -#-----| -1: this -#-----| Type = Base * +#-----| -1: [ThisExpr]: this +#-----| Type = [PointerType]: Base * #-----| ValueCategory = prvalue(load) -#-----| 0: (reference to) -#-----| Type = const String & +#-----| 0: [ReferenceToExpr]: (reference to) +#-----| Type = [LValueReferenceType]: const String & #-----| ValueCategory = prvalue -#-----| expr: base_s -#-----| Type = String +#-----| expr: [FieldAccess]: base_s +#-----| Type = [Struct]: String #-----| ValueCategory = lvalue -#-----| -1: (reference dereference) -#-----| Type = const Base +#-----| -1: [ReferenceDereferenceExpr]: (reference dereference) +#-----| Type = [SpecifiedType]: const Base #-----| ValueCategory = lvalue -#-----| expr: p#0 -#-----| Type = const Base & +#-----| expr: [VariableAccess]: p#0 +#-----| Type = [LValueReferenceType]: const Base & #-----| ValueCategory = prvalue(load) -#-----| 1: return ... -#-----| 0: (reference to) -#-----| Type = Base & +#-----| 1: [ReturnStmt]: return ... +#-----| 0: [ReferenceToExpr]: (reference to) +#-----| Type = [LValueReferenceType]: Base & #-----| ValueCategory = prvalue -#-----| expr: * ... -#-----| Type = Base +#-----| expr: [PointerDereferenceExpr]: * ... +#-----| Type = [VirtualBaseClass]: Base #-----| ValueCategory = lvalue -#-----| 0: this -#-----| Type = Base * +#-----| 0: [ThisExpr]: this +#-----| Type = [PointerType]: Base * #-----| ValueCategory = prvalue(load) -# 745| void Base::Base(Base const&) +# 745| [CopyConstructor]: void Base::Base(Base const&) # 745| params: -#-----| 0: p#0 -#-----| Type = const Base & +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const Base & # 745| initializations: -# 745| 0: constructor init of field base_s -# 745| Type = String +# 745| 0: [ConstructorFieldInit]: constructor init of field base_s +# 745| Type = [Struct]: String # 745| ValueCategory = prvalue -# 745| 0: call to String -# 745| Type = void +# 745| 0: [ConstructorCall]: call to String +# 745| Type = [VoidType]: void # 745| ValueCategory = prvalue -# 745| body: { ... } -# 745| 0: return ... -# 748| void Base::Base() +# 745| body: [Block]: { ... } +# 745| 0: [ReturnStmt]: return ... +# 748| [Constructor]: void Base::Base() # 748| params: # 748| initializations: -# 748| 0: constructor init of field base_s -# 748| Type = String +# 748| 0: [ConstructorFieldInit]: constructor init of field base_s +# 748| Type = [Struct]: String # 748| ValueCategory = prvalue -# 748| 0: call to String -# 748| Type = void +# 748| 0: [ConstructorCall]: call to String +# 748| Type = [VoidType]: void # 748| ValueCategory = prvalue -# 748| body: { ... } -# 749| 0: return ... -# 750| void Base::~Base() +# 748| body: [Block]: { ... } +# 749| 0: [ReturnStmt]: return ... +# 750| [Destructor]: void Base::~Base() # 750| params: -# 750| body: { ... } -# 751| 0: return ... +# 750| body: [Block]: { ... } +# 751| 0: [ReturnStmt]: return ... # 750| destructions: -# 751| 0: destructor field destruction of base_s -# 751| Type = String +# 751| 0: [DestructorFieldDestruction]: destructor field destruction of base_s +# 751| Type = [Struct]: String # 751| ValueCategory = prvalue -# 751| 0: call to ~String -# 751| Type = void +# 751| 0: [DestructorCall]: call to ~String +# 751| Type = [VoidType]: void # 751| ValueCategory = prvalue -# 751| -1: base_s -# 751| Type = String +# 751| -1: [FieldAccess]: base_s +# 751| Type = [Struct]: String # 751| ValueCategory = lvalue -# 754| Middle& Middle::operator=(Middle const&) +# 754| [CopyAssignmentOperator]: Middle& Middle::operator=(Middle const&) # 754| params: -#-----| 0: p#0 -#-----| Type = const Middle & -#-----| body: { ... } -#-----| 0: ExprStmt -#-----| 0: (reference dereference) -#-----| Type = Base +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const Middle & +#-----| body: [Block]: { ... } +#-----| 0: [ExprStmt]: ExprStmt +#-----| 0: [ReferenceDereferenceExpr]: (reference dereference) +#-----| Type = [VirtualBaseClass]: Base #-----| ValueCategory = lvalue -# 754| expr: call to operator= -# 754| Type = Base & +# 754| expr: [FunctionCall]: call to operator= +# 754| Type = [LValueReferenceType]: Base & # 754| ValueCategory = prvalue -#-----| -1: (Base *)... +#-----| -1: [BaseClassConversion]: (Base *)... #-----| Conversion = base class conversion -#-----| Type = Base * +#-----| Type = [PointerType]: Base * #-----| ValueCategory = prvalue -#-----| expr: this -#-----| Type = Middle * +#-----| expr: [ThisExpr]: this +#-----| Type = [PointerType]: Middle * #-----| ValueCategory = prvalue(load) -#-----| 0: (reference to) -#-----| Type = const Base & +#-----| 0: [ReferenceToExpr]: (reference to) +#-----| Type = [LValueReferenceType]: const Base & #-----| ValueCategory = prvalue -#-----| expr: * ... -#-----| Type = const Base +#-----| expr: [PointerDereferenceExpr]: * ... +#-----| Type = [SpecifiedType]: const Base #-----| ValueCategory = lvalue -#-----| 0: (const Base *)... +#-----| 0: [BaseClassConversion]: (const Base *)... #-----| Conversion = base class conversion -#-----| Type = const Base * +#-----| Type = [PointerType]: const Base * #-----| ValueCategory = prvalue -#-----| expr: & ... -#-----| Type = const Middle * +#-----| expr: [AddressOfExpr]: & ... +#-----| Type = [PointerType]: const Middle * #-----| ValueCategory = prvalue -#-----| 0: (reference dereference) -#-----| Type = const Middle +#-----| 0: [ReferenceDereferenceExpr]: (reference dereference) +#-----| Type = [SpecifiedType]: const Middle #-----| ValueCategory = lvalue -#-----| expr: p#0 -#-----| Type = const Middle & +#-----| expr: [VariableAccess]: p#0 +#-----| Type = [LValueReferenceType]: const Middle & #-----| ValueCategory = prvalue(load) -#-----| 1: ExprStmt -#-----| 0: (reference dereference) -#-----| Type = String +#-----| 1: [ExprStmt]: ExprStmt +#-----| 0: [ReferenceDereferenceExpr]: (reference dereference) +#-----| Type = [Struct]: String #-----| ValueCategory = lvalue -# 754| expr: call to operator= -# 754| Type = String & +# 754| expr: [FunctionCall]: call to operator= +# 754| Type = [LValueReferenceType]: String & # 754| ValueCategory = prvalue -#-----| -1: & ... -#-----| Type = String * +#-----| -1: [AddressOfExpr]: & ... +#-----| Type = [PointerType]: String * #-----| ValueCategory = prvalue -#-----| 0: middle_s -#-----| Type = String +#-----| 0: [FieldAccess]: middle_s +#-----| Type = [Struct]: String #-----| ValueCategory = lvalue -#-----| -1: this -#-----| Type = Middle * +#-----| -1: [ThisExpr]: this +#-----| Type = [PointerType]: Middle * #-----| ValueCategory = prvalue(load) -#-----| 0: (reference to) -#-----| Type = const String & +#-----| 0: [ReferenceToExpr]: (reference to) +#-----| Type = [LValueReferenceType]: const String & #-----| ValueCategory = prvalue -#-----| expr: middle_s -#-----| Type = String +#-----| expr: [FieldAccess]: middle_s +#-----| Type = [Struct]: String #-----| ValueCategory = lvalue -#-----| -1: (reference dereference) -#-----| Type = const Middle +#-----| -1: [ReferenceDereferenceExpr]: (reference dereference) +#-----| Type = [SpecifiedType]: const Middle #-----| ValueCategory = lvalue -#-----| expr: p#0 -#-----| Type = const Middle & +#-----| expr: [VariableAccess]: p#0 +#-----| Type = [LValueReferenceType]: const Middle & #-----| ValueCategory = prvalue(load) -#-----| 2: return ... -#-----| 0: (reference to) -#-----| Type = Middle & +#-----| 2: [ReturnStmt]: return ... +#-----| 0: [ReferenceToExpr]: (reference to) +#-----| Type = [LValueReferenceType]: Middle & #-----| ValueCategory = prvalue -#-----| expr: * ... -#-----| Type = Middle +#-----| expr: [PointerDereferenceExpr]: * ... +#-----| Type = [Struct]: Middle #-----| ValueCategory = lvalue -#-----| 0: this -#-----| Type = Middle * +#-----| 0: [ThisExpr]: this +#-----| Type = [PointerType]: Middle * #-----| ValueCategory = prvalue(load) -# 754| void Middle::Middle(Middle const&) +# 754| [CopyConstructor]: void Middle::Middle(Middle const&) # 754| params: -#-----| 0: p#0 -#-----| Type = const Middle & -# 757| void Middle::Middle() +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const Middle & +# 757| [Constructor]: void Middle::Middle() # 757| params: # 757| initializations: -# 757| 0: call to Base -# 757| Type = void +# 757| 0: [ConstructorCall]: call to Base +# 757| Type = [VoidType]: void # 757| ValueCategory = prvalue -# 757| 1: constructor init of field middle_s -# 757| Type = String +# 757| 1: [ConstructorFieldInit]: constructor init of field middle_s +# 757| Type = [Struct]: String # 757| ValueCategory = prvalue -# 757| 0: call to String -# 757| Type = void +# 757| 0: [ConstructorCall]: call to String +# 757| Type = [VoidType]: void # 757| ValueCategory = prvalue -# 757| body: { ... } -# 758| 0: return ... -# 759| void Middle::~Middle() +# 757| body: [Block]: { ... } +# 758| 0: [ReturnStmt]: return ... +# 759| [Destructor]: void Middle::~Middle() # 759| params: -# 759| body: { ... } -# 760| 0: return ... +# 759| body: [Block]: { ... } +# 760| 0: [ReturnStmt]: return ... # 759| destructions: -# 760| 0: destructor field destruction of middle_s -# 760| Type = String +# 760| 0: [DestructorFieldDestruction]: destructor field destruction of middle_s +# 760| Type = [Struct]: String # 760| ValueCategory = prvalue -# 760| 0: call to ~String -# 760| Type = void +# 760| 0: [DestructorCall]: call to ~String +# 760| Type = [VoidType]: void # 760| ValueCategory = prvalue -# 760| -1: middle_s -# 760| Type = String +# 760| -1: [FieldAccess]: middle_s +# 760| Type = [Struct]: String # 760| ValueCategory = lvalue -# 760| 1: call to ~Base -# 760| Type = void +# 760| 1: [DestructorCall]: call to ~Base +# 760| Type = [VoidType]: void # 760| ValueCategory = prvalue -# 763| Derived& Derived::operator=(Derived const&) +# 763| [CopyAssignmentOperator]: Derived& Derived::operator=(Derived const&) # 763| params: -#-----| 0: p#0 -#-----| Type = const Derived & -#-----| body: { ... } -#-----| 0: ExprStmt -#-----| 0: (reference dereference) -#-----| Type = Middle +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const Derived & +#-----| body: [Block]: { ... } +#-----| 0: [ExprStmt]: ExprStmt +#-----| 0: [ReferenceDereferenceExpr]: (reference dereference) +#-----| Type = [Struct]: Middle #-----| ValueCategory = lvalue -# 763| expr: call to operator= -# 763| Type = Middle & +# 763| expr: [FunctionCall]: call to operator= +# 763| Type = [LValueReferenceType]: Middle & # 763| ValueCategory = prvalue -#-----| -1: (Middle *)... +#-----| -1: [BaseClassConversion]: (Middle *)... #-----| Conversion = base class conversion -#-----| Type = Middle * +#-----| Type = [PointerType]: Middle * #-----| ValueCategory = prvalue -#-----| expr: this -#-----| Type = Derived * +#-----| expr: [ThisExpr]: this +#-----| Type = [PointerType]: Derived * #-----| ValueCategory = prvalue(load) -#-----| 0: (reference to) -#-----| Type = const Middle & +#-----| 0: [ReferenceToExpr]: (reference to) +#-----| Type = [LValueReferenceType]: const Middle & #-----| ValueCategory = prvalue -#-----| expr: * ... -#-----| Type = const Middle +#-----| expr: [PointerDereferenceExpr]: * ... +#-----| Type = [SpecifiedType]: const Middle #-----| ValueCategory = lvalue -#-----| 0: (const Middle *)... +#-----| 0: [BaseClassConversion]: (const Middle *)... #-----| Conversion = base class conversion -#-----| Type = const Middle * +#-----| Type = [PointerType]: const Middle * #-----| ValueCategory = prvalue -#-----| expr: & ... -#-----| Type = const Derived * +#-----| expr: [AddressOfExpr]: & ... +#-----| Type = [PointerType]: const Derived * #-----| ValueCategory = prvalue -#-----| 0: (reference dereference) -#-----| Type = const Derived +#-----| 0: [ReferenceDereferenceExpr]: (reference dereference) +#-----| Type = [SpecifiedType]: const Derived #-----| ValueCategory = lvalue -#-----| expr: p#0 -#-----| Type = const Derived & +#-----| expr: [VariableAccess]: p#0 +#-----| Type = [LValueReferenceType]: const Derived & #-----| ValueCategory = prvalue(load) -#-----| 1: ExprStmt -#-----| 0: (reference dereference) -#-----| Type = String +#-----| 1: [ExprStmt]: ExprStmt +#-----| 0: [ReferenceDereferenceExpr]: (reference dereference) +#-----| Type = [Struct]: String #-----| ValueCategory = lvalue -# 763| expr: call to operator= -# 763| Type = String & +# 763| expr: [FunctionCall]: call to operator= +# 763| Type = [LValueReferenceType]: String & # 763| ValueCategory = prvalue -#-----| -1: & ... -#-----| Type = String * +#-----| -1: [AddressOfExpr]: & ... +#-----| Type = [PointerType]: String * #-----| ValueCategory = prvalue -#-----| 0: derived_s -#-----| Type = String +#-----| 0: [FieldAccess]: derived_s +#-----| Type = [Struct]: String #-----| ValueCategory = lvalue -#-----| -1: this -#-----| Type = Derived * +#-----| -1: [ThisExpr]: this +#-----| Type = [PointerType]: Derived * #-----| ValueCategory = prvalue(load) -#-----| 0: (reference to) -#-----| Type = const String & +#-----| 0: [ReferenceToExpr]: (reference to) +#-----| Type = [LValueReferenceType]: const String & #-----| ValueCategory = prvalue -#-----| expr: derived_s -#-----| Type = String +#-----| expr: [FieldAccess]: derived_s +#-----| Type = [Struct]: String #-----| ValueCategory = lvalue -#-----| -1: (reference dereference) -#-----| Type = const Derived +#-----| -1: [ReferenceDereferenceExpr]: (reference dereference) +#-----| Type = [SpecifiedType]: const Derived #-----| ValueCategory = lvalue -#-----| expr: p#0 -#-----| Type = const Derived & +#-----| expr: [VariableAccess]: p#0 +#-----| Type = [LValueReferenceType]: const Derived & #-----| ValueCategory = prvalue(load) -#-----| 2: return ... -#-----| 0: (reference to) -#-----| Type = Derived & +#-----| 2: [ReturnStmt]: return ... +#-----| 0: [ReferenceToExpr]: (reference to) +#-----| Type = [LValueReferenceType]: Derived & #-----| ValueCategory = prvalue -#-----| expr: * ... -#-----| Type = Derived +#-----| expr: [PointerDereferenceExpr]: * ... +#-----| Type = [Struct]: Derived #-----| ValueCategory = lvalue -#-----| 0: this -#-----| Type = Derived * +#-----| 0: [ThisExpr]: this +#-----| Type = [PointerType]: Derived * #-----| ValueCategory = prvalue(load) -# 763| void Derived::Derived(Derived const&) +# 763| [CopyConstructor]: void Derived::Derived(Derived const&) # 763| params: -#-----| 0: p#0 -#-----| Type = const Derived & -# 766| void Derived::Derived() +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const Derived & +# 766| [Constructor]: void Derived::Derived() # 766| params: # 766| initializations: -# 766| 0: call to Middle -# 766| Type = void +# 766| 0: [ConstructorCall]: call to Middle +# 766| Type = [VoidType]: void # 766| ValueCategory = prvalue -# 766| 1: constructor init of field derived_s -# 766| Type = String +# 766| 1: [ConstructorFieldInit]: constructor init of field derived_s +# 766| Type = [Struct]: String # 766| ValueCategory = prvalue -# 766| 0: call to String -# 766| Type = void +# 766| 0: [ConstructorCall]: call to String +# 766| Type = [VoidType]: void # 766| ValueCategory = prvalue -# 766| body: { ... } -# 767| 0: return ... -# 768| void Derived::~Derived() +# 766| body: [Block]: { ... } +# 767| 0: [ReturnStmt]: return ... +# 768| [Destructor]: void Derived::~Derived() # 768| params: -# 768| body: { ... } -# 769| 0: return ... +# 768| body: [Block]: { ... } +# 769| 0: [ReturnStmt]: return ... # 768| destructions: -# 769| 0: destructor field destruction of derived_s -# 769| Type = String +# 769| 0: [DestructorFieldDestruction]: destructor field destruction of derived_s +# 769| Type = [Struct]: String # 769| ValueCategory = prvalue -# 769| 0: call to ~String -# 769| Type = void +# 769| 0: [DestructorCall]: call to ~String +# 769| Type = [VoidType]: void # 769| ValueCategory = prvalue -# 769| -1: derived_s -# 769| Type = String +# 769| -1: [FieldAccess]: derived_s +# 769| Type = [Struct]: String # 769| ValueCategory = lvalue -# 769| 1: call to ~Middle -# 769| Type = void +# 769| 1: [DestructorCall]: call to ~Middle +# 769| Type = [VoidType]: void # 769| ValueCategory = prvalue -# 772| MiddleVB1& MiddleVB1::operator=(MiddleVB1 const&) +# 772| [CopyAssignmentOperator]: MiddleVB1& MiddleVB1::operator=(MiddleVB1 const&) # 772| params: -#-----| 0: p#0 -#-----| Type = const MiddleVB1 & -# 772| void MiddleVB1::MiddleVB1(MiddleVB1 const&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const MiddleVB1 & +# 772| [CopyConstructor]: void MiddleVB1::MiddleVB1(MiddleVB1 const&) # 772| params: -#-----| 0: p#0 -#-----| Type = const MiddleVB1 & -# 775| void MiddleVB1::MiddleVB1() +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const MiddleVB1 & +# 775| [Constructor]: void MiddleVB1::MiddleVB1() # 775| params: # 775| initializations: -# 775| 0: call to Base -# 775| Type = void +# 775| 0: [ConstructorCall]: call to Base +# 775| Type = [VoidType]: void # 775| ValueCategory = prvalue -# 775| 1: constructor init of field middlevb1_s -# 775| Type = String +# 775| 1: [ConstructorFieldInit]: constructor init of field middlevb1_s +# 775| Type = [Struct]: String # 775| ValueCategory = prvalue -# 775| 0: call to String -# 775| Type = void +# 775| 0: [ConstructorCall]: call to String +# 775| Type = [VoidType]: void # 775| ValueCategory = prvalue -# 775| body: { ... } -# 776| 0: return ... -# 777| void MiddleVB1::~MiddleVB1() +# 775| body: [Block]: { ... } +# 776| 0: [ReturnStmt]: return ... +# 777| [Destructor]: void MiddleVB1::~MiddleVB1() # 777| params: -# 777| body: { ... } -# 778| 0: return ... +# 777| body: [Block]: { ... } +# 778| 0: [ReturnStmt]: return ... # 777| destructions: -# 778| 0: destructor field destruction of middlevb1_s -# 778| Type = String +# 778| 0: [DestructorFieldDestruction]: destructor field destruction of middlevb1_s +# 778| Type = [Struct]: String # 778| ValueCategory = prvalue -# 778| 0: call to ~String -# 778| Type = void +# 778| 0: [DestructorCall]: call to ~String +# 778| Type = [VoidType]: void # 778| ValueCategory = prvalue -# 778| -1: middlevb1_s -# 778| Type = String +# 778| -1: [FieldAccess]: middlevb1_s +# 778| Type = [Struct]: String # 778| ValueCategory = lvalue -# 778| 1: call to ~Base -# 778| Type = void +# 778| 1: [DestructorCall]: call to ~Base +# 778| Type = [VoidType]: void # 778| ValueCategory = prvalue -# 781| MiddleVB2& MiddleVB2::operator=(MiddleVB2 const&) +# 781| [CopyAssignmentOperator]: MiddleVB2& MiddleVB2::operator=(MiddleVB2 const&) # 781| params: -#-----| 0: p#0 -#-----| Type = const MiddleVB2 & -# 781| void MiddleVB2::MiddleVB2(MiddleVB2 const&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const MiddleVB2 & +# 781| [CopyConstructor]: void MiddleVB2::MiddleVB2(MiddleVB2 const&) # 781| params: -#-----| 0: p#0 -#-----| Type = const MiddleVB2 & -# 784| void MiddleVB2::MiddleVB2() +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const MiddleVB2 & +# 784| [Constructor]: void MiddleVB2::MiddleVB2() # 784| params: # 784| initializations: -# 784| 0: call to Base -# 784| Type = void +# 784| 0: [ConstructorCall]: call to Base +# 784| Type = [VoidType]: void # 784| ValueCategory = prvalue -# 784| 1: constructor init of field middlevb2_s -# 784| Type = String +# 784| 1: [ConstructorFieldInit]: constructor init of field middlevb2_s +# 784| Type = [Struct]: String # 784| ValueCategory = prvalue -# 784| 0: call to String -# 784| Type = void +# 784| 0: [ConstructorCall]: call to String +# 784| Type = [VoidType]: void # 784| ValueCategory = prvalue -# 784| body: { ... } -# 785| 0: return ... -# 786| void MiddleVB2::~MiddleVB2() +# 784| body: [Block]: { ... } +# 785| 0: [ReturnStmt]: return ... +# 786| [Destructor]: void MiddleVB2::~MiddleVB2() # 786| params: -# 786| body: { ... } -# 787| 0: return ... +# 786| body: [Block]: { ... } +# 787| 0: [ReturnStmt]: return ... # 786| destructions: -# 787| 0: destructor field destruction of middlevb2_s -# 787| Type = String +# 787| 0: [DestructorFieldDestruction]: destructor field destruction of middlevb2_s +# 787| Type = [Struct]: String # 787| ValueCategory = prvalue -# 787| 0: call to ~String -# 787| Type = void +# 787| 0: [DestructorCall]: call to ~String +# 787| Type = [VoidType]: void # 787| ValueCategory = prvalue -# 787| -1: middlevb2_s -# 787| Type = String +# 787| -1: [FieldAccess]: middlevb2_s +# 787| Type = [Struct]: String # 787| ValueCategory = lvalue -# 787| 1: call to ~Base -# 787| Type = void +# 787| 1: [DestructorCall]: call to ~Base +# 787| Type = [VoidType]: void # 787| ValueCategory = prvalue -# 790| DerivedVB& DerivedVB::operator=(DerivedVB const&) +# 790| [CopyAssignmentOperator]: DerivedVB& DerivedVB::operator=(DerivedVB const&) # 790| params: -#-----| 0: p#0 -#-----| Type = const DerivedVB & -# 790| void DerivedVB::DerivedVB(DerivedVB const&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const DerivedVB & +# 790| [CopyConstructor]: void DerivedVB::DerivedVB(DerivedVB const&) # 790| params: -#-----| 0: p#0 -#-----| Type = const DerivedVB & -# 793| void DerivedVB::DerivedVB() +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const DerivedVB & +# 793| [Constructor]: void DerivedVB::DerivedVB() # 793| params: # 793| initializations: -# 793| 0: call to Base -# 793| Type = void +# 793| 0: [ConstructorCall]: call to Base +# 793| Type = [VoidType]: void # 793| ValueCategory = prvalue -# 793| 1: call to MiddleVB1 -# 793| Type = void +# 793| 1: [ConstructorCall]: call to MiddleVB1 +# 793| Type = [VoidType]: void # 793| ValueCategory = prvalue -# 793| 2: call to MiddleVB2 -# 793| Type = void +# 793| 2: [ConstructorCall]: call to MiddleVB2 +# 793| Type = [VoidType]: void # 793| ValueCategory = prvalue -# 793| 3: constructor init of field derivedvb_s -# 793| Type = String +# 793| 3: [ConstructorFieldInit]: constructor init of field derivedvb_s +# 793| Type = [Struct]: String # 793| ValueCategory = prvalue -# 793| 0: call to String -# 793| Type = void +# 793| 0: [ConstructorCall]: call to String +# 793| Type = [VoidType]: void # 793| ValueCategory = prvalue -# 793| body: { ... } -# 794| 0: return ... -# 795| void DerivedVB::~DerivedVB() +# 793| body: [Block]: { ... } +# 794| 0: [ReturnStmt]: return ... +# 795| [Destructor]: void DerivedVB::~DerivedVB() # 795| params: -# 795| body: { ... } -# 796| 0: return ... +# 795| body: [Block]: { ... } +# 796| 0: [ReturnStmt]: return ... # 795| destructions: -# 796| 0: destructor field destruction of derivedvb_s -# 796| Type = String +# 796| 0: [DestructorFieldDestruction]: destructor field destruction of derivedvb_s +# 796| Type = [Struct]: String # 796| ValueCategory = prvalue -# 796| 0: call to ~String -# 796| Type = void +# 796| 0: [DestructorCall]: call to ~String +# 796| Type = [VoidType]: void # 796| ValueCategory = prvalue -# 796| -1: derivedvb_s -# 796| Type = String +# 796| -1: [FieldAccess]: derivedvb_s +# 796| Type = [Struct]: String # 796| ValueCategory = lvalue -# 796| 1: call to ~MiddleVB2 -# 796| Type = void +# 796| 1: [DestructorCall]: call to ~MiddleVB2 +# 796| Type = [VoidType]: void # 796| ValueCategory = prvalue -# 796| 2: call to ~MiddleVB1 -# 796| Type = void +# 796| 2: [DestructorCall]: call to ~MiddleVB1 +# 796| Type = [VoidType]: void # 796| ValueCategory = prvalue -# 796| 3: call to ~Base -# 796| Type = void +# 796| 3: [DestructorCall]: call to ~Base +# 796| Type = [VoidType]: void # 796| ValueCategory = prvalue -# 799| void HierarchyConversions() +# 799| [TopLevelFunction]: void HierarchyConversions() # 799| params: -# 799| body: { ... } -# 800| 0: declaration -# 800| 0: definition of b -# 800| Type = Base -# 800| init: initializer for b -# 800| expr: call to Base -# 800| Type = void +# 799| body: [Block]: { ... } +# 800| 0: [DeclStmt]: declaration +# 800| 0: [VariableDeclarationEntry]: definition of b +# 800| Type = [VirtualBaseClass]: Base +# 800| init: [Initializer]: initializer for b +# 800| expr: [ConstructorCall]: call to Base +# 800| Type = [VoidType]: void # 800| ValueCategory = prvalue -# 801| 1: declaration -# 801| 0: definition of m -# 801| Type = Middle -# 801| init: initializer for m -# 801| expr: call to Middle -# 801| Type = void +# 801| 1: [DeclStmt]: declaration +# 801| 0: [VariableDeclarationEntry]: definition of m +# 801| Type = [Struct]: Middle +# 801| init: [Initializer]: initializer for m +# 801| expr: [ConstructorCall]: call to Middle +# 801| Type = [VoidType]: void # 801| ValueCategory = prvalue -# 802| 2: declaration -# 802| 0: definition of d -# 802| Type = Derived -# 802| init: initializer for d -# 802| expr: call to Derived -# 802| Type = void +# 802| 2: [DeclStmt]: declaration +# 802| 0: [VariableDeclarationEntry]: definition of d +# 802| Type = [Struct]: Derived +# 802| init: [Initializer]: initializer for d +# 802| expr: [ConstructorCall]: call to Derived +# 802| Type = [VoidType]: void # 802| ValueCategory = prvalue -# 804| 3: declaration -# 804| 0: definition of pb -# 804| Type = Base * -# 804| init: initializer for pb -# 804| expr: & ... -# 804| Type = Base * +# 804| 3: [DeclStmt]: declaration +# 804| 0: [VariableDeclarationEntry]: definition of pb +# 804| Type = [PointerType]: Base * +# 804| init: [Initializer]: initializer for pb +# 804| expr: [AddressOfExpr]: & ... +# 804| Type = [PointerType]: Base * # 804| ValueCategory = prvalue -# 804| 0: b -# 804| Type = Base +# 804| 0: [VariableAccess]: b +# 804| Type = [VirtualBaseClass]: Base # 804| ValueCategory = lvalue -# 805| 4: declaration -# 805| 0: definition of pm -# 805| Type = Middle * -# 805| init: initializer for pm -# 805| expr: & ... -# 805| Type = Middle * +# 805| 4: [DeclStmt]: declaration +# 805| 0: [VariableDeclarationEntry]: definition of pm +# 805| Type = [PointerType]: Middle * +# 805| init: [Initializer]: initializer for pm +# 805| expr: [AddressOfExpr]: & ... +# 805| Type = [PointerType]: Middle * # 805| ValueCategory = prvalue -# 805| 0: m -# 805| Type = Middle +# 805| 0: [VariableAccess]: m +# 805| Type = [Struct]: Middle # 805| ValueCategory = lvalue -# 806| 5: declaration -# 806| 0: definition of pd -# 806| Type = Derived * -# 806| init: initializer for pd -# 806| expr: & ... -# 806| Type = Derived * +# 806| 5: [DeclStmt]: declaration +# 806| 0: [VariableDeclarationEntry]: definition of pd +# 806| Type = [PointerType]: Derived * +# 806| init: [Initializer]: initializer for pd +# 806| expr: [AddressOfExpr]: & ... +# 806| Type = [PointerType]: Derived * # 806| ValueCategory = prvalue -# 806| 0: d -# 806| Type = Derived +# 806| 0: [VariableAccess]: d +# 806| Type = [Struct]: Derived # 806| ValueCategory = lvalue -# 808| 6: ExprStmt -# 808| 0: (reference dereference) -# 808| Type = Base +# 808| 6: [ExprStmt]: ExprStmt +# 808| 0: [ReferenceDereferenceExpr]: (reference dereference) +# 808| Type = [VirtualBaseClass]: Base # 808| ValueCategory = lvalue -# 808| expr: call to operator= -# 808| Type = Base & +# 808| expr: [FunctionCall]: call to operator= +# 808| Type = [LValueReferenceType]: Base & # 808| ValueCategory = prvalue -# 808| -1: b -# 808| Type = Base +# 808| -1: [VariableAccess]: b +# 808| Type = [VirtualBaseClass]: Base # 808| ValueCategory = lvalue -# 808| 0: (reference to) -# 808| Type = const Base & +# 808| 0: [ReferenceToExpr]: (reference to) +# 808| Type = [LValueReferenceType]: const Base & # 808| ValueCategory = prvalue -# 808| expr: (const Base)... +# 808| expr: [BaseClassConversion]: (const Base)... # 808| Conversion = base class conversion -# 808| Type = const Base +# 808| Type = [SpecifiedType]: const Base # 808| ValueCategory = lvalue -# 808| expr: m -# 808| Type = Middle +# 808| expr: [VariableAccess]: m +# 808| Type = [Struct]: Middle # 808| ValueCategory = lvalue -# 809| 7: ExprStmt -# 809| 0: (reference dereference) -# 809| Type = Base +# 809| 7: [ExprStmt]: ExprStmt +# 809| 0: [ReferenceDereferenceExpr]: (reference dereference) +# 809| Type = [VirtualBaseClass]: Base # 809| ValueCategory = lvalue -# 809| expr: call to operator= -# 809| Type = Base & +# 809| expr: [FunctionCall]: call to operator= +# 809| Type = [LValueReferenceType]: Base & # 809| ValueCategory = prvalue -# 809| -1: b -# 809| Type = Base +# 809| -1: [VariableAccess]: b +# 809| Type = [VirtualBaseClass]: Base # 809| ValueCategory = lvalue -# 809| 0: (reference to) -# 809| Type = const Base & +# 809| 0: [ReferenceToExpr]: (reference to) +# 809| Type = [LValueReferenceType]: const Base & # 809| ValueCategory = prvalue -# 809| expr: (const Base)... +# 809| expr: [GlvalueConversion]: (const Base)... # 809| Conversion = glvalue conversion -# 809| Type = const Base +# 809| Type = [SpecifiedType]: const Base # 809| ValueCategory = lvalue -# 809| expr: call to Base -# 809| Type = void +# 809| expr: [ConstructorCall]: call to Base +# 809| Type = [VoidType]: void # 809| ValueCategory = prvalue -# 809| 0: (reference to) -# 809| Type = const Base & +# 809| 0: [ReferenceToExpr]: (reference to) +# 809| Type = [LValueReferenceType]: const Base & # 809| ValueCategory = prvalue -# 809| expr: (const Base)... +# 809| expr: [BaseClassConversion]: (const Base)... # 809| Conversion = base class conversion -# 809| Type = const Base +# 809| Type = [SpecifiedType]: const Base # 809| ValueCategory = lvalue -# 809| expr: m -# 809| Type = Middle +# 809| expr: [VariableAccess]: m +# 809| Type = [Struct]: Middle # 809| ValueCategory = lvalue -# 810| 8: ExprStmt -# 810| 0: (reference dereference) -# 810| Type = Base +# 810| 8: [ExprStmt]: ExprStmt +# 810| 0: [ReferenceDereferenceExpr]: (reference dereference) +# 810| Type = [VirtualBaseClass]: Base # 810| ValueCategory = lvalue -# 810| expr: call to operator= -# 810| Type = Base & +# 810| expr: [FunctionCall]: call to operator= +# 810| Type = [LValueReferenceType]: Base & # 810| ValueCategory = prvalue -# 810| -1: b -# 810| Type = Base +# 810| -1: [VariableAccess]: b +# 810| Type = [VirtualBaseClass]: Base # 810| ValueCategory = lvalue -# 810| 0: (reference to) -# 810| Type = const Base & +# 810| 0: [ReferenceToExpr]: (reference to) +# 810| Type = [LValueReferenceType]: const Base & # 810| ValueCategory = prvalue -# 810| expr: (const Base)... +# 810| expr: [GlvalueConversion]: (const Base)... # 810| Conversion = glvalue conversion -# 810| Type = const Base +# 810| Type = [SpecifiedType]: const Base # 810| ValueCategory = lvalue -# 810| expr: call to Base -# 810| Type = void +# 810| expr: [ConstructorCall]: call to Base +# 810| Type = [VoidType]: void # 810| ValueCategory = prvalue -# 810| 0: (reference to) -# 810| Type = const Base & +# 810| 0: [ReferenceToExpr]: (reference to) +# 810| Type = [LValueReferenceType]: const Base & # 810| ValueCategory = prvalue -# 810| expr: (const Base)... +# 810| expr: [BaseClassConversion]: (const Base)... # 810| Conversion = base class conversion -# 810| Type = const Base +# 810| Type = [SpecifiedType]: const Base # 810| ValueCategory = lvalue -# 810| expr: m -# 810| Type = Middle +# 810| expr: [VariableAccess]: m +# 810| Type = [Struct]: Middle # 810| ValueCategory = lvalue -# 811| 9: ExprStmt -# 811| 0: ... = ... -# 811| Type = Base * +# 811| 9: [ExprStmt]: ExprStmt +# 811| 0: [AssignExpr]: ... = ... +# 811| Type = [PointerType]: Base * # 811| ValueCategory = lvalue -# 811| 0: pb -# 811| Type = Base * +# 811| 0: [VariableAccess]: pb +# 811| Type = [PointerType]: Base * # 811| ValueCategory = lvalue -# 811| 1: (Base *)... +# 811| 1: [BaseClassConversion]: (Base *)... # 811| Conversion = base class conversion -# 811| Type = Base * +# 811| Type = [PointerType]: Base * # 811| ValueCategory = prvalue -# 811| expr: pm -# 811| Type = Middle * +# 811| expr: [VariableAccess]: pm +# 811| Type = [PointerType]: Middle * # 811| ValueCategory = prvalue(load) -# 812| 10: ExprStmt -# 812| 0: ... = ... -# 812| Type = Base * +# 812| 10: [ExprStmt]: ExprStmt +# 812| 0: [AssignExpr]: ... = ... +# 812| Type = [PointerType]: Base * # 812| ValueCategory = lvalue -# 812| 0: pb -# 812| Type = Base * +# 812| 0: [VariableAccess]: pb +# 812| Type = [PointerType]: Base * # 812| ValueCategory = lvalue -# 812| 1: (Base *)... +# 812| 1: [BaseClassConversion]: (Base *)... # 812| Conversion = base class conversion -# 812| Type = Base * +# 812| Type = [PointerType]: Base * # 812| ValueCategory = prvalue -# 812| expr: pm -# 812| Type = Middle * +# 812| expr: [VariableAccess]: pm +# 812| Type = [PointerType]: Middle * # 812| ValueCategory = prvalue(load) -# 813| 11: ExprStmt -# 813| 0: ... = ... -# 813| Type = Base * +# 813| 11: [ExprStmt]: ExprStmt +# 813| 0: [AssignExpr]: ... = ... +# 813| Type = [PointerType]: Base * # 813| ValueCategory = lvalue -# 813| 0: pb -# 813| Type = Base * +# 813| 0: [VariableAccess]: pb +# 813| Type = [PointerType]: Base * # 813| ValueCategory = lvalue -# 813| 1: static_cast... +# 813| 1: [BaseClassConversion]: static_cast... # 813| Conversion = base class conversion -# 813| Type = Base * +# 813| Type = [PointerType]: Base * # 813| ValueCategory = prvalue -# 813| expr: pm -# 813| Type = Middle * +# 813| expr: [VariableAccess]: pm +# 813| Type = [PointerType]: Middle * # 813| ValueCategory = prvalue(load) -# 814| 12: ExprStmt -# 814| 0: ... = ... -# 814| Type = Base * +# 814| 12: [ExprStmt]: ExprStmt +# 814| 0: [AssignExpr]: ... = ... +# 814| Type = [PointerType]: Base * # 814| ValueCategory = lvalue -# 814| 0: pb -# 814| Type = Base * +# 814| 0: [VariableAccess]: pb +# 814| Type = [PointerType]: Base * # 814| ValueCategory = lvalue -# 814| 1: reinterpret_cast... +# 814| 1: [PointerConversion]: reinterpret_cast... # 814| Conversion = pointer conversion -# 814| Type = Base * +# 814| Type = [PointerType]: Base * # 814| ValueCategory = prvalue -# 814| expr: pm -# 814| Type = Middle * +# 814| expr: [VariableAccess]: pm +# 814| Type = [PointerType]: Middle * # 814| ValueCategory = prvalue(load) -# 816| 13: ExprStmt -# 816| 0: (reference dereference) -# 816| Type = Middle +# 816| 13: [ExprStmt]: ExprStmt +# 816| 0: [ReferenceDereferenceExpr]: (reference dereference) +# 816| Type = [Struct]: Middle # 816| ValueCategory = lvalue -# 816| expr: call to operator= -# 816| Type = Middle & +# 816| expr: [FunctionCall]: call to operator= +# 816| Type = [LValueReferenceType]: Middle & # 816| ValueCategory = prvalue -# 816| -1: m -# 816| Type = Middle +# 816| -1: [VariableAccess]: m +# 816| Type = [Struct]: Middle # 816| ValueCategory = lvalue -# 816| 0: (reference to) -# 816| Type = const Middle & +# 816| 0: [ReferenceToExpr]: (reference to) +# 816| Type = [LValueReferenceType]: const Middle & # 816| ValueCategory = prvalue -# 816| expr: (const Middle)... +# 816| expr: [GlvalueConversion]: (const Middle)... # 816| Conversion = glvalue conversion -# 816| Type = const Middle +# 816| Type = [SpecifiedType]: const Middle # 816| ValueCategory = lvalue -# 816| expr: (Middle)... +# 816| expr: [DerivedClassConversion]: (Middle)... # 816| Conversion = derived class conversion -# 816| Type = Middle +# 816| Type = [Struct]: Middle # 816| ValueCategory = lvalue -# 816| expr: b -# 816| Type = Base +# 816| expr: [VariableAccess]: b +# 816| Type = [VirtualBaseClass]: Base # 816| ValueCategory = lvalue -# 817| 14: ExprStmt -# 817| 0: (reference dereference) -# 817| Type = Middle +# 817| 14: [ExprStmt]: ExprStmt +# 817| 0: [ReferenceDereferenceExpr]: (reference dereference) +# 817| Type = [Struct]: Middle # 817| ValueCategory = lvalue -# 817| expr: call to operator= -# 817| Type = Middle & +# 817| expr: [FunctionCall]: call to operator= +# 817| Type = [LValueReferenceType]: Middle & # 817| ValueCategory = prvalue -# 817| -1: m -# 817| Type = Middle +# 817| -1: [VariableAccess]: m +# 817| Type = [Struct]: Middle # 817| ValueCategory = lvalue -# 817| 0: (reference to) -# 817| Type = const Middle & +# 817| 0: [ReferenceToExpr]: (reference to) +# 817| Type = [LValueReferenceType]: const Middle & # 817| ValueCategory = prvalue -# 817| expr: (const Middle)... +# 817| expr: [GlvalueConversion]: (const Middle)... # 817| Conversion = glvalue conversion -# 817| Type = const Middle +# 817| Type = [SpecifiedType]: const Middle # 817| ValueCategory = lvalue -# 817| expr: static_cast... +# 817| expr: [DerivedClassConversion]: static_cast... # 817| Conversion = derived class conversion -# 817| Type = Middle +# 817| Type = [Struct]: Middle # 817| ValueCategory = lvalue -# 817| expr: b -# 817| Type = Base +# 817| expr: [VariableAccess]: b +# 817| Type = [VirtualBaseClass]: Base # 817| ValueCategory = lvalue -# 818| 15: ExprStmt -# 818| 0: ... = ... -# 818| Type = Middle * +# 818| 15: [ExprStmt]: ExprStmt +# 818| 0: [AssignExpr]: ... = ... +# 818| Type = [PointerType]: Middle * # 818| ValueCategory = lvalue -# 818| 0: pm -# 818| Type = Middle * +# 818| 0: [VariableAccess]: pm +# 818| Type = [PointerType]: Middle * # 818| ValueCategory = lvalue -# 818| 1: (Middle *)... +# 818| 1: [DerivedClassConversion]: (Middle *)... # 818| Conversion = derived class conversion -# 818| Type = Middle * +# 818| Type = [PointerType]: Middle * # 818| ValueCategory = prvalue -# 818| expr: pb -# 818| Type = Base * +# 818| expr: [VariableAccess]: pb +# 818| Type = [PointerType]: Base * # 818| ValueCategory = prvalue(load) -# 819| 16: ExprStmt -# 819| 0: ... = ... -# 819| Type = Middle * +# 819| 16: [ExprStmt]: ExprStmt +# 819| 0: [AssignExpr]: ... = ... +# 819| Type = [PointerType]: Middle * # 819| ValueCategory = lvalue -# 819| 0: pm -# 819| Type = Middle * +# 819| 0: [VariableAccess]: pm +# 819| Type = [PointerType]: Middle * # 819| ValueCategory = lvalue -# 819| 1: static_cast... +# 819| 1: [DerivedClassConversion]: static_cast... # 819| Conversion = derived class conversion -# 819| Type = Middle * +# 819| Type = [PointerType]: Middle * # 819| ValueCategory = prvalue -# 819| expr: pb -# 819| Type = Base * +# 819| expr: [VariableAccess]: pb +# 819| Type = [PointerType]: Base * # 819| ValueCategory = prvalue(load) -# 820| 17: ExprStmt -# 820| 0: ... = ... -# 820| Type = Middle * +# 820| 17: [ExprStmt]: ExprStmt +# 820| 0: [AssignExpr]: ... = ... +# 820| Type = [PointerType]: Middle * # 820| ValueCategory = lvalue -# 820| 0: pm -# 820| Type = Middle * +# 820| 0: [VariableAccess]: pm +# 820| Type = [PointerType]: Middle * # 820| ValueCategory = lvalue -# 820| 1: reinterpret_cast... +# 820| 1: [PointerConversion]: reinterpret_cast... # 820| Conversion = pointer conversion -# 820| Type = Middle * +# 820| Type = [PointerType]: Middle * # 820| ValueCategory = prvalue -# 820| expr: pb -# 820| Type = Base * +# 820| expr: [VariableAccess]: pb +# 820| Type = [PointerType]: Base * # 820| ValueCategory = prvalue(load) -# 822| 18: ExprStmt -# 822| 0: (reference dereference) -# 822| Type = Base +# 822| 18: [ExprStmt]: ExprStmt +# 822| 0: [ReferenceDereferenceExpr]: (reference dereference) +# 822| Type = [VirtualBaseClass]: Base # 822| ValueCategory = lvalue -# 822| expr: call to operator= -# 822| Type = Base & +# 822| expr: [FunctionCall]: call to operator= +# 822| Type = [LValueReferenceType]: Base & # 822| ValueCategory = prvalue -# 822| -1: b -# 822| Type = Base +# 822| -1: [VariableAccess]: b +# 822| Type = [VirtualBaseClass]: Base # 822| ValueCategory = lvalue -# 822| 0: (reference to) -# 822| Type = const Base & +# 822| 0: [ReferenceToExpr]: (reference to) +# 822| Type = [LValueReferenceType]: const Base & # 822| ValueCategory = prvalue -# 822| expr: (const Base)... +# 822| expr: [BaseClassConversion]: (const Base)... # 822| Conversion = base class conversion -# 822| Type = const Base +# 822| Type = [SpecifiedType]: const Base # 822| ValueCategory = lvalue -# 822| expr: (const Middle)... +# 822| expr: [BaseClassConversion]: (const Middle)... # 822| Conversion = base class conversion -# 822| Type = const Middle +# 822| Type = [SpecifiedType]: const Middle # 822| ValueCategory = lvalue -# 822| expr: d -# 822| Type = Derived +# 822| expr: [VariableAccess]: d +# 822| Type = [Struct]: Derived # 822| ValueCategory = lvalue -# 823| 19: ExprStmt -# 823| 0: (reference dereference) -# 823| Type = Base +# 823| 19: [ExprStmt]: ExprStmt +# 823| 0: [ReferenceDereferenceExpr]: (reference dereference) +# 823| Type = [VirtualBaseClass]: Base # 823| ValueCategory = lvalue -# 823| expr: call to operator= -# 823| Type = Base & +# 823| expr: [FunctionCall]: call to operator= +# 823| Type = [LValueReferenceType]: Base & # 823| ValueCategory = prvalue -# 823| -1: b -# 823| Type = Base +# 823| -1: [VariableAccess]: b +# 823| Type = [VirtualBaseClass]: Base # 823| ValueCategory = lvalue -# 823| 0: (reference to) -# 823| Type = const Base & +# 823| 0: [ReferenceToExpr]: (reference to) +# 823| Type = [LValueReferenceType]: const Base & # 823| ValueCategory = prvalue -# 823| expr: (const Base)... +# 823| expr: [GlvalueConversion]: (const Base)... # 823| Conversion = glvalue conversion -# 823| Type = const Base +# 823| Type = [SpecifiedType]: const Base # 823| ValueCategory = lvalue -# 823| expr: call to Base -# 823| Type = void +# 823| expr: [ConstructorCall]: call to Base +# 823| Type = [VoidType]: void # 823| ValueCategory = prvalue -# 823| 0: (reference to) -# 823| Type = const Base & +# 823| 0: [ReferenceToExpr]: (reference to) +# 823| Type = [LValueReferenceType]: const Base & # 823| ValueCategory = prvalue -# 823| expr: (const Base)... +# 823| expr: [BaseClassConversion]: (const Base)... # 823| Conversion = base class conversion -# 823| Type = const Base +# 823| Type = [SpecifiedType]: const Base # 823| ValueCategory = lvalue -# 823| expr: (const Middle)... +# 823| expr: [BaseClassConversion]: (const Middle)... # 823| Conversion = base class conversion -# 823| Type = const Middle +# 823| Type = [SpecifiedType]: const Middle # 823| ValueCategory = lvalue -# 823| expr: d -# 823| Type = Derived +# 823| expr: [VariableAccess]: d +# 823| Type = [Struct]: Derived # 823| ValueCategory = lvalue -# 824| 20: ExprStmt -# 824| 0: (reference dereference) -# 824| Type = Base +# 824| 20: [ExprStmt]: ExprStmt +# 824| 0: [ReferenceDereferenceExpr]: (reference dereference) +# 824| Type = [VirtualBaseClass]: Base # 824| ValueCategory = lvalue -# 824| expr: call to operator= -# 824| Type = Base & +# 824| expr: [FunctionCall]: call to operator= +# 824| Type = [LValueReferenceType]: Base & # 824| ValueCategory = prvalue -# 824| -1: b -# 824| Type = Base +# 824| -1: [VariableAccess]: b +# 824| Type = [VirtualBaseClass]: Base # 824| ValueCategory = lvalue -# 824| 0: (reference to) -# 824| Type = const Base & +# 824| 0: [ReferenceToExpr]: (reference to) +# 824| Type = [LValueReferenceType]: const Base & # 824| ValueCategory = prvalue -# 824| expr: (const Base)... +# 824| expr: [GlvalueConversion]: (const Base)... # 824| Conversion = glvalue conversion -# 824| Type = const Base +# 824| Type = [SpecifiedType]: const Base # 824| ValueCategory = lvalue -# 824| expr: call to Base -# 824| Type = void +# 824| expr: [ConstructorCall]: call to Base +# 824| Type = [VoidType]: void # 824| ValueCategory = prvalue -# 824| 0: (reference to) -# 824| Type = const Base & +# 824| 0: [ReferenceToExpr]: (reference to) +# 824| Type = [LValueReferenceType]: const Base & # 824| ValueCategory = prvalue -# 824| expr: (const Base)... +# 824| expr: [BaseClassConversion]: (const Base)... # 824| Conversion = base class conversion -# 824| Type = const Base +# 824| Type = [SpecifiedType]: const Base # 824| ValueCategory = lvalue -# 824| expr: (const Middle)... +# 824| expr: [BaseClassConversion]: (const Middle)... # 824| Conversion = base class conversion -# 824| Type = const Middle +# 824| Type = [SpecifiedType]: const Middle # 824| ValueCategory = lvalue -# 824| expr: d -# 824| Type = Derived +# 824| expr: [VariableAccess]: d +# 824| Type = [Struct]: Derived # 824| ValueCategory = lvalue -# 825| 21: ExprStmt -# 825| 0: ... = ... -# 825| Type = Base * +# 825| 21: [ExprStmt]: ExprStmt +# 825| 0: [AssignExpr]: ... = ... +# 825| Type = [PointerType]: Base * # 825| ValueCategory = lvalue -# 825| 0: pb -# 825| Type = Base * +# 825| 0: [VariableAccess]: pb +# 825| Type = [PointerType]: Base * # 825| ValueCategory = lvalue -# 825| 1: (Base *)... +# 825| 1: [BaseClassConversion]: (Base *)... # 825| Conversion = base class conversion -# 825| Type = Base * +# 825| Type = [PointerType]: Base * # 825| ValueCategory = prvalue -# 825| expr: (Middle *)... +# 825| expr: [BaseClassConversion]: (Middle *)... # 825| Conversion = base class conversion -# 825| Type = Middle * +# 825| Type = [PointerType]: Middle * # 825| ValueCategory = prvalue -# 825| expr: pd -# 825| Type = Derived * +# 825| expr: [VariableAccess]: pd +# 825| Type = [PointerType]: Derived * # 825| ValueCategory = prvalue(load) -# 826| 22: ExprStmt -# 826| 0: ... = ... -# 826| Type = Base * +# 826| 22: [ExprStmt]: ExprStmt +# 826| 0: [AssignExpr]: ... = ... +# 826| Type = [PointerType]: Base * # 826| ValueCategory = lvalue -# 826| 0: pb -# 826| Type = Base * +# 826| 0: [VariableAccess]: pb +# 826| Type = [PointerType]: Base * # 826| ValueCategory = lvalue -# 826| 1: (Base *)... +# 826| 1: [BaseClassConversion]: (Base *)... # 826| Conversion = base class conversion -# 826| Type = Base * +# 826| Type = [PointerType]: Base * # 826| ValueCategory = prvalue -# 826| expr: (Middle *)... +# 826| expr: [BaseClassConversion]: (Middle *)... # 826| Conversion = base class conversion -# 826| Type = Middle * +# 826| Type = [PointerType]: Middle * # 826| ValueCategory = prvalue -# 826| expr: pd -# 826| Type = Derived * +# 826| expr: [VariableAccess]: pd +# 826| Type = [PointerType]: Derived * # 826| ValueCategory = prvalue(load) -# 827| 23: ExprStmt -# 827| 0: ... = ... -# 827| Type = Base * +# 827| 23: [ExprStmt]: ExprStmt +# 827| 0: [AssignExpr]: ... = ... +# 827| Type = [PointerType]: Base * # 827| ValueCategory = lvalue -# 827| 0: pb -# 827| Type = Base * +# 827| 0: [VariableAccess]: pb +# 827| Type = [PointerType]: Base * # 827| ValueCategory = lvalue -# 827| 1: static_cast... +# 827| 1: [BaseClassConversion]: static_cast... # 827| Conversion = base class conversion -# 827| Type = Base * +# 827| Type = [PointerType]: Base * # 827| ValueCategory = prvalue -# 827| expr: (Middle *)... +# 827| expr: [BaseClassConversion]: (Middle *)... # 827| Conversion = base class conversion -# 827| Type = Middle * +# 827| Type = [PointerType]: Middle * # 827| ValueCategory = prvalue -# 827| expr: pd -# 827| Type = Derived * +# 827| expr: [VariableAccess]: pd +# 827| Type = [PointerType]: Derived * # 827| ValueCategory = prvalue(load) -# 828| 24: ExprStmt -# 828| 0: ... = ... -# 828| Type = Base * +# 828| 24: [ExprStmt]: ExprStmt +# 828| 0: [AssignExpr]: ... = ... +# 828| Type = [PointerType]: Base * # 828| ValueCategory = lvalue -# 828| 0: pb -# 828| Type = Base * +# 828| 0: [VariableAccess]: pb +# 828| Type = [PointerType]: Base * # 828| ValueCategory = lvalue -# 828| 1: reinterpret_cast... +# 828| 1: [PointerConversion]: reinterpret_cast... # 828| Conversion = pointer conversion -# 828| Type = Base * +# 828| Type = [PointerType]: Base * # 828| ValueCategory = prvalue -# 828| expr: pd -# 828| Type = Derived * +# 828| expr: [VariableAccess]: pd +# 828| Type = [PointerType]: Derived * # 828| ValueCategory = prvalue(load) -# 830| 25: ExprStmt -# 830| 0: (reference dereference) -# 830| Type = Derived +# 830| 25: [ExprStmt]: ExprStmt +# 830| 0: [ReferenceDereferenceExpr]: (reference dereference) +# 830| Type = [Struct]: Derived # 830| ValueCategory = lvalue -# 830| expr: call to operator= -# 830| Type = Derived & +# 830| expr: [FunctionCall]: call to operator= +# 830| Type = [LValueReferenceType]: Derived & # 830| ValueCategory = prvalue -# 830| -1: d -# 830| Type = Derived +# 830| -1: [VariableAccess]: d +# 830| Type = [Struct]: Derived # 830| ValueCategory = lvalue -# 830| 0: (reference to) -# 830| Type = const Derived & +# 830| 0: [ReferenceToExpr]: (reference to) +# 830| Type = [LValueReferenceType]: const Derived & # 830| ValueCategory = prvalue -# 830| expr: (const Derived)... +# 830| expr: [GlvalueConversion]: (const Derived)... # 830| Conversion = glvalue conversion -# 830| Type = const Derived +# 830| Type = [SpecifiedType]: const Derived # 830| ValueCategory = lvalue -# 830| expr: (Derived)... +# 830| expr: [DerivedClassConversion]: (Derived)... # 830| Conversion = derived class conversion -# 830| Type = Derived +# 830| Type = [Struct]: Derived # 830| ValueCategory = lvalue -# 830| expr: (Middle)... +# 830| expr: [DerivedClassConversion]: (Middle)... # 830| Conversion = derived class conversion -# 830| Type = Middle +# 830| Type = [Struct]: Middle # 830| ValueCategory = lvalue -# 830| expr: b -# 830| Type = Base +# 830| expr: [VariableAccess]: b +# 830| Type = [VirtualBaseClass]: Base # 830| ValueCategory = lvalue -# 831| 26: ExprStmt -# 831| 0: (reference dereference) -# 831| Type = Derived +# 831| 26: [ExprStmt]: ExprStmt +# 831| 0: [ReferenceDereferenceExpr]: (reference dereference) +# 831| Type = [Struct]: Derived # 831| ValueCategory = lvalue -# 831| expr: call to operator= -# 831| Type = Derived & +# 831| expr: [FunctionCall]: call to operator= +# 831| Type = [LValueReferenceType]: Derived & # 831| ValueCategory = prvalue -# 831| -1: d -# 831| Type = Derived +# 831| -1: [VariableAccess]: d +# 831| Type = [Struct]: Derived # 831| ValueCategory = lvalue -# 831| 0: (reference to) -# 831| Type = const Derived & +# 831| 0: [ReferenceToExpr]: (reference to) +# 831| Type = [LValueReferenceType]: const Derived & # 831| ValueCategory = prvalue -# 831| expr: (const Derived)... +# 831| expr: [GlvalueConversion]: (const Derived)... # 831| Conversion = glvalue conversion -# 831| Type = const Derived +# 831| Type = [SpecifiedType]: const Derived # 831| ValueCategory = lvalue -# 831| expr: static_cast... +# 831| expr: [DerivedClassConversion]: static_cast... # 831| Conversion = derived class conversion -# 831| Type = Derived +# 831| Type = [Struct]: Derived # 831| ValueCategory = lvalue -# 831| expr: (Middle)... +# 831| expr: [DerivedClassConversion]: (Middle)... # 831| Conversion = derived class conversion -# 831| Type = Middle +# 831| Type = [Struct]: Middle # 831| ValueCategory = lvalue -# 831| expr: b -# 831| Type = Base +# 831| expr: [VariableAccess]: b +# 831| Type = [VirtualBaseClass]: Base # 831| ValueCategory = lvalue -# 832| 27: ExprStmt -# 832| 0: ... = ... -# 832| Type = Derived * +# 832| 27: [ExprStmt]: ExprStmt +# 832| 0: [AssignExpr]: ... = ... +# 832| Type = [PointerType]: Derived * # 832| ValueCategory = lvalue -# 832| 0: pd -# 832| Type = Derived * +# 832| 0: [VariableAccess]: pd +# 832| Type = [PointerType]: Derived * # 832| ValueCategory = lvalue -# 832| 1: (Derived *)... +# 832| 1: [DerivedClassConversion]: (Derived *)... # 832| Conversion = derived class conversion -# 832| Type = Derived * +# 832| Type = [PointerType]: Derived * # 832| ValueCategory = prvalue -# 832| expr: (Middle *)... +# 832| expr: [DerivedClassConversion]: (Middle *)... # 832| Conversion = derived class conversion -# 832| Type = Middle * +# 832| Type = [PointerType]: Middle * # 832| ValueCategory = prvalue -# 832| expr: pb -# 832| Type = Base * +# 832| expr: [VariableAccess]: pb +# 832| Type = [PointerType]: Base * # 832| ValueCategory = prvalue(load) -# 833| 28: ExprStmt -# 833| 0: ... = ... -# 833| Type = Derived * +# 833| 28: [ExprStmt]: ExprStmt +# 833| 0: [AssignExpr]: ... = ... +# 833| Type = [PointerType]: Derived * # 833| ValueCategory = lvalue -# 833| 0: pd -# 833| Type = Derived * +# 833| 0: [VariableAccess]: pd +# 833| Type = [PointerType]: Derived * # 833| ValueCategory = lvalue -# 833| 1: static_cast... +# 833| 1: [DerivedClassConversion]: static_cast... # 833| Conversion = derived class conversion -# 833| Type = Derived * +# 833| Type = [PointerType]: Derived * # 833| ValueCategory = prvalue -# 833| expr: (Middle *)... +# 833| expr: [DerivedClassConversion]: (Middle *)... # 833| Conversion = derived class conversion -# 833| Type = Middle * +# 833| Type = [PointerType]: Middle * # 833| ValueCategory = prvalue -# 833| expr: pb -# 833| Type = Base * +# 833| expr: [VariableAccess]: pb +# 833| Type = [PointerType]: Base * # 833| ValueCategory = prvalue(load) -# 834| 29: ExprStmt -# 834| 0: ... = ... -# 834| Type = Derived * +# 834| 29: [ExprStmt]: ExprStmt +# 834| 0: [AssignExpr]: ... = ... +# 834| Type = [PointerType]: Derived * # 834| ValueCategory = lvalue -# 834| 0: pd -# 834| Type = Derived * +# 834| 0: [VariableAccess]: pd +# 834| Type = [PointerType]: Derived * # 834| ValueCategory = lvalue -# 834| 1: reinterpret_cast... +# 834| 1: [PointerConversion]: reinterpret_cast... # 834| Conversion = pointer conversion -# 834| Type = Derived * +# 834| Type = [PointerType]: Derived * # 834| ValueCategory = prvalue -# 834| expr: pb -# 834| Type = Base * +# 834| expr: [VariableAccess]: pb +# 834| Type = [PointerType]: Base * # 834| ValueCategory = prvalue(load) -# 836| 30: declaration -# 836| 0: definition of pmv -# 836| Type = MiddleVB1 * -# 836| init: initializer for pmv -# 836| expr: (MiddleVB1 *)... +# 836| 30: [DeclStmt]: declaration +# 836| 0: [VariableDeclarationEntry]: definition of pmv +# 836| Type = [PointerType]: MiddleVB1 * +# 836| init: [Initializer]: initializer for pmv +# 836| expr: [PointerConversion]: (MiddleVB1 *)... # 836| Conversion = pointer conversion -# 836| Type = MiddleVB1 * -# 836| Value = 0 +# 836| Type = [PointerType]: MiddleVB1 * +# 836| Value = [PointerConversion]: 0 # 836| ValueCategory = prvalue -# 836| expr: 0 -# 836| Type = decltype(nullptr) -# 836| Value = 0 +# 836| expr: [Zero]: 0 +# 836| Type = [NullPointerType]: decltype(nullptr) +# 836| Value = [Zero]: 0 # 836| ValueCategory = prvalue -# 837| 31: declaration -# 837| 0: definition of pdv -# 837| Type = DerivedVB * -# 837| init: initializer for pdv -# 837| expr: (DerivedVB *)... +# 837| 31: [DeclStmt]: declaration +# 837| 0: [VariableDeclarationEntry]: definition of pdv +# 837| Type = [PointerType]: DerivedVB * +# 837| init: [Initializer]: initializer for pdv +# 837| expr: [PointerConversion]: (DerivedVB *)... # 837| Conversion = pointer conversion -# 837| Type = DerivedVB * -# 837| Value = 0 +# 837| Type = [PointerType]: DerivedVB * +# 837| Value = [PointerConversion]: 0 # 837| ValueCategory = prvalue -# 837| expr: 0 -# 837| Type = decltype(nullptr) -# 837| Value = 0 +# 837| expr: [Zero]: 0 +# 837| Type = [NullPointerType]: decltype(nullptr) +# 837| Value = [Zero]: 0 # 837| ValueCategory = prvalue -# 838| 32: ExprStmt -# 838| 0: ... = ... -# 838| Type = Base * +# 838| 32: [ExprStmt]: ExprStmt +# 838| 0: [AssignExpr]: ... = ... +# 838| Type = [PointerType]: Base * # 838| ValueCategory = lvalue -# 838| 0: pb -# 838| Type = Base * +# 838| 0: [VariableAccess]: pb +# 838| Type = [PointerType]: Base * # 838| ValueCategory = lvalue -# 838| 1: (Base *)... +# 838| 1: [BaseClassConversion]: (Base *)... # 838| Conversion = base class conversion -# 838| Type = Base * +# 838| Type = [PointerType]: Base * # 838| ValueCategory = prvalue -# 838| expr: pmv -# 838| Type = MiddleVB1 * +# 838| expr: [VariableAccess]: pmv +# 838| Type = [PointerType]: MiddleVB1 * # 838| ValueCategory = prvalue(load) -# 839| 33: ExprStmt -# 839| 0: ... = ... -# 839| Type = Base * +# 839| 33: [ExprStmt]: ExprStmt +# 839| 0: [AssignExpr]: ... = ... +# 839| Type = [PointerType]: Base * # 839| ValueCategory = lvalue -# 839| 0: pb -# 839| Type = Base * +# 839| 0: [VariableAccess]: pb +# 839| Type = [PointerType]: Base * # 839| ValueCategory = lvalue -# 839| 1: (Base *)... +# 839| 1: [BaseClassConversion]: (Base *)... # 839| Conversion = base class conversion -# 839| Type = Base * +# 839| Type = [PointerType]: Base * # 839| ValueCategory = prvalue -# 839| expr: pdv -# 839| Type = DerivedVB * +# 839| expr: [VariableAccess]: pdv +# 839| Type = [PointerType]: DerivedVB * # 839| ValueCategory = prvalue(load) -# 840| 34: return ... -# 842| PolymorphicBase& PolymorphicBase::operator=(PolymorphicBase const&) +# 840| 34: [ReturnStmt]: return ... +# 842| [CopyAssignmentOperator]: PolymorphicBase& PolymorphicBase::operator=(PolymorphicBase const&) # 842| params: -#-----| 0: p#0 -#-----| Type = const PolymorphicBase & -# 842| void PolymorphicBase::PolymorphicBase() +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const PolymorphicBase & +# 842| [Constructor]: void PolymorphicBase::PolymorphicBase() # 842| params: # 842| initializations: -# 842| body: { ... } -# 842| 0: return ... -# 842| void PolymorphicBase::PolymorphicBase(PolymorphicBase const&) +# 842| body: [Block]: { ... } +# 842| 0: [ReturnStmt]: return ... +# 842| [CopyConstructor]: void PolymorphicBase::PolymorphicBase(PolymorphicBase const&) # 842| params: -#-----| 0: p#0 -#-----| Type = const PolymorphicBase & -# 843| void PolymorphicBase::~PolymorphicBase() +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const PolymorphicBase & +# 843| [VirtualFunction]: void PolymorphicBase::~PolymorphicBase() # 843| params: -# 846| PolymorphicDerived& PolymorphicDerived::operator=(PolymorphicDerived const&) +# 846| [CopyAssignmentOperator]: PolymorphicDerived& PolymorphicDerived::operator=(PolymorphicDerived const&) # 846| params: -#-----| 0: p#0 -#-----| Type = const PolymorphicDerived & -# 846| PolymorphicDerived& PolymorphicDerived::operator=(PolymorphicDerived&&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const PolymorphicDerived & +# 846| [MoveAssignmentOperator]: PolymorphicDerived& PolymorphicDerived::operator=(PolymorphicDerived&&) # 846| params: -#-----| 0: p#0 -#-----| Type = PolymorphicDerived && -# 846| void PolymorphicDerived::PolymorphicDerived() +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: PolymorphicDerived && +# 846| [Constructor]: void PolymorphicDerived::PolymorphicDerived() # 846| params: # 846| initializations: -# 846| 0: call to PolymorphicBase -# 846| Type = void +# 846| 0: [ConstructorCall]: call to PolymorphicBase +# 846| Type = [VoidType]: void # 846| ValueCategory = prvalue -# 846| body: { ... } -# 846| 0: return ... -# 846| void PolymorphicDerived::PolymorphicDerived(PolymorphicDerived const&) +# 846| body: [Block]: { ... } +# 846| 0: [ReturnStmt]: return ... +# 846| [CopyConstructor]: void PolymorphicDerived::PolymorphicDerived(PolymorphicDerived const&) # 846| params: -#-----| 0: p#0 -#-----| Type = const PolymorphicDerived & -# 846| void PolymorphicDerived::PolymorphicDerived(PolymorphicDerived&&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const PolymorphicDerived & +# 846| [MoveConstructor]: void PolymorphicDerived::PolymorphicDerived(PolymorphicDerived&&) # 846| params: -#-----| 0: p#0 -#-----| Type = PolymorphicDerived && -# 846| void PolymorphicDerived::~PolymorphicDerived() +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: PolymorphicDerived && +# 846| [VirtualFunction]: void PolymorphicDerived::~PolymorphicDerived() # 846| params: -#-----| body: { ... } -#-----| 0: return ... +#-----| body: [Block]: { ... } +#-----| 0: [ReturnStmt]: return ... # 846| destructions: -# 846| 0: call to ~PolymorphicBase -# 846| Type = void +# 846| 0: [DestructorCall]: call to ~PolymorphicBase +# 846| Type = [VoidType]: void # 846| ValueCategory = prvalue -# 849| void DynamicCast() +# 849| [TopLevelFunction]: void DynamicCast() # 849| params: -# 849| body: { ... } -# 850| 0: declaration -# 850| 0: definition of b -# 850| Type = PolymorphicBase -# 850| init: initializer for b -#-----| expr: call to PolymorphicBase -#-----| Type = void +# 849| body: [Block]: { ... } +# 850| 0: [DeclStmt]: declaration +# 850| 0: [VariableDeclarationEntry]: definition of b +# 850| Type = [Struct]: PolymorphicBase +# 850| init: [Initializer]: initializer for b +#-----| expr: [ConstructorCall]: call to PolymorphicBase +#-----| Type = [VoidType]: void #-----| ValueCategory = prvalue -# 851| 1: declaration -# 851| 0: definition of d -# 851| Type = PolymorphicDerived -# 851| init: initializer for d -# 851| expr: call to PolymorphicDerived -# 851| Type = void +# 851| 1: [DeclStmt]: declaration +# 851| 0: [VariableDeclarationEntry]: definition of d +# 851| Type = [Struct]: PolymorphicDerived +# 851| init: [Initializer]: initializer for d +# 851| expr: [ConstructorCall]: call to PolymorphicDerived +# 851| Type = [VoidType]: void # 851| ValueCategory = prvalue -# 853| 2: declaration -# 853| 0: definition of pb -# 853| Type = PolymorphicBase * -# 853| init: initializer for pb -# 853| expr: & ... -# 853| Type = PolymorphicBase * +# 853| 2: [DeclStmt]: declaration +# 853| 0: [VariableDeclarationEntry]: definition of pb +# 853| Type = [PointerType]: PolymorphicBase * +# 853| init: [Initializer]: initializer for pb +# 853| expr: [AddressOfExpr]: & ... +# 853| Type = [PointerType]: PolymorphicBase * # 853| ValueCategory = prvalue -# 853| 0: b -# 853| Type = PolymorphicBase +# 853| 0: [VariableAccess]: b +# 853| Type = [Struct]: PolymorphicBase # 853| ValueCategory = lvalue -# 854| 3: declaration -# 854| 0: definition of pd -# 854| Type = PolymorphicDerived * -# 854| init: initializer for pd -# 854| expr: & ... -# 854| Type = PolymorphicDerived * +# 854| 3: [DeclStmt]: declaration +# 854| 0: [VariableDeclarationEntry]: definition of pd +# 854| Type = [PointerType]: PolymorphicDerived * +# 854| init: [Initializer]: initializer for pd +# 854| expr: [AddressOfExpr]: & ... +# 854| Type = [PointerType]: PolymorphicDerived * # 854| ValueCategory = prvalue -# 854| 0: d -# 854| Type = PolymorphicDerived +# 854| 0: [VariableAccess]: d +# 854| Type = [Struct]: PolymorphicDerived # 854| ValueCategory = lvalue -# 857| 4: ExprStmt -# 857| 0: ... = ... -# 857| Type = PolymorphicBase * +# 857| 4: [ExprStmt]: ExprStmt +# 857| 0: [AssignExpr]: ... = ... +# 857| Type = [PointerType]: PolymorphicBase * # 857| ValueCategory = lvalue -# 857| 0: pb -# 857| Type = PolymorphicBase * +# 857| 0: [VariableAccess]: pb +# 857| Type = [PointerType]: PolymorphicBase * # 857| ValueCategory = lvalue -# 857| 1: dynamic_cast... +# 857| 1: [DynamicCast]: dynamic_cast... # 857| Conversion = dynamic_cast -# 857| Type = PolymorphicBase * +# 857| Type = [PointerType]: PolymorphicBase * # 857| ValueCategory = prvalue -# 857| expr: pd -# 857| Type = PolymorphicDerived * +# 857| expr: [VariableAccess]: pd +# 857| Type = [PointerType]: PolymorphicDerived * # 857| ValueCategory = prvalue(load) -# 858| 5: declaration -# 858| 0: definition of rb -# 858| Type = PolymorphicBase & -# 858| init: initializer for rb -# 858| expr: (reference to) -# 858| Type = PolymorphicBase & +# 858| 5: [DeclStmt]: declaration +# 858| 0: [VariableDeclarationEntry]: definition of rb +# 858| Type = [LValueReferenceType]: PolymorphicBase & +# 858| init: [Initializer]: initializer for rb +# 858| expr: [ReferenceToExpr]: (reference to) +# 858| Type = [LValueReferenceType]: PolymorphicBase & # 858| ValueCategory = prvalue -# 858| expr: dynamic_cast... +# 858| expr: [DynamicCast]: dynamic_cast... # 858| Conversion = dynamic_cast -# 858| Type = PolymorphicBase +# 858| Type = [Struct]: PolymorphicBase # 858| ValueCategory = lvalue -# 858| expr: d -# 858| Type = PolymorphicDerived +# 858| expr: [VariableAccess]: d +# 858| Type = [Struct]: PolymorphicDerived # 858| ValueCategory = lvalue -# 860| 6: ExprStmt -# 860| 0: ... = ... -# 860| Type = PolymorphicDerived * +# 860| 6: [ExprStmt]: ExprStmt +# 860| 0: [AssignExpr]: ... = ... +# 860| Type = [PointerType]: PolymorphicDerived * # 860| ValueCategory = lvalue -# 860| 0: pd -# 860| Type = PolymorphicDerived * +# 860| 0: [VariableAccess]: pd +# 860| Type = [PointerType]: PolymorphicDerived * # 860| ValueCategory = lvalue -# 860| 1: dynamic_cast... +# 860| 1: [DynamicCast]: dynamic_cast... # 860| Conversion = dynamic_cast -# 860| Type = PolymorphicDerived * +# 860| Type = [PointerType]: PolymorphicDerived * # 860| ValueCategory = prvalue -# 860| expr: pb -# 860| Type = PolymorphicBase * +# 860| expr: [VariableAccess]: pb +# 860| Type = [PointerType]: PolymorphicBase * # 860| ValueCategory = prvalue(load) -# 861| 7: declaration -# 861| 0: definition of rd -# 861| Type = PolymorphicDerived & -# 861| init: initializer for rd -# 861| expr: (reference to) -# 861| Type = PolymorphicDerived & +# 861| 7: [DeclStmt]: declaration +# 861| 0: [VariableDeclarationEntry]: definition of rd +# 861| Type = [LValueReferenceType]: PolymorphicDerived & +# 861| init: [Initializer]: initializer for rd +# 861| expr: [ReferenceToExpr]: (reference to) +# 861| Type = [LValueReferenceType]: PolymorphicDerived & # 861| ValueCategory = prvalue -# 861| expr: dynamic_cast... +# 861| expr: [DynamicCast]: dynamic_cast... # 861| Conversion = dynamic_cast -# 861| Type = PolymorphicDerived +# 861| Type = [Struct]: PolymorphicDerived # 861| ValueCategory = lvalue -# 861| expr: b -# 861| Type = PolymorphicBase +# 861| expr: [VariableAccess]: b +# 861| Type = [Struct]: PolymorphicBase # 861| ValueCategory = lvalue -# 863| 8: declaration -# 863| 0: definition of pv -# 863| Type = void * -# 863| init: initializer for pv -# 863| expr: dynamic_cast... +# 863| 8: [DeclStmt]: declaration +# 863| 0: [VariableDeclarationEntry]: definition of pv +# 863| Type = [VoidPointerType]: void * +# 863| init: [Initializer]: initializer for pv +# 863| expr: [DynamicCast]: dynamic_cast... # 863| Conversion = dynamic_cast -# 863| Type = void * +# 863| Type = [VoidPointerType]: void * # 863| ValueCategory = prvalue -# 863| expr: pb -# 863| Type = PolymorphicBase * +# 863| expr: [VariableAccess]: pb +# 863| Type = [PointerType]: PolymorphicBase * # 863| ValueCategory = prvalue(load) -# 864| 9: declaration -# 864| 0: definition of pcv -# 864| Type = const void * -# 864| init: initializer for pcv -# 864| expr: dynamic_cast... +# 864| 9: [DeclStmt]: declaration +# 864| 0: [VariableDeclarationEntry]: definition of pcv +# 864| Type = [PointerType]: const void * +# 864| init: [Initializer]: initializer for pcv +# 864| expr: [DynamicCast]: dynamic_cast... # 864| Conversion = dynamic_cast -# 864| Type = const void * +# 864| Type = [PointerType]: const void * # 864| ValueCategory = prvalue -# 864| expr: pd -# 864| Type = PolymorphicDerived * +# 864| expr: [VariableAccess]: pd +# 864| Type = [PointerType]: PolymorphicDerived * # 864| ValueCategory = prvalue(load) -# 865| 10: return ... -# 867| void String::String() +# 865| 10: [ReturnStmt]: return ... +# 867| [Constructor]: void String::String() # 867| params: # 867| initializations: -# 868| 0: call to String -# 868| Type = void +# 868| 0: [ConstructorCall]: call to String +# 868| Type = [VoidType]: void # 868| ValueCategory = prvalue -# 868| 0: array to pointer conversion -# 868| Type = const char * +# 868| 0: [ArrayToPointerConversion]: array to pointer conversion +# 868| Type = [PointerType]: const char * # 868| ValueCategory = prvalue # 868| expr: -# 868| Type = const char[1] -# 868| Value = "" +# 868| Type = [ArrayType]: const char[1] +# 868| Value = [StringLiteral]: "" # 868| ValueCategory = lvalue -# 868| body: { ... } -# 869| 0: return ... -# 871| void ArrayConversions() +# 868| body: [Block]: { ... } +# 869| 0: [ReturnStmt]: return ... +# 871| [TopLevelFunction]: void ArrayConversions() # 871| params: -# 871| body: { ... } -# 872| 0: declaration -# 872| 0: definition of a -# 872| Type = char[5] -# 873| 1: declaration -# 873| 0: definition of p -# 873| Type = const char * -# 873| init: initializer for p -# 873| expr: (const char *)... +# 871| body: [Block]: { ... } +# 872| 0: [DeclStmt]: declaration +# 872| 0: [VariableDeclarationEntry]: definition of a +# 872| Type = [ArrayType]: char[5] +# 873| 1: [DeclStmt]: declaration +# 873| 0: [VariableDeclarationEntry]: definition of p +# 873| Type = [PointerType]: const char * +# 873| init: [Initializer]: initializer for p +# 873| expr: [PointerConversion]: (const char *)... # 873| Conversion = pointer conversion -# 873| Type = const char * +# 873| Type = [PointerType]: const char * # 873| ValueCategory = prvalue -# 873| expr: array to pointer conversion -# 873| Type = char * +# 873| expr: [ArrayToPointerConversion]: array to pointer conversion +# 873| Type = [CharPointerType]: char * # 873| ValueCategory = prvalue -# 873| expr: a -# 873| Type = char[5] +# 873| expr: [VariableAccess]: a +# 873| Type = [ArrayType]: char[5] # 873| ValueCategory = lvalue -# 874| 2: ExprStmt -# 874| 0: ... = ... -# 874| Type = const char * +# 874| 2: [ExprStmt]: ExprStmt +# 874| 0: [AssignExpr]: ... = ... +# 874| Type = [PointerType]: const char * # 874| ValueCategory = lvalue -# 874| 0: p -# 874| Type = const char * +# 874| 0: [VariableAccess]: p +# 874| Type = [PointerType]: const char * # 874| ValueCategory = lvalue -# 874| 1: array to pointer conversion -# 874| Type = const char * +# 874| 1: [ArrayToPointerConversion]: array to pointer conversion +# 874| Type = [PointerType]: const char * # 874| ValueCategory = prvalue # 874| expr: test -# 874| Type = const char[5] -# 874| Value = "test" +# 874| Type = [ArrayType]: const char[5] +# 874| Value = [StringLiteral]: "test" # 874| ValueCategory = lvalue -# 875| 3: ExprStmt -# 875| 0: ... = ... -# 875| Type = const char * +# 875| 3: [ExprStmt]: ExprStmt +# 875| 0: [AssignExpr]: ... = ... +# 875| Type = [PointerType]: const char * # 875| ValueCategory = lvalue -# 875| 0: p -# 875| Type = const char * +# 875| 0: [VariableAccess]: p +# 875| Type = [PointerType]: const char * # 875| ValueCategory = lvalue -# 875| 1: (const char *)... +# 875| 1: [PointerConversion]: (const char *)... # 875| Conversion = pointer conversion -# 875| Type = const char * +# 875| Type = [PointerType]: const char * # 875| ValueCategory = prvalue -# 875| expr: & ... -# 875| Type = char * +# 875| expr: [AddressOfExpr]: & ... +# 875| Type = [CharPointerType]: char * # 875| ValueCategory = prvalue -# 875| 0: access to array -# 875| Type = char +# 875| 0: [ArrayExpr]: access to array +# 875| Type = [PlainCharType]: char # 875| ValueCategory = lvalue -# 875| 0: array to pointer conversion -# 875| Type = char * +# 875| 0: [ArrayToPointerConversion]: array to pointer conversion +# 875| Type = [CharPointerType]: char * # 875| ValueCategory = prvalue -# 875| expr: a -# 875| Type = char[5] +# 875| expr: [VariableAccess]: a +# 875| Type = [ArrayType]: char[5] # 875| ValueCategory = lvalue -# 875| 1: 0 -# 875| Type = int -# 875| Value = 0 +# 875| 1: [Zero]: 0 +# 875| Type = [IntType]: int +# 875| Value = [Zero]: 0 # 875| ValueCategory = prvalue -# 876| 4: ExprStmt -# 876| 0: ... = ... -# 876| Type = const char * +# 876| 4: [ExprStmt]: ExprStmt +# 876| 0: [AssignExpr]: ... = ... +# 876| Type = [PointerType]: const char * # 876| ValueCategory = lvalue -# 876| 0: p -# 876| Type = const char * +# 876| 0: [VariableAccess]: p +# 876| Type = [PointerType]: const char * # 876| ValueCategory = lvalue -# 876| 1: & ... -# 876| Type = const char * +# 876| 1: [AddressOfExpr]: & ... +# 876| Type = [PointerType]: const char * # 876| ValueCategory = prvalue -# 876| 0: access to array -# 876| Type = const char +# 876| 0: [ArrayExpr]: access to array +# 876| Type = [SpecifiedType]: const char # 876| ValueCategory = lvalue -# 876| 0: array to pointer conversion -# 876| Type = const char * +# 876| 0: [ArrayToPointerConversion]: array to pointer conversion +# 876| Type = [PointerType]: const char * # 876| ValueCategory = prvalue # 876| expr: test -# 876| Type = const char[5] -# 876| Value = "test" +# 876| Type = [ArrayType]: const char[5] +# 876| Value = [StringLiteral]: "test" # 876| ValueCategory = lvalue -# 876| 1: 0 -# 876| Type = int -# 876| Value = 0 +# 876| 1: [Zero]: 0 +# 876| Type = [IntType]: int +# 876| Value = [Zero]: 0 # 876| ValueCategory = prvalue -# 877| 5: declaration -# 877| 0: definition of ra -# 877| Type = char(&)[5] -# 877| init: initializer for ra -# 877| expr: (reference to) -# 877| Type = char(&)[5] +# 877| 5: [DeclStmt]: declaration +# 877| 0: [VariableDeclarationEntry]: definition of ra +# 877| Type = [LValueReferenceType]: char(&)[5] +# 877| init: [Initializer]: initializer for ra +# 877| expr: [ReferenceToExpr]: (reference to) +# 877| Type = [LValueReferenceType]: char(&)[5] # 877| ValueCategory = prvalue -# 877| expr: a -# 877| Type = char[5] +# 877| expr: [VariableAccess]: a +# 877| Type = [ArrayType]: char[5] # 877| ValueCategory = lvalue -# 878| 6: declaration -# 878| 0: definition of rs -# 878| Type = const char(&)[5] -# 878| init: initializer for rs -# 878| expr: (reference to) -# 878| Type = const char(&)[5] +# 878| 6: [DeclStmt]: declaration +# 878| 0: [VariableDeclarationEntry]: definition of rs +# 878| Type = [LValueReferenceType]: const char(&)[5] +# 878| init: [Initializer]: initializer for rs +# 878| expr: [ReferenceToExpr]: (reference to) +# 878| Type = [LValueReferenceType]: const char(&)[5] # 878| ValueCategory = prvalue # 878| expr: test -# 878| Type = const char[5] -# 878| Value = "test" +# 878| Type = [ArrayType]: const char[5] +# 878| Value = [StringLiteral]: "test" # 878| ValueCategory = lvalue -# 879| 7: declaration -# 879| 0: definition of pa -# 879| Type = const char(*)[5] -# 879| init: initializer for pa -# 879| expr: (const char(*)[5])... +# 879| 7: [DeclStmt]: declaration +# 879| 0: [VariableDeclarationEntry]: definition of pa +# 879| Type = [PointerType]: const char(*)[5] +# 879| init: [Initializer]: initializer for pa +# 879| expr: [PointerConversion]: (const char(*)[5])... # 879| Conversion = pointer conversion -# 879| Type = const char(*)[5] +# 879| Type = [PointerType]: const char(*)[5] # 879| ValueCategory = prvalue -# 879| expr: & ... -# 879| Type = char(*)[5] +# 879| expr: [AddressOfExpr]: & ... +# 879| Type = [PointerType]: char(*)[5] # 879| ValueCategory = prvalue -# 879| 0: a -# 879| Type = char[5] +# 879| 0: [VariableAccess]: a +# 879| Type = [ArrayType]: char[5] # 879| ValueCategory = lvalue -# 880| 8: ExprStmt -# 880| 0: ... = ... -# 880| Type = const char(*)[5] +# 880| 8: [ExprStmt]: ExprStmt +# 880| 0: [AssignExpr]: ... = ... +# 880| Type = [PointerType]: const char(*)[5] # 880| ValueCategory = lvalue -# 880| 0: pa -# 880| Type = const char(*)[5] +# 880| 0: [VariableAccess]: pa +# 880| Type = [PointerType]: const char(*)[5] # 880| ValueCategory = lvalue -# 880| 1: & ... -# 880| Type = const char(*)[5] +# 880| 1: [AddressOfExpr]: & ... +# 880| Type = [PointerType]: const char(*)[5] # 880| ValueCategory = prvalue # 880| 0: test -# 880| Type = const char[5] -# 880| Value = "test" +# 880| Type = [ArrayType]: const char[5] +# 880| Value = [StringLiteral]: "test" # 880| ValueCategory = lvalue -# 881| 9: return ... -# 883| void FuncPtrConversions(int(*)(int), void*) +# 881| 9: [ReturnStmt]: return ... +# 883| [TopLevelFunction]: void FuncPtrConversions(int(*)(int), void*) # 883| params: -# 883| 0: pfn -# 883| Type = ..(*)(..) -# 883| 1: p -# 883| Type = void * -# 883| body: { ... } -# 884| 0: ExprStmt -# 884| 0: ... = ... -# 884| Type = void * +# 883| 0: [Parameter]: pfn +# 883| Type = [FunctionPointerType]: ..(*)(..) +# 883| 1: [Parameter]: p +# 883| Type = [VoidPointerType]: void * +# 883| body: [Block]: { ... } +# 884| 0: [ExprStmt]: ExprStmt +# 884| 0: [AssignExpr]: ... = ... +# 884| Type = [VoidPointerType]: void * # 884| ValueCategory = lvalue -# 884| 0: p -# 884| Type = void * +# 884| 0: [VariableAccess]: p +# 884| Type = [VoidPointerType]: void * # 884| ValueCategory = lvalue -# 884| 1: (void *)... +# 884| 1: [PointerConversion]: (void *)... # 884| Conversion = pointer conversion -# 884| Type = void * +# 884| Type = [VoidPointerType]: void * # 884| ValueCategory = prvalue -# 884| expr: pfn -# 884| Type = ..(*)(..) +# 884| expr: [VariableAccess]: pfn +# 884| Type = [FunctionPointerType]: ..(*)(..) # 884| ValueCategory = prvalue(load) -# 885| 1: ExprStmt -# 885| 0: ... = ... -# 885| Type = ..(*)(..) +# 885| 1: [ExprStmt]: ExprStmt +# 885| 0: [AssignExpr]: ... = ... +# 885| Type = [FunctionPointerType]: ..(*)(..) # 885| ValueCategory = lvalue -# 885| 0: pfn -# 885| Type = ..(*)(..) +# 885| 0: [VariableAccess]: pfn +# 885| Type = [FunctionPointerType]: ..(*)(..) # 885| ValueCategory = lvalue -# 885| 1: (..(*)(..))... +# 885| 1: [PointerConversion]: (..(*)(..))... # 885| Conversion = pointer conversion -# 885| Type = ..(*)(..) +# 885| Type = [FunctionPointerType]: ..(*)(..) # 885| ValueCategory = prvalue -# 885| expr: p -# 885| Type = void * +# 885| expr: [VariableAccess]: p +# 885| Type = [VoidPointerType]: void * # 885| ValueCategory = prvalue(load) -# 886| 2: return ... -# 888| void VarArgUsage(int) +# 886| 2: [ReturnStmt]: return ... +# 888| [TopLevelFunction]: void VarArgUsage(int) # 888| params: -# 888| 0: x -# 888| Type = int -# 888| body: { ... } -# 889| 0: declaration -# 889| 0: definition of args -# 889| Type = __va_list_tag[1] -# 891| 1: ExprStmt -# 891| 0: __builtin_va_start -# 891| Type = void +# 888| 0: [Parameter]: x +# 888| Type = [IntType]: int +# 888| body: [Block]: { ... } +# 889| 0: [DeclStmt]: declaration +# 889| 0: [VariableDeclarationEntry]: definition of args +# 889| Type = [ArrayType]: __va_list_tag[1] +# 891| 1: [ExprStmt]: ExprStmt +# 891| 0: [BuiltInVarArgsStart]: __builtin_va_start +# 891| Type = [VoidType]: void # 891| ValueCategory = prvalue -# 891| 0: array to pointer conversion -# 891| Type = __va_list_tag * +# 891| 0: [ArrayToPointerConversion]: array to pointer conversion +# 891| Type = [PointerType]: __va_list_tag * # 891| ValueCategory = prvalue -# 891| expr: args -# 891| Type = __va_list_tag[1] +# 891| expr: [VariableAccess]: args +# 891| Type = [ArrayType]: __va_list_tag[1] # 891| ValueCategory = lvalue -# 891| 1: x -# 891| Type = int +# 891| 1: [VariableAccess]: x +# 891| Type = [IntType]: int # 891| ValueCategory = lvalue -# 892| 2: declaration -# 892| 0: definition of args2 -# 892| Type = __va_list_tag[1] -# 893| 3: ExprStmt -# 893| 0: __builtin_va_start -# 893| Type = void +# 892| 2: [DeclStmt]: declaration +# 892| 0: [VariableDeclarationEntry]: definition of args2 +# 892| Type = [ArrayType]: __va_list_tag[1] +# 893| 3: [ExprStmt]: ExprStmt +# 893| 0: [BuiltInVarArgsStart]: __builtin_va_start +# 893| Type = [VoidType]: void # 893| ValueCategory = prvalue -# 893| 0: array to pointer conversion -# 893| Type = __va_list_tag * +# 893| 0: [ArrayToPointerConversion]: array to pointer conversion +# 893| Type = [PointerType]: __va_list_tag * # 893| ValueCategory = prvalue -# 893| expr: args2 -# 893| Type = __va_list_tag[1] +# 893| expr: [VariableAccess]: args2 +# 893| Type = [ArrayType]: __va_list_tag[1] # 893| ValueCategory = lvalue -# 893| 1: array to pointer conversion -# 893| Type = __va_list_tag * +# 893| 1: [ArrayToPointerConversion]: array to pointer conversion +# 893| Type = [PointerType]: __va_list_tag * # 893| ValueCategory = prvalue -# 893| expr: args -# 893| Type = __va_list_tag[1] +# 893| expr: [VariableAccess]: args +# 893| Type = [ArrayType]: __va_list_tag[1] # 893| ValueCategory = lvalue -# 894| 4: declaration -# 894| 0: definition of d -# 894| Type = double -# 894| init: initializer for d -# 894| expr: __builtin_va_arg -# 894| Type = double +# 894| 4: [DeclStmt]: declaration +# 894| 0: [VariableDeclarationEntry]: definition of d +# 894| Type = [DoubleType]: double +# 894| init: [Initializer]: initializer for d +# 894| expr: [BuiltInVarArg]: __builtin_va_arg +# 894| Type = [DoubleType]: double # 894| ValueCategory = prvalue(load) -# 894| 0: array to pointer conversion -# 894| Type = __va_list_tag * +# 894| 0: [ArrayToPointerConversion]: array to pointer conversion +# 894| Type = [PointerType]: __va_list_tag * # 894| ValueCategory = prvalue -# 894| expr: args -# 894| Type = __va_list_tag[1] +# 894| expr: [VariableAccess]: args +# 894| Type = [ArrayType]: __va_list_tag[1] # 894| ValueCategory = lvalue -# 895| 5: declaration -# 895| 0: definition of f -# 895| Type = float -# 895| init: initializer for f -# 895| expr: (float)... +# 895| 5: [DeclStmt]: declaration +# 895| 0: [VariableDeclarationEntry]: definition of f +# 895| Type = [FloatType]: float +# 895| init: [Initializer]: initializer for f +# 895| expr: [FloatingPointConversion]: (float)... # 895| Conversion = floating point conversion -# 895| Type = float +# 895| Type = [FloatType]: float # 895| ValueCategory = prvalue -# 895| expr: __builtin_va_arg -# 895| Type = double +# 895| expr: [BuiltInVarArg]: __builtin_va_arg +# 895| Type = [DoubleType]: double # 895| ValueCategory = prvalue(load) -# 895| 0: array to pointer conversion -# 895| Type = __va_list_tag * +# 895| 0: [ArrayToPointerConversion]: array to pointer conversion +# 895| Type = [PointerType]: __va_list_tag * # 895| ValueCategory = prvalue -# 895| expr: args -# 895| Type = __va_list_tag[1] +# 895| expr: [VariableAccess]: args +# 895| Type = [ArrayType]: __va_list_tag[1] # 895| ValueCategory = lvalue -# 896| 6: ExprStmt -# 896| 0: __builtin_va_end -# 896| Type = void +# 896| 6: [ExprStmt]: ExprStmt +# 896| 0: [BuiltInVarArgsEnd]: __builtin_va_end +# 896| Type = [VoidType]: void # 896| ValueCategory = prvalue -# 896| 0: array to pointer conversion -# 896| Type = __va_list_tag * +# 896| 0: [ArrayToPointerConversion]: array to pointer conversion +# 896| Type = [PointerType]: __va_list_tag * # 896| ValueCategory = prvalue -# 896| expr: args -# 896| Type = __va_list_tag[1] +# 896| expr: [VariableAccess]: args +# 896| Type = [ArrayType]: __va_list_tag[1] # 896| ValueCategory = lvalue -# 897| 7: ExprStmt -# 897| 0: __builtin_va_end -# 897| Type = void +# 897| 7: [ExprStmt]: ExprStmt +# 897| 0: [BuiltInVarArgsEnd]: __builtin_va_end +# 897| Type = [VoidType]: void # 897| ValueCategory = prvalue -# 897| 0: array to pointer conversion -# 897| Type = __va_list_tag * +# 897| 0: [ArrayToPointerConversion]: array to pointer conversion +# 897| Type = [PointerType]: __va_list_tag * # 897| ValueCategory = prvalue -# 897| expr: args2 -# 897| Type = __va_list_tag[1] +# 897| expr: [VariableAccess]: args2 +# 897| Type = [ArrayType]: __va_list_tag[1] # 897| ValueCategory = lvalue -# 898| 8: return ... -# 900| void CastToVoid(int) +# 898| 8: [ReturnStmt]: return ... +# 900| [TopLevelFunction]: void CastToVoid(int) # 900| params: -# 900| 0: x -# 900| Type = int -# 900| body: { ... } -# 901| 0: ExprStmt -# 901| 0: (void)... +# 900| 0: [Parameter]: x +# 900| Type = [IntType]: int +# 900| body: [Block]: { ... } +# 901| 0: [ExprStmt]: ExprStmt +# 901| 0: [VoidConversion]: (void)... # 901| Conversion = conversion to void -# 901| Type = void +# 901| Type = [VoidType]: void # 901| ValueCategory = prvalue -# 901| expr: x -# 901| Type = int +# 901| expr: [VariableAccess]: x +# 901| Type = [IntType]: int # 901| ValueCategory = lvalue -# 902| 1: return ... -# 904| void ConstantConditions(int) +# 902| 1: [ReturnStmt]: return ... +# 904| [TopLevelFunction]: void ConstantConditions(int) # 904| params: -# 904| 0: x -# 904| Type = int -# 904| body: { ... } -# 905| 0: declaration -# 905| 0: definition of a -# 905| Type = bool -# 905| init: initializer for a -# 905| expr: ... && ... -# 905| Type = bool -# 905| Value = 1 +# 904| 0: [Parameter]: x +# 904| Type = [IntType]: int +# 904| body: [Block]: { ... } +# 905| 0: [DeclStmt]: declaration +# 905| 0: [VariableDeclarationEntry]: definition of a +# 905| Type = [BoolType]: bool +# 905| init: [Initializer]: initializer for a +# 905| expr: [LogicalAndExpr]: ... && ... +# 905| Type = [BoolType]: bool +# 905| Value = [LogicalAndExpr]: 1 # 905| ValueCategory = prvalue -# 905| 0: 1 -# 905| Type = bool -# 905| Value = 1 +# 905| 0: [Literal]: 1 +# 905| Type = [BoolType]: bool +# 905| Value = [Literal]: 1 # 905| ValueCategory = prvalue -# 905| 1: 1 -# 905| Type = bool -# 905| Value = 1 +# 905| 1: [Literal]: 1 +# 905| Type = [BoolType]: bool +# 905| Value = [Literal]: 1 # 905| ValueCategory = prvalue -# 906| 1: declaration -# 906| 0: definition of b -# 906| Type = int -# 906| init: initializer for b -# 906| expr: ... ? ... : ... -# 906| Type = int +# 906| 1: [DeclStmt]: declaration +# 906| 0: [VariableDeclarationEntry]: definition of b +# 906| Type = [IntType]: int +# 906| init: [Initializer]: initializer for b +# 906| expr: [ConditionalExpr]: ... ? ... : ... +# 906| Type = [IntType]: int # 906| ValueCategory = prvalue -# 906| 0: (...) -# 906| Type = bool -# 906| Value = 1 +# 906| 0: [ParenthesisExpr]: (...) +# 906| Type = [BoolType]: bool +# 906| Value = [ParenthesisExpr]: 1 # 906| ValueCategory = prvalue -# 906| expr: 1 -# 906| Type = bool -# 906| Value = 1 +# 906| expr: [Literal]: 1 +# 906| Type = [BoolType]: bool +# 906| Value = [Literal]: 1 # 906| ValueCategory = prvalue -# 906| 1: x -# 906| Type = int +# 906| 1: [VariableAccess]: x +# 906| Type = [IntType]: int # 906| ValueCategory = prvalue(load) -# 906| 2: x -# 906| Type = int +# 906| 2: [VariableAccess]: x +# 906| Type = [IntType]: int # 906| ValueCategory = prvalue(load) -# 907| 2: return ... -# 915| void* operator new(size_t, float) +# 907| 2: [ReturnStmt]: return ... +# 915| [TopLevelFunction]: void* operator new(size_t, float) # 915| params: -# 915| 0: p#0 -# 915| Type = size_t -# 915| 1: p#1 -# 915| Type = float -# 916| void* operator new[](size_t, float) +# 915| 0: [Parameter]: p#0 +# 915| Type = [Size_t]: size_t +# 915| 1: [Parameter]: p#1 +# 915| Type = [FloatType]: float +# 916| [TopLevelFunction]: void* operator new[](size_t, float) # 916| params: -# 916| 0: p#0 -# 916| Type = size_t -# 916| 1: p#1 -# 916| Type = float -# 917| void* operator new(size_t, std::align_val_t, float) +# 916| 0: [Parameter]: p#0 +# 916| Type = [Size_t]: size_t +# 916| 1: [Parameter]: p#1 +# 916| Type = [FloatType]: float +# 917| [TopLevelFunction]: void* operator new(size_t, std::align_val_t, float) # 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| void* operator new[](size_t, std::align_val_t, float) +# 917| 0: [Parameter]: p#0 +# 917| Type = [Size_t]: size_t +# 917| 1: [Parameter]: p#1 +# 917| Type = [ScopedEnum]: align_val_t +# 917| 2: [Parameter]: p#2 +# 917| Type = [FloatType]: float +# 918| [TopLevelFunction]: void* operator new[](size_t, std::align_val_t, float) # 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| void operator delete(void*, float) +# 918| 0: [Parameter]: p#0 +# 918| Type = [Size_t]: size_t +# 918| 1: [Parameter]: p#1 +# 918| Type = [ScopedEnum]: align_val_t +# 918| 2: [Parameter]: p#2 +# 918| Type = [FloatType]: float +# 919| [TopLevelFunction]: void operator delete(void*, float) # 919| params: -# 919| 0: p#0 -# 919| Type = void * -# 919| 1: p#1 -# 919| Type = float -# 920| void operator delete[](void*, float) +# 919| 0: [Parameter]: p#0 +# 919| Type = [VoidPointerType]: void * +# 919| 1: [Parameter]: p#1 +# 919| Type = [FloatType]: float +# 920| [TopLevelFunction]: void operator delete[](void*, float) # 920| params: -# 920| 0: p#0 -# 920| Type = void * -# 920| 1: p#1 -# 920| Type = float -# 921| void operator delete(void*, std::align_val_t, float) +# 920| 0: [Parameter]: p#0 +# 920| Type = [VoidPointerType]: void * +# 920| 1: [Parameter]: p#1 +# 920| Type = [FloatType]: float +# 921| [TopLevelFunction]: void operator delete(void*, std::align_val_t, float) # 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| void operator delete[](void*, std::align_val_t, float) +# 921| 0: [Parameter]: p#0 +# 921| Type = [VoidPointerType]: void * +# 921| 1: [Parameter]: p#1 +# 921| Type = [ScopedEnum]: align_val_t +# 921| 2: [Parameter]: p#2 +# 921| Type = [FloatType]: float +# 922| [TopLevelFunction]: void operator delete[](void*, std::align_val_t, float) # 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& SizedDealloc::operator=(SizedDealloc const&) +# 922| 0: [Parameter]: p#0 +# 922| Type = [VoidPointerType]: void * +# 922| 1: [Parameter]: p#1 +# 922| Type = [ScopedEnum]: align_val_t +# 922| 2: [Parameter]: p#2 +# 922| Type = [FloatType]: float +# 924| [CopyAssignmentOperator]: SizedDealloc& SizedDealloc::operator=(SizedDealloc const&) # 924| params: -#-----| 0: p#0 -#-----| Type = const SizedDealloc & -# 924| SizedDealloc& SizedDealloc::operator=(SizedDealloc&&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const SizedDealloc & +# 924| [MoveAssignmentOperator]: SizedDealloc& SizedDealloc::operator=(SizedDealloc&&) # 924| params: -#-----| 0: p#0 -#-----| Type = SizedDealloc && -# 926| void* SizedDealloc::operator new(size_t) +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: SizedDealloc && +# 926| [MemberFunction]: void* SizedDealloc::operator new(size_t) # 926| params: -# 926| 0: p#0 -# 926| Type = size_t -# 927| void* SizedDealloc::operator new[](size_t) +# 926| 0: [Parameter]: p#0 +# 926| Type = [Size_t]: size_t +# 927| [MemberFunction]: void* SizedDealloc::operator new[](size_t) # 927| params: -# 927| 0: p#0 -# 927| Type = size_t -# 928| void SizedDealloc::operator delete(void*, size_t) +# 927| 0: [Parameter]: p#0 +# 927| Type = [Size_t]: size_t +# 928| [MemberFunction]: void SizedDealloc::operator delete(void*, size_t) # 928| params: -# 928| 0: p#0 -# 928| Type = void * -# 928| 1: p#1 -# 928| Type = size_t -# 929| void SizedDealloc::operator delete[](void*, size_t) +# 928| 0: [Parameter]: p#0 +# 928| Type = [VoidPointerType]: void * +# 928| 1: [Parameter]: p#1 +# 928| Type = [Size_t]: size_t +# 929| [MemberFunction]: void SizedDealloc::operator delete[](void*, size_t) # 929| params: -# 929| 0: p#0 -# 929| Type = void * -# 929| 1: p#1 -# 929| Type = size_t -# 932| Overaligned& Overaligned::operator=(Overaligned const&) +# 929| 0: [Parameter]: p#0 +# 929| Type = [VoidPointerType]: void * +# 929| 1: [Parameter]: p#1 +# 929| Type = [Size_t]: size_t +# 932| [CopyAssignmentOperator]: Overaligned& Overaligned::operator=(Overaligned const&) # 932| params: -#-----| 0: p#0 -#-----| Type = const Overaligned & -# 932| Overaligned& Overaligned::operator=(Overaligned&&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const Overaligned & +# 932| [MoveAssignmentOperator]: Overaligned& Overaligned::operator=(Overaligned&&) # 932| params: -#-----| 0: p#0 -#-----| Type = Overaligned && -# 936| DefaultCtorWithDefaultParam& DefaultCtorWithDefaultParam::operator=(DefaultCtorWithDefaultParam const&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: Overaligned && +# 936| [CopyAssignmentOperator]: DefaultCtorWithDefaultParam& DefaultCtorWithDefaultParam::operator=(DefaultCtorWithDefaultParam const&) # 936| params: -#-----| 0: p#0 -#-----| Type = const DefaultCtorWithDefaultParam & -# 936| DefaultCtorWithDefaultParam& DefaultCtorWithDefaultParam::operator=(DefaultCtorWithDefaultParam&&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const DefaultCtorWithDefaultParam & +# 936| [MoveAssignmentOperator]: DefaultCtorWithDefaultParam& DefaultCtorWithDefaultParam::operator=(DefaultCtorWithDefaultParam&&) # 936| params: -#-----| 0: p#0 -#-----| Type = DefaultCtorWithDefaultParam && -# 936| void DefaultCtorWithDefaultParam::DefaultCtorWithDefaultParam(DefaultCtorWithDefaultParam const&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: DefaultCtorWithDefaultParam && +# 936| [CopyConstructor]: void DefaultCtorWithDefaultParam::DefaultCtorWithDefaultParam(DefaultCtorWithDefaultParam const&) # 936| params: -#-----| 0: p#0 -#-----| Type = const DefaultCtorWithDefaultParam & -# 936| void DefaultCtorWithDefaultParam::DefaultCtorWithDefaultParam(DefaultCtorWithDefaultParam&&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const DefaultCtorWithDefaultParam & +# 936| [MoveConstructor]: void DefaultCtorWithDefaultParam::DefaultCtorWithDefaultParam(DefaultCtorWithDefaultParam&&) # 936| params: -#-----| 0: p#0 -#-----| Type = DefaultCtorWithDefaultParam && -# 937| void DefaultCtorWithDefaultParam::DefaultCtorWithDefaultParam(double) +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: DefaultCtorWithDefaultParam && +# 937| [Constructor]: void DefaultCtorWithDefaultParam::DefaultCtorWithDefaultParam(double) # 937| params: -# 937| 0: d -# 937| Type = double -# 940| void OperatorNew() +# 937| 0: [Parameter]: d +# 937| Type = [DoubleType]: double +# 940| [TopLevelFunction]: void OperatorNew() # 940| params: -# 940| body: { ... } -# 941| 0: ExprStmt -# 941| 0: new -# 941| Type = int * +# 940| body: [Block]: { ... } +# 941| 0: [ExprStmt]: ExprStmt +# 941| 0: [NewExpr]: new +# 941| Type = [IntPointerType]: int * # 941| ValueCategory = prvalue -# 942| 1: ExprStmt -# 942| 0: new -# 942| Type = int * +# 942| 1: [ExprStmt]: ExprStmt +# 942| 0: [NewExpr]: new +# 942| Type = [IntPointerType]: int * # 942| ValueCategory = prvalue -# 942| 0: call to operator new -# 942| Type = void * +# 942| 0: [FunctionCall]: call to operator new +# 942| Type = [VoidPointerType]: void * # 942| ValueCategory = prvalue -# 942| 0: -# 942| Type = unsigned long +# 942| 0: [ErrorExpr]: +# 942| Type = [LongType]: unsigned long # 942| ValueCategory = prvalue -# 942| 1: 1.0 -# 942| Type = float -# 942| Value = 1.0 +# 942| 1: [Literal]: 1.0 +# 942| Type = [FloatType]: float +# 942| Value = [Literal]: 1.0 # 942| ValueCategory = prvalue -# 943| 2: ExprStmt -# 943| 0: new -# 943| Type = int * +# 943| 2: [ExprStmt]: ExprStmt +# 943| 0: [NewExpr]: new +# 943| Type = [IntPointerType]: int * # 943| ValueCategory = prvalue -# 943| 1: 0 -# 943| Type = int -# 943| Value = 0 +# 943| 1: [Zero]: 0 +# 943| Type = [IntType]: int +# 943| Value = [Zero]: 0 # 943| ValueCategory = prvalue -# 944| 3: ExprStmt -# 944| 0: new -# 944| Type = String * +# 944| 3: [ExprStmt]: ExprStmt +# 944| 0: [NewExpr]: new +# 944| Type = [PointerType]: String * # 944| ValueCategory = prvalue -# 944| 1: call to String -# 944| Type = void +# 944| 1: [ConstructorCall]: call to String +# 944| Type = [VoidType]: void # 944| ValueCategory = prvalue -# 945| 4: ExprStmt -# 945| 0: new -# 945| Type = String * +# 945| 4: [ExprStmt]: ExprStmt +# 945| 0: [NewExpr]: new +# 945| Type = [PointerType]: String * # 945| ValueCategory = prvalue -# 945| 0: call to operator new -# 945| Type = void * +# 945| 0: [FunctionCall]: call to operator new +# 945| Type = [VoidPointerType]: void * # 945| ValueCategory = prvalue -# 945| 0: -# 945| Type = unsigned long +# 945| 0: [ErrorExpr]: +# 945| Type = [LongType]: unsigned long # 945| ValueCategory = prvalue -# 945| 1: 1.0 -# 945| Type = float -# 945| Value = 1.0 +# 945| 1: [Literal]: 1.0 +# 945| Type = [FloatType]: float +# 945| Value = [Literal]: 1.0 # 945| ValueCategory = prvalue -# 945| 1: call to String -# 945| Type = void +# 945| 1: [ConstructorCall]: call to String +# 945| Type = [VoidType]: void # 945| ValueCategory = prvalue -# 945| 0: array to pointer conversion -# 945| Type = const char * +# 945| 0: [ArrayToPointerConversion]: array to pointer conversion +# 945| Type = [PointerType]: const char * # 945| ValueCategory = prvalue # 945| expr: hello -# 945| Type = const char[6] -# 945| Value = "hello" +# 945| Type = [ArrayType]: const char[6] +# 945| Value = [StringLiteral]: "hello" # 945| ValueCategory = lvalue -# 946| 5: ExprStmt -# 946| 0: new -# 946| Type = Overaligned * +# 946| 5: [ExprStmt]: ExprStmt +# 946| 0: [NewExpr]: new +# 946| Type = [PointerType]: Overaligned * # 946| ValueCategory = prvalue -# 946| 3: 128 -# 946| Type = align_val_t -# 946| Value = 128 +# 946| 3: [Literal]: 128 +# 946| Type = [ScopedEnum]: align_val_t +# 946| Value = [Literal]: 128 # 946| ValueCategory = prvalue -# 947| 6: ExprStmt -# 947| 0: new -# 947| Type = Overaligned * +# 947| 6: [ExprStmt]: ExprStmt +# 947| 0: [NewExpr]: new +# 947| Type = [PointerType]: Overaligned * # 947| ValueCategory = prvalue -# 947| 0: call to operator new -# 947| Type = void * +# 947| 0: [FunctionCall]: call to operator new +# 947| Type = [VoidPointerType]: void * # 947| ValueCategory = prvalue -# 947| 0: -# 947| Type = unsigned long +# 947| 0: [ErrorExpr]: +# 947| Type = [LongType]: unsigned long # 947| ValueCategory = prvalue -# 947| 1: 128 -# 947| Type = align_val_t -# 947| Value = 128 +# 947| 1: [Literal]: 128 +# 947| Type = [ScopedEnum]: align_val_t +# 947| Value = [Literal]: 128 # 947| ValueCategory = prvalue -# 947| 2: 1.0 -# 947| Type = float -# 947| Value = 1.0 +# 947| 2: [Literal]: 1.0 +# 947| Type = [FloatType]: float +# 947| Value = [Literal]: 1.0 # 947| ValueCategory = prvalue -# 947| 1: 0 -# 947| Type = Overaligned -# 947| Value = 0 +# 947| 1: [Zero]: 0 +# 947| Type = [Struct]: Overaligned +# 947| Value = [Zero]: 0 # 947| ValueCategory = prvalue -# 948| 7: return ... -# 950| void OperatorNewArray(int) +# 948| 7: [ReturnStmt]: return ... +# 950| [TopLevelFunction]: void OperatorNewArray(int) # 950| params: -# 950| 0: n -# 950| Type = int -# 950| body: { ... } -# 951| 0: ExprStmt -# 951| 0: new[] -# 951| Type = int * +# 950| 0: [Parameter]: n +# 950| Type = [IntType]: int +# 950| body: [Block]: { ... } +# 951| 0: [ExprStmt]: ExprStmt +# 951| 0: [NewArrayExpr]: new[] +# 951| Type = [IntPointerType]: int * # 951| ValueCategory = prvalue -# 952| 1: ExprStmt -# 952| 0: new[] -# 952| Type = int * +# 952| 1: [ExprStmt]: ExprStmt +# 952| 0: [NewArrayExpr]: new[] +# 952| Type = [IntPointerType]: int * # 952| ValueCategory = prvalue -# 952| 2: n -# 952| Type = int +# 952| 2: [VariableAccess]: n +# 952| Type = [IntType]: int # 952| ValueCategory = prvalue(load) -# 953| 2: ExprStmt -# 953| 0: new[] -# 953| Type = int * +# 953| 2: [ExprStmt]: ExprStmt +# 953| 0: [NewArrayExpr]: new[] +# 953| Type = [IntPointerType]: int * # 953| ValueCategory = prvalue -# 953| 0: call to operator new[] -# 953| Type = void * +# 953| 0: [FunctionCall]: call to operator new[] +# 953| Type = [VoidPointerType]: void * # 953| ValueCategory = prvalue -# 953| 0: -# 953| Type = unsigned long +# 953| 0: [ErrorExpr]: +# 953| Type = [LongType]: unsigned long # 953| ValueCategory = prvalue -# 953| 1: 1.0 -# 953| Type = float -# 953| Value = 1.0 +# 953| 1: [Literal]: 1.0 +# 953| Type = [FloatType]: float +# 953| Value = [Literal]: 1.0 # 953| ValueCategory = prvalue -# 953| 2: n -# 953| Type = int +# 953| 2: [VariableAccess]: n +# 953| Type = [IntType]: int # 953| ValueCategory = prvalue(load) -# 954| 3: ExprStmt -# 954| 0: new[] -# 954| Type = String * +# 954| 3: [ExprStmt]: ExprStmt +# 954| 0: [NewArrayExpr]: new[] +# 954| Type = [PointerType]: String * # 954| ValueCategory = prvalue -# 954| 1: {...} -# 954| Type = String[] +# 954| 1: [ArrayAggregateLiteral]: {...} +# 954| Type = [ArrayType]: String[] # 954| ValueCategory = prvalue -# 954| [0]: call to String -# 954| Type = void +# 954| [0]: [ConstructorCall]: call to String +# 954| Type = [VoidType]: void # 954| ValueCategory = prvalue -# 954| 2: n -# 954| Type = int +# 954| 2: [VariableAccess]: n +# 954| Type = [IntType]: int # 954| ValueCategory = prvalue(load) -# 955| 4: ExprStmt -# 955| 0: new[] -# 955| Type = Overaligned * +# 955| 4: [ExprStmt]: ExprStmt +# 955| 0: [NewArrayExpr]: new[] +# 955| Type = [PointerType]: Overaligned * # 955| ValueCategory = prvalue -# 955| 2: n -# 955| Type = int +# 955| 2: [VariableAccess]: n +# 955| Type = [IntType]: int # 955| ValueCategory = prvalue(load) -# 955| 3: 128 -# 955| Type = align_val_t -# 955| Value = 128 +# 955| 3: [Literal]: 128 +# 955| Type = [ScopedEnum]: align_val_t +# 955| Value = [Literal]: 128 # 955| ValueCategory = prvalue -# 956| 5: ExprStmt -# 956| 0: new[] -# 956| Type = Overaligned * +# 956| 5: [ExprStmt]: ExprStmt +# 956| 0: [NewArrayExpr]: new[] +# 956| Type = [PointerType]: Overaligned * # 956| ValueCategory = prvalue -# 956| 0: call to operator new[] -# 956| Type = void * +# 956| 0: [FunctionCall]: call to operator new[] +# 956| Type = [VoidPointerType]: void * # 956| ValueCategory = prvalue -# 956| 0: -# 956| Type = unsigned long +# 956| 0: [ErrorExpr]: +# 956| Type = [LongType]: unsigned long # 956| ValueCategory = prvalue -# 956| 1: 128 -# 956| Type = align_val_t -# 956| Value = 128 +# 956| 1: [Literal]: 128 +# 956| Type = [ScopedEnum]: align_val_t +# 956| Value = [Literal]: 128 # 956| ValueCategory = prvalue -# 956| 2: 1.0 -# 956| Type = float -# 956| Value = 1.0 +# 956| 2: [Literal]: 1.0 +# 956| Type = [FloatType]: float +# 956| Value = [Literal]: 1.0 # 956| ValueCategory = prvalue -# 957| 6: ExprStmt -# 957| 0: new[] -# 957| Type = DefaultCtorWithDefaultParam * +# 957| 6: [ExprStmt]: ExprStmt +# 957| 0: [NewArrayExpr]: new[] +# 957| Type = [PointerType]: DefaultCtorWithDefaultParam * # 957| ValueCategory = prvalue -# 957| 1: {...} -# 957| Type = DefaultCtorWithDefaultParam[] +# 957| 1: [ArrayAggregateLiteral]: {...} +# 957| Type = [ArrayType]: DefaultCtorWithDefaultParam[] # 957| ValueCategory = prvalue -# 957| [0]: call to DefaultCtorWithDefaultParam -# 957| Type = void +# 957| [0]: [ConstructorCall]: call to DefaultCtorWithDefaultParam +# 957| Type = [VoidType]: void # 957| ValueCategory = prvalue -# 957| 2: n -# 957| Type = int +# 957| 2: [VariableAccess]: n +# 957| Type = [IntType]: int # 957| ValueCategory = prvalue(load) -# 958| 7: ExprStmt -# 958| 0: new[] -# 958| Type = int * +# 958| 7: [ExprStmt]: ExprStmt +# 958| 0: [NewArrayExpr]: new[] +# 958| Type = [IntPointerType]: int * # 958| ValueCategory = prvalue -# 958| 1: {...} -# 958| Type = int[3] +# 958| 1: [ArrayAggregateLiteral]: {...} +# 958| Type = [ArrayType]: int[3] # 958| ValueCategory = prvalue -# 958| [0]: 0 -# 958| Type = int -# 958| Value = 0 +# 958| [0]: [Zero]: 0 +# 958| Type = [IntType]: int +# 958| Value = [Zero]: 0 # 958| ValueCategory = prvalue -# 958| [1]: 1 -# 958| Type = int -# 958| Value = 1 +# 958| [1]: [Literal]: 1 +# 958| Type = [IntType]: int +# 958| Value = [Literal]: 1 # 958| ValueCategory = prvalue -# 958| [2]: 2 -# 958| Type = int -# 958| Value = 2 +# 958| [2]: [Literal]: 2 +# 958| Type = [IntType]: int +# 958| Value = [Literal]: 2 # 958| ValueCategory = prvalue -# 958| 2: n -# 958| Type = int +# 958| 2: [VariableAccess]: n +# 958| Type = [IntType]: int # 958| ValueCategory = prvalue(load) -# 959| 8: return ... -# 961| int designatedInit() +# 959| 8: [ReturnStmt]: return ... +# 961| [TopLevelFunction]: int designatedInit() # 961| params: -# 961| body: { ... } -# 962| 0: declaration -# 962| 0: definition of a1 -# 962| Type = int[1000] -# 962| init: initializer for a1 -# 962| expr: {...} -# 962| Type = int[1000] +# 961| body: [Block]: { ... } +# 962| 0: [DeclStmt]: declaration +# 962| 0: [VariableDeclarationEntry]: definition of a1 +# 962| Type = [ArrayType]: int[1000] +# 962| init: [Initializer]: initializer for a1 +# 962| expr: [ArrayAggregateLiteral]: {...} +# 962| Type = [ArrayType]: int[1000] # 962| ValueCategory = prvalue -# 962| [2]: 10002 -# 962| Type = int -# 962| Value = 10002 +# 962| [2]: [Literal]: 10002 +# 962| Type = [IntType]: int +# 962| Value = [Literal]: 10002 # 962| ValueCategory = prvalue -# 962| [900]: 10900 -# 962| Type = int -# 962| Value = 10900 +# 962| [900]: [Literal]: 10900 +# 962| Type = [IntType]: int +# 962| Value = [Literal]: 10900 # 962| ValueCategory = prvalue -# 963| 1: return ... -# 963| 0: access to array -# 963| Type = int +# 963| 1: [ReturnStmt]: return ... +# 963| 0: [ArrayExpr]: access to array +# 963| Type = [IntType]: int # 963| ValueCategory = prvalue(load) -# 963| 0: array to pointer conversion -# 963| Type = int * +# 963| 0: [ArrayToPointerConversion]: array to pointer conversion +# 963| Type = [IntPointerType]: int * # 963| ValueCategory = prvalue -# 963| expr: a1 -# 963| Type = int[1000] +# 963| expr: [VariableAccess]: a1 +# 963| Type = [ArrayType]: int[1000] # 963| ValueCategory = lvalue -# 963| 1: 900 -# 963| Type = int -# 963| Value = 900 +# 963| 1: [Literal]: 900 +# 963| Type = [IntType]: int +# 963| Value = [Literal]: 900 # 963| ValueCategory = prvalue -# 966| void IfStmtWithDeclaration(int, int) +# 966| [TopLevelFunction]: void IfStmtWithDeclaration(int, int) # 966| params: -# 966| 0: x -# 966| Type = int -# 966| 1: y -# 966| Type = int -# 966| body: { ... } -# 967| 0: if (...) ... -# 967| 0: (condition decl) -# 967| Type = bool +# 966| 0: [Parameter]: x +# 966| Type = [IntType]: int +# 966| 1: [Parameter]: y +# 966| Type = [IntType]: int +# 966| body: [Block]: { ... } +# 967| 0: [IfStmt]: if (...) ... +# 967| 0: [ConditionDeclExpr]: (condition decl) +# 967| Type = [BoolType]: bool # 967| ValueCategory = prvalue -# 967| 0: b -# 967| Type = bool +# 967| 0: [VariableAccess]: b +# 967| Type = [BoolType]: bool # 967| ValueCategory = prvalue(load) -# 967| 1: { ... } -# 968| 0: ExprStmt -# 968| 0: ... = ... -# 968| Type = int +# 967| 1: [Block]: { ... } +# 968| 0: [ExprStmt]: ExprStmt +# 968| 0: [AssignExpr]: ... = ... +# 968| Type = [IntType]: int # 968| ValueCategory = lvalue -# 968| 0: x -# 968| Type = int +# 968| 0: [VariableAccess]: x +# 968| Type = [IntType]: int # 968| ValueCategory = lvalue -# 968| 1: 5 -# 968| Type = int -# 968| Value = 5 +# 968| 1: [Literal]: 5 +# 968| Type = [IntType]: int +# 968| Value = [Literal]: 5 # 968| ValueCategory = prvalue -# 970| 2: if (...) ... -# 970| 0: (condition decl) -# 970| Type = bool +# 970| 2: [IfStmt]: if (...) ... +# 970| 0: [ConditionDeclExpr]: (condition decl) +# 970| Type = [BoolType]: bool # 970| ValueCategory = prvalue -# 970| 0: (bool)... +# 970| 0: [BoolConversion]: (bool)... # 970| Conversion = conversion to bool -# 970| Type = bool +# 970| Type = [BoolType]: bool # 970| ValueCategory = prvalue -# 970| expr: z -# 970| Type = int +# 970| expr: [VariableAccess]: z +# 970| Type = [IntType]: int # 970| ValueCategory = prvalue(load) -# 970| 1: { ... } -# 971| 0: ExprStmt -# 971| 0: ... = ... -# 971| Type = int +# 970| 1: [Block]: { ... } +# 971| 0: [ExprStmt]: ExprStmt +# 971| 0: [AssignExpr]: ... = ... +# 971| Type = [IntType]: int # 971| ValueCategory = lvalue -# 971| 0: y -# 971| Type = int +# 971| 0: [VariableAccess]: y +# 971| Type = [IntType]: int # 971| ValueCategory = lvalue -# 971| 1: 7 -# 971| Type = int -# 971| Value = 7 +# 971| 1: [Literal]: 7 +# 971| Type = [IntType]: int +# 971| Value = [Literal]: 7 # 971| ValueCategory = prvalue -# 973| 2: if (...) ... -# 973| 0: (condition decl) -# 973| Type = bool +# 973| 2: [IfStmt]: if (...) ... +# 973| 0: [ConditionDeclExpr]: (condition decl) +# 973| Type = [BoolType]: bool # 973| ValueCategory = prvalue -# 973| 0: (bool)... +# 973| 0: [BoolConversion]: (bool)... # 973| Conversion = conversion to bool -# 973| Type = bool +# 973| Type = [BoolType]: bool # 973| ValueCategory = prvalue -# 973| expr: p -# 973| Type = int * +# 973| expr: [VariableAccess]: p +# 973| Type = [IntPointerType]: int * # 973| ValueCategory = prvalue(load) -# 973| 1: { ... } -# 974| 0: ExprStmt -# 974| 0: ... = ... -# 974| Type = int +# 973| 1: [Block]: { ... } +# 974| 0: [ExprStmt]: ExprStmt +# 974| 0: [AssignExpr]: ... = ... +# 974| Type = [IntType]: int # 974| ValueCategory = lvalue -# 974| 0: * ... -# 974| Type = int +# 974| 0: [PointerDereferenceExpr]: * ... +# 974| Type = [IntType]: int # 974| ValueCategory = lvalue -# 974| 0: p -# 974| Type = int * +# 974| 0: [VariableAccess]: p +# 974| Type = [IntPointerType]: int * # 974| ValueCategory = prvalue(load) -# 974| 1: 2 -# 974| Type = int -# 974| Value = 2 +# 974| 1: [Literal]: 2 +# 974| Type = [IntType]: int +# 974| Value = [Literal]: 2 # 974| ValueCategory = prvalue -# 976| 1: return ... -# 978| void WhileStmtWithDeclaration(int, int) +# 976| 1: [ReturnStmt]: return ... +# 978| [TopLevelFunction]: void WhileStmtWithDeclaration(int, int) # 978| params: -# 978| 0: x -# 978| Type = int -# 978| 1: y -# 978| Type = int -# 978| body: { ... } -# 979| 0: while (...) ... -# 979| 0: (condition decl) -# 979| Type = bool +# 978| 0: [Parameter]: x +# 978| Type = [IntType]: int +# 978| 1: [Parameter]: y +# 978| Type = [IntType]: int +# 978| body: [Block]: { ... } +# 979| 0: [WhileStmt]: while (...) ... +# 979| 0: [ConditionDeclExpr]: (condition decl) +# 979| Type = [BoolType]: bool # 979| ValueCategory = prvalue -# 979| 0: b -# 979| Type = bool +# 979| 0: [VariableAccess]: b +# 979| Type = [BoolType]: bool # 979| ValueCategory = prvalue(load) -# 979| 1: { ... } -# 981| 1: while (...) ... -# 981| 0: (condition decl) -# 981| Type = bool +# 979| 1: [Block]: { ... } +# 981| 1: [WhileStmt]: while (...) ... +# 981| 0: [ConditionDeclExpr]: (condition decl) +# 981| Type = [BoolType]: bool # 981| ValueCategory = prvalue -# 981| 0: (bool)... +# 981| 0: [BoolConversion]: (bool)... # 981| Conversion = conversion to bool -# 981| Type = bool +# 981| Type = [BoolType]: bool # 981| ValueCategory = prvalue -# 981| expr: z -# 981| Type = int +# 981| expr: [VariableAccess]: z +# 981| Type = [IntType]: int # 981| ValueCategory = prvalue(load) -# 981| 1: { ... } -# 983| 2: while (...) ... -# 983| 0: (condition decl) -# 983| Type = bool +# 981| 1: [Block]: { ... } +# 983| 2: [WhileStmt]: while (...) ... +# 983| 0: [ConditionDeclExpr]: (condition decl) +# 983| Type = [BoolType]: bool # 983| ValueCategory = prvalue -# 983| 0: (bool)... +# 983| 0: [BoolConversion]: (bool)... # 983| Conversion = conversion to bool -# 983| Type = bool +# 983| Type = [BoolType]: bool # 983| ValueCategory = prvalue -# 983| expr: p -# 983| Type = int * +# 983| expr: [VariableAccess]: p +# 983| Type = [IntPointerType]: int * # 983| ValueCategory = prvalue(load) -# 983| 1: { ... } -# 985| 3: return ... -# 987| int PointerDecay(int[], int(float)) +# 983| 1: [Block]: { ... } +# 985| 3: [ReturnStmt]: return ... +# 987| [TopLevelFunction]: int PointerDecay(int[], int(float)) # 987| params: -# 987| 0: a -# 987| Type = int[] -# 987| 1: fn -# 987| Type = ..()(..) -# 987| body: { ... } -# 988| 0: return ... -# 988| 0: ... + ... -# 988| Type = int +# 987| 0: [Parameter]: a +# 987| Type = [ArrayType]: int[] +# 987| 1: [Parameter]: fn +# 987| Type = [RoutineType]: ..()(..) +# 987| body: [Block]: { ... } +# 988| 0: [ReturnStmt]: return ... +# 988| 0: [AddExpr]: ... + ... +# 988| Type = [IntType]: int # 988| ValueCategory = prvalue -# 988| 0: access to array -# 988| Type = int +# 988| 0: [ArrayExpr]: access to array +# 988| Type = [IntType]: int # 988| ValueCategory = prvalue(load) -# 988| 0: a -# 988| Type = int * +# 988| 0: [VariableAccess]: a +# 988| Type = [IntPointerType]: int * # 988| ValueCategory = prvalue(load) -# 988| 1: 0 -# 988| Type = int -# 988| Value = 0 +# 988| 1: [Zero]: 0 +# 988| Type = [IntType]: int +# 988| Value = [Zero]: 0 # 988| ValueCategory = prvalue -# 988| 1: call to expression -# 988| Type = int +# 988| 1: [VariableCall]: call to expression +# 988| Type = [IntType]: int # 988| ValueCategory = prvalue -# 988| 0: fn -# 988| Type = ..(*)(..) +# 988| 0: [VariableAccess]: fn +# 988| Type = [FunctionPointerType]: ..(*)(..) # 988| ValueCategory = prvalue(load) -# 988| 1: (float)... +# 988| 1: [FloatingPointConversion]: (float)... # 988| Conversion = floating point conversion -# 988| Type = float -# 988| Value = 1.0 +# 988| Type = [FloatType]: float +# 988| Value = [FloatingPointConversion]: 1.0 # 988| ValueCategory = prvalue -# 988| expr: 1.0 -# 988| Type = double -# 988| Value = 1.0 +# 988| expr: [Literal]: 1.0 +# 988| Type = [DoubleType]: double +# 988| Value = [Literal]: 1.0 # 988| ValueCategory = prvalue -# 991| int ExprStmt(int, int, int) +# 991| [TopLevelFunction]: int ExprStmt(int, int, int) # 991| params: -# 991| 0: b -# 991| Type = int -# 991| 1: y -# 991| Type = int -# 991| 2: z -# 991| Type = int -# 991| body: { ... } -# 992| 0: declaration -# 992| 0: definition of x -# 992| Type = int -# 992| init: initializer for x -# 992| expr: (statement expression) -# 992| Type = int +# 991| 0: [Parameter]: b +# 991| Type = [IntType]: int +# 991| 1: [Parameter]: y +# 991| Type = [IntType]: int +# 991| 2: [Parameter]: z +# 991| Type = [IntType]: int +# 991| body: [Block]: { ... } +# 992| 0: [DeclStmt]: declaration +# 992| 0: [VariableDeclarationEntry]: definition of x +# 992| Type = [IntType]: int +# 992| init: [Initializer]: initializer for x +# 992| expr: [StmtExpr]: (statement expression) +# 992| Type = [IntType]: int # 992| ValueCategory = prvalue -# 1002| 1: return ... -# 1002| 0: (statement expression) -# 1002| Type = int +# 1002| 1: [ReturnStmt]: return ... +# 1002| 0: [StmtExpr]: (statement expression) +# 1002| Type = [IntType]: int # 1002| ValueCategory = prvalue -# 1006| void OperatorDelete() -# 1006| params: -# 1006| body: { ... } -# 1007| 0: ExprStmt -# 1007| 0: delete -# 1007| Type = void -# 1007| ValueCategory = prvalue -# 1007| 3: static_cast... -# 1007| Conversion = pointer conversion -# 1007| Type = int * -# 1007| Value = 0 -# 1007| ValueCategory = prvalue -# 1007| expr: 0 -# 1007| Type = decltype(nullptr) -# 1007| Value = 0 -# 1007| ValueCategory = prvalue -# 1008| 1: ExprStmt -# 1008| 0: delete -# 1008| Type = void -# 1008| ValueCategory = prvalue -# 1008| 1: call to ~String -# 1008| Type = void -# 1008| ValueCategory = prvalue -# 1008| -1: static_cast... -# 1008| Conversion = pointer conversion -# 1008| Type = String * -# 1008| Value = 0 -# 1008| ValueCategory = prvalue -# 1008| expr: 0 -# 1008| Type = decltype(nullptr) -# 1008| Value = 0 -# 1008| ValueCategory = prvalue -# 1009| 2: ExprStmt -# 1009| 0: delete -# 1009| Type = void -# 1009| ValueCategory = prvalue -# 1009| 0: call to operator delete -# 1009| Type = void -# 1009| ValueCategory = prvalue -# 1009| 3: static_cast... -# 1009| Conversion = pointer conversion -# 1009| Type = SizedDealloc * -# 1009| Value = 0 -# 1009| ValueCategory = prvalue -# 1009| expr: 0 -# 1009| Type = decltype(nullptr) -# 1009| Value = 0 -# 1009| ValueCategory = prvalue -# 1010| 3: ExprStmt -# 1010| 0: delete -# 1010| Type = void -# 1010| ValueCategory = prvalue -# 1010| 3: static_cast... -# 1010| Conversion = pointer conversion -# 1010| Type = Overaligned * -# 1010| Value = 0 -# 1010| ValueCategory = prvalue -# 1010| expr: 0 -# 1010| Type = decltype(nullptr) -# 1010| Value = 0 -# 1010| ValueCategory = prvalue -# 1011| 4: ExprStmt -# 1011| 0: delete -# 1011| Type = void -# 1011| ValueCategory = prvalue -# 1011| 1: call to ~PolymorphicBase -# 1011| Type = void -# 1011| ValueCategory = prvalue -# 1011| -1: static_cast... -# 1011| Conversion = pointer conversion -# 1011| Type = PolymorphicBase * -# 1011| Value = 0 -# 1011| ValueCategory = prvalue -# 1011| expr: 0 -# 1011| Type = decltype(nullptr) -# 1011| Value = 0 -# 1011| ValueCategory = prvalue -# 1012| 5: return ... -# 1015| void OperatorDeleteArray() -# 1015| params: -# 1015| body: { ... } -# 1016| 0: ExprStmt -# 1016| 0: delete[] -# 1016| Type = void -# 1016| ValueCategory = prvalue -# 1016| 3: static_cast... -# 1016| Conversion = pointer conversion -# 1016| Type = int * -# 1016| Value = 0 -# 1016| ValueCategory = prvalue -# 1016| expr: 0 -# 1016| Type = decltype(nullptr) -# 1016| Value = 0 -# 1016| ValueCategory = prvalue -# 1017| 1: ExprStmt -# 1017| 0: delete[] -# 1017| Type = void -# 1017| ValueCategory = prvalue -# 1017| 1: call to ~String -# 1017| Type = void -# 1017| ValueCategory = prvalue -# 1017| -1: static_cast... -# 1017| Conversion = pointer conversion -# 1017| Type = String * -# 1017| Value = 0 -# 1017| ValueCategory = prvalue -# 1017| expr: 0 -# 1017| Type = decltype(nullptr) -# 1017| Value = 0 -# 1017| ValueCategory = prvalue -# 1018| 2: ExprStmt -# 1018| 0: delete[] -# 1018| Type = void -# 1018| ValueCategory = prvalue -# 1018| 0: call to operator delete[] -# 1018| Type = void -# 1018| ValueCategory = prvalue -# 1018| 3: static_cast... -# 1018| Conversion = pointer conversion -# 1018| Type = SizedDealloc * -# 1018| Value = 0 -# 1018| ValueCategory = prvalue -# 1018| expr: 0 -# 1018| Type = decltype(nullptr) -# 1018| Value = 0 -# 1018| ValueCategory = prvalue -# 1019| 3: ExprStmt -# 1019| 0: delete[] -# 1019| Type = void -# 1019| ValueCategory = prvalue -# 1019| 3: static_cast... -# 1019| Conversion = pointer conversion -# 1019| Type = Overaligned * -# 1019| Value = 0 -# 1019| ValueCategory = prvalue -# 1019| expr: 0 -# 1019| Type = decltype(nullptr) -# 1019| Value = 0 -# 1019| ValueCategory = prvalue -# 1020| 4: ExprStmt -# 1020| 0: delete[] -# 1020| Type = void -# 1020| ValueCategory = prvalue -# 1020| 1: call to ~PolymorphicBase -# 1020| Type = void -# 1020| ValueCategory = prvalue -# 1020| -1: static_cast... -# 1020| Conversion = pointer conversion -# 1020| Type = PolymorphicBase * -# 1020| Value = 0 -# 1020| ValueCategory = prvalue -# 1020| expr: 0 -# 1020| Type = decltype(nullptr) -# 1020| Value = 0 -# 1020| ValueCategory = prvalue -# 1021| 5: return ... -# 1023| EmptyStruct& EmptyStruct::operator=(EmptyStruct const&) +# 1023| [CopyAssignmentOperator]: EmptyStruct& EmptyStruct::operator=(EmptyStruct const&) # 1023| params: -#-----| 0: p#0 -#-----| Type = const EmptyStruct & -# 1023| EmptyStruct& EmptyStruct::operator=(EmptyStruct&&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const EmptyStruct & +# 1023| [MoveAssignmentOperator]: EmptyStruct& EmptyStruct::operator=(EmptyStruct&&) # 1023| params: -#-----| 0: p#0 -#-----| Type = EmptyStruct && -# 1025| void EmptyStructInit() +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: EmptyStruct && +# 1025| [TopLevelFunction]: void EmptyStructInit() # 1025| params: -# 1025| body: { ... } -# 1026| 0: declaration -# 1026| 0: definition of s -# 1026| Type = EmptyStruct -# 1026| init: initializer for s -# 1026| expr: {...} -# 1026| Type = EmptyStruct +# 1025| body: [Block]: { ... } +# 1026| 0: [DeclStmt]: declaration +# 1026| 0: [VariableDeclarationEntry]: definition of s +# 1026| Type = [Struct]: EmptyStruct +# 1026| init: [Initializer]: initializer for s +# 1026| expr: [ClassAggregateLiteral]: {...} +# 1026| Type = [Struct]: EmptyStruct # 1026| ValueCategory = prvalue -# 1027| 1: return ... -# 1029| (lambda [] type at line 1029, col. 12)& (lambda [] type at line 1029, col. 12)::operator=((lambda [] type at line 1029, col. 12) const&) +# 1027| 1: [ReturnStmt]: return ... +# 1029| [CopyAssignmentOperator]: (lambda [] type at line 1029, col. 12)& (lambda [] type at line 1029, col. 12)::operator=((lambda [] type at line 1029, col. 12) const&) # 1029| params: -#-----| 0: p#0 -#-----| Type = const lambda [] type at line 1029, col. 12 & -# 1029| void (lambda [] type at line 1029, col. 12)::(constructor)((lambda [] type at line 1029, col. 12) const&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const lambda [] type at line 1029, col. 12 & +# 1029| [CopyConstructor]: void (lambda [] type at line 1029, col. 12)::(constructor)((lambda [] type at line 1029, col. 12) const&) # 1029| params: -#-----| 0: p#0 -#-----| Type = const lambda [] type at line 1029, col. 12 & -# 1029| void (lambda [] type at line 1029, col. 12)::(constructor)((lambda [] type at line 1029, col. 12)&&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const lambda [] type at line 1029, col. 12 & +# 1029| [MoveConstructor]: void (lambda [] type at line 1029, col. 12)::(constructor)((lambda [] type at line 1029, col. 12)&&) # 1029| params: -#-----| 0: p#0 -#-----| Type = lambda [] type at line 1029, col. 12 && +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: lambda [] type at line 1029, col. 12 && # 1029| initializations: -# 1029| body: { ... } -# 1029| 0: return ... -# 1029| void (lambda [] type at line 1029, col. 12)::(constructor)() +# 1029| body: [Block]: { ... } +# 1029| 0: [ReturnStmt]: return ... +# 1029| [Constructor]: void (lambda [] type at line 1029, col. 12)::(constructor)() # 1029| params: -# 1029| void (lambda [] type at line 1029, col. 12)::_FUN() +# 1029| [MemberFunction]: void (lambda [] type at line 1029, col. 12)::_FUN() # 1029| params: -# 1029| void (lambda [] type at line 1029, col. 12)::operator()() const +# 1029| [ConstMemberFunction]: void (lambda [] type at line 1029, col. 12)::operator()() const # 1029| params: -# 1029| body: { ... } -# 1029| 0: return ... -# 1029| void(* (lambda [] type at line 1029, col. 12)::operator void (*)()() const)() +# 1029| body: [Block]: { ... } +# 1029| 0: [ReturnStmt]: return ... +# 1029| [ConstMemberFunction]: void(* (lambda [] type at line 1029, col. 12)::operator void (*)()() const)() # 1029| params: -#-----| body: { ... } -# 1029| 0: return ... -# 1029| 0: _FUN -# 1029| Type = ..(*)(..) +#-----| body: [Block]: { ... } +# 1029| 0: [ReturnStmt]: return ... +# 1029| 0: [FunctionAccess]: _FUN +# 1029| Type = [FunctionPointerType]: ..(*)(..) # 1029| ValueCategory = prvalue(load) -# 1031| void Lambda(int, String const&) +# 1031| [TopLevelFunction]: void Lambda(int, String const&) # 1031| params: -# 1031| 0: x -# 1031| Type = int -# 1031| 1: s -# 1031| Type = const String & -# 1031| body: { ... } -# 1032| 0: declaration -# 1032| 0: definition of lambda_empty -# 1032| Type = decltype([...](...){...}) -# 1032| init: initializer for lambda_empty -# 1032| expr: [...](...){...} -# 1032| Type = decltype([...](...){...}) +# 1031| 0: [Parameter]: x +# 1031| Type = [IntType]: int +# 1031| 1: [Parameter]: s +# 1031| Type = [LValueReferenceType]: const String & +# 1031| body: [Block]: { ... } +# 1032| 0: [DeclStmt]: declaration +# 1032| 0: [VariableDeclarationEntry]: definition of lambda_empty +# 1032| Type = [Closure]: decltype([...](...){...}) +# 1032| init: [Initializer]: initializer for lambda_empty +# 1032| expr: [LambdaExpression]: [...](...){...} +# 1032| Type = [Closure]: decltype([...](...){...}) # 1032| ValueCategory = prvalue -# 1033| 1: ExprStmt -# 1033| 0: call to operator() -# 1033| Type = char -# 1033| Value = 65 +# 1033| 1: [ExprStmt]: ExprStmt +# 1033| 0: [FunctionCall]: call to operator() +# 1033| Type = [PlainCharType]: char +# 1033| Value = [FunctionCall]: 65 # 1033| ValueCategory = prvalue -# 1033| -1: (const lambda [] type at line 1032, col. 23)... +# 1033| -1: [GlvalueConversion]: (const lambda [] type at line 1032, col. 23)... # 1033| Conversion = glvalue conversion -# 1033| Type = const lambda [] type at line 1032, col. 23 +# 1033| Type = [SpecifiedType]: const lambda [] type at line 1032, col. 23 # 1033| ValueCategory = lvalue -# 1033| expr: lambda_empty -# 1033| Type = decltype([...](...){...}) +# 1033| expr: [VariableAccess]: lambda_empty +# 1033| Type = [Closure]: decltype([...](...){...}) # 1033| ValueCategory = lvalue -# 1033| 0: (float)... +# 1033| 0: [IntegralToFloatingPointConversion]: (float)... # 1033| Conversion = integral to floating point conversion -# 1033| Type = float -# 1033| Value = 0.0 +# 1033| Type = [FloatType]: float +# 1033| Value = [IntegralToFloatingPointConversion]: 0.0 # 1033| ValueCategory = prvalue -# 1033| expr: 0 -# 1033| Type = int -# 1033| Value = 0 +# 1033| expr: [Zero]: 0 +# 1033| Type = [IntType]: int +# 1033| Value = [Zero]: 0 # 1033| ValueCategory = prvalue -# 1034| 2: declaration -# 1034| 0: definition of lambda_ref -# 1034| Type = decltype([...](...){...}) -# 1034| init: initializer for lambda_ref -# 1034| expr: [...](...){...} -# 1034| Type = decltype([...](...){...}) +# 1034| 2: [DeclStmt]: declaration +# 1034| 0: [VariableDeclarationEntry]: definition of lambda_ref +# 1034| Type = [Closure]: decltype([...](...){...}) +# 1034| init: [Initializer]: initializer for lambda_ref +# 1034| expr: [LambdaExpression]: [...](...){...} +# 1034| Type = [Closure]: decltype([...](...){...}) # 1034| ValueCategory = prvalue -# 1034| 0: {...} -# 1034| Type = decltype([...](...){...}) +# 1034| 0: [ClassAggregateLiteral]: {...} +# 1034| Type = [Closure]: decltype([...](...){...}) # 1034| ValueCategory = prvalue -# 1034| .s: (reference to) -# 1034| Type = const String & +# 1034| .s: [ReferenceToExpr]: (reference to) +# 1034| Type = [LValueReferenceType]: const String & # 1034| ValueCategory = prvalue -# 1034| expr: (reference dereference) -# 1034| Type = const String +# 1034| expr: [ReferenceDereferenceExpr]: (reference dereference) +# 1034| Type = [SpecifiedType]: const String # 1034| ValueCategory = lvalue -#-----| expr: s -#-----| Type = const String & +#-----| expr: [VariableAccess]: s +#-----| Type = [LValueReferenceType]: const String & #-----| ValueCategory = prvalue(load) -#-----| .x: (reference to) -#-----| Type = int & +#-----| .x: [ReferenceToExpr]: (reference to) +#-----| Type = [LValueReferenceType]: int & #-----| ValueCategory = prvalue -#-----| expr: x -#-----| Type = int +#-----| expr: [VariableAccess]: x +#-----| Type = [IntType]: int #-----| ValueCategory = lvalue -# 1035| 3: ExprStmt -# 1035| 0: call to operator() -# 1035| Type = char +# 1035| 3: [ExprStmt]: ExprStmt +# 1035| 0: [FunctionCall]: call to operator() +# 1035| Type = [PlainCharType]: char # 1035| ValueCategory = prvalue -# 1035| -1: (const lambda [] type at line 1034, col. 21)... +# 1035| -1: [GlvalueConversion]: (const lambda [] type at line 1034, col. 21)... # 1035| Conversion = glvalue conversion -# 1035| Type = const lambda [] type at line 1034, col. 21 +# 1035| Type = [SpecifiedType]: const lambda [] type at line 1034, col. 21 # 1035| ValueCategory = lvalue -# 1035| expr: lambda_ref -# 1035| Type = decltype([...](...){...}) +# 1035| expr: [VariableAccess]: lambda_ref +# 1035| Type = [Closure]: decltype([...](...){...}) # 1035| ValueCategory = lvalue -# 1035| 0: (float)... +# 1035| 0: [IntegralToFloatingPointConversion]: (float)... # 1035| Conversion = integral to floating point conversion -# 1035| Type = float -# 1035| Value = 1.0 +# 1035| Type = [FloatType]: float +# 1035| Value = [IntegralToFloatingPointConversion]: 1.0 # 1035| ValueCategory = prvalue -# 1035| expr: 1 -# 1035| Type = int -# 1035| Value = 1 +# 1035| expr: [Literal]: 1 +# 1035| Type = [IntType]: int +# 1035| Value = [Literal]: 1 # 1035| ValueCategory = prvalue -# 1036| 4: declaration -# 1036| 0: definition of lambda_val -# 1036| Type = decltype([...](...){...}) -# 1036| init: initializer for lambda_val -# 1036| expr: call to (constructor) -# 1036| Type = void +# 1036| 4: [DeclStmt]: declaration +# 1036| 0: [VariableDeclarationEntry]: definition of lambda_val +# 1036| Type = [Closure]: decltype([...](...){...}) +# 1036| init: [Initializer]: initializer for lambda_val +# 1036| expr: [ConstructorCall]: call to (constructor) +# 1036| Type = [VoidType]: void # 1036| ValueCategory = prvalue -# 1036| 0: (reference to) -# 1036| Type = lambda [] type at line 1036, col. 21 & +# 1036| 0: [ReferenceToExpr]: (reference to) +# 1036| Type = [LValueReferenceType]: lambda [] type at line 1036, col. 21 & # 1036| ValueCategory = prvalue -# 1036| expr: [...](...){...} -# 1036| Type = decltype([...](...){...}) +# 1036| expr: [LambdaExpression]: [...](...){...} +# 1036| Type = [Closure]: decltype([...](...){...}) # 1036| ValueCategory = xvalue -# 1036| 0: {...} -# 1036| Type = decltype([...](...){...}) +# 1036| 0: [ClassAggregateLiteral]: {...} +# 1036| Type = [Closure]: decltype([...](...){...}) # 1036| ValueCategory = prvalue -#-----| .s: call to String -#-----| Type = void +#-----| .s: [ConstructorCall]: call to String +#-----| Type = [VoidType]: void #-----| ValueCategory = prvalue -#-----| .x: x -#-----| Type = int +#-----| .x: [VariableAccess]: x +#-----| Type = [IntType]: int #-----| ValueCategory = prvalue(load) -# 1037| 5: ExprStmt -# 1037| 0: call to operator() -# 1037| Type = char +# 1037| 5: [ExprStmt]: ExprStmt +# 1037| 0: [FunctionCall]: call to operator() +# 1037| Type = [PlainCharType]: char # 1037| ValueCategory = prvalue -# 1037| -1: (const lambda [] type at line 1036, col. 21)... +# 1037| -1: [GlvalueConversion]: (const lambda [] type at line 1036, col. 21)... # 1037| Conversion = glvalue conversion -# 1037| Type = const lambda [] type at line 1036, col. 21 +# 1037| Type = [SpecifiedType]: const lambda [] type at line 1036, col. 21 # 1037| ValueCategory = lvalue -# 1037| expr: lambda_val -# 1037| Type = decltype([...](...){...}) +# 1037| expr: [VariableAccess]: lambda_val +# 1037| Type = [Closure]: decltype([...](...){...}) # 1037| ValueCategory = lvalue -# 1037| 0: (float)... +# 1037| 0: [IntegralToFloatingPointConversion]: (float)... # 1037| Conversion = integral to floating point conversion -# 1037| Type = float -# 1037| Value = 2.0 +# 1037| Type = [FloatType]: float +# 1037| Value = [IntegralToFloatingPointConversion]: 2.0 # 1037| ValueCategory = prvalue -# 1037| expr: 2 -# 1037| Type = int -# 1037| Value = 2 +# 1037| expr: [Literal]: 2 +# 1037| Type = [IntType]: int +# 1037| Value = [Literal]: 2 # 1037| ValueCategory = prvalue -# 1038| 6: declaration -# 1038| 0: definition of lambda_ref_explicit -# 1038| Type = decltype([...](...){...}) -# 1038| init: initializer for lambda_ref_explicit -# 1038| expr: [...](...){...} -# 1038| Type = decltype([...](...){...}) +# 1038| 6: [DeclStmt]: declaration +# 1038| 0: [VariableDeclarationEntry]: definition of lambda_ref_explicit +# 1038| Type = [Closure]: decltype([...](...){...}) +# 1038| init: [Initializer]: initializer for lambda_ref_explicit +# 1038| expr: [LambdaExpression]: [...](...){...} +# 1038| Type = [Closure]: decltype([...](...){...}) # 1038| ValueCategory = prvalue -# 1038| 0: {...} -# 1038| Type = decltype([...](...){...}) +# 1038| 0: [ClassAggregateLiteral]: {...} +# 1038| Type = [Closure]: decltype([...](...){...}) # 1038| ValueCategory = prvalue -# 1038| .s: (reference to) -# 1038| Type = const String & +# 1038| .s: [ReferenceToExpr]: (reference to) +# 1038| Type = [LValueReferenceType]: const String & # 1038| ValueCategory = prvalue -# 1038| expr: (reference dereference) -# 1038| Type = const String +# 1038| expr: [ReferenceDereferenceExpr]: (reference dereference) +# 1038| Type = [SpecifiedType]: const String # 1038| ValueCategory = lvalue -# 1038| expr: s -# 1038| Type = const String & +# 1038| expr: [VariableAccess]: s +# 1038| Type = [LValueReferenceType]: const String & # 1038| ValueCategory = prvalue(load) -# 1039| 7: ExprStmt -# 1039| 0: call to operator() -# 1039| Type = char +# 1039| 7: [ExprStmt]: ExprStmt +# 1039| 0: [FunctionCall]: call to operator() +# 1039| Type = [PlainCharType]: char # 1039| ValueCategory = prvalue -# 1039| -1: (const lambda [] type at line 1038, col. 30)... +# 1039| -1: [GlvalueConversion]: (const lambda [] type at line 1038, col. 30)... # 1039| Conversion = glvalue conversion -# 1039| Type = const lambda [] type at line 1038, col. 30 +# 1039| Type = [SpecifiedType]: const lambda [] type at line 1038, col. 30 # 1039| ValueCategory = lvalue -# 1039| expr: lambda_ref_explicit -# 1039| Type = decltype([...](...){...}) +# 1039| expr: [VariableAccess]: lambda_ref_explicit +# 1039| Type = [Closure]: decltype([...](...){...}) # 1039| ValueCategory = lvalue -# 1039| 0: (float)... +# 1039| 0: [IntegralToFloatingPointConversion]: (float)... # 1039| Conversion = integral to floating point conversion -# 1039| Type = float -# 1039| Value = 3.0 +# 1039| Type = [FloatType]: float +# 1039| Value = [IntegralToFloatingPointConversion]: 3.0 # 1039| ValueCategory = prvalue -# 1039| expr: 3 -# 1039| Type = int -# 1039| Value = 3 +# 1039| expr: [Literal]: 3 +# 1039| Type = [IntType]: int +# 1039| Value = [Literal]: 3 # 1039| ValueCategory = prvalue -# 1040| 8: declaration -# 1040| 0: definition of lambda_val_explicit -# 1040| Type = decltype([...](...){...}) -# 1040| init: initializer for lambda_val_explicit -# 1040| expr: call to (constructor) -# 1040| Type = void +# 1040| 8: [DeclStmt]: declaration +# 1040| 0: [VariableDeclarationEntry]: definition of lambda_val_explicit +# 1040| Type = [Closure]: decltype([...](...){...}) +# 1040| init: [Initializer]: initializer for lambda_val_explicit +# 1040| expr: [ConstructorCall]: call to (constructor) +# 1040| Type = [VoidType]: void # 1040| ValueCategory = prvalue -# 1040| 0: (reference to) -# 1040| Type = lambda [] type at line 1040, col. 30 & +# 1040| 0: [ReferenceToExpr]: (reference to) +# 1040| Type = [LValueReferenceType]: lambda [] type at line 1040, col. 30 & # 1040| ValueCategory = prvalue -# 1040| expr: [...](...){...} -# 1040| Type = decltype([...](...){...}) +# 1040| expr: [LambdaExpression]: [...](...){...} +# 1040| Type = [Closure]: decltype([...](...){...}) # 1040| ValueCategory = xvalue -# 1040| 0: {...} -# 1040| Type = decltype([...](...){...}) +# 1040| 0: [ClassAggregateLiteral]: {...} +# 1040| Type = [Closure]: decltype([...](...){...}) # 1040| ValueCategory = prvalue -#-----| .s: call to String -#-----| Type = void +#-----| .s: [ConstructorCall]: call to String +#-----| Type = [VoidType]: void #-----| ValueCategory = prvalue -# 1041| 9: ExprStmt -# 1041| 0: call to operator() -# 1041| Type = char +# 1041| 9: [ExprStmt]: ExprStmt +# 1041| 0: [FunctionCall]: call to operator() +# 1041| Type = [PlainCharType]: char # 1041| ValueCategory = prvalue -# 1041| -1: (const lambda [] type at line 1040, col. 30)... +# 1041| -1: [GlvalueConversion]: (const lambda [] type at line 1040, col. 30)... # 1041| Conversion = glvalue conversion -# 1041| Type = const lambda [] type at line 1040, col. 30 +# 1041| Type = [SpecifiedType]: const lambda [] type at line 1040, col. 30 # 1041| ValueCategory = lvalue -# 1041| expr: lambda_val_explicit -# 1041| Type = decltype([...](...){...}) +# 1041| expr: [VariableAccess]: lambda_val_explicit +# 1041| Type = [Closure]: decltype([...](...){...}) # 1041| ValueCategory = lvalue -# 1041| 0: (float)... +# 1041| 0: [IntegralToFloatingPointConversion]: (float)... # 1041| Conversion = integral to floating point conversion -# 1041| Type = float -# 1041| Value = 4.0 +# 1041| Type = [FloatType]: float +# 1041| Value = [IntegralToFloatingPointConversion]: 4.0 # 1041| ValueCategory = prvalue -# 1041| expr: 4 -# 1041| Type = int -# 1041| Value = 4 +# 1041| expr: [Literal]: 4 +# 1041| Type = [IntType]: int +# 1041| Value = [Literal]: 4 # 1041| ValueCategory = prvalue -# 1042| 10: declaration -# 1042| 0: definition of lambda_mixed_explicit -# 1042| Type = decltype([...](...){...}) -# 1042| init: initializer for lambda_mixed_explicit -# 1042| expr: [...](...){...} -# 1042| Type = decltype([...](...){...}) +# 1042| 10: [DeclStmt]: declaration +# 1042| 0: [VariableDeclarationEntry]: definition of lambda_mixed_explicit +# 1042| Type = [Closure]: decltype([...](...){...}) +# 1042| init: [Initializer]: initializer for lambda_mixed_explicit +# 1042| expr: [LambdaExpression]: [...](...){...} +# 1042| Type = [Closure]: decltype([...](...){...}) # 1042| ValueCategory = prvalue -# 1042| 0: {...} -# 1042| Type = decltype([...](...){...}) +# 1042| 0: [ClassAggregateLiteral]: {...} +# 1042| Type = [Closure]: decltype([...](...){...}) # 1042| ValueCategory = prvalue -# 1042| .s: (reference to) -# 1042| Type = const String & +# 1042| .s: [ReferenceToExpr]: (reference to) +# 1042| Type = [LValueReferenceType]: const String & # 1042| ValueCategory = prvalue -# 1042| expr: (reference dereference) -# 1042| Type = const String +# 1042| expr: [ReferenceDereferenceExpr]: (reference dereference) +# 1042| Type = [SpecifiedType]: const String # 1042| ValueCategory = lvalue -# 1042| expr: s -# 1042| Type = const String & +# 1042| expr: [VariableAccess]: s +# 1042| Type = [LValueReferenceType]: const String & # 1042| ValueCategory = prvalue(load) -# 1042| .x: x -# 1042| Type = int +# 1042| .x: [VariableAccess]: x +# 1042| Type = [IntType]: int # 1042| ValueCategory = prvalue(load) -# 1043| 11: ExprStmt -# 1043| 0: call to operator() -# 1043| Type = char +# 1043| 11: [ExprStmt]: ExprStmt +# 1043| 0: [FunctionCall]: call to operator() +# 1043| Type = [PlainCharType]: char # 1043| ValueCategory = prvalue -# 1043| -1: (const lambda [] type at line 1042, col. 32)... +# 1043| -1: [GlvalueConversion]: (const lambda [] type at line 1042, col. 32)... # 1043| Conversion = glvalue conversion -# 1043| Type = const lambda [] type at line 1042, col. 32 +# 1043| Type = [SpecifiedType]: const lambda [] type at line 1042, col. 32 # 1043| ValueCategory = lvalue -# 1043| expr: lambda_mixed_explicit -# 1043| Type = decltype([...](...){...}) +# 1043| expr: [VariableAccess]: lambda_mixed_explicit +# 1043| Type = [Closure]: decltype([...](...){...}) # 1043| ValueCategory = lvalue -# 1043| 0: (float)... +# 1043| 0: [IntegralToFloatingPointConversion]: (float)... # 1043| Conversion = integral to floating point conversion -# 1043| Type = float -# 1043| Value = 5.0 +# 1043| Type = [FloatType]: float +# 1043| Value = [IntegralToFloatingPointConversion]: 5.0 # 1043| ValueCategory = prvalue -# 1043| expr: 5 -# 1043| Type = int -# 1043| Value = 5 +# 1043| expr: [Literal]: 5 +# 1043| Type = [IntType]: int +# 1043| Value = [Literal]: 5 # 1043| ValueCategory = prvalue -# 1044| 12: declaration -# 1044| 0: definition of r -# 1044| Type = int -# 1044| init: initializer for r -# 1044| expr: ... - ... -# 1044| Type = int +# 1044| 12: [DeclStmt]: declaration +# 1044| 0: [VariableDeclarationEntry]: definition of r +# 1044| Type = [IntType]: int +# 1044| init: [Initializer]: initializer for r +# 1044| expr: [SubExpr]: ... - ... +# 1044| Type = [IntType]: int # 1044| ValueCategory = prvalue -# 1044| 0: x -# 1044| Type = int +# 1044| 0: [VariableAccess]: x +# 1044| Type = [IntType]: int # 1044| ValueCategory = prvalue(load) -# 1044| 1: 1 -# 1044| Type = int -# 1044| Value = 1 +# 1044| 1: [Literal]: 1 +# 1044| Type = [IntType]: int +# 1044| Value = [Literal]: 1 # 1044| ValueCategory = prvalue -# 1045| 13: declaration -# 1045| 0: definition of lambda_inits -# 1045| Type = decltype([...](...){...}) -# 1045| init: initializer for lambda_inits -# 1045| expr: [...](...){...} -# 1045| Type = decltype([...](...){...}) +# 1045| 13: [DeclStmt]: declaration +# 1045| 0: [VariableDeclarationEntry]: definition of lambda_inits +# 1045| Type = [Closure]: decltype([...](...){...}) +# 1045| init: [Initializer]: initializer for lambda_inits +# 1045| expr: [LambdaExpression]: [...](...){...} +# 1045| Type = [Closure]: decltype([...](...){...}) # 1045| ValueCategory = prvalue -# 1045| 0: {...} -# 1045| Type = decltype([...](...){...}) +# 1045| 0: [ClassAggregateLiteral]: {...} +# 1045| Type = [Closure]: decltype([...](...){...}) # 1045| ValueCategory = prvalue -# 1045| .s: (reference to) -# 1045| Type = const String & +# 1045| .s: [ReferenceToExpr]: (reference to) +# 1045| Type = [LValueReferenceType]: const String & # 1045| ValueCategory = prvalue -# 1045| expr: (reference dereference) -# 1045| Type = const String +# 1045| expr: [ReferenceDereferenceExpr]: (reference dereference) +# 1045| Type = [SpecifiedType]: const String # 1045| ValueCategory = lvalue -# 1045| expr: s -# 1045| Type = const String & +# 1045| expr: [VariableAccess]: s +# 1045| Type = [LValueReferenceType]: const String & # 1045| ValueCategory = prvalue(load) -# 1045| .x: x -# 1045| Type = int +# 1045| .x: [VariableAccess]: x +# 1045| Type = [IntType]: int # 1045| ValueCategory = prvalue(load) -# 1045| .i: ... + ... -# 1045| Type = int +# 1045| .i: [AddExpr]: ... + ... +# 1045| Type = [IntType]: int # 1045| ValueCategory = prvalue -# 1045| 0: x -# 1045| Type = int +# 1045| 0: [VariableAccess]: x +# 1045| Type = [IntType]: int # 1045| ValueCategory = prvalue(load) -# 1045| 1: 1 -# 1045| Type = int -# 1045| Value = 1 +# 1045| 1: [Literal]: 1 +# 1045| Type = [IntType]: int +# 1045| Value = [Literal]: 1 # 1045| ValueCategory = prvalue -# 1045| .j: (reference to) -# 1045| Type = int & +# 1045| .j: [ReferenceToExpr]: (reference to) +# 1045| Type = [LValueReferenceType]: int & # 1045| ValueCategory = prvalue -# 1045| expr: r -# 1045| Type = int +# 1045| expr: [VariableAccess]: r +# 1045| Type = [IntType]: int # 1045| ValueCategory = lvalue -# 1046| 14: ExprStmt -# 1046| 0: call to operator() -# 1046| Type = char +# 1046| 14: [ExprStmt]: ExprStmt +# 1046| 0: [FunctionCall]: call to operator() +# 1046| Type = [PlainCharType]: char # 1046| ValueCategory = prvalue -# 1046| -1: (const lambda [] type at line 1045, col. 23)... +# 1046| -1: [GlvalueConversion]: (const lambda [] type at line 1045, col. 23)... # 1046| Conversion = glvalue conversion -# 1046| Type = const lambda [] type at line 1045, col. 23 +# 1046| Type = [SpecifiedType]: const lambda [] type at line 1045, col. 23 # 1046| ValueCategory = lvalue -# 1046| expr: lambda_inits -# 1046| Type = decltype([...](...){...}) +# 1046| expr: [VariableAccess]: lambda_inits +# 1046| Type = [Closure]: decltype([...](...){...}) # 1046| ValueCategory = lvalue -# 1046| 0: (float)... +# 1046| 0: [IntegralToFloatingPointConversion]: (float)... # 1046| Conversion = integral to floating point conversion -# 1046| Type = float -# 1046| Value = 6.0 +# 1046| Type = [FloatType]: float +# 1046| Value = [IntegralToFloatingPointConversion]: 6.0 # 1046| ValueCategory = prvalue -# 1046| expr: 6 -# 1046| Type = int -# 1046| Value = 6 +# 1046| expr: [Literal]: 6 +# 1046| Type = [IntType]: int +# 1046| Value = [Literal]: 6 # 1046| ValueCategory = prvalue -# 1047| 15: return ... -# 1032| (void Lambda(int, String const&))::(lambda [] type at line 1032, col. 23)& (void Lambda(int, String const&))::(lambda [] type at line 1032, col. 23)::operator=((void Lambda(int, String const&))::(lambda [] type at line 1032, col. 23) const&) +# 1047| 15: [ReturnStmt]: return ... +# 1032| [CopyAssignmentOperator]: (void Lambda(int, String const&))::(lambda [] type at line 1032, col. 23)& (void Lambda(int, String const&))::(lambda [] type at line 1032, col. 23)::operator=((void Lambda(int, String const&))::(lambda [] type at line 1032, col. 23) const&) # 1032| params: -#-----| 0: p#0 -#-----| Type = const lambda [] type at line 1032, col. 23 & -# 1032| void (void Lambda(int, String const&))::(lambda [] type at line 1032, col. 23)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1032, col. 23) const&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const lambda [] type at line 1032, col. 23 & +# 1032| [CopyConstructor]: void (void Lambda(int, String const&))::(lambda [] type at line 1032, col. 23)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1032, col. 23) const&) # 1032| params: -#-----| 0: p#0 -#-----| Type = const lambda [] type at line 1032, col. 23 & -# 1032| void (void Lambda(int, String const&))::(lambda [] type at line 1032, col. 23)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1032, col. 23)&&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const lambda [] type at line 1032, col. 23 & +# 1032| [MoveConstructor]: void (void Lambda(int, String const&))::(lambda [] type at line 1032, col. 23)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1032, col. 23)&&) # 1032| params: -#-----| 0: p#0 -#-----| Type = lambda [] type at line 1032, col. 23 && +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: lambda [] type at line 1032, col. 23 && # 1032| initializations: -# 1032| body: { ... } -# 1032| 0: return ... -# 1032| void (void Lambda(int, String const&))::(lambda [] type at line 1032, col. 23)::(constructor)() +# 1032| body: [Block]: { ... } +# 1032| 0: [ReturnStmt]: return ... +# 1032| [Constructor]: void (void Lambda(int, String const&))::(lambda [] type at line 1032, col. 23)::(constructor)() # 1032| params: -# 1032| char (void Lambda(int, String const&))::(lambda [] type at line 1032, col. 23)::_FUN(float) +# 1032| [MemberFunction]: char (void Lambda(int, String const&))::(lambda [] type at line 1032, col. 23)::_FUN(float) # 1032| params: -# 1032| 0: f -# 1032| Type = float -# 1032| char (void Lambda(int, String const&))::(lambda [] type at line 1032, col. 23)::operator()(float) const +# 1032| 0: [Parameter]: f +# 1032| Type = [FloatType]: float +# 1032| [ConstMemberFunction]: char (void Lambda(int, String const&))::(lambda [] type at line 1032, col. 23)::operator()(float) const # 1032| params: -# 1032| 0: f -# 1032| Type = float -# 1032| body: { ... } -# 1032| 0: return ... -# 1032| 0: 65 -# 1032| Type = char -# 1032| Value = 65 +# 1032| 0: [Parameter]: f +# 1032| Type = [FloatType]: float +# 1032| body: [Block]: { ... } +# 1032| 0: [ReturnStmt]: return ... +# 1032| 0: [CharLiteral]: 65 +# 1032| Type = [PlainCharType]: char +# 1032| Value = [CharLiteral]: 65 # 1032| ValueCategory = prvalue -# 1032| char(* (void Lambda(int, String const&))::(lambda [] type at line 1032, col. 23)::operator char (*)(float)() const)(float) +# 1032| [ConstMemberFunction]: char(* (void Lambda(int, String const&))::(lambda [] type at line 1032, col. 23)::operator char (*)(float)() const)(float) # 1032| params: -#-----| body: { ... } -# 1032| 0: return ... -# 1032| 0: _FUN -# 1032| Type = ..(*)(..) +#-----| body: [Block]: { ... } +# 1032| 0: [ReturnStmt]: return ... +# 1032| 0: [FunctionAccess]: _FUN +# 1032| Type = [FunctionPointerType]: ..(*)(..) # 1032| ValueCategory = prvalue(load) -# 1034| (void Lambda(int, String const&))::(lambda [] type at line 1034, col. 21)& (void Lambda(int, String const&))::(lambda [] type at line 1034, col. 21)::operator=((void Lambda(int, String const&))::(lambda [] type at line 1034, col. 21) const&) +# 1034| [CopyAssignmentOperator]: (void Lambda(int, String const&))::(lambda [] type at line 1034, col. 21)& (void Lambda(int, String const&))::(lambda [] type at line 1034, col. 21)::operator=((void Lambda(int, String const&))::(lambda [] type at line 1034, col. 21) const&) # 1034| params: -#-----| 0: p#0 -#-----| Type = const lambda [] type at line 1034, col. 21 & -# 1034| void (void Lambda(int, String const&))::(lambda [] type at line 1034, col. 21)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1034, col. 21) const&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const lambda [] type at line 1034, col. 21 & +# 1034| [CopyConstructor]: void (void Lambda(int, String const&))::(lambda [] type at line 1034, col. 21)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1034, col. 21) const&) # 1034| params: -#-----| 0: p#0 -#-----| Type = const lambda [] type at line 1034, col. 21 & -# 1034| void (void Lambda(int, String const&))::(lambda [] type at line 1034, col. 21)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1034, col. 21)&&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const lambda [] type at line 1034, col. 21 & +# 1034| [MoveConstructor]: void (void Lambda(int, String const&))::(lambda [] type at line 1034, col. 21)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1034, col. 21)&&) # 1034| params: -#-----| 0: p#0 -#-----| Type = lambda [] type at line 1034, col. 21 && +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: lambda [] type at line 1034, col. 21 && # 1034| initializations: -# 1034| 0: constructor init of field s -# 1034| Type = const String & +# 1034| 0: [ConstructorFieldInit]: constructor init of field s +# 1034| Type = [LValueReferenceType]: const String & # 1034| ValueCategory = prvalue -# 1034| 0: Unknown literal -# 1034| Type = const String & +# 1034| 0: [Literal]: Unknown literal +# 1034| Type = [LValueReferenceType]: const String & # 1034| ValueCategory = prvalue -# 1034| 1: constructor init of field x -# 1034| Type = int & +# 1034| 1: [ConstructorFieldInit]: constructor init of field x +# 1034| Type = [LValueReferenceType]: int & # 1034| ValueCategory = prvalue -# 1034| 0: Unknown literal -# 1034| Type = int & +# 1034| 0: [Literal]: Unknown literal +# 1034| Type = [LValueReferenceType]: int & # 1034| ValueCategory = prvalue -# 1034| body: { ... } -# 1034| 0: return ... -# 1034| void (void Lambda(int, String const&))::(lambda [] type at line 1034, col. 21)::(constructor)() +# 1034| body: [Block]: { ... } +# 1034| 0: [ReturnStmt]: return ... +# 1034| [Constructor]: void (void Lambda(int, String const&))::(lambda [] type at line 1034, col. 21)::(constructor)() # 1034| params: -# 1034| char (void Lambda(int, String const&))::(lambda [] type at line 1034, col. 21)::operator()(float) const +# 1034| [ConstMemberFunction]: char (void Lambda(int, String const&))::(lambda [] type at line 1034, col. 21)::operator()(float) const # 1034| params: -# 1034| 0: f -# 1034| Type = float -# 1034| body: { ... } -# 1034| 0: return ... -# 1034| 0: access to array -# 1034| Type = char +# 1034| 0: [Parameter]: f +# 1034| Type = [FloatType]: float +# 1034| body: [Block]: { ... } +# 1034| 0: [ReturnStmt]: return ... +# 1034| 0: [ArrayExpr]: access to array +# 1034| Type = [PlainCharType]: char # 1034| ValueCategory = prvalue(load) -# 1034| 0: call to c_str -# 1034| Type = const char * +# 1034| 0: [FunctionCall]: call to c_str +# 1034| Type = [PointerType]: const char * # 1034| ValueCategory = prvalue -# 1034| -1: (reference dereference) -# 1034| Type = const String +# 1034| -1: [ReferenceDereferenceExpr]: (reference dereference) +# 1034| Type = [SpecifiedType]: const String # 1034| ValueCategory = lvalue -#-----| expr: s -#-----| Type = const String & +#-----| expr: [FieldAccess]: s +#-----| Type = [LValueReferenceType]: const String & #-----| ValueCategory = prvalue(load) -#-----| -1: this -#-----| Type = const lambda [] type at line 1034, col. 21 * +#-----| -1: [ThisExpr]: this +#-----| Type = [PointerType]: const lambda [] type at line 1034, col. 21 * #-----| ValueCategory = prvalue(load) -# 1034| 1: (reference dereference) -# 1034| Type = int +# 1034| 1: [ReferenceDereferenceExpr]: (reference dereference) +# 1034| Type = [IntType]: int # 1034| ValueCategory = prvalue(load) -#-----| expr: x -#-----| Type = int & +#-----| expr: [FieldAccess]: x +#-----| Type = [LValueReferenceType]: int & #-----| ValueCategory = prvalue(load) -#-----| -1: this -#-----| Type = const lambda [] type at line 1034, col. 21 * +#-----| -1: [ThisExpr]: this +#-----| Type = [PointerType]: const lambda [] type at line 1034, col. 21 * #-----| ValueCategory = prvalue(load) -# 1036| (void Lambda(int, String const&))::(lambda [] type at line 1036, col. 21)& (void Lambda(int, String const&))::(lambda [] type at line 1036, col. 21)::operator=((void Lambda(int, String const&))::(lambda [] type at line 1036, col. 21) const&) +# 1036| [CopyAssignmentOperator]: (void Lambda(int, String const&))::(lambda [] type at line 1036, col. 21)& (void Lambda(int, String const&))::(lambda [] type at line 1036, col. 21)::operator=((void Lambda(int, String const&))::(lambda [] type at line 1036, col. 21) const&) # 1036| params: -#-----| 0: p#0 -#-----| Type = const lambda [] type at line 1036, col. 21 & -# 1036| void (void Lambda(int, String const&))::(lambda [] type at line 1036, col. 21)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1036, col. 21) const&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const lambda [] type at line 1036, col. 21 & +# 1036| [CopyConstructor]: void (void Lambda(int, String const&))::(lambda [] type at line 1036, col. 21)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1036, col. 21) const&) # 1036| params: -#-----| 0: p#0 -#-----| Type = const lambda [] type at line 1036, col. 21 & -# 1036| void (void Lambda(int, String const&))::(lambda [] type at line 1036, col. 21)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1036, col. 21)&&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const lambda [] type at line 1036, col. 21 & +# 1036| [MoveConstructor]: void (void Lambda(int, String const&))::(lambda [] type at line 1036, col. 21)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1036, col. 21)&&) # 1036| params: -#-----| 0: p#0 -#-----| Type = lambda [] type at line 1036, col. 21 && +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: lambda [] type at line 1036, col. 21 && # 1036| initializations: -# 1036| 0: constructor init of field s -# 1036| Type = const String +# 1036| 0: [ConstructorFieldInit]: constructor init of field s +# 1036| Type = [SpecifiedType]: const String # 1036| ValueCategory = prvalue -# 1036| 0: call to String -# 1036| Type = void +# 1036| 0: [ConstructorCall]: call to String +# 1036| Type = [VoidType]: void # 1036| ValueCategory = prvalue -# 1036| 1: constructor init of field x -# 1036| Type = int +# 1036| 1: [ConstructorFieldInit]: constructor init of field x +# 1036| Type = [IntType]: int # 1036| ValueCategory = prvalue -# 1036| 0: Unknown literal -# 1036| Type = int +# 1036| 0: [Literal]: Unknown literal +# 1036| Type = [IntType]: int # 1036| ValueCategory = prvalue -# 1036| body: { ... } -# 1036| 0: return ... -# 1036| void (void Lambda(int, String const&))::(lambda [] type at line 1036, col. 21)::(constructor)() +# 1036| body: [Block]: { ... } +# 1036| 0: [ReturnStmt]: return ... +# 1036| [Constructor]: void (void Lambda(int, String const&))::(lambda [] type at line 1036, col. 21)::(constructor)() # 1036| params: -# 1036| void (void Lambda(int, String const&))::(lambda [] type at line 1036, col. 21)::~() +# 1036| [Destructor]: void (void Lambda(int, String const&))::(lambda [] type at line 1036, col. 21)::~() # 1036| params: -#-----| body: { ... } -#-----| 0: return ... +#-----| body: [Block]: { ... } +#-----| 0: [ReturnStmt]: return ... # 1036| destructions: -# 1036| 0: destructor field destruction of s -# 1036| Type = const String +# 1036| 0: [DestructorFieldDestruction]: destructor field destruction of s +# 1036| Type = [SpecifiedType]: const String # 1036| ValueCategory = prvalue -# 1036| 0: call to ~String -# 1036| Type = void +# 1036| 0: [DestructorCall]: call to ~String +# 1036| Type = [VoidType]: void # 1036| ValueCategory = prvalue -# 1036| -1: s -# 1036| Type = const String +# 1036| -1: [FieldAccess]: s +# 1036| Type = [SpecifiedType]: const String # 1036| ValueCategory = lvalue -# 1036| char (void Lambda(int, String const&))::(lambda [] type at line 1036, col. 21)::operator()(float) const +# 1036| [ConstMemberFunction]: char (void Lambda(int, String const&))::(lambda [] type at line 1036, col. 21)::operator()(float) const # 1036| params: -# 1036| 0: f -# 1036| Type = float -# 1036| body: { ... } -# 1036| 0: return ... -# 1036| 0: access to array -# 1036| Type = char +# 1036| 0: [Parameter]: f +# 1036| Type = [FloatType]: float +# 1036| body: [Block]: { ... } +# 1036| 0: [ReturnStmt]: return ... +# 1036| 0: [ArrayExpr]: access to array +# 1036| Type = [PlainCharType]: char # 1036| ValueCategory = prvalue(load) -# 1036| 0: call to c_str -# 1036| Type = const char * +# 1036| 0: [FunctionCall]: call to c_str +# 1036| Type = [PointerType]: const char * # 1036| ValueCategory = prvalue -#-----| -1: s -#-----| Type = const String +#-----| -1: [FieldAccess]: s +#-----| Type = [SpecifiedType]: const String #-----| ValueCategory = lvalue -#-----| -1: this -#-----| Type = const lambda [] type at line 1036, col. 21 * +#-----| -1: [ThisExpr]: this +#-----| Type = [PointerType]: const lambda [] type at line 1036, col. 21 * #-----| ValueCategory = prvalue(load) -#-----| 1: x -#-----| Type = int +#-----| 1: [FieldAccess]: x +#-----| Type = [IntType]: int #-----| ValueCategory = prvalue(load) -#-----| -1: this -#-----| Type = const lambda [] type at line 1036, col. 21 * +#-----| -1: [ThisExpr]: this +#-----| Type = [PointerType]: const lambda [] type at line 1036, col. 21 * #-----| ValueCategory = prvalue(load) -# 1038| (void Lambda(int, String const&))::(lambda [] type at line 1038, col. 30)& (void Lambda(int, String const&))::(lambda [] type at line 1038, col. 30)::operator=((void Lambda(int, String const&))::(lambda [] type at line 1038, col. 30) const&) +# 1038| [CopyAssignmentOperator]: (void Lambda(int, String const&))::(lambda [] type at line 1038, col. 30)& (void Lambda(int, String const&))::(lambda [] type at line 1038, col. 30)::operator=((void Lambda(int, String const&))::(lambda [] type at line 1038, col. 30) const&) # 1038| params: -#-----| 0: p#0 -#-----| Type = const lambda [] type at line 1038, col. 30 & -# 1038| void (void Lambda(int, String const&))::(lambda [] type at line 1038, col. 30)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1038, col. 30) const&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const lambda [] type at line 1038, col. 30 & +# 1038| [CopyConstructor]: void (void Lambda(int, String const&))::(lambda [] type at line 1038, col. 30)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1038, col. 30) const&) # 1038| params: -#-----| 0: p#0 -#-----| Type = const lambda [] type at line 1038, col. 30 & -# 1038| void (void Lambda(int, String const&))::(lambda [] type at line 1038, col. 30)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1038, col. 30)&&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const lambda [] type at line 1038, col. 30 & +# 1038| [MoveConstructor]: void (void Lambda(int, String const&))::(lambda [] type at line 1038, col. 30)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1038, col. 30)&&) # 1038| params: -#-----| 0: p#0 -#-----| Type = lambda [] type at line 1038, col. 30 && +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: lambda [] type at line 1038, col. 30 && # 1038| initializations: -# 1038| 0: constructor init of field s -# 1038| Type = const String & +# 1038| 0: [ConstructorFieldInit]: constructor init of field s +# 1038| Type = [LValueReferenceType]: const String & # 1038| ValueCategory = prvalue -# 1038| 0: Unknown literal -# 1038| Type = const String & +# 1038| 0: [Literal]: Unknown literal +# 1038| Type = [LValueReferenceType]: const String & # 1038| ValueCategory = prvalue -# 1038| body: { ... } -# 1038| 0: return ... -# 1038| void (void Lambda(int, String const&))::(lambda [] type at line 1038, col. 30)::(constructor)() +# 1038| body: [Block]: { ... } +# 1038| 0: [ReturnStmt]: return ... +# 1038| [Constructor]: void (void Lambda(int, String const&))::(lambda [] type at line 1038, col. 30)::(constructor)() # 1038| params: -# 1038| char (void Lambda(int, String const&))::(lambda [] type at line 1038, col. 30)::operator()(float) const +# 1038| [ConstMemberFunction]: char (void Lambda(int, String const&))::(lambda [] type at line 1038, col. 30)::operator()(float) const # 1038| params: -# 1038| 0: f -# 1038| Type = float -# 1038| body: { ... } -# 1038| 0: return ... -# 1038| 0: access to array -# 1038| Type = char +# 1038| 0: [Parameter]: f +# 1038| Type = [FloatType]: float +# 1038| body: [Block]: { ... } +# 1038| 0: [ReturnStmt]: return ... +# 1038| 0: [ArrayExpr]: access to array +# 1038| Type = [PlainCharType]: char # 1038| ValueCategory = prvalue(load) -# 1038| 0: call to c_str -# 1038| Type = const char * +# 1038| 0: [FunctionCall]: call to c_str +# 1038| Type = [PointerType]: const char * # 1038| ValueCategory = prvalue -# 1038| -1: (reference dereference) -# 1038| Type = const String +# 1038| -1: [ReferenceDereferenceExpr]: (reference dereference) +# 1038| Type = [SpecifiedType]: const String # 1038| ValueCategory = lvalue -#-----| expr: s -#-----| Type = const String & +#-----| expr: [FieldAccess]: s +#-----| Type = [LValueReferenceType]: const String & #-----| ValueCategory = prvalue(load) -#-----| -1: this -#-----| Type = const lambda [] type at line 1038, col. 30 * +#-----| -1: [ThisExpr]: this +#-----| Type = [PointerType]: const lambda [] type at line 1038, col. 30 * #-----| ValueCategory = prvalue(load) -# 1038| 1: 0 -# 1038| Type = int -# 1038| Value = 0 +# 1038| 1: [Zero]: 0 +# 1038| Type = [IntType]: int +# 1038| Value = [Zero]: 0 # 1038| ValueCategory = prvalue -# 1040| (void Lambda(int, String const&))::(lambda [] type at line 1040, col. 30)& (void Lambda(int, String const&))::(lambda [] type at line 1040, col. 30)::operator=((void Lambda(int, String const&))::(lambda [] type at line 1040, col. 30) const&) +# 1040| [CopyAssignmentOperator]: (void Lambda(int, String const&))::(lambda [] type at line 1040, col. 30)& (void Lambda(int, String const&))::(lambda [] type at line 1040, col. 30)::operator=((void Lambda(int, String const&))::(lambda [] type at line 1040, col. 30) const&) # 1040| params: -#-----| 0: p#0 -#-----| Type = const lambda [] type at line 1040, col. 30 & -# 1040| void (void Lambda(int, String const&))::(lambda [] type at line 1040, col. 30)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1040, col. 30) const&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const lambda [] type at line 1040, col. 30 & +# 1040| [CopyConstructor]: void (void Lambda(int, String const&))::(lambda [] type at line 1040, col. 30)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1040, col. 30) const&) # 1040| params: -#-----| 0: p#0 -#-----| Type = const lambda [] type at line 1040, col. 30 & -# 1040| void (void Lambda(int, String const&))::(lambda [] type at line 1040, col. 30)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1040, col. 30)&&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const lambda [] type at line 1040, col. 30 & +# 1040| [MoveConstructor]: void (void Lambda(int, String const&))::(lambda [] type at line 1040, col. 30)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1040, col. 30)&&) # 1040| params: -#-----| 0: p#0 -#-----| Type = lambda [] type at line 1040, col. 30 && +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: lambda [] type at line 1040, col. 30 && # 1040| initializations: -# 1040| 0: constructor init of field s -# 1040| Type = const String +# 1040| 0: [ConstructorFieldInit]: constructor init of field s +# 1040| Type = [SpecifiedType]: const String # 1040| ValueCategory = prvalue -# 1040| 0: call to String -# 1040| Type = void +# 1040| 0: [ConstructorCall]: call to String +# 1040| Type = [VoidType]: void # 1040| ValueCategory = prvalue -# 1040| body: { ... } -# 1040| 0: return ... -# 1040| void (void Lambda(int, String const&))::(lambda [] type at line 1040, col. 30)::(constructor)() +# 1040| body: [Block]: { ... } +# 1040| 0: [ReturnStmt]: return ... +# 1040| [Constructor]: void (void Lambda(int, String const&))::(lambda [] type at line 1040, col. 30)::(constructor)() # 1040| params: -# 1040| void (void Lambda(int, String const&))::(lambda [] type at line 1040, col. 30)::~() +# 1040| [Destructor]: void (void Lambda(int, String const&))::(lambda [] type at line 1040, col. 30)::~() # 1040| params: -#-----| body: { ... } -#-----| 0: return ... +#-----| body: [Block]: { ... } +#-----| 0: [ReturnStmt]: return ... # 1040| destructions: -# 1040| 0: destructor field destruction of s -# 1040| Type = const String +# 1040| 0: [DestructorFieldDestruction]: destructor field destruction of s +# 1040| Type = [SpecifiedType]: const String # 1040| ValueCategory = prvalue -# 1040| 0: call to ~String -# 1040| Type = void +# 1040| 0: [DestructorCall]: call to ~String +# 1040| Type = [VoidType]: void # 1040| ValueCategory = prvalue -# 1040| -1: s -# 1040| Type = const String +# 1040| -1: [FieldAccess]: s +# 1040| Type = [SpecifiedType]: const String # 1040| ValueCategory = lvalue -# 1040| char (void Lambda(int, String const&))::(lambda [] type at line 1040, col. 30)::operator()(float) const +# 1040| [ConstMemberFunction]: char (void Lambda(int, String const&))::(lambda [] type at line 1040, col. 30)::operator()(float) const # 1040| params: -# 1040| 0: f -# 1040| Type = float -# 1040| body: { ... } -# 1040| 0: return ... -# 1040| 0: access to array -# 1040| Type = char +# 1040| 0: [Parameter]: f +# 1040| Type = [FloatType]: float +# 1040| body: [Block]: { ... } +# 1040| 0: [ReturnStmt]: return ... +# 1040| 0: [ArrayExpr]: access to array +# 1040| Type = [PlainCharType]: char # 1040| ValueCategory = prvalue(load) -# 1040| 0: call to c_str -# 1040| Type = const char * +# 1040| 0: [FunctionCall]: call to c_str +# 1040| Type = [PointerType]: const char * # 1040| ValueCategory = prvalue -#-----| -1: s -#-----| Type = const String +#-----| -1: [FieldAccess]: s +#-----| Type = [SpecifiedType]: const String #-----| ValueCategory = lvalue -#-----| -1: this -#-----| Type = const lambda [] type at line 1040, col. 30 * +#-----| -1: [ThisExpr]: this +#-----| Type = [PointerType]: const lambda [] type at line 1040, col. 30 * #-----| ValueCategory = prvalue(load) -# 1040| 1: 0 -# 1040| Type = int -# 1040| Value = 0 +# 1040| 1: [Zero]: 0 +# 1040| Type = [IntType]: int +# 1040| Value = [Zero]: 0 # 1040| ValueCategory = prvalue -# 1042| (void Lambda(int, String const&))::(lambda [] type at line 1042, col. 32)& (void Lambda(int, String const&))::(lambda [] type at line 1042, col. 32)::operator=((void Lambda(int, String const&))::(lambda [] type at line 1042, col. 32) const&) +# 1042| [CopyAssignmentOperator]: (void Lambda(int, String const&))::(lambda [] type at line 1042, col. 32)& (void Lambda(int, String const&))::(lambda [] type at line 1042, col. 32)::operator=((void Lambda(int, String const&))::(lambda [] type at line 1042, col. 32) const&) # 1042| params: -#-----| 0: p#0 -#-----| Type = const lambda [] type at line 1042, col. 32 & -# 1042| void (void Lambda(int, String const&))::(lambda [] type at line 1042, col. 32)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1042, col. 32) const&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const lambda [] type at line 1042, col. 32 & +# 1042| [CopyConstructor]: void (void Lambda(int, String const&))::(lambda [] type at line 1042, col. 32)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1042, col. 32) const&) # 1042| params: -#-----| 0: p#0 -#-----| Type = const lambda [] type at line 1042, col. 32 & -# 1042| void (void Lambda(int, String const&))::(lambda [] type at line 1042, col. 32)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1042, col. 32)&&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const lambda [] type at line 1042, col. 32 & +# 1042| [MoveConstructor]: void (void Lambda(int, String const&))::(lambda [] type at line 1042, col. 32)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1042, col. 32)&&) # 1042| params: -#-----| 0: p#0 -#-----| Type = lambda [] type at line 1042, col. 32 && +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: lambda [] type at line 1042, col. 32 && # 1042| initializations: -# 1042| 0: constructor init of field s -# 1042| Type = const String & +# 1042| 0: [ConstructorFieldInit]: constructor init of field s +# 1042| Type = [LValueReferenceType]: const String & # 1042| ValueCategory = prvalue -# 1042| 0: Unknown literal -# 1042| Type = const String & +# 1042| 0: [Literal]: Unknown literal +# 1042| Type = [LValueReferenceType]: const String & # 1042| ValueCategory = prvalue -# 1042| 1: constructor init of field x -# 1042| Type = int +# 1042| 1: [ConstructorFieldInit]: constructor init of field x +# 1042| Type = [IntType]: int # 1042| ValueCategory = prvalue -# 1042| 0: Unknown literal -# 1042| Type = int +# 1042| 0: [Literal]: Unknown literal +# 1042| Type = [IntType]: int # 1042| ValueCategory = prvalue -# 1042| body: { ... } -# 1042| 0: return ... -# 1042| void (void Lambda(int, String const&))::(lambda [] type at line 1042, col. 32)::(constructor)() +# 1042| body: [Block]: { ... } +# 1042| 0: [ReturnStmt]: return ... +# 1042| [Constructor]: void (void Lambda(int, String const&))::(lambda [] type at line 1042, col. 32)::(constructor)() # 1042| params: -# 1042| char (void Lambda(int, String const&))::(lambda [] type at line 1042, col. 32)::operator()(float) const +# 1042| [ConstMemberFunction]: char (void Lambda(int, String const&))::(lambda [] type at line 1042, col. 32)::operator()(float) const # 1042| params: -# 1042| 0: f -# 1042| Type = float -# 1042| body: { ... } -# 1042| 0: return ... -# 1042| 0: access to array -# 1042| Type = char +# 1042| 0: [Parameter]: f +# 1042| Type = [FloatType]: float +# 1042| body: [Block]: { ... } +# 1042| 0: [ReturnStmt]: return ... +# 1042| 0: [ArrayExpr]: access to array +# 1042| Type = [PlainCharType]: char # 1042| ValueCategory = prvalue(load) -# 1042| 0: call to c_str -# 1042| Type = const char * +# 1042| 0: [FunctionCall]: call to c_str +# 1042| Type = [PointerType]: const char * # 1042| ValueCategory = prvalue -# 1042| -1: (reference dereference) -# 1042| Type = const String +# 1042| -1: [ReferenceDereferenceExpr]: (reference dereference) +# 1042| Type = [SpecifiedType]: const String # 1042| ValueCategory = lvalue -#-----| expr: s -#-----| Type = const String & +#-----| expr: [FieldAccess]: s +#-----| Type = [LValueReferenceType]: const String & #-----| ValueCategory = prvalue(load) -#-----| -1: this -#-----| Type = const lambda [] type at line 1042, col. 32 * +#-----| -1: [ThisExpr]: this +#-----| Type = [PointerType]: const lambda [] type at line 1042, col. 32 * #-----| ValueCategory = prvalue(load) -#-----| 1: x -#-----| Type = int +#-----| 1: [FieldAccess]: x +#-----| Type = [IntType]: int #-----| ValueCategory = prvalue(load) -#-----| -1: this -#-----| Type = const lambda [] type at line 1042, col. 32 * +#-----| -1: [ThisExpr]: this +#-----| Type = [PointerType]: const lambda [] type at line 1042, col. 32 * #-----| ValueCategory = prvalue(load) -# 1045| (void Lambda(int, String const&))::(lambda [] type at line 1045, col. 23)& (void Lambda(int, String const&))::(lambda [] type at line 1045, col. 23)::operator=((void Lambda(int, String const&))::(lambda [] type at line 1045, col. 23) const&) +# 1045| [CopyAssignmentOperator]: (void Lambda(int, String const&))::(lambda [] type at line 1045, col. 23)& (void Lambda(int, String const&))::(lambda [] type at line 1045, col. 23)::operator=((void Lambda(int, String const&))::(lambda [] type at line 1045, col. 23) const&) # 1045| params: -#-----| 0: p#0 -#-----| Type = const lambda [] type at line 1045, col. 23 & -# 1045| void (void Lambda(int, String const&))::(lambda [] type at line 1045, col. 23)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1045, col. 23) const&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const lambda [] type at line 1045, col. 23 & +# 1045| [CopyConstructor]: void (void Lambda(int, String const&))::(lambda [] type at line 1045, col. 23)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1045, col. 23) const&) # 1045| params: -#-----| 0: p#0 -#-----| Type = const lambda [] type at line 1045, col. 23 & -# 1045| void (void Lambda(int, String const&))::(lambda [] type at line 1045, col. 23)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1045, col. 23)&&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const lambda [] type at line 1045, col. 23 & +# 1045| [MoveConstructor]: void (void Lambda(int, String const&))::(lambda [] type at line 1045, col. 23)::(constructor)((void Lambda(int, String const&))::(lambda [] type at line 1045, col. 23)&&) # 1045| params: -#-----| 0: p#0 -#-----| Type = lambda [] type at line 1045, col. 23 && +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: lambda [] type at line 1045, col. 23 && # 1045| initializations: -# 1045| 0: constructor init of field s -# 1045| Type = const String & +# 1045| 0: [ConstructorFieldInit]: constructor init of field s +# 1045| Type = [LValueReferenceType]: const String & # 1045| ValueCategory = prvalue -# 1045| 0: Unknown literal -# 1045| Type = const String & +# 1045| 0: [Literal]: Unknown literal +# 1045| Type = [LValueReferenceType]: const String & # 1045| ValueCategory = prvalue -# 1045| 1: constructor init of field x -# 1045| Type = int +# 1045| 1: [ConstructorFieldInit]: constructor init of field x +# 1045| Type = [IntType]: int # 1045| ValueCategory = prvalue -# 1045| 0: Unknown literal -# 1045| Type = int +# 1045| 0: [Literal]: Unknown literal +# 1045| Type = [IntType]: int # 1045| ValueCategory = prvalue -# 1045| 2: constructor init of field i -# 1045| Type = int +# 1045| 2: [ConstructorFieldInit]: constructor init of field i +# 1045| Type = [IntType]: int # 1045| ValueCategory = prvalue -# 1045| 0: Unknown literal -# 1045| Type = int +# 1045| 0: [Literal]: Unknown literal +# 1045| Type = [IntType]: int # 1045| ValueCategory = prvalue -# 1045| 3: constructor init of field j -# 1045| Type = int & +# 1045| 3: [ConstructorFieldInit]: constructor init of field j +# 1045| Type = [LValueReferenceType]: int & # 1045| ValueCategory = prvalue -# 1045| 0: Unknown literal -# 1045| Type = int & +# 1045| 0: [Literal]: Unknown literal +# 1045| Type = [LValueReferenceType]: int & # 1045| ValueCategory = prvalue -# 1045| body: { ... } -# 1045| 0: return ... -# 1045| void (void Lambda(int, String const&))::(lambda [] type at line 1045, col. 23)::(constructor)() +# 1045| body: [Block]: { ... } +# 1045| 0: [ReturnStmt]: return ... +# 1045| [Constructor]: void (void Lambda(int, String const&))::(lambda [] type at line 1045, col. 23)::(constructor)() # 1045| params: -# 1045| char (void Lambda(int, String const&))::(lambda [] type at line 1045, col. 23)::operator()(float) const +# 1045| [ConstMemberFunction]: char (void Lambda(int, String const&))::(lambda [] type at line 1045, col. 23)::operator()(float) const # 1045| params: -# 1045| 0: f -# 1045| Type = float -# 1045| body: { ... } -# 1045| 0: return ... -# 1045| 0: access to array -# 1045| Type = char +# 1045| 0: [Parameter]: f +# 1045| Type = [FloatType]: float +# 1045| body: [Block]: { ... } +# 1045| 0: [ReturnStmt]: return ... +# 1045| 0: [ArrayExpr]: access to array +# 1045| Type = [PlainCharType]: char # 1045| ValueCategory = prvalue(load) -# 1045| 0: call to c_str -# 1045| Type = const char * +# 1045| 0: [FunctionCall]: call to c_str +# 1045| Type = [PointerType]: const char * # 1045| ValueCategory = prvalue -# 1045| -1: (reference dereference) -# 1045| Type = const String +# 1045| -1: [ReferenceDereferenceExpr]: (reference dereference) +# 1045| Type = [SpecifiedType]: const String # 1045| ValueCategory = lvalue -#-----| expr: s -#-----| Type = const String & +#-----| expr: [FieldAccess]: s +#-----| Type = [LValueReferenceType]: const String & #-----| ValueCategory = prvalue(load) -#-----| -1: this -#-----| Type = const lambda [] type at line 1045, col. 23 * +#-----| -1: [ThisExpr]: this +#-----| Type = [PointerType]: const lambda [] type at line 1045, col. 23 * #-----| ValueCategory = prvalue(load) -# 1045| 1: ... - ... -# 1045| Type = int +# 1045| 1: [SubExpr]: ... - ... +# 1045| Type = [IntType]: int # 1045| ValueCategory = prvalue -# 1045| 0: ... + ... -# 1045| Type = int +# 1045| 0: [AddExpr]: ... + ... +# 1045| Type = [IntType]: int # 1045| ValueCategory = prvalue -#-----| 0: x -#-----| Type = int +#-----| 0: [FieldAccess]: x +#-----| Type = [IntType]: int #-----| ValueCategory = prvalue(load) -#-----| -1: this -#-----| Type = const lambda [] type at line 1045, col. 23 * +#-----| -1: [ThisExpr]: this +#-----| Type = [PointerType]: const lambda [] type at line 1045, col. 23 * #-----| ValueCategory = prvalue(load) -# 1045| 1: i -# 1045| Type = int +# 1045| 1: [FieldAccess]: i +# 1045| Type = [IntType]: int # 1045| ValueCategory = prvalue(load) -#-----| -1: this -#-----| Type = const lambda [] type at line 1045, col. 23 * +#-----| -1: [ThisExpr]: this +#-----| Type = [PointerType]: const lambda [] type at line 1045, col. 23 * #-----| ValueCategory = prvalue(load) -# 1045| 1: (reference dereference) -# 1045| Type = int +# 1045| 1: [ReferenceDereferenceExpr]: (reference dereference) +# 1045| Type = [IntType]: int # 1045| ValueCategory = prvalue(load) -# 1045| expr: j -# 1045| Type = int & +# 1045| expr: [FieldAccess]: j +# 1045| Type = [LValueReferenceType]: int & # 1045| ValueCategory = prvalue(load) -#-----| -1: this -#-----| Type = const lambda [] type at line 1045, col. 23 * +#-----| -1: [ThisExpr]: this +#-----| Type = [PointerType]: const lambda [] type at line 1045, col. 23 * #-----| ValueCategory = prvalue(load) -# 1050| vector& vector::operator=(vector const&) +# 1050| [CopyAssignmentOperator]: vector& vector::operator=(vector const&) # 1050| params: -#-----| 0: p#0 -#-----| Type = const vector & -# 1050| vector& vector::operator=(vector&&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const vector & +# 1050| [MoveAssignmentOperator]: vector& vector::operator=(vector&&) # 1050| params: -#-----| 0: p#0 -#-----| Type = vector && -# 1051| vector::iterator& vector::iterator::operator=(vector::iterator const public&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: vector && +# 1051| [CopyAssignmentOperator]: vector::iterator& vector::iterator::operator=(vector::iterator const public&) # 1051| params: -#-----| 0: p#0 -#-----| Type = const iterator & -# 1051| vector::iterator& vector::iterator::operator=(vector::iterator&&) +#-----| 0: [Parameter]: p#0 +#-----| Type = [LValueReferenceType]: const iterator & +# 1051| [MoveAssignmentOperator]: vector::iterator& vector::iterator::operator=(vector::iterator&&) # 1051| params: -#-----| 0: p#0 -#-----| Type = iterator && -# 1053| vector::iterator& vector::iterator::operator++() +#-----| 0: [Parameter]: p#0 +#-----| Type = [RValueReferenceType]: iterator && +# 1053| [MemberFunction]: vector::iterator& vector::iterator::operator++() # 1053| params: -# 1053| vector::iterator& vector::iterator::operator++() +# 1053| [MemberFunction]: vector::iterator& vector::iterator::operator++() # 1053| params: -# 1054| T& vector::iterator::operator*() const +# 1054| [ConstMemberFunction]: T& vector::iterator::operator*() const # 1054| params: -# 1054| int& vector::iterator::operator*() const +# 1054| [ConstMemberFunction]: int& vector::iterator::operator*() const # 1054| params: -# 1056| bool vector::iterator::operator!=(vector::iterator) const +# 1056| [ConstMemberFunction]: bool vector::iterator::operator!=(vector::iterator) const # 1056| params: -# 1056| 0: right -# 1056| Type = iterator -# 1056| bool vector::iterator::operator!=(vector::iterator) const +# 1056| 0: [Parameter]: right +# 1056| Type = [Class]: iterator +# 1056| [ConstMemberFunction]: bool vector::iterator::operator!=(vector::iterator) const # 1056| params: -# 1056| 0: right -# 1056| Type = iterator -# 1059| vector::iterator vector::begin() const +# 1056| 0: [Parameter]: right +# 1056| Type = [Struct]: iterator +# 1059| [ConstMemberFunction]: vector::iterator vector::begin() const # 1059| params: -# 1059| vector::iterator vector::begin() const +# 1059| [ConstMemberFunction]: vector::iterator vector::begin() const # 1059| params: -# 1060| vector::iterator vector::end() const +# 1060| [ConstMemberFunction]: vector::iterator vector::end() const # 1060| params: -# 1060| vector::iterator vector::end() const +# 1060| [ConstMemberFunction]: vector::iterator vector::end() const # 1060| params: -# 1064| bool operator==(iterator, iterator) +# 1064| [TemplateFunction]: bool operator==(iterator, iterator) # 1064| params: -# 1064| 0: left -# 1064| Type = iterator -# 1064| 1: right -# 1064| Type = iterator -# 1066| bool operator!=(iterator, iterator) +# 1064| 0: [Parameter]: left +# 1064| Type = [TemplateParameter]: iterator +# 1064| 1: [Parameter]: right +# 1064| Type = [TemplateParameter]: iterator +# 1066| [TemplateFunction]: bool operator!=(iterator, iterator) # 1066| params: -# 1066| 0: left -# 1066| Type = iterator -# 1066| 1: right -# 1066| Type = iterator -# 1068| void RangeBasedFor(vector const&) +# 1066| 0: [Parameter]: left +# 1066| Type = [TemplateParameter]: iterator +# 1066| 1: [Parameter]: right +# 1066| Type = [TemplateParameter]: iterator +# 1068| [TopLevelFunction]: void RangeBasedFor(vector const&) # 1068| params: -# 1068| 0: v -# 1068| Type = const vector & -# 1068| body: { ... } -# 1069| 0: for(...:...) ... -# 1069| 0: declaration -# 1069| 1: declaration -# 1069| 2: call to operator!= -# 1069| Type = bool +# 1068| 0: [Parameter]: v +# 1068| Type = [LValueReferenceType]: const vector & +# 1068| body: [Block]: { ... } +# 1069| 0: [RangeBasedForStmt]: for(...:...) ... +# 1069| 0: [DeclStmt]: declaration +# 1069| 1: [DeclStmt]: declaration +# 1069| 2: [FunctionCall]: call to operator!= +# 1069| Type = [BoolType]: bool # 1069| ValueCategory = prvalue -#-----| -1: (const iterator)... +#-----| -1: [GlvalueConversion]: (const iterator)... #-----| Conversion = glvalue conversion -#-----| Type = const iterator +#-----| Type = [SpecifiedType]: const iterator #-----| ValueCategory = lvalue -#-----| expr: (__begin) -#-----| Type = iterator +#-----| expr: [VariableAccess]: (__begin) +#-----| Type = [Struct]: iterator #-----| ValueCategory = lvalue -#-----| 0: (__end) -#-----| Type = iterator +#-----| 0: [VariableAccess]: (__end) +#-----| Type = [Struct]: iterator #-----| ValueCategory = prvalue(load) -# 1069| 3: (reference dereference) -# 1069| Type = iterator +# 1069| 3: [ReferenceDereferenceExpr]: (reference dereference) +# 1069| Type = [Struct]: iterator # 1069| ValueCategory = lvalue -# 1069| expr: call to operator++ -# 1069| Type = iterator & +# 1069| expr: [FunctionCall]: call to operator++ +# 1069| Type = [LValueReferenceType]: iterator & # 1069| ValueCategory = prvalue -#-----| -1: (__begin) -#-----| Type = iterator +#-----| -1: [VariableAccess]: (__begin) +#-----| Type = [Struct]: iterator #-----| ValueCategory = lvalue -# 1069| 4: declaration -# 1069| 5: { ... } -# 1070| 0: if (...) ... -# 1070| 0: ... > ... -# 1070| Type = bool +# 1069| 4: [DeclStmt]: declaration +# 1069| 5: [Block]: { ... } +# 1070| 0: [IfStmt]: if (...) ... +# 1070| 0: [GTExpr]: ... > ... +# 1070| Type = [BoolType]: bool # 1070| ValueCategory = prvalue -# 1070| 0: e -# 1070| Type = int +# 1070| 0: [VariableAccess]: e +# 1070| Type = [IntType]: int # 1070| ValueCategory = prvalue(load) -# 1070| 1: 0 -# 1070| Type = int -# 1070| Value = 0 +# 1070| 1: [Zero]: 0 +# 1070| Type = [IntType]: int +# 1070| Value = [Zero]: 0 # 1070| ValueCategory = prvalue -# 1070| 1: { ... } -# 1071| 0: continue; -# 1069| 1: label ...: -# 1075| 1: for(...:...) ... -# 1075| 0: declaration -# 1075| 1: declaration -# 1075| 2: call to operator!= -# 1075| Type = bool +# 1070| 1: [Block]: { ... } +# 1071| 0: [ContinueStmt]: continue; +# 1069| 1: [LabelStmt]: label ...: +# 1075| 1: [RangeBasedForStmt]: for(...:...) ... +# 1075| 0: [DeclStmt]: declaration +# 1075| 1: [DeclStmt]: declaration +# 1075| 2: [FunctionCall]: call to operator!= +# 1075| Type = [BoolType]: bool # 1075| ValueCategory = prvalue -#-----| -1: (const iterator)... +#-----| -1: [GlvalueConversion]: (const iterator)... #-----| Conversion = glvalue conversion -#-----| Type = const iterator +#-----| Type = [SpecifiedType]: const iterator #-----| ValueCategory = lvalue -#-----| expr: (__begin) -#-----| Type = iterator +#-----| expr: [VariableAccess]: (__begin) +#-----| Type = [Struct]: iterator #-----| ValueCategory = lvalue -#-----| 0: (__end) -#-----| Type = iterator +#-----| 0: [VariableAccess]: (__end) +#-----| Type = [Struct]: iterator #-----| ValueCategory = prvalue(load) -# 1075| 3: (reference dereference) -# 1075| Type = iterator +# 1075| 3: [ReferenceDereferenceExpr]: (reference dereference) +# 1075| Type = [Struct]: iterator # 1075| ValueCategory = lvalue -# 1075| expr: call to operator++ -# 1075| Type = iterator & +# 1075| expr: [FunctionCall]: call to operator++ +# 1075| Type = [LValueReferenceType]: iterator & # 1075| ValueCategory = prvalue -#-----| -1: (__begin) -#-----| Type = iterator +#-----| -1: [VariableAccess]: (__begin) +#-----| Type = [Struct]: iterator #-----| ValueCategory = lvalue -# 1075| 4: declaration -# 1075| 5: { ... } -# 1076| 0: if (...) ... -# 1076| 0: ... < ... -# 1076| Type = bool +# 1075| 4: [DeclStmt]: declaration +# 1075| 5: [Block]: { ... } +# 1076| 0: [IfStmt]: if (...) ... +# 1076| 0: [LTExpr]: ... < ... +# 1076| Type = [BoolType]: bool # 1076| ValueCategory = prvalue -# 1076| 0: (reference dereference) -# 1076| Type = int +# 1076| 0: [ReferenceDereferenceExpr]: (reference dereference) +# 1076| Type = [IntType]: int # 1076| ValueCategory = prvalue(load) -# 1076| expr: e -# 1076| Type = const int & +# 1076| expr: [VariableAccess]: e +# 1076| Type = [LValueReferenceType]: const int & # 1076| ValueCategory = prvalue(load) -# 1076| 1: 5 -# 1076| Type = int -# 1076| Value = 5 +# 1076| 1: [Literal]: 5 +# 1076| Type = [IntType]: int +# 1076| Value = [Literal]: 5 # 1076| ValueCategory = prvalue -# 1076| 1: { ... } -# 1077| 0: break; -# 1079| 2: label ...: -# 1080| 3: return ... -# 1099| int AsmStmt(int) +# 1076| 1: [Block]: { ... } +# 1077| 0: [BreakStmt]: break; +# 1079| 2: [LabelStmt]: label ...: +# 1080| 3: [ReturnStmt]: return ... +# 1099| [TopLevelFunction]: int AsmStmt(int) # 1099| params: -# 1099| 0: x -# 1099| Type = int -# 1099| body: { ... } -# 1100| 0: asm statement -# 1101| 1: return ... -# 1101| 0: x -# 1101| Type = int +# 1099| 0: [Parameter]: x +# 1099| Type = [IntType]: int +# 1099| body: [Block]: { ... } +# 1100| 0: [AsmStmt]: asm statement +# 1101| 1: [ReturnStmt]: return ... +# 1101| 0: [VariableAccess]: x +# 1101| Type = [IntType]: int # 1101| ValueCategory = prvalue(load) -# 1104| void AsmStmtWithOutputs(unsigned int&, unsigned int&, unsigned int&, unsigned int&) +# 1104| [TopLevelFunction]: void AsmStmtWithOutputs(unsigned int&, unsigned int&, unsigned int&, unsigned int&) # 1104| params: -# 1104| 0: a -# 1104| Type = unsigned int & -# 1104| 1: b -# 1104| Type = unsigned int & -# 1104| 2: c -# 1104| Type = unsigned int & -# 1104| 3: d -# 1104| Type = unsigned int & -# 1105| body: { ... } -# 1106| 0: asm statement -# 1109| 0: (reference dereference) -# 1109| Type = unsigned int +# 1104| 0: [Parameter]: a +# 1104| Type = [LValueReferenceType]: unsigned int & +# 1104| 1: [Parameter]: b +# 1104| Type = [LValueReferenceType]: unsigned int & +# 1104| 2: [Parameter]: c +# 1104| Type = [LValueReferenceType]: unsigned int & +# 1104| 3: [Parameter]: d +# 1104| Type = [LValueReferenceType]: unsigned int & +# 1105| body: [Block]: { ... } +# 1106| 0: [AsmStmt]: asm statement +# 1109| 0: [ReferenceDereferenceExpr]: (reference dereference) +# 1109| Type = [IntType]: unsigned int # 1109| ValueCategory = lvalue -# 1109| expr: a -# 1109| Type = unsigned int & +# 1109| expr: [VariableAccess]: a +# 1109| Type = [LValueReferenceType]: unsigned int & # 1109| ValueCategory = prvalue(load) -# 1109| 1: (reference dereference) -# 1109| Type = unsigned int +# 1109| 1: [ReferenceDereferenceExpr]: (reference dereference) +# 1109| Type = [IntType]: unsigned int # 1109| ValueCategory = lvalue -# 1109| expr: b -# 1109| Type = unsigned int & +# 1109| expr: [VariableAccess]: b +# 1109| Type = [LValueReferenceType]: unsigned int & # 1109| ValueCategory = prvalue(load) -# 1109| 2: (reference dereference) -# 1109| Type = unsigned int +# 1109| 2: [ReferenceDereferenceExpr]: (reference dereference) +# 1109| Type = [IntType]: unsigned int # 1109| ValueCategory = lvalue -# 1109| expr: c -# 1109| Type = unsigned int & +# 1109| expr: [VariableAccess]: c +# 1109| Type = [LValueReferenceType]: unsigned int & # 1109| ValueCategory = prvalue(load) -# 1109| 3: (reference dereference) -# 1109| Type = unsigned int +# 1109| 3: [ReferenceDereferenceExpr]: (reference dereference) +# 1109| Type = [IntType]: unsigned int # 1109| ValueCategory = lvalue -# 1109| expr: d -# 1109| Type = unsigned int & +# 1109| expr: [VariableAccess]: d +# 1109| Type = [LValueReferenceType]: unsigned int & # 1109| ValueCategory = prvalue(load) -# 1111| 1: return ... +# 1111| 1: [ReturnStmt]: return ...