Files
swift-mirror/test/APINotes/versioned.swift
Rintaro Ishizaki c9785d955d [SourceKit] Stop printing normal comments in clang generated interface
Generated interfaces for Clang modules used to try printing normal
comments between decls extracted from the header text. That was because
doc-comment was not common in C/ObjC headers. But mainly because of
"import as member feature" Clang decls aren't printed in the order as
they appear in the header file, the logic determinig which comment
belongs to which decl was not working property. We've decided to remove
that feature and only print the proper doc-comments as it has been
getting common.

rdar://93731287
2024-03-21 11:52:32 +09:00

278 lines
12 KiB
Swift

// RUN: %empty-directory(%t)
// RUN: %target-swift-ide-test -F %S/Inputs/custom-frameworks -print-module -source-filename %s -module-to-print=APINotesFrameworkTest -function-definitions=false -swift-version 5 | %FileCheck -check-prefix=CHECK-SWIFT-5 %s
// RUN: %target-swift-ide-test -F %S/Inputs/custom-frameworks -print-module -source-filename %s -module-to-print=APINotesFrameworkTest -function-definitions=false -swift-version 4 | %FileCheck -check-prefix=CHECK-SWIFT-4 %s
// CHECK-SWIFT-5: func jumpTo(x: Double, y: Double, z: Double)
// CHECK-SWIFT-4: func jumpTo(x: Double, y: Double, z: Double)
// CHECK-SWIFT-5: func accept(_ ptr: UnsafeMutablePointer<Double>)
// CHECK-SWIFT-4: func acceptPointer(_ ptr: UnsafeMutablePointer<Double>?)
// CHECK-SWIFT-5: func normallyUnchanged()
// CHECK-SWIFT-5: @available(swift, obsoleted: 4.2, renamed: "normallyUnchanged()")
// CHECK-SWIFT-5-NEXT: func normallyUnchangedButChangedInSwift4()
// CHECK-SWIFT-4: @available(swift, obsoleted: 3, renamed: "normallyUnchangedButChangedInSwift4()")
// CHECK-SWIFT-4-NEXT: func normallyUnchanged()
// CHECK-SWIFT-4: func normallyUnchangedButChangedInSwift4()
// CHECK-SWIFT-5: func normallyChanged()
// CHECK-SWIFT-5-NEXT: @available(swift, obsoleted: 4.2, renamed: "normallyChanged()")
// CHECK-SWIFT-5-NEXT: func normallyChangedButSpecialInSwift4()
// CHECK-SWIFT-5-NEXT: @available(swift, obsoleted: 3, renamed: "normallyChanged()")
// CHECK-SWIFT-5-NEXT: func normallyChangedOriginal()
// CHECK-SWIFT-4: @available(swift, introduced: 4.2, renamed: "normallyChangedButSpecialInSwift4()")
// CHECK-SWIFT-4-NEXT: func normallyChanged()
// CHECK-SWIFT-4-NEXT: func normallyChangedButSpecialInSwift4()
// CHECK-SWIFT-4-NEXT: @available(swift, obsoleted: 3, renamed: "normallyChangedButSpecialInSwift4()")
// CHECK-SWIFT-4-NEXT: func normallyChangedOriginal()
// CHECK-SWIFT-5: @available(swift, obsoleted: 4.2, renamed: "NormallyUnchangedWrapper")
// CHECK-SWIFT-5-NEXT: typealias NormallyUnchangedButChangedInSwift4Wrapper = NormallyUnchangedWrapper
// CHECK-SWIFT-5: struct NormallyUnchangedWrapper {
// CHECK-SWIFT-4: typealias NormallyUnchangedButChangedInSwift4Wrapper = NormallyUnchangedWrapper
// CHECK-SWIFT-4-NEXT: struct NormallyUnchangedWrapper {
// CHECK-SWIFT-5: @available(swift, obsoleted: 4.2, renamed: "NormallyChangedWrapper")
// CHECK-SWIFT-5-NEXT: typealias NormallyChangedButSpecialInSwift4Wrapper = NormallyChangedWrapper
// CHECK-SWIFT-5: @available(swift, obsoleted: 3, renamed: "NormallyChangedWrapper")
// CHECK-SWIFT-5-NEXT: typealias NormallyChangedOriginalWrapper = NormallyChangedWrapper
// CHECK-SWIFT-5: struct NormallyChangedWrapper {
// CHECK-SWIFT-4: typealias NormallyChangedButSpecialInSwift4Wrapper = NormallyChangedWrapper
// CHECK-SWIFT-4-NEXT: @available(swift, obsoleted: 3, renamed: "NormallyChangedButSpecialInSwift4Wrapper")
// CHECK-SWIFT-4-NEXT: typealias NormallyChangedOriginalWrapper = NormallyChangedButSpecialInSwift4Wrapper
// CHECK-SWIFT-4-NEXT: struct NormallyChangedWrapper {
// RUN: not %target-swift-frontend -typecheck -F %S/Inputs/custom-frameworks -swift-version 5 %s 2>&1 | %FileCheck -check-prefix=CHECK-DIAGS -check-prefix=CHECK-DIAGS-5 %s
// RUN: not %target-swift-frontend -typecheck -F %S/Inputs/custom-frameworks -swift-version 4 %s 2>&1 | %FileCheck -check-prefix=CHECK-DIAGS -check-prefix=CHECK-DIAGS-4 %s
// RUN: %target-swift-frontend -emit-silgen -F %S/Inputs/custom-frameworks -swift-version 4 %s -DSILGEN 2>&1 | %FileCheck -check-prefix=CHECK-SILGEN -check-prefix=CHECK-SILGEN-4 %s
// RUN: %target-swift-frontend -emit-silgen -F %S/Inputs/custom-frameworks -swift-version 5 %s -DSILGEN 2>&1 | %FileCheck -check-prefix=CHECK-SILGEN -check-prefix=CHECK-SILGEN-5 %s
import APINotesFrameworkTest
#if !SILGEN
func testRenamedTopLevelDiags() {
var value = 0.0
// CHECK-DIAGS-5-NOT: versioned.swift:[[@LINE+1]]:
accept(&value)
// CHECK-DIAGS-4: versioned.swift:[[@LINE-1]]:3: error: 'accept' has been renamed to 'acceptPointer(_:)'
// CHECK-DIAGS-4: note: 'accept' was introduced in Swift 4.2
// CHECK-DIAGS-4-NOT: versioned.swift:[[@LINE+1]]:
acceptPointer(&value)
// CHECK-DIAGS-5: versioned.swift:[[@LINE-1]]:3: error: 'acceptPointer' has been renamed to 'accept(_:)'
// CHECK-DIAGS-5: note: 'acceptPointer' was obsoleted in Swift 4.2
acceptDoublePointer(&value)
// CHECK-DIAGS: versioned.swift:[[@LINE-1]]:3: error: 'acceptDoublePointer' has been renamed to
// CHECK-DIAGS-5-SAME: 'accept(_:)'
// CHECK-DIAGS-4-SAME: 'acceptPointer(_:)'
// CHECK-DIAGS: note: 'acceptDoublePointer' was obsoleted in Swift 3
oldAcceptDoublePointer(&value)
// CHECK-DIAGS: versioned.swift:[[@LINE-1]]:3: error: 'oldAcceptDoublePointer' has been renamed to
// CHECK-DIAGS-5-SAME: 'accept(_:)'
// CHECK-DIAGS-4-SAME: 'acceptPointer(_:)'
// CHECK-DIAGS: note: 'oldAcceptDoublePointer' has been explicitly marked unavailable here
_ = SomeCStruct()
// CHECK-DIAGS: versioned.swift:[[@LINE-1]]:7: error: 'SomeCStruct' has been renamed to
// CHECK-DIAGS-5-SAME: 'VeryImportantCStruct'
// CHECK-DIAGS-4-SAME: 'ImportantCStruct'
// CHECK-DIAGS: note: 'SomeCStruct' was obsoleted in Swift 3
// CHECK-DIAGS-4-NOT: versioned.swift:[[@LINE+1]]:
_ = ImportantCStruct()
// CHECK-DIAGS-5: versioned.swift:[[@LINE-1]]:7: error: 'ImportantCStruct' has been renamed to 'VeryImportantCStruct'
// CHECK-DIAGS-5: note: 'ImportantCStruct' was obsoleted in Swift 4.2
// CHECK-DIAGS-5-NOT: versioned.swift:[[@LINE+1]]:
_ = VeryImportantCStruct()
// CHECK-DIAGS-4-NOTE: versioned.swift:[[@LINE-1]]:
// CHECK-DIAGS-4-NOT: versioned.swift:[[@LINE+1]]:
let s = InnerInSwift5()
// CHECK-DIAGS-5: versioned.swift:[[@LINE-1]]:11: error: 'InnerInSwift5' has been renamed to 'Outer.Inner'
// CHECK-DIAGS-5: note: 'InnerInSwift5' was obsoleted in Swift 4.2
_ = s.value
// CHECK-DIAGS-5-NOT: versioned.swift:[[@LINE-1]]:
// CHECK-DIAGS-5-NOT: versioned.swift:[[@LINE+1]]:
let t = Outer.Inner()
// CHECK-DIAGS-4-NOT: versioned.swift:[[@LINE-1]]:
_ = s.value
// CHECK-DIAGS-4-NOT: versioned.swift:[[@LINE-1]]:
_ = t
}
func testAKA(structValue: ImportantCStruct, aliasValue: ImportantCAlias) {
let _: Int = structValue
// CHECK-DIAGS-4: versioned.swift:[[@LINE-1]]:16: error: cannot convert value of type 'ImportantCStruct' to specified type 'Int'
let _: Int = aliasValue
// CHECK-DIAGS-4: versioned.swift:[[@LINE-1]]:16: error: cannot convert value of type 'ImportantCAlias' (aka 'Int32') to specified type 'Int'
let optStructValue: Optional = structValue
let _: Int = optStructValue
// CHECK-DIAGS-4: versioned.swift:[[@LINE-1]]:16: error: cannot convert value of type 'ImportantCStruct?' to specified type 'Int'
let optAliasValue: Optional = aliasValue
let _: Int = optAliasValue
// CHECK-DIAGS-4: versioned.swift:[[@LINE-1]]:16: error: cannot convert value of type 'ImportantCAlias?' (aka 'Optional<Int32>') to specified type 'Int'
}
func testRenamedEnumConstants() {
_ = AnonymousEnumValue // okay
// CHECK-DIAGS-5: [[@LINE+1]]:7: error: 'AnonymousEnumRenamed' has been renamed to 'AnonymousEnumRenamedSwiftUnversioned'
_ = AnonymousEnumRenamed
// CHECK-DIAGS-4: [[@LINE-1]]:7: error: 'AnonymousEnumRenamed' has been renamed to 'AnonymousEnumRenamedSwift4'
// CHECK-DIAGS-5-NOT: :[[@LINE+1]]:7:
_ = AnonymousEnumRenamedSwiftUnversioned
// CHECK-DIAGS-4: [[@LINE-1]]:7: error: 'AnonymousEnumRenamedSwiftUnversioned' has been renamed to 'AnonymousEnumRenamedSwift4'
// CHECK-DIAGS-5: [[@LINE+1]]:7: error: 'AnonymousEnumRenamedSwift4' has been renamed to 'AnonymousEnumRenamedSwiftUnversioned'
_ = AnonymousEnumRenamedSwift4
// CHECK-DIAGS-4-NOT: :[[@LINE-1]]:7:
}
func testRenamedUnknownEnum() {
_ = UnknownEnumValue // okay
// CHECK-DIAGS-5: [[@LINE+1]]:7: error: 'UnknownEnumRenamed' has been renamed to 'UnknownEnumRenamedSwiftUnversioned'
_ = UnknownEnumRenamed
// CHECK-DIAGS-4: [[@LINE-1]]:7: error: 'UnknownEnumRenamed' has been renamed to 'UnknownEnumRenamedSwift4'
// CHECK-DIAGS-5-NOT: :[[@LINE+1]]:7:
_ = UnknownEnumRenamedSwiftUnversioned
// CHECK-DIAGS-4: [[@LINE-1]]:7: error: 'UnknownEnumRenamedSwiftUnversioned' has been renamed to 'UnknownEnumRenamedSwift4'
// CHECK-DIAGS-5: [[@LINE+1]]:7: error: 'UnknownEnumRenamedSwift4' has been renamed to 'UnknownEnumRenamedSwiftUnversioned'
_ = UnknownEnumRenamedSwift4
// CHECK-DIAGS-4-NOT: :[[@LINE-1]]:7:
}
func testRenamedTrueEnum() {
// CHECK-DIAGS: [[@LINE+1]]:7: error: cannot find 'TrueEnumValue' in scope
_ = TrueEnumValue
// CHECK-DIAGS: [[@LINE+1]]:16: error: type 'TrueEnum' has no member 'TrueEnumValue'
_ = TrueEnum.TrueEnumValue
// CHECK-DIAGS: [[@LINE+1]]:16: error: 'Value' has been renamed to 'value'
_ = TrueEnum.Value
_ = TrueEnum.value // okay
// CHECK-DIAGS: [[@LINE+1]]:7: error: cannot find 'TrueEnumRenamed' in scope
_ = TrueEnumRenamed
// CHECK-DIAGS: [[@LINE+1]]:16: error: type 'TrueEnum' has no member 'TrueEnumRenamed'
_ = TrueEnum.TrueEnumRenamed
// CHECK-DIAGS-5: [[@LINE+1]]:16: error: 'Renamed' has been renamed to 'renamedSwiftUnversioned'
_ = TrueEnum.Renamed
// CHECK-DIAGS-4: [[@LINE-1]]:16: error: 'Renamed' has been renamed to 'renamedSwift4'
// CHECK-DIAGS: [[@LINE+1]]:16: error: type 'TrueEnum' has no member 'renamed'
_ = TrueEnum.renamed
// CHECK-DIAGS-5-NOT: :[[@LINE+1]]:16:
_ = TrueEnum.renamedSwiftUnversioned
// CHECK-DIAGS-4: [[@LINE-1]]:16: error: 'renamedSwiftUnversioned' has been renamed to 'renamedSwift4'
// CHECK-DIAGS-5: [[@LINE+1]]:16: error: 'renamedSwift4' has been renamed to 'renamedSwiftUnversioned'
_ = TrueEnum.renamedSwift4
// CHECK-DIAGS-4-NOT: :[[@LINE-1]]:16:
// CHECK-DIAGS: [[@LINE+1]]:7: error: cannot find 'TrueEnumAliasRenamed' in scope
_ = TrueEnumAliasRenamed
// CHECK-DIAGS: [[@LINE+1]]:16: error: type 'TrueEnum' has no member 'TrueEnumAliasRenamed'
_ = TrueEnum.TrueEnumAliasRenamed
// CHECK-DIAGS-5: [[@LINE+1]]:16: error: 'AliasRenamed' has been renamed to 'aliasRenamedSwiftUnversioned'
_ = TrueEnum.AliasRenamed
// CHECK-DIAGS-4: [[@LINE-1]]:16: error: 'AliasRenamed' has been renamed to 'aliasRenamedSwift4'
// CHECK-DIAGS: [[@LINE+1]]:16: error: type 'TrueEnum' has no member 'aliasRenamed'
_ = TrueEnum.aliasRenamed
// CHECK-DIAGS-5-NOT: :[[@LINE+1]]:16:
_ = TrueEnum.aliasRenamedSwiftUnversioned
// CHECK-DIAGS-4: [[@LINE-1]]:16: error: 'aliasRenamedSwiftUnversioned' has been renamed to 'aliasRenamedSwift4'
// CHECK-DIAGS-5: [[@LINE+1]]:16: error: 'aliasRenamedSwift4' has been renamed to 'aliasRenamedSwiftUnversioned'
_ = TrueEnum.aliasRenamedSwift4
// CHECK-DIAGS-4-NOT: :[[@LINE-1]]:16:
}
func testRenamedOptionyEnum() {
// CHECK-DIAGS: [[@LINE+1]]:7: error: cannot find 'OptionyEnumValue' in scope
_ = OptionyEnumValue
// CHECK-DIAGS: [[@LINE+1]]:19: error: type 'OptionyEnum' has no member 'OptionyEnumValue'
_ = OptionyEnum.OptionyEnumValue
// CHECK-DIAGS: [[@LINE+1]]:19: error: 'Value' has been renamed to 'value'
_ = OptionyEnum.Value
_ = OptionyEnum.value // okay
// CHECK-DIAGS: [[@LINE+1]]:7: error: cannot find 'OptionyEnumRenamed' in scope
_ = OptionyEnumRenamed
// CHECK-DIAGS: [[@LINE+1]]:19: error: type 'OptionyEnum' has no member 'OptionyEnumRenamed'
_ = OptionyEnum.OptionyEnumRenamed
// CHECK-DIAGS-5: [[@LINE+1]]:19: error: 'Renamed' has been renamed to 'renamedSwiftUnversioned'
_ = OptionyEnum.Renamed
// CHECK-DIAGS-4: [[@LINE-1]]:19: error: 'Renamed' has been renamed to 'renamedSwift4'
// CHECK-DIAGS: [[@LINE+1]]:19: error: type 'OptionyEnum' has no member 'renamed'
_ = OptionyEnum.renamed
// CHECK-DIAGS-5-NOT: :[[@LINE+1]]:19:
_ = OptionyEnum.renamedSwiftUnversioned
// CHECK-DIAGS-4: [[@LINE-1]]:19: error: 'renamedSwiftUnversioned' has been renamed to 'renamedSwift4'
// CHECK-DIAGS-5: [[@LINE+1]]:19: error: 'renamedSwift4' has been renamed to 'renamedSwiftUnversioned'
_ = OptionyEnum.renamedSwift4
// CHECK-DIAGS-4-NOT: :[[@LINE-1]]:19:
}
#endif
#if !swift(>=5)
func useSwift4Name(_: ImportantCStruct) {}
// CHECK-SILGEN-4: sil hidden [ossa] @$s9versioned13useSwift4NameyySo11SomeCStructVF
func useNewlyNested(_: InnerInSwift5) {}
// CHECK-SILGEN-4: sil hidden [ossa] @$s9versioned14useNewlyNestedyySo13InnerInSwift5VF
#endif
func useSwift5Name(_: VeryImportantCStruct) {}
// CHECK-SILGEN: sil hidden [ossa] @$s9versioned13useSwift5NameyySo11SomeCStructVF
#if swift(>=5)
func testSwiftWrapperInSwift5() {
_ = EnclosingStruct.Identifier.member
let _: EnclosingStruct.Identifier = .member
}
#else
func testSwiftWrapperInSwift4() {
_ = EnclosingStruct.Identifier.member
let _: EnclosingStruct.Identifier = .member
}
#endif