; ModuleID = 'LFortran'
source_filename = "LFortran"
target datalayout = "..."

%module_call_subroutine_without_type_01.mytype_class = type <{ i32 (...)**, %module_call_subroutine_without_type_01.mytype* }>
%module_call_subroutine_without_type_01.mytype = type { float }
%string_descriptor = type <{ i8*, i64 }>

@__module___lcompilers_created__nested_context__get_i__self = global %module_call_subroutine_without_type_01.mytype_class* null
@0 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@serialization_info = private unnamed_addr constant [12 x i8] c"S-DESC-4,R4\00", align 1
@string_const_data = private constant [4 x i8] c"r = "
@string_const = private global %string_descriptor <{ i8* getelementptr inbounds ([4 x i8], [4 x i8]* @string_const_data, i32 0, i32 0), i64 4 }>
@1 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@"ERROR STOP" = private unnamed_addr constant [11 x i8] c"ERROR STOP\00", align 1
@2 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@3 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@_Name_mytype = private unnamed_addr constant [7 x i8] c"mytype\00", align 1
@_Type_Info_mytype = linkonce_odr unnamed_addr constant { i8*, i8*, i8* } { i8* getelementptr inbounds ([7 x i8], [7 x i8]* @_Name_mytype, i32 0, i32 0), i8* inttoptr (i64 4 to i8*), i8* null }, align 8
@_VTable_mytype = linkonce_odr unnamed_addr constant { [5 x i8*] } { [5 x i8*] [i8* null, i8* bitcast ({ i8*, i8*, i8* }* @_Type_Info_mytype to i8*), i8* bitcast (void (i8*, i8*)* @_copy_module_call_subroutine_without_type_01_mytype to i8*), i8* bitcast (void (i8**)* @_allocate_struct_module_call_subroutine_without_type_01_mytype to i8*), i8* bitcast (void (%module_call_subroutine_without_type_01.mytype_class*)* @__module_module_call_subroutine_without_type_01_get_i to i8*)] }, align 8
@4 = private unnamed_addr constant [4 x i8] c"obj\00", align 1
@5 = private unnamed_addr constant [63 x i8] c"tests/../integration_tests/call_subroutine_without_type_01.f90\00", align 1
@6 = private unnamed_addr constant [22 x i8] c"'%s' unallocated here\00", align 1
@7 = private unnamed_addr constant [52 x i8] c"Tried to access member of unallocated variable '%s'\00", align 1
@8 = private unnamed_addr constant [15 x i8] c"1_mytype_get_i\00", align 1
@9 = private unnamed_addr constant [63 x i8] c"tests/../integration_tests/call_subroutine_without_type_01.f90\00", align 1
@10 = private unnamed_addr constant [20 x i8] c"This is unallocated\00", align 1
@11 = private unnamed_addr constant [45 x i8] c"Argument %d of subroutine %s is unallocated.\00", align 1

define void @__module_module_call_subroutine_without_type_01_get_i(%module_call_subroutine_without_type_01.mytype_class* %self) {
.entry:
  %0 = load %module_call_subroutine_without_type_01.mytype_class*, %module_call_subroutine_without_type_01.mytype_class** @__module___lcompilers_created__nested_context__get_i__self, align 8
  %1 = icmp eq %module_call_subroutine_without_type_01.mytype_class* %0, null
  br i1 %1, label %then, label %else

then:                                             ; preds = %.entry
  %2 = call i8* @_lfortran_get_default_allocator()
  %3 = call i8* @_lfortran_malloc_alloc(i8* %2, i64 16)
  call void @llvm.memset.p0i8.i32(i8* %3, i8 0, i32 16, i1 false)
  %4 = bitcast i8* %3 to %module_call_subroutine_without_type_01.mytype_class*
  store %module_call_subroutine_without_type_01.mytype_class* %4, %module_call_subroutine_without_type_01.mytype_class** @__module___lcompilers_created__nested_context__get_i__self, align 8
  br label %ifcont

else:                                             ; preds = %.entry
  br label %ifcont

ifcont:                                           ; preds = %else, %then
  %5 = load %module_call_subroutine_without_type_01.mytype_class*, %module_call_subroutine_without_type_01.mytype_class** @__module___lcompilers_created__nested_context__get_i__self, align 8
  %6 = bitcast %module_call_subroutine_without_type_01.mytype_class* %5 to i8*
  %7 = bitcast %module_call_subroutine_without_type_01.mytype_class* %self to i8*
  call void @llvm.memcpy.p0i8.p0i8.i32(i8* %6, i8* %7, i32 16, i1 false)
  call void @get_i.__module_module_call_subroutine_without_type_01_get_r()
  br label %return

return:                                           ; preds = %ifcont
  br label %FINALIZE_SYMTABLE_get_i

FINALIZE_SYMTABLE_get_i:                          ; preds = %return
  ret void
}

