In r149662, setDiagnosticMapping was modified to not allow warnings mapped to

MAP_ERROR to be remapped to MAP_WARNING.  These new APIs are being added to 
allow the diagnostic mapping's "no Werror" bit to be set, and potentially 
downgrade anything already mapped to be a warning.

llvm-svn: 150001
This commit is contained in:
Chad Rosier 2012-02-07 19:55:45 +00:00
parent 09d20eefaa
commit 4c17fa7620
2 changed files with 43 additions and 0 deletions

View File

@ -464,12 +464,20 @@ public:
bool setDiagnosticGroupMapping(StringRef Group, diag::Mapping Map,
SourceLocation Loc = SourceLocation());
/// \brief Set the warning-as-error flag for the given diagnostic. This
/// function always only operates on the current diagnostic state.
void setDiagnosticWarningAsError(diag::kind Diag, bool Enabled);
/// \brief Set the warning-as-error flag for the given diagnostic group. This
/// function always only operates on the current diagnostic state.
///
/// \returns True if the given group is unknown, false otherwise.
bool setDiagnosticGroupWarningAsError(StringRef Group, bool Enabled);
/// \brief Set the error-as-fatal flag for the given diagnostic. This function
/// always only operates on the current diagnostic state.
void setDiagnosticErrorAsFatal(diag::kind Diag, bool Enabled);
/// \brief Set the error-as-fatal flag for the given diagnostic group. This
/// function always only operates on the current diagnostic state.
///

View File

@ -243,6 +243,24 @@ bool DiagnosticsEngine::setDiagnosticGroupMapping(
return false;
}
void DiagnosticsEngine::setDiagnosticWarningAsError(diag::kind Diag,
bool Enabled) {
// If we are enabling this feature, just set the diagnostic mappings to map to
// errors.
if (Enabled)
setDiagnosticMapping(Diag, diag::MAP_ERROR, SourceLocation());
// Otherwise, we want to set the diagnostic mapping's "no Werror" bit, and
// potentially downgrade anything already mapped to be a warning.
DiagnosticMappingInfo &Info = GetCurDiagState()->getOrAddMappingInfo(Diag);
if (Info.getMapping() == diag::MAP_ERROR ||
Info.getMapping() == diag::MAP_FATAL)
Info.setMapping(diag::MAP_WARNING);
Info.setNoWarningAsError(true);
}
bool DiagnosticsEngine::setDiagnosticGroupWarningAsError(StringRef Group,
bool Enabled) {
// If we are enabling this feature, just set the diagnostic mappings to map to
@ -273,6 +291,23 @@ bool DiagnosticsEngine::setDiagnosticGroupWarningAsError(StringRef Group,
return false;
}
void DiagnosticsEngine::setDiagnosticErrorAsFatal(diag::kind Diag,
bool Enabled) {
// If we are enabling this feature, just set the diagnostic mappings to map to
// errors.
if (Enabled)
setDiagnosticMapping(Diag, diag::MAP_FATAL, SourceLocation());
// Otherwise, we want to set the diagnostic mapping's "no Werror" bit, and
// potentially downgrade anything already mapped to be a warning.
DiagnosticMappingInfo &Info = GetCurDiagState()->getOrAddMappingInfo(Diag);
if (Info.getMapping() == diag::MAP_FATAL)
Info.setMapping(diag::MAP_ERROR);
Info.setNoErrorAsFatal(true);
}
bool DiagnosticsEngine::setDiagnosticGroupErrorAsFatal(StringRef Group,
bool Enabled) {
// If we are enabling this feature, just set the diagnostic mappings to map to