Files
swift-mirror/test/DebugInfo/structs.swift
Adrian Prantl ff22da20c3 Debug Info: Encode let-bindings using DW_TAG_const_type.
This allows the debugger to distinguish constant "let" values from
mutable "var" variables.

rdar://problem/16042546
2019-09-25 08:51:05 -07:00

33 lines
1.0 KiB
Swift

// RUN: %target-swift-frontend -primary-file %s -emit-ir -g -o - | %FileCheck %s
// Capture the pointer size from type Int
// CHECK: %TSi = type <{ i[[PTRSIZE:[0-9]+]] }>
struct A {
var fn : () -> ()
}
func test(_ x : A) {
var _ = x
}
// CHECK: define hidden {{.*}}void @"$s7structs4test{{[_0-9a-zA-Z]*}}F"
// CHECK: [[X_DBG:%.*]] = alloca
// CHECK: call void @llvm.dbg.declare(metadata {{.*}}* [[X_DBG]], metadata [[X_MD:!.*]], metadata
// CHECK: ![[A:.*]] = !DICompositeType(tag: DW_TAG_structure_type, name: "A",
// CHECK-SAME: identifier
class C {
var lots_of_extra_storage: (Int, Int, Int) = (1, 2, 3)
var member: C = C()
}
// CHECK: [[X_MD]] = !DILocalVariable(name: "x", arg: 1
// CHECK-SAME: type: ![[LET_A:[0-9]+]]
// CHECK: ![[LET_A]] = !DIDerivedType(tag: DW_TAG_const_type, baseType: ![[A]])
// A class is represented by a pointer, so B's total size should be PTRSIZE.
// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "B",{{.*}}size: [[PTRSIZE]]
struct B {
var c : C
}