mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Update the logic selecting the most restrictive import for a given reference to account for @_exported imports from the local module. We should always prioritize @_exported imports from the local module over more restrictive same file imports. Only if an import from the same file is also public we prefer it as it's more useful for diagnostics and generally recommended to locally declare dependencies. Also update the test that was meant to check this configuration to apply two different variations, one for a module local @_exported and one relying on the underlying clang module. rdar://140924031
56 lines
2.0 KiB
Swift
56 lines
2.0 KiB
Swift
/// Test that an @_exported import is preferred to local non-public imports.
|
|
// RUN: %empty-directory(%t)
|
|
// RUN: split-file --leading-lines %s %t
|
|
|
|
/// Build the libraries.
|
|
// RUN: %target-swift-frontend -emit-module %t/TargetLib.swift -o %t
|
|
// RUN: %target-swift-frontend -emit-module %t/IndirectLib.swift -I %t -o %t
|
|
|
|
/// Check acceptable client configurations to access TargetLib publicly.
|
|
// RUN: %target-swift-frontend -typecheck -verify -I %t \
|
|
// RUN: %t/Client_ImportDirect.swift
|
|
// RUN: %target-swift-frontend -typecheck -verify -I %t \
|
|
// RUN: %t/Client_ImportDirect.swift %t/Client_FileReexport.swift
|
|
// RUN: %target-swift-frontend -typecheck -verify -I %t \
|
|
// RUN: %t/Client_ImportDirectAsPrivate.swift %t/Client_FileReexport.swift
|
|
// RUN: %target-swift-frontend -typecheck -verify -I %t \
|
|
// RUN: %t/Client_ImportIndirectModule.swift
|
|
// RUN: %target-swift-frontend -typecheck -verify -I %t \
|
|
// RUN: %t/Client_ImportIndirectModule.swift %t/Client_FileReexport.swift
|
|
// RUN: %target-swift-frontend -typecheck -verify -I %t \
|
|
// RUN: %t/Client_ImportIndirectModuleAsPrivate.swift %t/Client_FileReexport.swift
|
|
// RUN: %target-swift-frontend -typecheck -verify -I %t \
|
|
// RUN: %t/Client_ImportIndirectLocal.swift %t/Client_FileReexport.swift
|
|
|
|
//--- TargetLib.swift
|
|
public struct TargetType {
|
|
public init() {}
|
|
}
|
|
|
|
//--- IndirectLib.swift
|
|
@_exported import TargetLib
|
|
|
|
//--- Client_FileReexport.swift
|
|
@_exported public import TargetLib
|
|
|
|
//--- Client_ImportDirect.swift
|
|
public import TargetLib
|
|
public func user(t: TargetType) {}
|
|
|
|
//--- Client_ImportDirectAsPrivate.swift
|
|
fileprivate import TargetLib
|
|
public func user(t: TargetType) {}
|
|
// Unrestricted as it's @_exported elsewhere in the module
|
|
|
|
//--- Client_ImportIndirectModule.swift
|
|
public import IndirectLib
|
|
public func user(t: TargetType) {}
|
|
|
|
//--- Client_ImportIndirectModuleAsPrivate.swift
|
|
fileprivate import IndirectLib
|
|
public func user(t: TargetType) {}
|
|
// Unrestricted as it's @_exported elsewhere in the module
|
|
|
|
//--- Client_ImportIndirectLocal.swift
|
|
public func user(t: TargetType) {}
|