summaryrefslogtreecommitdiffstats
path: root/clang/unittests/Basic/DiagnosticTest.cpp
diff options
context:
space:
mode:
authorManuel Klimek <klimek@google.com>2016-03-01 10:56:19 +0000
committerManuel Klimek <klimek@google.com>2016-03-01 10:56:19 +0000
commit016c024ca4798796480af7ecae6758e95600550f (patch)
treee599961bf87585bea4ae6ded81756f747efc4a40 /clang/unittests/Basic/DiagnosticTest.cpp
parent255689c3ad4feb4af32aea0a50ab881f472a66e9 (diff)
downloadbcm5719-llvm-016c024ca4798796480af7ecae6758e95600550f.tar.gz
bcm5719-llvm-016c024ca4798796480af7ecae6758e95600550f.zip
Optionally demote fatal errors to non-fatal errors.
This behavior is enabled when the new CXTranslationUnit_KeepGoing option is passed to clang_parseTranslationUnit{,2}. It is geared towards use by IDEs and similar consumers of the clang-c API where fatal errors may arise when parsing incomplete code mid-edit, or when include paths are not properly configured yet. In such situations one still wants to get as much information as possible about a TU. Previously, the semantic analysis would not instantiate templates or report additional fatal errors after the first fatal error was encountered. Fixes PR24268. Patch by Milian Wolff. llvm-svn: 262318
Diffstat (limited to 'clang/unittests/Basic/DiagnosticTest.cpp')
-rw-r--r--clang/unittests/Basic/DiagnosticTest.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/clang/unittests/Basic/DiagnosticTest.cpp b/clang/unittests/Basic/DiagnosticTest.cpp
index fa2b56e0834..4ffa0837bd6 100644
--- a/clang/unittests/Basic/DiagnosticTest.cpp
+++ b/clang/unittests/Basic/DiagnosticTest.cpp
@@ -46,4 +46,27 @@ TEST(DiagnosticTest, suppressAndTrap) {
EXPECT_FALSE(Diags.hasUnrecoverableErrorOccurred());
}
+// Check that FatalsAsErrors works as intended
+TEST(DiagnosticTest, fatalsAsErrors) {
+ DiagnosticsEngine Diags(new DiagnosticIDs(),
+ new DiagnosticOptions,
+ new IgnoringDiagConsumer());
+ Diags.setFatalsAsError(true);
+
+ // 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(Diags.hasErrorOccurred());
+ EXPECT_FALSE(Diags.hasFatalErrorOccurred());
+ EXPECT_TRUE(Diags.hasUncompilableErrorOccurred());
+ EXPECT_TRUE(Diags.hasUnrecoverableErrorOccurred());
+}
+
}
OpenPOWER on IntegriCloud