define void @get_i.__module_module_call_subroutine_without_type_01_get_r() {
.entry:
  %0 = call i8* @_lfortran_get_default_allocator()
  %1 = alloca i64, align 8
  %2 = load %module_call_subroutine_without_type_01.mytype_class*, %module_call_subroutine_without_type_01.mytype_class** @__module___lcompilers_created__nested_context__get_i__self, align 8
  %3 = getelementptr %module_call_subroutine_without_type_01.mytype_class, %module_call_subroutine_without_type_01.mytype_class* %2, i32 0, i32 1
  %4 = load %module_call_subroutine_without_type_01.mytype*, %module_call_subroutine_without_type_01.mytype** %3, align 8
  %5 = getelementptr %module_call_subroutine_without_type_01.mytype, %module_call_subroutine_without_type_01.mytype* %4, i32 0, i32 0
  %6 = load float, float* %5, align 4
  %7 = alloca float, align 4
  store float %6, float* %7, align 4
  %8 = call i8* (i8*, i8*, i64, i8*, i64*, i32, i32, i32, i32, i32, ...) @_lcompilers_string_format_fortran(i8* %0, i8* null, i64 0, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @serialization_info, i32 0, i32 0), i64* %1, i32 0, i32 0, i32 0, i32 0, i32 0, %string_descriptor* @string_const, float* %7)
  %9 = load i64, i64* %1, align 8
  %stringFormat_desc = alloca %string_descriptor, align 8
  %10 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc, i32 0, i32 0
  store i8* %8, i8** %10, align 8
  %11 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc, i32 0, i32 1
  store i64 %9, i64* %11, align 8
  %12 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc, i32 0, i32 0
  %13 = load i8*, i8** %12, align 8
  %14 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc, i32 0, i32 1
  %15 = load i64, i64* %14, align 8
  %16 = trunc i64 %15 to i32
  call void @_lfortran_printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @1, i32 0, i32 0), i8* %13, i32 %16, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @0, i32 0, i32 0), i32 1)
  %17 = icmp eq i8* %8, null
  br i1 %17, label %free_done, label %free_nonnull

free_nonnull:                                     ; preds = %.entry
  call void @_lfortran_free_alloc(i8* %0, i8* %8)
  br label %free_done

free_done:                                        ; preds = %free_nonnull, %.entry
  %18 = load %module_call_subroutine_without_type_01.mytype_class*, %module_call_subroutine_without_type_01.mytype_class** @__module___lcompilers_created__nested_context__get_i__self, align 8
  %19 = getelementptr %module_call_subroutine_without_type_01.mytype_class, %module_call_subroutine_without_type_01.mytype_class* %18, i32 0, i32 1
  %20 = load %module_call_subroutine_without_type_01.mytype*, %module_call_subroutine_without_type_01.mytype** %19, align 8
  %21 = getelementptr %module_call_subroutine_without_type_01.mytype, %module_call_subroutine_without_type_01.mytype* %20, i32 0, i32 0
  %22 = load float, float* %21, align 4
  %23 = fcmp une float %22, 1.000000e+00
  br i1 %23, label %then, label %else

