// RUN: %target-swift-frontend %s -emit-ir -g -o - | %FileCheck %s
// RUN: %target-swift-frontend %s -S -g -o - | %FileCheck %s --check-prefix ASM-CHECK

// REQUIRES: CPU=i386_or_x86_64

import Swift
func markUsed<T>(_ t: T) {}

class MyClass
{
    var x : Int64
    init(input: Int64) { x = input }
    func do_something(_ input: Int64) -> Int64
    {
        return x * input
    }
}

func call_me(_ code: @escaping () -> Void)
{
    code ()
}

func main(_ x: Int64) -> Void
// CHECK: define hidden void @_TF9linetable4main
{
    var my_class = MyClass(input: 10)
// Linetable continuity. Don't go into the closure expression.
// ASM-CHECK: .loc [[FILEID:[0-9]]] [[@LINE+1]] 5
    call_me (
// ASM-CHECK-NOT: .loc [[FILEID]] [[@LINE+1]] 5
// CHECK: @_TTSf2i_n___TFF9linetable4mainFVs5Int64T_U_FT_T_
        {
            var result = my_class.do_something(x)
            markUsed(result)
// CHECK: call {{.*}} @swift_rt_swift_release {{.*}}
// CHECK: call {{.*}} @swift_rt_swift_release {{.*}}, !dbg ![[CLOSURE_END:.*]]
// CHECK-NEXT: bitcast
// CHECK-NEXT: llvm.lifetime.end
// CHECK-NEXT: ret void, !dbg ![[CLOSURE_END]]
// CHECK: ![[CLOSURE_END]] = !DILocation(line: [[@LINE+1]],
        }
    )

// The swift_releases at the end should not jump to the point where
// that memory was retained/allocated and also not to line 0.
// ASM-CHECK-NOT: .loc [[FILEID]] 0 0
// ASM-CHECK: .loc [[FILEID]] [[@LINE+2]] 1
// ASM-CHECK: ret
}

// ASM-CHECK: {{^_?_TTSf2i_n___TFF9linetable4mainFVs5Int64T_U_FT_T_:}}
// ASM-CHECK-NOT: retq
// The end-of-prologue should have a valid location (0 is ok, too).
// ASM-CHECK: .loc [[FILEID]] 0 {{[0-9]+}} prologue_end
// ASM-CHECK: .loc [[FILEID]] 34 {{[0-9]+}}

main(30)
