Skip to content

Commit 3364648

Browse files
authored
Merge pull request #72148 from atrick/enable-lifetime-diagnostics
Enable lifetime dependence diagnostics for Nonescapable types.
2 parents 8499640 + 8419cc5 commit 3364648

20 files changed

+41
-45
lines changed

SwiftCompilerSources/Sources/Optimizer/FunctionPasses/LifetimeDependenceScopeFixup.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ private func log(_ message: @autoclosure () -> String) {
3131
let lifetimeDependenceScopeFixupPass = FunctionPass(
3232
name: "lifetime-dependence-scope-fixup")
3333
{ (function: Function, context: FunctionPassContext) in
34+
if !context.options.hasFeature(.NonescapableTypes) {
35+
return
36+
}
3437
log(" --- Scope fixup for lifetime dependence in \(function.name)")
3538

3639
let localReachabilityCache = LocalVariableReachabilityCache()

include/swift/AST/SILOptions.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,9 @@ class SILOptions {
137137
/// function pointers.
138138
bool EnableImportPtrauthFieldFunctionPointers = false;
139139

140+
/// Enables SIL-level diagnostics for NonescapableTypes.
141+
bool EnableLifetimeDependenceDiagnostics = true;
142+
140143
/// Controls whether or not paranoid verification checks are run.
141144
bool VerifyAll = false;
142145

include/swift/Option/FrontendOptions.td

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1240,6 +1240,13 @@ def disable_import_ptrauth_field_function_pointers :
12401240
Flag<["-"], "disable-import-ptrauth-field-function-pointers">,
12411241
HelpText<"Disable import of custom ptrauth qualified field function pointers">;
12421242

1243+
def enable_lifetime_dependence_diagnostics :
1244+
Flag<["-"], "enable-lifetime-dependence-diagnostics">,
1245+
HelpText<"Enable lifetime dependence diagnostics for Nonescapable types.">;
1246+
def disable_lifetime_dependence_diagnostics :
1247+
Flag<["-"], "disable-lifetime-dependence-diagnostics">,
1248+
HelpText<"Disable lifetime dependence diagnostics for Nonescapable types.">;
1249+
12431250
def enable_collocate_metadata_functions :
12441251
Flag<["-"], "enable-collocate-metadata-functions">,
12451252
HelpText<"Enable collocate metadata functions">;

lib/Frontend/CompilerInvocation.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2352,6 +2352,11 @@ static bool ParseSILArgs(SILOptions &Opts, ArgList &Args,
23522352
Args.hasArg(OPT_enable_import_ptrauth_field_function_pointers,
23532353
OPT_disable_import_ptrauth_field_function_pointers,
23542354
Opts.EnableImportPtrauthFieldFunctionPointers);
2355+
Opts.EnableLifetimeDependenceDiagnostics =
2356+
Args.hasFlag(OPT_enable_lifetime_dependence_diagnostics,
2357+
OPT_disable_lifetime_dependence_diagnostics,
2358+
Opts.EnableLifetimeDependenceDiagnostics);
2359+
23552360
Opts.VerifyAll |= Args.hasArg(OPT_sil_verify_all);
23562361
Opts.VerifyNone |= Args.hasArg(OPT_sil_verify_none);
23572362
Opts.DebugSerialization |= Args.hasArg(OPT_sil_debug_serialization);

lib/SILOptimizer/PassManager/PassPipeline.cpp

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -65,18 +65,6 @@ static llvm::cl::opt<bool>
6565
EnableDeinitDevirtualizer("enable-deinit-devirtualizer", llvm::cl::init(false),
6666
llvm::cl::desc("Enable the DestroyHoisting pass."));
6767

68-
// Temporary flag until the stdlib builds with ~Escapable
69-
static llvm::cl::opt<bool>
70-
EnableLifetimeDependenceInsertion(
71-
"enable-lifetime-dependence-insertion", llvm::cl::init(false),
72-
llvm::cl::desc("Enable lifetime dependence insertion."));
73-
74-
// Temporary flag until the stdlib builds with ~Escapable
75-
static llvm::cl::opt<bool>
76-
EnableLifetimeDependenceDiagnostics(
77-
"enable-lifetime-dependence-diagnostics", llvm::cl::init(false),
78-
llvm::cl::desc("Enable lifetime dependence diagnostics."));
79-
8068
//===----------------------------------------------------------------------===//
8169
// Diagnostic Pass Pipeline
8270
//===----------------------------------------------------------------------===//
@@ -184,7 +172,7 @@ static void addMandatoryDiagnosticOptPipeline(SILPassPipelinePlan &P) {
184172
P.addMoveOnlyChecker();
185173

186174
// Check ~Escapable.
187-
if (EnableLifetimeDependenceDiagnostics) {
175+
if (P.getOptions().EnableLifetimeDependenceDiagnostics) {
188176
P.addLifetimeDependenceDiagnostics();
189177
}
190178
if (EnableDeinitDevirtualizer)
@@ -296,10 +284,8 @@ SILPassPipelinePlan::getSILGenPassPipeline(const SILOptions &Options) {
296284
P.startPipeline("SILGen Passes");
297285

298286
P.addSILGenCleanup();
299-
if (EnableLifetimeDependenceDiagnostics || EnableLifetimeDependenceInsertion) {
287+
if (P.getOptions().EnableLifetimeDependenceDiagnostics) {
300288
P.addLifetimeDependenceInsertion();
301-
}
302-
if (EnableLifetimeDependenceDiagnostics) {
303289
P.addLifetimeDependenceScopeFixup();
304290
}
305291
if (SILViewSILGenCFG) {

test/SILOptimizer/lifetime_dependence_borrow.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
// RUN: -sil-verify-all \
55
// RUN: -module-name test \
66
// RUN: -disable-experimental-parser-round-trip \
7-
// RUN: -enable-experimental-feature NonescapableTypes \
8-
// RUN: -Xllvm -enable-lifetime-dependence-diagnostics
7+
// RUN: -enable-experimental-feature NonescapableTypes
98

109
// REQUIRES: asserts
1110
// REQUIRES: swift_in_compiler

test/SILOptimizer/lifetime_dependence_borrow_fail.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
// RUN: -sil-verify-all \
55
// RUN: -module-name test \
66
// RUN: -disable-experimental-parser-round-trip \
7-
// RUN: -enable-experimental-feature NonescapableTypes \
8-
// RUN: -Xllvm -enable-lifetime-dependence-diagnostics
7+
// RUN: -enable-experimental-feature NonescapableTypes
98

109
// REQUIRES: asserts
1110
// REQUIRES: swift_in_compiler

test/SILOptimizer/lifetime_dependence_diagnostics.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
// RUN: -module-name test \
44
// RUN: -disable-experimental-parser-round-trip \
55
// RUN: -enable-experimental-feature NonescapableTypes \
6-
// RUN: -Xllvm -enable-lifetime-dependence-diagnostics \
76
// RUN: 2>&1 | %FileCheck %s
87

98
// REQUIRES: asserts

test/SILOptimizer/lifetime_dependence_generic.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
// RUN: -disable-experimental-parser-round-trip \
66
// RUN: -enable-experimental-feature NonescapableTypes \
77
// RUN: -enable-experimental-feature NoncopyableGenerics \
8-
// RUN: -Xllvm -enable-lifetime-dependence-diagnostics \
98
// RUN: -parse-stdlib -module-name Swift
109

1110
// REQUIRES: asserts

test/SILOptimizer/lifetime_dependence_inherit.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
// RUN: -sil-verify-all \
55
// RUN: -module-name test \
66
// RUN: -disable-experimental-parser-round-trip \
7-
// RUN: -enable-experimental-feature NonescapableTypes \
8-
// RUN: -Xllvm -enable-lifetime-dependence-diagnostics
7+
// RUN: -enable-experimental-feature NonescapableTypes
98

109
// REQUIRES: asserts
1110
// REQUIRES: swift_in_compiler

0 commit comments

Comments
 (0)