From 21ce1b63a09f3c7f7f5db2db464e9e21c19a3f0e Mon Sep 17 00:00:00 2001 From: Dario Rexin Date: Thu, 29 Jun 2023 12:56:49 -0700 Subject: [PATCH] [IRGen] Fix getEnumTag witness function selection When a type is not runtime instantiated and we are not able to compute a layout string for it, we can't assign it a layout string witness function. --- lib/IRGen/GenValueWitness.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/IRGen/GenValueWitness.cpp b/lib/IRGen/GenValueWitness.cpp index 8cf7f08cca202..d33578b31c241 100644 --- a/lib/IRGen/GenValueWitness.cpp +++ b/lib/IRGen/GenValueWitness.cpp @@ -902,9 +902,10 @@ static bool isRuntimeInstatiatedLayoutString(IRGenModule &IGM, static llvm::Constant *getEnumTagFunction(IRGenModule &IGM, const EnumTypeLayoutEntry *typeLayoutEntry, GenericSignature genericSig) { - if ((!typeLayoutEntry->layoutString(IGM, genericSig) && - !isRuntimeInstatiatedLayoutString(IGM, typeLayoutEntry)) || - typeLayoutEntry->isSingleton()) { + if (!typeLayoutEntry->layoutString(IGM, genericSig) && + !isRuntimeInstatiatedLayoutString(IGM, typeLayoutEntry)) { + return nullptr; + } else if (typeLayoutEntry->isSingleton()) { return IGM.getSingletonEnumGetEnumTagFn(); } else if (!typeLayoutEntry->isFixedSize(IGM)) { if (typeLayoutEntry->isMultiPayloadEnum()) {