diff --git a/lib/DriverTool/sil_llvm_gen_main.cpp b/lib/DriverTool/sil_llvm_gen_main.cpp index 07ef938778931..9dd80a627a36c 100644 --- a/lib/DriverTool/sil_llvm_gen_main.cpp +++ b/lib/DriverTool/sil_llvm_gen_main.cpp @@ -433,6 +433,15 @@ int sil_llvm_gen_main(ArrayRef argv, void *MainAddr) { desc.out = &outFile->getOS(); if (options.OutputKind == IRGenOutputKind::LLVMAssemblyBeforeOptimization) { + // We need to perform Sema here since IRGenRequest itself does not perform + // Sema (unlike OptimizedIRRequest). + CI.performSema(); + + // If Sema produced an error, exit early. + bool HadError = CI.getASTContext().hadError(); + if (HadError) + exit(-1); + auto generatedMod = evaluateOrFatal(eval, IRGenRequest{desc}); if (!generatedMod) return 1;