---
source: crates/mun_codegen/src/test.rs
assertion_line: 1080
expression: "\n struct Num {\n value: i64,\n }\n\n pub fn foo(b: i64) {\n Num { value: b }.value;\n }\n\n pub fn bar(b: i64) {\n { let a = Num { value: b }; a}.value;\n }\n "
---
; == FILE IR (mod) =====================================
; ModuleID = 'mod'
source_filename = "mod"
%DispatchTable = type { i8** (i8*, i8*)* }
%Num = type { i64 }
@allocatorHandle = external global i8*
@dispatchTable = external global %DispatchTable
@global_type_lookup_table = external global [2 x i64*]
define void @foo(i64 %0) {
body:
%init = insertvalue %Num undef, i64 %0, 0
%new_ptr = load i8** (i8*, i8*)*, i8** (i8*, i8*)** getelementptr inbounds (%DispatchTable, %DispatchTable* @dispatchTable, i32 0, i32 0), align 8
%Num_ptr = load i64*, i64** getelementptr inbounds ([2 x i64*], [2 x i64*]* @global_type_lookup_table, i64 0, i64 0), align 8
%type_info_ptr_to_i8_ptr = bitcast i64* %Num_ptr to i8*
%allocator_handle = load i8*, i8** @allocatorHandle, align 8
%ref = call i8** %new_ptr(i8* %type_info_ptr_to_i8_ptr, i8* %allocator_handle)
%"ref<Num>" = bitcast i8** %ref to %Num**
%"ref<Num>->data" = load %Num*, %Num** %"ref<Num>", align 8
store %Num %init, %Num* %"ref<Num>->data", align 4
%"ref<Num>->data2" = load %Num*, %Num** %"ref<Num>", align 8
%deref = load %Num, %Num* %"ref<Num>->data2", align 4
ret void
}
define void @bar(i64 %0) {
body:
%init = insertvalue %Num undef, i64 %0, 0
%new_ptr = load i8** (i8*, i8*)*, i8** (i8*, i8*)** getelementptr inbounds (%DispatchTable, %DispatchTable* @dispatchTable, i32 0, i32 0), align 8
%Num_ptr = load i64*, i64** getelementptr inbounds ([2 x i64*], [2 x i64*]* @global_type_lookup_table, i64 0, i64 0), align 8
%type_info_ptr_to_i8_ptr = bitcast i64* %Num_ptr to i8*
%allocator_handle = load i8*, i8** @allocatorHandle, align 8
%ref = call i8** %new_ptr(i8* %type_info_ptr_to_i8_ptr, i8* %allocator_handle)
%"ref<Num>" = bitcast i8** %ref to %Num**
%"ref<Num>->data" = load %Num*, %Num** %"ref<Num>", align 8
store %Num %init, %Num* %"ref<Num>->data", align 4
%"a2->data" = load %Num*, %Num** %"ref<Num>", align 8
%deref = load %Num, %Num* %"a2->data", align 4
ret void
}
; == GROUP IR (mod) ====================================
; ModuleID = 'group_name'
source_filename = "group_name"
%DispatchTable = type { i8** (i8*, i8*)* }
@dispatchTable = global %DispatchTable zeroinitializer
@global_type_lookup_table = global [2 x i64*] zeroinitializer
@allocatorHandle = unnamed_addr global i8* null