@@ -629,6 +629,11 @@ static bool ParseLangArgs(LangOptions &Opts, ArgList &Args,
629629 }
630630 }
631631
632+ if (FrontendOpts.RequestedAction == FrontendOptions::ActionType::EmitSyntax) {
633+ Opts.BuildSyntaxTree = true ;
634+ Opts.VerifySyntaxTree = true ;
635+ }
636+
632637 return HadError || UnsupportedOS || UnsupportedArch;
633638}
634639
@@ -677,6 +682,17 @@ static bool ParseTypeCheckerArgs(TypeCheckerOptions &Opts, ArgList &Args,
677682 // body skipping.
678683 Opts.SkipNonInlinableFunctionBodies |= Args.hasArg (OPT_tbd_is_installapi);
679684
685+ if (Opts.SkipNonInlinableFunctionBodies &&
686+ FrontendOpts.ModuleName == SWIFT_ONONE_SUPPORT) {
687+ // Disable this optimization if we're compiling SwiftOnoneSupport, because
688+ // we _definitely_ need to look inside every declaration to figure out
689+ // what gets prespecialized.
690+ Opts.SkipNonInlinableFunctionBodies = false ;
691+ Diags.diagnose (SourceLoc (),
692+ diag::module_incompatible_with_skip_function_bodies,
693+ SWIFT_ONONE_SUPPORT);
694+ }
695+
680696 Opts.DisableConstraintSolverPerformanceHacks |=
681697 Args.hasArg (OPT_disable_constraint_solver_performance_hacks);
682698
@@ -903,12 +919,14 @@ void parseExclusivityEnforcementOptions(const llvm::opt::Arg *A,
903919
904920static bool ParseSILArgs (SILOptions &Opts, ArgList &Args,
905921 IRGenOptions &IRGenOpts,
906- FrontendOptions &FEOpts,
922+ const FrontendOptions &FEOpts,
923+ const TypeCheckerOptions &TCOpts,
907924 DiagnosticEngine &Diags,
908925 const llvm::Triple &Triple,
909926 ClangImporterOptions &ClangOpts) {
910927 using namespace options ;
911928
929+
912930 if (const Arg *A = Args.getLastArg (OPT_sil_inline_threshold)) {
913931 if (StringRef (A->getValue ()).getAsInteger (10 , Opts.InlineThreshold )) {
914932 Diags.diagnose (SourceLoc (), diag::error_invalid_arg_value,
@@ -951,8 +969,9 @@ static bool ParseSILArgs(SILOptions &Opts, ArgList &Args,
951969 if (Args.hasArg (OPT_sil_merge_partial_modules))
952970 Opts.MergePartialModules = true ;
953971
954- if (Args.hasArg (OPT_experimental_skip_non_inlinable_function_bodies))
955- Opts.SkipNonInlinableFunctionBodies = true ;
972+ // Propagate the typechecker's understanding of
973+ // -experimental-skip-non-inlinable-function-bodies to SIL.
974+ Opts.SkipNonInlinableFunctionBodies = TCOpts.SkipNonInlinableFunctionBodies ;
956975
957976 // Parse the optimization level.
958977 // Default to Onone settings if no option is passed.
@@ -1624,7 +1643,8 @@ bool CompilerInvocation::parseArgs(
16241643 return true ;
16251644 }
16261645
1627- if (ParseSILArgs (SILOpts, ParsedArgs, IRGenOpts, FrontendOpts, Diags,
1646+ if (ParseSILArgs (SILOpts, ParsedArgs, IRGenOpts, FrontendOpts,
1647+ TypeCheckerOpts, Diags,
16281648 LangOpts.Target , ClangImporterOpts)) {
16291649 return true ;
16301650 }
0 commit comments