rust-lang / rust

Empowering everyone to build reliable and efficient software.
https://www.rust-lang.org
Other
97.63k stars 12.63k forks source link

Investigate why #113970 changes `async2.rs` coverage maps on some targets #116134

Open Zalathar opened 1 year ago

Zalathar commented 1 year ago

The changes in #113970 ended up changing the coverage mappings for tests/coverage-map/status-quo/async2.rs, but only on some targets.

I wanted to create a place to put my notes from investigating that, without gunking up the original PR.

@rustbot label +A-code-coverage

Zalathar commented 1 year ago

@rustbot label -needs-triage

Zalathar commented 1 year ago

Fortunately for me, the changes can be reproduced on my ARM Mac, so I've looked into them a little bit.

$ RUSTC_LOG="rustc_mir_transform::coverage,rustc_codegen_llvm::coverageinfo" rustc +stage1 -Cinstrument-coverage --emit=llvm-ir --edition=2021 tests/coverage-map/status-quo/async2.rs 2> _stderr.txt

Looking at the logs, it seems that we do codegen the affected closures as normal, with corresponding covfun records. Yet for some reason they are missing from the coverage maps emitted by LLVM. So presumably something mysterious is happening inside LLVM that causes it to drop those functions, or at least drop their covfun records.

EDIT: This comment is bogus; I forgot to add -Copt-level=2 to my manual rustc invocation.

