diff options
-rw-r--r-- | compilerplugins/clang/pluginhandler.cxx | 5 | ||||
-rw-r--r-- | compilerplugins/clang/pluginhandler.hxx | 1 | ||||
-rw-r--r-- | solenv/gbuild/LinkTarget.mk | 2 | ||||
-rw-r--r-- | solenv/gbuild/platform/com_GCC_class.mk | 10 | ||||
-rw-r--r-- | solenv/gbuild/platform/com_GCC_defs.mk | 3 |
5 files changed, 15 insertions, 6 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; }; /** diff --git a/solenv/gbuild/LinkTarget.mk b/solenv/gbuild/LinkTarget.mk index 7f24a57f58ad..b00b3005091e 100644 --- a/solenv/gbuild/LinkTarget.mk +++ b/solenv/gbuild/LinkTarget.mk @@ -611,6 +611,7 @@ $(call gb_LinkTarget_get_target,$(1)) : EXTRAOBJECTLISTS := $(call gb_LinkTarget_get_target,$(1)) : NATIVERES := $(call gb_LinkTarget_get_target,$(1)) : VISIBILITY := $(call gb_LinkTarget_get_target,$(1)) : WARNINGS_NOT_ERRORS := +$(call gb_LinkTarget_get_target,$(1)) : PLUGIN_WARNINGS_AS_ERRORS := $(call gb_LinkTarget_get_target,$(1)) : EXTERNAL_CODE := $(call gb_LinkTarget_get_target,$(1)) : SOVERSIONSCRIPT := @@ -1067,6 +1068,7 @@ endef define gb_LinkTarget_add_grammar $(call gb_YaccTarget_YaccTarget,$(2)) $(call gb_LinkTarget_add_generated_exception_object,$(1),YaccTarget/$(2),$(3),$(if $(filter GCC,$(COM)),-Wno-unused-macros)) +$(call gb_GenCxxObject_get_target,YaccTarget/$(2)): PLUGIN_WARNINGS_AS_ERRORS := $(true) $(call gb_LinkTarget_get_clean_target,$(1)) : $(call gb_YaccTarget_get_clean_target,$(2)) $(call gb_LinkTarget_get_headers_target,$(1)) : $(call gb_YaccTarget_get_header_target,$(2)) $(call gb_LinkTarget__add_include,$(1),$(dir $(call gb_YaccTarget_get_header_target,$(2)))) diff --git a/solenv/gbuild/platform/com_GCC_class.mk b/solenv/gbuild/platform/com_GCC_class.mk index 099c5d385fbe..8c32795f2db9 100644 --- a/solenv/gbuild/platform/com_GCC_class.mk +++ b/solenv/gbuild/platform/com_GCC_class.mk @@ -51,7 +51,7 @@ $(call gb_Helper_abbreviate_dirs,\ $(DEFS) \ $(gb_LTOFLAGS) \ $(if $(VISIBILITY),,$(gb_VISIBILITY_FLAGS)) \ - $(if $(WARNINGS_NOT_ERRORS),,$(gb_CFLAGS_WERROR)) \ + $(if $(WARNINGS_NOT_ERRORS),$(if $(ENABLE_WERROR),$(if $(PLUGIN_WARNINGS_AS_ERRORS),$(gb_COMPILER_PLUGINS_WARNINGS_AS_ERRORS))),$(gb_CFLAGS_WERROR)) \ $(if $(5),$(gb_COMPILER_PLUGINS)) \ $(2) \ $(if $(EXTERNAL_CODE),$(gb_CXXFLAGS_Wundef),$(gb_DEFS_INTERNAL)) \ @@ -75,7 +75,7 @@ $(call gb_Helper_abbreviate_dirs,\ $(DEFS) \ $(gb_LTOFLAGS) \ $(if $(VISIBILITY),,$(gb_VISIBILITY_FLAGS)) \ - $(if $(WARNINGS_NOT_ERRORS),,$(gb_CFLAGS_WERROR)) \ + $(if $(WARNINGS_NOT_ERRORS),$(if $(ENABLE_WERROR),$(if $(PLUGIN_WARNINGS_AS_ERRORS),$(gb_COMPILER_PLUGINS_WARNINGS_AS_ERRORS))),$(gb_CFLAGS_WERROR)) \ $(gb_COMPILER_PLUGINS) \ $(T_CFLAGS) $(T_CFLAGS_APPEND) \ $(if $(EXTERNAL_CODE),$(gb_CXXFLAGS_Wundef),$(gb_DEFS_INTERNAL)) \ @@ -92,7 +92,7 @@ $(call gb_Helper_abbreviate_dirs,\ $(DEFS) \ $(gb_LTOFLAGS) \ $(if $(VISIBILITY),,$(gb_VISIBILITY_FLAGS)) \ - $(if $(WARNINGS_NOT_ERRORS),,$(gb_CFLAGS_WERROR)) \ + $(if $(WARNINGS_NOT_ERRORS),$(if $(ENABLE_WERROR),$(if $(PLUGIN_WARNINGS_AS_ERRORS),$(gb_COMPILER_PLUGINS_WARNINGS_AS_ERRORS))),$(gb_CFLAGS_WERROR)) \ $(gb_COMPILER_PLUGINS) \ $(T_OBJCFLAGS) $(T_OBJCFLAGS_APPEND) \ $(if $(EXTERNAL_CODE),$(gb_CXXFLAGS_Wundef),$(gb_DEFS_INTERNAL)) \ @@ -112,7 +112,7 @@ $(call gb_Helper_abbreviate_dirs,\ $(DEFS) \ $(gb_LTOFLAGS) \ $(if $(VISIBILITY),,$(gb_VISIBILITY_FLAGS)) \ - $(if $(WARNINGS_NOT_ERRORS),,$(gb_CFLAGS_WERROR)) \ + $(if $(WARNINGS_NOT_ERRORS),$(if $(ENABLE_WERROR),$(if $(PLUGIN_WARNINGS_AS_ERRORS),$(gb_COMPILER_PLUGINS_WARNINGS_AS_ERRORS))),$(gb_CFLAGS_WERROR)) \ $(gb_COMPILER_PLUGINS) \ $(T_CXXFLAGS) $(T_CXXFLAGS_APPEND) \ $(if $(EXTERNAL_CODE),$(gb_CXXFLAGS_Wundef),$(gb_DEFS_INTERNAL)) \ @@ -129,7 +129,7 @@ $(call gb_Helper_abbreviate_dirs,\ $(DEFS) \ $(gb_LTOFLAGS) \ $(if $(VISIBILITY),,$(gb_VISIBILITY_FLAGS)) \ - $(if $(WARNINGS_NOT_ERRORS),,$(gb_CFLAGS_WERROR)) \ + $(if $(WARNINGS_NOT_ERRORS),$(if $(ENABLE_WERROR),$(if $(PLUGIN_WARNINGS_AS_ERRORS),$(gb_COMPILER_PLUGINS_WARNINGS_AS_ERRORS))),$(gb_CFLAGS_WERROR)) \ $(gb_COMPILER_PLUGINS) \ $(T_OBJCXXFLAGS) $(T_OBJCXXFLAGS_APPEND) \ $(if $(EXTERNAL_CODE),$(gb_CXXFLAGS_Wundef),$(gb_DEFS_INTERNAL)) \ diff --git a/solenv/gbuild/platform/com_GCC_defs.mk b/solenv/gbuild/platform/com_GCC_defs.mk index f23705b3561a..7e30ed1a7af8 100644 --- a/solenv/gbuild/platform/com_GCC_defs.mk +++ b/solenv/gbuild/platform/com_GCC_defs.mk @@ -216,9 +216,12 @@ endif endif # extra EF variable to make the command line shorter (just like is done with $(SRCDIR) etc.) gb_COMPILER_PLUGINS_SETUP := EF=$(SRCDIR)/include/sal/log-areas.dox && ICECC_EXTRAFILES=$$EF CCACHE_EXTRAFILES=$$EF +gb_COMPILER_PLUGINS_WARNINGS_AS_ERRORS := \ + -Xclang -plugin-arg-loplugin -Xclang --warnings-as-errors else gb_COMPILER_PLUGINS := gb_COMPILER_PLUGINS_SETUP := +gb_COMPILER_PLUGINS_WARNINGS_AS_ERRORS := endif # Executable class |