mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Suppose module 'Foo' exists in the search paths and specifies user module version '1.0'. If the first encountered 'canImport' query is unversioned: ... Followed by a versioned one: ... The success of the first check will record an unversioned successful canImport, which will cause the second check to evaluate to 'true', which is incorrect. This change causes even unversioned 'canImport' checks to track and record the discovered user module version.
145 lines
6.9 KiB
Swift
145 lines
6.9 KiB
Swift
// RUN: %empty-directory(%t)
|
|
// RUN: %empty-directory(%t/textual)
|
|
// RUN: %empty-directory(%t/binary)
|
|
|
|
// RUN: echo "public func foo() {}" > %t/Foo.swift
|
|
// RUN: %target-swift-frontend -emit-module %t/Foo.swift -module-name Foo -swift-version 5 -disable-implicit-concurrency-module-import -user-module-version 113.330.1.2.3 -emit-module-interface-path %t/textual/Foo.swiftinterface -enable-library-evolution -emit-module-path %t/binary/Foo.swiftmodule
|
|
|
|
// RUN: %target-typecheck-verify-swift -disable-implicit-concurrency-module-import -I %t/textual
|
|
// RUN: %target-typecheck-verify-swift -disable-implicit-concurrency-module-import -I %t/binary
|
|
|
|
import Foo
|
|
|
|
func canImportVersioned() {
|
|
#if canImport(Foo, _version: 0)
|
|
let majorZero = 1 // expected-warning {{initialization of immutable value 'majorZero' was never used; consider replacing with assignment to '_' or removing it}}
|
|
#endif
|
|
|
|
#if canImport(Foo, _version: 112)
|
|
let majorSmaller = 1 // expected-warning {{initialization of immutable value 'majorSmaller' was never used; consider replacing with assignment to '_' or removing it}}
|
|
#endif
|
|
|
|
#if canImport(Foo, _version: 113)
|
|
let majorEqual = 1 // expected-warning {{initialization of immutable value 'majorEqual' was never used; consider replacing with assignment to '_' or removing it}}
|
|
#endif
|
|
|
|
#if canImport(Foo, _version: 114)
|
|
let majorLarger = 1
|
|
#endif
|
|
|
|
#if canImport(Foo, _version: 113.329)
|
|
let minorSmaller = 1 // expected-warning {{initialization of immutable value 'minorSmaller' was never used; consider replacing with assignment to '_' or removing it}}
|
|
#endif
|
|
|
|
#if canImport(Foo, _version: 113.330)
|
|
let minorEqual = 1 // expected-warning {{initialization of immutable value 'minorEqual' was never used; consider replacing with assignment to '_' or removing it}}
|
|
#endif
|
|
|
|
#if canImport(Foo, _version: 113.331)
|
|
let minorLarger = 1
|
|
#endif
|
|
|
|
#if canImport(Foo, _version: 113.330.0)
|
|
let patchSmaller = 1 // expected-warning {{initialization of immutable value 'patchSmaller' was never used; consider replacing with assignment to '_' or removing it}}
|
|
#endif
|
|
|
|
#if canImport(Foo, _version: 113.330.1)
|
|
let patchEqual = 1 // expected-warning {{initialization of immutable value 'patchEqual' was never used; consider replacing with assignment to '_' or removing it}}
|
|
#endif
|
|
|
|
#if canImport(Foo, _version: 113.330.2)
|
|
let patchLarger = 1
|
|
#endif
|
|
|
|
#if canImport(Foo, _version: 113.330.1.1)
|
|
let buildSmaller = 1 // expected-warning {{initialization of immutable value 'buildSmaller' was never used; consider replacing with assignment to '_' or removing it}}
|
|
#endif
|
|
|
|
#if canImport(Foo, _version: 113.330.1.2)
|
|
let buildEqual = 1 // expected-warning {{initialization of immutable value 'buildEqual' was never used; consider replacing with assignment to '_' or removing it}}
|
|
#endif
|
|
|
|
#if canImport(Foo, _version: 113.330.1.3)
|
|
let buildLarger = 1
|
|
#endif
|
|
|
|
#if canImport(Foo, _version: 113.330.1.2.0) // expected-warning {{trailing components of version '113.330.1.2' are ignored}}
|
|
let extraComponent = 1 // expected-warning {{initialization of immutable value 'extraComponent' was never used; consider replacing with assignment to '_' or removing it}}
|
|
#endif
|
|
|
|
#if canImport(Foo, _underlyingVersion: 113.33) // expected-warning {{cannot find user version number for Clang module 'Foo'; version number ignored}}
|
|
// TODO(ParserValidation): expected-warning@-1 *{{cannot find user version number for Clang module 'Foo'; version number ignored}}
|
|
// Foo is a Swift module with no underlying clang module.
|
|
let underlyingMinorSmaller = 1 // expected-warning {{initialization of immutable value 'underlyingMinorSmaller' was never used; consider replacing with assignment to '_' or removing it}}
|
|
#endif
|
|
|
|
#if canImport(Foo)
|
|
let noVersion = 1 // expected-warning {{initialization of immutable value 'noVersion' was never used; consider replacing with assignment to '_' or removing it}}
|
|
#endif
|
|
}
|
|
|
|
/// Test versions specified as string literals.
|
|
func canImportVersionedString() {
|
|
#if canImport(Foo, _version: "0")
|
|
let majorZero = 1 // expected-warning {{initialization of immutable value 'majorZero' was never used; consider replacing with assignment to '_' or removing it}}
|
|
#endif
|
|
|
|
#if canImport(Foo, _version: "112")
|
|
let majorSmaller = 1 // expected-warning {{initialization of immutable value 'majorSmaller' was never used; consider replacing with assignment to '_' or removing it}}
|
|
#endif
|
|
|
|
#if canImport(Foo, _version: "113")
|
|
let majorEqual = 1 // expected-warning {{initialization of immutable value 'majorEqual' was never used; consider replacing with assignment to '_' or removing it}}
|
|
#endif
|
|
|
|
#if canImport(Foo, _version: "114")
|
|
let majorLarger = 1
|
|
#endif
|
|
|
|
#if canImport(Foo, _version: "113.329")
|
|
let minorSmaller = 1 // expected-warning {{initialization of immutable value 'minorSmaller' was never used; consider replacing with assignment to '_' or removing it}}
|
|
#endif
|
|
|
|
#if canImport(Foo, _version: "113.330")
|
|
let minorEqual = 1 // expected-warning {{initialization of immutable value 'minorEqual' was never used; consider replacing with assignment to '_' or removing it}}
|
|
#endif
|
|
|
|
#if canImport(Foo, _version: "113.331")
|
|
let minorLarger = 1
|
|
#endif
|
|
|
|
#if canImport(Foo, _version: "113.330.0")
|
|
let patchSmaller = 1 // expected-warning {{initialization of immutable value 'patchSmaller' was never used; consider replacing with assignment to '_' or removing it}}
|
|
#endif
|
|
|
|
#if canImport(Foo, _version: "113.330.1")
|
|
let patchEqual = 1 // expected-warning {{initialization of immutable value 'patchEqual' was never used; consider replacing with assignment to '_' or removing it}}
|
|
#endif
|
|
|
|
#if canImport(Foo, _version: "113.330.2")
|
|
let patchLarger = 1
|
|
#endif
|
|
|
|
#if canImport(Foo, _version: "113.330.1.1")
|
|
let buildSmaller = 1 // expected-warning {{initialization of immutable value 'buildSmaller' was never used; consider replacing with assignment to '_' or removing it}}
|
|
#endif
|
|
|
|
#if canImport(Foo, _version: "113.330.1.2")
|
|
let buildEqual = 1 // expected-warning {{initialization of immutable value 'buildEqual' was never used; consider replacing with assignment to '_' or removing it}}
|
|
#endif
|
|
|
|
#if canImport(Foo, _version: "113.330.1.3")
|
|
let buildLarger = 1
|
|
#endif
|
|
|
|
#if canImport(Foo, _version: "113.330.1.2.0") // expected-warning {{trailing components of version '113.330.1.2' are ignored}}
|
|
let extraComponent = 1 // expected-warning {{initialization of immutable value 'extraComponent' was never used; consider replacing with assignment to '_' or removing it}}
|
|
#endif
|
|
|
|
#if canImport(Foo, _underlyingVersion: "113.33") // expected-warning {{cannot find user version number for Clang module 'Foo'; version number ignored}}
|
|
// TODO(ParserValidation): expected-warning@-1 *{{cannot find user version number for Clang module 'Foo'; version number ignored}}
|
|
// Foo is a Swift module with no underlying clang module.
|
|
let underlyingMinorSmaller = 1 // expected-warning {{initialization of immutable value 'underlyingMinorSmaller' was never used; consider replacing with assignment to '_' or removing it}}
|
|
#endif
|
|
}
|