@@ -8,6 +8,10 @@ struct MyStruct {
88 var y: Builtin.Int64
99}
1010
11+ struct SmallStruct {
12+ var z : Builtin.Int64
13+ }
14+
1115sil_scope 1 { loc "file.swift":7:6 parent @test_fragment : $@convention(thin) () -> () }
1216
1317// Testing op_fragment w/ debug_value_addr
1620 %2 = alloc_stack $MyStruct, var, name "my_struct", loc "file.swift":8:9, scope 1
1721 // CHECK: %[[MY_STRUCT:.+]] = alloca %{{.*}}MyStruct
1822 // CHECK: llvm.dbg.declare(metadata {{.*}}* %[[MY_STRUCT]], metadata ![[VAR_DECL_MD:[0-9]+]]
23+ // CHECK: %[[SMALL_STRUCT:.+]] = alloca %{{.*}}SmallStruct
24+ // CHECK: llvm.dbg.declare(metadata {{.*}}* %[[SMALL_STRUCT]], metadata ![[SMALL_VAR_DECL_MD:[0-9]+]]
1925 %3 = struct_element_addr %2 : $*MyStruct, #MyStruct.x, loc "file.swift":9:17, scope 1
2026 // CHECK: %[[FIELD_X:.*]] = getelementptr {{.*}} %[[MY_STRUCT]]
2127 // CHECK-SIL: debug_value_addr %{{[0-9]+}} : $*Builtin.Int64
2531 // CHECK: llvm.dbg.value(metadata {{.*}}* %[[FIELD_X]], metadata ![[VAR_DECL_MD]]
2632 // CHECK-SAME: !DIExpression(DW_OP_deref, DW_OP_LLVM_fragment, 0, 64)
2733 // CHECK-NOT: ), !dbg ![[VAR_DECL_MD]]
34+
35+ %4 = alloc_stack $SmallStruct, var, name "small_struct", loc "file.swift":10:11, scope 1
36+ %5 = struct_element_addr %4 : $*SmallStruct, #SmallStruct.z, loc "file.swift":11:13, scope 1
37+ // CHECK: %[[FIELD_Z:.*]] = getelementptr {{.*}} %[[SMALL_STRUCT]]
38+ // If the fragment covers the whole struct, we're not generating the
39+ // DW_OP_LLVM_fragment part.
40+ // CHECK: llvm.dbg.value(metadata {{.*}}* %[[FIELD_Z]], metadata ![[SMALL_VAR_DECL_MD]]
41+ // CHECK-SAME: !DIExpression(DW_OP_deref)
42+ debug_value_addr %5 : $*Builtin.Int64, var, (name "small_struct", loc "file.swift":10:11, scope 1), type $SmallStruct, expr op_fragment:#SmallStruct.z, loc "file.swift":11:13, scope 1
43+ dealloc_stack %4 : $*SmallStruct
44+
2845 dealloc_stack %2 : $*MyStruct
2946 %r = tuple()
3047 return %r : $()
0 commit comments