@@ -702,10 +702,15 @@ static bool writeTBDIfNeeded(CompilerInstance &Instance) {
702702 return false ;
703703 }
704704
705+ if (Invocation.getSILOptions ().CrossModuleOptimization ) {
706+ Instance.getDiags ().diagnose (SourceLoc (),
707+ diag::tbd_not_supported_with_cmo);
708+ return false ;
709+ }
710+
705711 const std::string &TBDPath = Invocation.getTBDPathForWholeModule ();
706712
707- return writeTBD (Instance.getMainModule (), TBDPath, tbdOpts,
708- Instance.getPublicCMOSymbols ());
713+ return writeTBD (Instance.getMainModule (), TBDPath, tbdOpts);
709714}
710715
711716static bool performCompileStepsPostSILGen (CompilerInstance &Instance,
@@ -1392,19 +1397,19 @@ static bool processCommandLineAndRunImmediately(CompilerInstance &Instance,
13921397
13931398static bool validateTBDIfNeeded (const CompilerInvocation &Invocation,
13941399 ModuleOrSourceFile MSF,
1395- const llvm::Module &IRModule,
1396- TBDSymbolSetPtr publicCMOSymbols) {
1397- auto mode = Invocation.getFrontendOptions ().ValidateTBDAgainstIR ;
1398- if (mode == FrontendOptions::TBDValidationMode::All &&
1399- Invocation.getSILOptions ().CrossModuleOptimization )
1400- mode = FrontendOptions::TBDValidationMode::MissingFromTBD;
1401-
1400+ const llvm::Module &IRModule) {
1401+ const auto mode = Invocation.getFrontendOptions ().ValidateTBDAgainstIR ;
14021402 const bool canPerformTBDValidation = [&]() {
14031403 // If the user has requested we skip validation, honor it.
14041404 if (mode == FrontendOptions::TBDValidationMode::None) {
14051405 return false ;
14061406 }
14071407
1408+ // Cross-module optimization does not support TBD.
1409+ if (Invocation.getSILOptions ().CrossModuleOptimization ) {
1410+ return false ;
1411+ }
1412+
14081413 // If we can't validate the given input file, bail early. This covers cases
14091414 // like passing raw SIL as a primary file.
14101415 const auto &IO = Invocation.getFrontendOptions ().InputsAndOutputs ;
@@ -1465,10 +1470,9 @@ static bool validateTBDIfNeeded(const CompilerInvocation &Invocation,
14651470 // noise from e.g. statically-linked libraries.
14661471 Opts.embedSymbolsFromModules .clear ();
14671472 if (auto *SF = MSF.dyn_cast <SourceFile *>()) {
1468- return validateTBD (SF, IRModule, Opts, publicCMOSymbols,
1469- diagnoseExtraSymbolsInTBD);
1473+ return validateTBD (SF, IRModule, Opts, diagnoseExtraSymbolsInTBD);
14701474 } else {
1471- return validateTBD (MSF.get <ModuleDecl *>(), IRModule, Opts, publicCMOSymbols,
1475+ return validateTBD (MSF.get <ModuleDecl *>(), IRModule, Opts,
14721476 diagnoseExtraSymbolsInTBD);
14731477 }
14741478}
@@ -1681,8 +1685,6 @@ static bool performCompileStepsPostSILGen(CompilerInstance &Instance,
16811685 return processCommandLineAndRunImmediately (
16821686 Instance, std::move (SM), MSF, observer, ReturnValue);
16831687
1684- TBDSymbolSetPtr publicCMOSymbols = SM->getPublicCMOSymbols ();
1685-
16861688 StringRef OutputFilename = PSPs.OutputFilename ;
16871689 std::vector<std::string> ParallelOutputFilenames =
16881690 opts.InputsAndOutputs .copyOutputFilenames ();
@@ -1701,8 +1703,7 @@ static bool performCompileStepsPostSILGen(CompilerInstance &Instance,
17011703 if (!IRModule)
17021704 return Instance.getDiags ().hadAnyError ();
17031705
1704- if (validateTBDIfNeeded (Invocation, MSF, *IRModule.getModule (),
1705- publicCMOSymbols))
1706+ if (validateTBDIfNeeded (Invocation, MSF, *IRModule.getModule ()))
17061707 return true ;
17071708
17081709 return generateCode (Instance, OutputFilename, IRModule.getModule (),
0 commit comments