then:                                             ; preds = %free_done
  call void (i8*, ...) @_lcompilers_print_error(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @3, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @"ERROR STOP", i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @2, i32 0, i32 0))
  call void @_lfortran_internal_alloc_finalize()
  call void @exit(i32 1)
  br label %ifcont

else:                                             ; preds = %free_done
  br label %ifcont

ifcont:                                           ; preds = %else, %then
  br label %return

return:                                           ; preds = %ifcont
  br label %FINALIZE_SYMTABLE_get_r

FINALIZE_SYMTABLE_get_r:                          ; preds = %return
  ret void
}

declare i8* @_lcompilers_string_format_fortran(i8*, i8*, i64, i8*, i64*, i32, i32, i32, i32, i32, ...)

declare i8* @_lfortran_get_default_allocator()

declare void @_lfortran_printf(i8*, i8*, i32, i8*, i32)

declare void @_lfortran_free_alloc(i8*, i8*)

declare void @_lcompilers_print_error(i8*, ...)

declare void @_lfortran_internal_alloc_finalize()

declare void @exit(i32)

declare i8* @_lfortran_malloc_alloc(i8*, i64)

; Function Attrs: argmemonly nounwind willreturn writeonly
declare void @llvm.memset.p0i8.i32(i8* nocapture writeonly, i8, i32, i1 immarg) #0

; Function Attrs: argmemonly nounwind willreturn
declare void @llvm.memcpy.p0i8.p0i8.i32(i8* noalias nocapture writeonly, i8* noalias nocapture readonly, i32, i1 immarg) #1

