Skip to content

Instantly share code, notes, and snippets.

Created December 14, 2017 21:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/0a48808969600a84a683c03df57b5a29 to your computer and use it in GitHub Desktop.
Save anonymous/0a48808969600a84a683c03df57b5a29 to your computer and use it in GitHub Desktop.
Targeting 'x86_64-unknown-linux-gnu' (CPU 'x86-64' with features '+cx16')
Building type: real
Building type: uint
Building type: ulong
CodeGenerator::emit(object)
* resetting 2028 Dsymbols
* *** Initializing D runtime declarations ***
* * building runtime module
* * Building type: extern (C) void(void*, void*)
* * * DtoFunctionType(extern (C) void(void*, void*))
* * * * Building type: void
* * * * Building type: void*
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: void (i8*, i8*)
* * Building type: extern (C) void(void*, void*, uint)
* * * DtoFunctionType(extern (C) void(void*, void*, uint))
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: void (i8*, i8*, i32)
* * Building type: extern (C) void(char[], uint)
* * * DtoFunctionType(extern (C) void(char[], uint))
* * * * Building type: char[]
* * * * * Building type: char
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: void ({ i64, i8* }, i32)
* * Building type: extern (C) void(char[], char[], uint)
* * * DtoFunctionType(extern (C) void(char[], char[], uint))
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: void ({ i64, i8* }, { i64, i8* }, i32)
* * Building type: extern (C) void(immutable ModuleInfo*, uint)
* * * DtoFunctionType(extern (C) void(immutable ModuleInfo*, uint))
* * * * Building type: ModuleInfo*
* * * * * Building type: ModuleInfo
* * * * * * Building struct type object.ModuleInfo @ object.d(32)
* * * * * * * Field priority for _flags: 1
* * * * * * * Field priority for _index: 1
* * * * * * * final struct type: %object.ModuleInfo = type { i32, i32 }
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: void (%object.ModuleInfo*, i32)
* * Building type: extern (C) void*(ulong)
* * * DtoFunctionType(extern (C) void*(ulong))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i8* (i64)
* * Building type: extern (C) void*(TypeInfo)
* * * DtoFunctionType(extern (C) void*(TypeInfo))
* * * * Building type: object.TypeInfo
* * * * * Building class type object.TypeInfo @ object.d(261)
* * * * * * Instance size: 16
* * * * * * class type: %object.TypeInfo = type { [19 x i8*]*, i8* }
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i8* (%object.TypeInfo*)
* * Building type: extern (C) void[](const TypeInfo, ulong)
* * * DtoFunctionType(extern (C) void[](const TypeInfo, ulong))
* * * * Building type: void[]
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.TypeInfo*, i64)
* * Building type: extern (C) void[](const TypeInfo, ulong[])
* * * DtoFunctionType(extern (C) void[](const TypeInfo, ulong[]))
* * * * Building type: ulong[]
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.TypeInfo*, { i64, i64* })
* * Building type: extern (C) void[](const TypeInfo, ulong, void[]*)
* * * DtoFunctionType(extern (C) void[](const TypeInfo, ulong, void[]*))
* * * * Building type: void[]*
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.TypeInfo*, i64, { i64, i8* }*)
* * Building type: extern (C) void[](const TypeInfo, ref void[], ulong)
* * * DtoFunctionType(extern (C) void[](const TypeInfo, ref void[], ulong))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.TypeInfo*, { i64, i8* }*, i64)
* * Building type: extern (C) void[](const TypeInfo, ref void[], void[])
* * * DtoFunctionType(extern (C) void[](const TypeInfo, ref void[], void[]))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.TypeInfo*, { i64, i8* }*, { i64, i8* })
* * Building type: extern (C) void[](ref void[], dchar)
* * * DtoFunctionType(extern (C) void[](ref void[], dchar))
* * * * Building type: dchar
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } ({ i64, i8* }*, i32)
* * Building type: extern (C) void[](const TypeInfo, void[], void[])
* * * DtoFunctionType(extern (C) void[](const TypeInfo, void[], void[]))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.TypeInfo*, { i64, i8* }, { i64, i8* })
* * Building type: extern (C) void[](const TypeInfo, void[][])
* * * DtoFunctionType(extern (C) void[](const TypeInfo, void[][]))
* * * * Building type: void[][]
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.TypeInfo*, { i64, { i64, i8* }* })
* * Building type: extern (C) Object(const TypeInfo_Class)
* * * DtoFunctionType(extern (C) Object(const TypeInfo_Class))
* * * * Building type: object.Object
* * * * * Building class type object.Object @ object.d(186)
* * * * * * Instance size: 16
* * * * * * class type: %object.Object = type { [5 x i8*]*, i8* }
* * * * Building type: object.TypeInfo_Class
* * * * * Building class type object.TypeInfo_Class @ object.d(373)
* * * * * * Instance size: 152
* * * * * * Field priority for m_init: 1
* * * * * * Field priority for name: 1
* * * * * * Field priority for vtbl: 1
* * * * * * Field priority for interfaces: 1
* * * * * * Field priority for base: 1
* * * * * * Field priority for destructor: 1
* * * * * * Field priority for classInvariant: 1
* * * * * * Field priority for m_flags: 1
* * * * * * Field priority for deallocator: 1
* * * * * * Field priority for m_offTi: 1
* * * * * * Field priority for defaultConstructor: 1
* * * * * * Field priority for m_RTInfo: 1
* * * * * * Building type: byte[]
* * * * * * * Building type: byte
* * * * * * Building type: string
* * * * * * Building type: void*[]
* * * * * * Building type: Interface[]
* * * * * * * Building type: Interface
* * * * * * * * Building struct type object.Interface @ object.d(248)
* * * * * * * * * Field priority for classinfo: 1
* * * * * * * * * Field priority for vtbl: 1
* * * * * * * * * Field priority for offset: 1
* * * * * * * * * final struct type: %object.Interface = type { %object.TypeInfo_Class*, { i64, i8** }, i64 }
* * * * * * Building type: void function(Object)
* * * * * * * Building type: void(Object)
* * * * * * * * DtoFunctionType(void(Object))
* * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * Final function type: void (%object.Object*)
* * * * * * Building type: ClassFlags
* * * * * * Building type: ClassFlags
* * * * * * Building type: OffsetTypeInfo[]
* * * * * * * Building type: OffsetTypeInfo
* * * * * * * * Building struct type object.OffsetTypeInfo @ object.d(255)
* * * * * * * * * Field priority for offset: 1
* * * * * * * * * Field priority for ti: 1
* * * * * * * * * final struct type: %object.OffsetTypeInfo = type { i64, %object.TypeInfo* }
* * * * * * Building type: void function(Object)
* * * * * * * Building type: void(Object)
* * * * * * * * DtoFunctionType(void(Object))
* * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * Final function type: void (%object.Object*)
* * * * * * Building type: immutable(void)*
* * * * * * class type: %object.TypeInfo_Class = type { [20 x i8*]*, i8*, { i64, i8* }, { i64, i8* }, { i64, i8** }, { i64, %object.Interface* }, %object.TypeInfo_Class*, i8*, void (%object.Object*)*, i32, [4 x i8], i8*, { i64, %object.OffsetTypeInfo* }, void (%object.Object*)*, i8* }
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: %object.Object* (%object.TypeInfo_Class*)
* * Building type: extern (C) Object(const TypeInfo_Class)
* * * DtoFunctionType(extern (C) Object(const TypeInfo_Class))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: %object.Object* (%object.TypeInfo_Class*)
* * Building type: extern (C) void*(TypeInfo)
* * * DtoFunctionType(extern (C) void*(TypeInfo))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i8* (%object.TypeInfo*)
* * Building type: extern (C) void(void[]*, const TypeInfo_Struct)
* * * DtoFunctionType(extern (C) void(void[]*, const TypeInfo_Struct))
* * * * Building type: object.TypeInfo_Struct
* * * * * Building class type object.TypeInfo_Struct @ object.d(588)
* * * * * * Instance size: 136
* * * * * * Field priority for name: 1
* * * * * * Field priority for m_init: 1
* * * * * * Field priority for xtoHash: 1
* * * * * * Field priority for xopEquals: 1
* * * * * * Field priority for xopCmp: 1
* * * * * * Field priority for xtoString: 1
* * * * * * Field priority for m_flags: 1
* * * * * * Field priority for xdtor: 1
* * * * * * Field priority for xdtorti: 1
* * * * * * Field priority for xpostblit: 1
* * * * * * Field priority for m_align: 1
* * * * * * Field priority for m_arg1: 1
* * * * * * Field priority for m_arg2: 1
* * * * * * Field priority for m_RTInfo: 1
* * * * * * Building type: void function(void*)
* * * * * * * Building type: void(void*)
* * * * * * * * DtoFunctionType(void(void*))
* * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * Final function type: void (i8*)
* * * * * * Building type: void function(void*, const(TypeInfo_Struct) ti)
* * * * * * * Building type: void(void*, const(TypeInfo_Struct) ti)
* * * * * * * * DtoFunctionType(void(void*, const(TypeInfo_Struct) ti))
* * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * Final function type: void (%object.TypeInfo_Struct*, i8*)
* * * * * * Building type: ulong function(const(void*)) pure nothrow @safe
* * * * * * * Building type: pure nothrow @safe ulong(const(void*))
* * * * * * * * DtoFunctionType(pure nothrow @safe ulong(const(void*)))
* * * * * * * * * Building type: const(void)*
* * * * * * * * * x86-64 ABI: Transforming return type
* * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * Final function type: i64 (i8*)
* * * * * * Building type: bool function(const(void*), const(void*)) pure nothrow @safe
* * * * * * * Building type: pure nothrow @safe bool(const(void*), const(void*))
* * * * * * * * DtoFunctionType(pure nothrow @safe bool(const(void*), const(void*)))
* * * * * * * * * Building type: bool
* * * * * * * * * x86-64 ABI: Transforming return type
* * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * Final function type: i1 (i8*, i8*)
* * * * * * Building type: int function(const(void*), const(void*)) pure nothrow @safe
* * * * * * * Building type: pure nothrow @safe int(const(void*), const(void*))
* * * * * * * * DtoFunctionType(pure nothrow @safe int(const(void*), const(void*)))
* * * * * * * * * Building type: int
* * * * * * * * * x86-64 ABI: Transforming return type
* * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * Final function type: i32 (i8*, i8*)
* * * * * * Building type: string function(const(void*)) pure nothrow @safe
* * * * * * * Building type: pure nothrow @safe string(const(void*))
* * * * * * * * DtoFunctionType(pure nothrow @safe string(const(void*)))
* * * * * * * * * x86-64 ABI: Transforming return type
* * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * Final function type: { i64, i8* } (i8*)
* * * * * * Building type: StructFlags
* * * * * * Building type: StructFlags
* * * * * * Building type: void function(void*)
* * * * * * * Building type: void(void*)
* * * * * * * * DtoFunctionType(void(void*))
* * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * Final function type: void (i8*)
* * * * * * class type: %object.TypeInfo_Struct = type { [19 x i8*]*, i8*, { i64, i8* }, { i64, i8* }, i64 (i8*)*, i1 (i8*, i8*)*, i32 (i8*, i8*)*, { i64, i8* } (i8*)*, i32, [4 x i8], void (i8*)*, void (i8*)*, i32, [4 x i8], %object.TypeInfo*, %object.TypeInfo*, i8* }
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: void ({ i64, i8* }*, %object.TypeInfo_Struct*)
* * Building type: extern (C) void(void**)
* * * DtoFunctionType(extern (C) void(void**))
* * * * Building type: void**
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: void (i8**)
* * Building type: extern (C) void(void*)
* * * DtoFunctionType(extern (C) void(void*))
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: void (i8*)
* * Building type: extern (C) void(Object*)
* * * DtoFunctionType(extern (C) void(Object*))
* * * * Building type: Object*
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: void (%object.Object**)
* * Building type: extern (C) void(void**, TypeInfo_Struct)
* * * DtoFunctionType(extern (C) void(void**, TypeInfo_Struct))
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: void (i8**, %object.TypeInfo_Struct*)
* * Building type: extern (C) void(void*, ulong, void*, ulong)
* * * DtoFunctionType(extern (C) void(void*, ulong, void*, ulong))
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: void (i8*, i64, i8*, i64)
* * Building type: extern (C) ulong(char[], int delegate(void*))
* * * DtoFunctionType(extern (C) ulong(char[], int delegate(void*)))
* * * * Building type: int delegate(void*)
* * * * * DtoFunctionType(int(void*))
* * * * * * x86-64 ABI: Transforming return type
* * * * * * x86-64 ABI: Transforming argument types
* * * * * * Final function type: i32 (i8*, i8*)
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 ({ i64, i8* }, { i8*, i32 (i8*, i8*)* })
* * Building type: extern (C) ulong(wchar[], int delegate(void*))
* * * DtoFunctionType(extern (C) ulong(wchar[], int delegate(void*)))
* * * * Building type: wchar[]
* * * * * Building type: wchar
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 ({ i64, i16* }, { i8*, i32 (i8*, i8*)* })
* * Building type: extern (C) ulong(dchar[], int delegate(void*))
* * * DtoFunctionType(extern (C) ulong(dchar[], int delegate(void*)))
* * * * Building type: dchar[]
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 ({ i64, i32* }, { i8*, i32 (i8*, i8*)* })
* * Building type: extern (C) ulong(char[], int delegate(void*, void*))
* * * DtoFunctionType(extern (C) ulong(char[], int delegate(void*, void*)))
* * * * Building type: int delegate(void*, void*)
* * * * * DtoFunctionType(int(void*, void*))
* * * * * * x86-64 ABI: Transforming return type
* * * * * * x86-64 ABI: Transforming argument types
* * * * * * Final function type: i32 (i8*, i8*, i8*)
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 ({ i64, i8* }, { i8*, i32 (i8*, i8*, i8*)* })
* * Building type: extern (C) ulong(wchar[], int delegate(void*, void*))
* * * DtoFunctionType(extern (C) ulong(wchar[], int delegate(void*, void*)))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 ({ i64, i16* }, { i8*, i32 (i8*, i8*, i8*)* })
* * Building type: extern (C) ulong(dchar[], int delegate(void*, void*))
* * * DtoFunctionType(extern (C) ulong(dchar[], int delegate(void*, void*)))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 ({ i64, i32* }, { i8*, i32 (i8*, i8*, i8*)* })
* * Building type: extern (C) ulong(ulong, ulong, ulong)
* * * DtoFunctionType(extern (C) ulong(ulong, ulong, ulong))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (i64, i64, i64)
* * Building type: extern (C) void[](TypeInfo, void[], void[], void*)
* * * DtoFunctionType(extern (C) void[](TypeInfo, void[], void[], void*))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.TypeInfo*, { i64, i8* }, { i64, i8* }, i8*)
* * Building type: extern (C) void[](TypeInfo, void[], void[])
* * * DtoFunctionType(extern (C) void[](TypeInfo, void[], void[]))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.TypeInfo*, { i64, i8* }, { i64, i8* })
* * Building type: extern (C) void*(void*, void*, int, TypeInfo)
* * * DtoFunctionType(extern (C) void*(void*, void*, int, TypeInfo))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i8* (i8*, i8*, i32, %object.TypeInfo*)
* * Building type: extern (C) void*(void*, TypeInfo_Class)
* * * DtoFunctionType(extern (C) void*(void*, TypeInfo_Class))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i8* (i8*, %object.TypeInfo_Class*)
* * Building type: extern (C) void*(Object, TypeInfo_Class)
* * * DtoFunctionType(extern (C) void*(Object, TypeInfo_Class))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i8* (%object.Object*, %object.TypeInfo_Class*)
* * Building type: extern (C) char[](char[])
* * * DtoFunctionType(extern (C) char[](char[]))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } ({ i64, i8* })
* * Building type: extern (C) wchar[](wchar[])
* * * DtoFunctionType(extern (C) wchar[](wchar[]))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i16* } ({ i64, i16* })
* * Building type: extern (C) wchar[](void[], ulong)
* * * DtoFunctionType(extern (C) wchar[](void[], ulong))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i16* } ({ i64, i8* }, i64)
* * Building type: extern (C) int(void[], void[], TypeInfo)
* * * DtoFunctionType(extern (C) int(void[], void[], TypeInfo))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i32 ({ i64, i8* }, { i64, i8* }, %object.TypeInfo*)
* * Building type: extern (C) int(void[], void[])
* * * DtoFunctionType(extern (C) int(void[], void[]))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i32 ({ i64, i8* }, { i64, i8* })
* * Building type: extern (C) void[](void[], TypeInfo)
* * * DtoFunctionType(extern (C) void[](void[], TypeInfo))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } ({ i64, i8* }, %object.TypeInfo*)
* * Building type: extern (C) ulong(in void*)
* * * DtoFunctionType(extern (C) ulong(in void*))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (i8*)
* * Building type: extern (C) void*(void**, const TypeInfo_AssociativeArray, in ulong, in void*)
* * * DtoFunctionType(extern (C) void*(void**, const TypeInfo_AssociativeArray, in ulong, in void*))
* * * * Building type: object.TypeInfo_AssociativeArray
* * * * * Building class type object.TypeInfo_AssociativeArray @ object.d(475)
* * * * * * Instance size: 32
* * * * * * Field priority for value: 1
* * * * * * Field priority for key: 1
* * * * * * class type: %object.TypeInfo_AssociativeArray = type { [19 x i8*]*, i8*, %object.TypeInfo*, %object.TypeInfo* }
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i8* (i8**, %object.TypeInfo_AssociativeArray*, i64, i8*)
* * Building type: extern (C) void*(out void*, in TypeInfo, in void*)
* * * DtoFunctionType(extern (C) void*(out void*, in TypeInfo, in void*))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i8* (i8**, %object.TypeInfo*, i8*)
* * Building type: extern (C) bool(void*, in TypeInfo, in void*)
* * * DtoFunctionType(extern (C) bool(void*, in TypeInfo, in void*))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i1 (i8*, %object.TypeInfo*, i8*)
* * Building type: extern (C) void[](out void*, in ulong, in ulong, const TypeInfo)
* * * DtoFunctionType(extern (C) void[](out void*, in ulong, in ulong, const TypeInfo))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (i8**, i64, i64, %object.TypeInfo*)
* * Building type: extern (C) void*(void**, in TypeInfo)
* * * DtoFunctionType(extern (C) void*(void**, in TypeInfo))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i8* (i8**, %object.TypeInfo*)
* * Building type: extern (C) void[](out void*, in ulong, const TypeInfo)
* * * DtoFunctionType(extern (C) void[](out void*, in ulong, const TypeInfo))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (i8**, i64, %object.TypeInfo*)
* * Building type: extern (C) int(void*, in ulong, int delegate(void*))
* * * DtoFunctionType(extern (C) int(void*, in ulong, int delegate(void*)))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i32 (i8*, i64, { i8*, i32 (i8*, i8*)* })
* * Building type: extern (C) int(void*, in ulong, int delegate(void*, void*))
* * * DtoFunctionType(extern (C) int(void*, in ulong, int delegate(void*, void*)))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i32 (i8*, i64, { i8*, i32 (i8*, i8*, i8*)* })
* * Building type: extern (C) int(in TypeInfo, in void*, in void*)
* * * DtoFunctionType(extern (C) int(in TypeInfo, in void*, in void*))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i32 (%object.TypeInfo*, i8*, i8*)
* * Building type: extern (C) void*(const TypeInfo_AssociativeArray, void[], void[])
* * * DtoFunctionType(extern (C) void*(const TypeInfo_AssociativeArray, void[], void[]))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i8* (%object.TypeInfo_AssociativeArray*, { i64, i8* }, { i64, i8* })
* * Building type: extern (C) void()
* * * DtoFunctionType(extern (C) void())
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: void ()
* * Building type: extern (C) void(Throwable)
* * * DtoFunctionType(extern (C) void(Throwable))
* * * * Building type: object.Throwable
* * * * * Building class type object.Throwable @ object.d(1369)
* * * * * * Instance size: 72
* * * * * * Field priority for msg: 1
* * * * * * Field priority for file: 1
* * * * * * Field priority for line: 1
* * * * * * Field priority for info: 1
* * * * * * Field priority for next: 1
* * * * * * Building type: object.Throwable.TraceInfo
* * * * * * * Building class type object.Throwable.TraceInfo @ object.d(1411)
* * * * * * * * Instance size: 8
* * * * * * * * class type: %object.Throwable.TraceInfo = type { [4 x i8*]* }
* * * * * * class type: %object.Throwable = type { [6 x i8*]*, i8*, { i64, i8* }, { i64, i8* }, i64, %object.Throwable.TraceInfo*, %object.Throwable* }
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: void (%object.Throwable*)
* * Building type: extern (C) int(char[][], char[])
* * * DtoFunctionType(extern (C) int(char[][], char[]))
* * * * Building type: char[][]
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i32 ({ i64, { i64, i8* }* }, { i64, i8* })
* * Building type: extern (C) int(wchar[][], wchar[])
* * * DtoFunctionType(extern (C) int(wchar[][], wchar[]))
* * * * Building type: wchar[][]
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i32 ({ i64, { i64, i16* }* }, { i64, i16* })
* * Building type: extern (C) int(dchar[][], dchar[])
* * * DtoFunctionType(extern (C) int(dchar[][], dchar[]))
* * * * Building type: dchar[][]
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i32 ({ i64, { i64, i32* }* }, { i64, i32* })
* * Building type: extern (C) int(int, int, ulong, void*, void*)
* * * DtoFunctionType(extern (C) int(int, int, ulong, void*, void*))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i32 (i32, i32, i64, i8*, i8*)
* * Building type: extern (C) void(void*)
* * * DtoFunctionType(extern (C) void(void*))
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: void (i8*)
* * Building type: extern (C) Throwable(void*)
* * * DtoFunctionType(extern (C) Throwable(void*))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: %object.Throwable* (i8*)
* * Building type: extern (C) void*(void*)
* * * DtoFunctionType(extern (C) void*(void*))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i8* (i8*)
* * Building type: void(Object)
* * * DtoFunctionType(void(Object))
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: void (%object.Object*)
* * Building type: extern (C) void(void*)
* * * DtoFunctionType(extern (C) void(void*))
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: void (i8*)
* * Building type: extern (C) int(void*, void*, ulong)
* * * DtoFunctionType(extern (C) int(void*, void*, ulong))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i32 (i8*, i8*, i64)
* Ignoring Dsymbol::codegen for object.object
* Ignoring Dsymbol::codegen for object.utils
* Ignoring Dsymbol::codegen for object.string
* Ignoring Dsymbol::codegen for object.size_t
* Ignoring Dsymbol::codegen for object.hash_t
* Ignoring EnumDeclaration::codegen: 'object.__anonymous'
* StructDeclaration::codegen: 'object.ModuleInfo'
* * Resolving struct type: ModuleInfo (object.d(32))
* * VarDeclaration::codegen(): 'object.ModuleInfo._flags'
* * * DtoResolveVariable(object.ModuleInfo._flags)
* * VarDeclaration::codegen(): 'object.ModuleInfo._index'
* * * DtoResolveVariable(object.ModuleInfo._index)
* * DtoDefineFunction(object.ModuleInfo.this): object.d(36)
* * * isMember = this is: ModuleInfo
* * * DtoFunctionType(ref ModuleInfo())
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: %object.ModuleInfo* (%object.ModuleInfo*)
* * * DtoResolveFunction(object.ModuleInfo.this): object.d(36)
* * * * DtoDeclareFunction(object.ModuleInfo.this): object.d(36)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: ModuleInfo
* * * * * DtoFunctionType(ref ModuleInfo())
* * * * * func =
declare %object.ModuleInfo* @_D6object10ModuleInfo6__ctorMFNcZSQBgQBc(%object.ModuleInfo*)
* * DtoDefineFunction(object.ModuleInfo.__postblit): object.d(37)
* * * isMember = this is: ModuleInfo
* * * DtoFunctionType(const void())
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: void (%object.ModuleInfo*)
* * * DtoResolveFunction(object.ModuleInfo.__postblit): object.d(37)
* * * * DtoDeclareFunction(object.ModuleInfo.__postblit): object.d(37)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: ModuleInfo
* * * * * DtoFunctionType(const void())
* * * * * func =
declare void @_D6object10ModuleInfo10__postblitMxFZv(%object.ModuleInfo*)
* * DtoDefineFunction(object.ModuleInfo.addrOf): object.d(40)
* * * isMember = this is: ModuleInfo
* * * DtoFunctionType(const pure nothrow void*(int flag))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i8* (%object.ModuleInfo*, i32)
* * * DtoResolveFunction(object.ModuleInfo.addrOf): object.d(40)
* * * * DtoDeclareFunction(object.ModuleInfo.addrOf): object.d(40)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: ModuleInfo
* * * * * DtoFunctionType(const pure nothrow void*(int flag))
* * * * * func =
declare i8* @_D6object10ModuleInfo6addrOfMxFNaNbiZPv(%object.ModuleInfo*, i32)
* * * Doing function body for: addrOf
* * * DtoCreateNestedContext for object.ModuleInfo.addrOf
* * * * DtoCreateNestedContextType for object.ModuleInfo.addrOf
* * * CompoundStatement::toIR():
* * * * ScopeStatement::toIR(): object.d(41)
* * * * * CompoundStatement::toIR(): object.d(41)
* * * * * * ExpStatement::toIR(): object.d(42)
* * * * * * * AssertExp::toElem: assert(flag >= 8 && flag <= 4096)
* * * * * * * * LogicalExp::toElem: flag >= 8 && flag <= 4096 @ bool
* * * * * * * * * CmpExp::toElem: flag >= 8 @ bool
* * * * * * * * * * VarExp::toElem: flag @ int
* * * * * * * * * * * DtoSymbolAddress ('flag' of type 'int')
* * * * * * * * * * * * function param
* * * * * * * * * * * * type: int
* * * * * * * * * * IntegerExp::toElem: 8 @ int
* * * * * * * * * * * IntegerExp::toConstElem: 8 @ int
* * * * * * * * * * * * value = i32 8
* * * * * * * * * * type 1: %5 = load i32, i32* %3
* * * * * * * * * * type 2: i32 8
* * * * * * * * * CmpExp::toElem: flag <= 4096 @ bool
* * * * * * * * * * VarExp::toElem: flag @ int
* * * * * * * * * * * DtoSymbolAddress ('flag' of type 'int')
* * * * * * * * * * * * function param
* * * * * * * * * * * * type: int
* * * * * * * * * * IntegerExp::toElem: 4096 @ int
* * * * * * * * * * * IntegerExp::toConstElem: 4096 @ int
* * * * * * * * * * * * value = i32 4096
* * * * * * * * * * type 1: %8 = load i32, i32* %3
* * * * * * * * * * type 2: i32 4096
* * * * * * ExpStatement::toIR(): object.d(43)
* * * * * * * AssertExp::toElem: assert(!(flag & flag - 1) && !(flag & ~(flag - 1) << 1))
* * * * * * * * LogicalExp::toElem: !(flag & flag - 1) && !(flag & ~(flag - 1) << 1) @ bool
* * * * * * * * * NotExp::toElem: !(flag & flag - 1) @ bool
* * * * * * * * * * AndExp::toElem: flag & flag - 1 @ int
* * * * * * * * * * * VarExp::toElem: flag @ int
* * * * * * * * * * * * DtoSymbolAddress ('flag' of type 'int')
* * * * * * * * * * * * * function param
* * * * * * * * * * * * * type: int
* * * * * * * * * * * MinExp::toElem: flag - 1 @ int
* * * * * * * * * * * * VarExp::toElem: flag @ int
* * * * * * * * * * * * * DtoSymbolAddress ('flag' of type 'int')
* * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * type: int
* * * * * * * * * * * * IntegerExp::toElem: 1 @ int
* * * * * * * * * * * * * IntegerExp::toConstElem: 1 @ int
* * * * * * * * * * * * * * value = i32 1
* * * * * * * * * * Casting from 'int' to 'bool'
* * * * * * * * * NotExp::toElem: !(flag & ~(flag - 1) << 1) @ bool
* * * * * * * * * * AndExp::toElem: flag & ~(flag - 1) << 1 @ int
* * * * * * * * * * * VarExp::toElem: flag @ int
* * * * * * * * * * * * DtoSymbolAddress ('flag' of type 'int')
* * * * * * * * * * * * * function param
* * * * * * * * * * * * * type: int
* * * * * * * * * * * ShlExp::toElem: ~(flag - 1) << 1 @ int
* * * * * * * * * * * * ComExp::toElem: ~(flag - 1) @ int
* * * * * * * * * * * * * MinExp::toElem: flag - 1 @ int
* * * * * * * * * * * * * * VarExp::toElem: flag @ int
* * * * * * * * * * * * * * * DtoSymbolAddress ('flag' of type 'int')
* * * * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * * * type: int
* * * * * * * * * * * * * * IntegerExp::toElem: 1 @ int
* * * * * * * * * * * * * * * IntegerExp::toConstElem: 1 @ int
* * * * * * * * * * * * * * * * value = i32 1
* * * * * * * * * * * * IntegerExp::toElem: 1 @ int
* * * * * * * * * * * * * IntegerExp::toConstElem: 1 @ int
* * * * * * * * * * * * * * value = i32 1
* * * * * * * * * * Casting from 'int' to 'bool'
* * * * CompoundStatement::toIR(): object.d(45)
* * * * * ExpStatement::toIR(): object.d(46)
* * * * * * DeclarationExp::toElem: (void* p = cast(void*)&this + 8L;) | T=void
* * * * * * * DtoDeclarationExp: p
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = void*)
* * * * * * * * * llvm value for decl: %4 = alloca i8*, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: p = cast(void*)&this + 8L | (void*)(void* = void*)
* * * * * * * * * * VarExp::toElem: p @ void*
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * AddExp::toElem: cast(void*)&this + 8L @ void*
* * * * * * * * * * * CastExp::toElem: cast(void*)&this @ void*
* * * * * * * * * * * * AddrExp::toElem: &this @ const(ModuleInfo)*
* * * * * * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo)
* * * * * * * * * * * * * * normal this exp
* * * * * * * * * * * * * is nothing special
* * * * * * * * * * * * * lval: %object.ModuleInfo* %0
* * * * * * * * * * * * * Building type: const(ModuleInfo)*
* * * * * * * * * * * * Casting from 'const(ModuleInfo)*' to 'void*'
* * * * * * * * * * * * * src: %object.ModuleInfo* %0
* * * * * * * * * * * * * to type: i8*
* * * * * * * * * * * Adding integer to pointer
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %4 = alloca i8*, align 8
* * * * * * * * * * * rhs: %33 = getelementptr i8, i8* %32, i64 8
* * * * * IfStatement::toIR(): object.d(48)
* * * * * * AndExp::toElem: this.flags() & 8u @ uint
* * * * * * * CallExp::toElem: this.flags() @ uint
* * * * * * * * DotVarExp::toElem: this.flags @ const pure nothrow @property uint()
* * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo)
* * * * * * * * * * normal this exp
* * * * * * * * * isMember = this is: ModuleInfo
* * * * * * * * * DtoFunctionType(const pure nothrow @property uint())
* * * * * * * * * * x86-64 ABI: Transforming return type
* * * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * * Final function type: i32 (%object.ModuleInfo*)
* * * * * * * * * DtoResolveFunction(object.ModuleInfo.flags): object.d(106)
* * * * * * * * * * DtoDeclareFunction(object.ModuleInfo.flags): object.d(106)
* * * * * * * * * * * Enter defineAsExternallyAvailable
* * * * * * * * * * * * Cross-module inlining fully disabled.
* * * * * * * * * * * isMember = this is: ModuleInfo
* * * * * * * * * * * DtoFunctionType(const pure nothrow @property uint())
* * * * * * * * * * * func =
declare i32 @_D6object10ModuleInfo5flagsMxFNaNbNdZk(%object.ModuleInfo*)
* * * * * * * * DtoCallFunction()
* * * * * * * * * Evaluating argument expressions
* * * * * * * * * Building type: const pure nothrow @property uint()
* * * * * * * * * * DtoFunctionType(const pure nothrow @property uint())
* * * * * * * * * * * x86-64 ABI: Transforming return type
* * * * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * * * Final function type: i32 ()
* * * * * * * * * doing normal arguments
* * * * * * * * * Arguments so far: (1)
* * * * * * * * * * %object.ModuleInfo* %0
* * * * * * * * * Function type: const pure nothrow @property uint()
* * * * * * * IntegerExp::toElem: 8u @ uint
* * * * * * * * IntegerExp::toConstElem: 8u @ uint
* * * * * * * * * value = i32 8
* * * * * * if conditional: %35 = and i32 %34, 8
* * * * * * Casting from 'uint' to 'bool'
* * * * * * ScopeStatement::toIR(): object.d(48)
* * * * * * * CompoundStatement::toIR(): object.d(48)
* * * * * * * * IfStatement::toIR(): object.d(49)
* * * * * * * * * EqualExp::toElem: flag == 8 @ bool
* * * * * * * * * * VarExp::toElem: flag @ int
* * * * * * * * * * * DtoSymbolAddress ('flag' of type 'int')
* * * * * * * * * * * * function param
* * * * * * * * * * * * type: int
* * * * * * * * * * IntegerExp::toElem: 8 @ int
* * * * * * * * * * * IntegerExp::toConstElem: 8 @ int
* * * * * * * * * * * * value = i32 8
* * * * * * * * * * integral or pointer or interface
* * * * * * * * * * lv: %38 = load i32, i32* %3
* * * * * * * * * * rv: i32 8
* * * * * * * * * ReturnStatement::toIR(): object.d(50)
* * * * * * * * * * VarExp::toElem: p @ void*
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*')
* * * * * * * * * * * * a normal variable
* * * * * * * * ExpStatement::toIR(): object.d(51)
* * * * * * * * * AddAssignExp::toElem: p += 8L @ void*
* * * * * * * * * * VarExp::toElem: p @ void*
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * Adding integer to pointer
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %4 = alloca i8*, align 8
* * * * * * * * * * * rhs: %46 = getelementptr i8, i8* %45, i64 8
* * * * * IfStatement::toIR(): object.d(53)
* * * * * * AndExp::toElem: this.flags() & 16u @ uint
* * * * * * * CallExp::toElem: this.flags() @ uint
* * * * * * * * DotVarExp::toElem: this.flags @ const pure nothrow @property uint()
* * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo)
* * * * * * * * * * normal this exp
* * * * * * * * DtoCallFunction()
* * * * * * * * * Evaluating argument expressions
* * * * * * * * * doing normal arguments
* * * * * * * * * Arguments so far: (1)
* * * * * * * * * * %object.ModuleInfo* %0
* * * * * * * * * Function type: const pure nothrow @property uint()
* * * * * * * IntegerExp::toElem: 16u @ uint
* * * * * * * * IntegerExp::toConstElem: 16u @ uint
* * * * * * * * * value = i32 16
* * * * * * if conditional: %49 = and i32 %48, 16
* * * * * * Casting from 'uint' to 'bool'
* * * * * * ScopeStatement::toIR(): object.d(53)
* * * * * * * CompoundStatement::toIR(): object.d(53)
* * * * * * * * IfStatement::toIR(): object.d(54)
* * * * * * * * * EqualExp::toElem: flag == 16 @ bool
* * * * * * * * * * VarExp::toElem: flag @ int
* * * * * * * * * * * DtoSymbolAddress ('flag' of type 'int')
* * * * * * * * * * * * function param
* * * * * * * * * * * * type: int
* * * * * * * * * * IntegerExp::toElem: 16 @ int
* * * * * * * * * * * IntegerExp::toConstElem: 16 @ int
* * * * * * * * * * * * value = i32 16
* * * * * * * * * * integral or pointer or interface
* * * * * * * * * * lv: %52 = load i32, i32* %3
* * * * * * * * * * rv: i32 16
* * * * * * * * * ReturnStatement::toIR(): object.d(55)
* * * * * * * * * * VarExp::toElem: p @ void*
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*')
* * * * * * * * * * * * a normal variable
* * * * * * * * ExpStatement::toIR(): object.d(56)
* * * * * * * * * AddAssignExp::toElem: p += 8L @ void*
* * * * * * * * * * VarExp::toElem: p @ void*
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * Adding integer to pointer
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %4 = alloca i8*, align 8
* * * * * * * * * * * rhs: %60 = getelementptr i8, i8* %59, i64 8
* * * * * IfStatement::toIR(): object.d(58)
* * * * * * AndExp::toElem: this.flags() & 32u @ uint
* * * * * * * CallExp::toElem: this.flags() @ uint
* * * * * * * * DotVarExp::toElem: this.flags @ const pure nothrow @property uint()
* * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo)
* * * * * * * * * * normal this exp
* * * * * * * * DtoCallFunction()
* * * * * * * * * Evaluating argument expressions
* * * * * * * * * doing normal arguments
* * * * * * * * * Arguments so far: (1)
* * * * * * * * * * %object.ModuleInfo* %0
* * * * * * * * * Function type: const pure nothrow @property uint()
* * * * * * * IntegerExp::toElem: 32u @ uint
* * * * * * * * IntegerExp::toConstElem: 32u @ uint
* * * * * * * * * value = i32 32
* * * * * * if conditional: %63 = and i32 %62, 32
* * * * * * Casting from 'uint' to 'bool'
* * * * * * ScopeStatement::toIR(): object.d(58)
* * * * * * * CompoundStatement::toIR(): object.d(58)
* * * * * * * * IfStatement::toIR(): object.d(59)
* * * * * * * * * EqualExp::toElem: flag == 32 @ bool
* * * * * * * * * * VarExp::toElem: flag @ int
* * * * * * * * * * * DtoSymbolAddress ('flag' of type 'int')
* * * * * * * * * * * * function param
* * * * * * * * * * * * type: int
* * * * * * * * * * IntegerExp::toElem: 32 @ int
* * * * * * * * * * * IntegerExp::toConstElem: 32 @ int
* * * * * * * * * * * * value = i32 32
* * * * * * * * * * integral or pointer or interface
* * * * * * * * * * lv: %66 = load i32, i32* %3
* * * * * * * * * * rv: i32 32
* * * * * * * * * ReturnStatement::toIR(): object.d(60)
* * * * * * * * * * VarExp::toElem: p @ void*
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*')
* * * * * * * * * * * * a normal variable
* * * * * * * * ExpStatement::toIR(): object.d(61)
* * * * * * * * * AddAssignExp::toElem: p += 8L @ void*
* * * * * * * * * * VarExp::toElem: p @ void*
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * Adding integer to pointer
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %4 = alloca i8*, align 8
* * * * * * * * * * * rhs: %74 = getelementptr i8, i8* %73, i64 8
* * * * * IfStatement::toIR(): object.d(63)
* * * * * * AndExp::toElem: this.flags() & 64u @ uint
* * * * * * * CallExp::toElem: this.flags() @ uint
* * * * * * * * DotVarExp::toElem: this.flags @ const pure nothrow @property uint()
* * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo)
* * * * * * * * * * normal this exp
* * * * * * * * DtoCallFunction()
* * * * * * * * * Evaluating argument expressions
* * * * * * * * * doing normal arguments
* * * * * * * * * Arguments so far: (1)
* * * * * * * * * * %object.ModuleInfo* %0
* * * * * * * * * Function type: const pure nothrow @property uint()
* * * * * * * IntegerExp::toElem: 64u @ uint
* * * * * * * * IntegerExp::toConstElem: 64u @ uint
* * * * * * * * * value = i32 64
* * * * * * if conditional: %77 = and i32 %76, 64
* * * * * * Casting from 'uint' to 'bool'
* * * * * * ScopeStatement::toIR(): object.d(63)
* * * * * * * CompoundStatement::toIR(): object.d(63)
* * * * * * * * IfStatement::toIR(): object.d(64)
* * * * * * * * * EqualExp::toElem: flag == 64 @ bool
* * * * * * * * * * VarExp::toElem: flag @ int
* * * * * * * * * * * DtoSymbolAddress ('flag' of type 'int')
* * * * * * * * * * * * function param
* * * * * * * * * * * * type: int
* * * * * * * * * * IntegerExp::toElem: 64 @ int
* * * * * * * * * * * IntegerExp::toConstElem: 64 @ int
* * * * * * * * * * * * value = i32 64
* * * * * * * * * * integral or pointer or interface
* * * * * * * * * * lv: %80 = load i32, i32* %3
* * * * * * * * * * rv: i32 64
* * * * * * * * * ReturnStatement::toIR(): object.d(65)
* * * * * * * * * * VarExp::toElem: p @ void*
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*')
* * * * * * * * * * * * a normal variable
* * * * * * * * ExpStatement::toIR(): object.d(66)
* * * * * * * * * AddAssignExp::toElem: p += 8L @ void*
* * * * * * * * * * VarExp::toElem: p @ void*
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * Adding integer to pointer
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %4 = alloca i8*, align 8
* * * * * * * * * * * rhs: %88 = getelementptr i8, i8* %87, i64 8
* * * * * IfStatement::toIR(): object.d(68)
* * * * * * AndExp::toElem: this.flags() & 128u @ uint
* * * * * * * CallExp::toElem: this.flags() @ uint
* * * * * * * * DotVarExp::toElem: this.flags @ const pure nothrow @property uint()
* * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo)
* * * * * * * * * * normal this exp
* * * * * * * * DtoCallFunction()
* * * * * * * * * Evaluating argument expressions
* * * * * * * * * doing normal arguments
* * * * * * * * * Arguments so far: (1)
* * * * * * * * * * %object.ModuleInfo* %0
* * * * * * * * * Function type: const pure nothrow @property uint()
* * * * * * * IntegerExp::toElem: 128u @ uint
* * * * * * * * IntegerExp::toConstElem: 128u @ uint
* * * * * * * * * value = i32 128
* * * * * * if conditional: %91 = and i32 %90, 128
* * * * * * Casting from 'uint' to 'bool'
* * * * * * ScopeStatement::toIR(): object.d(68)
* * * * * * * CompoundStatement::toIR(): object.d(68)
* * * * * * * * IfStatement::toIR(): object.d(69)
* * * * * * * * * EqualExp::toElem: flag == 128 @ bool
* * * * * * * * * * VarExp::toElem: flag @ int
* * * * * * * * * * * DtoSymbolAddress ('flag' of type 'int')
* * * * * * * * * * * * function param
* * * * * * * * * * * * type: int
* * * * * * * * * * IntegerExp::toElem: 128 @ int
* * * * * * * * * * * IntegerExp::toConstElem: 128 @ int
* * * * * * * * * * * * value = i32 128
* * * * * * * * * * integral or pointer or interface
* * * * * * * * * * lv: %94 = load i32, i32* %3
* * * * * * * * * * rv: i32 128
* * * * * * * * * ReturnStatement::toIR(): object.d(70)
* * * * * * * * * * VarExp::toElem: p @ void*
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*')
* * * * * * * * * * * * a normal variable
* * * * * * * * ExpStatement::toIR(): object.d(71)
* * * * * * * * * AddAssignExp::toElem: p += 8L @ void*
* * * * * * * * * * VarExp::toElem: p @ void*
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * Adding integer to pointer
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %4 = alloca i8*, align 8
* * * * * * * * * * * rhs: %102 = getelementptr i8, i8* %101, i64 8
* * * * * IfStatement::toIR(): object.d(73)
* * * * * * AndExp::toElem: this.flags() & 256u @ uint
* * * * * * * CallExp::toElem: this.flags() @ uint
* * * * * * * * DotVarExp::toElem: this.flags @ const pure nothrow @property uint()
* * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo)
* * * * * * * * * * normal this exp
* * * * * * * * DtoCallFunction()
* * * * * * * * * Evaluating argument expressions
* * * * * * * * * doing normal arguments
* * * * * * * * * Arguments so far: (1)
* * * * * * * * * * %object.ModuleInfo* %0
* * * * * * * * * Function type: const pure nothrow @property uint()
* * * * * * * IntegerExp::toElem: 256u @ uint
* * * * * * * * IntegerExp::toConstElem: 256u @ uint
* * * * * * * * * value = i32 256
* * * * * * if conditional: %105 = and i32 %104, 256
* * * * * * Casting from 'uint' to 'bool'
* * * * * * ScopeStatement::toIR(): object.d(73)
* * * * * * * CompoundStatement::toIR(): object.d(73)
* * * * * * * * IfStatement::toIR(): object.d(74)
* * * * * * * * * EqualExp::toElem: flag == 256 @ bool
* * * * * * * * * * VarExp::toElem: flag @ int
* * * * * * * * * * * DtoSymbolAddress ('flag' of type 'int')
* * * * * * * * * * * * function param
* * * * * * * * * * * * type: int
* * * * * * * * * * IntegerExp::toElem: 256 @ int
* * * * * * * * * * * IntegerExp::toConstElem: 256 @ int
* * * * * * * * * * * * value = i32 256
* * * * * * * * * * integral or pointer or interface
* * * * * * * * * * lv: %108 = load i32, i32* %3
* * * * * * * * * * rv: i32 256
* * * * * * * * * ReturnStatement::toIR(): object.d(75)
* * * * * * * * * * VarExp::toElem: p @ void*
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*')
* * * * * * * * * * * * a normal variable
* * * * * * * * ExpStatement::toIR(): object.d(76)
* * * * * * * * * AddAssignExp::toElem: p += 8L @ void*
* * * * * * * * * * VarExp::toElem: p @ void*
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * Adding integer to pointer
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %4 = alloca i8*, align 8
* * * * * * * * * * * rhs: %116 = getelementptr i8, i8* %115, i64 8
* * * * * IfStatement::toIR(): object.d(78)
* * * * * * AndExp::toElem: this.flags() & 512u @ uint
* * * * * * * CallExp::toElem: this.flags() @ uint
* * * * * * * * DotVarExp::toElem: this.flags @ const pure nothrow @property uint()
* * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo)
* * * * * * * * * * normal this exp
* * * * * * * * DtoCallFunction()
* * * * * * * * * Evaluating argument expressions
* * * * * * * * * doing normal arguments
* * * * * * * * * Arguments so far: (1)
* * * * * * * * * * %object.ModuleInfo* %0
* * * * * * * * * Function type: const pure nothrow @property uint()
* * * * * * * IntegerExp::toElem: 512u @ uint
* * * * * * * * IntegerExp::toConstElem: 512u @ uint
* * * * * * * * * value = i32 512
* * * * * * if conditional: %119 = and i32 %118, 512
* * * * * * Casting from 'uint' to 'bool'
* * * * * * ScopeStatement::toIR(): object.d(78)
* * * * * * * CompoundStatement::toIR(): object.d(78)
* * * * * * * * IfStatement::toIR(): object.d(79)
* * * * * * * * * EqualExp::toElem: flag == 512 @ bool
* * * * * * * * * * VarExp::toElem: flag @ int
* * * * * * * * * * * DtoSymbolAddress ('flag' of type 'int')
* * * * * * * * * * * * function param
* * * * * * * * * * * * type: int
* * * * * * * * * * IntegerExp::toElem: 512 @ int
* * * * * * * * * * * IntegerExp::toConstElem: 512 @ int
* * * * * * * * * * * * value = i32 512
* * * * * * * * * * integral or pointer or interface
* * * * * * * * * * lv: %122 = load i32, i32* %3
* * * * * * * * * * rv: i32 512
* * * * * * * * * ReturnStatement::toIR(): object.d(80)
* * * * * * * * * * VarExp::toElem: p @ void*
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*')
* * * * * * * * * * * * a normal variable
* * * * * * * * ExpStatement::toIR(): object.d(81)
* * * * * * * * * AddAssignExp::toElem: p += 8L @ void*
* * * * * * * * * * VarExp::toElem: p @ void*
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * Adding integer to pointer
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %4 = alloca i8*, align 8
* * * * * * * * * * * rhs: %130 = getelementptr i8, i8* %129, i64 8
* * * * * IfStatement::toIR(): object.d(83)
* * * * * * AndExp::toElem: this.flags() & 1024u @ uint
* * * * * * * CallExp::toElem: this.flags() @ uint
* * * * * * * * DotVarExp::toElem: this.flags @ const pure nothrow @property uint()
* * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo)
* * * * * * * * * * normal this exp
* * * * * * * * DtoCallFunction()
* * * * * * * * * Evaluating argument expressions
* * * * * * * * * doing normal arguments
* * * * * * * * * Arguments so far: (1)
* * * * * * * * * * %object.ModuleInfo* %0
* * * * * * * * * Function type: const pure nothrow @property uint()
* * * * * * * IntegerExp::toElem: 1024u @ uint
* * * * * * * * IntegerExp::toConstElem: 1024u @ uint
* * * * * * * * * value = i32 1024
* * * * * * if conditional: %133 = and i32 %132, 1024
* * * * * * Casting from 'uint' to 'bool'
* * * * * * ScopeStatement::toIR(): object.d(83)
* * * * * * * CompoundStatement::toIR(): object.d(83)
* * * * * * * * IfStatement::toIR(): object.d(84)
* * * * * * * * * EqualExp::toElem: flag == 1024 @ bool
* * * * * * * * * * VarExp::toElem: flag @ int
* * * * * * * * * * * DtoSymbolAddress ('flag' of type 'int')
* * * * * * * * * * * * function param
* * * * * * * * * * * * type: int
* * * * * * * * * * IntegerExp::toElem: 1024 @ int
* * * * * * * * * * * IntegerExp::toConstElem: 1024 @ int
* * * * * * * * * * * * value = i32 1024
* * * * * * * * * * integral or pointer or interface
* * * * * * * * * * lv: %136 = load i32, i32* %3
* * * * * * * * * * rv: i32 1024
* * * * * * * * * ReturnStatement::toIR(): object.d(85)
* * * * * * * * * * VarExp::toElem: p @ void*
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*')
* * * * * * * * * * * * a normal variable
* * * * * * * * ExpStatement::toIR(): object.d(86)
* * * * * * * * * AddAssignExp::toElem: p += cast(long)(8LU + *cast(ulong*)p * 8LU) * 1L @ void*
* * * * * * * * * * VarExp::toElem: p @ void*
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * Adding integer to pointer
* * * * * * * * * * CastExp::toElem: cast(long)(8LU + *cast(ulong*)p * 8LU) @ long
* * * * * * * * * * * AddExp::toElem: 8LU + *cast(ulong*)p * 8LU @ ulong
* * * * * * * * * * * * IntegerExp::toElem: 8LU @ ulong
* * * * * * * * * * * * * IntegerExp::toConstElem: 8LU @ ulong
* * * * * * * * * * * * * * value = i64 8
* * * * * * * * * * * * MulExp::toElem: *cast(ulong*)p * 8LU @ ulong
* * * * * * * * * * * * * PtrExp::toElem: *cast(ulong*)p @ ulong
* * * * * * * * * * * * * * CastExp::toElem: cast(ulong*)p @ ulong*
* * * * * * * * * * * * * * * VarExp::toElem: p @ void*
* * * * * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*')
* * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * * Casting from 'void*' to 'ulong*'
* * * * * * * * * * * * * * * * Building type: ulong*
* * * * * * * * * * * * * * * * src: %143 = load i8*, i8** %4
* * * * * * * * * * * * * * * * to type: i64*
* * * * * * * * * * * * * IntegerExp::toElem: 8LU @ ulong
* * * * * * * * * * * * * * IntegerExp::toConstElem: 8LU @ ulong
* * * * * * * * * * * * * * * value = i64 8
* * * * * * * * * * * Casting from 'ulong' to 'long'
* * * * * * * * * * * * Building type: long
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %4 = alloca i8*, align 8
* * * * * * * * * * * rhs: %149 = getelementptr i8, i8* %148, i64 %147
* * * * * IfStatement::toIR(): object.d(88)
* * * * * * AndExp::toElem: this.flags() & 2048u @ uint
* * * * * * * CallExp::toElem: this.flags() @ uint
* * * * * * * * DotVarExp::toElem: this.flags @ const pure nothrow @property uint()
* * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo)
* * * * * * * * * * normal this exp
* * * * * * * * DtoCallFunction()
* * * * * * * * * Evaluating argument expressions
* * * * * * * * * doing normal arguments
* * * * * * * * * Arguments so far: (1)
* * * * * * * * * * %object.ModuleInfo* %0
* * * * * * * * * Function type: const pure nothrow @property uint()
* * * * * * * IntegerExp::toElem: 2048u @ uint
* * * * * * * * IntegerExp::toConstElem: 2048u @ uint
* * * * * * * * * value = i32 2048
* * * * * * if conditional: %152 = and i32 %151, 2048
* * * * * * Casting from 'uint' to 'bool'
* * * * * * ScopeStatement::toIR(): object.d(88)
* * * * * * * CompoundStatement::toIR(): object.d(88)
* * * * * * * * IfStatement::toIR(): object.d(89)
* * * * * * * * * EqualExp::toElem: flag == 2048 @ bool
* * * * * * * * * * VarExp::toElem: flag @ int
* * * * * * * * * * * DtoSymbolAddress ('flag' of type 'int')
* * * * * * * * * * * * function param
* * * * * * * * * * * * type: int
* * * * * * * * * * IntegerExp::toElem: 2048 @ int
* * * * * * * * * * * IntegerExp::toConstElem: 2048 @ int
* * * * * * * * * * * * value = i32 2048
* * * * * * * * * * integral or pointer or interface
* * * * * * * * * * lv: %155 = load i32, i32* %3
* * * * * * * * * * rv: i32 2048
* * * * * * * * * ReturnStatement::toIR(): object.d(90)
* * * * * * * * * * VarExp::toElem: p @ void*
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*')
* * * * * * * * * * * * a normal variable
* * * * * * * * ExpStatement::toIR(): object.d(91)
* * * * * * * * * AddAssignExp::toElem: p += cast(long)(8LU + *cast(ulong*)p * 8LU) * 1L @ void*
* * * * * * * * * * VarExp::toElem: p @ void*
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * Adding integer to pointer
* * * * * * * * * * CastExp::toElem: cast(long)(8LU + *cast(ulong*)p * 8LU) @ long
* * * * * * * * * * * AddExp::toElem: 8LU + *cast(ulong*)p * 8LU @ ulong
* * * * * * * * * * * * IntegerExp::toElem: 8LU @ ulong
* * * * * * * * * * * * * IntegerExp::toConstElem: 8LU @ ulong
* * * * * * * * * * * * * * value = i64 8
* * * * * * * * * * * * MulExp::toElem: *cast(ulong*)p * 8LU @ ulong
* * * * * * * * * * * * * PtrExp::toElem: *cast(ulong*)p @ ulong
* * * * * * * * * * * * * * CastExp::toElem: cast(ulong*)p @ ulong*
* * * * * * * * * * * * * * * VarExp::toElem: p @ void*
* * * * * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*')
* * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * * Casting from 'void*' to 'ulong*'
* * * * * * * * * * * * * * * * src: %162 = load i8*, i8** %4
* * * * * * * * * * * * * * * * to type: i64*
* * * * * * * * * * * * * IntegerExp::toElem: 8LU @ ulong
* * * * * * * * * * * * * * IntegerExp::toConstElem: 8LU @ ulong
* * * * * * * * * * * * * * * value = i64 8
* * * * * * * * * * * Casting from 'ulong' to 'long'
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %4 = alloca i8*, align 8
* * * * * * * * * * * rhs: %168 = getelementptr i8, i8* %167, i64 %166
* * * * * IfStatement::toIR(): object.d(93)
* * * * * * IntegerExp::toElem: true @ bool
* * * * * * * IntegerExp::toConstElem: true @ bool
* * * * * * * * value = i1 true
* * * * * * ScopeStatement::toIR(): object.d(94)
* * * * * * * CompoundStatement::toIR(): object.d(94)
* * * * * * * * IfStatement::toIR(): object.d(95)
* * * * * * * * * EqualExp::toElem: flag == 4096 @ bool
* * * * * * * * * * VarExp::toElem: flag @ int
* * * * * * * * * * * DtoSymbolAddress ('flag' of type 'int')
* * * * * * * * * * * * function param
* * * * * * * * * * * * type: int
* * * * * * * * * * IntegerExp::toElem: 4096 @ int
* * * * * * * * * * * IntegerExp::toConstElem: 4096 @ int
* * * * * * * * * * * * value = i32 4096
* * * * * * * * * * integral or pointer or interface
* * * * * * * * * * lv: %171 = load i32, i32* %3
* * * * * * * * * * rv: i32 4096
* * * * * * * * * ReturnStatement::toIR(): object.d(96)
* * * * * * * * * * VarExp::toElem: p @ void*
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*')
* * * * * * * * * * * * a normal variable
* * * * * * * * ExpStatement::toIR(): object.d(97)
* * * * * * * * * AddAssignExp::toElem: p += cast(long)strlen(cast(immutable(char*))p) * 1L @ void*
* * * * * * * * * * VarExp::toElem: p @ void*
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * Adding integer to pointer
* * * * * * * * * * CastExp::toElem: cast(long)strlen(cast(immutable(char*))p) @ long
* * * * * * * * * * * CallExp::toElem: strlen(cast(immutable(char*))p) @ ulong
* * * * * * * * * * * * VarExp::toElem: strlen @ pure nothrow @nogc @trusted ulong(const(char)* str)
* * * * * * * * * * * * * DtoSymbolAddress ('strlen' of type 'pure nothrow @nogc @trusted ulong(const(char)* str)')
* * * * * * * * * * * * * * FuncDeclaration
* * * * * * * * * * * * * * DtoFunctionType(pure nothrow @nogc @trusted ulong(const(char)* str))
* * * * * * * * * * * * * * * Building type: const(char)*
* * * * * * * * * * * * * * * x86-64 ABI: Transforming return type
* * * * * * * * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * * * * * * * Final function type: i64 (i8*)
* * * * * * * * * * * * * * DtoResolveFunction(utils.strlen): utils.d(34)
* * * * * * * * * * * * * * * DtoDeclareFunction(utils.strlen): utils.d(34)
* * * * * * * * * * * * * * * * Enter defineAsExternallyAvailable
* * * * * * * * * * * * * * * * * Cross-module inlining fully disabled.
* * * * * * * * * * * * * * * * DtoFunctionType(pure nothrow @nogc @trusted ulong(const(char)* str))
* * * * * * * * * * * * * * * * func =
declare i64 @_D5utils6strlenFNaNbNiNePxaZm(i8*)
* * * * * * * * * * * * DtoCallFunction()
* * * * * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * * * CastExp::toElem: cast(immutable(char*))p @ const(char)*
* * * * * * * * * * * * * * * * VarExp::toElem: p @ void*
* * * * * * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*')
* * * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * * * Casting from 'void*' to 'immutable(char*)'
* * * * * * * * * * * * * * * * * Building type: immutable(char)*
* * * * * * * * * * * * * * * * * src: %178 = load i8*, i8** %4
* * * * * * * * * * * * * * * * * to type: i8*
* * * * * * * * * * * * * * * * repainting from 'immutable(char*)' to 'const(char)*'
* * * * * * * * * * * * * Building type: pure nothrow @nogc @trusted ulong(const(char)* str)
* * * * * * * * * * * * * * DtoFunctionType(pure nothrow @nogc @trusted ulong(const(char)* str))
* * * * * * * * * * * * * * * x86-64 ABI: Transforming return type
* * * * * * * * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * * * * * * * Final function type: i64 (i8*)
* * * * * * * * * * * * * doing normal arguments
* * * * * * * * * * * * * Arguments so far: (0)
* * * * * * * * * * * * * Function type: pure nothrow @nogc @trusted ulong(const(char)* str)
* * * * * * * * * * * Casting from 'ulong' to 'long'
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %4 = alloca i8*, align 8
* * * * * * * * * * * rhs: %181 = getelementptr i8, i8* %180, i64 %179
* * * * * ExpStatement::toIR(): object.d(99)
* * * * * * AssertExp::toElem: assert(0)
* * * * * * * IntegerExp::toElem: 0 @ int
* * * * * * * * IntegerExp::toConstElem: 0 @ int
* * * * * * * * * value = i32 0
* * * * * * * Casting from 'int' to 'bool'
* * DtoDefineFunction(object.ModuleInfo.index): object.d(102)
* * * isMember = this is: ModuleInfo
* * * DtoFunctionType(const pure nothrow @property uint())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i32 (%object.ModuleInfo*)
* * * DtoResolveFunction(object.ModuleInfo.index): object.d(102)
* * * * DtoDeclareFunction(object.ModuleInfo.index): object.d(102)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: ModuleInfo
* * * * * DtoFunctionType(const pure nothrow @property uint())
* * * * * func =
declare i32 @_D6object10ModuleInfo5indexMxFNaNbNdZk(%object.ModuleInfo*)
* * * Doing function body for: index
* * * DtoCreateNestedContext for object.ModuleInfo.index
* * * * DtoCreateNestedContextType for object.ModuleInfo.index
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(103)
* * * * * DotVarExp::toElem: this._index @ uint
* * * * * * ThisExp::toElem: this @ const(ModuleInfo)
* * * * * * * normal this exp
* * * * * * Indexing aggregate field object.ModuleInfo._index:
* * * * * * * Value: %3 = getelementptr inbounds %object.ModuleInfo, %object.ModuleInfo* %0, i32 0, i32 1
* * DtoDefineFunction(object.ModuleInfo.flags): object.d(106)
* * * Doing function body for: flags
* * * DtoCreateNestedContext for object.ModuleInfo.flags
* * * * DtoCreateNestedContextType for object.ModuleInfo.flags
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(107)
* * * * * DotVarExp::toElem: this._flags @ uint
* * * * * * ThisExp::toElem: this @ const(ModuleInfo)
* * * * * * * normal this exp
* * * * * * Indexing aggregate field object.ModuleInfo._flags:
* * * * * * * Value: %3 = getelementptr inbounds %object.ModuleInfo, %object.ModuleInfo* %0, i32 0, i32 0
* * DtoDefineFunction(object.ModuleInfo.tlsctor): object.d(110)
* * * isMember = this is: ModuleInfo
* * * DtoFunctionType(const pure nothrow @property void function()())
* * * * Building type: void function()
* * * * * Building type: void()
* * * * * * DtoFunctionType(void())
* * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * Final function type: void ()
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: void ()* (%object.ModuleInfo*)
* * * DtoResolveFunction(object.ModuleInfo.tlsctor): object.d(110)
* * * * DtoDeclareFunction(object.ModuleInfo.tlsctor): object.d(110)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: ModuleInfo
* * * * * DtoFunctionType(const pure nothrow @property void function()())
* * * * * func =
declare void ()* @_D6object10ModuleInfo7tlsctorMxFNaNbNdZPFZv(%object.ModuleInfo*)
* * * Doing function body for: tlsctor
* * * DtoCreateNestedContext for object.ModuleInfo.tlsctor
* * * * DtoCreateNestedContextType for object.ModuleInfo.tlsctor
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(111)
* * * * * CondExp::toElem: this.flags() & 8u ? *cast(void function()*)this.addrOf(8) : null @ void function()
* * * * * * Building type: void function()*
* * * * * * AndExp::toElem: this.flags() & 8u @ uint
* * * * * * * CallExp::toElem: this.flags() @ uint
* * * * * * * * DotVarExp::toElem: this.flags @ const pure nothrow @property uint()
* * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo)
* * * * * * * * * * normal this exp
* * * * * * * * DtoCallFunction()
* * * * * * * * * Evaluating argument expressions
* * * * * * * * * doing normal arguments
* * * * * * * * * Arguments so far: (1)
* * * * * * * * * * %object.ModuleInfo* %0
* * * * * * * * * Function type: const pure nothrow @property uint()
* * * * * * * IntegerExp::toElem: 8u @ uint
* * * * * * * * IntegerExp::toConstElem: 8u @ uint
* * * * * * * * * value = i32 8
* * * * * * Casting from 'uint' to 'bool'
* * * * * * PtrExp::toElem: *cast(void function()*)this.addrOf(8) @ void function()
* * * * * * * CastExp::toElem: cast(void function()*)this.addrOf(8) @ void function()*
* * * * * * * * CallExp::toElem: this.addrOf(8) @ void*
* * * * * * * * * DotVarExp::toElem: this.addrOf @ const pure nothrow void*(int flag)
* * * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo)
* * * * * * * * * * * normal this exp
* * * * * * * * * DtoCallFunction()
* * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * DtoArgument
* * * * * * * * * * * * IntegerExp::toElem: 8 @ int
* * * * * * * * * * * * * IntegerExp::toConstElem: 8 @ int
* * * * * * * * * * * * * * value = i32 8
* * * * * * * * * * Building type: const pure nothrow void*(int flag)
* * * * * * * * * * * DtoFunctionType(const pure nothrow void*(int flag))
* * * * * * * * * * * * x86-64 ABI: Transforming return type
* * * * * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * * * * Final function type: i8* (i32)
* * * * * * * * * * doing normal arguments
* * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * %object.ModuleInfo* %0
* * * * * * * * * * Function type: const pure nothrow void*(int flag)
* * * * * * * * Casting from 'void*' to 'void function()*'
* * * * * * * * * src: %8 = call i8* @_D6object10ModuleInfo6addrOfMxFNaNbiZPv(%object.ModuleInfo* nonnull %0, i32 8) #1
* * * * * * * * * to type: void ()**
* * * * * * NullExp::toElem(type=void function()): null
* * * * * * * NullExp::toConstElem(type=void function()): null
* * DtoDefineFunction(object.ModuleInfo.tlsdtor): object.d(114)
* * * isMember = this is: ModuleInfo
* * * DtoFunctionType(const pure nothrow @property void function()())
* * * * Building type: void function()
* * * * * Building type: void()
* * * * * * DtoFunctionType(void())
* * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * Final function type: void ()
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: void ()* (%object.ModuleInfo*)
* * * DtoResolveFunction(object.ModuleInfo.tlsdtor): object.d(114)
* * * * DtoDeclareFunction(object.ModuleInfo.tlsdtor): object.d(114)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: ModuleInfo
* * * * * DtoFunctionType(const pure nothrow @property void function()())
* * * * * func =
declare void ()* @_D6object10ModuleInfo7tlsdtorMxFNaNbNdZPFZv(%object.ModuleInfo*)
* * * Doing function body for: tlsdtor
* * * DtoCreateNestedContext for object.ModuleInfo.tlsdtor
* * * * DtoCreateNestedContextType for object.ModuleInfo.tlsdtor
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(115)
* * * * * CondExp::toElem: this.flags() & 16u ? *cast(void function()*)this.addrOf(16) : null @ void function()
* * * * * * AndExp::toElem: this.flags() & 16u @ uint
* * * * * * * CallExp::toElem: this.flags() @ uint
* * * * * * * * DotVarExp::toElem: this.flags @ const pure nothrow @property uint()
* * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo)
* * * * * * * * * * normal this exp
* * * * * * * * DtoCallFunction()
* * * * * * * * * Evaluating argument expressions
* * * * * * * * * doing normal arguments
* * * * * * * * * Arguments so far: (1)
* * * * * * * * * * %object.ModuleInfo* %0
* * * * * * * * * Function type: const pure nothrow @property uint()
* * * * * * * IntegerExp::toElem: 16u @ uint
* * * * * * * * IntegerExp::toConstElem: 16u @ uint
* * * * * * * * * value = i32 16
* * * * * * Casting from 'uint' to 'bool'
* * * * * * PtrExp::toElem: *cast(void function()*)this.addrOf(16) @ void function()
* * * * * * * CastExp::toElem: cast(void function()*)this.addrOf(16) @ void function()*
* * * * * * * * CallExp::toElem: this.addrOf(16) @ void*
* * * * * * * * * DotVarExp::toElem: this.addrOf @ const pure nothrow void*(int flag)
* * * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo)
* * * * * * * * * * * normal this exp
* * * * * * * * * DtoCallFunction()
* * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * DtoArgument
* * * * * * * * * * * * IntegerExp::toElem: 16 @ int
* * * * * * * * * * * * * IntegerExp::toConstElem: 16 @ int
* * * * * * * * * * * * * * value = i32 16
* * * * * * * * * * doing normal arguments
* * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * %object.ModuleInfo* %0
* * * * * * * * * * Function type: const pure nothrow void*(int flag)
* * * * * * * * Casting from 'void*' to 'void function()*'
* * * * * * * * * src: %8 = call i8* @_D6object10ModuleInfo6addrOfMxFNaNbiZPv(%object.ModuleInfo* nonnull %0, i32 16) #1
* * * * * * * * * to type: void ()**
* * * * * * NullExp::toElem(type=void function()): null
* * * * * * * NullExp::toConstElem(type=void function()): null
* * DtoDefineFunction(object.ModuleInfo.xgetMembers): object.d(118)
* * * isMember = this is: ModuleInfo
* * * DtoFunctionType(const pure nothrow @property void*())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i8* (%object.ModuleInfo*)
* * * DtoResolveFunction(object.ModuleInfo.xgetMembers): object.d(118)
* * * * DtoDeclareFunction(object.ModuleInfo.xgetMembers): object.d(118)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: ModuleInfo
* * * * * DtoFunctionType(const pure nothrow @property void*())
* * * * * func =
declare i8* @_D6object10ModuleInfo11xgetMembersMxFNaNbNdZPv(%object.ModuleInfo*)
* * * Doing function body for: xgetMembers
* * * DtoCreateNestedContext for object.ModuleInfo.xgetMembers
* * * * DtoCreateNestedContextType for object.ModuleInfo.xgetMembers
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(119)
* * * * * CondExp::toElem: this.flags() & 128u ? *cast(void**)this.addrOf(128) : null @ void*
* * * * * * AndExp::toElem: this.flags() & 128u @ uint
* * * * * * * CallExp::toElem: this.flags() @ uint
* * * * * * * * DotVarExp::toElem: this.flags @ const pure nothrow @property uint()
* * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo)
* * * * * * * * * * normal this exp
* * * * * * * * DtoCallFunction()
* * * * * * * * * Evaluating argument expressions
* * * * * * * * * doing normal arguments
* * * * * * * * * Arguments so far: (1)
* * * * * * * * * * %object.ModuleInfo* %0
* * * * * * * * * Function type: const pure nothrow @property uint()
* * * * * * * IntegerExp::toElem: 128u @ uint
* * * * * * * * IntegerExp::toConstElem: 128u @ uint
* * * * * * * * * value = i32 128
* * * * * * Casting from 'uint' to 'bool'
* * * * * * PtrExp::toElem: *cast(void**)this.addrOf(128) @ void*
* * * * * * * CastExp::toElem: cast(void**)this.addrOf(128) @ void**
* * * * * * * * CallExp::toElem: this.addrOf(128) @ void*
* * * * * * * * * DotVarExp::toElem: this.addrOf @ const pure nothrow void*(int flag)
* * * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo)
* * * * * * * * * * * normal this exp
* * * * * * * * * DtoCallFunction()
* * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * DtoArgument
* * * * * * * * * * * * IntegerExp::toElem: 128 @ int
* * * * * * * * * * * * * IntegerExp::toConstElem: 128 @ int
* * * * * * * * * * * * * * value = i32 128
* * * * * * * * * * doing normal arguments
* * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * %object.ModuleInfo* %0
* * * * * * * * * * Function type: const pure nothrow void*(int flag)
* * * * * * * * Casting from 'void*' to 'void**'
* * * * * * * * * src: %8 = call i8* @_D6object10ModuleInfo6addrOfMxFNaNbiZPv(%object.ModuleInfo* nonnull %0, i32 128) #1
* * * * * * * * * to type: i8**
* * * * * * NullExp::toElem(type=void*): null
* * * * * * * NullExp::toConstElem(type=void*): null
* * DtoDefineFunction(object.ModuleInfo.ctor): object.d(122)
* * * isMember = this is: ModuleInfo
* * * DtoFunctionType(const pure nothrow @property void function()())
* * * * Building type: void function()
* * * * * Building type: void()
* * * * * * DtoFunctionType(void())
* * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * Final function type: void ()
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: void ()* (%object.ModuleInfo*)
* * * DtoResolveFunction(object.ModuleInfo.ctor): object.d(122)
* * * * DtoDeclareFunction(object.ModuleInfo.ctor): object.d(122)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: ModuleInfo
* * * * * DtoFunctionType(const pure nothrow @property void function()())
* * * * * func =
declare void ()* @_D6object10ModuleInfo4ctorMxFNaNbNdZPFZv(%object.ModuleInfo*)
* * * Doing function body for: ctor
* * * DtoCreateNestedContext for object.ModuleInfo.ctor
* * * * DtoCreateNestedContextType for object.ModuleInfo.ctor
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(123)
* * * * * CondExp::toElem: this.flags() & 32u ? *cast(void function()*)this.addrOf(32) : null @ void function()
* * * * * * AndExp::toElem: this.flags() & 32u @ uint
* * * * * * * CallExp::toElem: this.flags() @ uint
* * * * * * * * DotVarExp::toElem: this.flags @ const pure nothrow @property uint()
* * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo)
* * * * * * * * * * normal this exp
* * * * * * * * DtoCallFunction()
* * * * * * * * * Evaluating argument expressions
* * * * * * * * * doing normal arguments
* * * * * * * * * Arguments so far: (1)
* * * * * * * * * * %object.ModuleInfo* %0
* * * * * * * * * Function type: const pure nothrow @property uint()
* * * * * * * IntegerExp::toElem: 32u @ uint
* * * * * * * * IntegerExp::toConstElem: 32u @ uint
* * * * * * * * * value = i32 32
* * * * * * Casting from 'uint' to 'bool'
* * * * * * PtrExp::toElem: *cast(void function()*)this.addrOf(32) @ void function()
* * * * * * * CastExp::toElem: cast(void function()*)this.addrOf(32) @ void function()*
* * * * * * * * CallExp::toElem: this.addrOf(32) @ void*
* * * * * * * * * DotVarExp::toElem: this.addrOf @ const pure nothrow void*(int flag)
* * * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo)
* * * * * * * * * * * normal this exp
* * * * * * * * * DtoCallFunction()
* * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * DtoArgument
* * * * * * * * * * * * IntegerExp::toElem: 32 @ int
* * * * * * * * * * * * * IntegerExp::toConstElem: 32 @ int
* * * * * * * * * * * * * * value = i32 32
* * * * * * * * * * doing normal arguments
* * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * %object.ModuleInfo* %0
* * * * * * * * * * Function type: const pure nothrow void*(int flag)
* * * * * * * * Casting from 'void*' to 'void function()*'
* * * * * * * * * src: %8 = call i8* @_D6object10ModuleInfo6addrOfMxFNaNbiZPv(%object.ModuleInfo* nonnull %0, i32 32) #1
* * * * * * * * * to type: void ()**
* * * * * * NullExp::toElem(type=void function()): null
* * * * * * * NullExp::toConstElem(type=void function()): null
* * DtoDefineFunction(object.ModuleInfo.dtor): object.d(126)
* * * isMember = this is: ModuleInfo
* * * DtoFunctionType(const pure nothrow @property void function()())
* * * * Building type: void function()
* * * * * Building type: void()
* * * * * * DtoFunctionType(void())
* * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * Final function type: void ()
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: void ()* (%object.ModuleInfo*)
* * * DtoResolveFunction(object.ModuleInfo.dtor): object.d(126)
* * * * DtoDeclareFunction(object.ModuleInfo.dtor): object.d(126)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: ModuleInfo
* * * * * DtoFunctionType(const pure nothrow @property void function()())
* * * * * func =
declare void ()* @_D6object10ModuleInfo4dtorMxFNaNbNdZPFZv(%object.ModuleInfo*)
* * * Doing function body for: dtor
* * * DtoCreateNestedContext for object.ModuleInfo.dtor
* * * * DtoCreateNestedContextType for object.ModuleInfo.dtor
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(127)
* * * * * CondExp::toElem: this.flags() & 64u ? *cast(void function()*)this.addrOf(64) : null @ void function()
* * * * * * AndExp::toElem: this.flags() & 64u @ uint
* * * * * * * CallExp::toElem: this.flags() @ uint
* * * * * * * * DotVarExp::toElem: this.flags @ const pure nothrow @property uint()
* * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo)
* * * * * * * * * * normal this exp
* * * * * * * * DtoCallFunction()
* * * * * * * * * Evaluating argument expressions
* * * * * * * * * doing normal arguments
* * * * * * * * * Arguments so far: (1)
* * * * * * * * * * %object.ModuleInfo* %0
* * * * * * * * * Function type: const pure nothrow @property uint()
* * * * * * * IntegerExp::toElem: 64u @ uint
* * * * * * * * IntegerExp::toConstElem: 64u @ uint
* * * * * * * * * value = i32 64
* * * * * * Casting from 'uint' to 'bool'
* * * * * * PtrExp::toElem: *cast(void function()*)this.addrOf(64) @ void function()
* * * * * * * CastExp::toElem: cast(void function()*)this.addrOf(64) @ void function()*
* * * * * * * * CallExp::toElem: this.addrOf(64) @ void*
* * * * * * * * * DotVarExp::toElem: this.addrOf @ const pure nothrow void*(int flag)
* * * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo)
* * * * * * * * * * * normal this exp
* * * * * * * * * DtoCallFunction()
* * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * DtoArgument
* * * * * * * * * * * * IntegerExp::toElem: 64 @ int
* * * * * * * * * * * * * IntegerExp::toConstElem: 64 @ int
* * * * * * * * * * * * * * value = i32 64
* * * * * * * * * * doing normal arguments
* * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * %object.ModuleInfo* %0
* * * * * * * * * * Function type: const pure nothrow void*(int flag)
* * * * * * * * Casting from 'void*' to 'void function()*'
* * * * * * * * * src: %8 = call i8* @_D6object10ModuleInfo6addrOfMxFNaNbiZPv(%object.ModuleInfo* nonnull %0, i32 64) #1
* * * * * * * * * to type: void ()**
* * * * * * NullExp::toElem(type=void function()): null
* * * * * * * NullExp::toConstElem(type=void function()): null
* * DtoDefineFunction(object.ModuleInfo.ictor): object.d(130)
* * * isMember = this is: ModuleInfo
* * * DtoFunctionType(const pure nothrow @property void function()())
* * * * Building type: void function()
* * * * * Building type: void()
* * * * * * DtoFunctionType(void())
* * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * Final function type: void ()
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: void ()* (%object.ModuleInfo*)
* * * DtoResolveFunction(object.ModuleInfo.ictor): object.d(130)
* * * * DtoDeclareFunction(object.ModuleInfo.ictor): object.d(130)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: ModuleInfo
* * * * * DtoFunctionType(const pure nothrow @property void function()())
* * * * * func =
declare void ()* @_D6object10ModuleInfo5ictorMxFNaNbNdZPFZv(%object.ModuleInfo*)
* * * Doing function body for: ictor
* * * DtoCreateNestedContext for object.ModuleInfo.ictor
* * * * DtoCreateNestedContextType for object.ModuleInfo.ictor
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(131)
* * * * * CondExp::toElem: this.flags() & 256u ? *cast(void function()*)this.addrOf(256) : null @ void function()
* * * * * * AndExp::toElem: this.flags() & 256u @ uint
* * * * * * * CallExp::toElem: this.flags() @ uint
* * * * * * * * DotVarExp::toElem: this.flags @ const pure nothrow @property uint()
* * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo)
* * * * * * * * * * normal this exp
* * * * * * * * DtoCallFunction()
* * * * * * * * * Evaluating argument expressions
* * * * * * * * * doing normal arguments
* * * * * * * * * Arguments so far: (1)
* * * * * * * * * * %object.ModuleInfo* %0
* * * * * * * * * Function type: const pure nothrow @property uint()
* * * * * * * IntegerExp::toElem: 256u @ uint
* * * * * * * * IntegerExp::toConstElem: 256u @ uint
* * * * * * * * * value = i32 256
* * * * * * Casting from 'uint' to 'bool'
* * * * * * PtrExp::toElem: *cast(void function()*)this.addrOf(256) @ void function()
* * * * * * * CastExp::toElem: cast(void function()*)this.addrOf(256) @ void function()*
* * * * * * * * CallExp::toElem: this.addrOf(256) @ void*
* * * * * * * * * DotVarExp::toElem: this.addrOf @ const pure nothrow void*(int flag)
* * * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo)
* * * * * * * * * * * normal this exp
* * * * * * * * * DtoCallFunction()
* * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * DtoArgument
* * * * * * * * * * * * IntegerExp::toElem: 256 @ int
* * * * * * * * * * * * * IntegerExp::toConstElem: 256 @ int
* * * * * * * * * * * * * * value = i32 256
* * * * * * * * * * doing normal arguments
* * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * %object.ModuleInfo* %0
* * * * * * * * * * Function type: const pure nothrow void*(int flag)
* * * * * * * * Casting from 'void*' to 'void function()*'
* * * * * * * * * src: %8 = call i8* @_D6object10ModuleInfo6addrOfMxFNaNbiZPv(%object.ModuleInfo* nonnull %0, i32 256) #1
* * * * * * * * * to type: void ()**
* * * * * * NullExp::toElem(type=void function()): null
* * * * * * * NullExp::toConstElem(type=void function()): null
* * DtoDefineFunction(object.ModuleInfo.unitTest): object.d(134)
* * * isMember = this is: ModuleInfo
* * * DtoFunctionType(const pure nothrow @property void function()())
* * * * Building type: void function()
* * * * * Building type: void()
* * * * * * DtoFunctionType(void())
* * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * Final function type: void ()
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: void ()* (%object.ModuleInfo*)
* * * DtoResolveFunction(object.ModuleInfo.unitTest): object.d(134)
* * * * DtoDeclareFunction(object.ModuleInfo.unitTest): object.d(134)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: ModuleInfo
* * * * * DtoFunctionType(const pure nothrow @property void function()())
* * * * * func =
declare void ()* @_D6object10ModuleInfo8unitTestMxFNaNbNdZPFZv(%object.ModuleInfo*)
* * * Doing function body for: unitTest
* * * DtoCreateNestedContext for object.ModuleInfo.unitTest
* * * * DtoCreateNestedContextType for object.ModuleInfo.unitTest
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(135)
* * * * * CondExp::toElem: this.flags() & 512u ? *cast(void function()*)this.addrOf(512) : null @ void function()
* * * * * * AndExp::toElem: this.flags() & 512u @ uint
* * * * * * * CallExp::toElem: this.flags() @ uint
* * * * * * * * DotVarExp::toElem: this.flags @ const pure nothrow @property uint()
* * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo)
* * * * * * * * * * normal this exp
* * * * * * * * DtoCallFunction()
* * * * * * * * * Evaluating argument expressions
* * * * * * * * * doing normal arguments
* * * * * * * * * Arguments so far: (1)
* * * * * * * * * * %object.ModuleInfo* %0
* * * * * * * * * Function type: const pure nothrow @property uint()
* * * * * * * IntegerExp::toElem: 512u @ uint
* * * * * * * * IntegerExp::toConstElem: 512u @ uint
* * * * * * * * * value = i32 512
* * * * * * Casting from 'uint' to 'bool'
* * * * * * PtrExp::toElem: *cast(void function()*)this.addrOf(512) @ void function()
* * * * * * * CastExp::toElem: cast(void function()*)this.addrOf(512) @ void function()*
* * * * * * * * CallExp::toElem: this.addrOf(512) @ void*
* * * * * * * * * DotVarExp::toElem: this.addrOf @ const pure nothrow void*(int flag)
* * * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo)
* * * * * * * * * * * normal this exp
* * * * * * * * * DtoCallFunction()
* * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * DtoArgument
* * * * * * * * * * * * IntegerExp::toElem: 512 @ int
* * * * * * * * * * * * * IntegerExp::toConstElem: 512 @ int
* * * * * * * * * * * * * * value = i32 512
* * * * * * * * * * doing normal arguments
* * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * %object.ModuleInfo* %0
* * * * * * * * * * Function type: const pure nothrow void*(int flag)
* * * * * * * * Casting from 'void*' to 'void function()*'
* * * * * * * * * src: %8 = call i8* @_D6object10ModuleInfo6addrOfMxFNaNbiZPv(%object.ModuleInfo* nonnull %0, i32 512) #1
* * * * * * * * * to type: void ()**
* * * * * * NullExp::toElem(type=void function()): null
* * * * * * * NullExp::toConstElem(type=void function()): null
* * DtoDefineFunction(object.ModuleInfo.importedModules): object.d(138)
* * * isMember = this is: ModuleInfo
* * * DtoFunctionType(const pure nothrow @property immutable(ModuleInfo*)[]())
* * * * Building type: immutable(ModuleInfo*)[]
* * * * * Building type: immutable(ModuleInfo)*
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, %object.ModuleInfo** } (%object.ModuleInfo*)
* * * DtoResolveFunction(object.ModuleInfo.importedModules): object.d(138)
* * * * DtoDeclareFunction(object.ModuleInfo.importedModules): object.d(138)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: ModuleInfo
* * * * * DtoFunctionType(const pure nothrow @property immutable(ModuleInfo*)[]())
* * * * * func =
declare { i64, %object.ModuleInfo** } @_D6object10ModuleInfo15importedModulesMxFNaNbNdZAyPSQByQBu(%object.ModuleInfo*)
* * * Doing function body for: importedModules
* * * DtoCreateNestedContext for object.ModuleInfo.importedModules
* * * * DtoCreateNestedContextType for object.ModuleInfo.importedModules
* * * CompoundStatement::toIR():
* * * * CompoundStatement::toIR(): object.d(138)
* * * * * IfStatement::toIR(): object.d(139)
* * * * * * AndExp::toElem: this.flags() & 1024u @ uint
* * * * * * * CallExp::toElem: this.flags() @ uint
* * * * * * * * DotVarExp::toElem: this.flags @ const pure nothrow @property uint()
* * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo)
* * * * * * * * * * normal this exp
* * * * * * * * DtoCallFunction()
* * * * * * * * * Evaluating argument expressions
* * * * * * * * * doing normal arguments
* * * * * * * * * Arguments so far: (1)
* * * * * * * * * * %object.ModuleInfo* %0
* * * * * * * * * Function type: const pure nothrow @property uint()
* * * * * * * IntegerExp::toElem: 1024u @ uint
* * * * * * * * IntegerExp::toConstElem: 1024u @ uint
* * * * * * * * * value = i32 1024
* * * * * * if conditional: %4 = and i32 %3, 1024
* * * * * * Casting from 'uint' to 'bool'
* * * * * * ScopeStatement::toIR(): object.d(139)
* * * * * * * CompoundStatement::toIR(): object.d(139)
* * * * * * * * ExpStatement::toIR(): object.d(140)
* * * * * * * * * DeclarationExp::toElem: (ulong* p = cast(ulong*)this.addrOf(1024);) | T=void
* * * * * * * * * * DtoDeclarationExp: p
* * * * * * * * * * * VarDeclaration
* * * * * * * * * * * DtoVarDeclaration(vdtype = ulong*)
* * * * * * * * * * * * llvm value for decl: %2 = alloca i64*, align 8
* * * * * * * * * * * * expression initializer
* * * * * * * * * * * * AssignExp::toElem: p = cast(ulong*)this.addrOf(1024) | (ulong*)(ulong* = ulong*)
* * * * * * * * * * * * * VarExp::toElem: p @ ulong*
* * * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'ulong*')
* * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * CastExp::toElem: cast(ulong*)this.addrOf(1024) @ ulong*
* * * * * * * * * * * * * * CallExp::toElem: this.addrOf(1024) @ void*
* * * * * * * * * * * * * * * DotVarExp::toElem: this.addrOf @ const pure nothrow void*(int flag)
* * * * * * * * * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo)
* * * * * * * * * * * * * * * * * normal this exp
* * * * * * * * * * * * * * * DtoCallFunction()
* * * * * * * * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * * * * * * IntegerExp::toElem: 1024 @ int
* * * * * * * * * * * * * * * * * * * IntegerExp::toConstElem: 1024 @ int
* * * * * * * * * * * * * * * * * * * * value = i32 1024
* * * * * * * * * * * * * * * * doing normal arguments
* * * * * * * * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * * * * * * * %object.ModuleInfo* %0
* * * * * * * * * * * * * * * * Function type: const pure nothrow void*(int flag)
* * * * * * * * * * * * * * Casting from 'void*' to 'ulong*'
* * * * * * * * * * * * * * * src: %8 = call i8* @_D6object10ModuleInfo6addrOfMxFNaNbiZPv(%object.ModuleInfo* nonnull %0, i32 1024) #1
* * * * * * * * * * * * * * * to type: i64*
* * * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * * * * DtoAssign()
* * * * * * * * * * * * * * lhs: %2 = alloca i64*, align 8
* * * * * * * * * * * * * * rhs: %9 = bitcast i8* %8 to i64*
* * * * * * * * ReturnStatement::toIR(): object.d(141)
* * * * * * * * * SliceExp::toElem: (cast(immutable(ModuleInfo*)*)(p + 8L))[0..*p] @ immutable(ModuleInfo*)[]
* * * * * * * * * * CastExp::toElem: cast(immutable(ModuleInfo*)*)(p + 8L) @ immutable(ModuleInfo*)*
* * * * * * * * * * * AddExp::toElem: p + 8L @ ulong*
* * * * * * * * * * * * VarExp::toElem: p @ ulong*
* * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'ulong*')
* * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * Adding integer to pointer
* * * * * * * * * * * Casting from 'ulong*' to 'immutable(ModuleInfo*)*'
* * * * * * * * * * * * Building type: immutable(ModuleInfo*)*
* * * * * * * * * * * * src: %11 = getelementptr i64, i64* %10, i64 1
* * * * * * * * * * * * to type: %object.ModuleInfo**
* * * * * * * * * * IntegerExp::toElem: 0LU @ ulong
* * * * * * * * * * * IntegerExp::toConstElem: 0LU @ ulong
* * * * * * * * * * * * value = i64 0
* * * * * * * * * * PtrExp::toElem: *p @ ulong
* * * * * * * * * * * VarExp::toElem: p @ ulong*
* * * * * * * * * * * * DtoSymbolAddress ('p' of type 'ulong*')
* * * * * * * * * * * * * a normal variable
* * * * * ReturnStatement::toIR(): object.d(143)
* * * * * * NullExp::toElem(type=immutable(ModuleInfo*)[]): null
* * * * * * * NullExp::toConstElem(type=immutable(ModuleInfo*)[]): null
* * DtoDefineFunction(object.ModuleInfo.localClasses): object.d(146)
* * * isMember = this is: ModuleInfo
* * * DtoFunctionType(const pure nothrow @property TypeInfo_Class[]())
* * * * Building type: TypeInfo_Class[]
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, %object.TypeInfo_Class** } (%object.ModuleInfo*)
* * * DtoResolveFunction(object.ModuleInfo.localClasses): object.d(146)
* * * * DtoDeclareFunction(object.ModuleInfo.localClasses): object.d(146)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: ModuleInfo
* * * * * DtoFunctionType(const pure nothrow @property TypeInfo_Class[]())
* * * * * func =
declare { i64, %object.TypeInfo_Class** } @_D6object10ModuleInfo12localClassesMxFNaNbNdZAC14TypeInfo_Class(%object.ModuleInfo*)
* * * Doing function body for: localClasses
* * * DtoCreateNestedContext for object.ModuleInfo.localClasses
* * * * DtoCreateNestedContextType for object.ModuleInfo.localClasses
* * * CompoundStatement::toIR():
* * * * CompoundStatement::toIR(): object.d(146)
* * * * * IfStatement::toIR(): object.d(147)
* * * * * * AndExp::toElem: this.flags() & 2048u @ uint
* * * * * * * CallExp::toElem: this.flags() @ uint
* * * * * * * * DotVarExp::toElem: this.flags @ const pure nothrow @property uint()
* * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo)
* * * * * * * * * * normal this exp
* * * * * * * * DtoCallFunction()
* * * * * * * * * Evaluating argument expressions
* * * * * * * * * doing normal arguments
* * * * * * * * * Arguments so far: (1)
* * * * * * * * * * %object.ModuleInfo* %0
* * * * * * * * * Function type: const pure nothrow @property uint()
* * * * * * * IntegerExp::toElem: 2048u @ uint
* * * * * * * * IntegerExp::toConstElem: 2048u @ uint
* * * * * * * * * value = i32 2048
* * * * * * if conditional: %4 = and i32 %3, 2048
* * * * * * Casting from 'uint' to 'bool'
* * * * * * ScopeStatement::toIR(): object.d(147)
* * * * * * * CompoundStatement::toIR(): object.d(147)
* * * * * * * * ExpStatement::toIR(): object.d(148)
* * * * * * * * * DeclarationExp::toElem: (ulong* p = cast(ulong*)this.addrOf(2048);) | T=void
* * * * * * * * * * DtoDeclarationExp: p
* * * * * * * * * * * VarDeclaration
* * * * * * * * * * * DtoVarDeclaration(vdtype = ulong*)
* * * * * * * * * * * * llvm value for decl: %2 = alloca i64*, align 8
* * * * * * * * * * * * expression initializer
* * * * * * * * * * * * AssignExp::toElem: p = cast(ulong*)this.addrOf(2048) | (ulong*)(ulong* = ulong*)
* * * * * * * * * * * * * VarExp::toElem: p @ ulong*
* * * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'ulong*')
* * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * CastExp::toElem: cast(ulong*)this.addrOf(2048) @ ulong*
* * * * * * * * * * * * * * CallExp::toElem: this.addrOf(2048) @ void*
* * * * * * * * * * * * * * * DotVarExp::toElem: this.addrOf @ const pure nothrow void*(int flag)
* * * * * * * * * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo)
* * * * * * * * * * * * * * * * * normal this exp
* * * * * * * * * * * * * * * DtoCallFunction()
* * * * * * * * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * * * * * * IntegerExp::toElem: 2048 @ int
* * * * * * * * * * * * * * * * * * * IntegerExp::toConstElem: 2048 @ int
* * * * * * * * * * * * * * * * * * * * value = i32 2048
* * * * * * * * * * * * * * * * doing normal arguments
* * * * * * * * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * * * * * * * %object.ModuleInfo* %0
* * * * * * * * * * * * * * * * Function type: const pure nothrow void*(int flag)
* * * * * * * * * * * * * * Casting from 'void*' to 'ulong*'
* * * * * * * * * * * * * * * src: %8 = call i8* @_D6object10ModuleInfo6addrOfMxFNaNbiZPv(%object.ModuleInfo* nonnull %0, i32 2048) #1
* * * * * * * * * * * * * * * to type: i64*
* * * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * * * * DtoAssign()
* * * * * * * * * * * * * * lhs: %2 = alloca i64*, align 8
* * * * * * * * * * * * * * rhs: %9 = bitcast i8* %8 to i64*
* * * * * * * * ReturnStatement::toIR(): object.d(149)
* * * * * * * * * SliceExp::toElem: (cast(TypeInfo_Class*)(p + 8L))[0..*p] @ TypeInfo_Class[]
* * * * * * * * * * CastExp::toElem: cast(TypeInfo_Class*)(p + 8L) @ TypeInfo_Class*
* * * * * * * * * * * AddExp::toElem: p + 8L @ ulong*
* * * * * * * * * * * * VarExp::toElem: p @ ulong*
* * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'ulong*')
* * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * Adding integer to pointer
* * * * * * * * * * * Casting from 'ulong*' to 'TypeInfo_Class*'
* * * * * * * * * * * * Building type: TypeInfo_Class*
* * * * * * * * * * * * src: %11 = getelementptr i64, i64* %10, i64 1
* * * * * * * * * * * * to type: %object.TypeInfo_Class**
* * * * * * * * * * IntegerExp::toElem: 0LU @ ulong
* * * * * * * * * * * IntegerExp::toConstElem: 0LU @ ulong
* * * * * * * * * * * * value = i64 0
* * * * * * * * * * PtrExp::toElem: *p @ ulong
* * * * * * * * * * * VarExp::toElem: p @ ulong*
* * * * * * * * * * * * DtoSymbolAddress ('p' of type 'ulong*')
* * * * * * * * * * * * * a normal variable
* * * * * ReturnStatement::toIR(): object.d(151)
* * * * * * NullExp::toElem(type=TypeInfo_Class[]): null
* * * * * * * NullExp::toConstElem(type=TypeInfo_Class[]): null
* * DtoDefineFunction(object.ModuleInfo.name): object.d(154)
* * * isMember = this is: ModuleInfo
* * * DtoFunctionType(const pure nothrow @property string())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.ModuleInfo*)
* * * DtoResolveFunction(object.ModuleInfo.name): object.d(154)
* * * * DtoDeclareFunction(object.ModuleInfo.name): object.d(154)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: ModuleInfo
* * * * * DtoFunctionType(const pure nothrow @property string())
* * * * * func =
declare { i64, i8* } @_D6object10ModuleInfo4nameMxFNaNbNdZAya(%object.ModuleInfo*)
* * * Doing function body for: name
* * * DtoCreateNestedContext for object.ModuleInfo.name
* * * * DtoCreateNestedContextType for object.ModuleInfo.name
* * * CompoundStatement::toIR():
* * * * IfStatement::toIR(): object.d(155)
* * * * * IntegerExp::toElem: true @ bool
* * * * * * IntegerExp::toConstElem: true @ bool
* * * * * * * value = i1 true
* * * * * ScopeStatement::toIR(): object.d(156)
* * * * * * CompoundStatement::toIR(): object.d(156)
* * * * * * * ExpStatement::toIR(): object.d(157)
* * * * * * * * DeclarationExp::toElem: (immutable immutable(char*) p = cast(immutable(char*))this.addrOf(4096);) | T=void
* * * * * * * * * DtoDeclarationExp: p
* * * * * * * * * * VarDeclaration
* * * * * * * * * * DtoVarDeclaration(vdtype = immutable(char*))
* * * * * * * * * * * llvm value for decl: %2 = alloca i8*, align 8
* * * * * * * * * * * expression initializer
* * * * * * * * * * * AssignExp::toElem: p = cast(immutable(char*))this.addrOf(4096) | (immutable(char*))(immutable(char*) = immutable(char*))
* * * * * * * * * * * * VarExp::toElem: p @ immutable(char*)
* * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'immutable(char*)')
* * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * CastExp::toElem: cast(immutable(char*))this.addrOf(4096) @ immutable(char*)
* * * * * * * * * * * * * CallExp::toElem: this.addrOf(4096) @ void*
* * * * * * * * * * * * * * DotVarExp::toElem: this.addrOf @ const pure nothrow void*(int flag)
* * * * * * * * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo)
* * * * * * * * * * * * * * * * normal this exp
* * * * * * * * * * * * * * DtoCallFunction()
* * * * * * * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * * * * * IntegerExp::toElem: 4096 @ int
* * * * * * * * * * * * * * * * * * IntegerExp::toConstElem: 4096 @ int
* * * * * * * * * * * * * * * * * * * value = i32 4096
* * * * * * * * * * * * * * * doing normal arguments
* * * * * * * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * * * * * * %object.ModuleInfo* %0
* * * * * * * * * * * * * * * Function type: const pure nothrow void*(int flag)
* * * * * * * * * * * * * Casting from 'void*' to 'immutable(char*)'
* * * * * * * * * * * * * * src: %5 = call i8* @_D6object10ModuleInfo6addrOfMxFNaNbiZPv(%object.ModuleInfo* nonnull %0, i32 4096) #1
* * * * * * * * * * * * * * to type: i8*
* * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * * * DtoAssign()
* * * * * * * * * * * * * lhs: %2 = alloca i8*, align 8
* * * * * * * * * * * * * rhs: %5 = call i8* @_D6object10ModuleInfo6addrOfMxFNaNbiZPv(%object.ModuleInfo* nonnull %0, i32 4096) #1
* * * * * * * ReturnStatement::toIR(): object.d(158)
* * * * * * * * SliceExp::toElem: p[0..strlen(cast(const(char)*)p)] @ string
* * * * * * * * * VarExp::toElem: p @ immutable(char*)
* * * * * * * * * * DtoSymbolAddress ('p' of type 'immutable(char*)')
* * * * * * * * * * * a normal variable
* * * * * * * * * IntegerExp::toElem: 0LU @ ulong
* * * * * * * * * * IntegerExp::toConstElem: 0LU @ ulong
* * * * * * * * * * * value = i64 0
* * * * * * * * * CallExp::toElem: strlen(cast(const(char)*)p) @ ulong
* * * * * * * * * * VarExp::toElem: strlen @ pure nothrow @nogc @trusted ulong(const(char)* str)
* * * * * * * * * * * DtoSymbolAddress ('strlen' of type 'pure nothrow @nogc @trusted ulong(const(char)* str)')
* * * * * * * * * * * * FuncDeclaration
* * * * * * * * * * DtoCallFunction()
* * * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * CastExp::toElem: cast(const(char)*)p @ const(char)*
* * * * * * * * * * * * * * VarExp::toElem: p @ immutable(char*)
* * * * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'immutable(char*)')
* * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * Casting from 'immutable(char*)' to 'const(char)*'
* * * * * * * * * * * * * * * src: %6 = load i8*, i8** %2
* * * * * * * * * * * * * * * to type: i8*
* * * * * * * * * * * doing normal arguments
* * * * * * * * * * * Arguments so far: (0)
* * * * * * * * * * * Function type: pure nothrow @nogc @trusted ulong(const(char)* str)
* * Ignoring Dsymbol::codegen for object.ModuleInfo.ApplyDg
* * DtoDefineFunction(object.ModuleInfo.opApply): object.d(165)
* * * DtoFunctionType(int(scope int delegate(ref ModuleInfo*) dg))
* * * * Building type: int delegate(ref ModuleInfo*)
* * * * * DtoFunctionType(int(ref ModuleInfo*))
* * * * * * Building type: ModuleInfo**
* * * * * * x86-64 ABI: Transforming return type
* * * * * * x86-64 ABI: Transforming argument types
* * * * * * Final function type: i32 (i8*, %object.ModuleInfo**)
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i32 ({ i8*, i32 (i8*, %object.ModuleInfo**)* })
* * * DtoResolveFunction(object.ModuleInfo.opApply): object.d(165)
* * * * DtoDeclareFunction(object.ModuleInfo.opApply): object.d(165)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * DtoFunctionType(int(scope int delegate(ref ModuleInfo*) dg))
* * * * * func =
declare i32 @_D6object10ModuleInfo7opApplyFMDFKPSQBiQBeZiZi({ i8*, i32 (i8*, %object.ModuleInfo**)* })
* * * Doing function body for: opApply
* * * DtoCreateNestedContext for object.ModuleInfo.opApply
* * * * DtoCreateNestedContextType for object.ModuleInfo.opApply
* * * CompoundStatement::toIR():
* * * * CompoundStatement::toIR(): object.d(165)
* * * * * ExpStatement::toIR(): object.d(166)
* * * * * * DeclarationExp::toElem: (ModuleInfo** start = null;) | T=void
* * * * * * * DtoDeclarationExp: start
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = ModuleInfo**)
* * * * * * * * * llvm value for decl: %3 = alloca %object.ModuleInfo**, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: start = null | (ModuleInfo**)(ModuleInfo** = ModuleInfo**)
* * * * * * * * * * VarExp::toElem: start @ ModuleInfo**
* * * * * * * * * * * DtoSymbolAddress ('start' of type 'ModuleInfo**')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * NullExp::toElem(type=ModuleInfo**): null
* * * * * * * * * * * NullExp::toConstElem(type=ModuleInfo**): null
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %3 = alloca %object.ModuleInfo**, align 8
* * * * * * * * * * * rhs: %object.ModuleInfo** null
* * * * * ExpStatement::toIR(): object.d(167)
* * * * * * DeclarationExp::toElem: (ModuleInfo** end = null;) | T=void
* * * * * * * DtoDeclarationExp: end
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = ModuleInfo**)
* * * * * * * * * llvm value for decl: %4 = alloca %object.ModuleInfo**, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: end = null | (ModuleInfo**)(ModuleInfo** = ModuleInfo**)
* * * * * * * * * * VarExp::toElem: end @ ModuleInfo**
* * * * * * * * * * * DtoSymbolAddress ('end' of type 'ModuleInfo**')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * NullExp::toElem(type=ModuleInfo**): null
* * * * * * * * * * * NullExp::toConstElem(type=ModuleInfo**): null
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %4 = alloca %object.ModuleInfo**, align 8
* * * * * * * * * * * rhs: %object.ModuleInfo** null
* * * * * ExpStatement::toIR(): object.d(170)
* * * * * * AssignExp::toElem: start = & _minfo_beg | (ModuleInfo**)(ModuleInfo** = ModuleInfo**)
* * * * * * * VarExp::toElem: start @ ModuleInfo**
* * * * * * * * DtoSymbolAddress ('start' of type 'ModuleInfo**')
* * * * * * * * * a normal variable
* * * * * * * SymOffExp::toElem: & _minfo_beg @ ModuleInfo**
* * * * * * * * DtoSymbolAddress ('_minfo_beg' of type 'void*')
* * * * * * * * * a normal variable
* * * * * * * * * DtoResolveVariable(object._minfo_beg)
* * * * * * * * * * data segment
* * * * * * * * * * parent: object (module)
* * * * * * * * * * @_minfo_beg = external global i8*, align 8
* * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * DtoAssign()
* * * * * * * * lhs: %3 = alloca %object.ModuleInfo**, align 8
* * * * * * * * rhs: %object.ModuleInfo** bitcast (i8** @_minfo_beg to %object.ModuleInfo**)
* * * * * ExpStatement::toIR(): object.d(171)
* * * * * * AssignExp::toElem: end = & _minfo_end | (ModuleInfo**)(ModuleInfo** = ModuleInfo**)
* * * * * * * VarExp::toElem: end @ ModuleInfo**
* * * * * * * * DtoSymbolAddress ('end' of type 'ModuleInfo**')
* * * * * * * * * a normal variable
* * * * * * * SymOffExp::toElem: & _minfo_end @ ModuleInfo**
* * * * * * * * DtoSymbolAddress ('_minfo_end' of type 'void*')
* * * * * * * * * a normal variable
* * * * * * * * * DtoResolveVariable(object._minfo_end)
* * * * * * * * * * data segment
* * * * * * * * * * parent: object (module)
* * * * * * * * * * @_minfo_end = external global i8*, align 8
* * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * DtoAssign()
* * * * * * * * lhs: %4 = alloca %object.ModuleInfo**, align 8
* * * * * * * * rhs: %object.ModuleInfo** bitcast (i8** @_minfo_end to %object.ModuleInfo**)
* * * * * ForStatement::toIR(): object.d(173)
* * * * * * IdentityExp::toElem: start !is end @ bool
* * * * * * * VarExp::toElem: start @ ModuleInfo**
* * * * * * * * DtoSymbolAddress ('start' of type 'ModuleInfo**')
* * * * * * * * * a normal variable
* * * * * * * VarExp::toElem: end @ ModuleInfo**
* * * * * * * * DtoSymbolAddress ('end' of type 'ModuleInfo**')
* * * * * * * * * a normal variable
* * * * * * ScopeStatement::toIR(): object.d(173)
* * * * * * * CompoundStatement::toIR(): object.d(173)
* * * * * * * * ExpStatement::toIR(): object.d(174)
* * * * * * * * * DeclarationExp::toElem: (ModuleInfo* m = *start;) | T=void
* * * * * * * * * * DtoDeclarationExp: m
* * * * * * * * * * * VarDeclaration
* * * * * * * * * * * DtoVarDeclaration(vdtype = ModuleInfo*)
* * * * * * * * * * * * llvm value for decl: %5 = alloca %object.ModuleInfo*, align 8
* * * * * * * * * * * * expression initializer
* * * * * * * * * * * * AssignExp::toElem: m = *start | (ModuleInfo*)(ModuleInfo* = ModuleInfo*)
* * * * * * * * * * * * * VarExp::toElem: m @ ModuleInfo*
* * * * * * * * * * * * * * DtoSymbolAddress ('m' of type 'ModuleInfo*')
* * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * PtrExp::toElem: *start @ ModuleInfo*
* * * * * * * * * * * * * * VarExp::toElem: start @ ModuleInfo**
* * * * * * * * * * * * * * * DtoSymbolAddress ('start' of type 'ModuleInfo**')
* * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * * * * * * * DtoAssign()
* * * * * * * * * * * * * * lhs: %5 = alloca %object.ModuleInfo*, align 8
* * * * * * * * * * * * * * rhs: %13 = load %object.ModuleInfo*, %object.ModuleInfo** %12
* * * * * * * * IfStatement::toIR(): object.d(175)
* * * * * * * * * IdentityExp::toElem: m !is null @ bool
* * * * * * * * * * VarExp::toElem: m @ ModuleInfo*
* * * * * * * * * * * DtoSymbolAddress ('m' of type 'ModuleInfo*')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * NullExp::toElem(type=ModuleInfo*): null
* * * * * * * * * * * NullExp::toConstElem(type=ModuleInfo*): null
* * * * * * * * * ScopeStatement::toIR(): object.d(175)
* * * * * * * * * * IfStatement::toIR(): object.d(176)
* * * * * * * * * * * CommaExp::toElem: (int res = dg(m);) , res @ int
* * * * * * * * * * * * DeclarationExp::toElem: (int res = dg(m);) | T=void
* * * * * * * * * * * * * DtoDeclarationExp: res
* * * * * * * * * * * * * * VarDeclaration
* * * * * * * * * * * * * * DtoVarDeclaration(vdtype = int)
* * * * * * * * * * * * * * * llvm value for decl: %6 = alloca i32, align 4
* * * * * * * * * * * * * * * expression initializer
* * * * * * * * * * * * * * * AssignExp::toElem: res = dg(m) | (int)(int = int)
* * * * * * * * * * * * * * * * VarExp::toElem: res @ int
* * * * * * * * * * * * * * * * * DtoSymbolAddress ('res' of type 'int')
* * * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * * * CallExp::toElem: dg(m) @ int
* * * * * * * * * * * * * * * * * VarExp::toElem: dg @ int delegate(ref ModuleInfo*)
* * * * * * * * * * * * * * * * * * DtoSymbolAddress ('dg' of type 'int delegate(ref ModuleInfo*)')
* * * * * * * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * * * * * * type: int delegate(ref ModuleInfo*)
* * * * * * * * * * * * * * * * * DtoCallFunction()
* * * * * * * * * * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * * * * * * * * VarExp::toElem: m @ ModuleInfo*
* * * * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('m' of type 'ModuleInfo*')
* * * * * * * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * * * * * doing normal arguments
* * * * * * * * * * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * * * * * * * * * %21 = load i8*, i8** %20
* * * * * * * * * * * * * * * * * * Function type: int(ref ModuleInfo*)
* * * * * * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * * * * * * * DtoAssign()
* * * * * * * * * * * * * * * * * lhs: %6 = alloca i32, align 4
* * * * * * * * * * * * * * * * * rhs: %22 = call i32 %19(i8* nonnull %21, %object.ModuleInfo** dereferenceable(8) %5)
* * * * * * * * * * * * VarExp::toElem: res @ int
* * * * * * * * * * * * * DtoSymbolAddress ('res' of type 'int')
* * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * if conditional: %23 = load i32, i32* %6
* * * * * * * * * * * Casting from 'int' to 'bool'
* * * * * * * * * * * ReturnStatement::toIR(): object.d(177)
* * * * * * * * * * * * VarExp::toElem: res @ int
* * * * * * * * * * * * * DtoSymbolAddress ('res' of type 'int')
* * * * * * * * * * * * * * a normal variable
* * * * * * * * ExpStatement::toIR(): object.d(179)
* * * * * * * * * PostExp::toElem: start++ @ ModuleInfo**
* * * * * * * * * * VarExp::toElem: start @ ModuleInfo**
* * * * * * * * * * * DtoSymbolAddress ('start' of type 'ModuleInfo**')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * IntegerExp::toElem: 8L @ long
* * * * * * * * * * * IntegerExp::toConstElem: 8L @ long
* * * * * * * * * * * * value = i64 8
* * * * * ReturnStatement::toIR(): object.d(181)
* * * * * * IntegerExp::toElem: 0 @ int
* * * * * * * IntegerExp::toConstElem: 0 @ int
* * * * * * * * value = i32 0
* * DtoDefineFunction(object.ModuleInfo.__fieldPostblit): object.d(37)
* * * isMember = this is: ModuleInfo
* * * DtoFunctionType(pure nothrow @nogc @safe void())
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: void (%object.ModuleInfo*)
* * * DtoResolveFunction(object.ModuleInfo.__fieldPostblit): object.d(37)
* * * * DtoDeclareFunction(object.ModuleInfo.__fieldPostblit): object.d(37)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: ModuleInfo
* * * * * DtoFunctionType(pure nothrow @nogc @safe void())
* * * * * func =
declare void @_D6object10ModuleInfo15__fieldPostblitMFNaNbNiNfZv(%object.ModuleInfo*)
* * DtoDefineFunction(object.ModuleInfo.__aggrPostblit): object.d(37)
* * * isMember = this is: ModuleInfo
* * * DtoFunctionType(pure nothrow @nogc @safe void())
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: void (%object.ModuleInfo*)
* * * DtoResolveFunction(object.ModuleInfo.__aggrPostblit): object.d(37)
* * * * DtoDeclareFunction(object.ModuleInfo.__aggrPostblit): object.d(37)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: ModuleInfo
* * * * * DtoFunctionType(pure nothrow @nogc @safe void())
* * * * * func =
declare void @_D6object10ModuleInfo14__aggrPostblitMFNaNbNiNfZv(%object.ModuleInfo*)
* * * Doing function body for: __aggrPostblit
* * * DtoCreateNestedContext for object.ModuleInfo.__aggrPostblit
* * * * DtoCreateNestedContextType for object.ModuleInfo.__aggrPostblit
* * * CompoundStatement::toIR():
* * * * ExpStatement::toIR():
* * Ignoring Dsymbol::codegen for object.ModuleInfo.__xpostblit
* * DtoDefineFunction(object.ModuleInfo.opAssign): object.d(32)
* * * isMember = this is: ModuleInfo
* * * DtoFunctionType(pure nothrow @nogc ref return @trusted ModuleInfo(ModuleInfo p))
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: %object.ModuleInfo* (%object.ModuleInfo*, %object.ModuleInfo*)
* * * DtoResolveFunction(object.ModuleInfo.opAssign): object.d(32)
* * * * DtoDeclareFunction(object.ModuleInfo.opAssign): object.d(32)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: ModuleInfo
* * * * * DtoFunctionType(pure nothrow @nogc ref return @trusted ModuleInfo(ModuleInfo p))
* * * * * func =
declare %object.ModuleInfo* @_D6object10ModuleInfo8opAssignMFNaNbNcNiNjNeSQBrQBnZQi(%object.ModuleInfo*, %object.ModuleInfo*)
* * * Doing function body for: opAssign
* * * DtoCreateNestedContext for object.ModuleInfo.opAssign
* * * * DtoCreateNestedContextType for object.ModuleInfo.opAssign
* * * CompoundStatement::toIR():
* * * * CompoundStatement::toIR():
* * * * * ExpStatement::toIR():
* * * * * * AssignExp::toElem: this = p | (ModuleInfo)(ModuleInfo = ModuleInfo)
* * * * * * * ThisExp::toElem: this @ ModuleInfo
* * * * * * * * normal this exp
* * * * * * * VarExp::toElem: p @ ModuleInfo
* * * * * * * * DtoSymbolAddress ('p' of type 'ModuleInfo')
* * * * * * * * * function param
* * * * * * * * * type: ModuleInfo
* * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * DtoAssign()
* * * * * ReturnStatement::toIR():
* * * * * * ThisExp::toElem: this @ ModuleInfo
* * * * * * * normal this exp
* * Building default initializer for object.ModuleInfo
* * * Creating initializer constant for ModuleInfo
* * * * Field priority for _flags: 1
* * * * Field priority for _index: 1
* * * * DtoConstExpInit(targetType = uint, exp = 0u)
* * * * * IntegerExp::toConstElem: 0u @ uint
* * * * * * value = i32 0
* * * * DtoConstExpInit(targetType = uint, exp = 0u)
* * * * * IntegerExp::toConstElem: 0u @ uint
* * * * * * value = i32 0
* * * * final initializer: %object.ModuleInfo zeroinitializer
* * DtoTypeInfoOf(type = 'ModuleInfo', base='0')
* * * Type::getTypeInfo(): ModuleInfo
* * * * TypeInfoDeclaration_codegen(typeid(ModuleInfo))
* * * * * type = 'ModuleInfo'
* * * * * typeinfo mangle: _D29TypeInfo_S6object10ModuleInfo6__initZ
* * * * * TypeInfoStructDeclaration::llvmDefine() typeid(ModuleInfo)
* * * * * * DtoResolveClass(object.TypeInfo_Struct): object.d(588)
* * * * * * * DtoResolveClass(object.TypeInfo): object.d(261)
* * * * * * * * DtoResolveClass(object.Object): object.d(186)
* * * TypeInfoDeclaration_codegen(typeid(ModuleInfo))
* ClassDeclaration::codegen: 'object.Object'
* * DtoDefineFunction(object.Object.toString): object.d(188)
* * * isMember = this is: object.Object
* * * DtoFunctionType(string())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.Object*)
* * * DtoResolveFunction(object.Object.toString): object.d(188)
* * * * DtoDeclareFunction(object.Object.toString): object.d(188)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.Object
* * * * * DtoFunctionType(string())
* * * * * func =
declare { i64, i8* } @_D6object6Object8toStringMFZAya(%object.Object*)
* * * Doing function body for: toString
* * * DtoCreateNestedContext for object.Object.toString
* * * * DtoCreateNestedContextType for object.Object.toString
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(189)
* * * * * DotVarExp::toElem: typeid(this).name @ string
* * * * * * ThisExp::toElem: this @ object.Object
* * * * * * * normal this exp
* * * * * * Indexing aggregate field object.TypeInfo_Class.name:
* * * * * * * DtoResolveClass(object.TypeInfo_Class): object.d(373)
* * * * * * * Value: %10 = getelementptr inbounds %object.TypeInfo_Class, %object.TypeInfo_Class* %9, i32 0, i32 3
* * DtoDefineFunction(object.Object.toHash): object.d(193)
* * * isMember = this is: object.Object
* * * DtoFunctionType(nothrow @trusted ulong())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (%object.Object*)
* * * DtoResolveFunction(object.Object.toHash): object.d(193)
* * * * DtoDeclareFunction(object.Object.toHash): object.d(193)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.Object
* * * * * DtoFunctionType(nothrow @trusted ulong())
* * * * * func =
declare i64 @_D6object6Object6toHashMFNbNeZm(%object.Object*)
* * * Doing function body for: toHash
* * * DtoCreateNestedContext for object.Object.toHash
* * * * DtoCreateNestedContextType for object.Object.toHash
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(194)
* * * * * CastExp::toElem: cast(ulong)cast(void*)this @ ulong
* * * * * * CastExp::toElem: cast(void*)this @ void*
* * * * * * * ThisExp::toElem: this @ object.Object
* * * * * * * * normal this exp
* * * * * * * Casting from 'object.Object' to 'void*'
* * * * * * * * DtoCastClass(object.Object, void*)
* * * * * * * * * to pointer
* * * * * * Casting from 'void*' to 'ulong'
* * DtoDefineFunction(object.Object.opCmp): object.d(198)
* * * isMember = this is: object.Object
* * * DtoFunctionType(int(Object o))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i32 (%object.Object*, %object.Object*)
* * * DtoResolveFunction(object.Object.opCmp): object.d(198)
* * * * DtoDeclareFunction(object.Object.opCmp): object.d(198)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.Object
* * * * * DtoFunctionType(int(Object o))
* * * * * func =
declare i32 @_D6object6Object5opCmpMFCQqZi(%object.Object*, %object.Object*)
* * * Doing function body for: opCmp
* * * DtoCreateNestedContext for object.Object.opCmp
* * * * DtoCreateNestedContextType for object.Object.opCmp
* * * CompoundStatement::toIR():
* * * * CompoundStatement::toIR(): object.d(198)
* * * * * ExpStatement::toIR(): object.d(199)
* * * * * * DeclarationExp::toElem: (ulong a = cast(ulong)cast(void*)this;) | T=void
* * * * * * * DtoDeclarationExp: a
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = ulong)
* * * * * * * * * llvm value for decl: %5 = alloca i64, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: a = cast(ulong)cast(void*)this | (ulong)(ulong = ulong)
* * * * * * * * * * VarExp::toElem: a @ ulong
* * * * * * * * * * * DtoSymbolAddress ('a' of type 'ulong')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * CastExp::toElem: cast(ulong)cast(void*)this @ ulong
* * * * * * * * * * * CastExp::toElem: cast(void*)this @ void*
* * * * * * * * * * * * ThisExp::toElem: this @ object.Object
* * * * * * * * * * * * * normal this exp
* * * * * * * * * * * * Casting from 'object.Object' to 'void*'
* * * * * * * * * * * * * DtoCastClass(object.Object, void*)
* * * * * * * * * * * * * * to pointer
* * * * * * * * * * * Casting from 'void*' to 'ulong'
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %5 = alloca i64, align 8
* * * * * * * * * * * rhs: %9 = ptrtoint i8* %8 to i64
* * * * * ExpStatement::toIR(): object.d(200)
* * * * * * DeclarationExp::toElem: (ulong b = cast(ulong)cast(void*)o;) | T=void
* * * * * * * DtoDeclarationExp: b
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = ulong)
* * * * * * * * * llvm value for decl: %6 = alloca i64, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: b = cast(ulong)cast(void*)o | (ulong)(ulong = ulong)
* * * * * * * * * * VarExp::toElem: b @ ulong
* * * * * * * * * * * DtoSymbolAddress ('b' of type 'ulong')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * CastExp::toElem: cast(ulong)cast(void*)o @ ulong
* * * * * * * * * * * CastExp::toElem: cast(void*)o @ void*
* * * * * * * * * * * * VarExp::toElem: o @ object.Object
* * * * * * * * * * * * * DtoSymbolAddress ('o' of type 'object.Object')
* * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * type: object.Object
* * * * * * * * * * * * Casting from 'object.Object' to 'void*'
* * * * * * * * * * * * * DtoCastClass(object.Object, void*)
* * * * * * * * * * * * * * to pointer
* * * * * * * * * * * Casting from 'void*' to 'ulong'
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %6 = alloca i64, align 8
* * * * * * * * * * * rhs: %13 = ptrtoint i8* %12 to i64
* * * * * IfStatement::toIR(): object.d(202)
* * * * * * CmpExp::toElem: a < b @ bool
* * * * * * * VarExp::toElem: a @ ulong
* * * * * * * * DtoSymbolAddress ('a' of type 'ulong')
* * * * * * * * * a normal variable
* * * * * * * VarExp::toElem: b @ ulong
* * * * * * * * DtoSymbolAddress ('b' of type 'ulong')
* * * * * * * * * a normal variable
* * * * * * * type 1: %14 = load i64, i64* %5
* * * * * * * type 2: %15 = load i64, i64* %6
* * * * * * ReturnStatement::toIR(): object.d(203)
* * * * * * * IntegerExp::toElem: -1 @ int
* * * * * * * * IntegerExp::toConstElem: -1 @ int
* * * * * * * * * value = i32 -1
* * * * * * IfStatement::toIR(): object.d(204)
* * * * * * * EqualExp::toElem: a == b @ bool
* * * * * * * * VarExp::toElem: a @ ulong
* * * * * * * * * DtoSymbolAddress ('a' of type 'ulong')
* * * * * * * * * * a normal variable
* * * * * * * * VarExp::toElem: b @ ulong
* * * * * * * * * DtoSymbolAddress ('b' of type 'ulong')
* * * * * * * * * * a normal variable
* * * * * * * * integral or pointer or interface
* * * * * * * * lv: %20 = load i64, i64* %5
* * * * * * * * rv: %21 = load i64, i64* %6
* * * * * * * ReturnStatement::toIR(): object.d(205)
* * * * * * * * IntegerExp::toElem: 0 @ int
* * * * * * * * * IntegerExp::toConstElem: 0 @ int
* * * * * * * * * * value = i32 0
* * * * * * * ReturnStatement::toIR(): object.d(207)
* * * * * * * * IntegerExp::toElem: 1 @ int
* * * * * * * * * IntegerExp::toConstElem: 1 @ int
* * * * * * * * * * value = i32 1
* * DtoDefineFunction(object.Object.opEquals): object.d(212)
* * * isMember = this is: object.Object
* * * DtoFunctionType(bool(Object o))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i1 (%object.Object*, %object.Object*)
* * * DtoResolveFunction(object.Object.opEquals): object.d(212)
* * * * DtoDeclareFunction(object.Object.opEquals): object.d(212)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.Object
* * * * * DtoFunctionType(bool(Object o))
* * * * * func =
declare i1 @_D6object6Object8opEqualsMFCQtZb(%object.Object*, %object.Object*)
* * * Doing function body for: opEquals
* * * DtoCreateNestedContext for object.Object.opEquals
* * * * DtoCreateNestedContextType for object.Object.opEquals
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(213)
* * * * * IdentityExp::toElem: this is o @ bool
* * * * * * ThisExp::toElem: this @ object.Object
* * * * * * * normal this exp
* * * * * * VarExp::toElem: o @ object.Object
* * * * * * * DtoSymbolAddress ('o' of type 'object.Object')
* * * * * * * * function param
* * * * * * * * type: object.Object
* * InterfaceDeclaration::codegen: 'object.Object.Monitor'
* * * DtoResolveClass(object.Object.Monitor): object.d(216)
* * * * Building type: object.Object.Monitor
* * * * * Building class type object.Object.Monitor @ object.d(216)
* * * * * * Instance size: 8
* * * * * * class type: %object.Object.Monitor = type { [3 x i8*]* }
* * * DtoDefineFunction(object.Object.Monitor.lock): object.d(217)
* * * * isMember = this is: object.Object.Monitor
* * * * DtoFunctionType(void())
* * * * * x86-64 ABI: Transforming argument types
* * * * * Final function type: void (%object.Object.Monitor*)
* * * * DtoResolveFunction(object.Object.Monitor.lock): object.d(217)
* * * * DtoDeclareFunction(object.Object.Monitor.lock): object.d(217)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.Object.Monitor
* * * * * DtoFunctionType(void())
* * * * * func =
declare void @_D6object6Object7Monitor4lockMFZv(%object.Object.Monitor*)
* * * DtoDefineFunction(object.Object.Monitor.unlock): object.d(218)
* * * * isMember = this is: object.Object.Monitor
* * * * DtoFunctionType(void())
* * * * * x86-64 ABI: Transforming argument types
* * * * * Final function type: void (%object.Object.Monitor*)
* * * * DtoResolveFunction(object.Object.Monitor.unlock): object.d(218)
* * * * DtoDeclareFunction(object.Object.Monitor.unlock): object.d(218)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.Object.Monitor
* * * * * DtoFunctionType(void())
* * * * * func =
declare void @_D6object6Object7Monitor6unlockMFZv(%object.Object.Monitor*)
* * * DtoTypeInfoOf(type = 'object.Object.Monitor', base='0')
* * * * Type::getTypeInfo(): object.Object.Monitor
* * * * * TypeInfoDeclaration_codegen(typeid(object.Object.Monitor))
* * * * * * type = 'object.Object.Monitor'
* * * * * * typeinfo mangle: _D32TypeInfo_C6object6Object7Monitor6__initZ
* * * * * * Building type: object.TypeInfo_Interface
* * * * * * * Building class type object.TypeInfo_Interface @ object.d(526)
* * * * * * * * Instance size: 24
* * * * * * * * Field priority for info: 1
* * * * * * * * class type: %object.TypeInfo_Interface = type { [19 x i8*]*, i8*, %object.TypeInfo_Class* }
* * * * * * TypeInfoInterfaceDeclaration::llvmDefine() typeid(object.Object.Monitor)
* * * * * * * DtoResolveClass(object.TypeInfo_Interface): object.d(526)
* * * * TypeInfoDeclaration_codegen(typeid(object.Object.Monitor))
* * * DtoDefineClassInfo(Monitor)
* * * * Building ClassInfo.interfaces
* * DtoDefineFunction(object.Object.factory): object.d(227)
* * * DtoFunctionType(Object(string classname))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: %object.Object* ({ i64, i8* })
* * * DtoResolveFunction(object.Object.factory): object.d(227)
* * * * DtoDeclareFunction(object.Object.factory): object.d(227)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * DtoFunctionType(Object(string classname))
* * * * * func =
declare %object.Object* @_D6object6Object7factoryFAyaZCQv({ i64, i8* })
* * * Doing function body for: factory
* * * DtoCreateNestedContext for object.Object.factory
* * * * DtoCreateNestedContextType for object.Object.factory
* * * CompoundStatement::toIR():
* * * * ExpStatement::toIR(): object.d(228)
* * * * * AssertExp::toElem: assert(0)
* * * * * * IntegerExp::toElem: 0 @ int
* * * * * * * IntegerExp::toConstElem: 0 @ int
* * * * * * * * value = i32 0
* * * * * * Casting from 'int' to 'bool'
* * Building default initializer for object.Object
* * * Creating initializer constant for Object
* * * * final initializer: %object.Object { [5 x i8*]* @_D6Object6__vtblZ, i8* null }
* * Building vtbl initializer
* * DtoDefineClassInfo(Object)
* * * Building ClassInfo.interfaces
* DtoDefineFunction(object.opEquals): object.d(233)
* * DtoFunctionType(@system bool(Object lhs, Object rhs))
* * * x86-64 ABI: Transforming return type
* * * x86-64 ABI: Transforming argument types
* * * Final function type: i1 (%object.Object*, %object.Object*)
* * DtoResolveFunction(object.opEquals): object.d(233)
* * * DtoDeclareFunction(object.opEquals): object.d(233)
* * * * Enter defineAsExternallyAvailable
* * * * * Cross-module inlining fully disabled.
* * * * DtoFunctionType(@system bool(Object lhs, Object rhs))
* * * * func =
declare i1 @_D6object8opEqualsFC6ObjectQiZb(%object.Object*, %object.Object*)
* * Doing function body for: opEquals
* * DtoCreateNestedContext for object.opEquals
* * * DtoCreateNestedContextType for object.opEquals
* * CompoundStatement::toIR():
* * * CompoundStatement::toIR(): object.d(233)
* * * * IfStatement::toIR(): object.d(234)
* * * * * IdentityExp::toElem: lhs is rhs @ bool
* * * * * * VarExp::toElem: lhs @ object.Object
* * * * * * * DtoSymbolAddress ('lhs' of type 'object.Object')
* * * * * * * * function param
* * * * * * * * type: object.Object
* * * * * * VarExp::toElem: rhs @ object.Object
* * * * * * * DtoSymbolAddress ('rhs' of type 'object.Object')
* * * * * * * * function param
* * * * * * * * type: object.Object
* * * * * ReturnStatement::toIR(): object.d(235)
* * * * * * IntegerExp::toElem: true @ bool
* * * * * * * IntegerExp::toConstElem: true @ bool
* * * * * * * * value = i1 true
* * * * IfStatement::toIR(): object.d(237)
* * * * * IdentityExp::toElem: typeid(lhs) is typeid(rhs) @ bool
* * * * * * VarExp::toElem: lhs @ object.Object
* * * * * * * DtoSymbolAddress ('lhs' of type 'object.Object')
* * * * * * * * function param
* * * * * * * * type: object.Object
* * * * * * VarExp::toElem: rhs @ object.Object
* * * * * * * DtoSymbolAddress ('rhs' of type 'object.Object')
* * * * * * * * function param
* * * * * * * * type: object.Object
* * * * * ReturnStatement::toIR(): object.d(238)
* * * * * * CallExp::toElem: lhs.opEquals(rhs) @ bool
* * * * * * * DotVarExp::toElem: lhs.opEquals @ bool(Object o)
* * * * * * * * VarExp::toElem: lhs @ object.Object
* * * * * * * * * DtoSymbolAddress ('lhs' of type 'object.Object')
* * * * * * * * * * function param
* * * * * * * * * * type: object.Object
* * * * * * * * vthis: %26 = load %object.Object*, %object.Object** %3
* * * * * * * * funcval: %30 = load i8*, i8** %29, align 8
* * * * * * * * isMember = this is: object.Object
* * * * * * * * DtoFunctionType(bool(Object o))
* * * * * * * * funcval casted: %31 = bitcast i8* %30 to i1 (%object.Object*, %object.Object*)*
* * * * * * * DtoCallFunction()
* * * * * * * * Evaluating argument expressions
* * * * * * * * * DtoArgument
* * * * * * * * * * VarExp::toElem: rhs @ object.Object
* * * * * * * * * * * DtoSymbolAddress ('rhs' of type 'object.Object')
* * * * * * * * * * * * function param
* * * * * * * * * * * * type: object.Object
* * * * * * * * Building type: bool(Object o)
* * * * * * * * * DtoFunctionType(bool(Object o))
* * * * * * * * * * x86-64 ABI: Transforming return type
* * * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * * Final function type: i1 (%object.Object*)
* * * * * * * * doing normal arguments
* * * * * * * * Arguments so far: (1)
* * * * * * * * * %32 = load %object.Object*, %object.Object** %3
* * * * * * * * Function type: bool(Object o)
* * * * ReturnStatement::toIR(): object.d(240)
* * * * * LogicalExp::toElem: lhs.opEquals(rhs) && rhs.opEquals(lhs) @ bool
* * * * * * CallExp::toElem: lhs.opEquals(rhs) @ bool
* * * * * * * DotVarExp::toElem: lhs.opEquals @ bool(Object o)
* * * * * * * * VarExp::toElem: lhs @ object.Object
* * * * * * * * * DtoSymbolAddress ('lhs' of type 'object.Object')
* * * * * * * * * * function param
* * * * * * * * * * type: object.Object
* * * * * * * * vthis: %37 = load %object.Object*, %object.Object** %3
* * * * * * * * funcval: %41 = load i8*, i8** %40, align 8
* * * * * * * * isMember = this is: object.Object
* * * * * * * * DtoFunctionType(bool(Object o))
* * * * * * * * funcval casted: %42 = bitcast i8* %41 to i1 (%object.Object*, %object.Object*)*
* * * * * * * DtoCallFunction()
* * * * * * * * Evaluating argument expressions
* * * * * * * * * DtoArgument
* * * * * * * * * * VarExp::toElem: rhs @ object.Object
* * * * * * * * * * * DtoSymbolAddress ('rhs' of type 'object.Object')
* * * * * * * * * * * * function param
* * * * * * * * * * * * type: object.Object
* * * * * * * * doing normal arguments
* * * * * * * * Arguments so far: (1)
* * * * * * * * * %43 = load %object.Object*, %object.Object** %3
* * * * * * * * Function type: bool(Object o)
* * * * * * CallExp::toElem: rhs.opEquals(lhs) @ bool
* * * * * * * DotVarExp::toElem: rhs.opEquals @ bool(Object o)
* * * * * * * * VarExp::toElem: rhs @ object.Object
* * * * * * * * * DtoSymbolAddress ('rhs' of type 'object.Object')
* * * * * * * * * * function param
* * * * * * * * * * type: object.Object
* * * * * * * * vthis: %47 = load %object.Object*, %object.Object** %4
* * * * * * * * funcval: %51 = load i8*, i8** %50, align 8
* * * * * * * * isMember = this is: object.Object
* * * * * * * * DtoFunctionType(bool(Object o))
* * * * * * * * funcval casted: %52 = bitcast i8* %51 to i1 (%object.Object*, %object.Object*)*
* * * * * * * DtoCallFunction()
* * * * * * * * Evaluating argument expressions
* * * * * * * * * DtoArgument
* * * * * * * * * * VarExp::toElem: lhs @ object.Object
* * * * * * * * * * * DtoSymbolAddress ('lhs' of type 'object.Object')
* * * * * * * * * * * * function param
* * * * * * * * * * * * type: object.Object
* * * * * * * * doing normal arguments
* * * * * * * * Arguments so far: (1)
* * * * * * * * * %53 = load %object.Object*, %object.Object** %4
* * * * * * * * Function type: bool(Object o)
* DtoDefineFunction(object.opEquals): object.d(243)
* * DtoFunctionType(@system bool(const(Object) lhs, const(Object) rhs))
* * * x86-64 ABI: Transforming return type
* * * x86-64 ABI: Transforming argument types
* * * Final function type: i1 (%object.Object*, %object.Object*)
* * DtoResolveFunction(object.opEquals): object.d(243)
* * * DtoDeclareFunction(object.opEquals): object.d(243)
* * * * Enter defineAsExternallyAvailable
* * * * * Cross-module inlining fully disabled.
* * * * DtoFunctionType(@system bool(const(Object) lhs, const(Object) rhs))
* * * * func =
declare i1 @_D6object8opEqualsFxC6ObjectxQjZb(%object.Object*, %object.Object*)
* * Doing function body for: opEquals
* * DtoCreateNestedContext for object.opEquals
* * * DtoCreateNestedContextType for object.opEquals
* * CompoundStatement::toIR():
* * * ReturnStatement::toIR(): object.d(244)
* * * * CallExp::toElem: opEquals(lhs, rhs) @ bool
* * * * * VarExp::toElem: opEquals @ @system bool(Object lhs, Object rhs)
* * * * * * DtoSymbolAddress ('opEquals' of type '@system bool(Object lhs, Object rhs)')
* * * * * * * FuncDeclaration
* * * * * DtoCallFunction()
* * * * * * Evaluating argument expressions
* * * * * * * DtoArgument
* * * * * * * * VarExp::toElem: lhs @ object.Object
* * * * * * * * * DtoSymbolAddress ('lhs' of type 'const(Object)')
* * * * * * * * * * function param
* * * * * * * * * * type: const(Object)
* * * * * * * DtoArgument
* * * * * * * * VarExp::toElem: rhs @ object.Object
* * * * * * * * * DtoSymbolAddress ('rhs' of type 'const(Object)')
* * * * * * * * * * function param
* * * * * * * * * * type: const(Object)
* * * * * * Building type: @system bool(Object lhs, Object rhs)
* * * * * * * DtoFunctionType(@system bool(Object lhs, Object rhs))
* * * * * * * * x86-64 ABI: Transforming return type
* * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * Final function type: i1 (%object.Object*, %object.Object*)
* * * * * * doing normal arguments
* * * * * * Arguments so far: (0)
* * * * * * Function type: @system bool(Object lhs, Object rhs)
* StructDeclaration::codegen: 'object.Interface'
* * Resolving struct type: Interface (object.d(248))
* * VarDeclaration::codegen(): 'object.Interface.classinfo'
* * * DtoResolveVariable(object.Interface.classinfo)
* * VarDeclaration::codegen(): 'object.Interface.vtbl'
* * * DtoResolveVariable(object.Interface.vtbl)
* * VarDeclaration::codegen(): 'object.Interface.offset'
* * * DtoResolveVariable(object.Interface.offset)
* * Building default initializer for object.Interface
* * * Creating initializer constant for Interface
* * * * Field priority for classinfo: 1
* * * * Field priority for vtbl: 1
* * * * Field priority for offset: 1
* * * * DtoConstExpInit(targetType = object.TypeInfo_Class, exp = null)
* * * * * NullExp::toConstElem(type=object.TypeInfo_Class): null
* * * * DtoConstExpInit(targetType = void*[], exp = null)
* * * * * NullExp::toConstElem(type=void*[]): null
* * * * DtoConstExpInit(targetType = ulong, exp = 0LU)
* * * * * IntegerExp::toConstElem: 0LU @ ulong
* * * * * * value = i64 0
* * * * final initializer: %object.Interface zeroinitializer
* * DtoTypeInfoOf(type = 'Interface', base='0')
* * * Type::getTypeInfo(): Interface
* * * * TypeInfoDeclaration_codegen(typeid(Interface))
* * * * * type = 'Interface'
* * * * * typeinfo mangle: _D27TypeInfo_S6object9Interface6__initZ
* * * * * TypeInfoStructDeclaration::llvmDefine() typeid(Interface)
* * * * * * DtoFunctionType(nothrow @trusted ulong(ref const(Interface) p))
* * * * * * * Building type: const(Interface)*
* * * * * * * x86-64 ABI: Transforming return type
* * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * Final function type: i64 (%object.Interface*)
* * * * * * DtoResolveFunction(object.Interface.__xtoHash):
* * * * * * * DtoDeclareFunction(object.Interface.__xtoHash):
* * * * * * * * Enter defineAsExternallyAvailable
* * * * * * * * * Cross-module inlining fully disabled.
* * * * * * * * DtoFunctionType(nothrow @trusted ulong(ref const(Interface) p))
* * * * * * * * func =
declare i64 @_D6object9Interface9__xtoHashFNbNeKxSQBjQBfZm(%object.Interface*)
* * * * * * DtoFunctionType(bool(ref const(Interface) p, ref const(Interface) q))
* * * * * * * x86-64 ABI: Transforming return type
* * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * Final function type: i1 (%object.Interface*, %object.Interface*)
* * * * * * DtoResolveFunction(object.Interface.__xopEquals):
* * * * * * * DtoDeclareFunction(object.Interface.__xopEquals):
* * * * * * * * Enter defineAsExternallyAvailable
* * * * * * * * * Cross-module inlining fully disabled.
* * * * * * * * DtoFunctionType(bool(ref const(Interface) p, ref const(Interface) q))
* * * * * * * * func =
declare i1 @_D6object9Interface11__xopEqualsFKxSQBiQBeKxQjZb(%object.Interface*, %object.Interface*)
* * * TypeInfoDeclaration_codegen(typeid(Interface))
* * DtoDefineFunction(object.Interface.__xopEquals):
* * * Doing function body for: __xopEquals
* * * DtoCreateNestedContext for object.Interface.__xopEquals
* * * * DtoCreateNestedContextType for object.Interface.__xopEquals
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR():
* * * * * LogicalExp::toElem: opEquals(p.classinfo, q.classinfo) && p.vtbl == q.vtbl && p.offset == q.offset @ bool
* * * * * * LogicalExp::toElem: opEquals(p.classinfo, q.classinfo) && p.vtbl == q.vtbl @ bool
* * * * * * * CallExp::toElem: opEquals(p.classinfo, q.classinfo) @ bool
* * * * * * * * VarExp::toElem: opEquals @ @system bool(const(Object) lhs, const(Object) rhs)
* * * * * * * * * DtoSymbolAddress ('opEquals' of type '@system bool(const(Object) lhs, const(Object) rhs)')
* * * * * * * * * * FuncDeclaration
* * * * * * * * DtoCallFunction()
* * * * * * * * * Evaluating argument expressions
* * * * * * * * * * DtoArgument
* * * * * * * * * * * DotVarExp::toElem: p.classinfo @ const(Object)
* * * * * * * * * * * * VarExp::toElem: p @ const(Interface)
* * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'const(Interface)')
* * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * type: const(Interface)
* * * * * * * * * * * * Indexing aggregate field object.Interface.classinfo:
* * * * * * * * * * * * * Value: %4 = getelementptr inbounds %object.Interface, %object.Interface* %1, i32 0, i32 0
* * * * * * * * * * DtoArgument
* * * * * * * * * * * DotVarExp::toElem: q.classinfo @ const(Object)
* * * * * * * * * * * * VarExp::toElem: q @ const(Interface)
* * * * * * * * * * * * * DtoSymbolAddress ('q' of type 'const(Interface)')
* * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * type: const(Interface)
* * * * * * * * * * * * Indexing aggregate field object.Interface.classinfo:
* * * * * * * * * * * * * Value: %6 = getelementptr inbounds %object.Interface, %object.Interface* %0, i32 0, i32 0
* * * * * * * * * Building type: @system bool(const(Object) lhs, const(Object) rhs)
* * * * * * * * * * DtoFunctionType(@system bool(const(Object) lhs, const(Object) rhs))
* * * * * * * * * * * x86-64 ABI: Transforming return type
* * * * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * * * Final function type: i1 (%object.Object*, %object.Object*)
* * * * * * * * * doing normal arguments
* * * * * * * * * Arguments so far: (0)
* * * * * * * * * Function type: @system bool(const(Object) lhs, const(Object) rhs)
* * * * * * * EqualExp::toElem: p.vtbl == q.vtbl @ bool
* * * * * * * * DotVarExp::toElem: p.vtbl @ const(void*[])
* * * * * * * * * VarExp::toElem: p @ const(Interface)
* * * * * * * * * * DtoSymbolAddress ('p' of type 'const(Interface)')
* * * * * * * * * * * function param
* * * * * * * * * * * type: const(Interface)
* * * * * * * * * Indexing aggregate field object.Interface.vtbl:
* * * * * * * * * * Value: %12 = getelementptr inbounds %object.Interface, %object.Interface* %1, i32 0, i32 1
* * * * * * * * * Building type: const(void*)[]
* * * * * * * * DotVarExp::toElem: q.vtbl @ const(void*[])
* * * * * * * * * VarExp::toElem: q @ const(Interface)
* * * * * * * * * * DtoSymbolAddress ('q' of type 'const(Interface)')
* * * * * * * * * * * function param
* * * * * * * * * * * type: const(Interface)
* * * * * * * * * Indexing aggregate field object.Interface.vtbl:
* * * * * * * * * * Value: %13 = getelementptr inbounds %object.Interface, %object.Interface* %0, i32 0, i32 1
* * * * * * * * static or dynamic array
* * * * * * * * Comparing arrays using memcmp
* * * * * * * * DtoArrayPtr
* * * * * * * * DtoArrayPtr
* * * * * * * * DtoArrayLen
* * * * * * * * DtoArrayLen
* * * * * * EqualExp::toElem: p.offset == q.offset @ bool
* * * * * * * DotVarExp::toElem: p.offset @ const(ulong)
* * * * * * * * VarExp::toElem: p @ const(Interface)
* * * * * * * * * DtoSymbolAddress ('p' of type 'const(Interface)')
* * * * * * * * * * function param
* * * * * * * * * * type: const(Interface)
* * * * * * * * Indexing aggregate field object.Interface.offset:
* * * * * * * * * Value: %34 = getelementptr inbounds %object.Interface, %object.Interface* %1, i32 0, i32 2
* * * * * * * DotVarExp::toElem: q.offset @ const(ulong)
* * * * * * * * VarExp::toElem: q @ const(Interface)
* * * * * * * * * DtoSymbolAddress ('q' of type 'const(Interface)')
* * * * * * * * * * function param
* * * * * * * * * * type: const(Interface)
* * * * * * * * Indexing aggregate field object.Interface.offset:
* * * * * * * * * Value: %35 = getelementptr inbounds %object.Interface, %object.Interface* %0, i32 0, i32 2
* * * * * * * integral or pointer or interface
* * * * * * * lv: %36 = load i64, i64* %34
* * * * * * * rv: %37 = load i64, i64* %35
* * DtoDefineFunction(object.Interface.__xtoHash):
* * * Doing function body for: __xtoHash
* * * DtoCreateNestedContext for object.Interface.__xtoHash
* * * * DtoCreateNestedContextType for object.Interface.__xtoHash
* * * CompoundStatement::toIR():
* * * * CompoundStatement::toIR():
* * * * * ExpStatement::toIR():
* * * * * * DeclarationExp::toElem: (ulong h = 0LU;) | T=void
* * * * * * * DtoDeclarationExp: h
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = ulong)
* * * * * * * * * llvm value for decl: %2 = alloca i64, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: h = 0LU | (ulong)(ulong = ulong)
* * * * * * * * * * VarExp::toElem: h @ ulong
* * * * * * * * * * * DtoSymbolAddress ('h' of type 'ulong')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * IntegerExp::toElem: 0LU @ ulong
* * * * * * * * * * * IntegerExp::toConstElem: 0LU @ ulong
* * * * * * * * * * * * value = i64 0
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %2 = alloca i64, align 8
* * * * * * * * * * * rhs: i64 0
* * * * * UnrolledLoopStatement::toIR():
* * * * * * ScopeStatement::toIR():
* * * * * * * CompoundStatement::toIR():
* * * * * * * * ExpStatement::toIR():
* * * * * * * * * DeclarationExp::toElem: (enum ulong i = 0LU;) | T=void
* * * * * * * * * * DtoDeclarationExp: i
* * * * * * * * * * * VarDeclaration
* * * * * * * * * * * Manifest constant, nothing to do.
* * * * * * * * ExpStatement::toIR():
* * * * * * * * * DeclarationExp::toElem: alias T = const(TypeInfo_Class);
| T=void
* * * * * * * * * * DtoDeclarationExp: T
* * * * * * * * * * * Ignoring Symbol: alias
* * * * * * * * ExpStatement::toIR():
* * * * * * * * * AddAssignExp::toElem: h += typeid(const(TypeInfo_Class)).getHash(cast(const(void*))&p.classinfo) @ ulong
* * * * * * * * * * VarExp::toElem: h @ ulong
* * * * * * * * * * * DtoSymbolAddress ('h' of type 'ulong')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * CallExp::toElem: typeid(const(TypeInfo_Class)).getHash(cast(const(void*))&p.classinfo) @ ulong
* * * * * * * * * * * DotVarExp::toElem: typeid(const(TypeInfo_Class)).getHash @ const nothrow @safe ulong(const(void*) p)
* * * * * * * * * * * * Type::getTypeInfo(): const(TypeInfo_Class)
* * * * * * * * * * * * DtoSymbolAddress ('typeid(const(TypeInfo_Class))' of type 'object.TypeInfo_Const')
* * * * * * * * * * * * * TypeInfoDeclaration
* * * * * * * * * * * * * TypeInfoDeclaration_codegen(typeid(const(TypeInfo_Class)))
* * * * * * * * * * * * * * type = 'const(TypeInfo_Class)'
* * * * * * * * * * * * * * typeinfo mangle: _D27TypeInfo_xC14TypeInfo_Class6__initZ
* * * * * * * * * * * * * * Building type: object.TypeInfo_Const
* * * * * * * * * * * * * * * Building class type object.TypeInfo_Const @ object.d(1016)
* * * * * * * * * * * * * * * * Instance size: 24
* * * * * * * * * * * * * * * * Field priority for base: 1
* * * * * * * * * * * * * * * * class type: %object.TypeInfo_Const = type { [19 x i8*]*, i8*, %object.TypeInfo* }
* * * * * * * * * * * * * * TypeInfoConstDeclaration::llvmDefine() typeid(const(TypeInfo_Class))
* * * * * * * * * * * * * * * DtoResolveClass(object.TypeInfo_Const): object.d(1016)
* * * * * * * * * * * * * * * DtoTypeInfoOf(type = 'object.TypeInfo_Class', base='1')
* * * * * * * * * * * * * * * * Type::getTypeInfo(): object.TypeInfo_Class
* * * * * * * * * * * * * * * * * TypeInfoClassDeclaration_codegen(typeid(object.TypeInfo_Class))
* * * * * * * * * * * * * * * * TypeInfoClassDeclaration_codegen(typeid(object.TypeInfo_Class))
* * * * * * * * * * * * isMember = this is: object.TypeInfo_Const
* * * * * * * * * * * * DtoFunctionType(const nothrow @safe ulong(const(void*) p))
* * * * * * * * * * * * * x86-64 ABI: Transforming return type
* * * * * * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * * * * * Final function type: i64 (%object.TypeInfo_Const*, i8*)
* * * * * * * * * * * * DtoResolveFunction(object.TypeInfo_Const.getHash): object.d(1029)
* * * * * * * * * * * * * DtoDeclareFunction(object.TypeInfo_Const.getHash): object.d(1029)
* * * * * * * * * * * * * * Enter defineAsExternallyAvailable
* * * * * * * * * * * * * * * Cross-module inlining fully disabled.
* * * * * * * * * * * * * * isMember = this is: object.TypeInfo_Const
* * * * * * * * * * * * * * DtoFunctionType(const nothrow @safe ulong(const(void*) p))
* * * * * * * * * * * * * * func =
declare i64 @_D6object14TypeInfo_Const7getHashMxFNbNfxPvZm(%object.TypeInfo_Const*, i8*)
* * * * * * * * * * * * vthis: @_D27TypeInfo_xC14TypeInfo_Class6__initZ = linkonce_odr global %object.TypeInfo_Const { [19 x i8*]* @_D14TypeInfo_Const6__vtblZ, i8* null, %object.TypeInfo* bitcast (%object.TypeInfo_Class* @_D14TypeInfo_Class7__ClassZ to %object.TypeInfo*) }, comdat
* * * * * * * * * * * * funcval: %8 = load i8*, i8** %7, align 8
* * * * * * * * * * * * isMember = this is: object.TypeInfo_Const
* * * * * * * * * * * * DtoFunctionType(const nothrow @safe ulong(const(void*) p))
* * * * * * * * * * * * funcval casted: %9 = bitcast i8* %8 to i64 (%object.TypeInfo_Const*, i8*)*
* * * * * * * * * * * DtoCallFunction()
* * * * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * * CastExp::toElem: cast(const(void*))&p.classinfo @ const(void*)
* * * * * * * * * * * * * * * AddrExp::toElem: &p.classinfo @ const(TypeInfo_Class)*
* * * * * * * * * * * * * * * * DotVarExp::toElem: p.classinfo @ const(TypeInfo_Class)
* * * * * * * * * * * * * * * * * VarExp::toElem: p @ const(Interface)
* * * * * * * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'const(Interface)')
* * * * * * * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * * * * * * type: const(Interface)
* * * * * * * * * * * * * * * * * Indexing aggregate field object.Interface.classinfo:
* * * * * * * * * * * * * * * * * * Value: %10 = getelementptr inbounds %object.Interface, %object.Interface* %0, i32 0, i32 0
* * * * * * * * * * * * * * * * is nothing special
* * * * * * * * * * * * * * * * lval: %10 = getelementptr inbounds %object.Interface, %object.Interface* %0, i32 0, i32 0
* * * * * * * * * * * * * * * * Building type: const(TypeInfo_Class)*
* * * * * * * * * * * * * * * Casting from 'const(TypeInfo_Class)*' to 'const(void*)'
* * * * * * * * * * * * * * * * src: %10 = getelementptr inbounds %object.Interface, %object.Interface* %0, i32 0, i32 0
* * * * * * * * * * * * * * * * to type: i8*
* * * * * * * * * * * * Building type: const nothrow @safe ulong(const(void*) p)
* * * * * * * * * * * * * DtoFunctionType(const nothrow @safe ulong(const(void*) p))
* * * * * * * * * * * * * * x86-64 ABI: Transforming return type
* * * * * * * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * * * * * * Final function type: i64 (i8*)
* * * * * * * * * * * * doing normal arguments
* * * * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * * * @_D27TypeInfo_xC14TypeInfo_Class6__initZ = linkonce_odr global %object.TypeInfo_Const { [19 x i8*]* @_D14TypeInfo_Const6__vtblZ, i8* null, %object.TypeInfo* bitcast (%object.TypeInfo_Class* @_D14TypeInfo_Class7__ClassZ to %object.TypeInfo*) }, comdat
* * * * * * * * * * * * Function type: const nothrow @safe ulong(const(void*) p)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %2 = alloca i64, align 8
* * * * * * * * * * * rhs: %14 = add i64 %13, %12
* * * * * * ScopeStatement::toIR():
* * * * * * * CompoundStatement::toIR():
* * * * * * * * ExpStatement::toIR():
* * * * * * * * * DeclarationExp::toElem: (enum ulong i = 1LU;) | T=void
* * * * * * * * * * DtoDeclarationExp: i
* * * * * * * * * * * VarDeclaration
* * * * * * * * * * * Manifest constant, nothing to do.
* * * * * * * * ExpStatement::toIR():
* * * * * * * * * DeclarationExp::toElem: alias T = const(void*[]);
| T=void
* * * * * * * * * * DtoDeclarationExp: T
* * * * * * * * * * * Ignoring Symbol: alias
* * * * * * * * ExpStatement::toIR():
* * * * * * * * * AddAssignExp::toElem: h += typeid(const(void*[])).getHash(cast(const(void*))&p.vtbl) @ ulong
* * * * * * * * * * VarExp::toElem: h @ ulong
* * * * * * * * * * * DtoSymbolAddress ('h' of type 'ulong')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * CallExp::toElem: typeid(const(void*[])).getHash(cast(const(void*))&p.vtbl) @ ulong
* * * * * * * * * * * DotVarExp::toElem: typeid(const(void*[])).getHash @ const nothrow @safe ulong(const(void*) p)
* * * * * * * * * * * * Type::getTypeInfo(): const(void*[])
* * * * * * * * * * * * DtoSymbolAddress ('typeid(const(void*[]))' of type 'object.TypeInfo_Const')
* * * * * * * * * * * * * TypeInfoDeclaration
* * * * * * * * * * * * * TypeInfoDeclaration_codegen(typeid(const(void*[])))
* * * * * * * * * * * * * * type = 'const(void*[])'
* * * * * * * * * * * * * * typeinfo mangle: _D13TypeInfo_xAPv6__initZ
* * * * * * * * * * * * * * TypeInfoConstDeclaration::llvmDefine() typeid(const(void*[]))
* * * * * * * * * * * * * * * DtoTypeInfoOf(type = 'const(void*)[]', base='1')
* * * * * * * * * * * * * * * * Type::getTypeInfo(): const(void*)[]
* * * * * * * * * * * * * * * * * TypeInfoDeclaration_codegen(typeid(const(void*)[]))
* * * * * * * * * * * * * * * * * * type = 'const(void*)[]'
* * * * * * * * * * * * * * * * * * typeinfo mangle: _D13TypeInfo_AxPv6__initZ
* * * * * * * * * * * * * * * * * * Building type: object.TypeInfo_Array
* * * * * * * * * * * * * * * * * * * Building class type object.TypeInfo_Array @ object.d(836)
* * * * * * * * * * * * * * * * * * * * Instance size: 24
* * * * * * * * * * * * * * * * * * * * Field priority for value: 1
* * * * * * * * * * * * * * * * * * * * class type: %object.TypeInfo_Array = type { [19 x i8*]*, i8*, %object.TypeInfo* }
* * * * * * * * * * * * * * * * * * TypeInfoArrayDeclaration::llvmDefine() typeid(const(void*)[])
* * * * * * * * * * * * * * * * * * * DtoResolveClass(object.TypeInfo_Array): object.d(836)
* * * * * * * * * * * * * * * * * * * DtoTypeInfoOf(type = 'const(void*)', base='1')
* * * * * * * * * * * * * * * * * * * * Type::getTypeInfo(): const(void*)
* * * * * * * * * * * * * * * * * * * * * TypeInfoDeclaration_codegen(typeid(const(void*)))
* * * * * * * * * * * * * * * * * * * * * * type = 'const(void*)'
* * * * * * * * * * * * * * * * * * * * * * typeinfo mangle: _D12TypeInfo_xPv6__initZ
* * * * * * * * * * * * * * * * * * * * * * TypeInfoConstDeclaration::llvmDefine() typeid(const(void*))
* * * * * * * * * * * * * * * * * * * * * * * DtoTypeInfoOf(type = 'const(void)*', base='1')
* * * * * * * * * * * * * * * * * * * * * * * * Type::getTypeInfo(): const(void)*
* * * * * * * * * * * * * * * * * * * * * * * * * TypeInfoDeclaration_codegen(typeid(const(void)*))
* * * * * * * * * * * * * * * * * * * * * * * * * * type = 'const(void)*'
* * * * * * * * * * * * * * * * * * * * * * * * * * typeinfo mangle: _D12TypeInfo_Pxv6__initZ
* * * * * * * * * * * * * * * * * * * * * * * * * * Building type: object.TypeInfo_Pointer
* * * * * * * * * * * * * * * * * * * * * * * * * * * Building class type object.TypeInfo_Pointer @ object.d(708)
* * * * * * * * * * * * * * * * * * * * * * * * * * * * Instance size: 24
* * * * * * * * * * * * * * * * * * * * * * * * * * * * Field priority for m_next: 1
* * * * * * * * * * * * * * * * * * * * * * * * * * * * class type: %object.TypeInfo_Pointer = type { [19 x i8*]*, i8*, %object.TypeInfo* }
* * * * * * * * * * * * * * * * * * * * * * * * * * TypeInfoPointerDeclaration::llvmDefine() typeid(const(void)*)
* * * * * * * * * * * * * * * * * * * * * * * * * * * DtoResolveClass(object.TypeInfo_Pointer): object.d(708)
* * * * * * * * * * * * * * * * * * * * * * * * * * * DtoTypeInfoOf(type = 'const(void)', base='1')
* * * * * * * * * * * * * * * * * * * * * * * * * * * * Type::getTypeInfo(): const(void)
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * TypeInfoDeclaration_codegen(typeid(const(void)))
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * type = 'const(void)'
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * typeinfo mangle: _D11TypeInfo_xv6__initZ
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * TypeInfoConstDeclaration::llvmDefine() typeid(const(void))
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * DtoTypeInfoOf(type = 'void', base='1')
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Type::getTypeInfo(): void
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * TypeInfoDeclaration_codegen(typeid(void))
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * type = 'void'
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * typeinfo mangle: _D10TypeInfo_v6__initZ
* * * * * * * * * * * * * * * * * * * * * * * * * * * * TypeInfoDeclaration_codegen(typeid(const(void)))
* * * * * * * * * * * * * * * * * * * * * * * * TypeInfoDeclaration_codegen(typeid(const(void)*))
* * * * * * * * * * * * * * * * * * * * TypeInfoDeclaration_codegen(typeid(const(void*)))
* * * * * * * * * * * * * * * * TypeInfoDeclaration_codegen(typeid(const(void*)[]))
* * * * * * * * * * * * vthis: @_D13TypeInfo_xAPv6__initZ = linkonce_odr global %object.TypeInfo_Const { [19 x i8*]* @_D14TypeInfo_Const6__vtblZ, i8* null, %object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D13TypeInfo_AxPv6__initZ to %object.TypeInfo*) }, comdat
* * * * * * * * * * * * funcval: %19 = load i8*, i8** %18, align 8
* * * * * * * * * * * * isMember = this is: object.TypeInfo_Const
* * * * * * * * * * * * DtoFunctionType(const nothrow @safe ulong(const(void*) p))
* * * * * * * * * * * * funcval casted: %20 = bitcast i8* %19 to i64 (%object.TypeInfo_Const*, i8*)*
* * * * * * * * * * * DtoCallFunction()
* * * * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * * CastExp::toElem: cast(const(void*))&p.vtbl @ const(void*)
* * * * * * * * * * * * * * * AddrExp::toElem: &p.vtbl @ const(void*[])*
* * * * * * * * * * * * * * * * DotVarExp::toElem: p.vtbl @ const(void*[])
* * * * * * * * * * * * * * * * * VarExp::toElem: p @ const(Interface)
* * * * * * * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'const(Interface)')
* * * * * * * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * * * * * * type: const(Interface)
* * * * * * * * * * * * * * * * * Indexing aggregate field object.Interface.vtbl:
* * * * * * * * * * * * * * * * * * Value: %21 = getelementptr inbounds %object.Interface, %object.Interface* %0, i32 0, i32 1
* * * * * * * * * * * * * * * * is nothing special
* * * * * * * * * * * * * * * * lval: %21 = getelementptr inbounds %object.Interface, %object.Interface* %0, i32 0, i32 1
* * * * * * * * * * * * * * * * Building type: const(void*[])*
* * * * * * * * * * * * * * * Casting from 'const(void*[])*' to 'const(void*)'
* * * * * * * * * * * * * * * * src: %21 = getelementptr inbounds %object.Interface, %object.Interface* %0, i32 0, i32 1
* * * * * * * * * * * * * * * * to type: i8*
* * * * * * * * * * * * doing normal arguments
* * * * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * * * @_D13TypeInfo_xAPv6__initZ = linkonce_odr global %object.TypeInfo_Const { [19 x i8*]* @_D14TypeInfo_Const6__vtblZ, i8* null, %object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D13TypeInfo_AxPv6__initZ to %object.TypeInfo*) }, comdat
* * * * * * * * * * * * Function type: const nothrow @safe ulong(const(void*) p)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %2 = alloca i64, align 8
* * * * * * * * * * * rhs: %25 = add i64 %24, %23
* * * * * * ScopeStatement::toIR():
* * * * * * * CompoundStatement::toIR():
* * * * * * * * ExpStatement::toIR():
* * * * * * * * * DeclarationExp::toElem: (enum ulong i = 2LU;) | T=void
* * * * * * * * * * DtoDeclarationExp: i
* * * * * * * * * * * VarDeclaration
* * * * * * * * * * * Manifest constant, nothing to do.
* * * * * * * * ExpStatement::toIR():
* * * * * * * * * DeclarationExp::toElem: alias T = const(ulong);
| T=void
* * * * * * * * * * DtoDeclarationExp: T
* * * * * * * * * * * Ignoring Symbol: alias
* * * * * * * * ExpStatement::toIR():
* * * * * * * * * AddAssignExp::toElem: h += typeid(const(ulong)).getHash(cast(const(void*))&p.offset) @ ulong
* * * * * * * * * * VarExp::toElem: h @ ulong
* * * * * * * * * * * DtoSymbolAddress ('h' of type 'ulong')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * CallExp::toElem: typeid(const(ulong)).getHash(cast(const(void*))&p.offset) @ ulong
* * * * * * * * * * * DotVarExp::toElem: typeid(const(ulong)).getHash @ const nothrow @safe ulong(const(void*) p)
* * * * * * * * * * * * Type::getTypeInfo(): const(ulong)
* * * * * * * * * * * * DtoSymbolAddress ('typeid(const(ulong))' of type 'object.TypeInfo_Const')
* * * * * * * * * * * * * TypeInfoDeclaration
* * * * * * * * * * * * * TypeInfoDeclaration_codegen(typeid(const(ulong)))
* * * * * * * * * * * * * * type = 'const(ulong)'
* * * * * * * * * * * * * * typeinfo mangle: _D11TypeInfo_xm6__initZ
* * * * * * * * * * * * * * TypeInfoConstDeclaration::llvmDefine() typeid(const(ulong))
* * * * * * * * * * * * * * * DtoTypeInfoOf(type = 'ulong', base='1')
* * * * * * * * * * * * * * * * Type::getTypeInfo(): ulong
* * * * * * * * * * * * * * * * TypeInfoDeclaration_codegen(typeid(ulong))
* * * * * * * * * * * * * * * * * type = 'ulong'
* * * * * * * * * * * * * * * * * typeinfo mangle: _D10TypeInfo_m6__initZ
* * * * * * * * * * * * vthis: @_D11TypeInfo_xm6__initZ = linkonce_odr global %object.TypeInfo_Const { [19 x i8*]* @_D14TypeInfo_Const6__vtblZ, i8* null, %object.TypeInfo* @_D10TypeInfo_m6__initZ }, comdat
* * * * * * * * * * * * funcval: %30 = load i8*, i8** %29, align 8
* * * * * * * * * * * * isMember = this is: object.TypeInfo_Const
* * * * * * * * * * * * DtoFunctionType(const nothrow @safe ulong(const(void*) p))
* * * * * * * * * * * * funcval casted: %31 = bitcast i8* %30 to i64 (%object.TypeInfo_Const*, i8*)*
* * * * * * * * * * * DtoCallFunction()
* * * * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * * CastExp::toElem: cast(const(void*))&p.offset @ const(void*)
* * * * * * * * * * * * * * * AddrExp::toElem: &p.offset @ const(ulong)*
* * * * * * * * * * * * * * * * DotVarExp::toElem: p.offset @ const(ulong)
* * * * * * * * * * * * * * * * * VarExp::toElem: p @ const(Interface)
* * * * * * * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'const(Interface)')
* * * * * * * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * * * * * * type: const(Interface)
* * * * * * * * * * * * * * * * * Indexing aggregate field object.Interface.offset:
* * * * * * * * * * * * * * * * * * Value: %32 = getelementptr inbounds %object.Interface, %object.Interface* %0, i32 0, i32 2
* * * * * * * * * * * * * * * * is nothing special
* * * * * * * * * * * * * * * * lval: %32 = getelementptr inbounds %object.Interface, %object.Interface* %0, i32 0, i32 2
* * * * * * * * * * * * * * * * Building type: const(ulong)*
* * * * * * * * * * * * * * * Casting from 'const(ulong)*' to 'const(void*)'
* * * * * * * * * * * * * * * * src: %32 = getelementptr inbounds %object.Interface, %object.Interface* %0, i32 0, i32 2
* * * * * * * * * * * * * * * * to type: i8*
* * * * * * * * * * * * doing normal arguments
* * * * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * * * @_D11TypeInfo_xm6__initZ = linkonce_odr global %object.TypeInfo_Const { [19 x i8*]* @_D14TypeInfo_Const6__vtblZ, i8* null, %object.TypeInfo* @_D10TypeInfo_m6__initZ }, comdat
* * * * * * * * * * * * Function type: const nothrow @safe ulong(const(void*) p)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %2 = alloca i64, align 8
* * * * * * * * * * * rhs: %36 = add i64 %35, %34
* * * * * ReturnStatement::toIR():
* * * * * * VarExp::toElem: h @ ulong
* * * * * * * DtoSymbolAddress ('h' of type 'ulong')
* * * * * * * * a normal variable
* StructDeclaration::codegen: 'object.OffsetTypeInfo'
* * Resolving struct type: OffsetTypeInfo (object.d(255))
* * VarDeclaration::codegen(): 'object.OffsetTypeInfo.offset'
* * * DtoResolveVariable(object.OffsetTypeInfo.offset)
* * VarDeclaration::codegen(): 'object.OffsetTypeInfo.ti'
* * * DtoResolveVariable(object.OffsetTypeInfo.ti)
* * Building default initializer for object.OffsetTypeInfo
* * * Creating initializer constant for OffsetTypeInfo
* * * * Field priority for offset: 1
* * * * Field priority for ti: 1
* * * * DtoConstExpInit(targetType = ulong, exp = 0LU)
* * * * * IntegerExp::toConstElem: 0LU @ ulong
* * * * * * value = i64 0
* * * * DtoConstExpInit(targetType = object.TypeInfo, exp = null)
* * * * * NullExp::toConstElem(type=object.TypeInfo): null
* * * * final initializer: %object.OffsetTypeInfo zeroinitializer
* * DtoTypeInfoOf(type = 'OffsetTypeInfo', base='0')
* * * Type::getTypeInfo(): OffsetTypeInfo
* * * * TypeInfoDeclaration_codegen(typeid(OffsetTypeInfo))
* * * * * type = 'OffsetTypeInfo'
* * * * * typeinfo mangle: _D33TypeInfo_S6object14OffsetTypeInfo6__initZ
* * * * * TypeInfoStructDeclaration::llvmDefine() typeid(OffsetTypeInfo)
* * * * * * DtoFunctionType(nothrow @trusted ulong(ref const(OffsetTypeInfo) p))
* * * * * * * Building type: const(OffsetTypeInfo)*
* * * * * * * x86-64 ABI: Transforming return type
* * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * Final function type: i64 (%object.OffsetTypeInfo*)
* * * * * * DtoResolveFunction(object.OffsetTypeInfo.__xtoHash):
* * * * * * * DtoDeclareFunction(object.OffsetTypeInfo.__xtoHash):
* * * * * * * * Enter defineAsExternallyAvailable
* * * * * * * * * Cross-module inlining fully disabled.
* * * * * * * * DtoFunctionType(nothrow @trusted ulong(ref const(OffsetTypeInfo) p))
* * * * * * * * func =
declare i64 @_D6object14OffsetTypeInfo9__xtoHashFNbNeKxSQBpQBlZm(%object.OffsetTypeInfo*)
* * * * * * DtoFunctionType(bool(ref const(OffsetTypeInfo) p, ref const(OffsetTypeInfo) q))
* * * * * * * x86-64 ABI: Transforming return type
* * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * Final function type: i1 (%object.OffsetTypeInfo*, %object.OffsetTypeInfo*)
* * * * * * DtoResolveFunction(object.OffsetTypeInfo.__xopEquals):
* * * * * * * DtoDeclareFunction(object.OffsetTypeInfo.__xopEquals):
* * * * * * * * Enter defineAsExternallyAvailable
* * * * * * * * * Cross-module inlining fully disabled.
* * * * * * * * DtoFunctionType(bool(ref const(OffsetTypeInfo) p, ref const(OffsetTypeInfo) q))
* * * * * * * * func =
declare i1 @_D6object14OffsetTypeInfo11__xopEqualsFKxSQBoQBkKxQjZb(%object.OffsetTypeInfo*, %object.OffsetTypeInfo*)
* * * * * * DtoTypeInfoOf(type = 'ulong', base='1')
* * * * * * * Type::getTypeInfo(): ulong
* * * * * * * TypeInfoDeclaration_codegen(typeid(ulong))
* * * * * * DtoTypeInfoOf(type = 'void*', base='1')
* * * * * * * Type::getTypeInfo(): void*
* * * * * * * TypeInfoDeclaration_codegen(typeid(void*))
* * * * * * * * type = 'void*'
* * * * * * * * typeinfo mangle: _D11TypeInfo_Pv6__initZ
* * * * * * * * TypeInfoPointerDeclaration::llvmDefine() typeid(void*)
* * * * * * * * * DtoTypeInfoOf(type = 'void', base='1')
* * * * * * * * * * Type::getTypeInfo(): void
* * * * * * * * * * TypeInfoDeclaration_codegen(typeid(void))
* * * TypeInfoDeclaration_codegen(typeid(OffsetTypeInfo))
* * DtoDefineFunction(object.OffsetTypeInfo.__xopEquals):
* * * Doing function body for: __xopEquals
* * * DtoCreateNestedContext for object.OffsetTypeInfo.__xopEquals
* * * * DtoCreateNestedContextType for object.OffsetTypeInfo.__xopEquals
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR():
* * * * * LogicalExp::toElem: p.offset == q.offset && opEquals(p.ti, q.ti) @ bool
* * * * * * EqualExp::toElem: p.offset == q.offset @ bool
* * * * * * * DotVarExp::toElem: p.offset @ const(ulong)
* * * * * * * * VarExp::toElem: p @ const(OffsetTypeInfo)
* * * * * * * * * DtoSymbolAddress ('p' of type 'const(OffsetTypeInfo)')
* * * * * * * * * * function param
* * * * * * * * * * type: const(OffsetTypeInfo)
* * * * * * * * Indexing aggregate field object.OffsetTypeInfo.offset:
* * * * * * * * * Value: %4 = getelementptr inbounds %object.OffsetTypeInfo, %object.OffsetTypeInfo* %1, i32 0, i32 0
* * * * * * * DotVarExp::toElem: q.offset @ const(ulong)
* * * * * * * * VarExp::toElem: q @ const(OffsetTypeInfo)
* * * * * * * * * DtoSymbolAddress ('q' of type 'const(OffsetTypeInfo)')
* * * * * * * * * * function param
* * * * * * * * * * type: const(OffsetTypeInfo)
* * * * * * * * Indexing aggregate field object.OffsetTypeInfo.offset:
* * * * * * * * * Value: %5 = getelementptr inbounds %object.OffsetTypeInfo, %object.OffsetTypeInfo* %0, i32 0, i32 0
* * * * * * * integral or pointer or interface
* * * * * * * lv: %6 = load i64, i64* %4
* * * * * * * rv: %7 = load i64, i64* %5
* * * * * * CallExp::toElem: opEquals(p.ti, q.ti) @ bool
* * * * * * * VarExp::toElem: opEquals @ @system bool(const(Object) lhs, const(Object) rhs)
* * * * * * * * DtoSymbolAddress ('opEquals' of type '@system bool(const(Object) lhs, const(Object) rhs)')
* * * * * * * * * FuncDeclaration
* * * * * * * DtoCallFunction()
* * * * * * * * Evaluating argument expressions
* * * * * * * * * DtoArgument
* * * * * * * * * * DotVarExp::toElem: p.ti @ const(Object)
* * * * * * * * * * * VarExp::toElem: p @ const(OffsetTypeInfo)
* * * * * * * * * * * * DtoSymbolAddress ('p' of type 'const(OffsetTypeInfo)')
* * * * * * * * * * * * * function param
* * * * * * * * * * * * * type: const(OffsetTypeInfo)
* * * * * * * * * * * Indexing aggregate field object.OffsetTypeInfo.ti:
* * * * * * * * * * * * Value: %10 = getelementptr inbounds %object.OffsetTypeInfo, %object.OffsetTypeInfo* %1, i32 0, i32 1
* * * * * * * * * DtoArgument
* * * * * * * * * * DotVarExp::toElem: q.ti @ const(Object)
* * * * * * * * * * * VarExp::toElem: q @ const(OffsetTypeInfo)
* * * * * * * * * * * * DtoSymbolAddress ('q' of type 'const(OffsetTypeInfo)')
* * * * * * * * * * * * * function param
* * * * * * * * * * * * * type: const(OffsetTypeInfo)
* * * * * * * * * * * Indexing aggregate field object.OffsetTypeInfo.ti:
* * * * * * * * * * * * Value: %12 = getelementptr inbounds %object.OffsetTypeInfo, %object.OffsetTypeInfo* %0, i32 0, i32 1
* * * * * * * * doing normal arguments
* * * * * * * * Arguments so far: (0)
* * * * * * * * Function type: @system bool(const(Object) lhs, const(Object) rhs)
* * DtoDefineFunction(object.OffsetTypeInfo.__xtoHash):
* * * Doing function body for: __xtoHash
* * * DtoCreateNestedContext for object.OffsetTypeInfo.__xtoHash
* * * * DtoCreateNestedContextType for object.OffsetTypeInfo.__xtoHash
* * * CompoundStatement::toIR():
* * * * CompoundStatement::toIR():
* * * * * ExpStatement::toIR():
* * * * * * DeclarationExp::toElem: (ulong h = 0LU;) | T=void
* * * * * * * DtoDeclarationExp: h
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = ulong)
* * * * * * * * * llvm value for decl: %2 = alloca i64, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: h = 0LU | (ulong)(ulong = ulong)
* * * * * * * * * * VarExp::toElem: h @ ulong
* * * * * * * * * * * DtoSymbolAddress ('h' of type 'ulong')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * IntegerExp::toElem: 0LU @ ulong
* * * * * * * * * * * IntegerExp::toConstElem: 0LU @ ulong
* * * * * * * * * * * * value = i64 0
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %2 = alloca i64, align 8
* * * * * * * * * * * rhs: i64 0
* * * * * UnrolledLoopStatement::toIR():
* * * * * * ScopeStatement::toIR():
* * * * * * * CompoundStatement::toIR():
* * * * * * * * ExpStatement::toIR():
* * * * * * * * * DeclarationExp::toElem: (enum ulong i = 0LU;) | T=void
* * * * * * * * * * DtoDeclarationExp: i
* * * * * * * * * * * VarDeclaration
* * * * * * * * * * * Manifest constant, nothing to do.
* * * * * * * * ExpStatement::toIR():
* * * * * * * * * DeclarationExp::toElem: alias T = const(ulong);
| T=void
* * * * * * * * * * DtoDeclarationExp: T
* * * * * * * * * * * Ignoring Symbol: alias
* * * * * * * * ExpStatement::toIR():
* * * * * * * * * AddAssignExp::toElem: h += typeid(const(ulong)).getHash(cast(const(void*))&p.offset) @ ulong
* * * * * * * * * * VarExp::toElem: h @ ulong
* * * * * * * * * * * DtoSymbolAddress ('h' of type 'ulong')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * CallExp::toElem: typeid(const(ulong)).getHash(cast(const(void*))&p.offset) @ ulong
* * * * * * * * * * * DotVarExp::toElem: typeid(const(ulong)).getHash @ const nothrow @safe ulong(const(void*) p)
* * * * * * * * * * * * Type::getTypeInfo(): const(ulong)
* * * * * * * * * * * * DtoSymbolAddress ('typeid(const(ulong))' of type 'object.TypeInfo_Const')
* * * * * * * * * * * * * TypeInfoDeclaration
* * * * * * * * * * * * vthis: @_D11TypeInfo_xm6__initZ = linkonce_odr global %object.TypeInfo_Const { [19 x i8*]* @_D14TypeInfo_Const6__vtblZ, i8* null, %object.TypeInfo* @_D10TypeInfo_m6__initZ }, comdat
* * * * * * * * * * * * funcval: %8 = load i8*, i8** %7, align 8
* * * * * * * * * * * * isMember = this is: object.TypeInfo_Const
* * * * * * * * * * * * DtoFunctionType(const nothrow @safe ulong(const(void*) p))
* * * * * * * * * * * * funcval casted: %9 = bitcast i8* %8 to i64 (%object.TypeInfo_Const*, i8*)*
* * * * * * * * * * * DtoCallFunction()
* * * * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * * CastExp::toElem: cast(const(void*))&p.offset @ const(void*)
* * * * * * * * * * * * * * * AddrExp::toElem: &p.offset @ const(ulong)*
* * * * * * * * * * * * * * * * DotVarExp::toElem: p.offset @ const(ulong)
* * * * * * * * * * * * * * * * * VarExp::toElem: p @ const(OffsetTypeInfo)
* * * * * * * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'const(OffsetTypeInfo)')
* * * * * * * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * * * * * * type: const(OffsetTypeInfo)
* * * * * * * * * * * * * * * * * Indexing aggregate field object.OffsetTypeInfo.offset:
* * * * * * * * * * * * * * * * * * Value: %10 = getelementptr inbounds %object.OffsetTypeInfo, %object.OffsetTypeInfo* %0, i32 0, i32 0
* * * * * * * * * * * * * * * * is nothing special
* * * * * * * * * * * * * * * * lval: %10 = getelementptr inbounds %object.OffsetTypeInfo, %object.OffsetTypeInfo* %0, i32 0, i32 0
* * * * * * * * * * * * * * * Casting from 'const(ulong)*' to 'const(void*)'
* * * * * * * * * * * * * * * * src: %10 = getelementptr inbounds %object.OffsetTypeInfo, %object.OffsetTypeInfo* %0, i32 0, i32 0
* * * * * * * * * * * * * * * * to type: i8*
* * * * * * * * * * * * doing normal arguments
* * * * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * * * @_D11TypeInfo_xm6__initZ = linkonce_odr global %object.TypeInfo_Const { [19 x i8*]* @_D14TypeInfo_Const6__vtblZ, i8* null, %object.TypeInfo* @_D10TypeInfo_m6__initZ }, comdat
* * * * * * * * * * * * Function type: const nothrow @safe ulong(const(void*) p)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %2 = alloca i64, align 8
* * * * * * * * * * * rhs: %14 = add i64 %13, %12
* * * * * * ScopeStatement::toIR():
* * * * * * * CompoundStatement::toIR():
* * * * * * * * ExpStatement::toIR():
* * * * * * * * * DeclarationExp::toElem: (enum ulong i = 1LU;) | T=void
* * * * * * * * * * DtoDeclarationExp: i
* * * * * * * * * * * VarDeclaration
* * * * * * * * * * * Manifest constant, nothing to do.
* * * * * * * * ExpStatement::toIR():
* * * * * * * * * DeclarationExp::toElem: alias T = const(TypeInfo);
| T=void
* * * * * * * * * * DtoDeclarationExp: T
* * * * * * * * * * * Ignoring Symbol: alias
* * * * * * * * ExpStatement::toIR():
* * * * * * * * * AddAssignExp::toElem: h += typeid(const(TypeInfo)).getHash(cast(const(void*))&p.ti) @ ulong
* * * * * * * * * * VarExp::toElem: h @ ulong
* * * * * * * * * * * DtoSymbolAddress ('h' of type 'ulong')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * CallExp::toElem: typeid(const(TypeInfo)).getHash(cast(const(void*))&p.ti) @ ulong
* * * * * * * * * * * DotVarExp::toElem: typeid(const(TypeInfo)).getHash @ const nothrow @safe ulong(const(void*) p)
* * * * * * * * * * * * Type::getTypeInfo(): const(TypeInfo)
* * * * * * * * * * * * DtoSymbolAddress ('typeid(const(TypeInfo))' of type 'object.TypeInfo_Const')
* * * * * * * * * * * * * TypeInfoDeclaration
* * * * * * * * * * * * * TypeInfoDeclaration_codegen(typeid(const(TypeInfo)))
* * * * * * * * * * * * * * type = 'const(TypeInfo)'
* * * * * * * * * * * * * * typeinfo mangle: _D20TypeInfo_xC8TypeInfo6__initZ
* * * * * * * * * * * * * * TypeInfoConstDeclaration::llvmDefine() typeid(const(TypeInfo))
* * * * * * * * * * * * * * * DtoTypeInfoOf(type = 'object.TypeInfo', base='1')
* * * * * * * * * * * * * * * * Type::getTypeInfo(): object.TypeInfo
* * * * * * * * * * * * * * * * * TypeInfoClassDeclaration_codegen(typeid(object.TypeInfo))
* * * * * * * * * * * * * * * * TypeInfoClassDeclaration_codegen(typeid(object.TypeInfo))
* * * * * * * * * * * * vthis: @_D20TypeInfo_xC8TypeInfo6__initZ = linkonce_odr global %object.TypeInfo_Const { [19 x i8*]* @_D14TypeInfo_Const6__vtblZ, i8* null, %object.TypeInfo* bitcast (%object.TypeInfo_Class* @_D8TypeInfo7__ClassZ to %object.TypeInfo*) }, comdat
* * * * * * * * * * * * funcval: %19 = load i8*, i8** %18, align 8
* * * * * * * * * * * * isMember = this is: object.TypeInfo_Const
* * * * * * * * * * * * DtoFunctionType(const nothrow @safe ulong(const(void*) p))
* * * * * * * * * * * * funcval casted: %20 = bitcast i8* %19 to i64 (%object.TypeInfo_Const*, i8*)*
* * * * * * * * * * * DtoCallFunction()
* * * * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * * CastExp::toElem: cast(const(void*))&p.ti @ const(void*)
* * * * * * * * * * * * * * * AddrExp::toElem: &p.ti @ const(TypeInfo)*
* * * * * * * * * * * * * * * * DotVarExp::toElem: p.ti @ const(TypeInfo)
* * * * * * * * * * * * * * * * * VarExp::toElem: p @ const(OffsetTypeInfo)
* * * * * * * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'const(OffsetTypeInfo)')
* * * * * * * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * * * * * * type: const(OffsetTypeInfo)
* * * * * * * * * * * * * * * * * Indexing aggregate field object.OffsetTypeInfo.ti:
* * * * * * * * * * * * * * * * * * Value: %21 = getelementptr inbounds %object.OffsetTypeInfo, %object.OffsetTypeInfo* %0, i32 0, i32 1
* * * * * * * * * * * * * * * * is nothing special
* * * * * * * * * * * * * * * * lval: %21 = getelementptr inbounds %object.OffsetTypeInfo, %object.OffsetTypeInfo* %0, i32 0, i32 1
* * * * * * * * * * * * * * * * Building type: const(TypeInfo)*
* * * * * * * * * * * * * * * Casting from 'const(TypeInfo)*' to 'const(void*)'
* * * * * * * * * * * * * * * * src: %21 = getelementptr inbounds %object.OffsetTypeInfo, %object.OffsetTypeInfo* %0, i32 0, i32 1
* * * * * * * * * * * * * * * * to type: i8*
* * * * * * * * * * * * doing normal arguments
* * * * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * * * @_D20TypeInfo_xC8TypeInfo6__initZ = linkonce_odr global %object.TypeInfo_Const { [19 x i8*]* @_D14TypeInfo_Const6__vtblZ, i8* null, %object.TypeInfo* bitcast (%object.TypeInfo_Class* @_D8TypeInfo7__ClassZ to %object.TypeInfo*) }, comdat
* * * * * * * * * * * * Function type: const nothrow @safe ulong(const(void*) p)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %2 = alloca i64, align 8
* * * * * * * * * * * rhs: %25 = add i64 %24, %23
* * * * * ReturnStatement::toIR():
* * * * * * VarExp::toElem: h @ ulong
* * * * * * * DtoSymbolAddress ('h' of type 'ulong')
* * * * * * * * a normal variable
* ClassDeclaration::codegen: 'object.TypeInfo'
* * DtoDefineFunction(object.TypeInfo.toString): object.d(262)
* * * isMember = this is: object.TypeInfo
* * * DtoFunctionType(const pure nothrow @safe string())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.TypeInfo*)
* * * DtoResolveFunction(object.TypeInfo.toString): object.d(262)
* * * * DtoDeclareFunction(object.TypeInfo.toString): object.d(262)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo
* * * * * DtoFunctionType(const pure nothrow @safe string())
* * * * * func =
declare { i64, i8* } @_D6object8TypeInfo8toStringMxFNaNbNfZAya(%object.TypeInfo*)
* * * Doing function body for: toString
* * * DtoCreateNestedContext for object.TypeInfo.toString
* * * * DtoCreateNestedContextType for object.TypeInfo.toString
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(263)
* * * * * DotVarExp::toElem: typeid(this).name @ string
* * * * * * ThisExp::toElem: this @ const(TypeInfo)
* * * * * * * normal this exp
* * * * * * Indexing aggregate field object.TypeInfo_Class.name:
* * * * * * * Value: %10 = getelementptr inbounds %object.TypeInfo_Class, %object.TypeInfo_Class* %9, i32 0, i32 3
* * DtoDefineFunction(object.TypeInfo.toHash): object.d(266)
* * * isMember = this is: object.TypeInfo
* * * DtoFunctionType(const nothrow @trusted ulong())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (%object.TypeInfo*)
* * * DtoResolveFunction(object.TypeInfo.toHash): object.d(266)
* * * * DtoDeclareFunction(object.TypeInfo.toHash): object.d(266)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo
* * * * * DtoFunctionType(const nothrow @trusted ulong())
* * * * * func =
declare i64 @_D6object8TypeInfo6toHashMxFNbNeZm(%object.TypeInfo*)
* * * Doing function body for: toHash
* * * DtoCreateNestedContext for object.TypeInfo.toHash
* * * * DtoCreateNestedContextType for object.TypeInfo.toHash
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(267)
* * * * * CastExp::toElem: cast(ulong)cast(immutable(char)*)typeid(this).name @ ulong
* * * * * * CastExp::toElem: cast(immutable(char)*)typeid(this).name @ immutable(char)*
* * * * * * * DotVarExp::toElem: typeid(this).name @ string
* * * * * * * * ThisExp::toElem: this @ const(TypeInfo)
* * * * * * * * * normal this exp
* * * * * * * * Indexing aggregate field object.TypeInfo_Class.name:
* * * * * * * * * Value: %10 = getelementptr inbounds %object.TypeInfo_Class, %object.TypeInfo_Class* %9, i32 0, i32 3
* * * * * * * Casting from 'string' to 'immutable(char)*'
* * * * * * * * DtoCastArray
* * * * * * * * * from array or sarray
* * * * * * * * * to pointer
* * * * * * * * * DtoArrayPtr
* * * * * * Casting from 'immutable(char)*' to 'ulong'
* * DtoDefineFunction(object.TypeInfo.opCmp): object.d(270)
* * * isMember = this is: object.TypeInfo
* * * DtoFunctionType(int(Object o))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i32 (%object.TypeInfo*, %object.Object*)
* * * DtoResolveFunction(object.TypeInfo.opCmp): object.d(270)
* * * * DtoDeclareFunction(object.TypeInfo.opCmp): object.d(270)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo
* * * * * DtoFunctionType(int(Object o))
* * * * * func =
declare i32 @_D6object8TypeInfo5opCmpMFC6ObjectZi(%object.TypeInfo*, %object.Object*)
* * * Doing function body for: opCmp
* * * DtoCreateNestedContext for object.TypeInfo.opCmp
* * * * DtoCreateNestedContextType for object.TypeInfo.opCmp
* * * CompoundStatement::toIR():
* * * * CompoundStatement::toIR(): object.d(270)
* * * * * IfStatement::toIR(): object.d(271)
* * * * * * IdentityExp::toElem: this is o @ bool
* * * * * * * ThisExp::toElem: this @ object.Object
* * * * * * * * normal this exp
* * * * * * * VarExp::toElem: o @ object.Object
* * * * * * * * DtoSymbolAddress ('o' of type 'object.Object')
* * * * * * * * * function param
* * * * * * * * * type: object.Object
* * * * * * ReturnStatement::toIR(): object.d(272)
* * * * * * * IntegerExp::toElem: 0 @ int
* * * * * * * * IntegerExp::toConstElem: 0 @ int
* * * * * * * * * value = i32 0
* * * * * IfStatement::toIR(): object.d(274)
* * * * * * IdentityExp::toElem: o is null @ bool
* * * * * * * VarExp::toElem: o @ object.Object
* * * * * * * * DtoSymbolAddress ('o' of type 'object.Object')
* * * * * * * * * function param
* * * * * * * * * type: object.Object
* * * * * * * NullExp::toElem(type=object.Object): null
* * * * * * * * NullExp::toConstElem(type=object.Object): null
* * * * * * ReturnStatement::toIR(): object.d(275)
* * * * * * * IntegerExp::toElem: 1 @ int
* * * * * * * * IntegerExp::toConstElem: 1 @ int
* * * * * * * * * value = i32 1
* * * * * ReturnStatement::toIR(): object.d(277)
* * * * * * CastExp::toElem: cast(int)(this.toString() == (cast(TypeInfo)o).toString()) @ int
* * * * * * * EqualExp::toElem: this.toString() == (cast(TypeInfo)o).toString() @ bool
* * * * * * * * CallExp::toElem: this.toString() @ string
* * * * * * * * * DotVarExp::toElem: this.toString @ const pure nothrow @safe string()
* * * * * * * * * * ThisExp::toElem: this @ object.TypeInfo
* * * * * * * * * * * normal this exp
* * * * * * * * * * vthis: %18 = load %object.TypeInfo*, %object.TypeInfo** %3
* * * * * * * * * * funcval: %22 = load i8*, i8** %21, align 8
* * * * * * * * * * isMember = this is: object.TypeInfo
* * * * * * * * * * DtoFunctionType(const pure nothrow @safe string())
* * * * * * * * * * funcval casted: %23 = bitcast i8* %22 to { i64, i8* } (%object.TypeInfo*)*
* * * * * * * * * DtoCallFunction()
* * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * Building type: const pure nothrow @safe string()
* * * * * * * * * * * DtoFunctionType(const pure nothrow @safe string())
* * * * * * * * * * * * x86-64 ABI: Transforming return type
* * * * * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * * * * Final function type: { i64, i8* } ()
* * * * * * * * * * doing normal arguments
* * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * %24 = load %object.TypeInfo*, %object.TypeInfo** %3
* * * * * * * * * * Function type: const pure nothrow @safe string()
* * * * * * * * CallExp::toElem: (cast(TypeInfo)o).toString() @ string
* * * * * * * * * DotVarExp::toElem: (cast(TypeInfo)o).toString @ const pure nothrow @safe string()
* * * * * * * * * * CastExp::toElem: cast(TypeInfo)o @ object.TypeInfo
* * * * * * * * * * * VarExp::toElem: o @ object.Object
* * * * * * * * * * * * DtoSymbolAddress ('o' of type 'object.Object')
* * * * * * * * * * * * * function param
* * * * * * * * * * * * * type: object.Object
* * * * * * * * * * * Casting from 'object.Object' to 'object.TypeInfo'
* * * * * * * * * * * * DtoCastClass(object.Object, object.TypeInfo)
* * * * * * * * * * * * * dynamic up cast
* * * * * * * * * * vthis: %28 = bitcast i8* %27 to %object.TypeInfo*
* * * * * * * * * * funcval: %32 = load i8*, i8** %31, align 8
* * * * * * * * * * isMember = this is: object.TypeInfo
* * * * * * * * * * DtoFunctionType(const pure nothrow @safe string())
* * * * * * * * * * funcval casted: %33 = bitcast i8* %32 to { i64, i8* } (%object.TypeInfo*)*
* * * * * * * * * DtoCallFunction()
* * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * doing normal arguments
* * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * %28 = bitcast i8* %27 to %object.TypeInfo*
* * * * * * * * * * Function type: const pure nothrow @safe string()
* * * * * * * * static or dynamic array
* * * * * * * * Comparing arrays using memcmp
* * * * * * * * DtoArrayPtr
* * * * * * * * DtoArrayPtr
* * * * * * * * DtoArrayLen
* * * * * * * * DtoArrayLen
* * * * * * * Casting from 'bool' to 'int'
* * * * * * * * cast to: i32
* * DtoDefineFunction(object.TypeInfo.opEquals): object.d(280)
* * * isMember = this is: object.TypeInfo
* * * DtoFunctionType(bool(Object o))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i1 (%object.TypeInfo*, %object.Object*)
* * * DtoResolveFunction(object.TypeInfo.opEquals): object.d(280)
* * * * DtoDeclareFunction(object.TypeInfo.opEquals): object.d(280)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo
* * * * * DtoFunctionType(bool(Object o))
* * * * * func =
declare i1 @_D6object8TypeInfo8opEqualsMFC6ObjectZb(%object.TypeInfo*, %object.Object*)
* * * Doing function body for: opEquals
* * * DtoCreateNestedContext for object.TypeInfo.opEquals
* * * * DtoCreateNestedContextType for object.TypeInfo.opEquals
* * * CompoundStatement::toIR():
* * * * CompoundStatement::toIR(): object.d(280)
* * * * * IfStatement::toIR(): object.d(281)
* * * * * * IdentityExp::toElem: this is o @ bool
* * * * * * * ThisExp::toElem: this @ object.Object
* * * * * * * * normal this exp
* * * * * * * VarExp::toElem: o @ object.Object
* * * * * * * * DtoSymbolAddress ('o' of type 'object.Object')
* * * * * * * * * function param
* * * * * * * * * type: object.Object
* * * * * * ReturnStatement::toIR(): object.d(282)
* * * * * * * IntegerExp::toElem: true @ bool
* * * * * * * * IntegerExp::toConstElem: true @ bool
* * * * * * * * * value = i1 true
* * * * * ReturnStatement::toIR(): object.d(284)
* * * * * * LogicalExp::toElem: o && this.toString() == (cast(TypeInfo)o).toString() @ bool
* * * * * * * VarExp::toElem: o @ object.Object
* * * * * * * * DtoSymbolAddress ('o' of type 'object.Object')
* * * * * * * * * function param
* * * * * * * * * type: object.Object
* * * * * * * Casting from 'object.Object' to 'bool'
* * * * * * * * DtoCastClass(object.Object, bool)
* * * * * * * * * to bool
* * * * * * * EqualExp::toElem: this.toString() == (cast(TypeInfo)o).toString() @ bool
* * * * * * * * CallExp::toElem: this.toString() @ string
* * * * * * * * * DotVarExp::toElem: this.toString @ const pure nothrow @safe string()
* * * * * * * * * * ThisExp::toElem: this @ object.TypeInfo
* * * * * * * * * * * normal this exp
* * * * * * * * * * vthis: %16 = load %object.TypeInfo*, %object.TypeInfo** %3
* * * * * * * * * * funcval: %20 = load i8*, i8** %19, align 8
* * * * * * * * * * isMember = this is: object.TypeInfo
* * * * * * * * * * DtoFunctionType(const pure nothrow @safe string())
* * * * * * * * * * funcval casted: %21 = bitcast i8* %20 to { i64, i8* } (%object.TypeInfo*)*
* * * * * * * * * DtoCallFunction()
* * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * doing normal arguments
* * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * %22 = load %object.TypeInfo*, %object.TypeInfo** %3
* * * * * * * * * * Function type: const pure nothrow @safe string()
* * * * * * * * CallExp::toElem: (cast(TypeInfo)o).toString() @ string
* * * * * * * * * DotVarExp::toElem: (cast(TypeInfo)o).toString @ const pure nothrow @safe string()
* * * * * * * * * * CastExp::toElem: cast(TypeInfo)o @ object.TypeInfo
* * * * * * * * * * * VarExp::toElem: o @ object.Object
* * * * * * * * * * * * DtoSymbolAddress ('o' of type 'object.Object')
* * * * * * * * * * * * * function param
* * * * * * * * * * * * * type: object.Object
* * * * * * * * * * * Casting from 'object.Object' to 'object.TypeInfo'
* * * * * * * * * * * * DtoCastClass(object.Object, object.TypeInfo)
* * * * * * * * * * * * * dynamic up cast
* * * * * * * * * * vthis: %26 = bitcast i8* %25 to %object.TypeInfo*
* * * * * * * * * * funcval: %30 = load i8*, i8** %29, align 8
* * * * * * * * * * isMember = this is: object.TypeInfo
* * * * * * * * * * DtoFunctionType(const pure nothrow @safe string())
* * * * * * * * * * funcval casted: %31 = bitcast i8* %30 to { i64, i8* } (%object.TypeInfo*)*
* * * * * * * * * DtoCallFunction()
* * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * doing normal arguments
* * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * %26 = bitcast i8* %25 to %object.TypeInfo*
* * * * * * * * * * Function type: const pure nothrow @safe string()
* * * * * * * * static or dynamic array
* * * * * * * * Comparing arrays using memcmp
* * * * * * * * DtoArrayPtr
* * * * * * * * DtoArrayPtr
* * * * * * * * DtoArrayLen
* * * * * * * * DtoArrayLen
* * DtoDefineFunction(object.TypeInfo.getHash): object.d(288)
* * * isMember = this is: object.TypeInfo
* * * DtoFunctionType(const nothrow @trusted ulong(const(void*) p))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (%object.TypeInfo*, i8*)
* * * DtoResolveFunction(object.TypeInfo.getHash): object.d(288)
* * * * DtoDeclareFunction(object.TypeInfo.getHash): object.d(288)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo
* * * * * DtoFunctionType(const nothrow @trusted ulong(const(void*) p))
* * * * * func =
declare i64 @_D6object8TypeInfo7getHashMxFNbNexPvZm(%object.TypeInfo*, i8*)
* * * Doing function body for: getHash
* * * DtoCreateNestedContext for object.TypeInfo.getHash
* * * * DtoCreateNestedContextType for object.TypeInfo.getHash
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(289)
* * * * * CastExp::toElem: cast(ulong)p @ ulong
* * * * * * VarExp::toElem: p @ const(void*)
* * * * * * * DtoSymbolAddress ('p' of type 'const(void*)')
* * * * * * * * function param
* * * * * * * * type: const(void*)
* * * * * * Casting from 'const(void*)' to 'ulong'
* * DtoDefineFunction(object.TypeInfo.equals): object.d(293)
* * * isMember = this is: object.TypeInfo
* * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i1 (%object.TypeInfo*, i8*, i8*)
* * * DtoResolveFunction(object.TypeInfo.equals): object.d(293)
* * * * DtoDeclareFunction(object.TypeInfo.equals): object.d(293)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo
* * * * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2))
* * * * * func =
declare i1 @_D6object8TypeInfo6equalsMxFxPvxQdZb(%object.TypeInfo*, i8*, i8*)
* * * Doing function body for: equals
* * * DtoCreateNestedContext for object.TypeInfo.equals
* * * * DtoCreateNestedContextType for object.TypeInfo.equals
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(294)
* * * * * IdentityExp::toElem: p1 is p2 @ bool
* * * * * * VarExp::toElem: p1 @ const(void*)
* * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)')
* * * * * * * * function param
* * * * * * * * type: const(void*)
* * * * * * VarExp::toElem: p2 @ const(void*)
* * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)')
* * * * * * * * function param
* * * * * * * * type: const(void*)
* * DtoDefineFunction(object.TypeInfo.compare): object.d(298)
* * * isMember = this is: object.TypeInfo
* * * DtoFunctionType(const int(const(void*) p1, const(void*) p2))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i32 (%object.TypeInfo*, i8*, i8*)
* * * DtoResolveFunction(object.TypeInfo.compare): object.d(298)
* * * * DtoDeclareFunction(object.TypeInfo.compare): object.d(298)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo
* * * * * DtoFunctionType(const int(const(void*) p1, const(void*) p2))
* * * * * func =
declare i32 @_D6object8TypeInfo7compareMxFxPvxQdZi(%object.TypeInfo*, i8*, i8*)
* * * Doing function body for: compare
* * * DtoCreateNestedContext for object.TypeInfo.compare
* * * * DtoCreateNestedContextType for object.TypeInfo.compare
* * * CompoundStatement::toIR():
* * * * IfStatement::toIR(): object.d(299)
* * * * * CmpExp::toElem: p1 < p2 @ bool
* * * * * * VarExp::toElem: p1 @ const(void*)
* * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)')
* * * * * * * * function param
* * * * * * * * type: const(void*)
* * * * * * VarExp::toElem: p2 @ const(void*)
* * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)')
* * * * * * * * function param
* * * * * * * * type: const(void*)
* * * * * * type 1: %8 = load i8*, i8** %5
* * * * * * type 2: %9 = load i8*, i8** %6
* * * * * ReturnStatement::toIR(): object.d(300)
* * * * * * IntegerExp::toElem: -1 @ int
* * * * * * * IntegerExp::toConstElem: -1 @ int
* * * * * * * * value = i32 -1
* * * * * IfStatement::toIR(): object.d(301)
* * * * * * CmpExp::toElem: p1 > p2 @ bool
* * * * * * * VarExp::toElem: p1 @ const(void*)
* * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)')
* * * * * * * * * function param
* * * * * * * * * type: const(void*)
* * * * * * * VarExp::toElem: p2 @ const(void*)
* * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)')
* * * * * * * * * function param
* * * * * * * * * type: const(void*)
* * * * * * * type 1: %14 = load i8*, i8** %5
* * * * * * * type 2: %15 = load i8*, i8** %6
* * * * * * ReturnStatement::toIR(): object.d(302)
* * * * * * * IntegerExp::toElem: 1 @ int
* * * * * * * * IntegerExp::toConstElem: 1 @ int
* * * * * * * * * value = i32 1
* * * * * * ReturnStatement::toIR(): object.d(304)
* * * * * * * IntegerExp::toElem: 0 @ int
* * * * * * * * IntegerExp::toConstElem: 0 @ int
* * * * * * * * * value = i32 0
* * DtoDefineFunction(object.TypeInfo.tsize): object.d(308)
* * * isMember = this is: object.TypeInfo
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (%object.TypeInfo*)
* * * DtoResolveFunction(object.TypeInfo.tsize): object.d(308)
* * * * DtoDeclareFunction(object.TypeInfo.tsize): object.d(308)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * func =
declare i64 @_D6object8TypeInfo5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo*)
* * * Doing function body for: tsize
* * * DtoCreateNestedContext for object.TypeInfo.tsize
* * * * DtoCreateNestedContextType for object.TypeInfo.tsize
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(309)
* * * * * IntegerExp::toElem: 0LU @ ulong
* * * * * * IntegerExp::toConstElem: 0LU @ ulong
* * * * * * * value = i64 0
* * DtoDefineFunction(object.TypeInfo.swap): object.d(313)
* * * isMember = this is: object.TypeInfo
* * * DtoFunctionType(const void(void* p1, void* p2))
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: void (%object.TypeInfo*, i8*, i8*)
* * * DtoResolveFunction(object.TypeInfo.swap): object.d(313)
* * * * DtoDeclareFunction(object.TypeInfo.swap): object.d(313)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo
* * * * * DtoFunctionType(const void(void* p1, void* p2))
* * * * * func =
declare void @_D6object8TypeInfo4swapMxFPvQcZv(%object.TypeInfo*, i8*, i8*)
* * * Doing function body for: swap
* * * DtoCreateNestedContext for object.TypeInfo.swap
* * * * DtoCreateNestedContextType for object.TypeInfo.swap
* * * CompoundStatement::toIR():
* * * * CompoundStatement::toIR(): object.d(313)
* * * * * ExpStatement::toIR(): object.d(314)
* * * * * * DeclarationExp::toElem: (ulong size = this.tsize();) | T=void
* * * * * * * DtoDeclarationExp: size
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = ulong)
* * * * * * * * * llvm value for decl: %7 = alloca i64, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: size = this.tsize() | (ulong)(ulong = ulong)
* * * * * * * * * * VarExp::toElem: size @ ulong
* * * * * * * * * * * DtoSymbolAddress ('size' of type 'ulong')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * CallExp::toElem: this.tsize() @ ulong
* * * * * * * * * * * DotVarExp::toElem: this.tsize @ const pure nothrow @nogc @property @safe ulong()
* * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo)
* * * * * * * * * * * * * normal this exp
* * * * * * * * * * * * vthis: %9 = load %object.TypeInfo*, %object.TypeInfo** %4
* * * * * * * * * * * * funcval: %13 = load i8*, i8** %12, align 8
* * * * * * * * * * * * isMember = this is: object.TypeInfo
* * * * * * * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * * * * * * * * funcval casted: %14 = bitcast i8* %13 to i64 (%object.TypeInfo*)*
* * * * * * * * * * * DtoCallFunction()
* * * * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * * Building type: const pure nothrow @nogc @property @safe ulong()
* * * * * * * * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * * * * * * * * * * x86-64 ABI: Transforming return type
* * * * * * * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * * * * * * Final function type: i64 ()
* * * * * * * * * * * * doing normal arguments
* * * * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * * * %15 = load %object.TypeInfo*, %object.TypeInfo** %4
* * * * * * * * * * * * Function type: const pure nothrow @nogc @property @safe ulong()
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %7 = alloca i64, align 8
* * * * * * * * * * * rhs: %16 = call i64 %14(%object.TypeInfo* nonnull %15)
* * * * * ExpStatement::toIR(): object.d(315)
* * * * * * DeclarationExp::toElem: (ubyte* b1 = cast(ubyte*)p1;) | T=void
* * * * * * * DtoDeclarationExp: b1
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = ubyte*)
* * * * * * * * * Building type: ubyte*
* * * * * * * * * * Building type: ubyte
* * * * * * * * * llvm value for decl: %8 = alloca i8*, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: b1 = cast(ubyte*)p1 | (ubyte*)(ubyte* = ubyte*)
* * * * * * * * * * VarExp::toElem: b1 @ ubyte*
* * * * * * * * * * * DtoSymbolAddress ('b1' of type 'ubyte*')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * CastExp::toElem: cast(ubyte*)p1 @ ubyte*
* * * * * * * * * * * VarExp::toElem: p1 @ void*
* * * * * * * * * * * * DtoSymbolAddress ('p1' of type 'void*')
* * * * * * * * * * * * * function param
* * * * * * * * * * * * * type: void*
* * * * * * * * * * * Casting from 'void*' to 'ubyte*'
* * * * * * * * * * * * src: %18 = load i8*, i8** %5
* * * * * * * * * * * * to type: i8*
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %8 = alloca i8*, align 8
* * * * * * * * * * * rhs: %18 = load i8*, i8** %5
* * * * * ExpStatement::toIR(): object.d(316)
* * * * * * DeclarationExp::toElem: (ubyte* b2 = cast(ubyte*)p2;) | T=void
* * * * * * * DtoDeclarationExp: b2
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = ubyte*)
* * * * * * * * * llvm value for decl: %9 = alloca i8*, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: b2 = cast(ubyte*)p2 | (ubyte*)(ubyte* = ubyte*)
* * * * * * * * * * VarExp::toElem: b2 @ ubyte*
* * * * * * * * * * * DtoSymbolAddress ('b2' of type 'ubyte*')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * CastExp::toElem: cast(ubyte*)p2 @ ubyte*
* * * * * * * * * * * VarExp::toElem: p2 @ void*
* * * * * * * * * * * * DtoSymbolAddress ('p2' of type 'void*')
* * * * * * * * * * * * * function param
* * * * * * * * * * * * * type: void*
* * * * * * * * * * * Casting from 'void*' to 'ubyte*'
* * * * * * * * * * * * src: %20 = load i8*, i8** %6
* * * * * * * * * * * * to type: i8*
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %9 = alloca i8*, align 8
* * * * * * * * * * * rhs: %20 = load i8*, i8** %6
* * * * * ForStatement::toIR(): object.d(318)
* * * * * * PostExp::toElem: size-- @ ulong
* * * * * * * VarExp::toElem: size @ ulong
* * * * * * * * DtoSymbolAddress ('size' of type 'ulong')
* * * * * * * * * a normal variable
* * * * * * * IntegerExp::toElem: 1LU @ ulong
* * * * * * * * IntegerExp::toConstElem: 1LU @ ulong
* * * * * * * * * value = i64 1
* * * * * * Casting from 'ulong' to 'bool'
* * * * * * ScopeStatement::toIR(): object.d(318)
* * * * * * * CompoundStatement::toIR(): object.d(318)
* * * * * * * * ExpStatement::toIR(): object.d(319)
* * * * * * * * * DeclarationExp::toElem: (ubyte tmp = *b1;) | T=void
* * * * * * * * * * DtoDeclarationExp: tmp
* * * * * * * * * * * VarDeclaration
* * * * * * * * * * * DtoVarDeclaration(vdtype = ubyte)
* * * * * * * * * * * * llvm value for decl: %10 = alloca i8, align 1
* * * * * * * * * * * * expression initializer
* * * * * * * * * * * * AssignExp::toElem: tmp = *b1 | (ubyte)(ubyte = ubyte)
* * * * * * * * * * * * * VarExp::toElem: tmp @ ubyte
* * * * * * * * * * * * * * DtoSymbolAddress ('tmp' of type 'ubyte')
* * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * PtrExp::toElem: *b1 @ ubyte
* * * * * * * * * * * * * * VarExp::toElem: b1 @ ubyte*
* * * * * * * * * * * * * * * DtoSymbolAddress ('b1' of type 'ubyte*')
* * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * * * * * * * DtoAssign()
* * * * * * * * * * * * * * lhs: %10 = alloca i8, align 1
* * * * * * * * * * * * * * rhs: %28 = load i8, i8* %27
* * * * * * * * ExpStatement::toIR(): object.d(320)
* * * * * * * * * AssignExp::toElem: *b1 = *b2 | (ubyte)(ubyte = ubyte)
* * * * * * * * * * PtrExp::toElem: *b1 @ ubyte
* * * * * * * * * * * VarExp::toElem: b1 @ ubyte*
* * * * * * * * * * * * DtoSymbolAddress ('b1' of type 'ubyte*')
* * * * * * * * * * * * * a normal variable
* * * * * * * * * * PtrExp::toElem: *b2 @ ubyte
* * * * * * * * * * * VarExp::toElem: b2 @ ubyte*
* * * * * * * * * * * * DtoSymbolAddress ('b2' of type 'ubyte*')
* * * * * * * * * * * * * a normal variable
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %29 = load i8*, i8** %8
* * * * * * * * * * * rhs: %31 = load i8, i8* %30
* * * * * * * * ExpStatement::toIR(): object.d(321)
* * * * * * * * * AssignExp::toElem: *b2 = tmp | (ubyte)(ubyte = ubyte)
* * * * * * * * * * PtrExp::toElem: *b2 @ ubyte
* * * * * * * * * * * VarExp::toElem: b2 @ ubyte*
* * * * * * * * * * * * DtoSymbolAddress ('b2' of type 'ubyte*')
* * * * * * * * * * * * * a normal variable
* * * * * * * * * * VarExp::toElem: tmp @ ubyte
* * * * * * * * * * * DtoSymbolAddress ('tmp' of type 'ubyte')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %32 = load i8*, i8** %9
* * * * * * * * * * * rhs: %33 = load i8, i8* %10
* * * * * * * * ExpStatement::toIR(): object.d(322)
* * * * * * * * * PostExp::toElem: b1++ @ ubyte*
* * * * * * * * * * VarExp::toElem: b1 @ ubyte*
* * * * * * * * * * * DtoSymbolAddress ('b1' of type 'ubyte*')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * IntegerExp::toElem: 1L @ long
* * * * * * * * * * * IntegerExp::toConstElem: 1L @ long
* * * * * * * * * * * * value = i64 1
* * * * * * * * ExpStatement::toIR(): object.d(323)
* * * * * * * * * PostExp::toElem: b2++ @ ubyte*
* * * * * * * * * * VarExp::toElem: b2 @ ubyte*
* * * * * * * * * * * DtoSymbolAddress ('b2' of type 'ubyte*')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * IntegerExp::toElem: 1L @ long
* * * * * * * * * * * IntegerExp::toConstElem: 1L @ long
* * * * * * * * * * * * value = i64 1
* * DtoDefineFunction(object.TypeInfo.next): object.d(328)
* * * isMember = this is: object.TypeInfo
* * * DtoFunctionType(inout pure nothrow @nogc @property inout(TypeInfo)())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: %object.TypeInfo* (%object.TypeInfo*)
* * * DtoResolveFunction(object.TypeInfo.next): object.d(328)
* * * * DtoDeclareFunction(object.TypeInfo.next): object.d(328)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo
* * * * * DtoFunctionType(inout pure nothrow @nogc @property inout(TypeInfo)())
* * * * * func =
declare %object.TypeInfo* @_D6object8TypeInfo4nextMNgFNaNbNdNiZNgCQBe(%object.TypeInfo*)
* * * Doing function body for: next
* * * DtoCreateNestedContext for object.TypeInfo.next
* * * * DtoCreateNestedContextType for object.TypeInfo.next
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(329)
* * * * * NullExp::toElem(type=inout(TypeInfo)): null
* * * * * * NullExp::toConstElem(type=inout(TypeInfo)): null
* * DtoDefineFunction(object.TypeInfo.initializer): object.d(335)
* * * isMember = this is: object.TypeInfo
* * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]())
* * * * Building type: const(void)[]
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.TypeInfo*)
* * * DtoResolveFunction(object.TypeInfo.initializer): object.d(335)
* * * DtoDeclareFunction(object.TypeInfo.initializer): object.d(335)
* * * * Enter defineAsExternallyAvailable
* * * * * Cross-module inlining fully disabled.
* * * * isMember = this is: object.TypeInfo
* * * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]())
* * * * func =
declare { i64, i8* } @_D6object8TypeInfo11initializerMxFNaNbNiNfZAxv(%object.TypeInfo*)
* * DtoDefineFunction(object.TypeInfo.flags): object.d(338)
* * * isMember = this is: object.TypeInfo
* * * DtoFunctionType(const pure nothrow @nogc @property @safe uint())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i32 (%object.TypeInfo*)
* * * DtoResolveFunction(object.TypeInfo.flags): object.d(338)
* * * * DtoDeclareFunction(object.TypeInfo.flags): object.d(338)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe uint())
* * * * * func =
declare i32 @_D6object8TypeInfo5flagsMxFNaNbNdNiNfZk(%object.TypeInfo*)
* * * Doing function body for: flags
* * * DtoCreateNestedContext for object.TypeInfo.flags
* * * * DtoCreateNestedContextType for object.TypeInfo.flags
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(339)
* * * * * IntegerExp::toElem: 0u @ uint
* * * * * * IntegerExp::toConstElem: 0u @ uint
* * * * * * * value = i32 0
* * DtoDefineFunction(object.TypeInfo.offTi): object.d(343)
* * * isMember = this is: object.TypeInfo
* * * DtoFunctionType(const const(OffsetTypeInfo)[]())
* * * * Building type: const(OffsetTypeInfo)[]
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, %object.OffsetTypeInfo* } (%object.TypeInfo*)
* * * DtoResolveFunction(object.TypeInfo.offTi): object.d(343)
* * * * DtoDeclareFunction(object.TypeInfo.offTi): object.d(343)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo
* * * * * DtoFunctionType(const const(OffsetTypeInfo)[]())
* * * * * func =
declare { i64, %object.OffsetTypeInfo* } @_D6object8TypeInfo5offTiMxFZAxSQBd14OffsetTypeInfo(%object.TypeInfo*)
* * * Doing function body for: offTi
* * * DtoCreateNestedContext for object.TypeInfo.offTi
* * * * DtoCreateNestedContextType for object.TypeInfo.offTi
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(344)
* * * * * NullExp::toElem(type=const(OffsetTypeInfo)[]): null
* * * * * * NullExp::toConstElem(type=const(OffsetTypeInfo)[]): null
* * DtoDefineFunction(object.TypeInfo.destroy): object.d(348)
* * * isMember = this is: object.TypeInfo
* * * DtoFunctionType(const void(void* p))
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: void (%object.TypeInfo*, i8*)
* * * DtoResolveFunction(object.TypeInfo.destroy): object.d(348)
* * * * DtoDeclareFunction(object.TypeInfo.destroy): object.d(348)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo
* * * * * DtoFunctionType(const void(void* p))
* * * * * func =
declare void @_D6object8TypeInfo7destroyMxFPvZv(%object.TypeInfo*, i8*)
* * * Doing function body for: destroy
* * * DtoCreateNestedContext for object.TypeInfo.destroy
* * * * DtoCreateNestedContextType for object.TypeInfo.destroy
* * * CompoundStatement::toIR():
* * * * CompoundStatement::toIR(): object.d(348)
* * DtoDefineFunction(object.TypeInfo.postblit): object.d(352)
* * * isMember = this is: object.TypeInfo
* * * DtoFunctionType(const void(void* p))
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: void (%object.TypeInfo*, i8*)
* * * DtoResolveFunction(object.TypeInfo.postblit): object.d(352)
* * * * DtoDeclareFunction(object.TypeInfo.postblit): object.d(352)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo
* * * * * DtoFunctionType(const void(void* p))
* * * * * func =
declare void @_D6object8TypeInfo8postblitMxFPvZv(%object.TypeInfo*, i8*)
* * * Doing function body for: postblit
* * * DtoCreateNestedContext for object.TypeInfo.postblit
* * * * DtoCreateNestedContextType for object.TypeInfo.postblit
* * * CompoundStatement::toIR():
* * * * CompoundStatement::toIR(): object.d(352)
* * DtoDefineFunction(object.TypeInfo.talign): object.d(356)
* * * isMember = this is: object.TypeInfo
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (%object.TypeInfo*)
* * * DtoResolveFunction(object.TypeInfo.talign): object.d(356)
* * * * DtoDeclareFunction(object.TypeInfo.talign): object.d(356)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * func =
declare i64 @_D6object8TypeInfo6talignMxFNaNbNdNiNfZm(%object.TypeInfo*)
* * * Doing function body for: talign
* * * DtoCreateNestedContext for object.TypeInfo.talign
* * * * DtoCreateNestedContextType for object.TypeInfo.talign
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(357)
* * * * * CallExp::toElem: this.tsize() @ ulong
* * * * * * DotVarExp::toElem: this.tsize @ const pure nothrow @nogc @property @safe ulong()
* * * * * * * ThisExp::toElem: this @ const(TypeInfo)
* * * * * * * * normal this exp
* * * * * * * vthis: %4 = load %object.TypeInfo*, %object.TypeInfo** %2
* * * * * * * funcval: %8 = load i8*, i8** %7, align 8
* * * * * * * isMember = this is: object.TypeInfo
* * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * * * funcval casted: %9 = bitcast i8* %8 to i64 (%object.TypeInfo*)*
* * * * * * DtoCallFunction()
* * * * * * * Evaluating argument expressions
* * * * * * * doing normal arguments
* * * * * * * Arguments so far: (1)
* * * * * * * * %10 = load %object.TypeInfo*, %object.TypeInfo** %2
* * * * * * * Function type: const pure nothrow @nogc @property @safe ulong()
* * DtoDefineFunction(object.TypeInfo.argTypes): object.d(361)
* * * isMember = this is: object.TypeInfo
* * * DtoFunctionType(nothrow @safe int(out TypeInfo arg1, out TypeInfo arg2))
* * * * Building type: TypeInfo*
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i32 (%object.TypeInfo*, %object.TypeInfo**, %object.TypeInfo**)
* * * DtoResolveFunction(object.TypeInfo.argTypes): object.d(361)
* * * * DtoDeclareFunction(object.TypeInfo.argTypes): object.d(361)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo
* * * * * DtoFunctionType(nothrow @safe int(out TypeInfo arg1, out TypeInfo arg2))
* * * * * func =
declare i32 @_D6object8TypeInfo8argTypesMFNbNfJCQBaJQfZi(%object.TypeInfo*, %object.TypeInfo**, %object.TypeInfo**)
* * * Doing function body for: argTypes
* * * DtoCreateNestedContext for object.TypeInfo.argTypes
* * * * DtoCreateNestedContextType for object.TypeInfo.argTypes
* * * CompoundStatement::toIR():
* * * * ExpStatement::toIR():
* * * * * AssignExp::toElem: arg1 = null | (object.TypeInfo)(object.TypeInfo = object.TypeInfo)
* * * * * * VarExp::toElem: arg1 @ object.TypeInfo
* * * * * * * DtoSymbolAddress ('arg1' of type 'object.TypeInfo')
* * * * * * * * function param
* * * * * * * * type: object.TypeInfo
* * * * * * NullExp::toElem(type=object.TypeInfo): null
* * * * * * * NullExp::toConstElem(type=object.TypeInfo): null
* * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * DtoAssign()
* * * * * * * l : %object.TypeInfo** %2
* * * * * * * r : %object.TypeInfo* null
* * * * ExpStatement::toIR():
* * * * * AssignExp::toElem: arg2 = null | (object.TypeInfo)(object.TypeInfo = object.TypeInfo)
* * * * * * VarExp::toElem: arg2 @ object.TypeInfo
* * * * * * * DtoSymbolAddress ('arg2' of type 'object.TypeInfo')
* * * * * * * * function param
* * * * * * * * type: object.TypeInfo
* * * * * * NullExp::toElem(type=object.TypeInfo): null
* * * * * * * NullExp::toConstElem(type=object.TypeInfo): null
* * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * DtoAssign()
* * * * * * * l : %object.TypeInfo** %1
* * * * * * * r : %object.TypeInfo* null
* * * * CompoundStatement::toIR(): object.d(361)
* * * * * ExpStatement::toIR(): object.d(362)
* * * * * * AssignExp::toElem: arg1 = this | (object.TypeInfo)(object.TypeInfo = object.TypeInfo)
* * * * * * * VarExp::toElem: arg1 @ object.TypeInfo
* * * * * * * * DtoSymbolAddress ('arg1' of type 'object.TypeInfo')
* * * * * * * * * function param
* * * * * * * * * type: object.TypeInfo
* * * * * * * ThisExp::toElem: this @ object.TypeInfo
* * * * * * * * normal this exp
* * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * DtoAssign()
* * * * * * * * l : %object.TypeInfo** %2
* * * * * * * * r : %6 = load %object.TypeInfo*, %object.TypeInfo** %4
* * * * * ReturnStatement::toIR(): object.d(363)
* * * * * * IntegerExp::toElem: 0 @ int
* * * * * * * IntegerExp::toConstElem: 0 @ int
* * * * * * * * value = i32 0
* * DtoDefineFunction(object.TypeInfo.rtInfo): object.d(367)
* * * isMember = this is: object.TypeInfo
* * * DtoFunctionType(const pure nothrow @nogc @property @safe immutable(void)*())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i8* (%object.TypeInfo*)
* * * DtoResolveFunction(object.TypeInfo.rtInfo): object.d(367)
* * * * DtoDeclareFunction(object.TypeInfo.rtInfo): object.d(367)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe immutable(void)*())
* * * * * func =
declare i8* @_D6object8TypeInfo6rtInfoMxFNaNbNdNiNfZPyv(%object.TypeInfo*)
* * * Doing function body for: rtInfo
* * * DtoCreateNestedContext for object.TypeInfo.rtInfo
* * * * DtoCreateNestedContextType for object.TypeInfo.rtInfo
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(368)
* * * * * NullExp::toElem(type=immutable(void)*): null
* * * * * * NullExp::toConstElem(type=immutable(void)*): null
* * Building default initializer for object.TypeInfo
* * * Creating initializer constant for TypeInfo
* * * * final initializer: %object.TypeInfo { [19 x i8*]* @_D8TypeInfo6__vtblZ, i8* null }
* * Building vtbl initializer
* * DtoDefineClassInfo(TypeInfo)
* * * Building ClassInfo.interfaces
* ClassDeclaration::codegen: 'object.TypeInfo_Class'
* * DtoDefineFunction(object.TypeInfo_Class.toString): object.d(374)
* * * isMember = this is: object.TypeInfo_Class
* * * DtoFunctionType(const pure nothrow @safe string())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.TypeInfo_Class*)
* * * DtoResolveFunction(object.TypeInfo_Class.toString): object.d(374)
* * * * DtoDeclareFunction(object.TypeInfo_Class.toString): object.d(374)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Class
* * * * * DtoFunctionType(const pure nothrow @safe string())
* * * * * func =
declare { i64, i8* } @_D6object14TypeInfo_Class8toStringMxFNaNbNfZAya(%object.TypeInfo_Class*)
* * * Doing function body for: toString
* * * DtoCreateNestedContext for object.TypeInfo_Class.toString
* * * * DtoCreateNestedContextType for object.TypeInfo_Class.toString
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(375)
* * * * * DotVarExp::toElem: this.name @ string
* * * * * * ThisExp::toElem: this @ const(TypeInfo_Class)
* * * * * * * normal this exp
* * * * * * Indexing aggregate field object.TypeInfo_Class.name:
* * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Class, %object.TypeInfo_Class* %4, i32 0, i32 3
* * DtoDefineFunction(object.TypeInfo_Class.opEquals): object.d(378)
* * * isMember = this is: object.TypeInfo_Class
* * * DtoFunctionType(bool(Object o))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i1 (%object.TypeInfo_Class*, %object.Object*)
* * * DtoResolveFunction(object.TypeInfo_Class.opEquals): object.d(378)
* * * * DtoDeclareFunction(object.TypeInfo_Class.opEquals): object.d(378)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Class
* * * * * DtoFunctionType(bool(Object o))
* * * * * func =
declare i1 @_D6object14TypeInfo_Class8opEqualsMFC6ObjectZb(%object.TypeInfo_Class*, %object.Object*)
* * * Doing function body for: opEquals
* * * DtoCreateNestedContext for object.TypeInfo_Class.opEquals
* * * * DtoCreateNestedContextType for object.TypeInfo_Class.opEquals
* * * CompoundStatement::toIR():
* * * * CompoundStatement::toIR(): object.d(378)
* * * * * IfStatement::toIR(): object.d(379)
* * * * * * IdentityExp::toElem: this is o @ bool
* * * * * * * ThisExp::toElem: this @ object.Object
* * * * * * * * normal this exp
* * * * * * * VarExp::toElem: o @ object.Object
* * * * * * * * DtoSymbolAddress ('o' of type 'object.Object')
* * * * * * * * * function param
* * * * * * * * * type: object.Object
* * * * * * ReturnStatement::toIR(): object.d(380)
* * * * * * * IntegerExp::toElem: true @ bool
* * * * * * * * IntegerExp::toConstElem: true @ bool
* * * * * * * * * value = i1 true
* * * * * ExpStatement::toIR(): object.d(381)
* * * * * * DeclarationExp::toElem: (const const(TypeInfo_Class) c = cast(const(TypeInfo_Class))o;) | T=void
* * * * * * * DtoDeclarationExp: c
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = const(TypeInfo_Class))
* * * * * * * * * llvm value for decl: %5 = alloca %object.TypeInfo_Class*, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: c = cast(const(TypeInfo_Class))o | (const(TypeInfo_Class))(const(TypeInfo_Class) = const(TypeInfo_Class))
* * * * * * * * * * VarExp::toElem: c @ const(TypeInfo_Class)
* * * * * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_Class)')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * CastExp::toElem: cast(const(TypeInfo_Class))o @ const(TypeInfo_Class)
* * * * * * * * * * * VarExp::toElem: o @ object.Object
* * * * * * * * * * * * DtoSymbolAddress ('o' of type 'object.Object')
* * * * * * * * * * * * * function param
* * * * * * * * * * * * * type: object.Object
* * * * * * * * * * * Casting from 'object.Object' to 'const(TypeInfo_Class)'
* * * * * * * * * * * * DtoCastClass(object.Object, const(TypeInfo_Class))
* * * * * * * * * * * * * dynamic up cast
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * l : %5 = alloca %object.TypeInfo_Class*, align 8
* * * * * * * * * * * r : %16 = bitcast i8* %15 to %object.TypeInfo_Class*
* * * * * ReturnStatement::toIR(): object.d(382)
* * * * * * LogicalExp::toElem: c && this.name == c.name @ bool
* * * * * * * VarExp::toElem: c @ const(TypeInfo_Class)
* * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_Class)')
* * * * * * * * * a normal variable
* * * * * * * Casting from 'const(TypeInfo_Class)' to 'bool'
* * * * * * * * DtoCastClass(const(TypeInfo_Class), bool)
* * * * * * * * * to bool
* * * * * * * EqualExp::toElem: this.name == c.name @ bool
* * * * * * * * DotVarExp::toElem: this.name @ const(string)
* * * * * * * * * ThisExp::toElem: this @ object.TypeInfo_Class
* * * * * * * * * * normal this exp
* * * * * * * * * Indexing aggregate field object.TypeInfo_Class.name:
* * * * * * * * * * Value: %21 = getelementptr inbounds %object.TypeInfo_Class, %object.TypeInfo_Class* %20, i32 0, i32 3
* * * * * * * * DotVarExp::toElem: c.name @ const(string)
* * * * * * * * * VarExp::toElem: c @ const(TypeInfo_Class)
* * * * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_Class)')
* * * * * * * * * * * a normal variable
* * * * * * * * * Indexing aggregate field object.TypeInfo_Class.name:
* * * * * * * * * * Value: %23 = getelementptr inbounds %object.TypeInfo_Class, %object.TypeInfo_Class* %22, i32 0, i32 3
* * * * * * * * static or dynamic array
* * * * * * * * Comparing arrays using memcmp
* * * * * * * * DtoArrayPtr
* * * * * * * * DtoArrayPtr
* * * * * * * * DtoArrayLen
* * * * * * * * DtoArrayLen
* * DtoDefineFunction(object.TypeInfo_Class.getHash): object.d(385)
* * * isMember = this is: object.TypeInfo_Class
* * * DtoFunctionType(const nothrow @trusted ulong(const(void*) p))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (%object.TypeInfo_Class*, i8*)
* * * DtoResolveFunction(object.TypeInfo_Class.getHash): object.d(385)
* * * * DtoDeclareFunction(object.TypeInfo_Class.getHash): object.d(385)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Class
* * * * * DtoFunctionType(const nothrow @trusted ulong(const(void*) p))
* * * * * func =
declare i64 @_D6object14TypeInfo_Class7getHashMxFNbNexPvZm(%object.TypeInfo_Class*, i8*)
* * * Doing function body for: getHash
* * * DtoCreateNestedContext for object.TypeInfo_Class.getHash
* * * * DtoCreateNestedContextType for object.TypeInfo_Class.getHash
* * * CompoundStatement::toIR():
* * * * CompoundStatement::toIR(): object.d(385)
* * * * * ExpStatement::toIR(): object.d(386)
* * * * * * DeclarationExp::toElem: (Object o = *cast(Object*)p;) | T=void
* * * * * * * DtoDeclarationExp: o
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = object.Object)
* * * * * * * * * llvm value for decl: %5 = alloca %object.Object*, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: o = *cast(Object*)p | (object.Object)(object.Object = object.Object)
* * * * * * * * * * VarExp::toElem: o @ object.Object
* * * * * * * * * * * DtoSymbolAddress ('o' of type 'object.Object')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * PtrExp::toElem: *cast(Object*)p @ object.Object
* * * * * * * * * * * CastExp::toElem: cast(Object*)p @ Object*
* * * * * * * * * * * * VarExp::toElem: p @ const(void*)
* * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'const(void*)')
* * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * type: const(void*)
* * * * * * * * * * * * Casting from 'const(void*)' to 'Object*'
* * * * * * * * * * * * * src: %7 = load i8*, i8** %4
* * * * * * * * * * * * * to type: %object.Object**
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * l : %5 = alloca %object.Object*, align 8
* * * * * * * * * * * r : %9 = load %object.Object*, %object.Object** %8
* * * * * ReturnStatement::toIR(): object.d(387)
* * * * * * CondExp::toElem: o ? o.toHash() : 0LU @ ulong
* * * * * * * VarExp::toElem: o @ object.Object
* * * * * * * * DtoSymbolAddress ('o' of type 'object.Object')
* * * * * * * * * a normal variable
* * * * * * * Casting from 'object.Object' to 'bool'
* * * * * * * * DtoCastClass(object.Object, bool)
* * * * * * * * * to bool
* * * * * * * CallExp::toElem: o.toHash() @ ulong
* * * * * * * * DotVarExp::toElem: o.toHash @ nothrow @trusted ulong()
* * * * * * * * * VarExp::toElem: o @ object.Object
* * * * * * * * * * DtoSymbolAddress ('o' of type 'object.Object')
* * * * * * * * * * * a normal variable
* * * * * * * * * vthis: %14 = load %object.Object*, %object.Object** %5
* * * * * * * * * funcval: %18 = load i8*, i8** %17, align 8
* * * * * * * * * isMember = this is: object.Object
* * * * * * * * * DtoFunctionType(nothrow @trusted ulong())
* * * * * * * * * funcval casted: %19 = bitcast i8* %18 to i64 (%object.Object*)*
* * * * * * * * DtoCallFunction()
* * * * * * * * * Evaluating argument expressions
* * * * * * * * * Building type: nothrow @trusted ulong()
* * * * * * * * * * DtoFunctionType(nothrow @trusted ulong())
* * * * * * * * * * * x86-64 ABI: Transforming return type
* * * * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * * * Final function type: i64 ()
* * * * * * * * * doing normal arguments
* * * * * * * * * Arguments so far: (1)
* * * * * * * * * * %20 = load %object.Object*, %object.Object** %5
* * * * * * * * * Function type: nothrow @trusted ulong()
* * * * * * * IntegerExp::toElem: 0LU @ ulong
* * * * * * * * IntegerExp::toConstElem: 0LU @ ulong
* * * * * * * * * value = i64 0
* * DtoDefineFunction(object.TypeInfo_Class.equals): object.d(390)
* * * isMember = this is: object.TypeInfo_Class
* * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i1 (%object.TypeInfo_Class*, i8*, i8*)
* * * DtoResolveFunction(object.TypeInfo_Class.equals): object.d(390)
* * * * DtoDeclareFunction(object.TypeInfo_Class.equals): object.d(390)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Class
* * * * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2))
* * * * * func =
declare i1 @_D6object14TypeInfo_Class6equalsMxFxPvxQdZb(%object.TypeInfo_Class*, i8*, i8*)
* * * Doing function body for: equals
* * * DtoCreateNestedContext for object.TypeInfo_Class.equals
* * * * DtoCreateNestedContextType for object.TypeInfo_Class.equals
* * * CompoundStatement::toIR():
* * * * CompoundStatement::toIR(): object.d(390)
* * * * * ExpStatement::toIR(): object.d(391)
* * * * * * DeclarationExp::toElem: (Object o1 = *cast(Object*)p1;) | T=void
* * * * * * * DtoDeclarationExp: o1
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = object.Object)
* * * * * * * * * llvm value for decl: %7 = alloca %object.Object*, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: o1 = *cast(Object*)p1 | (object.Object)(object.Object = object.Object)
* * * * * * * * * * VarExp::toElem: o1 @ object.Object
* * * * * * * * * * * DtoSymbolAddress ('o1' of type 'object.Object')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * PtrExp::toElem: *cast(Object*)p1 @ object.Object
* * * * * * * * * * * CastExp::toElem: cast(Object*)p1 @ Object*
* * * * * * * * * * * * VarExp::toElem: p1 @ const(void*)
* * * * * * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)')
* * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * type: const(void*)
* * * * * * * * * * * * Casting from 'const(void*)' to 'Object*'
* * * * * * * * * * * * * src: %9 = load i8*, i8** %5
* * * * * * * * * * * * * to type: %object.Object**
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * l : %7 = alloca %object.Object*, align 8
* * * * * * * * * * * r : %11 = load %object.Object*, %object.Object** %10
* * * * * ExpStatement::toIR(): object.d(392)
* * * * * * DeclarationExp::toElem: (Object o2 = *cast(Object*)p2;) | T=void
* * * * * * * DtoDeclarationExp: o2
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = object.Object)
* * * * * * * * * llvm value for decl: %8 = alloca %object.Object*, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: o2 = *cast(Object*)p2 | (object.Object)(object.Object = object.Object)
* * * * * * * * * * VarExp::toElem: o2 @ object.Object
* * * * * * * * * * * DtoSymbolAddress ('o2' of type 'object.Object')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * PtrExp::toElem: *cast(Object*)p2 @ object.Object
* * * * * * * * * * * CastExp::toElem: cast(Object*)p2 @ Object*
* * * * * * * * * * * * VarExp::toElem: p2 @ const(void*)
* * * * * * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)')
* * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * type: const(void*)
* * * * * * * * * * * * Casting from 'const(void*)' to 'Object*'
* * * * * * * * * * * * * src: %13 = load i8*, i8** %6
* * * * * * * * * * * * * to type: %object.Object**
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * l : %8 = alloca %object.Object*, align 8
* * * * * * * * * * * r : %15 = load %object.Object*, %object.Object** %14
* * * * * ReturnStatement::toIR(): object.d(394)
* * * * * * LogicalExp::toElem: o1 is o2 || o1 && o1.opEquals(o2) @ bool
* * * * * * * IdentityExp::toElem: o1 is o2 @ bool
* * * * * * * * VarExp::toElem: o1 @ object.Object
* * * * * * * * * DtoSymbolAddress ('o1' of type 'object.Object')
* * * * * * * * * * a normal variable
* * * * * * * * VarExp::toElem: o2 @ object.Object
* * * * * * * * * DtoSymbolAddress ('o2' of type 'object.Object')
* * * * * * * * * * a normal variable
* * * * * * * LogicalExp::toElem: o1 && o1.opEquals(o2) @ bool
* * * * * * * * VarExp::toElem: o1 @ object.Object
* * * * * * * * * DtoSymbolAddress ('o1' of type 'object.Object')
* * * * * * * * * * a normal variable
* * * * * * * * Casting from 'object.Object' to 'bool'
* * * * * * * * * DtoCastClass(object.Object, bool)
* * * * * * * * * * to bool
* * * * * * * * CallExp::toElem: o1.opEquals(o2) @ bool
* * * * * * * * * DotVarExp::toElem: o1.opEquals @ bool(Object o)
* * * * * * * * * * VarExp::toElem: o1 @ object.Object
* * * * * * * * * * * DtoSymbolAddress ('o1' of type 'object.Object')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * vthis: %23 = load %object.Object*, %object.Object** %7
* * * * * * * * * * funcval: %27 = load i8*, i8** %26, align 8
* * * * * * * * * * isMember = this is: object.Object
* * * * * * * * * * DtoFunctionType(bool(Object o))
* * * * * * * * * * funcval casted: %28 = bitcast i8* %27 to i1 (%object.Object*, %object.Object*)*
* * * * * * * * * DtoCallFunction()
* * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * DtoArgument
* * * * * * * * * * * * VarExp::toElem: o2 @ object.Object
* * * * * * * * * * * * * DtoSymbolAddress ('o2' of type 'object.Object')
* * * * * * * * * * * * * * a normal variable
* * * * * * * * * * doing normal arguments
* * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * %29 = load %object.Object*, %object.Object** %7
* * * * * * * * * * Function type: bool(Object o)
* * DtoDefineFunction(object.TypeInfo_Class.compare): object.d(397)
* * * isMember = this is: object.TypeInfo_Class
* * * DtoFunctionType(const int(const(void*) p1, const(void*) p2))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i32 (%object.TypeInfo_Class*, i8*, i8*)
* * * DtoResolveFunction(object.TypeInfo_Class.compare): object.d(397)
* * * * DtoDeclareFunction(object.TypeInfo_Class.compare): object.d(397)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Class
* * * * * DtoFunctionType(const int(const(void*) p1, const(void*) p2))
* * * * * func =
declare i32 @_D6object14TypeInfo_Class7compareMxFxPvxQdZi(%object.TypeInfo_Class*, i8*, i8*)
* * * Doing function body for: compare
* * * DtoCreateNestedContext for object.TypeInfo_Class.compare
* * * * DtoCreateNestedContextType for object.TypeInfo_Class.compare
* * * CompoundStatement::toIR():
* * * * CompoundStatement::toIR(): object.d(397)
* * * * * ExpStatement::toIR(): object.d(398)
* * * * * * DeclarationExp::toElem: (Object o1 = *cast(Object*)p1;) | T=void
* * * * * * * DtoDeclarationExp: o1
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = object.Object)
* * * * * * * * * llvm value for decl: %7 = alloca %object.Object*, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: o1 = *cast(Object*)p1 | (object.Object)(object.Object = object.Object)
* * * * * * * * * * VarExp::toElem: o1 @ object.Object
* * * * * * * * * * * DtoSymbolAddress ('o1' of type 'object.Object')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * PtrExp::toElem: *cast(Object*)p1 @ object.Object
* * * * * * * * * * * CastExp::toElem: cast(Object*)p1 @ Object*
* * * * * * * * * * * * VarExp::toElem: p1 @ const(void*)
* * * * * * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)')
* * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * type: const(void*)
* * * * * * * * * * * * Casting from 'const(void*)' to 'Object*'
* * * * * * * * * * * * * src: %9 = load i8*, i8** %5
* * * * * * * * * * * * * to type: %object.Object**
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * l : %7 = alloca %object.Object*, align 8
* * * * * * * * * * * r : %11 = load %object.Object*, %object.Object** %10
* * * * * ExpStatement::toIR(): object.d(399)
* * * * * * DeclarationExp::toElem: (Object o2 = *cast(Object*)p2;) | T=void
* * * * * * * DtoDeclarationExp: o2
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = object.Object)
* * * * * * * * * llvm value for decl: %8 = alloca %object.Object*, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: o2 = *cast(Object*)p2 | (object.Object)(object.Object = object.Object)
* * * * * * * * * * VarExp::toElem: o2 @ object.Object
* * * * * * * * * * * DtoSymbolAddress ('o2' of type 'object.Object')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * PtrExp::toElem: *cast(Object*)p2 @ object.Object
* * * * * * * * * * * CastExp::toElem: cast(Object*)p2 @ Object*
* * * * * * * * * * * * VarExp::toElem: p2 @ const(void*)
* * * * * * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)')
* * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * type: const(void*)
* * * * * * * * * * * * Casting from 'const(void*)' to 'Object*'
* * * * * * * * * * * * * src: %13 = load i8*, i8** %6
* * * * * * * * * * * * * to type: %object.Object**
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * l : %8 = alloca %object.Object*, align 8
* * * * * * * * * * * r : %15 = load %object.Object*, %object.Object** %14
* * * * * ExpStatement::toIR(): object.d(400)
* * * * * * DeclarationExp::toElem: (int c = 0;) | T=void
* * * * * * * DtoDeclarationExp: c
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = int)
* * * * * * * * * llvm value for decl: %9 = alloca i32, align 4
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: c = 0 | (int)(int = int)
* * * * * * * * * * VarExp::toElem: c @ int
* * * * * * * * * * * DtoSymbolAddress ('c' of type 'int')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * IntegerExp::toElem: 0 @ int
* * * * * * * * * * * IntegerExp::toConstElem: 0 @ int
* * * * * * * * * * * * value = i32 0
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %9 = alloca i32, align 4
* * * * * * * * * * * rhs: i32 0
* * * * * IfStatement::toIR(): object.d(403)
* * * * * * IdentityExp::toElem: o1 !is o2 @ bool
* * * * * * * VarExp::toElem: o1 @ object.Object
* * * * * * * * DtoSymbolAddress ('o1' of type 'object.Object')
* * * * * * * * * a normal variable
* * * * * * * VarExp::toElem: o2 @ object.Object
* * * * * * * * DtoSymbolAddress ('o2' of type 'object.Object')
* * * * * * * * * a normal variable
* * * * * * ScopeStatement::toIR(): object.d(403)
* * * * * * * IfStatement::toIR(): object.d(404)
* * * * * * * * VarExp::toElem: o1 @ object.Object
* * * * * * * * * DtoSymbolAddress ('o1' of type 'object.Object')
* * * * * * * * * * a normal variable
* * * * * * * * if conditional: %21 = load %object.Object*, %object.Object** %7
* * * * * * * * Casting from 'object.Object' to 'bool'
* * * * * * * * * DtoCastClass(object.Object, bool)
* * * * * * * * * * to bool
* * * * * * * * ScopeStatement::toIR(): object.d(404)
* * * * * * * * * IfStatement::toIR(): object.d(405)
* * * * * * * * * * NotExp::toElem: !o2 @ bool
* * * * * * * * * * * VarExp::toElem: o2 @ object.Object
* * * * * * * * * * * * DtoSymbolAddress ('o2' of type 'object.Object')
* * * * * * * * * * * * * a normal variable
* * * * * * * * * * * Casting from 'object.Object' to 'bool'
* * * * * * * * * * * * DtoCastClass(object.Object, bool)
* * * * * * * * * * * * * to bool
* * * * * * * * * * ExpStatement::toIR(): object.d(406)
* * * * * * * * * * * AssignExp::toElem: c = 1 | (int)(int = int)
* * * * * * * * * * * * VarExp::toElem: c @ int
* * * * * * * * * * * * * DtoSymbolAddress ('c' of type 'int')
* * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * IntegerExp::toElem: 1 @ int
* * * * * * * * * * * * * IntegerExp::toConstElem: 1 @ int
* * * * * * * * * * * * * * value = i32 1
* * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * * * DtoAssign()
* * * * * * * * * * * * * lhs: %9 = alloca i32, align 4
* * * * * * * * * * * * * rhs: i32 1
* * * * * * * * * * ExpStatement::toIR(): object.d(408)
* * * * * * * * * * * AssignExp::toElem: c = o1.opCmp(o2) | (int)(int = int)
* * * * * * * * * * * * VarExp::toElem: c @ int
* * * * * * * * * * * * * DtoSymbolAddress ('c' of type 'int')
* * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * CallExp::toElem: o1.opCmp(o2) @ int
* * * * * * * * * * * * * DotVarExp::toElem: o1.opCmp @ int(Object o)
* * * * * * * * * * * * * * VarExp::toElem: o1 @ object.Object
* * * * * * * * * * * * * * * DtoSymbolAddress ('o1' of type 'object.Object')
* * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * vthis: %30 = load %object.Object*, %object.Object** %7
* * * * * * * * * * * * * * funcval: %34 = load i8*, i8** %33, align 8
* * * * * * * * * * * * * * isMember = this is: object.Object
* * * * * * * * * * * * * * DtoFunctionType(int(Object o))
* * * * * * * * * * * * * * funcval casted: %35 = bitcast i8* %34 to i32 (%object.Object*, %object.Object*)*
* * * * * * * * * * * * * DtoCallFunction()
* * * * * * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * * * * VarExp::toElem: o2 @ object.Object
* * * * * * * * * * * * * * * * * DtoSymbolAddress ('o2' of type 'object.Object')
* * * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * Building type: int(Object o)
* * * * * * * * * * * * * * * DtoFunctionType(int(Object o))
* * * * * * * * * * * * * * * * x86-64 ABI: Transforming return type
* * * * * * * * * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * * * * * * * * Final function type: i32 (%object.Object*)
* * * * * * * * * * * * * * doing normal arguments
* * * * * * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * * * * * %36 = load %object.Object*, %object.Object** %7
* * * * * * * * * * * * * * Function type: int(Object o)
* * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * * * DtoAssign()
* * * * * * * * * * * * * lhs: %9 = alloca i32, align 4
* * * * * * * * * * * * * rhs: %38 = call i32 %35(%object.Object* nonnull %36, %object.Object* %37)
* * * * * * * * ExpStatement::toIR(): object.d(410)
* * * * * * * * * AssignExp::toElem: c = -1 | (int)(int = int)
* * * * * * * * * * VarExp::toElem: c @ int
* * * * * * * * * * * DtoSymbolAddress ('c' of type 'int')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * IntegerExp::toElem: -1 @ int
* * * * * * * * * * * IntegerExp::toConstElem: -1 @ int
* * * * * * * * * * * * value = i32 -1
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %9 = alloca i32, align 4
* * * * * * * * * * * rhs: i32 -1
* * * * * ReturnStatement::toIR(): object.d(412)
* * * * * * VarExp::toElem: c @ int
* * * * * * * DtoSymbolAddress ('c' of type 'int')
* * * * * * * * a normal variable
* * DtoDefineFunction(object.TypeInfo_Class.tsize): object.d(415)
* * * isMember = this is: object.TypeInfo_Class
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (%object.TypeInfo_Class*)
* * * DtoResolveFunction(object.TypeInfo_Class.tsize): object.d(415)
* * * * DtoDeclareFunction(object.TypeInfo_Class.tsize): object.d(415)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Class
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * func =
declare i64 @_D6object14TypeInfo_Class5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo_Class*)
* * * Doing function body for: tsize
* * * DtoCreateNestedContext for object.TypeInfo_Class.tsize
* * * * DtoCreateNestedContextType for object.TypeInfo_Class.tsize
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(416)
* * * * * IntegerExp::toElem: 8LU @ ulong
* * * * * * IntegerExp::toConstElem: 8LU @ ulong
* * * * * * * value = i64 8
* * DtoDefineFunction(object.TypeInfo_Class.initializer): object.d(419)
* * * isMember = this is: object.TypeInfo_Class
* * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.TypeInfo_Class*)
* * * DtoResolveFunction(object.TypeInfo_Class.initializer): object.d(419)
* * * * DtoDeclareFunction(object.TypeInfo_Class.initializer): object.d(419)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Class
* * * * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]())
* * * * * func =
declare { i64, i8* } @_D6object14TypeInfo_Class11initializerMxFNaNbNiNfZAxv(%object.TypeInfo_Class*)
* * * Doing function body for: initializer
* * * DtoCreateNestedContext for object.TypeInfo_Class.initializer
* * * * DtoCreateNestedContextType for object.TypeInfo_Class.initializer
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(420)
* * * * * CastExp::toElem: cast(const(void)[])this.m_init @ const(void)[]
* * * * * * DotVarExp::toElem: this.m_init @ const(byte[])
* * * * * * * ThisExp::toElem: this @ const(TypeInfo_Class)
* * * * * * * * normal this exp
* * * * * * * Indexing aggregate field object.TypeInfo_Class.m_init:
* * * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Class, %object.TypeInfo_Class* %4, i32 0, i32 2
* * * * * * * Building type: const(byte)[]
* * * * * * Casting from 'const(byte[])' to 'const(void)[]'
* * * * * * * DtoCastArray
* * * * * * * * from array or sarray
* * * * * * * * to array
* * * * * * * * DtoArrayLen
* * * * * * * * DtoArrayPtr
* * DtoDefineFunction(object.TypeInfo_Class.flags): object.d(423)
* * * isMember = this is: object.TypeInfo_Class
* * * DtoFunctionType(const pure nothrow @nogc @property @safe uint())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i32 (%object.TypeInfo_Class*)
* * * DtoResolveFunction(object.TypeInfo_Class.flags): object.d(423)
* * * * DtoDeclareFunction(object.TypeInfo_Class.flags): object.d(423)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Class
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe uint())
* * * * * func =
declare i32 @_D6object14TypeInfo_Class5flagsMxFNaNbNdNiNfZk(%object.TypeInfo_Class*)
* * * Doing function body for: flags
* * * DtoCreateNestedContext for object.TypeInfo_Class.flags
* * * * DtoCreateNestedContextType for object.TypeInfo_Class.flags
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(424)
* * * * * IntegerExp::toElem: 1u @ uint
* * * * * * IntegerExp::toConstElem: 1u @ uint
* * * * * * * value = i32 1
* * DtoDefineFunction(object.TypeInfo_Class.offTi): object.d(427)
* * * isMember = this is: object.TypeInfo_Class
* * * DtoFunctionType(const pure nothrow @property const(OffsetTypeInfo)[]())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, %object.OffsetTypeInfo* } (%object.TypeInfo_Class*)
* * * DtoResolveFunction(object.TypeInfo_Class.offTi): object.d(427)
* * * * DtoDeclareFunction(object.TypeInfo_Class.offTi): object.d(427)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Class
* * * * * DtoFunctionType(const pure nothrow @property const(OffsetTypeInfo)[]())
* * * * * func =
declare { i64, %object.OffsetTypeInfo* } @_D6object14TypeInfo_Class5offTiMxFNaNbNdZAxSQBq14OffsetTypeInfo(%object.TypeInfo_Class*)
* * * Doing function body for: offTi
* * * DtoCreateNestedContext for object.TypeInfo_Class.offTi
* * * * DtoCreateNestedContextType for object.TypeInfo_Class.offTi
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(428)
* * * * * DotVarExp::toElem: this.m_offTi @ const(OffsetTypeInfo)[]
* * * * * * ThisExp::toElem: this @ const(TypeInfo_Class)
* * * * * * * normal this exp
* * * * * * Indexing aggregate field object.TypeInfo_Class.m_offTi:
* * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Class, %object.TypeInfo_Class* %4, i32 0, i32 12
* * VarDeclaration::codegen(): 'object.TypeInfo_Class.m_init'
* * * DtoResolveVariable(object.TypeInfo_Class.m_init)
* * VarDeclaration::codegen(): 'object.TypeInfo_Class.name'
* * * DtoResolveVariable(object.TypeInfo_Class.name)
* * VarDeclaration::codegen(): 'object.TypeInfo_Class.vtbl'
* * * DtoResolveVariable(object.TypeInfo_Class.vtbl)
* * VarDeclaration::codegen(): 'object.TypeInfo_Class.interfaces'
* * * DtoResolveVariable(object.TypeInfo_Class.interfaces)
* * VarDeclaration::codegen(): 'object.TypeInfo_Class.base'
* * * DtoResolveVariable(object.TypeInfo_Class.base)
* * VarDeclaration::codegen(): 'object.TypeInfo_Class.destructor'
* * * DtoResolveVariable(object.TypeInfo_Class.destructor)
* * VarDeclaration::codegen(): 'object.TypeInfo_Class.classInvariant'
* * * DtoResolveVariable(object.TypeInfo_Class.classInvariant)
* * Ignoring EnumDeclaration::codegen: 'object.TypeInfo_Class.ClassFlags'
* * VarDeclaration::codegen(): 'object.TypeInfo_Class.m_flags'
* * * DtoResolveVariable(object.TypeInfo_Class.m_flags)
* * VarDeclaration::codegen(): 'object.TypeInfo_Class.deallocator'
* * * DtoResolveVariable(object.TypeInfo_Class.deallocator)
* * VarDeclaration::codegen(): 'object.TypeInfo_Class.m_offTi'
* * * DtoResolveVariable(object.TypeInfo_Class.m_offTi)
* * VarDeclaration::codegen(): 'object.TypeInfo_Class.defaultConstructor'
* * * DtoResolveVariable(object.TypeInfo_Class.defaultConstructor)
* * VarDeclaration::codegen(): 'object.TypeInfo_Class.m_RTInfo'
* * * DtoResolveVariable(object.TypeInfo_Class.m_RTInfo)
* * DtoDefineFunction(object.TypeInfo_Class.rtInfo): object.d(458)
* * * isMember = this is: object.TypeInfo_Class
* * * DtoFunctionType(const pure nothrow @nogc @property @safe immutable(void)*())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i8* (%object.TypeInfo_Class*)
* * * DtoResolveFunction(object.TypeInfo_Class.rtInfo): object.d(458)
* * * * DtoDeclareFunction(object.TypeInfo_Class.rtInfo): object.d(458)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Class
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe immutable(void)*())
* * * * * func =
declare i8* @_D6object14TypeInfo_Class6rtInfoMxFNaNbNdNiNfZPyv(%object.TypeInfo_Class*)
* * * Doing function body for: rtInfo
* * * DtoCreateNestedContext for object.TypeInfo_Class.rtInfo
* * * * DtoCreateNestedContextType for object.TypeInfo_Class.rtInfo
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(459)
* * * * * DotVarExp::toElem: this.m_RTInfo @ immutable(void)*
* * * * * * ThisExp::toElem: this @ const(TypeInfo_Class)
* * * * * * * normal this exp
* * * * * * Indexing aggregate field object.TypeInfo_Class.m_RTInfo:
* * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Class, %object.TypeInfo_Class* %4, i32 0, i32 14
* * DtoDefineFunction(object.TypeInfo_Class.find): object.d(463)
* * * DtoFunctionType(const(TypeInfo_Class)(const(char[]) classname))
* * * * Building type: const(char)[]
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: %object.TypeInfo_Class* ({ i64, i8* })
* * * DtoResolveFunction(object.TypeInfo_Class.find): object.d(463)
* * * * DtoDeclareFunction(object.TypeInfo_Class.find): object.d(463)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * DtoFunctionType(const(TypeInfo_Class)(const(char[]) classname))
* * * * * func =
declare %object.TypeInfo_Class* @_D6object14TypeInfo_Class4findFxAaZxCQBc({ i64, i8* })
* * * Doing function body for: find
* * * DtoCreateNestedContext for object.TypeInfo_Class.find
* * * * DtoCreateNestedContextType for object.TypeInfo_Class.find
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(464)
* * * * * NullExp::toElem(type=const(TypeInfo_Class)): null
* * * * * * NullExp::toConstElem(type=const(TypeInfo_Class)): null
* * DtoDefineFunction(object.TypeInfo_Class.create): object.d(468)
* * * isMember = this is: object.TypeInfo_Class
* * * DtoFunctionType(const Object())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: %object.Object* (%object.TypeInfo_Class*)
* * * DtoResolveFunction(object.TypeInfo_Class.create): object.d(468)
* * * * DtoDeclareFunction(object.TypeInfo_Class.create): object.d(468)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Class
* * * * * DtoFunctionType(const Object())
* * * * * func =
declare %object.Object* @_D6object14TypeInfo_Class6createMxFZC6Object(%object.TypeInfo_Class*)
* * * Doing function body for: create
* * * DtoCreateNestedContext for object.TypeInfo_Class.create
* * * * DtoCreateNestedContextType for object.TypeInfo_Class.create
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(469)
* * * * * NullExp::toElem(type=object.Object): null
* * * * * * NullExp::toConstElem(type=object.Object): null
* * Building default initializer for object.TypeInfo_Class
* * * Creating initializer constant for TypeInfo_Class
* * * * Field priority for m_init: 1
* * * * Field priority for name: 1
* * * * Field priority for vtbl: 1
* * * * Field priority for interfaces: 1
* * * * Field priority for base: 1
* * * * Field priority for destructor: 1
* * * * Field priority for classInvariant: 1
* * * * Field priority for m_flags: 1
* * * * Field priority for deallocator: 1
* * * * Field priority for m_offTi: 1
* * * * Field priority for defaultConstructor: 1
* * * * Field priority for m_RTInfo: 1
* * * * Building type: ClassFlags
* * * * Building type: ClassFlags
* * * * DtoConstExpInit(targetType = byte[], exp = null)
* * * * * NullExp::toConstElem(type=byte[]): null
* * * * DtoConstExpInit(targetType = string, exp = null)
* * * * * NullExp::toConstElem(type=string): null
* * * * DtoConstExpInit(targetType = void*[], exp = null)
* * * * * NullExp::toConstElem(type=void*[]): null
* * * * DtoConstExpInit(targetType = Interface[], exp = null)
* * * * * NullExp::toConstElem(type=Interface[]): null
* * * * DtoConstExpInit(targetType = object.TypeInfo_Class, exp = null)
* * * * * NullExp::toConstElem(type=object.TypeInfo_Class): null
* * * * DtoConstExpInit(targetType = void*, exp = null)
* * * * * NullExp::toConstElem(type=void*): null
* * * * DtoConstExpInit(targetType = void function(Object), exp = null)
* * * * * NullExp::toConstElem(type=void function(Object)): null
* * * * DtoConstExpInit(targetType = ClassFlags, exp = cast(ClassFlags)1u)
* * * * * IntegerExp::toConstElem: cast(ClassFlags)1u @ ClassFlags
* * * * * * Building type: ClassFlags
* * * * * * value = i32 1
* * * * DtoConstExpInit(targetType = void*, exp = null)
* * * * * NullExp::toConstElem(type=void*): null
* * * * DtoConstExpInit(targetType = OffsetTypeInfo[], exp = null)
* * * * * NullExp::toConstElem(type=OffsetTypeInfo[]): null
* * * * DtoConstExpInit(targetType = void function(Object), exp = null)
* * * * * NullExp::toConstElem(type=void function(Object)): null
* * * * DtoConstExpInit(targetType = immutable(void)*, exp = null)
* * * * * NullExp::toConstElem(type=immutable(void)*): null
* * * * final initializer: %object.TypeInfo_Class { [20 x i8*]* @_D14TypeInfo_Class6__vtblZ, i8* null, { i64, i8* } zeroinitializer, { i64, i8* } zeroinitializer, { i64, i8** } zeroinitializer, { i64, %object.Interface* } zeroinitializer, %object.TypeInfo_Class* null, i8* null, void (%object.Object*)* null, i32 1, [4 x i8] zeroinitializer, i8* null, { i64, %object.OffsetTypeInfo* } zeroinitializer, void (%object.Object*)* null, i8* null }
* * Building vtbl initializer
* * DtoDefineClassInfo(TypeInfo_Class)
* * * Building ClassInfo.interfaces
* Ignoring Dsymbol::codegen for object.ClassInfo
* ClassDeclaration::codegen: 'object.TypeInfo_AssociativeArray'
* * DtoResolveClass(object.TypeInfo_AssociativeArray): object.d(475)
* * DtoDefineFunction(object.TypeInfo_AssociativeArray.toString): object.d(476)
* * * isMember = this is: object.TypeInfo_AssociativeArray
* * * DtoFunctionType(const pure nothrow @safe string())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.TypeInfo_AssociativeArray*)
* * * DtoResolveFunction(object.TypeInfo_AssociativeArray.toString): object.d(476)
* * * * DtoDeclareFunction(object.TypeInfo_AssociativeArray.toString): object.d(476)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_AssociativeArray
* * * * * DtoFunctionType(const pure nothrow @safe string())
* * * * * func =
declare { i64, i8* } @_D6object25TypeInfo_AssociativeArray8toStringMxFNaNbNfZAya(%object.TypeInfo_AssociativeArray*)
* * * Doing function body for: toString
* * * DtoCreateNestedContext for object.TypeInfo_AssociativeArray.toString
* * * * DtoCreateNestedContextType for object.TypeInfo_AssociativeArray.toString
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(477)
* * * * * StringExp::toElem: "(AA)UNK[UNK]" @ string
* * * * * * type: [13 x i8]
* * * * * * init: [13 x i8] c"(AA)UNK[UNK]\00"
* * DtoDefineFunction(object.TypeInfo_AssociativeArray.opEquals): object.d(480)
* * * isMember = this is: object.TypeInfo_AssociativeArray
* * * DtoFunctionType(bool(Object o))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i1 (%object.TypeInfo_AssociativeArray*, %object.Object*)
* * * DtoResolveFunction(object.TypeInfo_AssociativeArray.opEquals): object.d(480)
* * * * DtoDeclareFunction(object.TypeInfo_AssociativeArray.opEquals): object.d(480)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_AssociativeArray
* * * * * DtoFunctionType(bool(Object o))
* * * * * func =
declare i1 @_D6object25TypeInfo_AssociativeArray8opEqualsMFC6ObjectZb(%object.TypeInfo_AssociativeArray*, %object.Object*)
* * * Doing function body for: opEquals
* * * DtoCreateNestedContext for object.TypeInfo_AssociativeArray.opEquals
* * * * DtoCreateNestedContextType for object.TypeInfo_AssociativeArray.opEquals
* * * CompoundStatement::toIR():
* * * * CompoundStatement::toIR(): object.d(480)
* * * * * IfStatement::toIR(): object.d(481)
* * * * * * IdentityExp::toElem: this is o @ bool
* * * * * * * ThisExp::toElem: this @ object.Object
* * * * * * * * normal this exp
* * * * * * * VarExp::toElem: o @ object.Object
* * * * * * * * DtoSymbolAddress ('o' of type 'object.Object')
* * * * * * * * * function param
* * * * * * * * * type: object.Object
* * * * * * ReturnStatement::toIR(): object.d(482)
* * * * * * * IntegerExp::toElem: true @ bool
* * * * * * * * IntegerExp::toConstElem: true @ bool
* * * * * * * * * value = i1 true
* * * * * ExpStatement::toIR(): object.d(483)
* * * * * * DeclarationExp::toElem: (const const(TypeInfo_AssociativeArray) c = cast(const(TypeInfo_AssociativeArray))o;) | T=void
* * * * * * * DtoDeclarationExp: c
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = const(TypeInfo_AssociativeArray))
* * * * * * * * * llvm value for decl: %5 = alloca %object.TypeInfo_AssociativeArray*, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: c = cast(const(TypeInfo_AssociativeArray))o | (const(TypeInfo_AssociativeArray))(const(TypeInfo_AssociativeArray) = const(TypeInfo_AssociativeArray))
* * * * * * * * * * VarExp::toElem: c @ const(TypeInfo_AssociativeArray)
* * * * * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_AssociativeArray)')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * CastExp::toElem: cast(const(TypeInfo_AssociativeArray))o @ const(TypeInfo_AssociativeArray)
* * * * * * * * * * * VarExp::toElem: o @ object.Object
* * * * * * * * * * * * DtoSymbolAddress ('o' of type 'object.Object')
* * * * * * * * * * * * * function param
* * * * * * * * * * * * * type: object.Object
* * * * * * * * * * * Casting from 'object.Object' to 'const(TypeInfo_AssociativeArray)'
* * * * * * * * * * * * DtoCastClass(object.Object, const(TypeInfo_AssociativeArray))
* * * * * * * * * * * * * dynamic up cast
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * l : %5 = alloca %object.TypeInfo_AssociativeArray*, align 8
* * * * * * * * * * * r : %16 = bitcast i8* %15 to %object.TypeInfo_AssociativeArray*
* * * * * ReturnStatement::toIR(): object.d(484)
* * * * * * LogicalExp::toElem: c && opEquals(this.key, c.key) && opEquals(this.value, c.value) @ bool
* * * * * * * LogicalExp::toElem: c && opEquals(this.key, c.key) @ bool
* * * * * * * * VarExp::toElem: c @ const(TypeInfo_AssociativeArray)
* * * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_AssociativeArray)')
* * * * * * * * * * a normal variable
* * * * * * * * Casting from 'const(TypeInfo_AssociativeArray)' to 'bool'
* * * * * * * * * DtoCastClass(const(TypeInfo_AssociativeArray), bool)
* * * * * * * * * * to bool
* * * * * * * * CallExp::toElem: opEquals(this.key, c.key) @ bool
* * * * * * * * * VarExp::toElem: opEquals @ @system bool(const(Object) lhs, const(Object) rhs)
* * * * * * * * * * DtoSymbolAddress ('opEquals' of type '@system bool(const(Object) lhs, const(Object) rhs)')
* * * * * * * * * * * FuncDeclaration
* * * * * * * * * DtoCallFunction()
* * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * DtoArgument
* * * * * * * * * * * * DotVarExp::toElem: this.key @ const(Object)
* * * * * * * * * * * * * ThisExp::toElem: this @ object.TypeInfo_AssociativeArray
* * * * * * * * * * * * * * normal this exp
* * * * * * * * * * * * * Indexing aggregate field object.TypeInfo_AssociativeArray.key:
* * * * * * * * * * * * * * Value: %21 = getelementptr inbounds %object.TypeInfo_AssociativeArray, %object.TypeInfo_AssociativeArray* %20, i32 0, i32 3
* * * * * * * * * * * DtoArgument
* * * * * * * * * * * * DotVarExp::toElem: c.key @ const(Object)
* * * * * * * * * * * * * VarExp::toElem: c @ const(TypeInfo_AssociativeArray)
* * * * * * * * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_AssociativeArray)')
* * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * Indexing aggregate field object.TypeInfo_AssociativeArray.key:
* * * * * * * * * * * * * * Value: %24 = getelementptr inbounds %object.TypeInfo_AssociativeArray, %object.TypeInfo_AssociativeArray* %23, i32 0, i32 3
* * * * * * * * * * doing normal arguments
* * * * * * * * * * Arguments so far: (0)
* * * * * * * * * * Function type: @system bool(const(Object) lhs, const(Object) rhs)
* * * * * * * CallExp::toElem: opEquals(this.value, c.value) @ bool
* * * * * * * * VarExp::toElem: opEquals @ @system bool(const(Object) lhs, const(Object) rhs)
* * * * * * * * * DtoSymbolAddress ('opEquals' of type '@system bool(const(Object) lhs, const(Object) rhs)')
* * * * * * * * * * FuncDeclaration
* * * * * * * * DtoCallFunction()
* * * * * * * * * Evaluating argument expressions
* * * * * * * * * * DtoArgument
* * * * * * * * * * * DotVarExp::toElem: this.value @ const(Object)
* * * * * * * * * * * * ThisExp::toElem: this @ object.TypeInfo_AssociativeArray
* * * * * * * * * * * * * normal this exp
* * * * * * * * * * * * Indexing aggregate field object.TypeInfo_AssociativeArray.value:
* * * * * * * * * * * * * Value: %33 = getelementptr inbounds %object.TypeInfo_AssociativeArray, %object.TypeInfo_AssociativeArray* %32, i32 0, i32 2
* * * * * * * * * * DtoArgument
* * * * * * * * * * * DotVarExp::toElem: c.value @ const(Object)
* * * * * * * * * * * * VarExp::toElem: c @ const(TypeInfo_AssociativeArray)
* * * * * * * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_AssociativeArray)')
* * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * Indexing aggregate field object.TypeInfo_AssociativeArray.value:
* * * * * * * * * * * * * Value: %36 = getelementptr inbounds %object.TypeInfo_AssociativeArray, %object.TypeInfo_AssociativeArray* %35, i32 0, i32 2
* * * * * * * * * doing normal arguments
* * * * * * * * * Arguments so far: (0)
* * * * * * * * * Function type: @system bool(const(Object) lhs, const(Object) rhs)
* * DtoDefineFunction(object.TypeInfo_AssociativeArray.equals): object.d(487)
* * * isMember = this is: object.TypeInfo_AssociativeArray
* * * DtoFunctionType(const @trusted bool(const(void*) p1, const(void*) p2))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i1 (%object.TypeInfo_AssociativeArray*, i8*, i8*)
* * * DtoResolveFunction(object.TypeInfo_AssociativeArray.equals): object.d(487)
* * * * DtoDeclareFunction(object.TypeInfo_AssociativeArray.equals): object.d(487)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_AssociativeArray
* * * * * DtoFunctionType(const @trusted bool(const(void*) p1, const(void*) p2))
* * * * * func =
declare i1 @_D6object25TypeInfo_AssociativeArray6equalsMxFNexPvxQdZb(%object.TypeInfo_AssociativeArray*, i8*, i8*)
* * * Doing function body for: equals
* * * DtoCreateNestedContext for object.TypeInfo_AssociativeArray.equals
* * * * DtoCreateNestedContextType for object.TypeInfo_AssociativeArray.equals
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(488)
* * * * * IntegerExp::toElem: false @ bool
* * * * * * IntegerExp::toConstElem: false @ bool
* * * * * * * value = i1 false
* * DtoDefineFunction(object.TypeInfo_AssociativeArray.getHash): object.d(491)
* * * isMember = this is: object.TypeInfo_AssociativeArray
* * * DtoFunctionType(const nothrow @trusted ulong(const(void*) p))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (%object.TypeInfo_AssociativeArray*, i8*)
* * * DtoResolveFunction(object.TypeInfo_AssociativeArray.getHash): object.d(491)
* * * * DtoDeclareFunction(object.TypeInfo_AssociativeArray.getHash): object.d(491)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_AssociativeArray
* * * * * DtoFunctionType(const nothrow @trusted ulong(const(void*) p))
* * * * * func =
declare i64 @_D6object25TypeInfo_AssociativeArray7getHashMxFNbNexPvZm(%object.TypeInfo_AssociativeArray*, i8*)
* * * Doing function body for: getHash
* * * DtoCreateNestedContext for object.TypeInfo_AssociativeArray.getHash
* * * * DtoCreateNestedContextType for object.TypeInfo_AssociativeArray.getHash
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(492)
* * * * * CastExp::toElem: cast(ulong)p @ ulong
* * * * * * VarExp::toElem: p @ const(void*)
* * * * * * * DtoSymbolAddress ('p' of type 'const(void*)')
* * * * * * * * function param
* * * * * * * * type: const(void*)
* * * * * * Casting from 'const(void*)' to 'ulong'
* * DtoDefineFunction(object.TypeInfo_AssociativeArray.tsize): object.d(497)
* * * isMember = this is: object.TypeInfo_AssociativeArray
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (%object.TypeInfo_AssociativeArray*)
* * * DtoResolveFunction(object.TypeInfo_AssociativeArray.tsize): object.d(497)
* * * * DtoDeclareFunction(object.TypeInfo_AssociativeArray.tsize): object.d(497)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_AssociativeArray
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * func =
declare i64 @_D6object25TypeInfo_AssociativeArray5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo_AssociativeArray*)
* * * Doing function body for: tsize
* * * DtoCreateNestedContext for object.TypeInfo_AssociativeArray.tsize
* * * * DtoCreateNestedContextType for object.TypeInfo_AssociativeArray.tsize
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(498)
* * * * * IntegerExp::toElem: 8LU @ ulong
* * * * * * IntegerExp::toConstElem: 8LU @ ulong
* * * * * * * value = i64 8
* * DtoDefineFunction(object.TypeInfo_AssociativeArray.initializer): object.d(501)
* * * isMember = this is: object.TypeInfo_AssociativeArray
* * * DtoFunctionType(const pure nothrow @nogc @trusted const(void)[]())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.TypeInfo_AssociativeArray*)
* * * DtoResolveFunction(object.TypeInfo_AssociativeArray.initializer): object.d(501)
* * * * DtoDeclareFunction(object.TypeInfo_AssociativeArray.initializer): object.d(501)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_AssociativeArray
* * * * * DtoFunctionType(const pure nothrow @nogc @trusted const(void)[]())
* * * * * func =
declare { i64, i8* } @_D6object25TypeInfo_AssociativeArray11initializerMxFNaNbNiNeZAxv(%object.TypeInfo_AssociativeArray*)
* * * Doing function body for: initializer
* * * DtoCreateNestedContext for object.TypeInfo_AssociativeArray.initializer
* * * * DtoCreateNestedContextType for object.TypeInfo_AssociativeArray.initializer
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(502)
* * * * * SliceExp::toElem: null[0..8] @ const(void)[]
* * * * * * NullExp::toElem(type=void*): null
* * * * * * * NullExp::toConstElem(type=void*): null
* * * * * * IntegerExp::toElem: 0LU @ ulong
* * * * * * * IntegerExp::toConstElem: 0LU @ ulong
* * * * * * * * value = i64 0
* * * * * * IntegerExp::toElem: 8LU @ ulong
* * * * * * * IntegerExp::toConstElem: 8LU @ ulong
* * * * * * * * value = i64 8
* * DtoDefineFunction(object.TypeInfo_AssociativeArray.next): object.d(505)
* * * isMember = this is: object.TypeInfo_AssociativeArray
* * * DtoFunctionType(inout pure nothrow @nogc @property inout(TypeInfo)())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: %object.TypeInfo* (%object.TypeInfo_AssociativeArray*)
* * * DtoResolveFunction(object.TypeInfo_AssociativeArray.next): object.d(505)
* * * * DtoDeclareFunction(object.TypeInfo_AssociativeArray.next): object.d(505)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_AssociativeArray
* * * * * DtoFunctionType(inout pure nothrow @nogc @property inout(TypeInfo)())
* * * * * func =
declare %object.TypeInfo* @_D6object25TypeInfo_AssociativeArray4nextMNgFNaNbNdNiZNgC8TypeInfo(%object.TypeInfo_AssociativeArray*)
* * * Doing function body for: next
* * * DtoCreateNestedContext for object.TypeInfo_AssociativeArray.next
* * * * DtoCreateNestedContextType for object.TypeInfo_AssociativeArray.next
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(506)
* * * * * DotVarExp::toElem: this.value @ inout(TypeInfo)
* * * * * * ThisExp::toElem: this @ inout(TypeInfo_AssociativeArray)
* * * * * * * normal this exp
* * * * * * Indexing aggregate field object.TypeInfo_AssociativeArray.value:
* * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_AssociativeArray, %object.TypeInfo_AssociativeArray* %4, i32 0, i32 2
* * DtoDefineFunction(object.TypeInfo_AssociativeArray.flags): object.d(509)
* * * isMember = this is: object.TypeInfo_AssociativeArray
* * * DtoFunctionType(const pure nothrow @nogc @property @safe uint())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i32 (%object.TypeInfo_AssociativeArray*)
* * * DtoResolveFunction(object.TypeInfo_AssociativeArray.flags): object.d(509)
* * * * DtoDeclareFunction(object.TypeInfo_AssociativeArray.flags): object.d(509)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_AssociativeArray
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe uint())
* * * * * func =
declare i32 @_D6object25TypeInfo_AssociativeArray5flagsMxFNaNbNdNiNfZk(%object.TypeInfo_AssociativeArray*)
* * * Doing function body for: flags
* * * DtoCreateNestedContext for object.TypeInfo_AssociativeArray.flags
* * * * DtoCreateNestedContextType for object.TypeInfo_AssociativeArray.flags
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(510)
* * * * * IntegerExp::toElem: 1u @ uint
* * * * * * IntegerExp::toConstElem: 1u @ uint
* * * * * * * value = i32 1
* * VarDeclaration::codegen(): 'object.TypeInfo_AssociativeArray.value'
* * * DtoResolveVariable(object.TypeInfo_AssociativeArray.value)
* * VarDeclaration::codegen(): 'object.TypeInfo_AssociativeArray.key'
* * * DtoResolveVariable(object.TypeInfo_AssociativeArray.key)
* * DtoDefineFunction(object.TypeInfo_AssociativeArray.talign): object.d(516)
* * * isMember = this is: object.TypeInfo_AssociativeArray
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (%object.TypeInfo_AssociativeArray*)
* * * DtoResolveFunction(object.TypeInfo_AssociativeArray.talign): object.d(516)
* * * * DtoDeclareFunction(object.TypeInfo_AssociativeArray.talign): object.d(516)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_AssociativeArray
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * func =
declare i64 @_D6object25TypeInfo_AssociativeArray6talignMxFNaNbNdNiNfZm(%object.TypeInfo_AssociativeArray*)
* * * Doing function body for: talign
* * * DtoCreateNestedContext for object.TypeInfo_AssociativeArray.talign
* * * * DtoCreateNestedContextType for object.TypeInfo_AssociativeArray.talign
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(517)
* * * * * IntegerExp::toElem: 8LU @ ulong
* * * * * * IntegerExp::toConstElem: 8LU @ ulong
* * * * * * * value = i64 8
* * Building default initializer for object.TypeInfo_AssociativeArray
* * * Creating initializer constant for TypeInfo_AssociativeArray
* * * * Field priority for value: 1
* * * * Field priority for key: 1
* * * * DtoConstExpInit(targetType = object.TypeInfo, exp = null)
* * * * * NullExp::toConstElem(type=object.TypeInfo): null
* * * * DtoConstExpInit(targetType = object.TypeInfo, exp = null)
* * * * * NullExp::toConstElem(type=object.TypeInfo): null
* * * * final initializer: %object.TypeInfo_AssociativeArray { [19 x i8*]* @_D25TypeInfo_AssociativeArray6__vtblZ, i8* null, %object.TypeInfo* null, %object.TypeInfo* null }
* * Building vtbl initializer
* * DtoDefineClassInfo(TypeInfo_AssociativeArray)
* * * Building ClassInfo.interfaces
* ClassDeclaration::codegen: 'object.TypeInfo_Function'
* * DtoResolveClass(object.TypeInfo_Function): object.d(521)
* * * Building type: object.TypeInfo_Function
* * * * Building class type object.TypeInfo_Function @ object.d(521)
* * * * * Instance size: 40
* * * * * Field priority for next: 1
* * * * * Field priority for deco: 1
* * * * * class type: %object.TypeInfo_Function = type { [19 x i8*]*, i8*, %object.TypeInfo*, { i64, i8* } }
* * VarDeclaration::codegen(): 'object.TypeInfo_Function.next'
* * * DtoResolveVariable(object.TypeInfo_Function.next)
* * VarDeclaration::codegen(): 'object.TypeInfo_Function.deco'
* * * DtoResolveVariable(object.TypeInfo_Function.deco)
* * Building default initializer for object.TypeInfo_Function
* * * Creating initializer constant for TypeInfo_Function
* * * * Field priority for next: 1
* * * * Field priority for deco: 1
* * * * DtoConstExpInit(targetType = object.TypeInfo, exp = null)
* * * * * NullExp::toConstElem(type=object.TypeInfo): null
* * * * DtoConstExpInit(targetType = string, exp = null)
* * * * * NullExp::toConstElem(type=string): null
* * * * final initializer: %object.TypeInfo_Function { [19 x i8*]* @_D17TypeInfo_Function6__vtblZ, i8* null, %object.TypeInfo* null, { i64, i8* } zeroinitializer }
* * Building vtbl initializer
* * DtoDefineClassInfo(TypeInfo_Function)
* * * Building ClassInfo.interfaces
* ClassDeclaration::codegen: 'object.TypeInfo_Interface'
* * DtoDefineFunction(object.TypeInfo_Interface.toString): object.d(527)
* * * isMember = this is: object.TypeInfo_Interface
* * * DtoFunctionType(const pure nothrow @safe string())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.TypeInfo_Interface*)
* * * DtoResolveFunction(object.TypeInfo_Interface.toString): object.d(527)
* * * * DtoDeclareFunction(object.TypeInfo_Interface.toString): object.d(527)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Interface
* * * * * DtoFunctionType(const pure nothrow @safe string())
* * * * * func =
declare { i64, i8* } @_D6object18TypeInfo_Interface8toStringMxFNaNbNfZAya(%object.TypeInfo_Interface*)
* * * Doing function body for: toString
* * * DtoCreateNestedContext for object.TypeInfo_Interface.toString
* * * * DtoCreateNestedContextType for object.TypeInfo_Interface.toString
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(528)
* * * * * DotVarExp::toElem: this.info.name @ string
* * * * * * DotVarExp::toElem: this.info @ const(TypeInfo_Class)
* * * * * * * ThisExp::toElem: this @ const(TypeInfo_Interface)
* * * * * * * * normal this exp
* * * * * * * Indexing aggregate field object.TypeInfo_Interface.info:
* * * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Interface, %object.TypeInfo_Interface* %4, i32 0, i32 2
* * * * * * Indexing aggregate field object.TypeInfo_Class.name:
* * * * * * * Value: %7 = getelementptr inbounds %object.TypeInfo_Class, %object.TypeInfo_Class* %6, i32 0, i32 3
* * DtoDefineFunction(object.TypeInfo_Interface.opEquals): object.d(531)
* * * isMember = this is: object.TypeInfo_Interface
* * * DtoFunctionType(bool(Object o))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i1 (%object.TypeInfo_Interface*, %object.Object*)
* * * DtoResolveFunction(object.TypeInfo_Interface.opEquals): object.d(531)
* * * * DtoDeclareFunction(object.TypeInfo_Interface.opEquals): object.d(531)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Interface
* * * * * DtoFunctionType(bool(Object o))
* * * * * func =
declare i1 @_D6object18TypeInfo_Interface8opEqualsMFC6ObjectZb(%object.TypeInfo_Interface*, %object.Object*)
* * * Doing function body for: opEquals
* * * DtoCreateNestedContext for object.TypeInfo_Interface.opEquals
* * * * DtoCreateNestedContextType for object.TypeInfo_Interface.opEquals
* * * CompoundStatement::toIR():
* * * * CompoundStatement::toIR(): object.d(531)
* * * * * IfStatement::toIR(): object.d(532)
* * * * * * IdentityExp::toElem: this is o @ bool
* * * * * * * ThisExp::toElem: this @ object.Object
* * * * * * * * normal this exp
* * * * * * * VarExp::toElem: o @ object.Object
* * * * * * * * DtoSymbolAddress ('o' of type 'object.Object')
* * * * * * * * * function param
* * * * * * * * * type: object.Object
* * * * * * ReturnStatement::toIR(): object.d(533)
* * * * * * * IntegerExp::toElem: true @ bool
* * * * * * * * IntegerExp::toConstElem: true @ bool
* * * * * * * * * value = i1 true
* * * * * ExpStatement::toIR(): object.d(534)
* * * * * * DeclarationExp::toElem: (const const(TypeInfo_Interface) c = cast(const(TypeInfo_Interface))o;) | T=void
* * * * * * * DtoDeclarationExp: c
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = const(TypeInfo_Interface))
* * * * * * * * * llvm value for decl: %5 = alloca %object.TypeInfo_Interface*, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: c = cast(const(TypeInfo_Interface))o | (const(TypeInfo_Interface))(const(TypeInfo_Interface) = const(TypeInfo_Interface))
* * * * * * * * * * VarExp::toElem: c @ const(TypeInfo_Interface)
* * * * * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_Interface)')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * CastExp::toElem: cast(const(TypeInfo_Interface))o @ const(TypeInfo_Interface)
* * * * * * * * * * * VarExp::toElem: o @ object.Object
* * * * * * * * * * * * DtoSymbolAddress ('o' of type 'object.Object')
* * * * * * * * * * * * * function param
* * * * * * * * * * * * * type: object.Object
* * * * * * * * * * * Casting from 'object.Object' to 'const(TypeInfo_Interface)'
* * * * * * * * * * * * DtoCastClass(object.Object, const(TypeInfo_Interface))
* * * * * * * * * * * * * dynamic up cast
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * l : %5 = alloca %object.TypeInfo_Interface*, align 8
* * * * * * * * * * * r : %16 = bitcast i8* %15 to %object.TypeInfo_Interface*
* * * * * ReturnStatement::toIR(): object.d(535)
* * * * * * LogicalExp::toElem: c && this.info.name == typeid(c).name @ bool
* * * * * * * VarExp::toElem: c @ const(TypeInfo_Interface)
* * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_Interface)')
* * * * * * * * * a normal variable
* * * * * * * Casting from 'const(TypeInfo_Interface)' to 'bool'
* * * * * * * * DtoCastClass(const(TypeInfo_Interface), bool)
* * * * * * * * * to bool
* * * * * * * EqualExp::toElem: this.info.name == typeid(c).name @ bool
* * * * * * * * DotVarExp::toElem: this.info.name @ string
* * * * * * * * * DotVarExp::toElem: this.info @ object.TypeInfo_Class
* * * * * * * * * * ThisExp::toElem: this @ object.TypeInfo_Interface
* * * * * * * * * * * normal this exp
* * * * * * * * * * Indexing aggregate field object.TypeInfo_Interface.info:
* * * * * * * * * * * Value: %21 = getelementptr inbounds %object.TypeInfo_Interface, %object.TypeInfo_Interface* %20, i32 0, i32 2
* * * * * * * * * Indexing aggregate field object.TypeInfo_Class.name:
* * * * * * * * * * Value: %23 = getelementptr inbounds %object.TypeInfo_Class, %object.TypeInfo_Class* %22, i32 0, i32 3
* * * * * * * * DotVarExp::toElem: typeid(c).name @ string
* * * * * * * * * VarExp::toElem: c @ const(TypeInfo_Interface)
* * * * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_Interface)')
* * * * * * * * * * * a normal variable
* * * * * * * * * Indexing aggregate field object.TypeInfo_Class.name:
* * * * * * * * * * Value: %30 = getelementptr inbounds %object.TypeInfo_Class, %object.TypeInfo_Class* %29, i32 0, i32 3
* * * * * * * * static or dynamic array
* * * * * * * * Comparing arrays using memcmp
* * * * * * * * DtoArrayPtr
* * * * * * * * DtoArrayPtr
* * * * * * * * DtoArrayLen
* * * * * * * * DtoArrayLen
* * DtoDefineFunction(object.TypeInfo_Interface.getHash): object.d(538)
* * * isMember = this is: object.TypeInfo_Interface
* * * DtoFunctionType(const nothrow @trusted ulong(const(void*) p))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (%object.TypeInfo_Interface*, i8*)
* * * DtoResolveFunction(object.TypeInfo_Interface.getHash): object.d(538)
* * * * DtoDeclareFunction(object.TypeInfo_Interface.getHash): object.d(538)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Interface
* * * * * DtoFunctionType(const nothrow @trusted ulong(const(void*) p))
* * * * * func =
declare i64 @_D6object18TypeInfo_Interface7getHashMxFNbNexPvZm(%object.TypeInfo_Interface*, i8*)
* * * Doing function body for: getHash
* * * DtoCreateNestedContext for object.TypeInfo_Interface.getHash
* * * * DtoCreateNestedContextType for object.TypeInfo_Interface.getHash
* * * CompoundStatement::toIR():
* * * * CompoundStatement::toIR(): object.d(538)
* * * * * ExpStatement::toIR(): object.d(539)
* * * * * * DeclarationExp::toElem: (Interface* pi = **cast(Interface***)*cast(void**)p;) | T=void
* * * * * * * DtoDeclarationExp: pi
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = Interface*)
* * * * * * * * * Building type: Interface*
* * * * * * * * * llvm value for decl: %5 = alloca %object.Interface*, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: pi = **cast(Interface***)*cast(void**)p | (Interface*)(Interface* = Interface*)
* * * * * * * * * * VarExp::toElem: pi @ Interface*
* * * * * * * * * * * DtoSymbolAddress ('pi' of type 'Interface*')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * PtrExp::toElem: **cast(Interface***)*cast(void**)p @ Interface*
* * * * * * * * * * * PtrExp::toElem: *cast(Interface***)*cast(void**)p @ Interface**
* * * * * * * * * * * * CastExp::toElem: cast(Interface***)*cast(void**)p @ Interface***
* * * * * * * * * * * * * PtrExp::toElem: *cast(void**)p @ void*
* * * * * * * * * * * * * * CastExp::toElem: cast(void**)p @ void**
* * * * * * * * * * * * * * * VarExp::toElem: p @ const(void*)
* * * * * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'const(void*)')
* * * * * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * * * * type: const(void*)
* * * * * * * * * * * * * * * Casting from 'const(void*)' to 'void**'
* * * * * * * * * * * * * * * * src: %7 = load i8*, i8** %4
* * * * * * * * * * * * * * * * to type: i8**
* * * * * * * * * * * * * Casting from 'void*' to 'Interface***'
* * * * * * * * * * * * * * Building type: Interface***
* * * * * * * * * * * * * * * Building type: Interface**
* * * * * * * * * * * * * * src: %9 = load i8*, i8** %8
* * * * * * * * * * * * * * to type: %object.Interface***
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %5 = alloca %object.Interface*, align 8
* * * * * * * * * * * rhs: %12 = load %object.Interface*, %object.Interface** %11
* * * * * ExpStatement::toIR(): object.d(540)
* * * * * * DeclarationExp::toElem: (Object o = cast(Object)(*cast(void**)p - cast(long)(*pi).offset * 1L);) | T=void
* * * * * * * DtoDeclarationExp: o
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = object.Object)
* * * * * * * * * llvm value for decl: %6 = alloca %object.Object*, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: o = cast(Object)(*cast(void**)p - cast(long)(*pi).offset * 1L) | (object.Object)(object.Object = object.Object)
* * * * * * * * * * VarExp::toElem: o @ object.Object
* * * * * * * * * * * DtoSymbolAddress ('o' of type 'object.Object')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * CastExp::toElem: cast(Object)(*cast(void**)p - cast(long)(*pi).offset * 1L) @ object.Object
* * * * * * * * * * * MinExp::toElem: *cast(void**)p - cast(long)(*pi).offset * 1L @ void*
* * * * * * * * * * * * PtrExp::toElem: *cast(void**)p @ void*
* * * * * * * * * * * * * CastExp::toElem: cast(void**)p @ void**
* * * * * * * * * * * * * * VarExp::toElem: p @ const(void*)
* * * * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'const(void*)')
* * * * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * * * type: const(void*)
* * * * * * * * * * * * * * Casting from 'const(void*)' to 'void**'
* * * * * * * * * * * * * * * src: %14 = load i8*, i8** %4
* * * * * * * * * * * * * * * to type: i8**
* * * * * * * * * * * * Subtracting integer from pointer
* * * * * * * * * * * * CastExp::toElem: cast(long)(*pi).offset @ long
* * * * * * * * * * * * * DotVarExp::toElem: (*pi).offset @ ulong
* * * * * * * * * * * * * * PtrExp::toElem: *pi @ Interface
* * * * * * * * * * * * * * * VarExp::toElem: pi @ Interface*
* * * * * * * * * * * * * * * * DtoSymbolAddress ('pi' of type 'Interface*')
* * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * Indexing aggregate field object.Interface.offset:
* * * * * * * * * * * * * * * Value: %18 = getelementptr inbounds %object.Interface, %object.Interface* %17, i32 0, i32 2
* * * * * * * * * * * * * Casting from 'ulong' to 'long'
* * * * * * * * * * * Casting from 'void*' to 'object.Object'
* * * * * * * * * * * * src: %21 = getelementptr i8, i8* %16, i64 %20
* * * * * * * * * * * * to type: %object.Object*
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * l : %6 = alloca %object.Object*, align 8
* * * * * * * * * * * r : %22 = bitcast i8* %21 to %object.Object*
* * * * * ExpStatement::toIR(): object.d(541)
* * * * * * AssertExp::toElem: assert(o)
* * * * * * * VarExp::toElem: o @ object.Object
* * * * * * * * DtoSymbolAddress ('o' of type 'object.Object')
* * * * * * * * * a normal variable
* * * * * * * Casting from 'object.Object' to 'bool'
* * * * * * * * DtoCastClass(object.Object, bool)
* * * * * * * * * to bool
* * * * * * * calling class invariant
* * * * * ReturnStatement::toIR(): object.d(542)
* * * * * * CallExp::toElem: o.toHash() @ ulong
* * * * * * * DotVarExp::toElem: o.toHash @ nothrow @trusted ulong()
* * * * * * * * VarExp::toElem: o @ object.Object
* * * * * * * * * DtoSymbolAddress ('o' of type 'object.Object')
* * * * * * * * * * a normal variable
* * * * * * * * vthis: %27 = load %object.Object*, %object.Object** %6
* * * * * * * * funcval: %31 = load i8*, i8** %30, align 8
* * * * * * * * isMember = this is: object.Object
* * * * * * * * DtoFunctionType(nothrow @trusted ulong())
* * * * * * * * funcval casted: %32 = bitcast i8* %31 to i64 (%object.Object*)*
* * * * * * * DtoCallFunction()
* * * * * * * * Evaluating argument expressions
* * * * * * * * doing normal arguments
* * * * * * * * Arguments so far: (1)
* * * * * * * * * %33 = load %object.Object*, %object.Object** %6
* * * * * * * * Function type: nothrow @trusted ulong()
* * DtoDefineFunction(object.TypeInfo_Interface.equals): object.d(545)
* * * isMember = this is: object.TypeInfo_Interface
* * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i1 (%object.TypeInfo_Interface*, i8*, i8*)
* * * DtoResolveFunction(object.TypeInfo_Interface.equals): object.d(545)
* * * * DtoDeclareFunction(object.TypeInfo_Interface.equals): object.d(545)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Interface
* * * * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2))
* * * * * func =
declare i1 @_D6object18TypeInfo_Interface6equalsMxFxPvxQdZb(%object.TypeInfo_Interface*, i8*, i8*)
* * * Doing function body for: equals
* * * DtoCreateNestedContext for object.TypeInfo_Interface.equals
* * * * DtoCreateNestedContextType for object.TypeInfo_Interface.equals
* * * CompoundStatement::toIR():
* * * * CompoundStatement::toIR(): object.d(545)
* * * * * ExpStatement::toIR(): object.d(546)
* * * * * * DeclarationExp::toElem: (Interface* pi = **cast(Interface***)*cast(void**)p1;) | T=void
* * * * * * * DtoDeclarationExp: pi
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = Interface*)
* * * * * * * * * llvm value for decl: %7 = alloca %object.Interface*, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: pi = **cast(Interface***)*cast(void**)p1 | (Interface*)(Interface* = Interface*)
* * * * * * * * * * VarExp::toElem: pi @ Interface*
* * * * * * * * * * * DtoSymbolAddress ('pi' of type 'Interface*')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * PtrExp::toElem: **cast(Interface***)*cast(void**)p1 @ Interface*
* * * * * * * * * * * PtrExp::toElem: *cast(Interface***)*cast(void**)p1 @ Interface**
* * * * * * * * * * * * CastExp::toElem: cast(Interface***)*cast(void**)p1 @ Interface***
* * * * * * * * * * * * * PtrExp::toElem: *cast(void**)p1 @ void*
* * * * * * * * * * * * * * CastExp::toElem: cast(void**)p1 @ void**
* * * * * * * * * * * * * * * VarExp::toElem: p1 @ const(void*)
* * * * * * * * * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)')
* * * * * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * * * * type: const(void*)
* * * * * * * * * * * * * * * Casting from 'const(void*)' to 'void**'
* * * * * * * * * * * * * * * * src: %9 = load i8*, i8** %5
* * * * * * * * * * * * * * * * to type: i8**
* * * * * * * * * * * * * Casting from 'void*' to 'Interface***'
* * * * * * * * * * * * * * src: %11 = load i8*, i8** %10
* * * * * * * * * * * * * * to type: %object.Interface***
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %7 = alloca %object.Interface*, align 8
* * * * * * * * * * * rhs: %14 = load %object.Interface*, %object.Interface** %13
* * * * * ExpStatement::toIR(): object.d(547)
* * * * * * DeclarationExp::toElem: (Object o1 = cast(Object)(*cast(void**)p1 - cast(long)(*pi).offset * 1L);) | T=void
* * * * * * * DtoDeclarationExp: o1
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = object.Object)
* * * * * * * * * llvm value for decl: %8 = alloca %object.Object*, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: o1 = cast(Object)(*cast(void**)p1 - cast(long)(*pi).offset * 1L) | (object.Object)(object.Object = object.Object)
* * * * * * * * * * VarExp::toElem: o1 @ object.Object
* * * * * * * * * * * DtoSymbolAddress ('o1' of type 'object.Object')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * CastExp::toElem: cast(Object)(*cast(void**)p1 - cast(long)(*pi).offset * 1L) @ object.Object
* * * * * * * * * * * MinExp::toElem: *cast(void**)p1 - cast(long)(*pi).offset * 1L @ void*
* * * * * * * * * * * * PtrExp::toElem: *cast(void**)p1 @ void*
* * * * * * * * * * * * * CastExp::toElem: cast(void**)p1 @ void**
* * * * * * * * * * * * * * VarExp::toElem: p1 @ const(void*)
* * * * * * * * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)')
* * * * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * * * type: const(void*)
* * * * * * * * * * * * * * Casting from 'const(void*)' to 'void**'
* * * * * * * * * * * * * * * src: %16 = load i8*, i8** %5
* * * * * * * * * * * * * * * to type: i8**
* * * * * * * * * * * * Subtracting integer from pointer
* * * * * * * * * * * * CastExp::toElem: cast(long)(*pi).offset @ long
* * * * * * * * * * * * * DotVarExp::toElem: (*pi).offset @ ulong
* * * * * * * * * * * * * * PtrExp::toElem: *pi @ Interface
* * * * * * * * * * * * * * * VarExp::toElem: pi @ Interface*
* * * * * * * * * * * * * * * * DtoSymbolAddress ('pi' of type 'Interface*')
* * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * Indexing aggregate field object.Interface.offset:
* * * * * * * * * * * * * * * Value: %20 = getelementptr inbounds %object.Interface, %object.Interface* %19, i32 0, i32 2
* * * * * * * * * * * * * Casting from 'ulong' to 'long'
* * * * * * * * * * * Casting from 'void*' to 'object.Object'
* * * * * * * * * * * * src: %23 = getelementptr i8, i8* %18, i64 %22
* * * * * * * * * * * * to type: %object.Object*
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * l : %8 = alloca %object.Object*, align 8
* * * * * * * * * * * r : %24 = bitcast i8* %23 to %object.Object*
* * * * * ExpStatement::toIR(): object.d(548)
* * * * * * AssignExp::toElem: pi = **cast(Interface***)*cast(void**)p2 | (Interface*)(Interface* = Interface*)
* * * * * * * VarExp::toElem: pi @ Interface*
* * * * * * * * DtoSymbolAddress ('pi' of type 'Interface*')
* * * * * * * * * a normal variable
* * * * * * * PtrExp::toElem: **cast(Interface***)*cast(void**)p2 @ Interface*
* * * * * * * * PtrExp::toElem: *cast(Interface***)*cast(void**)p2 @ Interface**
* * * * * * * * * CastExp::toElem: cast(Interface***)*cast(void**)p2 @ Interface***
* * * * * * * * * * PtrExp::toElem: *cast(void**)p2 @ void*
* * * * * * * * * * * CastExp::toElem: cast(void**)p2 @ void**
* * * * * * * * * * * * VarExp::toElem: p2 @ const(void*)
* * * * * * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)')
* * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * type: const(void*)
* * * * * * * * * * * * Casting from 'const(void*)' to 'void**'
* * * * * * * * * * * * * src: %25 = load i8*, i8** %6
* * * * * * * * * * * * * to type: i8**
* * * * * * * * * * Casting from 'void*' to 'Interface***'
* * * * * * * * * * * src: %27 = load i8*, i8** %26
* * * * * * * * * * * to type: %object.Interface***
* * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * DtoAssign()
* * * * * * * * lhs: %7 = alloca %object.Interface*, align 8
* * * * * * * * rhs: %30 = load %object.Interface*, %object.Interface** %29
* * * * * ExpStatement::toIR(): object.d(549)
* * * * * * DeclarationExp::toElem: (Object o2 = cast(Object)(*cast(void**)p2 - cast(long)(*pi).offset * 1L);) | T=void
* * * * * * * DtoDeclarationExp: o2
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = object.Object)
* * * * * * * * * llvm value for decl: %9 = alloca %object.Object*, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: o2 = cast(Object)(*cast(void**)p2 - cast(long)(*pi).offset * 1L) | (object.Object)(object.Object = object.Object)
* * * * * * * * * * VarExp::toElem: o2 @ object.Object
* * * * * * * * * * * DtoSymbolAddress ('o2' of type 'object.Object')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * CastExp::toElem: cast(Object)(*cast(void**)p2 - cast(long)(*pi).offset * 1L) @ object.Object
* * * * * * * * * * * MinExp::toElem: *cast(void**)p2 - cast(long)(*pi).offset * 1L @ void*
* * * * * * * * * * * * PtrExp::toElem: *cast(void**)p2 @ void*
* * * * * * * * * * * * * CastExp::toElem: cast(void**)p2 @ void**
* * * * * * * * * * * * * * VarExp::toElem: p2 @ const(void*)
* * * * * * * * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)')
* * * * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * * * type: const(void*)
* * * * * * * * * * * * * * Casting from 'const(void*)' to 'void**'
* * * * * * * * * * * * * * * src: %32 = load i8*, i8** %6
* * * * * * * * * * * * * * * to type: i8**
* * * * * * * * * * * * Subtracting integer from pointer
* * * * * * * * * * * * CastExp::toElem: cast(long)(*pi).offset @ long
* * * * * * * * * * * * * DotVarExp::toElem: (*pi).offset @ ulong
* * * * * * * * * * * * * * PtrExp::toElem: *pi @ Interface
* * * * * * * * * * * * * * * VarExp::toElem: pi @ Interface*
* * * * * * * * * * * * * * * * DtoSymbolAddress ('pi' of type 'Interface*')
* * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * Indexing aggregate field object.Interface.offset:
* * * * * * * * * * * * * * * Value: %36 = getelementptr inbounds %object.Interface, %object.Interface* %35, i32 0, i32 2
* * * * * * * * * * * * * Casting from 'ulong' to 'long'
* * * * * * * * * * * Casting from 'void*' to 'object.Object'
* * * * * * * * * * * * src: %39 = getelementptr i8, i8* %34, i64 %38
* * * * * * * * * * * * to type: %object.Object*
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * l : %9 = alloca %object.Object*, align 8
* * * * * * * * * * * r : %40 = bitcast i8* %39 to %object.Object*
* * * * * ReturnStatement::toIR(): object.d(551)
* * * * * * LogicalExp::toElem: opEquals(o1, o2) || o1 && o1.opCmp(o2) == 0 @ bool
* * * * * * * CallExp::toElem: opEquals(o1, o2) @ bool
* * * * * * * * VarExp::toElem: opEquals @ @system bool(Object lhs, Object rhs)
* * * * * * * * * DtoSymbolAddress ('opEquals' of type '@system bool(Object lhs, Object rhs)')
* * * * * * * * * * FuncDeclaration
* * * * * * * * DtoCallFunction()
* * * * * * * * * Evaluating argument expressions
* * * * * * * * * * DtoArgument
* * * * * * * * * * * VarExp::toElem: o1 @ object.Object
* * * * * * * * * * * * DtoSymbolAddress ('o1' of type 'object.Object')
* * * * * * * * * * * * * a normal variable
* * * * * * * * * * DtoArgument
* * * * * * * * * * * VarExp::toElem: o2 @ object.Object
* * * * * * * * * * * * DtoSymbolAddress ('o2' of type 'object.Object')
* * * * * * * * * * * * * a normal variable
* * * * * * * * * doing normal arguments
* * * * * * * * * Arguments so far: (0)
* * * * * * * * * Function type: @system bool(Object lhs, Object rhs)
* * * * * * * LogicalExp::toElem: o1 && o1.opCmp(o2) == 0 @ bool
* * * * * * * * VarExp::toElem: o1 @ object.Object
* * * * * * * * * DtoSymbolAddress ('o1' of type 'object.Object')
* * * * * * * * * * a normal variable
* * * * * * * * Casting from 'object.Object' to 'bool'
* * * * * * * * * DtoCastClass(object.Object, bool)
* * * * * * * * * * to bool
* * * * * * * * EqualExp::toElem: o1.opCmp(o2) == 0 @ bool
* * * * * * * * * CallExp::toElem: o1.opCmp(o2) @ int
* * * * * * * * * * DotVarExp::toElem: o1.opCmp @ int(Object o)
* * * * * * * * * * * VarExp::toElem: o1 @ object.Object
* * * * * * * * * * * * DtoSymbolAddress ('o1' of type 'object.Object')
* * * * * * * * * * * * * a normal variable
* * * * * * * * * * * vthis: %48 = load %object.Object*, %object.Object** %8
* * * * * * * * * * * funcval: %52 = load i8*, i8** %51, align 8
* * * * * * * * * * * isMember = this is: object.Object
* * * * * * * * * * * DtoFunctionType(int(Object o))
* * * * * * * * * * * funcval casted: %53 = bitcast i8* %52 to i32 (%object.Object*, %object.Object*)*
* * * * * * * * * * DtoCallFunction()
* * * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * VarExp::toElem: o2 @ object.Object
* * * * * * * * * * * * * * DtoSymbolAddress ('o2' of type 'object.Object')
* * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * doing normal arguments
* * * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * * %54 = load %object.Object*, %object.Object** %8
* * * * * * * * * * * Function type: int(Object o)
* * * * * * * * * IntegerExp::toElem: 0 @ int
* * * * * * * * * * IntegerExp::toConstElem: 0 @ int
* * * * * * * * * * * value = i32 0
* * * * * * * * * integral or pointer or interface
* * * * * * * * * lv: %56 = call i32 %53(%object.Object* nonnull %54, %object.Object* %55)
* * * * * * * * * rv: i32 0
* * DtoDefineFunction(object.TypeInfo_Interface.compare): object.d(554)
* * * isMember = this is: object.TypeInfo_Interface
* * * DtoFunctionType(const int(const(void*) p1, const(void*) p2))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i32 (%object.TypeInfo_Interface*, i8*, i8*)
* * * DtoResolveFunction(object.TypeInfo_Interface.compare): object.d(554)
* * * * DtoDeclareFunction(object.TypeInfo_Interface.compare): object.d(554)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Interface
* * * * * DtoFunctionType(const int(const(void*) p1, const(void*) p2))
* * * * * func =
declare i32 @_D6object18TypeInfo_Interface7compareMxFxPvxQdZi(%object.TypeInfo_Interface*, i8*, i8*)
* * * Doing function body for: compare
* * * DtoCreateNestedContext for object.TypeInfo_Interface.compare
* * * * DtoCreateNestedContextType for object.TypeInfo_Interface.compare
* * * CompoundStatement::toIR():
* * * * CompoundStatement::toIR(): object.d(554)
* * * * * ExpStatement::toIR(): object.d(555)
* * * * * * DeclarationExp::toElem: (Interface* pi = **cast(Interface***)*cast(void**)p1;) | T=void
* * * * * * * DtoDeclarationExp: pi
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = Interface*)
* * * * * * * * * llvm value for decl: %7 = alloca %object.Interface*, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: pi = **cast(Interface***)*cast(void**)p1 | (Interface*)(Interface* = Interface*)
* * * * * * * * * * VarExp::toElem: pi @ Interface*
* * * * * * * * * * * DtoSymbolAddress ('pi' of type 'Interface*')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * PtrExp::toElem: **cast(Interface***)*cast(void**)p1 @ Interface*
* * * * * * * * * * * PtrExp::toElem: *cast(Interface***)*cast(void**)p1 @ Interface**
* * * * * * * * * * * * CastExp::toElem: cast(Interface***)*cast(void**)p1 @ Interface***
* * * * * * * * * * * * * PtrExp::toElem: *cast(void**)p1 @ void*
* * * * * * * * * * * * * * CastExp::toElem: cast(void**)p1 @ void**
* * * * * * * * * * * * * * * VarExp::toElem: p1 @ const(void*)
* * * * * * * * * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)')
* * * * * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * * * * type: const(void*)
* * * * * * * * * * * * * * * Casting from 'const(void*)' to 'void**'
* * * * * * * * * * * * * * * * src: %9 = load i8*, i8** %5
* * * * * * * * * * * * * * * * to type: i8**
* * * * * * * * * * * * * Casting from 'void*' to 'Interface***'
* * * * * * * * * * * * * * src: %11 = load i8*, i8** %10
* * * * * * * * * * * * * * to type: %object.Interface***
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %7 = alloca %object.Interface*, align 8
* * * * * * * * * * * rhs: %14 = load %object.Interface*, %object.Interface** %13
* * * * * ExpStatement::toIR(): object.d(556)
* * * * * * DeclarationExp::toElem: (Object o1 = cast(Object)(*cast(void**)p1 - cast(long)(*pi).offset * 1L);) | T=void
* * * * * * * DtoDeclarationExp: o1
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = object.Object)
* * * * * * * * * llvm value for decl: %8 = alloca %object.Object*, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: o1 = cast(Object)(*cast(void**)p1 - cast(long)(*pi).offset * 1L) | (object.Object)(object.Object = object.Object)
* * * * * * * * * * VarExp::toElem: o1 @ object.Object
* * * * * * * * * * * DtoSymbolAddress ('o1' of type 'object.Object')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * CastExp::toElem: cast(Object)(*cast(void**)p1 - cast(long)(*pi).offset * 1L) @ object.Object
* * * * * * * * * * * MinExp::toElem: *cast(void**)p1 - cast(long)(*pi).offset * 1L @ void*
* * * * * * * * * * * * PtrExp::toElem: *cast(void**)p1 @ void*
* * * * * * * * * * * * * CastExp::toElem: cast(void**)p1 @ void**
* * * * * * * * * * * * * * VarExp::toElem: p1 @ const(void*)
* * * * * * * * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)')
* * * * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * * * type: const(void*)
* * * * * * * * * * * * * * Casting from 'const(void*)' to 'void**'
* * * * * * * * * * * * * * * src: %16 = load i8*, i8** %5
* * * * * * * * * * * * * * * to type: i8**
* * * * * * * * * * * * Subtracting integer from pointer
* * * * * * * * * * * * CastExp::toElem: cast(long)(*pi).offset @ long
* * * * * * * * * * * * * DotVarExp::toElem: (*pi).offset @ ulong
* * * * * * * * * * * * * * PtrExp::toElem: *pi @ Interface
* * * * * * * * * * * * * * * VarExp::toElem: pi @ Interface*
* * * * * * * * * * * * * * * * DtoSymbolAddress ('pi' of type 'Interface*')
* * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * Indexing aggregate field object.Interface.offset:
* * * * * * * * * * * * * * * Value: %20 = getelementptr inbounds %object.Interface, %object.Interface* %19, i32 0, i32 2
* * * * * * * * * * * * * Casting from 'ulong' to 'long'
* * * * * * * * * * * Casting from 'void*' to 'object.Object'
* * * * * * * * * * * * src: %23 = getelementptr i8, i8* %18, i64 %22
* * * * * * * * * * * * to type: %object.Object*
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * l : %8 = alloca %object.Object*, align 8
* * * * * * * * * * * r : %24 = bitcast i8* %23 to %object.Object*
* * * * * ExpStatement::toIR(): object.d(557)
* * * * * * AssignExp::toElem: pi = **cast(Interface***)*cast(void**)p2 | (Interface*)(Interface* = Interface*)
* * * * * * * VarExp::toElem: pi @ Interface*
* * * * * * * * DtoSymbolAddress ('pi' of type 'Interface*')
* * * * * * * * * a normal variable
* * * * * * * PtrExp::toElem: **cast(Interface***)*cast(void**)p2 @ Interface*
* * * * * * * * PtrExp::toElem: *cast(Interface***)*cast(void**)p2 @ Interface**
* * * * * * * * * CastExp::toElem: cast(Interface***)*cast(void**)p2 @ Interface***
* * * * * * * * * * PtrExp::toElem: *cast(void**)p2 @ void*
* * * * * * * * * * * CastExp::toElem: cast(void**)p2 @ void**
* * * * * * * * * * * * VarExp::toElem: p2 @ const(void*)
* * * * * * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)')
* * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * type: const(void*)
* * * * * * * * * * * * Casting from 'const(void*)' to 'void**'
* * * * * * * * * * * * * src: %25 = load i8*, i8** %6
* * * * * * * * * * * * * to type: i8**
* * * * * * * * * * Casting from 'void*' to 'Interface***'
* * * * * * * * * * * src: %27 = load i8*, i8** %26
* * * * * * * * * * * to type: %object.Interface***
* * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * DtoAssign()
* * * * * * * * lhs: %7 = alloca %object.Interface*, align 8
* * * * * * * * rhs: %30 = load %object.Interface*, %object.Interface** %29
* * * * * ExpStatement::toIR(): object.d(558)
* * * * * * DeclarationExp::toElem: (Object o2 = cast(Object)(*cast(void**)p2 - cast(long)(*pi).offset * 1L);) | T=void
* * * * * * * DtoDeclarationExp: o2
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = object.Object)
* * * * * * * * * llvm value for decl: %9 = alloca %object.Object*, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: o2 = cast(Object)(*cast(void**)p2 - cast(long)(*pi).offset * 1L) | (object.Object)(object.Object = object.Object)
* * * * * * * * * * VarExp::toElem: o2 @ object.Object
* * * * * * * * * * * DtoSymbolAddress ('o2' of type 'object.Object')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * CastExp::toElem: cast(Object)(*cast(void**)p2 - cast(long)(*pi).offset * 1L) @ object.Object
* * * * * * * * * * * MinExp::toElem: *cast(void**)p2 - cast(long)(*pi).offset * 1L @ void*
* * * * * * * * * * * * PtrExp::toElem: *cast(void**)p2 @ void*
* * * * * * * * * * * * * CastExp::toElem: cast(void**)p2 @ void**
* * * * * * * * * * * * * * VarExp::toElem: p2 @ const(void*)
* * * * * * * * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)')
* * * * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * * * type: const(void*)
* * * * * * * * * * * * * * Casting from 'const(void*)' to 'void**'
* * * * * * * * * * * * * * * src: %32 = load i8*, i8** %6
* * * * * * * * * * * * * * * to type: i8**
* * * * * * * * * * * * Subtracting integer from pointer
* * * * * * * * * * * * CastExp::toElem: cast(long)(*pi).offset @ long
* * * * * * * * * * * * * DotVarExp::toElem: (*pi).offset @ ulong
* * * * * * * * * * * * * * PtrExp::toElem: *pi @ Interface
* * * * * * * * * * * * * * * VarExp::toElem: pi @ Interface*
* * * * * * * * * * * * * * * * DtoSymbolAddress ('pi' of type 'Interface*')
* * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * Indexing aggregate field object.Interface.offset:
* * * * * * * * * * * * * * * Value: %36 = getelementptr inbounds %object.Interface, %object.Interface* %35, i32 0, i32 2
* * * * * * * * * * * * * Casting from 'ulong' to 'long'
* * * * * * * * * * * Casting from 'void*' to 'object.Object'
* * * * * * * * * * * * src: %39 = getelementptr i8, i8* %34, i64 %38
* * * * * * * * * * * * to type: %object.Object*
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * l : %9 = alloca %object.Object*, align 8
* * * * * * * * * * * r : %40 = bitcast i8* %39 to %object.Object*
* * * * * ExpStatement::toIR(): object.d(559)
* * * * * * DeclarationExp::toElem: (int c = 0;) | T=void
* * * * * * * DtoDeclarationExp: c
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = int)
* * * * * * * * * llvm value for decl: %10 = alloca i32, align 4
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: c = 0 | (int)(int = int)
* * * * * * * * * * VarExp::toElem: c @ int
* * * * * * * * * * * DtoSymbolAddress ('c' of type 'int')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * IntegerExp::toElem: 0 @ int
* * * * * * * * * * * IntegerExp::toConstElem: 0 @ int
* * * * * * * * * * * * value = i32 0
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %10 = alloca i32, align 4
* * * * * * * * * * * rhs: i32 0
* * * * * IfStatement::toIR(): object.d(561)
* * * * * * NotExp::toElem: !opEquals(o1, o2) @ bool
* * * * * * * CallExp::toElem: opEquals(o1, o2) @ bool
* * * * * * * * VarExp::toElem: opEquals @ @system bool(Object lhs, Object rhs)
* * * * * * * * * DtoSymbolAddress ('opEquals' of type '@system bool(Object lhs, Object rhs)')
* * * * * * * * * * FuncDeclaration
* * * * * * * * DtoCallFunction()
* * * * * * * * * Evaluating argument expressions
* * * * * * * * * * DtoArgument
* * * * * * * * * * * VarExp::toElem: o1 @ object.Object
* * * * * * * * * * * * DtoSymbolAddress ('o1' of type 'object.Object')
* * * * * * * * * * * * * a normal variable
* * * * * * * * * * DtoArgument
* * * * * * * * * * * VarExp::toElem: o2 @ object.Object
* * * * * * * * * * * * DtoSymbolAddress ('o2' of type 'object.Object')
* * * * * * * * * * * * * a normal variable
* * * * * * * * * doing normal arguments
* * * * * * * * * Arguments so far: (0)
* * * * * * * * * Function type: @system bool(Object lhs, Object rhs)
* * * * * * ScopeStatement::toIR(): object.d(561)
* * * * * * * IfStatement::toIR(): object.d(562)
* * * * * * * * VarExp::toElem: o1 @ object.Object
* * * * * * * * * DtoSymbolAddress ('o1' of type 'object.Object')
* * * * * * * * * * a normal variable
* * * * * * * * if conditional: %47 = load %object.Object*, %object.Object** %8
* * * * * * * * Casting from 'object.Object' to 'bool'
* * * * * * * * * DtoCastClass(object.Object, bool)
* * * * * * * * * * to bool
* * * * * * * * ScopeStatement::toIR(): object.d(562)
* * * * * * * * * IfStatement::toIR(): object.d(563)
* * * * * * * * * * NotExp::toElem: !o2 @ bool
* * * * * * * * * * * VarExp::toElem: o2 @ object.Object
* * * * * * * * * * * * DtoSymbolAddress ('o2' of type 'object.Object')
* * * * * * * * * * * * * a normal variable
* * * * * * * * * * * Casting from 'object.Object' to 'bool'
* * * * * * * * * * * * DtoCastClass(object.Object, bool)
* * * * * * * * * * * * * to bool
* * * * * * * * * * ExpStatement::toIR(): object.d(564)
* * * * * * * * * * * AssignExp::toElem: c = 1 | (int)(int = int)
* * * * * * * * * * * * VarExp::toElem: c @ int
* * * * * * * * * * * * * DtoSymbolAddress ('c' of type 'int')
* * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * IntegerExp::toElem: 1 @ int
* * * * * * * * * * * * * IntegerExp::toConstElem: 1 @ int
* * * * * * * * * * * * * * value = i32 1
* * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * * * DtoAssign()
* * * * * * * * * * * * * lhs: %10 = alloca i32, align 4
* * * * * * * * * * * * * rhs: i32 1
* * * * * * * * * * ExpStatement::toIR(): object.d(566)
* * * * * * * * * * * AssignExp::toElem: c = o1.opCmp(o2) | (int)(int = int)
* * * * * * * * * * * * VarExp::toElem: c @ int
* * * * * * * * * * * * * DtoSymbolAddress ('c' of type 'int')
* * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * CallExp::toElem: o1.opCmp(o2) @ int
* * * * * * * * * * * * * DotVarExp::toElem: o1.opCmp @ int(Object o)
* * * * * * * * * * * * * * VarExp::toElem: o1 @ object.Object
* * * * * * * * * * * * * * * DtoSymbolAddress ('o1' of type 'object.Object')
* * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * vthis: %56 = load %object.Object*, %object.Object** %8
* * * * * * * * * * * * * * funcval: %60 = load i8*, i8** %59, align 8
* * * * * * * * * * * * * * isMember = this is: object.Object
* * * * * * * * * * * * * * DtoFunctionType(int(Object o))
* * * * * * * * * * * * * * funcval casted: %61 = bitcast i8* %60 to i32 (%object.Object*, %object.Object*)*
* * * * * * * * * * * * * DtoCallFunction()
* * * * * * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * * * * VarExp::toElem: o2 @ object.Object
* * * * * * * * * * * * * * * * * DtoSymbolAddress ('o2' of type 'object.Object')
* * * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * doing normal arguments
* * * * * * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * * * * * %62 = load %object.Object*, %object.Object** %8
* * * * * * * * * * * * * * Function type: int(Object o)
* * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * * * DtoAssign()
* * * * * * * * * * * * * lhs: %10 = alloca i32, align 4
* * * * * * * * * * * * * rhs: %64 = call i32 %61(%object.Object* nonnull %62, %object.Object* %63)
* * * * * * * * ExpStatement::toIR(): object.d(568)
* * * * * * * * * AssignExp::toElem: c = -1 | (int)(int = int)
* * * * * * * * * * VarExp::toElem: c @ int
* * * * * * * * * * * DtoSymbolAddress ('c' of type 'int')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * IntegerExp::toElem: -1 @ int
* * * * * * * * * * * IntegerExp::toConstElem: -1 @ int
* * * * * * * * * * * * value = i32 -1
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %10 = alloca i32, align 4
* * * * * * * * * * * rhs: i32 -1
* * * * * ReturnStatement::toIR(): object.d(570)
* * * * * * VarExp::toElem: c @ int
* * * * * * * DtoSymbolAddress ('c' of type 'int')
* * * * * * * * a normal variable
* * DtoDefineFunction(object.TypeInfo_Interface.tsize): object.d(573)
* * * isMember = this is: object.TypeInfo_Interface
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (%object.TypeInfo_Interface*)
* * * DtoResolveFunction(object.TypeInfo_Interface.tsize): object.d(573)
* * * * DtoDeclareFunction(object.TypeInfo_Interface.tsize): object.d(573)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Interface
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * func =
declare i64 @_D6object18TypeInfo_Interface5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo_Interface*)
* * * Doing function body for: tsize
* * * DtoCreateNestedContext for object.TypeInfo_Interface.tsize
* * * * DtoCreateNestedContextType for object.TypeInfo_Interface.tsize
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(574)
* * * * * IntegerExp::toElem: 8LU @ ulong
* * * * * * IntegerExp::toConstElem: 8LU @ ulong
* * * * * * * value = i64 8
* * DtoDefineFunction(object.TypeInfo_Interface.initializer): object.d(577)
* * * isMember = this is: object.TypeInfo_Interface
* * * DtoFunctionType(const pure nothrow @nogc @trusted const(void)[]())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.TypeInfo_Interface*)
* * * DtoResolveFunction(object.TypeInfo_Interface.initializer): object.d(577)
* * * * DtoDeclareFunction(object.TypeInfo_Interface.initializer): object.d(577)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Interface
* * * * * DtoFunctionType(const pure nothrow @nogc @trusted const(void)[]())
* * * * * func =
declare { i64, i8* } @_D6object18TypeInfo_Interface11initializerMxFNaNbNiNeZAxv(%object.TypeInfo_Interface*)
* * * Doing function body for: initializer
* * * DtoCreateNestedContext for object.TypeInfo_Interface.initializer
* * * * DtoCreateNestedContextType for object.TypeInfo_Interface.initializer
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(578)
* * * * * SliceExp::toElem: null[0..8] @ const(void)[]
* * * * * * NullExp::toElem(type=void*): null
* * * * * * * NullExp::toConstElem(type=void*): null
* * * * * * IntegerExp::toElem: 0LU @ ulong
* * * * * * * IntegerExp::toConstElem: 0LU @ ulong
* * * * * * * * value = i64 0
* * * * * * IntegerExp::toElem: 8LU @ ulong
* * * * * * * IntegerExp::toConstElem: 8LU @ ulong
* * * * * * * * value = i64 8
* * DtoDefineFunction(object.TypeInfo_Interface.flags): object.d(581)
* * * isMember = this is: object.TypeInfo_Interface
* * * DtoFunctionType(const pure nothrow @nogc @property @safe uint())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i32 (%object.TypeInfo_Interface*)
* * * DtoResolveFunction(object.TypeInfo_Interface.flags): object.d(581)
* * * * DtoDeclareFunction(object.TypeInfo_Interface.flags): object.d(581)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Interface
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe uint())
* * * * * func =
declare i32 @_D6object18TypeInfo_Interface5flagsMxFNaNbNdNiNfZk(%object.TypeInfo_Interface*)
* * * Doing function body for: flags
* * * DtoCreateNestedContext for object.TypeInfo_Interface.flags
* * * * DtoCreateNestedContextType for object.TypeInfo_Interface.flags
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(582)
* * * * * IntegerExp::toElem: 1u @ uint
* * * * * * IntegerExp::toConstElem: 1u @ uint
* * * * * * * value = i32 1
* * VarDeclaration::codegen(): 'object.TypeInfo_Interface.info'
* * * DtoResolveVariable(object.TypeInfo_Interface.info)
* * Building default initializer for object.TypeInfo_Interface
* * * Creating initializer constant for TypeInfo_Interface
* * * * Field priority for info: 1
* * * * DtoConstExpInit(targetType = object.TypeInfo_Class, exp = null)
* * * * * NullExp::toConstElem(type=object.TypeInfo_Class): null
* * * * final initializer: %object.TypeInfo_Interface { [19 x i8*]* @_D18TypeInfo_Interface6__vtblZ, i8* null, %object.TypeInfo_Class* null }
* * Building vtbl initializer
* * DtoDefineClassInfo(TypeInfo_Interface)
* * * Building ClassInfo.interfaces
* ClassDeclaration::codegen: 'object.TypeInfo_Struct'
* * DtoDefineFunction(object.TypeInfo_Struct.toString): object.d(589)
* * * isMember = this is: object.TypeInfo_Struct
* * * DtoFunctionType(const pure nothrow @safe string())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.TypeInfo_Struct*)
* * * DtoResolveFunction(object.TypeInfo_Struct.toString): object.d(589)
* * * * DtoDeclareFunction(object.TypeInfo_Struct.toString): object.d(589)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Struct
* * * * * DtoFunctionType(const pure nothrow @safe string())
* * * * * func =
declare { i64, i8* } @_D6object15TypeInfo_Struct8toStringMxFNaNbNfZAya(%object.TypeInfo_Struct*)
* * * Doing function body for: toString
* * * DtoCreateNestedContext for object.TypeInfo_Struct.toString
* * * * DtoCreateNestedContextType for object.TypeInfo_Struct.toString
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(590)
* * * * * DotVarExp::toElem: this.name @ string
* * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct)
* * * * * * * normal this exp
* * * * * * Indexing aggregate field object.TypeInfo_Struct.name:
* * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Struct, %object.TypeInfo_Struct* %4, i32 0, i32 2
* * DtoDefineFunction(object.TypeInfo_Struct.opEquals): object.d(593)
* * * isMember = this is: object.TypeInfo_Struct
* * * DtoFunctionType(bool(Object o))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i1 (%object.TypeInfo_Struct*, %object.Object*)
* * * DtoResolveFunction(object.TypeInfo_Struct.opEquals): object.d(593)
* * * * DtoDeclareFunction(object.TypeInfo_Struct.opEquals): object.d(593)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Struct
* * * * * DtoFunctionType(bool(Object o))
* * * * * func =
declare i1 @_D6object15TypeInfo_Struct8opEqualsMFC6ObjectZb(%object.TypeInfo_Struct*, %object.Object*)
* * * Doing function body for: opEquals
* * * DtoCreateNestedContext for object.TypeInfo_Struct.opEquals
* * * * DtoCreateNestedContextType for object.TypeInfo_Struct.opEquals
* * * CompoundStatement::toIR():
* * * * CompoundStatement::toIR(): object.d(593)
* * * * * IfStatement::toIR(): object.d(594)
* * * * * * IdentityExp::toElem: this is o @ bool
* * * * * * * ThisExp::toElem: this @ object.Object
* * * * * * * * normal this exp
* * * * * * * VarExp::toElem: o @ object.Object
* * * * * * * * DtoSymbolAddress ('o' of type 'object.Object')
* * * * * * * * * function param
* * * * * * * * * type: object.Object
* * * * * * ReturnStatement::toIR(): object.d(595)
* * * * * * * IntegerExp::toElem: true @ bool
* * * * * * * * IntegerExp::toConstElem: true @ bool
* * * * * * * * * value = i1 true
* * * * * ExpStatement::toIR(): object.d(596)
* * * * * * DeclarationExp::toElem: (const const(TypeInfo_Struct) s = cast(const(TypeInfo_Struct))o;) | T=void
* * * * * * * DtoDeclarationExp: s
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = const(TypeInfo_Struct))
* * * * * * * * * llvm value for decl: %5 = alloca %object.TypeInfo_Struct*, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: s = cast(const(TypeInfo_Struct))o | (const(TypeInfo_Struct))(const(TypeInfo_Struct) = const(TypeInfo_Struct))
* * * * * * * * * * VarExp::toElem: s @ const(TypeInfo_Struct)
* * * * * * * * * * * DtoSymbolAddress ('s' of type 'const(TypeInfo_Struct)')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * CastExp::toElem: cast(const(TypeInfo_Struct))o @ const(TypeInfo_Struct)
* * * * * * * * * * * VarExp::toElem: o @ object.Object
* * * * * * * * * * * * DtoSymbolAddress ('o' of type 'object.Object')
* * * * * * * * * * * * * function param
* * * * * * * * * * * * * type: object.Object
* * * * * * * * * * * Casting from 'object.Object' to 'const(TypeInfo_Struct)'
* * * * * * * * * * * * DtoCastClass(object.Object, const(TypeInfo_Struct))
* * * * * * * * * * * * * dynamic up cast
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * l : %5 = alloca %object.TypeInfo_Struct*, align 8
* * * * * * * * * * * r : %16 = bitcast i8* %15 to %object.TypeInfo_Struct*
* * * * * ReturnStatement::toIR(): object.d(597)
* * * * * * LogicalExp::toElem: s && this.name == s.name && this.initializer().length == s.initializer().length @ bool
* * * * * * * LogicalExp::toElem: s && this.name == s.name @ bool
* * * * * * * * VarExp::toElem: s @ const(TypeInfo_Struct)
* * * * * * * * * DtoSymbolAddress ('s' of type 'const(TypeInfo_Struct)')
* * * * * * * * * * a normal variable
* * * * * * * * Casting from 'const(TypeInfo_Struct)' to 'bool'
* * * * * * * * * DtoCastClass(const(TypeInfo_Struct), bool)
* * * * * * * * * * to bool
* * * * * * * * EqualExp::toElem: this.name == s.name @ bool
* * * * * * * * * DotVarExp::toElem: this.name @ const(string)
* * * * * * * * * * ThisExp::toElem: this @ object.TypeInfo_Struct
* * * * * * * * * * * normal this exp
* * * * * * * * * * Indexing aggregate field object.TypeInfo_Struct.name:
* * * * * * * * * * * Value: %21 = getelementptr inbounds %object.TypeInfo_Struct, %object.TypeInfo_Struct* %20, i32 0, i32 2
* * * * * * * * * DotVarExp::toElem: s.name @ const(string)
* * * * * * * * * * VarExp::toElem: s @ const(TypeInfo_Struct)
* * * * * * * * * * * DtoSymbolAddress ('s' of type 'const(TypeInfo_Struct)')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * Indexing aggregate field object.TypeInfo_Struct.name:
* * * * * * * * * * * Value: %23 = getelementptr inbounds %object.TypeInfo_Struct, %object.TypeInfo_Struct* %22, i32 0, i32 2
* * * * * * * * * static or dynamic array
* * * * * * * * * Comparing arrays using memcmp
* * * * * * * * * DtoArrayPtr
* * * * * * * * * DtoArrayPtr
* * * * * * * * * DtoArrayLen
* * * * * * * * * DtoArrayLen
* * * * * * * EqualExp::toElem: this.initializer().length == s.initializer().length @ bool
* * * * * * * * ArrayLengthExp::toElem: this.initializer().length @ ulong
* * * * * * * * * CallExp::toElem: this.initializer() @ const(void)[]
* * * * * * * * * * DotVarExp::toElem: this.initializer @ const pure nothrow @nogc @safe const(void)[]()
* * * * * * * * * * * ThisExp::toElem: this @ object.TypeInfo_Struct
* * * * * * * * * * * * normal this exp
* * * * * * * * * * * isMember = this is: object.TypeInfo_Struct
* * * * * * * * * * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]())
* * * * * * * * * * * * x86-64 ABI: Transforming return type
* * * * * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * * * * Final function type: { i64, i8* } (%object.TypeInfo_Struct*)
* * * * * * * * * * * DtoResolveFunction(object.TypeInfo_Struct.initializer): object.d(637)
* * * * * * * * * * * * DtoDeclareFunction(object.TypeInfo_Struct.initializer): object.d(637)
* * * * * * * * * * * * * Enter defineAsExternallyAvailable
* * * * * * * * * * * * * * Cross-module inlining fully disabled.
* * * * * * * * * * * * * isMember = this is: object.TypeInfo_Struct
* * * * * * * * * * * * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]())
* * * * * * * * * * * * * func =
declare { i64, i8* } @_D6object15TypeInfo_Struct11initializerMxFNaNbNiNfZAxv(%object.TypeInfo_Struct*)
* * * * * * * * * * * vthis: %41 = load %object.TypeInfo_Struct*, %object.TypeInfo_Struct** %3
* * * * * * * * * * * funcval: %45 = load i8*, i8** %44, align 8
* * * * * * * * * * * isMember = this is: object.TypeInfo_Struct
* * * * * * * * * * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]())
* * * * * * * * * * * funcval casted: %46 = bitcast i8* %45 to { i64, i8* } (%object.TypeInfo_Struct*)*
* * * * * * * * * * DtoCallFunction()
* * * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * Building type: const pure nothrow @nogc @safe const(void)[]()
* * * * * * * * * * * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]())
* * * * * * * * * * * * * x86-64 ABI: Transforming return type
* * * * * * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * * * * * Final function type: { i64, i8* } ()
* * * * * * * * * * * doing normal arguments
* * * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * * %47 = load %object.TypeInfo_Struct*, %object.TypeInfo_Struct** %3
* * * * * * * * * * * Function type: const pure nothrow @nogc @safe const(void)[]()
* * * * * * * * * DtoArrayLen
* * * * * * * * ArrayLengthExp::toElem: s.initializer().length @ ulong
* * * * * * * * * CallExp::toElem: s.initializer() @ const(void)[]
* * * * * * * * * * DotVarExp::toElem: s.initializer @ const pure nothrow @nogc @safe const(void)[]()
* * * * * * * * * * * VarExp::toElem: s @ const(TypeInfo_Struct)
* * * * * * * * * * * * DtoSymbolAddress ('s' of type 'const(TypeInfo_Struct)')
* * * * * * * * * * * * * a normal variable
* * * * * * * * * * * vthis: %50 = load %object.TypeInfo_Struct*, %object.TypeInfo_Struct** %5
* * * * * * * * * * * funcval: %54 = load i8*, i8** %53, align 8
* * * * * * * * * * * isMember = this is: object.TypeInfo_Struct
* * * * * * * * * * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]())
* * * * * * * * * * * funcval casted: %55 = bitcast i8* %54 to { i64, i8* } (%object.TypeInfo_Struct*)*
* * * * * * * * * * DtoCallFunction()
* * * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * doing normal arguments
* * * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * * %56 = load %object.TypeInfo_Struct*, %object.TypeInfo_Struct** %5
* * * * * * * * * * * Function type: const pure nothrow @nogc @safe const(void)[]()
* * * * * * * * * DtoArrayLen
* * * * * * * * integral or pointer or interface
* * * * * * * * lv: %49 = extractvalue { i64, i8* } %48, 0
* * * * * * * * rv: %58 = extractvalue { i64, i8* } %57, 0
* * DtoDefineFunction(object.TypeInfo_Struct.getHash): object.d(600)
* * * isMember = this is: object.TypeInfo_Struct
* * * DtoFunctionType(const pure nothrow @trusted ulong(const(void*) p))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (%object.TypeInfo_Struct*, i8*)
* * * DtoResolveFunction(object.TypeInfo_Struct.getHash): object.d(600)
* * * * DtoDeclareFunction(object.TypeInfo_Struct.getHash): object.d(600)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Struct
* * * * * DtoFunctionType(const pure nothrow @trusted ulong(const(void*) p))
* * * * * func =
declare i64 @_D6object15TypeInfo_Struct7getHashMxFNaNbNexPvZm(%object.TypeInfo_Struct*, i8*)
* * * Doing function body for: getHash
* * * DtoCreateNestedContext for object.TypeInfo_Struct.getHash
* * * * DtoCreateNestedContextType for object.TypeInfo_Struct.getHash
* * * CompoundStatement::toIR():
* * * * IfStatement::toIR(): object.d(601)
* * * * * DotVarExp::toElem: this.xtoHash @ const(ulong function(const(void*)) pure nothrow @safe)
* * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct)
* * * * * * * normal this exp
* * * * * * Indexing aggregate field object.TypeInfo_Struct.xtoHash:
* * * * * * * Value: %7 = getelementptr inbounds %object.TypeInfo_Struct, %object.TypeInfo_Struct* %6, i32 0, i32 4
* * * * * if conditional: %8 = load i64 (i8*)*, i64 (i8*)** %7
* * * * * Casting from 'const(ulong function(const(void*)) pure nothrow @safe)' to 'bool'
* * * * * ReturnStatement::toIR(): object.d(602)
* * * * * * CallExp::toElem: (*this.xtoHash)(p) @ ulong
* * * * * * * PtrExp::toElem: *this.xtoHash @ pure nothrow @safe ulong(const(void*))
* * * * * * * * DotVarExp::toElem: this.xtoHash @ const(ulong function(const(void*)) pure nothrow @safe)
* * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct)
* * * * * * * * * * normal this exp
* * * * * * * * * Indexing aggregate field object.TypeInfo_Struct.xtoHash:
* * * * * * * * * * Value: %13 = getelementptr inbounds %object.TypeInfo_Struct, %object.TypeInfo_Struct* %12, i32 0, i32 4
* * * * * * * DtoCallFunction()
* * * * * * * * Evaluating argument expressions
* * * * * * * * * DtoArgument
* * * * * * * * * * VarExp::toElem: p @ const(void*)
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'const(void*)')
* * * * * * * * * * * * function param
* * * * * * * * * * * * type: const(void*)
* * * * * * * * doing normal arguments
* * * * * * * * Arguments so far: (0)
* * * * * * * * Function type: pure nothrow @safe ulong(const(void*))
* * * * * ReturnStatement::toIR(): object.d(604)
* * * * * * CastExp::toElem: cast(ulong)p @ ulong
* * * * * * * VarExp::toElem: p @ const(void*)
* * * * * * * * DtoSymbolAddress ('p' of type 'const(void*)')
* * * * * * * * * function param
* * * * * * * * * type: const(void*)
* * * * * * * Casting from 'const(void*)' to 'ulong'
* * DtoDefineFunction(object.TypeInfo_Struct.equals): object.d(607)
* * * isMember = this is: object.TypeInfo_Struct
* * * DtoFunctionType(const pure nothrow @trusted bool(const(void*) p1, const(void*) p2))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i1 (%object.TypeInfo_Struct*, i8*, i8*)
* * * DtoResolveFunction(object.TypeInfo_Struct.equals): object.d(607)
* * * * DtoDeclareFunction(object.TypeInfo_Struct.equals): object.d(607)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Struct
* * * * * DtoFunctionType(const pure nothrow @trusted bool(const(void*) p1, const(void*) p2))
* * * * * func =
declare i1 @_D6object15TypeInfo_Struct6equalsMxFNaNbNexPvxQdZb(%object.TypeInfo_Struct*, i8*, i8*)
* * * Doing function body for: equals
* * * DtoCreateNestedContext for object.TypeInfo_Struct.equals
* * * * DtoCreateNestedContextType for object.TypeInfo_Struct.equals
* * * CompoundStatement::toIR():
* * * * IfStatement::toIR(): object.d(608)
* * * * * LogicalExp::toElem: !p1 || !p2 @ bool
* * * * * * NotExp::toElem: !p1 @ bool
* * * * * * * VarExp::toElem: p1 @ const(void*)
* * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)')
* * * * * * * * * function param
* * * * * * * * * type: const(void*)
* * * * * * * Casting from 'const(void*)' to 'bool'
* * * * * * NotExp::toElem: !p2 @ bool
* * * * * * * VarExp::toElem: p2 @ const(void*)
* * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)')
* * * * * * * * * function param
* * * * * * * * * type: const(void*)
* * * * * * * Casting from 'const(void*)' to 'bool'
* * * * * ReturnStatement::toIR(): object.d(609)
* * * * * * IntegerExp::toElem: false @ bool
* * * * * * * IntegerExp::toConstElem: false @ bool
* * * * * * * * value = i1 false
* * * * * IfStatement::toIR(): object.d(610)
* * * * * * DotVarExp::toElem: this.xopEquals @ const(bool function(const(void*), const(void*)) pure nothrow @safe)
* * * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct)
* * * * * * * * normal this exp
* * * * * * * Indexing aggregate field object.TypeInfo_Struct.xopEquals:
* * * * * * * * Value: %21 = getelementptr inbounds %object.TypeInfo_Struct, %object.TypeInfo_Struct* %20, i32 0, i32 5
* * * * * * if conditional: %22 = load i1 (i8*, i8*)*, i1 (i8*, i8*)** %21
* * * * * * Casting from 'const(bool function(const(void*), const(void*)) pure nothrow @safe)' to 'bool'
* * * * * * ReturnStatement::toIR(): object.d(611)
* * * * * * * CallExp::toElem: (*this.xopEquals)(p1, p2) @ bool
* * * * * * * * PtrExp::toElem: *this.xopEquals @ pure nothrow @safe bool(const(void*), const(void*))
* * * * * * * * * DotVarExp::toElem: this.xopEquals @ const(bool function(const(void*), const(void*)) pure nothrow @safe)
* * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct)
* * * * * * * * * * * normal this exp
* * * * * * * * * * Indexing aggregate field object.TypeInfo_Struct.xopEquals:
* * * * * * * * * * * Value: %27 = getelementptr inbounds %object.TypeInfo_Struct, %object.TypeInfo_Struct* %26, i32 0, i32 5
* * * * * * * * DtoCallFunction()
* * * * * * * * * Evaluating argument expressions
* * * * * * * * * * DtoArgument
* * * * * * * * * * * VarExp::toElem: p1 @ const(void*)
* * * * * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)')
* * * * * * * * * * * * * function param
* * * * * * * * * * * * * type: const(void*)
* * * * * * * * * * DtoArgument
* * * * * * * * * * * VarExp::toElem: p2 @ const(void*)
* * * * * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)')
* * * * * * * * * * * * * function param
* * * * * * * * * * * * * type: const(void*)
* * * * * * * * * doing normal arguments
* * * * * * * * * Arguments so far: (0)
* * * * * * * * * Function type: pure nothrow @safe bool(const(void*), const(void*))
* * * * * * IfStatement::toIR(): object.d(612)
* * * * * * * IdentityExp::toElem: p1 is p2 @ bool
* * * * * * * * VarExp::toElem: p1 @ const(void*)
* * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)')
* * * * * * * * * * function param
* * * * * * * * * * type: const(void*)
* * * * * * * * VarExp::toElem: p2 @ const(void*)
* * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)')
* * * * * * * * * * function param
* * * * * * * * * * type: const(void*)
* * * * * * * ReturnStatement::toIR(): object.d(613)
* * * * * * * * IntegerExp::toElem: true @ bool
* * * * * * * * * IntegerExp::toConstElem: true @ bool
* * * * * * * * * * value = i1 true
* * * * * * * ReturnStatement::toIR(): object.d(615)
* * * * * * * * EqualExp::toElem: memcmp(p1, p2, this.initializer().length) == 0 @ bool
* * * * * * * * * CallExp::toElem: memcmp(p1, p2, this.initializer().length) @ int
* * * * * * * * * * VarExp::toElem: memcmp @ pure nothrow @nogc @trusted int(const(void)* src1, const(void)* src2, ulong size)
* * * * * * * * * * * DtoSymbolAddress ('memcmp' of type 'pure nothrow @nogc @trusted int(const(void)* src1, const(void)* src2, ulong size)')
* * * * * * * * * * * * FuncDeclaration
* * * * * * * * * * * * DtoFunctionType(pure nothrow @nogc @trusted int(const(void)* src1, const(void)* src2, ulong size))
* * * * * * * * * * * * * x86-64 ABI: Transforming return type
* * * * * * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * * * * * Final function type: i32 (i64, i8*, i8*)
* * * * * * * * * * * * DtoResolveFunction(utils.memcmp): utils.d(9)
* * * * * * * * * * * * * DtoDeclareFunction(utils.memcmp): utils.d(9)
* * * * * * * * * * * * * * Enter defineAsExternallyAvailable
* * * * * * * * * * * * * * * Cross-module inlining fully disabled.
* * * * * * * * * * * * * * DtoFunctionType(pure nothrow @nogc @trusted int(const(void)* src1, const(void)* src2, ulong size))
* * * * * * * * * * * * * * func =
declare i32 @_D5utils6memcmpFNaNbNiNePxvQdmZi(i64, i8*, i8*)
* * * * * * * * * * DtoCallFunction()
* * * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * VarExp::toElem: p1 @ const(void)*
* * * * * * * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)')
* * * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * * type: const(void*)
* * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * VarExp::toElem: p2 @ const(void)*
* * * * * * * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)')
* * * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * * type: const(void*)
* * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * ArrayLengthExp::toElem: this.initializer().length @ ulong
* * * * * * * * * * * * * * CallExp::toElem: this.initializer() @ const(void)[]
* * * * * * * * * * * * * * * DotVarExp::toElem: this.initializer @ const pure nothrow @nogc @safe const(void)[]()
* * * * * * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct)
* * * * * * * * * * * * * * * * * normal this exp
* * * * * * * * * * * * * * * * vthis: %40 = load %object.TypeInfo_Struct*, %object.TypeInfo_Struct** %4
* * * * * * * * * * * * * * * * funcval: %44 = load i8*, i8** %43, align 8
* * * * * * * * * * * * * * * * isMember = this is: object.TypeInfo_Struct
* * * * * * * * * * * * * * * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]())
* * * * * * * * * * * * * * * * funcval casted: %45 = bitcast i8* %44 to { i64, i8* } (%object.TypeInfo_Struct*)*
* * * * * * * * * * * * * * * DtoCallFunction()
* * * * * * * * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * * * * * * doing normal arguments
* * * * * * * * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * * * * * * * %46 = load %object.TypeInfo_Struct*, %object.TypeInfo_Struct** %4
* * * * * * * * * * * * * * * * Function type: const pure nothrow @nogc @safe const(void)[]()
* * * * * * * * * * * * * * DtoArrayLen
* * * * * * * * * * * Building type: pure nothrow @nogc @trusted int(const(void)* src1, const(void)* src2, ulong size)
* * * * * * * * * * * * DtoFunctionType(pure nothrow @nogc @trusted int(const(void)* src1, const(void)* src2, ulong size))
* * * * * * * * * * * * * x86-64 ABI: Transforming return type
* * * * * * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * * * * * Final function type: i32 (i64, i8*, i8*)
* * * * * * * * * * * doing normal arguments
* * * * * * * * * * * Arguments so far: (0)
* * * * * * * * * * * Function type: pure nothrow @nogc @trusted int(const(void)* src1, const(void)* src2, ulong size)
* * * * * * * * * IntegerExp::toElem: 0 @ int
* * * * * * * * * * IntegerExp::toConstElem: 0 @ int
* * * * * * * * * * * value = i32 0
* * * * * * * * * integral or pointer or interface
* * * * * * * * * lv: %51 = call i32 @_D5utils6memcmpFNaNbNiNePxvQdmZi(i64 %48, i8* %50, i8* %49) #0
* * * * * * * * * rv: i32 0
* * DtoDefineFunction(object.TypeInfo_Struct.compare): object.d(618)
* * * isMember = this is: object.TypeInfo_Struct
* * * DtoFunctionType(const pure nothrow @trusted int(const(void*) p1, const(void*) p2))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i32 (%object.TypeInfo_Struct*, i8*, i8*)
* * * DtoResolveFunction(object.TypeInfo_Struct.compare): object.d(618)
* * * * DtoDeclareFunction(object.TypeInfo_Struct.compare): object.d(618)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Struct
* * * * * DtoFunctionType(const pure nothrow @trusted int(const(void*) p1, const(void*) p2))
* * * * * func =
declare i32 @_D6object15TypeInfo_Struct7compareMxFNaNbNexPvxQdZi(%object.TypeInfo_Struct*, i8*, i8*)
* * * Doing function body for: compare
* * * DtoCreateNestedContext for object.TypeInfo_Struct.compare
* * * * DtoCreateNestedContextType for object.TypeInfo_Struct.compare
* * * CompoundStatement::toIR():
* * * * CompoundStatement::toIR(): object.d(618)
* * * * * IfStatement::toIR(): object.d(619)
* * * * * * IdentityExp::toElem: p1 !is p2 @ bool
* * * * * * * VarExp::toElem: p1 @ const(void*)
* * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)')
* * * * * * * * * function param
* * * * * * * * * type: const(void*)
* * * * * * * VarExp::toElem: p2 @ const(void*)
* * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)')
* * * * * * * * * function param
* * * * * * * * * type: const(void*)
* * * * * * ScopeStatement::toIR(): object.d(619)
* * * * * * * IfStatement::toIR(): object.d(620)
* * * * * * * * VarExp::toElem: p1 @ const(void*)
* * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)')
* * * * * * * * * * function param
* * * * * * * * * * type: const(void*)
* * * * * * * * if conditional: %12 = load i8*, i8** %5
* * * * * * * * Casting from 'const(void*)' to 'bool'
* * * * * * * * ScopeStatement::toIR(): object.d(620)
* * * * * * * * * IfStatement::toIR(): object.d(621)
* * * * * * * * * * NotExp::toElem: !p2 @ bool
* * * * * * * * * * * VarExp::toElem: p2 @ const(void*)
* * * * * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)')
* * * * * * * * * * * * * function param
* * * * * * * * * * * * * type: const(void*)
* * * * * * * * * * * Casting from 'const(void*)' to 'bool'
* * * * * * * * * * ReturnStatement::toIR(): object.d(622)
* * * * * * * * * * * IntegerExp::toElem: 1 @ int
* * * * * * * * * * * * IntegerExp::toConstElem: 1 @ int
* * * * * * * * * * * * * value = i32 1
* * * * * * * * * * IfStatement::toIR(): object.d(623)
* * * * * * * * * * * DotVarExp::toElem: this.xopCmp @ const(int function(const(void*), const(void*)) pure nothrow @safe)
* * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct)
* * * * * * * * * * * * * normal this exp
* * * * * * * * * * * * Indexing aggregate field object.TypeInfo_Struct.xopCmp:
* * * * * * * * * * * * * Value: %23 = getelementptr inbounds %object.TypeInfo_Struct, %object.TypeInfo_Struct* %22, i32 0, i32 6
* * * * * * * * * * * if conditional: %24 = load i32 (i8*, i8*)*, i32 (i8*, i8*)** %23
* * * * * * * * * * * Casting from 'const(int function(const(void*), const(void*)) pure nothrow @safe)' to 'bool'
* * * * * * * * * * * ReturnStatement::toIR(): object.d(624)
* * * * * * * * * * * * CallExp::toElem: (*this.xopCmp)(p2, p1) @ int
* * * * * * * * * * * * * PtrExp::toElem: *this.xopCmp @ pure nothrow @safe int(const(void*), const(void*))
* * * * * * * * * * * * * * DotVarExp::toElem: this.xopCmp @ const(int function(const(void*), const(void*)) pure nothrow @safe)
* * * * * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct)
* * * * * * * * * * * * * * * * normal this exp
* * * * * * * * * * * * * * * Indexing aggregate field object.TypeInfo_Struct.xopCmp:
* * * * * * * * * * * * * * * * Value: %29 = getelementptr inbounds %object.TypeInfo_Struct, %object.TypeInfo_Struct* %28, i32 0, i32 6
* * * * * * * * * * * * * DtoCallFunction()
* * * * * * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * * * * VarExp::toElem: p2 @ const(void*)
* * * * * * * * * * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)')
* * * * * * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * * * * * type: const(void*)
* * * * * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * * * * VarExp::toElem: p1 @ const(void*)
* * * * * * * * * * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)')
* * * * * * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * * * * * type: const(void*)
* * * * * * * * * * * * * * doing normal arguments
* * * * * * * * * * * * * * Arguments so far: (0)
* * * * * * * * * * * * * * Function type: pure nothrow @safe int(const(void*), const(void*))
* * * * * * * * * * * ReturnStatement::toIR(): object.d(626)
* * * * * * * * * * * * CallExp::toElem: memcmp(p1, p2, this.initializer().length) @ int
* * * * * * * * * * * * * VarExp::toElem: memcmp @ pure nothrow @nogc @trusted int(const(void)* src1, const(void)* src2, ulong size)
* * * * * * * * * * * * * * DtoSymbolAddress ('memcmp' of type 'pure nothrow @nogc @trusted int(const(void)* src1, const(void)* src2, ulong size)')
* * * * * * * * * * * * * * * FuncDeclaration
* * * * * * * * * * * * * DtoCallFunction()
* * * * * * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * * * * VarExp::toElem: p1 @ const(void)*
* * * * * * * * * * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)')
* * * * * * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * * * * * type: const(void*)
* * * * * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * * * * VarExp::toElem: p2 @ const(void)*
* * * * * * * * * * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)')
* * * * * * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * * * * * type: const(void*)
* * * * * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * * * * ArrayLengthExp::toElem: this.initializer().length @ ulong
* * * * * * * * * * * * * * * * * CallExp::toElem: this.initializer() @ const(void)[]
* * * * * * * * * * * * * * * * * * DotVarExp::toElem: this.initializer @ const pure nothrow @nogc @safe const(void)[]()
* * * * * * * * * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct)
* * * * * * * * * * * * * * * * * * * * normal this exp
* * * * * * * * * * * * * * * * * * * vthis: %36 = load %object.TypeInfo_Struct*, %object.TypeInfo_Struct** %4
* * * * * * * * * * * * * * * * * * * funcval: %40 = load i8*, i8** %39, align 8
* * * * * * * * * * * * * * * * * * * isMember = this is: object.TypeInfo_Struct
* * * * * * * * * * * * * * * * * * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]())
* * * * * * * * * * * * * * * * * * * funcval casted: %41 = bitcast i8* %40 to { i64, i8* } (%object.TypeInfo_Struct*)*
* * * * * * * * * * * * * * * * * * DtoCallFunction()
* * * * * * * * * * * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * * * * * * * * * doing normal arguments
* * * * * * * * * * * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * * * * * * * * * * %42 = load %object.TypeInfo_Struct*, %object.TypeInfo_Struct** %4
* * * * * * * * * * * * * * * * * * * Function type: const pure nothrow @nogc @safe const(void)[]()
* * * * * * * * * * * * * * * * * DtoArrayLen
* * * * * * * * * * * * * * doing normal arguments
* * * * * * * * * * * * * * Arguments so far: (0)
* * * * * * * * * * * * * * Function type: pure nothrow @nogc @trusted int(const(void)* src1, const(void)* src2, ulong size)
* * * * * * * * ReturnStatement::toIR(): object.d(628)
* * * * * * * * * IntegerExp::toElem: -1 @ int
* * * * * * * * * * IntegerExp::toConstElem: -1 @ int
* * * * * * * * * * * value = i32 -1
* * * * * ReturnStatement::toIR(): object.d(630)
* * * * * * IntegerExp::toElem: 0 @ int
* * * * * * * IntegerExp::toConstElem: 0 @ int
* * * * * * * * value = i32 0
* * DtoDefineFunction(object.TypeInfo_Struct.tsize): object.d(633)
* * * isMember = this is: object.TypeInfo_Struct
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (%object.TypeInfo_Struct*)
* * * DtoResolveFunction(object.TypeInfo_Struct.tsize): object.d(633)
* * * * DtoDeclareFunction(object.TypeInfo_Struct.tsize): object.d(633)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Struct
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * func =
declare i64 @_D6object15TypeInfo_Struct5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo_Struct*)
* * * Doing function body for: tsize
* * * DtoCreateNestedContext for object.TypeInfo_Struct.tsize
* * * * DtoCreateNestedContextType for object.TypeInfo_Struct.tsize
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(634)
* * * * * ArrayLengthExp::toElem: this.initializer().length @ ulong
* * * * * * CallExp::toElem: this.initializer() @ const(void)[]
* * * * * * * DotVarExp::toElem: this.initializer @ const pure nothrow @nogc @safe const(void)[]()
* * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct)
* * * * * * * * * normal this exp
* * * * * * * * vthis: %4 = load %object.TypeInfo_Struct*, %object.TypeInfo_Struct** %2
* * * * * * * * funcval: %8 = load i8*, i8** %7, align 8
* * * * * * * * isMember = this is: object.TypeInfo_Struct
* * * * * * * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]())
* * * * * * * * funcval casted: %9 = bitcast i8* %8 to { i64, i8* } (%object.TypeInfo_Struct*)*
* * * * * * * DtoCallFunction()
* * * * * * * * Evaluating argument expressions
* * * * * * * * doing normal arguments
* * * * * * * * Arguments so far: (1)
* * * * * * * * * %10 = load %object.TypeInfo_Struct*, %object.TypeInfo_Struct** %2
* * * * * * * * Function type: const pure nothrow @nogc @safe const(void)[]()
* * * * * * DtoArrayLen
* * DtoDefineFunction(object.TypeInfo_Struct.initializer): object.d(637)
* * * Doing function body for: initializer
* * * DtoCreateNestedContext for object.TypeInfo_Struct.initializer
* * * * DtoCreateNestedContextType for object.TypeInfo_Struct.initializer
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(638)
* * * * * DotVarExp::toElem: this.m_init @ const(void)[]
* * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct)
* * * * * * * normal this exp
* * * * * * Indexing aggregate field object.TypeInfo_Struct.m_init:
* * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Struct, %object.TypeInfo_Struct* %4, i32 0, i32 3
* * DtoDefineFunction(object.TypeInfo_Struct.flags): object.d(641)
* * * isMember = this is: object.TypeInfo_Struct
* * * DtoFunctionType(const pure nothrow @nogc @property @safe uint())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i32 (%object.TypeInfo_Struct*)
* * * DtoResolveFunction(object.TypeInfo_Struct.flags): object.d(641)
* * * * DtoDeclareFunction(object.TypeInfo_Struct.flags): object.d(641)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Struct
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe uint())
* * * * * func =
declare i32 @_D6object15TypeInfo_Struct5flagsMxFNaNbNdNiNfZk(%object.TypeInfo_Struct*)
* * * Doing function body for: flags
* * * DtoCreateNestedContext for object.TypeInfo_Struct.flags
* * * * DtoCreateNestedContextType for object.TypeInfo_Struct.flags
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(642)
* * * * * CastExp::toElem: cast(uint)this.m_flags @ uint
* * * * * * DotVarExp::toElem: this.m_flags @ const(StructFlags)
* * * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct)
* * * * * * * * normal this exp
* * * * * * * Indexing aggregate field object.TypeInfo_Struct.m_flags:
* * * * * * * * Building type: StructFlags
* * * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Struct, %object.TypeInfo_Struct* %4, i32 0, i32 8
* * * * * * * Building type: StructFlags
* * * * * * Casting from 'const(uint)' to 'uint'
* * DtoDefineFunction(object.TypeInfo_Struct.talign): object.d(645)
* * * isMember = this is: object.TypeInfo_Struct
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (%object.TypeInfo_Struct*)
* * * DtoResolveFunction(object.TypeInfo_Struct.talign): object.d(645)
* * * * DtoDeclareFunction(object.TypeInfo_Struct.talign): object.d(645)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Struct
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * func =
declare i64 @_D6object15TypeInfo_Struct6talignMxFNaNbNdNiNfZm(%object.TypeInfo_Struct*)
* * * Doing function body for: talign
* * * DtoCreateNestedContext for object.TypeInfo_Struct.talign
* * * * DtoCreateNestedContextType for object.TypeInfo_Struct.talign
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(646)
* * * * * CastExp::toElem: cast(ulong)this.m_align @ ulong
* * * * * * DotVarExp::toElem: this.m_align @ const(uint)
* * * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct)
* * * * * * * * normal this exp
* * * * * * * Indexing aggregate field object.TypeInfo_Struct.m_align:
* * * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Struct, %object.TypeInfo_Struct* %4, i32 0, i32 12
* * * * * * Casting from 'const(uint)' to 'ulong'
* * * * * * * cast to: i64
* * DtoDefineFunction(object.TypeInfo_Struct.destroy): object.d(649)
* * * isMember = this is: object.TypeInfo_Struct
* * * DtoFunctionType(const void(void* p))
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: void (%object.TypeInfo_Struct*, i8*)
* * * DtoResolveFunction(object.TypeInfo_Struct.destroy): object.d(649)
* * * * DtoDeclareFunction(object.TypeInfo_Struct.destroy): object.d(649)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Struct
* * * * * DtoFunctionType(const void(void* p))
* * * * * func =
declare void @_D6object15TypeInfo_Struct7destroyMxFPvZv(%object.TypeInfo_Struct*, i8*)
* * * Doing function body for: destroy
* * * DtoCreateNestedContext for object.TypeInfo_Struct.destroy
* * * * DtoCreateNestedContextType for object.TypeInfo_Struct.destroy
* * * CompoundStatement::toIR():
* * * * IfStatement::toIR(): object.d(650)
* * * * * DotVarExp::toElem: this.xdtor @ const(void function(void*))
* * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct)
* * * * * * * normal this exp
* * * * * * Indexing aggregate field object.TypeInfo_Struct.xdtor:
* * * * * * * Value: %7 = getelementptr inbounds %object.TypeInfo_Struct, %object.TypeInfo_Struct* %6, i32 0, i32 10
* * * * * if conditional: %8 = load void (i8*)*, void (i8*)** %7
* * * * * Casting from 'const(void function(void*))' to 'bool'
* * * * * ScopeStatement::toIR(): object.d(650)
* * * * * * IfStatement::toIR(): object.d(651)
* * * * * * * AndExp::toElem: this.m_flags & cast(StructFlags)2u @ const(StructFlags)
* * * * * * * * DotVarExp::toElem: this.m_flags @ const(StructFlags)
* * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct)
* * * * * * * * * * normal this exp
* * * * * * * * * Indexing aggregate field object.TypeInfo_Struct.m_flags:
* * * * * * * * * * Building type: StructFlags
* * * * * * * * * * Value: %13 = getelementptr inbounds %object.TypeInfo_Struct, %object.TypeInfo_Struct* %12, i32 0, i32 8
* * * * * * * * * Building type: StructFlags
* * * * * * * * IntegerExp::toElem: cast(StructFlags)2u @ StructFlags
* * * * * * * * * IntegerExp::toConstElem: cast(StructFlags)2u @ StructFlags
* * * * * * * * * * Building type: StructFlags
* * * * * * * * * * value = i32 2
* * * * * * * * Casting from 'uint' to 'const(StructFlags)'
* * * * * * * * * Building type: StructFlags
* * * * * * * if conditional: %15 = and i32 %14, 2
* * * * * * * Casting from 'const(uint)' to 'bool'
* * * * * * * ExpStatement::toIR(): object.d(652)
* * * * * * * * CallExp::toElem: (*this.xdtorti)(p, this) @ void
* * * * * * * * * PtrExp::toElem: *this.xdtorti @ void(void*, const(TypeInfo_Struct))
* * * * * * * * * * DotVarExp::toElem: this.xdtorti @ const(void function(void*, const(TypeInfo_Struct)))
* * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct)
* * * * * * * * * * * * normal this exp
* * * * * * * * * * * Indexing aggregate field object.TypeInfo_Struct.xdtorti:
* * * * * * * * * * * * Value: %22 = bitcast i8* %21 to void (%object.TypeInfo_Struct*, i8*)**
* * * * * * * * * DtoCallFunction()
* * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * DtoArgument
* * * * * * * * * * * * VarExp::toElem: p @ void*
* * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*')
* * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * type: void*
* * * * * * * * * * * DtoArgument
* * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct)
* * * * * * * * * * * * * normal this exp
* * * * * * * * * * Building type: void(void*, const(TypeInfo_Struct))
* * * * * * * * * * * DtoFunctionType(void(void*, const(TypeInfo_Struct)))
* * * * * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * * * * Final function type: void (%object.TypeInfo_Struct*, i8*)
* * * * * * * * * * doing normal arguments
* * * * * * * * * * Arguments so far: (0)
* * * * * * * * * * Function type: void(void*, const(TypeInfo_Struct))
* * * * * * * ExpStatement::toIR(): object.d(654)
* * * * * * * * CallExp::toElem: (*this.xdtor)(p) @ void
* * * * * * * * * PtrExp::toElem: *this.xdtor @ void(void*)
* * * * * * * * * * DotVarExp::toElem: this.xdtor @ const(void function(void*))
* * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct)
* * * * * * * * * * * * normal this exp
* * * * * * * * * * * Indexing aggregate field object.TypeInfo_Struct.xdtor:
* * * * * * * * * * * * Value: %28 = getelementptr inbounds %object.TypeInfo_Struct, %object.TypeInfo_Struct* %27, i32 0, i32 10
* * * * * * * * * DtoCallFunction()
* * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * DtoArgument
* * * * * * * * * * * * VarExp::toElem: p @ void*
* * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*')
* * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * type: void*
* * * * * * * * * * doing normal arguments
* * * * * * * * * * Arguments so far: (0)
* * * * * * * * * * Function type: void(void*)
* * DtoDefineFunction(object.TypeInfo_Struct.postblit): object.d(658)
* * * isMember = this is: object.TypeInfo_Struct
* * * DtoFunctionType(const void(void* p))
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: void (%object.TypeInfo_Struct*, i8*)
* * * DtoResolveFunction(object.TypeInfo_Struct.postblit): object.d(658)
* * * * DtoDeclareFunction(object.TypeInfo_Struct.postblit): object.d(658)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Struct
* * * * * DtoFunctionType(const void(void* p))
* * * * * func =
declare void @_D6object15TypeInfo_Struct8postblitMxFPvZv(%object.TypeInfo_Struct*, i8*)
* * * Doing function body for: postblit
* * * DtoCreateNestedContext for object.TypeInfo_Struct.postblit
* * * * DtoCreateNestedContextType for object.TypeInfo_Struct.postblit
* * * CompoundStatement::toIR():
* * * * IfStatement::toIR(): object.d(659)
* * * * * DotVarExp::toElem: this.xpostblit @ const(void function(void*))
* * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct)
* * * * * * * normal this exp
* * * * * * Indexing aggregate field object.TypeInfo_Struct.xpostblit:
* * * * * * * Value: %7 = getelementptr inbounds %object.TypeInfo_Struct, %object.TypeInfo_Struct* %6, i32 0, i32 11
* * * * * if conditional: %8 = load void (i8*)*, void (i8*)** %7
* * * * * Casting from 'const(void function(void*))' to 'bool'
* * * * * ExpStatement::toIR(): object.d(660)
* * * * * * CallExp::toElem: (*this.xpostblit)(p) @ void
* * * * * * * PtrExp::toElem: *this.xpostblit @ void(void*)
* * * * * * * * DotVarExp::toElem: this.xpostblit @ const(void function(void*))
* * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct)
* * * * * * * * * * normal this exp
* * * * * * * * * Indexing aggregate field object.TypeInfo_Struct.xpostblit:
* * * * * * * * * * Value: %13 = getelementptr inbounds %object.TypeInfo_Struct, %object.TypeInfo_Struct* %12, i32 0, i32 11
* * * * * * * DtoCallFunction()
* * * * * * * * Evaluating argument expressions
* * * * * * * * * DtoArgument
* * * * * * * * * * VarExp::toElem: p @ void*
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*')
* * * * * * * * * * * * function param
* * * * * * * * * * * * type: void*
* * * * * * * * doing normal arguments
* * * * * * * * Arguments so far: (0)
* * * * * * * * Function type: void(void*)
* * VarDeclaration::codegen(): 'object.TypeInfo_Struct.name'
* * * DtoResolveVariable(object.TypeInfo_Struct.name)
* * VarDeclaration::codegen(): 'object.TypeInfo_Struct.m_init'
* * * DtoResolveVariable(object.TypeInfo_Struct.m_init)
* * VarDeclaration::codegen(): 'object.TypeInfo_Struct.xtoHash'
* * * DtoResolveVariable(object.TypeInfo_Struct.xtoHash)
* * VarDeclaration::codegen(): 'object.TypeInfo_Struct.xopEquals'
* * * DtoResolveVariable(object.TypeInfo_Struct.xopEquals)
* * VarDeclaration::codegen(): 'object.TypeInfo_Struct.xopCmp'
* * * DtoResolveVariable(object.TypeInfo_Struct.xopCmp)
* * VarDeclaration::codegen(): 'object.TypeInfo_Struct.xtoString'
* * * DtoResolveVariable(object.TypeInfo_Struct.xtoString)
* * Ignoring EnumDeclaration::codegen: 'object.TypeInfo_Struct.StructFlags'
* * VarDeclaration::codegen(): 'object.TypeInfo_Struct.m_flags'
* * * DtoResolveVariable(object.TypeInfo_Struct.m_flags)
* * VarDeclaration::codegen(): 'object.TypeInfo_Struct.xdtor'
* * * DtoResolveVariable(object.TypeInfo_Struct.xdtor)
* * VarDeclaration::codegen(): 'object.TypeInfo_Struct.xdtorti'
* * * DtoResolveVariable(object.TypeInfo_Struct.xdtorti)
* * VarDeclaration::codegen(): 'object.TypeInfo_Struct.xpostblit'
* * * DtoResolveVariable(object.TypeInfo_Struct.xpostblit)
* * VarDeclaration::codegen(): 'object.TypeInfo_Struct.m_align'
* * * DtoResolveVariable(object.TypeInfo_Struct.m_align)
* * DtoDefineFunction(object.TypeInfo_Struct.rtInfo): object.d(691)
* * * isMember = this is: object.TypeInfo_Struct
* * * DtoFunctionType(const pure nothrow @nogc @property @safe immutable(void)*())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i8* (%object.TypeInfo_Struct*)
* * * DtoResolveFunction(object.TypeInfo_Struct.rtInfo): object.d(691)
* * * * DtoDeclareFunction(object.TypeInfo_Struct.rtInfo): object.d(691)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Struct
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe immutable(void)*())
* * * * * func =
declare i8* @_D6object15TypeInfo_Struct6rtInfoMxFNaNbNdNiNfZPyv(%object.TypeInfo_Struct*)
* * * Doing function body for: rtInfo
* * * DtoCreateNestedContext for object.TypeInfo_Struct.rtInfo
* * * * DtoCreateNestedContextType for object.TypeInfo_Struct.rtInfo
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(692)
* * * * * DotVarExp::toElem: this.m_RTInfo @ immutable(void)*
* * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct)
* * * * * * * normal this exp
* * * * * * Indexing aggregate field object.TypeInfo_Struct.m_RTInfo:
* * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Struct, %object.TypeInfo_Struct* %4, i32 0, i32 16
* * DtoDefineFunction(object.TypeInfo_Struct.argTypes): object.d(696)
* * * isMember = this is: object.TypeInfo_Struct
* * * DtoFunctionType(nothrow @safe int(out TypeInfo arg1, out TypeInfo arg2))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i32 (%object.TypeInfo_Struct*, %object.TypeInfo**, %object.TypeInfo**)
* * * DtoResolveFunction(object.TypeInfo_Struct.argTypes): object.d(696)
* * * * DtoDeclareFunction(object.TypeInfo_Struct.argTypes): object.d(696)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Struct
* * * * * DtoFunctionType(nothrow @safe int(out TypeInfo arg1, out TypeInfo arg2))
* * * * * func =
declare i32 @_D6object15TypeInfo_Struct8argTypesMFNbNfJC8TypeInfoJQlZi(%object.TypeInfo_Struct*, %object.TypeInfo**, %object.TypeInfo**)
* * * Doing function body for: argTypes
* * * DtoCreateNestedContext for object.TypeInfo_Struct.argTypes
* * * * DtoCreateNestedContextType for object.TypeInfo_Struct.argTypes
* * * CompoundStatement::toIR():
* * * * ExpStatement::toIR():
* * * * * AssignExp::toElem: arg1 = null | (object.TypeInfo)(object.TypeInfo = object.TypeInfo)
* * * * * * VarExp::toElem: arg1 @ object.TypeInfo
* * * * * * * DtoSymbolAddress ('arg1' of type 'object.TypeInfo')
* * * * * * * * function param
* * * * * * * * type: object.TypeInfo
* * * * * * NullExp::toElem(type=object.TypeInfo): null
* * * * * * * NullExp::toConstElem(type=object.TypeInfo): null
* * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * DtoAssign()
* * * * * * * l : %object.TypeInfo** %2
* * * * * * * r : %object.TypeInfo* null
* * * * ExpStatement::toIR():
* * * * * AssignExp::toElem: arg2 = null | (object.TypeInfo)(object.TypeInfo = object.TypeInfo)
* * * * * * VarExp::toElem: arg2 @ object.TypeInfo
* * * * * * * DtoSymbolAddress ('arg2' of type 'object.TypeInfo')
* * * * * * * * function param
* * * * * * * * type: object.TypeInfo
* * * * * * NullExp::toElem(type=object.TypeInfo): null
* * * * * * * NullExp::toConstElem(type=object.TypeInfo): null
* * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * DtoAssign()
* * * * * * * l : %object.TypeInfo** %1
* * * * * * * r : %object.TypeInfo* null
* * * * CompoundStatement::toIR(): object.d(696)
* * * * * ExpStatement::toIR(): object.d(697)
* * * * * * AssignExp::toElem: arg1 = this.m_arg1 | (object.TypeInfo)(object.TypeInfo = object.TypeInfo)
* * * * * * * VarExp::toElem: arg1 @ object.TypeInfo
* * * * * * * * DtoSymbolAddress ('arg1' of type 'object.TypeInfo')
* * * * * * * * * function param
* * * * * * * * * type: object.TypeInfo
* * * * * * * DotVarExp::toElem: this.m_arg1 @ object.TypeInfo
* * * * * * * * ThisExp::toElem: this @ object.TypeInfo_Struct
* * * * * * * * * normal this exp
* * * * * * * * Indexing aggregate field object.TypeInfo_Struct.m_arg1:
* * * * * * * * * Value: %7 = getelementptr inbounds %object.TypeInfo_Struct, %object.TypeInfo_Struct* %6, i32 0, i32 14
* * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * DtoAssign()
* * * * * * * * l : %object.TypeInfo** %2
* * * * * * * * r : %8 = load %object.TypeInfo*, %object.TypeInfo** %7
* * * * * ExpStatement::toIR(): object.d(698)
* * * * * * AssignExp::toElem: arg2 = this.m_arg2 | (object.TypeInfo)(object.TypeInfo = object.TypeInfo)
* * * * * * * VarExp::toElem: arg2 @ object.TypeInfo
* * * * * * * * DtoSymbolAddress ('arg2' of type 'object.TypeInfo')
* * * * * * * * * function param
* * * * * * * * * type: object.TypeInfo
* * * * * * * DotVarExp::toElem: this.m_arg2 @ object.TypeInfo
* * * * * * * * ThisExp::toElem: this @ object.TypeInfo_Struct
* * * * * * * * * normal this exp
* * * * * * * * Indexing aggregate field object.TypeInfo_Struct.m_arg2:
* * * * * * * * * Value: %10 = getelementptr inbounds %object.TypeInfo_Struct, %object.TypeInfo_Struct* %9, i32 0, i32 15
* * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * DtoAssign()
* * * * * * * * l : %object.TypeInfo** %1
* * * * * * * * r : %11 = load %object.TypeInfo*, %object.TypeInfo** %10
* * * * * ReturnStatement::toIR(): object.d(699)
* * * * * * IntegerExp::toElem: 0 @ int
* * * * * * * IntegerExp::toConstElem: 0 @ int
* * * * * * * * value = i32 0
* * VarDeclaration::codegen(): 'object.TypeInfo_Struct.m_arg1'
* * * DtoResolveVariable(object.TypeInfo_Struct.m_arg1)
* * VarDeclaration::codegen(): 'object.TypeInfo_Struct.m_arg2'
* * * DtoResolveVariable(object.TypeInfo_Struct.m_arg2)
* * VarDeclaration::codegen(): 'object.TypeInfo_Struct.m_RTInfo'
* * * DtoResolveVariable(object.TypeInfo_Struct.m_RTInfo)
* * Building default initializer for object.TypeInfo_Struct
* * * Creating initializer constant for TypeInfo_Struct
* * * * Field priority for name: 1
* * * * Field priority for m_init: 1
* * * * Field priority for xtoHash: 1
* * * * Field priority for xopEquals: 1
* * * * Field priority for xopCmp: 1
* * * * Field priority for xtoString: 1
* * * * Field priority for m_flags: 1
* * * * Field priority for xdtor: 1
* * * * Field priority for xdtorti: 1
* * * * Field priority for xpostblit: 1
* * * * Field priority for m_align: 1
* * * * Field priority for m_arg1: 1
* * * * Field priority for m_arg2: 1
* * * * Field priority for m_RTInfo: 1
* * * * Building type: StructFlags
* * * * Building type: StructFlags
* * * * DtoConstExpInit(targetType = string, exp = null)
* * * * * NullExp::toConstElem(type=string): null
* * * * DtoConstExpInit(targetType = void[], exp = null)
* * * * * NullExp::toConstElem(type=void[]): null
* * * * DtoConstExpInit(targetType = ulong function(const(void*)) pure nothrow @safe, exp = null)
* * * * * NullExp::toConstElem(type=ulong function(const(void*)) pure nothrow @safe): null
* * * * DtoConstExpInit(targetType = bool function(const(void*), const(void*)) pure nothrow @safe, exp = null)
* * * * * NullExp::toConstElem(type=bool function(const(void*), const(void*)) pure nothrow @safe): null
* * * * DtoConstExpInit(targetType = int function(const(void*), const(void*)) pure nothrow @safe, exp = null)
* * * * * NullExp::toConstElem(type=int function(const(void*), const(void*)) pure nothrow @safe): null
* * * * DtoConstExpInit(targetType = string function(const(void*)) pure nothrow @safe, exp = null)
* * * * * NullExp::toConstElem(type=string function(const(void*)) pure nothrow @safe): null
* * * * DtoConstExpInit(targetType = StructFlags, exp = cast(StructFlags)1u)
* * * * * IntegerExp::toConstElem: cast(StructFlags)1u @ StructFlags
* * * * * * Building type: StructFlags
* * * * * * value = i32 1
* * * * DtoConstExpInit(targetType = void function(void*), exp = null)
* * * * * NullExp::toConstElem(type=void function(void*)): null
* * * * DtoConstExpInit(targetType = void function(void*), exp = null)
* * * * * NullExp::toConstElem(type=void function(void*)): null
* * * * DtoConstExpInit(targetType = uint, exp = 0u)
* * * * * IntegerExp::toConstElem: 0u @ uint
* * * * * * value = i32 0
* * * * DtoConstExpInit(targetType = object.TypeInfo, exp = null)
* * * * * NullExp::toConstElem(type=object.TypeInfo): null
* * * * DtoConstExpInit(targetType = object.TypeInfo, exp = null)
* * * * * NullExp::toConstElem(type=object.TypeInfo): null
* * * * DtoConstExpInit(targetType = immutable(void)*, exp = null)
* * * * * NullExp::toConstElem(type=immutable(void)*): null
* * * * final initializer: %object.TypeInfo_Struct { [19 x i8*]* @_D15TypeInfo_Struct6__vtblZ, i8* null, { i64, i8* } zeroinitializer, { i64, i8* } zeroinitializer, i64 (i8*)* null, i1 (i8*, i8*)* null, i32 (i8*, i8*)* null, { i64, i8* } (i8*)* null, i32 1, [4 x i8] zeroinitializer, void (i8*)* null, void (i8*)* null, i32 0, [4 x i8] zeroinitializer, %object.TypeInfo* null, %object.TypeInfo* null, i8* null }
* * Building vtbl initializer
* * DtoDefineClassInfo(TypeInfo_Struct)
* * * Building ClassInfo.interfaces
* ClassDeclaration::codegen: 'object.TypeInfo_Pointer'
* * DtoDefineFunction(object.TypeInfo_Pointer.toString): object.d(709)
* * * isMember = this is: object.TypeInfo_Pointer
* * * DtoFunctionType(const pure nothrow @safe string())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.TypeInfo_Pointer*)
* * * DtoResolveFunction(object.TypeInfo_Pointer.toString): object.d(709)
* * * * DtoDeclareFunction(object.TypeInfo_Pointer.toString): object.d(709)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Pointer
* * * * * DtoFunctionType(const pure nothrow @safe string())
* * * * * func =
declare { i64, i8* } @_D6object16TypeInfo_Pointer8toStringMxFNaNbNfZAya(%object.TypeInfo_Pointer*)
* * * Doing function body for: toString
* * * DtoCreateNestedContext for object.TypeInfo_Pointer.toString
* * * * DtoCreateNestedContextType for object.TypeInfo_Pointer.toString
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(710)
* * * * * StringExp::toElem: "UNK*" @ string
* * * * * * type: [5 x i8]
* * * * * * init: [5 x i8] c"UNK*\00"
* * DtoDefineFunction(object.TypeInfo_Pointer.opEquals): object.d(713)
* * * isMember = this is: object.TypeInfo_Pointer
* * * DtoFunctionType(bool(Object o))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i1 (%object.TypeInfo_Pointer*, %object.Object*)
* * * DtoResolveFunction(object.TypeInfo_Pointer.opEquals): object.d(713)
* * * * DtoDeclareFunction(object.TypeInfo_Pointer.opEquals): object.d(713)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Pointer
* * * * * DtoFunctionType(bool(Object o))
* * * * * func =
declare i1 @_D6object16TypeInfo_Pointer8opEqualsMFC6ObjectZb(%object.TypeInfo_Pointer*, %object.Object*)
* * * Doing function body for: opEquals
* * * DtoCreateNestedContext for object.TypeInfo_Pointer.opEquals
* * * * DtoCreateNestedContextType for object.TypeInfo_Pointer.opEquals
* * * CompoundStatement::toIR():
* * * * CompoundStatement::toIR(): object.d(713)
* * * * * IfStatement::toIR(): object.d(714)
* * * * * * IdentityExp::toElem: this is o @ bool
* * * * * * * ThisExp::toElem: this @ object.Object
* * * * * * * * normal this exp
* * * * * * * VarExp::toElem: o @ object.Object
* * * * * * * * DtoSymbolAddress ('o' of type 'object.Object')
* * * * * * * * * function param
* * * * * * * * * type: object.Object
* * * * * * ReturnStatement::toIR(): object.d(715)
* * * * * * * IntegerExp::toElem: true @ bool
* * * * * * * * IntegerExp::toConstElem: true @ bool
* * * * * * * * * value = i1 true
* * * * * ExpStatement::toIR(): object.d(716)
* * * * * * DeclarationExp::toElem: (const const(TypeInfo_Pointer) c = cast(const(TypeInfo_Pointer))o;) | T=void
* * * * * * * DtoDeclarationExp: c
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = const(TypeInfo_Pointer))
* * * * * * * * * llvm value for decl: %5 = alloca %object.TypeInfo_Pointer*, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: c = cast(const(TypeInfo_Pointer))o | (const(TypeInfo_Pointer))(const(TypeInfo_Pointer) = const(TypeInfo_Pointer))
* * * * * * * * * * VarExp::toElem: c @ const(TypeInfo_Pointer)
* * * * * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_Pointer)')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * CastExp::toElem: cast(const(TypeInfo_Pointer))o @ const(TypeInfo_Pointer)
* * * * * * * * * * * VarExp::toElem: o @ object.Object
* * * * * * * * * * * * DtoSymbolAddress ('o' of type 'object.Object')
* * * * * * * * * * * * * function param
* * * * * * * * * * * * * type: object.Object
* * * * * * * * * * * Casting from 'object.Object' to 'const(TypeInfo_Pointer)'
* * * * * * * * * * * * DtoCastClass(object.Object, const(TypeInfo_Pointer))
* * * * * * * * * * * * * dynamic up cast
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * l : %5 = alloca %object.TypeInfo_Pointer*, align 8
* * * * * * * * * * * r : %16 = bitcast i8* %15 to %object.TypeInfo_Pointer*
* * * * * ReturnStatement::toIR(): object.d(717)
* * * * * * LogicalExp::toElem: c && opEquals(this.m_next, c.m_next) @ bool
* * * * * * * VarExp::toElem: c @ const(TypeInfo_Pointer)
* * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_Pointer)')
* * * * * * * * * a normal variable
* * * * * * * Casting from 'const(TypeInfo_Pointer)' to 'bool'
* * * * * * * * DtoCastClass(const(TypeInfo_Pointer), bool)
* * * * * * * * * to bool
* * * * * * * CallExp::toElem: opEquals(this.m_next, c.m_next) @ bool
* * * * * * * * VarExp::toElem: opEquals @ @system bool(const(Object) lhs, const(Object) rhs)
* * * * * * * * * DtoSymbolAddress ('opEquals' of type '@system bool(const(Object) lhs, const(Object) rhs)')
* * * * * * * * * * FuncDeclaration
* * * * * * * * DtoCallFunction()
* * * * * * * * * Evaluating argument expressions
* * * * * * * * * * DtoArgument
* * * * * * * * * * * DotVarExp::toElem: this.m_next @ const(Object)
* * * * * * * * * * * * ThisExp::toElem: this @ object.TypeInfo_Pointer
* * * * * * * * * * * * * normal this exp
* * * * * * * * * * * * Indexing aggregate field object.TypeInfo_Pointer.m_next:
* * * * * * * * * * * * * Value: %21 = getelementptr inbounds %object.TypeInfo_Pointer, %object.TypeInfo_Pointer* %20, i32 0, i32 2
* * * * * * * * * * DtoArgument
* * * * * * * * * * * DotVarExp::toElem: c.m_next @ const(Object)
* * * * * * * * * * * * VarExp::toElem: c @ const(TypeInfo_Pointer)
* * * * * * * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_Pointer)')
* * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * Indexing aggregate field object.TypeInfo_Pointer.m_next:
* * * * * * * * * * * * * Value: %24 = getelementptr inbounds %object.TypeInfo_Pointer, %object.TypeInfo_Pointer* %23, i32 0, i32 2
* * * * * * * * * doing normal arguments
* * * * * * * * * Arguments so far: (0)
* * * * * * * * * Function type: @system bool(const(Object) lhs, const(Object) rhs)
* * DtoDefineFunction(object.TypeInfo_Pointer.getHash): object.d(720)
* * * isMember = this is: object.TypeInfo_Pointer
* * * DtoFunctionType(const nothrow @trusted ulong(const(void*) p))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (%object.TypeInfo_Pointer*, i8*)
* * * DtoResolveFunction(object.TypeInfo_Pointer.getHash): object.d(720)
* * * * DtoDeclareFunction(object.TypeInfo_Pointer.getHash): object.d(720)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Pointer
* * * * * DtoFunctionType(const nothrow @trusted ulong(const(void*) p))
* * * * * func =
declare i64 @_D6object16TypeInfo_Pointer7getHashMxFNbNexPvZm(%object.TypeInfo_Pointer*, i8*)
* * * Doing function body for: getHash
* * * DtoCreateNestedContext for object.TypeInfo_Pointer.getHash
* * * * DtoCreateNestedContextType for object.TypeInfo_Pointer.getHash
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(721)
* * * * * CastExp::toElem: cast(ulong)*cast(void**)p @ ulong
* * * * * * PtrExp::toElem: *cast(void**)p @ void*
* * * * * * * CastExp::toElem: cast(void**)p @ void**
* * * * * * * * VarExp::toElem: p @ const(void*)
* * * * * * * * * DtoSymbolAddress ('p' of type 'const(void*)')
* * * * * * * * * * function param
* * * * * * * * * * type: const(void*)
* * * * * * * * Casting from 'const(void*)' to 'void**'
* * * * * * * * * src: %6 = load i8*, i8** %4
* * * * * * * * * to type: i8**
* * * * * * Casting from 'void*' to 'ulong'
* * DtoDefineFunction(object.TypeInfo_Pointer.equals): object.d(724)
* * * isMember = this is: object.TypeInfo_Pointer
* * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i1 (%object.TypeInfo_Pointer*, i8*, i8*)
* * * DtoResolveFunction(object.TypeInfo_Pointer.equals): object.d(724)
* * * * DtoDeclareFunction(object.TypeInfo_Pointer.equals): object.d(724)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Pointer
* * * * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2))
* * * * * func =
declare i1 @_D6object16TypeInfo_Pointer6equalsMxFxPvxQdZb(%object.TypeInfo_Pointer*, i8*, i8*)
* * * Doing function body for: equals
* * * DtoCreateNestedContext for object.TypeInfo_Pointer.equals
* * * * DtoCreateNestedContextType for object.TypeInfo_Pointer.equals
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(725)
* * * * * IdentityExp::toElem: *cast(void**)p1 is *cast(void**)p2 @ bool
* * * * * * PtrExp::toElem: *cast(void**)p1 @ void*
* * * * * * * CastExp::toElem: cast(void**)p1 @ void**
* * * * * * * * VarExp::toElem: p1 @ const(void*)
* * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)')
* * * * * * * * * * function param
* * * * * * * * * * type: const(void*)
* * * * * * * * Casting from 'const(void*)' to 'void**'
* * * * * * * * * src: %8 = load i8*, i8** %5
* * * * * * * * * to type: i8**
* * * * * * PtrExp::toElem: *cast(void**)p2 @ void*
* * * * * * * CastExp::toElem: cast(void**)p2 @ void**
* * * * * * * * VarExp::toElem: p2 @ const(void*)
* * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)')
* * * * * * * * * * function param
* * * * * * * * * * type: const(void*)
* * * * * * * * Casting from 'const(void*)' to 'void**'
* * * * * * * * * src: %10 = load i8*, i8** %6
* * * * * * * * * to type: i8**
* * DtoDefineFunction(object.TypeInfo_Pointer.compare): object.d(728)
* * * isMember = this is: object.TypeInfo_Pointer
* * * DtoFunctionType(const int(const(void*) p1, const(void*) p2))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i32 (%object.TypeInfo_Pointer*, i8*, i8*)
* * * DtoResolveFunction(object.TypeInfo_Pointer.compare): object.d(728)
* * * * DtoDeclareFunction(object.TypeInfo_Pointer.compare): object.d(728)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Pointer
* * * * * DtoFunctionType(const int(const(void*) p1, const(void*) p2))
* * * * * func =
declare i32 @_D6object16TypeInfo_Pointer7compareMxFxPvxQdZi(%object.TypeInfo_Pointer*, i8*, i8*)
* * * Doing function body for: compare
* * * DtoCreateNestedContext for object.TypeInfo_Pointer.compare
* * * * DtoCreateNestedContextType for object.TypeInfo_Pointer.compare
* * * CompoundStatement::toIR():
* * * * IfStatement::toIR(): object.d(729)
* * * * * CmpExp::toElem: *cast(void**)p1 < *cast(void**)p2 @ bool
* * * * * * PtrExp::toElem: *cast(void**)p1 @ void*
* * * * * * * CastExp::toElem: cast(void**)p1 @ void**
* * * * * * * * VarExp::toElem: p1 @ const(void*)
* * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)')
* * * * * * * * * * function param
* * * * * * * * * * type: const(void*)
* * * * * * * * Casting from 'const(void*)' to 'void**'
* * * * * * * * * src: %8 = load i8*, i8** %5
* * * * * * * * * to type: i8**
* * * * * * PtrExp::toElem: *cast(void**)p2 @ void*
* * * * * * * CastExp::toElem: cast(void**)p2 @ void**
* * * * * * * * VarExp::toElem: p2 @ const(void*)
* * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)')
* * * * * * * * * * function param
* * * * * * * * * * type: const(void*)
* * * * * * * * Casting from 'const(void*)' to 'void**'
* * * * * * * * * src: %10 = load i8*, i8** %6
* * * * * * * * * to type: i8**
* * * * * * type 1: %12 = load i8*, i8** %9
* * * * * * type 2: %13 = load i8*, i8** %11
* * * * * ReturnStatement::toIR(): object.d(730)
* * * * * * IntegerExp::toElem: -1 @ int
* * * * * * * IntegerExp::toConstElem: -1 @ int
* * * * * * * * value = i32 -1
* * * * * IfStatement::toIR(): object.d(731)
* * * * * * CmpExp::toElem: *cast(void**)p1 > *cast(void**)p2 @ bool
* * * * * * * PtrExp::toElem: *cast(void**)p1 @ void*
* * * * * * * * CastExp::toElem: cast(void**)p1 @ void**
* * * * * * * * * VarExp::toElem: p1 @ const(void*)
* * * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)')
* * * * * * * * * * * function param
* * * * * * * * * * * type: const(void*)
* * * * * * * * * Casting from 'const(void*)' to 'void**'
* * * * * * * * * * src: %18 = load i8*, i8** %5
* * * * * * * * * * to type: i8**
* * * * * * * PtrExp::toElem: *cast(void**)p2 @ void*
* * * * * * * * CastExp::toElem: cast(void**)p2 @ void**
* * * * * * * * * VarExp::toElem: p2 @ const(void*)
* * * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)')
* * * * * * * * * * * function param
* * * * * * * * * * * type: const(void*)
* * * * * * * * * Casting from 'const(void*)' to 'void**'
* * * * * * * * * * src: %20 = load i8*, i8** %6
* * * * * * * * * * to type: i8**
* * * * * * * type 1: %22 = load i8*, i8** %19
* * * * * * * type 2: %23 = load i8*, i8** %21
* * * * * * ReturnStatement::toIR(): object.d(732)
* * * * * * * IntegerExp::toElem: 1 @ int
* * * * * * * * IntegerExp::toConstElem: 1 @ int
* * * * * * * * * value = i32 1
* * * * * * ReturnStatement::toIR(): object.d(734)
* * * * * * * IntegerExp::toElem: 0 @ int
* * * * * * * * IntegerExp::toConstElem: 0 @ int
* * * * * * * * * value = i32 0
* * DtoDefineFunction(object.TypeInfo_Pointer.tsize): object.d(737)
* * * isMember = this is: object.TypeInfo_Pointer
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (%object.TypeInfo_Pointer*)
* * * DtoResolveFunction(object.TypeInfo_Pointer.tsize): object.d(737)
* * * * DtoDeclareFunction(object.TypeInfo_Pointer.tsize): object.d(737)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Pointer
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * func =
declare i64 @_D6object16TypeInfo_Pointer5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo_Pointer*)
* * * Doing function body for: tsize
* * * DtoCreateNestedContext for object.TypeInfo_Pointer.tsize
* * * * DtoCreateNestedContextType for object.TypeInfo_Pointer.tsize
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(738)
* * * * * IntegerExp::toElem: 8LU @ ulong
* * * * * * IntegerExp::toConstElem: 8LU @ ulong
* * * * * * * value = i64 8
* * DtoDefineFunction(object.TypeInfo_Pointer.initializer): object.d(741)
* * * isMember = this is: object.TypeInfo_Pointer
* * * DtoFunctionType(const pure nothrow @nogc @trusted const(void)[]())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.TypeInfo_Pointer*)
* * * DtoResolveFunction(object.TypeInfo_Pointer.initializer): object.d(741)
* * * * DtoDeclareFunction(object.TypeInfo_Pointer.initializer): object.d(741)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Pointer
* * * * * DtoFunctionType(const pure nothrow @nogc @trusted const(void)[]())
* * * * * func =
declare { i64, i8* } @_D6object16TypeInfo_Pointer11initializerMxFNaNbNiNeZAxv(%object.TypeInfo_Pointer*)
* * * Doing function body for: initializer
* * * DtoCreateNestedContext for object.TypeInfo_Pointer.initializer
* * * * DtoCreateNestedContextType for object.TypeInfo_Pointer.initializer
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(742)
* * * * * SliceExp::toElem: null[0..8] @ const(void)[]
* * * * * * NullExp::toElem(type=void*): null
* * * * * * * NullExp::toConstElem(type=void*): null
* * * * * * IntegerExp::toElem: 0LU @ ulong
* * * * * * * IntegerExp::toConstElem: 0LU @ ulong
* * * * * * * * value = i64 0
* * * * * * IntegerExp::toElem: 8LU @ ulong
* * * * * * * IntegerExp::toConstElem: 8LU @ ulong
* * * * * * * * value = i64 8
* * DtoDefineFunction(object.TypeInfo_Pointer.swap): object.d(745)
* * * isMember = this is: object.TypeInfo_Pointer
* * * DtoFunctionType(const void(void* p1, void* p2))
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: void (%object.TypeInfo_Pointer*, i8*, i8*)
* * * DtoResolveFunction(object.TypeInfo_Pointer.swap): object.d(745)
* * * * DtoDeclareFunction(object.TypeInfo_Pointer.swap): object.d(745)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Pointer
* * * * * DtoFunctionType(const void(void* p1, void* p2))
* * * * * func =
declare void @_D6object16TypeInfo_Pointer4swapMxFPvQcZv(%object.TypeInfo_Pointer*, i8*, i8*)
* * * Doing function body for: swap
* * * DtoCreateNestedContext for object.TypeInfo_Pointer.swap
* * * * DtoCreateNestedContextType for object.TypeInfo_Pointer.swap
* * * CompoundStatement::toIR():
* * * * CompoundStatement::toIR(): object.d(745)
* * * * * ExpStatement::toIR(): object.d(746)
* * * * * * DeclarationExp::toElem: (void* tmp = *cast(void**)p1;) | T=void
* * * * * * * DtoDeclarationExp: tmp
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = void*)
* * * * * * * * * llvm value for decl: %7 = alloca i8*, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: tmp = *cast(void**)p1 | (void*)(void* = void*)
* * * * * * * * * * VarExp::toElem: tmp @ void*
* * * * * * * * * * * DtoSymbolAddress ('tmp' of type 'void*')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * PtrExp::toElem: *cast(void**)p1 @ void*
* * * * * * * * * * * CastExp::toElem: cast(void**)p1 @ void**
* * * * * * * * * * * * VarExp::toElem: p1 @ void*
* * * * * * * * * * * * * DtoSymbolAddress ('p1' of type 'void*')
* * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * type: void*
* * * * * * * * * * * * Casting from 'void*' to 'void**'
* * * * * * * * * * * * * src: %9 = load i8*, i8** %5
* * * * * * * * * * * * * to type: i8**
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %7 = alloca i8*, align 8
* * * * * * * * * * * rhs: %11 = load i8*, i8** %10
* * * * * ExpStatement::toIR(): object.d(747)
* * * * * * AssignExp::toElem: *cast(void**)p1 = *cast(void**)p2 | (void*)(void* = void*)
* * * * * * * PtrExp::toElem: *cast(void**)p1 @ void*
* * * * * * * * CastExp::toElem: cast(void**)p1 @ void**
* * * * * * * * * VarExp::toElem: p1 @ void*
* * * * * * * * * * DtoSymbolAddress ('p1' of type 'void*')
* * * * * * * * * * * function param
* * * * * * * * * * * type: void*
* * * * * * * * * Casting from 'void*' to 'void**'
* * * * * * * * * * src: %12 = load i8*, i8** %5
* * * * * * * * * * to type: i8**
* * * * * * * PtrExp::toElem: *cast(void**)p2 @ void*
* * * * * * * * CastExp::toElem: cast(void**)p2 @ void**
* * * * * * * * * VarExp::toElem: p2 @ void*
* * * * * * * * * * DtoSymbolAddress ('p2' of type 'void*')
* * * * * * * * * * * function param
* * * * * * * * * * * type: void*
* * * * * * * * * Casting from 'void*' to 'void**'
* * * * * * * * * * src: %14 = load i8*, i8** %6
* * * * * * * * * * to type: i8**
* * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * DtoAssign()
* * * * * * * * lhs: %13 = bitcast i8* %12 to i8**
* * * * * * * * rhs: %16 = load i8*, i8** %15
* * * * * ExpStatement::toIR(): object.d(748)
* * * * * * AssignExp::toElem: *cast(void**)p2 = tmp | (void*)(void* = void*)
* * * * * * * PtrExp::toElem: *cast(void**)p2 @ void*
* * * * * * * * CastExp::toElem: cast(void**)p2 @ void**
* * * * * * * * * VarExp::toElem: p2 @ void*
* * * * * * * * * * DtoSymbolAddress ('p2' of type 'void*')
* * * * * * * * * * * function param
* * * * * * * * * * * type: void*
* * * * * * * * * Casting from 'void*' to 'void**'
* * * * * * * * * * src: %17 = load i8*, i8** %6
* * * * * * * * * * to type: i8**
* * * * * * * VarExp::toElem: tmp @ void*
* * * * * * * * DtoSymbolAddress ('tmp' of type 'void*')
* * * * * * * * * a normal variable
* * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * DtoAssign()
* * * * * * * * lhs: %18 = bitcast i8* %17 to i8**
* * * * * * * * rhs: %19 = load i8*, i8** %7
* * DtoDefineFunction(object.TypeInfo_Pointer.next): object.d(751)
* * * isMember = this is: object.TypeInfo_Pointer
* * * DtoFunctionType(inout pure nothrow @nogc @property inout(TypeInfo)())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: %object.TypeInfo* (%object.TypeInfo_Pointer*)
* * * DtoResolveFunction(object.TypeInfo_Pointer.next): object.d(751)
* * * * DtoDeclareFunction(object.TypeInfo_Pointer.next): object.d(751)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Pointer
* * * * * DtoFunctionType(inout pure nothrow @nogc @property inout(TypeInfo)())
* * * * * func =
declare %object.TypeInfo* @_D6object16TypeInfo_Pointer4nextMNgFNaNbNdNiZNgC8TypeInfo(%object.TypeInfo_Pointer*)
* * * Doing function body for: next
* * * DtoCreateNestedContext for object.TypeInfo_Pointer.next
* * * * DtoCreateNestedContextType for object.TypeInfo_Pointer.next
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(752)
* * * * * DotVarExp::toElem: this.m_next @ inout(TypeInfo)
* * * * * * ThisExp::toElem: this @ inout(TypeInfo_Pointer)
* * * * * * * normal this exp
* * * * * * Indexing aggregate field object.TypeInfo_Pointer.m_next:
* * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Pointer, %object.TypeInfo_Pointer* %4, i32 0, i32 2
* * DtoDefineFunction(object.TypeInfo_Pointer.flags): object.d(755)
* * * isMember = this is: object.TypeInfo_Pointer
* * * DtoFunctionType(const pure nothrow @nogc @property @safe uint())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i32 (%object.TypeInfo_Pointer*)
* * * DtoResolveFunction(object.TypeInfo_Pointer.flags): object.d(755)
* * * * DtoDeclareFunction(object.TypeInfo_Pointer.flags): object.d(755)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Pointer
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe uint())
* * * * * func =
declare i32 @_D6object16TypeInfo_Pointer5flagsMxFNaNbNdNiNfZk(%object.TypeInfo_Pointer*)
* * * Doing function body for: flags
* * * DtoCreateNestedContext for object.TypeInfo_Pointer.flags
* * * * DtoCreateNestedContextType for object.TypeInfo_Pointer.flags
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(756)
* * * * * IntegerExp::toElem: 1u @ uint
* * * * * * IntegerExp::toConstElem: 1u @ uint
* * * * * * * value = i32 1
* * VarDeclaration::codegen(): 'object.TypeInfo_Pointer.m_next'
* * * DtoResolveVariable(object.TypeInfo_Pointer.m_next)
* * Building default initializer for object.TypeInfo_Pointer
* * * Creating initializer constant for TypeInfo_Pointer
* * * * Field priority for m_next: 1
* * * * DtoConstExpInit(targetType = object.TypeInfo, exp = null)
* * * * * NullExp::toConstElem(type=object.TypeInfo): null
* * * * final initializer: %object.TypeInfo_Pointer { [19 x i8*]* @_D16TypeInfo_Pointer6__vtblZ, i8* null, %object.TypeInfo* null }
* * Building vtbl initializer
* * DtoDefineClassInfo(TypeInfo_Pointer)
* * * Building ClassInfo.interfaces
* ClassDeclaration::codegen: 'object.TypeInfo_Typedef'
* * DtoResolveClass(object.TypeInfo_Typedef): object.d(762)
* * * Building type: object.TypeInfo_Typedef
* * * * Building class type object.TypeInfo_Typedef @ object.d(762)
* * * * * Instance size: 56
* * * * * Field priority for base: 1
* * * * * Field priority for name: 1
* * * * * Field priority for m_init: 1
* * * * * class type: %object.TypeInfo_Typedef = type { [19 x i8*]*, i8*, %object.TypeInfo*, { i64, i8* }, { i64, i8* } }
* * DtoDefineFunction(object.TypeInfo_Typedef.toString): object.d(763)
* * * isMember = this is: object.TypeInfo_Typedef
* * * DtoFunctionType(const pure nothrow @safe string())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.TypeInfo_Typedef*)
* * * DtoResolveFunction(object.TypeInfo_Typedef.toString): object.d(763)
* * * * DtoDeclareFunction(object.TypeInfo_Typedef.toString): object.d(763)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Typedef
* * * * * DtoFunctionType(const pure nothrow @safe string())
* * * * * func =
declare { i64, i8* } @_D6object16TypeInfo_Typedef8toStringMxFNaNbNfZAya(%object.TypeInfo_Typedef*)
* * * Doing function body for: toString
* * * DtoCreateNestedContext for object.TypeInfo_Typedef.toString
* * * * DtoCreateNestedContextType for object.TypeInfo_Typedef.toString
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(764)
* * * * * DotVarExp::toElem: this.name @ string
* * * * * * ThisExp::toElem: this @ const(TypeInfo_Typedef)
* * * * * * * normal this exp
* * * * * * Indexing aggregate field object.TypeInfo_Typedef.name:
* * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Typedef, %object.TypeInfo_Typedef* %4, i32 0, i32 3
* * DtoDefineFunction(object.TypeInfo_Typedef.opEquals): object.d(767)
* * * isMember = this is: object.TypeInfo_Typedef
* * * DtoFunctionType(bool(Object o))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i1 (%object.TypeInfo_Typedef*, %object.Object*)
* * * DtoResolveFunction(object.TypeInfo_Typedef.opEquals): object.d(767)
* * * * DtoDeclareFunction(object.TypeInfo_Typedef.opEquals): object.d(767)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Typedef
* * * * * DtoFunctionType(bool(Object o))
* * * * * func =
declare i1 @_D6object16TypeInfo_Typedef8opEqualsMFC6ObjectZb(%object.TypeInfo_Typedef*, %object.Object*)
* * * Doing function body for: opEquals
* * * DtoCreateNestedContext for object.TypeInfo_Typedef.opEquals
* * * * DtoCreateNestedContextType for object.TypeInfo_Typedef.opEquals
* * * CompoundStatement::toIR():
* * * * CompoundStatement::toIR(): object.d(767)
* * * * * IfStatement::toIR(): object.d(768)
* * * * * * IdentityExp::toElem: this is o @ bool
* * * * * * * ThisExp::toElem: this @ object.Object
* * * * * * * * normal this exp
* * * * * * * VarExp::toElem: o @ object.Object
* * * * * * * * DtoSymbolAddress ('o' of type 'object.Object')
* * * * * * * * * function param
* * * * * * * * * type: object.Object
* * * * * * ReturnStatement::toIR(): object.d(769)
* * * * * * * IntegerExp::toElem: true @ bool
* * * * * * * * IntegerExp::toConstElem: true @ bool
* * * * * * * * * value = i1 true
* * * * * ExpStatement::toIR(): object.d(770)
* * * * * * DeclarationExp::toElem: (const const(TypeInfo_Typedef) c = cast(const(TypeInfo_Typedef))o;) | T=void
* * * * * * * DtoDeclarationExp: c
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = const(TypeInfo_Typedef))
* * * * * * * * * llvm value for decl: %5 = alloca %object.TypeInfo_Typedef*, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: c = cast(const(TypeInfo_Typedef))o | (const(TypeInfo_Typedef))(const(TypeInfo_Typedef) = const(TypeInfo_Typedef))
* * * * * * * * * * VarExp::toElem: c @ const(TypeInfo_Typedef)
* * * * * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_Typedef)')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * CastExp::toElem: cast(const(TypeInfo_Typedef))o @ const(TypeInfo_Typedef)
* * * * * * * * * * * VarExp::toElem: o @ object.Object
* * * * * * * * * * * * DtoSymbolAddress ('o' of type 'object.Object')
* * * * * * * * * * * * * function param
* * * * * * * * * * * * * type: object.Object
* * * * * * * * * * * Casting from 'object.Object' to 'const(TypeInfo_Typedef)'
* * * * * * * * * * * * DtoCastClass(object.Object, const(TypeInfo_Typedef))
* * * * * * * * * * * * * dynamic up cast
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * l : %5 = alloca %object.TypeInfo_Typedef*, align 8
* * * * * * * * * * * r : %16 = bitcast i8* %15 to %object.TypeInfo_Typedef*
* * * * * ReturnStatement::toIR(): object.d(771)
* * * * * * LogicalExp::toElem: c && this.name == c.name && opEquals(this.base, c.base) @ bool
* * * * * * * LogicalExp::toElem: c && this.name == c.name @ bool
* * * * * * * * VarExp::toElem: c @ const(TypeInfo_Typedef)
* * * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_Typedef)')
* * * * * * * * * * a normal variable
* * * * * * * * Casting from 'const(TypeInfo_Typedef)' to 'bool'
* * * * * * * * * DtoCastClass(const(TypeInfo_Typedef), bool)
* * * * * * * * * * to bool
* * * * * * * * EqualExp::toElem: this.name == c.name @ bool
* * * * * * * * * DotVarExp::toElem: this.name @ const(string)
* * * * * * * * * * ThisExp::toElem: this @ object.TypeInfo_Typedef
* * * * * * * * * * * normal this exp
* * * * * * * * * * Indexing aggregate field object.TypeInfo_Typedef.name:
* * * * * * * * * * * Value: %21 = getelementptr inbounds %object.TypeInfo_Typedef, %object.TypeInfo_Typedef* %20, i32 0, i32 3
* * * * * * * * * DotVarExp::toElem: c.name @ const(string)
* * * * * * * * * * VarExp::toElem: c @ const(TypeInfo_Typedef)
* * * * * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_Typedef)')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * Indexing aggregate field object.TypeInfo_Typedef.name:
* * * * * * * * * * * Value: %23 = getelementptr inbounds %object.TypeInfo_Typedef, %object.TypeInfo_Typedef* %22, i32 0, i32 3
* * * * * * * * * static or dynamic array
* * * * * * * * * Comparing arrays using memcmp
* * * * * * * * * DtoArrayPtr
* * * * * * * * * DtoArrayPtr
* * * * * * * * * DtoArrayLen
* * * * * * * * * DtoArrayLen
* * * * * * * CallExp::toElem: opEquals(this.base, c.base) @ bool
* * * * * * * * VarExp::toElem: opEquals @ @system bool(const(Object) lhs, const(Object) rhs)
* * * * * * * * * DtoSymbolAddress ('opEquals' of type '@system bool(const(Object) lhs, const(Object) rhs)')
* * * * * * * * * * FuncDeclaration
* * * * * * * * DtoCallFunction()
* * * * * * * * * Evaluating argument expressions
* * * * * * * * * * DtoArgument
* * * * * * * * * * * DotVarExp::toElem: this.base @ const(Object)
* * * * * * * * * * * * ThisExp::toElem: this @ object.TypeInfo_Typedef
* * * * * * * * * * * * * normal this exp
* * * * * * * * * * * * Indexing aggregate field object.TypeInfo_Typedef.base:
* * * * * * * * * * * * * Value: %42 = getelementptr inbounds %object.TypeInfo_Typedef, %object.TypeInfo_Typedef* %41, i32 0, i32 2
* * * * * * * * * * DtoArgument
* * * * * * * * * * * DotVarExp::toElem: c.base @ const(Object)
* * * * * * * * * * * * VarExp::toElem: c @ const(TypeInfo_Typedef)
* * * * * * * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_Typedef)')
* * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * Indexing aggregate field object.TypeInfo_Typedef.base:
* * * * * * * * * * * * * Value: %45 = getelementptr inbounds %object.TypeInfo_Typedef, %object.TypeInfo_Typedef* %44, i32 0, i32 2
* * * * * * * * * doing normal arguments
* * * * * * * * * Arguments so far: (0)
* * * * * * * * * Function type: @system bool(const(Object) lhs, const(Object) rhs)
* * DtoDefineFunction(object.TypeInfo_Typedef.getHash): object.d(774)
* * * isMember = this is: object.TypeInfo_Typedef
* * * DtoFunctionType(const nothrow @safe ulong(const(void*) p))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (%object.TypeInfo_Typedef*, i8*)
* * * DtoResolveFunction(object.TypeInfo_Typedef.getHash): object.d(774)
* * * * DtoDeclareFunction(object.TypeInfo_Typedef.getHash): object.d(774)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Typedef
* * * * * DtoFunctionType(const nothrow @safe ulong(const(void*) p))
* * * * * func =
declare i64 @_D6object16TypeInfo_Typedef7getHashMxFNbNfxPvZm(%object.TypeInfo_Typedef*, i8*)
* * * Doing function body for: getHash
* * * DtoCreateNestedContext for object.TypeInfo_Typedef.getHash
* * * * DtoCreateNestedContextType for object.TypeInfo_Typedef.getHash
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(775)
* * * * * CallExp::toElem: this.base.getHash(p) @ ulong
* * * * * * DotVarExp::toElem: this.base.getHash @ const nothrow @trusted ulong(const(void*) p)
* * * * * * * DotVarExp::toElem: this.base @ const(TypeInfo)
* * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Typedef)
* * * * * * * * * normal this exp
* * * * * * * * Indexing aggregate field object.TypeInfo_Typedef.base:
* * * * * * * * * Value: %7 = getelementptr inbounds %object.TypeInfo_Typedef, %object.TypeInfo_Typedef* %6, i32 0, i32 2
* * * * * * * vthis: %8 = load %object.TypeInfo*, %object.TypeInfo** %7
* * * * * * * funcval: %12 = load i8*, i8** %11, align 8
* * * * * * * isMember = this is: object.TypeInfo
* * * * * * * DtoFunctionType(const nothrow @trusted ulong(const(void*) p))
* * * * * * * funcval casted: %13 = bitcast i8* %12 to i64 (%object.TypeInfo*, i8*)*
* * * * * * DtoCallFunction()
* * * * * * * Evaluating argument expressions
* * * * * * * * DtoArgument
* * * * * * * * * VarExp::toElem: p @ const(void*)
* * * * * * * * * * DtoSymbolAddress ('p' of type 'const(void*)')
* * * * * * * * * * * function param
* * * * * * * * * * * type: const(void*)
* * * * * * * Building type: const nothrow @trusted ulong(const(void*) p)
* * * * * * * * DtoFunctionType(const nothrow @trusted ulong(const(void*) p))
* * * * * * * * * x86-64 ABI: Transforming return type
* * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * Final function type: i64 (i8*)
* * * * * * * doing normal arguments
* * * * * * * Arguments so far: (1)
* * * * * * * * %14 = load %object.TypeInfo*, %object.TypeInfo** %7
* * * * * * * Function type: const nothrow @trusted ulong(const(void*) p)
* * DtoDefineFunction(object.TypeInfo_Typedef.equals): object.d(778)
* * * isMember = this is: object.TypeInfo_Typedef
* * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i1 (%object.TypeInfo_Typedef*, i8*, i8*)
* * * DtoResolveFunction(object.TypeInfo_Typedef.equals): object.d(778)
* * * * DtoDeclareFunction(object.TypeInfo_Typedef.equals): object.d(778)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Typedef
* * * * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2))
* * * * * func =
declare i1 @_D6object16TypeInfo_Typedef6equalsMxFxPvxQdZb(%object.TypeInfo_Typedef*, i8*, i8*)
* * * Doing function body for: equals
* * * DtoCreateNestedContext for object.TypeInfo_Typedef.equals
* * * * DtoCreateNestedContextType for object.TypeInfo_Typedef.equals
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(779)
* * * * * CallExp::toElem: this.base.equals(p1, p2) @ bool
* * * * * * DotVarExp::toElem: this.base.equals @ const bool(const(void*) p1, const(void*) p2)
* * * * * * * DotVarExp::toElem: this.base @ const(TypeInfo)
* * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Typedef)
* * * * * * * * * normal this exp
* * * * * * * * Indexing aggregate field object.TypeInfo_Typedef.base:
* * * * * * * * * Value: %9 = getelementptr inbounds %object.TypeInfo_Typedef, %object.TypeInfo_Typedef* %8, i32 0, i32 2
* * * * * * * vthis: %10 = load %object.TypeInfo*, %object.TypeInfo** %9
* * * * * * * funcval: %14 = load i8*, i8** %13, align 8
* * * * * * * isMember = this is: object.TypeInfo
* * * * * * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2))
* * * * * * * funcval casted: %15 = bitcast i8* %14 to i1 (%object.TypeInfo*, i8*, i8*)*
* * * * * * DtoCallFunction()
* * * * * * * Evaluating argument expressions
* * * * * * * * DtoArgument
* * * * * * * * * VarExp::toElem: p1 @ const(void*)
* * * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)')
* * * * * * * * * * * function param
* * * * * * * * * * * type: const(void*)
* * * * * * * * DtoArgument
* * * * * * * * * VarExp::toElem: p2 @ const(void*)
* * * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)')
* * * * * * * * * * * function param
* * * * * * * * * * * type: const(void*)
* * * * * * * Building type: const bool(const(void*) p1, const(void*) p2)
* * * * * * * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2))
* * * * * * * * * x86-64 ABI: Transforming return type
* * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * Final function type: i1 (i8*, i8*)
* * * * * * * doing normal arguments
* * * * * * * Arguments so far: (1)
* * * * * * * * %16 = load %object.TypeInfo*, %object.TypeInfo** %9
* * * * * * * Function type: const bool(const(void*) p1, const(void*) p2)
* * DtoDefineFunction(object.TypeInfo_Typedef.compare): object.d(782)
* * * isMember = this is: object.TypeInfo_Typedef
* * * DtoFunctionType(const int(const(void*) p1, const(void*) p2))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i32 (%object.TypeInfo_Typedef*, i8*, i8*)
* * * DtoResolveFunction(object.TypeInfo_Typedef.compare): object.d(782)
* * * * DtoDeclareFunction(object.TypeInfo_Typedef.compare): object.d(782)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Typedef
* * * * * DtoFunctionType(const int(const(void*) p1, const(void*) p2))
* * * * * func =
declare i32 @_D6object16TypeInfo_Typedef7compareMxFxPvxQdZi(%object.TypeInfo_Typedef*, i8*, i8*)
* * * Doing function body for: compare
* * * DtoCreateNestedContext for object.TypeInfo_Typedef.compare
* * * * DtoCreateNestedContextType for object.TypeInfo_Typedef.compare
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(783)
* * * * * CallExp::toElem: this.base.compare(p1, p2) @ int
* * * * * * DotVarExp::toElem: this.base.compare @ const int(const(void*) p1, const(void*) p2)
* * * * * * * DotVarExp::toElem: this.base @ const(TypeInfo)
* * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Typedef)
* * * * * * * * * normal this exp
* * * * * * * * Indexing aggregate field object.TypeInfo_Typedef.base:
* * * * * * * * * Value: %9 = getelementptr inbounds %object.TypeInfo_Typedef, %object.TypeInfo_Typedef* %8, i32 0, i32 2
* * * * * * * vthis: %10 = load %object.TypeInfo*, %object.TypeInfo** %9
* * * * * * * funcval: %14 = load i8*, i8** %13, align 8
* * * * * * * isMember = this is: object.TypeInfo
* * * * * * * DtoFunctionType(const int(const(void*) p1, const(void*) p2))
* * * * * * * funcval casted: %15 = bitcast i8* %14 to i32 (%object.TypeInfo*, i8*, i8*)*
* * * * * * DtoCallFunction()
* * * * * * * Evaluating argument expressions
* * * * * * * * DtoArgument
* * * * * * * * * VarExp::toElem: p1 @ const(void*)
* * * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)')
* * * * * * * * * * * function param
* * * * * * * * * * * type: const(void*)
* * * * * * * * DtoArgument
* * * * * * * * * VarExp::toElem: p2 @ const(void*)
* * * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)')
* * * * * * * * * * * function param
* * * * * * * * * * * type: const(void*)
* * * * * * * Building type: const int(const(void*) p1, const(void*) p2)
* * * * * * * * DtoFunctionType(const int(const(void*) p1, const(void*) p2))
* * * * * * * * * x86-64 ABI: Transforming return type
* * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * Final function type: i32 (i8*, i8*)
* * * * * * * doing normal arguments
* * * * * * * Arguments so far: (1)
* * * * * * * * %16 = load %object.TypeInfo*, %object.TypeInfo** %9
* * * * * * * Function type: const int(const(void*) p1, const(void*) p2)
* * DtoDefineFunction(object.TypeInfo_Typedef.tsize): object.d(786)
* * * isMember = this is: object.TypeInfo_Typedef
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (%object.TypeInfo_Typedef*)
* * * DtoResolveFunction(object.TypeInfo_Typedef.tsize): object.d(786)
* * * * DtoDeclareFunction(object.TypeInfo_Typedef.tsize): object.d(786)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Typedef
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * func =
declare i64 @_D6object16TypeInfo_Typedef5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo_Typedef*)
* * * Doing function body for: tsize
* * * DtoCreateNestedContext for object.TypeInfo_Typedef.tsize
* * * * DtoCreateNestedContextType for object.TypeInfo_Typedef.tsize
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(787)
* * * * * CallExp::toElem: this.base.tsize() @ ulong
* * * * * * DotVarExp::toElem: this.base.tsize @ const pure nothrow @nogc @property @safe ulong()
* * * * * * * DotVarExp::toElem: this.base @ const(TypeInfo)
* * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Typedef)
* * * * * * * * * normal this exp
* * * * * * * * Indexing aggregate field object.TypeInfo_Typedef.base:
* * * * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Typedef, %object.TypeInfo_Typedef* %4, i32 0, i32 2
* * * * * * * vthis: %6 = load %object.TypeInfo*, %object.TypeInfo** %5
* * * * * * * funcval: %10 = load i8*, i8** %9, align 8
* * * * * * * isMember = this is: object.TypeInfo
* * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * * * funcval casted: %11 = bitcast i8* %10 to i64 (%object.TypeInfo*)*
* * * * * * DtoCallFunction()
* * * * * * * Evaluating argument expressions
* * * * * * * doing normal arguments
* * * * * * * Arguments so far: (1)
* * * * * * * * %12 = load %object.TypeInfo*, %object.TypeInfo** %5
* * * * * * * Function type: const pure nothrow @nogc @property @safe ulong()
* * DtoDefineFunction(object.TypeInfo_Typedef.swap): object.d(790)
* * * isMember = this is: object.TypeInfo_Typedef
* * * DtoFunctionType(const void(void* p1, void* p2))
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: void (%object.TypeInfo_Typedef*, i8*, i8*)
* * * DtoResolveFunction(object.TypeInfo_Typedef.swap): object.d(790)
* * * * DtoDeclareFunction(object.TypeInfo_Typedef.swap): object.d(790)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Typedef
* * * * * DtoFunctionType(const void(void* p1, void* p2))
* * * * * func =
declare void @_D6object16TypeInfo_Typedef4swapMxFPvQcZv(%object.TypeInfo_Typedef*, i8*, i8*)
* * * Doing function body for: swap
* * * DtoCreateNestedContext for object.TypeInfo_Typedef.swap
* * * * DtoCreateNestedContextType for object.TypeInfo_Typedef.swap
* * * CompoundStatement::toIR():
* * * * CompoundStatement::toIR(): object.d(790)
* * * * * ExpStatement::toIR(): object.d(791)
* * * * * * CallExp::toElem: this.base.swap(p1, p2) @ void
* * * * * * * DotVarExp::toElem: this.base.swap @ const void(void* p1, void* p2)
* * * * * * * * DotVarExp::toElem: this.base @ const(TypeInfo)
* * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Typedef)
* * * * * * * * * * normal this exp
* * * * * * * * * Indexing aggregate field object.TypeInfo_Typedef.base:
* * * * * * * * * * Value: %9 = getelementptr inbounds %object.TypeInfo_Typedef, %object.TypeInfo_Typedef* %8, i32 0, i32 2
* * * * * * * * vthis: %10 = load %object.TypeInfo*, %object.TypeInfo** %9
* * * * * * * * funcval: %14 = load i8*, i8** %13, align 8
* * * * * * * * isMember = this is: object.TypeInfo
* * * * * * * * DtoFunctionType(const void(void* p1, void* p2))
* * * * * * * * funcval casted: %15 = bitcast i8* %14 to void (%object.TypeInfo*, i8*, i8*)*
* * * * * * * DtoCallFunction()
* * * * * * * * Evaluating argument expressions
* * * * * * * * * DtoArgument
* * * * * * * * * * VarExp::toElem: p1 @ void*
* * * * * * * * * * * DtoSymbolAddress ('p1' of type 'void*')
* * * * * * * * * * * * function param
* * * * * * * * * * * * type: void*
* * * * * * * * * DtoArgument
* * * * * * * * * * VarExp::toElem: p2 @ void*
* * * * * * * * * * * DtoSymbolAddress ('p2' of type 'void*')
* * * * * * * * * * * * function param
* * * * * * * * * * * * type: void*
* * * * * * * * Building type: const void(void* p1, void* p2)
* * * * * * * * * DtoFunctionType(const void(void* p1, void* p2))
* * * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * * Final function type: void (i8*, i8*)
* * * * * * * * doing normal arguments
* * * * * * * * Arguments so far: (1)
* * * * * * * * * %16 = load %object.TypeInfo*, %object.TypeInfo** %9
* * * * * * * * Function type: const void(void* p1, void* p2)
* * * * * ReturnStatement::toIR(): object.d(791)
* * DtoDefineFunction(object.TypeInfo_Typedef.next): object.d(794)
* * * isMember = this is: object.TypeInfo_Typedef
* * * DtoFunctionType(inout pure nothrow @nogc @property inout(TypeInfo)())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: %object.TypeInfo* (%object.TypeInfo_Typedef*)
* * * DtoResolveFunction(object.TypeInfo_Typedef.next): object.d(794)
* * * * DtoDeclareFunction(object.TypeInfo_Typedef.next): object.d(794)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Typedef
* * * * * DtoFunctionType(inout pure nothrow @nogc @property inout(TypeInfo)())
* * * * * func =
declare %object.TypeInfo* @_D6object16TypeInfo_Typedef4nextMNgFNaNbNdNiZNgC8TypeInfo(%object.TypeInfo_Typedef*)
* * * Doing function body for: next
* * * DtoCreateNestedContext for object.TypeInfo_Typedef.next
* * * * DtoCreateNestedContextType for object.TypeInfo_Typedef.next
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(795)
* * * * * CallExp::toElem: this.base.next() @ inout(TypeInfo)
* * * * * * DotVarExp::toElem: this.base.next @ inout pure nothrow @nogc @property inout(TypeInfo)()
* * * * * * * DotVarExp::toElem: this.base @ inout(TypeInfo)
* * * * * * * * ThisExp::toElem: this @ inout(TypeInfo_Typedef)
* * * * * * * * * normal this exp
* * * * * * * * Indexing aggregate field object.TypeInfo_Typedef.base:
* * * * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Typedef, %object.TypeInfo_Typedef* %4, i32 0, i32 2
* * * * * * * vthis: %6 = load %object.TypeInfo*, %object.TypeInfo** %5
* * * * * * * funcval: %10 = load i8*, i8** %9, align 8
* * * * * * * isMember = this is: object.TypeInfo
* * * * * * * DtoFunctionType(inout pure nothrow @nogc @property inout(TypeInfo)())
* * * * * * * funcval casted: %11 = bitcast i8* %10 to %object.TypeInfo* (%object.TypeInfo*)*
* * * * * * DtoCallFunction()
* * * * * * * Evaluating argument expressions
* * * * * * * Building type: inout pure nothrow @nogc @property inout(TypeInfo)()
* * * * * * * * DtoFunctionType(inout pure nothrow @nogc @property inout(TypeInfo)())
* * * * * * * * * x86-64 ABI: Transforming return type
* * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * Final function type: %object.TypeInfo* ()
* * * * * * * doing normal arguments
* * * * * * * Arguments so far: (1)
* * * * * * * * %12 = load %object.TypeInfo*, %object.TypeInfo** %5
* * * * * * * Function type: inout pure nothrow @nogc @property inout(TypeInfo)()
* * DtoDefineFunction(object.TypeInfo_Typedef.flags): object.d(798)
* * * isMember = this is: object.TypeInfo_Typedef
* * * DtoFunctionType(const pure nothrow @nogc @property @safe uint())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i32 (%object.TypeInfo_Typedef*)
* * * DtoResolveFunction(object.TypeInfo_Typedef.flags): object.d(798)
* * * * DtoDeclareFunction(object.TypeInfo_Typedef.flags): object.d(798)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Typedef
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe uint())
* * * * * func =
declare i32 @_D6object16TypeInfo_Typedef5flagsMxFNaNbNdNiNfZk(%object.TypeInfo_Typedef*)
* * * Doing function body for: flags
* * * DtoCreateNestedContext for object.TypeInfo_Typedef.flags
* * * * DtoCreateNestedContextType for object.TypeInfo_Typedef.flags
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(799)
* * * * * CallExp::toElem: this.base.flags() @ uint
* * * * * * DotVarExp::toElem: this.base.flags @ const pure nothrow @nogc @property @safe uint()
* * * * * * * DotVarExp::toElem: this.base @ const(TypeInfo)
* * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Typedef)
* * * * * * * * * normal this exp
* * * * * * * * Indexing aggregate field object.TypeInfo_Typedef.base:
* * * * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Typedef, %object.TypeInfo_Typedef* %4, i32 0, i32 2
* * * * * * * vthis: %6 = load %object.TypeInfo*, %object.TypeInfo** %5
* * * * * * * funcval: %10 = load i8*, i8** %9, align 8
* * * * * * * isMember = this is: object.TypeInfo
* * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe uint())
* * * * * * * funcval casted: %11 = bitcast i8* %10 to i32 (%object.TypeInfo*)*
* * * * * * DtoCallFunction()
* * * * * * * Evaluating argument expressions
* * * * * * * Building type: const pure nothrow @nogc @property @safe uint()
* * * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe uint())
* * * * * * * * * x86-64 ABI: Transforming return type
* * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * Final function type: i32 ()
* * * * * * * doing normal arguments
* * * * * * * Arguments so far: (1)
* * * * * * * * %12 = load %object.TypeInfo*, %object.TypeInfo** %5
* * * * * * * Function type: const pure nothrow @nogc @property @safe uint()
* * DtoDefineFunction(object.TypeInfo_Typedef.initializer): object.d(802)
* * * isMember = this is: object.TypeInfo_Typedef
* * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.TypeInfo_Typedef*)
* * * DtoResolveFunction(object.TypeInfo_Typedef.initializer): object.d(802)
* * * * DtoDeclareFunction(object.TypeInfo_Typedef.initializer): object.d(802)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Typedef
* * * * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]())
* * * * * func =
declare { i64, i8* } @_D6object16TypeInfo_Typedef11initializerMxFNaNbNiNfZAxv(%object.TypeInfo_Typedef*)
* * * Doing function body for: initializer
* * * DtoCreateNestedContext for object.TypeInfo_Typedef.initializer
* * * * DtoCreateNestedContextType for object.TypeInfo_Typedef.initializer
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(803)
* * * * * CondExp::toElem: this.m_init.length ? this.m_init : this.base.initializer() @ const(void)[]
* * * * * * Building type: const(void)[]*
* * * * * * ArrayLengthExp::toElem: this.m_init.length @ ulong
* * * * * * * DotVarExp::toElem: this.m_init @ const(void[])
* * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Typedef)
* * * * * * * * * normal this exp
* * * * * * * * Indexing aggregate field object.TypeInfo_Typedef.m_init:
* * * * * * * * * Value: %6 = getelementptr inbounds %object.TypeInfo_Typedef, %object.TypeInfo_Typedef* %5, i32 0, i32 4
* * * * * * * DtoArrayLen
* * * * * * Casting from 'ulong' to 'bool'
* * * * * * DotVarExp::toElem: this.m_init @ const(void)[]
* * * * * * * ThisExp::toElem: this @ const(TypeInfo_Typedef)
* * * * * * * * normal this exp
* * * * * * * Indexing aggregate field object.TypeInfo_Typedef.m_init:
* * * * * * * * Value: %12 = getelementptr inbounds %object.TypeInfo_Typedef, %object.TypeInfo_Typedef* %11, i32 0, i32 4
* * * * * * CallExp::toElem: this.base.initializer() @ const(void)[]
* * * * * * * DotVarExp::toElem: this.base.initializer @ const pure nothrow @nogc @safe const(void)[]()
* * * * * * * * DotVarExp::toElem: this.base @ const(TypeInfo)
* * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Typedef)
* * * * * * * * * * normal this exp
* * * * * * * * * Indexing aggregate field object.TypeInfo_Typedef.base:
* * * * * * * * * * Value: %15 = getelementptr inbounds %object.TypeInfo_Typedef, %object.TypeInfo_Typedef* %14, i32 0, i32 2
* * * * * * * * vthis: %16 = load %object.TypeInfo*, %object.TypeInfo** %15
* * * * * * * * funcval: %20 = load i8*, i8** %19, align 8
* * * * * * * * isMember = this is: object.TypeInfo
* * * * * * * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]())
* * * * * * * * funcval casted: %21 = bitcast i8* %20 to { i64, i8* } (%object.TypeInfo*)*
* * * * * * * DtoCallFunction()
* * * * * * * * Evaluating argument expressions
* * * * * * * * Building type: const pure nothrow @nogc @safe const(void)[]()
* * * * * * * * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]())
* * * * * * * * * * x86-64 ABI: Transforming return type
* * * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * * Final function type: { i64, i8* } ()
* * * * * * * * doing normal arguments
* * * * * * * * Arguments so far: (1)
* * * * * * * * * %22 = load %object.TypeInfo*, %object.TypeInfo** %15
* * * * * * * * Function type: const pure nothrow @nogc @safe const(void)[]()
* * DtoDefineFunction(object.TypeInfo_Typedef.talign): object.d(806)
* * * isMember = this is: object.TypeInfo_Typedef
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (%object.TypeInfo_Typedef*)
* * * DtoResolveFunction(object.TypeInfo_Typedef.talign): object.d(806)
* * * * DtoDeclareFunction(object.TypeInfo_Typedef.talign): object.d(806)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Typedef
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * func =
declare i64 @_D6object16TypeInfo_Typedef6talignMxFNaNbNdNiNfZm(%object.TypeInfo_Typedef*)
* * * Doing function body for: talign
* * * DtoCreateNestedContext for object.TypeInfo_Typedef.talign
* * * * DtoCreateNestedContextType for object.TypeInfo_Typedef.talign
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(807)
* * * * * CallExp::toElem: this.base.talign() @ ulong
* * * * * * DotVarExp::toElem: this.base.talign @ const pure nothrow @nogc @property @safe ulong()
* * * * * * * DotVarExp::toElem: this.base @ const(TypeInfo)
* * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Typedef)
* * * * * * * * * normal this exp
* * * * * * * * Indexing aggregate field object.TypeInfo_Typedef.base:
* * * * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Typedef, %object.TypeInfo_Typedef* %4, i32 0, i32 2
* * * * * * * vthis: %6 = load %object.TypeInfo*, %object.TypeInfo** %5
* * * * * * * funcval: %10 = load i8*, i8** %9, align 8
* * * * * * * isMember = this is: object.TypeInfo
* * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * * * funcval casted: %11 = bitcast i8* %10 to i64 (%object.TypeInfo*)*
* * * * * * DtoCallFunction()
* * * * * * * Evaluating argument expressions
* * * * * * * Building type: const pure nothrow @nogc @property @safe ulong()
* * * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * * * * * x86-64 ABI: Transforming return type
* * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * Final function type: i64 ()
* * * * * * * doing normal arguments
* * * * * * * Arguments so far: (1)
* * * * * * * * %12 = load %object.TypeInfo*, %object.TypeInfo** %5
* * * * * * * Function type: const pure nothrow @nogc @property @safe ulong()
* * DtoDefineFunction(object.TypeInfo_Typedef.argTypes): object.d(810)
* * * isMember = this is: object.TypeInfo_Typedef
* * * DtoFunctionType(nothrow @safe int(out TypeInfo arg1, out TypeInfo arg2))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i32 (%object.TypeInfo_Typedef*, %object.TypeInfo**, %object.TypeInfo**)
* * * DtoResolveFunction(object.TypeInfo_Typedef.argTypes): object.d(810)
* * * * DtoDeclareFunction(object.TypeInfo_Typedef.argTypes): object.d(810)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Typedef
* * * * * DtoFunctionType(nothrow @safe int(out TypeInfo arg1, out TypeInfo arg2))
* * * * * func =
declare i32 @_D6object16TypeInfo_Typedef8argTypesMFNbNfJC8TypeInfoJQlZi(%object.TypeInfo_Typedef*, %object.TypeInfo**, %object.TypeInfo**)
* * * Doing function body for: argTypes
* * * DtoCreateNestedContext for object.TypeInfo_Typedef.argTypes
* * * * DtoCreateNestedContextType for object.TypeInfo_Typedef.argTypes
* * * CompoundStatement::toIR():
* * * * ExpStatement::toIR():
* * * * * AssignExp::toElem: arg1 = null | (object.TypeInfo)(object.TypeInfo = object.TypeInfo)
* * * * * * VarExp::toElem: arg1 @ object.TypeInfo
* * * * * * * DtoSymbolAddress ('arg1' of type 'object.TypeInfo')
* * * * * * * * function param
* * * * * * * * type: object.TypeInfo
* * * * * * NullExp::toElem(type=object.TypeInfo): null
* * * * * * * NullExp::toConstElem(type=object.TypeInfo): null
* * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * DtoAssign()
* * * * * * * l : %object.TypeInfo** %2
* * * * * * * r : %object.TypeInfo* null
* * * * ExpStatement::toIR():
* * * * * AssignExp::toElem: arg2 = null | (object.TypeInfo)(object.TypeInfo = object.TypeInfo)
* * * * * * VarExp::toElem: arg2 @ object.TypeInfo
* * * * * * * DtoSymbolAddress ('arg2' of type 'object.TypeInfo')
* * * * * * * * function param
* * * * * * * * type: object.TypeInfo
* * * * * * NullExp::toElem(type=object.TypeInfo): null
* * * * * * * NullExp::toConstElem(type=object.TypeInfo): null
* * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * DtoAssign()
* * * * * * * l : %object.TypeInfo** %1
* * * * * * * r : %object.TypeInfo* null
* * * * ReturnStatement::toIR(): object.d(811)
* * * * * CallExp::toElem: this.base.argTypes(arg1, arg2) @ int
* * * * * * DotVarExp::toElem: this.base.argTypes @ nothrow @safe int(out TypeInfo arg1, out TypeInfo arg2)
* * * * * * * DotVarExp::toElem: this.base @ object.TypeInfo
* * * * * * * * ThisExp::toElem: this @ object.TypeInfo_Typedef
* * * * * * * * * normal this exp
* * * * * * * * Indexing aggregate field object.TypeInfo_Typedef.base:
* * * * * * * * * Value: %7 = getelementptr inbounds %object.TypeInfo_Typedef, %object.TypeInfo_Typedef* %6, i32 0, i32 2
* * * * * * * vthis: %8 = load %object.TypeInfo*, %object.TypeInfo** %7
* * * * * * * funcval: %12 = load i8*, i8** %11, align 8
* * * * * * * isMember = this is: object.TypeInfo
* * * * * * * DtoFunctionType(nothrow @safe int(out TypeInfo arg1, out TypeInfo arg2))
* * * * * * * funcval casted: %13 = bitcast i8* %12 to i32 (%object.TypeInfo*, %object.TypeInfo**, %object.TypeInfo**)*
* * * * * * DtoCallFunction()
* * * * * * * Evaluating argument expressions
* * * * * * * * DtoArgument
* * * * * * * * * VarExp::toElem: arg1 @ object.TypeInfo
* * * * * * * * * * DtoSymbolAddress ('arg1' of type 'object.TypeInfo')
* * * * * * * * * * * function param
* * * * * * * * * * * type: object.TypeInfo
* * * * * * * * DtoArgument
* * * * * * * * * VarExp::toElem: arg2 @ object.TypeInfo
* * * * * * * * * * DtoSymbolAddress ('arg2' of type 'object.TypeInfo')
* * * * * * * * * * * function param
* * * * * * * * * * * type: object.TypeInfo
* * * * * * * Building type: nothrow @safe int(out TypeInfo arg1, out TypeInfo arg2)
* * * * * * * * DtoFunctionType(nothrow @safe int(out TypeInfo arg1, out TypeInfo arg2))
* * * * * * * * * x86-64 ABI: Transforming return type
* * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * Final function type: i32 (%object.TypeInfo**, %object.TypeInfo**)
* * * * * * * doing normal arguments
* * * * * * * Arguments so far: (1)
* * * * * * * * %14 = load %object.TypeInfo*, %object.TypeInfo** %7
* * * * * * * Function type: nothrow @safe int(out TypeInfo arg1, out TypeInfo arg2)
* * DtoDefineFunction(object.TypeInfo_Typedef.rtInfo): object.d(814)
* * * isMember = this is: object.TypeInfo_Typedef
* * * DtoFunctionType(const pure nothrow @nogc @property @safe immutable(void)*())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i8* (%object.TypeInfo_Typedef*)
* * * DtoResolveFunction(object.TypeInfo_Typedef.rtInfo): object.d(814)
* * * * DtoDeclareFunction(object.TypeInfo_Typedef.rtInfo): object.d(814)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Typedef
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe immutable(void)*())
* * * * * func =
declare i8* @_D6object16TypeInfo_Typedef6rtInfoMxFNaNbNdNiNfZPyv(%object.TypeInfo_Typedef*)
* * * Doing function body for: rtInfo
* * * DtoCreateNestedContext for object.TypeInfo_Typedef.rtInfo
* * * * DtoCreateNestedContextType for object.TypeInfo_Typedef.rtInfo
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(815)
* * * * * CallExp::toElem: this.base.rtInfo() @ immutable(void)*
* * * * * * DotVarExp::toElem: this.base.rtInfo @ const pure nothrow @nogc @property @safe immutable(void)*()
* * * * * * * DotVarExp::toElem: this.base @ const(TypeInfo)
* * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Typedef)
* * * * * * * * * normal this exp
* * * * * * * * Indexing aggregate field object.TypeInfo_Typedef.base:
* * * * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Typedef, %object.TypeInfo_Typedef* %4, i32 0, i32 2
* * * * * * * vthis: %6 = load %object.TypeInfo*, %object.TypeInfo** %5
* * * * * * * funcval: %10 = load i8*, i8** %9, align 8
* * * * * * * isMember = this is: object.TypeInfo
* * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe immutable(void)*())
* * * * * * * funcval casted: %11 = bitcast i8* %10 to i8* (%object.TypeInfo*)*
* * * * * * DtoCallFunction()
* * * * * * * Evaluating argument expressions
* * * * * * * Building type: const pure nothrow @nogc @property @safe immutable(void)*()
* * * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe immutable(void)*())
* * * * * * * * * x86-64 ABI: Transforming return type
* * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * Final function type: i8* ()
* * * * * * * doing normal arguments
* * * * * * * Arguments so far: (1)
* * * * * * * * %12 = load %object.TypeInfo*, %object.TypeInfo** %5
* * * * * * * Function type: const pure nothrow @nogc @property @safe immutable(void)*()
* * VarDeclaration::codegen(): 'object.TypeInfo_Typedef.base'
* * * DtoResolveVariable(object.TypeInfo_Typedef.base)
* * VarDeclaration::codegen(): 'object.TypeInfo_Typedef.name'
* * * DtoResolveVariable(object.TypeInfo_Typedef.name)
* * VarDeclaration::codegen(): 'object.TypeInfo_Typedef.m_init'
* * * DtoResolveVariable(object.TypeInfo_Typedef.m_init)
* * Building default initializer for object.TypeInfo_Typedef
* * * Creating initializer constant for TypeInfo_Typedef
* * * * Field priority for base: 1
* * * * Field priority for name: 1
* * * * Field priority for m_init: 1
* * * * DtoConstExpInit(targetType = object.TypeInfo, exp = null)
* * * * * NullExp::toConstElem(type=object.TypeInfo): null
* * * * DtoConstExpInit(targetType = string, exp = null)
* * * * * NullExp::toConstElem(type=string): null
* * * * DtoConstExpInit(targetType = void[], exp = null)
* * * * * NullExp::toConstElem(type=void[]): null
* * * * final initializer: %object.TypeInfo_Typedef { [19 x i8*]* @_D16TypeInfo_Typedef6__vtblZ, i8* null, %object.TypeInfo* null, { i64, i8* } zeroinitializer, { i64, i8* } zeroinitializer }
* * Building vtbl initializer
* * DtoDefineClassInfo(TypeInfo_Typedef)
* * * Building ClassInfo.interfaces
* ClassDeclaration::codegen: 'object.TypeInfo_Enum'
* * DtoResolveClass(object.TypeInfo_Enum): object.d(823)
* * * Building type: object.TypeInfo_Enum
* * * * Building class type object.TypeInfo_Enum @ object.d(823)
* * * * * Instance size: 56
* * * * * Field priority for base: 1
* * * * * Field priority for name: 1
* * * * * Field priority for m_init: 1
* * * * * class type: %object.TypeInfo_Enum = type { [19 x i8*]*, i8*, %object.TypeInfo*, { i64, i8* }, { i64, i8* } }
* * Building default initializer for object.TypeInfo_Enum
* * * Creating initializer constant for TypeInfo_Enum
* * * * Field priority for base: 1
* * * * Field priority for name: 1
* * * * Field priority for m_init: 1
* * * * DtoConstExpInit(targetType = object.TypeInfo, exp = null)
* * * * * NullExp::toConstElem(type=object.TypeInfo): null
* * * * DtoConstExpInit(targetType = string, exp = null)
* * * * * NullExp::toConstElem(type=string): null
* * * * DtoConstExpInit(targetType = void[], exp = null)
* * * * * NullExp::toConstElem(type=void[]): null
* * * * final initializer: %object.TypeInfo_Enum { [19 x i8*]* @_D13TypeInfo_Enum6__vtblZ, i8* null, %object.TypeInfo* null, { i64, i8* } zeroinitializer, { i64, i8* } zeroinitializer }
* * Building vtbl initializer
* * DtoDefineClassInfo(TypeInfo_Enum)
* * * Building ClassInfo.interfaces
* DtoDefineFunction(object.getArrayHash): object.d(827)
* * DtoFunctionType(nothrow @trusted ulong(const(TypeInfo) element, const(void*) ptr, const(ulong) count))
* * * x86-64 ABI: Transforming return type
* * * x86-64 ABI: Transforming argument types
* * * Final function type: i64 (i64, i8*, %object.TypeInfo*)
* * DtoResolveFunction(object.getArrayHash): object.d(827)
* * * DtoDeclareFunction(object.getArrayHash): object.d(827)
* * * * Enter defineAsExternallyAvailable
* * * * * Cross-module inlining fully disabled.
* * * * DtoFunctionType(nothrow @trusted ulong(const(TypeInfo) element, const(void*) ptr, const(ulong) count))
* * * * func =
declare i64 @_D6object12getArrayHashFNbNexC8TypeInfoxPvxmZm(i64, i8*, %object.TypeInfo*)
* * Doing function body for: getArrayHash
* * DtoCreateNestedContext for object.getArrayHash
* * * DtoCreateNestedContextType for object.getArrayHash
* * CompoundStatement::toIR():
* * * CompoundStatement::toIR(): object.d(827)
* * * * ExpStatement::toIR(): object.d(828)
* * * * * DeclarationExp::toElem: (ubyte* p = cast(ubyte*)ptr;) | T=void
* * * * * * DtoDeclarationExp: p
* * * * * * * VarDeclaration
* * * * * * * DtoVarDeclaration(vdtype = ubyte*)
* * * * * * * * llvm value for decl: %7 = alloca i8*, align 8
* * * * * * * * expression initializer
* * * * * * * * AssignExp::toElem: p = cast(ubyte*)ptr | (ubyte*)(ubyte* = ubyte*)
* * * * * * * * * VarExp::toElem: p @ ubyte*
* * * * * * * * * * DtoSymbolAddress ('p' of type 'ubyte*')
* * * * * * * * * * * a normal variable
* * * * * * * * * CastExp::toElem: cast(ubyte*)ptr @ ubyte*
* * * * * * * * * * VarExp::toElem: ptr @ const(void*)
* * * * * * * * * * * DtoSymbolAddress ('ptr' of type 'const(void*)')
* * * * * * * * * * * * function param
* * * * * * * * * * * * type: const(void*)
* * * * * * * * * * Casting from 'const(void*)' to 'ubyte*'
* * * * * * * * * * * src: %9 = load i8*, i8** %5
* * * * * * * * * * * to type: i8*
* * * * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * * * DtoAssign()
* * * * * * * * * * lhs: %7 = alloca i8*, align 8
* * * * * * * * * * rhs: %9 = load i8*, i8** %5
* * * * ExpStatement::toIR(): object.d(829)
* * * * * DeclarationExp::toElem: (ulong hash = 0LU;) | T=void
* * * * * * DtoDeclarationExp: hash
* * * * * * * VarDeclaration
* * * * * * * DtoVarDeclaration(vdtype = ulong)
* * * * * * * * llvm value for decl: %8 = alloca i64, align 8
* * * * * * * * expression initializer
* * * * * * * * AssignExp::toElem: hash = 0LU | (ulong)(ulong = ulong)
* * * * * * * * * VarExp::toElem: hash @ ulong
* * * * * * * * * * DtoSymbolAddress ('hash' of type 'ulong')
* * * * * * * * * * * a normal variable
* * * * * * * * * IntegerExp::toElem: 0LU @ ulong
* * * * * * * * * * IntegerExp::toConstElem: 0LU @ ulong
* * * * * * * * * * * value = i64 0
* * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * DtoAssign()
* * * * * * * * * * lhs: %8 = alloca i64, align 8
* * * * * * * * * * rhs: i64 0
* * * * ScopeStatement::toIR(): object.d(830)
* * * * * CompoundStatement::toIR(): object.d(830)
* * * * * * ExpStatement::toIR(): object.d(830)
* * * * * * * DeclarationExp::toElem: (ulong __key2 = 0LU;) | T=void
* * * * * * * * DtoDeclarationExp: __key2
* * * * * * * * * VarDeclaration
* * * * * * * * * DtoVarDeclaration(vdtype = ulong)
* * * * * * * * * * llvm value for decl: %9 = alloca i64, align 8
* * * * * * * * * * expression initializer
* * * * * * * * * * AssignExp::toElem: __key2 = 0LU | (ulong)(ulong = ulong)
* * * * * * * * * * * VarExp::toElem: __key2 @ ulong
* * * * * * * * * * * * DtoSymbolAddress ('__key2' of type 'ulong')
* * * * * * * * * * * * * a normal variable
* * * * * * * * * * * IntegerExp::toElem: 0LU @ ulong
* * * * * * * * * * * * IntegerExp::toConstElem: 0LU @ ulong
* * * * * * * * * * * * * value = i64 0
* * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * * DtoAssign()
* * * * * * * * * * * * lhs: %9 = alloca i64, align 8
* * * * * * * * * * * * rhs: i64 0
* * * * * * ExpStatement::toIR(): object.d(830)
* * * * * * * DeclarationExp::toElem: (ulong __limit3 = element.tsize() * count;) | T=void
* * * * * * * * DtoDeclarationExp: __limit3
* * * * * * * * * VarDeclaration
* * * * * * * * * DtoVarDeclaration(vdtype = ulong)
* * * * * * * * * * llvm value for decl: %10 = alloca i64, align 8
* * * * * * * * * * expression initializer
* * * * * * * * * * AssignExp::toElem: __limit3 = element.tsize() * count | (ulong)(ulong = ulong)
* * * * * * * * * * * VarExp::toElem: __limit3 @ ulong
* * * * * * * * * * * * DtoSymbolAddress ('__limit3' of type 'ulong')
* * * * * * * * * * * * * a normal variable
* * * * * * * * * * * MulExp::toElem: element.tsize() * count @ ulong
* * * * * * * * * * * * CallExp::toElem: element.tsize() @ ulong
* * * * * * * * * * * * * DotVarExp::toElem: element.tsize @ const pure nothrow @nogc @property @safe ulong()
* * * * * * * * * * * * * * VarExp::toElem: element @ const(TypeInfo)
* * * * * * * * * * * * * * * DtoSymbolAddress ('element' of type 'const(TypeInfo)')
* * * * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * * * type: const(TypeInfo)
* * * * * * * * * * * * * * vthis: %13 = load %object.TypeInfo*, %object.TypeInfo** %4
* * * * * * * * * * * * * * funcval: %17 = load i8*, i8** %16, align 8
* * * * * * * * * * * * * * isMember = this is: object.TypeInfo
* * * * * * * * * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * * * * * * * * * * funcval casted: %18 = bitcast i8* %17 to i64 (%object.TypeInfo*)*
* * * * * * * * * * * * * DtoCallFunction()
* * * * * * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * * * * doing normal arguments
* * * * * * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * * * * * %19 = load %object.TypeInfo*, %object.TypeInfo** %4
* * * * * * * * * * * * * * Function type: const pure nothrow @nogc @property @safe ulong()
* * * * * * * * * * * * VarExp::toElem: count @ ulong
* * * * * * * * * * * * * DtoSymbolAddress ('count' of type 'const(ulong)')
* * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * type: const(ulong)
* * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * * DtoAssign()
* * * * * * * * * * * * lhs: %10 = alloca i64, align 8
* * * * * * * * * * * * rhs: %22 = mul i64 %20, %21
* * * * * * ForStatement::toIR(): object.d(830)
* * * * * * * CmpExp::toElem: __key2 < __limit3 @ bool
* * * * * * * * VarExp::toElem: __key2 @ ulong
* * * * * * * * * DtoSymbolAddress ('__key2' of type 'ulong')
* * * * * * * * * * a normal variable
* * * * * * * * VarExp::toElem: __limit3 @ ulong
* * * * * * * * * DtoSymbolAddress ('__limit3' of type 'ulong')
* * * * * * * * * * a normal variable
* * * * * * * * type 1: %24 = load i64, i64* %9
* * * * * * * * type 2: %25 = load i64, i64* %10
* * * * * * * CompoundStatement::toIR(): object.d(830)
* * * * * * * * ExpStatement::toIR(): object.d(830)
* * * * * * * * * DeclarationExp::toElem: (ulong i = __key2;) | T=void
* * * * * * * * * * DtoDeclarationExp: i
* * * * * * * * * * * VarDeclaration
* * * * * * * * * * * DtoVarDeclaration(vdtype = ulong)
* * * * * * * * * * * * llvm value for decl: %11 = alloca i64, align 8
* * * * * * * * * * * * expression initializer
* * * * * * * * * * * * AssignExp::toElem: i = __key2 | (ulong)(ulong = ulong)
* * * * * * * * * * * * * VarExp::toElem: i @ ulong
* * * * * * * * * * * * * * DtoSymbolAddress ('i' of type 'ulong')
* * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * VarExp::toElem: __key2 @ ulong
* * * * * * * * * * * * * * DtoSymbolAddress ('__key2' of type 'ulong')
* * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * * * * * * * DtoAssign()
* * * * * * * * * * * * * * lhs: %11 = alloca i64, align 8
* * * * * * * * * * * * * * rhs: %29 = load i64, i64* %9
* * * * * * * * ExpStatement::toIR(): object.d(831)
* * * * * * * * * AssignExp::toElem: hash = (hash << 4) + cast(ulong)cast(int)*p ^ 57005LU + i | (ulong)(ulong = ulong)
* * * * * * * * * * VarExp::toElem: hash @ ulong
* * * * * * * * * * * DtoSymbolAddress ('hash' of type 'ulong')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * XorExp::toElem: (hash << 4) + cast(ulong)cast(int)*p ^ 57005LU + i @ ulong
* * * * * * * * * * * AddExp::toElem: (hash << 4) + cast(ulong)cast(int)*p @ ulong
* * * * * * * * * * * * ShlExp::toElem: hash << 4 @ ulong
* * * * * * * * * * * * * VarExp::toElem: hash @ ulong
* * * * * * * * * * * * * * DtoSymbolAddress ('hash' of type 'ulong')
* * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * IntegerExp::toElem: 4 @ int
* * * * * * * * * * * * * * IntegerExp::toConstElem: 4 @ int
* * * * * * * * * * * * * * * value = i32 4
* * * * * * * * * * * * * Casting from 'int' to 'ulong'
* * * * * * * * * * * * * * cast to: i64
* * * * * * * * * * * * CastExp::toElem: cast(ulong)cast(int)*p @ ulong
* * * * * * * * * * * * * CastExp::toElem: cast(int)*p @ int
* * * * * * * * * * * * * * PtrExp::toElem: *p @ ubyte
* * * * * * * * * * * * * * * VarExp::toElem: p @ ubyte*
* * * * * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'ubyte*')
* * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * Casting from 'ubyte' to 'int'
* * * * * * * * * * * * * * * cast to: i32
* * * * * * * * * * * * * Casting from 'int' to 'ulong'
* * * * * * * * * * * * * * cast to: i64
* * * * * * * * * * * AddExp::toElem: 57005LU + i @ ulong
* * * * * * * * * * * * IntegerExp::toElem: 57005LU @ ulong
* * * * * * * * * * * * * IntegerExp::toConstElem: 57005LU @ ulong
* * * * * * * * * * * * * * value = i64 57005
* * * * * * * * * * * * VarExp::toElem: i @ ulong
* * * * * * * * * * * * * DtoSymbolAddress ('i' of type 'ulong')
* * * * * * * * * * * * * * a normal variable
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %8 = alloca i64, align 8
* * * * * * * * * * * rhs: %40 = xor i64 %37, %39
* * * * * * * AddAssignExp::toElem: __key2 += 1LU @ ulong
* * * * * * * * VarExp::toElem: __key2 @ ulong
* * * * * * * * * DtoSymbolAddress ('__key2' of type 'ulong')
* * * * * * * * * * a normal variable
* * * * * * * * IntegerExp::toElem: 1LU @ ulong
* * * * * * * * * IntegerExp::toConstElem: 1LU @ ulong
* * * * * * * * * * value = i64 1
* * * * * * * * DtoAssign()
* * * * * * * * * lhs: %9 = alloca i64, align 8
* * * * * * * * * rhs: %43 = add i64 %42, 1
* * * * ReturnStatement::toIR(): object.d(833)
* * * * * VarExp::toElem: hash @ ulong
* * * * * * DtoSymbolAddress ('hash' of type 'ulong')
* * * * * * * a normal variable
* ClassDeclaration::codegen: 'object.TypeInfo_Array'
* * DtoDefineFunction(object.TypeInfo_Array.toString): object.d(837)
* * * isMember = this is: object.TypeInfo_Array
* * * DtoFunctionType(const pure nothrow @safe string())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.TypeInfo_Array*)
* * * DtoResolveFunction(object.TypeInfo_Array.toString): object.d(837)
* * * * DtoDeclareFunction(object.TypeInfo_Array.toString): object.d(837)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Array
* * * * * DtoFunctionType(const pure nothrow @safe string())
* * * * * func =
declare { i64, i8* } @_D6object14TypeInfo_Array8toStringMxFNaNbNfZAya(%object.TypeInfo_Array*)
* * * Doing function body for: toString
* * * DtoCreateNestedContext for object.TypeInfo_Array.toString
* * * * DtoCreateNestedContextType for object.TypeInfo_Array.toString
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(838)
* * * * * StringExp::toElem: "UNK[]" @ string
* * * * * * type: [6 x i8]
* * * * * * init: [6 x i8] c"UNK[]\00"
* * DtoDefineFunction(object.TypeInfo_Array.opEquals): object.d(841)
* * * isMember = this is: object.TypeInfo_Array
* * * DtoFunctionType(bool(Object o))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i1 (%object.TypeInfo_Array*, %object.Object*)
* * * DtoResolveFunction(object.TypeInfo_Array.opEquals): object.d(841)
* * * * DtoDeclareFunction(object.TypeInfo_Array.opEquals): object.d(841)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Array
* * * * * DtoFunctionType(bool(Object o))
* * * * * func =
declare i1 @_D6object14TypeInfo_Array8opEqualsMFC6ObjectZb(%object.TypeInfo_Array*, %object.Object*)
* * * Doing function body for: opEquals
* * * DtoCreateNestedContext for object.TypeInfo_Array.opEquals
* * * * DtoCreateNestedContextType for object.TypeInfo_Array.opEquals
* * * CompoundStatement::toIR():
* * * * CompoundStatement::toIR(): object.d(841)
* * * * * IfStatement::toIR(): object.d(842)
* * * * * * IdentityExp::toElem: this is o @ bool
* * * * * * * ThisExp::toElem: this @ object.Object
* * * * * * * * normal this exp
* * * * * * * VarExp::toElem: o @ object.Object
* * * * * * * * DtoSymbolAddress ('o' of type 'object.Object')
* * * * * * * * * function param
* * * * * * * * * type: object.Object
* * * * * * ReturnStatement::toIR(): object.d(843)
* * * * * * * IntegerExp::toElem: true @ bool
* * * * * * * * IntegerExp::toConstElem: true @ bool
* * * * * * * * * value = i1 true
* * * * * ExpStatement::toIR(): object.d(844)
* * * * * * DeclarationExp::toElem: (const const(TypeInfo_Array) c = cast(const(TypeInfo_Array))o;) | T=void
* * * * * * * DtoDeclarationExp: c
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = const(TypeInfo_Array))
* * * * * * * * * llvm value for decl: %5 = alloca %object.TypeInfo_Array*, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: c = cast(const(TypeInfo_Array))o | (const(TypeInfo_Array))(const(TypeInfo_Array) = const(TypeInfo_Array))
* * * * * * * * * * VarExp::toElem: c @ const(TypeInfo_Array)
* * * * * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_Array)')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * CastExp::toElem: cast(const(TypeInfo_Array))o @ const(TypeInfo_Array)
* * * * * * * * * * * VarExp::toElem: o @ object.Object
* * * * * * * * * * * * DtoSymbolAddress ('o' of type 'object.Object')
* * * * * * * * * * * * * function param
* * * * * * * * * * * * * type: object.Object
* * * * * * * * * * * Casting from 'object.Object' to 'const(TypeInfo_Array)'
* * * * * * * * * * * * DtoCastClass(object.Object, const(TypeInfo_Array))
* * * * * * * * * * * * * dynamic up cast
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * l : %5 = alloca %object.TypeInfo_Array*, align 8
* * * * * * * * * * * r : %16 = bitcast i8* %15 to %object.TypeInfo_Array*
* * * * * ReturnStatement::toIR(): object.d(845)
* * * * * * LogicalExp::toElem: c && opEquals(this.value, c.value) @ bool
* * * * * * * VarExp::toElem: c @ const(TypeInfo_Array)
* * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_Array)')
* * * * * * * * * a normal variable
* * * * * * * Casting from 'const(TypeInfo_Array)' to 'bool'
* * * * * * * * DtoCastClass(const(TypeInfo_Array), bool)
* * * * * * * * * to bool
* * * * * * * CallExp::toElem: opEquals(this.value, c.value) @ bool
* * * * * * * * VarExp::toElem: opEquals @ @system bool(const(Object) lhs, const(Object) rhs)
* * * * * * * * * DtoSymbolAddress ('opEquals' of type '@system bool(const(Object) lhs, const(Object) rhs)')
* * * * * * * * * * FuncDeclaration
* * * * * * * * DtoCallFunction()
* * * * * * * * * Evaluating argument expressions
* * * * * * * * * * DtoArgument
* * * * * * * * * * * DotVarExp::toElem: this.value @ const(Object)
* * * * * * * * * * * * ThisExp::toElem: this @ object.TypeInfo_Array
* * * * * * * * * * * * * normal this exp
* * * * * * * * * * * * Indexing aggregate field object.TypeInfo_Array.value:
* * * * * * * * * * * * * Value: %21 = getelementptr inbounds %object.TypeInfo_Array, %object.TypeInfo_Array* %20, i32 0, i32 2
* * * * * * * * * * DtoArgument
* * * * * * * * * * * DotVarExp::toElem: c.value @ const(Object)
* * * * * * * * * * * * VarExp::toElem: c @ const(TypeInfo_Array)
* * * * * * * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_Array)')
* * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * Indexing aggregate field object.TypeInfo_Array.value:
* * * * * * * * * * * * * Value: %24 = getelementptr inbounds %object.TypeInfo_Array, %object.TypeInfo_Array* %23, i32 0, i32 2
* * * * * * * * * doing normal arguments
* * * * * * * * * Arguments so far: (0)
* * * * * * * * * Function type: @system bool(const(Object) lhs, const(Object) rhs)
* * DtoDefineFunction(object.TypeInfo_Array.getHash): object.d(848)
* * * isMember = this is: object.TypeInfo_Array
* * * DtoFunctionType(const nothrow @trusted ulong(const(void*) p))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (%object.TypeInfo_Array*, i8*)
* * * DtoResolveFunction(object.TypeInfo_Array.getHash): object.d(848)
* * * * DtoDeclareFunction(object.TypeInfo_Array.getHash): object.d(848)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Array
* * * * * DtoFunctionType(const nothrow @trusted ulong(const(void*) p))
* * * * * func =
declare i64 @_D6object14TypeInfo_Array7getHashMxFNbNexPvZm(%object.TypeInfo_Array*, i8*)
* * * Doing function body for: getHash
* * * DtoCreateNestedContext for object.TypeInfo_Array.getHash
* * * * DtoCreateNestedContextType for object.TypeInfo_Array.getHash
* * * CompoundStatement::toIR():
* * * * CompoundStatement::toIR(): object.d(848)
* * * * * ExpStatement::toIR(): object.d(849)
* * * * * * DeclarationExp::toElem: (void[] a = *cast(void[]*)p;) | T=void
* * * * * * * DtoDeclarationExp: a
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = void[])
* * * * * * * * * llvm value for decl: %5 = alloca { i64, i8* }, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: a = *cast(void[]*)p | (void[])(void[] = void[])
* * * * * * * * * * VarExp::toElem: a @ void[]
* * * * * * * * * * * DtoSymbolAddress ('a' of type 'void[]')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * PtrExp::toElem: *cast(void[]*)p @ void[]
* * * * * * * * * * * CastExp::toElem: cast(void[]*)p @ void[]*
* * * * * * * * * * * * VarExp::toElem: p @ const(void*)
* * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'const(void*)')
* * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * type: const(void*)
* * * * * * * * * * * * Casting from 'const(void*)' to 'void[]*'
* * * * * * * * * * * * * src: %7 = load i8*, i8** %4
* * * * * * * * * * * * * to type: { i64, i8* }*
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * DtoArrayAssign
* * * * * * * * * * * * DtoArrayPtr
* * * * * * * * * * * * DtoArrayLen
* * * * * * * * * * * * SetArray
* * * * * ReturnStatement::toIR(): object.d(850)
* * * * * * CallExp::toElem: getArrayHash(this.value, cast(void*)a, a.length) @ ulong
* * * * * * * VarExp::toElem: getArrayHash @ nothrow @trusted ulong(const(TypeInfo) element, const(void*) ptr, const(ulong) count)
* * * * * * * * DtoSymbolAddress ('getArrayHash' of type 'nothrow @trusted ulong(const(TypeInfo) element, const(void*) ptr, const(ulong) count)')
* * * * * * * * * FuncDeclaration
* * * * * * * DtoCallFunction()
* * * * * * * * Evaluating argument expressions
* * * * * * * * * DtoArgument
* * * * * * * * * * DotVarExp::toElem: this.value @ const(TypeInfo)
* * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Array)
* * * * * * * * * * * * normal this exp
* * * * * * * * * * * Indexing aggregate field object.TypeInfo_Array.value:
* * * * * * * * * * * * Value: %16 = getelementptr inbounds %object.TypeInfo_Array, %object.TypeInfo_Array* %15, i32 0, i32 2
* * * * * * * * * DtoArgument
* * * * * * * * * * CastExp::toElem: cast(void*)a @ const(void*)
* * * * * * * * * * * VarExp::toElem: a @ void[]
* * * * * * * * * * * * DtoSymbolAddress ('a' of type 'void[]')
* * * * * * * * * * * * * a normal variable
* * * * * * * * * * * Casting from 'void[]' to 'void*'
* * * * * * * * * * * * DtoCastArray
* * * * * * * * * * * * * from array or sarray
* * * * * * * * * * * * * to pointer
* * * * * * * * * * * * * DtoArrayPtr
* * * * * * * * * * * repainting from 'void*' to 'const(void*)'
* * * * * * * * * DtoArgument
* * * * * * * * * * ArrayLengthExp::toElem: a.length @ const(ulong)
* * * * * * * * * * * VarExp::toElem: a @ void[]
* * * * * * * * * * * * DtoSymbolAddress ('a' of type 'void[]')
* * * * * * * * * * * * * a normal variable
* * * * * * * * * * * DtoArrayLen
* * * * * * * * Building type: nothrow @trusted ulong(const(TypeInfo) element, const(void*) ptr, const(ulong) count)
* * * * * * * * * DtoFunctionType(nothrow @trusted ulong(const(TypeInfo) element, const(void*) ptr, const(ulong) count))
* * * * * * * * * * x86-64 ABI: Transforming return type
* * * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * * Final function type: i64 (i64, i8*, %object.TypeInfo*)
* * * * * * * * doing normal arguments
* * * * * * * * Arguments so far: (0)
* * * * * * * * Function type: nothrow @trusted ulong(const(TypeInfo) element, const(void*) ptr, const(ulong) count)
* * DtoDefineFunction(object.TypeInfo_Array.equals): object.d(853)
* * * isMember = this is: object.TypeInfo_Array
* * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i1 (%object.TypeInfo_Array*, i8*, i8*)
* * * DtoResolveFunction(object.TypeInfo_Array.equals): object.d(853)
* * * * DtoDeclareFunction(object.TypeInfo_Array.equals): object.d(853)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Array
* * * * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2))
* * * * * func =
declare i1 @_D6object14TypeInfo_Array6equalsMxFxPvxQdZb(%object.TypeInfo_Array*, i8*, i8*)
* * * Doing function body for: equals
* * * DtoCreateNestedContext for object.TypeInfo_Array.equals
* * * * DtoCreateNestedContextType for object.TypeInfo_Array.equals
* * * CompoundStatement::toIR():
* * * * CompoundStatement::toIR(): object.d(853)
* * * * * ExpStatement::toIR(): object.d(854)
* * * * * * DeclarationExp::toElem: (void[] a1 = *cast(void[]*)p1;) | T=void
* * * * * * * DtoDeclarationExp: a1
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = void[])
* * * * * * * * * llvm value for decl: %7 = alloca { i64, i8* }, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: a1 = *cast(void[]*)p1 | (void[])(void[] = void[])
* * * * * * * * * * VarExp::toElem: a1 @ void[]
* * * * * * * * * * * DtoSymbolAddress ('a1' of type 'void[]')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * PtrExp::toElem: *cast(void[]*)p1 @ void[]
* * * * * * * * * * * CastExp::toElem: cast(void[]*)p1 @ void[]*
* * * * * * * * * * * * VarExp::toElem: p1 @ const(void*)
* * * * * * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)')
* * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * type: const(void*)
* * * * * * * * * * * * Casting from 'const(void*)' to 'void[]*'
* * * * * * * * * * * * * src: %9 = load i8*, i8** %5
* * * * * * * * * * * * * to type: { i64, i8* }*
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * DtoArrayAssign
* * * * * * * * * * * * DtoArrayPtr
* * * * * * * * * * * * DtoArrayLen
* * * * * * * * * * * * SetArray
* * * * * ExpStatement::toIR(): object.d(855)
* * * * * * DeclarationExp::toElem: (void[] a2 = *cast(void[]*)p2;) | T=void
* * * * * * * DtoDeclarationExp: a2
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = void[])
* * * * * * * * * llvm value for decl: %8 = alloca { i64, i8* }, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: a2 = *cast(void[]*)p2 | (void[])(void[] = void[])
* * * * * * * * * * VarExp::toElem: a2 @ void[]
* * * * * * * * * * * DtoSymbolAddress ('a2' of type 'void[]')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * PtrExp::toElem: *cast(void[]*)p2 @ void[]
* * * * * * * * * * * CastExp::toElem: cast(void[]*)p2 @ void[]*
* * * * * * * * * * * * VarExp::toElem: p2 @ const(void*)
* * * * * * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)')
* * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * type: const(void*)
* * * * * * * * * * * * Casting from 'const(void*)' to 'void[]*'
* * * * * * * * * * * * * src: %18 = load i8*, i8** %6
* * * * * * * * * * * * * to type: { i64, i8* }*
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * DtoArrayAssign
* * * * * * * * * * * * DtoArrayPtr
* * * * * * * * * * * * DtoArrayLen
* * * * * * * * * * * * SetArray
* * * * * IfStatement::toIR(): object.d(856)
* * * * * * EqualExp::toElem: a1.length != a2.length @ bool
* * * * * * * ArrayLengthExp::toElem: a1.length @ ulong
* * * * * * * * VarExp::toElem: a1 @ void[]
* * * * * * * * * DtoSymbolAddress ('a1' of type 'void[]')
* * * * * * * * * * a normal variable
* * * * * * * * DtoArrayLen
* * * * * * * ArrayLengthExp::toElem: a2.length @ ulong
* * * * * * * * VarExp::toElem: a2 @ void[]
* * * * * * * * * DtoSymbolAddress ('a2' of type 'void[]')
* * * * * * * * * * a normal variable
* * * * * * * * DtoArrayLen
* * * * * * * integral or pointer or interface
* * * * * * * lv: %27 = load i64, i64* %26
* * * * * * * rv: %29 = load i64, i64* %28
* * * * * * ReturnStatement::toIR(): object.d(857)
* * * * * * * IntegerExp::toElem: false @ bool
* * * * * * * * IntegerExp::toConstElem: false @ bool
* * * * * * * * * value = i1 false
* * * * * ExpStatement::toIR(): object.d(858)
* * * * * * DeclarationExp::toElem: (ulong sz = this.value.tsize();) | T=void
* * * * * * * DtoDeclarationExp: sz
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = ulong)
* * * * * * * * * llvm value for decl: %9 = alloca i64, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: sz = this.value.tsize() | (ulong)(ulong = ulong)
* * * * * * * * * * VarExp::toElem: sz @ ulong
* * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * CallExp::toElem: this.value.tsize() @ ulong
* * * * * * * * * * * DotVarExp::toElem: this.value.tsize @ const pure nothrow @nogc @property @safe ulong()
* * * * * * * * * * * * DotVarExp::toElem: this.value @ const(TypeInfo)
* * * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Array)
* * * * * * * * * * * * * * normal this exp
* * * * * * * * * * * * * Indexing aggregate field object.TypeInfo_Array.value:
* * * * * * * * * * * * * * Value: %36 = getelementptr inbounds %object.TypeInfo_Array, %object.TypeInfo_Array* %35, i32 0, i32 2
* * * * * * * * * * * * vthis: %37 = load %object.TypeInfo*, %object.TypeInfo** %36
* * * * * * * * * * * * funcval: %41 = load i8*, i8** %40, align 8
* * * * * * * * * * * * isMember = this is: object.TypeInfo
* * * * * * * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * * * * * * * * funcval casted: %42 = bitcast i8* %41 to i64 (%object.TypeInfo*)*
* * * * * * * * * * * DtoCallFunction()
* * * * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * * doing normal arguments
* * * * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * * * %43 = load %object.TypeInfo*, %object.TypeInfo** %36
* * * * * * * * * * * * Function type: const pure nothrow @nogc @property @safe ulong()
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %9 = alloca i64, align 8
* * * * * * * * * * * rhs: %44 = call i64 %42(%object.TypeInfo* nonnull %43)
* * * * * ScopeStatement::toIR(): object.d(859)
* * * * * * CompoundStatement::toIR(): object.d(859)
* * * * * * * ExpStatement::toIR(): object.d(859)
* * * * * * * * DeclarationExp::toElem: (ulong i = 0LU;) | T=void
* * * * * * * * * DtoDeclarationExp: i
* * * * * * * * * * VarDeclaration
* * * * * * * * * * DtoVarDeclaration(vdtype = ulong)
* * * * * * * * * * * llvm value for decl: %10 = alloca i64, align 8
* * * * * * * * * * * expression initializer
* * * * * * * * * * * AssignExp::toElem: i = 0LU | (ulong)(ulong = ulong)
* * * * * * * * * * * * VarExp::toElem: i @ ulong
* * * * * * * * * * * * * DtoSymbolAddress ('i' of type 'ulong')
* * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * IntegerExp::toElem: 0LU @ ulong
* * * * * * * * * * * * * IntegerExp::toConstElem: 0LU @ ulong
* * * * * * * * * * * * * * value = i64 0
* * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * * * DtoAssign()
* * * * * * * * * * * * * lhs: %10 = alloca i64, align 8
* * * * * * * * * * * * * rhs: i64 0
* * * * * * * ForStatement::toIR(): object.d(859)
* * * * * * * * CmpExp::toElem: i < a1.length @ bool
* * * * * * * * * VarExp::toElem: i @ ulong
* * * * * * * * * * DtoSymbolAddress ('i' of type 'ulong')
* * * * * * * * * * * a normal variable
* * * * * * * * * ArrayLengthExp::toElem: a1.length @ ulong
* * * * * * * * * * VarExp::toElem: a1 @ void[]
* * * * * * * * * * * DtoSymbolAddress ('a1' of type 'void[]')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * DtoArrayLen
* * * * * * * * * type 1: %49 = load i64, i64* %10
* * * * * * * * * type 2: %48 = load i64, i64* %47
* * * * * * * * ScopeStatement::toIR(): object.d(859)
* * * * * * * * * IfStatement::toIR(): object.d(860)
* * * * * * * * * * NotExp::toElem: !this.value.equals(cast(void*)a1 + cast(long)(i * sz) * 1L, cast(void*)a2 + cast(long)(i * sz) * 1L) @ bool
* * * * * * * * * * * CallExp::toElem: this.value.equals(cast(void*)a1 + cast(long)(i * sz) * 1L, cast(void*)a2 + cast(long)(i * sz) * 1L) @ bool
* * * * * * * * * * * * DotVarExp::toElem: this.value.equals @ const bool(const(void*) p1, const(void*) p2)
* * * * * * * * * * * * * DotVarExp::toElem: this.value @ const(TypeInfo)
* * * * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Array)
* * * * * * * * * * * * * * * normal this exp
* * * * * * * * * * * * * * Indexing aggregate field object.TypeInfo_Array.value:
* * * * * * * * * * * * * * * Value: %53 = getelementptr inbounds %object.TypeInfo_Array, %object.TypeInfo_Array* %52, i32 0, i32 2
* * * * * * * * * * * * * vthis: %54 = load %object.TypeInfo*, %object.TypeInfo** %53
* * * * * * * * * * * * * funcval: %58 = load i8*, i8** %57, align 8
* * * * * * * * * * * * * isMember = this is: object.TypeInfo
* * * * * * * * * * * * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2))
* * * * * * * * * * * * * funcval casted: %59 = bitcast i8* %58 to i1 (%object.TypeInfo*, i8*, i8*)*
* * * * * * * * * * * * DtoCallFunction()
* * * * * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * * * AddExp::toElem: cast(void*)a1 + cast(long)(i * sz) * 1L @ const(void*)
* * * * * * * * * * * * * * * * CastExp::toElem: cast(void*)a1 @ void*
* * * * * * * * * * * * * * * * * VarExp::toElem: a1 @ void[]
* * * * * * * * * * * * * * * * * * DtoSymbolAddress ('a1' of type 'void[]')
* * * * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * * * * Casting from 'void[]' to 'void*'
* * * * * * * * * * * * * * * * * * DtoCastArray
* * * * * * * * * * * * * * * * * * * from array or sarray
* * * * * * * * * * * * * * * * * * * to pointer
* * * * * * * * * * * * * * * * * * * DtoArrayPtr
* * * * * * * * * * * * * * * * Adding integer to pointer
* * * * * * * * * * * * * * * * CastExp::toElem: cast(long)(i * sz) @ long
* * * * * * * * * * * * * * * * * MulExp::toElem: i * sz @ ulong
* * * * * * * * * * * * * * * * * * VarExp::toElem: i @ ulong
* * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('i' of type 'ulong')
* * * * * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * * * * * VarExp::toElem: sz @ ulong
* * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong')
* * * * * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * * * * Casting from 'ulong' to 'long'
* * * * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * * * AddExp::toElem: cast(void*)a2 + cast(long)(i * sz) * 1L @ const(void*)
* * * * * * * * * * * * * * * * CastExp::toElem: cast(void*)a2 @ void*
* * * * * * * * * * * * * * * * * VarExp::toElem: a2 @ void[]
* * * * * * * * * * * * * * * * * * DtoSymbolAddress ('a2' of type 'void[]')
* * * * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * * * * Casting from 'void[]' to 'void*'
* * * * * * * * * * * * * * * * * * DtoCastArray
* * * * * * * * * * * * * * * * * * * from array or sarray
* * * * * * * * * * * * * * * * * * * to pointer
* * * * * * * * * * * * * * * * * * * DtoArrayPtr
* * * * * * * * * * * * * * * * Adding integer to pointer
* * * * * * * * * * * * * * * * CastExp::toElem: cast(long)(i * sz) @ long
* * * * * * * * * * * * * * * * * MulExp::toElem: i * sz @ ulong
* * * * * * * * * * * * * * * * * * VarExp::toElem: i @ ulong
* * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('i' of type 'ulong')
* * * * * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * * * * * VarExp::toElem: sz @ ulong
* * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong')
* * * * * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * * * * Casting from 'ulong' to 'long'
* * * * * * * * * * * * * doing normal arguments
* * * * * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * * * * %60 = load %object.TypeInfo*, %object.TypeInfo** %53
* * * * * * * * * * * * * Function type: const bool(const(void*) p1, const(void*) p2)
* * * * * * * * * * ReturnStatement::toIR(): object.d(861)
* * * * * * * * * * * IntegerExp::toElem: false @ bool
* * * * * * * * * * * * IntegerExp::toConstElem: false @ bool
* * * * * * * * * * * * * value = i1 false
* * * * * * * * PostExp::toElem: i++ @ ulong
* * * * * * * * * VarExp::toElem: i @ ulong
* * * * * * * * * * DtoSymbolAddress ('i' of type 'ulong')
* * * * * * * * * * * a normal variable
* * * * * * * * * IntegerExp::toElem: 1LU @ ulong
* * * * * * * * * * IntegerExp::toConstElem: 1LU @ ulong
* * * * * * * * * * * value = i64 1
* * * * * ReturnStatement::toIR(): object.d(863)
* * * * * * IntegerExp::toElem: true @ bool
* * * * * * * IntegerExp::toConstElem: true @ bool
* * * * * * * * value = i1 true
* * DtoDefineFunction(object.TypeInfo_Array.compare): object.d(866)
* * * isMember = this is: object.TypeInfo_Array
* * * DtoFunctionType(const int(const(void*) p1, const(void*) p2))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i32 (%object.TypeInfo_Array*, i8*, i8*)
* * * DtoResolveFunction(object.TypeInfo_Array.compare): object.d(866)
* * * * DtoDeclareFunction(object.TypeInfo_Array.compare): object.d(866)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Array
* * * * * DtoFunctionType(const int(const(void*) p1, const(void*) p2))
* * * * * func =
declare i32 @_D6object14TypeInfo_Array7compareMxFxPvxQdZi(%object.TypeInfo_Array*, i8*, i8*)
* * * Doing function body for: compare
* * * DtoCreateNestedContext for object.TypeInfo_Array.compare
* * * * DtoCreateNestedContextType for object.TypeInfo_Array.compare
* * * CompoundStatement::toIR():
* * * * CompoundStatement::toIR(): object.d(866)
* * * * * ExpStatement::toIR(): object.d(867)
* * * * * * DeclarationExp::toElem: (void[] a1 = *cast(void[]*)p1;) | T=void
* * * * * * * DtoDeclarationExp: a1
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = void[])
* * * * * * * * * llvm value for decl: %7 = alloca { i64, i8* }, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: a1 = *cast(void[]*)p1 | (void[])(void[] = void[])
* * * * * * * * * * VarExp::toElem: a1 @ void[]
* * * * * * * * * * * DtoSymbolAddress ('a1' of type 'void[]')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * PtrExp::toElem: *cast(void[]*)p1 @ void[]
* * * * * * * * * * * CastExp::toElem: cast(void[]*)p1 @ void[]*
* * * * * * * * * * * * VarExp::toElem: p1 @ const(void*)
* * * * * * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)')
* * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * type: const(void*)
* * * * * * * * * * * * Casting from 'const(void*)' to 'void[]*'
* * * * * * * * * * * * * src: %9 = load i8*, i8** %5
* * * * * * * * * * * * * to type: { i64, i8* }*
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * DtoArrayAssign
* * * * * * * * * * * * DtoArrayPtr
* * * * * * * * * * * * DtoArrayLen
* * * * * * * * * * * * SetArray
* * * * * ExpStatement::toIR(): object.d(868)
* * * * * * DeclarationExp::toElem: (void[] a2 = *cast(void[]*)p2;) | T=void
* * * * * * * DtoDeclarationExp: a2
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = void[])
* * * * * * * * * llvm value for decl: %8 = alloca { i64, i8* }, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: a2 = *cast(void[]*)p2 | (void[])(void[] = void[])
* * * * * * * * * * VarExp::toElem: a2 @ void[]
* * * * * * * * * * * DtoSymbolAddress ('a2' of type 'void[]')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * PtrExp::toElem: *cast(void[]*)p2 @ void[]
* * * * * * * * * * * CastExp::toElem: cast(void[]*)p2 @ void[]*
* * * * * * * * * * * * VarExp::toElem: p2 @ const(void*)
* * * * * * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)')
* * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * type: const(void*)
* * * * * * * * * * * * Casting from 'const(void*)' to 'void[]*'
* * * * * * * * * * * * * src: %18 = load i8*, i8** %6
* * * * * * * * * * * * * to type: { i64, i8* }*
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * DtoArrayAssign
* * * * * * * * * * * * DtoArrayPtr
* * * * * * * * * * * * DtoArrayLen
* * * * * * * * * * * * SetArray
* * * * * ExpStatement::toIR(): object.d(869)
* * * * * * DeclarationExp::toElem: (ulong sz = this.value.tsize();) | T=void
* * * * * * * DtoDeclarationExp: sz
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = ulong)
* * * * * * * * * llvm value for decl: %9 = alloca i64, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: sz = this.value.tsize() | (ulong)(ulong = ulong)
* * * * * * * * * * VarExp::toElem: sz @ ulong
* * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * CallExp::toElem: this.value.tsize() @ ulong
* * * * * * * * * * * DotVarExp::toElem: this.value.tsize @ const pure nothrow @nogc @property @safe ulong()
* * * * * * * * * * * * DotVarExp::toElem: this.value @ const(TypeInfo)
* * * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Array)
* * * * * * * * * * * * * * normal this exp
* * * * * * * * * * * * * Indexing aggregate field object.TypeInfo_Array.value:
* * * * * * * * * * * * * * Value: %28 = getelementptr inbounds %object.TypeInfo_Array, %object.TypeInfo_Array* %27, i32 0, i32 2
* * * * * * * * * * * * vthis: %29 = load %object.TypeInfo*, %object.TypeInfo** %28
* * * * * * * * * * * * funcval: %33 = load i8*, i8** %32, align 8
* * * * * * * * * * * * isMember = this is: object.TypeInfo
* * * * * * * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * * * * * * * * funcval casted: %34 = bitcast i8* %33 to i64 (%object.TypeInfo*)*
* * * * * * * * * * * DtoCallFunction()
* * * * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * * doing normal arguments
* * * * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * * * %35 = load %object.TypeInfo*, %object.TypeInfo** %28
* * * * * * * * * * * * Function type: const pure nothrow @nogc @property @safe ulong()
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %9 = alloca i64, align 8
* * * * * * * * * * * rhs: %36 = call i64 %34(%object.TypeInfo* nonnull %35)
* * * * * ExpStatement::toIR(): object.d(870)
* * * * * * DeclarationExp::toElem: (ulong len = a1.length;) | T=void
* * * * * * * DtoDeclarationExp: len
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = ulong)
* * * * * * * * * llvm value for decl: %10 = alloca i64, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: len = a1.length | (ulong)(ulong = ulong)
* * * * * * * * * * VarExp::toElem: len @ ulong
* * * * * * * * * * * DtoSymbolAddress ('len' of type 'ulong')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * ArrayLengthExp::toElem: a1.length @ ulong
* * * * * * * * * * * VarExp::toElem: a1 @ void[]
* * * * * * * * * * * * DtoSymbolAddress ('a1' of type 'void[]')
* * * * * * * * * * * * * a normal variable
* * * * * * * * * * * DtoArrayLen
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %10 = alloca i64, align 8
* * * * * * * * * * * rhs: %39 = load i64, i64* %38
* * * * * IfStatement::toIR(): object.d(872)
* * * * * * CmpExp::toElem: a2.length < len @ bool
* * * * * * * ArrayLengthExp::toElem: a2.length @ ulong
* * * * * * * * VarExp::toElem: a2 @ void[]
* * * * * * * * * DtoSymbolAddress ('a2' of type 'void[]')
* * * * * * * * * * a normal variable
* * * * * * * * DtoArrayLen
* * * * * * * VarExp::toElem: len @ ulong
* * * * * * * * DtoSymbolAddress ('len' of type 'ulong')
* * * * * * * * * a normal variable
* * * * * * * type 1: %41 = load i64, i64* %40
* * * * * * * type 2: %42 = load i64, i64* %10
* * * * * * ExpStatement::toIR(): object.d(873)
* * * * * * * AssignExp::toElem: len = a2.length | (ulong)(ulong = ulong)
* * * * * * * * VarExp::toElem: len @ ulong
* * * * * * * * * DtoSymbolAddress ('len' of type 'ulong')
* * * * * * * * * * a normal variable
* * * * * * * * ArrayLengthExp::toElem: a2.length @ ulong
* * * * * * * * * VarExp::toElem: a2 @ void[]
* * * * * * * * * * DtoSymbolAddress ('a2' of type 'void[]')
* * * * * * * * * * * a normal variable
* * * * * * * * * DtoArrayLen
* * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * DtoAssign()
* * * * * * * * * lhs: %10 = alloca i64, align 8
* * * * * * * * * rhs: %46 = load i64, i64* %45
* * * * * ScopeStatement::toIR(): object.d(874)
* * * * * * CompoundStatement::toIR(): object.d(874)
* * * * * * * ExpStatement::toIR(): object.d(874)
* * * * * * * * DeclarationExp::toElem: (ulong u = 0LU;) | T=void
* * * * * * * * * DtoDeclarationExp: u
* * * * * * * * * * VarDeclaration
* * * * * * * * * * DtoVarDeclaration(vdtype = ulong)
* * * * * * * * * * * llvm value for decl: %11 = alloca i64, align 8
* * * * * * * * * * * expression initializer
* * * * * * * * * * * AssignExp::toElem: u = 0LU | (ulong)(ulong = ulong)
* * * * * * * * * * * * VarExp::toElem: u @ ulong
* * * * * * * * * * * * * DtoSymbolAddress ('u' of type 'ulong')
* * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * IntegerExp::toElem: 0LU @ ulong
* * * * * * * * * * * * * IntegerExp::toConstElem: 0LU @ ulong
* * * * * * * * * * * * * * value = i64 0
* * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * * * DtoAssign()
* * * * * * * * * * * * * lhs: %11 = alloca i64, align 8
* * * * * * * * * * * * * rhs: i64 0
* * * * * * * ForStatement::toIR(): object.d(874)
* * * * * * * * CmpExp::toElem: u < len @ bool
* * * * * * * * * VarExp::toElem: u @ ulong
* * * * * * * * * * DtoSymbolAddress ('u' of type 'ulong')
* * * * * * * * * * * a normal variable
* * * * * * * * * VarExp::toElem: len @ ulong
* * * * * * * * * * DtoSymbolAddress ('len' of type 'ulong')
* * * * * * * * * * * a normal variable
* * * * * * * * * type 1: %50 = load i64, i64* %11
* * * * * * * * * type 2: %51 = load i64, i64* %10
* * * * * * * * ScopeStatement::toIR(): object.d(874)
* * * * * * * * * CompoundStatement::toIR(): object.d(874)
* * * * * * * * * * ExpStatement::toIR(): object.d(875)
* * * * * * * * * * * DeclarationExp::toElem: (int result = this.value.compare(cast(void*)a1 + cast(long)(u * sz) * 1L, cast(void*)a2 + cast(long)(u * sz) * 1L);) | T=void
* * * * * * * * * * * * DtoDeclarationExp: result
* * * * * * * * * * * * * VarDeclaration
* * * * * * * * * * * * * DtoVarDeclaration(vdtype = int)
* * * * * * * * * * * * * * llvm value for decl: %12 = alloca i32, align 4
* * * * * * * * * * * * * * expression initializer
* * * * * * * * * * * * * * AssignExp::toElem: result = this.value.compare(cast(void*)a1 + cast(long)(u * sz) * 1L, cast(void*)a2 + cast(long)(u * sz) * 1L) | (int)(int = int)
* * * * * * * * * * * * * * * VarExp::toElem: result @ int
* * * * * * * * * * * * * * * * DtoSymbolAddress ('result' of type 'int')
* * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * * CallExp::toElem: this.value.compare(cast(void*)a1 + cast(long)(u * sz) * 1L, cast(void*)a2 + cast(long)(u * sz) * 1L) @ int
* * * * * * * * * * * * * * * * DotVarExp::toElem: this.value.compare @ const int(const(void*) p1, const(void*) p2)
* * * * * * * * * * * * * * * * * DotVarExp::toElem: this.value @ const(TypeInfo)
* * * * * * * * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Array)
* * * * * * * * * * * * * * * * * * * normal this exp
* * * * * * * * * * * * * * * * * * Indexing aggregate field object.TypeInfo_Array.value:
* * * * * * * * * * * * * * * * * * * Value: %56 = getelementptr inbounds %object.TypeInfo_Array, %object.TypeInfo_Array* %55, i32 0, i32 2
* * * * * * * * * * * * * * * * * vthis: %57 = load %object.TypeInfo*, %object.TypeInfo** %56
* * * * * * * * * * * * * * * * * funcval: %61 = load i8*, i8** %60, align 8
* * * * * * * * * * * * * * * * * isMember = this is: object.TypeInfo
* * * * * * * * * * * * * * * * * DtoFunctionType(const int(const(void*) p1, const(void*) p2))
* * * * * * * * * * * * * * * * * funcval casted: %62 = bitcast i8* %61 to i32 (%object.TypeInfo*, i8*, i8*)*
* * * * * * * * * * * * * * * * DtoCallFunction()
* * * * * * * * * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * * * * * * * AddExp::toElem: cast(void*)a1 + cast(long)(u * sz) * 1L @ const(void*)
* * * * * * * * * * * * * * * * * * * * CastExp::toElem: cast(void*)a1 @ void*
* * * * * * * * * * * * * * * * * * * * * VarExp::toElem: a1 @ void[]
* * * * * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('a1' of type 'void[]')
* * * * * * * * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * * * * * * * * Casting from 'void[]' to 'void*'
* * * * * * * * * * * * * * * * * * * * * * DtoCastArray
* * * * * * * * * * * * * * * * * * * * * * * from array or sarray
* * * * * * * * * * * * * * * * * * * * * * * to pointer
* * * * * * * * * * * * * * * * * * * * * * * DtoArrayPtr
* * * * * * * * * * * * * * * * * * * * Adding integer to pointer
* * * * * * * * * * * * * * * * * * * * CastExp::toElem: cast(long)(u * sz) @ long
* * * * * * * * * * * * * * * * * * * * * MulExp::toElem: u * sz @ ulong
* * * * * * * * * * * * * * * * * * * * * * VarExp::toElem: u @ ulong
* * * * * * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('u' of type 'ulong')
* * * * * * * * * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * * * * * * * * * VarExp::toElem: sz @ ulong
* * * * * * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong')
* * * * * * * * * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * * * * * * * * Casting from 'ulong' to 'long'
* * * * * * * * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * * * * * * * AddExp::toElem: cast(void*)a2 + cast(long)(u * sz) * 1L @ const(void*)
* * * * * * * * * * * * * * * * * * * * CastExp::toElem: cast(void*)a2 @ void*
* * * * * * * * * * * * * * * * * * * * * VarExp::toElem: a2 @ void[]
* * * * * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('a2' of type 'void[]')
* * * * * * * * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * * * * * * * * Casting from 'void[]' to 'void*'
* * * * * * * * * * * * * * * * * * * * * * DtoCastArray
* * * * * * * * * * * * * * * * * * * * * * * from array or sarray
* * * * * * * * * * * * * * * * * * * * * * * to pointer
* * * * * * * * * * * * * * * * * * * * * * * DtoArrayPtr
* * * * * * * * * * * * * * * * * * * * Adding integer to pointer
* * * * * * * * * * * * * * * * * * * * CastExp::toElem: cast(long)(u * sz) @ long
* * * * * * * * * * * * * * * * * * * * * MulExp::toElem: u * sz @ ulong
* * * * * * * * * * * * * * * * * * * * * * VarExp::toElem: u @ ulong
* * * * * * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('u' of type 'ulong')
* * * * * * * * * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * * * * * * * * * VarExp::toElem: sz @ ulong
* * * * * * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong')
* * * * * * * * * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * * * * * * * * Casting from 'ulong' to 'long'
* * * * * * * * * * * * * * * * * doing normal arguments
* * * * * * * * * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * * * * * * * * %63 = load %object.TypeInfo*, %object.TypeInfo** %56
* * * * * * * * * * * * * * * * * Function type: const int(const(void*) p1, const(void*) p2)
* * * * * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * * * * * * DtoAssign()
* * * * * * * * * * * * * * * * lhs: %12 = alloca i32, align 4
* * * * * * * * * * * * * * * * rhs: %76 = call i32 %62(%object.TypeInfo* nonnull %63, i8* %75, i8* %69)
* * * * * * * * * * IfStatement::toIR(): object.d(876)
* * * * * * * * * * * VarExp::toElem: result @ int
* * * * * * * * * * * * DtoSymbolAddress ('result' of type 'int')
* * * * * * * * * * * * * a normal variable
* * * * * * * * * * * if conditional: %77 = load i32, i32* %12
* * * * * * * * * * * Casting from 'int' to 'bool'
* * * * * * * * * * * ReturnStatement::toIR(): object.d(877)
* * * * * * * * * * * * VarExp::toElem: result @ int
* * * * * * * * * * * * * DtoSymbolAddress ('result' of type 'int')
* * * * * * * * * * * * * * a normal variable
* * * * * * * * PostExp::toElem: u++ @ ulong
* * * * * * * * * VarExp::toElem: u @ ulong
* * * * * * * * * * DtoSymbolAddress ('u' of type 'ulong')
* * * * * * * * * * * a normal variable
* * * * * * * * * IntegerExp::toElem: 1LU @ ulong
* * * * * * * * * * IntegerExp::toConstElem: 1LU @ ulong
* * * * * * * * * * * value = i64 1
* * * * * ReturnStatement::toIR(): object.d(879)
* * * * * * MinExp::toElem: cast(int)a1.length - cast(int)a2.length @ int
* * * * * * * CastExp::toElem: cast(int)a1.length @ int
* * * * * * * * ArrayLengthExp::toElem: a1.length @ ulong
* * * * * * * * * VarExp::toElem: a1 @ void[]
* * * * * * * * * * DtoSymbolAddress ('a1' of type 'void[]')
* * * * * * * * * * * a normal variable
* * * * * * * * * DtoArrayLen
* * * * * * * * Casting from 'ulong' to 'int'
* * * * * * * CastExp::toElem: cast(int)a2.length @ int
* * * * * * * * ArrayLengthExp::toElem: a2.length @ ulong
* * * * * * * * * VarExp::toElem: a2 @ void[]
* * * * * * * * * * DtoSymbolAddress ('a2' of type 'void[]')
* * * * * * * * * * * a normal variable
* * * * * * * * * DtoArrayLen
* * * * * * * * Casting from 'ulong' to 'int'
* * DtoDefineFunction(object.TypeInfo_Array.tsize): object.d(882)
* * * isMember = this is: object.TypeInfo_Array
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (%object.TypeInfo_Array*)
* * * DtoResolveFunction(object.TypeInfo_Array.tsize): object.d(882)
* * * * DtoDeclareFunction(object.TypeInfo_Array.tsize): object.d(882)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Array
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * func =
declare i64 @_D6object14TypeInfo_Array5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo_Array*)
* * * Doing function body for: tsize
* * * DtoCreateNestedContext for object.TypeInfo_Array.tsize
* * * * DtoCreateNestedContextType for object.TypeInfo_Array.tsize
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(883)
* * * * * IntegerExp::toElem: 16LU @ ulong
* * * * * * IntegerExp::toConstElem: 16LU @ ulong
* * * * * * * value = i64 16
* * DtoDefineFunction(object.TypeInfo_Array.initializer): object.d(886)
* * * isMember = this is: object.TypeInfo_Array
* * * DtoFunctionType(const pure nothrow @nogc @trusted const(void)[]())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.TypeInfo_Array*)
* * * DtoResolveFunction(object.TypeInfo_Array.initializer): object.d(886)
* * * * DtoDeclareFunction(object.TypeInfo_Array.initializer): object.d(886)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Array
* * * * * DtoFunctionType(const pure nothrow @nogc @trusted const(void)[]())
* * * * * func =
declare { i64, i8* } @_D6object14TypeInfo_Array11initializerMxFNaNbNiNeZAxv(%object.TypeInfo_Array*)
* * * Doing function body for: initializer
* * * DtoCreateNestedContext for object.TypeInfo_Array.initializer
* * * * DtoCreateNestedContextType for object.TypeInfo_Array.initializer
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(887)
* * * * * SliceExp::toElem: null[0..16] @ const(void)[]
* * * * * * NullExp::toElem(type=void*): null
* * * * * * * NullExp::toConstElem(type=void*): null
* * * * * * IntegerExp::toElem: 0LU @ ulong
* * * * * * * IntegerExp::toConstElem: 0LU @ ulong
* * * * * * * * value = i64 0
* * * * * * IntegerExp::toElem: 16LU @ ulong
* * * * * * * IntegerExp::toConstElem: 16LU @ ulong
* * * * * * * * value = i64 16
* * DtoDefineFunction(object.TypeInfo_Array.swap): object.d(890)
* * * isMember = this is: object.TypeInfo_Array
* * * DtoFunctionType(const void(void* p1, void* p2))
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: void (%object.TypeInfo_Array*, i8*, i8*)
* * * DtoResolveFunction(object.TypeInfo_Array.swap): object.d(890)
* * * * DtoDeclareFunction(object.TypeInfo_Array.swap): object.d(890)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Array
* * * * * DtoFunctionType(const void(void* p1, void* p2))
* * * * * func =
declare void @_D6object14TypeInfo_Array4swapMxFPvQcZv(%object.TypeInfo_Array*, i8*, i8*)
* * * Doing function body for: swap
* * * DtoCreateNestedContext for object.TypeInfo_Array.swap
* * * * DtoCreateNestedContextType for object.TypeInfo_Array.swap
* * * CompoundStatement::toIR():
* * * * CompoundStatement::toIR(): object.d(890)
* * * * * ExpStatement::toIR(): object.d(891)
* * * * * * DeclarationExp::toElem: (void[] tmp = *cast(void[]*)p1;) | T=void
* * * * * * * DtoDeclarationExp: tmp
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = void[])
* * * * * * * * * llvm value for decl: %7 = alloca { i64, i8* }, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: tmp = *cast(void[]*)p1 | (void[])(void[] = void[])
* * * * * * * * * * VarExp::toElem: tmp @ void[]
* * * * * * * * * * * DtoSymbolAddress ('tmp' of type 'void[]')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * PtrExp::toElem: *cast(void[]*)p1 @ void[]
* * * * * * * * * * * CastExp::toElem: cast(void[]*)p1 @ void[]*
* * * * * * * * * * * * VarExp::toElem: p1 @ void*
* * * * * * * * * * * * * DtoSymbolAddress ('p1' of type 'void*')
* * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * type: void*
* * * * * * * * * * * * Casting from 'void*' to 'void[]*'
* * * * * * * * * * * * * src: %9 = load i8*, i8** %5
* * * * * * * * * * * * * to type: { i64, i8* }*
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * DtoArrayAssign
* * * * * * * * * * * * DtoArrayPtr
* * * * * * * * * * * * DtoArrayLen
* * * * * * * * * * * * SetArray
* * * * * ExpStatement::toIR(): object.d(892)
* * * * * * AssignExp::toElem: *cast(void[]*)p1 = *cast(void[]*)p2 | (void[])(void[] = void[])
* * * * * * * PtrExp::toElem: *cast(void[]*)p1 @ void[]
* * * * * * * * CastExp::toElem: cast(void[]*)p1 @ void[]*
* * * * * * * * * VarExp::toElem: p1 @ void*
* * * * * * * * * * DtoSymbolAddress ('p1' of type 'void*')
* * * * * * * * * * * function param
* * * * * * * * * * * type: void*
* * * * * * * * * Casting from 'void*' to 'void[]*'
* * * * * * * * * * src: %17 = load i8*, i8** %5
* * * * * * * * * * to type: { i64, i8* }*
* * * * * * * PtrExp::toElem: *cast(void[]*)p2 @ void[]
* * * * * * * * CastExp::toElem: cast(void[]*)p2 @ void[]*
* * * * * * * * * VarExp::toElem: p2 @ void*
* * * * * * * * * * DtoSymbolAddress ('p2' of type 'void*')
* * * * * * * * * * * function param
* * * * * * * * * * * type: void*
* * * * * * * * * Casting from 'void*' to 'void[]*'
* * * * * * * * * * src: %19 = load i8*, i8** %6
* * * * * * * * * * to type: { i64, i8* }*
* * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * DtoAssign()
* * * * * * * * DtoArrayAssign
* * * * * * * * * DtoArrayPtr
* * * * * * * * * DtoArrayLen
* * * * * * * * * SetArray
* * * * * ExpStatement::toIR(): object.d(893)
* * * * * * AssignExp::toElem: *cast(void[]*)p2 = tmp | (void[])(void[] = void[])
* * * * * * * PtrExp::toElem: *cast(void[]*)p2 @ void[]
* * * * * * * * CastExp::toElem: cast(void[]*)p2 @ void[]*
* * * * * * * * * VarExp::toElem: p2 @ void*
* * * * * * * * * * DtoSymbolAddress ('p2' of type 'void*')
* * * * * * * * * * * function param
* * * * * * * * * * * type: void*
* * * * * * * * * Casting from 'void*' to 'void[]*'
* * * * * * * * * * src: %27 = load i8*, i8** %6
* * * * * * * * * * to type: { i64, i8* }*
* * * * * * * VarExp::toElem: tmp @ void[]
* * * * * * * * DtoSymbolAddress ('tmp' of type 'void[]')
* * * * * * * * * a normal variable
* * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * DtoAssign()
* * * * * * * * DtoArrayAssign
* * * * * * * * * DtoArrayPtr
* * * * * * * * * DtoArrayLen
* * * * * * * * * SetArray
* * VarDeclaration::codegen(): 'object.TypeInfo_Array.value'
* * * DtoResolveVariable(object.TypeInfo_Array.value)
* * DtoDefineFunction(object.TypeInfo_Array.next): object.d(898)
* * * isMember = this is: object.TypeInfo_Array
* * * DtoFunctionType(inout pure nothrow @nogc @property inout(TypeInfo)())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: %object.TypeInfo* (%object.TypeInfo_Array*)
* * * DtoResolveFunction(object.TypeInfo_Array.next): object.d(898)
* * * * DtoDeclareFunction(object.TypeInfo_Array.next): object.d(898)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Array
* * * * * DtoFunctionType(inout pure nothrow @nogc @property inout(TypeInfo)())
* * * * * func =
declare %object.TypeInfo* @_D6object14TypeInfo_Array4nextMNgFNaNbNdNiZNgC8TypeInfo(%object.TypeInfo_Array*)
* * * Doing function body for: next
* * * DtoCreateNestedContext for object.TypeInfo_Array.next
* * * * DtoCreateNestedContextType for object.TypeInfo_Array.next
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(899)
* * * * * DotVarExp::toElem: this.value @ inout(TypeInfo)
* * * * * * ThisExp::toElem: this @ inout(TypeInfo_Array)
* * * * * * * normal this exp
* * * * * * Indexing aggregate field object.TypeInfo_Array.value:
* * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Array, %object.TypeInfo_Array* %4, i32 0, i32 2
* * DtoDefineFunction(object.TypeInfo_Array.flags): object.d(902)
* * * isMember = this is: object.TypeInfo_Array
* * * DtoFunctionType(const pure nothrow @nogc @property @safe uint())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i32 (%object.TypeInfo_Array*)
* * * DtoResolveFunction(object.TypeInfo_Array.flags): object.d(902)
* * * * DtoDeclareFunction(object.TypeInfo_Array.flags): object.d(902)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Array
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe uint())
* * * * * func =
declare i32 @_D6object14TypeInfo_Array5flagsMxFNaNbNdNiNfZk(%object.TypeInfo_Array*)
* * * Doing function body for: flags
* * * DtoCreateNestedContext for object.TypeInfo_Array.flags
* * * * DtoCreateNestedContextType for object.TypeInfo_Array.flags
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(903)
* * * * * IntegerExp::toElem: 1u @ uint
* * * * * * IntegerExp::toConstElem: 1u @ uint
* * * * * * * value = i32 1
* * DtoDefineFunction(object.TypeInfo_Array.talign): object.d(906)
* * * isMember = this is: object.TypeInfo_Array
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (%object.TypeInfo_Array*)
* * * DtoResolveFunction(object.TypeInfo_Array.talign): object.d(906)
* * * * DtoDeclareFunction(object.TypeInfo_Array.talign): object.d(906)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Array
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * func =
declare i64 @_D6object14TypeInfo_Array6talignMxFNaNbNdNiNfZm(%object.TypeInfo_Array*)
* * * Doing function body for: talign
* * * DtoCreateNestedContext for object.TypeInfo_Array.talign
* * * * DtoCreateNestedContextType for object.TypeInfo_Array.talign
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(907)
* * * * * IntegerExp::toElem: 8LU @ ulong
* * * * * * IntegerExp::toConstElem: 8LU @ ulong
* * * * * * * value = i64 8
* * DtoDefineFunction(object.TypeInfo_Array.argTypes): object.d(910)
* * * isMember = this is: object.TypeInfo_Array
* * * DtoFunctionType(nothrow @safe int(out TypeInfo arg1, out TypeInfo arg2))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i32 (%object.TypeInfo_Array*, %object.TypeInfo**, %object.TypeInfo**)
* * * DtoResolveFunction(object.TypeInfo_Array.argTypes): object.d(910)
* * * * DtoDeclareFunction(object.TypeInfo_Array.argTypes): object.d(910)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Array
* * * * * DtoFunctionType(nothrow @safe int(out TypeInfo arg1, out TypeInfo arg2))
* * * * * func =
declare i32 @_D6object14TypeInfo_Array8argTypesMFNbNfJC8TypeInfoJQlZi(%object.TypeInfo_Array*, %object.TypeInfo**, %object.TypeInfo**)
* * * Doing function body for: argTypes
* * * DtoCreateNestedContext for object.TypeInfo_Array.argTypes
* * * * DtoCreateNestedContextType for object.TypeInfo_Array.argTypes
* * * CompoundStatement::toIR():
* * * * ExpStatement::toIR():
* * * * * AssignExp::toElem: arg1 = null | (object.TypeInfo)(object.TypeInfo = object.TypeInfo)
* * * * * * VarExp::toElem: arg1 @ object.TypeInfo
* * * * * * * DtoSymbolAddress ('arg1' of type 'object.TypeInfo')
* * * * * * * * function param
* * * * * * * * type: object.TypeInfo
* * * * * * NullExp::toElem(type=object.TypeInfo): null
* * * * * * * NullExp::toConstElem(type=object.TypeInfo): null
* * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * DtoAssign()
* * * * * * * l : %object.TypeInfo** %2
* * * * * * * r : %object.TypeInfo* null
* * * * ExpStatement::toIR():
* * * * * AssignExp::toElem: arg2 = null | (object.TypeInfo)(object.TypeInfo = object.TypeInfo)
* * * * * * VarExp::toElem: arg2 @ object.TypeInfo
* * * * * * * DtoSymbolAddress ('arg2' of type 'object.TypeInfo')
* * * * * * * * function param
* * * * * * * * type: object.TypeInfo
* * * * * * NullExp::toElem(type=object.TypeInfo): null
* * * * * * * NullExp::toConstElem(type=object.TypeInfo): null
* * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * DtoAssign()
* * * * * * * l : %object.TypeInfo** %1
* * * * * * * r : %object.TypeInfo* null
* * * * CompoundStatement::toIR(): object.d(910)
* * * * * ExpStatement::toIR(): object.d(911)
* * * * * * AssignExp::toElem: arg1 = typeid(ulong) | (object.TypeInfo)(object.TypeInfo = object.TypeInfo)
* * * * * * * VarExp::toElem: arg1 @ object.TypeInfo
* * * * * * * * DtoSymbolAddress ('arg1' of type 'object.TypeInfo')
* * * * * * * * * function param
* * * * * * * * * type: object.TypeInfo
* * * * * * * Type::getTypeInfo(): ulong
* * * * * * * DtoSymbolAddress ('typeid(ulong)' of type 'object.TypeInfo')
* * * * * * * * TypeInfoDeclaration
* * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * DtoAssign()
* * * * * * * * l : %object.TypeInfo** %2
* * * * * * * * r : @_D10TypeInfo_m6__initZ = external global %object.TypeInfo
* * * * * ExpStatement::toIR(): object.d(912)
* * * * * * AssignExp::toElem: arg2 = typeid(void*) | (object.TypeInfo)(object.TypeInfo = object.TypeInfo)
* * * * * * * VarExp::toElem: arg2 @ object.TypeInfo
* * * * * * * * DtoSymbolAddress ('arg2' of type 'object.TypeInfo')
* * * * * * * * * function param
* * * * * * * * * type: object.TypeInfo
* * * * * * * Type::getTypeInfo(): void*
* * * * * * * DtoSymbolAddress ('typeid(void*)' of type 'object.TypeInfo_Pointer')
* * * * * * * * TypeInfoDeclaration
* * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * DtoAssign()
* * * * * * * * l : %object.TypeInfo** %1
* * * * * * * * r : %object.TypeInfo* bitcast (%object.TypeInfo_Pointer* @_D11TypeInfo_Pv6__initZ to %object.TypeInfo*)
* * * * * ReturnStatement::toIR(): object.d(913)
* * * * * * IntegerExp::toElem: 0 @ int
* * * * * * * IntegerExp::toConstElem: 0 @ int
* * * * * * * * value = i32 0
* * Building default initializer for object.TypeInfo_Array
* * * Creating initializer constant for TypeInfo_Array
* * * * Field priority for value: 1
* * * * DtoConstExpInit(targetType = object.TypeInfo, exp = null)
* * * * * NullExp::toConstElem(type=object.TypeInfo): null
* * * * final initializer: %object.TypeInfo_Array { [19 x i8*]* @_D14TypeInfo_Array6__vtblZ, i8* null, %object.TypeInfo* null }
* * Building vtbl initializer
* * DtoDefineClassInfo(TypeInfo_Array)
* * * Building ClassInfo.interfaces
* ClassDeclaration::codegen: 'object.TypeInfo_StaticArray'
* * DtoResolveClass(object.TypeInfo_StaticArray): object.d(917)
* * * Building type: object.TypeInfo_StaticArray
* * * * Building class type object.TypeInfo_StaticArray @ object.d(917)
* * * * * Instance size: 32
* * * * * Field priority for value: 1
* * * * * Field priority for len: 1
* * * * * class type: %object.TypeInfo_StaticArray = type { [19 x i8*]*, i8*, %object.TypeInfo*, i64 }
* * DtoDefineFunction(object.TypeInfo_StaticArray.toString): object.d(918)
* * * isMember = this is: object.TypeInfo_StaticArray
* * * DtoFunctionType(const pure nothrow @safe string())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.TypeInfo_StaticArray*)
* * * DtoResolveFunction(object.TypeInfo_StaticArray.toString): object.d(918)
* * * * DtoDeclareFunction(object.TypeInfo_StaticArray.toString): object.d(918)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_StaticArray
* * * * * DtoFunctionType(const pure nothrow @safe string())
* * * * * func =
declare { i64, i8* } @_D6object20TypeInfo_StaticArray8toStringMxFNaNbNfZAya(%object.TypeInfo_StaticArray*)
* * * Doing function body for: toString
* * * DtoCreateNestedContext for object.TypeInfo_StaticArray.toString
* * * * DtoCreateNestedContextType for object.TypeInfo_StaticArray.toString
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(919)
* * * * * StringExp::toElem: "UNK[UNK]" @ string
* * * * * * type: [9 x i8]
* * * * * * init: [9 x i8] c"UNK[UNK]\00"
* * DtoDefineFunction(object.TypeInfo_StaticArray.opEquals): object.d(922)
* * * isMember = this is: object.TypeInfo_StaticArray
* * * DtoFunctionType(bool(Object o))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i1 (%object.TypeInfo_StaticArray*, %object.Object*)
* * * DtoResolveFunction(object.TypeInfo_StaticArray.opEquals): object.d(922)
* * * * DtoDeclareFunction(object.TypeInfo_StaticArray.opEquals): object.d(922)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_StaticArray
* * * * * DtoFunctionType(bool(Object o))
* * * * * func =
declare i1 @_D6object20TypeInfo_StaticArray8opEqualsMFC6ObjectZb(%object.TypeInfo_StaticArray*, %object.Object*)
* * * Doing function body for: opEquals
* * * DtoCreateNestedContext for object.TypeInfo_StaticArray.opEquals
* * * * DtoCreateNestedContextType for object.TypeInfo_StaticArray.opEquals
* * * CompoundStatement::toIR():
* * * * CompoundStatement::toIR(): object.d(922)
* * * * * IfStatement::toIR(): object.d(923)
* * * * * * IdentityExp::toElem: this is o @ bool
* * * * * * * ThisExp::toElem: this @ object.Object
* * * * * * * * normal this exp
* * * * * * * VarExp::toElem: o @ object.Object
* * * * * * * * DtoSymbolAddress ('o' of type 'object.Object')
* * * * * * * * * function param
* * * * * * * * * type: object.Object
* * * * * * ReturnStatement::toIR(): object.d(924)
* * * * * * * IntegerExp::toElem: true @ bool
* * * * * * * * IntegerExp::toConstElem: true @ bool
* * * * * * * * * value = i1 true
* * * * * ExpStatement::toIR(): object.d(925)
* * * * * * DeclarationExp::toElem: (const const(TypeInfo_StaticArray) c = cast(const(TypeInfo_StaticArray))o;) | T=void
* * * * * * * DtoDeclarationExp: c
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = const(TypeInfo_StaticArray))
* * * * * * * * * llvm value for decl: %5 = alloca %object.TypeInfo_StaticArray*, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: c = cast(const(TypeInfo_StaticArray))o | (const(TypeInfo_StaticArray))(const(TypeInfo_StaticArray) = const(TypeInfo_StaticArray))
* * * * * * * * * * VarExp::toElem: c @ const(TypeInfo_StaticArray)
* * * * * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_StaticArray)')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * CastExp::toElem: cast(const(TypeInfo_StaticArray))o @ const(TypeInfo_StaticArray)
* * * * * * * * * * * VarExp::toElem: o @ object.Object
* * * * * * * * * * * * DtoSymbolAddress ('o' of type 'object.Object')
* * * * * * * * * * * * * function param
* * * * * * * * * * * * * type: object.Object
* * * * * * * * * * * Casting from 'object.Object' to 'const(TypeInfo_StaticArray)'
* * * * * * * * * * * * DtoCastClass(object.Object, const(TypeInfo_StaticArray))
* * * * * * * * * * * * * dynamic up cast
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * l : %5 = alloca %object.TypeInfo_StaticArray*, align 8
* * * * * * * * * * * r : %16 = bitcast i8* %15 to %object.TypeInfo_StaticArray*
* * * * * ReturnStatement::toIR(): object.d(926)
* * * * * * LogicalExp::toElem: c && this.len == c.len && opEquals(this.value, c.value) @ bool
* * * * * * * LogicalExp::toElem: c && this.len == c.len @ bool
* * * * * * * * VarExp::toElem: c @ const(TypeInfo_StaticArray)
* * * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_StaticArray)')
* * * * * * * * * * a normal variable
* * * * * * * * Casting from 'const(TypeInfo_StaticArray)' to 'bool'
* * * * * * * * * DtoCastClass(const(TypeInfo_StaticArray), bool)
* * * * * * * * * * to bool
* * * * * * * * EqualExp::toElem: this.len == c.len @ bool
* * * * * * * * * DotVarExp::toElem: this.len @ ulong
* * * * * * * * * * ThisExp::toElem: this @ object.TypeInfo_StaticArray
* * * * * * * * * * * normal this exp
* * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.len:
* * * * * * * * * * * Value: %21 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %20, i32 0, i32 3
* * * * * * * * * DotVarExp::toElem: c.len @ ulong
* * * * * * * * * * VarExp::toElem: c @ const(TypeInfo_StaticArray)
* * * * * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_StaticArray)')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.len:
* * * * * * * * * * * Value: %23 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %22, i32 0, i32 3
* * * * * * * * * integral or pointer or interface
* * * * * * * * * lv: %24 = load i64, i64* %21
* * * * * * * * * rv: %25 = load i64, i64* %23
* * * * * * * CallExp::toElem: opEquals(this.value, c.value) @ bool
* * * * * * * * VarExp::toElem: opEquals @ @system bool(const(Object) lhs, const(Object) rhs)
* * * * * * * * * DtoSymbolAddress ('opEquals' of type '@system bool(const(Object) lhs, const(Object) rhs)')
* * * * * * * * * * FuncDeclaration
* * * * * * * * DtoCallFunction()
* * * * * * * * * Evaluating argument expressions
* * * * * * * * * * DtoArgument
* * * * * * * * * * * DotVarExp::toElem: this.value @ const(Object)
* * * * * * * * * * * * ThisExp::toElem: this @ object.TypeInfo_StaticArray
* * * * * * * * * * * * * normal this exp
* * * * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.value:
* * * * * * * * * * * * * Value: %31 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %30, i32 0, i32 2
* * * * * * * * * * DtoArgument
* * * * * * * * * * * DotVarExp::toElem: c.value @ const(Object)
* * * * * * * * * * * * VarExp::toElem: c @ const(TypeInfo_StaticArray)
* * * * * * * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_StaticArray)')
* * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.value:
* * * * * * * * * * * * * Value: %34 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %33, i32 0, i32 2
* * * * * * * * * doing normal arguments
* * * * * * * * * Arguments so far: (0)
* * * * * * * * * Function type: @system bool(const(Object) lhs, const(Object) rhs)
* * DtoDefineFunction(object.TypeInfo_StaticArray.getHash): object.d(929)
* * * isMember = this is: object.TypeInfo_StaticArray
* * * DtoFunctionType(const nothrow @trusted ulong(const(void*) p))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (%object.TypeInfo_StaticArray*, i8*)
* * * DtoResolveFunction(object.TypeInfo_StaticArray.getHash): object.d(929)
* * * * DtoDeclareFunction(object.TypeInfo_StaticArray.getHash): object.d(929)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_StaticArray
* * * * * DtoFunctionType(const nothrow @trusted ulong(const(void*) p))
* * * * * func =
declare i64 @_D6object20TypeInfo_StaticArray7getHashMxFNbNexPvZm(%object.TypeInfo_StaticArray*, i8*)
* * * Doing function body for: getHash
* * * DtoCreateNestedContext for object.TypeInfo_StaticArray.getHash
* * * * DtoCreateNestedContextType for object.TypeInfo_StaticArray.getHash
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(930)
* * * * * CallExp::toElem: getArrayHash(this.value, p, this.len) @ ulong
* * * * * * VarExp::toElem: getArrayHash @ nothrow @trusted ulong(const(TypeInfo) element, const(void*) ptr, const(ulong) count)
* * * * * * * DtoSymbolAddress ('getArrayHash' of type 'nothrow @trusted ulong(const(TypeInfo) element, const(void*) ptr, const(ulong) count)')
* * * * * * * * FuncDeclaration
* * * * * * DtoCallFunction()
* * * * * * * Evaluating argument expressions
* * * * * * * * DtoArgument
* * * * * * * * * DotVarExp::toElem: this.value @ const(TypeInfo)
* * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray)
* * * * * * * * * * * normal this exp
* * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.value:
* * * * * * * * * * * Value: %7 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %6, i32 0, i32 2
* * * * * * * * DtoArgument
* * * * * * * * * VarExp::toElem: p @ const(void*)
* * * * * * * * * * DtoSymbolAddress ('p' of type 'const(void*)')
* * * * * * * * * * * function param
* * * * * * * * * * * type: const(void*)
* * * * * * * * DtoArgument
* * * * * * * * * DotVarExp::toElem: this.len @ const(ulong)
* * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray)
* * * * * * * * * * * normal this exp
* * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.len:
* * * * * * * * * * * Value: %9 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %8, i32 0, i32 3
* * * * * * * doing normal arguments
* * * * * * * Arguments so far: (0)
* * * * * * * Function type: nothrow @trusted ulong(const(TypeInfo) element, const(void*) ptr, const(ulong) count)
* * DtoDefineFunction(object.TypeInfo_StaticArray.equals): object.d(933)
* * * isMember = this is: object.TypeInfo_StaticArray
* * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i1 (%object.TypeInfo_StaticArray*, i8*, i8*)
* * * DtoResolveFunction(object.TypeInfo_StaticArray.equals): object.d(933)
* * * * DtoDeclareFunction(object.TypeInfo_StaticArray.equals): object.d(933)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_StaticArray
* * * * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2))
* * * * * func =
declare i1 @_D6object20TypeInfo_StaticArray6equalsMxFxPvxQdZb(%object.TypeInfo_StaticArray*, i8*, i8*)
* * * Doing function body for: equals
* * * DtoCreateNestedContext for object.TypeInfo_StaticArray.equals
* * * * DtoCreateNestedContextType for object.TypeInfo_StaticArray.equals
* * * CompoundStatement::toIR():
* * * * CompoundStatement::toIR(): object.d(933)
* * * * * ExpStatement::toIR(): object.d(934)
* * * * * * DeclarationExp::toElem: (ulong sz = this.value.tsize();) | T=void
* * * * * * * DtoDeclarationExp: sz
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = ulong)
* * * * * * * * * llvm value for decl: %7 = alloca i64, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: sz = this.value.tsize() | (ulong)(ulong = ulong)
* * * * * * * * * * VarExp::toElem: sz @ ulong
* * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * CallExp::toElem: this.value.tsize() @ ulong
* * * * * * * * * * * DotVarExp::toElem: this.value.tsize @ const pure nothrow @nogc @property @safe ulong()
* * * * * * * * * * * * DotVarExp::toElem: this.value @ const(TypeInfo)
* * * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray)
* * * * * * * * * * * * * * normal this exp
* * * * * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.value:
* * * * * * * * * * * * * * Value: %10 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %9, i32 0, i32 2
* * * * * * * * * * * * vthis: %11 = load %object.TypeInfo*, %object.TypeInfo** %10
* * * * * * * * * * * * funcval: %15 = load i8*, i8** %14, align 8
* * * * * * * * * * * * isMember = this is: object.TypeInfo
* * * * * * * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * * * * * * * * funcval casted: %16 = bitcast i8* %15 to i64 (%object.TypeInfo*)*
* * * * * * * * * * * DtoCallFunction()
* * * * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * * doing normal arguments
* * * * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * * * %17 = load %object.TypeInfo*, %object.TypeInfo** %10
* * * * * * * * * * * * Function type: const pure nothrow @nogc @property @safe ulong()
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %7 = alloca i64, align 8
* * * * * * * * * * * rhs: %18 = call i64 %16(%object.TypeInfo* nonnull %17)
* * * * * ScopeStatement::toIR(): object.d(936)
* * * * * * CompoundStatement::toIR(): object.d(936)
* * * * * * * ExpStatement::toIR(): object.d(936)
* * * * * * * * DeclarationExp::toElem: (ulong u = 0LU;) | T=void
* * * * * * * * * DtoDeclarationExp: u
* * * * * * * * * * VarDeclaration
* * * * * * * * * * DtoVarDeclaration(vdtype = ulong)
* * * * * * * * * * * llvm value for decl: %8 = alloca i64, align 8
* * * * * * * * * * * expression initializer
* * * * * * * * * * * AssignExp::toElem: u = 0LU | (ulong)(ulong = ulong)
* * * * * * * * * * * * VarExp::toElem: u @ ulong
* * * * * * * * * * * * * DtoSymbolAddress ('u' of type 'ulong')
* * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * IntegerExp::toElem: 0LU @ ulong
* * * * * * * * * * * * * IntegerExp::toConstElem: 0LU @ ulong
* * * * * * * * * * * * * * value = i64 0
* * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * * * DtoAssign()
* * * * * * * * * * * * * lhs: %8 = alloca i64, align 8
* * * * * * * * * * * * * rhs: i64 0
* * * * * * * ForStatement::toIR(): object.d(936)
* * * * * * * * CmpExp::toElem: u < this.len @ bool
* * * * * * * * * VarExp::toElem: u @ ulong
* * * * * * * * * * DtoSymbolAddress ('u' of type 'ulong')
* * * * * * * * * * * a normal variable
* * * * * * * * * DotVarExp::toElem: this.len @ ulong
* * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray)
* * * * * * * * * * * normal this exp
* * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.len:
* * * * * * * * * * * Value: %22 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %21, i32 0, i32 3
* * * * * * * * * type 1: %23 = load i64, i64* %8
* * * * * * * * * type 2: %24 = load i64, i64* %22
* * * * * * * * ScopeStatement::toIR(): object.d(936)
* * * * * * * * * IfStatement::toIR(): object.d(937)
* * * * * * * * * * NotExp::toElem: !this.value.equals(p1 + cast(long)(u * sz) * 1L, p2 + cast(long)(u * sz) * 1L) @ bool
* * * * * * * * * * * CallExp::toElem: this.value.equals(p1 + cast(long)(u * sz) * 1L, p2 + cast(long)(u * sz) * 1L) @ bool
* * * * * * * * * * * * DotVarExp::toElem: this.value.equals @ const bool(const(void*) p1, const(void*) p2)
* * * * * * * * * * * * * DotVarExp::toElem: this.value @ const(TypeInfo)
* * * * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray)
* * * * * * * * * * * * * * * normal this exp
* * * * * * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.value:
* * * * * * * * * * * * * * * Value: %28 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %27, i32 0, i32 2
* * * * * * * * * * * * * vthis: %29 = load %object.TypeInfo*, %object.TypeInfo** %28
* * * * * * * * * * * * * funcval: %33 = load i8*, i8** %32, align 8
* * * * * * * * * * * * * isMember = this is: object.TypeInfo
* * * * * * * * * * * * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2))
* * * * * * * * * * * * * funcval casted: %34 = bitcast i8* %33 to i1 (%object.TypeInfo*, i8*, i8*)*
* * * * * * * * * * * * DtoCallFunction()
* * * * * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * * * AddExp::toElem: p1 + cast(long)(u * sz) * 1L @ const(void*)
* * * * * * * * * * * * * * * * VarExp::toElem: p1 @ const(void*)
* * * * * * * * * * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)')
* * * * * * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * * * * * type: const(void*)
* * * * * * * * * * * * * * * * Adding integer to pointer
* * * * * * * * * * * * * * * * CastExp::toElem: cast(long)(u * sz) @ long
* * * * * * * * * * * * * * * * * MulExp::toElem: u * sz @ ulong
* * * * * * * * * * * * * * * * * * VarExp::toElem: u @ ulong
* * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('u' of type 'ulong')
* * * * * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * * * * * VarExp::toElem: sz @ ulong
* * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong')
* * * * * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * * * * Casting from 'ulong' to 'long'
* * * * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * * * AddExp::toElem: p2 + cast(long)(u * sz) * 1L @ const(void*)
* * * * * * * * * * * * * * * * VarExp::toElem: p2 @ const(void*)
* * * * * * * * * * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)')
* * * * * * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * * * * * type: const(void*)
* * * * * * * * * * * * * * * * Adding integer to pointer
* * * * * * * * * * * * * * * * CastExp::toElem: cast(long)(u * sz) @ long
* * * * * * * * * * * * * * * * * MulExp::toElem: u * sz @ ulong
* * * * * * * * * * * * * * * * * * VarExp::toElem: u @ ulong
* * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('u' of type 'ulong')
* * * * * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * * * * * VarExp::toElem: sz @ ulong
* * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong')
* * * * * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * * * * Casting from 'ulong' to 'long'
* * * * * * * * * * * * * doing normal arguments
* * * * * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * * * * %35 = load %object.TypeInfo*, %object.TypeInfo** %28
* * * * * * * * * * * * * Function type: const bool(const(void*) p1, const(void*) p2)
* * * * * * * * * * ReturnStatement::toIR(): object.d(938)
* * * * * * * * * * * IntegerExp::toElem: false @ bool
* * * * * * * * * * * * IntegerExp::toConstElem: false @ bool
* * * * * * * * * * * * * value = i1 false
* * * * * * * * PostExp::toElem: u++ @ ulong
* * * * * * * * * VarExp::toElem: u @ ulong
* * * * * * * * * * DtoSymbolAddress ('u' of type 'ulong')
* * * * * * * * * * * a normal variable
* * * * * * * * * IntegerExp::toElem: 1LU @ ulong
* * * * * * * * * * IntegerExp::toConstElem: 1LU @ ulong
* * * * * * * * * * * value = i64 1
* * * * * ReturnStatement::toIR(): object.d(940)
* * * * * * IntegerExp::toElem: true @ bool
* * * * * * * IntegerExp::toConstElem: true @ bool
* * * * * * * * value = i1 true
* * DtoDefineFunction(object.TypeInfo_StaticArray.compare): object.d(943)
* * * isMember = this is: object.TypeInfo_StaticArray
* * * DtoFunctionType(const int(const(void*) p1, const(void*) p2))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i32 (%object.TypeInfo_StaticArray*, i8*, i8*)
* * * DtoResolveFunction(object.TypeInfo_StaticArray.compare): object.d(943)
* * * * DtoDeclareFunction(object.TypeInfo_StaticArray.compare): object.d(943)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_StaticArray
* * * * * DtoFunctionType(const int(const(void*) p1, const(void*) p2))
* * * * * func =
declare i32 @_D6object20TypeInfo_StaticArray7compareMxFxPvxQdZi(%object.TypeInfo_StaticArray*, i8*, i8*)
* * * Doing function body for: compare
* * * DtoCreateNestedContext for object.TypeInfo_StaticArray.compare
* * * * DtoCreateNestedContextType for object.TypeInfo_StaticArray.compare
* * * CompoundStatement::toIR():
* * * * CompoundStatement::toIR(): object.d(943)
* * * * * ExpStatement::toIR(): object.d(944)
* * * * * * DeclarationExp::toElem: (ulong sz = this.value.tsize();) | T=void
* * * * * * * DtoDeclarationExp: sz
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = ulong)
* * * * * * * * * llvm value for decl: %7 = alloca i64, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: sz = this.value.tsize() | (ulong)(ulong = ulong)
* * * * * * * * * * VarExp::toElem: sz @ ulong
* * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * CallExp::toElem: this.value.tsize() @ ulong
* * * * * * * * * * * DotVarExp::toElem: this.value.tsize @ const pure nothrow @nogc @property @safe ulong()
* * * * * * * * * * * * DotVarExp::toElem: this.value @ const(TypeInfo)
* * * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray)
* * * * * * * * * * * * * * normal this exp
* * * * * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.value:
* * * * * * * * * * * * * * Value: %10 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %9, i32 0, i32 2
* * * * * * * * * * * * vthis: %11 = load %object.TypeInfo*, %object.TypeInfo** %10
* * * * * * * * * * * * funcval: %15 = load i8*, i8** %14, align 8
* * * * * * * * * * * * isMember = this is: object.TypeInfo
* * * * * * * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * * * * * * * * funcval casted: %16 = bitcast i8* %15 to i64 (%object.TypeInfo*)*
* * * * * * * * * * * DtoCallFunction()
* * * * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * * doing normal arguments
* * * * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * * * %17 = load %object.TypeInfo*, %object.TypeInfo** %10
* * * * * * * * * * * * Function type: const pure nothrow @nogc @property @safe ulong()
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %7 = alloca i64, align 8
* * * * * * * * * * * rhs: %18 = call i64 %16(%object.TypeInfo* nonnull %17)
* * * * * ScopeStatement::toIR(): object.d(946)
* * * * * * CompoundStatement::toIR(): object.d(946)
* * * * * * * ExpStatement::toIR(): object.d(946)
* * * * * * * * DeclarationExp::toElem: (ulong u = 0LU;) | T=void
* * * * * * * * * DtoDeclarationExp: u
* * * * * * * * * * VarDeclaration
* * * * * * * * * * DtoVarDeclaration(vdtype = ulong)
* * * * * * * * * * * llvm value for decl: %8 = alloca i64, align 8
* * * * * * * * * * * expression initializer
* * * * * * * * * * * AssignExp::toElem: u = 0LU | (ulong)(ulong = ulong)
* * * * * * * * * * * * VarExp::toElem: u @ ulong
* * * * * * * * * * * * * DtoSymbolAddress ('u' of type 'ulong')
* * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * IntegerExp::toElem: 0LU @ ulong
* * * * * * * * * * * * * IntegerExp::toConstElem: 0LU @ ulong
* * * * * * * * * * * * * * value = i64 0
* * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * * * DtoAssign()
* * * * * * * * * * * * * lhs: %8 = alloca i64, align 8
* * * * * * * * * * * * * rhs: i64 0
* * * * * * * ForStatement::toIR(): object.d(946)
* * * * * * * * CmpExp::toElem: u < this.len @ bool
* * * * * * * * * VarExp::toElem: u @ ulong
* * * * * * * * * * DtoSymbolAddress ('u' of type 'ulong')
* * * * * * * * * * * a normal variable
* * * * * * * * * DotVarExp::toElem: this.len @ ulong
* * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray)
* * * * * * * * * * * normal this exp
* * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.len:
* * * * * * * * * * * Value: %22 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %21, i32 0, i32 3
* * * * * * * * * type 1: %23 = load i64, i64* %8
* * * * * * * * * type 2: %24 = load i64, i64* %22
* * * * * * * * ScopeStatement::toIR(): object.d(946)
* * * * * * * * * CompoundStatement::toIR(): object.d(946)
* * * * * * * * * * ExpStatement::toIR(): object.d(947)
* * * * * * * * * * * DeclarationExp::toElem: (int result = this.value.compare(p1 + cast(long)(u * sz) * 1L, p2 + cast(long)(u * sz) * 1L);) | T=void
* * * * * * * * * * * * DtoDeclarationExp: result
* * * * * * * * * * * * * VarDeclaration
* * * * * * * * * * * * * DtoVarDeclaration(vdtype = int)
* * * * * * * * * * * * * * llvm value for decl: %9 = alloca i32, align 4
* * * * * * * * * * * * * * expression initializer
* * * * * * * * * * * * * * AssignExp::toElem: result = this.value.compare(p1 + cast(long)(u * sz) * 1L, p2 + cast(long)(u * sz) * 1L) | (int)(int = int)
* * * * * * * * * * * * * * * VarExp::toElem: result @ int
* * * * * * * * * * * * * * * * DtoSymbolAddress ('result' of type 'int')
* * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * * CallExp::toElem: this.value.compare(p1 + cast(long)(u * sz) * 1L, p2 + cast(long)(u * sz) * 1L) @ int
* * * * * * * * * * * * * * * * DotVarExp::toElem: this.value.compare @ const int(const(void*) p1, const(void*) p2)
* * * * * * * * * * * * * * * * * DotVarExp::toElem: this.value @ const(TypeInfo)
* * * * * * * * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray)
* * * * * * * * * * * * * * * * * * * normal this exp
* * * * * * * * * * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.value:
* * * * * * * * * * * * * * * * * * * Value: %29 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %28, i32 0, i32 2
* * * * * * * * * * * * * * * * * vthis: %30 = load %object.TypeInfo*, %object.TypeInfo** %29
* * * * * * * * * * * * * * * * * funcval: %34 = load i8*, i8** %33, align 8
* * * * * * * * * * * * * * * * * isMember = this is: object.TypeInfo
* * * * * * * * * * * * * * * * * DtoFunctionType(const int(const(void*) p1, const(void*) p2))
* * * * * * * * * * * * * * * * * funcval casted: %35 = bitcast i8* %34 to i32 (%object.TypeInfo*, i8*, i8*)*
* * * * * * * * * * * * * * * * DtoCallFunction()
* * * * * * * * * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * * * * * * * AddExp::toElem: p1 + cast(long)(u * sz) * 1L @ const(void*)
* * * * * * * * * * * * * * * * * * * * VarExp::toElem: p1 @ const(void*)
* * * * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)')
* * * * * * * * * * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * * * * * * * * * type: const(void*)
* * * * * * * * * * * * * * * * * * * * Adding integer to pointer
* * * * * * * * * * * * * * * * * * * * CastExp::toElem: cast(long)(u * sz) @ long
* * * * * * * * * * * * * * * * * * * * * MulExp::toElem: u * sz @ ulong
* * * * * * * * * * * * * * * * * * * * * * VarExp::toElem: u @ ulong
* * * * * * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('u' of type 'ulong')
* * * * * * * * * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * * * * * * * * * VarExp::toElem: sz @ ulong
* * * * * * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong')
* * * * * * * * * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * * * * * * * * Casting from 'ulong' to 'long'
* * * * * * * * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * * * * * * * AddExp::toElem: p2 + cast(long)(u * sz) * 1L @ const(void*)
* * * * * * * * * * * * * * * * * * * * VarExp::toElem: p2 @ const(void*)
* * * * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)')
* * * * * * * * * * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * * * * * * * * * type: const(void*)
* * * * * * * * * * * * * * * * * * * * Adding integer to pointer
* * * * * * * * * * * * * * * * * * * * CastExp::toElem: cast(long)(u * sz) @ long
* * * * * * * * * * * * * * * * * * * * * MulExp::toElem: u * sz @ ulong
* * * * * * * * * * * * * * * * * * * * * * VarExp::toElem: u @ ulong
* * * * * * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('u' of type 'ulong')
* * * * * * * * * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * * * * * * * * * VarExp::toElem: sz @ ulong
* * * * * * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong')
* * * * * * * * * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * * * * * * * * Casting from 'ulong' to 'long'
* * * * * * * * * * * * * * * * * doing normal arguments
* * * * * * * * * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * * * * * * * * %36 = load %object.TypeInfo*, %object.TypeInfo** %29
* * * * * * * * * * * * * * * * * Function type: const int(const(void*) p1, const(void*) p2)
* * * * * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * * * * * * DtoAssign()
* * * * * * * * * * * * * * * * lhs: %9 = alloca i32, align 4
* * * * * * * * * * * * * * * * rhs: %47 = call i32 %35(%object.TypeInfo* nonnull %36, i8* %46, i8* %41)
* * * * * * * * * * IfStatement::toIR(): object.d(948)
* * * * * * * * * * * VarExp::toElem: result @ int
* * * * * * * * * * * * DtoSymbolAddress ('result' of type 'int')
* * * * * * * * * * * * * a normal variable
* * * * * * * * * * * if conditional: %48 = load i32, i32* %9
* * * * * * * * * * * Casting from 'int' to 'bool'
* * * * * * * * * * * ReturnStatement::toIR(): object.d(949)
* * * * * * * * * * * * VarExp::toElem: result @ int
* * * * * * * * * * * * * DtoSymbolAddress ('result' of type 'int')
* * * * * * * * * * * * * * a normal variable
* * * * * * * * PostExp::toElem: u++ @ ulong
* * * * * * * * * VarExp::toElem: u @ ulong
* * * * * * * * * * DtoSymbolAddress ('u' of type 'ulong')
* * * * * * * * * * * a normal variable
* * * * * * * * * IntegerExp::toElem: 1LU @ ulong
* * * * * * * * * * IntegerExp::toConstElem: 1LU @ ulong
* * * * * * * * * * * value = i64 1
* * * * * ReturnStatement::toIR(): object.d(951)
* * * * * * IntegerExp::toElem: 0 @ int
* * * * * * * IntegerExp::toConstElem: 0 @ int
* * * * * * * * value = i32 0
* * DtoDefineFunction(object.TypeInfo_StaticArray.tsize): object.d(954)
* * * isMember = this is: object.TypeInfo_StaticArray
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (%object.TypeInfo_StaticArray*)
* * * DtoResolveFunction(object.TypeInfo_StaticArray.tsize): object.d(954)
* * * * DtoDeclareFunction(object.TypeInfo_StaticArray.tsize): object.d(954)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_StaticArray
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * func =
declare i64 @_D6object20TypeInfo_StaticArray5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo_StaticArray*)
* * * Doing function body for: tsize
* * * DtoCreateNestedContext for object.TypeInfo_StaticArray.tsize
* * * * DtoCreateNestedContextType for object.TypeInfo_StaticArray.tsize
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(955)
* * * * * MulExp::toElem: this.len * this.value.tsize() @ ulong
* * * * * * DotVarExp::toElem: this.len @ ulong
* * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray)
* * * * * * * * normal this exp
* * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.len:
* * * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %4, i32 0, i32 3
* * * * * * CallExp::toElem: this.value.tsize() @ ulong
* * * * * * * DotVarExp::toElem: this.value.tsize @ const pure nothrow @nogc @property @safe ulong()
* * * * * * * * DotVarExp::toElem: this.value @ const(TypeInfo)
* * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray)
* * * * * * * * * * normal this exp
* * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.value:
* * * * * * * * * * Value: %8 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %7, i32 0, i32 2
* * * * * * * * vthis: %9 = load %object.TypeInfo*, %object.TypeInfo** %8
* * * * * * * * funcval: %13 = load i8*, i8** %12, align 8
* * * * * * * * isMember = this is: object.TypeInfo
* * * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * * * * funcval casted: %14 = bitcast i8* %13 to i64 (%object.TypeInfo*)*
* * * * * * * DtoCallFunction()
* * * * * * * * Evaluating argument expressions
* * * * * * * * doing normal arguments
* * * * * * * * Arguments so far: (1)
* * * * * * * * * %15 = load %object.TypeInfo*, %object.TypeInfo** %8
* * * * * * * * Function type: const pure nothrow @nogc @property @safe ulong()
* * DtoDefineFunction(object.TypeInfo_StaticArray.swap): object.d(958)
* * * isMember = this is: object.TypeInfo_StaticArray
* * * DtoFunctionType(const void(void* p1, void* p2))
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: void (%object.TypeInfo_StaticArray*, i8*, i8*)
* * * DtoResolveFunction(object.TypeInfo_StaticArray.swap): object.d(958)
* * * * DtoDeclareFunction(object.TypeInfo_StaticArray.swap): object.d(958)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_StaticArray
* * * * * DtoFunctionType(const void(void* p1, void* p2))
* * * * * func =
declare void @_D6object20TypeInfo_StaticArray4swapMxFPvQcZv(%object.TypeInfo_StaticArray*, i8*, i8*)
* * * Doing function body for: swap
* * * DtoCreateNestedContext for object.TypeInfo_StaticArray.swap
* * * * DtoCreateNestedContextType for object.TypeInfo_StaticArray.swap
* * * CompoundStatement::toIR():
* * * * CompoundStatement::toIR(): object.d(958)
* * * * * ExpStatement::toIR(): object.d(959)
* * * * * * DeclarationExp::toElem: (void* tmp = null;) | T=void
* * * * * * * DtoDeclarationExp: tmp
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = void*)
* * * * * * * * * llvm value for decl: %7 = alloca i8*, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: tmp = null | (void*)(void* = void*)
* * * * * * * * * * VarExp::toElem: tmp @ void*
* * * * * * * * * * * DtoSymbolAddress ('tmp' of type 'void*')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * NullExp::toElem(type=void*): null
* * * * * * * * * * * NullExp::toConstElem(type=void*): null
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %7 = alloca i8*, align 8
* * * * * * * * * * * rhs: i8* null
* * * * * ExpStatement::toIR(): object.d(960)
* * * * * * DeclarationExp::toElem: (ulong sz = this.value.tsize();) | T=void
* * * * * * * DtoDeclarationExp: sz
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = ulong)
* * * * * * * * * llvm value for decl: %8 = alloca i64, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: sz = this.value.tsize() | (ulong)(ulong = ulong)
* * * * * * * * * * VarExp::toElem: sz @ ulong
* * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * CallExp::toElem: this.value.tsize() @ ulong
* * * * * * * * * * * DotVarExp::toElem: this.value.tsize @ const pure nothrow @nogc @property @safe ulong()
* * * * * * * * * * * * DotVarExp::toElem: this.value @ const(TypeInfo)
* * * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray)
* * * * * * * * * * * * * * normal this exp
* * * * * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.value:
* * * * * * * * * * * * * * Value: %11 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %10, i32 0, i32 2
* * * * * * * * * * * * vthis: %12 = load %object.TypeInfo*, %object.TypeInfo** %11
* * * * * * * * * * * * funcval: %16 = load i8*, i8** %15, align 8
* * * * * * * * * * * * isMember = this is: object.TypeInfo
* * * * * * * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * * * * * * * * funcval casted: %17 = bitcast i8* %16 to i64 (%object.TypeInfo*)*
* * * * * * * * * * * DtoCallFunction()
* * * * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * * doing normal arguments
* * * * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * * * %18 = load %object.TypeInfo*, %object.TypeInfo** %11
* * * * * * * * * * * * Function type: const pure nothrow @nogc @property @safe ulong()
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %8 = alloca i64, align 8
* * * * * * * * * * * rhs: %19 = call i64 %17(%object.TypeInfo* nonnull %18)
* * * * * ExpStatement::toIR(): object.d(961)
* * * * * * DeclarationExp::toElem: (ubyte[16] buffer = cast(ubyte)0u;) | T=void
* * * * * * * DtoDeclarationExp: buffer
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = ubyte[16])
* * * * * * * * * Building type: ubyte[16]
* * * * * * * * * llvm value for decl: %9 = alloca [16 x i8], align 1
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: buffer[] = cast(ubyte)0u | (ubyte[])(ubyte[] = ubyte)
* * * * * * * * * * VarExp::toElem: buffer @ ubyte[16]
* * * * * * * * * * * DtoSymbolAddress ('buffer' of type 'ubyte[16]')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * IntegerExp::toElem: cast(ubyte)0u @ ubyte
* * * * * * * * * * * IntegerExp::toConstElem: cast(ubyte)0u @ ubyte
* * * * * * * * * * * * value = i8 0
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * DtoArrayAssign
* * * * * * * * * * * * DtoArrayPtr
* * * * * * * * * * * * DtoArrayLen
* * * * * * * * * * * * DtoArrayInit
* * * * * * * * * * DtoArrayLen
* * * * * * * * * * DtoArrayPtr
* * * * * ExpStatement::toIR(): object.d(963)
* * * * * * AssertExp::toElem: assert(sz < 16LU)
* * * * * * * CmpExp::toElem: sz < 16LU @ bool
* * * * * * * * VarExp::toElem: sz @ ulong
* * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong')
* * * * * * * * * * a normal variable
* * * * * * * * IntegerExp::toElem: 16LU @ ulong
* * * * * * * * * IntegerExp::toConstElem: 16LU @ ulong
* * * * * * * * * * value = i64 16
* * * * * * * * type 1: %24 = load i64, i64* %8
* * * * * * * * type 2: i64 16
* * * * * ExpStatement::toIR(): object.d(964)
* * * * * * AssignExp::toElem: tmp = & buffer | (void*)(void* = void*)
* * * * * * * VarExp::toElem: tmp @ void*
* * * * * * * * DtoSymbolAddress ('tmp' of type 'void*')
* * * * * * * * * a normal variable
* * * * * * * SymOffExp::toElem: & buffer @ void*
* * * * * * * * DtoSymbolAddress ('buffer' of type 'ubyte[16]')
* * * * * * * * * a normal variable
* * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * DtoAssign()
* * * * * * * * lhs: %7 = alloca i8*, align 8
* * * * * * * * rhs: %27 = bitcast [16 x i8]* %9 to i8*
* * * * * ScopeStatement::toIR(): object.d(966)
* * * * * * CompoundStatement::toIR(): object.d(966)
* * * * * * * ExpStatement::toIR(): object.d(966)
* * * * * * * * DeclarationExp::toElem: (ulong u = 0LU;) | T=void
* * * * * * * * * DtoDeclarationExp: u
* * * * * * * * * * VarDeclaration
* * * * * * * * * * DtoVarDeclaration(vdtype = ulong)
* * * * * * * * * * * llvm value for decl: %10 = alloca i64, align 8
* * * * * * * * * * * expression initializer
* * * * * * * * * * * AssignExp::toElem: u = 0LU | (ulong)(ulong = ulong)
* * * * * * * * * * * * VarExp::toElem: u @ ulong
* * * * * * * * * * * * * DtoSymbolAddress ('u' of type 'ulong')
* * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * IntegerExp::toElem: 0LU @ ulong
* * * * * * * * * * * * * IntegerExp::toConstElem: 0LU @ ulong
* * * * * * * * * * * * * * value = i64 0
* * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * * * DtoAssign()
* * * * * * * * * * * * * lhs: %10 = alloca i64, align 8
* * * * * * * * * * * * * rhs: i64 0
* * * * * * * ForStatement::toIR(): object.d(966)
* * * * * * * * CmpExp::toElem: u < this.len @ bool
* * * * * * * * * VarExp::toElem: u @ ulong
* * * * * * * * * * DtoSymbolAddress ('u' of type 'ulong')
* * * * * * * * * * * a normal variable
* * * * * * * * * DotVarExp::toElem: this.len @ ulong
* * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray)
* * * * * * * * * * * normal this exp
* * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.len:
* * * * * * * * * * * Value: %31 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %30, i32 0, i32 3
* * * * * * * * * type 1: %32 = load i64, i64* %10
* * * * * * * * * type 2: %33 = load i64, i64* %31
* * * * * * * * ScopeStatement::toIR(): object.d(966)
* * * * * * * * * CompoundStatement::toIR(): object.d(966)
* * * * * * * * * * ExpStatement::toIR(): object.d(967)
* * * * * * * * * * * DeclarationExp::toElem: (ulong o = u * sz;) | T=void
* * * * * * * * * * * * DtoDeclarationExp: o
* * * * * * * * * * * * * VarDeclaration
* * * * * * * * * * * * * DtoVarDeclaration(vdtype = ulong)
* * * * * * * * * * * * * * llvm value for decl: %11 = alloca i64, align 8
* * * * * * * * * * * * * * expression initializer
* * * * * * * * * * * * * * AssignExp::toElem: o = u * sz | (ulong)(ulong = ulong)
* * * * * * * * * * * * * * * VarExp::toElem: o @ ulong
* * * * * * * * * * * * * * * * DtoSymbolAddress ('o' of type 'ulong')
* * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * * MulExp::toElem: u * sz @ ulong
* * * * * * * * * * * * * * * * VarExp::toElem: u @ ulong
* * * * * * * * * * * * * * * * * DtoSymbolAddress ('u' of type 'ulong')
* * * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * * * VarExp::toElem: sz @ ulong
* * * * * * * * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong')
* * * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * * * * * * DtoAssign()
* * * * * * * * * * * * * * * * lhs: %11 = alloca i64, align 8
* * * * * * * * * * * * * * * * rhs: %39 = mul i64 %37, %38
* * * * * * * * * * ExpStatement::toIR(): object.d(968)
* * * * * * * * * * * CallExp::toElem: memcpy(tmp, p1 + cast(long)o * 1L, sz) @ ulong
* * * * * * * * * * * * VarExp::toElem: memcpy @ pure nothrow @nogc @trusted ulong(void* dest, const(void)* src, ulong size)
* * * * * * * * * * * * * DtoSymbolAddress ('memcpy' of type 'pure nothrow @nogc @trusted ulong(void* dest, const(void)* src, ulong size)')
* * * * * * * * * * * * * * FuncDeclaration
* * * * * * * * * * * * * * DtoFunctionType(pure nothrow @nogc @trusted ulong(void* dest, const(void)* src, ulong size))
* * * * * * * * * * * * * * * x86-64 ABI: Transforming return type
* * * * * * * * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * * * * * * * Final function type: i64 (i64, i8*, i8*)
* * * * * * * * * * * * * * DtoResolveFunction(utils.memcpy): utils.d(24)
* * * * * * * * * * * * * * * DtoDeclareFunction(utils.memcpy): utils.d(24)
* * * * * * * * * * * * * * * * Enter defineAsExternallyAvailable
* * * * * * * * * * * * * * * * * Cross-module inlining fully disabled.
* * * * * * * * * * * * * * * * DtoFunctionType(pure nothrow @nogc @trusted ulong(void* dest, const(void)* src, ulong size))
* * * * * * * * * * * * * * * * func =
declare i64 @_D5utils6memcpyFNaNbNiNePvPxvmZm(i64, i8*, i8*)
* * * * * * * * * * * * DtoCallFunction()
* * * * * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * * * VarExp::toElem: tmp @ void*
* * * * * * * * * * * * * * * * DtoSymbolAddress ('tmp' of type 'void*')
* * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * * * AddExp::toElem: p1 + cast(long)o * 1L @ const(void)*
* * * * * * * * * * * * * * * * VarExp::toElem: p1 @ void*
* * * * * * * * * * * * * * * * * DtoSymbolAddress ('p1' of type 'void*')
* * * * * * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * * * * * type: void*
* * * * * * * * * * * * * * * * Adding integer to pointer
* * * * * * * * * * * * * * * * CastExp::toElem: cast(long)o @ long
* * * * * * * * * * * * * * * * * VarExp::toElem: o @ ulong
* * * * * * * * * * * * * * * * * * DtoSymbolAddress ('o' of type 'ulong')
* * * * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * * * * Casting from 'ulong' to 'long'
* * * * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * * * VarExp::toElem: sz @ ulong
* * * * * * * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong')
* * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * Building type: pure nothrow @nogc @trusted ulong(void* dest, const(void)* src, ulong size)
* * * * * * * * * * * * * * DtoFunctionType(pure nothrow @nogc @trusted ulong(void* dest, const(void)* src, ulong size))
* * * * * * * * * * * * * * * x86-64 ABI: Transforming return type
* * * * * * * * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * * * * * * * Final function type: i64 (i64, i8*, i8*)
* * * * * * * * * * * * * doing normal arguments
* * * * * * * * * * * * * Arguments so far: (0)
* * * * * * * * * * * * * Function type: pure nothrow @nogc @trusted ulong(void* dest, const(void)* src, ulong size)
* * * * * * * * * * ExpStatement::toIR(): object.d(969)
* * * * * * * * * * * CallExp::toElem: memcpy(p1 + cast(long)o * 1L, p2 + cast(long)o * 1L, sz) @ ulong
* * * * * * * * * * * * VarExp::toElem: memcpy @ pure nothrow @nogc @trusted ulong(void* dest, const(void)* src, ulong size)
* * * * * * * * * * * * * DtoSymbolAddress ('memcpy' of type 'pure nothrow @nogc @trusted ulong(void* dest, const(void)* src, ulong size)')
* * * * * * * * * * * * * * FuncDeclaration
* * * * * * * * * * * * DtoCallFunction()
* * * * * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * * * AddExp::toElem: p1 + cast(long)o * 1L @ void*
* * * * * * * * * * * * * * * * VarExp::toElem: p1 @ void*
* * * * * * * * * * * * * * * * * DtoSymbolAddress ('p1' of type 'void*')
* * * * * * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * * * * * type: void*
* * * * * * * * * * * * * * * * Adding integer to pointer
* * * * * * * * * * * * * * * * CastExp::toElem: cast(long)o @ long
* * * * * * * * * * * * * * * * * VarExp::toElem: o @ ulong
* * * * * * * * * * * * * * * * * * DtoSymbolAddress ('o' of type 'ulong')
* * * * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * * * * Casting from 'ulong' to 'long'
* * * * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * * * AddExp::toElem: p2 + cast(long)o * 1L @ const(void)*
* * * * * * * * * * * * * * * * VarExp::toElem: p2 @ void*
* * * * * * * * * * * * * * * * * DtoSymbolAddress ('p2' of type 'void*')
* * * * * * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * * * * * type: void*
* * * * * * * * * * * * * * * * Adding integer to pointer
* * * * * * * * * * * * * * * * CastExp::toElem: cast(long)o @ long
* * * * * * * * * * * * * * * * * VarExp::toElem: o @ ulong
* * * * * * * * * * * * * * * * * * DtoSymbolAddress ('o' of type 'ulong')
* * * * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * * * * Casting from 'ulong' to 'long'
* * * * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * * * VarExp::toElem: sz @ ulong
* * * * * * * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong')
* * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * doing normal arguments
* * * * * * * * * * * * * Arguments so far: (0)
* * * * * * * * * * * * * Function type: pure nothrow @nogc @trusted ulong(void* dest, const(void)* src, ulong size)
* * * * * * * * * * ExpStatement::toIR(): object.d(970)
* * * * * * * * * * * CallExp::toElem: memcpy(p2 + cast(long)o * 1L, tmp, sz) @ ulong
* * * * * * * * * * * * VarExp::toElem: memcpy @ pure nothrow @nogc @trusted ulong(void* dest, const(void)* src, ulong size)
* * * * * * * * * * * * * DtoSymbolAddress ('memcpy' of type 'pure nothrow @nogc @trusted ulong(void* dest, const(void)* src, ulong size)')
* * * * * * * * * * * * * * FuncDeclaration
* * * * * * * * * * * * DtoCallFunction()
* * * * * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * * * AddExp::toElem: p2 + cast(long)o * 1L @ void*
* * * * * * * * * * * * * * * * VarExp::toElem: p2 @ void*
* * * * * * * * * * * * * * * * * DtoSymbolAddress ('p2' of type 'void*')
* * * * * * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * * * * * type: void*
* * * * * * * * * * * * * * * * Adding integer to pointer
* * * * * * * * * * * * * * * * CastExp::toElem: cast(long)o @ long
* * * * * * * * * * * * * * * * * VarExp::toElem: o @ ulong
* * * * * * * * * * * * * * * * * * DtoSymbolAddress ('o' of type 'ulong')
* * * * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * * * * Casting from 'ulong' to 'long'
* * * * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * * * VarExp::toElem: tmp @ const(void)*
* * * * * * * * * * * * * * * * DtoSymbolAddress ('tmp' of type 'void*')
* * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * * * VarExp::toElem: sz @ ulong
* * * * * * * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong')
* * * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * doing normal arguments
* * * * * * * * * * * * * Arguments so far: (0)
* * * * * * * * * * * * * Function type: pure nothrow @nogc @trusted ulong(void* dest, const(void)* src, ulong size)
* * * * * * * * AddAssignExp::toElem: u += sz @ ulong
* * * * * * * * * VarExp::toElem: u @ ulong
* * * * * * * * * * DtoSymbolAddress ('u' of type 'ulong')
* * * * * * * * * * * a normal variable
* * * * * * * * * VarExp::toElem: sz @ ulong
* * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong')
* * * * * * * * * * * a normal variable
* * * * * * * * * DtoAssign()
* * * * * * * * * * lhs: %10 = alloca i64, align 8
* * * * * * * * * * rhs: %63 = add i64 %62, %61
* * DtoDefineFunction(object.TypeInfo_StaticArray.initializer): object.d(974)
* * * isMember = this is: object.TypeInfo_StaticArray
* * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.TypeInfo_StaticArray*)
* * * DtoResolveFunction(object.TypeInfo_StaticArray.initializer): object.d(974)
* * * * DtoDeclareFunction(object.TypeInfo_StaticArray.initializer): object.d(974)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_StaticArray
* * * * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]())
* * * * * func =
declare { i64, i8* } @_D6object20TypeInfo_StaticArray11initializerMxFNaNbNiNfZAxv(%object.TypeInfo_StaticArray*)
* * * Doing function body for: initializer
* * * DtoCreateNestedContext for object.TypeInfo_StaticArray.initializer
* * * * DtoCreateNestedContextType for object.TypeInfo_StaticArray.initializer
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(975)
* * * * * CallExp::toElem: this.value.initializer() @ const(void)[]
* * * * * * DotVarExp::toElem: this.value.initializer @ const pure nothrow @nogc @safe const(void)[]()
* * * * * * * DotVarExp::toElem: this.value @ const(TypeInfo)
* * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray)
* * * * * * * * * normal this exp
* * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.value:
* * * * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %4, i32 0, i32 2
* * * * * * * vthis: %6 = load %object.TypeInfo*, %object.TypeInfo** %5
* * * * * * * funcval: %10 = load i8*, i8** %9, align 8
* * * * * * * isMember = this is: object.TypeInfo
* * * * * * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]())
* * * * * * * funcval casted: %11 = bitcast i8* %10 to { i64, i8* } (%object.TypeInfo*)*
* * * * * * DtoCallFunction()
* * * * * * * Evaluating argument expressions
* * * * * * * doing normal arguments
* * * * * * * Arguments so far: (1)
* * * * * * * * %12 = load %object.TypeInfo*, %object.TypeInfo** %5
* * * * * * * Function type: const pure nothrow @nogc @safe const(void)[]()
* * DtoDefineFunction(object.TypeInfo_StaticArray.next): object.d(978)
* * * isMember = this is: object.TypeInfo_StaticArray
* * * DtoFunctionType(inout pure nothrow @nogc @property inout(TypeInfo)())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: %object.TypeInfo* (%object.TypeInfo_StaticArray*)
* * * DtoResolveFunction(object.TypeInfo_StaticArray.next): object.d(978)
* * * * DtoDeclareFunction(object.TypeInfo_StaticArray.next): object.d(978)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_StaticArray
* * * * * DtoFunctionType(inout pure nothrow @nogc @property inout(TypeInfo)())
* * * * * func =
declare %object.TypeInfo* @_D6object20TypeInfo_StaticArray4nextMNgFNaNbNdNiZNgC8TypeInfo(%object.TypeInfo_StaticArray*)
* * * Doing function body for: next
* * * DtoCreateNestedContext for object.TypeInfo_StaticArray.next
* * * * DtoCreateNestedContextType for object.TypeInfo_StaticArray.next
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(979)
* * * * * DotVarExp::toElem: this.value @ inout(TypeInfo)
* * * * * * ThisExp::toElem: this @ inout(TypeInfo_StaticArray)
* * * * * * * normal this exp
* * * * * * Indexing aggregate field object.TypeInfo_StaticArray.value:
* * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %4, i32 0, i32 2
* * DtoDefineFunction(object.TypeInfo_StaticArray.flags): object.d(982)
* * * isMember = this is: object.TypeInfo_StaticArray
* * * DtoFunctionType(const pure nothrow @nogc @property @safe uint())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i32 (%object.TypeInfo_StaticArray*)
* * * DtoResolveFunction(object.TypeInfo_StaticArray.flags): object.d(982)
* * * * DtoDeclareFunction(object.TypeInfo_StaticArray.flags): object.d(982)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_StaticArray
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe uint())
* * * * * func =
declare i32 @_D6object20TypeInfo_StaticArray5flagsMxFNaNbNdNiNfZk(%object.TypeInfo_StaticArray*)
* * * Doing function body for: flags
* * * DtoCreateNestedContext for object.TypeInfo_StaticArray.flags
* * * * DtoCreateNestedContextType for object.TypeInfo_StaticArray.flags
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(983)
* * * * * CallExp::toElem: this.value.flags() @ uint
* * * * * * DotVarExp::toElem: this.value.flags @ const pure nothrow @nogc @property @safe uint()
* * * * * * * DotVarExp::toElem: this.value @ const(TypeInfo)
* * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray)
* * * * * * * * * normal this exp
* * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.value:
* * * * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %4, i32 0, i32 2
* * * * * * * vthis: %6 = load %object.TypeInfo*, %object.TypeInfo** %5
* * * * * * * funcval: %10 = load i8*, i8** %9, align 8
* * * * * * * isMember = this is: object.TypeInfo
* * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe uint())
* * * * * * * funcval casted: %11 = bitcast i8* %10 to i32 (%object.TypeInfo*)*
* * * * * * DtoCallFunction()
* * * * * * * Evaluating argument expressions
* * * * * * * doing normal arguments
* * * * * * * Arguments so far: (1)
* * * * * * * * %12 = load %object.TypeInfo*, %object.TypeInfo** %5
* * * * * * * Function type: const pure nothrow @nogc @property @safe uint()
* * DtoDefineFunction(object.TypeInfo_StaticArray.destroy): object.d(986)
* * * isMember = this is: object.TypeInfo_StaticArray
* * * DtoFunctionType(const void(void* p))
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: void (%object.TypeInfo_StaticArray*, i8*)
* * * DtoResolveFunction(object.TypeInfo_StaticArray.destroy): object.d(986)
* * * * DtoDeclareFunction(object.TypeInfo_StaticArray.destroy): object.d(986)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_StaticArray
* * * * * DtoFunctionType(const void(void* p))
* * * * * func =
declare void @_D6object20TypeInfo_StaticArray7destroyMxFPvZv(%object.TypeInfo_StaticArray*, i8*)
* * * Doing function body for: destroy
* * * DtoCreateNestedContext for object.TypeInfo_StaticArray.destroy
* * * * DtoCreateNestedContextType for object.TypeInfo_StaticArray.destroy
* * * CompoundStatement::toIR():
* * * * CompoundStatement::toIR(): object.d(986)
* * * * * ExpStatement::toIR(): object.d(987)
* * * * * * DeclarationExp::toElem: (ulong sz = this.value.tsize();) | T=void
* * * * * * * DtoDeclarationExp: sz
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = ulong)
* * * * * * * * * llvm value for decl: %5 = alloca i64, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: sz = this.value.tsize() | (ulong)(ulong = ulong)
* * * * * * * * * * VarExp::toElem: sz @ ulong
* * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * CallExp::toElem: this.value.tsize() @ ulong
* * * * * * * * * * * DotVarExp::toElem: this.value.tsize @ const pure nothrow @nogc @property @safe ulong()
* * * * * * * * * * * * DotVarExp::toElem: this.value @ const(TypeInfo)
* * * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray)
* * * * * * * * * * * * * * normal this exp
* * * * * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.value:
* * * * * * * * * * * * * * Value: %8 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %7, i32 0, i32 2
* * * * * * * * * * * * vthis: %9 = load %object.TypeInfo*, %object.TypeInfo** %8
* * * * * * * * * * * * funcval: %13 = load i8*, i8** %12, align 8
* * * * * * * * * * * * isMember = this is: object.TypeInfo
* * * * * * * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * * * * * * * * funcval casted: %14 = bitcast i8* %13 to i64 (%object.TypeInfo*)*
* * * * * * * * * * * DtoCallFunction()
* * * * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * * doing normal arguments
* * * * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * * * %15 = load %object.TypeInfo*, %object.TypeInfo** %8
* * * * * * * * * * * * Function type: const pure nothrow @nogc @property @safe ulong()
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %5 = alloca i64, align 8
* * * * * * * * * * * rhs: %16 = call i64 %14(%object.TypeInfo* nonnull %15)
* * * * * ExpStatement::toIR(): object.d(988)
* * * * * * AddAssignExp::toElem: p += cast(long)(sz * this.len) * 1L @ void*
* * * * * * * VarExp::toElem: p @ void*
* * * * * * * * DtoSymbolAddress ('p' of type 'void*')
* * * * * * * * * function param
* * * * * * * * * type: void*
* * * * * * * Adding integer to pointer
* * * * * * * CastExp::toElem: cast(long)(sz * this.len) @ long
* * * * * * * * MulExp::toElem: sz * this.len @ ulong
* * * * * * * * * VarExp::toElem: sz @ ulong
* * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong')
* * * * * * * * * * * a normal variable
* * * * * * * * * DotVarExp::toElem: this.len @ ulong
* * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray)
* * * * * * * * * * * normal this exp
* * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.len:
* * * * * * * * * * * Value: %19 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %18, i32 0, i32 3
* * * * * * * * Casting from 'ulong' to 'long'
* * * * * * * DtoAssign()
* * * * * * * * lhs: %4 = alloca i8*, align 8
* * * * * * * * rhs: %23 = getelementptr i8, i8* %22, i64 %21
* * * * * ScopeStatement::toIR(): object.d(989)
* * * * * * CompoundStatement::toIR(): object.d(989)
* * * * * * * ExpStatement::toIR(): object.d(989)
* * * * * * * * DeclarationExp::toElem: (ulong __key4 = 0LU;) | T=void
* * * * * * * * * DtoDeclarationExp: __key4
* * * * * * * * * * VarDeclaration
* * * * * * * * * * DtoVarDeclaration(vdtype = ulong)
* * * * * * * * * * * llvm value for decl: %6 = alloca i64, align 8
* * * * * * * * * * * expression initializer
* * * * * * * * * * * AssignExp::toElem: __key4 = 0LU | (ulong)(ulong = ulong)
* * * * * * * * * * * * VarExp::toElem: __key4 @ ulong
* * * * * * * * * * * * * DtoSymbolAddress ('__key4' of type 'ulong')
* * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * IntegerExp::toElem: 0LU @ ulong
* * * * * * * * * * * * * IntegerExp::toConstElem: 0LU @ ulong
* * * * * * * * * * * * * * value = i64 0
* * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * * * DtoAssign()
* * * * * * * * * * * * * lhs: %6 = alloca i64, align 8
* * * * * * * * * * * * * rhs: i64 0
* * * * * * * ExpStatement::toIR(): object.d(989)
* * * * * * * * DeclarationExp::toElem: (ulong __limit5 = this.len;) | T=void
* * * * * * * * * DtoDeclarationExp: __limit5
* * * * * * * * * * VarDeclaration
* * * * * * * * * * DtoVarDeclaration(vdtype = ulong)
* * * * * * * * * * * llvm value for decl: %7 = alloca i64, align 8
* * * * * * * * * * * expression initializer
* * * * * * * * * * * AssignExp::toElem: __limit5 = this.len | (ulong)(ulong = ulong)
* * * * * * * * * * * * VarExp::toElem: __limit5 @ ulong
* * * * * * * * * * * * * DtoSymbolAddress ('__limit5' of type 'ulong')
* * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * DotVarExp::toElem: this.len @ ulong
* * * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray)
* * * * * * * * * * * * * * normal this exp
* * * * * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.len:
* * * * * * * * * * * * * * Value: %27 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %26, i32 0, i32 3
* * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * * * * * * DtoAssign()
* * * * * * * * * * * * * lhs: %7 = alloca i64, align 8
* * * * * * * * * * * * * rhs: %28 = load i64, i64* %27
* * * * * * * ForStatement::toIR(): object.d(989)
* * * * * * * * CmpExp::toElem: __key4 < __limit5 @ bool
* * * * * * * * * VarExp::toElem: __key4 @ ulong
* * * * * * * * * * DtoSymbolAddress ('__key4' of type 'ulong')
* * * * * * * * * * * a normal variable
* * * * * * * * * VarExp::toElem: __limit5 @ ulong
* * * * * * * * * * DtoSymbolAddress ('__limit5' of type 'ulong')
* * * * * * * * * * * a normal variable
* * * * * * * * * type 1: %30 = load i64, i64* %6
* * * * * * * * * type 2: %31 = load i64, i64* %7
* * * * * * * * CompoundStatement::toIR(): object.d(989)
* * * * * * * * * ExpStatement::toIR(): object.d(989)
* * * * * * * * * * DeclarationExp::toElem: (ulong i = __key4;) | T=void
* * * * * * * * * * * DtoDeclarationExp: i
* * * * * * * * * * * * VarDeclaration
* * * * * * * * * * * * DtoVarDeclaration(vdtype = ulong)
* * * * * * * * * * * * * llvm value for decl: %8 = alloca i64, align 8
* * * * * * * * * * * * * expression initializer
* * * * * * * * * * * * * AssignExp::toElem: i = __key4 | (ulong)(ulong = ulong)
* * * * * * * * * * * * * * VarExp::toElem: i @ ulong
* * * * * * * * * * * * * * * DtoSymbolAddress ('i' of type 'ulong')
* * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * VarExp::toElem: __key4 @ ulong
* * * * * * * * * * * * * * * DtoSymbolAddress ('__key4' of type 'ulong')
* * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * * * * * * * * DtoAssign()
* * * * * * * * * * * * * * * lhs: %8 = alloca i64, align 8
* * * * * * * * * * * * * * * rhs: %35 = load i64, i64* %6
* * * * * * * * * ExpStatement::toIR(): object.d(990)
* * * * * * * * * * MinAssignExp::toElem: p -= cast(long)sz * 1L @ void*
* * * * * * * * * * * VarExp::toElem: p @ void*
* * * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*')
* * * * * * * * * * * * * function param
* * * * * * * * * * * * * type: void*
* * * * * * * * * * * Subtracting integer from pointer
* * * * * * * * * * * CastExp::toElem: cast(long)sz @ long
* * * * * * * * * * * * VarExp::toElem: sz @ ulong
* * * * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong')
* * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * Casting from 'ulong' to 'long'
* * * * * * * * * * * DtoAssign()
* * * * * * * * * * * * lhs: %4 = alloca i8*, align 8
* * * * * * * * * * * * rhs: %39 = getelementptr i8, i8* %37, i64 %38
* * * * * * * * * ExpStatement::toIR(): object.d(991)
* * * * * * * * * * CallExp::toElem: this.value.destroy(p) @ void
* * * * * * * * * * * DotVarExp::toElem: this.value.destroy @ const void(void* p)
* * * * * * * * * * * * DotVarExp::toElem: this.value @ const(TypeInfo)
* * * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray)
* * * * * * * * * * * * * * normal this exp
* * * * * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.value:
* * * * * * * * * * * * * * Value: %41 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %40, i32 0, i32 2
* * * * * * * * * * * * vthis: %42 = load %object.TypeInfo*, %object.TypeInfo** %41
* * * * * * * * * * * * funcval: %46 = load i8*, i8** %45, align 8
* * * * * * * * * * * * isMember = this is: object.TypeInfo
* * * * * * * * * * * * DtoFunctionType(const void(void* p))
* * * * * * * * * * * * funcval casted: %47 = bitcast i8* %46 to void (%object.TypeInfo*, i8*)*
* * * * * * * * * * * DtoCallFunction()
* * * * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * * VarExp::toElem: p @ void*
* * * * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*')
* * * * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * * * type: void*
* * * * * * * * * * * * Building type: const void(void* p)
* * * * * * * * * * * * * DtoFunctionType(const void(void* p))
* * * * * * * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * * * * * * Final function type: void (i8*)
* * * * * * * * * * * * doing normal arguments
* * * * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * * * %48 = load %object.TypeInfo*, %object.TypeInfo** %41
* * * * * * * * * * * * Function type: const void(void* p)
* * * * * * * * AddAssignExp::toElem: __key4 += 1LU @ ulong
* * * * * * * * * VarExp::toElem: __key4 @ ulong
* * * * * * * * * * DtoSymbolAddress ('__key4' of type 'ulong')
* * * * * * * * * * * a normal variable
* * * * * * * * * IntegerExp::toElem: 1LU @ ulong
* * * * * * * * * * IntegerExp::toConstElem: 1LU @ ulong
* * * * * * * * * * * value = i64 1
* * * * * * * * * DtoAssign()
* * * * * * * * * * lhs: %6 = alloca i64, align 8
* * * * * * * * * * rhs: %52 = add i64 %51, 1
* * DtoDefineFunction(object.TypeInfo_StaticArray.postblit): object.d(995)
* * * isMember = this is: object.TypeInfo_StaticArray
* * * DtoFunctionType(const void(void* p))
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: void (%object.TypeInfo_StaticArray*, i8*)
* * * DtoResolveFunction(object.TypeInfo_StaticArray.postblit): object.d(995)
* * * * DtoDeclareFunction(object.TypeInfo_StaticArray.postblit): object.d(995)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_StaticArray
* * * * * DtoFunctionType(const void(void* p))
* * * * * func =
declare void @_D6object20TypeInfo_StaticArray8postblitMxFPvZv(%object.TypeInfo_StaticArray*, i8*)
* * * Doing function body for: postblit
* * * DtoCreateNestedContext for object.TypeInfo_StaticArray.postblit
* * * * DtoCreateNestedContextType for object.TypeInfo_StaticArray.postblit
* * * CompoundStatement::toIR():
* * * * CompoundStatement::toIR(): object.d(995)
* * * * * ExpStatement::toIR(): object.d(996)
* * * * * * DeclarationExp::toElem: (ulong sz = this.value.tsize();) | T=void
* * * * * * * DtoDeclarationExp: sz
* * * * * * * * VarDeclaration
* * * * * * * * DtoVarDeclaration(vdtype = ulong)
* * * * * * * * * llvm value for decl: %5 = alloca i64, align 8
* * * * * * * * * expression initializer
* * * * * * * * * AssignExp::toElem: sz = this.value.tsize() | (ulong)(ulong = ulong)
* * * * * * * * * * VarExp::toElem: sz @ ulong
* * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong')
* * * * * * * * * * * * a normal variable
* * * * * * * * * * CallExp::toElem: this.value.tsize() @ ulong
* * * * * * * * * * * DotVarExp::toElem: this.value.tsize @ const pure nothrow @nogc @property @safe ulong()
* * * * * * * * * * * * DotVarExp::toElem: this.value @ const(TypeInfo)
* * * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray)
* * * * * * * * * * * * * * normal this exp
* * * * * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.value:
* * * * * * * * * * * * * * Value: %8 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %7, i32 0, i32 2
* * * * * * * * * * * * vthis: %9 = load %object.TypeInfo*, %object.TypeInfo** %8
* * * * * * * * * * * * funcval: %13 = load i8*, i8** %12, align 8
* * * * * * * * * * * * isMember = this is: object.TypeInfo
* * * * * * * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * * * * * * * * funcval casted: %14 = bitcast i8* %13 to i64 (%object.TypeInfo*)*
* * * * * * * * * * * DtoCallFunction()
* * * * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * * doing normal arguments
* * * * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * * * %15 = load %object.TypeInfo*, %object.TypeInfo** %8
* * * * * * * * * * * * Function type: const pure nothrow @nogc @property @safe ulong()
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * DtoAssign()
* * * * * * * * * * * lhs: %5 = alloca i64, align 8
* * * * * * * * * * * rhs: %16 = call i64 %14(%object.TypeInfo* nonnull %15)
* * * * * ScopeStatement::toIR(): object.d(997)
* * * * * * CompoundStatement::toIR(): object.d(997)
* * * * * * * ExpStatement::toIR(): object.d(997)
* * * * * * * * DeclarationExp::toElem: (ulong __key6 = 0LU;) | T=void
* * * * * * * * * DtoDeclarationExp: __key6
* * * * * * * * * * VarDeclaration
* * * * * * * * * * DtoVarDeclaration(vdtype = ulong)
* * * * * * * * * * * llvm value for decl: %6 = alloca i64, align 8
* * * * * * * * * * * expression initializer
* * * * * * * * * * * AssignExp::toElem: __key6 = 0LU | (ulong)(ulong = ulong)
* * * * * * * * * * * * VarExp::toElem: __key6 @ ulong
* * * * * * * * * * * * * DtoSymbolAddress ('__key6' of type 'ulong')
* * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * IntegerExp::toElem: 0LU @ ulong
* * * * * * * * * * * * * IntegerExp::toConstElem: 0LU @ ulong
* * * * * * * * * * * * * * value = i64 0
* * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * * * * * * DtoAssign()
* * * * * * * * * * * * * lhs: %6 = alloca i64, align 8
* * * * * * * * * * * * * rhs: i64 0
* * * * * * * ExpStatement::toIR(): object.d(997)
* * * * * * * * DeclarationExp::toElem: (ulong __limit7 = this.len;) | T=void
* * * * * * * * * DtoDeclarationExp: __limit7
* * * * * * * * * * VarDeclaration
* * * * * * * * * * DtoVarDeclaration(vdtype = ulong)
* * * * * * * * * * * llvm value for decl: %7 = alloca i64, align 8
* * * * * * * * * * * expression initializer
* * * * * * * * * * * AssignExp::toElem: __limit7 = this.len | (ulong)(ulong = ulong)
* * * * * * * * * * * * VarExp::toElem: __limit7 @ ulong
* * * * * * * * * * * * * DtoSymbolAddress ('__limit7' of type 'ulong')
* * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * DotVarExp::toElem: this.len @ ulong
* * * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray)
* * * * * * * * * * * * * * normal this exp
* * * * * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.len:
* * * * * * * * * * * * * * Value: %20 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %19, i32 0, i32 3
* * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * * * * * * DtoAssign()
* * * * * * * * * * * * * lhs: %7 = alloca i64, align 8
* * * * * * * * * * * * * rhs: %21 = load i64, i64* %20
* * * * * * * ForStatement::toIR(): object.d(997)
* * * * * * * * CmpExp::toElem: __key6 < __limit7 @ bool
* * * * * * * * * VarExp::toElem: __key6 @ ulong
* * * * * * * * * * DtoSymbolAddress ('__key6' of type 'ulong')
* * * * * * * * * * * a normal variable
* * * * * * * * * VarExp::toElem: __limit7 @ ulong
* * * * * * * * * * DtoSymbolAddress ('__limit7' of type 'ulong')
* * * * * * * * * * * a normal variable
* * * * * * * * * type 1: %23 = load i64, i64* %6
* * * * * * * * * type 2: %24 = load i64, i64* %7
* * * * * * * * CompoundStatement::toIR(): object.d(997)
* * * * * * * * * ExpStatement::toIR(): object.d(997)
* * * * * * * * * * DeclarationExp::toElem: (ulong i = __key6;) | T=void
* * * * * * * * * * * DtoDeclarationExp: i
* * * * * * * * * * * * VarDeclaration
* * * * * * * * * * * * DtoVarDeclaration(vdtype = ulong)
* * * * * * * * * * * * * llvm value for decl: %8 = alloca i64, align 8
* * * * * * * * * * * * * expression initializer
* * * * * * * * * * * * * AssignExp::toElem: i = __key6 | (ulong)(ulong = ulong)
* * * * * * * * * * * * * * VarExp::toElem: i @ ulong
* * * * * * * * * * * * * * * DtoSymbolAddress ('i' of type 'ulong')
* * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * VarExp::toElem: __key6 @ ulong
* * * * * * * * * * * * * * * DtoSymbolAddress ('__key6' of type 'ulong')
* * * * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1)
* * * * * * * * * * * * * * DtoAssign()
* * * * * * * * * * * * * * * lhs: %8 = alloca i64, align 8
* * * * * * * * * * * * * * * rhs: %28 = load i64, i64* %6
* * * * * * * * * ExpStatement::toIR(): object.d(998)
* * * * * * * * * * CallExp::toElem: this.value.postblit(p) @ void
* * * * * * * * * * * DotVarExp::toElem: this.value.postblit @ const void(void* p)
* * * * * * * * * * * * DotVarExp::toElem: this.value @ const(TypeInfo)
* * * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray)
* * * * * * * * * * * * * * normal this exp
* * * * * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.value:
* * * * * * * * * * * * * * Value: %30 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %29, i32 0, i32 2
* * * * * * * * * * * * vthis: %31 = load %object.TypeInfo*, %object.TypeInfo** %30
* * * * * * * * * * * * funcval: %35 = load i8*, i8** %34, align 8
* * * * * * * * * * * * isMember = this is: object.TypeInfo
* * * * * * * * * * * * DtoFunctionType(const void(void* p))
* * * * * * * * * * * * funcval casted: %36 = bitcast i8* %35 to void (%object.TypeInfo*, i8*)*
* * * * * * * * * * * DtoCallFunction()
* * * * * * * * * * * * Evaluating argument expressions
* * * * * * * * * * * * * DtoArgument
* * * * * * * * * * * * * * VarExp::toElem: p @ void*
* * * * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*')
* * * * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * * * type: void*
* * * * * * * * * * * * Building type: const void(void* p)
* * * * * * * * * * * * * DtoFunctionType(const void(void* p))
* * * * * * * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * * * * * * Final function type: void (i8*)
* * * * * * * * * * * * doing normal arguments
* * * * * * * * * * * * Arguments so far: (1)
* * * * * * * * * * * * * %37 = load %object.TypeInfo*, %object.TypeInfo** %30
* * * * * * * * * * * * Function type: const void(void* p)
* * * * * * * * * ExpStatement::toIR(): object.d(999)
* * * * * * * * * * AddAssignExp::toElem: p += cast(long)sz * 1L @ void*
* * * * * * * * * * * VarExp::toElem: p @ void*
* * * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*')
* * * * * * * * * * * * * function param
* * * * * * * * * * * * * type: void*
* * * * * * * * * * * Adding integer to pointer
* * * * * * * * * * * CastExp::toElem: cast(long)sz @ long
* * * * * * * * * * * * VarExp::toElem: sz @ ulong
* * * * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong')
* * * * * * * * * * * * * * a normal variable
* * * * * * * * * * * * Casting from 'ulong' to 'long'
* * * * * * * * * * * DtoAssign()
* * * * * * * * * * * * lhs: %4 = alloca i8*, align 8
* * * * * * * * * * * * rhs: %41 = getelementptr i8, i8* %40, i64 %39
* * * * * * * * AddAssignExp::toElem: __key6 += 1LU @ ulong
* * * * * * * * * VarExp::toElem: __key6 @ ulong
* * * * * * * * * * DtoSymbolAddress ('__key6' of type 'ulong')
* * * * * * * * * * * a normal variable
* * * * * * * * * IntegerExp::toElem: 1LU @ ulong
* * * * * * * * * * IntegerExp::toConstElem: 1LU @ ulong
* * * * * * * * * * * value = i64 1
* * * * * * * * * DtoAssign()
* * * * * * * * * * lhs: %6 = alloca i64, align 8
* * * * * * * * * * rhs: %44 = add i64 %43, 1
* * VarDeclaration::codegen(): 'object.TypeInfo_StaticArray.value'
* * * DtoResolveVariable(object.TypeInfo_StaticArray.value)
* * VarDeclaration::codegen(): 'object.TypeInfo_StaticArray.len'
* * * DtoResolveVariable(object.TypeInfo_StaticArray.len)
* * DtoDefineFunction(object.TypeInfo_StaticArray.talign): object.d(1006)
* * * isMember = this is: object.TypeInfo_StaticArray
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (%object.TypeInfo_StaticArray*)
* * * DtoResolveFunction(object.TypeInfo_StaticArray.talign): object.d(1006)
* * * * DtoDeclareFunction(object.TypeInfo_StaticArray.talign): object.d(1006)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_StaticArray
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * func =
declare i64 @_D6object20TypeInfo_StaticArray6talignMxFNaNbNdNiNfZm(%object.TypeInfo_StaticArray*)
* * * Doing function body for: talign
* * * DtoCreateNestedContext for object.TypeInfo_StaticArray.talign
* * * * DtoCreateNestedContextType for object.TypeInfo_StaticArray.talign
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(1007)
* * * * * CallExp::toElem: this.value.talign() @ ulong
* * * * * * DotVarExp::toElem: this.value.talign @ const pure nothrow @nogc @property @safe ulong()
* * * * * * * DotVarExp::toElem: this.value @ const(TypeInfo)
* * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray)
* * * * * * * * * normal this exp
* * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.value:
* * * * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %4, i32 0, i32 2
* * * * * * * vthis: %6 = load %object.TypeInfo*, %object.TypeInfo** %5
* * * * * * * funcval: %10 = load i8*, i8** %9, align 8
* * * * * * * isMember = this is: object.TypeInfo
* * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * * * funcval casted: %11 = bitcast i8* %10 to i64 (%object.TypeInfo*)*
* * * * * * DtoCallFunction()
* * * * * * * Evaluating argument expressions
* * * * * * * doing normal arguments
* * * * * * * Arguments so far: (1)
* * * * * * * * %12 = load %object.TypeInfo*, %object.TypeInfo** %5
* * * * * * * Function type: const pure nothrow @nogc @property @safe ulong()
* * DtoDefineFunction(object.TypeInfo_StaticArray.argTypes): object.d(1010)
* * * isMember = this is: object.TypeInfo_StaticArray
* * * DtoFunctionType(nothrow @safe int(out TypeInfo arg1, out TypeInfo arg2))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i32 (%object.TypeInfo_StaticArray*, %object.TypeInfo**, %object.TypeInfo**)
* * * DtoResolveFunction(object.TypeInfo_StaticArray.argTypes): object.d(1010)
* * * * DtoDeclareFunction(object.TypeInfo_StaticArray.argTypes): object.d(1010)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_StaticArray
* * * * * DtoFunctionType(nothrow @safe int(out TypeInfo arg1, out TypeInfo arg2))
* * * * * func =
declare i32 @_D6object20TypeInfo_StaticArray8argTypesMFNbNfJC8TypeInfoJQlZi(%object.TypeInfo_StaticArray*, %object.TypeInfo**, %object.TypeInfo**)
* * * Doing function body for: argTypes
* * * DtoCreateNestedContext for object.TypeInfo_StaticArray.argTypes
* * * * DtoCreateNestedContextType for object.TypeInfo_StaticArray.argTypes
* * * CompoundStatement::toIR():
* * * * ExpStatement::toIR():
* * * * * AssignExp::toElem: arg1 = null | (object.TypeInfo)(object.TypeInfo = object.TypeInfo)
* * * * * * VarExp::toElem: arg1 @ object.TypeInfo
* * * * * * * DtoSymbolAddress ('arg1' of type 'object.TypeInfo')
* * * * * * * * function param
* * * * * * * * type: object.TypeInfo
* * * * * * NullExp::toElem(type=object.TypeInfo): null
* * * * * * * NullExp::toConstElem(type=object.TypeInfo): null
* * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * DtoAssign()
* * * * * * * l : %object.TypeInfo** %2
* * * * * * * r : %object.TypeInfo* null
* * * * ExpStatement::toIR():
* * * * * AssignExp::toElem: arg2 = null | (object.TypeInfo)(object.TypeInfo = object.TypeInfo)
* * * * * * VarExp::toElem: arg2 @ object.TypeInfo
* * * * * * * DtoSymbolAddress ('arg2' of type 'object.TypeInfo')
* * * * * * * * function param
* * * * * * * * type: object.TypeInfo
* * * * * * NullExp::toElem(type=object.TypeInfo): null
* * * * * * * NullExp::toConstElem(type=object.TypeInfo): null
* * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * DtoAssign()
* * * * * * * l : %object.TypeInfo** %1
* * * * * * * r : %object.TypeInfo* null
* * * * CompoundStatement::toIR(): object.d(1010)
* * * * * ExpStatement::toIR(): object.d(1011)
* * * * * * AssignExp::toElem: arg1 = typeid(void*) | (object.TypeInfo)(object.TypeInfo = object.TypeInfo)
* * * * * * * VarExp::toElem: arg1 @ object.TypeInfo
* * * * * * * * DtoSymbolAddress ('arg1' of type 'object.TypeInfo')
* * * * * * * * * function param
* * * * * * * * * type: object.TypeInfo
* * * * * * * Type::getTypeInfo(): void*
* * * * * * * DtoSymbolAddress ('typeid(void*)' of type 'object.TypeInfo_Pointer')
* * * * * * * * TypeInfoDeclaration
* * * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * * DtoAssign()
* * * * * * * * l : %object.TypeInfo** %2
* * * * * * * * r : %object.TypeInfo* bitcast (%object.TypeInfo_Pointer* @_D11TypeInfo_Pv6__initZ to %object.TypeInfo*)
* * * * * ReturnStatement::toIR(): object.d(1012)
* * * * * * IntegerExp::toElem: 0 @ int
* * * * * * * IntegerExp::toConstElem: 0 @ int
* * * * * * * * value = i32 0
* * Building default initializer for object.TypeInfo_StaticArray
* * * Creating initializer constant for TypeInfo_StaticArray
* * * * Field priority for value: 1
* * * * Field priority for len: 1
* * * * DtoConstExpInit(targetType = object.TypeInfo, exp = null)
* * * * * NullExp::toConstElem(type=object.TypeInfo): null
* * * * DtoConstExpInit(targetType = ulong, exp = 0LU)
* * * * * IntegerExp::toConstElem: 0LU @ ulong
* * * * * * value = i64 0
* * * * final initializer: %object.TypeInfo_StaticArray { [19 x i8*]* @_D20TypeInfo_StaticArray6__vtblZ, i8* null, %object.TypeInfo* null, i64 0 }
* * Building vtbl initializer
* * DtoDefineClassInfo(TypeInfo_StaticArray)
* * * Building ClassInfo.interfaces
* ClassDeclaration::codegen: 'object.TypeInfo_Const'
* * DtoDefineFunction(object.TypeInfo_Const.toString): object.d(1017)
* * * isMember = this is: object.TypeInfo_Const
* * * DtoFunctionType(const pure nothrow @safe string())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.TypeInfo_Const*)
* * * DtoResolveFunction(object.TypeInfo_Const.toString): object.d(1017)
* * * * DtoDeclareFunction(object.TypeInfo_Const.toString): object.d(1017)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Const
* * * * * DtoFunctionType(const pure nothrow @safe string())
* * * * * func =
declare { i64, i8* } @_D6object14TypeInfo_Const8toStringMxFNaNbNfZAya(%object.TypeInfo_Const*)
* * * Doing function body for: toString
* * * DtoCreateNestedContext for object.TypeInfo_Const.toString
* * * * DtoCreateNestedContextType for object.TypeInfo_Const.toString
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(1018)
* * * * * StringExp::toElem: "Const-Something" @ string
* * * * * * type: [16 x i8]
* * * * * * init: [16 x i8] c"Const-Something\00"
* * DtoDefineFunction(object.TypeInfo_Const.opEquals): object.d(1021)
* * * isMember = this is: object.TypeInfo_Const
* * * DtoFunctionType(bool(Object o))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i1 (%object.TypeInfo_Const*, %object.Object*)
* * * DtoResolveFunction(object.TypeInfo_Const.opEquals): object.d(1021)
* * * * DtoDeclareFunction(object.TypeInfo_Const.opEquals): object.d(1021)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Const
* * * * * DtoFunctionType(bool(Object o))
* * * * * func =
declare i1 @_D6object14TypeInfo_Const8opEqualsMFC6ObjectZb(%object.TypeInfo_Const*, %object.Object*)
* * * Doing function body for: opEquals
* * * DtoCreateNestedContext for object.TypeInfo_Const.opEquals
* * * * DtoCreateNestedContextType for object.TypeInfo_Const.opEquals
* * * CompoundStatement::toIR():
* * * * CompoundStatement::toIR(): object.d(1021)
* * * * * IfStatement::toIR(): object.d(1022)
* * * * * * IdentityExp::toElem: this is o @ bool
* * * * * * * ThisExp::toElem: this @ object.Object
* * * * * * * * normal this exp
* * * * * * * VarExp::toElem: o @ object.Object
* * * * * * * * DtoSymbolAddress ('o' of type 'object.Object')
* * * * * * * * * function param
* * * * * * * * * type: object.Object
* * * * * * ReturnStatement::toIR(): object.d(1023)
* * * * * * * IntegerExp::toElem: true @ bool
* * * * * * * * IntegerExp::toConstElem: true @ bool
* * * * * * * * * value = i1 true
* * * * * IfStatement::toIR(): object.d(1024)
* * * * * * NotExp::toElem: !opEquals(typeid(this), typeid(o)) @ bool
* * * * * * * CallExp::toElem: opEquals(typeid(this), typeid(o)) @ bool
* * * * * * * * VarExp::toElem: opEquals @ @system bool(Object lhs, Object rhs)
* * * * * * * * * DtoSymbolAddress ('opEquals' of type '@system bool(Object lhs, Object rhs)')
* * * * * * * * * * FuncDeclaration
* * * * * * * * DtoCallFunction()
* * * * * * * * * Evaluating argument expressions
* * * * * * * * * * DtoArgument
* * * * * * * * * * * ThisExp::toElem: this @ object.TypeInfo_Const
* * * * * * * * * * * * normal this exp
* * * * * * * * * * DtoArgument
* * * * * * * * * * * VarExp::toElem: o @ object.Object
* * * * * * * * * * * * DtoSymbolAddress ('o' of type 'object.Object')
* * * * * * * * * * * * * function param
* * * * * * * * * * * * * type: object.Object
* * * * * * * * * doing normal arguments
* * * * * * * * * Arguments so far: (0)
* * * * * * * * * Function type: @system bool(Object lhs, Object rhs)
* * * * * * * * * arg: %23 = load %object.TypeInfo_Class*, %object.TypeInfo_Class** %17
* * * * * * * * * expects: %object.Object*
* * * * * * * * * arg: %25 = load %object.TypeInfo_Class*, %object.TypeInfo_Class** %22
* * * * * * * * * expects: %object.Object*
* * * * * * ReturnStatement::toIR(): object.d(1025)
* * * * * * * IntegerExp::toElem: false @ bool
* * * * * * * * IntegerExp::toConstElem: false @ bool
* * * * * * * * * value = i1 false
* * * * * ReturnStatement::toIR(): object.d(1026)
* * * * * * CallExp::toElem: this.base.opEquals((cast(TypeInfo_Const)o).base) @ bool
* * * * * * * DotVarExp::toElem: this.base.opEquals @ bool(Object o)
* * * * * * * * DotVarExp::toElem: this.base @ object.TypeInfo
* * * * * * * * * ThisExp::toElem: this @ object.TypeInfo_Const
* * * * * * * * * * normal this exp
* * * * * * * * * Indexing aggregate field object.TypeInfo_Const.base:
* * * * * * * * * * Value: %33 = getelementptr inbounds %object.TypeInfo_Const, %object.TypeInfo_Const* %32, i32 0, i32 2
* * * * * * * * vthis: %34 = load %object.TypeInfo*, %object.TypeInfo** %33
* * * * * * * * funcval: %38 = load i8*, i8** %37, align 8
* * * * * * * * isMember = this is: object.TypeInfo
* * * * * * * * DtoFunctionType(bool(Object o))
* * * * * * * * funcval casted: %39 = bitcast i8* %38 to i1 (%object.TypeInfo*, %object.Object*)*
* * * * * * * DtoCallFunction()
* * * * * * * * Evaluating argument expressions
* * * * * * * * * DtoArgument
* * * * * * * * * * DotVarExp::toElem: (cast(TypeInfo_Const)o).base @ object.Object
* * * * * * * * * * * CastExp::toElem: cast(TypeInfo_Const)o @ object.TypeInfo_Const
* * * * * * * * * * * * VarExp::toElem: o @ object.Object
* * * * * * * * * * * * * DtoSymbolAddress ('o' of type 'object.Object')
* * * * * * * * * * * * * * function param
* * * * * * * * * * * * * * type: object.Object
* * * * * * * * * * * * Casting from 'object.Object' to 'object.TypeInfo_Const'
* * * * * * * * * * * * * DtoCastClass(object.Object, object.TypeInfo_Const)
* * * * * * * * * * * * * * dynamic up cast
* * * * * * * * * * * Indexing aggregate field object.TypeInfo_Const.base:
* * * * * * * * * * * * Value: %44 = getelementptr inbounds %object.TypeInfo_Const, %object.TypeInfo_Const* %43, i32 0, i32 2
* * * * * * * * Building type: bool(Object o)
* * * * * * * * * DtoFunctionType(bool(Object o))
* * * * * * * * * * x86-64 ABI: Transforming return type
* * * * * * * * * * x86-64 ABI: Transforming argument types
* * * * * * * * * * Final function type: i1 (%object.Object*)
* * * * * * * * doing normal arguments
* * * * * * * * Arguments so far: (1)
* * * * * * * * * %40 = load %object.TypeInfo*, %object.TypeInfo** %33
* * * * * * * * Function type: bool(Object o)
* * DtoDefineFunction(object.TypeInfo_Const.getHash): object.d(1029)
* * * Doing function body for: getHash
* * * DtoCreateNestedContext for object.TypeInfo_Const.getHash
* * * * DtoCreateNestedContextType for object.TypeInfo_Const.getHash
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(1030)
* * * * * CallExp::toElem: this.base.getHash(p) @ ulong
* * * * * * DotVarExp::toElem: this.base.getHash @ const nothrow @trusted ulong(const(void*) p)
* * * * * * * DotVarExp::toElem: this.base @ const(TypeInfo)
* * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Const)
* * * * * * * * * normal this exp
* * * * * * * * Indexing aggregate field object.TypeInfo_Const.base:
* * * * * * * * * Value: %7 = getelementptr inbounds %object.TypeInfo_Const, %object.TypeInfo_Const* %6, i32 0, i32 2
* * * * * * * vthis: %8 = load %object.TypeInfo*, %object.TypeInfo** %7
* * * * * * * funcval: %12 = load i8*, i8** %11, align 8
* * * * * * * isMember = this is: object.TypeInfo
* * * * * * * DtoFunctionType(const nothrow @trusted ulong(const(void*) p))
* * * * * * * funcval casted: %13 = bitcast i8* %12 to i64 (%object.TypeInfo*, i8*)*
* * * * * * DtoCallFunction()
* * * * * * * Evaluating argument expressions
* * * * * * * * DtoArgument
* * * * * * * * * VarExp::toElem: p @ const(void*)
* * * * * * * * * * DtoSymbolAddress ('p' of type 'const(void*)')
* * * * * * * * * * * function param
* * * * * * * * * * * type: const(void*)
* * * * * * * doing normal arguments
* * * * * * * Arguments so far: (1)
* * * * * * * * %14 = load %object.TypeInfo*, %object.TypeInfo** %7
* * * * * * * Function type: const nothrow @trusted ulong(const(void*) p)
* * DtoDefineFunction(object.TypeInfo_Const.equals): object.d(1033)
* * * isMember = this is: object.TypeInfo_Const
* * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i1 (%object.TypeInfo_Const*, i8*, i8*)
* * * DtoResolveFunction(object.TypeInfo_Const.equals): object.d(1033)
* * * * DtoDeclareFunction(object.TypeInfo_Const.equals): object.d(1033)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Const
* * * * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2))
* * * * * func =
declare i1 @_D6object14TypeInfo_Const6equalsMxFxPvxQdZb(%object.TypeInfo_Const*, i8*, i8*)
* * * Doing function body for: equals
* * * DtoCreateNestedContext for object.TypeInfo_Const.equals
* * * * DtoCreateNestedContextType for object.TypeInfo_Const.equals
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(1034)
* * * * * CallExp::toElem: this.base.equals(p1, p2) @ bool
* * * * * * DotVarExp::toElem: this.base.equals @ const bool(const(void*) p1, const(void*) p2)
* * * * * * * DotVarExp::toElem: this.base @ const(TypeInfo)
* * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Const)
* * * * * * * * * normal this exp
* * * * * * * * Indexing aggregate field object.TypeInfo_Const.base:
* * * * * * * * * Value: %9 = getelementptr inbounds %object.TypeInfo_Const, %object.TypeInfo_Const* %8, i32 0, i32 2
* * * * * * * vthis: %10 = load %object.TypeInfo*, %object.TypeInfo** %9
* * * * * * * funcval: %14 = load i8*, i8** %13, align 8
* * * * * * * isMember = this is: object.TypeInfo
* * * * * * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2))
* * * * * * * funcval casted: %15 = bitcast i8* %14 to i1 (%object.TypeInfo*, i8*, i8*)*
* * * * * * DtoCallFunction()
* * * * * * * Evaluating argument expressions
* * * * * * * * DtoArgument
* * * * * * * * * VarExp::toElem: p1 @ const(void*)
* * * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)')
* * * * * * * * * * * function param
* * * * * * * * * * * type: const(void*)
* * * * * * * * DtoArgument
* * * * * * * * * VarExp::toElem: p2 @ const(void*)
* * * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)')
* * * * * * * * * * * function param
* * * * * * * * * * * type: const(void*)
* * * * * * * doing normal arguments
* * * * * * * Arguments so far: (1)
* * * * * * * * %16 = load %object.TypeInfo*, %object.TypeInfo** %9
* * * * * * * Function type: const bool(const(void*) p1, const(void*) p2)
* * DtoDefineFunction(object.TypeInfo_Const.compare): object.d(1037)
* * * isMember = this is: object.TypeInfo_Const
* * * DtoFunctionType(const int(const(void*) p1, const(void*) p2))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i32 (%object.TypeInfo_Const*, i8*, i8*)
* * * DtoResolveFunction(object.TypeInfo_Const.compare): object.d(1037)
* * * * DtoDeclareFunction(object.TypeInfo_Const.compare): object.d(1037)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Const
* * * * * DtoFunctionType(const int(const(void*) p1, const(void*) p2))
* * * * * func =
declare i32 @_D6object14TypeInfo_Const7compareMxFxPvxQdZi(%object.TypeInfo_Const*, i8*, i8*)
* * * Doing function body for: compare
* * * DtoCreateNestedContext for object.TypeInfo_Const.compare
* * * * DtoCreateNestedContextType for object.TypeInfo_Const.compare
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(1038)
* * * * * CallExp::toElem: this.base.compare(p1, p2) @ int
* * * * * * DotVarExp::toElem: this.base.compare @ const int(const(void*) p1, const(void*) p2)
* * * * * * * DotVarExp::toElem: this.base @ const(TypeInfo)
* * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Const)
* * * * * * * * * normal this exp
* * * * * * * * Indexing aggregate field object.TypeInfo_Const.base:
* * * * * * * * * Value: %9 = getelementptr inbounds %object.TypeInfo_Const, %object.TypeInfo_Const* %8, i32 0, i32 2
* * * * * * * vthis: %10 = load %object.TypeInfo*, %object.TypeInfo** %9
* * * * * * * funcval: %14 = load i8*, i8** %13, align 8
* * * * * * * isMember = this is: object.TypeInfo
* * * * * * * DtoFunctionType(const int(const(void*) p1, const(void*) p2))
* * * * * * * funcval casted: %15 = bitcast i8* %14 to i32 (%object.TypeInfo*, i8*, i8*)*
* * * * * * DtoCallFunction()
* * * * * * * Evaluating argument expressions
* * * * * * * * DtoArgument
* * * * * * * * * VarExp::toElem: p1 @ const(void*)
* * * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)')
* * * * * * * * * * * function param
* * * * * * * * * * * type: const(void*)
* * * * * * * * DtoArgument
* * * * * * * * * VarExp::toElem: p2 @ const(void*)
* * * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)')
* * * * * * * * * * * function param
* * * * * * * * * * * type: const(void*)
* * * * * * * doing normal arguments
* * * * * * * Arguments so far: (1)
* * * * * * * * %16 = load %object.TypeInfo*, %object.TypeInfo** %9
* * * * * * * Function type: const int(const(void*) p1, const(void*) p2)
* * DtoDefineFunction(object.TypeInfo_Const.tsize): object.d(1041)
* * * isMember = this is: object.TypeInfo_Const
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (%object.TypeInfo_Const*)
* * * DtoResolveFunction(object.TypeInfo_Const.tsize): object.d(1041)
* * * * DtoDeclareFunction(object.TypeInfo_Const.tsize): object.d(1041)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Const
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * func =
declare i64 @_D6object14TypeInfo_Const5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo_Const*)
* * * Doing function body for: tsize
* * * DtoCreateNestedContext for object.TypeInfo_Const.tsize
* * * * DtoCreateNestedContextType for object.TypeInfo_Const.tsize
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(1042)
* * * * * CallExp::toElem: this.base.tsize() @ ulong
* * * * * * DotVarExp::toElem: this.base.tsize @ const pure nothrow @nogc @property @safe ulong()
* * * * * * * DotVarExp::toElem: this.base @ const(TypeInfo)
* * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Const)
* * * * * * * * * normal this exp
* * * * * * * * Indexing aggregate field object.TypeInfo_Const.base:
* * * * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Const, %object.TypeInfo_Const* %4, i32 0, i32 2
* * * * * * * vthis: %6 = load %object.TypeInfo*, %object.TypeInfo** %5
* * * * * * * funcval: %10 = load i8*, i8** %9, align 8
* * * * * * * isMember = this is: object.TypeInfo
* * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * * * funcval casted: %11 = bitcast i8* %10 to i64 (%object.TypeInfo*)*
* * * * * * DtoCallFunction()
* * * * * * * Evaluating argument expressions
* * * * * * * doing normal arguments
* * * * * * * Arguments so far: (1)
* * * * * * * * %12 = load %object.TypeInfo*, %object.TypeInfo** %5
* * * * * * * Function type: const pure nothrow @nogc @property @safe ulong()
* * DtoDefineFunction(object.TypeInfo_Const.swap): object.d(1045)
* * * isMember = this is: object.TypeInfo_Const
* * * DtoFunctionType(const void(void* p1, void* p2))
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: void (%object.TypeInfo_Const*, i8*, i8*)
* * * DtoResolveFunction(object.TypeInfo_Const.swap): object.d(1045)
* * * * DtoDeclareFunction(object.TypeInfo_Const.swap): object.d(1045)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Const
* * * * * DtoFunctionType(const void(void* p1, void* p2))
* * * * * func =
declare void @_D6object14TypeInfo_Const4swapMxFPvQcZv(%object.TypeInfo_Const*, i8*, i8*)
* * * Doing function body for: swap
* * * DtoCreateNestedContext for object.TypeInfo_Const.swap
* * * * DtoCreateNestedContextType for object.TypeInfo_Const.swap
* * * CompoundStatement::toIR():
* * * * CompoundStatement::toIR(): object.d(1045)
* * * * * ExpStatement::toIR(): object.d(1046)
* * * * * * CallExp::toElem: this.base.swap(p1, p2) @ void
* * * * * * * DotVarExp::toElem: this.base.swap @ const void(void* p1, void* p2)
* * * * * * * * DotVarExp::toElem: this.base @ const(TypeInfo)
* * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Const)
* * * * * * * * * * normal this exp
* * * * * * * * * Indexing aggregate field object.TypeInfo_Const.base:
* * * * * * * * * * Value: %9 = getelementptr inbounds %object.TypeInfo_Const, %object.TypeInfo_Const* %8, i32 0, i32 2
* * * * * * * * vthis: %10 = load %object.TypeInfo*, %object.TypeInfo** %9
* * * * * * * * funcval: %14 = load i8*, i8** %13, align 8
* * * * * * * * isMember = this is: object.TypeInfo
* * * * * * * * DtoFunctionType(const void(void* p1, void* p2))
* * * * * * * * funcval casted: %15 = bitcast i8* %14 to void (%object.TypeInfo*, i8*, i8*)*
* * * * * * * DtoCallFunction()
* * * * * * * * Evaluating argument expressions
* * * * * * * * * DtoArgument
* * * * * * * * * * VarExp::toElem: p1 @ void*
* * * * * * * * * * * DtoSymbolAddress ('p1' of type 'void*')
* * * * * * * * * * * * function param
* * * * * * * * * * * * type: void*
* * * * * * * * * DtoArgument
* * * * * * * * * * VarExp::toElem: p2 @ void*
* * * * * * * * * * * DtoSymbolAddress ('p2' of type 'void*')
* * * * * * * * * * * * function param
* * * * * * * * * * * * type: void*
* * * * * * * * doing normal arguments
* * * * * * * * Arguments so far: (1)
* * * * * * * * * %16 = load %object.TypeInfo*, %object.TypeInfo** %9
* * * * * * * * Function type: const void(void* p1, void* p2)
* * * * * ReturnStatement::toIR(): object.d(1046)
* * DtoDefineFunction(object.TypeInfo_Const.next): object.d(1049)
* * * isMember = this is: object.TypeInfo_Const
* * * DtoFunctionType(inout pure nothrow @nogc @property inout(TypeInfo)())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: %object.TypeInfo* (%object.TypeInfo_Const*)
* * * DtoResolveFunction(object.TypeInfo_Const.next): object.d(1049)
* * * * DtoDeclareFunction(object.TypeInfo_Const.next): object.d(1049)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Const
* * * * * DtoFunctionType(inout pure nothrow @nogc @property inout(TypeInfo)())
* * * * * func =
declare %object.TypeInfo* @_D6object14TypeInfo_Const4nextMNgFNaNbNdNiZNgC8TypeInfo(%object.TypeInfo_Const*)
* * * Doing function body for: next
* * * DtoCreateNestedContext for object.TypeInfo_Const.next
* * * * DtoCreateNestedContextType for object.TypeInfo_Const.next
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(1050)
* * * * * CallExp::toElem: this.base.next() @ inout(TypeInfo)
* * * * * * DotVarExp::toElem: this.base.next @ inout pure nothrow @nogc @property inout(TypeInfo)()
* * * * * * * DotVarExp::toElem: this.base @ inout(TypeInfo)
* * * * * * * * ThisExp::toElem: this @ inout(TypeInfo_Const)
* * * * * * * * * normal this exp
* * * * * * * * Indexing aggregate field object.TypeInfo_Const.base:
* * * * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Const, %object.TypeInfo_Const* %4, i32 0, i32 2
* * * * * * * vthis: %6 = load %object.TypeInfo*, %object.TypeInfo** %5
* * * * * * * funcval: %10 = load i8*, i8** %9, align 8
* * * * * * * isMember = this is: object.TypeInfo
* * * * * * * DtoFunctionType(inout pure nothrow @nogc @property inout(TypeInfo)())
* * * * * * * funcval casted: %11 = bitcast i8* %10 to %object.TypeInfo* (%object.TypeInfo*)*
* * * * * * DtoCallFunction()
* * * * * * * Evaluating argument expressions
* * * * * * * doing normal arguments
* * * * * * * Arguments so far: (1)
* * * * * * * * %12 = load %object.TypeInfo*, %object.TypeInfo** %5
* * * * * * * Function type: inout pure nothrow @nogc @property inout(TypeInfo)()
* * DtoDefineFunction(object.TypeInfo_Const.flags): object.d(1053)
* * * isMember = this is: object.TypeInfo_Const
* * * DtoFunctionType(const pure nothrow @nogc @property @safe uint())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i32 (%object.TypeInfo_Const*)
* * * DtoResolveFunction(object.TypeInfo_Const.flags): object.d(1053)
* * * * DtoDeclareFunction(object.TypeInfo_Const.flags): object.d(1053)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Const
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe uint())
* * * * * func =
declare i32 @_D6object14TypeInfo_Const5flagsMxFNaNbNdNiNfZk(%object.TypeInfo_Const*)
* * * Doing function body for: flags
* * * DtoCreateNestedContext for object.TypeInfo_Const.flags
* * * * DtoCreateNestedContextType for object.TypeInfo_Const.flags
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(1054)
* * * * * CallExp::toElem: this.base.flags() @ uint
* * * * * * DotVarExp::toElem: this.base.flags @ const pure nothrow @nogc @property @safe uint()
* * * * * * * DotVarExp::toElem: this.base @ const(TypeInfo)
* * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Const)
* * * * * * * * * normal this exp
* * * * * * * * Indexing aggregate field object.TypeInfo_Const.base:
* * * * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Const, %object.TypeInfo_Const* %4, i32 0, i32 2
* * * * * * * vthis: %6 = load %object.TypeInfo*, %object.TypeInfo** %5
* * * * * * * funcval: %10 = load i8*, i8** %9, align 8
* * * * * * * isMember = this is: object.TypeInfo
* * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe uint())
* * * * * * * funcval casted: %11 = bitcast i8* %10 to i32 (%object.TypeInfo*)*
* * * * * * DtoCallFunction()
* * * * * * * Evaluating argument expressions
* * * * * * * doing normal arguments
* * * * * * * Arguments so far: (1)
* * * * * * * * %12 = load %object.TypeInfo*, %object.TypeInfo** %5
* * * * * * * Function type: const pure nothrow @nogc @property @safe uint()
* * DtoDefineFunction(object.TypeInfo_Const.initializer): object.d(1057)
* * * isMember = this is: object.TypeInfo_Const
* * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.TypeInfo_Const*)
* * * DtoResolveFunction(object.TypeInfo_Const.initializer): object.d(1057)
* * * * DtoDeclareFunction(object.TypeInfo_Const.initializer): object.d(1057)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Const
* * * * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]())
* * * * * func =
declare { i64, i8* } @_D6object14TypeInfo_Const11initializerMxFNaNbNiNfZAxv(%object.TypeInfo_Const*)
* * * Doing function body for: initializer
* * * DtoCreateNestedContext for object.TypeInfo_Const.initializer
* * * * DtoCreateNestedContextType for object.TypeInfo_Const.initializer
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(1058)
* * * * * CallExp::toElem: this.base.initializer() @ const(void)[]
* * * * * * DotVarExp::toElem: this.base.initializer @ const pure nothrow @nogc @safe const(void)[]()
* * * * * * * DotVarExp::toElem: this.base @ const(TypeInfo)
* * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Const)
* * * * * * * * * normal this exp
* * * * * * * * Indexing aggregate field object.TypeInfo_Const.base:
* * * * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Const, %object.TypeInfo_Const* %4, i32 0, i32 2
* * * * * * * vthis: %6 = load %object.TypeInfo*, %object.TypeInfo** %5
* * * * * * * funcval: %10 = load i8*, i8** %9, align 8
* * * * * * * isMember = this is: object.TypeInfo
* * * * * * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]())
* * * * * * * funcval casted: %11 = bitcast i8* %10 to { i64, i8* } (%object.TypeInfo*)*
* * * * * * DtoCallFunction()
* * * * * * * Evaluating argument expressions
* * * * * * * doing normal arguments
* * * * * * * Arguments so far: (1)
* * * * * * * * %12 = load %object.TypeInfo*, %object.TypeInfo** %5
* * * * * * * Function type: const pure nothrow @nogc @safe const(void)[]()
* * DtoDefineFunction(object.TypeInfo_Const.talign): object.d(1061)
* * * isMember = this is: object.TypeInfo_Const
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (%object.TypeInfo_Const*)
* * * DtoResolveFunction(object.TypeInfo_Const.talign): object.d(1061)
* * * * DtoDeclareFunction(object.TypeInfo_Const.talign): object.d(1061)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Const
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * func =
declare i64 @_D6object14TypeInfo_Const6talignMxFNaNbNdNiNfZm(%object.TypeInfo_Const*)
* * * Doing function body for: talign
* * * DtoCreateNestedContext for object.TypeInfo_Const.talign
* * * * DtoCreateNestedContextType for object.TypeInfo_Const.talign
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d(1062)
* * * * * CallExp::toElem: this.base.talign() @ ulong
* * * * * * DotVarExp::toElem: this.base.talign @ const pure nothrow @nogc @property @safe ulong()
* * * * * * * DotVarExp::toElem: this.base @ const(TypeInfo)
* * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Const)
* * * * * * * * * normal this exp
* * * * * * * * Indexing aggregate field object.TypeInfo_Const.base:
* * * * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Const, %object.TypeInfo_Const* %4, i32 0, i32 2
* * * * * * * vthis: %6 = load %object.TypeInfo*, %object.TypeInfo** %5
* * * * * * * funcval: %10 = load i8*, i8** %9, align 8
* * * * * * * isMember = this is: object.TypeInfo
* * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * * * funcval casted: %11 = bitcast i8* %10 to i64 (%object.TypeInfo*)*
* * * * * * DtoCallFunction()
* * * * * * * Evaluating argument expressions
* * * * * * * doing normal arguments
* * * * * * * Arguments so far: (1)
* * * * * * * * %12 = load %object.TypeInfo*, %object.TypeInfo** %5
* * * * * * * Function type: const pure nothrow @nogc @property @safe ulong()
* * DtoDefineFunction(object.TypeInfo_Const.argTypes): object.d(1065)
* * * isMember = this is: object.TypeInfo_Const
* * * DtoFunctionType(nothrow @safe int(out TypeInfo arg1, out TypeInfo arg2))
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i32 (%object.TypeInfo_Const*, %object.TypeInfo**, %object.TypeInfo**)
* * * DtoResolveFunction(object.TypeInfo_Const.argTypes): object.d(1065)
* * * * DtoDeclareFunction(object.TypeInfo_Const.argTypes): object.d(1065)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_Const
* * * * * DtoFunctionType(nothrow @safe int(out TypeInfo arg1, out TypeInfo arg2))
* * * * * func =
declare i32 @_D6object14TypeInfo_Const8argTypesMFNbNfJC8TypeInfoJQlZi(%object.TypeInfo_Const*, %object.TypeInfo**, %object.TypeInfo**)
* * * Doing function body for: argTypes
* * * DtoCreateNestedContext for object.TypeInfo_Const.argTypes
* * * * DtoCreateNestedContextType for object.TypeInfo_Const.argTypes
* * * CompoundStatement::toIR():
* * * * ExpStatement::toIR():
* * * * * AssignExp::toElem: arg1 = null | (object.TypeInfo)(object.TypeInfo = object.TypeInfo)
* * * * * * VarExp::toElem: arg1 @ object.TypeInfo
* * * * * * * DtoSymbolAddress ('arg1' of type 'object.TypeInfo')
* * * * * * * * function param
* * * * * * * * type: object.TypeInfo
* * * * * * NullExp::toElem(type=object.TypeInfo): null
* * * * * * * NullExp::toConstElem(type=object.TypeInfo): null
* * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * DtoAssign()
* * * * * * * l : %object.TypeInfo** %2
* * * * * * * r : %object.TypeInfo* null
* * * * ExpStatement::toIR():
* * * * * AssignExp::toElem: arg2 = null | (object.TypeInfo)(object.TypeInfo = object.TypeInfo)
* * * * * * VarExp::toElem: arg2 @ object.TypeInfo
* * * * * * * DtoSymbolAddress ('arg2' of type 'object.TypeInfo')
* * * * * * * * function param
* * * * * * * * type: object.TypeInfo
* * * * * * NullExp::toElem(type=object.TypeInfo): null
* * * * * * * NullExp::toConstElem(type=object.TypeInfo): null
* * * * * * performing normal assignment (rhs has lvalue elems = 0)
* * * * * * DtoAssign()
* * * * * * * l : %object.TypeInfo** %1
* * * * * * * r : %object.TypeInfo* null
* * * * ReturnStatement::toIR(): object.d(1066)
* * * * * CallExp::toElem: this.base.argTypes(arg1, arg2) @ int
* * * * * * DotVarExp::toElem: this.base.argTypes @ nothrow @safe int(out TypeInfo arg1, out TypeInfo arg2)
* * * * * * * DotVarExp::toElem: this.base @ object.TypeInfo
* * * * * * * * ThisExp::toElem: this @ object.TypeInfo_Const
* * * * * * * * * normal this exp
* * * * * * * * Indexing aggregate field object.TypeInfo_Const.base:
* * * * * * * * * Value: %7 = getelementptr inbounds %object.TypeInfo_Const, %object.TypeInfo_Const* %6, i32 0, i32 2
* * * * * * * vthis: %8 = load %object.TypeInfo*, %object.TypeInfo** %7
* * * * * * * funcval: %12 = load i8*, i8** %11, align 8
* * * * * * * isMember = this is: object.TypeInfo
* * * * * * * DtoFunctionType(nothrow @safe int(out TypeInfo arg1, out TypeInfo arg2))
* * * * * * * funcval casted: %13 = bitcast i8* %12 to i32 (%object.TypeInfo*, %object.TypeInfo**, %object.TypeInfo**)*
* * * * * * DtoCallFunction()
* * * * * * * Evaluating argument expressions
* * * * * * * * DtoArgument
* * * * * * * * * VarExp::toElem: arg1 @ object.TypeInfo
* * * * * * * * * * DtoSymbolAddress ('arg1' of type 'object.TypeInfo')
* * * * * * * * * * * function param
* * * * * * * * * * * type: object.TypeInfo
* * * * * * * * DtoArgument
* * * * * * * * * VarExp::toElem: arg2 @ object.TypeInfo
* * * * * * * * * * DtoSymbolAddress ('arg2' of type 'object.TypeInfo')
* * * * * * * * * * * function param
* * * * * * * * * * * type: object.TypeInfo
* * * * * * * doing normal arguments
* * * * * * * Arguments so far: (1)
* * * * * * * * %14 = load %object.TypeInfo*, %object.TypeInfo** %7
* * * * * * * Function type: nothrow @safe int(out TypeInfo arg1, out TypeInfo arg2)
* * VarDeclaration::codegen(): 'object.TypeInfo_Const.base'
* * * DtoResolveVariable(object.TypeInfo_Const.base)
* * Building default initializer for object.TypeInfo_Const
* * * Creating initializer constant for TypeInfo_Const
* * * * Field priority for base: 1
* * * * DtoConstExpInit(targetType = object.TypeInfo, exp = null)
* * * * * NullExp::toConstElem(type=object.TypeInfo): null
* * * * final initializer: %object.TypeInfo_Const { [19 x i8*]* @_D14TypeInfo_Const6__vtblZ, i8* null, %object.TypeInfo* null }
* * Building vtbl initializer
* * DtoDefineClassInfo(TypeInfo_Const)
* * * Building ClassInfo.interfaces
* ClassDeclaration::codegen: 'object.TypeInfo_a'
* * DtoResolveClass(object.TypeInfo_a): object.d-mixin-1072(1072)
* * * Building type: object.TypeInfo_a
* * * * Building class type object.TypeInfo_a @ object.d-mixin-1072(1072)
* * * * * Instance size: 16
* * * * * class type: %object.TypeInfo_a = type { [19 x i8*]*, i8* }
* * DtoDefineFunction(object.TypeInfo_a.toString): object.d-mixin-1072(1073)
* * * isMember = this is: object.TypeInfo_a
* * * DtoFunctionType(const pure nothrow @safe string())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.TypeInfo_a*)
* * * DtoResolveFunction(object.TypeInfo_a.toString): object.d-mixin-1072(1073)
* * * * DtoDeclareFunction(object.TypeInfo_a.toString): object.d-mixin-1072(1073)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_a
* * * * * DtoFunctionType(const pure nothrow @safe string())
* * * * * func =
declare { i64, i8* } @_D6object10TypeInfo_a8toStringMxFNaNbNfZAya(%object.TypeInfo_a*)
* * * Doing function body for: toString
* * * DtoCreateNestedContext for object.TypeInfo_a.toString
* * * * DtoCreateNestedContextType for object.TypeInfo_a.toString
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1073)
* * * * * StringExp::toElem: "char" @ string
* * * * * * type: [5 x i8]
* * * * * * init: [5 x i8] c"char\00"
* * DtoDefineFunction(object.TypeInfo_a.tsize): object.d-mixin-1072(1075)
* * * isMember = this is: object.TypeInfo_a
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (%object.TypeInfo_a*)
* * * DtoResolveFunction(object.TypeInfo_a.tsize): object.d-mixin-1072(1075)
* * * * DtoDeclareFunction(object.TypeInfo_a.tsize): object.d-mixin-1072(1075)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_a
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * func =
declare i64 @_D6object10TypeInfo_a5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo_a*)
* * * Doing function body for: tsize
* * * DtoCreateNestedContext for object.TypeInfo_a.tsize
* * * * DtoCreateNestedContextType for object.TypeInfo_a.tsize
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1075)
* * * * * IntegerExp::toElem: 1LU @ ulong
* * * * * * IntegerExp::toConstElem: 1LU @ ulong
* * * * * * * value = i64 1
* * Building default initializer for object.TypeInfo_a
* * * Creating initializer constant for TypeInfo_a
* * * * final initializer: %object.TypeInfo_a { [19 x i8*]* @_D10TypeInfo_a6__vtblZ, i8* null }
* * Building vtbl initializer
* * DtoDefineClassInfo(TypeInfo_a)
* * * Building ClassInfo.interfaces
* ClassDeclaration::codegen: 'object.TypeInfo_u'
* * DtoResolveClass(object.TypeInfo_u): object.d-mixin-1072(1076)
* * * Building type: object.TypeInfo_u
* * * * Building class type object.TypeInfo_u @ object.d-mixin-1072(1076)
* * * * * Instance size: 16
* * * * * class type: %object.TypeInfo_u = type { [19 x i8*]*, i8* }
* * DtoDefineFunction(object.TypeInfo_u.toString): object.d-mixin-1072(1077)
* * * isMember = this is: object.TypeInfo_u
* * * DtoFunctionType(const pure nothrow @safe string())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.TypeInfo_u*)
* * * DtoResolveFunction(object.TypeInfo_u.toString): object.d-mixin-1072(1077)
* * * * DtoDeclareFunction(object.TypeInfo_u.toString): object.d-mixin-1072(1077)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_u
* * * * * DtoFunctionType(const pure nothrow @safe string())
* * * * * func =
declare { i64, i8* } @_D6object10TypeInfo_u8toStringMxFNaNbNfZAya(%object.TypeInfo_u*)
* * * Doing function body for: toString
* * * DtoCreateNestedContext for object.TypeInfo_u.toString
* * * * DtoCreateNestedContextType for object.TypeInfo_u.toString
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1077)
* * * * * StringExp::toElem: "wchar" @ string
* * * * * * type: [6 x i8]
* * * * * * init: [6 x i8] c"wchar\00"
* * DtoDefineFunction(object.TypeInfo_u.tsize): object.d-mixin-1072(1079)
* * * isMember = this is: object.TypeInfo_u
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (%object.TypeInfo_u*)
* * * DtoResolveFunction(object.TypeInfo_u.tsize): object.d-mixin-1072(1079)
* * * * DtoDeclareFunction(object.TypeInfo_u.tsize): object.d-mixin-1072(1079)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_u
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * func =
declare i64 @_D6object10TypeInfo_u5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo_u*)
* * * Doing function body for: tsize
* * * DtoCreateNestedContext for object.TypeInfo_u.tsize
* * * * DtoCreateNestedContextType for object.TypeInfo_u.tsize
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1079)
* * * * * IntegerExp::toElem: 2LU @ ulong
* * * * * * IntegerExp::toConstElem: 2LU @ ulong
* * * * * * * value = i64 2
* * Building default initializer for object.TypeInfo_u
* * * Creating initializer constant for TypeInfo_u
* * * * final initializer: %object.TypeInfo_u { [19 x i8*]* @_D10TypeInfo_u6__vtblZ, i8* null }
* * Building vtbl initializer
* * DtoDefineClassInfo(TypeInfo_u)
* * * Building ClassInfo.interfaces
* ClassDeclaration::codegen: 'object.TypeInfo_w'
* * DtoResolveClass(object.TypeInfo_w): object.d-mixin-1072(1080)
* * * Building type: object.TypeInfo_w
* * * * Building class type object.TypeInfo_w @ object.d-mixin-1072(1080)
* * * * * Instance size: 16
* * * * * class type: %object.TypeInfo_w = type { [19 x i8*]*, i8* }
* * DtoDefineFunction(object.TypeInfo_w.toString): object.d-mixin-1072(1081)
* * * isMember = this is: object.TypeInfo_w
* * * DtoFunctionType(const pure nothrow @safe string())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.TypeInfo_w*)
* * * DtoResolveFunction(object.TypeInfo_w.toString): object.d-mixin-1072(1081)
* * * * DtoDeclareFunction(object.TypeInfo_w.toString): object.d-mixin-1072(1081)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_w
* * * * * DtoFunctionType(const pure nothrow @safe string())
* * * * * func =
declare { i64, i8* } @_D6object10TypeInfo_w8toStringMxFNaNbNfZAya(%object.TypeInfo_w*)
* * * Doing function body for: toString
* * * DtoCreateNestedContext for object.TypeInfo_w.toString
* * * * DtoCreateNestedContextType for object.TypeInfo_w.toString
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1081)
* * * * * StringExp::toElem: "dchar" @ string
* * * * * * type: [6 x i8]
* * * * * * init: [6 x i8] c"dchar\00"
* * DtoDefineFunction(object.TypeInfo_w.tsize): object.d-mixin-1072(1083)
* * * isMember = this is: object.TypeInfo_w
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (%object.TypeInfo_w*)
* * * DtoResolveFunction(object.TypeInfo_w.tsize): object.d-mixin-1072(1083)
* * * * DtoDeclareFunction(object.TypeInfo_w.tsize): object.d-mixin-1072(1083)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_w
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * func =
declare i64 @_D6object10TypeInfo_w5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo_w*)
* * * Doing function body for: tsize
* * * DtoCreateNestedContext for object.TypeInfo_w.tsize
* * * * DtoCreateNestedContextType for object.TypeInfo_w.tsize
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1083)
* * * * * IntegerExp::toElem: 4LU @ ulong
* * * * * * IntegerExp::toConstElem: 4LU @ ulong
* * * * * * * value = i64 4
* * Building default initializer for object.TypeInfo_w
* * * Creating initializer constant for TypeInfo_w
* * * * final initializer: %object.TypeInfo_w { [19 x i8*]* @_D10TypeInfo_w6__vtblZ, i8* null }
* * Building vtbl initializer
* * DtoDefineClassInfo(TypeInfo_w)
* * * Building ClassInfo.interfaces
* ClassDeclaration::codegen: 'object.TypeInfo_i'
* * DtoResolveClass(object.TypeInfo_i): object.d-mixin-1072(1084)
* * * Building type: object.TypeInfo_i
* * * * Building class type object.TypeInfo_i @ object.d-mixin-1072(1084)
* * * * * Instance size: 16
* * * * * class type: %object.TypeInfo_i = type { [19 x i8*]*, i8* }
* * DtoDefineFunction(object.TypeInfo_i.toString): object.d-mixin-1072(1085)
* * * isMember = this is: object.TypeInfo_i
* * * DtoFunctionType(const pure nothrow @safe string())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.TypeInfo_i*)
* * * DtoResolveFunction(object.TypeInfo_i.toString): object.d-mixin-1072(1085)
* * * * DtoDeclareFunction(object.TypeInfo_i.toString): object.d-mixin-1072(1085)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_i
* * * * * DtoFunctionType(const pure nothrow @safe string())
* * * * * func =
declare { i64, i8* } @_D6object10TypeInfo_i8toStringMxFNaNbNfZAya(%object.TypeInfo_i*)
* * * Doing function body for: toString
* * * DtoCreateNestedContext for object.TypeInfo_i.toString
* * * * DtoCreateNestedContextType for object.TypeInfo_i.toString
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1085)
* * * * * StringExp::toElem: "int" @ string
* * * * * * type: [4 x i8]
* * * * * * init: [4 x i8] c"int\00"
* * DtoDefineFunction(object.TypeInfo_i.tsize): object.d-mixin-1072(1087)
* * * isMember = this is: object.TypeInfo_i
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (%object.TypeInfo_i*)
* * * DtoResolveFunction(object.TypeInfo_i.tsize): object.d-mixin-1072(1087)
* * * * DtoDeclareFunction(object.TypeInfo_i.tsize): object.d-mixin-1072(1087)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_i
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * func =
declare i64 @_D6object10TypeInfo_i5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo_i*)
* * * Doing function body for: tsize
* * * DtoCreateNestedContext for object.TypeInfo_i.tsize
* * * * DtoCreateNestedContextType for object.TypeInfo_i.tsize
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1087)
* * * * * IntegerExp::toElem: 4LU @ ulong
* * * * * * IntegerExp::toConstElem: 4LU @ ulong
* * * * * * * value = i64 4
* * Building default initializer for object.TypeInfo_i
* * * Creating initializer constant for TypeInfo_i
* * * * final initializer: %object.TypeInfo_i { [19 x i8*]* @_D10TypeInfo_i6__vtblZ, i8* null }
* * Building vtbl initializer
* * DtoDefineClassInfo(TypeInfo_i)
* * * Building ClassInfo.interfaces
* ClassDeclaration::codegen: 'object.TypeInfo_k'
* * DtoResolveClass(object.TypeInfo_k): object.d-mixin-1072(1088)
* * * Building type: object.TypeInfo_k
* * * * Building class type object.TypeInfo_k @ object.d-mixin-1072(1088)
* * * * * Instance size: 16
* * * * * class type: %object.TypeInfo_k = type { [19 x i8*]*, i8* }
* * DtoDefineFunction(object.TypeInfo_k.toString): object.d-mixin-1072(1089)
* * * isMember = this is: object.TypeInfo_k
* * * DtoFunctionType(const pure nothrow @safe string())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.TypeInfo_k*)
* * * DtoResolveFunction(object.TypeInfo_k.toString): object.d-mixin-1072(1089)
* * * * DtoDeclareFunction(object.TypeInfo_k.toString): object.d-mixin-1072(1089)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_k
* * * * * DtoFunctionType(const pure nothrow @safe string())
* * * * * func =
declare { i64, i8* } @_D6object10TypeInfo_k8toStringMxFNaNbNfZAya(%object.TypeInfo_k*)
* * * Doing function body for: toString
* * * DtoCreateNestedContext for object.TypeInfo_k.toString
* * * * DtoCreateNestedContextType for object.TypeInfo_k.toString
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1089)
* * * * * StringExp::toElem: "uint" @ string
* * * * * * type: [5 x i8]
* * * * * * init: [5 x i8] c"uint\00"
* * DtoDefineFunction(object.TypeInfo_k.tsize): object.d-mixin-1072(1091)
* * * isMember = this is: object.TypeInfo_k
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (%object.TypeInfo_k*)
* * * DtoResolveFunction(object.TypeInfo_k.tsize): object.d-mixin-1072(1091)
* * * * DtoDeclareFunction(object.TypeInfo_k.tsize): object.d-mixin-1072(1091)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_k
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * func =
declare i64 @_D6object10TypeInfo_k5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo_k*)
* * * Doing function body for: tsize
* * * DtoCreateNestedContext for object.TypeInfo_k.tsize
* * * * DtoCreateNestedContextType for object.TypeInfo_k.tsize
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1091)
* * * * * IntegerExp::toElem: 4LU @ ulong
* * * * * * IntegerExp::toConstElem: 4LU @ ulong
* * * * * * * value = i64 4
* * Building default initializer for object.TypeInfo_k
* * * Creating initializer constant for TypeInfo_k
* * * * final initializer: %object.TypeInfo_k { [19 x i8*]* @_D10TypeInfo_k6__vtblZ, i8* null }
* * Building vtbl initializer
* * DtoDefineClassInfo(TypeInfo_k)
* * * Building ClassInfo.interfaces
* ClassDeclaration::codegen: 'object.TypeInfo_s'
* * DtoResolveClass(object.TypeInfo_s): object.d-mixin-1072(1092)
* * * Building type: object.TypeInfo_s
* * * * Building class type object.TypeInfo_s @ object.d-mixin-1072(1092)
* * * * * Instance size: 16
* * * * * class type: %object.TypeInfo_s = type { [19 x i8*]*, i8* }
* * DtoDefineFunction(object.TypeInfo_s.toString): object.d-mixin-1072(1093)
* * * isMember = this is: object.TypeInfo_s
* * * DtoFunctionType(const pure nothrow @safe string())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.TypeInfo_s*)
* * * DtoResolveFunction(object.TypeInfo_s.toString): object.d-mixin-1072(1093)
* * * * DtoDeclareFunction(object.TypeInfo_s.toString): object.d-mixin-1072(1093)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_s
* * * * * DtoFunctionType(const pure nothrow @safe string())
* * * * * func =
declare { i64, i8* } @_D6object10TypeInfo_s8toStringMxFNaNbNfZAya(%object.TypeInfo_s*)
* * * Doing function body for: toString
* * * DtoCreateNestedContext for object.TypeInfo_s.toString
* * * * DtoCreateNestedContextType for object.TypeInfo_s.toString
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1093)
* * * * * StringExp::toElem: "short" @ string
* * * * * * type: [6 x i8]
* * * * * * init: [6 x i8] c"short\00"
* * DtoDefineFunction(object.TypeInfo_s.tsize): object.d-mixin-1072(1095)
* * * isMember = this is: object.TypeInfo_s
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (%object.TypeInfo_s*)
* * * DtoResolveFunction(object.TypeInfo_s.tsize): object.d-mixin-1072(1095)
* * * * DtoDeclareFunction(object.TypeInfo_s.tsize): object.d-mixin-1072(1095)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_s
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * func =
declare i64 @_D6object10TypeInfo_s5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo_s*)
* * * Doing function body for: tsize
* * * DtoCreateNestedContext for object.TypeInfo_s.tsize
* * * * DtoCreateNestedContextType for object.TypeInfo_s.tsize
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1095)
* * * * * IntegerExp::toElem: 2LU @ ulong
* * * * * * IntegerExp::toConstElem: 2LU @ ulong
* * * * * * * value = i64 2
* * Building default initializer for object.TypeInfo_s
* * * Creating initializer constant for TypeInfo_s
* * * * final initializer: %object.TypeInfo_s { [19 x i8*]* @_D10TypeInfo_s6__vtblZ, i8* null }
* * Building vtbl initializer
* * DtoDefineClassInfo(TypeInfo_s)
* * * Building ClassInfo.interfaces
* ClassDeclaration::codegen: 'object.TypeInfo_t'
* * DtoResolveClass(object.TypeInfo_t): object.d-mixin-1072(1096)
* * * Building type: object.TypeInfo_t
* * * * Building class type object.TypeInfo_t @ object.d-mixin-1072(1096)
* * * * * Instance size: 16
* * * * * class type: %object.TypeInfo_t = type { [19 x i8*]*, i8* }
* * DtoDefineFunction(object.TypeInfo_t.toString): object.d-mixin-1072(1097)
* * * isMember = this is: object.TypeInfo_t
* * * DtoFunctionType(const pure nothrow @safe string())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.TypeInfo_t*)
* * * DtoResolveFunction(object.TypeInfo_t.toString): object.d-mixin-1072(1097)
* * * * DtoDeclareFunction(object.TypeInfo_t.toString): object.d-mixin-1072(1097)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_t
* * * * * DtoFunctionType(const pure nothrow @safe string())
* * * * * func =
declare { i64, i8* } @_D6object10TypeInfo_t8toStringMxFNaNbNfZAya(%object.TypeInfo_t*)
* * * Doing function body for: toString
* * * DtoCreateNestedContext for object.TypeInfo_t.toString
* * * * DtoCreateNestedContextType for object.TypeInfo_t.toString
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1097)
* * * * * StringExp::toElem: "ushort" @ string
* * * * * * type: [7 x i8]
* * * * * * init: [7 x i8] c"ushort\00"
* * DtoDefineFunction(object.TypeInfo_t.tsize): object.d-mixin-1072(1099)
* * * isMember = this is: object.TypeInfo_t
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (%object.TypeInfo_t*)
* * * DtoResolveFunction(object.TypeInfo_t.tsize): object.d-mixin-1072(1099)
* * * * DtoDeclareFunction(object.TypeInfo_t.tsize): object.d-mixin-1072(1099)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_t
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * func =
declare i64 @_D6object10TypeInfo_t5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo_t*)
* * * Doing function body for: tsize
* * * DtoCreateNestedContext for object.TypeInfo_t.tsize
* * * * DtoCreateNestedContextType for object.TypeInfo_t.tsize
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1099)
* * * * * IntegerExp::toElem: 2LU @ ulong
* * * * * * IntegerExp::toConstElem: 2LU @ ulong
* * * * * * * value = i64 2
* * Building default initializer for object.TypeInfo_t
* * * Creating initializer constant for TypeInfo_t
* * * * final initializer: %object.TypeInfo_t { [19 x i8*]* @_D10TypeInfo_t6__vtblZ, i8* null }
* * Building vtbl initializer
* * DtoDefineClassInfo(TypeInfo_t)
* * * Building ClassInfo.interfaces
* ClassDeclaration::codegen: 'object.TypeInfo_g'
* * DtoResolveClass(object.TypeInfo_g): object.d-mixin-1072(1100)
* * * Building type: object.TypeInfo_g
* * * * Building class type object.TypeInfo_g @ object.d-mixin-1072(1100)
* * * * * Instance size: 16
* * * * * class type: %object.TypeInfo_g = type { [19 x i8*]*, i8* }
* * DtoDefineFunction(object.TypeInfo_g.toString): object.d-mixin-1072(1101)
* * * isMember = this is: object.TypeInfo_g
* * * DtoFunctionType(const pure nothrow @safe string())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.TypeInfo_g*)
* * * DtoResolveFunction(object.TypeInfo_g.toString): object.d-mixin-1072(1101)
* * * * DtoDeclareFunction(object.TypeInfo_g.toString): object.d-mixin-1072(1101)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_g
* * * * * DtoFunctionType(const pure nothrow @safe string())
* * * * * func =
declare { i64, i8* } @_D6object10TypeInfo_g8toStringMxFNaNbNfZAya(%object.TypeInfo_g*)
* * * Doing function body for: toString
* * * DtoCreateNestedContext for object.TypeInfo_g.toString
* * * * DtoCreateNestedContextType for object.TypeInfo_g.toString
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1101)
* * * * * StringExp::toElem: "byte" @ string
* * * * * * type: [5 x i8]
* * * * * * init: [5 x i8] c"byte\00"
* * DtoDefineFunction(object.TypeInfo_g.tsize): object.d-mixin-1072(1103)
* * * isMember = this is: object.TypeInfo_g
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (%object.TypeInfo_g*)
* * * DtoResolveFunction(object.TypeInfo_g.tsize): object.d-mixin-1072(1103)
* * * * DtoDeclareFunction(object.TypeInfo_g.tsize): object.d-mixin-1072(1103)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_g
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * func =
declare i64 @_D6object10TypeInfo_g5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo_g*)
* * * Doing function body for: tsize
* * * DtoCreateNestedContext for object.TypeInfo_g.tsize
* * * * DtoCreateNestedContextType for object.TypeInfo_g.tsize
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1103)
* * * * * IntegerExp::toElem: 1LU @ ulong
* * * * * * IntegerExp::toConstElem: 1LU @ ulong
* * * * * * * value = i64 1
* * Building default initializer for object.TypeInfo_g
* * * Creating initializer constant for TypeInfo_g
* * * * final initializer: %object.TypeInfo_g { [19 x i8*]* @_D10TypeInfo_g6__vtblZ, i8* null }
* * Building vtbl initializer
* * DtoDefineClassInfo(TypeInfo_g)
* * * Building ClassInfo.interfaces
* ClassDeclaration::codegen: 'object.TypeInfo_h'
* * DtoResolveClass(object.TypeInfo_h): object.d-mixin-1072(1104)
* * * Building type: object.TypeInfo_h
* * * * Building class type object.TypeInfo_h @ object.d-mixin-1072(1104)
* * * * * Instance size: 16
* * * * * class type: %object.TypeInfo_h = type { [19 x i8*]*, i8* }
* * DtoDefineFunction(object.TypeInfo_h.toString): object.d-mixin-1072(1105)
* * * isMember = this is: object.TypeInfo_h
* * * DtoFunctionType(const pure nothrow @safe string())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.TypeInfo_h*)
* * * DtoResolveFunction(object.TypeInfo_h.toString): object.d-mixin-1072(1105)
* * * * DtoDeclareFunction(object.TypeInfo_h.toString): object.d-mixin-1072(1105)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_h
* * * * * DtoFunctionType(const pure nothrow @safe string())
* * * * * func =
declare { i64, i8* } @_D6object10TypeInfo_h8toStringMxFNaNbNfZAya(%object.TypeInfo_h*)
* * * Doing function body for: toString
* * * DtoCreateNestedContext for object.TypeInfo_h.toString
* * * * DtoCreateNestedContextType for object.TypeInfo_h.toString
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1105)
* * * * * StringExp::toElem: "ubyte" @ string
* * * * * * type: [6 x i8]
* * * * * * init: [6 x i8] c"ubyte\00"
* * DtoDefineFunction(object.TypeInfo_h.tsize): object.d-mixin-1072(1107)
* * * isMember = this is: object.TypeInfo_h
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (%object.TypeInfo_h*)
* * * DtoResolveFunction(object.TypeInfo_h.tsize): object.d-mixin-1072(1107)
* * * * DtoDeclareFunction(object.TypeInfo_h.tsize): object.d-mixin-1072(1107)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_h
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * func =
declare i64 @_D6object10TypeInfo_h5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo_h*)
* * * Doing function body for: tsize
* * * DtoCreateNestedContext for object.TypeInfo_h.tsize
* * * * DtoCreateNestedContextType for object.TypeInfo_h.tsize
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1107)
* * * * * IntegerExp::toElem: 1LU @ ulong
* * * * * * IntegerExp::toConstElem: 1LU @ ulong
* * * * * * * value = i64 1
* * Building default initializer for object.TypeInfo_h
* * * Creating initializer constant for TypeInfo_h
* * * * final initializer: %object.TypeInfo_h { [19 x i8*]* @_D10TypeInfo_h6__vtblZ, i8* null }
* * Building vtbl initializer
* * DtoDefineClassInfo(TypeInfo_h)
* * * Building ClassInfo.interfaces
* ClassDeclaration::codegen: 'object.TypeInfo_l'
* * DtoResolveClass(object.TypeInfo_l): object.d-mixin-1072(1108)
* * * Building type: object.TypeInfo_l
* * * * Building class type object.TypeInfo_l @ object.d-mixin-1072(1108)
* * * * * Instance size: 16
* * * * * class type: %object.TypeInfo_l = type { [19 x i8*]*, i8* }
* * DtoDefineFunction(object.TypeInfo_l.toString): object.d-mixin-1072(1109)
* * * isMember = this is: object.TypeInfo_l
* * * DtoFunctionType(const pure nothrow @safe string())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.TypeInfo_l*)
* * * DtoResolveFunction(object.TypeInfo_l.toString): object.d-mixin-1072(1109)
* * * * DtoDeclareFunction(object.TypeInfo_l.toString): object.d-mixin-1072(1109)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_l
* * * * * DtoFunctionType(const pure nothrow @safe string())
* * * * * func =
declare { i64, i8* } @_D6object10TypeInfo_l8toStringMxFNaNbNfZAya(%object.TypeInfo_l*)
* * * Doing function body for: toString
* * * DtoCreateNestedContext for object.TypeInfo_l.toString
* * * * DtoCreateNestedContextType for object.TypeInfo_l.toString
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1109)
* * * * * StringExp::toElem: "long" @ string
* * * * * * type: [5 x i8]
* * * * * * init: [5 x i8] c"long\00"
* * DtoDefineFunction(object.TypeInfo_l.tsize): object.d-mixin-1072(1111)
* * * isMember = this is: object.TypeInfo_l
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (%object.TypeInfo_l*)
* * * DtoResolveFunction(object.TypeInfo_l.tsize): object.d-mixin-1072(1111)
* * * * DtoDeclareFunction(object.TypeInfo_l.tsize): object.d-mixin-1072(1111)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_l
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * func =
declare i64 @_D6object10TypeInfo_l5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo_l*)
* * * Doing function body for: tsize
* * * DtoCreateNestedContext for object.TypeInfo_l.tsize
* * * * DtoCreateNestedContextType for object.TypeInfo_l.tsize
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1111)
* * * * * IntegerExp::toElem: 8LU @ ulong
* * * * * * IntegerExp::toConstElem: 8LU @ ulong
* * * * * * * value = i64 8
* * Building default initializer for object.TypeInfo_l
* * * Creating initializer constant for TypeInfo_l
* * * * final initializer: %object.TypeInfo_l { [19 x i8*]* @_D10TypeInfo_l6__vtblZ, i8* null }
* * Building vtbl initializer
* * DtoDefineClassInfo(TypeInfo_l)
* * * Building ClassInfo.interfaces
* ClassDeclaration::codegen: 'object.TypeInfo_m'
* * DtoResolveClass(object.TypeInfo_m): object.d-mixin-1072(1112)
* * * Building type: object.TypeInfo_m
* * * * Building class type object.TypeInfo_m @ object.d-mixin-1072(1112)
* * * * * Instance size: 16
* * * * * class type: %object.TypeInfo_m = type { [19 x i8*]*, i8* }
* * DtoDefineFunction(object.TypeInfo_m.toString): object.d-mixin-1072(1113)
* * * isMember = this is: object.TypeInfo_m
* * * DtoFunctionType(const pure nothrow @safe string())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: { i64, i8* } (%object.TypeInfo_m*)
* * * DtoResolveFunction(object.TypeInfo_m.toString): object.d-mixin-1072(1113)
* * * * DtoDeclareFunction(object.TypeInfo_m.toString): object.d-mixin-1072(1113)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_m
* * * * * DtoFunctionType(const pure nothrow @safe string())
* * * * * func =
declare { i64, i8* } @_D6object10TypeInfo_m8toStringMxFNaNbNfZAya(%object.TypeInfo_m*)
* * * Doing function body for: toString
* * * DtoCreateNestedContext for object.TypeInfo_m.toString
* * * * DtoCreateNestedContextType for object.TypeInfo_m.toString
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1113)
* * * * * StringExp::toElem: "ulong" @ string
* * * * * * type: [6 x i8]
* * * * * * init: [6 x i8] c"ulong\00"
* * DtoDefineFunction(object.TypeInfo_m.tsize): object.d-mixin-1072(1115)
* * * isMember = this is: object.TypeInfo_m
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * x86-64 ABI: Transforming return type
* * * * x86-64 ABI: Transforming argument types
* * * * Final function type: i64 (%object.TypeInfo_m*)
* * * DtoResolveFunction(object.TypeInfo_m.tsize): object.d-mixin-1072(1115)
* * * * DtoDeclareFunction(object.TypeInfo_m.tsize): object.d-mixin-1072(1115)
* * * * * Enter defineAsExternallyAvailable
* * * * * * Cross-module inlining fully disabled.
* * * * * isMember = this is: object.TypeInfo_m
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong())
* * * * * func =
declare i64 @_D6object10TypeInfo_m5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo_m*)
* * * Doing function body for: tsize
* * * DtoCreateNestedContext for object.TypeInfo_m.tsize
* * * * DtoCreateNestedContextType for object.TypeInfo_m.tsize
* * * CompoundStatement::toIR():
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1115)
* * * * * IntegerExp::toElem: 8LU @ ulong
* * * * * * IntegerExp::toConstElem: 8LU @ ulong
* * * * * * * value = i64 8
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment