This patch cleans-up the file generation code in Flang's frontend driver. It improves the layering between CompilerInstance::CreateDefaultOutputFile, CompilerInstance::CreateOutputFile and their various clients.
- Rename CreateOutputFile as CreateOutputFileImpl and make it private. This method is an implementation detail.
- Instead of passing an std::error_code out parameter into CreateOutputFileImpl, have it return Expected<>. This is a bit shorter and idiomatic LLVM.
- Make CreateDefaultOutputFile (which calls CreateOutputFileImpl) issue an error when file creation fails. The error code from CreateOutputFileImpl is used to generate a meaningful diagnostic message.
- Remove error reporting from PrintPreprocessedAction::ExecuteAction. This is only for cases when output file generation fails. This is handled in CreateDefaultOutputFile instead (see the previous point).
- Inline AddOutputFile into its only caller, CreateDefaultOutputFile.
- Switch from lvm::buffer_ostream to llvm::buffer_unique_ostream> for non-seekable output streams. This simplifies the logic in the driver and was introduced for this very reason in [1]
- Moke sure that the diagnostics from the prescanner when running -E (PrintPreprocessedAction::ExecuteAction) are printed before the actual output is generated.
- Update comments, add test.
clang-tidy: warning: statement should be inside braces [readability-braces-around-statements]
not useful