mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
This cleanup allows for more consistent debug info emission since we depend less on IRGen magic to emit debug info for types.
87 lines
3.6 KiB
Swift
87 lines
3.6 KiB
Swift
// RUN: %target-swift-frontend -emit-ir -g %s -o %t.ll
|
|
// RUN: %FileCheck %s --check-prefix IMPORT-CHECK < %t.ll
|
|
// RUN: %FileCheck %s --check-prefix LOC-CHECK < %t.ll
|
|
// RUN: %FileCheck %s --check-prefix ALLOCCTOR-CHECK < %t.ll
|
|
// RUN: llc %t.ll -filetype=obj -o %t.o
|
|
// RUN: %llvm-dwarfdump %t.o | %FileCheck %s --check-prefix DWARF-CHECK
|
|
// RUN: %llvm-dwarfdump --verify %t.o
|
|
|
|
// REQUIRES: OS=macosx
|
|
|
|
import ObjectiveC
|
|
import Foundation
|
|
|
|
class MyObject : NSObject {
|
|
// Ensure we don't emit linetable entries for ObjC thunks.
|
|
// LOC-CHECK: define {{.*}} @"$s4main8MyObjectC0B3ArrSo7NSArrayCvgTo"
|
|
// LOC-CHECK: ret {{.*}}, !dbg ![[DBG:.*]]
|
|
// LOC-CHECK: ret
|
|
@objc var MyArr = NSArray()
|
|
// IMPORT-CHECK: filename: "{{.*}}test-foundation.swift"
|
|
// IMPORT-CHECK-DAG: [[FOUNDATION:[0-9]+]] = !DIModule({{.*}} name: "Foundation",{{.*}} includePath: {{.*}}Foundation.framework"
|
|
// IMPORT-CHECK-DAG: [[OVERLAY:[0-9]+]] = !DIModule({{.*}} name: "Foundation",{{.*}} includePath: {{.*}}Foundation.swiftmodule
|
|
// IMPORT-CHECK-DAG: !DICompositeType(tag: DW_TAG_structure_type, name: "NSArray", scope: ![[NSARRAY:[0-9]+]]
|
|
// IMPORT-CHECK-DAG: ![[NSARRAY]] = !DIModule(scope: ![[FOUNDATION:[0-9]+]], name: "NSArray"
|
|
// We actually imported the Foundation SDK overlay and not the Clang module
|
|
// directly.
|
|
// IMPORT-CHECK-DAG: !DIImportedEntity(tag: DW_TAG_imported_module, {{.*}}entity: ![[OVERLAY]]
|
|
|
|
// ALLOCCTOR-CHECK: distinct !DISubprogram(name: "init", linkageName: "$sSo7NSArrayCABycfC"
|
|
// ALLOCCTOR-CHECK-SAME: file: ![[F:[0-9]+]],
|
|
// ALLOCCTOR-CHECK: ![[F]] = !DIFile(filename: "{{.*}}/NSArray.h",
|
|
@objc func foo(_ obj: MyObject) {
|
|
return obj.foo(obj)
|
|
}
|
|
}
|
|
|
|
// SANITY-DAG: !DISubprogram(name: "blah",{{.*}} line: [[@LINE+2]],{{.*}} DISPFlagDefinition
|
|
extension MyObject {
|
|
@objc func blah() {
|
|
var _ = MyObject()
|
|
}
|
|
}
|
|
|
|
// SANITY-DAG: ![[NSOBJECT:.*]] = !DICompositeType(tag: DW_TAG_structure_type, name: "NSObject",{{.*}} identifier: "$sSo8NSObjectC"
|
|
// SANITY-DAG: !DIGlobalVariable(name: "NsObj",{{.*}} line: [[@LINE+1]],{{.*}} type: ![[NSOBJECT]],{{.*}} DISPFlagDefinition
|
|
var NsObj: NSObject
|
|
NsObj = MyObject()
|
|
var MyObj: MyObject
|
|
MyObj = NsObj as! MyObject
|
|
MyObj.blah()
|
|
|
|
public func err() {
|
|
// DWARF-CHECK: DW_AT_name ("NSError")
|
|
// DWARF-CHECK: DW_AT_linkage_name{{.*}}$sSo7NSErrorC
|
|
let _ = NSError(domain: "myDomain", code: 4,
|
|
userInfo: ["a":1,
|
|
"b":2,
|
|
"c":3])
|
|
}
|
|
|
|
// LOC-CHECK: define {{.*}}4date
|
|
public func date() {
|
|
// LOC-CHECK: call {{.*}} @"$sSS21_builtinStringLiteral17utf8CodeUnitCount7isASCIISSBp_BwBi1_tcfC{{.*}}, !dbg ![[L1:.*]]
|
|
let d1 = DateFormatter()
|
|
d1.dateFormat = "dd. mm. yyyy" // LOC-CHECK: call{{.*}}objc_msgSend{{.*}}, !dbg ![[L2:.*]]
|
|
// LOC-CHECK: call {{.*}} @"$sSS21_builtinStringLiteral17utf8CodeUnitCount7isASCIISSBp_BwBi1_tcfC{{.*}}, !dbg ![[L3:.*]]
|
|
let d2 = DateFormatter()
|
|
d2.dateFormat = "mm dd yyyy" // LOC-CHECK: call{{.*}}objc_msgSend{{.*}}, !dbg ![[L4:.*]]
|
|
}
|
|
|
|
// Make sure we build some witness tables for enums.
|
|
func useOptions(_ opt: URL.BookmarkCreationOptions)
|
|
-> URL.BookmarkCreationOptions {
|
|
return [opt, opt]
|
|
}
|
|
|
|
// LOC-CHECK: ![[THUNK:.*]] = distinct !DISubprogram({{.*}}linkageName: "$s4main8MyObjectC0B3ArrSo7NSArrayCvgTo"
|
|
// LOC-CHECK-NOT: line:
|
|
// LOC-CHECK-SAME: DISPFlagDefinition
|
|
// LOC-CHECK: ![[DBG]] = !DILocation(line: 0, scope: ![[THUNK]])
|
|
|
|
// These debug locations should all be in ordered by increasing line number.
|
|
// LOC-CHECK: ![[L1]] =
|
|
// LOC-CHECK: ![[L2]] =
|
|
// LOC-CHECK: ![[L3]] =
|
|
// LOC-CHECK: ![[L4]] =
|