diff --git a/src/kaleidoscope_internal/compiler_warnings.h b/src/kaleidoscope_internal/compiler_warnings.h
new file mode 100644
index 00000000..526abaee
--- /dev/null
+++ b/src/kaleidoscope_internal/compiler_warnings.h
@@ -0,0 +1,56 @@
+/* Kaleidoscope - Firmware for computer input devices
+ * Copyright (C) 2013-2018 Keyboard.io, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, version 3.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see .
+ */
+
+#pragma once
+
+// Please note that due to a bug in older gcc versions the following
+// warning suppressions mechanism does not work for gcc versions below 6.1.
+
+//******************************************************************************
+// Start for internal use only
+//******************************************************************************
+#define _GCC_DIAG_STR(s) #s
+#define _GCC_DIAG_JOINSTR(x,y) _GCC_DIAG_STR(x ## y)
+#define _GCC_DIAG_DO_PRAGMA(x) _Pragma (#x)
+#define _GCC_DIAG_PRAGMA(x) _GCC_DIAG_DO_PRAGMA(GCC diagnostic x)
+//******************************************************************************
+// End for internal use only
+//******************************************************************************
+
+//******************************************************************************
+// Use the following macros to temporarily silence compiler diagnostics (warnings).
+// This enables suppress only those compiler warnings that are safe to
+// silence without using global flags as -Wno...
+//
+// Use e.g. as
+//
+#if 0 // Not part of the example
+
+// Suppress Warnings for unused variables
+COMPILER_DIAG_OFF(unused - variable)
+
+// Place code here that generates unavoidable unused variables
+
+COMPILER_DIAG_ON(unused - variable)
+// From this point onward, the compiler continues to warn for
+// unused variables.
+
+#endif // Not part of the example
+
+//******************************************************************************
+#define COMPILER_DIAG_OFF(x) _GCC_DIAG_PRAGMA(push) __NL__ \
+ _GCC_DIAG_PRAGMA(ignored _GCC_DIAG_JOINSTR(-W,x))
+#define COMPILER_DIAG_ON(x) _GCC_DIAG_PRAGMA(pop)
diff --git a/src/kaleidoscope_internal/eventhandler_signature_check.h b/src/kaleidoscope_internal/eventhandler_signature_check.h
index 661e2c9f..4cc7e24b 100644
--- a/src/kaleidoscope_internal/eventhandler_signature_check.h
+++ b/src/kaleidoscope_internal/eventhandler_signature_check.h
@@ -19,7 +19,6 @@
#include "kaleidoscope/macro_helpers.h"
#include "kaleidoscope/plugin.h"
-
// *************************************************************************
// *************************************************************************
// NOTHING IN THIS HEADER WILL RESULT IN ANY CODE COMPILED INTO KALEIDOSCOPE
@@ -135,6 +134,7 @@ template struct
/* type of a plugin that implements an event handler with an */ __NL__ \
/* incorrect signature, because it's not possible to include any */ __NL__ \
/* non-literal string constant in a static_assert error message. */ __NL__ \
- constexpr bool dummy = ___________Culprit_Plugin___________ __NL__ \
+ __attribute__((unused)) constexpr bool dummy __NL__ \
+ = ___________Culprit_Plugin___________ __NL__ \
::value; __NL__ \
}