Merge pull request #40189 from gottesmm/pr-aeffd0309402b8c9a744770c71ce40ca6f0459ff

[move-operator] Specify if LexicalLifetimes is enabled using an enum instead of a bool.
This commit is contained in:
Michael Gottesman
2021-11-15 16:47:38 -08:00
committed by GitHub
12 changed files with 101 additions and 32 deletions

View File

@@ -10,6 +10,7 @@
//
//===----------------------------------------------------------------------===//
#include "swift/AST/SILOptions.h"
#include "swift/Frontend/Frontend.h"
#include "ArgsToFrontendOptionsConverter.h"
@@ -1430,12 +1431,22 @@ static bool ParseSILArgs(SILOptions &Opts, ArgList &Args,
// -Ounchecked might also set removal of runtime asserts (cond_fail).
Opts.RemoveRuntimeAsserts |= Args.hasArg(OPT_RemoveRuntimeAsserts);
Opts.EnableExperimentalLexicalLifetimes |=
Args.hasArg(OPT_enable_experimental_lexical_lifetimes);
// If experimental move only is enabled, always enable lexical lifetime as
// well. Move only depends on lexical lifetimes.
Opts.EnableExperimentalLexicalLifetimes |=
bool enableExperimentalLexicalLifetimes =
Args.hasArg(OPT_enable_experimental_lexical_lifetimes) ||
Args.hasArg(OPT_enable_experimental_move_only);
// Error if both experimental lexical lifetimes and disable lexical lifetimes
// are both set.
if (enableExperimentalLexicalLifetimes &&
Args.hasArg(OPT_disable_lexical_lifetimes)) {
return true;
} else {
if (enableExperimentalLexicalLifetimes)
Opts.LexicalLifetimes = LexicalLifetimesOption::ExperimentalLate;
if (Args.hasArg(OPT_disable_lexical_lifetimes))
Opts.LexicalLifetimes = LexicalLifetimesOption::Off;
}
Opts.EnableCopyPropagation |= Args.hasArg(OPT_enable_copy_propagation);
Opts.DisableCopyPropagation |= Args.hasArg(OPT_disable_copy_propagation);