Zalathar commented 1 year ago
async2.ll ```fish $ x test coverage-map --force-rerun -- async2 ``` ```llvm ; ModuleID = 'async2.3556024874bfaf70-cgu.0' source_filename = "async2.3556024874bfaf70-cgu.0" target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128" target triple = "arm64-apple-macosx11.0.0" %"core::task::wake::RawWakerVTable" = type { ptr, ptr, ptr, ptr } %"core::fmt::Arguments<'_>" = type { { ptr, i64 }, { ptr, i64 }, { ptr, i64 } } @vtable.0 = private unnamed_addr constant <{ ptr, [16 x i8], ptr, ptr, ptr }> <{ ptr @_RINvNtCscBXtjtswptt_4core3ptr13drop_in_placeNCINvNtCs8koKRe9ETht_3std2rt10lang_startuE0ECs4zUb9XLQiyW_6async2, [16 x i8] c"\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00", ptr @_RNSNvYNCINvNtCs8koKRe9ETht_3std2rt10lang_startuE0INtNtNtCscBXtjtswptt_4core3ops8function6FnOnceuE9call_once6vtableCs4zUb9XLQiyW_6async2, ptr @_RNCINvNtCs8koKRe9ETht_3std2rt10lang_startuE0Cs4zUb9XLQiyW_6async2, ptr @_RNCINvNtCs8koKRe9ETht_3std2rt10lang_startuE0Cs4zUb9XLQiyW_6async2 }>, align 8 @alloc_513570631223a12912d85da2bec3b15a = private unnamed_addr constant <{}> zeroinitializer, align 8 @alloc_9ba35fb86d20c9c13d197ffc9a9264ba = private unnamed_addr constant <{ [27 x i8] }> <{ [27 x i8] c"non_async_func was covered\0A" }>, align 1 @alloc_a921d308b684528df82f6e4dffdb80bd = private unnamed_addr constant <{ ptr, [8 x i8] }> <{ ptr @alloc_9ba35fb86d20c9c13d197ffc9a9264ba, [8 x i8] c"\1B\00\00\00\00\00\00\00" }>, align 8 @alloc_842fe36ca0d975cd1eb64dadf6b36635 = private unnamed_addr constant <{ [32 x i8] }> <{ [32 x i8] c"non_async_func println in block\0A" }>, align 1 @alloc_beefbc7dab13e3fb922964c749019704 = private unnamed_addr constant <{ ptr, [8 x i8] }> <{ ptr @alloc_842fe36ca0d975cd1eb64dadf6b36635, [8 x i8] c" \00\00\00\00\00\00\00" }>, align 8 @alloc_22eeafdaf5b2dda1e0b3955ae16d58d8 = private unnamed_addr constant <{ [23 x i8] }> <{ [23 x i8] c"async_func was covered\0A" }>, align 1 @alloc_bb9cfe869d3fbd1b0bac54c64137be2e = private unnamed_addr constant <{ ptr, [8 x i8] }> <{ ptr @alloc_22eeafdaf5b2dda1e0b3955ae16d58d8, [8 x i8] c"\17\00\00\00\00\00\00\00" }>, align 8 @alloc_8b8d639be3764847ca76057a8208860f = private unnamed_addr constant <{ [28 x i8] }> <{ [28 x i8] c"async_func println in block\0A" }>, align 1 @alloc_8a2eecf69e2fc1f364ea48da3a4d02ff = private unnamed_addr constant <{ ptr, [8 x i8] }> <{ ptr @alloc_8b8d639be3764847ca76057a8208860f, [8 x i8] c"\1C\00\00\00\00\00\00\00" }>, align 8 @alloc_626c5d64fd47031c853154dd4aeec363 = private unnamed_addr constant <{ [36 x i8] }> <{ [36 x i8] c"async_func_just_println was covered\0A" }>, align 1 @alloc_228521f8fdd0525c9bea7f9192a53491 = private unnamed_addr constant <{ ptr, [8 x i8] }> <{ ptr @alloc_626c5d64fd47031c853154dd4aeec363, [8 x i8] c"$\00\00\00\00\00\00\00" }>, align 8 @alloc_fa958ac97aa85c340217f7ce164b63cf = private unnamed_addr constant <{ [20 x i8] }> <{ [20 x i8] c"codecovsample::main\0A" }>, align 1 @alloc_8c6fa871f2b6ccc3596c5d8143fd3c62 = private unnamed_addr constant <{ ptr, [8 x i8] }> <{ ptr @alloc_fa958ac97aa85c340217f7ce164b63cf, [8 x i8] c"\14\00\00\00\00\00\00\00" }>, align 8 @_RNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLE = internal constant <{ ptr, ptr, ptr, ptr }> <{ ptr @_RNvYNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLE0INtNtNtCscBXtjtswptt_4core3ops8function6FnOnceTPuEE9call_onceBa_, ptr @_RNvYNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs0_0INtNtNtCscBXtjtswptt_4core3ops8function6FnOnceTPuEE9call_onceBa_, ptr @_RNvYNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs0_0INtNtNtCscBXtjtswptt_4core3ops8function6FnOnceTPuEE9call_onceBa_, ptr @_RNvYNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs1_0INtNtNtCscBXtjtswptt_4core3ops8function6FnOnceTPuEE9call_onceBa_ }>, align 8 @__covrec_F74DDFE43B4BAE36u = linkonce_odr hidden constant <{ i64, i32, i64, i64, [9 x i8] }> <{ i64 -626598601794277834, i32 9, i64 -6856040691413589372, i64 1889826389874031115, [9 x i8] c"\01\01\00\01\01.\11\00\13" }>, section "__LLVM_COV,__llvm_covfun", align 8 @__covrec_E1A8165202F21C03u = linkonce_odr hidden constant <{ i64, i32, i64, i64, [9 x i8] }> <{ i64 -2186473077595825149, i32 9, i64 155372126598700742, i64 1889826389874031115, [9 x i8] c"\01\01\00\01\01\13\01\00$" }>, section "__LLVM_COV,__llvm_covfun", align 8 @__covrec_AF0136FEB71B924Cu = linkonce_odr hidden constant <{ i64, i32, i64, i64, [9 x i8] }> <{ i64 -5836323174473821620, i32 9, i64 155372126598700742, i64 1889826389874031115, [9 x i8] c"\01\01\00\01\01\13$\02\02" }>, section "__LLVM_COV,__llvm_covfun", align 8 @__covrec_3BF8FE240EC55615u = linkonce_odr hidden constant <{ i64, i32, i64, i64, [9 x i8] }> <{ i64 4321483273282082325, i32 9, i64 719582524320644771, i64 1889826389874031115, [9 x i8] c"\01\01\00\01\01\17\01\07\02" }>, section "__LLVM_COV,__llvm_covfun", align 8 @__covrec_7A4298E94A9FBACAu = linkonce_odr hidden constant <{ i64, i32, i64, i64, [26 x i8] }> <{ i64 8809771948836895434, i32 26, i64 -3630791716643471453, i64 1889826389874031115, [26 x i8] c"\01\01\01\05\00\04\01\03\01\03\09\05\03\0A\02\06\00\02\06\00\07\03\01\01\00\02" }>, section "__LLVM_COV,__llvm_covfun", align 8 @__covrec_82806BDCC676AC9Eu = linkonce_odr hidden constant <{ i64, i32, i64, i64, [44 x i8] }> <{ i64 -9043109455793312610, i32 44, i64 -8617230451985595640, i64 1889826389874031115, [44 x i8] c"\01\01\05\0B\05\01\05\01\05\02\00\02\00\06\01'\05\0A6\02\0D \00#\0B\00'\00I\0F\01\17\00\1A\05\01\0E\00\0F\13\02\05\00\06" }>, section "__LLVM_COV,__llvm_covfun", align 8 @__covrec_2E7D282BFF3BC65Au = linkonce_odr hidden constant <{ i64, i32, i64, i64, [9 x i8] }> <{ i64 3349877867264329306, i32 9, i64 1759751756802921227, i64 1889826389874031115, [9 x i8] c"\01\01\00\01\01\0B\01\00\17" }>, section "__LLVM_COV,__llvm_covfun", align 8 @__covrec_5BC727AD826DA7A4u = linkonce_odr hidden constant <{ i64, i32, i64, i64, [28 x i8] }> <{ i64 6613298203987912612, i32 28, i64 1759751756802921227, i64 1889826389874031115, [28 x i8] c"\01\01\02\01\05\05\02\04\01\0B\17\03\09\05\03\0A\02\06\02\02\06\00\07\07\01\01\00\02" }>, section "__LLVM_COV,__llvm_covfun", align 8 @__covrec_8AD7B697A08EFFCAu = linkonce_odr hidden constant <{ i64, i32, i64, i64, [44 x i8] }> <{ i64 -8442078214132662326, i32 44, i64 -8617230451985595640, i64 1889826389874031115, [44 x i8] c"\01\01\05\0B\05\01\05\01\05\02\00\02\00\06\01'\05\0A6\02\0D \00#\0B\00'\00I\0F\01\17\00\1A\05\01\0E\00\0F\13\02\05\00\06" }>, section "__LLVM_COV,__llvm_covfun", align 8 @__llvm_coverage_mapping = private constant { { i32, i32, i32, i32 }, [77 x i8] } { { i32, i32, i32, i32 } { i32 0, i32 77, i32 0, i32 5 }, [77 x i8] c"\02`Jx\DA\93\D6\0F-N-*\D6/.)M,*\D1wI-\D3/*-.\01\13\CEx\E4\F4KR\8BK\8A\F5\93\F3\CBR\8B\12\D3Sus\13\0B\80\EA\12KJ\8Bu\0BK\F3\F5\13\8B+\F3\92\8D\F4\8A\8A\01\CE<$D" }, section "__LLVM_COV,__llvm_covmap", align 8 @__llvm_profile_runtime = external hidden local_unnamed_addr global i32 @__profc__RNvCs4zUb9XLQiyW_6async214non_async_func = private global [2 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8 @__profd__RNvCs4zUb9XLQiyW_6async214non_async_func = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 8809771948836895434, i64 -3630791716643471453, i64 sub (i64 ptrtoint (ptr @__profc__RNvCs4zUb9XLQiyW_6async214non_async_func to i64), i64 ptrtoint (ptr @__profd__RNvCs4zUb9XLQiyW_6async214non_async_func to i64)), ptr null, ptr null, i32 2, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8 @__profc__RNvCs4zUb9XLQiyW_6async210async_func = private global [1 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8 @__profd__RNvCs4zUb9XLQiyW_6async210async_func = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 3349877867264329306, i64 1759751756802921227, i64 sub (i64 ptrtoint (ptr @__profc__RNvCs4zUb9XLQiyW_6async210async_func to i64), i64 ptrtoint (ptr @__profd__RNvCs4zUb9XLQiyW_6async210async_func to i64)), ptr null, ptr null, i32 1, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8 @__profc__RNCNvCs4zUb9XLQiyW_6async210async_func0B3_ = private global [2 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8 @__profd__RNCNvCs4zUb9XLQiyW_6async210async_func0B3_ = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 6613298203987912612, i64 1759751756802921227, i64 sub (i64 ptrtoint (ptr @__profc__RNCNvCs4zUb9XLQiyW_6async210async_func0B3_ to i64), i64 ptrtoint (ptr @__profd__RNCNvCs4zUb9XLQiyW_6async210async_func0B3_ to i64)), ptr null, ptr null, i32 2, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8 @__profc__RNvCs4zUb9XLQiyW_6async223async_func_just_println = private global [1 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8 @__profd__RNvCs4zUb9XLQiyW_6async223async_func_just_println = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 -2186473077595825149, i64 155372126598700742, i64 sub (i64 ptrtoint (ptr @__profc__RNvCs4zUb9XLQiyW_6async223async_func_just_println to i64), i64 ptrtoint (ptr @__profd__RNvCs4zUb9XLQiyW_6async223async_func_just_println to i64)), ptr null, ptr null, i32 1, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8 @__profc__RNCNvCs4zUb9XLQiyW_6async223async_func_just_println0B3_ = private global [1 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8 @__profd__RNCNvCs4zUb9XLQiyW_6async223async_func_just_println0B3_ = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 -5836323174473821620, i64 155372126598700742, i64 sub (i64 ptrtoint (ptr @__profc__RNCNvCs4zUb9XLQiyW_6async223async_func_just_println0B3_ to i64), i64 ptrtoint (ptr @__profd__RNCNvCs4zUb9XLQiyW_6async223async_func_just_println0B3_ to i64)), ptr null, ptr null, i32 1, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8 @__profc__RNvCs4zUb9XLQiyW_6async24main = private global [1 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8 @__profd__RNvCs4zUb9XLQiyW_6async24main = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 4321483273282082325, i64 719582524320644771, i64 sub (i64 ptrtoint (ptr @__profc__RNvCs4zUb9XLQiyW_6async24main to i64), i64 ptrtoint (ptr @__profd__RNvCs4zUb9XLQiyW_6async24main to i64)), ptr null, ptr null, i32 1, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8 @__profc__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_10async_func0EB4_ = private global [2 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8 @__profd__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_10async_func0EB4_ = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 -9043109455793312610, i64 -8617230451985595640, i64 sub (i64 ptrtoint (ptr @__profc__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_10async_func0EB4_ to i64), i64 ptrtoint (ptr @__profd__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_10async_func0EB4_ to i64)), ptr null, ptr null, i32 2, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8 @__profc__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_23async_func_just_println0EB4_ = private global [2 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8 @__profd__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_23async_func_just_println0EB4_ = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 -8442078214132662326, i64 -8617230451985595640, i64 sub (i64 ptrtoint (ptr @__profc__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_23async_func_just_println0EB4_ to i64), i64 ptrtoint (ptr @__profd__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_23async_func_just_println0EB4_ to i64)), ptr null, ptr null, i32 2, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8 @__profc__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs1_0B7_ = private global [1 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8 @__profd__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs1_0B7_ = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 -626598601794277834, i64 -6856040691413589372, i64 sub (i64 ptrtoint (ptr @__profc__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs1_0B7_ to i64), i64 ptrtoint (ptr @__profd__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs1_0B7_ to i64)), ptr null, ptr null, i32 1, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8 @__llvm_prf_nm = private constant [158 x i8] c"\E1\03\9A\01x\DA\8B\0F\F2+s.6\A9\0AM\B2\8C\F0\09\CC\AC\0C\8F7K,\AE\CCK624\C9\CB\CF\8B\07\B3\E3\D3J\F3\92\19\E3q\AA4@U\E5L\84:\03'\E3x\DC&\1A\19#T\C6g\95\16\97\C4\17\14e\E6\95\E4\E4\E13\1E\A7&\FCv\99\E4&f\82\CC\F5\F4+\F3+\C1\AA\C2\22\B5\225\B9\B4$\BF\C8\22)'?9;>?\0F\E4\06'\93x\14\0F\B9\02\05\C83\06\B7\C3\A1f\82\D4\91`\ACYX\88\A3\93\8Fk\B1a\BC\81\93y<\00q\D3\ABo", section "__DATA,__llvm_prf_names", align 1 @__llvm_profile_filename = weak hidden local_unnamed_addr constant [22 x i8] c"default_%m_%p.profraw\00" @llvm.used = appending global [11 x ptr] [ptr @__covrec_2E7D282BFF3BC65Au, ptr @__covrec_3BF8FE240EC55615u, ptr @__covrec_5BC727AD826DA7A4u, ptr @__covrec_7A4298E94A9FBACAu, ptr @__covrec_82806BDCC676AC9Eu, ptr @__covrec_8AD7B697A08EFFCAu, ptr @__covrec_AF0136FEB71B924Cu, ptr @__covrec_E1A8165202F21C03u, ptr @__covrec_F74DDFE43B4BAE36u, ptr @__llvm_coverage_mapping, ptr @__llvm_prf_nm], section "llvm.metadata" @llvm.compiler.used = appending global [10 x ptr] [ptr @__llvm_profile_runtime_user, ptr @__profd__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_10async_func0EB4_, ptr @__profd__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_23async_func_just_println0EB4_, ptr @__profd__RNCNvCs4zUb9XLQiyW_6async210async_func0B3_, ptr @__profd__RNCNvCs4zUb9XLQiyW_6async223async_func_just_println0B3_, ptr @__profd__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs1_0B7_, ptr @__profd__RNvCs4zUb9XLQiyW_6async210async_func, ptr @__profd__RNvCs4zUb9XLQiyW_6async214non_async_func, ptr @__profd__RNvCs4zUb9XLQiyW_6async223async_func_just_println, ptr @__profd__RNvCs4zUb9XLQiyW_6async24main], section "llvm.metadata" ; std::rt::lang_start::<()> ; Function Attrs: uwtable define hidden noundef i64 @_RINvNtCs8koKRe9ETht_3std2rt10lang_startuECs4zUb9XLQiyW_6async2(ptr noundef nonnull %main, i64 noundef %argc, ptr noundef %argv, i8 noundef %sigpipe) unnamed_addr #0 { start: %_8 = alloca ptr, align 8 call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %_8) store ptr %main, ptr %_8, align 8 ; call std::rt::lang_start_internal %0 = call noundef i64 @_ZN3std2rt19lang_start_internal17he54ad6d8e161668fE(ptr noundef nonnull align 1 %_8, ptr noalias noundef nonnull readonly align 8 dereferenceable(24) @vtable.0, i64 noundef %argc, ptr noundef %argv, i8 noundef %sigpipe) call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %_8) ret i64 %0 } ; core::ptr::drop_in_place::::{closure#0}> ; Function Attrs: inlinehint mustprogress nofree norecurse nosync nounwind willreturn memory(none) uwtable define internal void @_RINvNtCscBXtjtswptt_4core3ptr13drop_in_placeNCINvNtCs8koKRe9ETht_3std2rt10lang_startuE0ECs4zUb9XLQiyW_6async2(ptr noalias nocapture readnone align 8 %_1) unnamed_addr #1 { start: ret void } ; core::ptr::drop_in_place:: ; Function Attrs: uwtable define internal fastcc void @_RINvNtCscBXtjtswptt_4core3ptr13drop_in_placeNtNtNtB4_4task4wake5WakerECs4zUb9XLQiyW_6async2(ptr noalias nocapture noundef readonly align 8 dereferenceable(16) %_1) unnamed_addr #0 { start: tail call void @llvm.experimental.noalias.scope.decl(metadata !3) %_4.i = load ptr, ptr %_1, align 8, !alias.scope !3, !nonnull !6, !align !7, !noundef !6 %0 = getelementptr inbounds %"core::task::wake::RawWakerVTable", ptr %_4.i, i64 0, i32 3 %_2.i = load ptr, ptr %0, align 8, !noalias !3, !nonnull !6, !noundef !6 %1 = getelementptr inbounds { ptr, ptr }, ptr %_1, i64 0, i32 1 %_3.i = load ptr, ptr %1, align 8, !alias.scope !3, !noundef !6 tail call void %_2.i(ptr noundef %_3.i), !noalias !3 ret void } ; std::sys_common::backtrace::__rust_begin_short_backtrace:: ; Function Attrs: noinline uwtable define internal fastcc void @_RINvNtNtCs8koKRe9ETht_3std10sys_common9backtrace28___rust_begin_short_backtraceFEuuECs4zUb9XLQiyW_6async2(ptr nocapture noundef nonnull readonly %f) unnamed_addr #2 { start: tail call void %f() tail call void asm sideeffect "", "~{memory}"() #11, !srcloc !8 ret void } ; std::rt::lang_start::<()>::{closure#0} ; Function Attrs: inlinehint uwtable define internal noundef i32 @_RNCINvNtCs8koKRe9ETht_3std2rt10lang_startuE0Cs4zUb9XLQiyW_6async2(ptr noalias nocapture noundef readonly align 8 dereferenceable(8) %_1) unnamed_addr #3 { start: %_4 = load ptr, ptr %_1, align 8, !nonnull !6, !noundef !6 ; call std::sys_common::backtrace::__rust_begin_short_backtrace:: tail call fastcc void @_RINvNtNtCs8koKRe9ETht_3std10sys_common9backtrace28___rust_begin_short_backtraceFEuuECs4zUb9XLQiyW_6async2(ptr noundef nonnull %_4) ret i32 0 } ; ::{closure#0} as core::ops::function::FnOnce<()>>::call_once::{shim:vtable#0} ; Function Attrs: inlinehint uwtable define internal noundef i32 @_RNSNvYNCINvNtCs8koKRe9ETht_3std2rt10lang_startuE0INtNtNtCscBXtjtswptt_4core3ops8function6FnOnceuE9call_once6vtableCs4zUb9XLQiyW_6async2(ptr nocapture noundef readonly %_1) unnamed_addr #3 personality ptr @rust_eh_personality { start: %0 = load ptr, ptr %_1, align 8, !nonnull !6, !noundef !6 ; call std::sys_common::backtrace::__rust_begin_short_backtrace:: tail call fastcc void @_RINvNtNtCs8koKRe9ETht_3std10sys_common9backtrace28___rust_begin_short_backtraceFEuuECs4zUb9XLQiyW_6async2(ptr noundef nonnull %0), !noalias !9 ret i32 0 } ; >::call_once ; Function Attrs: inlinehint mustprogress nofree norecurse noreturn nosync nounwind willreturn memory(none) uwtable define internal { ptr, ptr } @_RNvYNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLE0INtNtNtCscBXtjtswptt_4core3ops8function6FnOnceTPuEE9call_onceBa_(ptr nocapture readnone %0) unnamed_addr #4 personality ptr @rust_eh_personality { start: unreachable } ; >::call_once ; Function Attrs: inlinehint mustprogress nofree norecurse noreturn nosync nounwind willreturn memory(none) uwtable define internal void @_RNvYNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs0_0INtNtNtCscBXtjtswptt_4core3ops8function6FnOnceTPuEE9call_onceBa_(ptr nocapture readnone %0) unnamed_addr #4 personality ptr @rust_eh_personality { start: unreachable } ; >::call_once ; Function Attrs: inlinehint mustprogress nofree norecurse nounwind willreturn memory(readwrite, argmem: none, inaccessiblemem: none) uwtable define internal void @_RNvYNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs1_0INtNtNtCscBXtjtswptt_4core3ops8function6FnOnceTPuEE9call_onceBa_(ptr nocapture readnone %0) unnamed_addr #5 personality ptr @rust_eh_personality { start: %1 = atomicrmw add ptr @__profc__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs1_0B7_, i64 1 monotonic, align 8 ret void } ; async2::main ; Function Attrs: uwtable define internal void @_RNvCs4zUb9XLQiyW_6async24main() unnamed_addr #0 personality ptr @rust_eh_personality { start: %_4.i.i2 = alloca %"core::fmt::Arguments<'_>", align 8 %waker.i3 = alloca { ptr, ptr }, align 8 %_8.i.i = alloca %"core::fmt::Arguments<'_>", align 8 %_4.i.i = alloca %"core::fmt::Arguments<'_>", align 8 %waker.i = alloca { ptr, ptr }, align 8 %_5.i = alloca %"core::fmt::Arguments<'_>", align 8 %_2.i = alloca %"core::fmt::Arguments<'_>", align 8 %_2 = alloca %"core::fmt::Arguments<'_>", align 8 %0 = atomicrmw add ptr @__profc__RNvCs4zUb9XLQiyW_6async24main, i64 1 monotonic, align 8 call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %_2) store ptr @alloc_8c6fa871f2b6ccc3596c5d8143fd3c62, ptr %_2, align 8 %1 = getelementptr inbounds { ptr, i64 }, ptr %_2, i64 0, i32 1 store i64 1, ptr %1, align 8 %2 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_2, i64 0, i32 2 store ptr null, ptr %2, align 8 %3 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_2, i64 0, i32 1 store ptr @alloc_513570631223a12912d85da2bec3b15a, ptr %3, align 8 %4 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_2, i64 0, i32 1, i32 1 store i64 0, ptr %4, align 8 ; call std::io::stdio::_print call void @_ZN3std2io5stdio6_print17h159df1e36ccb658eE(ptr noalias nocapture noundef nonnull align 8 dereferenceable(48) %_2) call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %_2) %5 = atomicrmw add ptr @__profc__RNvCs4zUb9XLQiyW_6async214non_async_func, i64 1 monotonic, align 8 call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %_2.i) store ptr @alloc_a921d308b684528df82f6e4dffdb80bd, ptr %_2.i, align 8 %6 = getelementptr inbounds { ptr, i64 }, ptr %_2.i, i64 0, i32 1 store i64 1, ptr %6, align 8 %7 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_2.i, i64 0, i32 2 store ptr null, ptr %7, align 8 %8 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_2.i, i64 0, i32 1 store ptr @alloc_513570631223a12912d85da2bec3b15a, ptr %8, align 8 %9 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_2.i, i64 0, i32 1, i32 1 store i64 0, ptr %9, align 8 ; call std::io::stdio::_print call void @_ZN3std2io5stdio6_print17h159df1e36ccb658eE(ptr noalias nocapture noundef nonnull align 8 dereferenceable(48) %_2.i) call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %_2.i) %10 = atomicrmw add ptr getelementptr inbounds ([2 x i64], ptr @__profc__RNvCs4zUb9XLQiyW_6async214non_async_func, i64 0, i64 1), i64 1 monotonic, align 8 call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %_5.i) store ptr @alloc_beefbc7dab13e3fb922964c749019704, ptr %_5.i, align 8 %11 = getelementptr inbounds { ptr, i64 }, ptr %_5.i, i64 0, i32 1 store i64 1, ptr %11, align 8 %12 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_5.i, i64 0, i32 2 store ptr null, ptr %12, align 8 %13 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_5.i, i64 0, i32 1 store ptr @alloc_513570631223a12912d85da2bec3b15a, ptr %13, align 8 %14 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_5.i, i64 0, i32 1, i32 1 store i64 0, ptr %14, align 8 ; call std::io::stdio::_print call void @_ZN3std2io5stdio6_print17h159df1e36ccb658eE(ptr noalias nocapture noundef nonnull align 8 dereferenceable(48) %_5.i) call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %_5.i) %15 = atomicrmw add ptr @__profc__RNvCs4zUb9XLQiyW_6async210async_func, i64 1 monotonic, align 8 %16 = atomicrmw add ptr @__profc__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_10async_func0EB4_, i64 1 monotonic, align 8 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %waker.i) store ptr @_RNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLE, ptr %waker.i, align 8 %17 = getelementptr inbounds { ptr, ptr }, ptr %waker.i, i64 0, i32 1 store ptr null, ptr %17, align 8 %18 = atomicrmw add ptr @__profc__RNCNvCs4zUb9XLQiyW_6async210async_func0B3_, i64 1 monotonic, align 8 call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %_4.i.i) store ptr @alloc_bb9cfe869d3fbd1b0bac54c64137be2e, ptr %_4.i.i, align 8, !alias.scope !12, !noalias !15 %19 = getelementptr inbounds { ptr, i64 }, ptr %_4.i.i, i64 0, i32 1 store i64 1, ptr %19, align 8, !alias.scope !12, !noalias !15 %20 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_4.i.i, i64 0, i32 2 store ptr null, ptr %20, align 8, !alias.scope !12, !noalias !15 %21 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_4.i.i, i64 0, i32 1 store ptr @alloc_513570631223a12912d85da2bec3b15a, ptr %21, align 8, !alias.scope !12, !noalias !15 %22 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_4.i.i, i64 0, i32 1, i32 1 store i64 0, ptr %22, align 8, !alias.scope !12, !noalias !15 ; invoke std::io::stdio::_print invoke void @_ZN3std2io5stdio6_print17h159df1e36ccb658eE(ptr noalias nocapture noundef nonnull align 8 dereferenceable(48) %_4.i.i) to label %bb5.i.i unwind label %cleanup1.i.i cleanup1.i.i: ; preds = %start %23 = landingpad { ptr, i32 } cleanup call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %_4.i.i) br label %cleanup.body.i bb5.i.i: ; preds = %start call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %_4.i.i) %24 = atomicrmw add ptr getelementptr inbounds ([2 x i64], ptr @__profc__RNCNvCs4zUb9XLQiyW_6async210async_func0B3_, i64 0, i64 1), i64 1 monotonic, align 8 call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %_8.i.i) store ptr @alloc_8a2eecf69e2fc1f364ea48da3a4d02ff, ptr %_8.i.i, align 8, !alias.scope !17, !noalias !20 %25 = getelementptr inbounds { ptr, i64 }, ptr %_8.i.i, i64 0, i32 1 store i64 1, ptr %25, align 8, !alias.scope !17, !noalias !20 %26 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_8.i.i, i64 0, i32 2 store ptr null, ptr %26, align 8, !alias.scope !17, !noalias !20 %27 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_8.i.i, i64 0, i32 1 store ptr @alloc_513570631223a12912d85da2bec3b15a, ptr %27, align 8, !alias.scope !17, !noalias !20 %28 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_8.i.i, i64 0, i32 1, i32 1 store i64 0, ptr %28, align 8, !alias.scope !17, !noalias !20 ; invoke std::io::stdio::_print invoke void @_ZN3std2io5stdio6_print17h159df1e36ccb658eE(ptr noalias nocapture noundef nonnull align 8 dereferenceable(48) %_8.i.i) to label %_RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_10async_func0EB4_.exit unwind label %cleanup3.i.i cleanup3.i.i: ; preds = %bb5.i.i %29 = landingpad { ptr, i32 } cleanup call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %_8.i.i) br label %cleanup.body.i cleanup.body.i: ; preds = %cleanup3.i.i, %cleanup1.i.i %.pn6.pn.i.i = phi { ptr, i32 } [ %29, %cleanup3.i.i ], [ %23, %cleanup1.i.i ] ; invoke core::ptr::drop_in_place:: invoke fastcc void @_RINvNtCscBXtjtswptt_4core3ptr13drop_in_placeNtNtNtB4_4task4wake5WakerECs4zUb9XLQiyW_6async2(ptr noalias noundef nonnull align 8 dereferenceable(16) %waker.i) #9 to label %common.resume unwind label %terminate.i terminate.i: ; preds = %cleanup.body.i %30 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer ; call core::panicking::panic_in_cleanup tail call void @_ZN4core9panicking16panic_in_cleanup17h79e82dd57955c40cE() #12 unreachable common.resume: ; preds = %cleanup.body.i4, %cleanup.body.i %common.resume.op = phi { ptr, i32 } [ %.pn6.pn.i.i, %cleanup.body.i ], [ %40, %cleanup.body.i4 ] resume { ptr, i32 } %common.resume.op _RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_10async_func0EB4_.exit: ; preds = %bb5.i.i call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %_8.i.i) %31 = atomicrmw add ptr @__profc__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs1_0B7_, i64 1 monotonic, align 8 call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %waker.i) %32 = atomicrmw add ptr @__profc__RNvCs4zUb9XLQiyW_6async223async_func_just_println, i64 1 monotonic, align 8 %33 = atomicrmw add ptr @__profc__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_23async_func_just_println0EB4_, i64 1 monotonic, align 8 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %waker.i3) store ptr @_RNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLE, ptr %waker.i3, align 8 %34 = getelementptr inbounds { ptr, ptr }, ptr %waker.i3, i64 0, i32 1 store ptr null, ptr %34, align 8 %35 = atomicrmw add ptr @__profc__RNCNvCs4zUb9XLQiyW_6async223async_func_just_println0B3_, i64 1 monotonic, align 8 call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %_4.i.i2) store ptr @alloc_228521f8fdd0525c9bea7f9192a53491, ptr %_4.i.i2, align 8, !alias.scope !22, !noalias !25 %36 = getelementptr inbounds { ptr, i64 }, ptr %_4.i.i2, i64 0, i32 1 store i64 1, ptr %36, align 8, !alias.scope !22, !noalias !25 %37 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_4.i.i2, i64 0, i32 2 store ptr null, ptr %37, align 8, !alias.scope !22, !noalias !25 %38 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_4.i.i2, i64 0, i32 1 store ptr @alloc_513570631223a12912d85da2bec3b15a, ptr %38, align 8, !alias.scope !22, !noalias !25 %39 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_4.i.i2, i64 0, i32 1, i32 1 store i64 0, ptr %39, align 8, !alias.scope !22, !noalias !25 ; invoke std::io::stdio::_print invoke void @_ZN3std2io5stdio6_print17h159df1e36ccb658eE(ptr noalias nocapture noundef nonnull align 8 dereferenceable(48) %_4.i.i2) to label %_RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_23async_func_just_println0EB4_.exit unwind label %cleanup.body.i4 cleanup.body.i4: ; preds = %_RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_10async_func0EB4_.exit %40 = landingpad { ptr, i32 } cleanup call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %_4.i.i2) ; invoke core::ptr::drop_in_place:: invoke fastcc void @_RINvNtCscBXtjtswptt_4core3ptr13drop_in_placeNtNtNtB4_4task4wake5WakerECs4zUb9XLQiyW_6async2(ptr noalias noundef nonnull align 8 dereferenceable(16) %waker.i3) #9 to label %common.resume unwind label %terminate.i5 terminate.i5: ; preds = %cleanup.body.i4 %41 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer ; call core::panicking::panic_in_cleanup tail call void @_ZN4core9panicking16panic_in_cleanup17h79e82dd57955c40cE() #12 unreachable _RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_23async_func_just_println0EB4_.exit: ; preds = %_RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_10async_func0EB4_.exit call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %_4.i.i2) %42 = atomicrmw add ptr @__profc__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs1_0B7_, i64 1 monotonic, align 8 call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %waker.i3) ret void } ; std::rt::lang_start_internal ; Function Attrs: uwtable declare noundef i64 @_ZN3std2rt19lang_start_internal17he54ad6d8e161668fE(ptr noundef nonnull align 1, ptr noalias noundef readonly align 8 dereferenceable(24), i64 noundef, ptr noundef, i8 noundef) unnamed_addr #0 ; Function Attrs: uwtable declare noundef i32 @rust_eh_personality(i32 noundef, i32 noundef, i64 noundef, ptr noundef, ptr noundef) unnamed_addr #0 ; std::io::stdio::_print ; Function Attrs: uwtable declare void @_ZN3std2io5stdio6_print17h159df1e36ccb658eE(ptr noalias nocapture noundef align 8 dereferenceable(48)) unnamed_addr #0 ; core::panicking::panic_in_cleanup ; Function Attrs: cold noinline noreturn nounwind uwtable declare void @_ZN4core9panicking16panic_in_cleanup17h79e82dd57955c40cE() unnamed_addr #6 define i32 @main(i32 %0, ptr %1) unnamed_addr #7 { top: %_8.i = alloca ptr, align 8 %2 = sext i32 %0 to i64 call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %_8.i) store ptr @_RNvCs4zUb9XLQiyW_6async24main, ptr %_8.i, align 8 ; call std::rt::lang_start_internal %3 = call noundef i64 @_ZN3std2rt19lang_start_internal17he54ad6d8e161668fE(ptr noundef nonnull align 1 %_8.i, ptr noalias noundef nonnull readonly align 8 dereferenceable(24) @vtable.0, i64 noundef %2, ptr noundef %1, i8 noundef 0) call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %_8.i) %4 = trunc i64 %3 to i32 ret i32 %4 } ; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #8 ; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #8 ; Function Attrs: noinline define linkonce_odr hidden i32 @__llvm_profile_runtime_user() #9 { %1 = load i32, ptr @__llvm_profile_runtime, align 4 ret i32 %1 } ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) declare void @llvm.experimental.noalias.scope.decl(metadata) #10 attributes #0 = { uwtable "frame-pointer"="non-leaf" "target-cpu"="apple-m1" } attributes #1 = { inlinehint mustprogress nofree norecurse nosync nounwind willreturn memory(none) uwtable "frame-pointer"="non-leaf" "target-cpu"="apple-m1" } attributes #2 = { noinline uwtable "frame-pointer"="non-leaf" "target-cpu"="apple-m1" } attributes #3 = { inlinehint uwtable "frame-pointer"="non-leaf" "target-cpu"="apple-m1" } attributes #4 = { inlinehint mustprogress nofree norecurse noreturn nosync nounwind willreturn memory(none) uwtable "frame-pointer"="non-leaf" "target-cpu"="apple-m1" } attributes #5 = { inlinehint mustprogress nofree norecurse nounwind willreturn memory(readwrite, argmem: none, inaccessiblemem: none) uwtable "frame-pointer"="non-leaf" "target-cpu"="apple-m1" } attributes #6 = { cold noinline noreturn nounwind uwtable "frame-pointer"="non-leaf" "target-cpu"="apple-m1" } attributes #7 = { "frame-pointer"="non-leaf" "target-cpu"="apple-m1" } attributes #8 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) } attributes #9 = { noinline } attributes #10 = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) } attributes #11 = { nounwind } attributes #12 = { noinline noreturn nounwind } !llvm.module.flags = !{!0, !1} !llvm.ident = !{!2} !0 = !{i32 8, !"PIC Level", i32 2} !1 = !{i32 7, !"PIE Level", i32 2} !2 = !{!"rustc version 1.74.0-dev"} !3 = !{!4} !4 = distinct !{!4, !5, !"_ZN65_$LT$core..task..wake..Waker$u20$as$u20$core..ops..drop..Drop$GT$4drop17h46a336b29aede688E: %self"} !5 = distinct !{!5, !"_ZN65_$LT$core..task..wake..Waker$u20$as$u20$core..ops..drop..Drop$GT$4drop17h46a336b29aede688E"} !6 = !{} !7 = !{i64 8} !8 = !{i32 587843} !9 = !{!10} !10 = distinct !{!10, !11, !"_RNCINvNtCs8koKRe9ETht_3std2rt10lang_startuE0Cs4zUb9XLQiyW_6async2: %_1"} !11 = distinct !{!11, !"_RNCINvNtCs8koKRe9ETht_3std2rt10lang_startuE0Cs4zUb9XLQiyW_6async2"} !12 = !{!13} !13 = distinct !{!13, !14, !"_ZN4core3fmt9Arguments9new_const17h4dfb0a79b9637285E: %_0"} !14 = distinct !{!14, !"_ZN4core3fmt9Arguments9new_const17h4dfb0a79b9637285E"} !15 = !{!16} !16 = distinct !{!16, !14, !"_ZN4core3fmt9Arguments9new_const17h4dfb0a79b9637285E: %pieces.0"} !17 = !{!18} !18 = distinct !{!18, !19, !"_ZN4core3fmt9Arguments9new_const17h4dfb0a79b9637285E: %_0"} !19 = distinct !{!19, !"_ZN4core3fmt9Arguments9new_const17h4dfb0a79b9637285E"} !20 = !{!21} !21 = distinct !{!21, !19, !"_ZN4core3fmt9Arguments9new_const17h4dfb0a79b9637285E: %pieces.0"} !22 = !{!23} !23 = distinct !{!23, !24, !"_ZN4core3fmt9Arguments9new_const17h4dfb0a79b9637285E: %_0"} !24 = distinct !{!24, !"_ZN4core3fmt9Arguments9new_const17h4dfb0a79b9637285E"} !25 = !{!26} !26 = distinct !{!26, !24, !"_ZN4core3fmt9Arguments9new_const17h4dfb0a79b9637285E: %pieces.0"} ```
Zalathar commented 1 year ago

Looking at the LLVM IR, it seems that the closures have an unreachable body, with no remnant of the llvm.instrprof.increment.

Perhaps that intrinsic is being optimized away before the InstrProfiling pass sees it, so from the instrumentor's perspective it isn't instrumented at all.

Zalathar commented 1 year ago
async2.ll (from master, for comparison) ```llvm ; ModuleID = 'async2.3556024874bfaf70-cgu.0' source_filename = "async2.3556024874bfaf70-cgu.0" target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128" target triple = "arm64-apple-macosx11.0.0" %"core::task::wake::RawWakerVTable" = type { ptr, ptr, ptr, ptr } %"core::fmt::Arguments<'_>" = type { { ptr, i64 }, { ptr, i64 }, { ptr, i64 } } @vtable.0 = private unnamed_addr constant <{ ptr, [16 x i8], ptr, ptr, ptr }> <{ ptr @_RINvNtCscBXtjtswptt_4core3ptr13drop_in_placeNCINvNtCs8koKRe9ETht_3std2rt10lang_startuE0ECs4zUb9XLQiyW_6async2, [16 x i8] c"\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00", ptr @_RNSNvYNCINvNtCs8koKRe9ETht_3std2rt10lang_startuE0INtNtNtCscBXtjtswptt_4core3ops8function6FnOnceuE9call_once6vtableCs4zUb9XLQiyW_6async2, ptr @_RNCINvNtCs8koKRe9ETht_3std2rt10lang_startuE0Cs4zUb9XLQiyW_6async2, ptr @_RNCINvNtCs8koKRe9ETht_3std2rt10lang_startuE0Cs4zUb9XLQiyW_6async2 }>, align 8 @alloc_513570631223a12912d85da2bec3b15a = private unnamed_addr constant <{}> zeroinitializer, align 8 @alloc_9ba35fb86d20c9c13d197ffc9a9264ba = private unnamed_addr constant <{ [27 x i8] }> <{ [27 x i8] c"non_async_func was covered\0A" }>, align 1 @alloc_a921d308b684528df82f6e4dffdb80bd = private unnamed_addr constant <{ ptr, [8 x i8] }> <{ ptr @alloc_9ba35fb86d20c9c13d197ffc9a9264ba, [8 x i8] c"\1B\00\00\00\00\00\00\00" }>, align 8 @alloc_842fe36ca0d975cd1eb64dadf6b36635 = private unnamed_addr constant <{ [32 x i8] }> <{ [32 x i8] c"non_async_func println in block\0A" }>, align 1 @alloc_beefbc7dab13e3fb922964c749019704 = private unnamed_addr constant <{ ptr, [8 x i8] }> <{ ptr @alloc_842fe36ca0d975cd1eb64dadf6b36635, [8 x i8] c" \00\00\00\00\00\00\00" }>, align 8 @alloc_22eeafdaf5b2dda1e0b3955ae16d58d8 = private unnamed_addr constant <{ [23 x i8] }> <{ [23 x i8] c"async_func was covered\0A" }>, align 1 @alloc_bb9cfe869d3fbd1b0bac54c64137be2e = private unnamed_addr constant <{ ptr, [8 x i8] }> <{ ptr @alloc_22eeafdaf5b2dda1e0b3955ae16d58d8, [8 x i8] c"\17\00\00\00\00\00\00\00" }>, align 8 @alloc_8b8d639be3764847ca76057a8208860f = private unnamed_addr constant <{ [28 x i8] }> <{ [28 x i8] c"async_func println in block\0A" }>, align 1 @alloc_8a2eecf69e2fc1f364ea48da3a4d02ff = private unnamed_addr constant <{ ptr, [8 x i8] }> <{ ptr @alloc_8b8d639be3764847ca76057a8208860f, [8 x i8] c"\1C\00\00\00\00\00\00\00" }>, align 8 @alloc_626c5d64fd47031c853154dd4aeec363 = private unnamed_addr constant <{ [36 x i8] }> <{ [36 x i8] c"async_func_just_println was covered\0A" }>, align 1 @alloc_228521f8fdd0525c9bea7f9192a53491 = private unnamed_addr constant <{ ptr, [8 x i8] }> <{ ptr @alloc_626c5d64fd47031c853154dd4aeec363, [8 x i8] c"$\00\00\00\00\00\00\00" }>, align 8 @alloc_fa958ac97aa85c340217f7ce164b63cf = private unnamed_addr constant <{ [20 x i8] }> <{ [20 x i8] c"codecovsample::main\0A" }>, align 1 @alloc_8c6fa871f2b6ccc3596c5d8143fd3c62 = private unnamed_addr constant <{ ptr, [8 x i8] }> <{ ptr @alloc_fa958ac97aa85c340217f7ce164b63cf, [8 x i8] c"\14\00\00\00\00\00\00\00" }>, align 8 @_RNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLE = internal constant <{ ptr, ptr, ptr, ptr }> <{ ptr @_RNvYNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLE0INtNtNtCscBXtjtswptt_4core3ops8function6FnOnceTPuEE9call_onceBa_, ptr @_RNvYNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs0_0INtNtNtCscBXtjtswptt_4core3ops8function6FnOnceTPuEE9call_onceBa_, ptr @_RNvYNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs0_0INtNtNtCscBXtjtswptt_4core3ops8function6FnOnceTPuEE9call_onceBa_, ptr @_RNvYNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs1_0INtNtNtCscBXtjtswptt_4core3ops8function6FnOnceTPuEE9call_onceBa_ }>, align 8 @__covrec_F74DDFE43B4BAE36u = linkonce_odr hidden constant <{ i64, i32, i64, i64, [9 x i8] }> <{ i64 -626598601794277834, i32 9, i64 -6856040691413589372, i64 1889826389874031115, [9 x i8] c"\01\01\00\01\01.\11\00\13" }>, section "__LLVM_COV,__llvm_covfun", align 8 @__covrec_E1A8165202F21C03u = linkonce_odr hidden constant <{ i64, i32, i64, i64, [9 x i8] }> <{ i64 -2186473077595825149, i32 9, i64 155372126598700742, i64 1889826389874031115, [9 x i8] c"\01\01\00\01\01\13\01\00$" }>, section "__LLVM_COV,__llvm_covfun", align 8 @__covrec_5BC727AD826DA7A4u = linkonce_odr hidden constant <{ i64, i32, i64, i64, [28 x i8] }> <{ i64 6613298203987912612, i32 28, i64 1759751756802921227, i64 1889826389874031115, [28 x i8] c"\01\01\02\01\05\05\02\04\01\0B\17\03\09\05\03\0A\02\06\02\02\06\00\07\07\01\01\00\02" }>, section "__LLVM_COV,__llvm_covfun", align 8 @__covrec_AF0136FEB71B924Cu = linkonce_odr hidden constant <{ i64, i32, i64, i64, [9 x i8] }> <{ i64 -5836323174473821620, i32 9, i64 155372126598700742, i64 1889826389874031115, [9 x i8] c"\01\01\00\01\01\13$\02\02" }>, section "__LLVM_COV,__llvm_covfun", align 8 @__covrec_B970A97BED51257Au = linkonce_odr hidden constant <{ i64, i32, i64, i64, [9 x i8] }> <{ i64 -5084377629573700230, i32 9, i64 -6856040691413589372, i64 1889826389874031115, [9 x i8] c"\01\01\00\01\01+\11\003" }>, section "__LLVM_COV,__llvm_covfun", align 8 @__covrec_3BF8FE240EC55615u = linkonce_odr hidden constant <{ i64, i32, i64, i64, [9 x i8] }> <{ i64 4321483273282082325, i32 9, i64 719582524320644771, i64 1889826389874031115, [9 x i8] c"\01\01\00\01\01\17\01\07\02" }>, section "__LLVM_COV,__llvm_covfun", align 8 @__covrec_7A4298E94A9FBACAu = linkonce_odr hidden constant <{ i64, i32, i64, i64, [26 x i8] }> <{ i64 8809771948836895434, i32 26, i64 -3630791716643471453, i64 1889826389874031115, [26 x i8] c"\01\01\01\05\00\04\01\03\01\03\09\05\03\0A\02\06\00\02\06\00\07\03\01\01\00\02" }>, section "__LLVM_COV,__llvm_covfun", align 8 @__covrec_2E7D282BFF3BC65Au = linkonce_odr hidden constant <{ i64, i32, i64, i64, [9 x i8] }> <{ i64 3349877867264329306, i32 9, i64 1759751756802921227, i64 1889826389874031115, [9 x i8] c"\01\01\00\01\01\0B\01\00\17" }>, section "__LLVM_COV,__llvm_covfun", align 8 @__covrec_BCBD2FA868D7E7A1u = linkonce_odr hidden constant <{ i64, i32, i64, i64, [9 x i8] }> <{ i64 -4846665223620794463, i32 9, i64 -6856040691413589372, i64 1889826389874031115, [9 x i8] c"\01\01\00\01\01,\11\003" }>, section "__LLVM_COV,__llvm_covfun", align 8 @__covrec_82806BDCC676AC9Eu = linkonce_odr hidden constant <{ i64, i32, i64, i64, [44 x i8] }> <{ i64 -9043109455793312610, i32 44, i64 -8617230451985595640, i64 1889826389874031115, [44 x i8] c"\01\01\05\0B\05\01\05\01\05\02\00\02\00\06\01'\05\0A6\02\0D \00#\0B\00'\00I\0F\01\17\00\1A\05\01\0E\00\0F\13\02\05\00\06" }>, section "__LLVM_COV,__llvm_covfun", align 8 @__covrec_8AD7B697A08EFFCAu = linkonce_odr hidden constant <{ i64, i32, i64, i64, [44 x i8] }> <{ i64 -8442078214132662326, i32 44, i64 -8617230451985595640, i64 1889826389874031115, [44 x i8] c"\01\01\05\0B\05\01\05\01\05\02\00\02\00\06\01'\05\0A6\02\0D \00#\0B\00'\00I\0F\01\17\00\1A\05\01\0E\00\0F\13\02\05\00\06" }>, section "__LLVM_COV,__llvm_covfun", align 8 @__covrec_A2FE9A724E39BD63u = linkonce_odr hidden constant <{ i64, i32, i64, i64, [9 x i8] }> <{ i64 -6701749379751363229, i32 9, i64 -6856040691413589372, i64 1889826389874031115, [9 x i8] c"\01\01\00\01\01-\11\003" }>, section "__LLVM_COV,__llvm_covfun", align 8 @__llvm_coverage_mapping = private constant { { i32, i32, i32, i32 }, [77 x i8] } { { i32, i32, i32, i32 } { i32 0, i32 77, i32 0, i32 5 }, [77 x i8] c"\02`Jx\DA\93\D6\0F-N-*\D6/.)M,*\D1wI-\D3/*-.\01\13\CEx\E4\F4KR\8BK\8A\F5\93\F3\CBR\8B\12\D3Sus\13\0B\80\EA\12KJ\8Bu\0BK\F3\F5\13\8B+\F3\92\8D\F4\8A\8A\01\CE<$D" }, section "__LLVM_COV,__llvm_covmap", align 8 @__llvm_profile_runtime = external hidden local_unnamed_addr global i32 @__profc__RNvCs4zUb9XLQiyW_6async214non_async_func = private global [2 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8 @__profd__RNvCs4zUb9XLQiyW_6async214non_async_func = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 8809771948836895434, i64 -3630791716643471453, i64 sub (i64 ptrtoint (ptr @__profc__RNvCs4zUb9XLQiyW_6async214non_async_func to i64), i64 ptrtoint (ptr @__profd__RNvCs4zUb9XLQiyW_6async214non_async_func to i64)), ptr null, ptr null, i32 2, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8 @__profc__RNvCs4zUb9XLQiyW_6async210async_func = private global [1 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8 @__profd__RNvCs4zUb9XLQiyW_6async210async_func = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 3349877867264329306, i64 1759751756802921227, i64 sub (i64 ptrtoint (ptr @__profc__RNvCs4zUb9XLQiyW_6async210async_func to i64), i64 ptrtoint (ptr @__profd__RNvCs4zUb9XLQiyW_6async210async_func to i64)), ptr null, ptr null, i32 1, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8 @__profc__RNCNvCs4zUb9XLQiyW_6async210async_func0B3_ = private global [2 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8 @__profd__RNCNvCs4zUb9XLQiyW_6async210async_func0B3_ = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 6613298203987912612, i64 1759751756802921227, i64 sub (i64 ptrtoint (ptr @__profc__RNCNvCs4zUb9XLQiyW_6async210async_func0B3_ to i64), i64 ptrtoint (ptr @__profd__RNCNvCs4zUb9XLQiyW_6async210async_func0B3_ to i64)), ptr null, ptr null, i32 2, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8 @__profc__RNvCs4zUb9XLQiyW_6async223async_func_just_println = private global [1 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8 @__profd__RNvCs4zUb9XLQiyW_6async223async_func_just_println = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 -2186473077595825149, i64 155372126598700742, i64 sub (i64 ptrtoint (ptr @__profc__RNvCs4zUb9XLQiyW_6async223async_func_just_println to i64), i64 ptrtoint (ptr @__profd__RNvCs4zUb9XLQiyW_6async223async_func_just_println to i64)), ptr null, ptr null, i32 1, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8 @__profc__RNCNvCs4zUb9XLQiyW_6async223async_func_just_println0B3_ = private global [1 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8 @__profd__RNCNvCs4zUb9XLQiyW_6async223async_func_just_println0B3_ = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 -5836323174473821620, i64 155372126598700742, i64 sub (i64 ptrtoint (ptr @__profc__RNCNvCs4zUb9XLQiyW_6async223async_func_just_println0B3_ to i64), i64 ptrtoint (ptr @__profd__RNCNvCs4zUb9XLQiyW_6async223async_func_just_println0B3_ to i64)), ptr null, ptr null, i32 1, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8 @__profc__RNvCs4zUb9XLQiyW_6async24main = private global [1 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8 @__profd__RNvCs4zUb9XLQiyW_6async24main = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 4321483273282082325, i64 719582524320644771, i64 sub (i64 ptrtoint (ptr @__profc__RNvCs4zUb9XLQiyW_6async24main to i64), i64 ptrtoint (ptr @__profd__RNvCs4zUb9XLQiyW_6async24main to i64)), ptr null, ptr null, i32 1, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8 @__profc__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_10async_func0EB4_ = private global [2 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8 @__profd__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_10async_func0EB4_ = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 -9043109455793312610, i64 -8617230451985595640, i64 sub (i64 ptrtoint (ptr @__profc__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_10async_func0EB4_ to i64), i64 ptrtoint (ptr @__profd__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_10async_func0EB4_ to i64)), ptr null, ptr null, i32 2, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8 @__profc__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_23async_func_just_println0EB4_ = private global [2 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8 @__profd__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_23async_func_just_println0EB4_ = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 -8442078214132662326, i64 -8617230451985595640, i64 sub (i64 ptrtoint (ptr @__profc__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_23async_func_just_println0EB4_ to i64), i64 ptrtoint (ptr @__profd__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_23async_func_just_println0EB4_ to i64)), ptr null, ptr null, i32 2, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8 @__profc__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLE0B7_ = private global [1 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8 @__profd__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLE0B7_ = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 -5084377629573700230, i64 -6856040691413589372, i64 sub (i64 ptrtoint (ptr @__profc__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLE0B7_ to i64), i64 ptrtoint (ptr @__profd__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLE0B7_ to i64)), ptr null, ptr null, i32 1, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8 @__profc__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs_0B7_ = private global [1 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8 @__profd__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs_0B7_ = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 -4846665223620794463, i64 -6856040691413589372, i64 sub (i64 ptrtoint (ptr @__profc__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs_0B7_ to i64), i64 ptrtoint (ptr @__profd__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs_0B7_ to i64)), ptr null, ptr null, i32 1, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8 @__profc__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs0_0B7_ = private global [1 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8 @__profd__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs0_0B7_ = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 -6701749379751363229, i64 -6856040691413589372, i64 sub (i64 ptrtoint (ptr @__profc__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs0_0B7_ to i64), i64 ptrtoint (ptr @__profd__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs0_0B7_ to i64)), ptr null, ptr null, i32 1, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8 @__profc__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs1_0B7_ = private global [1 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8 @__profd__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs1_0B7_ = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 -626598601794277834, i64 -6856040691413589372, i64 sub (i64 ptrtoint (ptr @__profc__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs1_0B7_ to i64), i64 ptrtoint (ptr @__profd__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs1_0B7_ to i64)), ptr null, ptr null, i32 1, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8 @__llvm_prf_nm = private constant [167 x i8] c"\9D\05\A3\01x\DA\8B\0F\F2+s.6\A9\0AM\B2\8C\F0\09\CC\AC\0C\8F7K,\AE\CCK624\C9\CB\CF\8B\07\B3\E3\D3J\F3\92\19\E3q\AA4@U\E5L\84:\03'\E3x\DC&\1A\19#T\C6g\95\16\97\C4\17\14e\E6\95\E4\E4\E13\1E\A7&\FCv\99\E4&f\82\CC\F5\F4+\F3+\C1\AA\C2\22\B5\225\B9\B4$\BF\C8\22)'?9;>?\0F\E4\06'\93x\14\0F\B9\02\05\C83\06\B7\C3\A1f\82\D4\91`\ACYX\88\A3\93\8F\AB\81\939\F9\9A\8B\E3)\D3n@\A1~C\B0~\00tI\EC\85", section "__DATA,__llvm_prf_names", align 1 @__llvm_profile_filename = weak hidden local_unnamed_addr constant [22 x i8] c"default_%m_%p.profraw\00" @llvm.used = appending global [14 x ptr] [ptr @__covrec_2E7D282BFF3BC65Au, ptr @__covrec_3BF8FE240EC55615u, ptr @__covrec_5BC727AD826DA7A4u, ptr @__covrec_7A4298E94A9FBACAu, ptr @__covrec_82806BDCC676AC9Eu, ptr @__covrec_8AD7B697A08EFFCAu, ptr @__covrec_A2FE9A724E39BD63u, ptr @__covrec_AF0136FEB71B924Cu, ptr @__covrec_B970A97BED51257Au, ptr @__covrec_BCBD2FA868D7E7A1u, ptr @__covrec_E1A8165202F21C03u, ptr @__covrec_F74DDFE43B4BAE36u, ptr @__llvm_coverage_mapping, ptr @__llvm_prf_nm], section "llvm.metadata" @llvm.compiler.used = appending global [13 x ptr] [ptr @__llvm_profile_runtime_user, ptr @__profd__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_10async_func0EB4_, ptr @__profd__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_23async_func_just_println0EB4_, ptr @__profd__RNCNvCs4zUb9XLQiyW_6async210async_func0B3_, ptr @__profd__RNCNvCs4zUb9XLQiyW_6async223async_func_just_println0B3_, ptr @__profd__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLE0B7_, ptr @__profd__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs0_0B7_, ptr @__profd__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs1_0B7_, ptr @__profd__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs_0B7_, ptr @__profd__RNvCs4zUb9XLQiyW_6async210async_func, ptr @__profd__RNvCs4zUb9XLQiyW_6async214non_async_func, ptr @__profd__RNvCs4zUb9XLQiyW_6async223async_func_just_println, ptr @__profd__RNvCs4zUb9XLQiyW_6async24main], section "llvm.metadata" ; std::rt::lang_start::<()> ; Function Attrs: uwtable define hidden noundef i64 @_RINvNtCs8koKRe9ETht_3std2rt10lang_startuECs4zUb9XLQiyW_6async2(ptr noundef nonnull %main, i64 noundef %argc, ptr noundef %argv, i8 noundef %sigpipe) unnamed_addr #0 { start: %_8 = alloca ptr, align 8 call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %_8) store ptr %main, ptr %_8, align 8 ; call std::rt::lang_start_internal %0 = call noundef i64 @_ZN3std2rt19lang_start_internal17he54ad6d8e161668fE(ptr noundef nonnull align 1 %_8, ptr noalias noundef nonnull readonly align 8 dereferenceable(24) @vtable.0, i64 noundef %argc, ptr noundef %argv, i8 noundef %sigpipe) call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %_8) ret i64 %0 } ; core::ptr::drop_in_place::::{closure#0}> ; Function Attrs: inlinehint mustprogress nofree norecurse nosync nounwind willreturn memory(none) uwtable define internal void @_RINvNtCscBXtjtswptt_4core3ptr13drop_in_placeNCINvNtCs8koKRe9ETht_3std2rt10lang_startuE0ECs4zUb9XLQiyW_6async2(ptr noalias nocapture readnone align 8 %_1) unnamed_addr #1 { start: ret void } ; core::ptr::drop_in_place:: ; Function Attrs: uwtable define internal fastcc void @_RINvNtCscBXtjtswptt_4core3ptr13drop_in_placeNtNtNtB4_4task4wake5WakerECs4zUb9XLQiyW_6async2(ptr noalias nocapture noundef readonly align 8 dereferenceable(16) %_1) unnamed_addr #0 { start: tail call void @llvm.experimental.noalias.scope.decl(metadata !3) %_4.i = load ptr, ptr %_1, align 8, !alias.scope !3, !nonnull !6, !align !7, !noundef !6 %0 = getelementptr inbounds %"core::task::wake::RawWakerVTable", ptr %_4.i, i64 0, i32 3 %_2.i = load ptr, ptr %0, align 8, !noalias !3, !nonnull !6, !noundef !6 %1 = getelementptr inbounds { ptr, ptr }, ptr %_1, i64 0, i32 1 %_3.i = load ptr, ptr %1, align 8, !alias.scope !3, !noundef !6 tail call void %_2.i(ptr noundef %_3.i), !noalias !3 ret void } ; std::sys_common::backtrace::__rust_begin_short_backtrace:: ; Function Attrs: noinline uwtable define internal fastcc void @_RINvNtNtCs8koKRe9ETht_3std10sys_common9backtrace28___rust_begin_short_backtraceFEuuECs4zUb9XLQiyW_6async2(ptr nocapture noundef nonnull readonly %f) unnamed_addr #2 { start: tail call void %f() tail call void asm sideeffect "", "~{memory}"() #11, !srcloc !8 ret void } ; std::rt::lang_start::<()>::{closure#0} ; Function Attrs: inlinehint uwtable define internal noundef i32 @_RNCINvNtCs8koKRe9ETht_3std2rt10lang_startuE0Cs4zUb9XLQiyW_6async2(ptr noalias nocapture noundef readonly align 8 dereferenceable(8) %_1) unnamed_addr #3 { start: %_4 = load ptr, ptr %_1, align 8, !nonnull !6, !noundef !6 ; call std::sys_common::backtrace::__rust_begin_short_backtrace:: tail call fastcc void @_RINvNtNtCs8koKRe9ETht_3std10sys_common9backtrace28___rust_begin_short_backtraceFEuuECs4zUb9XLQiyW_6async2(ptr noundef nonnull %_4) ret i32 0 } ; ::{closure#0} as core::ops::function::FnOnce<()>>::call_once::{shim:vtable#0} ; Function Attrs: inlinehint uwtable define internal noundef i32 @_RNSNvYNCINvNtCs8koKRe9ETht_3std2rt10lang_startuE0INtNtNtCscBXtjtswptt_4core3ops8function6FnOnceuE9call_once6vtableCs4zUb9XLQiyW_6async2(ptr nocapture noundef readonly %_1) unnamed_addr #3 personality ptr @rust_eh_personality { start: %0 = load ptr, ptr %_1, align 8, !nonnull !6, !noundef !6 ; call std::sys_common::backtrace::__rust_begin_short_backtrace:: tail call fastcc void @_RINvNtNtCs8koKRe9ETht_3std10sys_common9backtrace28___rust_begin_short_backtraceFEuuECs4zUb9XLQiyW_6async2(ptr noundef nonnull %0), !noalias !9 ret i32 0 } ; >::call_once ; Function Attrs: inlinehint mustprogress nofree norecurse noreturn nosync nounwind willreturn memory(none) uwtable define internal { ptr, ptr } @_RNvYNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLE0INtNtNtCscBXtjtswptt_4core3ops8function6FnOnceTPuEE9call_onceBa_(ptr nocapture readnone %0) unnamed_addr #4 personality ptr @rust_eh_personality { start: unreachable } ; >::call_once ; Function Attrs: inlinehint mustprogress nofree norecurse noreturn nosync nounwind willreturn memory(none) uwtable define internal void @_RNvYNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs0_0INtNtNtCscBXtjtswptt_4core3ops8function6FnOnceTPuEE9call_onceBa_(ptr nocapture readnone %0) unnamed_addr #4 personality ptr @rust_eh_personality { start: unreachable } ; >::call_once ; Function Attrs: inlinehint mustprogress nofree norecurse nounwind willreturn memory(readwrite, argmem: none, inaccessiblemem: none) uwtable define internal void @_RNvYNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs1_0INtNtNtCscBXtjtswptt_4core3ops8function6FnOnceTPuEE9call_onceBa_(ptr nocapture readnone %0) unnamed_addr #5 personality ptr @rust_eh_personality { start: %1 = atomicrmw add ptr @__profc__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs1_0B7_, i64 1 monotonic, align 8 ret void } ; async2::main ; Function Attrs: uwtable define internal void @_RNvCs4zUb9XLQiyW_6async24main() unnamed_addr #0 personality ptr @rust_eh_personality { start: %_4.i.i2 = alloca %"core::fmt::Arguments<'_>", align 8 %waker.i3 = alloca { ptr, ptr }, align 8 %_8.i.i = alloca %"core::fmt::Arguments<'_>", align 8 %_4.i.i = alloca %"core::fmt::Arguments<'_>", align 8 %waker.i = alloca { ptr, ptr }, align 8 %_5.i = alloca %"core::fmt::Arguments<'_>", align 8 %_2.i = alloca %"core::fmt::Arguments<'_>", align 8 %_2 = alloca %"core::fmt::Arguments<'_>", align 8 %0 = atomicrmw add ptr @__profc__RNvCs4zUb9XLQiyW_6async24main, i64 1 monotonic, align 8 call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %_2) store ptr @alloc_8c6fa871f2b6ccc3596c5d8143fd3c62, ptr %_2, align 8 %1 = getelementptr inbounds { ptr, i64 }, ptr %_2, i64 0, i32 1 store i64 1, ptr %1, align 8 %2 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_2, i64 0, i32 2 store ptr null, ptr %2, align 8 %3 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_2, i64 0, i32 1 store ptr @alloc_513570631223a12912d85da2bec3b15a, ptr %3, align 8 %4 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_2, i64 0, i32 1, i32 1 store i64 0, ptr %4, align 8 ; call std::io::stdio::_print call void @_ZN3std2io5stdio6_print17h159df1e36ccb658eE(ptr noalias nocapture noundef nonnull align 8 dereferenceable(48) %_2) call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %_2) %5 = atomicrmw add ptr @__profc__RNvCs4zUb9XLQiyW_6async214non_async_func, i64 1 monotonic, align 8 call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %_2.i) store ptr @alloc_a921d308b684528df82f6e4dffdb80bd, ptr %_2.i, align 8 %6 = getelementptr inbounds { ptr, i64 }, ptr %_2.i, i64 0, i32 1 store i64 1, ptr %6, align 8 %7 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_2.i, i64 0, i32 2 store ptr null, ptr %7, align 8 %8 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_2.i, i64 0, i32 1 store ptr @alloc_513570631223a12912d85da2bec3b15a, ptr %8, align 8 %9 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_2.i, i64 0, i32 1, i32 1 store i64 0, ptr %9, align 8 ; call std::io::stdio::_print call void @_ZN3std2io5stdio6_print17h159df1e36ccb658eE(ptr noalias nocapture noundef nonnull align 8 dereferenceable(48) %_2.i) call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %_2.i) %10 = atomicrmw add ptr getelementptr inbounds ([2 x i64], ptr @__profc__RNvCs4zUb9XLQiyW_6async214non_async_func, i64 0, i64 1), i64 1 monotonic, align 8 call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %_5.i) store ptr @alloc_beefbc7dab13e3fb922964c749019704, ptr %_5.i, align 8 %11 = getelementptr inbounds { ptr, i64 }, ptr %_5.i, i64 0, i32 1 store i64 1, ptr %11, align 8 %12 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_5.i, i64 0, i32 2 store ptr null, ptr %12, align 8 %13 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_5.i, i64 0, i32 1 store ptr @alloc_513570631223a12912d85da2bec3b15a, ptr %13, align 8 %14 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_5.i, i64 0, i32 1, i32 1 store i64 0, ptr %14, align 8 ; call std::io::stdio::_print call void @_ZN3std2io5stdio6_print17h159df1e36ccb658eE(ptr noalias nocapture noundef nonnull align 8 dereferenceable(48) %_5.i) call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %_5.i) %15 = atomicrmw add ptr @__profc__RNvCs4zUb9XLQiyW_6async210async_func, i64 1 monotonic, align 8 %16 = atomicrmw add ptr @__profc__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_10async_func0EB4_, i64 1 monotonic, align 8 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %waker.i) store ptr @_RNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLE, ptr %waker.i, align 8 %17 = getelementptr inbounds { ptr, ptr }, ptr %waker.i, i64 0, i32 1 store ptr null, ptr %17, align 8 %18 = atomicrmw add ptr @__profc__RNCNvCs4zUb9XLQiyW_6async210async_func0B3_, i64 1 monotonic, align 8 call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %_4.i.i) store ptr @alloc_bb9cfe869d3fbd1b0bac54c64137be2e, ptr %_4.i.i, align 8, !alias.scope !12, !noalias !15 %19 = getelementptr inbounds { ptr, i64 }, ptr %_4.i.i, i64 0, i32 1 store i64 1, ptr %19, align 8, !alias.scope !12, !noalias !15 %20 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_4.i.i, i64 0, i32 2 store ptr null, ptr %20, align 8, !alias.scope !12, !noalias !15 %21 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_4.i.i, i64 0, i32 1 store ptr @alloc_513570631223a12912d85da2bec3b15a, ptr %21, align 8, !alias.scope !12, !noalias !15 %22 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_4.i.i, i64 0, i32 1, i32 1 store i64 0, ptr %22, align 8, !alias.scope !12, !noalias !15 ; invoke std::io::stdio::_print invoke void @_ZN3std2io5stdio6_print17h159df1e36ccb658eE(ptr noalias nocapture noundef nonnull align 8 dereferenceable(48) %_4.i.i) to label %bb5.i.i unwind label %cleanup1.i.i cleanup1.i.i: ; preds = %start %23 = landingpad { ptr, i32 } cleanup call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %_4.i.i) br label %cleanup.body.i bb5.i.i: ; preds = %start call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %_4.i.i) %24 = atomicrmw add ptr getelementptr inbounds ([2 x i64], ptr @__profc__RNCNvCs4zUb9XLQiyW_6async210async_func0B3_, i64 0, i64 1), i64 1 monotonic, align 8 call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %_8.i.i) store ptr @alloc_8a2eecf69e2fc1f364ea48da3a4d02ff, ptr %_8.i.i, align 8, !alias.scope !17, !noalias !20 %25 = getelementptr inbounds { ptr, i64 }, ptr %_8.i.i, i64 0, i32 1 store i64 1, ptr %25, align 8, !alias.scope !17, !noalias !20 %26 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_8.i.i, i64 0, i32 2 store ptr null, ptr %26, align 8, !alias.scope !17, !noalias !20 %27 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_8.i.i, i64 0, i32 1 store ptr @alloc_513570631223a12912d85da2bec3b15a, ptr %27, align 8, !alias.scope !17, !noalias !20 %28 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_8.i.i, i64 0, i32 1, i32 1 store i64 0, ptr %28, align 8, !alias.scope !17, !noalias !20 ; invoke std::io::stdio::_print invoke void @_ZN3std2io5stdio6_print17h159df1e36ccb658eE(ptr noalias nocapture noundef nonnull align 8 dereferenceable(48) %_8.i.i) to label %_RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_10async_func0EB4_.exit unwind label %cleanup3.i.i cleanup3.i.i: ; preds = %bb5.i.i %29 = landingpad { ptr, i32 } cleanup call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %_8.i.i) br label %cleanup.body.i cleanup.body.i: ; preds = %cleanup3.i.i, %cleanup1.i.i %.pn6.pn.i.i = phi { ptr, i32 } [ %29, %cleanup3.i.i ], [ %23, %cleanup1.i.i ] ; invoke core::ptr::drop_in_place:: invoke fastcc void @_RINvNtCscBXtjtswptt_4core3ptr13drop_in_placeNtNtNtB4_4task4wake5WakerECs4zUb9XLQiyW_6async2(ptr noalias noundef nonnull align 8 dereferenceable(16) %waker.i) #9 to label %common.resume unwind label %terminate.i terminate.i: ; preds = %cleanup.body.i %30 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer ; call core::panicking::panic_in_cleanup tail call void @_ZN4core9panicking16panic_in_cleanup17h79e82dd57955c40cE() #12 unreachable common.resume: ; preds = %cleanup.body.i4, %cleanup.body.i %common.resume.op = phi { ptr, i32 } [ %.pn6.pn.i.i, %cleanup.body.i ], [ %40, %cleanup.body.i4 ] resume { ptr, i32 } %common.resume.op _RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_10async_func0EB4_.exit: ; preds = %bb5.i.i call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %_8.i.i) %31 = atomicrmw add ptr @__profc__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs1_0B7_, i64 1 monotonic, align 8 call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %waker.i) %32 = atomicrmw add ptr @__profc__RNvCs4zUb9XLQiyW_6async223async_func_just_println, i64 1 monotonic, align 8 %33 = atomicrmw add ptr @__profc__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_23async_func_just_println0EB4_, i64 1 monotonic, align 8 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %waker.i3) store ptr @_RNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLE, ptr %waker.i3, align 8 %34 = getelementptr inbounds { ptr, ptr }, ptr %waker.i3, i64 0, i32 1 store ptr null, ptr %34, align 8 %35 = atomicrmw add ptr @__profc__RNCNvCs4zUb9XLQiyW_6async223async_func_just_println0B3_, i64 1 monotonic, align 8 call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %_4.i.i2) store ptr @alloc_228521f8fdd0525c9bea7f9192a53491, ptr %_4.i.i2, align 8, !alias.scope !22, !noalias !25 %36 = getelementptr inbounds { ptr, i64 }, ptr %_4.i.i2, i64 0, i32 1 store i64 1, ptr %36, align 8, !alias.scope !22, !noalias !25 %37 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_4.i.i2, i64 0, i32 2 store ptr null, ptr %37, align 8, !alias.scope !22, !noalias !25 %38 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_4.i.i2, i64 0, i32 1 store ptr @alloc_513570631223a12912d85da2bec3b15a, ptr %38, align 8, !alias.scope !22, !noalias !25 %39 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_4.i.i2, i64 0, i32 1, i32 1 store i64 0, ptr %39, align 8, !alias.scope !22, !noalias !25 ; invoke std::io::stdio::_print invoke void @_ZN3std2io5stdio6_print17h159df1e36ccb658eE(ptr noalias nocapture noundef nonnull align 8 dereferenceable(48) %_4.i.i2) to label %_RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_23async_func_just_println0EB4_.exit unwind label %cleanup.body.i4 cleanup.body.i4: ; preds = %_RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_10async_func0EB4_.exit %40 = landingpad { ptr, i32 } cleanup call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %_4.i.i2) ; invoke core::ptr::drop_in_place:: invoke fastcc void @_RINvNtCscBXtjtswptt_4core3ptr13drop_in_placeNtNtNtB4_4task4wake5WakerECs4zUb9XLQiyW_6async2(ptr noalias noundef nonnull align 8 dereferenceable(16) %waker.i3) #9 to label %common.resume unwind label %terminate.i5 terminate.i5: ; preds = %cleanup.body.i4 %41 = landingpad { ptr, i32 } filter [0 x ptr] zeroinitializer ; call core::panicking::panic_in_cleanup tail call void @_ZN4core9panicking16panic_in_cleanup17h79e82dd57955c40cE() #12 unreachable _RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_23async_func_just_println0EB4_.exit: ; preds = %_RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_10async_func0EB4_.exit call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %_4.i.i2) %42 = atomicrmw add ptr @__profc__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs1_0B7_, i64 1 monotonic, align 8 call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %waker.i3) ret void } ; std::rt::lang_start_internal ; Function Attrs: uwtable declare noundef i64 @_ZN3std2rt19lang_start_internal17he54ad6d8e161668fE(ptr noundef nonnull align 1, ptr noalias noundef readonly align 8 dereferenceable(24), i64 noundef, ptr noundef, i8 noundef) unnamed_addr #0 ; Function Attrs: uwtable declare noundef i32 @rust_eh_personality(i32 noundef, i32 noundef, i64 noundef, ptr noundef, ptr noundef) unnamed_addr #0 ; std::io::stdio::_print ; Function Attrs: uwtable declare void @_ZN3std2io5stdio6_print17h159df1e36ccb658eE(ptr noalias nocapture noundef align 8 dereferenceable(48)) unnamed_addr #0 ; core::panicking::panic_in_cleanup ; Function Attrs: cold noinline noreturn nounwind uwtable declare void @_ZN4core9panicking16panic_in_cleanup17h79e82dd57955c40cE() unnamed_addr #6 define i32 @main(i32 %0, ptr %1) unnamed_addr #7 { top: %_8.i = alloca ptr, align 8 %2 = sext i32 %0 to i64 call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %_8.i) store ptr @_RNvCs4zUb9XLQiyW_6async24main, ptr %_8.i, align 8 ; call std::rt::lang_start_internal %3 = call noundef i64 @_ZN3std2rt19lang_start_internal17he54ad6d8e161668fE(ptr noundef nonnull align 1 %_8.i, ptr noalias noundef nonnull readonly align 8 dereferenceable(24) @vtable.0, i64 noundef %2, ptr noundef %1, i8 noundef 0) call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %_8.i) %4 = trunc i64 %3 to i32 ret i32 %4 } ; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #8 ; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #8 ; Function Attrs: noinline define linkonce_odr hidden i32 @__llvm_profile_runtime_user() #9 { %1 = load i32, ptr @__llvm_profile_runtime, align 4 ret i32 %1 } ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) declare void @llvm.experimental.noalias.scope.decl(metadata) #10 attributes #0 = { uwtable "frame-pointer"="non-leaf" "target-cpu"="apple-m1" } attributes #1 = { inlinehint mustprogress nofree norecurse nosync nounwind willreturn memory(none) uwtable "frame-pointer"="non-leaf" "target-cpu"="apple-m1" } attributes #2 = { noinline uwtable "frame-pointer"="non-leaf" "target-cpu"="apple-m1" } attributes #3 = { inlinehint uwtable "frame-pointer"="non-leaf" "target-cpu"="apple-m1" } attributes #4 = { inlinehint mustprogress nofree norecurse noreturn nosync nounwind willreturn memory(none) uwtable "frame-pointer"="non-leaf" "target-cpu"="apple-m1" } attributes #5 = { inlinehint mustprogress nofree norecurse nounwind willreturn memory(readwrite, argmem: none, inaccessiblemem: none) uwtable "frame-pointer"="non-leaf" "target-cpu"="apple-m1" } attributes #6 = { cold noinline noreturn nounwind uwtable "frame-pointer"="non-leaf" "target-cpu"="apple-m1" } attributes #7 = { "frame-pointer"="non-leaf" "target-cpu"="apple-m1" } attributes #8 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) } attributes #9 = { noinline } attributes #10 = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) } attributes #11 = { nounwind } attributes #12 = { noinline noreturn nounwind } !llvm.module.flags = !{!0, !1} !llvm.ident = !{!2} !0 = !{i32 8, !"PIC Level", i32 2} !1 = !{i32 7, !"PIE Level", i32 2} !2 = !{!"rustc version 1.74.0-dev"} !3 = !{!4} !4 = distinct !{!4, !5, !"_ZN65_$LT$core..task..wake..Waker$u20$as$u20$core..ops..drop..Drop$GT$4drop17h46a336b29aede688E: %self"} !5 = distinct !{!5, !"_ZN65_$LT$core..task..wake..Waker$u20$as$u20$core..ops..drop..Drop$GT$4drop17h46a336b29aede688E"} !6 = !{} !7 = !{i64 8} !8 = !{i32 587843} !9 = !{!10} !10 = distinct !{!10, !11, !"_RNCINvNtCs8koKRe9ETht_3std2rt10lang_startuE0Cs4zUb9XLQiyW_6async2: %_1"} !11 = distinct !{!11, !"_RNCINvNtCs8koKRe9ETht_3std2rt10lang_startuE0Cs4zUb9XLQiyW_6async2"} !12 = !{!13} !13 = distinct !{!13, !14, !"_ZN4core3fmt9Arguments9new_const17h4dfb0a79b9637285E: %_0"} !14 = distinct !{!14, !"_ZN4core3fmt9Arguments9new_const17h4dfb0a79b9637285E"} !15 = !{!16} !16 = distinct !{!16, !14, !"_ZN4core3fmt9Arguments9new_const17h4dfb0a79b9637285E: %pieces.0"} !17 = !{!18} !18 = distinct !{!18, !19, !"_ZN4core3fmt9Arguments9new_const17h4dfb0a79b9637285E: %_0"} !19 = distinct !{!19, !"_ZN4core3fmt9Arguments9new_const17h4dfb0a79b9637285E"} !20 = !{!21} !21 = distinct !{!21, !19, !"_ZN4core3fmt9Arguments9new_const17h4dfb0a79b9637285E: %pieces.0"} !22 = !{!23} !23 = distinct !{!23, !24, !"_ZN4core3fmt9Arguments9new_const17h4dfb0a79b9637285E: %_0"} !24 = distinct !{!24, !"_ZN4core3fmt9Arguments9new_const17h4dfb0a79b9637285E"} !25 = !{!26} !26 = distinct !{!26, !24, !"_ZN4core3fmt9Arguments9new_const17h4dfb0a79b9637285E: %pieces.0"} ```
Zalathar commented 1 year ago

Comparing the two LLVM IR dumps, it seems that the bodies for closure 0 are identical, and the bodies for closure 2 are identical. (Closure 1 is missing in both, presumably because it was merged with closure 2.)

So that's evidence against my hypothesis of the unreachable-only body being responsible.

Zalathar commented 1 year ago

If I set -Zmir-opt-level=1 (or lower), the problem doesn't occur, presumably because the changed MIR pass doesn't run.

If I go into unreachable_prop.rs and comment out the loop that clears unreachable BBs, the problem also doesn't occur, though presumably that has the side-effect of making the MIR pass do less.

Zalathar commented 1 year ago

OK, I think I've found the problem.

If we instrument a function for coverage, but a MIR optimization later removes all of its CoverageKind::Counter statements, LLVM treats it as not instrumented and it disappears from coverage reports.

A proper fix will need to wait until after #116046. Until then, the workaround is to avoid deleting StatementKind::Coverage statements from mir::START_BLOCK.

Zalathar commented 1 year ago

Actually, a better workaround is probably just to disable the UnreachablePropagation pass entirely if coverage is enabled:

impl MirPass<'_> for UnreachablePropagation {
    fn is_enabled(&self, sess: &rustc_session::Session) -> bool {
        // Enable only under -Zmir-opt-level=2 as this can make programs less debuggable.
        // Coverage gets confused by MIR passes that can remove all coverage statements
        // from an instrumented function.
        sess.mir_opt_level() >= 2 && !sess.instrument_coverage()
    }