// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) %s -typecheck -verify // REQUIRES: objc_interop import Foundation class NotCopyable {} class CopyableClass : NSCopying { @objc(copyWithZone:) func copy(with zone: NSZone?) -> Any { return self } } @NSCopying // expected-error {{@NSCopying may only be used on 'var' declarations}} func copyFunction() {} @NSCopying // expected-error {{@NSCopying may only be used on 'var' declarations}} struct CopyingStruct { @NSCopying var x : CopyableClass // expected-error {{'@NSCopying' may only be used on properties in classes}} } class CopyingClassTest { // These are ok. @NSCopying var p1 : CopyableClass @NSCopying var p1o : CopyableClass? @NSCopying var p1uo : CopyableClass! @NSCopying weak var p1w : CopyableClass? // These are not. @NSCopying let invalidLet : CopyableClass // expected-error {{'@NSCopying' requires property to be mutable}} @NSCopying var computed : CopyableClass { get {} set {} } // expected-error {{'@NSCopying' is only valid on stored properties}} @NSCopying var notClass : Int // expected-error {{'@NSCopying' is only valid with types that conform to the NSCopying protocol}} @NSCopying var x : NotCopyable // expected-error {{'@NSCopying' is only valid with types that conform to the NSCopying protocol}} init() {} }