From 79e2060aa6741045dc7b3c79cd5f3cb3b3bdf766 Mon Sep 17 00:00:00 2001 From: Robert Widmann Date: Mon, 9 Nov 2020 16:56:54 -0800 Subject: [PATCH] Exempt Swift Interface Files From Whole-Module ObjC Errors We don't expect swiftinterface files to have anything meaningful to report from these checks anyhow - they will have been run at module generation time anyways. In fact, the linked radar demonstrates how this kind of checking can be detrimental to the usability of the compiler. The test committed here declares the CoreFeatures framework, an Objective-c (root) class and a set of Objective-C protocols. Now for the fun part: The Objective-C class is made to conform to the Objective-C protocols in a Swift extension. This extension is then printed into the generated CoreFeatures-Swift header and made available to clients of the module. Now, because we have an Objective-C protocol and a base class that is imported from Objective-C, we mirror-in the members of RootProtocol. The sum total of the monster we have built is that we now have a Swift class that implements some requirements, and an Objective-C protocol that has requirements mirrored into that same class. The result is a raft of spurious selector conflict diagnostics that the user cannot work around unless they own both the class and the protocol. Exempt swiftinterface files from this checking. rdar://69550935 --- lib/Sema/TypeCheckDeclObjC.cpp | 1 + lib/Sema/TypeChecker.cpp | 16 +- .../CoreFeatures.framework/CoreFeatures | 1 + .../CoreFeatures.framework/Headers | 1 + .../CoreFeatures.framework/Modules | 1 + .../Versions/A/CoreFeatures | Bin 0 -> 168576 bytes .../Versions/A/Headers/CoreFeatures-Swift.h | 442 ++++++++++++++++++ .../Versions/A/Headers/CoreFeatures.h | 1 + .../Versions/A/Headers/RootObject.h | 14 + .../arm64-apple-macos.swiftdoc | Bin 0 -> 384 bytes .../arm64-apple-macos.swiftinterface | 8 + .../CoreFeatures.swiftmodule/arm64.swiftdoc | Bin 0 -> 384 bytes .../arm64.swiftinterface | 8 + .../x86_64-apple-macos.swiftdoc | Bin 0 -> 384 bytes .../x86_64-apple-macos.swiftinterface | 8 + .../CoreFeatures.swiftmodule/x86_64.swiftdoc | Bin 0 -> 384 bytes .../x86_64.swiftinterface | 8 + .../Versions/A/Modules/module.modulemap | 11 + .../CoreFeatures.framework/Versions/Current | 1 + test/ClangImporter/requirement-conflict.swift | 28 ++ 20 files changed, 546 insertions(+), 3 deletions(-) create mode 120000 test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/CoreFeatures create mode 120000 test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Headers create mode 120000 test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Modules create mode 100755 test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/A/CoreFeatures create mode 100644 test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/A/Headers/CoreFeatures-Swift.h create mode 100644 test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/A/Headers/CoreFeatures.h create mode 100644 test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/A/Headers/RootObject.h create mode 100644 test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/A/Modules/CoreFeatures.swiftmodule/arm64-apple-macos.swiftdoc create mode 100644 test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/A/Modules/CoreFeatures.swiftmodule/arm64-apple-macos.swiftinterface create mode 100644 test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/A/Modules/CoreFeatures.swiftmodule/arm64.swiftdoc create mode 100644 test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/A/Modules/CoreFeatures.swiftmodule/arm64.swiftinterface create mode 100644 test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/A/Modules/CoreFeatures.swiftmodule/x86_64-apple-macos.swiftdoc create mode 100644 test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/A/Modules/CoreFeatures.swiftmodule/x86_64-apple-macos.swiftinterface create mode 100644 test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/A/Modules/CoreFeatures.swiftmodule/x86_64.swiftdoc create mode 100644 test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/A/Modules/CoreFeatures.swiftmodule/x86_64.swiftinterface create mode 100644 test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/A/Modules/module.modulemap create mode 120000 test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/Current create mode 100644 test/ClangImporter/requirement-conflict.swift diff --git a/lib/Sema/TypeCheckDeclObjC.cpp b/lib/Sema/TypeCheckDeclObjC.cpp index 230c2765080c8..a6316accce16d 100644 --- a/lib/Sema/TypeCheckDeclObjC.cpp +++ b/lib/Sema/TypeCheckDeclObjC.cpp @@ -2387,6 +2387,7 @@ bool swift::diagnoseObjCUnsatisfiedOptReqConflicts(SourceFile &sf) { break; } } + assert(req != bestConflict && "requirement conflicts with itself?"); // Diagnose the conflict. auto reqDiagInfo = getObjCMethodDiagInfo(unsatisfied.second); diff --git a/lib/Sema/TypeChecker.cpp b/lib/Sema/TypeChecker.cpp index 9d6f9b02d6753..d8806c5b8e4e2 100644 --- a/lib/Sema/TypeChecker.cpp +++ b/lib/Sema/TypeChecker.cpp @@ -344,9 +344,19 @@ void swift::performWholeModuleTypeChecking(SourceFile &SF) { auto &Ctx = SF.getASTContext(); FrontendStatsTracer tracer(Ctx.Stats, "perform-whole-module-type-checking"); - diagnoseObjCMethodConflicts(SF); - diagnoseObjCUnsatisfiedOptReqConflicts(SF); - diagnoseUnintendedObjCMethodOverrides(SF); + switch (SF.Kind) { + case SourceFileKind::Library: + case SourceFileKind::Main: + diagnoseObjCMethodConflicts(SF); + diagnoseObjCUnsatisfiedOptReqConflicts(SF); + diagnoseUnintendedObjCMethodOverrides(SF); + return; + case SourceFileKind::SIL: + case SourceFileKind::Interface: + // SIL modules and .swiftinterface files don't benefit from whole-module + // ObjC checking - skip it. + return; + } } bool swift::isAdditiveArithmeticConformanceDerivationEnabled(SourceFile &SF) { diff --git a/test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/CoreFeatures b/test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/CoreFeatures new file mode 120000 index 0000000000000..085f649ae9452 --- /dev/null +++ b/test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/CoreFeatures @@ -0,0 +1 @@ +Versions/Current/CoreFeatures \ No newline at end of file diff --git a/test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Headers b/test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Headers new file mode 120000 index 0000000000000..a177d2a6b9260 --- /dev/null +++ b/test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Headers @@ -0,0 +1 @@ +Versions/Current/Headers \ No newline at end of file diff --git a/test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Modules b/test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Modules new file mode 120000 index 0000000000000..5736f3186e797 --- /dev/null +++ b/test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Modules @@ -0,0 +1 @@ +Versions/Current/Modules \ No newline at end of file diff --git a/test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/A/CoreFeatures b/test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/A/CoreFeatures new file mode 100755 index 0000000000000000000000000000000000000000..c417011291284777ddbba441e6760febc30a16ab GIT binary patch literal 168576 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 WfB*=900@8p2!H?xfWZF)0{;uWs}-66 literal 0 HcmV?d00001 diff --git a/test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/A/Headers/CoreFeatures-Swift.h b/test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/A/Headers/CoreFeatures-Swift.h new file mode 100644 index 0000000000000..9c19c04a68a59 --- /dev/null +++ b/test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/A/Headers/CoreFeatures-Swift.h @@ -0,0 +1,442 @@ +#if 0 +#elif defined(__arm64__) && __arm64__ +// Generated by Apple Swift version 5.3 (swiftlang-1200.0.29.2 clang-1200.0.30.1) +#ifndef COREFEATURES_SWIFT_H +#define COREFEATURES_SWIFT_H +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgcc-compat" + +#if !defined(__has_include) +# define __has_include(x) 0 +#endif +#if !defined(__has_attribute) +# define __has_attribute(x) 0 +#endif +#if !defined(__has_feature) +# define __has_feature(x) 0 +#endif +#if !defined(__has_warning) +# define __has_warning(x) 0 +#endif + +#if __has_include() +# include +#endif + +#pragma clang diagnostic ignored "-Wauto-import" +#include +#include +#include +#include + +#if !defined(SWIFT_TYPEDEFS) +# define SWIFT_TYPEDEFS 1 +# if __has_include() +# include +# elif !defined(__cplusplus) +typedef uint_least16_t char16_t; +typedef uint_least32_t char32_t; +# endif +typedef float swift_float2 __attribute__((__ext_vector_type__(2))); +typedef float swift_float3 __attribute__((__ext_vector_type__(3))); +typedef float swift_float4 __attribute__((__ext_vector_type__(4))); +typedef double swift_double2 __attribute__((__ext_vector_type__(2))); +typedef double swift_double3 __attribute__((__ext_vector_type__(3))); +typedef double swift_double4 __attribute__((__ext_vector_type__(4))); +typedef int swift_int2 __attribute__((__ext_vector_type__(2))); +typedef int swift_int3 __attribute__((__ext_vector_type__(3))); +typedef int swift_int4 __attribute__((__ext_vector_type__(4))); +typedef unsigned int swift_uint2 __attribute__((__ext_vector_type__(2))); +typedef unsigned int swift_uint3 __attribute__((__ext_vector_type__(3))); +typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4))); +#endif + +#if !defined(SWIFT_PASTE) +# define SWIFT_PASTE_HELPER(x, y) x##y +# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y) +#endif +#if !defined(SWIFT_METATYPE) +# define SWIFT_METATYPE(X) Class +#endif +#if !defined(SWIFT_CLASS_PROPERTY) +# if __has_feature(objc_class_property) +# define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__ +# else +# define SWIFT_CLASS_PROPERTY(...) +# endif +#endif + +#if __has_attribute(objc_runtime_name) +# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X))) +#else +# define SWIFT_RUNTIME_NAME(X) +#endif +#if __has_attribute(swift_name) +# define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X))) +#else +# define SWIFT_COMPILE_NAME(X) +#endif +#if __has_attribute(objc_method_family) +# define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X))) +#else +# define SWIFT_METHOD_FAMILY(X) +#endif +#if __has_attribute(noescape) +# define SWIFT_NOESCAPE __attribute__((noescape)) +#else +# define SWIFT_NOESCAPE +#endif +#if __has_attribute(ns_consumed) +# define SWIFT_RELEASES_ARGUMENT __attribute__((ns_consumed)) +#else +# define SWIFT_RELEASES_ARGUMENT +#endif +#if __has_attribute(warn_unused_result) +# define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) +#else +# define SWIFT_WARN_UNUSED_RESULT +#endif +#if __has_attribute(noreturn) +# define SWIFT_NORETURN __attribute__((noreturn)) +#else +# define SWIFT_NORETURN +#endif +#if !defined(SWIFT_CLASS_EXTRA) +# define SWIFT_CLASS_EXTRA +#endif +#if !defined(SWIFT_PROTOCOL_EXTRA) +# define SWIFT_PROTOCOL_EXTRA +#endif +#if !defined(SWIFT_ENUM_EXTRA) +# define SWIFT_ENUM_EXTRA +#endif +#if !defined(SWIFT_CLASS) +# if __has_attribute(objc_subclassing_restricted) +# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA +# define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA +# else +# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA +# define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA +# endif +#endif +#if !defined(SWIFT_RESILIENT_CLASS) +# if __has_attribute(objc_class_stub) +# define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME) __attribute__((objc_class_stub)) +# define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_class_stub)) SWIFT_CLASS_NAMED(SWIFT_NAME) +# else +# define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME) +# define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) SWIFT_CLASS_NAMED(SWIFT_NAME) +# endif +#endif + +#if !defined(SWIFT_PROTOCOL) +# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA +# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA +#endif + +#if !defined(SWIFT_EXTENSION) +# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__) +#endif + +#if !defined(OBJC_DESIGNATED_INITIALIZER) +# if __has_attribute(objc_designated_initializer) +# define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) +# else +# define OBJC_DESIGNATED_INITIALIZER +# endif +#endif +#if !defined(SWIFT_ENUM_ATTR) +# if defined(__has_attribute) && __has_attribute(enum_extensibility) +# define SWIFT_ENUM_ATTR(_extensibility) __attribute__((enum_extensibility(_extensibility))) +# else +# define SWIFT_ENUM_ATTR(_extensibility) +# endif +#endif +#if !defined(SWIFT_ENUM) +# define SWIFT_ENUM(_type, _name, _extensibility) enum _name : _type _name; enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type +# if __has_feature(generalized_swift_name) +# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type +# else +# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility) +# endif +#endif +#if !defined(SWIFT_UNAVAILABLE) +# define SWIFT_UNAVAILABLE __attribute__((unavailable)) +#endif +#if !defined(SWIFT_UNAVAILABLE_MSG) +# define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg))) +#endif +#if !defined(SWIFT_AVAILABILITY) +# define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__))) +#endif +#if !defined(SWIFT_WEAK_IMPORT) +# define SWIFT_WEAK_IMPORT __attribute__((weak_import)) +#endif +#if !defined(SWIFT_DEPRECATED) +# define SWIFT_DEPRECATED __attribute__((deprecated)) +#endif +#if !defined(SWIFT_DEPRECATED_MSG) +# define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__))) +#endif +#if __has_feature(attribute_diagnose_if_objc) +# define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning"))) +#else +# define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg) +#endif +#if !defined(IBSegueAction) +# define IBSegueAction +#endif +#if __has_feature(modules) +#if __has_warning("-Watimport-in-framework-header") +#pragma clang diagnostic ignored "-Watimport-in-framework-header" +#endif +#endif + +#import + +#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch" +#pragma clang diagnostic ignored "-Wduplicate-method-arg" +#if __has_warning("-Wpragma-clang-attribute") +# pragma clang diagnostic ignored "-Wpragma-clang-attribute" +#endif +#pragma clang diagnostic ignored "-Wunknown-pragmas" +#pragma clang diagnostic ignored "-Wnullability" + +#if __has_attribute(external_source_symbol) +# pragma push_macro("any") +# undef any +# pragma clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in="CoreFeatures",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol)) +# pragma pop_macro("any") +#endif + + +@interface RootObject (SWIFT_EXTENSION(CoreFeatures)) +@end + +#if __has_attribute(external_source_symbol) +# pragma clang attribute pop +#endif +#pragma clang diagnostic pop +#endif + +#elif defined(__x86_64__) && __x86_64__ +// Generated by Apple Swift version 5.3 (swiftlang-1200.0.29.2 clang-1200.0.30.1) +#ifndef COREFEATURES_SWIFT_H +#define COREFEATURES_SWIFT_H +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgcc-compat" + +#if !defined(__has_include) +# define __has_include(x) 0 +#endif +#if !defined(__has_attribute) +# define __has_attribute(x) 0 +#endif +#if !defined(__has_feature) +# define __has_feature(x) 0 +#endif +#if !defined(__has_warning) +# define __has_warning(x) 0 +#endif + +#if __has_include() +# include +#endif + +#pragma clang diagnostic ignored "-Wauto-import" +#include +#include +#include +#include + +#if !defined(SWIFT_TYPEDEFS) +# define SWIFT_TYPEDEFS 1 +# if __has_include() +# include +# elif !defined(__cplusplus) +typedef uint_least16_t char16_t; +typedef uint_least32_t char32_t; +# endif +typedef float swift_float2 __attribute__((__ext_vector_type__(2))); +typedef float swift_float3 __attribute__((__ext_vector_type__(3))); +typedef float swift_float4 __attribute__((__ext_vector_type__(4))); +typedef double swift_double2 __attribute__((__ext_vector_type__(2))); +typedef double swift_double3 __attribute__((__ext_vector_type__(3))); +typedef double swift_double4 __attribute__((__ext_vector_type__(4))); +typedef int swift_int2 __attribute__((__ext_vector_type__(2))); +typedef int swift_int3 __attribute__((__ext_vector_type__(3))); +typedef int swift_int4 __attribute__((__ext_vector_type__(4))); +typedef unsigned int swift_uint2 __attribute__((__ext_vector_type__(2))); +typedef unsigned int swift_uint3 __attribute__((__ext_vector_type__(3))); +typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4))); +#endif + +#if !defined(SWIFT_PASTE) +# define SWIFT_PASTE_HELPER(x, y) x##y +# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y) +#endif +#if !defined(SWIFT_METATYPE) +# define SWIFT_METATYPE(X) Class +#endif +#if !defined(SWIFT_CLASS_PROPERTY) +# if __has_feature(objc_class_property) +# define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__ +# else +# define SWIFT_CLASS_PROPERTY(...) +# endif +#endif + +#if __has_attribute(objc_runtime_name) +# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X))) +#else +# define SWIFT_RUNTIME_NAME(X) +#endif +#if __has_attribute(swift_name) +# define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X))) +#else +# define SWIFT_COMPILE_NAME(X) +#endif +#if __has_attribute(objc_method_family) +# define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X))) +#else +# define SWIFT_METHOD_FAMILY(X) +#endif +#if __has_attribute(noescape) +# define SWIFT_NOESCAPE __attribute__((noescape)) +#else +# define SWIFT_NOESCAPE +#endif +#if __has_attribute(ns_consumed) +# define SWIFT_RELEASES_ARGUMENT __attribute__((ns_consumed)) +#else +# define SWIFT_RELEASES_ARGUMENT +#endif +#if __has_attribute(warn_unused_result) +# define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) +#else +# define SWIFT_WARN_UNUSED_RESULT +#endif +#if __has_attribute(noreturn) +# define SWIFT_NORETURN __attribute__((noreturn)) +#else +# define SWIFT_NORETURN +#endif +#if !defined(SWIFT_CLASS_EXTRA) +# define SWIFT_CLASS_EXTRA +#endif +#if !defined(SWIFT_PROTOCOL_EXTRA) +# define SWIFT_PROTOCOL_EXTRA +#endif +#if !defined(SWIFT_ENUM_EXTRA) +# define SWIFT_ENUM_EXTRA +#endif +#if !defined(SWIFT_CLASS) +# if __has_attribute(objc_subclassing_restricted) +# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA +# define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA +# else +# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA +# define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA +# endif +#endif +#if !defined(SWIFT_RESILIENT_CLASS) +# if __has_attribute(objc_class_stub) +# define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME) __attribute__((objc_class_stub)) +# define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_class_stub)) SWIFT_CLASS_NAMED(SWIFT_NAME) +# else +# define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME) +# define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) SWIFT_CLASS_NAMED(SWIFT_NAME) +# endif +#endif + +#if !defined(SWIFT_PROTOCOL) +# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA +# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA +#endif + +#if !defined(SWIFT_EXTENSION) +# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__) +#endif + +#if !defined(OBJC_DESIGNATED_INITIALIZER) +# if __has_attribute(objc_designated_initializer) +# define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) +# else +# define OBJC_DESIGNATED_INITIALIZER +# endif +#endif +#if !defined(SWIFT_ENUM_ATTR) +# if defined(__has_attribute) && __has_attribute(enum_extensibility) +# define SWIFT_ENUM_ATTR(_extensibility) __attribute__((enum_extensibility(_extensibility))) +# else +# define SWIFT_ENUM_ATTR(_extensibility) +# endif +#endif +#if !defined(SWIFT_ENUM) +# define SWIFT_ENUM(_type, _name, _extensibility) enum _name : _type _name; enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type +# if __has_feature(generalized_swift_name) +# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type +# else +# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility) +# endif +#endif +#if !defined(SWIFT_UNAVAILABLE) +# define SWIFT_UNAVAILABLE __attribute__((unavailable)) +#endif +#if !defined(SWIFT_UNAVAILABLE_MSG) +# define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg))) +#endif +#if !defined(SWIFT_AVAILABILITY) +# define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__))) +#endif +#if !defined(SWIFT_WEAK_IMPORT) +# define SWIFT_WEAK_IMPORT __attribute__((weak_import)) +#endif +#if !defined(SWIFT_DEPRECATED) +# define SWIFT_DEPRECATED __attribute__((deprecated)) +#endif +#if !defined(SWIFT_DEPRECATED_MSG) +# define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__))) +#endif +#if __has_feature(attribute_diagnose_if_objc) +# define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning"))) +#else +# define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg) +#endif +#if !defined(IBSegueAction) +# define IBSegueAction +#endif +#if __has_feature(modules) +#if __has_warning("-Watimport-in-framework-header") +#pragma clang diagnostic ignored "-Watimport-in-framework-header" +#endif +#endif + +#import + +#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch" +#pragma clang diagnostic ignored "-Wduplicate-method-arg" +#if __has_warning("-Wpragma-clang-attribute") +# pragma clang diagnostic ignored "-Wpragma-clang-attribute" +#endif +#pragma clang diagnostic ignored "-Wunknown-pragmas" +#pragma clang diagnostic ignored "-Wnullability" + +#if __has_attribute(external_source_symbol) +# pragma push_macro("any") +# undef any +# pragma clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in="CoreFeatures",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol)) +# pragma pop_macro("any") +#endif + + +@interface RootObject (SWIFT_EXTENSION(CoreFeatures)) +@end + +#if __has_attribute(external_source_symbol) +# pragma clang attribute pop +#endif +#pragma clang diagnostic pop +#endif + +#endif diff --git a/test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/A/Headers/CoreFeatures.h b/test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/A/Headers/CoreFeatures.h new file mode 100644 index 0000000000000..e160d0014e86a --- /dev/null +++ b/test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/A/Headers/CoreFeatures.h @@ -0,0 +1 @@ +#import diff --git a/test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/A/Headers/RootObject.h b/test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/A/Headers/RootObject.h new file mode 100644 index 0000000000000..46b978afdfed8 --- /dev/null +++ b/test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/A/Headers/RootObject.h @@ -0,0 +1,14 @@ +__attribute__((objc_root_class)) +@interface RootObject +- (instancetype) init; +@end + +@protocol RootProtocol +@optional +- (void) rootObject:(RootObject *)root willChangeValue:(void *)value; +- (void) rootObject:(RootObject *)root didChangeValue:(void *)value; +@end + +@protocol ReactiveRootProtocol +@end + diff --git a/test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/A/Modules/CoreFeatures.swiftmodule/arm64-apple-macos.swiftdoc b/test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/A/Modules/CoreFeatures.swiftmodule/arm64-apple-macos.swiftdoc new file mode 100644 index 0000000000000000000000000000000000000000..b811c5d392a16f3b085248e125b2a6be4923b2b8 GIT binary patch literal 384 zcmaDfX9YVW2Lpp90|Ns)qlJ#c+7Dby0=U-%aP4>CT5rI$Ux91Q2d>2%xY!*xUFbQa zy@N^j#3Ahshx9v`wD%m+SaZl(Xp58P1t*OOP8vYc#=uE?50mBX(b9}sYS(^`FRSadd3PG#UP=a#JqG}Ln8wNJp(->OFbinWMmOz z13g1fc%%TabAC~(TWVrSX;EtNIv_u>DA&wHHxXpIZf;_7ezBpUo&iuC1X=|d7`TA6 Z5t{&y7Yl;`NDSm27*OKMP(CT5rI$Ux91Q2d>2%xY!*xUFbQa zy@N^j#3Ahshx9v`wD%m+SaZl(Xp58P1t*OOP8vYc#=uE?50mBX(b9}sYS(^`FRSadd3PG#UP=a#JqG}Ln8wNJp(->OFbinWMmOz z13g1fc%%TabAC~(TWVrSX;EtNIv_u>DA&wHHxXpIZf;_7ezBpUo&iuC1X=|d7`TA6 Z5t{&y7Yl;`NDSm27*OKMP(CT5rI$Ux91Q2d>2%xY!*xUFbQa zy@N^j#3Ahshx9v`wD%m+SaZl(Xp58P1t*OOP8vYc#=uE?50mBX(b9}sYS(^`FRSadd3PG#UP=a#JqG}Ln8wNJp(->OFbinWMmOz z13g1fc%%TabAC~(TWVrSX;EtNHXy&k!Ytm*L^ly+yl!q{a(=O)p`HOy0ti|K85p>L av=N&Cj~5Gr07wkv9vD#K%1}h+gTw)S$Z6RC literal 0 HcmV?d00001 diff --git a/test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/A/Modules/CoreFeatures.swiftmodule/x86_64-apple-macos.swiftinterface b/test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/A/Modules/CoreFeatures.swiftmodule/x86_64-apple-macos.swiftinterface new file mode 100644 index 0000000000000..827d360b9df23 --- /dev/null +++ b/test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/A/Modules/CoreFeatures.swiftmodule/x86_64-apple-macos.swiftinterface @@ -0,0 +1,8 @@ +// swift-interface-format-version: 1.0 +// swift-compiler-version: Apple Swift version 5.3 (swiftlang-1200.0.29.2 clang-1200.0.30.1) +// swift-module-flags: -target x86_64-apple-macos11.0 -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -module-name CoreFeatures +@_exported import CoreFeatures +import Foundation +import Swift +extension RootObject : CoreFeatures.ReactiveRootProtocol { +} diff --git a/test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/A/Modules/CoreFeatures.swiftmodule/x86_64.swiftdoc b/test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/A/Modules/CoreFeatures.swiftmodule/x86_64.swiftdoc new file mode 100644 index 0000000000000000000000000000000000000000..b7497fe39ff769f10d7cd77bceba548e48a913d0 GIT binary patch literal 384 zcmaDfX9YVW2Lpp90|Ns)qlJ#c+7Dby0=U-%aP4>CT5rI$Ux91Q2d>2%xY!*xUFbQa zy@N^j#3Ahshx9v`wD%m+SaZl(Xp58P1t*OOP8vYc#=uE?50mBX(b9}sYS(^`FRSadd3PG#UP=a#JqG}Ln8wNJp(->OFbinWMmOz z13g1fc%%TabAC~(TWVrSX;EtNHXy&k!Ytm*L^ly+yl!q{a(=O)p`HOy0ti|K85p>L av=N&Cj~5Gr07wkv9vD#K%1}h+gTw)S$Z6RC literal 0 HcmV?d00001 diff --git a/test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/A/Modules/CoreFeatures.swiftmodule/x86_64.swiftinterface b/test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/A/Modules/CoreFeatures.swiftmodule/x86_64.swiftinterface new file mode 100644 index 0000000000000..827d360b9df23 --- /dev/null +++ b/test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/A/Modules/CoreFeatures.swiftmodule/x86_64.swiftinterface @@ -0,0 +1,8 @@ +// swift-interface-format-version: 1.0 +// swift-compiler-version: Apple Swift version 5.3 (swiftlang-1200.0.29.2 clang-1200.0.30.1) +// swift-module-flags: -target x86_64-apple-macos11.0 -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -module-name CoreFeatures +@_exported import CoreFeatures +import Foundation +import Swift +extension RootObject : CoreFeatures.ReactiveRootProtocol { +} diff --git a/test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/A/Modules/module.modulemap b/test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/A/Modules/module.modulemap new file mode 100644 index 0000000000000..f7cd21a55f09d --- /dev/null +++ b/test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/A/Modules/module.modulemap @@ -0,0 +1,11 @@ +framework module CoreFeatures { + umbrella header "CoreFeatures.h" + + export * + module * { export * } +} + +module CoreFeatures.Swift { + header "CoreFeatures-Swift.h" + requires objc +} diff --git a/test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/Current b/test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/Current new file mode 120000 index 0000000000000..8c7e5a667f1b7 --- /dev/null +++ b/test/ClangImporter/Inputs/requirement-conflict/CoreFeatures.framework/Versions/Current @@ -0,0 +1 @@ +A \ No newline at end of file diff --git a/test/ClangImporter/requirement-conflict.swift b/test/ClangImporter/requirement-conflict.swift new file mode 100644 index 0000000000000..39e9a52e6db1c --- /dev/null +++ b/test/ClangImporter/requirement-conflict.swift @@ -0,0 +1,28 @@ +// RUN: %empty-directory(%t) +// RUN: mkdir -p %t/clang-module-cache +// RUN: %target-swift-frontend -typecheck -F %S/Inputs/requirement-conflict -module-cache-path %t/clang-module-cache %s + +// REQUIRES: objc_interop +// N.B. technically only need objc_interop here, but CoreFeatures would have to +// be cross-compiled for more architectures. It's sufficient to verify this +// works for macOS alone since we only care that we don't emit errors. +// REQUIRES: OS=macosx + +import CoreFeatures + +// The RootObject class in CoreFeatures is intentionally quite strange. +// Formally, RootObject declares a conformance to an Objective-C protocol called +// 'ReactiveRootProtocol', but in Swift instead of ObjC. When we go to import +// the ObjC side of the framework, we notice this and mirror-in the requirements +// from its ancestor 'RootProtocol'. With that accomplished, we now have an ObjC +// class imported through Swift with ObjC members mirrored on top. This combo +// used to be toxic - we would see the very members we synthesized during the +// shadowing pass and would diagnose them as directly conflicting with the +// protocol conformance we had declared in Swift. That is - we would say +// a requirement conflicted directly... with itself! +// +// Nowadays we just exempt interface files from this kind of checking, which is +// the same behavior one would get if they had set up this very scenario with +// a plain swiftmodule file. +let root = CoreFeatures.RootObject() +print(root)