1 ; Tests that asan skips pre-split coroutine and NoopCoro.Frame
2 ; RUN: opt < %s -S -passes=coro-early,asan | FileCheck %s
4 ; CHECK: %NoopCoro.Frame = type { ptr, ptr }
5 ; CHECK: @NoopCoro.Frame.Const = private constant %NoopCoro.Frame { ptr @__NoopCoro_ResumeDestroy, ptr @__NoopCoro_ResumeDestroy }
6 ; CHECK-NOT: @0 = private alias { %NoopCoro.Frame,
8 %struct.Promise = type { %"struct.std::__n4861::coroutine_handle" }
9 %"struct.std::__n4861::coroutine_handle" = type { ptr }
12 define ptr @foo() #0 {
14 ; CHECK-NOT: %asan_local_stack_base
16 %__promise = alloca %struct.Promise, align 8
17 %0 = call token @llvm.coro.id(i32 16, ptr nonnull %__promise, ptr null, ptr null)
18 %1 = call ptr @llvm.coro.noop()
22 declare token @llvm.coro.id(i32, ptr readnone, ptr nocapture readonly, ptr)
23 declare ptr @llvm.coro.noop()
25 attributes #0 = { sanitize_address presplitcoroutine }
28 !llvm.module.flags = !{!3, !4}
30 !0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "hand-written", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)
31 !1 = !DIFile(filename: "<stdin>", directory: "")
33 !3 = !{i32 2, !"Dwarf Version", i32 4}
34 !4 = !{i32 2, !"Debug Info Version", i32 3}