[clang] a6acf3f - Revert "Fixes and closes #53952. Setting the ASTHasCompilerErrors member variable correctly based on the PP diagnostics. (#68127)"
Aaron Ballman via cfe-commits
cfe-commits at lists.llvm.org
Thu Oct 5 13:19:36 PDT 2023
On Thu, Oct 5, 2023 at 4:18 PM Aaron Ballman <aaron at aaronballman.com> wrote:
>
> On Thu, Oct 5, 2023 at 4:08 PM Kazu Hirata via cfe-commits
> <cfe-commits at lists.llvm.org> wrote:
> >
> >
> > Author: Kazu Hirata
> > Date: 2023-10-05T13:08:24-07:00
> > New Revision: a6acf3fd49a20c570a390af2a3c84e10b9545b68
> >
> > URL: https://github.com/llvm/llvm-project/commit/a6acf3fd49a20c570a390af2a3c84e10b9545b68
> > DIFF: https://github.com/llvm/llvm-project/commit/a6acf3fd49a20c570a390af2a3c84e10b9545b68.diff
> >
> > LOG: 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
>
> That's expected; we removed a parameter that appeared to be unused and
> was causing problems. Is lld using the parameter that was removed? If
> so, what was the intent of overriding the diagnostics engine?
Oh. I see, it wasn't lld using it, it comes from a missed usage in
ASTUnit.cpp that should have been updated.
~Aaron
>
> ~Aaron
>
> >
> > Added:
> >
> >
> > Modified:
> > clang/include/clang/Serialization/ASTWriter.h
> > clang/lib/Frontend/ASTUnit.cpp
> > clang/lib/Serialization/ASTWriter.cpp
> > clang/lib/Serialization/GeneratePCH.cpp
> >
> > Removed:
> >
> >
> >
> > ################################################################################
> > diff --git a/clang/include/clang/Serialization/ASTWriter.h b/clang/include/clang/Serialization/ASTWriter.h
> > index 98445d40ebd82c3..f2c7c03ff093607 100644
> > --- a/clang/include/clang/Serialization/ASTWriter.h
> > +++ b/clang/include/clang/Serialization/ASTWriter.h
> > @@ -613,6 +613,7 @@ class ASTWriter : public ASTDeserializationListener,
> > /// the module but currently is merely a random 32-bit number.
> > ASTFileSignature WriteAST(Sema &SemaRef, StringRef OutputFile,
> > Module *WritingModule, StringRef isysroot,
> > + bool hasErrors = false,
> > bool ShouldCacheASTInMemory = false);
> >
> > /// Emit a token.
> >
> > diff --git a/clang/lib/Frontend/ASTUnit.cpp b/clang/lib/Frontend/ASTUnit.cpp
> > index 85157c3b21b6648..016f88a43a56ddd 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>;
> >
> > diff --git a/clang/lib/Serialization/ASTWriter.cpp b/clang/lib/Serialization/ASTWriter.cpp
> > index 0acd86de06ba404..201e2fcaaec91aa 100644
> > --- a/clang/lib/Serialization/ASTWriter.cpp
> > +++ b/clang/lib/Serialization/ASTWriter.cpp
> > @@ -4622,12 +4622,12 @@ time_t ASTWriter::getTimestampForOutput(const FileEntry *E) const {
> >
> > ASTFileSignature ASTWriter::WriteAST(Sema &SemaRef, StringRef OutputFile,
> > Module *WritingModule, StringRef isysroot,
> > + bool hasErrors,
> > bool ShouldCacheASTInMemory) {
> > llvm::TimeTraceScope scope("WriteAST", OutputFile);
> > WritingAST = true;
> >
> > - ASTHasCompilerErrors =
> > - SemaRef.PP.getDiagnostics().hasUncompilableErrorOccurred();
> > + ASTHasCompilerErrors = hasErrors;
> >
> > // Emit the file header.
> > Stream.Emit((unsigned)'C', 8);
> >
> > diff --git a/clang/lib/Serialization/GeneratePCH.cpp b/clang/lib/Serialization/GeneratePCH.cpp
> > index cf8084333811f13..601a24b4aec46ad 100644
> > --- a/clang/lib/Serialization/GeneratePCH.cpp
> > +++ b/clang/lib/Serialization/GeneratePCH.cpp
> > @@ -65,8 +65,12 @@ void PCHGenerator::HandleTranslationUnit(ASTContext &Ctx) {
> >
> > // Emit the PCH file to the Buffer.
> > assert(SemaPtr && "No Sema?");
> > - Buffer->Signature = Writer.WriteAST(*SemaPtr, OutputFile, Module, isysroot,
> > - ShouldCacheASTInMemory);
> > + Buffer->Signature =
> > + Writer.WriteAST(*SemaPtr, OutputFile, Module, isysroot,
> > + // For serialization we are lenient if the errors were
> > + // only warn-as-error kind.
> > + PP.getDiagnostics().hasUncompilableErrorOccurred(),
> > + ShouldCacheASTInMemory);
> >
> > Buffer->IsComplete = true;
> > }
> >
> >
> >
> > _______________________________________________
> > cfe-commits mailing list
> > cfe-commits at lists.llvm.org
> > https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list