Merge pull request #20825 from DougGregor/runtime-override-conforms-to-swift-protocol
diff --git a/stdlib/public/runtime/CompatibilityOverride.def b/stdlib/public/runtime/CompatibilityOverride.def
index b8d99de..4906a96 100644
--- a/stdlib/public/runtime/CompatibilityOverride.def
+++ b/stdlib/public/runtime/CompatibilityOverride.def
@@ -130,6 +130,13 @@
const ProtocolDescriptor *protocol),
(type, protocol))
+OVERRIDE_PROTOCOLCONFORMANCE(conformsToSwiftProtocol,
+ const ProtocolConformanceDescriptor *, , swift::,
+ (const Metadata * const type,
+ const ProtocolDescriptor *protocol,
+ StringRef moduleName),
+ (type, protocol, moduleName))
+
OVERRIDE_KEYPATH(getKeyPath, const HeapObject *, , swift::,
(const void *pattern, const void *arguments),
(pattern, arguments))
diff --git a/stdlib/public/runtime/Private.h b/stdlib/public/runtime/Private.h
index f6f24c2..f5571c9 100644
--- a/stdlib/public/runtime/Private.h
+++ b/stdlib/public/runtime/Private.h
@@ -510,8 +510,9 @@
/// Determine whether the given type conforms to the given Swift protocol,
/// returning the appropriate protocol conformance descriptor when it does.
const ProtocolConformanceDescriptor *
- _conformsToSwiftProtocol(const Metadata * const type,
- const ProtocolDescriptor *protocol);
+ swift_conformsToSwiftProtocol(const Metadata * const type,
+ const ProtocolDescriptor *protocol,
+ StringRef module);
/// Retrieve an associated type witness from the given witness table.
///
diff --git a/stdlib/public/runtime/ProtocolConformance.cpp b/stdlib/public/runtime/ProtocolConformance.cpp
index dfca2c9..f3e5b2a 100644
--- a/stdlib/public/runtime/ProtocolConformance.cpp
+++ b/stdlib/public/runtime/ProtocolConformance.cpp
@@ -532,9 +532,10 @@
};
}
-const ProtocolConformanceDescriptor *
-swift::_conformsToSwiftProtocol(const Metadata * const type,
- const ProtocolDescriptor *protocol) {
+static const ProtocolConformanceDescriptor *
+swift_conformsToSwiftProtocolImpl(const Metadata * const type,
+ const ProtocolDescriptor *protocol,
+ StringRef module) {
auto &C = Conformances.get();
// See if we have a cached conformance. The ConcurrentMap data structure
@@ -600,7 +601,8 @@
static const WitnessTable *
swift_conformsToProtocolImpl(const Metadata * const type,
const ProtocolDescriptor *protocol) {
- auto description = _conformsToSwiftProtocol(type, protocol);
+ auto description =
+ swift_conformsToSwiftProtocol(type, protocol, StringRef());
if (!description)
return nullptr;
diff --git a/unittests/runtime/CompatibilityOverride.cpp b/unittests/runtime/CompatibilityOverride.cpp
index acb7838..953e655 100644
--- a/unittests/runtime/CompatibilityOverride.cpp
+++ b/unittests/runtime/CompatibilityOverride.cpp
@@ -168,6 +168,11 @@
ASSERT_EQ(Result, nullptr);
}
+TEST_F(CompatibilityOverrideTest, test_swift_conformsToSwiftProtocol) {
+ auto Result = swift_conformsToSwiftProtocol(nullptr, nullptr, StringRef());
+ ASSERT_EQ(Result, nullptr);
+}
+
TEST_F(CompatibilityOverrideTest, test_swift_getTypeByMangledNode) {
Demangler demangler;
auto Result = swift_getTypeByMangledNode(demangler, nullptr, nullptr,