define i32 @main(i32 %0, i8** %1) {
.entry:
  %2 = call i8* @_lfortran_get_default_allocator()
  call void @_lpython_call_initial_functions(i32 %0, i8** %1)
  %obj = alloca %module_call_subroutine_without_type_01.mytype_class*, align 8
  store %module_call_subroutine_without_type_01.mytype_class* null, %module_call_subroutine_without_type_01.mytype_class** %obj, align 8
  %3 = call i8* @_lfortran_get_default_allocator()
  %4 = call i8* @_lfortran_malloc_alloc(i8* %3, i64 4)
  call void @llvm.memset.p0i8.i32(i8* %4, i8 0, i32 4, i1 false)
  %5 = call i8* @_lfortran_get_default_allocator()
  %6 = call i8* @_lfortran_malloc_alloc(i8* %5, i64 16)
  call void @llvm.memset.p0i8.i32(i8* %6, i8 0, i32 16, i1 false)
  %7 = bitcast i8* %6 to %module_call_subroutine_without_type_01.mytype_class*
  store %module_call_subroutine_without_type_01.mytype_class* %7, %module_call_subroutine_without_type_01.mytype_class** %obj, align 8
  %8 = load %module_call_subroutine_without_type_01.mytype_class*, %module_call_subroutine_without_type_01.mytype_class** %obj, align 8
  %9 = getelementptr %module_call_subroutine_without_type_01.mytype_class, %module_call_subroutine_without_type_01.mytype_class* %8, i32 0, i32 1
  %10 = bitcast i8* %4 to %module_call_subroutine_without_type_01.mytype*
  store %module_call_subroutine_without_type_01.mytype* %10, %module_call_subroutine_without_type_01.mytype** %9, align 8
  %11 = load %module_call_subroutine_without_type_01.mytype*, %module_call_subroutine_without_type_01.mytype** %9, align 8
  %12 = bitcast %module_call_subroutine_without_type_01.mytype_class* %7 to i32 (...)***
  store i32 (...)** bitcast (i8** getelementptr inbounds ({ [5 x i8*] }, { [5 x i8*] }* @_VTable_mytype, i32 0, i32 0, i32 2) to i32 (...)**), i32 (...)*** %12, align 8
  %13 = getelementptr %module_call_subroutine_without_type_01.mytype, %module_call_subroutine_without_type_01.mytype* %11, i32 0, i32 0
  %14 = load %module_call_subroutine_without_type_01.mytype_class*, %module_call_subroutine_without_type_01.mytype_class** %obj, align 8
  %15 = ptrtoint %module_call_subroutine_without_type_01.mytype_class* %14 to i64
  %16 = icmp eq i64 %15, 0
  br i1 %16, label %then, label %ifcont

then:                                             ; preds = %.entry
  %17 = alloca [1 x { i1, i8*, { i8*, i32, i32, i32, i32 }*, i32 }], align 8
  %18 = alloca [1 x { i8*, i32, i32, i32, i32 }], align 8
  %19 = getelementptr inbounds [1 x { i8*, i32, i32, i32, i32 }], [1 x { i8*, i32, i32, i32, i32 }]* %18, i32 0, i32 0
  %20 = getelementptr { i8*, i32, i32, i32, i32 }, { i8*, i32, i32, i32, i32 }* %19, i32 0, i32 0
  store i8* getelementptr inbounds ([63 x i8], [63 x i8]* @5, i32 0, i32 0), i8** %20, align 8
  %21 = getelementptr { i8*, i32, i32, i32, i32 }, { i8*, i32, i32, i32, i32 }* %19, i32 0, i32 1
  store i32 27, i32* %21, align 4
  %22 = getelementptr { i8*, i32, i32, i32, i32 }, { i8*, i32, i32, i32, i32 }* %19, i32 0, i32 2
  store i32 5, i32* %22, align 4
  %23 = getelementptr { i8*, i32, i32, i32, i32 }, { i8*, i32, i32, i32, i32 }* %19, i32 0, i32 3
  store i32 27, i32* %23, align 4
  %24 = getelementptr { i8*, i32, i32, i32, i32 }, { i8*, i32, i32, i32, i32 }* %19, i32 0, i32 4
  store i32 9, i32* %24, align 4
  %25 = call i8* (i8*, i8*, ...) @_lcompilers_snprintf_alloc(i8* %2, i8* getelementptr inbounds ([22 x i8], [22 x i8]* @6, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @4, i32 0, i32 0))
  %26 = getelementptr inbounds [1 x { i1, i8*, { i8*, i32, i32, i32, i32 }*, i32 }], [1 x { i1, i8*, { i8*, i32, i32, i32, i32 }*, i32 }]* %17, i32 0, i32 0
  %27 = getelementptr [1 x { i8*, i32, i32, i32, i32 }], [1 x { i8*, i32, i32, i32, i32 }]* %18, i32 0, i32 0
  %28 = getelementptr { i1, i8*, { i8*, i32, i32, i32, i32 }*, i32 }, { i1, i8*, { i8*, i32, i32, i32, i32 }*, i32 }* %26, i32 0, i32 2
  %29 = getelementptr { i1, i8*, { i8*, i32, i32, i32, i32 }*, i32 }, { i1, i8*, { i8*, i32, i32, i32, i32 }*, i32 }* %26, i32 0, i32 0
  store i1 true, i1* %29, align 1
  %30 = getelementptr { i1, i8*, { i8*, i32, i32, i32, i32 }*, i32 }, { i1, i8*, { i8*, i32, i32, i32, i32 }*, i32 }* %26, i32 0, i32 1
  store i8* %25, i8** %30, align 8
  store { i8*, i32, i32, i32, i32 }* %27, { i8*, i32, i32, i32, i32 }** %28, align 8
  %31 = getelementptr { i1, i8*, { i8*, i32, i32, i32, i32 }*, i32 }, { i1, i8*, { i8*, i32, i32, i32, i32 }*, i32 }* %26, i32 0, i32 3
  store i32 1, i32* %31, align 4
  %32 = getelementptr [1 x { i1, i8*, { i8*, i32, i32, i32, i32 }*, i32 }], [1 x { i1, i8*, { i8*, i32, i32, i32, i32 }*, i32 }]* %17, i32 0, i32 0
  call void (i8*, { i1, i8*, { i8*, i32, i32, i32, i32 }*, i32 }*, i32, i8*, ...) @_lcompilers_runtime_error(i8* %2, { i1, i8*, { i8*, i32, i32, i32, i32 }*, i32 }* %32, i32 1, i8* getelementptr inbounds ([52 x i8], [52 x i8]* @7, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @4, i32 0, i32 0))
  call void @exit(i32 1)
  unreachable

ifcont:                                           ; preds = %.entry
  %33 = getelementptr %module_call_subroutine_without_type_01.mytype_class, %module_call_subroutine_without_type_01.mytype_class* %14, i32 0, i32 1
  %34 = load %module_call_subroutine_without_type_01.mytype*, %module_call_subroutine_without_type_01.mytype** %33, align 8
  %35 = getelementptr %module_call_subroutine_without_type_01.mytype, %module_call_subroutine_without_type_01.mytype* %34, i32 0, i32 0
  store float 1.000000e+00, float* %35, align 4
  %36 = load %module_call_subroutine_without_type_01.mytype_class*, %module_call_subroutine_without_type_01.mytype_class** %obj, align 8
  %37 = ptrtoint %module_call_subroutine_without_type_01.mytype_class* %36 to i64
  %38 = icmp eq i64 %37, 0
  br i1 %38, label %then1, label %ifcont2

then1:                                            ; preds = %ifcont
  %39 = alloca [1 x { i1, i8*, { i8*, i32, i32, i32, i32 }*, i32 }], align 8
  %40 = alloca [1 x { i8*, i32, i32, i32, i32 }], align 8
  %41 = getelementptr inbounds [1 x { i8*, i32, i32, i32, i32 }], [1 x { i8*, i32, i32, i32, i32 }]* %40, i32 0, i32 0
  %42 = getelementptr { i8*, i32, i32, i32, i32 }, { i8*, i32, i32, i32, i32 }* %41, i32 0, i32 0
  store i8* getelementptr inbounds ([63 x i8], [63 x i8]* @9, i32 0, i32 0), i8** %42, align 8
  %43 = getelementptr { i8*, i32, i32, i32, i32 }, { i8*, i32, i32, i32, i32 }* %41, i32 0, i32 1
  store i32 28, i32* %43, align 4
  %44 = getelementptr { i8*, i32, i32, i32, i32 }, { i8*, i32, i32, i32, i32 }* %41, i32 0, i32 2
  store i32 5, i32* %44, align 4
  %45 = getelementptr { i8*, i32, i32, i32, i32 }, { i8*, i32, i32, i32, i32 }* %41, i32 0, i32 3
  store i32 28, i32* %45, align 4
  %46 = getelementptr { i8*, i32, i32, i32, i32 }, { i8*, i32, i32, i32, i32 }* %41, i32 0, i32 4
  store i32 20, i32* %46, align 4
  %47 = call i8* (i8*, i8*, ...) @_lcompilers_snprintf_alloc(i8* %2, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @10, i32 0, i32 0))
  %48 = getelementptr inbounds [1 x { i1, i8*, { i8*, i32, i32, i32, i32 }*, i32 }], [1 x { i1, i8*, { i8*, i32, i32, i32, i32 }*, i32 }]* %39, i32 0, i32 0
  %49 = getelementptr [1 x { i8*, i32, i32, i32, i32 }], [1 x { i8*, i32, i32, i32, i32 }]* %40, i32 0, i32 0
  %50 = getelementptr { i1, i8*, { i8*, i32, i32, i32, i32 }*, i32 }, { i1, i8*, { i8*, i32, i32, i32, i32 }*, i32 }* %48, i32 0, i32 2
  %51 = getelementptr { i1, i8*, { i8*, i32, i32, i32, i32 }*, i32 }, { i1, i8*, { i8*, i32, i32, i32, i32 }*, i32 }* %48, i32 0, i32 0
  store i1 true, i1* %51, align 1
  %52 = getelementptr { i1, i8*, { i8*, i32, i32, i32, i32 }*, i32 }, { i1, i8*, { i8*, i32, i32, i32, i32 }*, i32 }* %48, i32 0, i32 1
  store i8* %47, i8** %52, align 8
  store { i8*, i32, i32, i32, i32 }* %49, { i8*, i32, i32, i32, i32 }** %50, align 8
  %53 = getelementptr { i1, i8*, { i8*, i32, i32, i32, i32 }*, i32 }, { i1, i8*, { i8*, i32, i32, i32, i32 }*, i32 }* %48, i32 0, i32 3
  store i32 1, i32* %53, align 4
  %54 = getelementptr [1 x { i1, i8*, { i8*, i32, i32, i32, i32 }*, i32 }], [1 x { i1, i8*, { i8*, i32, i32, i32, i32 }*, i32 }]* %39, i32 0, i32 0
  call void (i8*, { i1, i8*, { i8*, i32, i32, i32, i32 }*, i32 }*, i32, i8*, ...) @_lcompilers_runtime_error(i8* %2, { i1, i8*, { i8*, i32, i32, i32, i32 }*, i32 }* %54, i32 1, i8* getelementptr inbounds ([45 x i8], [45 x i8]* @11, i32 0, i32 0), i32 1, i8* getelementptr inbounds ([15 x i8], [15 x i8]* @8, i32 0, i32 0))
  call void @exit(i32 1)
  unreachable

