Skip to content

Commit e5bf933

Browse files
authored
Merge pull request #72594 from Azoy/fix-builtins-escapable
[AST] Change some builtins to conform their result to Escapable
2 parents 8679b62 + 11fc05c commit e5bf933

File tree

1 file changed

+28
-8
lines changed

1 file changed

+28
-8
lines changed

lib/AST/Builtins.cpp

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -862,14 +862,16 @@ static ValueDecl *getRefCountingOperation(ASTContext &ctx, Identifier id) {
862862
static ValueDecl *getLoadOperation(ASTContext &ctx, Identifier id) {
863863
return getBuiltinFunction(ctx, id, _thin,
864864
_generics(_unrestricted,
865-
_conformsTo(_typeparam(0), _copyable)),
865+
_conformsTo(_typeparam(0), _copyable),
866+
_conformsTo(_typeparam(0), _escapable)),
866867
_parameters(_rawPointer),
867868
_typeparam(0));
868869
}
869870

870871
static ValueDecl *getTakeOperation(ASTContext &ctx, Identifier id) {
871872
return getBuiltinFunction(ctx, id, _thin,
872-
_generics(_unrestricted),
873+
_generics(_unrestricted,
874+
_conformsTo(_typeparam(0), _escapable)),
873875
_parameters(_rawPointer),
874876
_typeparam(0));
875877
}
@@ -902,7 +904,8 @@ static ValueDecl *getDestroyArrayOperation(ASTContext &ctx, Identifier id) {
902904
static ValueDecl *getCopyOperation(ASTContext &ctx, Identifier id) {
903905
return getBuiltinFunction(ctx, id, _thin,
904906
_generics(_unrestricted,
905-
_conformsTo(_typeparam(0), _copyable)),
907+
_conformsTo(_typeparam(0), _copyable),
908+
_conformsTo(_typeparam(0), _escapable)),
906909
_parameters(_typeparam(0)), _typeparam(0));
907910
}
908911

@@ -976,12 +979,16 @@ static ValueDecl *getAllocWithTailElemsOperation(ASTContext &Context,
976979
1 + NumTailTypes > (int)std::size(GenericParamNames))
977980
return nullptr;
978981
BuiltinFunctionBuilder builder(Context, 1 + NumTailTypes);
979-
builder.addParameter(makeMetatype(makeGenericParam(0)));
982+
983+
auto resultTy = makeGenericParam(0);
984+
builder.addConformanceRequirement(resultTy, KnownProtocolKind::Escapable);
985+
986+
builder.addParameter(makeMetatype(resultTy));
980987
for (int Idx = 0; Idx < NumTailTypes; ++Idx) {
981988
builder.addParameter(makeConcrete(BuiltinIntegerType::getWordType(Context)));
982989
builder.addParameter(makeMetatype(makeGenericParam(Idx + 1)));
983990
}
984-
builder.setResult(makeGenericParam(0));
991+
builder.setResult(resultTy);
985992
return builder.build(Id);
986993
}
987994

@@ -1262,6 +1269,7 @@ static ValueDecl *getCOWBufferForReading(ASTContext &C, Identifier Id) {
12621269
//
12631270
BuiltinFunctionBuilder builder(C, 1, true);
12641271
auto T = makeGenericParam();
1272+
builder.addConformanceRequirement(T, KnownProtocolKind::Escapable);
12651273
builder.addParameter(T);
12661274
builder.setResult(T);
12671275
return builder.build(Id);
@@ -1286,7 +1294,11 @@ static ValueDecl *getCastReferenceOperation(ASTContext &ctx,
12861294
// SILGen and IRGen check additional constraints during lowering.
12871295
BuiltinFunctionBuilder builder(ctx, 2);
12881296
builder.addParameter(makeGenericParam(0), ParamSpecifier::LegacyOwned);
1289-
builder.setResult(makeGenericParam(1));
1297+
1298+
auto resultTy = makeGenericParam(1);
1299+
builder.addConformanceRequirement(resultTy, KnownProtocolKind::Escapable);
1300+
builder.setResult(resultTy);
1301+
12901302
return builder.build(name);
12911303
}
12921304

@@ -1296,7 +1308,11 @@ static ValueDecl *getReinterpretCastOperation(ASTContext &ctx,
12961308
// SILGen and IRGen check additional constraints during lowering.
12971309
BuiltinFunctionBuilder builder(ctx, 2);
12981310
builder.addParameter(makeGenericParam(0), ParamSpecifier::LegacyOwned);
1299-
builder.setResult(makeGenericParam(1));
1311+
1312+
auto resultTy = makeGenericParam(1);
1313+
builder.addConformanceRequirement(resultTy, KnownProtocolKind::Escapable);
1314+
builder.setResult(resultTy);
1315+
13001316
return builder.build(name);
13011317
}
13021318

@@ -1485,7 +1501,11 @@ static ValueDecl *getConvertUnownedUnsafeToGuaranteed(ASTContext &ctx,
14851501
BuiltinFunctionBuilder builder(ctx, 3);
14861502
builder.addParameter(makeGenericParam(0)); // Base
14871503
builder.addParameter(makeGenericParam(1), ParamSpecifier::InOut); // Unmanaged
1488-
builder.setResult(makeGenericParam(2)); // Guaranteed Result
1504+
1505+
auto resultTy = makeGenericParam(2);
1506+
builder.addConformanceRequirement(resultTy, KnownProtocolKind::Escapable);
1507+
builder.setResult(resultTy); // Guaranteed Result
1508+
14891509
return builder.build(id);
14901510
}
14911511

0 commit comments

Comments
 (0)