diff options
Diffstat (limited to 'compilerplugins/clang')
-rw-r--r-- | compilerplugins/clang/pluginhandler.cxx | 5 | ||||
-rw-r--r-- | compilerplugins/clang/pluginhandler.hxx | 1 |
2 files changed, 5 insertions, 1 deletions
diff --git a/compilerplugins/clang/pluginhandler.cxx b/compilerplugins/clang/pluginhandler.cxx index 32651e18a5d0..bdee467fa82f 100644 --- a/compilerplugins/clang/pluginhandler.cxx +++ b/compilerplugins/clang/pluginhandler.cxx @@ -55,6 +55,7 @@ PluginHandler::PluginHandler( CompilerInstance& compiler, const vector< string > : compiler( compiler ) , rewriter( compiler.getSourceManager(), compiler.getLangOpts()) , scope( "mainfile" ) + , warningsAsErrors( false ) { set< string > rewriters; for( vector< string >::const_iterator it = args.begin(); @@ -101,6 +102,8 @@ void PluginHandler::handleOption( const string& option ) { warningsOnly = option.substr(14); } + else if( option == "warnings-as-errors" ) + warningsAsErrors = true; else report( DiagnosticsEngine::Fatal, "unknown option %0" ) << option; } @@ -137,7 +140,7 @@ DiagnosticBuilder PluginHandler::report( DiagnosticsEngine::Level level, const c { DiagnosticsEngine& diag = compiler.getDiagnostics(); // Do some mappings (e.g. for -Werror) that clang does not do for custom messages for some reason. - if( level == DiagnosticsEngine::Warning && diag.getWarningsAsErrors() && (plugin == nullptr || plugin != warningsOnly)) + if( level == DiagnosticsEngine::Warning && ((diag.getWarningsAsErrors() && (plugin == nullptr || plugin != warningsOnly)) || warningsAsErrors)) level = DiagnosticsEngine::Error; if( level == DiagnosticsEngine::Error && diag.getErrorsAsFatal()) level = DiagnosticsEngine::Fatal; diff --git a/compilerplugins/clang/pluginhandler.hxx b/compilerplugins/clang/pluginhandler.hxx index 3992a70a2402..f0cece4deb8c 100644 --- a/compilerplugins/clang/pluginhandler.hxx +++ b/compilerplugins/clang/pluginhandler.hxx @@ -45,6 +45,7 @@ class PluginHandler set< SourceLocation > removals; string scope; string warningsOnly; + bool warningsAsErrors; }; /** |