; ModuleID = 'repro.0d9631ed-cgu.0' source_filename = "repro.0d9631ed-cgu.0" target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" %"System" = type { %SomeFooProvider } %SomeFooProvider = type { %"SomeFoo<4_usize>" } %"SomeFoo<4_usize>" = type {} %"unwind::libunwind::_Unwind_Exception" = type { i64, void (i32, %"unwind::libunwind::_Unwind_Exception"*)*, [6 x i64] } %"unwind::libunwind::_Unwind_Context" = type { [0 x i8] } @vtable.0 = private unnamed_addr constant <{ i8*, [16 x i8], i8*, i8*, i8* }> <{ i8* bitcast (void (i64**)* @"_ZN4core3ptr85drop_in_place$LT$std..rt..lang_start$LT$$LP$$RP$$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$17h2af278993973bdffE" to i8*), [16 x i8] c"\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00", i8* bitcast (i32 (i64**)* @"_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17h885ebc0da7c2e3eeE" to i8*), i8* bitcast (i32 (i64**)* @"_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h06154a6e29482b01E" to i8*), i8* bitcast (i32 (i64**)* @"_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h06154a6e29482b01E" to i8*) }>, align 8 ; std::sys_common::backtrace::__rust_begin_short_backtrace ; Function Attrs: noinline nonlazybind uwtable define internal void @_ZN3std10sys_common9backtrace28__rust_begin_short_backtrace17h449b51bf370f9511E(void ()* %f) unnamed_addr #0 personality i32 (i32, i32, i64, %"unwind::libunwind::_Unwind_Exception"*, %"unwind::libunwind::_Unwind_Context"*)* @rust_eh_personality { start: %0 = alloca { i8*, i32 }, align 8 ; call core::ops::function::FnOnce::call_once call void @_ZN4core3ops8function6FnOnce9call_once17h8c3cdef3d6e062d7E(void ()* %f) br label %bb1 bb1: ; preds = %start ; invoke core::hint::black_box invoke void @_ZN4core4hint9black_box17h26ac47c155fb7dc6E() to label %bb2 unwind label %cleanup bb3: ; preds = %cleanup br label %bb4 cleanup: ; preds = %bb1 %1 = landingpad { i8*, i32 } cleanup %2 = extractvalue { i8*, i32 } %1, 0 %3 = extractvalue { i8*, i32 } %1, 1 %4 = getelementptr inbounds { i8*, i32 }, { i8*, i32 }* %0, i32 0, i32 0 store i8* %2, i8** %4, align 8 %5 = getelementptr inbounds { i8*, i32 }, { i8*, i32 }* %0, i32 0, i32 1 store i32 %3, i32* %5, align 8 br label %bb3 bb2: ; preds = %bb1 ret void bb4: ; preds = %bb3 %6 = bitcast { i8*, i32 }* %0 to i8** %7 = load i8*, i8** %6, align 8 %8 = getelementptr inbounds { i8*, i32 }, { i8*, i32 }* %0, i32 0, i32 1 %9 = load i32, i32* %8, align 8 %10 = insertvalue { i8*, i32 } undef, i8* %7, 0 %11 = insertvalue { i8*, i32 } %10, i32 %9, 1 resume { i8*, i32 } %11 } ; std::rt::lang_start ; Function Attrs: nonlazybind uwtable define hidden i64 @_ZN3std2rt10lang_start17hab7c2d15a762a1d9E(void ()* %main, i64 %argc, i8** %argv) unnamed_addr #1 { start: %_8 = alloca i64*, align 8 %_4 = alloca i64, align 8 %0 = bitcast i64** %_8 to void ()** store void ()* %main, void ()** %0, align 8 %_5.0 = bitcast i64** %_8 to {}* ; call std::rt::lang_start_internal %1 = call i64 @_ZN3std2rt19lang_start_internal17h3569a15bda4ed2aaE({}* align 1 %_5.0, [3 x i64]* align 8 bitcast (<{ i8*, [16 x i8], i8*, i8*, i8* }>* @vtable.0 to [3 x i64]*), i64 %argc, i8** %argv) store i64 %1, i64* %_4, align 8 br label %bb1 bb1: ; preds = %start %v = load i64, i64* %_4, align 8 ret i64 %v } ; std::rt::lang_start::{{closure}} ; Function Attrs: inlinehint nonlazybind uwtable define internal i32 @"_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h06154a6e29482b01E"(i64** align 8 %_1) unnamed_addr #2 { start: %0 = bitcast i64** %_1 to void ()** %_4 = load void ()*, void ()** %0, align 8, !nonnull !3, !noundef !3 ; call std::sys_common::backtrace::__rust_begin_short_backtrace call void @_ZN3std10sys_common9backtrace28__rust_begin_short_backtrace17h449b51bf370f9511E(void ()* %_4) br label %bb1 bb1: ; preds = %start ; call <() as std::process::Termination>::report %_2 = call i8 @"_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h978a6dc4ed6fece4E"() br label %bb2 bb2: ; preds = %bb1 ; call std::process::ExitCode::to_i32 %1 = call i32 @_ZN3std7process8ExitCode6to_i3217hfc430f5a96efd03dE(i8 %_2) br label %bb3 bb3: ; preds = %bb2 ret i32 %1 } ; std::sys::unix::process::process_common::ExitCode::as_i32 ; Function Attrs: inlinehint nonlazybind uwtable define internal i32 @_ZN3std3sys4unix7process14process_common8ExitCode6as_i3217h846362fa2199241bE(i8* align 1 %self) unnamed_addr #2 { start: %_2 = load i8, i8* %self, align 1 %0 = zext i8 %_2 to i32 ret i32 %0 } ; std::process::ExitCode::to_i32 ; Function Attrs: inlinehint nonlazybind uwtable define internal i32 @_ZN3std7process8ExitCode6to_i3217hfc430f5a96efd03dE(i8 %0) unnamed_addr #2 { start: %self = alloca i8, align 1 store i8 %0, i8* %self, align 1 ; call std::sys::unix::process::process_common::ExitCode::as_i32 %1 = call i32 @_ZN3std3sys4unix7process14process_common8ExitCode6as_i3217h846362fa2199241bE(i8* align 1 %self) br label %bb1 bb1: ; preds = %start ret i32 %1 } ; core::ops::function::FnOnce::call_once{{vtable.shim}} ; Function Attrs: inlinehint nonlazybind uwtable define internal i32 @"_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17h885ebc0da7c2e3eeE"(i64** %_1) unnamed_addr #2 { start: %_2 = alloca {}, align 1 %0 = load i64*, i64** %_1, align 8, !nonnull !3, !noundef !3 ; call core::ops::function::FnOnce::call_once %1 = call i32 @_ZN4core3ops8function6FnOnce9call_once17hd477e186dbc91a1fE(i64* %0) br label %bb1 bb1: ; preds = %start ret i32 %1 } ; core::ops::function::FnOnce::call_once ; Function Attrs: inlinehint nonlazybind uwtable define internal void @_ZN4core3ops8function6FnOnce9call_once17h8c3cdef3d6e062d7E(void ()* %_1) unnamed_addr #2 { start: %_2 = alloca {}, align 1 call void %_1() br label %bb1 bb1: ; preds = %start ret void } ; core::ops::function::FnOnce::call_once ; Function Attrs: inlinehint nonlazybind uwtable define internal i32 @_ZN4core3ops8function6FnOnce9call_once17hd477e186dbc91a1fE(i64* %0) unnamed_addr #2 personality i32 (i32, i32, i64, %"unwind::libunwind::_Unwind_Exception"*, %"unwind::libunwind::_Unwind_Context"*)* @rust_eh_personality { start: %1 = alloca { i8*, i32 }, align 8 %_2 = alloca {}, align 1 %_1 = alloca i64*, align 8 store i64* %0, i64** %_1, align 8 ; invoke std::rt::lang_start::{{closure}} %2 = invoke i32 @"_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h06154a6e29482b01E"(i64** align 8 %_1) to label %bb1 unwind label %cleanup bb3: ; preds = %cleanup br label %bb4 cleanup: ; preds = %start %3 = landingpad { i8*, i32 } cleanup %4 = extractvalue { i8*, i32 } %3, 0 %5 = extractvalue { i8*, i32 } %3, 1 %6 = getelementptr inbounds { i8*, i32 }, { i8*, i32 }* %1, i32 0, i32 0 store i8* %4, i8** %6, align 8 %7 = getelementptr inbounds { i8*, i32 }, { i8*, i32 }* %1, i32 0, i32 1 store i32 %5, i32* %7, align 8 br label %bb3 bb1: ; preds = %start br label %bb2 bb4: ; preds = %bb3 %8 = bitcast { i8*, i32 }* %1 to i8** %9 = load i8*, i8** %8, align 8 %10 = getelementptr inbounds { i8*, i32 }, { i8*, i32 }* %1, i32 0, i32 1 %11 = load i32, i32* %10, align 8 %12 = insertvalue { i8*, i32 } undef, i8* %9, 0 %13 = insertvalue { i8*, i32 } %12, i32 %11, 1 resume { i8*, i32 } %13 bb2: ; preds = %bb1 ret i32 %2 } ; core::ptr::drop_in_place::{{closure}}> ; Function Attrs: inlinehint nonlazybind uwtable define internal void @"_ZN4core3ptr85drop_in_place$LT$std..rt..lang_start$LT$$LP$$RP$$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$17h2af278993973bdffE"(i64** %_1) unnamed_addr #2 { start: ret void } ; core::hint::black_box ; Function Attrs: inlinehint nonlazybind uwtable define internal void @_ZN4core4hint9black_box17h26ac47c155fb7dc6E() unnamed_addr #2 { start: call void asm sideeffect "", "r,~{memory}"({}* undef), !srcloc !4 br label %bb1 bb1: ; preds = %start ret void } ; <() as std::process::Termination>::report ; Function Attrs: inlinehint nonlazybind uwtable define internal i8 @"_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17h978a6dc4ed6fece4E"() unnamed_addr #2 { start: ; call ::report %0 = call i8 @"_ZN68_$LT$std..process..ExitCode$u20$as$u20$std..process..Termination$GT$6report17h3cba030302120c8aE"(i8 0) br label %bb1 bb1: ; preds = %start ret i8 %0 } ; ::report ; Function Attrs: inlinehint nonlazybind uwtable define internal i8 @"_ZN68_$LT$std..process..ExitCode$u20$as$u20$std..process..Termination$GT$6report17h3cba030302120c8aE"(i8 %self) unnamed_addr #2 { start: ret i8 %self } ; repro::main ; Function Attrs: nonlazybind uwtable define internal void @_ZN5repro4main17h63d60c5c04fffb94E() unnamed_addr #1 { start: %system = alloca %"System", align 1 ; call repro::System::poll call void @"_ZN5repro20System$LT$FP$C$_$GT$4poll17h5907113345132f39E"(%"System"* align 1 %system) br label %bb1 bb1: ; preds = %start ret void } ; repro::System::poll ; Function Attrs: nonlazybind uwtable define internal void @"_ZN5repro20System$LT$FP$C$_$GT$4poll17h5907113345132f39E"(%"System"* align 1 %self) unnamed_addr #1 { start: %_5 = bitcast %"System"* %self to %SomeFooProvider* ; call >::get_foo %_4 = call align 1 %"SomeFoo<4_usize>"* @"_ZN70_$LT$repro..SomeFooProvider$u20$as$u20$repro..FooProvider$LT$_$GT$$GT$7get_foo17hfdb5cdf432979c0eE"(%SomeFooProvider* align 1 %_5) br label %bb1 bb1: ; preds = %start ; call as repro::Foo<_>>::foo call void @"_ZN63_$LT$repro..SomeFoo$LT$_$GT$$u20$as$u20$repro..Foo$LT$_$GT$$GT$3foo17he0a8b10f80c417d4E"(%"SomeFoo<4_usize>"* align 1 %_4) br label %bb2 bb2: ; preds = %bb1 ret void } ; >::get_foo ; Function Attrs: nonlazybind uwtable define internal align 1 %"SomeFoo<4_usize>"* @"_ZN70_$LT$repro..SomeFooProvider$u20$as$u20$repro..FooProvider$LT$_$GT$$GT$7get_foo17hfdb5cdf432979c0eE"(%SomeFooProvider* align 1 %self) unnamed_addr #1 { start: %_3 = bitcast %SomeFooProvider* %self to %"SomeFoo<4_usize>"* ret %"SomeFoo<4_usize>"* %_3 } ; as repro::Foo<_>>::foo ; Function Attrs: nonlazybind uwtable define internal void @"_ZN63_$LT$repro..SomeFoo$LT$_$GT$$u20$as$u20$repro..Foo$LT$_$GT$$GT$3foo17h0993b7b03477db6dE"(%"SomeFoo<4_usize>"* align 1 %self) unnamed_addr #1 { start: ret void } ; Function Attrs: nonlazybind uwtable declare i32 @rust_eh_personality(i32, i32, i64, %"unwind::libunwind::_Unwind_Exception"*, %"unwind::libunwind::_Unwind_Context"*) unnamed_addr #1 ; std::rt::lang_start_internal ; Function Attrs: nonlazybind uwtable declare i64 @_ZN3std2rt19lang_start_internal17h3569a15bda4ed2aaE({}* align 1, [3 x i64]* align 8, i64, i8**) unnamed_addr #1 ; as repro::Foo<_>>::foo ; Function Attrs: nonlazybind uwtable declare hidden void @"_ZN63_$LT$repro..SomeFoo$LT$_$GT$$u20$as$u20$repro..Foo$LT$_$GT$$GT$3foo17he0a8b10f80c417d4E"(%"SomeFoo<4_usize>"* align 1) unnamed_addr #1 ; Function Attrs: nonlazybind define i32 @main(i32 %0, i8** %1) unnamed_addr #3 { top: %2 = sext i32 %0 to i64 ; call std::rt::lang_start %3 = call i64 @_ZN3std2rt10lang_start17hab7c2d15a762a1d9E(void ()* @_ZN5repro4main17h63d60c5c04fffb94E, i64 %2, i8** %1) %4 = trunc i64 %3 to i32 ret i32 %4 } attributes #0 = { noinline nonlazybind uwtable "probe-stack"="__rust_probestack" "target-cpu"="x86-64" } attributes #1 = { nonlazybind uwtable "probe-stack"="__rust_probestack" "target-cpu"="x86-64" } attributes #2 = { inlinehint nonlazybind uwtable "probe-stack"="__rust_probestack" "target-cpu"="x86-64" } attributes #3 = { nonlazybind "target-cpu"="x86-64" } !llvm.module.flags = !{!0, !1, !2} !0 = !{i32 7, !"PIC Level", i32 2} !1 = !{i32 7, !"PIE Level", i32 2} !2 = !{i32 2, !"RtLibUseGOT", i32 1} !3 = !{} !4 = !{i32 3271255}