Files
swift-mirror/test/decl/ext/objc_implementation_class_extension.swift
Becca Royal-Gordon d33002cb34 Soften objcImpl selector conflict errors
The recent change to make objcImpl examine class extensions has collided with a workaround some projects were employing where they declared class extension member implementations `private`. Now that we’re checking class extensions in objcImpl extensions, this workaround is creating selector conflict errors in some circumstances. Soften selector conflict errors in objcImpl extensions to warnings so the affected projects continue to build.

Fixes rdar://123347290.
2024-02-23 21:15:17 -08:00

34 lines
2.2 KiB
Swift

// RUN: %target-typecheck-verify-swift -verify-ignore-unknown -import-underlying-module -Xcc -fmodule-map-file=%S/Inputs/objc_implementation_class_extension.modulemap
// REQUIRES: objc_interop
@_implementationOnly import objc_implementation_class_extension_internal
@_objcImplementation extension ObjCClass {
// expected-warning@-1 {{extension for main class interface should provide implementation for instance method 'method(fromHeader2:)'}}
// expected-warning@-2 {{extension for main class interface should provide implementation for property 'propertyFromHeader2'}}
// expected-warning@-3 {{extension for main class interface should provide implementation for instance method 'otherModuleExtensionMethod(fromHeader2:)'}}
// expected-warning@-4 {{extension for main class interface should provide implementation for property 'otherModuleExtensionPropertyFromHeader2'}}
// expected-warning@-5 {{extension for main class interface should provide implementation for instance method 'extensionMethod(fromHeader2:)'}}
// expected-warning@-6 {{extension for main class interface should provide implementation for property 'extensionPropertyFromHeader2'}}
@objc func method(fromHeader1: CInt) {}
@objc private func method(fromHeader2: CInt) {}
@objc var propertyFromHeader1: CInt = 1
@objc private var propertyFromHeader2: CInt = 2
@objc func extensionMethod(fromHeader1: CInt) {}
@objc private func extensionMethod(fromHeader2: CInt) {}
@objc var extensionPropertyFromHeader1: CInt = 1
@objc private var extensionPropertyFromHeader2: CInt = 2
@objc func otherModuleExtensionMethod(fromHeader1: CInt) {}
@objc private func otherModuleExtensionMethod(fromHeader2: CInt) {}
@objc var otherModuleExtensionPropertyFromHeader1: CInt = 1
@objc private var otherModuleExtensionPropertyFromHeader2: CInt = 2
// expected-warning@-1 {{getter for 'otherModuleExtensionPropertyFromHeader2' with Objective-C selector 'otherModuleExtensionPropertyFromHeader2' conflicts with previous declaration with the same Objective-C selector}}
// expected-warning@-2 {{setter for 'otherModuleExtensionPropertyFromHeader2' with Objective-C selector 'setOtherModuleExtensionPropertyFromHeader2:' conflicts with previous declaration with the same Objective-C selector}}
}