ifcont2:                                          ; preds = %ifcont
  %55 = load %module_call_subroutine_without_type_01.mytype_class*, %module_call_subroutine_without_type_01.mytype_class** %obj, align 8
  %56 = bitcast %module_call_subroutine_without_type_01.mytype_class* %55 to void (%module_call_subroutine_without_type_01.mytype_class*)***
  %57 = load void (%module_call_subroutine_without_type_01.mytype_class*)**, void (%module_call_subroutine_without_type_01.mytype_class*)*** %56, align 8
  %58 = getelementptr inbounds void (%module_call_subroutine_without_type_01.mytype_class*)*, void (%module_call_subroutine_without_type_01.mytype_class*)** %57, i32 2
  %59 = load void (%module_call_subroutine_without_type_01.mytype_class*)*, void (%module_call_subroutine_without_type_01.mytype_class*)** %58, align 8
  call void %59(%module_call_subroutine_without_type_01.mytype_class* %55)
  br label %return

return:                                           ; preds = %ifcont2
  br label %FINALIZE_SYMTABLE_call_subroutine_without_type_01

FINALIZE_SYMTABLE_call_subroutine_without_type_01: ; preds = %return
  br label %Finalize_Variable_obj

Finalize_Variable_obj:                            ; preds = %FINALIZE_SYMTABLE_call_subroutine_without_type_01
  %60 = load %module_call_subroutine_without_type_01.mytype_class*, %module_call_subroutine_without_type_01.mytype_class** %obj, align 8
  call void @finalize_allocatable__StructType_Class__mytype_of_module_call_subroutine_without_type_01(%module_call_subroutine_without_type_01.mytype_class* %60)
  call void @_lfortran_internal_alloc_finalize()
  ret i32 0
}

