Skip to content

Instantly share code, notes, and snippets.

@jmorse
Created November 5, 2020 16:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jmorse/4850a987bfc8d4fed50c622a0b8e7c46 to your computer and use it in GitHub Desktop.
Save jmorse/4850a987bfc8d4fed50c622a0b8e7c46 to your computer and use it in GitHub Desktop.
; ModuleID = 'test.cpp'
source_filename = "test.cpp"
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"
%_Z3foov.Frame = type { void (%_Z3foov.Frame*)*, void (%_Z3foov.Frame*)*, %"struct.coro::promise_type", i2, %"struct.std::experimental::coroutines_v1::suspend_never", %"struct.std::experimental::coroutines_v1::suspend_always", i32, %"class.std::experimental::coroutines_v1::coroutine_handle.0", [10 x i32], %"class.std::experimental::coroutines_v1::coroutine_handle", %"class.std::experimental::coroutines_v1::coroutine_handle.0", %"class.std::experimental::coroutines_v1::coroutine_handle", %"class.std::experimental::coroutines_v1::coroutine_handle.0", %"class.std::experimental::coroutines_v1::coroutine_handle", %"struct.std::experimental::coroutines_v1::suspend_never" }
%"struct.coro::promise_type" = type { i8 }
%"struct.std::experimental::coroutines_v1::suspend_always" = type { i8 }
%"class.std::experimental::coroutines_v1::coroutine_handle.0" = type { i8* }
%"class.std::experimental::coroutines_v1::coroutine_handle" = type { %"class.std::experimental::coroutines_v1::coroutine_handle.0" }
%"struct.std::experimental::coroutines_v1::suspend_never" = type { i8 }
%struct.coro = type { %"class.std::experimental::coroutines_v1::coroutine_handle" }
$_ZN4coro12promise_type17get_return_objectEv = comdat any
$_ZN4coro12promise_type15initial_suspendEv = comdat any
$_ZNKSt12experimental13coroutines_v113suspend_never11await_readyEv = comdat any
$_ZNKSt12experimental13coroutines_v113suspend_never13await_suspendENS0_16coroutine_handleIvEE = comdat any
$_ZNSt12experimental13coroutines_v116coroutine_handleIN4coro12promise_typeEE12from_addressEPv = comdat any
$_ZNKSt12experimental13coroutines_v113suspend_never12await_resumeEv = comdat any
$_ZNKSt12experimental13coroutines_v114suspend_always11await_readyEv = comdat any
$_ZNKSt12experimental13coroutines_v114suspend_always13await_suspendENS0_16coroutine_handleIvEE = comdat any
$_ZNKSt12experimental13coroutines_v114suspend_always12await_resumeEv = comdat any
$_ZN4coro12promise_type11return_voidEv = comdat any
$_ZN4coro12promise_type19unhandled_exceptionEv = comdat any
$__clang_call_terminate = comdat any
$_ZN4coro12promise_type13final_suspendEv = comdat any
$_ZNSt12experimental13coroutines_v116coroutine_handleIvE6resumeEv = comdat any
$_ZNSt12experimental13coroutines_v116coroutine_handleIN4coro12promise_typeEE12from_promiseERS3_ = comdat any
$_ZN4coroC2ENSt12experimental13coroutines_v116coroutine_handleINS_12promise_typeEEE = comdat any
$_ZNSt12experimental13coroutines_v116coroutine_handleIN4coro12promise_typeEEC2Ev = comdat any
$_ZNSt3__19addressofIN4coro12promise_typeEEEPT_RS3_ = comdat any
$_ZNSt12experimental13coroutines_v116coroutine_handleIvEC2Ev = comdat any
@_Z3foov.resumers = private constant [3 x void (%_Z3foov.Frame*)*] [void (%_Z3foov.Frame*)* @_Z3foov.resume, void (%_Z3foov.Frame*)* @_Z3foov.destroy, void (%_Z3foov.Frame*)* @_Z3foov.cleanup]
; Function Attrs: noinline optnone uwtable
define dso_local i8* @_Z3foov() #0 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) !dbg !530 {
entry:
%retval = alloca %struct.coro, align 8
%gro.active = alloca i1, align 1
%__promise = alloca %"struct.coro::promise_type", align 1
%exn.slot = alloca i8*, align 8
%ehselector.slot = alloca i32, align 4
%ref.tmp = alloca %"struct.std::experimental::coroutines_v1::suspend_never", align 1
%undef.agg.tmp = alloca %"struct.std::experimental::coroutines_v1::suspend_never", align 1
%agg.tmp = alloca %"class.std::experimental::coroutines_v1::coroutine_handle.0", align 8
%ref.tmp7 = alloca %"class.std::experimental::coroutines_v1::coroutine_handle", align 8
%x = alloca [10 x i32], align 16
%a = alloca i32, align 4
%ref.tmp12 = alloca %"struct.std::experimental::coroutines_v1::suspend_always", align 1
%agg.tmp14 = alloca %"class.std::experimental::coroutines_v1::coroutine_handle.0", align 8
%ref.tmp15 = alloca %"class.std::experimental::coroutines_v1::coroutine_handle", align 8
%ref.tmp29 = alloca %"struct.std::experimental::coroutines_v1::suspend_never", align 1
%undef.agg.tmp30 = alloca %"struct.std::experimental::coroutines_v1::suspend_never", align 1
%agg.tmp32 = alloca %"class.std::experimental::coroutines_v1::coroutine_handle.0", align 8
%ref.tmp33 = alloca %"class.std::experimental::coroutines_v1::coroutine_handle", align 8
call void @coro.devirt.trigger(i8* null)
br i1 true, label %coro.alloc, label %coro.init.from.entry, !dbg !532
coro.init.from.entry: ; preds = %entry
%.coro.init = phi i8* [ null, %entry ]
br label %coro.init, !dbg !532
coro.alloc: ; preds = %entry
%call = call noalias nonnull i8* @_Znwm(i64 120) #13, !dbg !533
br label %coro.init.from.coro.alloc, !dbg !532
coro.init.from.coro.alloc: ; preds = %coro.alloc
%call.coro.init = phi i8* [ %call, %coro.alloc ]
br label %coro.init, !dbg !532
coro.init: ; preds = %coro.init.from.entry, %coro.init.from.coro.alloc
%0 = phi i8* [ %.coro.init, %coro.init.from.entry ], [ %call.coro.init, %coro.init.from.coro.alloc ], !dbg !532
%FramePtr = bitcast i8* %0 to %_Z3foov.Frame*, !dbg !532
%resume.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 0, !dbg !532
store void (%_Z3foov.Frame*)* @_Z3foov.resume, void (%_Z3foov.Frame*)** %resume.addr, align 8, !dbg !532
%1 = select i1 true, void (%_Z3foov.Frame*)* @_Z3foov.destroy, void (%_Z3foov.Frame*)* @_Z3foov.cleanup, !dbg !532
%destroy.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 1, !dbg !532
store void (%_Z3foov.Frame*)* %1, void (%_Z3foov.Frame*)** %destroy.addr, align 8, !dbg !532
br label %AllocaSpillBB, !dbg !532
AllocaSpillBB: ; preds = %coro.init
%ref.tmp.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 4, !dbg !532
%agg.tmp.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 7, !dbg !532
%ref.tmp7.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 9, !dbg !532
%x.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 8, !dbg !532
%a.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 6, !dbg !532
%ref.tmp12.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 5, !dbg !532
%agg.tmp14.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 10, !dbg !532
%ref.tmp15.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 11, !dbg !532
%ref.tmp29.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 14, !dbg !532
%agg.tmp32.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 12, !dbg !532
%ref.tmp33.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 13, !dbg !532
%__promise.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 2, !dbg !532
br label %PostSpill, !dbg !532
PostSpill: ; preds = %AllocaSpillBB
store i1 false, i1* %gro.active, align 1, !dbg !532
call void @llvm.dbg.declare(metadata %struct.coro* %retval, metadata !534, metadata !DIExpression()), !dbg !533
call void @llvm.dbg.declare(metadata %"struct.coro::promise_type"* %__promise.reload.addr, metadata !535, metadata !DIExpression()), !dbg !533
%call1 = invoke i8* @_ZN4coro12promise_type17get_return_objectEv(%"struct.coro::promise_type"* %__promise.reload.addr)
to label %invoke.cont unwind label %lpad, !dbg !533
invoke.cont: ; preds = %PostSpill
%coerce.dive = getelementptr inbounds %struct.coro, %struct.coro* %retval, i32 0, i32 0, !dbg !533
%coerce.dive2 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle", %"class.std::experimental::coroutines_v1::coroutine_handle"* %coerce.dive, i32 0, i32 0, !dbg !533
%coerce.dive3 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle.0", %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %coerce.dive2, i32 0, i32 0, !dbg !533
store i8* %call1, i8** %coerce.dive3, align 8, !dbg !533
store i1 true, i1* %gro.active, align 1, !dbg !533
call void @_ZN4coro12promise_type15initial_suspendEv(%"struct.coro::promise_type"* %__promise.reload.addr), !dbg !533
br label %invoke.cont5
invoke.cont5: ; preds = %invoke.cont
%call6 = call zeroext i1 @_ZNKSt12experimental13coroutines_v113suspend_never11await_readyEv(%"struct.std::experimental::coroutines_v1::suspend_never"* %ref.tmp.reload.addr) #2, !dbg !533
br i1 %call6, label %init.ready, label %CoroSave, !dbg !533
CoroSave: ; preds = %invoke.cont5
%index.addr59 = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 3, !dbg !533
store i2 0, i2* %index.addr59, align 1, !dbg !533
br label %AfterCoroSave, !dbg !533
AfterCoroSave: ; preds = %CoroSave
%call8 = call i8* @_ZNSt12experimental13coroutines_v116coroutine_handleIN4coro12promise_typeEE12from_addressEPv(i8* %0) #2, !dbg !533
%coerce.dive9 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle", %"class.std::experimental::coroutines_v1::coroutine_handle"* %ref.tmp7.reload.addr, i32 0, i32 0, !dbg !533
%coerce.dive10 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle.0", %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %coerce.dive9, i32 0, i32 0, !dbg !533
store i8* %call8, i8** %coerce.dive10, align 8, !dbg !533
%2 = bitcast %"class.std::experimental::coroutines_v1::coroutine_handle"* %ref.tmp7.reload.addr to %"class.std::experimental::coroutines_v1::coroutine_handle.0"*, !dbg !533
%3 = bitcast %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %agg.tmp.reload.addr to i8*, !dbg !533
%4 = bitcast %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %2 to i8*, !dbg !533
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %3, i8* align 8 %4, i64 8, i1 false), !dbg !533
%coerce.dive11 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle.0", %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %agg.tmp.reload.addr, i32 0, i32 0, !dbg !533
%5 = load i8*, i8** %coerce.dive11, align 8, !dbg !533
call void @_ZNKSt12experimental13coroutines_v113suspend_never13await_suspendENS0_16coroutine_handleIvEE(%"struct.std::experimental::coroutines_v1::suspend_never"* %ref.tmp.reload.addr, i8* %5) #2, !dbg !533
br label %CoroSuspend, !dbg !533
CoroSuspend: ; preds = %AfterCoroSave
br label %resume.0.landing, !dbg !533
resume.0.landing: ; preds = %CoroSuspend
br label %AfterCoroSuspend, !dbg !533
AfterCoroSuspend: ; preds = %resume.0.landing
switch i8 -1, label %coro.ret [
i8 0, label %init.ready
i8 1, label %init.cleanup
], !dbg !533
init.cleanup: ; preds = %AfterCoroSuspend
br label %cleanup.from.init.cleanup, !dbg !533
cleanup.from.init.cleanup: ; preds = %init.cleanup
%.cleanup57 = phi i32 [ 2, %init.cleanup ]
br label %cleanup, !dbg !533
lpad: ; preds = %PostSpill
%6 = landingpad { i8*, i32 }
cleanup, !dbg !541
%7 = extractvalue { i8*, i32 } %6, 0, !dbg !541
store i8* %7, i8** %exn.slot, align 8, !dbg !541
%8 = extractvalue { i8*, i32 } %6, 1, !dbg !541
store i32 %8, i32* %ehselector.slot, align 4, !dbg !541
br label %ehcleanup39, !dbg !541
init.ready: ; preds = %AfterCoroSuspend, %invoke.cont5
call void @_ZNKSt12experimental13coroutines_v113suspend_never12await_resumeEv(%"struct.std::experimental::coroutines_v1::suspend_never"* %ref.tmp.reload.addr) #2, !dbg !533
call void @llvm.dbg.declare(metadata [10 x i32]* %x.reload.addr, metadata !542, metadata !DIExpression()), !dbg !547
%9 = bitcast [10 x i32]* %x.reload.addr to i8*, !dbg !547
call void @llvm.memset.p0i8.i64(i8* align 16 %9, i8 0, i64 40, i1 false), !dbg !547
call void @llvm.dbg.declare(metadata i32* %a.reload.addr, metadata !548, metadata !DIExpression()), !dbg !549
store i32 3, i32* %a.reload.addr, align 4, !dbg !549
%call13 = call zeroext i1 @_ZNKSt12experimental13coroutines_v114suspend_always11await_readyEv(%"struct.std::experimental::coroutines_v1::suspend_always"* %ref.tmp12.reload.addr) #2, !dbg !550
br i1 %call13, label %await.ready, label %CoroSave47, !dbg !551
CoroSave47: ; preds = %init.ready
%index.addr60 = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 3, !dbg !551
store i2 1, i2* %index.addr60, align 1, !dbg !551
br label %AfterCoroSave48, !dbg !550
AfterCoroSave48: ; preds = %CoroSave47
%call16 = call i8* @_ZNSt12experimental13coroutines_v116coroutine_handleIN4coro12promise_typeEE12from_addressEPv(i8* %0) #2, !dbg !550
%coerce.dive17 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle", %"class.std::experimental::coroutines_v1::coroutine_handle"* %ref.tmp15.reload.addr, i32 0, i32 0, !dbg !550
%coerce.dive18 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle.0", %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %coerce.dive17, i32 0, i32 0, !dbg !550
store i8* %call16, i8** %coerce.dive18, align 8, !dbg !550
%10 = bitcast %"class.std::experimental::coroutines_v1::coroutine_handle"* %ref.tmp15.reload.addr to %"class.std::experimental::coroutines_v1::coroutine_handle.0"*, !dbg !550
%11 = bitcast %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %agg.tmp14.reload.addr to i8*, !dbg !550
%12 = bitcast %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %10 to i8*, !dbg !550
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %11, i8* align 8 %12, i64 8, i1 false), !dbg !550
%coerce.dive19 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle.0", %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %agg.tmp14.reload.addr, i32 0, i32 0, !dbg !550
%13 = load i8*, i8** %coerce.dive19, align 8, !dbg !550
call void @_ZNKSt12experimental13coroutines_v114suspend_always13await_suspendENS0_16coroutine_handleIvEE(%"struct.std::experimental::coroutines_v1::suspend_always"* %ref.tmp12.reload.addr, i8* %13) #2, !dbg !550
br label %CoroSuspend49, !dbg !551
CoroSuspend49: ; preds = %AfterCoroSave48
br label %resume.1.landing, !dbg !551
resume.1.landing: ; preds = %CoroSuspend49
br label %AfterCoroSuspend50, !dbg !551
AfterCoroSuspend50: ; preds = %resume.1.landing
switch i8 -1, label %coro.ret [
i8 0, label %await.ready
i8 1, label %await.cleanup
], !dbg !551
await.cleanup: ; preds = %AfterCoroSuspend50
br label %cleanup.from.await.cleanup, !dbg !551
cleanup.from.await.cleanup: ; preds = %await.cleanup
%.cleanup56 = phi i32 [ 2, %await.cleanup ]
br label %cleanup, !dbg !551
await.ready: ; preds = %AfterCoroSuspend50, %init.ready
call void @_ZNKSt12experimental13coroutines_v114suspend_always12await_resumeEv(%"struct.std::experimental::coroutines_v1::suspend_always"* %ref.tmp12.reload.addr) #2, !dbg !550
%14 = load i32, i32* %a.reload.addr, align 4, !dbg !552
%inc = add nsw i32 %14, 1, !dbg !552
store i32 %inc, i32* %a.reload.addr, align 4, !dbg !552
%arrayidx = getelementptr inbounds [10 x i32], [10 x i32]* %x.reload.addr, i64 0, i64 0, !dbg !553
store i32 1, i32* %arrayidx, align 16, !dbg !554
%15 = load i32, i32* %a.reload.addr, align 4, !dbg !555
%add = add nsw i32 %15, 2, !dbg !555
store i32 %add, i32* %a.reload.addr, align 4, !dbg !555
%arrayidx20 = getelementptr inbounds [10 x i32], [10 x i32]* %x.reload.addr, i64 0, i64 1, !dbg !556
store i32 2, i32* %arrayidx20, align 4, !dbg !557
%16 = load i32, i32* %a.reload.addr, align 4, !dbg !558
%add21 = add nsw i32 %16, 3, !dbg !558
store i32 %add21, i32* %a.reload.addr, align 4, !dbg !558
%arrayidx22 = getelementptr inbounds [10 x i32], [10 x i32]* %x.reload.addr, i64 0, i64 2, !dbg !559
store i32 3, i32* %arrayidx22, align 8, !dbg !560
call void @_ZN4coro12promise_type11return_voidEv(%"struct.coro::promise_type"* %__promise.reload.addr), !dbg !533
br label %invoke.cont24
invoke.cont24: ; preds = %await.ready
br label %coro.final, !dbg !533
coro.final: ; preds = %invoke.cont24
call void @_ZN4coro12promise_type13final_suspendEv(%"struct.coro::promise_type"* %__promise.reload.addr) #2, !dbg !533
%call31 = call zeroext i1 @_ZNKSt12experimental13coroutines_v113suspend_never11await_readyEv(%"struct.std::experimental::coroutines_v1::suspend_never"* %ref.tmp29.reload.addr) #2, !dbg !533
br i1 %call31, label %final.ready, label %CoroSave51, !dbg !533
CoroSave51: ; preds = %coro.final
%ResumeFn.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 0, !dbg !533
store void (%_Z3foov.Frame*)* null, void (%_Z3foov.Frame*)** %ResumeFn.addr, align 8, !dbg !533
br label %AfterCoroSave52, !dbg !533
AfterCoroSave52: ; preds = %CoroSave51
%call34 = call i8* @_ZNSt12experimental13coroutines_v116coroutine_handleIN4coro12promise_typeEE12from_addressEPv(i8* %0) #2, !dbg !533
%coerce.dive35 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle", %"class.std::experimental::coroutines_v1::coroutine_handle"* %ref.tmp33.reload.addr, i32 0, i32 0, !dbg !533
%coerce.dive36 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle.0", %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %coerce.dive35, i32 0, i32 0, !dbg !533
store i8* %call34, i8** %coerce.dive36, align 8, !dbg !533
%17 = bitcast %"class.std::experimental::coroutines_v1::coroutine_handle"* %ref.tmp33.reload.addr to %"class.std::experimental::coroutines_v1::coroutine_handle.0"*, !dbg !533
%18 = bitcast %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %agg.tmp32.reload.addr to i8*, !dbg !533
%19 = bitcast %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %17 to i8*, !dbg !533
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %18, i8* align 8 %19, i64 8, i1 false), !dbg !533
%coerce.dive37 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle.0", %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %agg.tmp32.reload.addr, i32 0, i32 0, !dbg !533
%20 = load i8*, i8** %coerce.dive37, align 8, !dbg !533
call void @_ZNKSt12experimental13coroutines_v113suspend_never13await_suspendENS0_16coroutine_handleIvEE(%"struct.std::experimental::coroutines_v1::suspend_never"* %ref.tmp29.reload.addr, i8* %20) #2, !dbg !533
br label %CoroSuspend53, !dbg !533
CoroSuspend53: ; preds = %AfterCoroSave52
br label %resume.2.landing, !dbg !533
resume.2.landing: ; preds = %CoroSuspend53
br label %AfterCoroSuspend54, !dbg !533
AfterCoroSuspend54: ; preds = %resume.2.landing
switch i8 -1, label %coro.ret [
i8 0, label %final.ready
i8 1, label %final.cleanup
], !dbg !533
final.cleanup: ; preds = %AfterCoroSuspend54
br label %cleanup.from.final.cleanup, !dbg !533
cleanup.from.final.cleanup: ; preds = %final.cleanup
%.cleanup55 = phi i32 [ 2, %final.cleanup ]
br label %cleanup, !dbg !533
final.ready: ; preds = %AfterCoroSuspend54, %coro.final
call void @_ZNKSt12experimental13coroutines_v113suspend_never12await_resumeEv(%"struct.std::experimental::coroutines_v1::suspend_never"* %ref.tmp29.reload.addr) #2, !dbg !533
br label %cleanup.from.final.ready, !dbg !533
cleanup.from.final.ready: ; preds = %final.ready
%.cleanup = phi i32 [ 0, %final.ready ]
br label %cleanup, !dbg !533
cleanup: ; preds = %cleanup.from.final.ready, %cleanup.from.final.cleanup, %cleanup.from.await.cleanup, %cleanup.from.init.cleanup
%cleanup.dest.slot.0 = phi i32 [ %.cleanup, %cleanup.from.final.ready ], [ %.cleanup55, %cleanup.from.final.cleanup ], [ %.cleanup56, %cleanup.from.await.cleanup ], [ %.cleanup57, %cleanup.from.init.cleanup ]
%21 = icmp ne i8* %0, null, !dbg !533
br i1 %21, label %coro.free, label %after.coro.free, !dbg !533
coro.free: ; preds = %cleanup
call void @_ZdlPv(i8* %0) #2, !dbg !533
br label %after.coro.free, !dbg !533
after.coro.free: ; preds = %cleanup, %coro.free
switch i32 %cleanup.dest.slot.0, label %unreachable [
i32 0, label %cleanup.cont38
i32 2, label %coro.ret
]
cleanup.cont38: ; preds = %after.coro.free
br label %coro.ret, !dbg !533
coro.ret: ; preds = %cleanup.cont38, %after.coro.free, %AfterCoroSuspend54, %AfterCoroSuspend50, %AfterCoroSuspend
br label %CoroEnd, !dbg !533
CoroEnd: ; preds = %coro.ret
br label %AfterCoroEnd, !dbg !533
AfterCoroEnd: ; preds = %CoroEnd
%coerce.dive42 = getelementptr inbounds %struct.coro, %struct.coro* %retval, i32 0, i32 0, !dbg !533
%coerce.dive43 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle", %"class.std::experimental::coroutines_v1::coroutine_handle"* %coerce.dive42, i32 0, i32 0, !dbg !533
%coerce.dive44 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle.0", %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %coerce.dive43, i32 0, i32 0, !dbg !533
%22 = load i8*, i8** %coerce.dive44, align 8, !dbg !533
ret i8* %22, !dbg !533
ehcleanup39: ; preds = %lpad
%23 = icmp ne i8* %0, null, !dbg !533
br i1 %23, label %coro.free40, label %after.coro.free41, !dbg !533
coro.free40: ; preds = %ehcleanup39
call void @_ZdlPv(i8* %0) #2, !dbg !533
br label %after.coro.free41, !dbg !533
after.coro.free41: ; preds = %ehcleanup39, %coro.free40
br label %eh.resume, !dbg !533
eh.resume: ; preds = %after.coro.free41
%exn45 = load i8*, i8** %exn.slot, align 8, !dbg !533
%sel = load i32, i32* %ehselector.slot, align 4, !dbg !533
%lpad.val = insertvalue { i8*, i32 } undef, i8* %exn45, 0, !dbg !533
%lpad.val46 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1, !dbg !533
resume { i8*, i32 } %lpad.val46, !dbg !533
unreachable: ; preds = %after.coro.free
unreachable
}
; Function Attrs: argmemonly nounwind readonly
declare token @llvm.coro.id(i32, i8* readnone, i8* nocapture readonly, i8*) #1
; Function Attrs: nounwind
declare i1 @llvm.coro.alloc(token) #2
; Function Attrs: nobuiltin allocsize(0)
declare dso_local nonnull i8* @_Znwm(i64) #3
; Function Attrs: nounwind readnone
declare i64 @llvm.coro.size.i64() #4
; Function Attrs: nounwind
declare i8* @llvm.coro.begin(token, i8* writeonly) #2
; Function Attrs: nofree nosync nounwind readnone speculatable willreturn
declare void @llvm.dbg.declare(metadata, metadata, metadata) #5
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local i8* @_ZN4coro12promise_type17get_return_objectEv(%"struct.coro::promise_type"* %this) #0 comdat align 2 !dbg !561 {
entry:
%retval = alloca %struct.coro, align 8
%this.addr = alloca %"struct.coro::promise_type"*, align 8
%handle = alloca %"class.std::experimental::coroutines_v1::coroutine_handle", align 8
%agg.tmp = alloca %"class.std::experimental::coroutines_v1::coroutine_handle", align 8
store %"struct.coro::promise_type"* %this, %"struct.coro::promise_type"** %this.addr, align 8
call void @llvm.dbg.declare(metadata %"struct.coro::promise_type"** %this.addr, metadata !562, metadata !DIExpression()), !dbg !564
%this1 = load %"struct.coro::promise_type"*, %"struct.coro::promise_type"** %this.addr, align 8
call void @llvm.dbg.declare(metadata %"class.std::experimental::coroutines_v1::coroutine_handle"* %handle, metadata !565, metadata !DIExpression()), !dbg !566
%call = call i8* @_ZNSt12experimental13coroutines_v116coroutine_handleIN4coro12promise_typeEE12from_promiseERS3_(%"struct.coro::promise_type"* nonnull align 1 dereferenceable(1) %this1) #2, !dbg !567
%coerce.dive = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle", %"class.std::experimental::coroutines_v1::coroutine_handle"* %handle, i32 0, i32 0, !dbg !567
%coerce.dive2 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle.0", %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %coerce.dive, i32 0, i32 0, !dbg !567
store i8* %call, i8** %coerce.dive2, align 8, !dbg !567
%0 = bitcast %"class.std::experimental::coroutines_v1::coroutine_handle"* %agg.tmp to i8*, !dbg !568
%1 = bitcast %"class.std::experimental::coroutines_v1::coroutine_handle"* %handle to i8*, !dbg !568
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %0, i8* align 8 %1, i64 8, i1 false), !dbg !568
%coerce.dive3 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle", %"class.std::experimental::coroutines_v1::coroutine_handle"* %agg.tmp, i32 0, i32 0, !dbg !569
%coerce.dive4 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle.0", %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %coerce.dive3, i32 0, i32 0, !dbg !569
%2 = load i8*, i8** %coerce.dive4, align 8, !dbg !569
call void @_ZN4coroC2ENSt12experimental13coroutines_v116coroutine_handleINS_12promise_typeEEE(%struct.coro* %retval, i8* %2), !dbg !569
%coerce.dive5 = getelementptr inbounds %struct.coro, %struct.coro* %retval, i32 0, i32 0, !dbg !570
%coerce.dive6 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle", %"class.std::experimental::coroutines_v1::coroutine_handle"* %coerce.dive5, i32 0, i32 0, !dbg !570
%coerce.dive7 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle.0", %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %coerce.dive6, i32 0, i32 0, !dbg !570
%3 = load i8*, i8** %coerce.dive7, align 8, !dbg !570
ret i8* %3, !dbg !570
}
declare dso_local i32 @__gxx_personality_v0(...)
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZN4coro12promise_type15initial_suspendEv(%"struct.coro::promise_type"* %this) #6 comdat align 2 !dbg !571 {
entry:
%this.addr = alloca %"struct.coro::promise_type"*, align 8
store %"struct.coro::promise_type"* %this, %"struct.coro::promise_type"** %this.addr, align 8
call void @llvm.dbg.declare(metadata %"struct.coro::promise_type"** %this.addr, metadata !572, metadata !DIExpression()), !dbg !573
%this1 = load %"struct.coro::promise_type"*, %"struct.coro::promise_type"** %this.addr, align 8
ret void, !dbg !574
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr hidden zeroext i1 @_ZNKSt12experimental13coroutines_v113suspend_never11await_readyEv(%"struct.std::experimental::coroutines_v1::suspend_never"* %this) #6 comdat align 2 !dbg !575 {
entry:
%this.addr = alloca %"struct.std::experimental::coroutines_v1::suspend_never"*, align 8
store %"struct.std::experimental::coroutines_v1::suspend_never"* %this, %"struct.std::experimental::coroutines_v1::suspend_never"** %this.addr, align 8
call void @llvm.dbg.declare(metadata %"struct.std::experimental::coroutines_v1::suspend_never"** %this.addr, metadata !576, metadata !DIExpression()), !dbg !578
%this1 = load %"struct.std::experimental::coroutines_v1::suspend_never"*, %"struct.std::experimental::coroutines_v1::suspend_never"** %this.addr, align 8
ret i1 true, !dbg !579
}
; Function Attrs: nounwind
declare token @llvm.coro.save(i8*) #2
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr hidden void @_ZNKSt12experimental13coroutines_v113suspend_never13await_suspendENS0_16coroutine_handleIvEE(%"struct.std::experimental::coroutines_v1::suspend_never"* %this, i8* %.coerce) #6 comdat align 2 !dbg !580 {
entry:
%0 = alloca %"class.std::experimental::coroutines_v1::coroutine_handle.0", align 8
%this.addr = alloca %"struct.std::experimental::coroutines_v1::suspend_never"*, align 8
%coerce.dive = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle.0", %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %0, i32 0, i32 0
store i8* %.coerce, i8** %coerce.dive, align 8
store %"struct.std::experimental::coroutines_v1::suspend_never"* %this, %"struct.std::experimental::coroutines_v1::suspend_never"** %this.addr, align 8
call void @llvm.dbg.declare(metadata %"struct.std::experimental::coroutines_v1::suspend_never"** %this.addr, metadata !581, metadata !DIExpression()), !dbg !582
call void @llvm.dbg.declare(metadata %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %0, metadata !583, metadata !DIExpression()), !dbg !584
%this1 = load %"struct.std::experimental::coroutines_v1::suspend_never"*, %"struct.std::experimental::coroutines_v1::suspend_never"** %this.addr, align 8
ret void, !dbg !585
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr hidden i8* @_ZNSt12experimental13coroutines_v116coroutine_handleIN4coro12promise_typeEE12from_addressEPv(i8* %__addr) #6 comdat align 2 !dbg !586 {
entry:
%retval = alloca %"class.std::experimental::coroutines_v1::coroutine_handle", align 8
%__addr.addr = alloca i8*, align 8
store i8* %__addr, i8** %__addr.addr, align 8
call void @llvm.dbg.declare(metadata i8** %__addr.addr, metadata !587, metadata !DIExpression()), !dbg !588
call void @llvm.dbg.declare(metadata %"class.std::experimental::coroutines_v1::coroutine_handle"* %retval, metadata !589, metadata !DIExpression()), !dbg !590
call void @_ZNSt12experimental13coroutines_v116coroutine_handleIN4coro12promise_typeEEC2Ev(%"class.std::experimental::coroutines_v1::coroutine_handle"* %retval) #2, !dbg !590
%0 = load i8*, i8** %__addr.addr, align 8, !dbg !591
%1 = bitcast %"class.std::experimental::coroutines_v1::coroutine_handle"* %retval to %"class.std::experimental::coroutines_v1::coroutine_handle.0"*, !dbg !592
%__handle_ = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle.0", %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %1, i32 0, i32 0, !dbg !593
store i8* %0, i8** %__handle_, align 8, !dbg !594
%coerce.dive = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle", %"class.std::experimental::coroutines_v1::coroutine_handle"* %retval, i32 0, i32 0, !dbg !595
%coerce.dive1 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle.0", %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %coerce.dive, i32 0, i32 0, !dbg !595
%2 = load i8*, i8** %coerce.dive1, align 8, !dbg !595
ret i8* %2, !dbg !595
}
; Function Attrs: argmemonly nofree nosync nounwind willreturn
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* noalias nocapture writeonly, i8* noalias nocapture readonly, i64, i1 immarg) #7
; Function Attrs: nounwind
declare i8 @llvm.coro.suspend(token, i1) #2
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr hidden void @_ZNKSt12experimental13coroutines_v113suspend_never12await_resumeEv(%"struct.std::experimental::coroutines_v1::suspend_never"* %this) #6 comdat align 2 !dbg !596 {
entry:
%this.addr = alloca %"struct.std::experimental::coroutines_v1::suspend_never"*, align 8
store %"struct.std::experimental::coroutines_v1::suspend_never"* %this, %"struct.std::experimental::coroutines_v1::suspend_never"** %this.addr, align 8
call void @llvm.dbg.declare(metadata %"struct.std::experimental::coroutines_v1::suspend_never"** %this.addr, metadata !597, metadata !DIExpression()), !dbg !598
%this1 = load %"struct.std::experimental::coroutines_v1::suspend_never"*, %"struct.std::experimental::coroutines_v1::suspend_never"** %this.addr, align 8
ret void, !dbg !599
}
; Function Attrs: argmemonly nofree nosync nounwind willreturn writeonly
declare void @llvm.memset.p0i8.i64(i8* nocapture writeonly, i8, i64, i1 immarg) #8
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr hidden zeroext i1 @_ZNKSt12experimental13coroutines_v114suspend_always11await_readyEv(%"struct.std::experimental::coroutines_v1::suspend_always"* %this) #6 comdat align 2 !dbg !600 {
entry:
%this.addr = alloca %"struct.std::experimental::coroutines_v1::suspend_always"*, align 8
store %"struct.std::experimental::coroutines_v1::suspend_always"* %this, %"struct.std::experimental::coroutines_v1::suspend_always"** %this.addr, align 8
call void @llvm.dbg.declare(metadata %"struct.std::experimental::coroutines_v1::suspend_always"** %this.addr, metadata !614, metadata !DIExpression()), !dbg !616
%this1 = load %"struct.std::experimental::coroutines_v1::suspend_always"*, %"struct.std::experimental::coroutines_v1::suspend_always"** %this.addr, align 8
ret i1 false, !dbg !617
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr hidden void @_ZNKSt12experimental13coroutines_v114suspend_always13await_suspendENS0_16coroutine_handleIvEE(%"struct.std::experimental::coroutines_v1::suspend_always"* %this, i8* %.coerce) #6 comdat align 2 !dbg !618 {
entry:
%0 = alloca %"class.std::experimental::coroutines_v1::coroutine_handle.0", align 8
%this.addr = alloca %"struct.std::experimental::coroutines_v1::suspend_always"*, align 8
%coerce.dive = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle.0", %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %0, i32 0, i32 0
store i8* %.coerce, i8** %coerce.dive, align 8
store %"struct.std::experimental::coroutines_v1::suspend_always"* %this, %"struct.std::experimental::coroutines_v1::suspend_always"** %this.addr, align 8
call void @llvm.dbg.declare(metadata %"struct.std::experimental::coroutines_v1::suspend_always"** %this.addr, metadata !619, metadata !DIExpression()), !dbg !620
call void @llvm.dbg.declare(metadata %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %0, metadata !621, metadata !DIExpression()), !dbg !622
%this1 = load %"struct.std::experimental::coroutines_v1::suspend_always"*, %"struct.std::experimental::coroutines_v1::suspend_always"** %this.addr, align 8
ret void, !dbg !623
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr hidden void @_ZNKSt12experimental13coroutines_v114suspend_always12await_resumeEv(%"struct.std::experimental::coroutines_v1::suspend_always"* %this) #6 comdat align 2 !dbg !624 {
entry:
%this.addr = alloca %"struct.std::experimental::coroutines_v1::suspend_always"*, align 8
store %"struct.std::experimental::coroutines_v1::suspend_always"* %this, %"struct.std::experimental::coroutines_v1::suspend_always"** %this.addr, align 8
call void @llvm.dbg.declare(metadata %"struct.std::experimental::coroutines_v1::suspend_always"** %this.addr, metadata !625, metadata !DIExpression()), !dbg !626
%this1 = load %"struct.std::experimental::coroutines_v1::suspend_always"*, %"struct.std::experimental::coroutines_v1::suspend_always"** %this.addr, align 8
ret void, !dbg !627
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZN4coro12promise_type11return_voidEv(%"struct.coro::promise_type"* %this) #6 comdat align 2 !dbg !628 {
entry:
%this.addr = alloca %"struct.coro::promise_type"*, align 8
store %"struct.coro::promise_type"* %this, %"struct.coro::promise_type"** %this.addr, align 8
call void @llvm.dbg.declare(metadata %"struct.coro::promise_type"** %this.addr, metadata !629, metadata !DIExpression()), !dbg !630
%this1 = load %"struct.coro::promise_type"*, %"struct.coro::promise_type"** %this.addr, align 8
ret void, !dbg !631
}
declare dso_local i8* @__cxa_begin_catch(i8*)
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZN4coro12promise_type19unhandled_exceptionEv(%"struct.coro::promise_type"* %this) #6 comdat align 2 !dbg !632 {
entry:
%this.addr = alloca %"struct.coro::promise_type"*, align 8
store %"struct.coro::promise_type"* %this, %"struct.coro::promise_type"** %this.addr, align 8
call void @llvm.dbg.declare(metadata %"struct.coro::promise_type"** %this.addr, metadata !633, metadata !DIExpression()), !dbg !634
%this1 = load %"struct.coro::promise_type"*, %"struct.coro::promise_type"** %this.addr, align 8
ret void, !dbg !635
}
declare dso_local void @__cxa_end_catch()
; Function Attrs: noinline noreturn nounwind
define linkonce_odr hidden void @__clang_call_terminate(i8* %0) #9 comdat {
%2 = call i8* @__cxa_begin_catch(i8* %0) #2
call void @_ZSt9terminatev() #14
unreachable
}
declare dso_local void @_ZSt9terminatev()
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZN4coro12promise_type13final_suspendEv(%"struct.coro::promise_type"* %this) #6 comdat align 2 !dbg !636 {
entry:
%this.addr = alloca %"struct.coro::promise_type"*, align 8
store %"struct.coro::promise_type"* %this, %"struct.coro::promise_type"** %this.addr, align 8
call void @llvm.dbg.declare(metadata %"struct.coro::promise_type"** %this.addr, metadata !637, metadata !DIExpression()), !dbg !638
%this1 = load %"struct.coro::promise_type"*, %"struct.coro::promise_type"** %this.addr, align 8
ret void, !dbg !639
}
; Function Attrs: nounwind
declare i1 @llvm.coro.end(i8*, i1) #2
; Function Attrs: nobuiltin nounwind
declare dso_local void @_ZdlPv(i8*) #10
; Function Attrs: argmemonly nounwind readonly
declare i8* @llvm.coro.free(token, i8* nocapture readonly) #1
; Function Attrs: noinline norecurse optnone uwtable
define dso_local i32 @main() #11 !dbg !640 {
entry:
%c = alloca %struct.coro, align 8
call void @llvm.dbg.declare(metadata %struct.coro* %c, metadata !641, metadata !DIExpression()), !dbg !642
%call = call i8* @_Z3foov(), !dbg !643
%coerce.dive = getelementptr inbounds %struct.coro, %struct.coro* %c, i32 0, i32 0, !dbg !643
%coerce.dive1 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle", %"class.std::experimental::coroutines_v1::coroutine_handle"* %coerce.dive, i32 0, i32 0, !dbg !643
%coerce.dive2 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle.0", %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %coerce.dive1, i32 0, i32 0, !dbg !643
store i8* %call, i8** %coerce.dive2, align 8, !dbg !643
%handle = getelementptr inbounds %struct.coro, %struct.coro* %c, i32 0, i32 0, !dbg !644
%0 = bitcast %"class.std::experimental::coroutines_v1::coroutine_handle"* %handle to %"class.std::experimental::coroutines_v1::coroutine_handle.0"*, !dbg !645
call void @_ZNSt12experimental13coroutines_v116coroutine_handleIvE6resumeEv(%"class.std::experimental::coroutines_v1::coroutine_handle.0"* %0), !dbg !646
%handle3 = getelementptr inbounds %struct.coro, %struct.coro* %c, i32 0, i32 0, !dbg !647
%1 = bitcast %"class.std::experimental::coroutines_v1::coroutine_handle"* %handle3 to %"class.std::experimental::coroutines_v1::coroutine_handle.0"*, !dbg !648
call void @_ZNSt12experimental13coroutines_v116coroutine_handleIvE6resumeEv(%"class.std::experimental::coroutines_v1::coroutine_handle.0"* %1), !dbg !649
ret i32 0, !dbg !650
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr hidden void @_ZNSt12experimental13coroutines_v116coroutine_handleIvE6resumeEv(%"class.std::experimental::coroutines_v1::coroutine_handle.0"* %this) #0 comdat align 2 !dbg !651 {
entry:
%this.addr = alloca %"class.std::experimental::coroutines_v1::coroutine_handle.0"*, align 8
store %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %this, %"class.std::experimental::coroutines_v1::coroutine_handle.0"** %this.addr, align 8
call void @llvm.dbg.declare(metadata %"class.std::experimental::coroutines_v1::coroutine_handle.0"** %this.addr, metadata !652, metadata !DIExpression()), !dbg !654
%this1 = load %"class.std::experimental::coroutines_v1::coroutine_handle.0"*, %"class.std::experimental::coroutines_v1::coroutine_handle.0"** %this.addr, align 8
%__handle_ = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle.0", %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %this1, i32 0, i32 0, !dbg !655
%0 = load i8*, i8** %__handle_, align 8, !dbg !655
%1 = bitcast i8* %0 to { i8*, i8* }*
%2 = getelementptr inbounds { i8*, i8* }, { i8*, i8* }* %1, i32 0, i32 0
%3 = load i8*, i8** %2, align 8
%4 = bitcast i8* %3 to void (i8*)*
call fastcc void %4(i8* %0), !dbg !656
ret void, !dbg !657
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr hidden i8* @_ZNSt12experimental13coroutines_v116coroutine_handleIN4coro12promise_typeEE12from_promiseERS3_(%"struct.coro::promise_type"* nonnull align 1 dereferenceable(1) %__promise) #6 comdat align 2 !dbg !658 {
entry:
%retval = alloca %"class.std::experimental::coroutines_v1::coroutine_handle", align 8
%__promise.addr = alloca %"struct.coro::promise_type"*, align 8
store %"struct.coro::promise_type"* %__promise, %"struct.coro::promise_type"** %__promise.addr, align 8
call void @llvm.dbg.declare(metadata %"struct.coro::promise_type"** %__promise.addr, metadata !659, metadata !DIExpression()), !dbg !660
call void @llvm.dbg.declare(metadata %"class.std::experimental::coroutines_v1::coroutine_handle"* %retval, metadata !661, metadata !DIExpression()), !dbg !662
call void @_ZNSt12experimental13coroutines_v116coroutine_handleIN4coro12promise_typeEEC2Ev(%"class.std::experimental::coroutines_v1::coroutine_handle"* %retval) #2, !dbg !662
%0 = load %"struct.coro::promise_type"*, %"struct.coro::promise_type"** %__promise.addr, align 8, !dbg !663
%call = call %"struct.coro::promise_type"* @_ZNSt3__19addressofIN4coro12promise_typeEEEPT_RS3_(%"struct.coro::promise_type"* nonnull align 1 dereferenceable(1) %0) #2, !dbg !664
%1 = bitcast %"struct.coro::promise_type"* %call to i8*, !dbg !664
%2 = getelementptr inbounds i8, i8* %1, i32 -16, !dbg !665
%3 = bitcast %"class.std::experimental::coroutines_v1::coroutine_handle"* %retval to %"class.std::experimental::coroutines_v1::coroutine_handle.0"*, !dbg !666
%__handle_ = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle.0", %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %3, i32 0, i32 0, !dbg !667
store i8* %2, i8** %__handle_, align 8, !dbg !668
%coerce.dive = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle", %"class.std::experimental::coroutines_v1::coroutine_handle"* %retval, i32 0, i32 0, !dbg !669
%coerce.dive1 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle.0", %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %coerce.dive, i32 0, i32 0, !dbg !669
%4 = load i8*, i8** %coerce.dive1, align 8, !dbg !669
ret i8* %4, !dbg !669
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZN4coroC2ENSt12experimental13coroutines_v116coroutine_handleINS_12promise_typeEEE(%struct.coro* %this, i8* %handle.coerce) unnamed_addr #6 comdat align 2 !dbg !670 {
entry:
%handle = alloca %"class.std::experimental::coroutines_v1::coroutine_handle", align 8
%this.addr = alloca %struct.coro*, align 8
%coerce.dive = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle", %"class.std::experimental::coroutines_v1::coroutine_handle"* %handle, i32 0, i32 0
%coerce.dive1 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle.0", %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %coerce.dive, i32 0, i32 0
store i8* %handle.coerce, i8** %coerce.dive1, align 8
store %struct.coro* %this, %struct.coro** %this.addr, align 8
call void @llvm.dbg.declare(metadata %struct.coro** %this.addr, metadata !671, metadata !DIExpression()), !dbg !673
call void @llvm.dbg.declare(metadata %"class.std::experimental::coroutines_v1::coroutine_handle"* %handle, metadata !674, metadata !DIExpression()), !dbg !675
%this2 = load %struct.coro*, %struct.coro** %this.addr, align 8
%handle3 = getelementptr inbounds %struct.coro, %struct.coro* %this2, i32 0, i32 0, !dbg !676
%0 = bitcast %"class.std::experimental::coroutines_v1::coroutine_handle"* %handle3 to i8*, !dbg !676
%1 = bitcast %"class.std::experimental::coroutines_v1::coroutine_handle"* %handle to i8*, !dbg !676
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %0, i8* align 8 %1, i64 8, i1 false), !dbg !676
ret void, !dbg !677
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZNSt12experimental13coroutines_v116coroutine_handleIN4coro12promise_typeEEC2Ev(%"class.std::experimental::coroutines_v1::coroutine_handle"* %this) unnamed_addr #6 comdat align 2 !dbg !678 {
entry:
%this.addr = alloca %"class.std::experimental::coroutines_v1::coroutine_handle"*, align 8
store %"class.std::experimental::coroutines_v1::coroutine_handle"* %this, %"class.std::experimental::coroutines_v1::coroutine_handle"** %this.addr, align 8
call void @llvm.dbg.declare(metadata %"class.std::experimental::coroutines_v1::coroutine_handle"** %this.addr, metadata !682, metadata !DIExpression()), !dbg !684
%this1 = load %"class.std::experimental::coroutines_v1::coroutine_handle"*, %"class.std::experimental::coroutines_v1::coroutine_handle"** %this.addr, align 8
%0 = bitcast %"class.std::experimental::coroutines_v1::coroutine_handle"* %this1 to %"class.std::experimental::coroutines_v1::coroutine_handle.0"*, !dbg !685
call void @_ZNSt12experimental13coroutines_v116coroutine_handleIvEC2Ev(%"class.std::experimental::coroutines_v1::coroutine_handle.0"* %0) #2, !dbg !685
ret void, !dbg !685
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr hidden %"struct.coro::promise_type"* @_ZNSt3__19addressofIN4coro12promise_typeEEEPT_RS3_(%"struct.coro::promise_type"* nonnull align 1 dereferenceable(1) %__x) #6 comdat !dbg !686 {
entry:
%__x.addr = alloca %"struct.coro::promise_type"*, align 8
store %"struct.coro::promise_type"* %__x, %"struct.coro::promise_type"** %__x.addr, align 8
call void @llvm.dbg.declare(metadata %"struct.coro::promise_type"** %__x.addr, metadata !692, metadata !DIExpression()), !dbg !693
%0 = load %"struct.coro::promise_type"*, %"struct.coro::promise_type"** %__x.addr, align 8, !dbg !694
ret %"struct.coro::promise_type"* %0, !dbg !695
}
; Function Attrs: nounwind readnone
declare i8* @llvm.coro.promise(i8* nocapture, i32, i1) #4
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr hidden void @_ZNSt12experimental13coroutines_v116coroutine_handleIvEC2Ev(%"class.std::experimental::coroutines_v1::coroutine_handle.0"* %this) unnamed_addr #6 comdat align 2 !dbg !696 {
entry:
%this.addr = alloca %"class.std::experimental::coroutines_v1::coroutine_handle.0"*, align 8
store %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %this, %"class.std::experimental::coroutines_v1::coroutine_handle.0"** %this.addr, align 8
call void @llvm.dbg.declare(metadata %"class.std::experimental::coroutines_v1::coroutine_handle.0"** %this.addr, metadata !697, metadata !DIExpression()), !dbg !698
%this1 = load %"class.std::experimental::coroutines_v1::coroutine_handle.0"*, %"class.std::experimental::coroutines_v1::coroutine_handle.0"** %this.addr, align 8
%__handle_ = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle.0", %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %this1, i32 0, i32 0, !dbg !699
store i8* null, i8** %__handle_, align 8, !dbg !699
ret void, !dbg !700
}
declare void @llvm.coro.resume(i8*)
; Function Attrs: argmemonly nounwind readonly
declare i8* @llvm.coro.subfn.addr(i8* nocapture readonly, i8) #1
; Function Attrs: alwaysinline
define private void @coro.devirt.trigger(i8* %0) #12 {
entry:
ret void
}
; Function Attrs: noinline optnone uwtable
define internal fastcc void @_Z3foov.resume(%_Z3foov.Frame* noalias nonnull align 16 dereferenceable(128) %FramePtr) #0 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) !dbg !701 {
entry.resume:
%vFrame = bitcast %_Z3foov.Frame* %FramePtr to i8*
%ehselector.slot = alloca i32, align 4
%exn.slot = alloca i8*, align 8
%gro.active = alloca i1, align 1
%retval = alloca %struct.coro, align 8
%ref.tmp.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 4, !dbg !702
%agg.tmp.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 7, !dbg !702
%ref.tmp7.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 9, !dbg !702
%x.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 8, !dbg !702
%a.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 6, !dbg !702
%ref.tmp12.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 5, !dbg !702
%agg.tmp14.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 10, !dbg !702
%ref.tmp15.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 11, !dbg !702
%ref.tmp29.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 14, !dbg !702
%agg.tmp32.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 12, !dbg !702
%ref.tmp33.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 13, !dbg !702
%__promise.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 2, !dbg !702
br label %resume.entry, !dbg !702
resume.0: ; preds = %resume.entry
br label %resume.0.landing, !dbg !703
resume.0.landing: ; preds = %resume.0
br label %AfterCoroSuspend, !dbg !703
AfterCoroSuspend: ; preds = %resume.0.landing
switch i8 0, label %coro.ret [
i8 0, label %init.ready
i8 1, label %init.cleanup
], !dbg !703
init.cleanup: ; preds = %AfterCoroSuspend
br label %cleanup.from.init.cleanup, !dbg !703
cleanup.from.init.cleanup: ; preds = %init.cleanup
%.cleanup57 = phi i32 [ 2, %init.cleanup ]
br label %cleanup, !dbg !703
init.ready: ; preds = %AfterCoroSuspend
call void @_ZNKSt12experimental13coroutines_v113suspend_never12await_resumeEv(%"struct.std::experimental::coroutines_v1::suspend_never"* %ref.tmp.reload.addr) #2, !dbg !703
call void @llvm.dbg.declare(metadata [10 x i32]* %x.reload.addr, metadata !704, metadata !DIExpression()), !dbg !706
%0 = bitcast [10 x i32]* %x.reload.addr to i8*, !dbg !706
call void @llvm.memset.p0i8.i64(i8* align 16 %0, i8 0, i64 40, i1 false), !dbg !706
call void @llvm.dbg.declare(metadata i32* %a.reload.addr, metadata !707, metadata !DIExpression()), !dbg !708
store i32 3, i32* %a.reload.addr, align 4, !dbg !708
%call13 = call zeroext i1 @_ZNKSt12experimental13coroutines_v114suspend_always11await_readyEv(%"struct.std::experimental::coroutines_v1::suspend_always"* %ref.tmp12.reload.addr) #2, !dbg !709
br i1 %call13, label %await.ready, label %CoroSave47, !dbg !710
CoroSave47: ; preds = %init.ready
%index.addr60 = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 3, !dbg !710
store i2 1, i2* %index.addr60, align 1, !dbg !710
br label %AfterCoroSave48, !dbg !709
AfterCoroSave48: ; preds = %CoroSave47
%call16 = call i8* @_ZNSt12experimental13coroutines_v116coroutine_handleIN4coro12promise_typeEE12from_addressEPv(i8* %vFrame) #2, !dbg !709
%coerce.dive17 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle", %"class.std::experimental::coroutines_v1::coroutine_handle"* %ref.tmp15.reload.addr, i32 0, i32 0, !dbg !709
%coerce.dive18 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle.0", %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %coerce.dive17, i32 0, i32 0, !dbg !709
store i8* %call16, i8** %coerce.dive18, align 8, !dbg !709
%1 = bitcast %"class.std::experimental::coroutines_v1::coroutine_handle"* %ref.tmp15.reload.addr to %"class.std::experimental::coroutines_v1::coroutine_handle.0"*, !dbg !709
%2 = bitcast %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %agg.tmp14.reload.addr to i8*, !dbg !709
%3 = bitcast %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %1 to i8*, !dbg !709
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %2, i8* align 8 %3, i64 8, i1 false), !dbg !709
%coerce.dive19 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle.0", %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %agg.tmp14.reload.addr, i32 0, i32 0, !dbg !709
%4 = load i8*, i8** %coerce.dive19, align 8, !dbg !709
call void @_ZNKSt12experimental13coroutines_v114suspend_always13await_suspendENS0_16coroutine_handleIvEE(%"struct.std::experimental::coroutines_v1::suspend_always"* %ref.tmp12.reload.addr, i8* %4) #2, !dbg !709
br label %CoroSuspend49, !dbg !710
CoroSuspend49: ; preds = %AfterCoroSave48
br label %resume.1.landing, !dbg !710
resume.1: ; preds = %resume.entry
br label %resume.1.landing, !dbg !710
resume.1.landing: ; preds = %resume.1, %CoroSuspend49
%5 = phi i8 [ -1, %CoroSuspend49 ], [ 0, %resume.1 ]
br label %AfterCoroSuspend50, !dbg !710
AfterCoroSuspend50: ; preds = %resume.1.landing
switch i8 %5, label %coro.ret [
i8 0, label %await.ready
i8 1, label %await.cleanup
], !dbg !710
await.cleanup: ; preds = %AfterCoroSuspend50
br label %cleanup.from.await.cleanup, !dbg !710
cleanup.from.await.cleanup: ; preds = %await.cleanup
%.cleanup56 = phi i32 [ 2, %await.cleanup ]
br label %cleanup, !dbg !710
await.ready: ; preds = %AfterCoroSuspend50, %init.ready
call void @_ZNKSt12experimental13coroutines_v114suspend_always12await_resumeEv(%"struct.std::experimental::coroutines_v1::suspend_always"* %ref.tmp12.reload.addr) #2, !dbg !709
%6 = load i32, i32* %a.reload.addr, align 4, !dbg !711
%inc = add nsw i32 %6, 1, !dbg !711
store i32 %inc, i32* %a.reload.addr, align 4, !dbg !711
%arrayidx = getelementptr inbounds [10 x i32], [10 x i32]* %x.reload.addr, i64 0, i64 0, !dbg !712
store i32 1, i32* %arrayidx, align 16, !dbg !713
%7 = load i32, i32* %a.reload.addr, align 4, !dbg !714
%add = add nsw i32 %7, 2, !dbg !714
store i32 %add, i32* %a.reload.addr, align 4, !dbg !714
%arrayidx20 = getelementptr inbounds [10 x i32], [10 x i32]* %x.reload.addr, i64 0, i64 1, !dbg !715
store i32 2, i32* %arrayidx20, align 4, !dbg !716
%8 = load i32, i32* %a.reload.addr, align 4, !dbg !717
%add21 = add nsw i32 %8, 3, !dbg !717
store i32 %add21, i32* %a.reload.addr, align 4, !dbg !717
%arrayidx22 = getelementptr inbounds [10 x i32], [10 x i32]* %x.reload.addr, i64 0, i64 2, !dbg !718
store i32 3, i32* %arrayidx22, align 8, !dbg !719
call void @_ZN4coro12promise_type11return_voidEv(%"struct.coro::promise_type"* %__promise.reload.addr), !dbg !703
br label %invoke.cont24
invoke.cont24: ; preds = %await.ready
br label %coro.final, !dbg !703
coro.final: ; preds = %invoke.cont24
call void @_ZN4coro12promise_type13final_suspendEv(%"struct.coro::promise_type"* %__promise.reload.addr) #2, !dbg !703
%call31 = call zeroext i1 @_ZNKSt12experimental13coroutines_v113suspend_never11await_readyEv(%"struct.std::experimental::coroutines_v1::suspend_never"* %ref.tmp29.reload.addr) #2, !dbg !703
br i1 %call31, label %final.ready, label %CoroSave51, !dbg !703
CoroSave51: ; preds = %coro.final
%ResumeFn.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 0, !dbg !703
store void (%_Z3foov.Frame*)* null, void (%_Z3foov.Frame*)** %ResumeFn.addr, align 8, !dbg !703
br label %AfterCoroSave52, !dbg !703
AfterCoroSave52: ; preds = %CoroSave51
%call34 = call i8* @_ZNSt12experimental13coroutines_v116coroutine_handleIN4coro12promise_typeEE12from_addressEPv(i8* %vFrame) #2, !dbg !703
%coerce.dive35 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle", %"class.std::experimental::coroutines_v1::coroutine_handle"* %ref.tmp33.reload.addr, i32 0, i32 0, !dbg !703
%coerce.dive36 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle.0", %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %coerce.dive35, i32 0, i32 0, !dbg !703
store i8* %call34, i8** %coerce.dive36, align 8, !dbg !703
%9 = bitcast %"class.std::experimental::coroutines_v1::coroutine_handle"* %ref.tmp33.reload.addr to %"class.std::experimental::coroutines_v1::coroutine_handle.0"*, !dbg !703
%10 = bitcast %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %agg.tmp32.reload.addr to i8*, !dbg !703
%11 = bitcast %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %9 to i8*, !dbg !703
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %10, i8* align 8 %11, i64 8, i1 false), !dbg !703
%coerce.dive37 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle.0", %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %agg.tmp32.reload.addr, i32 0, i32 0, !dbg !703
%12 = load i8*, i8** %coerce.dive37, align 8, !dbg !703
call void @_ZNKSt12experimental13coroutines_v113suspend_never13await_suspendENS0_16coroutine_handleIvEE(%"struct.std::experimental::coroutines_v1::suspend_never"* %ref.tmp29.reload.addr, i8* %12) #2, !dbg !703
br label %CoroSuspend53, !dbg !703
CoroSuspend53: ; preds = %AfterCoroSave52
br label %resume.2.landing, !dbg !703
resume.2.landing: ; preds = %CoroSuspend53
br label %AfterCoroSuspend54, !dbg !703
AfterCoroSuspend54: ; preds = %resume.2.landing
switch i8 -1, label %coro.ret [
i8 0, label %final.ready
i8 1, label %final.cleanup
], !dbg !703
final.cleanup: ; preds = %AfterCoroSuspend54
br label %cleanup.from.final.cleanup, !dbg !703
cleanup.from.final.cleanup: ; preds = %final.cleanup
%.cleanup55 = phi i32 [ 2, %final.cleanup ]
br label %cleanup, !dbg !703
final.ready: ; preds = %AfterCoroSuspend54, %coro.final
call void @_ZNKSt12experimental13coroutines_v113suspend_never12await_resumeEv(%"struct.std::experimental::coroutines_v1::suspend_never"* %ref.tmp29.reload.addr) #2, !dbg !703
br label %cleanup.from.final.ready, !dbg !703
cleanup.from.final.ready: ; preds = %final.ready
%.cleanup = phi i32 [ 0, %final.ready ]
br label %cleanup, !dbg !703
cleanup: ; preds = %cleanup.from.final.ready, %cleanup.from.final.cleanup, %cleanup.from.await.cleanup, %cleanup.from.init.cleanup
%cleanup.dest.slot.0 = phi i32 [ %.cleanup, %cleanup.from.final.ready ], [ %.cleanup55, %cleanup.from.final.cleanup ], [ %.cleanup56, %cleanup.from.await.cleanup ], [ %.cleanup57, %cleanup.from.init.cleanup ]
%13 = icmp ne i8* %vFrame, null, !dbg !703
br i1 %13, label %coro.free, label %after.coro.free, !dbg !703
coro.free: ; preds = %cleanup
call void @_ZdlPv(i8* %vFrame) #2, !dbg !703
br label %after.coro.free, !dbg !703
after.coro.free: ; preds = %coro.free, %cleanup
switch i32 %cleanup.dest.slot.0, label %unreachable [
i32 0, label %cleanup.cont38
i32 2, label %coro.ret
]
cleanup.cont38: ; preds = %after.coro.free
br label %coro.ret, !dbg !703
coro.ret: ; preds = %cleanup.cont38, %after.coro.free, %AfterCoroSuspend54, %AfterCoroSuspend50, %AfterCoroSuspend
br label %CoroEnd, !dbg !703
CoroEnd: ; preds = %coro.ret
ret void, !dbg !703
unreachable: ; preds = %after.coro.free
unreachable
resume.entry: ; preds = %entry.resume
%index.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 3
%index = load i2, i2* %index.addr, align 1
switch i2 %index, label %unreachable58 [
i2 0, label %resume.0
i2 1, label %resume.1
]
unreachable58: ; preds = %resume.entry
unreachable, !dbg !703
}
; Function Attrs: noinline optnone uwtable
define internal fastcc void @_Z3foov.destroy(%_Z3foov.Frame* noalias nonnull align 16 dereferenceable(128) %FramePtr) #0 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) !dbg !720 {
entry.destroy:
%vFrame = bitcast %_Z3foov.Frame* %FramePtr to i8*
%ehselector.slot = alloca i32, align 4
%exn.slot = alloca i8*, align 8
%gro.active = alloca i1, align 1
%retval = alloca %struct.coro, align 8
%ref.tmp.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 4, !dbg !721
%agg.tmp.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 7, !dbg !721
%ref.tmp7.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 9, !dbg !721
%x.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 8, !dbg !721
%a.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 6, !dbg !721
%ref.tmp12.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 5, !dbg !721
%agg.tmp14.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 10, !dbg !721
%ref.tmp15.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 11, !dbg !721
%ref.tmp29.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 14, !dbg !721
%agg.tmp32.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 12, !dbg !721
%ref.tmp33.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 13, !dbg !721
%__promise.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 2, !dbg !721
br label %resume.entry, !dbg !721
resume.0: ; preds = %Switch
br label %resume.0.landing, !dbg !722
resume.0.landing: ; preds = %resume.0
br label %AfterCoroSuspend, !dbg !722
AfterCoroSuspend: ; preds = %resume.0.landing
switch i8 1, label %coro.ret [
i8 0, label %init.ready
i8 1, label %init.cleanup
], !dbg !722
init.cleanup: ; preds = %AfterCoroSuspend
br label %cleanup.from.init.cleanup, !dbg !722
cleanup.from.init.cleanup: ; preds = %init.cleanup
%.cleanup57 = phi i32 [ 2, %init.cleanup ]
br label %cleanup, !dbg !722
init.ready: ; preds = %AfterCoroSuspend
call void @_ZNKSt12experimental13coroutines_v113suspend_never12await_resumeEv(%"struct.std::experimental::coroutines_v1::suspend_never"* %ref.tmp.reload.addr) #2, !dbg !722
call void @llvm.dbg.declare(metadata [10 x i32]* %x.reload.addr, metadata !723, metadata !DIExpression()), !dbg !725
%0 = bitcast [10 x i32]* %x.reload.addr to i8*, !dbg !725
call void @llvm.memset.p0i8.i64(i8* align 16 %0, i8 0, i64 40, i1 false), !dbg !725
call void @llvm.dbg.declare(metadata i32* %a.reload.addr, metadata !726, metadata !DIExpression()), !dbg !727
store i32 3, i32* %a.reload.addr, align 4, !dbg !727
%call13 = call zeroext i1 @_ZNKSt12experimental13coroutines_v114suspend_always11await_readyEv(%"struct.std::experimental::coroutines_v1::suspend_always"* %ref.tmp12.reload.addr) #2, !dbg !728
br i1 %call13, label %await.ready, label %CoroSave47, !dbg !729
CoroSave47: ; preds = %init.ready
%index.addr60 = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 3, !dbg !729
store i2 1, i2* %index.addr60, align 1, !dbg !729
br label %AfterCoroSave48, !dbg !728
AfterCoroSave48: ; preds = %CoroSave47
%call16 = call i8* @_ZNSt12experimental13coroutines_v116coroutine_handleIN4coro12promise_typeEE12from_addressEPv(i8* %vFrame) #2, !dbg !728
%coerce.dive17 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle", %"class.std::experimental::coroutines_v1::coroutine_handle"* %ref.tmp15.reload.addr, i32 0, i32 0, !dbg !728
%coerce.dive18 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle.0", %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %coerce.dive17, i32 0, i32 0, !dbg !728
store i8* %call16, i8** %coerce.dive18, align 8, !dbg !728
%1 = bitcast %"class.std::experimental::coroutines_v1::coroutine_handle"* %ref.tmp15.reload.addr to %"class.std::experimental::coroutines_v1::coroutine_handle.0"*, !dbg !728
%2 = bitcast %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %agg.tmp14.reload.addr to i8*, !dbg !728
%3 = bitcast %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %1 to i8*, !dbg !728
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %2, i8* align 8 %3, i64 8, i1 false), !dbg !728
%coerce.dive19 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle.0", %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %agg.tmp14.reload.addr, i32 0, i32 0, !dbg !728
%4 = load i8*, i8** %coerce.dive19, align 8, !dbg !728
call void @_ZNKSt12experimental13coroutines_v114suspend_always13await_suspendENS0_16coroutine_handleIvEE(%"struct.std::experimental::coroutines_v1::suspend_always"* %ref.tmp12.reload.addr, i8* %4) #2, !dbg !728
br label %CoroSuspend49, !dbg !729
CoroSuspend49: ; preds = %AfterCoroSave48
br label %resume.1.landing, !dbg !729
resume.1: ; preds = %Switch
br label %resume.1.landing, !dbg !729
resume.1.landing: ; preds = %resume.1, %CoroSuspend49
%5 = phi i8 [ -1, %CoroSuspend49 ], [ 1, %resume.1 ]
br label %AfterCoroSuspend50, !dbg !729
AfterCoroSuspend50: ; preds = %resume.1.landing
switch i8 %5, label %coro.ret [
i8 0, label %await.ready
i8 1, label %await.cleanup
], !dbg !729
await.cleanup: ; preds = %AfterCoroSuspend50
br label %cleanup.from.await.cleanup, !dbg !729
cleanup.from.await.cleanup: ; preds = %await.cleanup
%.cleanup56 = phi i32 [ 2, %await.cleanup ]
br label %cleanup, !dbg !729
await.ready: ; preds = %AfterCoroSuspend50, %init.ready
call void @_ZNKSt12experimental13coroutines_v114suspend_always12await_resumeEv(%"struct.std::experimental::coroutines_v1::suspend_always"* %ref.tmp12.reload.addr) #2, !dbg !728
%6 = load i32, i32* %a.reload.addr, align 4, !dbg !730
%inc = add nsw i32 %6, 1, !dbg !730
store i32 %inc, i32* %a.reload.addr, align 4, !dbg !730
%arrayidx = getelementptr inbounds [10 x i32], [10 x i32]* %x.reload.addr, i64 0, i64 0, !dbg !731
store i32 1, i32* %arrayidx, align 16, !dbg !732
%7 = load i32, i32* %a.reload.addr, align 4, !dbg !733
%add = add nsw i32 %7, 2, !dbg !733
store i32 %add, i32* %a.reload.addr, align 4, !dbg !733
%arrayidx20 = getelementptr inbounds [10 x i32], [10 x i32]* %x.reload.addr, i64 0, i64 1, !dbg !734
store i32 2, i32* %arrayidx20, align 4, !dbg !735
%8 = load i32, i32* %a.reload.addr, align 4, !dbg !736
%add21 = add nsw i32 %8, 3, !dbg !736
store i32 %add21, i32* %a.reload.addr, align 4, !dbg !736
%arrayidx22 = getelementptr inbounds [10 x i32], [10 x i32]* %x.reload.addr, i64 0, i64 2, !dbg !737
store i32 3, i32* %arrayidx22, align 8, !dbg !738
call void @_ZN4coro12promise_type11return_voidEv(%"struct.coro::promise_type"* %__promise.reload.addr), !dbg !722
br label %invoke.cont24
invoke.cont24: ; preds = %await.ready
br label %coro.final, !dbg !722
coro.final: ; preds = %invoke.cont24
call void @_ZN4coro12promise_type13final_suspendEv(%"struct.coro::promise_type"* %__promise.reload.addr) #2, !dbg !722
%call31 = call zeroext i1 @_ZNKSt12experimental13coroutines_v113suspend_never11await_readyEv(%"struct.std::experimental::coroutines_v1::suspend_never"* %ref.tmp29.reload.addr) #2, !dbg !722
br i1 %call31, label %final.ready, label %CoroSave51, !dbg !722
CoroSave51: ; preds = %coro.final
%ResumeFn.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 0, !dbg !722
store void (%_Z3foov.Frame*)* null, void (%_Z3foov.Frame*)** %ResumeFn.addr, align 8, !dbg !722
br label %AfterCoroSave52, !dbg !722
AfterCoroSave52: ; preds = %CoroSave51
%call34 = call i8* @_ZNSt12experimental13coroutines_v116coroutine_handleIN4coro12promise_typeEE12from_addressEPv(i8* %vFrame) #2, !dbg !722
%coerce.dive35 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle", %"class.std::experimental::coroutines_v1::coroutine_handle"* %ref.tmp33.reload.addr, i32 0, i32 0, !dbg !722
%coerce.dive36 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle.0", %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %coerce.dive35, i32 0, i32 0, !dbg !722
store i8* %call34, i8** %coerce.dive36, align 8, !dbg !722
%9 = bitcast %"class.std::experimental::coroutines_v1::coroutine_handle"* %ref.tmp33.reload.addr to %"class.std::experimental::coroutines_v1::coroutine_handle.0"*, !dbg !722
%10 = bitcast %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %agg.tmp32.reload.addr to i8*, !dbg !722
%11 = bitcast %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %9 to i8*, !dbg !722
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %10, i8* align 8 %11, i64 8, i1 false), !dbg !722
%coerce.dive37 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle.0", %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %agg.tmp32.reload.addr, i32 0, i32 0, !dbg !722
%12 = load i8*, i8** %coerce.dive37, align 8, !dbg !722
call void @_ZNKSt12experimental13coroutines_v113suspend_never13await_suspendENS0_16coroutine_handleIvEE(%"struct.std::experimental::coroutines_v1::suspend_never"* %ref.tmp29.reload.addr, i8* %12) #2, !dbg !722
br label %CoroSuspend53, !dbg !722
CoroSuspend53: ; preds = %AfterCoroSave52
br label %resume.2.landing, !dbg !722
resume.2: ; preds = %resume.entry
br label %resume.2.landing, !dbg !722
resume.2.landing: ; preds = %resume.2, %CoroSuspend53
%13 = phi i8 [ -1, %CoroSuspend53 ], [ 1, %resume.2 ]
br label %AfterCoroSuspend54, !dbg !722
AfterCoroSuspend54: ; preds = %resume.2.landing
switch i8 %13, label %coro.ret [
i8 0, label %final.ready
i8 1, label %final.cleanup
], !dbg !722
final.cleanup: ; preds = %AfterCoroSuspend54
br label %cleanup.from.final.cleanup, !dbg !722
cleanup.from.final.cleanup: ; preds = %final.cleanup
%.cleanup55 = phi i32 [ 2, %final.cleanup ]
br label %cleanup, !dbg !722
final.ready: ; preds = %AfterCoroSuspend54, %coro.final
call void @_ZNKSt12experimental13coroutines_v113suspend_never12await_resumeEv(%"struct.std::experimental::coroutines_v1::suspend_never"* %ref.tmp29.reload.addr) #2, !dbg !722
br label %cleanup.from.final.ready, !dbg !722
cleanup.from.final.ready: ; preds = %final.ready
%.cleanup = phi i32 [ 0, %final.ready ]
br label %cleanup, !dbg !722
cleanup: ; preds = %cleanup.from.final.ready, %cleanup.from.final.cleanup, %cleanup.from.await.cleanup, %cleanup.from.init.cleanup
%cleanup.dest.slot.0 = phi i32 [ %.cleanup, %cleanup.from.final.ready ], [ %.cleanup55, %cleanup.from.final.cleanup ], [ %.cleanup56, %cleanup.from.await.cleanup ], [ %.cleanup57, %cleanup.from.init.cleanup ]
%14 = icmp ne i8* %vFrame, null, !dbg !722
br i1 %14, label %coro.free, label %after.coro.free, !dbg !722
coro.free: ; preds = %cleanup
call void @_ZdlPv(i8* %vFrame) #2, !dbg !722
br label %after.coro.free, !dbg !722
after.coro.free: ; preds = %coro.free, %cleanup
switch i32 %cleanup.dest.slot.0, label %unreachable [
i32 0, label %cleanup.cont38
i32 2, label %coro.ret
]
cleanup.cont38: ; preds = %after.coro.free
br label %coro.ret, !dbg !722
coro.ret: ; preds = %cleanup.cont38, %after.coro.free, %AfterCoroSuspend54, %AfterCoroSuspend50, %AfterCoroSuspend
br label %CoroEnd, !dbg !722
CoroEnd: ; preds = %coro.ret
ret void, !dbg !722
unreachable: ; preds = %after.coro.free
unreachable
resume.entry: ; preds = %entry.destroy
%index.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 3
%index = load i2, i2* %index.addr, align 1
%ResumeFn.addr1 = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 0
%15 = load void (%_Z3foov.Frame*)*, void (%_Z3foov.Frame*)** %ResumeFn.addr1, align 8
%16 = icmp eq void (%_Z3foov.Frame*)* %15, null
br i1 %16, label %resume.2, label %Switch
Switch: ; preds = %resume.entry
switch i2 %index, label %unreachable58 [
i2 0, label %resume.0
i2 1, label %resume.1
]
unreachable58: ; preds = %Switch
unreachable, !dbg !722
}
; Function Attrs: noinline optnone uwtable
define internal fastcc void @_Z3foov.cleanup(%_Z3foov.Frame* noalias nonnull align 16 dereferenceable(128) %FramePtr) #0 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) !dbg !739 {
entry.cleanup:
%vFrame = bitcast %_Z3foov.Frame* %FramePtr to i8*
%ehselector.slot = alloca i32, align 4
%exn.slot = alloca i8*, align 8
%gro.active = alloca i1, align 1
%retval = alloca %struct.coro, align 8
%ref.tmp.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 4, !dbg !740
%agg.tmp.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 7, !dbg !740
%ref.tmp7.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 9, !dbg !740
%x.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 8, !dbg !740
%a.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 6, !dbg !740
%ref.tmp12.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 5, !dbg !740
%agg.tmp14.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 10, !dbg !740
%ref.tmp15.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 11, !dbg !740
%ref.tmp29.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 14, !dbg !740
%agg.tmp32.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 12, !dbg !740
%ref.tmp33.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 13, !dbg !740
%__promise.reload.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 2, !dbg !740
br label %resume.entry, !dbg !740
resume.0: ; preds = %Switch
br label %resume.0.landing, !dbg !741
resume.0.landing: ; preds = %resume.0
br label %AfterCoroSuspend, !dbg !741
AfterCoroSuspend: ; preds = %resume.0.landing
switch i8 1, label %coro.ret [
i8 0, label %init.ready
i8 1, label %init.cleanup
], !dbg !741
init.cleanup: ; preds = %AfterCoroSuspend
br label %cleanup.from.init.cleanup, !dbg !741
cleanup.from.init.cleanup: ; preds = %init.cleanup
%.cleanup57 = phi i32 [ 2, %init.cleanup ]
br label %cleanup, !dbg !741
init.ready: ; preds = %AfterCoroSuspend
call void @_ZNKSt12experimental13coroutines_v113suspend_never12await_resumeEv(%"struct.std::experimental::coroutines_v1::suspend_never"* %ref.tmp.reload.addr) #2, !dbg !741
call void @llvm.dbg.declare(metadata [10 x i32]* %x.reload.addr, metadata !742, metadata !DIExpression()), !dbg !744
%0 = bitcast [10 x i32]* %x.reload.addr to i8*, !dbg !744
call void @llvm.memset.p0i8.i64(i8* align 16 %0, i8 0, i64 40, i1 false), !dbg !744
call void @llvm.dbg.declare(metadata i32* %a.reload.addr, metadata !745, metadata !DIExpression()), !dbg !746
store i32 3, i32* %a.reload.addr, align 4, !dbg !746
%call13 = call zeroext i1 @_ZNKSt12experimental13coroutines_v114suspend_always11await_readyEv(%"struct.std::experimental::coroutines_v1::suspend_always"* %ref.tmp12.reload.addr) #2, !dbg !747
br i1 %call13, label %await.ready, label %CoroSave47, !dbg !748
CoroSave47: ; preds = %init.ready
%index.addr60 = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 3, !dbg !748
store i2 1, i2* %index.addr60, align 1, !dbg !748
br label %AfterCoroSave48, !dbg !747
AfterCoroSave48: ; preds = %CoroSave47
%call16 = call i8* @_ZNSt12experimental13coroutines_v116coroutine_handleIN4coro12promise_typeEE12from_addressEPv(i8* %vFrame) #2, !dbg !747
%coerce.dive17 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle", %"class.std::experimental::coroutines_v1::coroutine_handle"* %ref.tmp15.reload.addr, i32 0, i32 0, !dbg !747
%coerce.dive18 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle.0", %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %coerce.dive17, i32 0, i32 0, !dbg !747
store i8* %call16, i8** %coerce.dive18, align 8, !dbg !747
%1 = bitcast %"class.std::experimental::coroutines_v1::coroutine_handle"* %ref.tmp15.reload.addr to %"class.std::experimental::coroutines_v1::coroutine_handle.0"*, !dbg !747
%2 = bitcast %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %agg.tmp14.reload.addr to i8*, !dbg !747
%3 = bitcast %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %1 to i8*, !dbg !747
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %2, i8* align 8 %3, i64 8, i1 false), !dbg !747
%coerce.dive19 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle.0", %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %agg.tmp14.reload.addr, i32 0, i32 0, !dbg !747
%4 = load i8*, i8** %coerce.dive19, align 8, !dbg !747
call void @_ZNKSt12experimental13coroutines_v114suspend_always13await_suspendENS0_16coroutine_handleIvEE(%"struct.std::experimental::coroutines_v1::suspend_always"* %ref.tmp12.reload.addr, i8* %4) #2, !dbg !747
br label %CoroSuspend49, !dbg !748
CoroSuspend49: ; preds = %AfterCoroSave48
br label %resume.1.landing, !dbg !748
resume.1: ; preds = %Switch
br label %resume.1.landing, !dbg !748
resume.1.landing: ; preds = %resume.1, %CoroSuspend49
%5 = phi i8 [ -1, %CoroSuspend49 ], [ 1, %resume.1 ]
br label %AfterCoroSuspend50, !dbg !748
AfterCoroSuspend50: ; preds = %resume.1.landing
switch i8 %5, label %coro.ret [
i8 0, label %await.ready
i8 1, label %await.cleanup
], !dbg !748
await.cleanup: ; preds = %AfterCoroSuspend50
br label %cleanup.from.await.cleanup, !dbg !748
cleanup.from.await.cleanup: ; preds = %await.cleanup
%.cleanup56 = phi i32 [ 2, %await.cleanup ]
br label %cleanup, !dbg !748
await.ready: ; preds = %AfterCoroSuspend50, %init.ready
call void @_ZNKSt12experimental13coroutines_v114suspend_always12await_resumeEv(%"struct.std::experimental::coroutines_v1::suspend_always"* %ref.tmp12.reload.addr) #2, !dbg !747
%6 = load i32, i32* %a.reload.addr, align 4, !dbg !749
%inc = add nsw i32 %6, 1, !dbg !749
store i32 %inc, i32* %a.reload.addr, align 4, !dbg !749
%arrayidx = getelementptr inbounds [10 x i32], [10 x i32]* %x.reload.addr, i64 0, i64 0, !dbg !750
store i32 1, i32* %arrayidx, align 16, !dbg !751
%7 = load i32, i32* %a.reload.addr, align 4, !dbg !752
%add = add nsw i32 %7, 2, !dbg !752
store i32 %add, i32* %a.reload.addr, align 4, !dbg !752
%arrayidx20 = getelementptr inbounds [10 x i32], [10 x i32]* %x.reload.addr, i64 0, i64 1, !dbg !753
store i32 2, i32* %arrayidx20, align 4, !dbg !754
%8 = load i32, i32* %a.reload.addr, align 4, !dbg !755
%add21 = add nsw i32 %8, 3, !dbg !755
store i32 %add21, i32* %a.reload.addr, align 4, !dbg !755
%arrayidx22 = getelementptr inbounds [10 x i32], [10 x i32]* %x.reload.addr, i64 0, i64 2, !dbg !756
store i32 3, i32* %arrayidx22, align 8, !dbg !757
call void @_ZN4coro12promise_type11return_voidEv(%"struct.coro::promise_type"* %__promise.reload.addr), !dbg !741
br label %invoke.cont24
invoke.cont24: ; preds = %await.ready
br label %coro.final, !dbg !741
coro.final: ; preds = %invoke.cont24
call void @_ZN4coro12promise_type13final_suspendEv(%"struct.coro::promise_type"* %__promise.reload.addr) #2, !dbg !741
%call31 = call zeroext i1 @_ZNKSt12experimental13coroutines_v113suspend_never11await_readyEv(%"struct.std::experimental::coroutines_v1::suspend_never"* %ref.tmp29.reload.addr) #2, !dbg !741
br i1 %call31, label %final.ready, label %CoroSave51, !dbg !741
CoroSave51: ; preds = %coro.final
%ResumeFn.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 0, !dbg !741
store void (%_Z3foov.Frame*)* null, void (%_Z3foov.Frame*)** %ResumeFn.addr, align 8, !dbg !741
br label %AfterCoroSave52, !dbg !741
AfterCoroSave52: ; preds = %CoroSave51
%call34 = call i8* @_ZNSt12experimental13coroutines_v116coroutine_handleIN4coro12promise_typeEE12from_addressEPv(i8* %vFrame) #2, !dbg !741
%coerce.dive35 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle", %"class.std::experimental::coroutines_v1::coroutine_handle"* %ref.tmp33.reload.addr, i32 0, i32 0, !dbg !741
%coerce.dive36 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle.0", %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %coerce.dive35, i32 0, i32 0, !dbg !741
store i8* %call34, i8** %coerce.dive36, align 8, !dbg !741
%9 = bitcast %"class.std::experimental::coroutines_v1::coroutine_handle"* %ref.tmp33.reload.addr to %"class.std::experimental::coroutines_v1::coroutine_handle.0"*, !dbg !741
%10 = bitcast %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %agg.tmp32.reload.addr to i8*, !dbg !741
%11 = bitcast %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %9 to i8*, !dbg !741
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %10, i8* align 8 %11, i64 8, i1 false), !dbg !741
%coerce.dive37 = getelementptr inbounds %"class.std::experimental::coroutines_v1::coroutine_handle.0", %"class.std::experimental::coroutines_v1::coroutine_handle.0"* %agg.tmp32.reload.addr, i32 0, i32 0, !dbg !741
%12 = load i8*, i8** %coerce.dive37, align 8, !dbg !741
call void @_ZNKSt12experimental13coroutines_v113suspend_never13await_suspendENS0_16coroutine_handleIvEE(%"struct.std::experimental::coroutines_v1::suspend_never"* %ref.tmp29.reload.addr, i8* %12) #2, !dbg !741
br label %CoroSuspend53, !dbg !741
CoroSuspend53: ; preds = %AfterCoroSave52
br label %resume.2.landing, !dbg !741
resume.2: ; preds = %resume.entry
br label %resume.2.landing, !dbg !741
resume.2.landing: ; preds = %resume.2, %CoroSuspend53
%13 = phi i8 [ -1, %CoroSuspend53 ], [ 1, %resume.2 ]
br label %AfterCoroSuspend54, !dbg !741
AfterCoroSuspend54: ; preds = %resume.2.landing
switch i8 %13, label %coro.ret [
i8 0, label %final.ready
i8 1, label %final.cleanup
], !dbg !741
final.cleanup: ; preds = %AfterCoroSuspend54
br label %cleanup.from.final.cleanup, !dbg !741
cleanup.from.final.cleanup: ; preds = %final.cleanup
%.cleanup55 = phi i32 [ 2, %final.cleanup ]
br label %cleanup, !dbg !741
final.ready: ; preds = %AfterCoroSuspend54, %coro.final
call void @_ZNKSt12experimental13coroutines_v113suspend_never12await_resumeEv(%"struct.std::experimental::coroutines_v1::suspend_never"* %ref.tmp29.reload.addr) #2, !dbg !741
br label %cleanup.from.final.ready, !dbg !741
cleanup.from.final.ready: ; preds = %final.ready
%.cleanup = phi i32 [ 0, %final.ready ]
br label %cleanup, !dbg !741
cleanup: ; preds = %cleanup.from.final.ready, %cleanup.from.final.cleanup, %cleanup.from.await.cleanup, %cleanup.from.init.cleanup
%cleanup.dest.slot.0 = phi i32 [ %.cleanup, %cleanup.from.final.ready ], [ %.cleanup55, %cleanup.from.final.cleanup ], [ %.cleanup56, %cleanup.from.await.cleanup ], [ %.cleanup57, %cleanup.from.init.cleanup ]
%14 = icmp ne i8* null, null, !dbg !741
br i1 %14, label %coro.free, label %after.coro.free, !dbg !741
coro.free: ; preds = %cleanup
call void @_ZdlPv(i8* null) #2, !dbg !741
br label %after.coro.free, !dbg !741
after.coro.free: ; preds = %coro.free, %cleanup
switch i32 %cleanup.dest.slot.0, label %unreachable [
i32 0, label %cleanup.cont38
i32 2, label %coro.ret
]
cleanup.cont38: ; preds = %after.coro.free
br label %coro.ret, !dbg !741
coro.ret: ; preds = %cleanup.cont38, %after.coro.free, %AfterCoroSuspend54, %AfterCoroSuspend50, %AfterCoroSuspend
br label %CoroEnd, !dbg !741
CoroEnd: ; preds = %coro.ret
ret void, !dbg !741
unreachable: ; preds = %after.coro.free
unreachable
resume.entry: ; preds = %entry.cleanup
%index.addr = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 3
%index = load i2, i2* %index.addr, align 1
%ResumeFn.addr1 = getelementptr inbounds %_Z3foov.Frame, %_Z3foov.Frame* %FramePtr, i32 0, i32 0
%15 = load void (%_Z3foov.Frame*)*, void (%_Z3foov.Frame*)** %ResumeFn.addr1, align 8
%16 = icmp eq void (%_Z3foov.Frame*)* %15, null
br i1 %16, label %resume.2, label %Switch
Switch: ; preds = %resume.entry
switch i2 %index, label %unreachable58 [
i2 0, label %resume.0
i2 1, label %resume.1
]
unreachable58: ; preds = %Switch
unreachable, !dbg !741
}
attributes #0 = { noinline optnone uwtable "disable-tail-calls"="false" "frame-pointer"="all" "less-precise-fpmad"="false" "min-legal-vector-width"="0" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #1 = { argmemonly nounwind readonly }
attributes #2 = { nounwind }
attributes #3 = { nobuiltin allocsize(0) "disable-tail-calls"="false" "frame-pointer"="all" "less-precise-fpmad"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #4 = { nounwind readnone }
attributes #5 = { nofree nosync nounwind readnone speculatable willreturn }
attributes #6 = { noinline nounwind optnone uwtable "disable-tail-calls"="false" "frame-pointer"="all" "less-precise-fpmad"="false" "min-legal-vector-width"="0" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #7 = { argmemonly nofree nosync nounwind willreturn }
attributes #8 = { argmemonly nofree nosync nounwind willreturn writeonly }
attributes #9 = { noinline noreturn nounwind }
attributes #10 = { nobuiltin nounwind "disable-tail-calls"="false" "frame-pointer"="all" "less-precise-fpmad"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #11 = { noinline norecurse optnone uwtable "disable-tail-calls"="false" "frame-pointer"="all" "less-precise-fpmad"="false" "min-legal-vector-width"="0" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #12 = { alwaysinline }
attributes #13 = { allocsize(0) }
attributes #14 = { noreturn nounwind }
!llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!526, !527, !528}
!llvm.ident = !{!529}
!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !1, producer: "clang version 12.0.0 (git@github.com:llvm/llvm-project 0a702b967927d888bd222806252783359fc74d57)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, retainedTypes: !3, imports: !107, splitDebugInlining: false, nameTableKind: None)
!1 = !DIFile(filename: "test.cpp", directory: "/tmp")
!2 = !{}
!3 = !{!4}
!4 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "coro", file: !1, line: 5, size: 64, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !5, identifier: "_ZTS4coro")
!5 = !{!6, !103}
!6 = !DIDerivedType(tag: DW_TAG_member, name: "handle", scope: !4, file: !1, line: 17, baseType: !7, size: 64)
!7 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "coroutine_handle<coro::promise_type>", scope: !9, file: !8, line: 196, size: 64, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !12, templateParams: !101, identifier: "_ZTSNSt12experimental13coroutines_v116coroutine_handleIN4coro12promise_typeEEE")
!8 = !DIFile(filename: "/fast/fs/llvm3/build/bin/../include/c++/v1/experimental/coroutine", directory: "")
!9 = !DINamespace(name: "coroutines_v1", scope: !10, exportSymbols: true)
!10 = !DINamespace(name: "experimental", scope: !11)
!11 = !DINamespace(name: "std", scope: null)
!12 = !{!13, !54, !59, !92, !95, !98}
!13 = !DIDerivedType(tag: DW_TAG_inheritance, scope: !7, baseType: !14, flags: DIFlagPublic, extraData: i32 0)
!14 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "coroutine_handle<void>", scope: !9, file: !8, line: 92, size: 64, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !15, templateParams: !52, identifier: "_ZTSNSt12experimental13coroutines_v116coroutine_handleIvEE")
!15 = !{!16, !18, !22, !28, !32, !37, !41, !42, !43, !44, !45, !48, !51}
!16 = !DIDerivedType(tag: DW_TAG_member, name: "__handle_", scope: !14, file: !8, line: 166, baseType: !17, size: 64)
!17 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: null, size: 64)
!18 = !DISubprogram(name: "coroutine_handle", scope: !14, file: !8, line: 95, type: !19, scopeLine: 95, flags: DIFlagPublic | DIFlagPrototyped, spFlags: 0)
!19 = !DISubroutineType(types: !20)
!20 = !{null, !21}
!21 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !14, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
!22 = !DISubprogram(name: "coroutine_handle", scope: !14, file: !8, line: 98, type: !23, scopeLine: 98, flags: DIFlagPublic | DIFlagPrototyped, spFlags: 0)
!23 = !DISubroutineType(types: !24)
!24 = !{null, !21, !25}
!25 = !DIDerivedType(tag: DW_TAG_typedef, name: "nullptr_t", scope: !11, file: !26, line: 56, baseType: !27)
!26 = !DIFile(filename: "/fast/fs/llvm3/build/bin/../include/c++/v1/__nullptr", directory: "")
!27 = !DIBasicType(tag: DW_TAG_unspecified_type, name: "decltype(nullptr)")
!28 = !DISubprogram(name: "operator=", linkageName: "_ZNSt12experimental13coroutines_v116coroutine_handleIvEaSEDn", scope: !14, file: !8, line: 101, type: !29, scopeLine: 101, flags: DIFlagPublic | DIFlagPrototyped, spFlags: 0)
!29 = !DISubroutineType(types: !30)
!30 = !{!31, !21, !25}
!31 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !14, size: 64)
!32 = !DISubprogram(name: "address", linkageName: "_ZNKSt12experimental13coroutines_v116coroutine_handleIvE7addressEv", scope: !14, file: !8, line: 107, type: !33, scopeLine: 107, flags: DIFlagPublic | DIFlagPrototyped, spFlags: 0)
!33 = !DISubroutineType(types: !34)
!34 = !{!17, !35}
!35 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !36, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
!36 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !14)
!37 = !DISubprogram(name: "operator bool", linkageName: "_ZNKSt12experimental13coroutines_v116coroutine_handleIvEcvbEv", scope: !14, file: !8, line: 110, type: !38, scopeLine: 110, flags: DIFlagPublic | DIFlagExplicit | DIFlagPrototyped, spFlags: 0)
!38 = !DISubroutineType(types: !39)
!39 = !{!40, !35}
!40 = !DIBasicType(name: "bool", size: 8, encoding: DW_ATE_boolean)
!41 = !DISubprogram(name: "operator()", linkageName: "_ZNSt12experimental13coroutines_v116coroutine_handleIvEclEv", scope: !14, file: !8, line: 113, type: !19, scopeLine: 113, flags: DIFlagPublic | DIFlagPrototyped, spFlags: 0)
!42 = !DISubprogram(name: "resume", linkageName: "_ZNSt12experimental13coroutines_v116coroutine_handleIvE6resumeEv", scope: !14, file: !8, line: 116, type: !19, scopeLine: 116, flags: DIFlagPublic | DIFlagPrototyped, spFlags: 0)
!43 = !DISubprogram(name: "destroy", linkageName: "_ZNSt12experimental13coroutines_v116coroutine_handleIvE7destroyEv", scope: !14, file: !8, line: 125, type: !19, scopeLine: 125, flags: DIFlagPublic | DIFlagPrototyped, spFlags: 0)
!44 = !DISubprogram(name: "done", linkageName: "_ZNKSt12experimental13coroutines_v116coroutine_handleIvE4doneEv", scope: !14, file: !8, line: 132, type: !38, scopeLine: 132, flags: DIFlagPublic | DIFlagPrototyped, spFlags: 0)
!45 = !DISubprogram(name: "from_address", linkageName: "_ZNSt12experimental13coroutines_v116coroutine_handleIvE12from_addressEPv", scope: !14, file: !8, line: 140, type: !46, scopeLine: 140, flags: DIFlagPublic | DIFlagPrototyped | DIFlagStaticMember, spFlags: 0)
!46 = !DISubroutineType(types: !47)
!47 = !{!14, !17}
!48 = !DISubprogram(name: "from_address", linkageName: "_ZNSt12experimental13coroutines_v116coroutine_handleIvE12from_addressEDn", scope: !14, file: !8, line: 148, type: !49, scopeLine: 148, flags: DIFlagPublic | DIFlagPrototyped | DIFlagStaticMember, spFlags: 0)
!49 = !DISubroutineType(types: !50)
!50 = !{!14, !25}
!51 = !DISubprogram(name: "__is_suspended", linkageName: "_ZNKSt12experimental13coroutines_v116coroutine_handleIvE14__is_suspendedEv", scope: !14, file: !8, line: 160, type: !38, scopeLine: 160, flags: DIFlagPrototyped, spFlags: 0)
!52 = !{!53}
!53 = !DITemplateTypeParameter(name: "_Promise", type: null, defaulted: true)
!54 = !DISubprogram(name: "operator=", linkageName: "_ZNSt12experimental13coroutines_v116coroutine_handleIN4coro12promise_typeEEaSEDn", scope: !7, file: !8, line: 207, type: !55, scopeLine: 207, flags: DIFlagPublic | DIFlagPrototyped, spFlags: 0)
!55 = !DISubroutineType(types: !56)
!56 = !{!57, !58, !25}
!57 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !7, size: 64)
!58 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !7, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
!59 = !DISubprogram(name: "promise", linkageName: "_ZNKSt12experimental13coroutines_v116coroutine_handleIN4coro12promise_typeEE7promiseEv", scope: !7, file: !8, line: 213, type: !60, scopeLine: 213, flags: DIFlagPublic | DIFlagPrototyped, spFlags: 0)
!60 = !DISubroutineType(types: !61)
!61 = !{!62, !90}
!62 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !63, size: 64)
!63 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "promise_type", scope: !4, file: !1, line: 6, size: 8, flags: DIFlagTypePassByValue, elements: !64, identifier: "_ZTSN4coro12promise_typeE")
!64 = !{!65, !69, !85, !86, !89}
!65 = !DISubprogram(name: "get_return_object", linkageName: "_ZN4coro12promise_type17get_return_objectEv", scope: !63, file: !1, line: 7, type: !66, scopeLine: 7, flags: DIFlagPrototyped, spFlags: 0)
!66 = !DISubroutineType(types: !67)
!67 = !{!4, !68}
!68 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !63, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
!69 = !DISubprogram(name: "initial_suspend", linkageName: "_ZN4coro12promise_type15initial_suspendEv", scope: !63, file: !1, line: 11, type: !70, scopeLine: 11, flags: DIFlagPrototyped, spFlags: 0)
!70 = !DISubroutineType(types: !71)
!71 = !{!72, !68}
!72 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "suspend_never", scope: !9, file: !8, line: 300, size: 8, flags: DIFlagTypePassByValue, elements: !73, identifier: "_ZTSNSt12experimental13coroutines_v113suspend_neverE")
!73 = !{!74, !79, !82}
!74 = !DISubprogram(name: "await_ready", linkageName: "_ZNKSt12experimental13coroutines_v113suspend_never11await_readyEv", scope: !72, file: !8, line: 302, type: !75, scopeLine: 302, flags: DIFlagPrototyped, spFlags: 0)
!75 = !DISubroutineType(types: !76)
!76 = !{!40, !77}
!77 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !78, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
!78 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !72)
!79 = !DISubprogram(name: "await_suspend", linkageName: "_ZNKSt12experimental13coroutines_v113suspend_never13await_suspendENS0_16coroutine_handleIvEE", scope: !72, file: !8, line: 304, type: !80, scopeLine: 304, flags: DIFlagPrototyped, spFlags: 0)
!80 = !DISubroutineType(types: !81)
!81 = !{null, !77, !14}
!82 = !DISubprogram(name: "await_resume", linkageName: "_ZNKSt12experimental13coroutines_v113suspend_never12await_resumeEv", scope: !72, file: !8, line: 306, type: !83, scopeLine: 306, flags: DIFlagPrototyped, spFlags: 0)
!83 = !DISubroutineType(types: !84)
!84 = !{null, !77}
!85 = !DISubprogram(name: "final_suspend", linkageName: "_ZN4coro12promise_type13final_suspendEv", scope: !63, file: !1, line: 12, type: !70, scopeLine: 12, flags: DIFlagPrototyped, spFlags: 0)
!86 = !DISubprogram(name: "return_void", linkageName: "_ZN4coro12promise_type11return_voidEv", scope: !63, file: !1, line: 13, type: !87, scopeLine: 13, flags: DIFlagPrototyped, spFlags: 0)
!87 = !DISubroutineType(types: !88)
!88 = !{null, !68}
!89 = !DISubprogram(name: "unhandled_exception", linkageName: "_ZN4coro12promise_type19unhandled_exceptionEv", scope: !63, file: !1, line: 14, type: !87, scopeLine: 14, flags: DIFlagPrototyped, spFlags: 0)
!90 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !91, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
!91 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !7)
!92 = !DISubprogram(name: "from_address", linkageName: "_ZNSt12experimental13coroutines_v116coroutine_handleIN4coro12promise_typeEE12from_addressEPv", scope: !7, file: !8, line: 220, type: !93, scopeLine: 220, flags: DIFlagPublic | DIFlagPrototyped | DIFlagStaticMember, spFlags: 0)
!93 = !DISubroutineType(types: !94)
!94 = !{!7, !17}
!95 = !DISubprogram(name: "from_address", linkageName: "_ZNSt12experimental13coroutines_v116coroutine_handleIN4coro12promise_typeEE12from_addressEDn", scope: !7, file: !8, line: 231, type: !96, scopeLine: 231, flags: DIFlagPublic | DIFlagPrototyped | DIFlagStaticMember, spFlags: 0)
!96 = !DISubroutineType(types: !97)
!97 = !{!7, !25}
!98 = !DISubprogram(name: "from_promise", linkageName: "_ZNSt12experimental13coroutines_v116coroutine_handleIN4coro12promise_typeEE12from_promiseERS3_", scope: !7, file: !8, line: 250, type: !99, scopeLine: 250, flags: DIFlagPublic | DIFlagPrototyped | DIFlagStaticMember, spFlags: 0)
!99 = !DISubroutineType(types: !100)
!100 = !{!7, !62}
!101 = !{!102}
!102 = !DITemplateTypeParameter(name: "_Promise", type: !63)
!103 = !DISubprogram(name: "coro", scope: !4, file: !1, line: 18, type: !104, scopeLine: 18, flags: DIFlagPrototyped, spFlags: 0)
!104 = !DISubroutineType(types: !105)
!105 = !{null, !106, !7}
!106 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !4, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
!107 = !{!108, !114, !117, !121, !123, !127, !133, !140, !148, !153, !157, !161, !169, !174, !179, !183, !187, !191, !196, !200, !205, !209, !213, !217, !221, !225, !230, !234, !236, !240, !242, !252, !256, !261, !265, !269, !273, !277, !279, !283, !290, !294, !298, !306, !308, !310, !317, !321, !324, !327, !332, !336, !339, !342, !345, !347, !349, !351, !353, !355, !357, !359, !361, !363, !365, !367, !369, !371, !373, !375, !377, !379, !382, !385, !387, !394, !398, !402, !406, !408, !410, !414, !418, !422, !424, !428, !433, !437, !441, !445, !447, !449, !451, !453, !455, !459, !463, !465, !470, !471, !475, !478, !483, !487, !492, !497, !503, !509, !513, !515, !520, !525}
!108 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !110, file: !113, line: 49)
!109 = !DINamespace(name: "__1", scope: !11, exportSymbols: true)
!110 = !DIDerivedType(tag: DW_TAG_typedef, name: "ptrdiff_t", file: !111, line: 35, baseType: !112)
!111 = !DIFile(filename: "/fast/fs/llvm3/build/lib/clang/12.0.0/include/stddef.h", directory: "")
!112 = !DIBasicType(name: "long int", size: 64, encoding: DW_ATE_signed)
!113 = !DIFile(filename: "/fast/fs/llvm3/build/bin/../include/c++/v1/cstddef", directory: "")
!114 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !115, file: !113, line: 50)
!115 = !DIDerivedType(tag: DW_TAG_typedef, name: "size_t", file: !111, line: 46, baseType: !116)
!116 = !DIBasicType(name: "long unsigned int", size: 64, encoding: DW_ATE_unsigned)
!117 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !118, file: !113, line: 53)
!118 = !DIDerivedType(tag: DW_TAG_typedef, name: "max_align_t", file: !119, line: 24, baseType: !120)
!119 = !DIFile(filename: "/fast/fs/llvm3/build/lib/clang/12.0.0/include/__stddef_max_align_t.h", directory: "")
!120 = !DICompositeType(tag: DW_TAG_structure_type, file: !119, line: 19, size: 256, flags: DIFlagFwdDecl, identifier: "_ZTS11max_align_t")
!121 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !115, file: !122, line: 99)
!122 = !DIFile(filename: "/fast/fs/llvm3/build/bin/../include/c++/v1/cstdlib", directory: "")
!123 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !124, file: !122, line: 100)
!124 = !DIDerivedType(tag: DW_TAG_typedef, name: "div_t", file: !125, line: 62, baseType: !126)
!125 = !DIFile(filename: "/usr/include/stdlib.h", directory: "")
!126 = !DICompositeType(tag: DW_TAG_structure_type, file: !125, line: 58, size: 64, flags: DIFlagFwdDecl, identifier: "_ZTS5div_t")
!127 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !128, file: !122, line: 101)
!128 = !DIDerivedType(tag: DW_TAG_typedef, name: "ldiv_t", file: !125, line: 70, baseType: !129)
!129 = distinct !DICompositeType(tag: DW_TAG_structure_type, file: !125, line: 66, size: 128, flags: DIFlagTypePassByValue, elements: !130, identifier: "_ZTS6ldiv_t")
!130 = !{!131, !132}
!131 = !DIDerivedType(tag: DW_TAG_member, name: "quot", scope: !129, file: !125, line: 68, baseType: !112, size: 64)
!132 = !DIDerivedType(tag: DW_TAG_member, name: "rem", scope: !129, file: !125, line: 69, baseType: !112, size: 64, offset: 64)
!133 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !134, file: !122, line: 103)
!134 = !DIDerivedType(tag: DW_TAG_typedef, name: "lldiv_t", file: !125, line: 80, baseType: !135)
!135 = distinct !DICompositeType(tag: DW_TAG_structure_type, file: !125, line: 76, size: 128, flags: DIFlagTypePassByValue, elements: !136, identifier: "_ZTS7lldiv_t")
!136 = !{!137, !139}
!137 = !DIDerivedType(tag: DW_TAG_member, name: "quot", scope: !135, file: !125, line: 78, baseType: !138, size: 64)
!138 = !DIBasicType(name: "long long int", size: 64, encoding: DW_ATE_signed)
!139 = !DIDerivedType(tag: DW_TAG_member, name: "rem", scope: !135, file: !125, line: 79, baseType: !138, size: 64, offset: 64)
!140 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !141, file: !122, line: 105)
!141 = !DISubprogram(name: "atof", scope: !125, file: !125, line: 101, type: !142, flags: DIFlagPrototyped, spFlags: 0)
!142 = !DISubroutineType(types: !143)
!143 = !{!144, !145}
!144 = !DIBasicType(name: "double", size: 64, encoding: DW_ATE_float)
!145 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !146, size: 64)
!146 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !147)
!147 = !DIBasicType(name: "char", size: 8, encoding: DW_ATE_signed_char)
!148 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !149, file: !122, line: 106)
!149 = !DISubprogram(name: "atoi", scope: !125, file: !125, line: 104, type: !150, flags: DIFlagPrototyped, spFlags: 0)
!150 = !DISubroutineType(types: !151)
!151 = !{!152, !145}
!152 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
!153 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !154, file: !122, line: 107)
!154 = !DISubprogram(name: "atol", scope: !125, file: !125, line: 107, type: !155, flags: DIFlagPrototyped, spFlags: 0)
!155 = !DISubroutineType(types: !156)
!156 = !{!112, !145}
!157 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !158, file: !122, line: 109)
!158 = !DISubprogram(name: "atoll", scope: !125, file: !125, line: 112, type: !159, flags: DIFlagPrototyped, spFlags: 0)
!159 = !DISubroutineType(types: !160)
!160 = !{!138, !145}
!161 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !162, file: !122, line: 111)
!162 = !DISubprogram(name: "strtod", scope: !125, file: !125, line: 117, type: !163, flags: DIFlagPrototyped, spFlags: 0)
!163 = !DISubroutineType(types: !164)
!164 = !{!144, !165, !166}
!165 = !DIDerivedType(tag: DW_TAG_restrict_type, baseType: !145)
!166 = !DIDerivedType(tag: DW_TAG_restrict_type, baseType: !167)
!167 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !168, size: 64)
!168 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !147, size: 64)
!169 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !170, file: !122, line: 112)
!170 = !DISubprogram(name: "strtof", scope: !125, file: !125, line: 123, type: !171, flags: DIFlagPrototyped, spFlags: 0)
!171 = !DISubroutineType(types: !172)
!172 = !{!173, !165, !166}
!173 = !DIBasicType(name: "float", size: 32, encoding: DW_ATE_float)
!174 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !175, file: !122, line: 113)
!175 = !DISubprogram(name: "strtold", scope: !125, file: !125, line: 126, type: !176, flags: DIFlagPrototyped, spFlags: 0)
!176 = !DISubroutineType(types: !177)
!177 = !{!178, !165, !166}
!178 = !DIBasicType(name: "long double", size: 128, encoding: DW_ATE_float)
!179 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !180, file: !122, line: 114)
!180 = !DISubprogram(name: "strtol", scope: !125, file: !125, line: 176, type: !181, flags: DIFlagPrototyped, spFlags: 0)
!181 = !DISubroutineType(types: !182)
!182 = !{!112, !165, !166, !152}
!183 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !184, file: !122, line: 116)
!184 = !DISubprogram(name: "strtoll", scope: !125, file: !125, line: 200, type: !185, flags: DIFlagPrototyped, spFlags: 0)
!185 = !DISubroutineType(types: !186)
!186 = !{!138, !165, !166, !152}
!187 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !188, file: !122, line: 118)
!188 = !DISubprogram(name: "strtoul", scope: !125, file: !125, line: 180, type: !189, flags: DIFlagPrototyped, spFlags: 0)
!189 = !DISubroutineType(types: !190)
!190 = !{!116, !165, !166, !152}
!191 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !192, file: !122, line: 120)
!192 = !DISubprogram(name: "strtoull", scope: !125, file: !125, line: 205, type: !193, flags: DIFlagPrototyped, spFlags: 0)
!193 = !DISubroutineType(types: !194)
!194 = !{!195, !165, !166, !152}
!195 = !DIBasicType(name: "long long unsigned int", size: 64, encoding: DW_ATE_unsigned)
!196 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !197, file: !122, line: 122)
!197 = !DISubprogram(name: "rand", scope: !125, file: !125, line: 453, type: !198, flags: DIFlagPrototyped, spFlags: 0)
!198 = !DISubroutineType(types: !199)
!199 = !{!152}
!200 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !201, file: !122, line: 123)
!201 = !DISubprogram(name: "srand", scope: !125, file: !125, line: 455, type: !202, flags: DIFlagPrototyped, spFlags: 0)
!202 = !DISubroutineType(types: !203)
!203 = !{null, !204}
!204 = !DIBasicType(name: "unsigned int", size: 32, encoding: DW_ATE_unsigned)
!205 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !206, file: !122, line: 124)
!206 = !DISubprogram(name: "calloc", scope: !125, file: !125, line: 541, type: !207, flags: DIFlagPrototyped, spFlags: 0)
!207 = !DISubroutineType(types: !208)
!208 = !{!17, !115, !115}
!209 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !210, file: !122, line: 125)
!210 = !DISubprogram(name: "free", scope: !125, file: !125, line: 563, type: !211, flags: DIFlagPrototyped, spFlags: 0)
!211 = !DISubroutineType(types: !212)
!212 = !{null, !17}
!213 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !214, file: !122, line: 126)
!214 = !DISubprogram(name: "malloc", scope: !125, file: !125, line: 539, type: !215, flags: DIFlagPrototyped, spFlags: 0)
!215 = !DISubroutineType(types: !216)
!216 = !{!17, !115}
!217 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !218, file: !122, line: 127)
!218 = !DISubprogram(name: "realloc", scope: !125, file: !125, line: 549, type: !219, flags: DIFlagPrototyped, spFlags: 0)
!219 = !DISubroutineType(types: !220)
!220 = !{!17, !17, !115}
!221 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !222, file: !122, line: 128)
!222 = !DISubprogram(name: "abort", scope: !125, file: !125, line: 588, type: !223, flags: DIFlagPrototyped | DIFlagNoReturn, spFlags: 0)
!223 = !DISubroutineType(types: !224)
!224 = !{null}
!225 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !226, file: !122, line: 129)
!226 = !DISubprogram(name: "atexit", scope: !125, file: !125, line: 592, type: !227, flags: DIFlagPrototyped, spFlags: 0)
!227 = !DISubroutineType(types: !228)
!228 = !{!152, !229}
!229 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !223, size: 64)
!230 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !231, file: !122, line: 130)
!231 = !DISubprogram(name: "exit", scope: !125, file: !125, line: 614, type: !232, flags: DIFlagPrototyped | DIFlagNoReturn, spFlags: 0)
!232 = !DISubroutineType(types: !233)
!233 = !{null, !152}
!234 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !235, file: !122, line: 131)
!235 = !DISubprogram(name: "_Exit", scope: !125, file: !125, line: 626, type: !232, flags: DIFlagPrototyped | DIFlagNoReturn, spFlags: 0)
!236 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !237, file: !122, line: 133)
!237 = !DISubprogram(name: "getenv", scope: !125, file: !125, line: 631, type: !238, flags: DIFlagPrototyped, spFlags: 0)
!238 = !DISubroutineType(types: !239)
!239 = !{!168, !145}
!240 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !241, file: !122, line: 134)
!241 = !DISubprogram(name: "system", scope: !125, file: !125, line: 781, type: !150, flags: DIFlagPrototyped, spFlags: 0)
!242 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !243, file: !122, line: 136)
!243 = !DISubprogram(name: "bsearch", scope: !125, file: !125, line: 817, type: !244, flags: DIFlagPrototyped, spFlags: 0)
!244 = !DISubroutineType(types: !245)
!245 = !{!17, !246, !246, !115, !115, !248}
!246 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !247, size: 64)
!247 = !DIDerivedType(tag: DW_TAG_const_type, baseType: null)
!248 = !DIDerivedType(tag: DW_TAG_typedef, name: "__compar_fn_t", file: !125, line: 805, baseType: !249)
!249 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !250, size: 64)
!250 = !DISubroutineType(types: !251)
!251 = !{!152, !246, !246}
!252 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !253, file: !122, line: 137)
!253 = !DISubprogram(name: "qsort", scope: !125, file: !125, line: 827, type: !254, flags: DIFlagPrototyped, spFlags: 0)
!254 = !DISubroutineType(types: !255)
!255 = !{null, !17, !115, !115, !248}
!256 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !257, file: !122, line: 138)
!257 = !DISubprogram(name: "abs", linkageName: "_Z3abse", scope: !258, file: !258, line: 127, type: !259, flags: DIFlagPrototyped, spFlags: 0)
!258 = !DIFile(filename: "/fast/fs/llvm3/build/bin/../include/c++/v1/stdlib.h", directory: "")
!259 = !DISubroutineType(types: !260)
!260 = !{!178, !178}
!261 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !262, file: !122, line: 139)
!262 = !DISubprogram(name: "labs", scope: !125, file: !125, line: 838, type: !263, flags: DIFlagPrototyped, spFlags: 0)
!263 = !DISubroutineType(types: !264)
!264 = !{!112, !112}
!265 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !266, file: !122, line: 141)
!266 = !DISubprogram(name: "llabs", scope: !125, file: !125, line: 841, type: !267, flags: DIFlagPrototyped, spFlags: 0)
!267 = !DISubroutineType(types: !268)
!268 = !{!138, !138}
!269 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !270, file: !122, line: 143)
!270 = !DISubprogram(name: "div", linkageName: "_Z3divxx", scope: !258, file: !258, line: 146, type: !271, flags: DIFlagPrototyped, spFlags: 0)
!271 = !DISubroutineType(types: !272)
!272 = !{!134, !138, !138}
!273 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !274, file: !122, line: 144)
!274 = !DISubprogram(name: "ldiv", scope: !125, file: !125, line: 851, type: !275, flags: DIFlagPrototyped, spFlags: 0)
!275 = !DISubroutineType(types: !276)
!276 = !{!128, !112, !112}
!277 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !278, file: !122, line: 146)
!278 = !DISubprogram(name: "lldiv", scope: !125, file: !125, line: 855, type: !271, flags: DIFlagPrototyped, spFlags: 0)
!279 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !280, file: !122, line: 148)
!280 = !DISubprogram(name: "mblen", scope: !125, file: !125, line: 919, type: !281, flags: DIFlagPrototyped, spFlags: 0)
!281 = !DISubroutineType(types: !282)
!282 = !{!152, !145, !115}
!283 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !284, file: !122, line: 149)
!284 = !DISubprogram(name: "mbtowc", scope: !125, file: !125, line: 922, type: !285, flags: DIFlagPrototyped, spFlags: 0)
!285 = !DISubroutineType(types: !286)
!286 = !{!152, !287, !165, !115}
!287 = !DIDerivedType(tag: DW_TAG_restrict_type, baseType: !288)
!288 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !289, size: 64)
!289 = !DIBasicType(name: "wchar_t", size: 32, encoding: DW_ATE_signed)
!290 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !291, file: !122, line: 150)
!291 = !DISubprogram(name: "wctomb", scope: !125, file: !125, line: 926, type: !292, flags: DIFlagPrototyped, spFlags: 0)
!292 = !DISubroutineType(types: !293)
!293 = !{!152, !168, !289}
!294 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !295, file: !122, line: 151)
!295 = !DISubprogram(name: "mbstowcs", scope: !125, file: !125, line: 930, type: !296, flags: DIFlagPrototyped, spFlags: 0)
!296 = !DISubroutineType(types: !297)
!297 = !{!115, !287, !165, !115}
!298 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !299, file: !122, line: 152)
!299 = !DISubprogram(name: "wcstombs", scope: !125, file: !125, line: 933, type: !300, flags: DIFlagPrototyped, spFlags: 0)
!300 = !DISubroutineType(types: !301)
!301 = !{!115, !302, !303, !115}
!302 = !DIDerivedType(tag: DW_TAG_restrict_type, baseType: !168)
!303 = !DIDerivedType(tag: DW_TAG_restrict_type, baseType: !304)
!304 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !305, size: 64)
!305 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !289)
!306 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !307, file: !122, line: 154)
!307 = !DISubprogram(name: "at_quick_exit", scope: !125, file: !125, line: 597, type: !227, flags: DIFlagPrototyped, spFlags: 0)
!308 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !309, file: !122, line: 155)
!309 = !DISubprogram(name: "quick_exit", scope: !125, file: !125, line: 620, type: !232, flags: DIFlagPrototyped | DIFlagNoReturn, spFlags: 0)
!310 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !311, file: !316, line: 152)
!311 = !DIDerivedType(tag: DW_TAG_typedef, name: "int8_t", file: !312, line: 24, baseType: !313)
!312 = !DIFile(filename: "/usr/include/x86_64-linux-gnu/bits/stdint-intn.h", directory: "")
!313 = !DIDerivedType(tag: DW_TAG_typedef, name: "__int8_t", file: !314, line: 36, baseType: !315)
!314 = !DIFile(filename: "/usr/include/x86_64-linux-gnu/bits/types.h", directory: "")
!315 = !DIBasicType(name: "signed char", size: 8, encoding: DW_ATE_signed_char)
!316 = !DIFile(filename: "/fast/fs/llvm3/build/bin/../include/c++/v1/cstdint", directory: "")
!317 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !318, file: !316, line: 153)
!318 = !DIDerivedType(tag: DW_TAG_typedef, name: "int16_t", file: !312, line: 25, baseType: !319)
!319 = !DIDerivedType(tag: DW_TAG_typedef, name: "__int16_t", file: !314, line: 38, baseType: !320)
!320 = !DIBasicType(name: "short", size: 16, encoding: DW_ATE_signed)
!321 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !322, file: !316, line: 154)
!322 = !DIDerivedType(tag: DW_TAG_typedef, name: "int32_t", file: !312, line: 26, baseType: !323)
!323 = !DIDerivedType(tag: DW_TAG_typedef, name: "__int32_t", file: !314, line: 40, baseType: !152)
!324 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !325, file: !316, line: 155)
!325 = !DIDerivedType(tag: DW_TAG_typedef, name: "int64_t", file: !312, line: 27, baseType: !326)
!326 = !DIDerivedType(tag: DW_TAG_typedef, name: "__int64_t", file: !314, line: 43, baseType: !112)
!327 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !328, file: !316, line: 157)
!328 = !DIDerivedType(tag: DW_TAG_typedef, name: "uint8_t", file: !329, line: 24, baseType: !330)
!329 = !DIFile(filename: "/usr/include/x86_64-linux-gnu/bits/stdint-uintn.h", directory: "")
!330 = !DIDerivedType(tag: DW_TAG_typedef, name: "__uint8_t", file: !314, line: 37, baseType: !331)
!331 = !DIBasicType(name: "unsigned char", size: 8, encoding: DW_ATE_unsigned_char)
!332 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !333, file: !316, line: 158)
!333 = !DIDerivedType(tag: DW_TAG_typedef, name: "uint16_t", file: !329, line: 25, baseType: !334)
!334 = !DIDerivedType(tag: DW_TAG_typedef, name: "__uint16_t", file: !314, line: 39, baseType: !335)
!335 = !DIBasicType(name: "unsigned short", size: 16, encoding: DW_ATE_unsigned)
!336 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !337, file: !316, line: 159)
!337 = !DIDerivedType(tag: DW_TAG_typedef, name: "uint32_t", file: !329, line: 26, baseType: !338)
!338 = !DIDerivedType(tag: DW_TAG_typedef, name: "__uint32_t", file: !314, line: 41, baseType: !204)
!339 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !340, file: !316, line: 160)
!340 = !DIDerivedType(tag: DW_TAG_typedef, name: "uint64_t", file: !329, line: 27, baseType: !341)
!341 = !DIDerivedType(tag: DW_TAG_typedef, name: "__uint64_t", file: !314, line: 44, baseType: !116)
!342 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !343, file: !316, line: 162)
!343 = !DIDerivedType(tag: DW_TAG_typedef, name: "int_least8_t", file: !344, line: 43, baseType: !315)
!344 = !DIFile(filename: "/usr/include/stdint.h", directory: "")
!345 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !346, file: !316, line: 163)
!346 = !DIDerivedType(tag: DW_TAG_typedef, name: "int_least16_t", file: !344, line: 44, baseType: !320)
!347 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !348, file: !316, line: 164)
!348 = !DIDerivedType(tag: DW_TAG_typedef, name: "int_least32_t", file: !344, line: 45, baseType: !152)
!349 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !350, file: !316, line: 165)
!350 = !DIDerivedType(tag: DW_TAG_typedef, name: "int_least64_t", file: !344, line: 47, baseType: !112)
!351 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !352, file: !316, line: 167)
!352 = !DIDerivedType(tag: DW_TAG_typedef, name: "uint_least8_t", file: !344, line: 54, baseType: !331)
!353 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !354, file: !316, line: 168)
!354 = !DIDerivedType(tag: DW_TAG_typedef, name: "uint_least16_t", file: !344, line: 55, baseType: !335)
!355 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !356, file: !316, line: 169)
!356 = !DIDerivedType(tag: DW_TAG_typedef, name: "uint_least32_t", file: !344, line: 56, baseType: !204)
!357 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !358, file: !316, line: 170)
!358 = !DIDerivedType(tag: DW_TAG_typedef, name: "uint_least64_t", file: !344, line: 58, baseType: !116)
!359 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !360, file: !316, line: 172)
!360 = !DIDerivedType(tag: DW_TAG_typedef, name: "int_fast8_t", file: !344, line: 68, baseType: !315)
!361 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !362, file: !316, line: 173)
!362 = !DIDerivedType(tag: DW_TAG_typedef, name: "int_fast16_t", file: !344, line: 70, baseType: !112)
!363 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !364, file: !316, line: 174)
!364 = !DIDerivedType(tag: DW_TAG_typedef, name: "int_fast32_t", file: !344, line: 71, baseType: !112)
!365 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !366, file: !316, line: 175)
!366 = !DIDerivedType(tag: DW_TAG_typedef, name: "int_fast64_t", file: !344, line: 72, baseType: !112)
!367 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !368, file: !316, line: 177)
!368 = !DIDerivedType(tag: DW_TAG_typedef, name: "uint_fast8_t", file: !344, line: 81, baseType: !331)
!369 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !370, file: !316, line: 178)
!370 = !DIDerivedType(tag: DW_TAG_typedef, name: "uint_fast16_t", file: !344, line: 83, baseType: !116)
!371 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !372, file: !316, line: 179)
!372 = !DIDerivedType(tag: DW_TAG_typedef, name: "uint_fast32_t", file: !344, line: 84, baseType: !116)
!373 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !374, file: !316, line: 180)
!374 = !DIDerivedType(tag: DW_TAG_typedef, name: "uint_fast64_t", file: !344, line: 85, baseType: !116)
!375 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !376, file: !316, line: 182)
!376 = !DIDerivedType(tag: DW_TAG_typedef, name: "intptr_t", file: !344, line: 97, baseType: !112)
!377 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !378, file: !316, line: 183)
!378 = !DIDerivedType(tag: DW_TAG_typedef, name: "uintptr_t", file: !344, line: 100, baseType: !116)
!379 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !380, file: !316, line: 185)
!380 = !DIDerivedType(tag: DW_TAG_typedef, name: "intmax_t", file: !344, line: 111, baseType: !381)
!381 = !DIDerivedType(tag: DW_TAG_typedef, name: "__intmax_t", file: !314, line: 61, baseType: !112)
!382 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !383, file: !316, line: 186)
!383 = !DIDerivedType(tag: DW_TAG_typedef, name: "uintmax_t", file: !344, line: 112, baseType: !384)
!384 = !DIDerivedType(tag: DW_TAG_typedef, name: "__uintmax_t", file: !314, line: 62, baseType: !116)
!385 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !115, file: !386, line: 68)
!386 = !DIFile(filename: "/fast/fs/llvm3/build/bin/../include/c++/v1/cstring", directory: "")
!387 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !388, file: !386, line: 69)
!388 = !DISubprogram(name: "memcpy", scope: !389, file: !389, line: 42, type: !390, flags: DIFlagPrototyped, spFlags: 0)
!389 = !DIFile(filename: "/usr/include/string.h", directory: "")
!390 = !DISubroutineType(types: !391)
!391 = !{!17, !392, !393, !115}
!392 = !DIDerivedType(tag: DW_TAG_restrict_type, baseType: !17)
!393 = !DIDerivedType(tag: DW_TAG_restrict_type, baseType: !246)
!394 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !395, file: !386, line: 70)
!395 = !DISubprogram(name: "memmove", scope: !389, file: !389, line: 46, type: !396, flags: DIFlagPrototyped, spFlags: 0)
!396 = !DISubroutineType(types: !397)
!397 = !{!17, !17, !246, !115}
!398 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !399, file: !386, line: 71)
!399 = !DISubprogram(name: "strcpy", scope: !389, file: !389, line: 121, type: !400, flags: DIFlagPrototyped, spFlags: 0)
!400 = !DISubroutineType(types: !401)
!401 = !{!168, !302, !165}
!402 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !403, file: !386, line: 72)
!403 = !DISubprogram(name: "strncpy", scope: !389, file: !389, line: 124, type: !404, flags: DIFlagPrototyped, spFlags: 0)
!404 = !DISubroutineType(types: !405)
!405 = !{!168, !302, !165, !115}
!406 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !407, file: !386, line: 73)
!407 = !DISubprogram(name: "strcat", scope: !389, file: !389, line: 129, type: !400, flags: DIFlagPrototyped, spFlags: 0)
!408 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !409, file: !386, line: 74)
!409 = !DISubprogram(name: "strncat", scope: !389, file: !389, line: 132, type: !404, flags: DIFlagPrototyped, spFlags: 0)
!410 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !411, file: !386, line: 75)
!411 = !DISubprogram(name: "memcmp", scope: !389, file: !389, line: 63, type: !412, flags: DIFlagPrototyped, spFlags: 0)
!412 = !DISubroutineType(types: !413)
!413 = !{!152, !246, !246, !115}
!414 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !415, file: !386, line: 76)
!415 = !DISubprogram(name: "strcmp", scope: !389, file: !389, line: 136, type: !416, flags: DIFlagPrototyped, spFlags: 0)
!416 = !DISubroutineType(types: !417)
!417 = !{!152, !145, !145}
!418 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !419, file: !386, line: 77)
!419 = !DISubprogram(name: "strncmp", scope: !389, file: !389, line: 139, type: !420, flags: DIFlagPrototyped, spFlags: 0)
!420 = !DISubroutineType(types: !421)
!421 = !{!152, !145, !145, !115}
!422 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !423, file: !386, line: 78)
!423 = !DISubprogram(name: "strcoll", scope: !389, file: !389, line: 143, type: !416, flags: DIFlagPrototyped, spFlags: 0)
!424 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !425, file: !386, line: 79)
!425 = !DISubprogram(name: "strxfrm", scope: !389, file: !389, line: 146, type: !426, flags: DIFlagPrototyped, spFlags: 0)
!426 = !DISubroutineType(types: !427)
!427 = !{!115, !302, !165, !115}
!428 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !429, file: !386, line: 80)
!429 = !DISubprogram(name: "memchr", linkageName: "_Z6memchrUa9enable_ifIXLb1EEEPvim", scope: !430, file: !430, line: 98, type: !431, flags: DIFlagPrototyped, spFlags: 0)
!430 = !DIFile(filename: "/fast/fs/llvm3/build/bin/../include/c++/v1/string.h", directory: "")
!431 = !DISubroutineType(types: !432)
!432 = !{!17, !17, !152, !115}
!433 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !434, file: !386, line: 81)
!434 = !DISubprogram(name: "strchr", linkageName: "_Z6strchrUa9enable_ifIXLb1EEEPci", scope: !430, file: !430, line: 77, type: !435, flags: DIFlagPrototyped, spFlags: 0)
!435 = !DISubroutineType(types: !436)
!436 = !{!168, !168, !152}
!437 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !438, file: !386, line: 82)
!438 = !DISubprogram(name: "strcspn", scope: !389, file: !389, line: 272, type: !439, flags: DIFlagPrototyped, spFlags: 0)
!439 = !DISubroutineType(types: !440)
!440 = !{!115, !145, !145}
!441 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !442, file: !386, line: 83)
!442 = !DISubprogram(name: "strpbrk", linkageName: "_Z7strpbrkUa9enable_ifIXLb1EEEPcPKc", scope: !430, file: !430, line: 84, type: !443, flags: DIFlagPrototyped, spFlags: 0)
!443 = !DISubroutineType(types: !444)
!444 = !{!168, !168, !145}
!445 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !446, file: !386, line: 84)
!446 = !DISubprogram(name: "strrchr", linkageName: "_Z7strrchrUa9enable_ifIXLb1EEEPci", scope: !430, file: !430, line: 91, type: !435, flags: DIFlagPrototyped, spFlags: 0)
!447 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !448, file: !386, line: 85)
!448 = !DISubprogram(name: "strspn", scope: !389, file: !389, line: 276, type: !439, flags: DIFlagPrototyped, spFlags: 0)
!449 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !450, file: !386, line: 86)
!450 = !DISubprogram(name: "strstr", linkageName: "_Z6strstrUa9enable_ifIXLb1EEEPcPKc", scope: !430, file: !430, line: 105, type: !443, flags: DIFlagPrototyped, spFlags: 0)
!451 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !452, file: !386, line: 88)
!452 = !DISubprogram(name: "strtok", scope: !389, file: !389, line: 335, type: !400, flags: DIFlagPrototyped, spFlags: 0)
!453 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !454, file: !386, line: 90)
!454 = !DISubprogram(name: "memset", scope: !389, file: !389, line: 60, type: !431, flags: DIFlagPrototyped, spFlags: 0)
!455 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !456, file: !386, line: 91)
!456 = !DISubprogram(name: "strerror", scope: !389, file: !389, line: 396, type: !457, flags: DIFlagPrototyped, spFlags: 0)
!457 = !DISubroutineType(types: !458)
!458 = !{!168, !152}
!459 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !460, file: !386, line: 92)
!460 = !DISubprogram(name: "strlen", scope: !389, file: !389, line: 384, type: !461, flags: DIFlagPrototyped, spFlags: 0)
!461 = !DISubroutineType(types: !462)
!462 = !{!115, !145}
!463 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !0, entity: !25, file: !464, line: 51)
!464 = !DIFile(filename: "/fast/fs/llvm3/build/bin/../include/c++/v1/stddef.h", directory: "")
!465 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !466, file: !469, line: 71)
!466 = !DIDerivedType(tag: DW_TAG_typedef, name: "clock_t", file: !467, line: 7, baseType: !468)
!467 = !DIFile(filename: "/usr/include/x86_64-linux-gnu/bits/types/clock_t.h", directory: "")
!468 = !DIDerivedType(tag: DW_TAG_typedef, name: "__clock_t", file: !314, line: 144, baseType: !112)
!469 = !DIFile(filename: "/fast/fs/llvm3/build/bin/../include/c++/v1/ctime", directory: "")
!470 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !115, file: !469, line: 72)
!471 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !472, file: !469, line: 73)
!472 = !DIDerivedType(tag: DW_TAG_typedef, name: "time_t", file: !473, line: 7, baseType: !474)
!473 = !DIFile(filename: "/usr/include/x86_64-linux-gnu/bits/types/time_t.h", directory: "")
!474 = !DIDerivedType(tag: DW_TAG_typedef, name: "__time_t", file: !314, line: 148, baseType: !112)
!475 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !476, file: !469, line: 74)
!476 = !DICompositeType(tag: DW_TAG_structure_type, name: "tm", file: !477, line: 7, size: 448, flags: DIFlagFwdDecl, identifier: "_ZTS2tm")
!477 = !DIFile(filename: "/usr/include/x86_64-linux-gnu/bits/types/struct_tm.h", directory: "")
!478 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !479, file: !469, line: 78)
!479 = !DISubprogram(name: "clock", scope: !480, file: !480, line: 72, type: !481, flags: DIFlagPrototyped, spFlags: 0)
!480 = !DIFile(filename: "/usr/include/time.h", directory: "")
!481 = !DISubroutineType(types: !482)
!482 = !{!466}
!483 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !484, file: !469, line: 79)
!484 = !DISubprogram(name: "difftime", scope: !480, file: !480, line: 78, type: !485, flags: DIFlagPrototyped, spFlags: 0)
!485 = !DISubroutineType(types: !486)
!486 = !{!144, !472, !472}
!487 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !488, file: !469, line: 80)
!488 = !DISubprogram(name: "mktime", scope: !480, file: !480, line: 82, type: !489, flags: DIFlagPrototyped, spFlags: 0)
!489 = !DISubroutineType(types: !490)
!490 = !{!472, !491}
!491 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !476, size: 64)
!492 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !493, file: !469, line: 81)
!493 = !DISubprogram(name: "time", scope: !480, file: !480, line: 75, type: !494, flags: DIFlagPrototyped, spFlags: 0)
!494 = !DISubroutineType(types: !495)
!495 = !{!472, !496}
!496 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !472, size: 64)
!497 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !498, file: !469, line: 83)
!498 = !DISubprogram(name: "asctime", scope: !480, file: !480, line: 139, type: !499, flags: DIFlagPrototyped, spFlags: 0)
!499 = !DISubroutineType(types: !500)
!500 = !{!168, !501}
!501 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !502, size: 64)
!502 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !476)
!503 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !504, file: !469, line: 84)
!504 = !DISubprogram(name: "ctime", scope: !480, file: !480, line: 142, type: !505, flags: DIFlagPrototyped, spFlags: 0)
!505 = !DISubroutineType(types: !506)
!506 = !{!168, !507}
!507 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !508, size: 64)
!508 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !472)
!509 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !510, file: !469, line: 85)
!510 = !DISubprogram(name: "gmtime", scope: !480, file: !480, line: 119, type: !511, flags: DIFlagPrototyped, spFlags: 0)
!511 = !DISubroutineType(types: !512)
!512 = !{!491, !507}
!513 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !514, file: !469, line: 86)
!514 = !DISubprogram(name: "localtime", scope: !480, file: !480, line: 123, type: !511, flags: DIFlagPrototyped, spFlags: 0)
!515 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !109, entity: !516, file: !469, line: 88)
!516 = !DISubprogram(name: "strftime", scope: !480, file: !480, line: 88, type: !517, flags: DIFlagPrototyped, spFlags: 0)
!517 = !DISubroutineType(types: !518)
!518 = !{!115, !302, !115, !165, !519}
!519 = !DIDerivedType(tag: DW_TAG_restrict_type, baseType: !501)
!520 = !DIImportedEntity(tag: DW_TAG_imported_module, scope: !521, entity: !522, file: !524, line: 2922)
!521 = !DINamespace(name: "chrono", scope: !109)
!522 = !DINamespace(name: "chrono_literals", scope: !523, exportSymbols: true)
!523 = !DINamespace(name: "literals", scope: !109, exportSymbols: true)
!524 = !DIFile(filename: "/fast/fs/llvm3/build/bin/../include/c++/v1/chrono", directory: "")
!525 = !DIImportedEntity(tag: DW_TAG_imported_module, scope: !0, entity: !10, file: !1, line: 3)
!526 = !{i32 7, !"Dwarf Version", i32 4}
!527 = !{i32 2, !"Debug Info Version", i32 3}
!528 = !{i32 1, !"wchar_size", i32 4}
!529 = !{!"clang version 12.0.0 (git@github.com:llvm/llvm-project 0a702b967927d888bd222806252783359fc74d57)"}
!530 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foov", scope: !1, file: !1, line: 23, type: !531, scopeLine: 23, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)
!531 = !DISubroutineType(types: !3)
!532 = !DILocation(line: 23, column: 12, scope: !530)
!533 = !DILocation(line: 23, column: 6, scope: !530)
!534 = !DILocalVariable(name: "__coro_gro", scope: !530, file: !1, line: 23, type: !4)
!535 = !DILocalVariable(name: "__promise", scope: !530, file: !1, line: 23, type: !536)
!536 = !DIDerivedType(tag: DW_TAG_typedef, name: "promise_type", scope: !537, file: !8, line: 79, baseType: !63)
!537 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "__coroutine_traits_sfinae<coro, void>", scope: !9, file: !8, line: 76, size: 8, flags: DIFlagTypePassByValue, elements: !2, templateParams: !538, identifier: "_ZTSNSt12experimental13coroutines_v125__coroutine_traits_sfinaeI4corovEE")
!538 = !{!539, !540}
!539 = !DITemplateTypeParameter(name: "_Tp", type: !4)
!540 = !DITemplateTypeParameter(type: null, defaulted: true)
!541 = !DILocation(line: 33, column: 1, scope: !530)
!542 = !DILocalVariable(name: "x", scope: !543, file: !1, line: 24, type: !544)
!543 = distinct !DILexicalBlock(scope: !530, file: !1, line: 23, column: 12)
!544 = !DICompositeType(tag: DW_TAG_array_type, baseType: !152, size: 320, elements: !545)
!545 = !{!546}
!546 = !DISubrange(count: 10)
!547 = !DILocation(line: 24, column: 7, scope: !543)
!548 = !DILocalVariable(name: "a", scope: !543, file: !1, line: 25, type: !152)
!549 = !DILocation(line: 25, column: 7, scope: !543)
!550 = !DILocation(line: 26, column: 12, scope: !543)
!551 = !DILocation(line: 26, column: 3, scope: !543)
!552 = !DILocation(line: 27, column: 4, scope: !543)
!553 = !DILocation(line: 28, column: 3, scope: !543)
!554 = !DILocation(line: 28, column: 8, scope: !543)
!555 = !DILocation(line: 29, column: 5, scope: !543)
!556 = !DILocation(line: 30, column: 3, scope: !543)
!557 = !DILocation(line: 30, column: 8, scope: !543)
!558 = !DILocation(line: 31, column: 5, scope: !543)
!559 = !DILocation(line: 32, column: 3, scope: !543)
!560 = !DILocation(line: 32, column: 8, scope: !543)
!561 = distinct !DISubprogram(name: "get_return_object", linkageName: "_ZN4coro12promise_type17get_return_objectEv", scope: !63, file: !1, line: 7, type: !66, scopeLine: 7, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !65, retainedNodes: !2)
!562 = !DILocalVariable(name: "this", arg: 1, scope: !561, type: !563, flags: DIFlagArtificial | DIFlagObjectPointer)
!563 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !63, size: 64)
!564 = !DILocation(line: 0, scope: !561)
!565 = !DILocalVariable(name: "handle", scope: !561, file: !1, line: 8, type: !7)
!566 = !DILocation(line: 8, column: 12, scope: !561)
!567 = !DILocation(line: 8, column: 21, scope: !561)
!568 = !DILocation(line: 9, column: 19, scope: !561)
!569 = !DILocation(line: 9, column: 14, scope: !561)
!570 = !DILocation(line: 9, column: 7, scope: !561)
!571 = distinct !DISubprogram(name: "initial_suspend", linkageName: "_ZN4coro12promise_type15initial_suspendEv", scope: !63, file: !1, line: 11, type: !70, scopeLine: 11, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !69, retainedNodes: !2)
!572 = !DILocalVariable(name: "this", arg: 1, scope: !571, type: !563, flags: DIFlagArtificial | DIFlagObjectPointer)
!573 = !DILocation(line: 0, scope: !571)
!574 = !DILocation(line: 11, column: 39, scope: !571)
!575 = distinct !DISubprogram(name: "await_ready", linkageName: "_ZNKSt12experimental13coroutines_v113suspend_never11await_readyEv", scope: !72, file: !8, line: 302, type: !75, scopeLine: 302, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !74, retainedNodes: !2)
!576 = !DILocalVariable(name: "this", arg: 1, scope: !575, type: !577, flags: DIFlagArtificial | DIFlagObjectPointer)
!577 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !78, size: 64)
!578 = !DILocation(line: 0, scope: !575)
!579 = !DILocation(line: 302, column: 40, scope: !575)
!580 = distinct !DISubprogram(name: "await_suspend", linkageName: "_ZNKSt12experimental13coroutines_v113suspend_never13await_suspendENS0_16coroutine_handleIvEE", scope: !72, file: !8, line: 304, type: !80, scopeLine: 304, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !79, retainedNodes: !2)
!581 = !DILocalVariable(name: "this", arg: 1, scope: !580, type: !577, flags: DIFlagArtificial | DIFlagObjectPointer)
!582 = !DILocation(line: 0, scope: !580)
!583 = !DILocalVariable(arg: 2, scope: !580, file: !8, line: 304, type: !14)
!584 = !DILocation(line: 304, column: 40, scope: !580)
!585 = !DILocation(line: 304, column: 59, scope: !580)
!586 = distinct !DISubprogram(name: "from_address", linkageName: "_ZNSt12experimental13coroutines_v116coroutine_handleIN4coro12promise_typeEE12from_addressEPv", scope: !7, file: !8, line: 220, type: !93, scopeLine: 220, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !92, retainedNodes: !2)
!587 = !DILocalVariable(name: "__addr", arg: 1, scope: !586, file: !8, line: 220, type: !17)
!588 = !DILocation(line: 220, column: 48, scope: !586)
!589 = !DILocalVariable(name: "__tmp", scope: !586, file: !8, line: 221, type: !7)
!590 = !DILocation(line: 221, column: 26, scope: !586)
!591 = !DILocation(line: 222, column: 27, scope: !586)
!592 = !DILocation(line: 222, column: 9, scope: !586)
!593 = !DILocation(line: 222, column: 15, scope: !586)
!594 = !DILocation(line: 222, column: 25, scope: !586)
!595 = !DILocation(line: 223, column: 9, scope: !586)
!596 = distinct !DISubprogram(name: "await_resume", linkageName: "_ZNKSt12experimental13coroutines_v113suspend_never12await_resumeEv", scope: !72, file: !8, line: 306, type: !83, scopeLine: 306, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !82, retainedNodes: !2)
!597 = !DILocalVariable(name: "this", arg: 1, scope: !596, type: !577, flags: DIFlagArtificial | DIFlagObjectPointer)
!598 = !DILocation(line: 0, scope: !596)
!599 = !DILocation(line: 306, column: 40, scope: !596)
!600 = distinct !DISubprogram(name: "await_ready", linkageName: "_ZNKSt12experimental13coroutines_v114suspend_always11await_readyEv", scope: !601, file: !8, line: 311, type: !604, scopeLine: 311, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !603, retainedNodes: !2)
!601 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "suspend_always", scope: !9, file: !8, line: 309, size: 8, flags: DIFlagTypePassByValue, elements: !602, identifier: "_ZTSNSt12experimental13coroutines_v114suspend_alwaysE")
!602 = !{!603, !608, !611}
!603 = !DISubprogram(name: "await_ready", linkageName: "_ZNKSt12experimental13coroutines_v114suspend_always11await_readyEv", scope: !601, file: !8, line: 311, type: !604, scopeLine: 311, flags: DIFlagPrototyped, spFlags: 0)
!604 = !DISubroutineType(types: !605)
!605 = !{!40, !606}
!606 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !607, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
!607 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !601)
!608 = !DISubprogram(name: "await_suspend", linkageName: "_ZNKSt12experimental13coroutines_v114suspend_always13await_suspendENS0_16coroutine_handleIvEE", scope: !601, file: !8, line: 313, type: !609, scopeLine: 313, flags: DIFlagPrototyped, spFlags: 0)
!609 = !DISubroutineType(types: !610)
!610 = !{null, !606, !14}
!611 = !DISubprogram(name: "await_resume", linkageName: "_ZNKSt12experimental13coroutines_v114suspend_always12await_resumeEv", scope: !601, file: !8, line: 315, type: !612, scopeLine: 315, flags: DIFlagPrototyped, spFlags: 0)
!612 = !DISubroutineType(types: !613)
!613 = !{null, !606}
!614 = !DILocalVariable(name: "this", arg: 1, scope: !600, type: !615, flags: DIFlagArtificial | DIFlagObjectPointer)
!615 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !607, size: 64)
!616 = !DILocation(line: 0, scope: !600)
!617 = !DILocation(line: 311, column: 40, scope: !600)
!618 = distinct !DISubprogram(name: "await_suspend", linkageName: "_ZNKSt12experimental13coroutines_v114suspend_always13await_suspendENS0_16coroutine_handleIvEE", scope: !601, file: !8, line: 313, type: !609, scopeLine: 313, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !608, retainedNodes: !2)
!619 = !DILocalVariable(name: "this", arg: 1, scope: !618, type: !615, flags: DIFlagArtificial | DIFlagObjectPointer)
!620 = !DILocation(line: 0, scope: !618)
!621 = !DILocalVariable(arg: 2, scope: !618, file: !8, line: 313, type: !14)
!622 = !DILocation(line: 313, column: 40, scope: !618)
!623 = !DILocation(line: 313, column: 59, scope: !618)
!624 = distinct !DISubprogram(name: "await_resume", linkageName: "_ZNKSt12experimental13coroutines_v114suspend_always12await_resumeEv", scope: !601, file: !8, line: 315, type: !612, scopeLine: 315, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !611, retainedNodes: !2)
!625 = !DILocalVariable(name: "this", arg: 1, scope: !624, type: !615, flags: DIFlagArtificial | DIFlagObjectPointer)
!626 = !DILocation(line: 0, scope: !624)
!627 = !DILocation(line: 315, column: 40, scope: !624)
!628 = distinct !DISubprogram(name: "return_void", linkageName: "_ZN4coro12promise_type11return_voidEv", scope: !63, file: !1, line: 13, type: !87, scopeLine: 13, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !86, retainedNodes: !2)
!629 = !DILocalVariable(name: "this", arg: 1, scope: !628, type: !563, flags: DIFlagArtificial | DIFlagObjectPointer)
!630 = !DILocation(line: 0, scope: !628)
!631 = !DILocation(line: 13, column: 25, scope: !628)
!632 = distinct !DISubprogram(name: "unhandled_exception", linkageName: "_ZN4coro12promise_type19unhandled_exceptionEv", scope: !63, file: !1, line: 14, type: !87, scopeLine: 14, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !89, retainedNodes: !2)
!633 = !DILocalVariable(name: "this", arg: 1, scope: !632, type: !563, flags: DIFlagArtificial | DIFlagObjectPointer)
!634 = !DILocation(line: 0, scope: !632)
!635 = !DILocation(line: 14, column: 33, scope: !632)
!636 = distinct !DISubprogram(name: "final_suspend", linkageName: "_ZN4coro12promise_type13final_suspendEv", scope: !63, file: !1, line: 12, type: !70, scopeLine: 12, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !85, retainedNodes: !2)
!637 = !DILocalVariable(name: "this", arg: 1, scope: !636, type: !563, flags: DIFlagArtificial | DIFlagObjectPointer)
!638 = !DILocation(line: 0, scope: !636)
!639 = !DILocation(line: 12, column: 46, scope: !636)
!640 = distinct !DISubprogram(name: "main", scope: !1, file: !1, line: 36, type: !198, scopeLine: 36, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)
!641 = !DILocalVariable(name: "c", scope: !640, file: !1, line: 37, type: !4)
!642 = !DILocation(line: 37, column: 8, scope: !640)
!643 = !DILocation(line: 37, column: 12, scope: !640)
!644 = !DILocation(line: 38, column: 5, scope: !640)
!645 = !DILocation(line: 38, column: 3, scope: !640)
!646 = !DILocation(line: 38, column: 12, scope: !640)
!647 = !DILocation(line: 39, column: 5, scope: !640)
!648 = !DILocation(line: 39, column: 3, scope: !640)
!649 = !DILocation(line: 39, column: 12, scope: !640)
!650 = !DILocation(line: 40, column: 1, scope: !640)
!651 = distinct !DISubprogram(name: "resume", linkageName: "_ZNSt12experimental13coroutines_v116coroutine_handleIvE6resumeEv", scope: !14, file: !8, line: 116, type: !19, scopeLine: 116, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !42, retainedNodes: !2)
!652 = !DILocalVariable(name: "this", arg: 1, scope: !651, type: !653, flags: DIFlagArtificial | DIFlagObjectPointer)
!653 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !14, size: 64)
!654 = !DILocation(line: 0, scope: !651)
!655 = !DILocation(line: 121, column: 29, scope: !651)
!656 = !DILocation(line: 121, column: 7, scope: !651)
!657 = !DILocation(line: 122, column: 5, scope: !651)
!658 = distinct !DISubprogram(name: "from_promise", linkageName: "_ZNSt12experimental13coroutines_v116coroutine_handleIN4coro12promise_typeEE12from_promiseERS3_", scope: !7, file: !8, line: 250, type: !99, scopeLine: 250, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !98, retainedNodes: !2)
!659 = !DILocalVariable(name: "__promise", arg: 1, scope: !658, file: !8, line: 250, type: !62)
!660 = !DILocation(line: 250, column: 52, scope: !658)
!661 = !DILocalVariable(name: "__tmp", scope: !658, file: !8, line: 252, type: !7)
!662 = !DILocation(line: 252, column: 26, scope: !658)
!663 = !DILocation(line: 254, column: 55, scope: !658)
!664 = !DILocation(line: 254, column: 13, scope: !658)
!665 = !DILocation(line: 253, column: 27, scope: !658)
!666 = !DILocation(line: 253, column: 9, scope: !658)
!667 = !DILocation(line: 253, column: 15, scope: !658)
!668 = !DILocation(line: 253, column: 25, scope: !658)
!669 = !DILocation(line: 256, column: 9, scope: !658)
!670 = distinct !DISubprogram(name: "coro", linkageName: "_ZN4coroC2ENSt12experimental13coroutines_v116coroutine_handleINS_12promise_typeEEE", scope: !4, file: !1, line: 18, type: !104, scopeLine: 19, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !103, retainedNodes: !2)
!671 = !DILocalVariable(name: "this", arg: 1, scope: !670, type: !672, flags: DIFlagArtificial | DIFlagObjectPointer)
!672 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !4, size: 64)
!673 = !DILocation(line: 0, scope: !670)
!674 = !DILocalVariable(name: "handle", arg: 2, scope: !670, file: !1, line: 18, type: !7)
!675 = !DILocation(line: 18, column: 39, scope: !670)
!676 = !DILocation(line: 19, column: 9, scope: !670)
!677 = !DILocation(line: 19, column: 25, scope: !670)
!678 = distinct !DISubprogram(name: "coroutine_handle", linkageName: "_ZNSt12experimental13coroutines_v116coroutine_handleIN4coro12promise_typeEEC2Ev", scope: !7, file: !8, line: 196, type: !679, scopeLine: 196, flags: DIFlagArtificial | DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !681, retainedNodes: !2)
!679 = !DISubroutineType(types: !680)
!680 = !{null, !58}
!681 = !DISubprogram(name: "coroutine_handle", scope: !7, type: !679, flags: DIFlagPublic | DIFlagArtificial | DIFlagPrototyped, spFlags: 0)
!682 = !DILocalVariable(name: "this", arg: 1, scope: !678, type: !683, flags: DIFlagArtificial | DIFlagObjectPointer)
!683 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !7, size: 64)
!684 = !DILocation(line: 0, scope: !678)
!685 = !DILocation(line: 196, column: 28, scope: !678)
!686 = distinct !DISubprogram(name: "addressof<coro::promise_type>", linkageName: "_ZNSt3__19addressofIN4coro12promise_typeEEEPT_RS3_", scope: !109, file: !687, line: 605, type: !688, scopeLine: 606, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, templateParams: !690, retainedNodes: !2)
!687 = !DIFile(filename: "/fast/fs/llvm3/build/bin/../include/c++/v1/type_traits", directory: "")
!688 = !DISubroutineType(types: !689)
!689 = !{!563, !62}
!690 = !{!691}
!691 = !DITemplateTypeParameter(name: "_Tp", type: !63)
!692 = !DILocalVariable(name: "__x", arg: 1, scope: !686, file: !687, line: 605, type: !62)
!693 = !DILocation(line: 605, column: 16, scope: !686)
!694 = !DILocation(line: 607, column: 32, scope: !686)
!695 = !DILocation(line: 607, column: 5, scope: !686)
!696 = distinct !DISubprogram(name: "coroutine_handle", linkageName: "_ZNSt12experimental13coroutines_v116coroutine_handleIvEC2Ev", scope: !14, file: !8, line: 95, type: !19, scopeLine: 95, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !18, retainedNodes: !2)
!697 = !DILocalVariable(name: "this", arg: 1, scope: !696, type: !653, flags: DIFlagArtificial | DIFlagObjectPointer)
!698 = !DILocation(line: 0, scope: !696)
!699 = !DILocation(line: 95, column: 54, scope: !696)
!700 = !DILocation(line: 95, column: 74, scope: !696)
!701 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foov", scope: !1, file: !1, line: 23, type: !531, scopeLine: 23, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)
!702 = !DILocation(line: 23, column: 12, scope: !701)
!703 = !DILocation(line: 23, column: 6, scope: !701)
!704 = !DILocalVariable(name: "x", scope: !705, file: !1, line: 24, type: !544)
!705 = distinct !DILexicalBlock(scope: !701, file: !1, line: 23, column: 12)
!706 = !DILocation(line: 24, column: 7, scope: !705)
!707 = !DILocalVariable(name: "a", scope: !705, file: !1, line: 25, type: !152)
!708 = !DILocation(line: 25, column: 7, scope: !705)
!709 = !DILocation(line: 26, column: 12, scope: !705)
!710 = !DILocation(line: 26, column: 3, scope: !705)
!711 = !DILocation(line: 27, column: 4, scope: !705)
!712 = !DILocation(line: 28, column: 3, scope: !705)
!713 = !DILocation(line: 28, column: 8, scope: !705)
!714 = !DILocation(line: 29, column: 5, scope: !705)
!715 = !DILocation(line: 30, column: 3, scope: !705)
!716 = !DILocation(line: 30, column: 8, scope: !705)
!717 = !DILocation(line: 31, column: 5, scope: !705)
!718 = !DILocation(line: 32, column: 3, scope: !705)
!719 = !DILocation(line: 32, column: 8, scope: !705)
!720 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foov", scope: !1, file: !1, line: 23, type: !531, scopeLine: 23, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)
!721 = !DILocation(line: 23, column: 12, scope: !720)
!722 = !DILocation(line: 23, column: 6, scope: !720)
!723 = !DILocalVariable(name: "x", scope: !724, file: !1, line: 24, type: !544)
!724 = distinct !DILexicalBlock(scope: !720, file: !1, line: 23, column: 12)
!725 = !DILocation(line: 24, column: 7, scope: !724)
!726 = !DILocalVariable(name: "a", scope: !724, file: !1, line: 25, type: !152)
!727 = !DILocation(line: 25, column: 7, scope: !724)
!728 = !DILocation(line: 26, column: 12, scope: !724)
!729 = !DILocation(line: 26, column: 3, scope: !724)
!730 = !DILocation(line: 27, column: 4, scope: !724)
!731 = !DILocation(line: 28, column: 3, scope: !724)
!732 = !DILocation(line: 28, column: 8, scope: !724)
!733 = !DILocation(line: 29, column: 5, scope: !724)
!734 = !DILocation(line: 30, column: 3, scope: !724)
!735 = !DILocation(line: 30, column: 8, scope: !724)
!736 = !DILocation(line: 31, column: 5, scope: !724)
!737 = !DILocation(line: 32, column: 3, scope: !724)
!738 = !DILocation(line: 32, column: 8, scope: !724)
!739 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foov", scope: !1, file: !1, line: 23, type: !531, scopeLine: 23, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)
!740 = !DILocation(line: 23, column: 12, scope: !739)
!741 = !DILocation(line: 23, column: 6, scope: !739)
!742 = !DILocalVariable(name: "x", scope: !743, file: !1, line: 24, type: !544)
!743 = distinct !DILexicalBlock(scope: !739, file: !1, line: 23, column: 12)
!744 = !DILocation(line: 24, column: 7, scope: !743)
!745 = !DILocalVariable(name: "a", scope: !743, file: !1, line: 25, type: !152)
!746 = !DILocation(line: 25, column: 7, scope: !743)
!747 = !DILocation(line: 26, column: 12, scope: !743)
!748 = !DILocation(line: 26, column: 3, scope: !743)
!749 = !DILocation(line: 27, column: 4, scope: !743)
!750 = !DILocation(line: 28, column: 3, scope: !743)
!751 = !DILocation(line: 28, column: 8, scope: !743)
!752 = !DILocation(line: 29, column: 5, scope: !743)
!753 = !DILocation(line: 30, column: 3, scope: !743)
!754 = !DILocation(line: 30, column: 8, scope: !743)
!755 = !DILocation(line: 31, column: 5, scope: !743)
!756 = !DILocation(line: 32, column: 3, scope: !743)
!757 = !DILocation(line: 32, column: 8, scope: !743)
#include <experimental/coroutine>
using namespace std::experimental;
struct coro {
struct promise_type {
coro get_return_object() {
auto handle = coroutine_handle<promise_type>::from_promise(*this);
return coro(handle);
}
suspend_never initial_suspend() { return {}; }
suspend_never final_suspend() noexcept { return {}; }
void return_void() {}
void unhandled_exception() {}
};
coroutine_handle<promise_type> handle;
coro(coroutine_handle<promise_type> handle)
: handle(handle) {}
};
// Complete code here: https://gist.github.com/bcardosolopes/a992950bdfc66ab4ce6dc0c75920f4ef
coro foo() {
int x[10] = {};
int a = 3;
co_await std::experimental::suspend_always();
a++;
x[0] = 1;
a += 2;
x[1] = 2;
a += 3;
x[2] = 3;
}
int main() {
auto c = foo();
c.handle.resume();
c.handle.resume();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment