Skip to content

Commit 184058e

Browse files
authored
Merge pull request swiftlang#76588 from meg-gupta/lifetimeremovefeatureguardincompiler
Remove feature guard on lifetime dependence inference
2 parents 9e5a105 + cf4832e commit 184058e

22 files changed

+66
-44
lines changed

lib/AST/Builtins.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2114,9 +2114,13 @@ static ValueDecl *getOnceOperation(ASTContext &Context,
21142114
static ValueDecl *getPolymorphicBinaryOperation(ASTContext &ctx,
21152115
Identifier id) {
21162116
BuiltinFunctionBuilder builder(ctx);
2117-
builder.addParameter(makeGenericParam());
2118-
builder.addParameter(makeGenericParam());
2119-
builder.setResult(makeGenericParam());
2117+
2118+
// Builtins of the form: func binOp<T>(_ t: T, _ t: T) -> T
2119+
auto genericParam = makeGenericParam();
2120+
builder.addConformanceRequirement(genericParam, KnownProtocolKind::Escapable);
2121+
builder.addParameter(genericParam);
2122+
builder.addParameter(genericParam);
2123+
builder.setResult(genericParam);
21202124
return builder.build(id);
21212125
}
21222126

@@ -2230,6 +2234,7 @@ static ValueDecl *getEmplace(ASTContext &ctx, Identifier id) {
22302234
BuiltinFunctionBuilder builder(ctx, /* genericParamCount */ 1);
22312235

22322236
auto T = makeGenericParam();
2237+
builder.addConformanceRequirement(T, KnownProtocolKind::Escapable);
22332238

22342239
auto fnParamTy = FunctionType::get(FunctionType::Param(ctx.TheRawPointerType),
22352240
ctx.TheEmptyTupleType,

lib/AST/ConformanceLookup.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -850,6 +850,10 @@ static bool conformsToInvertible(CanType type, InvertibleProtocolKind ip) {
850850
if (type->is<SILPackType>())
851851
return true;
852852

853+
if (type->is<SILTokenType>()) {
854+
return true;
855+
}
856+
853857
// The SIL types in the AST do not have real conformances, and should have
854858
// been handled in SILType instead.
855859
assert(!(type->is<SILBoxType,

lib/AST/LifetimeDependence.cpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -684,9 +684,6 @@ std::optional<LifetimeDependenceInfo> LifetimeDependenceInfo::inferMutatingSelf(
684684

685685
std::optional<llvm::ArrayRef<LifetimeDependenceInfo>>
686686
LifetimeDependenceInfo::get(AbstractFunctionDecl *afd) {
687-
if (!afd->getASTContext().LangOpts.hasFeature(Feature::NonescapableTypes)) {
688-
return std::nullopt;
689-
}
690687
assert(isa<FuncDecl>(afd) || isa<ConstructorDecl>(afd));
691688

692689
if (afd->getAttrs().hasAttribute<LifetimeAttr>()) {
@@ -706,9 +703,6 @@ std::optional<llvm::ArrayRef<LifetimeDependenceInfo>>
706703
LifetimeDependenceInfo::get(FunctionTypeRepr *funcRepr,
707704
ArrayRef<SILParameterInfo> params,
708705
ArrayRef<SILResultInfo> results, DeclContext *dc) {
709-
if (!dc->getASTContext().LangOpts.hasFeature(Feature::NonescapableTypes)) {
710-
return std::nullopt;
711-
}
712706
SmallVector<LifetimeDependenceInfo, 1> lifetimeDependencies;
713707

714708
auto getLifetimeDependenceFromDependsOnTypeModifier =

lib/ClangImporter/ImportType.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2633,9 +2633,11 @@ static ParamDecl *getParameterInfo(ClangImporter::Implementation *impl,
26332633
// Swift doesn't support default values of inout parameters.
26342634
// TODO: support default arguments of constructors
26352635
// (https://github.com/apple/swift/issues/70124)
2636+
// TODO: support params with template parameters
26362637
if (param->hasDefaultArg() && !isInOut &&
26372638
!isa<clang::CXXConstructorDecl>(param->getDeclContext()) &&
2638-
impl->isDefaultArgSafeToImport(param)) {
2639+
impl->isDefaultArgSafeToImport(param) &&
2640+
!param->isTemplated()) {
26392641
SwiftDeclSynthesizer synthesizer(*impl);
26402642
if (CallExpr *defaultArgExpr = synthesizer.makeDefaultArgument(
26412643
param, swiftParamTy, paramInfo->getParameterNameLoc())) {

lib/Parse/ParseDecl.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2718,8 +2718,8 @@ ParserResult<LifetimeAttr> Parser::parseLifetimeAttribute(SourceLoc atLoc,
27182718
SourceLoc loc) {
27192719
ParserStatus status;
27202720
if (!Context.LangOpts.hasFeature(Feature::NonescapableTypes)) {
2721-
diagnose(loc, diag::requires_experimental_feature, "lifetime attribute",
2722-
false, getFeatureName(Feature::NonescapableTypes));
2721+
diagnose(loc, diag::requires_experimental_feature, "@lifetime", false,
2722+
getFeatureName(Feature::NonescapableTypes));
27232723
status.setIsParseError();
27242724
return status;
27252725
}

lib/SIL/IR/SILModule.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -920,7 +920,7 @@ void SILModule::performOnceForPrespecializedImportedExtensions(
920920
SmallVector<ModuleDecl *, 8> importedModules;
921921
// Add the Swift module.
922922
if (!isStdlibModule()) {
923-
auto *SwiftStdlib = getASTContext().getStdlibModule(true);
923+
auto *SwiftStdlib = getASTContext().getStdlibModule();
924924
if (SwiftStdlib)
925925
importedModules.push_back(SwiftStdlib);
926926
}

lib/Sema/TypeCheckAttr.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,7 @@ class AttributeChecker : public AttributeVisitor<AttributeChecker> {
363363

364364
void visitUnsafeInheritExecutorAttr(UnsafeInheritExecutorAttr *attr);
365365

366-
bool visitLifetimeAttr(DeclAttribute *attr);
366+
bool visitOwnershipAttr(DeclAttribute *attr);
367367
void visitEagerMoveAttr(EagerMoveAttr *attr);
368368
void visitNoEagerMoveAttr(NoEagerMoveAttr *attr);
369369

@@ -403,7 +403,7 @@ void AttributeChecker::visitNoImplicitCopyAttr(NoImplicitCopyAttr *attr) {
403403
}
404404

405405
if (auto *funcDecl = dyn_cast<FuncDecl>(D)) {
406-
if (visitLifetimeAttr(attr))
406+
if (visitOwnershipAttr(attr))
407407
return;
408408

409409
// We only handle non-lvalue arguments today.
@@ -7480,7 +7480,7 @@ void AttributeChecker::visitUnsafeInheritExecutorAttr(
74807480
}
74817481
}
74827482

7483-
bool AttributeChecker::visitLifetimeAttr(DeclAttribute *attr) {
7483+
bool AttributeChecker::visitOwnershipAttr(DeclAttribute *attr) {
74847484
if (auto *funcDecl = dyn_cast<FuncDecl>(D)) {
74857485
auto declContext = funcDecl->getDeclContext();
74867486
// eagerMove attribute may only appear in type context
@@ -7493,7 +7493,7 @@ bool AttributeChecker::visitLifetimeAttr(DeclAttribute *attr) {
74937493
}
74947494

74957495
void AttributeChecker::visitEagerMoveAttr(EagerMoveAttr *attr) {
7496-
if (visitLifetimeAttr(attr))
7496+
if (visitOwnershipAttr(attr))
74977497
return;
74987498
if (auto *nominal = dyn_cast<NominalTypeDecl>(D)) {
74997499
if (nominal->getSelfTypeInContext()->isNoncopyable()) {
@@ -7517,7 +7517,7 @@ void AttributeChecker::visitEagerMoveAttr(EagerMoveAttr *attr) {
75177517
}
75187518

75197519
void AttributeChecker::visitNoEagerMoveAttr(NoEagerMoveAttr *attr) {
7520-
if (visitLifetimeAttr(attr))
7520+
if (visitOwnershipAttr(attr))
75217521
return;
75227522
// @_noEagerMove and @_eagerMove are opposites and can't be combined.
75237523
if (D->getAttrs().hasAttribute<EagerMoveAttr>()) {

test/IRGen/builtins.swift

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
2-
// RUN: %target-swift-frontend -module-name builtins -parse-stdlib -Xllvm -sil-disable-pass=target-constant-folding -disable-access-control -primary-file %s -emit-ir -o - -disable-objc-attr-requires-foundation-module | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-runtime
1+
// RUN: %target-swift-frontend -enable-builtin-module -module-name builtins -Xllvm -sil-disable-pass=target-constant-folding -disable-access-control -primary-file %s -emit-ir -o - -disable-objc-attr-requires-foundation-module | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-runtime
32

43
// REQUIRES: CPU=x86_64 || CPU=arm64 || CPU=arm64e
54

6-
import Swift
5+
import Builtin
76

87
typealias Int = Builtin.Int32
98
typealias Bool = Builtin.Int1

test/IRGen/polymorphic_builtins.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
// This line tests that IRGen is properly turning the unspecialized builtins
22
// into traps.
33
//
4-
// RUN: %target-swift-frontend -emit-ir -parse-as-library -parse-stdlib -Xllvm -sil-disable-pass=Simplification %s | %FileCheck %s
4+
// RUN: %target-swift-frontend -enable-builtin-module -emit-ir -parse-as-library -Xllvm -sil-disable-pass=Simplification %s | %FileCheck %s
55

66
// Make sure we are not eliminating these builtins before IRGen runs. As part of
77
// the builtin's contract, we expect IRGen to convert them to traps, not
88
// anything before.
99
//
10-
// RUN: %target-swift-frontend -emit-sil -parse-as-library -parse-stdlib -Xllvm -sil-disable-pass=Simplification %s | %FileCheck --check-prefix=SIL %s
10+
// RUN: %target-swift-frontend -enable-builtin-module -emit-sil -parse-as-library -Xllvm -sil-disable-pass=Simplification %s | %FileCheck --check-prefix=SIL %s
1111

12-
import Swift
12+
import Builtin
1313

1414
// SIL-LABEL: sil [transparent] @$s20polymorphic_builtins11_isConcrete4typeSbxm_tlF : $@convention(thin) <T> (@thick T.Type) -> Bool {
1515
// SIL: builtin "isConcrete"<T>({{%[0-9]*}} : $@thick T.Type) : $Builtin.Int1

test/Inputs/polymorphic_builtins.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
2-
import Swift
1+
import Builtin
32

43
// =============================================================================
54

0 commit comments

Comments
 (0)