declare void @_lpython_call_initial_functions(i32, i8**)

define linkonce_odr void @_copy_module_call_subroutine_without_type_01_mytype(i8* %0, i8* %1) {
entry:
  %2 = bitcast i8* %0 to %module_call_subroutine_without_type_01.mytype*
  %3 = bitcast i8* %1 to %module_call_subroutine_without_type_01.mytype*
  %4 = getelementptr %module_call_subroutine_without_type_01.mytype, %module_call_subroutine_without_type_01.mytype* %2, i32 0, i32 0
  %5 = load float, float* %4, align 4
  %6 = getelementptr %module_call_subroutine_without_type_01.mytype, %module_call_subroutine_without_type_01.mytype* %3, i32 0, i32 0
  br i1 true, label %then, label %else

then:                                             ; preds = %entry
  store float %5, float* %6, align 4
  br label %ifcont

else:                                             ; preds = %entry
  br label %ifcont

ifcont:                                           ; preds = %else, %then
  ret void
}

define linkonce_odr void @_allocate_struct_module_call_subroutine_without_type_01_mytype(i8** %0) {
entry:
  %1 = call i8* @_lfortran_get_default_allocator()
  %2 = call i8* @_lfortran_malloc_alloc(i8* %1, i64 16)
  call void @llvm.memset.p0i8.i32(i8* %2, i8 0, i32 16, i1 false)
  store i8* %2, i8** %0, align 8
  %3 = load i8*, i8** %0, align 8
  %4 = bitcast i8* %3 to %module_call_subroutine_without_type_01.mytype_class*
  %5 = bitcast %module_call_subroutine_without_type_01.mytype_class* %4 to i32 (...)***
  store i32 (...)** bitcast (i8** getelementptr inbounds ({ [5 x i8*] }, { [5 x i8*] }* @_VTable_mytype, i32 0, i32 0, i32 2) to i32 (...)**), i32 (...)*** %5, align 8
  %6 = getelementptr %module_call_subroutine_without_type_01.mytype_class, %module_call_subroutine_without_type_01.mytype_class* %4, i32 0, i32 1
  %7 = call i8* @_lfortran_get_default_allocator()
  %8 = call i8* @_lfortran_malloc_alloc(i8* %7, i64 4)
  call void @llvm.memset.p0i8.i32(i8* %8, i8 0, i32 4, i1 false)
  %9 = bitcast i8* %8 to %module_call_subroutine_without_type_01.mytype*
  store %module_call_subroutine_without_type_01.mytype* %9, %module_call_subroutine_without_type_01.mytype** %6, align 8
  %10 = getelementptr %module_call_subroutine_without_type_01.mytype, %module_call_subroutine_without_type_01.mytype* %9, i32 0, i32 0
  ret void
}

