[IRGen] Don't set HasLayoutString flag on non-copyable generic types

rdar://151176697

While generic types generally have layout strings (when enabled), non-copyable types don't, so
we have to make sure the flag does not get set.
This commit is contained in:
Dario Rexin
2025-05-15 10:21:22 -07:00
parent ee3aca2ef3
commit 75c581d3a0
3 changed files with 72 additions and 12 deletions

View File

@@ -6014,12 +6014,14 @@ namespace {
if (!layoutStringsEnabled(IGM)) {
return false;
}
return !!getLayoutString() ||
(IGM.Context.LangOpts.hasFeature(
Feature::LayoutStringValueWitnessesInstantiation) &&
IGM.getOptions().EnableLayoutStringValueWitnessesInstantiation &&
(HasDependentVWT || HasDependentMetadata) &&
!isa<FixedTypeInfo>(IGM.getTypeInfo(getLoweredType())));
const auto &TI = IGM.getTypeInfo(getLoweredType());
return (!!getLayoutString() ||
(IGM.Context.LangOpts.hasFeature(
Feature::LayoutStringValueWitnessesInstantiation) &&
IGM.getOptions().EnableLayoutStringValueWitnessesInstantiation &&
(HasDependentVWT || HasDependentMetadata) &&
!isa<FixedTypeInfo>(TI))) &&
TI.isCopyable(ResilienceExpansion::Maximal);
}
llvm::Constant *emitNominalTypeDescriptor() {
@@ -6547,13 +6549,15 @@ namespace {
if (!layoutStringsEnabled(IGM)) {
return false;
}
auto &TI = IGM.getTypeInfo(getLoweredType());
return !!getLayoutString() ||
(IGM.Context.LangOpts.hasFeature(
Feature::LayoutStringValueWitnessesInstantiation) &&
IGM.getOptions().EnableLayoutStringValueWitnessesInstantiation &&
(HasDependentVWT || HasDependentMetadata) &&
!isa<FixedTypeInfo>(IGM.getTypeInfo(getLoweredType())));
return (!!getLayoutString() ||
(IGM.Context.LangOpts.hasFeature(
Feature::LayoutStringValueWitnessesInstantiation) &&
IGM.getOptions().EnableLayoutStringValueWitnessesInstantiation &&
(HasDependentVWT || HasDependentMetadata) &&
!isa<FixedTypeInfo>(TI))) &&
TI.isCopyable(ResilienceExpansion::Maximal);
}
llvm::Constant *emitNominalTypeDescriptor() {