r363009 - [Frontend] SetUpDiagnosticLog should handle unowned diagnostic consumer
Ilya Biryukov via cfe-commits
cfe-commits at lists.llvm.org
Tue Jun 11 02:50:58 PDT 2019
Hi Alex,
Just wanted to let you know that I removed logging of diagnostics into a
file inside the unit test in r363041 to unbreak our integrate.
On Tue, Jun 11, 2019 at 1:29 AM Alex Lorenz via cfe-commits <
cfe-commits at lists.llvm.org> wrote:
> Author: arphaman
> Date: Mon Jun 10 16:32:42 2019
> New Revision: 363009
>
> URL: http://llvm.org/viewvc/llvm-project?rev=363009&view=rev
> Log:
> [Frontend] SetUpDiagnosticLog should handle unowned diagnostic consumer
> in the compiler
>
> The function SetUpDiagnosticLog that was called from createDiagnostics
> didn't
> handle the case where the diagnostics engine didn't own the diagnostics
> consumer.
> This is a potential problem for a clang tool, in particular some of the
> follow-up
> patches for clang-scan-deps will need this fix.
>
> Differential Revision: https://reviews.llvm.org/D63101
>
> Modified:
> cfe/trunk/lib/Frontend/CompilerInstance.cpp
> cfe/trunk/unittests/Frontend/CompilerInstanceTest.cpp
>
> Modified: cfe/trunk/lib/Frontend/CompilerInstance.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInstance.cpp?rev=363009&r1=363008&r2=363009&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Frontend/CompilerInstance.cpp (original)
> +++ cfe/trunk/lib/Frontend/CompilerInstance.cpp Mon Jun 10 16:32:42 2019
> @@ -232,9 +232,13 @@ static void SetUpDiagnosticLog(Diagnosti
>
> std::move(StreamOwner));
> if (CodeGenOpts)
> Logger->setDwarfDebugFlags(CodeGenOpts->DwarfDebugFlags);
> - assert(Diags.ownsClient());
> - Diags.setClient(
> - new ChainedDiagnosticConsumer(Diags.takeClient(),
> std::move(Logger)));
> + if (Diags.ownsClient()) {
> + Diags.setClient(
> + new ChainedDiagnosticConsumer(Diags.takeClient(),
> std::move(Logger)));
> + } else {
> + Diags.setClient(
> + new ChainedDiagnosticConsumer(Diags.getClient(),
> std::move(Logger)));
> + }
> }
>
> static void SetupSerializedDiagnostics(DiagnosticOptions *DiagOpts,
>
> Modified: cfe/trunk/unittests/Frontend/CompilerInstanceTest.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Frontend/CompilerInstanceTest.cpp?rev=363009&r1=363008&r2=363009&view=diff
>
> ==============================================================================
> --- cfe/trunk/unittests/Frontend/CompilerInstanceTest.cpp (original)
> +++ cfe/trunk/unittests/Frontend/CompilerInstanceTest.cpp Mon Jun 10
> 16:32:42 2019
> @@ -8,6 +8,7 @@
>
> #include "clang/Frontend/CompilerInstance.h"
> #include "clang/Frontend/CompilerInvocation.h"
> +#include "clang/Frontend/TextDiagnosticPrinter.h"
> #include "llvm/Support/FileSystem.h"
> #include "llvm/Support/Format.h"
> #include "llvm/Support/ToolOutputFile.h"
> @@ -70,4 +71,21 @@ TEST(CompilerInstance, DefaultVFSOverlay
> ASSERT_TRUE(Instance.getFileManager().getFile("vfs-virtual.file"));
> }
>
> +TEST(CompilerInstance, AllowDiagnosticLogWithUnownedDiagnosticConsumer) {
> + auto DiagOpts = new DiagnosticOptions();
> + DiagOpts->DiagnosticLogFile = "log.diags";
> +
> + // Create the diagnostic engine with unowned consumer.
> + std::string DiagnosticOutput;
> + llvm::raw_string_ostream DiagnosticsOS(DiagnosticOutput);
> + auto DiagPrinter = llvm::make_unique<TextDiagnosticPrinter>(
> + DiagnosticsOS, new DiagnosticOptions());
> + CompilerInstance Instance;
> + IntrusiveRefCntPtr<DiagnosticsEngine> Diags =
> Instance.createDiagnostics(
> + DiagOpts, DiagPrinter.get(), /*ShouldOwnClient=*/false);
> +
> + Diags->Report(diag::err_expected) << "no crash";
> + ASSERT_EQ(DiagnosticsOS.str(), "error: expected no crash\n");
> +}
> +
> } // anonymous namespace
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
--
Regards,
Ilya Biryukov
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190611/c3168075/attachment.html>
More information about the cfe-commits
mailing list