Skip to content

Commit 3c6b2a2

Browse files
committed
AST: Allocate BuiltinFixedArrayType in the solver arena if needed
1 parent 0ab6d53 commit 3c6b2a2

File tree

2 files changed

+17
-19
lines changed

2 files changed

+17
-19
lines changed

include/swift/AST/Types.h

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1773,18 +1773,10 @@ class BuiltinFixedArrayType : public BuiltinType, public llvm::FoldingSetNode {
17731773
CanType Size;
17741774
CanType ElementType;
17751775

1776-
static RecursiveTypeProperties
1777-
getRecursiveTypeProperties(CanType Size, CanType Element) {
1778-
RecursiveTypeProperties properties;
1779-
properties |= Size->getRecursiveProperties();
1780-
properties |= Element->getRecursiveProperties();
1781-
return properties;
1782-
}
1783-
1784-
BuiltinFixedArrayType(CanType Size,
1785-
CanType ElementType)
1776+
BuiltinFixedArrayType(CanType Size, CanType ElementType,
1777+
RecursiveTypeProperties properties)
17861778
: BuiltinType(TypeKind::BuiltinFixedArray, ElementType->getASTContext(),
1787-
getRecursiveTypeProperties(Size, ElementType)),
1779+
properties),
17881780
Size(Size),
17891781
ElementType(ElementType)
17901782
{}

lib/AST/ASTContext.cpp

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -567,6 +567,7 @@ struct ASTContext::Implementation {
567567
llvm::DenseMap<Type, ExistentialType *> ExistentialTypes;
568568
llvm::FoldingSet<UnboundGenericType> UnboundGenericTypes;
569569
llvm::FoldingSet<BoundGenericType> BoundGenericTypes;
570+
llvm::FoldingSet<BuiltinFixedArrayType> BuiltinFixedArrayTypes;
570571
llvm::FoldingSet<ProtocolCompositionType> ProtocolCompositionTypes;
571572
llvm::FoldingSet<ParameterizedProtocolType> ParameterizedProtocolTypes;
572573
llvm::FoldingSet<LayoutConstraintInfo> LayoutConstraints;
@@ -632,7 +633,6 @@ struct ASTContext::Implementation {
632633
llvm::DenseMap<BuiltinIntegerWidth, BuiltinIntegerType*> BuiltinIntegerTypes;
633634
llvm::DenseMap<unsigned, BuiltinUnboundGenericType*> BuiltinUnboundGenericTypes;
634635
llvm::FoldingSet<BuiltinVectorType> BuiltinVectorTypes;
635-
llvm::FoldingSet<BuiltinFixedArrayType> BuiltinFixedArrayTypes;
636636
llvm::FoldingSet<DeclName::CompoundDeclName> CompoundNames;
637637
llvm::DenseMap<UUID, GenericEnvironment *> OpenedElementEnvironments;
638638
llvm::FoldingSet<IndexSubset> IndexSubsets;
@@ -3737,20 +3737,26 @@ BuiltinUnboundGenericType::get(TypeKind genericTypeKind,
37373737

37383738
BuiltinFixedArrayType *BuiltinFixedArrayType::get(CanType Size,
37393739
CanType ElementType) {
3740+
RecursiveTypeProperties properties;
3741+
properties |= Size->getRecursiveProperties();
3742+
properties |= ElementType->getRecursiveProperties();
3743+
3744+
AllocationArena arena = getArena(properties);
3745+
37403746
llvm::FoldingSetNodeID id;
37413747
BuiltinFixedArrayType::Profile(id, Size, ElementType);
3742-
auto &context = Size->getASTContext();
3748+
auto &ctx = Size->getASTContext();
37433749

37443750
void *insertPos;
3745-
if (BuiltinFixedArrayType *vecType
3746-
= context.getImpl().BuiltinFixedArrayTypes
3751+
if (BuiltinFixedArrayType *faTy
3752+
= ctx.getImpl().getArena(arena).BuiltinFixedArrayTypes
37473753
.FindNodeOrInsertPos(id, insertPos))
3748-
return vecType;
3754+
return faTy;
37493755

37503756
BuiltinFixedArrayType *faTy
3751-
= new (context, AllocationArena::Permanent)
3752-
BuiltinFixedArrayType(Size, ElementType);
3753-
context.getImpl().BuiltinFixedArrayTypes.InsertNode(faTy, insertPos);
3757+
= new (ctx, arena) BuiltinFixedArrayType(Size, ElementType, properties);
3758+
ctx.getImpl().getArena(arena).BuiltinFixedArrayTypes
3759+
.InsertNode(faTy, insertPos);
37543760
return faTy;
37553761
}
37563762

0 commit comments

Comments
 (0)