mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
[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:
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user