|
10 | 10 | // |
11 | 11 | //===----------------------------------------------------------------------===// |
12 | 12 |
|
| 13 | +#include "swift/AST/SILOptions.h" |
13 | 14 | #include "swift/Frontend/Frontend.h" |
14 | 15 |
|
15 | 16 | #include "ArgsToFrontendOptionsConverter.h" |
@@ -1430,12 +1431,22 @@ static bool ParseSILArgs(SILOptions &Opts, ArgList &Args, |
1430 | 1431 | // -Ounchecked might also set removal of runtime asserts (cond_fail). |
1431 | 1432 | Opts.RemoveRuntimeAsserts |= Args.hasArg(OPT_RemoveRuntimeAsserts); |
1432 | 1433 |
|
1433 | | - Opts.EnableExperimentalLexicalLifetimes |= |
1434 | | - Args.hasArg(OPT_enable_experimental_lexical_lifetimes); |
1435 | 1434 | // If experimental move only is enabled, always enable lexical lifetime as |
1436 | 1435 | // well. Move only depends on lexical lifetimes. |
1437 | | - Opts.EnableExperimentalLexicalLifetimes |= |
| 1436 | + bool enableExperimentalLexicalLifetimes = |
| 1437 | + Args.hasArg(OPT_enable_experimental_lexical_lifetimes) || |
1438 | 1438 | Args.hasArg(OPT_enable_experimental_move_only); |
| 1439 | + // Error if both experimental lexical lifetimes and disable lexical lifetimes |
| 1440 | + // are both set. |
| 1441 | + if (enableExperimentalLexicalLifetimes && |
| 1442 | + Args.hasArg(OPT_disable_lexical_lifetimes)) { |
| 1443 | + return true; |
| 1444 | + } else { |
| 1445 | + if (enableExperimentalLexicalLifetimes) |
| 1446 | + Opts.LexicalLifetimes = LexicalLifetimesOption::ExperimentalLate; |
| 1447 | + if (Args.hasArg(OPT_disable_lexical_lifetimes)) |
| 1448 | + Opts.LexicalLifetimes = LexicalLifetimesOption::Off; |
| 1449 | + } |
1439 | 1450 |
|
1440 | 1451 | Opts.EnableCopyPropagation |= Args.hasArg(OPT_enable_copy_propagation); |
1441 | 1452 | Opts.DisableCopyPropagation |= Args.hasArg(OPT_disable_copy_propagation); |
|
0 commit comments