@@ -1059,7 +1059,8 @@ static void addValueWitness(IRGenModule &IGM, ConstantStructBuilder &B,
10591059 return addFunction (getNoOpVoidFunction (IGM));
10601060 } else if (concreteTI.isSingleSwiftRetainablePointer (ResilienceExpansion::Maximal)) {
10611061 return addFunction (getDestroyStrongFunction (IGM));
1062- } else if (layoutStringsEnabled (IGM)) {
1062+ } else if (layoutStringsEnabled (IGM) &&
1063+ concreteTI.isCopyable (ResilienceExpansion::Maximal)) {
10631064 auto ty = boundGenericCharacteristics ? boundGenericCharacteristics->concreteType : concreteType;
10641065 auto &typeInfo = boundGenericCharacteristics ? *boundGenericCharacteristics->TI : concreteTI;
10651066 if (auto *typeLayoutEntry =
@@ -1083,7 +1084,8 @@ static void addValueWitness(IRGenModule &IGM, ConstantStructBuilder &B,
10831084 }
10841085 }
10851086
1086- if (layoutStringsEnabled (IGM)) {
1087+ if (layoutStringsEnabled (IGM) &&
1088+ concreteTI.isCopyable (ResilienceExpansion::Maximal)) {
10871089 auto ty = boundGenericCharacteristics
10881090 ? boundGenericCharacteristics->concreteType
10891091 : concreteType;
@@ -1106,7 +1108,8 @@ static void addValueWitness(IRGenModule &IGM, ConstantStructBuilder &B,
11061108 case ValueWitness::InitializeWithTake:
11071109 if (concreteTI.isBitwiseTakable (ResilienceExpansion::Maximal)) {
11081110 return addFunction (getMemCpyFunction (IGM, concreteTI));
1109- } else if (layoutStringsEnabled (IGM)) {
1111+ } else if (layoutStringsEnabled (IGM) &&
1112+ concreteTI.isCopyable (ResilienceExpansion::Maximal)) {
11101113 auto ty = boundGenericCharacteristics ? boundGenericCharacteristics->concreteType : concreteType;
11111114 auto &typeInfo = boundGenericCharacteristics ? *boundGenericCharacteristics->TI : concreteTI;
11121115 if (auto *typeLayoutEntry =
@@ -1126,7 +1129,8 @@ static void addValueWitness(IRGenModule &IGM, ConstantStructBuilder &B,
11261129 return addFunction (getMemCpyFunction (IGM, concreteTI));
11271130 } else if (concreteTI.isSingleSwiftRetainablePointer (ResilienceExpansion::Maximal)) {
11281131 return addFunction (getAssignWithCopyStrongFunction (IGM));
1129- } else if (layoutStringsEnabled (IGM)) {
1132+ } else if (layoutStringsEnabled (IGM) &&
1133+ concreteTI.isCopyable (ResilienceExpansion::Maximal)) {
11301134 auto ty = boundGenericCharacteristics ? boundGenericCharacteristics->concreteType : concreteType;
11311135 auto &typeInfo = boundGenericCharacteristics ? *boundGenericCharacteristics->TI : concreteTI;
11321136 if (auto *typeLayoutEntry =
@@ -1146,7 +1150,8 @@ static void addValueWitness(IRGenModule &IGM, ConstantStructBuilder &B,
11461150 return addFunction (getMemCpyFunction (IGM, concreteTI));
11471151 } else if (concreteTI.isSingleSwiftRetainablePointer (ResilienceExpansion::Maximal)) {
11481152 return addFunction (getAssignWithTakeStrongFunction (IGM));
1149- } else if (layoutStringsEnabled (IGM)) {
1153+ } else if (layoutStringsEnabled (IGM) &&
1154+ concreteTI.isCopyable (ResilienceExpansion::Maximal)) {
11501155 auto ty = boundGenericCharacteristics ? boundGenericCharacteristics->concreteType : concreteType;
11511156 auto &typeInfo = boundGenericCharacteristics ? *boundGenericCharacteristics->TI : concreteTI;
11521157 if (auto *typeLayoutEntry =
@@ -1166,7 +1171,8 @@ static void addValueWitness(IRGenModule &IGM, ConstantStructBuilder &B,
11661171 return addFunction (getMemCpyFunction (IGM, concreteTI));
11671172 } else if (concreteTI.isSingleSwiftRetainablePointer (ResilienceExpansion::Maximal)) {
11681173 return addFunction (getInitWithCopyStrongFunction (IGM));
1169- } else if (layoutStringsEnabled (IGM)) {
1174+ } else if (layoutStringsEnabled (IGM) &&
1175+ concreteTI.isCopyable (ResilienceExpansion::Maximal)) {
11701176 auto ty = boundGenericCharacteristics ? boundGenericCharacteristics->concreteType : concreteType;
11711177 auto &typeInfo = boundGenericCharacteristics ? *boundGenericCharacteristics->TI : concreteTI;
11721178 if (auto *typeLayoutEntry =
@@ -1233,7 +1239,8 @@ static void addValueWitness(IRGenModule &IGM, ConstantStructBuilder &B,
12331239 case ValueWitness::GetEnumTag: {
12341240 assert (concreteType.getEnumOrBoundGenericEnum ());
12351241
1236- if (layoutStringsEnabled (IGM)) {
1242+ if (layoutStringsEnabled (IGM) &&
1243+ concreteTI.isCopyable (ResilienceExpansion::Maximal)) {
12371244 auto ty = boundGenericCharacteristics
12381245 ? boundGenericCharacteristics->concreteType
12391246 : concreteType;
@@ -1255,7 +1262,8 @@ static void addValueWitness(IRGenModule &IGM, ConstantStructBuilder &B,
12551262 }
12561263 case ValueWitness::DestructiveInjectEnumTag: {
12571264 assert (concreteType.getEnumOrBoundGenericEnum ());
1258- if (layoutStringsEnabled (IGM)) {
1265+ if (layoutStringsEnabled (IGM) &&
1266+ concreteTI.isCopyable (ResilienceExpansion::Maximal)) {
12591267 auto ty = boundGenericCharacteristics
12601268 ? boundGenericCharacteristics->concreteType
12611269 : concreteType;
0 commit comments