mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-12-05 12:51:16 +00:00
Make DiagnosticErrorTrap work even if SuppressAllDiagnostics is enabled.
Patch by Brad King! llvm-svn: 223525
This commit is contained in:
parent
be68a99f20
commit
a2686713ef
@ -606,9 +606,6 @@ StringRef DiagnosticIDs::getNearestOption(diag::Flavor Flavor,
|
||||
bool DiagnosticIDs::ProcessDiag(DiagnosticsEngine &Diag) const {
|
||||
Diagnostic Info(&Diag);
|
||||
|
||||
if (Diag.SuppressAllDiagnostics)
|
||||
return false;
|
||||
|
||||
assert(Diag.getClient() && "DiagnosticClient not set!");
|
||||
|
||||
// Figure out the diagnostic level of this message.
|
||||
@ -616,6 +613,17 @@ bool DiagnosticIDs::ProcessDiag(DiagnosticsEngine &Diag) const {
|
||||
DiagnosticIDs::Level DiagLevel
|
||||
= getDiagnosticLevel(DiagID, Info.getLocation(), Diag);
|
||||
|
||||
// Update counts for DiagnosticErrorTrap even if a fatal error occurred
|
||||
// or diagnostics are suppressed.
|
||||
if (DiagLevel >= DiagnosticIDs::Error) {
|
||||
++Diag.TrapNumErrorsOccurred;
|
||||
if (isUnrecoverable(DiagID))
|
||||
++Diag.TrapNumUnrecoverableErrorsOccurred;
|
||||
}
|
||||
|
||||
if (Diag.SuppressAllDiagnostics)
|
||||
return false;
|
||||
|
||||
if (DiagLevel != DiagnosticIDs::Note) {
|
||||
// Record that a fatal error occurred only when we see a second
|
||||
// non-note diagnostic. This allows notes to be attached to the
|
||||
@ -627,13 +635,6 @@ bool DiagnosticIDs::ProcessDiag(DiagnosticsEngine &Diag) const {
|
||||
Diag.LastDiagLevel = DiagLevel;
|
||||
}
|
||||
|
||||
// Update counts for DiagnosticErrorTrap even if a fatal error occurred.
|
||||
if (DiagLevel >= DiagnosticIDs::Error) {
|
||||
++Diag.TrapNumErrorsOccurred;
|
||||
if (isUnrecoverable(DiagID))
|
||||
++Diag.TrapNumUnrecoverableErrorsOccurred;
|
||||
}
|
||||
|
||||
// If a fatal error has already been emitted, silence all subsequent
|
||||
// diagnostics.
|
||||
if (Diag.FatalErrorOccurred) {
|
||||
|
@ -4,6 +4,7 @@ set(LLVM_LINK_COMPONENTS
|
||||
|
||||
add_clang_unittest(BasicTests
|
||||
CharInfoTest.cpp
|
||||
DiagnosticTest.cpp
|
||||
FileManagerTest.cpp
|
||||
SourceManagerTest.cpp
|
||||
VirtualFileSystemTest.cpp
|
||||
|
49
clang/unittests/Basic/DiagnosticTest.cpp
Normal file
49
clang/unittests/Basic/DiagnosticTest.cpp
Normal file
@ -0,0 +1,49 @@
|
||||
//===- unittests/Basic/DiagnosticTest.cpp -- Diagnostic engine tests ------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "clang/Basic/Diagnostic.h"
|
||||
#include "clang/Basic/DiagnosticIDs.h"
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
using namespace llvm;
|
||||
using namespace clang;
|
||||
|
||||
namespace {
|
||||
|
||||
// Check that DiagnosticErrorTrap works with SuppressAllDiagnostics.
|
||||
TEST(DiagnosticTest, suppressAndTrap) {
|
||||
DiagnosticsEngine Diags(new DiagnosticIDs(),
|
||||
new DiagnosticOptions,
|
||||
new IgnoringDiagConsumer());
|
||||
Diags.setSuppressAllDiagnostics(true);
|
||||
|
||||
{
|
||||
DiagnosticErrorTrap trap(Diags);
|
||||
|
||||
// Diag that would set UncompilableErrorOccurred and ErrorOccurred.
|
||||
Diags.Report(diag::err_target_unknown_triple) << "unknown";
|
||||
|
||||
// Diag that would set UnrecoverableErrorOccurred and ErrorOccurred.
|
||||
Diags.Report(diag::err_cannot_open_file) << "file" << "error";
|
||||
|
||||
// Diag that would set FatalErrorOccurred
|
||||
// (via non-note following a fatal error).
|
||||
Diags.Report(diag::warn_mt_message) << "warning";
|
||||
|
||||
EXPECT_TRUE(trap.hasErrorOccurred());
|
||||
EXPECT_TRUE(trap.hasUnrecoverableErrorOccurred());
|
||||
}
|
||||
|
||||
EXPECT_FALSE(Diags.hasErrorOccurred());
|
||||
EXPECT_FALSE(Diags.hasFatalErrorOccurred());
|
||||
EXPECT_FALSE(Diags.hasUncompilableErrorOccurred());
|
||||
EXPECT_FALSE(Diags.hasUnrecoverableErrorOccurred());
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user