Skip to content

Commit 0088b36

Browse files
authored
Merge pull request #21089 from mikeash/anyhashable-to-enum-fix-5.0
[5.0][Runtime] Allow casts from AnyHashable to a Hashable enum to succeed.
2 parents 549fbc0 + f7a4fc5 commit 0088b36

File tree

2 files changed

+10
-0
lines changed

2 files changed

+10
-0
lines changed

stdlib/public/runtime/Casting.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2436,6 +2436,10 @@ static bool swift_dynamicCastImpl(OpaqueValue *dest, OpaqueValue *src,
24362436
cast<StructMetadata>(srcType),
24372437
cast<StructMetadata>(targetType),
24382438
flags);
2439+
} else if (isAnyHashableType(srcType)) {
2440+
// AnyHashable casts for enums.
2441+
return _dynamicCastFromAnyHashable(dest, src, srcType, targetType,
2442+
flags);
24392443
}
24402444
break;
24412445

test/stdlib/AnyHashableCasts.swift.gyb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,16 @@ testCases = [
7979
("AnyHashable(5)", "Any", "Int", "5"),
8080
("HashableStruct(value: 5)", "HashableStruct", "AnyHashable",
8181
"AnyHashable(HashableStruct(value: 5))"),
82+
("HashableStruct(value: 5)", "AnyHashable", "HashableStruct",
83+
"AnyHashable(HashableStruct(value: 5))"),
8284
("HashableClass(value: 5)", "HashableClass", "AnyHashable",
8385
"AnyHashable(HashableClass(value: 5))"),
86+
("HashableClass(value: 5)", "AnyHashable", "HashableClass",
87+
"AnyHashable(HashableClass(value: 5))"),
8488
("HashableEnum.value(5)", "HashableEnum", "AnyHashable",
8589
"AnyHashable(HashableEnum.value(5))"),
90+
("HashableEnum.value(5)", "AnyHashable", "HashableEnum",
91+
"AnyHashable(HashableEnum.value(5))"),
8692
]
8793
}%
8894

0 commit comments

Comments
 (0)