diff --git a/include/swift/IRGen/Linking.h b/include/swift/IRGen/Linking.h index c8d06aa301bca..e9673973b5163 100644 --- a/include/swift/IRGen/Linking.h +++ b/include/swift/IRGen/Linking.h @@ -132,7 +132,7 @@ class LinkEntity { /// ValueDecl*, SILFunction*, or TypeBase*, depending on Kind. void *Pointer; - /// ProtocolConformance*, depending on Kind. + /// ProtocolConformance* or SILDifferentiabilityWitness*, depending on Kind. void *SecondaryPointer; /// A hand-rolled bitfield with the following layout: @@ -772,8 +772,8 @@ class LinkEntity { void setForDifferentiabilityWitness(Kind kind, const SILDifferentiabilityWitness *witness) { - Pointer = const_cast(static_cast(witness)); - SecondaryPointer = nullptr; + Pointer = nullptr; + SecondaryPointer = const_cast(static_cast(witness)); Data = LINKENTITY_SET_FIELD(Kind, unsigned(kind)); } @@ -1684,7 +1684,7 @@ class LinkEntity { SILDifferentiabilityWitness *getSILDifferentiabilityWitness() const { assert(getKind() == Kind::DifferentiabilityWitness); - return reinterpret_cast(Pointer); + return reinterpret_cast(SecondaryPointer); } const RootProtocolConformance *getRootProtocolConformance() const { diff --git a/lib/IRGen/IRGenModule.cpp b/lib/IRGen/IRGenModule.cpp index a3a4ba6857b68..fc5a09cb06a00 100644 --- a/lib/IRGen/IRGenModule.cpp +++ b/lib/IRGen/IRGenModule.cpp @@ -1445,7 +1445,7 @@ bool IRGenModule::IsWellKnownBuiltinOrStructralType(CanType T) const { T == Context.getAnyObjectType()) return true; - if (auto IntTy = dyn_cast(T)) { + if (auto IntTy = dyn_cast_or_null(T)) { auto Width = IntTy->getWidth(); if (Width.isPointerWidth()) return true;