@@ -107,7 +107,13 @@ EnableExperimentalConcurrency("enable-experimental-concurrency",
107
107
108
108
static llvm::cl::opt<bool > EnableExperimentalLexicalLifetimes (
109
109
" enable-experimental-lexical-lifetimes" ,
110
- llvm::cl::desc (" Enable experimental lexical lifetimes." ));
110
+ llvm::cl::desc (" Enable experimental lexical lifetimes. Mutually exclusive "
111
+ " with disable-lexical-lifetimes." ));
112
+
113
+ static llvm::cl::opt<bool > DisableLexicalLifetimes (
114
+ " disable-lexical-lifetimes" ,
115
+ llvm::cl::desc (" Disable the default early lexical lifetimes. Mutually "
116
+ " exclusive with enable-experimental-lexical-lifetimes" ));
111
117
112
118
static llvm::cl::opt<bool >
113
119
EnableExperimentalMoveOnly (" enable-experimental-move-only" ,
@@ -519,13 +525,23 @@ int main(int argc, char **argv) {
519
525
SILOpts.EnableOSSAModules = EnableOSSAModules;
520
526
SILOpts.EnableCopyPropagation = EnableCopyPropagation;
521
527
SILOpts.DisableCopyPropagation = DisableCopyPropagation;
522
- SILOpts.EnableExperimentalLexicalLifetimes =
523
- EnableExperimentalLexicalLifetimes;
524
- // Also enable lexical lifetimes if experimental move only is enabled. This is
525
- // because move only depends on lexical lifetimes being enabled and it saved
526
- // some typing ; ).
527
- SILOpts.EnableExperimentalLexicalLifetimes |=
528
- EnableExperimentalMoveOnly;
528
+
529
+ // Enable lexical lifetimes if it is set or if experimental move only is
530
+ // enabled. This is because move only depends on lexical lifetimes being
531
+ // enabled and it saved some typing ; ).
532
+ bool enableExperimentalLexicalLifetimes =
533
+ EnableExperimentalLexicalLifetimes | EnableExperimentalMoveOnly;
534
+ if (enableExperimentalLexicalLifetimes && DisableLexicalLifetimes) {
535
+ fprintf (
536
+ stderr,
537
+ " Error! Can not specify both -enable-experimental-lexical-lifetimes "
538
+ " and -disable-lexical-lifetimes!\n " );
539
+ exit (-1 );
540
+ }
541
+ if (enableExperimentalLexicalLifetimes)
542
+ SILOpts.LexicalLifetimes = LexicalLifetimesOption::ExperimentalLate;
543
+ if (DisableLexicalLifetimes)
544
+ SILOpts.LexicalLifetimes = LexicalLifetimesOption::Off;
529
545
530
546
serialization::ExtendedValidationInfo extendedInfo;
531
547
llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> FileBufOrErr =
0 commit comments