// RUN: %swiftc_driver %s -g -debug-info-format=codeview -emit-ir -o - | %FileCheck %s func markUsed(_ t: T) {} func arithmetic(_ a: Int64, _ b: Int64) { markUsed(a + b) // line 4 markUsed(a / b) // line 5 } struct SimpleStruct { // NOTE: Classes do not work in Windows yet. var myVal1: Float var myVal2: Float func sum(myArg: Float) { // line 10 markUsed(myVal1 + myVal2 + myArg) } } func myLoop() { for index in 0...3 { // line 15 markUsed(index) // line 16 } } func mySwitch(_ a: Int64) { switch a { case 0: markUsed(a-1) // line 22 default: do { markUsed(a+1) } // line 25 } } func foo() { var myArray: [Int64] = [] // line 29 } // func arithmetic(_ a: Int64, _ b: Int64) // CHECK: define {{.*}} @"$s4main10arithmeticyys5Int64V_ADtF"(i64, i64) // CHECK: call { i64, i1 } @llvm.sadd.with.overflow.i64({{.*}}), !dbg ![[ADD:[0-9]+]] // NOTE: The division will emit an ``unreachable`` instruction sandwiched // between other instructions for the division. We want to make sure // all instructions from the division have the same debug location and // are contiguous. // CHECK: call {{.*}} @"$ss18_fatalErrorMessage__4file4line5flagss5NeverOs12StaticStringV_A2HSus6UInt32VtF"{{.*}}, !dbg ![[DIV:[0-9]+]] // CHECK-NEXT: unreachable, !dbg ![[DIV]] // CHECK sdiv i64 %0, %1, !dbg ![[DIV]] // CHECK: call void @llvm.trap(), !dbg ![[INLINEDADD:[0-9]+]] // CHECK-NEXT: unreachable, !dbg ![[INLINEDADD]] // func sum(myArg: Float) // CHECK: define {{.*}} @"$s4main12SimpleStructV3sum5myArgySf_tF"{{.*}} !dbg ![[SUM:[0-9]+]] // NOTE: The point of this test is to trigger IRGenSIL::emitShadowCopy() // and IRGenSIL::emitShadowCopyIfNeeded(). It may be worthwhile to // simplify this testcase. // CHECK: store float %0, float* %myArg.debug, {{.*}}, !dbg ![[PROLOGUE:[0-9]+]] // CHECK: store float {{.*}}, float* %self.debug.myVal1._value, {{.*}}, !dbg ![[PROLOGUE]] // func myLoop() { // CHECK: define {{.*}} @"$s4main6myLoopyyF" // CHECK: call void @llvm.dbg.declare(metadata i64* %index.debug, {{.*}}), !dbg ![[FORLOOP:[0-9]+]] // CHECK: phi i64 [ %{{.[0-9]+}}, %{{.[0-9]+}} ], !dbg ![[FORLOOP]] // CHECK: call {{.*}} @"$s4main8markUsedyyxlF"{{.*}}, !dbg ![[FORBODY:[0-9]+]] // CHECK: ret void // func mySwitch(_ a: Int64) // CHECK: call { i64, i1 } @llvm.ssub.with.overflow.i64{{.*}} // CHECK: br label %[[RETLABEL:[0-9]+]], !dbg ![[CASE:[0-9]+]] // CHECK: call { i64, i1 } @llvm.sadd.with.overflow.i64{{.*}} // CHECK: br label %[[RETLABEL]], !dbg ![[DEFAULTCLEANUP:[0-9]+]] // CHECK: ;