declare i8* @_lcompilers_snprintf_alloc(i8*, i8*, ...)

declare void @_lcompilers_runtime_error(i8*, { i1, i8*, { i8*, i32, i32, i32, i32 }*, i32 }*, i32, i8*, ...)

define internal void @finalize_allocatable__StructType_Class__mytype_of_module_call_subroutine_without_type_01(%module_call_subroutine_without_type_01.mytype_class* %0) {
entry:
  %1 = call i8* @_lfortran_get_default_allocator()
  %2 = icmp ne %module_call_subroutine_without_type_01.mytype_class* %0, null
  br i1 %2, label %is_allocated.then, label %is_allocated.else2

is_allocated.then:                                ; preds = %entry
  %3 = getelementptr %module_call_subroutine_without_type_01.mytype_class, %module_call_subroutine_without_type_01.mytype_class* %0, i32 0, i32 1
  %4 = load %module_call_subroutine_without_type_01.mytype*, %module_call_subroutine_without_type_01.mytype** %3, align 8
  %5 = icmp ne %module_call_subroutine_without_type_01.mytype* %4, null
  br i1 %5, label %is_allocated.then1, label %is_allocated.else

is_allocated.then1:                               ; preds = %is_allocated.then
  %6 = bitcast %module_call_subroutine_without_type_01.mytype* %4 to i8*
  call void @_lfortran_free_alloc(i8* %1, i8* %6)
  br label %is_allocated.ifcont

is_allocated.else:                                ; preds = %is_allocated.then
  br label %is_allocated.ifcont

is_allocated.ifcont:                              ; preds = %is_allocated.else, %is_allocated.then1
  %7 = bitcast %module_call_subroutine_without_type_01.mytype_class* %0 to i8*
  call void @_lfortran_free_alloc(i8* %1, i8* %7)
  br label %is_allocated.ifcont3

is_allocated.else2:                               ; preds = %entry
  br label %is_allocated.ifcont3

is_allocated.ifcont3:                             ; preds = %is_allocated.else2, %is_allocated.ifcont
  ret void
}

attributes #0 = { argmemonly nounwind willreturn writeonly }
attributes #1 = { argmemonly nounwind willreturn }
