blob: 383ae83945e9bcdf20305484a778d4bf3a947019 [file] [log] [blame]
// RUN: %empty-directory(%t)
// RUN: %target-swift-frontend -emit-module -o %t/BADLibrary.swiftmodule %S/Inputs/implementation-only-import-in-decls-helper.swift
// RUN: %target-typecheck-verify-swift -I %t -enable-library-evolution
@_implementationOnly import BADLibrary
public struct PublicStructStoredProperties {
public var publiclyBad: BadStruct? // expected-error {{cannot use 'BadStruct' here; 'BADLibrary' has been imported as '@_implementationOnly'}}
internal var internallyBad: BadStruct? // okay
private var privatelyBad: BadStruct? // okay
private let letIsLikeVar = [BadStruct]() // okay
private var computedIsOkay: BadStruct? { return nil } // okay
private static var staticIsOkay: BadStruct? // okay
@usableFromInline internal var computedUFIIsNot: BadStruct? { return nil } // expected-error {{cannot use 'BadStruct' here; 'BADLibrary' has been imported as '@_implementationOnly'}}
}
@usableFromInline internal struct UFIStructStoredProperties {
@usableFromInline var publiclyBad: BadStruct? // expected-error {{cannot use 'BadStruct' here; 'BADLibrary' has been imported as '@_implementationOnly'}}
internal var internallyBad: BadStruct? // okay
private var privatelyBad: BadStruct? // okay
private let letIsLikeVar = [BadStruct]() // okay
private var computedIsOkay: BadStruct? { return nil } // okay
private static var staticIsOkay: BadStruct? // okay
@usableFromInline internal var computedUFIIsNot: BadStruct? { return nil } // expected-error {{cannot use 'BadStruct' here; 'BADLibrary' has been imported as '@_implementationOnly'}}
}
public class PublicClassStoredProperties {
public var publiclyBad: BadStruct? // expected-error {{cannot use 'BadStruct' here; 'BADLibrary' has been imported as '@_implementationOnly'}}
internal var internallyBad: BadStruct? // okay
private var privatelyBad: BadStruct? // okay
private let letIsLikeVar = [BadStruct]() // okay
private var computedIsOkay: BadStruct? { return nil } // okay
private static var staticIsOkay: BadStruct? // okay
@usableFromInline internal var computedUFIIsNot: BadStruct? { return nil } // expected-error {{cannot use 'BadStruct' here; 'BADLibrary' has been imported as '@_implementationOnly'}}
}
// MARK: Frozen types
@_fixed_layout
public struct FrozenPublicStructStoredProperties {
public var publiclyBad: BadStruct? // expected-error {{cannot use 'BadStruct' here; 'BADLibrary' has been imported as '@_implementationOnly'}}
internal var internallyBad: BadStruct? // expected-error {{cannot use 'BadStruct' here; 'BADLibrary' has been imported as '@_implementationOnly'}}
private var privatelyBad: BadStruct? // expected-error {{cannot use 'BadStruct' here; 'BADLibrary' has been imported as '@_implementationOnly'}}
private let letIsLikeVar: [BadStruct] = [] // expected-error {{cannot use 'BadStruct' here; 'BADLibrary' has been imported as '@_implementationOnly'}}
private var computedIsOkay: BadStruct? { return nil } // okay
private static var staticIsOkay: BadStruct? // okay
@usableFromInline internal var computedUFIIsNot: BadStruct? { return nil } // expected-error {{cannot use 'BadStruct' here; 'BADLibrary' has been imported as '@_implementationOnly'}}
}
@_fixed_layout
@usableFromInline internal struct FrozenUFIStructStoredProperties {
@usableFromInline var publiclyBad: BadStruct? // expected-error {{cannot use 'BadStruct' here; 'BADLibrary' has been imported as '@_implementationOnly'}}
internal var internallyBad: BadStruct? // expected-error {{cannot use 'BadStruct' here; 'BADLibrary' has been imported as '@_implementationOnly'}}
private var privatelyBad: BadStruct? // expected-error {{cannot use 'BadStruct' here; 'BADLibrary' has been imported as '@_implementationOnly'}}
private let letIsLikeVar: [BadStruct] = [] // expected-error {{cannot use 'BadStruct' here; 'BADLibrary' has been imported as '@_implementationOnly'}}
private var computedIsOkay: BadStruct? { return nil } // okay
private static var staticIsOkay: BadStruct? // okay
@usableFromInline internal var computedUFIIsNot: BadStruct? { return nil } // expected-error {{cannot use 'BadStruct' here; 'BADLibrary' has been imported as '@_implementationOnly'}}
}
@_fixed_layout
public class FrozenPublicClassStoredProperties {
public var publiclyBad: BadStruct? // expected-error {{cannot use 'BadStruct' here; 'BADLibrary' has been imported as '@_implementationOnly'}}
internal var internallyBad: BadStruct? // expected-error {{cannot use 'BadStruct' here; 'BADLibrary' has been imported as '@_implementationOnly'}}
private var privatelyBad: BadStruct? // expected-error {{cannot use 'BadStruct' here; 'BADLibrary' has been imported as '@_implementationOnly'}}
private let letIsLikeVar: [BadStruct] = [] // expected-error {{cannot use 'BadStruct' here; 'BADLibrary' has been imported as '@_implementationOnly'}}
private var computedIsOkay: BadStruct? { return nil } // okay
private static var staticIsOkay: BadStruct? // okay
@usableFromInline internal var computedUFIIsNot: BadStruct? { return nil } // expected-error {{cannot use 'BadStruct' here; 'BADLibrary' has been imported as '@_implementationOnly'}}
}