aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Frontend/ASTUnit.cpp
diff options
context:
space:
mode:
authorKazu Hirata <kazu@google.com>2023-10-05 13:08:24 -0700
committerKazu Hirata <kazu@google.com>2023-10-05 13:08:24 -0700
commita6acf3fd49a20c570a390af2a3c84e10b9545b68 (patch)
tree146f045f728ee514b7b9f0eedc542ef8064c6c8c /clang/lib/Frontend/ASTUnit.cpp
parent964a2522022a8fe2c1f7c79dfc5597010eb1e5dc (diff)
downloadllvm-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.cpp17
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>;