diff options
author | Kazu Hirata <kazu@google.com> | 2023-10-05 13:08:24 -0700 |
---|---|---|
committer | Kazu Hirata <kazu@google.com> | 2023-10-05 13:08:24 -0700 |
commit | a6acf3fd49a20c570a390af2a3c84e10b9545b68 (patch) | |
tree | 146f045f728ee514b7b9f0eedc542ef8064c6c8c /clang/lib/Frontend/ASTUnit.cpp | |
parent | 964a2522022a8fe2c1f7c79dfc5597010eb1e5dc (diff) | |
download | llvm-a6acf3fd49a20c570a390af2a3c84e10b9545b68.zip llvm-a6acf3fd49a20c570a390af2a3c84e10b9545b68.tar.gz llvm-a6acf3fd49a20c570a390af2a3c84e10b9545b68.tar.bz2 |
Revert "Fixes and closes #53952. Setting the ASTHasCompilerErrors member variable correctly based on the PP diagnostics. (#68127)"
This reverts commit a50e63b38b931d945f97eac882278068221eca17.
With clang-14.0.6 as the host compiler, I'm getting:
ld.lld: error: undefined symbol: clang::ASTWriter::WriteAST(clang::Sema&, llvm::StringRef, clang::Module*, llvm::StringRef, bool, bool)
>>> referenced by ASTUnit.cpp
>>> ASTUnit.cpp.o:(clang::ASTUnit::serialize(llvm::raw_ostream&)) in archive lib/libclangFrontend.a
Diffstat (limited to 'clang/lib/Frontend/ASTUnit.cpp')
-rw-r--r-- | clang/lib/Frontend/ASTUnit.cpp | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/clang/lib/Frontend/ASTUnit.cpp b/clang/lib/Frontend/ASTUnit.cpp index 85157c3..016f88a 100644 --- a/clang/lib/Frontend/ASTUnit.cpp +++ b/clang/lib/Frontend/ASTUnit.cpp @@ -2341,9 +2341,12 @@ bool ASTUnit::Save(StringRef File) { return false; } -static bool serializeUnit(ASTWriter &Writer, SmallVectorImpl<char> &Buffer, - Sema &S, raw_ostream &OS) { - Writer.WriteAST(S, std::string(), nullptr, ""); +static bool serializeUnit(ASTWriter &Writer, + SmallVectorImpl<char> &Buffer, + Sema &S, + bool hasErrors, + raw_ostream &OS) { + Writer.WriteAST(S, std::string(), nullptr, "", hasErrors); // Write the generated bitstream to "Out". if (!Buffer.empty()) @@ -2353,14 +2356,18 @@ static bool serializeUnit(ASTWriter &Writer, SmallVectorImpl<char> &Buffer, } bool ASTUnit::serialize(raw_ostream &OS) { + // For serialization we are lenient if the errors were only warn-as-error kind. + bool hasErrors = getDiagnostics().hasUncompilableErrorOccurred(); + if (WriterData) - return serializeUnit(WriterData->Writer, WriterData->Buffer, getSema(), OS); + return serializeUnit(WriterData->Writer, WriterData->Buffer, + getSema(), hasErrors, OS); SmallString<128> Buffer; llvm::BitstreamWriter Stream(Buffer); InMemoryModuleCache ModuleCache; ASTWriter Writer(Stream, Buffer, ModuleCache, {}); - return serializeUnit(Writer, Buffer, getSema(), OS); + return serializeUnit(Writer, Buffer, getSema(), hasErrors, OS); } using SLocRemap = ContinuousRangeMap<unsigned, int, 2>; |